DnD editor jQuery UI
by paulftw
HTML
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/ratchet/2.0.2/css/ratchet.css">
<div id=tools>
<div class="tool tool-navbar">header</div>
<div class="tool tool-list">list</div>
</div>
<div id=editor-outer>
<div id=bgimage>
</div>
<div id=editor>
<div class=tmpcontent>drop items here</div>
</div>
</div>
<div id=props></div>
CSS
body, html {
height: 100%;
}
body {
padding-top: 50px;
}
#tools {
border: 1px solid #3c3;
width: 100px;
height: 90%;
margin: 5px;
float: left;
}
.tmpcontent {
text-align: center;
vertical-align: middle;
width: 100%;
top: 50%;
position: absolute;
}
#editor-outer [class*="bar"] {
position: absolute;
}
.screenbody {
margin-top: 43px;
}
#editor-outer {
position: relative;
margin-left: 50px;
top: -70px;
width: 375px;
height: 806px;
display: inline-block;
}
#bgimage {
height: 100%;
width: 100%;
background-image: url("//res.cloudinary.com/hy4kyit2a/image/upload/v1374087256/black-iphone.png.png");
-webkit-filter:opacity(35%);
}
#editor {
position: absolute;
top: 147px;
left: 27px;
width: 320px;
height: 548px;
overflow: hidden;
background-color: white;
}
#editor.droptarget {
border: 2px dashed #585;
}
.tool {
border: 1px dashed #333;
cursor: pointer;
border-radius: 3px;
width: 60px;
margin: 3px;
z-index: 1;
}
JavaScript
$('.tool').draggable({
helper: 'clone',
});
var tools = {
navbar: '<header class="bar-title">\
<h1 class="title">t</h1>\
</header>',
list: '<div class=screenbody>\
<ul class="list">\
<li><a href="#">\
List item 1\
<span class="chevron"></span>\
</a></li>\
<li><a href="#">\
List item 2\
<span class="chevron"></span>\
</a></li>\
<li><a href="#">\
List item 3\
<span class="chevron"></span>\
</a></li>\
</ul>\
</div>',
};
//var editor = $($('#editor').contents().find('body'));
var editor = $('#editor');
var doc = '';
$("#editor").droppable({
accept: ".tool",
activeClass: 'droptarget',
drop: function (e, ui) {
console.log('dropped ', e, ui);
var cls = ui.helper.attr('class');
var item = cls.match(/tool-([a-z]+)/)[1];
doc += tools[item];
editor.html(doc);
},
});