<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<script src='https://cdnjs.cloudflare.com/ajax/libs/mithril/0.2.5/mithril.min.js'></script>
</head>
<body>
<div id='app'></div>
<style type='text/css'>
ul {
padding: 50px;
background-color: grey;
}
</style>
</body>
</html>
var controller = function (args) {
var ctrl = this
this.groups = m.prop([
{
name: 'Group A',
dragOver: false,
items: ['Draggable One', 'Draggable Two']
},
{
name: 'Group B',
dragOver: false,
items: []
}
])
this.dragging = m.prop({})
this.handleDragEnter = function (groupIdx) {
ctrl.groups()[groupIdx].dragOver = true
}
this.handleDragLeave = function (groupIdx) {
ctrl.groups()[groupIdx].dragOver = false
}
this.handleDrop = function (toGroupIdx) {
var groupIdx = ctrl.dragging().groupIdx
var itemIdx = ctrl.dragging().itemIdx
var dropped = ctrl.groups()[groupIdx].items.splice(itemIdx, 1)[0]
ctrl.groups()[toGroupIdx].items.push(dropped)
ctrl.groups()[toGroupIdx].dragOver = false
ctrl.dragging(null)
}
this.handleDragStart = function (data) {
ctrl.dragging(data)
}
}
var view = function (ctrl, args) {
return m('.all-groups', ctrl.groups().map(function (group, groupIdx) {
return m('.group',[
m('.header', group.name),
m('ul', {
style: {
background: (
group.dragOver ?
'blue'
: ''
)
},
ondragenter: function () {
if (ctrl.dragging().groupIdx !== groupIdx) {
ctrl.handleDragEnter(groupIdx)
}
},
ondragleave: function () {
ctrl.handleDragLeave(groupIdx)
},
ondragover: function (e) {
e.preventDefault()
},
ondrop: function () {
ctrl.handleDrop(groupIdx)
}
}, group.items.map(function (name, itemIdx) {
return m('li', {
draggable: true,
group: groupIdx,
item: itemIdx,
ondragstart: function () {
ctrl.handleDragStart({
groupIdx: groupIdx,
itemIdx: itemIdx
})
}
}, name)
}))
])
}))
}
m.mount(document.getElementById('app'), {
controller: controller,
view: view
})
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |