b49b14a38cd8d756f79ce5b23eaa44db542cbe41
[atutor.git] / mods / photo_album / fluid / component-templates / js / jquery.ui-1.0 / ui.draggable.ext.js
1 /*\r
2  * 'this' -> original element\r
3  * 1. argument: browser event\r
4  * 2.argument: ui object\r
5  */\r
6 \r
7 (function($) {\r
8 \r
9         $.ui.plugin.add("draggable", "stop", "effect", function(e,ui) {\r
10                 var t = ui.helper;\r
11                 if(ui.options.effect[1]) {\r
12                         if(t != this) {\r
13                                 ui.options.beQuietAtEnd = true;\r
14                                 switch(ui.options.effect[1]) {\r
15                                         case 'fade':\r
16                                                 $(t).fadeOut(300, function() { $(this).remove(); });\r
17                                                 break;\r
18                                         default:\r
19                                                 $(t).remove();\r
20                                                 break;  \r
21                                 }\r
22                         }\r
23                 }\r
24         });\r
25         \r
26         $.ui.plugin.add("draggable", "start", "effect", function(e,ui) {\r
27                 if(ui.options.effect[0]) {\r
28                         switch(ui.options.effect[0]) {\r
29                                 case 'fade':\r
30                                         $(ui.helper).hide().fadeIn(300);\r
31                                         break;\r
32                         }\r
33                 }\r
34         });\r
35 \r
36 //----------------------------------------------------------------\r
37 \r
38         $.ui.plugin.add("draggable", "start", "cursor", function(e,ui) {\r
39                 var t = $('body');\r
40                 if (t.css("cursor")) ui.options.ocursor = t.css("cursor");\r
41                 t.css("cursor", ui.options.cursor);\r
42         });\r
43 \r
44         $.ui.plugin.add("draggable", "stop", "cursor", function(e,ui) {\r
45                 if (ui.options.ocursor) $('body').css("cursor", ui.options.ocursor);\r
46         });\r
47 \r
48 //----------------------------------------------------------------\r
49         \r
50         $.ui.plugin.add("draggable", "start", "zIndex", function(e,ui) {\r
51                 var t = $(ui.helper);\r
52                 if(t.css("zIndex")) ui.options.ozIndex = t.css("zIndex");\r
53                 t.css('zIndex', ui.options.zIndex);\r
54         });\r
55         \r
56         $.ui.plugin.add("draggable", "stop", "zIndex", function(e,ui) {\r
57                 if(ui.options.ozIndex) $(ui.helper).css('zIndex', ui.options.ozIndex);\r
58         });\r
59 \r
60 \r
61 //----------------------------------------------------------------\r
62 \r
63         $.ui.plugin.add("draggable", "start", "opacity", function(e,ui) {\r
64                 var t = $(ui.helper);\r
65                 if(t.css("opacity")) ui.options.oopacity = t.css("opacity");\r
66                 t.css('opacity', ui.options.opacity);\r
67         });\r
68         \r
69         $.ui.plugin.add("draggable", "stop", "opacity", function(e,ui) {\r
70                 if(ui.options.oopacity) $(ui.helper).css('opacity', ui.options.oopacity);\r
71         });\r
72 \r
73 //----------------------------------------------------------------\r
74 \r
75         $.ui.plugin.add("draggable", "stop", "revert", function(e,ui) {\r
76         \r
77                 var o = ui.options;\r
78                 var rpos = { left: 0, top: 0 };\r
79                 o.beQuietAtEnd = true;\r
80 \r
81                 if(ui.helper != this) {\r
82 \r
83                         rpos = $(ui.draggable.sorthelper || this).offset({ border: false });\r
84 \r
85                         var nl = rpos.left-o.po.left-o.margins.left;\r
86                         var nt = rpos.top-o.po.top-o.margins.top;\r
87 \r
88                 } else {\r
89                         var nl = o.co.left - (o.po ? o.po.left : 0);\r
90                         var nt = o.co.top - (o.po ? o.po.top : 0);\r
91                 }\r
92                 \r
93                 var self = ui.draggable;\r
94 \r
95                 $(ui.helper).animate({\r
96                         left: nl,\r
97                         top: nt\r
98                 }, 500, function() {\r
99                         \r
100                         if(o.wasPositioned) $(self.element).css('position', o.wasPositioned);\r
101                         if(o.stop) o.stop.apply(self.element, [self.helper, self.pos, [o.co.left - o.po.left,o.co.top - o.po.top],self]);\r
102                         \r
103                         if(self.helper != self.element) window.setTimeout(function() { $(self.helper).remove(); }, 0); //Using setTimeout because of strange flickering in Firefox\r
104                         \r
105                 });\r
106                 \r
107         });\r
108 \r
109 //----------------------------------------------------------------\r
110 \r
111         $.ui.plugin.add("draggable", "start", "iframeFix", function(e,ui) {\r
112 \r
113                 var o = ui.options;\r
114                 if(!ui.draggable.slowMode) { // Make clones on top of iframes (only if we are not in slowMode)\r
115                         if(o.iframeFix.constructor == Array) {\r
116                                 for(var i=0;i<o.iframeFix.length;i++) {\r
117                                         var co = $(o.iframeFix[i]).offset({ border: false });\r
118                                         $("<div class='DragDropIframeFix' style='background: #fff;'></div>").css("width", $(o.iframeFix[i])[0].offsetWidth+"px").css("height", $(o.iframeFix[i])[0].offsetHeight+"px").css("position", "absolute").css("opacity", "0.001").css("z-index", "1000").css("top", co.top+"px").css("left", co.left+"px").appendTo("body");\r
119                                 }               \r
120                         } else {\r
121                                 $("iframe").each(function() {                                   \r
122                                         var co = $(this).offset({ border: false });\r
123                                         $("<div class='DragDropIframeFix' style='background: #fff;'></div>").css("width", this.offsetWidth+"px").css("height", this.offsetHeight+"px").css("position", "absolute").css("opacity", "0.001").css("z-index", "1000").css("top", co.top+"px").css("left", co.left+"px").appendTo("body");\r
124                                 });                                                     \r
125                         }               \r
126                 }\r
127 \r
128         });\r
129         \r
130         $.ui.plugin.add("draggable","stop", "iframeFix", function(e,ui) {\r
131                 if(ui.options.iframeFix) $("div.DragDropIframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers     \r
132         });\r
133                 \r
134 //----------------------------------------------------------------\r
135 \r
136         $.ui.plugin.add("draggable", "start", "containment", function(e,ui) {\r
137 \r
138                 var o = ui.options;\r
139 \r
140                 if(!o.cursorAtIgnore || o.containment.left != undefined || o.containment.constructor == Array) return;\r
141                 if(o.containment == 'parent') o.containment = this.parentNode;\r
142 \r
143 \r
144                 if(o.containment == 'document') {\r
145                         o.containment = [\r
146                                 0-o.margins.left,\r
147                                 0-o.margins.top,\r
148                                 $(document).width()-o.margins.right,\r
149                                 ($(document).height() || document.body.parentNode.scrollHeight)-o.margins.bottom\r
150                         ];\r
151                 } else { //I'm a node, so compute top/left/right/bottom\r
152                         var ce = $(o.containment)[0];\r
153                         var co = $(o.containment).offset({ border: false });\r
154 \r
155                         o.containment = [\r
156                                 co.left-o.margins.left,\r
157                                 co.top-o.margins.top,\r
158                                 co.left+(ce.offsetWidth || ce.scrollWidth)-o.margins.right,\r
159                                 co.top+(ce.offsetHeight || ce.scrollHeight)-o.margins.bottom\r
160                         ];\r
161                 }\r
162 \r
163         });\r
164         \r
165         $.ui.plugin.add("draggable", "drag", "containment", function(e,ui) {\r
166                 \r
167                 var o = ui.options;\r
168                 if(!o.cursorAtIgnore) return;\r
169                         \r
170                 var h = $(ui.helper);\r
171                 var c = o.containment;\r
172                 if(c.constructor == Array) {\r
173                         \r
174                         if((ui.draggable.pos[0] < c[0]-o.po.left)) ui.draggable.pos[0] = c[0]-o.po.left;\r
175                         if((ui.draggable.pos[1] < c[1]-o.po.top)) ui.draggable.pos[1] = c[1]-o.po.top;\r
176                         if(ui.draggable.pos[0]+h[0].offsetWidth > c[2]-o.po.left) ui.draggable.pos[0] = c[2]-o.po.left-h[0].offsetWidth;\r
177                         if(ui.draggable.pos[1]+h[0].offsetHeight > c[3]-o.po.top) ui.draggable.pos[1] = c[3]-o.po.top-h[0].offsetHeight;\r
178                         \r
179                 } else {\r
180 \r
181                         if(c.left && (ui.draggable.pos[0] < c.left)) ui.draggable.pos[0] = c.left;\r
182                         if(c.top && (ui.draggable.pos[1] < c.top)) ui.draggable.pos[1] = c.top;\r
183 \r
184                         var p = $(o.pp);\r
185                         if(c.right && ui.draggable.pos[0]+h[0].offsetWidth > p[0].offsetWidth-c.right) ui.draggable.pos[0] = (p[0].offsetWidth-c.right)-h[0].offsetWidth;\r
186                         if(c.bottom && ui.draggable.pos[1]+h[0].offsetHeight > p[0].offsetHeight-c.bottom) ui.draggable.pos[1] = (p[0].offsetHeight-c.bottom)-h[0].offsetHeight;\r
187                         \r
188                 }\r
189 \r
190                 \r
191         });\r
192 \r
193 //----------------------------------------------------------------\r
194 \r
195         $.ui.plugin.add("draggable", "drag", "grid", function(e,ui) {\r
196                 var o = ui.options;\r
197                 if(!o.cursorAtIgnore) return;\r
198                 ui.draggable.pos[0] = o.co.left + o.margins.left - o.po.left + Math.round((ui.draggable.pos[0] - o.co.left - o.margins.left + o.po.left) / o.grid[0]) * o.grid[0];\r
199                 ui.draggable.pos[1] = o.co.top + o.margins.top - o.po.top + Math.round((ui.draggable.pos[1] - o.co.top - o.margins.top + o.po.top) / o.grid[1]) * o.grid[1];\r
200         });\r
201 \r
202 //----------------------------------------------------------------\r
203 \r
204         $.ui.plugin.add("draggable", "drag", "axis", function(e,ui) {\r
205                 var o = ui.options;\r
206                 if(!o.cursorAtIgnore) return;\r
207                 if(o.constraint) o.axis = o.constraint; //Legacy check\r
208                 o.axis ? ( o.axis == 'x' ? ui.draggable.pos[1] = o.co.top - o.margins.top - o.po.top : ui.draggable.pos[0] = o.co.left - o.margins.left - o.po.left ) : null;\r
209         });\r
210 \r
211 //----------------------------------------------------------------\r
212 \r
213         $.ui.plugin.add("draggable", "drag", "scroll", function(e,ui) {\r
214 \r
215                 var o = ui.options;\r
216                 o.scrollSensitivity     = o.scrollSensitivity || 20;\r
217                 o.scrollSpeed           = o.scrollSpeed || 20;\r
218 \r
219                 if(o.pp && o.ppOverflow) { // If we have a positioned parent, we only scroll in this one\r
220                         // TODO: Extremely strange issues are waiting here..handle with care\r
221                 } else {\r
222                         if((ui.draggable.rpos[1] - $(window).height()) - $(document).scrollTop() > -o.scrollSensitivity) window.scrollBy(0,o.scrollSpeed);\r
223                         if(ui.draggable.rpos[1] - $(document).scrollTop() < o.scrollSensitivity) window.scrollBy(0,-o.scrollSpeed);\r
224                         if((ui.draggable.rpos[0] - $(window).width()) - $(document).scrollLeft() > -o.scrollSensitivity) window.scrollBy(o.scrollSpeed,0);\r
225                         if(ui.draggable.rpos[0] - $(document).scrollLeft() < o.scrollSensitivity) window.scrollBy(-o.scrollSpeed,0);\r
226                 }\r
227 \r
228         });\r
229 \r
230 //----------------------------------------------------------------\r
231 \r
232         $.ui.plugin.add("draggable", "drag", "wrapHelper", function(e,ui) {\r
233 \r
234                 var o = ui.options;\r
235                 if(o.cursorAtIgnore) return;\r
236                 var t = ui.helper;\r
237 \r
238                 if(!o.pp || !o.ppOverflow) {\r
239                         var wx = $(window).width() - ($.browser.mozilla ? 20 : 0);\r
240                         var sx = $(document).scrollLeft();\r
241                         \r
242                         var wy = $(window).height();\r
243                         var sy = $(document).scrollTop();       \r
244                 } else {\r
245                         var wx = o.pp.offsetWidth + o.po.left - 20;\r
246                         var sx = o.pp.scrollLeft;\r
247                         \r
248                         var wy = o.pp.offsetHeight + o.po.top - 20;\r
249                         var sy = o.pp.scrollTop;                                                \r
250                 }\r
251 \r
252                 ui.draggable.pos[0] -= ((ui.draggable.rpos[0]-o.cursorAt.left - wx + t.offsetWidth+o.margins.right) - sx > 0 || (ui.draggable.rpos[0]-o.cursorAt.left+o.margins.left) - sx < 0) ? (t.offsetWidth+o.margins.left+o.margins.right - o.cursorAt.left * 2) : 0;\r
253                 \r
254                 ui.draggable.pos[1] -= ((ui.draggable.rpos[1]-o.cursorAt.top - wy + t.offsetHeight+o.margins.bottom) - sy > 0 || (ui.draggable.rpos[1]-o.cursorAt.top+o.margins.top) - sy < 0) ? (t.offsetHeight+o.margins.top+o.margins.bottom - o.cursorAt.top * 2) : 0;\r
255 \r
256         });\r
257 \r
258 })(jQuery);\r
259 \r