client/player/development-bundle/ui/jquery.ui.draggable.js
author ymh <ymh.work@gmail.com>
Sat, 12 Jun 2010 04:25:05 +0200
changeset 0 cc4a51750724
permissions -rw-r--r--
first commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/*
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
 * jQuery UI Draggable 1.8.1
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 *
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * Dual licensed under the MIT (MIT-LICENSE.txt)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * and GPL (GPL-LICENSE.txt) licenses.
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * http://docs.jquery.com/UI/Draggables
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 *
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * Depends:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 *	jquery.ui.core.js
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 *	jquery.ui.mouse.js
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 *	jquery.ui.widget.js
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 */
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
(function($) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
$.widget("ui.draggable", $.ui.mouse, {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
	widgetEventPrefix: "drag",
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
	options: {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
		addClasses: true,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
		appendTo: "parent",
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
		axis: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
		connectToSortable: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
		containment: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		cursor: "auto",
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		cursorAt: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
		grid: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		handle: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		helper: "original",
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		iframeFix: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
		opacity: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		refreshPositions: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
		revert: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
		revertDuration: 500,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
		scope: "default",
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		scroll: true,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
		scrollSensitivity: 20,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
		scrollSpeed: 20,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		snap: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		snapMode: "both",
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		snapTolerance: 20,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		stack: false,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		zIndex: false
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
	_create: function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
		if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
			this.element[0].style.position = 'relative';
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
		(this.options.addClasses && this.element.addClass("ui-draggable"));
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		(this.options.disabled && this.element.addClass("ui-draggable-disabled"));
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		this._mouseInit();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
	destroy: function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		if(!this.element.data('draggable')) return;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
		this.element
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
			.removeData("draggable")
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
			.unbind(".draggable")
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
			.removeClass("ui-draggable"
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
				+ " ui-draggable-dragging"
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
				+ " ui-draggable-disabled");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		this._mouseDestroy();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
		return this;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
	_mouseCapture: function(event) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
		var o = this.options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
		// among others, prevent a drag on a resizable-handle
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
		if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
			return false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
		//Quit if we're not on a valid handle
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
		this.handle = this._getHandle(event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
		if (!this.handle)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			return false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
		return true;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
	_mouseStart: function(event) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
		var o = this.options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
		//Create and append the visible helper
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
		this.helper = this._createHelper(event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
		//Cache the helper size
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
		this._cacheHelperProportions();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		//If ddmanager is used for droppables, set the global draggable
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
		if($.ui.ddmanager)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
			$.ui.ddmanager.current = this;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		/*
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
		 * - Position generation -
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
		 * This block generates everything position related - it's the core of draggables.
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
		 */
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
		//Cache the margins of the original element
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		this._cacheMargins();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		//Store the helper's css position
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		this.cssPosition = this.helper.css("position");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		this.scrollParent = this.helper.scrollParent();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		//The element's absolute position on the page minus margins
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		this.offset = this.positionAbs = this.element.offset();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		this.offset = {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			top: this.offset.top - this.margins.top,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
			left: this.offset.left - this.margins.left
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		$.extend(this.offset, {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
			click: { //Where the click happened, relative to the element
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
				left: event.pageX - this.offset.left,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
				top: event.pageY - this.offset.top
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
			},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			parent: this._getParentOffset(),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
		});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
		//Generate the original position
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
		this.originalPosition = this.position = this._generatePosition(event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
		this.originalPageX = event.pageX;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
		this.originalPageY = event.pageY;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
		//Set a containment if given in the options
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
		if(o.containment)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
			this._setContainment();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
		//Trigger event + callbacks
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
		if(this._trigger("start", event) === false) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
			this._clear();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			return false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
		//Recache the helper size
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
		this._cacheHelperProportions();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
		//Prepare the droppable offsets
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
		if ($.ui.ddmanager && !o.dropBehaviour)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
			$.ui.ddmanager.prepareOffsets(this, event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
		this.helper.addClass("ui-draggable-dragging");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
		return true;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
	_mouseDrag: function(event, noPropagation) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
		//Compute the helpers position
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
		this.position = this._generatePosition(event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
		this.positionAbs = this._convertPositionTo("absolute");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
		//Call plugins and callbacks and use the resulting position if something is returned
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
		if (!noPropagation) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
			var ui = this._uiHash();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
			if(this._trigger('drag', event, ui) === false) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
				this._mouseUp({});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
				return false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
			this.position = ui.position;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		return false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
	_mouseStop: function(event) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
		//If we are using droppables, inform the manager about the drop
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
		var dropped = false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
		if ($.ui.ddmanager && !this.options.dropBehaviour)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
			dropped = $.ui.ddmanager.drop(this, event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
		//if a drop comes from outside (a sortable)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
		if(this.dropped) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
			dropped = this.dropped;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
			this.dropped = false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
		
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
		//if the original element is removed, don't bother to continue
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
		if(!this.element[0] || !this.element[0].parentNode)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
			return false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
		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))) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
			var self = this;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
				if(self._trigger("stop", event) !== false) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
					self._clear();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
				}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
			});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		} else {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
			if(this._trigger("stop", event) !== false) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
				this._clear();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
		return false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
	
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
	cancel: function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
		
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
		if(this.helper.is(".ui-draggable-dragging")) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
			this._mouseUp({});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
		} else {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
			this._clear();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
		
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
		return this;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
		
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
	_getHandle: function(event) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
		var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
		$(this.options.handle, this.element)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
			.find("*")
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
			.andSelf()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
			.each(function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
				if(this == event.target) handle = true;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
			});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
		return handle;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
	_createHelper: function(event) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
		var o = this.options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
		if(!helper.parents('body').length)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
			helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
		if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
			helper.css("position", "absolute");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
		return helper;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
	_adjustOffsetFromHelper: function(obj) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
		if (typeof obj == 'string') {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
			obj = obj.split(' ');
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
		if ($.isArray(obj)) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
			obj = {left: +obj[0], top: +obj[1] || 0};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
		if ('left' in obj) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
			this.offset.click.left = obj.left + this.margins.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
		if ('right' in obj) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
		if ('top' in obj) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
			this.offset.click.top = obj.top + this.margins.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
		if ('bottom' in obj) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
	_getParentOffset: function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
		//Get the offsetParent and cache its position
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
		this.offsetParent = this.helper.offsetParent();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
		var po = this.offsetParent.offset();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
		// This is a special case where we need to modify a offset calculated on start, since the following happened:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
			po.left += this.scrollParent.scrollLeft();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
			po.top += this.scrollParent.scrollTop();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
			po = { top: 0, left: 0 };
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
		return {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
		};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
	_getRelativeOffset: function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
		if(this.cssPosition == "relative") {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
			var p = this.element.position();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
			return {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
			};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
		} else {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
			return { top: 0, left: 0 };
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
	_cacheMargins: function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
		this.margins = {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
			left: (parseInt(this.element.css("marginLeft"),10) || 0),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
			top: (parseInt(this.element.css("marginTop"),10) || 0)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
		};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
	_cacheHelperProportions: function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
		this.helperProportions = {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
			width: this.helper.outerWidth(),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
			height: this.helper.outerHeight()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
		};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
	_setContainment: function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
		var o = this.options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
		if(o.containment == 'document' || o.containment == 'window') this.containment = [
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
			0 - this.offset.relative.left - this.offset.parent.left,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
			0 - this.offset.relative.top - this.offset.parent.top,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
			$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
			($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
		];
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
		if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
			var ce = $(o.containment)[0]; if(!ce) return;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
			var co = $(o.containment).offset();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
			var over = ($(ce).css("overflow") != 'hidden');
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
			this.containment = [
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
			];
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
		} else if(o.containment.constructor == Array) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
			this.containment = o.containment;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
	_convertPositionTo: function(d, pos) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
		if(!pos) pos = this.position;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
		var mod = d == "absolute" ? 1 : -1;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
		return {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
			top: (
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
				pos.top																	// The absolute mouse position
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
			),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
			left: (
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
				pos.left																// The absolute mouse position
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
			)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
		};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
	_generatePosition: function(event) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
		var pageX = event.pageX;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
		var pageY = event.pageY;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
		/*
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
		 * - Position constraining -
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
		 * Constrain the position to a mix of grid, containment.
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
		 */
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
			if(this.containment) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
				if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
				if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
				if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
				if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
			if(o.grid) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
				var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
				pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
				var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
				pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
		return {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
			top: (
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
				pageY																// The absolute mouse position
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
				- this.offset.click.top													// Click offset (relative to the element)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
			),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
			left: (
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
				pageX																// The absolute mouse position
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
				- this.offset.click.left												// Click offset (relative to the element)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
			)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
		};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
	_clear: function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
		this.helper.removeClass("ui-draggable-dragging");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
		if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
		//if($.ui.ddmanager) $.ui.ddmanager.current = null;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
		this.helper = null;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
		this.cancelHelperRemoval = false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
	// From now on bulk stuff - mainly helpers
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
	_trigger: function(type, event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
		ui = ui || this._uiHash();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
		$.ui.plugin.call(this, type, [event, ui]);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
		if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
		return $.Widget.prototype._trigger.call(this, type, event, ui);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
	plugins: {},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
	_uiHash: function(event) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
		return {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
			helper: this.helper,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
			position: this.position,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
			originalPosition: this.originalPosition,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
			offset: this.positionAbs
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
		};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
	}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
$.extend($.ui.draggable, {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
	version: "1.8.1"
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
$.ui.plugin.add("draggable", "connectToSortable", {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
	start: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
		var inst = $(this).data("draggable"), o = inst.options,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
			uiSortable = $.extend({}, ui, { item: inst.element });
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
		inst.sortables = [];
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
		$(o.connectToSortable).each(function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
			var sortable = $.data(this, 'sortable');
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
			if (sortable && !sortable.options.disabled) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
				inst.sortables.push({
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
					instance: sortable,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
					shouldRevert: sortable.options.revert
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
				});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
				sortable._refreshItems();	//Do a one-time refresh at start to refresh the containerCache
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
				sortable._trigger("activate", event, uiSortable);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
		});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
	stop: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
		var inst = $(this).data("draggable"),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
			uiSortable = $.extend({}, ui, { item: inst.element });
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
		$.each(inst.sortables, function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
			if(this.instance.isOver) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
				this.instance.isOver = 0;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
				if(this.shouldRevert) this.instance.options.revert = true;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
				//Trigger the stop of the sortable
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
				this.instance._mouseStop(event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
				this.instance.options.helper = this.instance.options._helper;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
				//If the helper has been the original item, restore properties in the sortable
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
				if(inst.options.helper == 'original')
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
					this.instance.currentItem.css({ top: 'auto', left: 'auto' });
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
			} else {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
				this.instance._trigger("deactivate", event, uiSortable);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
		});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
	drag: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
		var inst = $(this).data("draggable"), self = this;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
		var checkPos = function(o) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
			var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
			var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
			var itemHeight = o.height, itemWidth = o.width;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
			var itemTop = o.top, itemLeft = o.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
			return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
		};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
		$.each(inst.sortables, function(i) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
			
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
			//Copy over some variables to allow calling the sortable's native _intersectsWith
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
			this.instance.positionAbs = inst.positionAbs;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
			this.instance.helperProportions = inst.helperProportions;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
			this.instance.offset.click = inst.offset.click;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
			
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
			if(this.instance._intersectsWith(this.instance.containerCache)) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
				if(!this.instance.isOver) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
					this.instance.isOver = 1;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
					//Now we fake the start of dragging for the sortable instance,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
					//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)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
					this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
					this.instance.options.helper = function() { return ui.helper[0]; };
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
					event.target = this.instance.currentItem[0];
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
					this.instance._mouseCapture(event, true);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
					this.instance._mouseStart(event, true, true);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
					this.instance.offset.click.top = inst.offset.click.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
					this.instance.offset.click.left = inst.offset.click.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
					inst._trigger("toSortable", event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
					inst.dropped = this.instance.element; //draggable revert needs that
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
					//hack so receive/update callbacks work (mostly)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
					inst.currentItem = inst.element;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
					this.instance.fromOutside = inst;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
				}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
				//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
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
				if(this.instance.currentItem) this.instance._mouseDrag(event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
			} else {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
				//If it doesn't intersect with the sortable, and it intersected before,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
				if(this.instance.isOver) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
					this.instance.isOver = 0;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
					this.instance.cancelHelperRemoval = true;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
					
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
					//Prevent reverting on this forced stop
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
					this.instance.options.revert = false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
					
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
					// The out event needs to be triggered independently
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
					this.instance._trigger('out', event, this.instance._uiHash(this.instance));
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
					
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
					this.instance._mouseStop(event, true);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
					this.instance.options.helper = this.instance.options._helper;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
					this.instance.currentItem.remove();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
					if(this.instance.placeholder) this.instance.placeholder.remove();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
					inst._trigger("fromSortable", event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
					inst.dropped = false; //draggable revert needs that
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
				}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
			};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
		});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
	}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
$.ui.plugin.add("draggable", "cursor", {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
	start: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
		var t = $('body'), o = $(this).data('draggable').options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
		if (t.css("cursor")) o._cursor = t.css("cursor");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
		t.css("cursor", o.cursor);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
	stop: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
		var o = $(this).data('draggable').options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
		if (o._cursor) $('body').css("cursor", o._cursor);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
	}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
$.ui.plugin.add("draggable", "iframeFix", {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
	start: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
		var o = $(this).data('draggable').options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
			$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
			.css({
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
				position: "absolute", opacity: "0.001", zIndex: 1000
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
			})
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
			.css($(this).offset())
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
			.appendTo("body");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
		});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
	stop: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
		$("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
	}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
$.ui.plugin.add("draggable", "opacity", {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
	start: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
		var t = $(ui.helper), o = $(this).data('draggable').options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
		if(t.css("opacity")) o._opacity = t.css("opacity");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
		t.css('opacity', o.opacity);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
	stop: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
		var o = $(this).data('draggable').options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
		if(o._opacity) $(ui.helper).css('opacity', o._opacity);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
	}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
$.ui.plugin.add("draggable", "scroll", {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
	start: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
		var i = $(this).data("draggable");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
	drag: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
		var i = $(this).data("draggable"), o = i.options, scrolled = false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
			if(!o.axis || o.axis != 'x') {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
				else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
			if(!o.axis || o.axis != 'y') {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
				else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
		} else {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
			if(!o.axis || o.axis != 'x') {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
			if(!o.axis || o.axis != 'y') {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
		}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
			$.ui.ddmanager.prepareOffsets(i, event);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
	}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
$.ui.plugin.add("draggable", "snap", {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
	start: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
		var i = $(this).data("draggable"), o = i.options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
		i.snapElements = [];
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
		$(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
			var $t = $(this); var $o = $t.offset();
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
			if(this != i.element[0]) i.snapElements.push({
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
				item: this,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
				width: $t.outerWidth(), height: $t.outerHeight(),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
				top: $o.top, left: $o.left
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
			});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
		});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
	drag: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
		var inst = $(this).data("draggable"), o = inst.options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
		var d = o.snapTolerance;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
		var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
		for (var i = inst.snapElements.length - 1; i >= 0; i--){
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
			var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
				t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
			//Yes, I know, this is insane ;)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
			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))) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
				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 })));
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
				inst.snapElements[i].snapping = false;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
				continue;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
			if(o.snapMode != 'inner') {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
				var ts = Math.abs(t - y2) <= d;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
				var bs = Math.abs(b - y1) <= d;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
				var ls = Math.abs(l - x2) <= d;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
				var rs = Math.abs(r - x1) <= d;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
			var first = (ts || bs || ls || rs);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
			if(o.snapMode != 'outer') {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
				var ts = Math.abs(t - y1) <= d;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
				var bs = Math.abs(b - y2) <= d;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
				var ls = Math.abs(l - x1) <= d;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
				var rs = Math.abs(r - x2) <= d;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
			}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
		};
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
	}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
$.ui.plugin.add("draggable", "stack", {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
	start: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
		var o = $(this).data("draggable").options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
		var group = $.makeArray($(o.stack)).sort(function(a,b) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
			return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
		});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
		if (!group.length) { return; }
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
		
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
		var min = parseInt(group[0].style.zIndex) || 0;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
		$(group).each(function(i) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
			this.style.zIndex = min + i;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
		});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
		this[0].style.zIndex = min + group.length;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
	}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
$.ui.plugin.add("draggable", "zIndex", {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
	start: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
		var t = $(ui.helper), o = $(this).data("draggable").options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
		if(t.css("zIndex")) o._zIndex = t.css("zIndex");
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
		t.css('zIndex', o.zIndex);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
	},
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
	stop: function(event, ui) {
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
		var o = $(this).data("draggable").options;
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
		if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
	}
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
});
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
})(jQuery);