Advertisement
b4lduin

design manager js

Jun 7th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //make the template droppable and check on drop if the dropped object has enough space
  2. jQuery('.template_structure td:not(.structure_td)').droppable(
  3. {
  4.     accept: ".place_box_drag, .module_drag, .place_drag, .pic_slide_drag, .prod_slide_drag",    //accept object with these classes
  5.     tolerance: "pointer",                                                                       //setting that the objects should be dropped where the pointer is
  6.     drop: function(event, ui)                                                                   //check the object
  7.     {
  8.         //setting up needed variables
  9.         var allowed_size    = jQuery(this).attr('colspan');
  10.         var sizes           = new String(ui.draggable.data('sizes'));
  11.         var drop_ok         = false;
  12.         var module_id       = ui.draggable.data('id');
  13.         var dropped_realm   = jQuery(this);
  14.         var used_space      = calculateUsedSpace(dropped_realm);
  15.         var used_size       = 0;
  16.         var mod_no_change   = false;
  17.        
  18.         //check if the order has changed
  19.         jQuery(dropped_realm).children().each(function(index,element)
  20.         {
  21.             element = jQuery(element);
  22.            
  23.             if(element.data('id') == module_id)
  24.             {
  25.                 mod_no_change = true;
  26.             }
  27.         });
  28.        
  29.         //skipp all checks when the order has only changed
  30.         if(mod_no_change)
  31.         {
  32.            
  33.             ui.draggable.clone().removeAttr('style').appendTo(this);
  34.             ui.draggable.remove();
  35.  
  36.             makeDraggable();
  37.  
  38.             templateSave('temp');
  39.         }
  40.         else
  41.         {
  42.             sizes = sizes.split('|');
  43.            
  44.             //in the sidebars are more than one module with the size one allowed because they are arranged vertically
  45.             if(this.id != 'sidebar_1' && this.id != 'sidebar_2')
  46.             {
  47.                 sizes = jQuery.grep(sizes, function(value)
  48.                 {
  49.                     return value <= allowed_size;
  50.                 });
  51.  
  52.                 if(used_space == 0)
  53.                 {
  54.                     //use the max space if the realm is empty
  55.                     used_size = Math.max.apply(Math, sizes);
  56.                 }
  57.                 else if(used_space >= allowed_size)
  58.                 {
  59.                     jQuery('#position_error').html("Dieser Bereich ist voll!").dialog('open');
  60.                     return false;
  61.                 }
  62.                 else
  63.                 {
  64.                     //filter all sizes which are with the used size greater as the realm
  65.                     sizes = jQuery.grep(sizes, function(value)
  66.  
  67.                             {
  68.                         //parse to int because variables are normally only concatinated
  69.                         var calc_value = parseInt(value)+parseInt(used_space);
  70.                        
  71.                         return calc_value <= allowed_size;
  72.                     });
  73.                    
  74.                     //use the max size which is still available
  75.                     used_size = Math.max.apply(Math, sizes);
  76.                 }
  77.             }
  78.             else
  79.             {
  80.                 used_size = 1;
  81.             }
  82.            
  83.             //exception for the categories beacause categories are only allowed in exact size matches
  84.             if(module_id == 1)
  85.             {
  86.                 var cat_allowed = 0;
  87.                
  88.                 //check the realm
  89.                 if(this.id == 'sidebar_1' || this.id == 'sidebar_2')
  90.                 {
  91.                     cat_allowed = 1;
  92.                 }
  93.                 else
  94.                 {
  95.                     cat_allowed = jQuery('#template_columns').val();
  96.                 }
  97.                
  98.                 //check the module size
  99.                 jQuery.each(sizes, function(index, element)
  100.                 {
  101.                     if(element == cat_allowed && allowed_size == cat_allowed)
  102.                     {
  103.                         drop_ok = true;
  104.                         return false;
  105.                     }
  106.                 });
  107.  
  108.                 if(drop_ok)
  109.                 {
  110.                     ui.draggable.clone().data('usedSize', used_size).attr('data-used-size', used_size).removeAttr('style').appendTo(this);
  111.                     ui.draggable.remove();
  112.  
  113.                     makeDraggable();
  114.  
  115.                     templateSave('temp');
  116.                 }
  117.                 else
  118.                 {
  119.                     jQuery('#position_error').html("Die Kategorien dürfen nur in eine Sidebar, oder in einen leeren Bereich, der über die ganze Breite geht, gelegt werden.").dialog('open');
  120.                     return false;
  121.                 }
  122.             }
  123.             else
  124.             {
  125.                 jQuery.each(sizes, function(index, element)
  126.                 {
  127.  
  128.                     if(element <= allowed_size)
  129.                     {
  130.                         drop_ok = true;
  131.                         return false;
  132.                     }
  133.                 });
  134.  
  135.                 if(drop_ok)
  136.                 {
  137.                     ui.draggable.clone().data('usedSize', used_size).attr('data-used-size', used_size).removeAttr('style').appendTo(this);
  138.                     ui.draggable.remove();
  139.  
  140.                     makeDraggable();
  141.  
  142.                     templateSave('temp');
  143.                 }
  144.                 else
  145.                 {
  146.                     jQuery('#position_error').html("Das Modul passt nicht in den gewünschten Bereich.").dialog('open');
  147.                     return false;
  148.                 }
  149.             }
  150.         }
  151.     }
  152. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement