new static files.
Signed-off-by: rscnt <rascnt@gmail.com>
This commit is contained in:
		
					parent
					
						
							
								83e792bcaa
							
						
					
				
			
			
				commit
				
					
						fe4f6c97d5
					
				
			
		
					 778 changed files with 71557 additions and 0 deletions
				
			
		
							
								
								
									
										493
									
								
								static/cms/js/modules/cms.structureboard.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										493
									
								
								static/cms/js/modules/cms.structureboard.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,493 @@
 | 
			
		|||
/*##################################################|*/
 | 
			
		||||
/* #CMS# */
 | 
			
		||||
(function($) {
 | 
			
		||||
// CMS.$ will be passed for $
 | 
			
		||||
$(document).ready(function () {
 | 
			
		||||
	/*!
 | 
			
		||||
	 * StructureBoard
 | 
			
		||||
	 * handles drag & drop, mode switching and
 | 
			
		||||
	 */
 | 
			
		||||
	CMS.StructureBoard = new CMS.Class({
 | 
			
		||||
 | 
			
		||||
		implement: [CMS.API.Helpers],
 | 
			
		||||
 | 
			
		||||
		options: {
 | 
			
		||||
			'speed': 300
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		initialize: function (options) {
 | 
			
		||||
			this.container = $('.cms_structure');
 | 
			
		||||
			this.options = $.extend(true, {}, this.options, options);
 | 
			
		||||
			this.config = CMS.config;
 | 
			
		||||
			this.settings = CMS.settings;
 | 
			
		||||
 | 
			
		||||
			// elements
 | 
			
		||||
			this.toolbar = $('#cms_toolbar');
 | 
			
		||||
			this.sortables = $('.cms_draggables'); // use global scope
 | 
			
		||||
			this.plugins = $('.cms_plugin');
 | 
			
		||||
			this.render_model = $('.cms_render_model');
 | 
			
		||||
			this.placeholders = $('.cms_placeholder');
 | 
			
		||||
			this.dragitems = $('.cms_draggable');
 | 
			
		||||
			this.dragareas = $('.cms_dragarea');
 | 
			
		||||
			this.dropareas = $('.cms_droppable');
 | 
			
		||||
			this.dimmer = this.container.find('.cms_structure-dimmer');
 | 
			
		||||
			this.clipboard = $('.cms_clipboard');
 | 
			
		||||
 | 
			
		||||
			// states
 | 
			
		||||
			this.click = (document.ontouchstart !== null) ? 'click.cms' : 'tap.cms click.cms';
 | 
			
		||||
			this.timer = function () {};
 | 
			
		||||
			this.interval = function () {};
 | 
			
		||||
			this.state = false;
 | 
			
		||||
			this.dragging = false;
 | 
			
		||||
 | 
			
		||||
			// setup initial stuff
 | 
			
		||||
			this._setup();
 | 
			
		||||
 | 
			
		||||
			// setup events
 | 
			
		||||
			this._events();
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		// initial methods
 | 
			
		||||
		_setup: function () {
 | 
			
		||||
			var that = this;
 | 
			
		||||
 | 
			
		||||
			// cancel if there are no dragareas
 | 
			
		||||
			if(!this.dragareas.length) return false;
 | 
			
		||||
 | 
			
		||||
			// cancel if there is no structure / content switcher
 | 
			
		||||
			if(!this.toolbar.find('.cms_toolbar-item-cms-mode-switcher').length) return false;
 | 
			
		||||
 | 
			
		||||
			// setup toolbar mode
 | 
			
		||||
			if(this.settings.mode === 'structure') setTimeout(function () { that.show(true); }, 100);
 | 
			
		||||
 | 
			
		||||
			// check if modes should be visible
 | 
			
		||||
			if(this.placeholders.length) {
 | 
			
		||||
				this.toolbar.find('.cms_toolbar-item-cms-mode-switcher').show();
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// add drag & drop functionality
 | 
			
		||||
			this._drag();
 | 
			
		||||
			// prevent click events to detect double click
 | 
			
		||||
			// this.preventEvents(this.plugins);
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		_events: function () {
 | 
			
		||||
			var that = this;
 | 
			
		||||
			var modes = this.toolbar.find('.cms_toolbar-item-cms-mode-switcher a');
 | 
			
		||||
 | 
			
		||||
			// show edit mode
 | 
			
		||||
			modes.eq(1).bind(this.click, function (e) {
 | 
			
		||||
				e.preventDefault();
 | 
			
		||||
				// cancel if already active
 | 
			
		||||
				if(that.settings.mode === 'edit') return false;
 | 
			
		||||
				// otherwise hide
 | 
			
		||||
				that.hide();
 | 
			
		||||
			});
 | 
			
		||||
			// show structure mode
 | 
			
		||||
			modes.eq(0).bind(this.click, function (e) {
 | 
			
		||||
				e.preventDefault();
 | 
			
		||||
				// cancel if already active
 | 
			
		||||
				if(that.settings.mode === 'structure') return false;
 | 
			
		||||
				// otherwise show
 | 
			
		||||
				that.show();
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			// keyboard handling
 | 
			
		||||
			$(document).bind('keydown', function (e) {
 | 
			
		||||
				// check if we have an important focus
 | 
			
		||||
				var fields = $('*:focus');
 | 
			
		||||
				// 32 = space
 | 
			
		||||
				if(e.keyCode === 32 && that.settings.mode === 'structure' && !fields.length) {
 | 
			
		||||
					// cancel if there is no structure / content switcher
 | 
			
		||||
					if(!that.toolbar.find('.cms_toolbar-item-cms-mode-switcher').length) return false;
 | 
			
		||||
					e.preventDefault();
 | 
			
		||||
					that.hide();
 | 
			
		||||
				} else if(e.keyCode === 32 && that.settings.mode === 'edit' && !fields.length) {
 | 
			
		||||
					// cancel if there is no structure / content switcher
 | 
			
		||||
					if(!that.toolbar.find('.cms_toolbar-item-cms-mode-switcher').length) return false;
 | 
			
		||||
					e.preventDefault();
 | 
			
		||||
					that.show();
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		// public methods
 | 
			
		||||
		show: function (init) {
 | 
			
		||||
			// cancel show if live modus is active
 | 
			
		||||
			if(CMS.config.mode === 'live') return false;
 | 
			
		||||
 | 
			
		||||
			// set active item
 | 
			
		||||
			var modes = this.toolbar.find('.cms_toolbar-item-cms-mode-switcher a');
 | 
			
		||||
				modes.removeClass('cms_btn-active').eq(0).addClass('cms_btn-active');
 | 
			
		||||
 | 
			
		||||
			// show clipboard
 | 
			
		||||
			this.clipboard.css('opacity', 1).fadeIn(this.options.speed);
 | 
			
		||||
 | 
			
		||||
			// apply new settings
 | 
			
		||||
			this.settings.mode = 'structure';
 | 
			
		||||
			if(!init) this.settings = this.setSettings(this.settings);
 | 
			
		||||
 | 
			
		||||
			// ensure all elements are visible
 | 
			
		||||
			this.dragareas.show();
 | 
			
		||||
 | 
			
		||||
			// show canvas
 | 
			
		||||
			this._showBoard();
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		hide: function (init) {
 | 
			
		||||
			// cancel show if live modus is active
 | 
			
		||||
			if(CMS.config.mode === 'live') return false;
 | 
			
		||||
 | 
			
		||||
			// set active item
 | 
			
		||||
			var modes = this.toolbar.find('.cms_toolbar-item-cms-mode-switcher a');
 | 
			
		||||
				modes.removeClass('cms_btn-active').eq(1).addClass('cms_btn-active');
 | 
			
		||||
 | 
			
		||||
			// hide clipboard if in edit mode
 | 
			
		||||
			this.container.find('.cms_clipboard').hide();
 | 
			
		||||
 | 
			
		||||
			// hide clipboard
 | 
			
		||||
			this.clipboard.hide();
 | 
			
		||||
 | 
			
		||||
			this.settings.mode = 'edit';
 | 
			
		||||
			if(!init) this.settings = this.setSettings(this.settings);
 | 
			
		||||
 | 
			
		||||
			// hide canvas
 | 
			
		||||
			this._hideBoard();
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		getId: function (el) {
 | 
			
		||||
			// cancel if no element is defined
 | 
			
		||||
			if(el === undefined || el === null || el.length <= 0) return false;
 | 
			
		||||
 | 
			
		||||
			var id = null;
 | 
			
		||||
			var cls = el.attr('class').split(' ')[1];
 | 
			
		||||
 | 
			
		||||
			if(el.hasClass('cms_plugin')) {
 | 
			
		||||
				id = cls.replace('cms_plugin-', '');
 | 
			
		||||
			} else if(el.hasClass('cms_draggable')) {
 | 
			
		||||
				id = cls.replace('cms_draggable-', '');
 | 
			
		||||
			} else if(el.hasClass('cms_placeholder')) {
 | 
			
		||||
				id = cls.replace('cms_placeholder-', '');
 | 
			
		||||
			} else if(el.hasClass('cms_dragbar')) {
 | 
			
		||||
				id = cls.replace('cms_dragbar-', '');
 | 
			
		||||
			} else if(el.hasClass('cms_dragarea')) {
 | 
			
		||||
				id = cls.replace('cms_dragarea-', '');
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return id;
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		getIds: function (els) {
 | 
			
		||||
			var that = this;
 | 
			
		||||
			var array = [];
 | 
			
		||||
			els.each(function () {
 | 
			
		||||
				array.push(that.getId($(this)));
 | 
			
		||||
			});
 | 
			
		||||
			return array;
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		setActive: function (id, state) {
 | 
			
		||||
			var that = this;
 | 
			
		||||
			// resets
 | 
			
		||||
			this.dragitems.removeClass('cms_draggable-selected');
 | 
			
		||||
			this.plugins.removeClass('cms_plugin-active');
 | 
			
		||||
 | 
			
		||||
			// only reset if no id is provided
 | 
			
		||||
			if(id === false) return false;
 | 
			
		||||
 | 
			
		||||
			// attach active class to current element
 | 
			
		||||
			var dragitem = $('.cms_draggable-' + id);
 | 
			
		||||
			var plugin = $('.cms_plugin-' + id);
 | 
			
		||||
 | 
			
		||||
			// if we switch from content to edit, show only a single plcaeholder
 | 
			
		||||
			if(state) {
 | 
			
		||||
				// quick show
 | 
			
		||||
				this._showBoard();
 | 
			
		||||
 | 
			
		||||
				// show clipboard
 | 
			
		||||
				this.clipboard.show().css('opacity', 0.2);
 | 
			
		||||
 | 
			
		||||
				// prevent default visibility
 | 
			
		||||
				this.dragareas.css('opacity', 0.2);
 | 
			
		||||
 | 
			
		||||
				// show single placeholder
 | 
			
		||||
				dragitem.closest('.cms_dragarea').show().css('opacity', 1);
 | 
			
		||||
 | 
			
		||||
			// otherwise hide and reset the board
 | 
			
		||||
			} else {
 | 
			
		||||
				this.hide();
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// collapse all previous elements
 | 
			
		||||
			var collapsed = dragitem.parentsUntil('.cms_dragarea').siblings().not('.cms_dragitem-expanded');
 | 
			
		||||
				collapsed.trigger(this.click);
 | 
			
		||||
 | 
			
		||||
			// set new classes
 | 
			
		||||
			dragitem.addClass('cms_draggable-selected');
 | 
			
		||||
			plugin.addClass('cms_plugin-active');
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		preventEvents: function (elements) {
 | 
			
		||||
			var clicks = 0;
 | 
			
		||||
			var delay = 500;
 | 
			
		||||
			var timer = function () {};
 | 
			
		||||
 | 
			
		||||
			// unbind click event if already initialized
 | 
			
		||||
			elements.find('a').bind(this.click, function (e) {
 | 
			
		||||
				e.preventDefault();
 | 
			
		||||
 | 
			
		||||
				// increment
 | 
			
		||||
				clicks++;
 | 
			
		||||
 | 
			
		||||
				// single click
 | 
			
		||||
				if(clicks === 1) {
 | 
			
		||||
					timer = setTimeout(function () {
 | 
			
		||||
						clicks = 0;
 | 
			
		||||
						// cancel if link contains a hash
 | 
			
		||||
						if($(e.currentTarget).attr('href').indexOf('#') === 0) return false;
 | 
			
		||||
						// we need to redirect to the default behaviours
 | 
			
		||||
						// all events will be lost in edit mode, use '#' if href should not be triggered
 | 
			
		||||
						window.location.href = $(e.currentTarget).attr('href');
 | 
			
		||||
					}, delay);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// double click
 | 
			
		||||
				if(clicks === 2) {
 | 
			
		||||
					clearTimeout(timer);
 | 
			
		||||
					clicks = 0;
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		// private methods
 | 
			
		||||
		_showBoard: function () {
 | 
			
		||||
			var that = this;
 | 
			
		||||
			var timer = function () {};
 | 
			
		||||
 | 
			
		||||
			// show container
 | 
			
		||||
			this.container.show();
 | 
			
		||||
			this.dimmer.fadeIn(100);
 | 
			
		||||
			this.dragareas.css('opacity', 1);
 | 
			
		||||
 | 
			
		||||
			// add dimmer close
 | 
			
		||||
			this.dimmer.bind('mousedown mouseup', function (e) {
 | 
			
		||||
				// cancel on rightclick
 | 
			
		||||
				if(e.which === 3 || e.button === 2) return false;
 | 
			
		||||
				// proceed
 | 
			
		||||
				clearTimeout(timer);
 | 
			
		||||
				timer = setTimeout(function () {
 | 
			
		||||
					that.hide();
 | 
			
		||||
				}, 500);
 | 
			
		||||
 | 
			
		||||
				if(e.type === 'mouseup') clearTimeout(timer);
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			this.plugins.not(this.render_model).hide();
 | 
			
		||||
			this.placeholders.show();
 | 
			
		||||
 | 
			
		||||
			// attach event
 | 
			
		||||
			$(window).bind('resize.sideframe', function () {
 | 
			
		||||
				that._resizeBoard();
 | 
			
		||||
			}).trigger('resize.sideframe');
 | 
			
		||||
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		_hideBoard: function () {
 | 
			
		||||
			// hide elements
 | 
			
		||||
			this.container.hide();
 | 
			
		||||
			this.plugins.show();
 | 
			
		||||
			this.placeholders.hide();
 | 
			
		||||
			this.dimmer.hide();
 | 
			
		||||
 | 
			
		||||
			// detach event
 | 
			
		||||
			$(window).unbind('resize.sideframe');
 | 
			
		||||
 | 
			
		||||
			// clear interval
 | 
			
		||||
			clearInterval(this.interval);
 | 
			
		||||
 | 
			
		||||
			$(window).trigger('structureboard_hidden.sideframe');
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		_resizeBoard: function () {
 | 
			
		||||
			// calculate placeholder position
 | 
			
		||||
			var id = null;
 | 
			
		||||
			var area = null;
 | 
			
		||||
			var min = null;
 | 
			
		||||
			var areaParentOffset = null;
 | 
			
		||||
 | 
			
		||||
			// start calculating
 | 
			
		||||
			this.placeholders.each(function (index, item) {
 | 
			
		||||
				item = $(item);
 | 
			
		||||
				id = item.data('settings').placeholder_id;
 | 
			
		||||
				area = $('.cms_dragarea-' + id);
 | 
			
		||||
				// to calculate the correct offset, we need to set the
 | 
			
		||||
				// placeholders correct heights and than set the according position
 | 
			
		||||
				item.height(area.outerHeight(true));
 | 
			
		||||
				// set min width
 | 
			
		||||
				min = (item.width()) ? 0 : 150;
 | 
			
		||||
				// as area is "css positioned" and jquery offset function is relative to the
 | 
			
		||||
				// document (not the first relative/absolute parent) we need to substract
 | 
			
		||||
				// first relative/absolute parent offset.
 | 
			
		||||
				areaParentOffset = $(area).offsetParent().offset();
 | 
			
		||||
				area.css({
 | 
			
		||||
					'top': item.offset().top - areaParentOffset.top - 5,
 | 
			
		||||
					'left': item.offset().left - areaParentOffset.left - min,
 | 
			
		||||
					'width': item.width() + min
 | 
			
		||||
				});
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		_drag: function () {
 | 
			
		||||
			var that = this;
 | 
			
		||||
			var dropped = false;
 | 
			
		||||
			var droparea = null;
 | 
			
		||||
			var dropzone = null;
 | 
			
		||||
 | 
			
		||||
			this.sortables.nestedSortable({
 | 
			
		||||
				'items': '.cms_draggable',
 | 
			
		||||
				'handle': '.cms_dragitem',
 | 
			
		||||
				'placeholder': 'cms_droppable',
 | 
			
		||||
				'connectWith': this.sortables,
 | 
			
		||||
				'tolerance': 'pointer',
 | 
			
		||||
				'toleranceElement': '> div',
 | 
			
		||||
				'dropOnEmpty': true,
 | 
			
		||||
				'forcePlaceholderSize': true,
 | 
			
		||||
				'helper': 'clone',
 | 
			
		||||
				'appendTo': 'body',
 | 
			
		||||
				'cursor': 'move',
 | 
			
		||||
				'opacity': 0.4,
 | 
			
		||||
				'zIndex': 9999999,
 | 
			
		||||
				'delay': 100,
 | 
			
		||||
				'refreshPositions': true,
 | 
			
		||||
				// nestedSortable
 | 
			
		||||
				'listType': 'div.cms_draggables',
 | 
			
		||||
				'doNotClear': true,
 | 
			
		||||
				//'disableNestingClass': 'cms_draggable-disabled',
 | 
			
		||||
				//'errorClass': 'cms_draggable-disallowed',
 | 
			
		||||
				//'hoveringClass': 'cms_draggable-hover',
 | 
			
		||||
				// methods
 | 
			
		||||
				'start': function (e, ui) {
 | 
			
		||||
					that.dragging = true;
 | 
			
		||||
					// show empty
 | 
			
		||||
					$('.cms_dragbar-empty-wrapper').show();
 | 
			
		||||
					// ensure all menus are closed
 | 
			
		||||
					$('.cms_dragitem .cms_submenu').hide();
 | 
			
		||||
					// remove classes from empty dropzones
 | 
			
		||||
					$('.cms_dragbar-empty').removeClass('cms_draggable-disallowed');
 | 
			
		||||
					// fixes placeholder height
 | 
			
		||||
					ui.placeholder.height(ui.item.height());
 | 
			
		||||
					// show placeholder without entries
 | 
			
		||||
					$('.cms_draggables').each(function () {
 | 
			
		||||
						if($(this).children().length === 0) {
 | 
			
		||||
							$(this).show();
 | 
			
		||||
						}
 | 
			
		||||
					});
 | 
			
		||||
				},
 | 
			
		||||
 | 
			
		||||
				'stop': function (event, ui) {
 | 
			
		||||
					that.dragging = false;
 | 
			
		||||
					// hide empty
 | 
			
		||||
					$('.cms_dragbar-empty-wrapper').hide();
 | 
			
		||||
 | 
			
		||||
					// cancel if isAllowed returns false
 | 
			
		||||
					if(!that.state) return false;
 | 
			
		||||
 | 
			
		||||
					// handle dropped event
 | 
			
		||||
					if(dropped) {
 | 
			
		||||
						droparea.prepend(ui.item);
 | 
			
		||||
						dropped = false;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					// we pass the id to the updater which checks within the backend the correct place
 | 
			
		||||
					//var id = ui.item.attr('class').replace('cms_draggable cms_draggable-', '');
 | 
			
		||||
					var id = that.getId(ui.item);
 | 
			
		||||
					var plugin = $('.cms_plugin-' + id);
 | 
			
		||||
 | 
			
		||||
					// check if we copy/paste a plugin or not
 | 
			
		||||
					if(plugin.closest('.cms_clipboard').length) {
 | 
			
		||||
						plugin.trigger('cms.plugin.update');
 | 
			
		||||
					} else {
 | 
			
		||||
						plugin.trigger('cms.plugins.update');
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					// reset placeholder without entries
 | 
			
		||||
					$('.cms_draggables').each(function () {
 | 
			
		||||
						if($(this).children().length === 0) {
 | 
			
		||||
							$(this).hide();
 | 
			
		||||
						}
 | 
			
		||||
					});
 | 
			
		||||
				},
 | 
			
		||||
				'isAllowed': function(placeholder, placeholderParent, originalItem) {
 | 
			
		||||
					// cancel if action is excecuted
 | 
			
		||||
					if(CMS.API.locked) return false;
 | 
			
		||||
					// getting restriction array
 | 
			
		||||
					var bounds = [];
 | 
			
		||||
					// save original state events
 | 
			
		||||
					var original = $('.cms_plugin-' + that.getId(originalItem));
 | 
			
		||||
					// cancel if item has no settings
 | 
			
		||||
					if(original.length === 0 || original.data('settings') === null) return false;
 | 
			
		||||
					var type = original.data('settings').plugin_type;
 | 
			
		||||
					// prepare variables for bound
 | 
			
		||||
					var holderId = that.getId(placeholder.closest('.cms_dragarea'));
 | 
			
		||||
					var holder = $('.cms_placeholder-' + holderId);
 | 
			
		||||
					var plugin = $('.cms_plugin-' + that.getId(placeholder.closest('.cms_draggable')));
 | 
			
		||||
 | 
			
		||||
					// now set the correct bounds
 | 
			
		||||
					if(holder.length) bounds = holder.data('settings').plugin_restriction;
 | 
			
		||||
					if(plugin.length) bounds = plugin.data('settings').plugin_restriction;
 | 
			
		||||
					if(dropzone) bounds = dropzone.data('settings').plugin_restriction;
 | 
			
		||||
 | 
			
		||||
					// if parent has class disabled, dissalow drop
 | 
			
		||||
					if(placeholder.parent().hasClass('cms_draggable-disabled')) return false;
 | 
			
		||||
 | 
			
		||||
					// if restrictions is still empty, proceed
 | 
			
		||||
					that.state = (bounds.length <= 0 || $.inArray(type, bounds) !== -1) ? true : false;
 | 
			
		||||
 | 
			
		||||
					return that.state;
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			// attach escape event to cancel dragging
 | 
			
		||||
			$(document).bind('keyup.cms', function(e, cancel){
 | 
			
		||||
				if(e.keyCode === 27 || cancel) {
 | 
			
		||||
					that.state = false;
 | 
			
		||||
					that.sortables.sortable('cancel');
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			// define droppable helpers
 | 
			
		||||
			this.dropareas.droppable({
 | 
			
		||||
				'greedy': true,
 | 
			
		||||
				'accept': '.cms_draggable',
 | 
			
		||||
				'tolerance': 'pointer',
 | 
			
		||||
				'activeClass': 'cms_draggable-allowed',
 | 
			
		||||
				'hoverClass': 'cms_draggable-hover-allowed',
 | 
			
		||||
				'over': function (event) {
 | 
			
		||||
					dropzone = $('.cms_placeholder-' + that.getId($(event.target).parent().prev()));
 | 
			
		||||
					timer = setInterval(function () {
 | 
			
		||||
						// reset other empty placeholders
 | 
			
		||||
						$('.cms_dragbar-empty').removeClass('cms_draggable-disallowed');
 | 
			
		||||
						if(that.state) {
 | 
			
		||||
							$(event.target).removeClass('cms_draggable-disallowed');
 | 
			
		||||
						} else {
 | 
			
		||||
							$(event.target).addClass('cms_draggable-disallowed');
 | 
			
		||||
						}
 | 
			
		||||
					}, 10);
 | 
			
		||||
				},
 | 
			
		||||
				'out': function (event) {
 | 
			
		||||
					dropzone = null;
 | 
			
		||||
					$(event.target).removeClass('cms_draggable-disallowed');
 | 
			
		||||
					clearInterval(timer);
 | 
			
		||||
				},
 | 
			
		||||
				'drop': function (event) {
 | 
			
		||||
					dropped = true;
 | 
			
		||||
					droparea = $(event.target).parent().nextAll('.cms_draggables').first();
 | 
			
		||||
					clearInterval(timer);
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
})(CMS.$);
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue