diff options
author | Richard Worth <rdworth@gmail.com> | 2008-06-07 17:37:43 +0000 |
---|---|---|
committer | Richard Worth <rdworth@gmail.com> | 2008-06-07 17:37:43 +0000 |
commit | a635d0a7c9441d2ed5256e0c841be99afbc7cb94 (patch) | |
tree | 442f36440ad69185f597aa1804b7106ed688cab9 /source/ui.sortable.js | |
parent | a25ba5018cb9645b7b21bc889eb0f36468c6c0fc (diff) | |
download | jquery-ui-a635d0a7c9441d2ed5256e0c841be99afbc7cb94.tar.gz jquery-ui-a635d0a7c9441d2ed5256e0c841be99afbc7cb94.zip |
renamed source -> ui
Diffstat (limited to 'source/ui.sortable.js')
-rw-r--r-- | source/ui.sortable.js | 665 |
1 files changed, 0 insertions, 665 deletions
diff --git a/source/ui.sortable.js b/source/ui.sortable.js deleted file mode 100644 index a433805e8..000000000 --- a/source/ui.sortable.js +++ /dev/null @@ -1,665 +0,0 @@ -/* - * jQuery UI Sortable - * - * Copyright (c) 2008 Paul Bakaus - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Sortables - * - * Depends: - * ui.core.js - * - * Revision: $Id: ui.sortable.js 5433 2008-05-04 20:07:17Z joern.zaefferer $ - */ -(function($) { - -function contains(a, b) { - var safari2 = $.browser.safari && $.browser.version < 522; - if (a.contains && !safari2) { - return a.contains(b); - } - if (a.compareDocumentPosition) - return !!(a.compareDocumentPosition(b) & 16); - while (b = b.parentNode) - if (b == a) return true; - return false; -}; - -$.widget("ui.sortable", $.extend($.ui.mouse, { - init: function() { - - var o = this.options; - this.containerCache = {}; - this.element.addClass("ui-sortable"); - - //Get the items - this.refresh(); - - //Let's determine if the items are floating - this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false; - - //Let's determine the parent's offset - if(!(/(relative|absolute|fixed)/).test(this.element.css('position'))) this.element.css('position', 'relative'); - this.offset = this.element.offset(); - - //Initialize mouse events for interaction - this.mouseInit(); - - }, - plugins: {}, - ui: function(inst) { - return { - helper: (inst || this)["helper"], - placeholder: (inst || this)["placeholder"] || $([]), - position: (inst || this)["position"], - absolutePosition: (inst || this)["positionAbs"], - options: this.options, - element: this.element, - item: (inst || this)["currentItem"], - sender: inst ? inst.element : null - }; - }, - propagate: function(n,e,inst, noPropagation) { - $.ui.plugin.call(this, n, [e, this.ui(inst)]); - if(!noPropagation) this.element.triggerHandler(n == "sort" ? n : "sort"+n, [e, this.ui(inst)], this.options[n]); - }, - serialize: function(o) { - - - - var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper'); //Only the items of the sortable itself - var str = []; o = o || {}; - - items.each(function() { - var res = ($(this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); - if(res) str.push((o.key || res[1])+'[]='+(o.key ? res[1] : res[2])); - }); - - return str.join('&'); - - }, - toArray: function(attr) { - var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper'); //Only the items of the sortable itself - var ret = []; - - items.each(function() { ret.push($(this).attr(attr || 'id')); }); - return ret; - }, - /* Be careful with the following core functions */ - intersectsWith: function(item) { - - var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height; - var l = item.left, r = l + item.width, - t = item.top, b = t + item.height; - - if(this.options.tolerance == "pointer" || (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) { - return (y1 + this.offset.click.top > t && y1 + this.offset.click.top < b && x1 + this.offset.click.left > l && x1 + this.offset.click.left < r); - } else { - - return (l < x1 + (this.helperProportions.width / 2) // Right Half - && x2 - (this.helperProportions.width / 2) < r // Left Half - && t < y1 + (this.helperProportions.height / 2) // Bottom Half - && y2 - (this.helperProportions.height / 2) < b ); // Top Half - - } - - }, - intersectsWithEdge: function(item) { - var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height; - var l = item.left, r = l + item.width, - t = item.top, b = t + item.height; - - if(this.options.tolerance == "pointer" || (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) { - - if(!(y1 + this.offset.click.top > t && y1 + this.offset.click.top < b && x1 + this.offset.click.left > l && x1 + this.offset.click.left < r)) return false; - - if(this.floating) { - if(x1 + this.offset.click.left > l && x1 + this.offset.click.left < l + item.width/2) return 2; - if(x1 + this.offset.click.left > l+item.width/2 && x1 + this.offset.click.left < r) return 1; - } else { - if(y1 + this.offset.click.top > t && y1 + this.offset.click.top < t + item.height/2) return 2; - if(y1 + this.offset.click.top > t+item.height/2 && y1 + this.offset.click.top < b) return 1; - } - - } else { - - if (!(l < x1 + (this.helperProportions.width / 2) // Right Half - && x2 - (this.helperProportions.width / 2) < r // Left Half - && t < y1 + (this.helperProportions.height / 2) // Bottom Half - && y2 - (this.helperProportions.height / 2) < b )) return false; // Top Half - - if(this.floating) { - if(x2 > l && x1 < l) return 2; //Crosses left edge - if(x1 < r && x2 > r) return 1; //Crosses right edge - } else { - if(y2 > t && y1 < t) return 1; //Crosses top edge - if(y1 < b && y2 > b) return 2; //Crosses bottom edge - } - - } - - return false; - - }, - refresh: function() { - this.refreshItems(); - this.refreshPositions(); - }, - refreshItems: function() { - - this.items = []; - this.containers = [this]; - var items = this.items; - var queries = [$.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)]; - - if(this.options.connectWith) { - for (var i = this.options.connectWith.length - 1; i >= 0; i--){ - var cur = $(this.options.connectWith[i]); - for (var j = cur.length - 1; j >= 0; j--){ - var inst = $.data(cur[j], 'sortable'); - if(inst && !inst.options.disabled) { - queries.push($.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element)); - this.containers.push(inst); - } - }; - }; - } - - for (var i = queries.length - 1; i >= 0; i--){ - queries[i].each(function() { - $.data(this, 'sortable-item', true); // Data for target checking (mouse manager) - items.push({ - item: $(this), - width: 0, height: 0, - left: 0, top: 0 - }); - }); - }; - - }, - refreshPositions: function(fast) { - for (var i = this.items.length - 1; i >= 0; i--){ - var t = this.items[i].item; - if(!fast) this.items[i].width = (this.options.toleranceElement ? $(this.options.toleranceElement, t) : t).outerWidth(); - if(!fast) this.items[i].height = (this.options.toleranceElement ? $(this.options.toleranceElement, t) : t).outerHeight(); - var p = (this.options.toleranceElement ? $(this.options.toleranceElement, t) : t).offset(); - this.items[i].left = p.left; - this.items[i].top = p.top; - }; - for (var i = this.containers.length - 1; i >= 0; i--){ - var p =this.containers[i].element.offset(); - this.containers[i].containerCache.left = p.left; - this.containers[i].containerCache.top = p.top; - this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); - this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); - }; - }, - destroy: function() { - this.element - .removeClass("ui-sortable ui-sortable-disabled") - .removeData("sortable") - .unbind(".sortable"); - this.mouseDestroy(); - - for ( var i = this.items.length - 1; i >= 0; i-- ) - this.items[i].item.removeData("sortable-item"); - }, - createPlaceholder: function(that) { - - var self = that || this, o = self.options; - - if(o.placeholder.constructor == String) { - var className = o.placeholder; - o.placeholder = { - element: function() { - return $('<div></div>').addClass(className)[0]; - }, - update: function(i, p) { - p.css(i.offset()).css({ width: i.outerWidth(), height: i.outerHeight() }); - } - }; - } - - self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)).appendTo('body').css({ position: 'absolute' }); - o.placeholder.update.call(self.element, self.currentItem, self.placeholder); - }, - contactContainers: function(e) { - for (var i = this.containers.length - 1; i >= 0; i--){ - - if(this.intersectsWith(this.containers[i].containerCache)) { - if(!this.containers[i].containerCache.over) { - - - if(this.currentContainer != this.containers[i]) { - - //When entering a new container, we will find the item with the least distance and append our item near it - var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[i].floating ? 'left' : 'top']; - for (var j = this.items.length - 1; j >= 0; j--) { - if(!contains(this.containers[i].element[0], this.items[j].item[0])) continue; - var cur = this.items[j][this.containers[i].floating ? 'left' : 'top']; - if(Math.abs(cur - base) < dist) { - dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; - } - } - - if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled - continue; - - //We also need to exchange the placeholder - if(this.placeholder) this.placeholder.remove(); - if(this.containers[i].options.placeholder) { - this.containers[i].createPlaceholder(this); - } else { - this.placeholder = null;; - } - - - itemWithLeastDistance ? this.rearrange(e, itemWithLeastDistance) : this.rearrange(e, null, this.containers[i].element); - this.propagate("change", e); //Call plugins and callbacks - this.containers[i].propagate("change", e, this); //Call plugins and callbacks - this.currentContainer = this.containers[i]; - - } - - this.containers[i].propagate("over", e, this); - this.containers[i].containerCache.over = 1; - } - } else { - if(this.containers[i].containerCache.over) { - this.containers[i].propagate("out", e, this); - this.containers[i].containerCache.over = 0; - } - } - - }; - }, - mouseStart: function(e, overrideHandle, noActivation) { - - var o = this.options; - this.currentContainer = this; - - if(this.options.disabled || this.options.type == 'static') return false; - - //Find out if the clicked node (or one of its parents) is a actual item in this.items - var currentItem = null, nodes = $(e.target).parents().each(function() { - if($.data(this, 'sortable-item')) { - currentItem = $(this); - return false; - } - }); - if($.data(e.target, 'sortable-item')) currentItem = $(e.target); - - if(!currentItem) return false; - if(this.options.handle && !overrideHandle) { - var validHandle = false; - $(this.options.handle, currentItem).each(function() { if(this == e.target) validHandle = true; }); - if(!validHandle) return false; - } - - this.currentItem = currentItem; - - this.refresh(); - - //Create and append the visible helper - this.helper = typeof o.helper == 'function' ? $(o.helper.apply(this.element[0], [e, this.currentItem])) : this.currentItem.clone(); - if(!this.helper.parents('body').length) this.helper.appendTo((o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)); //Add the helper to the DOM if that didn't happen already - this.helper.css({ position: 'absolute', clear: 'both' }).addClass('ui-sortable-helper'); //Position it absolutely and add a helper class - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - this.margins = { //Cache the margins - left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), - top: (parseInt(this.currentItem.css("marginTop"),10) || 0) - }; - - this.offset = this.currentItem.offset(); //The element's absolute position on the page - this.offset = { //Substract the margins from the element's absolute offset - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - this.offset.click = { //Where the click happened, relative to the element - left: e.pageX - this.offset.left, - top: e.pageY - this.offset.top - }; - - this.offsetParent = this.helper.offsetParent(); var po = this.offsetParent.offset(); //Get the offsetParent and cache its position - - this.offset.parent = { //Store its position plus border - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - this.originalPosition = this.generatePosition(e); //Generate the original position - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Cache the helper size - - if(o.cursorAt) { - if(o.cursorAt.left != undefined) this.offset.click.left = o.cursorAt.left; - if(o.cursorAt.right != undefined) this.offset.click.left = this.helperProportions.width - o.cursorAt.right; - if(o.cursorAt.top != undefined) this.offset.click.top = o.cursorAt.top; - if(o.cursorAt.bottom != undefined) this.offset.click.top = this.helperProportions.height - o.cursorAt.bottom; - } - - this.domPosition = this.currentItem.prev()[0]; //Cache the former DOM position - - /* - * - Position constraining - - * Here we prepare position constraining like grid and containment. - */ - - if(o.containment) { - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document') this.containment = [0,0,$(document).width(), ($(document).height() || document.body.parentNode.scrollHeight)]; - if(!(/^(document|window|parent)$/).test(o.containment)) { - var ce = $(o.containment)[0]; - var co = $(o.containment).offset(); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.parent.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.parent.top, - co.left+Math.max(ce.scrollWidth,ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.currentItem.css("marginRight"),10) || 0), - co.top+Math.max(ce.scrollHeight,ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.currentItem.css("marginBottom"),10) || 0) - ]; - } - } - - //If o.placeholder is used, create a new element at the given position with the class - if(o.placeholder) this.createPlaceholder(); - - //Call plugins and callbacks - this.propagate("start", e); - this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() };//Recache the helper size - - if(this.options.placeholder != 'clone') this.currentItem.css('visibility', 'hidden'); //Set the original element visibility to hidden to still fill out the white space - - if(!noActivation) { - for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i].propagate("activate", e, this); } //Post 'activate' events to possible containers - } - - //Prepare possible droppables - if($.ui.ddmanager) $.ui.ddmanager.current = this; - if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, e); - - this.dragging = true; - - this.mouseDrag(e); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - - - }, - convertPositionTo: function(d, pos) { - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - return { - top: ( - pos.top // the calculated relative position - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) * mod // The offsetParent's scroll position - + this.margins.top * mod //Add the margin (you don't want the margin counting in intersection methods) - ), - left: ( - pos.left // the calculated relative position - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft) * mod // The offsetParent's scroll position - + this.margins.left * mod //Add the margin (you don't want the margin counting in intersection methods) - ) - }; - }, - generatePosition: function(e) { - - var o = this.options; - var position = { - top: ( - e.pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) // The offsetParent's scroll position, not if the element is fixed - ), - left: ( - e.pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft) // The offsetParent's scroll position, not if the element is fixed - ) - }; - - if(!this.originalPosition) return position; //If we are not dragging yet, we won't check for options - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - if(this.containment) { - if(position.left < this.containment[0]) position.left = this.containment[0]; - if(position.top < this.containment[1]) position.top = this.containment[1]; - if(position.left > this.containment[2]) position.left = this.containment[2]; - if(position.top > this.containment[3]) position.top = this.containment[3]; - } - - if(o.grid) { - var top = this.originalPosition.top + Math.round((position.top - this.originalPosition.top) / o.grid[1]) * o.grid[1]; - position.top = this.containment ? (!(top < this.containment[1] || top > this.containment[3]) ? top : (!(top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = this.originalPosition.left + Math.round((position.left - this.originalPosition.left) / o.grid[0]) * o.grid[0]; - position.left = this.containment ? (!(left < this.containment[0] || left > this.containment[2]) ? left : (!(left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - return position; - }, - mouseDrag: function(e) { - - - //Compute the helpers position - this.position = this.generatePosition(e); - this.positionAbs = this.convertPositionTo("absolute"); - - //Rearrange - for (var i = this.items.length - 1; i >= 0; i--) { - var intersection = this.intersectsWithEdge(this.items[i]); - if(!intersection) continue; - - if(this.items[i].item[0] != this.currentItem[0] //cannot intersect with itself - && this.currentItem[intersection == 1 ? "next" : "prev"]()[0] != this.items[i].item[0] //no useless actions that have been done before - && !contains(this.currentItem[0], this.items[i].item[0]) //no action if the item moved is the parent of the item checked - && (this.options.type == 'semi-dynamic' ? !contains(this.element[0], this.items[i].item[0]) : true) - ) { - - this.direction = intersection == 1 ? "down" : "up"; - this.rearrange(e, this.items[i]); - this.propagate("change", e); //Call plugins and callbacks - break; - } - } - - //Post events to containers - this.contactContainers(e); - - //Call plugins and callbacks - this.propagate("sort", e); - - if(!this.options.axis || this.options.axis == "x") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis == "y") this.helper[0].style.top = this.position.top+'px'; - - //Interconnect with droppables - if($.ui.ddmanager) $.ui.ddmanager.drag(this, e); - - return false; - - }, - mouseStop: function(e, noPropagation) { - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) - $.ui.ddmanager.drop(this, e); - - if(this.options.revert) { - var self = this; - var cur = self.currentItem.offset(); - - //Also animate the placeholder if we have one - if(self.placeholder) self.placeholder.animate({ opacity: 'hide' }, (parseInt(this.options.revert, 10) || 500)-50); - - $(this.helper).animate({ - left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), - top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) - }, parseInt(this.options.revert, 10) || 500, function() { - self.propagate("stop", e, null, noPropagation); - self.clear(e); - }); - } else { - this.propagate("stop", e, null, noPropagation); - this.clear(e, noPropagation); - } - - return false; - - }, - clear: function(e, noPropagation) { - - if(this.domPosition != this.currentItem.prev().not(".ui-sortable-helper")[0]) this.propagate("update", e, null, noPropagation); //Trigger update callback if the DOM position has changed - if(!contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element - if(this.domPosition == this.currentItem.prev().not(".ui-sortable-helper")[0]) this.propagate("update", e, null, noPropagation); //Trigger update callback, if it wasn't triggered before, because that is definitely an update - this.propagate("remove", e, null, noPropagation); - for (var i = this.containers.length - 1; i >= 0; i--){ - if(contains(this.containers[i].element[0], this.currentItem[0])) { - this.containers[i].propagate("update", e, this, noPropagation); - this.containers[i].propagate("receive", e, this, noPropagation); - } - }; - }; - - //Post events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - this.containers[i].propagate("deactivate", e, this, noPropagation); - if(this.containers[i].containerCache.over) { - this.containers[i].propagate("out", e, this); - this.containers[i].containerCache.over = 0; - } - } - - this.dragging = false; - if(this.cancelHelperRemoval) return false; - $(this.currentItem).css('visibility', ''); - if(this.placeholder) this.placeholder.remove(); - this.helper.remove(); - - return true; - - }, - rearrange: function(e, i, a) { - a ? a.append(this.currentItem) : i.item[this.direction == 'down' ? 'before' : 'after'](this.currentItem); - this.refreshPositions(true); //Precompute after each DOM insertion, NOT on mousemove - if(this.options.placeholder) this.options.placeholder.update.call(this.element, this.currentItem, this.placeholder); - } -})); - -$.extend($.ui.sortable, { - getter: "serialize toArray", - defaults: { - tolerance: "guess", - distance: 0, - delay: 0, - cancel: ":input,button", - items: '> *', - zIndex: 1000, - dropOnEmpty: true, - appendTo: "parent" - } -}); - -/* - * Sortable Extensions - */ - -$.ui.plugin.add("sortable", "cursor", { - start: function(e, ui) { - var t = $('body'); - if (t.css("cursor")) ui.options._cursor = t.css("cursor"); - t.css("cursor", ui.options.cursor); - }, - stop: function(e, ui) { - if (ui.options._cursor) $('body').css("cursor", ui.options._cursor); - } -}); - -$.ui.plugin.add("sortable", "zIndex", { - start: function(e, ui) { - var t = ui.helper; - if(t.css("zIndex")) ui.options._zIndex = t.css("zIndex"); - t.css('zIndex', ui.options.zIndex); - }, - stop: function(e, ui) { - if(ui.options._zIndex) $(ui.helper).css('zIndex', ui.options._zIndex); - } -}); - -$.ui.plugin.add("sortable", "opacity", { - start: function(e, ui) { - var t = ui.helper; - if(t.css("opacity")) ui.options._opacity = t.css("opacity"); - t.css('opacity', ui.options.opacity); - }, - stop: function(e, ui) { - if(ui.options._opacity) $(ui.helper).css('opacity', ui.options._opacity); - } -}); - -$.ui.plugin.add("sortable", "scroll", { - start: function(e, ui) { - var o = ui.options; - var i = $(this).data("sortable"); - o.scrollSensitivity = o.scrollSensitivity || 20; - o.scrollSpeed = o.scrollSpeed || 20; - - i.overflowY = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-y'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(i.currentItem); - i.overflowX = function(el) { - do { if(/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-x'))) return el; el = el.parent(); } while (el[0].parentNode); - return $(document); - }(i.currentItem); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') i.overflowYOffset = i.overflowY.offset(); - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') i.overflowXOffset = i.overflowX.offset(); - - }, - sort: function(e, ui) { - - var o = ui.options; - var i = $(this).data("sortable"); - - if(i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') { - if((i.overflowYOffset.top + i.overflowY[0].offsetHeight) - e.pageY < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop + o.scrollSpeed; - if(e.pageY - i.overflowYOffset.top < o.scrollSensitivity) - i.overflowY[0].scrollTop = i.overflowY[0].scrollTop - o.scrollSpeed; - } else { - if(e.pageY - $(document).scrollTop() < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - if($(window).height() - (e.pageY - $(document).scrollTop()) < o.scrollSensitivity) - $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') { - if((i.overflowXOffset.left + i.overflowX[0].offsetWidth) - e.pageX < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft + o.scrollSpeed; - if(e.pageX - i.overflowXOffset.left < o.scrollSensitivity) - i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft - o.scrollSpeed; - } else { - if(e.pageX - $(document).scrollLeft() < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - if($(window).width() - (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } -}); - -})(jQuery); |