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;
},