JSFiddle - React, Tailwind, and code Playground

by mecano

HTML

<div id="menu">
  <div id="modules">
    <div id="mod01"><img src="http://zupimages.net/up/17/32/bgot.jpg" width="120" height="80"></div>
    <div id="mod02"><img src="http://zupimages.net/up/17/32/hffw.jpg" width="120" height="80"></div>
    <div id="mod03"><img src="http://zupimages.net/up/17/32/g790.jpg" width="120" height="80"></div>

    <div id="dropdown" style="display:none;">
      <div class="div_mod" data-type="mod01" data-id="1">
        <img src="http://zupimages.net/up/17/32/bgot.jpg" width="240" height="70">
      </div>
      <div class="div_mod" data-type="mod02" data-id="2">
        <div class="margin-elt float-elt"><img src="http://zupimages.net/up/17/32/bgot.jpg" width="50" height="50"></div>
        <div class="size-paragraphe">Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitem.</div>
      </div>
      <div class="div_mod" data-type="mod03" data-id="3">
        <p class="size-paragraphe margin-elt">Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitems portunum est, ut arbitror.</p>
      </div>
    </div>
  </div>
</div>
<div id="container">
  <div id="bloc_1" style="display:none;">
    <div class="div_mod01 row drag-drop" data-id="1">
      <img src="http://zupimages.net/up/17/32/bgot.jpg" width="240" height="70">
    </div>
    <div class="div_mod02 row drag-drop" data-id="2">
      <div class="margin-elt float-elt"><img src="http://zupimages.net/up/17/32/bgot.jpg" width="50" height="50"></div>
      <div class="size-paragraphe">Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitem.</div>
    </div>
    <div class="div_mod03 row drag-drop" data-id="3">
      <p class="size-paragraphe margin-elt">Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitems portunum est, ut arbitror.</p>
    </div>
  </div>
  <div id="bloc_2">
    <div id="div_1" class="drag-drop" data-id="4">
      <img src="http://zupimages.net/up/17/32/bgot.jpg" width="120"...

CSS

#menu {
  width: 300px;
}

#mod01,
#mod02,
#mod03 {
  width: 120px;
  margin: 0 auto;
}

#container {
  width: 300px;
  margin-left: 20px;
}

#bloc_1,
#bloc_2,
#dropdown {
  padding: 20px;
}

.div_mod01,
.div_mod02,
.div_mod03,
#div_1,
#div_2,
#div_3,
.div_mod {
  border: 1px dashed #000;
  margin: 10px auto;
}

.div_mod03 p {
  text-align: center;
}

.size-paragraphe {
  font-size: 12px;
}

.margin-elt {
  margin-right: 10px;
}

#container,
#menu,
.float-elt {
  float: left;
}

#container,
#menu {
  border: 1px dotted #000;
  margin-bottom: 20px;
}

.add {
  text-align: center;
  cursor: pointer;
  background: #000;
  color: #fff;
  padding: 5px;
}

.add:hover {
  background: green;
  color: #fff;
}

#btn_update {
  clear: both;
  margin: 0 0 0 320px;
}

#update,
#save {
  background: red;
  color: #fff;
  padding: 10px;
  text-align: center;
  cursor: pointer;
}

JavaScript

(function() {
  $("#modules").hover(
    function() {
      $("#dropdown").fadeIn(200);
    },
    function() {
      $("#dropdown").fadeOut(200);
    }
  );
  $("#mod01").hover(function() {
    $(".div_mod[data-type='mod01']").show();
    $(".div_mod[data-type='mod02']").hide();
    $(".div_mod[data-type='mod03']").hide();
  });
  $("#mod02").hover(function() {
    $(".div_mod[data-type='mod01']").hide();
    $(".div_mod[data-type='mod02']").show();
    $(".div_mod[data-type='mod03']").hide();
  });
  $("#mod03").hover(function() {
    $(".div_mod[data-type='mod01']").hide();
    $(".div_mod[data-type='mod02']").hide();
    $(".div_mod[data-type='mod03']").show();
  });
  $(".div_mod").hover(
    function() {
      $(this).append('<div class="add"><i class="fa fa-plus"></i>Insert</div>');
      $('.add').click(function() {
        $("#div_1").prepend($("#bloc_1 .row[data-id='" + $(this).parent().attr("data-id") + "']").clone());
      });
    },
    function() {
      $(this).children(".add").remove();
    }
  );
  // draggable & save module
  $('#btn_update').on('click', '#update', function(e) {
    e.preventDefault();
    $(this).fadeOut('slow', function() {
      $(this).siblings().fadeIn('slow').css("display", "inline-block");
    });
    // ajoute la propriété pour le drop et le transfert de données
    $.event.props.push('dataTransfer');
    $('.drag-drop').attr('draggable', true).css({
      'outline': '1px solid green',
      'width': '260px',
      'height': 'auto',
      'margin-bottom': '5px'
    }).find('*').attr('draggable', false);
    var i, dragged, class_name;
    var traitement = false;
    $('.drag-drop').on({
      dragstart: function(e) {
        if (!traitement) {
          dragged = $(this);
          i = dragged.index();
          class_name = dragged.attr('class');
          dragged.css('opacity', '1');
          e.dataTransfer.setData('text/html', dragged.html());
        }
      },
      dragenter: function(e) {
       ...