Changeset 20824 for trunk/themes/default/js/ui/jquery.ui.draggable.js
- Timestamp:
- Feb 18, 2013, 10:18:40 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/themes/default/js/ui/jquery.ui.draggable.js
r18630 r20824 1 1 /*! 2 * jQuery UI Draggable 1. 9.02 * jQuery UI Draggable 1.10.1 3 3 * http://jqueryui.com 4 4 * 5 * Copyright 201 2jQuery Foundation and other contributors5 * Copyright 2013 jQuery Foundation and other contributors 6 6 * Released under the MIT license. 7 7 * http://jquery.org/license … … 17 17 18 18 $.widget("ui.draggable", $.ui.mouse, { 19 version: "1. 9.0",19 version: "1.10.1", 20 20 widgetEventPrefix: "drag", 21 21 options: { … … 43 43 snapTolerance: 20, 44 44 stack: false, 45 zIndex: false 45 zIndex: false, 46 47 // callbacks 48 drag: null, 49 start: null, 50 stop: null 46 51 }, 47 52 _create: function() { 48 53 49 if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) 50 this.element[0].style.position = 'relative'; 51 52 (this.options.addClasses && this.element.addClass("ui-draggable")); 53 (this.options.disabled && this.element.addClass("ui-draggable-disabled")); 54 if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) { 55 this.element[0].style.position = "relative"; 56 } 57 if (this.options.addClasses){ 58 this.element.addClass("ui-draggable"); 59 } 60 if (this.options.disabled){ 61 this.element.addClass("ui-draggable-disabled"); 62 } 54 63 55 64 this._mouseInit(); … … 67 76 68 77 // among others, prevent a drag on a resizable-handle 69 if (this.helper || o.disabled || $(event.target). is('.ui-resizable-handle'))78 if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) { 70 79 return false; 80 } 71 81 72 82 //Quit if we're not on a valid handle 73 83 this.handle = this._getHandle(event); 74 if (!this.handle) 84 if (!this.handle) { 75 85 return false; 76 86 } 87 77 88 $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { 78 $( '<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')89 $("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>") 79 90 .css({ 80 91 width: this.offsetWidth+"px", height: this.offsetHeight+"px", … … 102 113 103 114 //If ddmanager is used for droppables, set the global draggable 104 if($.ui.ddmanager) 115 if($.ui.ddmanager) { 105 116 $.ui.ddmanager.current = this; 117 } 106 118 107 119 /* … … 138 150 this.originalPageY = event.pageY; 139 151 140 //Adjust the mouse offset relative to the helper if 'cursorAt'is supplied152 //Adjust the mouse offset relative to the helper if "cursorAt" is supplied 141 153 (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); 142 154 143 155 //Set a containment if given in the options 144 if(o.containment) 156 if(o.containment) { 145 157 this._setContainment(); 158 } 146 159 147 160 //Trigger event + callbacks … … 155 168 156 169 //Prepare the droppable offsets 157 if ($.ui.ddmanager && !o.dropBehaviour) 170 if ($.ui.ddmanager && !o.dropBehaviour) { 158 171 $.ui.ddmanager.prepareOffsets(this, event); 159 160 172 } 173 174 161 175 this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position 162 176 163 177 //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003) 164 if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event); 165 178 if ( $.ui.ddmanager ) { 179 $.ui.ddmanager.dragStart(this, event); 180 } 181 166 182 return true; 167 183 }, … … 176 192 if (!noPropagation) { 177 193 var ui = this._uiHash(); 178 if(this._trigger( 'drag', event, ui) === false) {194 if(this._trigger("drag", event, ui) === false) { 179 195 this._mouseUp({}); 180 196 return false; … … 183 199 } 184 200 185 if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; 186 if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; 187 if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); 201 if(!this.options.axis || this.options.axis !== "y") { 202 this.helper[0].style.left = this.position.left+"px"; 203 } 204 if(!this.options.axis || this.options.axis !== "x") { 205 this.helper[0].style.top = this.position.top+"px"; 206 } 207 if($.ui.ddmanager) { 208 $.ui.ddmanager.drag(this, event); 209 } 188 210 189 211 return false; … … 193 215 194 216 //If we are using droppables, inform the manager about the drop 195 var dropped = false; 196 if ($.ui.ddmanager && !this.options.dropBehaviour) 217 var element, 218 that = this, 219 elementInDom = false, 220 dropped = false; 221 if ($.ui.ddmanager && !this.options.dropBehaviour) { 197 222 dropped = $.ui.ddmanager.drop(this, event); 223 } 198 224 199 225 //if a drop comes from outside (a sortable) … … 202 228 this.dropped = false; 203 229 } 204 230 205 231 //if the original element is no longer in the DOM don't bother to continue (see #8269) 206 var element = this.element[0], elementInDom = false;232 element = this.element[0]; 207 233 while ( element && (element = element.parentNode) ) { 208 if (element == document ) {234 if (element === document ) { 209 235 elementInDom = true; 210 236 } 211 237 } 212 if ( !elementInDom && this.options.helper === "original" ) 238 if ( !elementInDom && this.options.helper === "original" ) { 213 239 return false; 214 215 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))) { 216 var that = this;240 } 241 242 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))) { 217 243 $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { 218 244 if(that._trigger("stop", event) !== false) { … … 228 254 return false; 229 255 }, 230 256 231 257 _mouseUp: function(event) { 232 258 //Remove frame helpers 233 $("div.ui-draggable-iframeFix").each(function() { 234 this.parentNode.removeChild(this); 259 $("div.ui-draggable-iframeFix").each(function() { 260 this.parentNode.removeChild(this); 235 261 }); 236 262 237 263 //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003) 238 if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event); 239 264 if( $.ui.ddmanager ) { 265 $.ui.ddmanager.dragStop(this, event); 266 } 267 240 268 return $.ui.mouse.prototype._mouseUp.call(this, event); 241 269 }, 242 270 243 271 cancel: function() { 244 272 245 273 if(this.helper.is(".ui-draggable-dragging")) { 246 274 this._mouseUp({}); … … 248 276 this._clear(); 249 277 } 250 278 251 279 return this; 252 280 253 281 }, 254 282 … … 258 286 $(this.options.handle, this.element) 259 287 .find("*") 260 .a ndSelf()288 .addBack() 261 289 .each(function() { 262 if(this == event.target) handle = true; 290 if(this === event.target) { 291 handle = true; 292 } 263 293 }); 264 294 … … 269 299 _createHelper: function(event) { 270 300 271 var o = this.options; 272 var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element); 273 274 if(!helper.parents('body').length) 275 helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); 276 277 if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) 301 var o = this.options, 302 helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element); 303 304 if(!helper.parents("body").length) { 305 helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo)); 306 } 307 308 if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) { 278 309 helper.css("position", "absolute"); 310 } 279 311 280 312 return helper; … … 283 315 284 316 _adjustOffsetFromHelper: function(obj) { 285 if (typeof obj == 'string') {286 obj = obj.split( ' ');317 if (typeof obj === "string") { 318 obj = obj.split(" "); 287 319 } 288 320 if ($.isArray(obj)) { 289 321 obj = {left: +obj[0], top: +obj[1] || 0}; 290 322 } 291 if ( 'left'in obj) {323 if ("left" in obj) { 292 324 this.offset.click.left = obj.left + this.margins.left; 293 325 } 294 if ( 'right'in obj) {326 if ("right" in obj) { 295 327 this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; 296 328 } 297 if ( 'top'in obj) {329 if ("top" in obj) { 298 330 this.offset.click.top = obj.top + this.margins.top; 299 331 } 300 if ( 'bottom'in obj) {332 if ("bottom" in obj) { 301 333 this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; 302 334 } … … 313 345 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that 314 346 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag 315 if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.contains(this.scrollParent[0], this.offsetParent[0])) {347 if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) { 316 348 po.left += this.scrollParent.scrollLeft(); 317 349 po.top += this.scrollParent.scrollTop(); 318 350 } 319 351 320 if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information 321 || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix 352 //This needs to be actually done for all browsers, since pageX/pageY includes this information 353 //Ugly IE fix 354 if((this.offsetParent[0] === document.body) || 355 (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) { 322 356 po = { top: 0, left: 0 }; 357 } 323 358 324 359 return { … … 331 366 _getRelativeOffset: function() { 332 367 333 if(this.cssPosition == "relative") {368 if(this.cssPosition === "relative") { 334 369 var p = this.element.position(); 335 370 return { … … 361 396 _setContainment: function() { 362 397 363 var o = this.options; 364 if(o.containment == 'parent') o.containment = this.helper[0].parentNode; 365 if(o.containment == 'document' || o.containment == 'window') this.containment = [ 366 o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, 367 o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, 368 (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, 369 (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top 370 ]; 371 372 if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { 373 var c = $(o.containment); 374 var ce = c[0]; if(!ce) return; 375 var co = c.offset(); 376 var over = ($(ce).css("overflow") != 'hidden'); 398 var over, c, ce, 399 o = this.options; 400 401 if(o.containment === "parent") { 402 o.containment = this.helper[0].parentNode; 403 } 404 if(o.containment === "document" || o.containment === "window") { 405 this.containment = [ 406 o.containment === "document" ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, 407 o.containment === "document" ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, 408 (o.containment === "document" ? 0 : $(window).scrollLeft()) + $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left, 409 (o.containment === "document" ? 0 : $(window).scrollTop()) + ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top 410 ]; 411 } 412 413 if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor !== Array) { 414 c = $(o.containment); 415 ce = c[0]; 416 417 if(!ce) { 418 return; 419 } 420 421 over = ($(ce).css("overflow") !== "hidden"); 377 422 378 423 this.containment = [ … … 384 429 this.relative_container = c; 385 430 386 } else if(o.containment.constructor == Array) {431 } else if(o.containment.constructor === Array) { 387 432 this.containment = o.containment; 388 433 } … … 392 437 _convertPositionTo: function(d, pos) { 393 438 394 if(!pos) pos = this.position; 395 var mod = d == "absolute" ? 1 : -1; 396 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); 439 if(!pos) { 440 pos = this.position; 441 } 442 443 var mod = d === "absolute" ? 1 : -1, 444 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); 397 445 398 446 return { 399 447 top: ( 400 pos.top // The absolute mouse position401 + this.offset.relative.top * mod// Only for relative positioned nodes: Relative offset from element to offset parent402 + this.offset.parent.top * mod// The offsetParent's offset without borders (offset + border)403 - ( ( this.cssPosition == 'fixed'? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)448 pos.top + // The absolute mouse position 449 this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent 450 this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border) 451 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) 404 452 ), 405 453 left: ( 406 pos.left // The absolute mouse position407 + this.offset.relative.left * mod// Only for relative positioned nodes: Relative offset from element to offset parent408 + this.offset.parent.left * mod// The offsetParent's offset without borders (offset + border)409 - ( ( this.cssPosition == 'fixed'? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)454 pos.left + // The absolute mouse position 455 this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent 456 this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border) 457 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) 410 458 ) 411 459 }; … … 415 463 _generatePosition: function(event) { 416 464 417 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); 418 var pageX = event.pageX; 419 var pageY = event.pageY; 465 var containment, co, top, left, 466 o = this.options, 467 scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, 468 scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName), 469 pageX = event.pageX, 470 pageY = event.pageY; 420 471 421 472 /* … … 425 476 426 477 if(this.originalPosition) { //If we are not dragging yet, we won't check for options 427 var containment;428 478 if(this.containment) { 429 479 if (this.relative_container){ 430 varco = this.relative_container.offset();480 co = this.relative_container.offset(); 431 481 containment = [ this.containment[0] + co.left, 432 482 this.containment[1] + co.top, … … 438 488 } 439 489 440 if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left; 441 if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top; 442 if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left; 443 if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top; 490 if(event.pageX - this.offset.click.left < containment[0]) { 491 pageX = containment[0] + this.offset.click.left; 492 } 493 if(event.pageY - this.offset.click.top < containment[1]) { 494 pageY = containment[1] + this.offset.click.top; 495 } 496 if(event.pageX - this.offset.click.left > containment[2]) { 497 pageX = containment[2] + this.offset.click.left; 498 } 499 if(event.pageY - this.offset.click.top > containment[3]) { 500 pageY = containment[3] + this.offset.click.top; 501 } 444 502 } 445 503 446 504 if(o.grid) { 447 505 //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) 448 vartop = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;449 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;450 451 varleft = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;452 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;506 top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; 507 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; 508 509 left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; 510 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; 453 511 } 454 512 … … 457 515 return { 458 516 top: ( 459 pageY // The absolute mouse position460 - this.offset.click.top// Click offset (relative to the element)461 - this.offset.relative.top// Only for relative positioned nodes: Relative offset from element to offset parent462 - this.offset.parent.top// The offsetParent's offset without borders (offset + border)463 + ( ( this.cssPosition == 'fixed'? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))517 pageY - // The absolute mouse position 518 this.offset.click.top - // Click offset (relative to the element) 519 this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent 520 this.offset.parent.top + // The offsetParent's offset without borders (offset + border) 521 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) 464 522 ), 465 523 left: ( 466 pageX // The absolute mouse position467 - this.offset.click.left// Click offset (relative to the element)468 - this.offset.relative.left// Only for relative positioned nodes: Relative offset from element to offset parent469 - this.offset.parent.left// The offsetParent's offset without borders (offset + border)470 + ( ( this.cssPosition == 'fixed'? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))524 pageX - // The absolute mouse position 525 this.offset.click.left - // Click offset (relative to the element) 526 this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent 527 this.offset.parent.left + // The offsetParent's offset without borders (offset + border) 528 ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) 471 529 ) 472 530 }; … … 476 534 _clear: function() { 477 535 this.helper.removeClass("ui-draggable-dragging"); 478 if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); 479 //if($.ui.ddmanager) $.ui.ddmanager.current = null; 536 if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) { 537 this.helper.remove(); 538 } 480 539 this.helper = null; 481 540 this.cancelHelperRemoval = false; … … 487 546 ui = ui || this._uiHash(); 488 547 $.ui.plugin.call(this, type, [event, ui]); 489 if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins 548 //The absolute position has to be recalculated after plugins 549 if(type === "drag") { 550 this.positionAbs = this._convertPositionTo("absolute"); 551 } 490 552 return $.Widget.prototype._trigger.call(this, type, event, ui); 491 553 }, … … 493 555 plugins: {}, 494 556 495 _uiHash: function( event) {557 _uiHash: function() { 496 558 return { 497 559 helper: this.helper, … … 507 569 start: function(event, ui) { 508 570 509 var inst = $(this).data(" draggable"), o = inst.options,571 var inst = $(this).data("ui-draggable"), o = inst.options, 510 572 uiSortable = $.extend({}, ui, { item: inst.element }); 511 573 inst.sortables = []; 512 574 $(o.connectToSortable).each(function() { 513 var sortable = $.data(this, 'sortable');575 var sortable = $.data(this, "ui-sortable"); 514 576 if (sortable && !sortable.options.disabled) { 515 577 inst.sortables.push({ … … 526 588 527 589 //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper 528 var inst = $(this).data(" draggable"),590 var inst = $(this).data("ui-draggable"), 529 591 uiSortable = $.extend({}, ui, { item: inst.element }); 530 592 … … 537 599 this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) 538 600 539 //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid' 540 if(this.shouldRevert) this.instance.options.revert = true; 601 //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid" 602 if(this.shouldRevert) { 603 this.instance.options.revert = true; 604 } 541 605 542 606 //Trigger the stop of the sortable … … 546 610 547 611 //If the helper has been the original item, restore properties in the sortable 548 if(inst.options.helper == 'original') 549 this.instance.currentItem.css({ top: 'auto', left: 'auto' }); 612 if(inst.options.helper === "original") { 613 this.instance.currentItem.css({ top: "auto", left: "auto" }); 614 } 550 615 551 616 } else { … … 559 624 drag: function(event, ui) { 560 625 561 var inst = $(this).data("draggable"), that = this; 562 563 var checkPos = function(o) { 564 var dyClick = this.offset.click.top, dxClick = this.offset.click.left; 565 var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; 566 var itemHeight = o.height, itemWidth = o.width; 567 var itemTop = o.top, itemLeft = o.left; 568 569 return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); 570 }; 571 572 $.each(inst.sortables, function(i) { 573 626 var inst = $(this).data("ui-draggable"), that = this; 627 628 $.each(inst.sortables, function() { 629 630 var innermostIntersecting = false, 631 thisSortable = this; 632 574 633 //Copy over some variables to allow calling the sortable's native _intersectsWith 575 634 this.instance.positionAbs = inst.positionAbs; 576 635 this.instance.helperProportions = inst.helperProportions; 577 636 this.instance.offset.click = inst.offset.click; 578 637 579 638 if(this.instance._intersectsWith(this.instance.containerCache)) { 580 639 innermostIntersecting = true; 640 $.each(inst.sortables, function () { 641 this.instance.positionAbs = inst.positionAbs; 642 this.instance.helperProportions = inst.helperProportions; 643 this.instance.offset.click = inst.offset.click; 644 if (this !== thisSortable && 645 this.instance._intersectsWith(this.instance.containerCache) && 646 $.contains(thisSortable.instance.element[0], this.instance.element[0]) 647 ) { 648 innermostIntersecting = false; 649 } 650 return innermostIntersecting; 651 }); 652 } 653 654 655 if(innermostIntersecting) { 581 656 //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once 582 657 if(!this.instance.isOver) { … … 586 661 //by cloning the list group item, appending it to the sortable and using it as inst.currentItem 587 662 //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) 588 this.instance.currentItem = $(that).clone().removeAttr( 'id').appendTo(this.instance.element).data("sortable-item", true);663 this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true); 589 664 this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it 590 665 this.instance.options.helper = function() { return ui.helper[0]; }; … … 609 684 610 685 //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 611 if(this.instance.currentItem) this.instance._mouseDrag(event); 686 if(this.instance.currentItem) { 687 this.instance._mouseDrag(event); 688 } 612 689 613 690 } else { … … 619 696 this.instance.isOver = 0; 620 697 this.instance.cancelHelperRemoval = true; 621 698 622 699 //Prevent reverting on this forced stop 623 700 this.instance.options.revert = false; 624 701 625 702 // The out event needs to be triggered independently 626 this.instance._trigger( 'out', event, this.instance._uiHash(this.instance));627 703 this.instance._trigger("out", event, this.instance._uiHash(this.instance)); 704 628 705 this.instance._mouseStop(event, true); 629 706 this.instance.options.helper = this.instance.options._helper; … … 631 708 //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size 632 709 this.instance.currentItem.remove(); 633 if(this.instance.placeholder) this.instance.placeholder.remove(); 710 if(this.instance.placeholder) { 711 this.instance.placeholder.remove(); 712 } 634 713 635 714 inst._trigger("fromSortable", event); … … 637 716 } 638 717 639 } ;718 } 640 719 641 720 }); … … 645 724 646 725 $.ui.plugin.add("draggable", "cursor", { 647 start: function(event, ui) { 648 var t = $('body'), o = $(this).data('draggable').options; 649 if (t.css("cursor")) o._cursor = t.css("cursor"); 726 start: function() { 727 var t = $("body"), o = $(this).data("ui-draggable").options; 728 if (t.css("cursor")) { 729 o._cursor = t.css("cursor"); 730 } 650 731 t.css("cursor", o.cursor); 651 732 }, 652 stop: function(event, ui) { 653 var o = $(this).data('draggable').options; 654 if (o._cursor) $('body').css("cursor", o._cursor); 733 stop: function() { 734 var o = $(this).data("ui-draggable").options; 735 if (o._cursor) { 736 $("body").css("cursor", o._cursor); 737 } 655 738 } 656 739 }); … … 658 741 $.ui.plugin.add("draggable", "opacity", { 659 742 start: function(event, ui) { 660 var t = $(ui.helper), o = $(this).data('draggable').options; 661 if(t.css("opacity")) o._opacity = t.css("opacity"); 662 t.css('opacity', o.opacity); 743 var t = $(ui.helper), o = $(this).data("ui-draggable").options; 744 if(t.css("opacity")) { 745 o._opacity = t.css("opacity"); 746 } 747 t.css("opacity", o.opacity); 663 748 }, 664 749 stop: function(event, ui) { 665 var o = $(this).data('draggable').options; 666 if(o._opacity) $(ui.helper).css('opacity', o._opacity); 750 var o = $(this).data("ui-draggable").options; 751 if(o._opacity) { 752 $(ui.helper).css("opacity", o._opacity); 753 } 667 754 } 668 755 }); 669 756 670 757 $.ui.plugin.add("draggable", "scroll", { 671 start: function(event, ui) { 672 var i = $(this).data("draggable"); 673 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); 674 }, 675 drag: function(event, ui) { 676 677 var i = $(this).data("draggable"), o = i.options, scrolled = false; 678 679 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { 680 681 if(!o.axis || o.axis != 'x') { 682 if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) 758 start: function() { 759 var i = $(this).data("ui-draggable"); 760 if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") { 761 i.overflowOffset = i.scrollParent.offset(); 762 } 763 }, 764 drag: function( event ) { 765 766 var i = $(this).data("ui-draggable"), o = i.options, scrolled = false; 767 768 if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") { 769 770 if(!o.axis || o.axis !== "x") { 771 if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) { 683 772 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; 684 else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)773 } else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) { 685 774 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; 686 } 687 688 if(!o.axis || o.axis != 'y') { 689 if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) 775 } 776 } 777 778 if(!o.axis || o.axis !== "y") { 779 if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) { 690 780 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; 691 else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)781 } else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) { 692 782 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; 783 } 693 784 } 694 785 695 786 } else { 696 787 697 if(!o.axis || o.axis != 'x') {698 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) 788 if(!o.axis || o.axis !== "x") { 789 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) { 699 790 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); 700 else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)791 } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) { 701 792 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); 702 } 703 704 if(!o.axis || o.axis != 'y') { 705 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) 793 } 794 } 795 796 if(!o.axis || o.axis !== "y") { 797 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) { 706 798 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); 707 else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)799 } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) { 708 800 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); 709 } 710 711 } 712 713 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) 801 } 802 } 803 804 } 805 806 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { 714 807 $.ui.ddmanager.prepareOffsets(i, event); 808 } 715 809 716 810 } … … 718 812 719 813 $.ui.plugin.add("draggable", "snap", { 720 start: function(event, ui) { 721 722 var i = $(this).data("draggable"), o = i.options; 814 start: function() { 815 816 var i = $(this).data("ui-draggable"), 817 o = i.options; 818 723 819 i.snapElements = []; 724 820 725 $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() { 726 var $t = $(this); var $o = $t.offset(); 727 if(this != i.element[0]) i.snapElements.push({ 728 item: this, 729 width: $t.outerWidth(), height: $t.outerHeight(), 730 top: $o.top, left: $o.left 731 }); 821 $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() { 822 var $t = $(this), 823 $o = $t.offset(); 824 if(this !== i.element[0]) { 825 i.snapElements.push({ 826 item: this, 827 width: $t.outerWidth(), height: $t.outerHeight(), 828 top: $o.top, left: $o.left 829 }); 830 } 732 831 }); 733 832 … … 735 834 drag: function(event, ui) { 736 835 737 var inst = $(this).data("draggable"), o = inst.options; 738 var d = o.snapTolerance; 739 740 var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, 836 var ts, bs, ls, rs, l, r, t, b, i, first, 837 inst = $(this).data("ui-draggable"), 838 o = inst.options, 839 d = o.snapTolerance, 840 x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, 741 841 y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; 742 842 743 for (var i = inst.snapElements.length - 1; i >= 0; i--){ 744 745 var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, 746 t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; 843 for (i = inst.snapElements.length - 1; i >= 0; i--){ 844 845 l = inst.snapElements[i].left; 846 r = l + inst.snapElements[i].width; 847 t = inst.snapElements[i].top; 848 b = t + inst.snapElements[i].height; 747 849 748 850 //Yes, I know, this is insane ;) 749 851 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))) { 750 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 }))); 852 if(inst.snapElements[i].snapping) { 853 (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); 854 } 751 855 inst.snapElements[i].snapping = false; 752 856 continue; 753 857 } 754 858 755 if(o.snapMode != 'inner') { 756 var ts = Math.abs(t - y2) <= d; 757 var bs = Math.abs(b - y1) <= d; 758 var ls = Math.abs(l - x2) <= d; 759 var rs = Math.abs(r - x1) <= d; 760 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; 761 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; 762 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; 763 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; 764 } 765 766 var first = (ts || bs || ls || rs); 767 768 if(o.snapMode != 'outer') { 769 var ts = Math.abs(t - y1) <= d; 770 var bs = Math.abs(b - y2) <= d; 771 var ls = Math.abs(l - x1) <= d; 772 var rs = Math.abs(r - x2) <= d; 773 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; 774 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; 775 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; 776 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; 777 } 778 779 if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) 859 if(o.snapMode !== "inner") { 860 ts = Math.abs(t - y2) <= d; 861 bs = Math.abs(b - y1) <= d; 862 ls = Math.abs(l - x2) <= d; 863 rs = Math.abs(r - x1) <= d; 864 if(ts) { 865 ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; 866 } 867 if(bs) { 868 ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; 869 } 870 if(ls) { 871 ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; 872 } 873 if(rs) { 874 ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; 875 } 876 } 877 878 first = (ts || bs || ls || rs); 879 880 if(o.snapMode !== "outer") { 881 ts = Math.abs(t - y1) <= d; 882 bs = Math.abs(b - y2) <= d; 883 ls = Math.abs(l - x1) <= d; 884 rs = Math.abs(r - x2) <= d; 885 if(ts) { 886 ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; 887 } 888 if(bs) { 889 ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; 890 } 891 if(ls) { 892 ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; 893 } 894 if(rs) { 895 ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; 896 } 897 } 898 899 if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) { 780 900 (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); 901 } 781 902 inst.snapElements[i].snapping = (ts || bs || ls || rs || first); 782 903 783 } ;904 } 784 905 785 906 } … … 787 908 788 909 $.ui.plugin.add("draggable", "stack", { 789 start: function(event, ui) { 790 791 var o = $(this).data("draggable").options; 792 793 var group = $.makeArray($(o.stack)).sort(function(a,b) { 794 return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); 910 start: function() { 911 var min, 912 o = this.data("ui-draggable").options, 913 group = $.makeArray($(o.stack)).sort(function(a,b) { 914 return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); 915 }); 916 917 if (!group.length) { return; } 918 919 min = parseInt($(group[0]).css("zIndex"), 10) || 0; 920 $(group).each(function(i) { 921 $(this).css("zIndex", min + i); 795 922 }); 796 if (!group.length) { return; } 797 798 var min = parseInt(group[0].style.zIndex) || 0; 799 $(group).each(function(i) { 800 this.style.zIndex = min + i; 801 }); 802 803 this[0].style.zIndex = min + group.length; 804 923 this.css("zIndex", (min + group.length)); 805 924 } 806 925 }); … … 808 927 $.ui.plugin.add("draggable", "zIndex", { 809 928 start: function(event, ui) { 810 var t = $(ui.helper), o = $(this).data("draggable").options; 811 if(t.css("zIndex")) o._zIndex = t.css("zIndex"); 812 t.css('zIndex', o.zIndex); 929 var t = $(ui.helper), o = $(this).data("ui-draggable").options; 930 if(t.css("zIndex")) { 931 o._zIndex = t.css("zIndex"); 932 } 933 t.css("zIndex", o.zIndex); 813 934 }, 814 935 stop: function(event, ui) { 815 var o = $(this).data("draggable").options; 816 if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex); 936 var o = $(this).data("ui-draggable").options; 937 if(o._zIndex) { 938 $(ui.helper).css("zIndex", o._zIndex); 939 } 817 940 } 818 941 });
Note: See TracChangeset
for help on using the changeset viewer.