HTML Builder
by alvaroveliz
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">
<div class="container-fluid">
<div class="row">
<div class="col-xs-6">
<div id="internal-iframe">
<div class="tpl-container">
<div class="tpl-element tpl-title">
Drag and drop
</div>
</div>
</div>
</div>
<div class="col-xs-6">
<nav class="nav nav-fixed">
<div class="btn-group btn-block">
<button class="btn btn-default active col-xs-6" type="button">Contenido</button>
<button class="btn btn-default col-xs-6" type="button">Diseño</button>
</div>
</nav>
<hr>
<div class="row" id="blocks">
<div class="col-xs-3 tool-block" data-template="<div class='tpl-text'>Edit this text....</div>">
<span class="tool-block-icon"></span>
<span class="tool-block-title">Texto</span>
</div>
<div class="col-xs-3 tool-block" data-template="<div class='tpl-text-box'>Edit this text....</div>">
<span class="tool-block-icon"></span>
<span class="tool-block-title">Texto con borde</span>
</div>
<div class="col-xs-3 tool-block" data-template="<div class='tpl-divider'><hr></div>">
<span class="tool-block-icon"></span>
<span class="tool-block-title">Divisor</span>
</div>
<div class="col-xs-3 tool-block" data-template="<div class='tpl-image'><img src='http://placehold.it/200x100'><br><span class='text-muted'>Drop or upload an image here…</span></div>">
<span class="tool-block-icon"></span>
<span...
SCSS
#internal-iframe {
background: #F9F9F9;
margin: 2px;
height: 100vh;
padding: 20px;
.tpl-container {
height: 100vh;
&.over {
border: 2px solid #66B3F6;
}
}
.tpl-new-block {
background: #66B3F6;
color: #FFF;
font-weight: bold;
padding: 20px;
text-align: center;
}
}
.tool-block {
border: 1px solid #EEE;
height: 120px;
padding: 10px;
margin: 10px;
position: relative;
background: #FEFEFE;
box-shadow: 0 1px 1px #DDD;
&:hover {
box-shadow: 0 1px 4px #CCC;
}
.tool-block-title {
position: absolute;
bottom: 0;
text-align: center;
display: block;
width: 80%;
padding: 10px;
font-size: 10px;
font-weight: bold;
}
}
.tpl-title {
color: #DDD;
}
.tpl-text {
padding: 10px;
}
.tpl-text-box {
background: #DDD;
color: #000;
padding: 10px;
text-align:center;
}
.tpl-divider {
hr {
border: 1px solid #CCC;
}
}
.tpl-image {
padding: 10px;
text-align: center;
}
.tpl-element {
position: relative;
.tpl-toolbar {
display: none;
}
&:hover {
border: 2px solid #444;
.tpl-toolbar {
display: inherit;
background: rgba(0, 0, 0, 0.5);
height: 35px;
position: absolute;
width: 100%;
.btn {
color: #FFF;
}
}
}
}
JavaScript
$('#blocks').find('.tool-block').draggable({
helper: 'clone'
})
$('#internal-iframe').droppable({
accept: '.tool-block',
over: function(event, ui) {
$('.tpl-container').addClass('over');
$('.tpl-container').append('<div class="tpl-new-block">Drop block here</div>');
},
drop: function(event, ui) {
$('.tpl-container').removeClass('over');
$('.tpl-new-block').remove();
$element = '<div class="tpl-element"><div class="tpl-toolbar"><a class="btn btn-link pull-right"><i class="fa fa-pencil"></i></a><a class="btn btn-link pull-right"><i class="fa fa-clone"></i></a><a class="btn btn-link pull-right"><i class="fa fa-remove"></i></a></div>'+$(ui.draggable).data('template')+'</div>';
$('.tpl-container').append($element);
}
});