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">
                        <div class="tpl-toolbar"><a class="tpl-toolbar-handle btn btn-link"><i class="fa fa-arrows"></i></a><a class="btn btn-link pull-right"><i class="fa fa-trash"></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-pencil"></i></a></div>
                        <div class="tpl-text">Edit this text....</div>
                    </div>
                    <div class="tpl-element">
                        <div class="tpl-toolbar"><a class="tpl-toolbar-handle btn btn-link"><i class="fa fa-arrows"></i></a><a class="btn btn-link pull-right"><i class="fa fa-trash"></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-pencil"></i></a></div>
                        <div class="tpl-text-box">Edit this text....</div>
                    </div>
                    <div class="tpl-element">
                        <div class="tpl-toolbar"><a class="tpl-toolbar-handle btn btn-link"><i class="fa fa-arrows"></i></a><a class="btn btn-link pull-right"><i class="fa fa-trash"></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-pencil"></i></a></div>
                        <div class="tpl-image"><img src="http://placehold.it/200x100?text=upload+or+drop">
 ...

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-image-group {
   overflow:hidden;
  .tpl-image-group-2 {
    width: 50%;
    float: left;
    text-align:center;
    padding: 10px;
  }
}

.tpl-image-caption {
  text-align:center;
  padding: 10px;
  .tpl-caption {
    background: #444;
    text-align: center;
    color: #FFF;
    padding: 10px;
  }
}

.tpl-share {
  text-align: center;
  a {
    color: #444;
    .fa {
      color: #444;
      padding: 10px;
    }
  }
}

.tpl-button {
  padding: 10px;
  text-align: center;
}

.tpl-footer {
  padding: 10px;
  color: #999;
  font-size: 12px;
}

.tpl-video {
  text-align:center;
  padding: 10px;
  .tpl-caption {
    background: #444;
    text-align: center;
    color: #FFF;
    padding: 10px;
  }
}

.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="tpl-toolbar-handle btn btn-link"><i class="fa fa-arrows"></i></a><a class="btn btn-link pull-right"><i class="fa fa-trash"></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-pencil"></i></a></div>'+$(ui.draggable).data('template')+'</div>';
    
    $('.tpl-container').append($element);
  }
});


$('#internal-iframe').sortable({
	handle: '.tpl-toolbar-handle'
});