mirror of
https://github.com/jquery/jquery-ui.git
synced 2025-01-07 20:34:24 +00:00
Dev: make draggable pass JSHint with no local overrides
This commit is contained in:
parent
0e800636c4
commit
53c462b666
408
ui/jquery.ui.draggable.js
vendored
408
ui/jquery.ui.draggable.js
vendored
@ -15,7 +15,6 @@
|
||||
*/
|
||||
(function( $, undefined ) {
|
||||
|
||||
/*jshint onevar: false, curly: false, eqeqeq: false, laxbreak: true, shadow: true, funcscope: true */
|
||||
$.widget("ui.draggable", $.ui.mouse, {
|
||||
version: "@VERSION",
|
||||
widgetEventPrefix: "drag",
|
||||
@ -47,11 +46,15 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
},
|
||||
_create: function() {
|
||||
|
||||
if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
|
||||
if (this.options.helper === 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
|
||||
this.element[0].style.position = 'relative';
|
||||
|
||||
(this.options.addClasses && this.element.addClass("ui-draggable"));
|
||||
(this.options.disabled && this.element.addClass("ui-draggable-disabled"));
|
||||
}
|
||||
if (this.options.addClasses){
|
||||
this.element.addClass("ui-draggable");
|
||||
}
|
||||
if (this.options.disabled){
|
||||
this.element.addClass("ui-draggable-disabled");
|
||||
}
|
||||
|
||||
this._mouseInit();
|
||||
|
||||
@ -67,13 +70,15 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
var o = this.options;
|
||||
|
||||
// among others, prevent a drag on a resizable-handle
|
||||
if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
|
||||
if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//Quit if we're not on a valid handle
|
||||
this.handle = this._getHandle(event);
|
||||
if (!this.handle)
|
||||
if (!this.handle) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
|
||||
$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
|
||||
@ -102,8 +107,9 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
this._cacheHelperProportions();
|
||||
|
||||
//If ddmanager is used for droppables, set the global draggable
|
||||
if($.ui.ddmanager)
|
||||
if($.ui.ddmanager) {
|
||||
$.ui.ddmanager.current = this;
|
||||
}
|
||||
|
||||
/*
|
||||
* - Position generation -
|
||||
@ -142,8 +148,9 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
|
||||
|
||||
//Set a containment if given in the options
|
||||
if(o.containment)
|
||||
if(o.containment) {
|
||||
this._setContainment();
|
||||
}
|
||||
|
||||
//Trigger event + callbacks
|
||||
if(this._trigger("start", event) === false) {
|
||||
@ -155,14 +162,17 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
this._cacheHelperProportions();
|
||||
|
||||
//Prepare the droppable offsets
|
||||
if ($.ui.ddmanager && !o.dropBehaviour)
|
||||
if ($.ui.ddmanager && !o.dropBehaviour) {
|
||||
$.ui.ddmanager.prepareOffsets(this, event);
|
||||
}
|
||||
|
||||
|
||||
this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
|
||||
|
||||
//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
|
||||
if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event);
|
||||
if ( $.ui.ddmanager ) {
|
||||
$.ui.ddmanager.dragStart(this, event);
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
@ -183,9 +193,15 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
this.position = ui.position;
|
||||
}
|
||||
|
||||
if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
|
||||
if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
|
||||
if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
|
||||
if(!this.options.axis || this.options.axis !== "y") {
|
||||
this.helper[0].style.left = this.position.left+'px';
|
||||
}
|
||||
if(!this.options.axis || this.options.axis !== "x") {
|
||||
this.helper[0].style.top = this.position.top+'px';
|
||||
}
|
||||
if($.ui.ddmanager) {
|
||||
$.ui.ddmanager.drag(this, event);
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
@ -193,9 +209,13 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
_mouseStop: function(event) {
|
||||
|
||||
//If we are using droppables, inform the manager about the drop
|
||||
var dropped = false;
|
||||
if ($.ui.ddmanager && !this.options.dropBehaviour)
|
||||
var element,
|
||||
that = this,
|
||||
elementInDom = false,
|
||||
dropped = false;
|
||||
if ($.ui.ddmanager && !this.options.dropBehaviour) {
|
||||
dropped = $.ui.ddmanager.drop(this, event);
|
||||
}
|
||||
|
||||
//if a drop comes from outside (a sortable)
|
||||
if(this.dropped) {
|
||||
@ -204,17 +224,17 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
}
|
||||
|
||||
//if the original element is no longer in the DOM don't bother to continue (see #8269)
|
||||
var element = this.element[0], elementInDom = false;
|
||||
element = this.element[0];
|
||||
while ( element && (element = element.parentNode) ) {
|
||||
if (element == document ) {
|
||||
if (element === document ) {
|
||||
elementInDom = true;
|
||||
}
|
||||
}
|
||||
if ( !elementInDom && this.options.helper === "original" )
|
||||
if ( !elementInDom && this.options.helper === "original" ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
|
||||
var that = this;
|
||||
if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
|
||||
$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
|
||||
if(that._trigger("stop", event) !== false) {
|
||||
that._clear();
|
||||
@ -236,7 +256,9 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
});
|
||||
|
||||
//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
|
||||
if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event);
|
||||
if( $.ui.ddmanager ) {
|
||||
$.ui.ddmanager.dragStop(this, event);
|
||||
}
|
||||
|
||||
return $.ui.mouse.prototype._mouseUp.call(this, event);
|
||||
},
|
||||
@ -260,7 +282,9 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
.find("*")
|
||||
.andSelf()
|
||||
.each(function() {
|
||||
if(this == event.target) handle = true;
|
||||
if(this === event.target) {
|
||||
handle = true;
|
||||
}
|
||||
});
|
||||
|
||||
return handle;
|
||||
@ -269,21 +293,23 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
|
||||
_createHelper: function(event) {
|
||||
|
||||
var o = this.options;
|
||||
var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);
|
||||
var o = this.options,
|
||||
helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === 'clone' ? this.element.clone().removeAttr('id') : this.element);
|
||||
|
||||
if(!helper.parents('body').length)
|
||||
helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
|
||||
if(!helper.parents('body').length) {
|
||||
helper.appendTo((o.appendTo === 'parent' ? this.element[0].parentNode : o.appendTo));
|
||||
}
|
||||
|
||||
if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
|
||||
if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
|
||||
helper.css("position", "absolute");
|
||||
}
|
||||
|
||||
return helper;
|
||||
|
||||
},
|
||||
|
||||
_adjustOffsetFromHelper: function(obj) {
|
||||
if (typeof obj == 'string') {
|
||||
if (typeof obj === 'string') {
|
||||
obj = obj.split(' ');
|
||||
}
|
||||
if ($.isArray(obj)) {
|
||||
@ -313,14 +339,17 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
|
||||
// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
|
||||
// the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
|
||||
if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
|
||||
if(this.cssPosition === 'absolute' && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
|
||||
po.left += this.scrollParent.scrollLeft();
|
||||
po.top += this.scrollParent.scrollTop();
|
||||
}
|
||||
|
||||
if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
|
||||
|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.ui.ie)) //Ugly IE fix
|
||||
//This needs to be actually done for all browsers, since pageX/pageY includes this information
|
||||
//Ugly IE fix
|
||||
if((this.offsetParent[0] === document.body) ||
|
||||
(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === 'html' && $.ui.ie)) {
|
||||
po = { top: 0, left: 0 };
|
||||
}
|
||||
|
||||
return {
|
||||
top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
|
||||
@ -331,7 +360,7 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
|
||||
_getRelativeOffset: function() {
|
||||
|
||||
if(this.cssPosition == "relative") {
|
||||
if(this.cssPosition === "relative") {
|
||||
var p = this.element.position();
|
||||
return {
|
||||
top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
|
||||
@ -361,19 +390,30 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
|
||||
_setContainment: function() {
|
||||
|
||||
var o = this.options;
|
||||
if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
|
||||
if(o.containment == 'document' || o.containment == 'window') this.containment = [
|
||||
o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
|
||||
o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
|
||||
(o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
|
||||
(o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
|
||||
];
|
||||
var over, c, ce,
|
||||
o = this.options;
|
||||
|
||||
if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
|
||||
var c = $(o.containment);
|
||||
var ce = c[0]; if(!ce) return;
|
||||
var over = ($(ce).css("overflow") != 'hidden');
|
||||
if(o.containment === 'parent') {
|
||||
o.containment = this.helper[0].parentNode;
|
||||
}
|
||||
if(o.containment === 'document' || o.containment === 'window') {
|
||||
this.containment = [
|
||||
o.containment === 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
|
||||
o.containment === 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
|
||||
(o.containment === 'document' ? 0 : $(window).scrollLeft()) + $(o.containment === 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
|
||||
(o.containment === 'document' ? 0 : $(window).scrollTop()) + ($(o.containment === 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
|
||||
];
|
||||
}
|
||||
|
||||
if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor !== Array) {
|
||||
c = $(o.containment);
|
||||
ce = c[0];
|
||||
|
||||
if(!ce) {
|
||||
return;
|
||||
}
|
||||
|
||||
over = ($(ce).css("overflow") !== 'hidden');
|
||||
|
||||
this.containment = [
|
||||
(parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
|
||||
@ -383,7 +423,7 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
];
|
||||
this.relative_container = c;
|
||||
|
||||
} else if(o.containment.constructor == Array) {
|
||||
} else if(o.containment.constructor === Array) {
|
||||
this.containment = o.containment;
|
||||
}
|
||||
|
||||
@ -391,22 +431,25 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
|
||||
_convertPositionTo: function(d, pos) {
|
||||
|
||||
if(!pos) pos = this.position;
|
||||
var mod = d == "absolute" ? 1 : -1;
|
||||
var scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
|
||||
if(!pos) {
|
||||
pos = this.position;
|
||||
}
|
||||
|
||||
var mod = d === "absolute" ? 1 : -1,
|
||||
scroll = this.cssPosition === 'absolute' && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
|
||||
|
||||
return {
|
||||
top: (
|
||||
pos.top // The absolute mouse position
|
||||
+ this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
|
||||
+ this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
|
||||
- ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
|
||||
pos.top + // The absolute mouse position
|
||||
this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
|
||||
this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
|
||||
( ( this.cssPosition === 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
|
||||
),
|
||||
left: (
|
||||
pos.left // The absolute mouse position
|
||||
+ this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
|
||||
+ this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
|
||||
- ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
|
||||
pos.left + // The absolute mouse position
|
||||
this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
|
||||
this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
|
||||
( ( this.cssPosition === 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
|
||||
)
|
||||
};
|
||||
|
||||
@ -414,9 +457,12 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
|
||||
_generatePosition: function(event) {
|
||||
|
||||
var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
|
||||
var pageX = event.pageX;
|
||||
var pageY = event.pageY;
|
||||
var containment, co, top, left,
|
||||
o = this.options,
|
||||
scroll = this.cssPosition === 'absolute' && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
|
||||
scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName),
|
||||
pageX = event.pageX,
|
||||
pageY = event.pageY;
|
||||
|
||||
/*
|
||||
* - Position constraining -
|
||||
@ -424,10 +470,9 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
*/
|
||||
|
||||
if(this.originalPosition) { //If we are not dragging yet, we won't check for options
|
||||
var containment;
|
||||
if(this.containment) {
|
||||
if (this.relative_container){
|
||||
var co = this.relative_container.offset();
|
||||
co = this.relative_container.offset();
|
||||
containment = [ this.containment[0] + co.left,
|
||||
this.containment[1] + co.top,
|
||||
this.containment[2] + co.left,
|
||||
@ -437,18 +482,26 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
containment = this.containment;
|
||||
}
|
||||
|
||||
if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left;
|
||||
if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top;
|
||||
if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left;
|
||||
if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top;
|
||||
if(event.pageX - this.offset.click.left < containment[0]) {
|
||||
pageX = containment[0] + this.offset.click.left;
|
||||
}
|
||||
if(event.pageY - this.offset.click.top < containment[1]) {
|
||||
pageY = containment[1] + this.offset.click.top;
|
||||
}
|
||||
if(event.pageX - this.offset.click.left > containment[2]) {
|
||||
pageX = containment[2] + this.offset.click.left;
|
||||
}
|
||||
if(event.pageY - this.offset.click.top > containment[3]) {
|
||||
pageY = containment[3] + this.offset.click.top;
|
||||
}
|
||||
}
|
||||
|
||||
if(o.grid) {
|
||||
//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
|
||||
var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
|
||||
top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
|
||||
pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
|
||||
|
||||
var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
|
||||
left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
|
||||
pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
|
||||
}
|
||||
|
||||
@ -456,18 +509,18 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
|
||||
return {
|
||||
top: (
|
||||
pageY // The absolute mouse position
|
||||
- this.offset.click.top // Click offset (relative to the element)
|
||||
- this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
|
||||
- this.offset.parent.top // The offsetParent's offset without borders (offset + border)
|
||||
+ ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
|
||||
pageY - // The absolute mouse position
|
||||
this.offset.click.top - // Click offset (relative to the element)
|
||||
this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
|
||||
this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
|
||||
( ( this.cssPosition === 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
|
||||
),
|
||||
left: (
|
||||
pageX // The absolute mouse position
|
||||
- this.offset.click.left // Click offset (relative to the element)
|
||||
- this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
|
||||
- this.offset.parent.left // The offsetParent's offset without borders (offset + border)
|
||||
+ ( ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
|
||||
pageX - // The absolute mouse position
|
||||
this.offset.click.left - // Click offset (relative to the element)
|
||||
this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
|
||||
this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
|
||||
( ( this.cssPosition === 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
|
||||
)
|
||||
};
|
||||
|
||||
@ -475,8 +528,9 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
|
||||
_clear: function() {
|
||||
this.helper.removeClass("ui-draggable-dragging");
|
||||
if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
|
||||
//if($.ui.ddmanager) $.ui.ddmanager.current = null;
|
||||
if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
|
||||
this.helper.remove();
|
||||
}
|
||||
this.helper = null;
|
||||
this.cancelHelperRemoval = false;
|
||||
},
|
||||
@ -486,7 +540,10 @@ $.widget("ui.draggable", $.ui.mouse, {
|
||||
_trigger: function(type, event, ui) {
|
||||
ui = ui || this._uiHash();
|
||||
$.ui.plugin.call(this, type, [event, ui]);
|
||||
if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
|
||||
//The absolute position has to be recalculated after plugins
|
||||
if(type === "drag") {
|
||||
this.positionAbs = this._convertPositionTo("absolute");
|
||||
}
|
||||
return $.Widget.prototype._trigger.call(this, type, event, ui);
|
||||
},
|
||||
|
||||
@ -537,7 +594,9 @@ $.ui.plugin.add("draggable", "connectToSortable", {
|
||||
this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
|
||||
|
||||
//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
|
||||
if(this.shouldRevert) this.instance.options.revert = true;
|
||||
if(this.shouldRevert) {
|
||||
this.instance.options.revert = true;
|
||||
}
|
||||
|
||||
//Trigger the stop of the sortable
|
||||
this.instance._mouseStop(event);
|
||||
@ -545,8 +604,9 @@ $.ui.plugin.add("draggable", "connectToSortable", {
|
||||
this.instance.options.helper = this.instance.options._helper;
|
||||
|
||||
//If the helper has been the original item, restore properties in the sortable
|
||||
if(inst.options.helper == 'original')
|
||||
if(inst.options.helper === 'original') {
|
||||
this.instance.currentItem.css({ top: 'auto', left: 'auto' });
|
||||
}
|
||||
|
||||
} else {
|
||||
this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
|
||||
@ -562,8 +622,9 @@ $.ui.plugin.add("draggable", "connectToSortable", {
|
||||
|
||||
$.each(inst.sortables, function() {
|
||||
|
||||
var innermostIntersecting = false;
|
||||
var thisSortable = this;
|
||||
var innermostIntersecting = false,
|
||||
thisSortable = this;
|
||||
|
||||
//Copy over some variables to allow calling the sortable's native _intersectsWith
|
||||
this.instance.positionAbs = inst.positionAbs;
|
||||
this.instance.helperProportions = inst.helperProportions;
|
||||
@ -575,10 +636,12 @@ $.ui.plugin.add("draggable", "connectToSortable", {
|
||||
this.instance.positionAbs = inst.positionAbs;
|
||||
this.instance.helperProportions = inst.helperProportions;
|
||||
this.instance.offset.click = inst.offset.click;
|
||||
if (this != thisSortable
|
||||
&& this.instance._intersectsWith(this.instance.containerCache)
|
||||
&& $.ui.contains(thisSortable.instance.element[0], this.instance.element[0]))
|
||||
if (this !== thisSortable &&
|
||||
this.instance._intersectsWith(this.instance.containerCache) &&
|
||||
$.ui.contains(thisSortable.instance.element[0], this.instance.element[0])
|
||||
) {
|
||||
innermostIntersecting = false;
|
||||
}
|
||||
return innermostIntersecting;
|
||||
});
|
||||
}
|
||||
@ -615,7 +678,9 @@ $.ui.plugin.add("draggable", "connectToSortable", {
|
||||
}
|
||||
|
||||
//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
|
||||
if(this.instance.currentItem) this.instance._mouseDrag(event);
|
||||
if(this.instance.currentItem) {
|
||||
this.instance._mouseDrag(event);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
@ -637,7 +702,9 @@ $.ui.plugin.add("draggable", "connectToSortable", {
|
||||
|
||||
//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
|
||||
this.instance.currentItem.remove();
|
||||
if(this.instance.placeholder) this.instance.placeholder.remove();
|
||||
if(this.instance.placeholder) {
|
||||
this.instance.placeholder.remove();
|
||||
}
|
||||
|
||||
inst._trigger("fromSortable", event);
|
||||
inst.dropped = false; //draggable revert needs that
|
||||
@ -653,72 +720,87 @@ $.ui.plugin.add("draggable", "connectToSortable", {
|
||||
$.ui.plugin.add("draggable", "cursor", {
|
||||
start: function() {
|
||||
var t = $('body'), o = $(this).data('ui-draggable').options;
|
||||
if (t.css("cursor")) o._cursor = t.css("cursor");
|
||||
if (t.css("cursor")) {
|
||||
o._cursor = t.css("cursor");
|
||||
}
|
||||
t.css("cursor", o.cursor);
|
||||
},
|
||||
stop: function() {
|
||||
var o = $(this).data('ui-draggable').options;
|
||||
if (o._cursor) $('body').css("cursor", o._cursor);
|
||||
if (o._cursor) {
|
||||
$('body').css("cursor", o._cursor);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$.ui.plugin.add("draggable", "opacity", {
|
||||
start: function(event, ui) {
|
||||
var t = $(ui.helper), o = $(this).data('ui-draggable').options;
|
||||
if(t.css("opacity")) o._opacity = t.css("opacity");
|
||||
if(t.css("opacity")) {
|
||||
o._opacity = t.css("opacity");
|
||||
}
|
||||
t.css('opacity', o.opacity);
|
||||
},
|
||||
stop: function(event, ui) {
|
||||
var o = $(this).data('ui-draggable').options;
|
||||
if(o._opacity) $(ui.helper).css('opacity', o._opacity);
|
||||
if(o._opacity) {
|
||||
$(ui.helper).css('opacity', o._opacity);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$.ui.plugin.add("draggable", "scroll", {
|
||||
start: function() {
|
||||
var i = $(this).data("ui-draggable");
|
||||
if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
|
||||
if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== 'HTML') {
|
||||
i.overflowOffset = i.scrollParent.offset();
|
||||
}
|
||||
},
|
||||
drag: function( event ) {
|
||||
|
||||
var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
|
||||
|
||||
if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
|
||||
if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== 'HTML') {
|
||||
|
||||
if(!o.axis || o.axis != 'x') {
|
||||
if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
|
||||
if(!o.axis || o.axis !== 'x') {
|
||||
if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
|
||||
i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
|
||||
else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
|
||||
} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
|
||||
i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
if(!o.axis || o.axis != 'y') {
|
||||
if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
|
||||
if(!o.axis || o.axis !== 'y') {
|
||||
if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
|
||||
i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
|
||||
else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
|
||||
} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
|
||||
i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if(!o.axis || o.axis != 'x') {
|
||||
if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
|
||||
if(!o.axis || o.axis !== 'x') {
|
||||
if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
|
||||
scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
|
||||
else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
|
||||
} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
|
||||
scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
|
||||
}
|
||||
}
|
||||
|
||||
if(!o.axis || o.axis != 'y') {
|
||||
if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
|
||||
if(!o.axis || o.axis !== 'y') {
|
||||
if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
|
||||
scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
|
||||
else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
|
||||
} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
|
||||
scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
|
||||
if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
|
||||
$.ui.ddmanager.prepareOffsets(i, event);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
@ -726,65 +808,92 @@ $.ui.plugin.add("draggable", "scroll", {
|
||||
$.ui.plugin.add("draggable", "snap", {
|
||||
start: function() {
|
||||
|
||||
var i = $(this).data("ui-draggable"), o = i.options;
|
||||
var i = $(this).data("ui-draggable"),
|
||||
o = i.options;
|
||||
|
||||
i.snapElements = [];
|
||||
|
||||
$(o.snap.constructor != String ? ( o.snap.items || ':data(ui-draggable)' ) : o.snap).each(function() {
|
||||
var $t = $(this); var $o = $t.offset();
|
||||
if(this != i.element[0]) i.snapElements.push({
|
||||
$(o.snap.constructor !== String ? ( o.snap.items || ':data(ui-draggable)' ) : o.snap).each(function() {
|
||||
var $t = $(this),
|
||||
$o = $t.offset();
|
||||
if(this !== i.element[0]) {
|
||||
i.snapElements.push({
|
||||
item: this,
|
||||
width: $t.outerWidth(), height: $t.outerHeight(),
|
||||
top: $o.top, left: $o.left
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
drag: function(event, ui) {
|
||||
|
||||
var inst = $(this).data("ui-draggable"), o = inst.options;
|
||||
var d = o.snapTolerance;
|
||||
|
||||
var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
|
||||
var ts, bs, ls, rs, l, r, t, b, i, first,
|
||||
inst = $(this).data("ui-draggable"),
|
||||
o = inst.options,
|
||||
d = o.snapTolerance,
|
||||
x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
|
||||
y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
|
||||
|
||||
for (var i = inst.snapElements.length - 1; i >= 0; i--){
|
||||
for (i = inst.snapElements.length - 1; i >= 0; i--){
|
||||
|
||||
var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
|
||||
t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
|
||||
l = inst.snapElements[i].left;
|
||||
r = l + inst.snapElements[i].width;
|
||||
t = inst.snapElements[i].top;
|
||||
b = t + inst.snapElements[i].height;
|
||||
|
||||
//Yes, I know, this is insane ;)
|
||||
if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
|
||||
if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
|
||||
if(inst.snapElements[i].snapping) {
|
||||
(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
|
||||
}
|
||||
inst.snapElements[i].snapping = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(o.snapMode != 'inner') {
|
||||
var ts = Math.abs(t - y2) <= d;
|
||||
var bs = Math.abs(b - y1) <= d;
|
||||
var ls = Math.abs(l - x2) <= d;
|
||||
var rs = Math.abs(r - x1) <= d;
|
||||
if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
|
||||
if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
|
||||
if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
|
||||
if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
|
||||
if(o.snapMode !== 'inner') {
|
||||
ts = Math.abs(t - y2) <= d;
|
||||
bs = Math.abs(b - y1) <= d;
|
||||
ls = Math.abs(l - x2) <= d;
|
||||
rs = Math.abs(r - x1) <= d;
|
||||
if(ts) {
|
||||
ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
|
||||
}
|
||||
if(bs) {
|
||||
ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
|
||||
}
|
||||
if(ls) {
|
||||
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
|
||||
}
|
||||
if(rs) {
|
||||
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
|
||||
}
|
||||
}
|
||||
|
||||
var first = (ts || bs || ls || rs);
|
||||
first = (ts || bs || ls || rs);
|
||||
|
||||
if(o.snapMode != 'outer') {
|
||||
var ts = Math.abs(t - y1) <= d;
|
||||
var bs = Math.abs(b - y2) <= d;
|
||||
var ls = Math.abs(l - x1) <= d;
|
||||
var rs = Math.abs(r - x2) <= d;
|
||||
if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
|
||||
if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
|
||||
if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
|
||||
if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
|
||||
if(o.snapMode !== 'outer') {
|
||||
ts = Math.abs(t - y1) <= d;
|
||||
bs = Math.abs(b - y2) <= d;
|
||||
ls = Math.abs(l - x1) <= d;
|
||||
rs = Math.abs(r - x2) <= d;
|
||||
if(ts) {
|
||||
ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
|
||||
}
|
||||
if(bs) {
|
||||
ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
|
||||
}
|
||||
if(ls) {
|
||||
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
|
||||
}
|
||||
if(rs) {
|
||||
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
|
||||
}
|
||||
}
|
||||
|
||||
if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
|
||||
if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
|
||||
(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
|
||||
}
|
||||
inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
|
||||
|
||||
}
|
||||
@ -795,14 +904,15 @@ $.ui.plugin.add("draggable", "snap", {
|
||||
$.ui.plugin.add("draggable", "stack", {
|
||||
start: function() {
|
||||
|
||||
var o = $(this).data("ui-draggable").options;
|
||||
|
||||
var group = $.makeArray($(o.stack)).sort(function(a,b) {
|
||||
var min,
|
||||
o = $(this).data("ui-draggable").options,
|
||||
group = $.makeArray($(o.stack)).sort(function(a,b) {
|
||||
return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
|
||||
});
|
||||
|
||||
if (!group.length) { return; }
|
||||
|
||||
var min = parseInt(group[0].style.zIndex, 10) || 0;
|
||||
min = parseInt(group[0].style.zIndex, 10) || 0;
|
||||
$(group).each(function(i) {
|
||||
this.style.zIndex = min + i;
|
||||
});
|
||||
@ -815,12 +925,16 @@ $.ui.plugin.add("draggable", "stack", {
|
||||
$.ui.plugin.add("draggable", "zIndex", {
|
||||
start: function(event, ui) {
|
||||
var t = $(ui.helper), o = $(this).data("ui-draggable").options;
|
||||
if(t.css("zIndex")) o._zIndex = t.css("zIndex");
|
||||
if(t.css("zIndex")) {
|
||||
o._zIndex = t.css("zIndex");
|
||||
}
|
||||
t.css('zIndex', o.zIndex);
|
||||
},
|
||||
stop: function(event, ui) {
|
||||
var o = $(this).data("ui-draggable").options;
|
||||
if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
|
||||
if(o._zIndex) {
|
||||
$(ui.helper).css('zIndex', o._zIndex);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user