b3bcd008a732856093a0422b953da87571c7df41
[atutor.git] / mods / photo_album / fluid / component-templates / js / jquery.ui-1.0 / ui.draggable.js
1 (function($) {\r
2 \r
3         //Make nodes selectable by expression\r
4         $.extend($.expr[':'], { draggable: "(' '+a.className+' ').indexOf(' ui-draggable ')" });\r
5 \r
6 \r
7         //Macros for external methods that support chaining\r
8         var methods = "destroy,enable,disable".split(",");\r
9         for(var i=0;i<methods.length;i++) {\r
10                 var cur = methods[i], f;\r
11                 eval('f = function() { var a = arguments; return this.each(function() { if(jQuery(this).is(".ui-draggable")) jQuery.data(this, "ui-draggable")["'+cur+'"](a); }); }');\r
12                 $.fn["draggable"+cur.substr(0,1).toUpperCase()+cur.substr(1)] = f;\r
13         };\r
14         \r
15         //get instance method\r
16         $.fn.draggableInstance = function() {\r
17                 if($(this[0]).is(".ui-draggable")) return $.data(this[0], "ui-draggable");\r
18                 return false;\r
19         };\r
20 \r
21         $.fn.draggable = function(o) {\r
22                 return this.each(function() {\r
23                         new $.ui.draggable(this, o);\r
24                 });\r
25         }\r
26         \r
27         $.ui.ddmanager = {\r
28                 current: null,\r
29                 droppables: [],\r
30                 prepareOffsets: function(t, e) {\r
31                         var dropTop = $.ui.ddmanager.dropTop = [];\r
32                         var dropLeft = $.ui.ddmanager.dropLeft;\r
33                         var m = $.ui.ddmanager.droppables;\r
34                         for (var i = 0; i < m.length; i++) {\r
35                                 if(m[i].item.disabled) continue;\r
36                                 m[i].offset = $(m[i].item.element).offset();\r
37                                 if (t && m[i].item.options.accept(t.element)) //Activate the droppable if used directly from draggables\r
38                                         m[i].item.activate.call(m[i].item, e);\r
39                         }\r
40                 },\r
41                 fire: function(oDrag, e) {\r
42                         \r
43                         var oDrops = $.ui.ddmanager.droppables;\r
44                         var oOvers = $.grep(oDrops, function(oDrop) {\r
45                                 \r
46                                 if (!oDrop.item.disabled && $.ui.intersect(oDrag, oDrop, oDrop.item.options.tolerance))\r
47                                         oDrop.item.drop.call(oDrop.item, e);\r
48                         });\r
49                         $.each(oDrops, function(i, oDrop) {\r
50                                 if (!oDrop.item.disabled && oDrop.item.options.accept(oDrag.element)) {\r
51                                         oDrop.out = 1; oDrop.over = 0;\r
52                                         oDrop.item.deactivate.call(oDrop.item, e);\r
53                                 }\r
54                         });\r
55                 },\r
56                 update: function(oDrag, e) {\r
57                         \r
58                         if(oDrag.options.refreshPositions) $.ui.ddmanager.prepareOffsets();\r
59                         \r
60                         var oDrops = $.ui.ddmanager.droppables;\r
61                         var oOvers = $.grep(oDrops, function(oDrop) {\r
62                                 if(oDrop.item.disabled) return false; \r
63                                 var isOver = $.ui.intersect(oDrag, oDrop, oDrop.item.options.tolerance)\r
64                                 if (!isOver && oDrop.over == 1) {\r
65                                         oDrop.out = 1; oDrop.over = 0;\r
66                                         oDrop.item.out.call(oDrop.item, e);\r
67                                 }\r
68                                 return isOver;\r
69                         });\r
70                         $.each(oOvers, function(i, oOver) {\r
71                                 if (oOver.over == 0) {\r
72                                         oOver.out = 0; oOver.over = 1;\r
73                                         oOver.item.over.call(oOver.item, e);\r
74                                 }\r
75                         });\r
76                 }\r
77         };\r
78         \r
79         $.ui.draggable = function(el, o) {\r
80                 \r
81                 var options = {};\r
82                 $.extend(options, o);\r
83                 var self = this;\r
84                 $.extend(options, {\r
85                         _start: function(h, p, c, t, e) {\r
86                                 self.start.apply(t, [self, e]); // Trigger the start callback                           \r
87                         },\r
88                         _beforeStop: function(h, p, c, t, e) {\r
89                                 self.stop.apply(t, [self, e]); // Trigger the start callback\r
90                         },\r
91                         _drag: function(h, p, c, t, e) {\r
92                                 self.drag.apply(t, [self, e]); // Trigger the start callback\r
93                         },\r
94                         startCondition: function(e) {\r
95                                 return !(e.target.className.indexOf("ui-resizable-handle") != -1 || self.disabled);     \r
96                         }                       \r
97                 });\r
98                 \r
99                 $.data(el, "ui-draggable", this);\r
100                 \r
101                 if (options.ghosting == true) options.helper = 'clone'; //legacy option check\r
102                 $(el).addClass("ui-draggable");\r
103                 this.interaction = new $.ui.mouseInteraction(el, options);\r
104                 \r
105         }\r
106         \r
107         $.extend($.ui.draggable.prototype, {\r
108                 plugins: {},\r
109                 currentTarget: null,\r
110                 lastTarget: null,\r
111                 destroy: function() {\r
112                         $(this.interaction.element).removeClass("ui-draggable").removeClass("ui-draggable-disabled");\r
113                         this.interaction.destroy();\r
114                 },\r
115                 enable: function() {\r
116                         $(this.interaction.element).removeClass("ui-draggable-disabled");\r
117                         this.disabled = false;\r
118                 },\r
119                 disable: function() {\r
120                         $(this.interaction.element).addClass("ui-draggable-disabled");\r
121                         this.disabled = true;\r
122                 },\r
123                 prepareCallbackObj: function(self) {\r
124                         return {\r
125                                 helper: self.helper,\r
126                                 position: { left: self.pos[0], top: self.pos[1] },\r
127                                 offset: self.options.cursorAt,\r
128                                 draggable: self,\r
129                                 options: self.options   \r
130                         }                       \r
131                 },\r
132                 start: function(that, e) {\r
133                         \r
134                         var o = this.options;\r
135                         $.ui.ddmanager.current = this;\r
136                         \r
137                         $.ui.plugin.call(that, 'start', [e, that.prepareCallbackObj(this)]);\r
138                         $(this.element).triggerHandler("dragstart", [e, that.prepareCallbackObj(this)], o.start);\r
139                         \r
140                         if (this.slowMode && $.ui.droppable && !o.dropBehaviour)\r
141                                 $.ui.ddmanager.prepareOffsets(this, e);\r
142                         \r
143                         return false;\r
144                                                 \r
145                 },\r
146                 stop: function(that, e) {                       \r
147                         \r
148                         var o = this.options;\r
149                         \r
150                         $.ui.plugin.call(that, 'stop', [e, that.prepareCallbackObj(this)]);\r
151                         $(this.element).triggerHandler("dragstop", [e, that.prepareCallbackObj(this)], o.stop);\r
152 \r
153                         if (this.slowMode && $.ui.droppable && !o.dropBehaviour) //If cursorAt is within the helper, we must use our drop manager\r
154                                 $.ui.ddmanager.fire(this, e);\r
155 \r
156                         $.ui.ddmanager.current = null;\r
157                         $.ui.ddmanager.last = this;\r
158 \r
159                         return false;\r
160                         \r
161                 },\r
162                 drag: function(that, e) {\r
163 \r
164                         var o = this.options;\r
165 \r
166                         $.ui.ddmanager.update(this, e);\r
167 \r
168                         this.pos = [this.pos[0]-o.cursorAt.left, this.pos[1]-o.cursorAt.top];\r
169 \r
170                         $.ui.plugin.call(that, 'drag', [e, that.prepareCallbackObj(this)]);\r
171                         var nv = $(this.element).triggerHandler("drag", [e, that.prepareCallbackObj(this)], o.drag);\r
172 \r
173                         var nl = (nv && nv.left) ? nv.left : this.pos[0];\r
174                         var nt = (nv && nv.top) ? nv.top : this.pos[1];\r
175                         \r
176                         $(this.helper).css('left', nl+'px').css('top', nt+'px'); // Stick the helper to the cursor\r
177                         return false;\r
178                         \r
179                 }\r
180         });\r
181 \r
182 })($);\r