vendor/assets/javascripts/uikit/components/sortable.js in uikit2-rails-0.1.2 vs vendor/assets/javascripts/uikit/components/sortable.js in uikit2-rails-0.1.3

- old
+ new

@@ -1,6 +1,6 @@ -/*! UIkit 2.23.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.24.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* * Based on nativesortable - Copyright (c) Brian Grinstead - https://github.com/bgrins/nativesortable */ (function(addon) { @@ -19,11 +19,11 @@ })(function(UI){ "use strict"; var supportsTouch = ('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch), - draggingPlaceholder, currentlyDraggingElement, currentlyDraggingTarget, dragging, moving, clickedlink, delayIdle, touchedlists, moved; + draggingPlaceholder, currentlyDraggingElement, currentlyDraggingTarget, dragging, moving, clickedlink, delayIdle, touchedlists, moved, overElement; function closestSortable(ele) { ele = UI.$(ele); @@ -104,11 +104,11 @@ top = parseInt(e.originalEvent.pageY, 10) + offset.top; draggingPlaceholder.css({'left': left, 'top': top }); // adjust document scrolling - + if (top + (draggingPlaceholder.height()/3) > document.body.offsetHeight) { return; } if (top < UI.$win.scrollTop()) { @@ -153,10 +153,14 @@ this.element.data('sortable-group', this.options.group ? this.options.group : UI.Utils.uid('sortable-group')); var handleDragStart = delegate(function(e) { + if (e.data && e.data.sortable) { + return; + } + var $target = UI.$(e.target), $link = $target.is('a[href]') ? $target:$target.parents('a[href]'); if ($target.is(':input')) { return; @@ -171,10 +175,14 @@ }).one('mouseup', function(){ if(!moved) $link.trigger('click'); }); } + e.data = e.data || {}; + + e.data.sortable = element; + return $this.dragStart(e, this); }); var handleDragOver = delegate(function(e) { @@ -269,10 +277,12 @@ // Fix event.target for a touch event if (supportsTouch && document.elementFromPoint) { target = document.elementFromPoint(e.pageX - document.body.scrollLeft, e.pageY - document.body.scrollTop); } + + overElement = UI.$(target); } if (UI.$(target).hasClass($this.options.childClass)) { fn.apply(target, [e]); } else if (target !== element) { @@ -373,12 +383,14 @@ } }; }, dragMove: function(e, elem) { - var overEl = UI.$(document.elementFromPoint(e.pageX - document.body.scrollLeft, e.pageY - (window.pageYOffset || document.documentElement.scrollTop))), - overRoot = overEl.closest('.'+this.options.baseClass), + + overElement = UI.$(document.elementFromPoint(e.pageX - document.body.scrollLeft, e.pageY - document.body.scrollTop)); + + var overRoot = overElement.closest('.'+this.options.baseClass), groupOver = overRoot.data("sortable-group"), $current = UI.$(currentlyDraggingElement), currentRoot = $current.parent(), groupCurrent = $current.data("sortable-group"), overChild; @@ -390,20 +402,20 @@ touchedlists.push(overRoot); overRoot.children().addClass(this.options.childClass); // swap root if (overRoot.children().length > 0) { - overChild = overEl.closest('.'+this.options.childClass); + overChild = overElement.closest('.'+this.options.childClass); if (overChild.length) { overChild.before($current); } else { overRoot.append($current); } } else { // empty list - overEl.append($current); + overElement.append($current); } UIkit.$doc.trigger('mouseover'); } @@ -415,18 +427,30 @@ if (!currentlyDraggingElement || currentlyDraggingElement === elem) { return true; } - // Prevent dragenter on a child from allowing a dragleave on the container var previousCounter = this.dragenterData(elem); this.dragenterData(elem, previousCounter + 1); + // Prevent dragenter on a child from allowing a dragleave on the container if (previousCounter === 0) { - UI.$(elem).addClass(this.options.overClass); + var currentlist = UI.$(elem).parent(), + startlist = UI.$(currentlyDraggingElement).data("start-list"); + if (currentlist[0] !== startlist[0]) { + + var groupOver = currentlist.data('sortable-group'), + groupCurrent = UI.$(currentlyDraggingElement).data("sortable-group"); + + if ((groupOver || groupCurrent) && (groupOver != groupCurrent)) { + return false; + } + } + + UI.$(elem).addClass(this.options.overClass); this.moveElementNextTo(currentlyDraggingElement, elem); } return false; },