820
by Jacques Distler
Update Javascripts
1
// script.aculo.us dragdrop.js v1.9.0, Thu Dec 23 16:54:48 -0500 2010
693
by Jacques Distler
Update Scriptaculous
2
820
by Jacques Distler
Update Javascripts
3
// Copyright (c) 2005-2010 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
272
by Jacques Distler
Rails 2.2.2
4
//
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
5
// script.aculo.us is freely distributable under the terms of an MIT-style license.
6
// For details, see the script.aculo.us web site: http://script.aculo.us/
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
7
238
by Jacques Distler
Scripts and Javascripts
8
if(Object.isUndefined(Effect))
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
9
throw("dragdrop.js requires including script.aculo.us' effects.js library");
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
10
14
remove: function(element) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
15
this.drops = this.drops.reject(function(d) { return d.element==$(element) });
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
16
},
18
add: function(element) {
20
var options = Object.extend({
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
22
hoverclass: null,
238
by Jacques Distler
Scripts and Javascripts
24
}, arguments[1] || { });
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
25
27
if(options.containment) {
28
options._containers = [];
29
var containment = options.containment;
238
by Jacques Distler
Scripts and Javascripts
30
if(Object.isArray(containment)) {
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
31
containment.each( function(c) { options._containers.push($(c)) });
33
options._containers.push($(containment));
272
by Jacques Distler
Rails 2.2.2
36
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
37
if(options.accept) options.accept = [options.accept].flatten();
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
38
39
Element.makePositioned(element); // fix IE
40
options.element = element;
42
this.drops.push(options);
272
by Jacques Distler
Rails 2.2.2
44
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
45
findDeepestChild: function(drops) {
272
by Jacques Distler
Rails 2.2.2
47
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
48
for (i = 1; i < drops.length; ++i)
49
if (Element.isParent(drops[i].element, deepest.element))
272
by Jacques Distler
Rails 2.2.2
51
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
52
return deepest;
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
54
55
isContained: function(element, drop) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
56
var containmentNode;
272
by Jacques Distler
Rails 2.2.2
58
containmentNode = element.treeNode;
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
59
} else {
60
containmentNode = element.parentNode;
62
return drop._containers.detect(function(c) { return containmentNode == c });
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
63
},
272
by Jacques Distler
Rails 2.2.2
64
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
65
isAffected: function(point, element, drop) {
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
66
return (
67
(drop.element!=element) &&
68
((!drop._containers) ||
69
this.isContained(element, drop)) &&
272
by Jacques Distler
Rails 2.2.2
71
(Element.classNames(element).detect(
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
72
function(v) { return drop.accept.include(v) } ) )) &&
73
Position.within(drop.element, point[0], point[1]) );
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
74
},
76
deactivate: function(drop) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
78
Element.removeClassName(drop.element, drop.hoverclass);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
79
this.last_active = null;
82
activate: function(drop) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
84
Element.addClassName(drop.element, drop.hoverclass);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
85
this.last_active = drop;
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
88
show: function(point, element) {
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
89
if(!this.drops.length) return;
238
by Jacques Distler
Scripts and Javascripts
90
var drop, affected = [];
272
by Jacques Distler
Rails 2.2.2
91
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
92
this.drops.each( function(drop) {
93
if(Droppables.isAffected(point, element, drop))
272
by Jacques Distler
Rails 2.2.2
96
238
by Jacques Distler
Scripts and Javascripts
97
if(affected.length>0)
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
98
drop = Droppables.findDeepestChild(affected);
238
by Jacques Distler
Scripts and Javascripts
99
100
if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
102
Position.within(drop.element, point[0], point[1]);
104
drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
272
by Jacques Distler
Rails 2.2.2
105
238
by Jacques Distler
Scripts and Javascripts
106
if (drop != this.last_active) Droppables.activate(drop);
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
107
}
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
108
},
110
fire: function(event, element) {
111
if(!this.last_active) return;
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
114
if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
238
by Jacques Distler
Scripts and Javascripts
115
if (this.last_active.onDrop) {
272
by Jacques Distler
Rails 2.2.2
116
this.last_active.onDrop(element, this.last_active.element, event);
238
by Jacques Distler
Scripts and Javascripts
118
}
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
119
},
123
this.deactivate(this.last_active);
272
by Jacques Distler
Rails 2.2.2
125
};
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
126
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
128
drags: [],
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
129
observers: [],
272
by Jacques Distler
Rails 2.2.2
130
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
131
register: function(draggable) {
132
if(this.drags.length == 0) {
133
this.eventMouseUp = this.endDrag.bindAsEventListener(this);
134
this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
135
this.eventKeypress = this.keyPress.bindAsEventListener(this);
272
by Jacques Distler
Rails 2.2.2
136
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
137
Event.observe(document, "mouseup", this.eventMouseUp);
138
Event.observe(document, "mousemove", this.eventMouseMove);
139
Event.observe(document, "keypress", this.eventKeypress);
141
this.drags.push(draggable);
272
by Jacques Distler
Rails 2.2.2
143
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
144
unregister: function(draggable) {
145
this.drags = this.drags.reject(function(d) { return d==draggable });
146
if(this.drags.length == 0) {
147
Event.stopObserving(document, "mouseup", this.eventMouseUp);
148
Event.stopObserving(document, "mousemove", this.eventMouseMove);
149
Event.stopObserving(document, "keypress", this.eventKeypress);
272
by Jacques Distler
Rails 2.2.2
152
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
153
activate: function(draggable) {
272
by Jacques Distler
Rails 2.2.2
154
if(draggable.options.delay) {
155
this._timeout = setTimeout(function() {
156
Draggables._timeout = null;
158
Draggables.activeDraggable = draggable;
159
}.bind(this), draggable.options.delay);
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
160
} else {
161
window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
162
this.activeDraggable = draggable;
272
by Jacques Distler
Rails 2.2.2
165
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
166
deactivate: function() {
167
this.activeDraggable = null;
272
by Jacques Distler
Rails 2.2.2
169
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
170
updateDrag: function(event) {
171
if(!this.activeDraggable) return;
172
var pointer = [Event.pointerX(event), Event.pointerY(event)];
173
// Mozilla-based browsers fire successive mousemove events with
174
// the same coordinates, prevent needless redrawing (moz bug?)
175
if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
176
this._lastPointer = pointer;
272
by Jacques Distler
Rails 2.2.2
177
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
178
this.activeDraggable.updateDrag(event, pointer);
272
by Jacques Distler
Rails 2.2.2
180
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
181
endDrag: function(event) {
272
by Jacques Distler
Rails 2.2.2
182
if(this._timeout) {
183
clearTimeout(this._timeout);
184
this._timeout = null;
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
185
}
186
if(!this.activeDraggable) return;
187
this._lastPointer = null;
188
this.activeDraggable.endDrag(event);
189
this.activeDraggable = null;
272
by Jacques Distler
Rails 2.2.2
191
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
192
keyPress: function(event) {
193
if(this.activeDraggable)
194
this.activeDraggable.keyPress(event);
272
by Jacques Distler
Rails 2.2.2
196
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
197
addObserver: function(observer) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
198
this.observers.push(observer);
199
this._cacheObserverCallbacks();
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
200
},
272
by Jacques Distler
Rails 2.2.2
201
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
202
removeObserver: function(element) { // element instead of observer fixes mem leaks
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
203
this.observers = this.observers.reject( function(o) { return o.element==element });
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
204
this._cacheObserverCallbacks();
272
by Jacques Distler
Rails 2.2.2
206
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
207
notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
208
if(this[eventName+'Count'] > 0)
209
this.observers.each( function(o) {
210
if(o[eventName]) o[eventName](eventName, draggable, event);
212
if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
272
by Jacques Distler
Rails 2.2.2
214
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
215
_cacheObserverCallbacks: function() {
216
['onStart','onEnd','onDrag'].each( function(eventName) {
217
Draggables[eventName+'Count'] = Draggables.observers.select(
218
function(o) { return o[eventName]; }
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
221
}
272
by Jacques Distler
Rails 2.2.2
222
};
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
223
224
/*--------------------------------------------------------------------------*/
238
by Jacques Distler
Scripts and Javascripts
226
var Draggable = Class.create({
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
227
initialize: function(element) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
228
var defaults = {
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
229
handle: false,
230
reverteffect: function(element, top_offset, left_offset) {
231
var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
232
new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
233
queue: {scope:'_draggable', position:'end'}
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
235
},
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
236
endeffect: function(element) {
238
by Jacques Distler
Scripts and Javascripts
237
var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
272
by Jacques Distler
Rails 2.2.2
238
new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
239
queue: {scope:'_draggable', position:'end'},
272
by Jacques Distler
Rails 2.2.2
240
afterFinish: function(){
241
Draggable._dragging[element] = false
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
242
}
272
by Jacques Distler
Rails 2.2.2
243
});
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
244
},
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
246
revert: false,
238
by Jacques Distler
Scripts and Javascripts
247
quiet: false,
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
248
scroll: false,
249
scrollSensitivity: 20,
251
snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
272
by Jacques Distler
Rails 2.2.2
254
238
by Jacques Distler
Scripts and Javascripts
255
if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
256
Object.extend(defaults, {
257
starteffect: function(element) {
258
element._opacity = Element.getOpacity(element);
259
Draggable._dragging[element] = true;
272
by Jacques Distler
Rails 2.2.2
260
new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
261
}
272
by Jacques Distler
Rails 2.2.2
263
238
by Jacques Distler
Scripts and Javascripts
264
var options = Object.extend(defaults, arguments[1] || { });
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
265
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
266
this.element = $(element);
272
by Jacques Distler
Rails 2.2.2
267
238
by Jacques Distler
Scripts and Javascripts
268
if(options.handle && Object.isString(options.handle))
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
269
this.handle = this.element.down('.'+options.handle, 0);
272
by Jacques Distler
Rails 2.2.2
270
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
271
if(!this.handle) this.handle = $(options.handle);
272
if(!this.handle) this.handle = this.element;
272
by Jacques Distler
Rails 2.2.2
273
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
274
if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
275
options.scroll = $(options.scroll);
276
this._isScrollChild = Element.childOf(this.element, options.scroll);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
278
272
by Jacques Distler
Rails 2.2.2
279
Element.makePositioned(this.element); // fix IE
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
280
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
281
this.options = options;
272
by Jacques Distler
Rails 2.2.2
282
this.dragging = false;
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
283
284
this.eventMouseDown = this.initDrag.bindAsEventListener(this);
285
Event.observe(this.handle, "mousedown", this.eventMouseDown);
272
by Jacques Distler
Rails 2.2.2
286
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
287
Draggables.register(this);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
288
},
272
by Jacques Distler
Rails 2.2.2
289
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
290
destroy: function() {
291
Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
292
Draggables.unregister(this);
272
by Jacques Distler
Rails 2.2.2
294
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
295
currentDelta: function() {
297
parseInt(Element.getStyle(this.element,'left') || '0'),
298
parseInt(Element.getStyle(this.element,'top') || '0')]);
272
by Jacques Distler
Rails 2.2.2
300
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
301
initDrag: function(event) {
238
by Jacques Distler
Scripts and Javascripts
302
if(!Object.isUndefined(Draggable._dragging[this.element]) &&
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
303
Draggable._dragging[this.element]) return;
272
by Jacques Distler
Rails 2.2.2
304
if(Event.isLeftClick(event)) {
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
305
// abort on form elements, fixes a Firefox issue
306
var src = Event.element(event);
238
by Jacques Distler
Scripts and Javascripts
307
if((tag_name = src.tagName.toUpperCase()) && (
309
tag_name=='SELECT' ||
310
tag_name=='OPTION' ||
311
tag_name=='BUTTON' ||
312
tag_name=='TEXTAREA')) return;
272
by Jacques Distler
Rails 2.2.2
313
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
314
var pointer = [Event.pointerX(event), Event.pointerY(event)];
693
by Jacques Distler
Update Scriptaculous
315
var pos = this.element.cumulativeOffset();
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
316
this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
272
by Jacques Distler
Rails 2.2.2
317
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
318
Draggables.activate(this);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
319
Event.stop(event);
272
by Jacques Distler
Rails 2.2.2
322
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
323
startDrag: function(event) {
324
this.dragging = true;
238
by Jacques Distler
Scripts and Javascripts
325
if(!this.delta)
326
this.delta = this.currentDelta();
272
by Jacques Distler
Rails 2.2.2
327
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
328
if(this.options.zindex) {
329
this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
330
this.element.style.zIndex = this.options.zindex;
272
by Jacques Distler
Rails 2.2.2
332
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
333
if(this.options.ghosting) {
334
this._clone = this.element.cloneNode(true);
272
by Jacques Distler
Rails 2.2.2
335
this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
336
if (!this._originallyAbsolute)
238
by Jacques Distler
Scripts and Javascripts
337
Position.absolutize(this.element);
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
338
this.element.parentNode.insertBefore(this._clone, this.element);
272
by Jacques Distler
Rails 2.2.2
340
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
341
if(this.options.scroll) {
342
if (this.options.scroll == window) {
343
var where = this._getWindowScroll(this.options.scroll);
344
this.originalScrollLeft = where.left;
345
this.originalScrollTop = where.top;
347
this.originalScrollLeft = this.options.scroll.scrollLeft;
348
this.originalScrollTop = this.options.scroll.scrollTop;
272
by Jacques Distler
Rails 2.2.2
351
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
352
Draggables.notify('onStart', this, event);
272
by Jacques Distler
Rails 2.2.2
353
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
354
if(this.options.starteffect) this.options.starteffect(this.element);
272
by Jacques Distler
Rails 2.2.2
356
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
357
updateDrag: function(event, pointer) {
358
if(!this.dragging) this.startDrag(event);
272
by Jacques Distler
Rails 2.2.2
359
238
by Jacques Distler
Scripts and Javascripts
360
if(!this.options.quiet){
362
Droppables.show(pointer, this.element);
272
by Jacques Distler
Rails 2.2.2
364
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
365
Draggables.notify('onDrag', this, event);
272
by Jacques Distler
Rails 2.2.2
366
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
367
this.draw(pointer);
368
if(this.options.change) this.options.change(this);
272
by Jacques Distler
Rails 2.2.2
369
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
370
if(this.options.scroll) {
371
this.stopScrolling();
272
by Jacques Distler
Rails 2.2.2
372
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
373
var p;
374
if (this.options.scroll == window) {
375
with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
820
by Jacques Distler
Update Javascripts
377
p = Position.page(this.options.scroll).toArray();
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
378
p[0] += this.options.scroll.scrollLeft + Position.deltaX;
379
p[1] += this.options.scroll.scrollTop + Position.deltaY;
380
p.push(p[0]+this.options.scroll.offsetWidth);
381
p.push(p[1]+this.options.scroll.offsetHeight);
384
if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
385
if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
386
if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
387
if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
388
this.startScrolling(speed);
272
by Jacques Distler
Rails 2.2.2
390
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
391
// fix AppleWebKit rendering
238
by Jacques Distler
Scripts and Javascripts
392
if(Prototype.Browser.WebKit) window.scrollBy(0,0);
272
by Jacques Distler
Rails 2.2.2
393
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
394
Event.stop(event);
272
by Jacques Distler
Rails 2.2.2
396
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
397
finishDrag: function(event, success) {
398
this.dragging = false;
272
by Jacques Distler
Rails 2.2.2
399
238
by Jacques Distler
Scripts and Javascripts
400
if(this.options.quiet){
402
var pointer = [Event.pointerX(event), Event.pointerY(event)];
403
Droppables.show(pointer, this.element);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
405
406
if(this.options.ghosting) {
272
by Jacques Distler
Rails 2.2.2
407
if (!this._originallyAbsolute)
238
by Jacques Distler
Scripts and Javascripts
408
Position.relativize(this.element);
272
by Jacques Distler
Rails 2.2.2
409
delete this._originallyAbsolute;
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
410
Element.remove(this._clone);
272
by Jacques Distler
Rails 2.2.2
414
var dropped = false;
416
dropped = Droppables.fire(event, this.element);
417
if (!dropped) dropped = false;
238
by Jacques Distler
Scripts and Javascripts
418
}
419
if(dropped && this.options.onDropped) this.options.onDropped(this.element);
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
420
Draggables.notify('onEnd', this, event);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
421
422
var revert = this.options.revert;
238
by Jacques Distler
Scripts and Javascripts
423
if(revert && Object.isFunction(revert)) revert = revert(this.element);
272
by Jacques Distler
Rails 2.2.2
424
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
425
var d = this.currentDelta();
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
426
if(revert && this.options.reverteffect) {
238
by Jacques Distler
Scripts and Javascripts
427
if (dropped == 0 || revert != 'failure')
428
this.options.reverteffect(this.element,
429
d[1]-this.delta[1], d[0]-this.delta[0]);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
430
} else {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
431
this.delta = d;
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
432
}
434
if(this.options.zindex)
435
this.element.style.zIndex = this.originalZ;
272
by Jacques Distler
Rails 2.2.2
437
if(this.options.endeffect)
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
438
this.options.endeffect(this.element);
272
by Jacques Distler
Rails 2.2.2
439
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
440
Draggables.deactivate(this);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
441
Droppables.reset();
272
by Jacques Distler
Rails 2.2.2
443
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
444
keyPress: function(event) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
445
if(event.keyCode!=Event.KEY_ESC) return;
446
this.finishDrag(event, false);
272
by Jacques Distler
Rails 2.2.2
449
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
450
endDrag: function(event) {
451
if(!this.dragging) return;
452
this.stopScrolling();
453
this.finishDrag(event, true);
272
by Jacques Distler
Rails 2.2.2
456
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
457
draw: function(point) {
693
by Jacques Distler
Update Scriptaculous
458
var pos = this.element.cumulativeOffset();
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
459
if(this.options.ghosting) {
460
var r = Position.realOffset(this.element);
461
pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
272
by Jacques Distler
Rails 2.2.2
463
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
464
var d = this.currentDelta();
465
pos[0] -= d[0]; pos[1] -= d[1];
272
by Jacques Distler
Rails 2.2.2
466
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
467
if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
468
pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
469
pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
272
by Jacques Distler
Rails 2.2.2
471
472
var p = [0,1].map(function(i){
473
return (point[i]-pos[i]-this.offset[i])
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
474
}.bind(this));
272
by Jacques Distler
Rails 2.2.2
475
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
476
if(this.options.snap) {
238
by Jacques Distler
Scripts and Javascripts
477
if(Object.isFunction(this.options.snap)) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
478
p = this.options.snap(p[0],p[1],this);
238
by Jacques Distler
Scripts and Javascripts
480
if(Object.isArray(this.options.snap)) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
481
p = p.map( function(v, i) {
272
by Jacques Distler
Rails 2.2.2
482
return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
483
} else {
484
p = p.map( function(v) {
272
by Jacques Distler
Rails 2.2.2
485
return (v/this.options.snap).round()*this.options.snap }.bind(this));
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
486
}
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
487
}}
272
by Jacques Distler
Rails 2.2.2
488
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
489
var style = this.element.style;
490
if((!this.options.constraint) || (this.options.constraint=='horizontal'))
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
491
style.left = p[0] + "px";
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
492
if((!this.options.constraint) || (this.options.constraint=='vertical'))
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
493
style.top = p[1] + "px";
272
by Jacques Distler
Rails 2.2.2
494
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
495
if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
272
by Jacques Distler
Rails 2.2.2
497
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
498
stopScrolling: function() {
499
if(this.scrollInterval) {
500
clearInterval(this.scrollInterval);
501
this.scrollInterval = null;
502
Draggables._lastScrollPointer = null;
272
by Jacques Distler
Rails 2.2.2
505
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
506
startScrolling: function(speed) {
507
if(!(speed[0] || speed[1])) return;
508
this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
509
this.lastScrolled = new Date();
510
this.scrollInterval = setInterval(this.scroll.bind(this), 10);
272
by Jacques Distler
Rails 2.2.2
512
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
513
scroll: function() {
514
var current = new Date();
515
var delta = current - this.lastScrolled;
516
this.lastScrolled = current;
517
if(this.options.scroll == window) {
518
with (this._getWindowScroll(this.options.scroll)) {
519
if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
520
var d = delta / 1000;
521
this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
525
this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
526
this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
272
by Jacques Distler
Rails 2.2.2
528
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
529
Position.prepare();
530
Droppables.show(Draggables._lastPointer, this.element);
531
Draggables.notify('onDrag', this);
532
if (this._isScrollChild) {
533
Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
534
Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
535
Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
536
if (Draggables._lastScrollPointer[0] < 0)
537
Draggables._lastScrollPointer[0] = 0;
538
if (Draggables._lastScrollPointer[1] < 0)
539
Draggables._lastScrollPointer[1] = 0;
540
this.draw(Draggables._lastScrollPointer);
272
by Jacques Distler
Rails 2.2.2
542
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
543
if(this.options.change) this.options.change(this);
272
by Jacques Distler
Rails 2.2.2
545
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
546
_getWindowScroll: function(w) {
549
if (w.document.documentElement && documentElement.scrollTop) {
550
T = documentElement.scrollTop;
551
L = documentElement.scrollLeft;
552
} else if (w.document.body) {
559
} else if (w.document.documentElement && documentElement.clientWidth) {
560
W = documentElement.clientWidth;
561
H = documentElement.clientHeight;
563
W = body.offsetWidth;
272
by Jacques Distler
Rails 2.2.2
564
H = body.offsetHeight;
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
565
}
567
return { top: T, left: L, width: W, height: H };
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
568
}
238
by Jacques Distler
Scripts and Javascripts
569
});
571
Draggable._dragging = { };
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
572
573
/*--------------------------------------------------------------------------*/
238
by Jacques Distler
Scripts and Javascripts
575
var SortableObserver = Class.create({
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
576
initialize: function(element, observer) {
577
this.element = $(element);
578
this.observer = observer;
579
this.lastValue = Sortable.serialize(this.element);
272
by Jacques Distler
Rails 2.2.2
581
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
582
onStart: function() {
583
this.lastValue = Sortable.serialize(this.element);
272
by Jacques Distler
Rails 2.2.2
585
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
586
onEnd: function() {
588
if(this.lastValue != Sortable.serialize(this.element))
589
this.observer(this.element)
238
by Jacques Distler
Scripts and Javascripts
591
});
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
592
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
594
SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
272
by Jacques Distler
Rails 2.2.2
595
238
by Jacques Distler
Scripts and Javascripts
596
sortables: { },
272
by Jacques Distler
Rails 2.2.2
597
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
598
_findRootElement: function(element) {
272
by Jacques Distler
Rails 2.2.2
599
while (element.tagName.toUpperCase() != "BODY") {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
600
if(element.id && Sortable.sortables[element.id]) return element;
601
element = element.parentNode;
605
options: function(element) {
606
element = Sortable._findRootElement($(element));
608
return Sortable.sortables[element.id];
272
by Jacques Distler
Rails 2.2.2
610
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
611
destroy: function(element){
272
by Jacques Distler
Rails 2.2.2
612
element = $(element);
613
var s = Sortable.sortables[element.id];
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
615
if(s) {
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
616
Draggables.removeObserver(s.element);
617
s.droppables.each(function(d){ Droppables.remove(d) });
618
s.draggables.invoke('destroy');
272
by Jacques Distler
Rails 2.2.2
619
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
620
delete Sortable.sortables[s.element.id];
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
622
},
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
623
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
624
create: function(element) {
625
element = $(element);
272
by Jacques Distler
Rails 2.2.2
626
var options = Object.extend({
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
627
element: element,
628
tag: 'li', // assumes li children, override with tag: 'tagname'
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
630
tree: false,
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
632
overlap: 'vertical', // one of 'vertical', 'horizontal'
633
constraint: 'vertical', // one of 'vertical', 'horizontal', false
634
containment: element, // also takes array of elements (or id's); or false
635
handle: false, // or a CSS class
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
637
delay: 0,
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
638
hoverclass: null,
272
by Jacques Distler
Rails 2.2.2
640
quiet: false,
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
641
scroll: false,
642
scrollSensitivity: 20,
644
format: this.SERIALIZE_RULE,
272
by Jacques Distler
Rails 2.2.2
645
646
// these take arrays of elements or ids and can be
238
by Jacques Distler
Scripts and Javascripts
647
// used for better initialization performance
272
by Jacques Distler
Rails 2.2.2
650
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
651
onChange: Prototype.emptyFunction,
652
onUpdate: Prototype.emptyFunction
238
by Jacques Distler
Scripts and Javascripts
653
}, arguments[1] || { });
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
654
655
// clear any old sortable with same element
656
this.destroy(element);
658
// build options for the draggables
659
var options_for_draggable = {
238
by Jacques Distler
Scripts and Javascripts
661
quiet: options.quiet,
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
662
scroll: options.scroll,
663
scrollSpeed: options.scrollSpeed,
664
scrollSensitivity: options.scrollSensitivity,
665
delay: options.delay,
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
666
ghosting: options.ghosting,
667
constraint: options.constraint,
668
handle: options.handle };
670
if(options.starteffect)
671
options_for_draggable.starteffect = options.starteffect;
673
if(options.reverteffect)
674
options_for_draggable.reverteffect = options.reverteffect;
676
if(options.ghosting) options_for_draggable.reverteffect = function(element) {
677
element.style.top = 0;
678
element.style.left = 0;
681
if(options.endeffect)
682
options_for_draggable.endeffect = options.endeffect;
685
options_for_draggable.zindex = options.zindex;
272
by Jacques Distler
Rails 2.2.2
687
// build options for the droppables
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
688
var options_for_droppable = {
689
overlap: options.overlap,
690
containment: options.containment,
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
691
tree: options.tree,
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
692
hoverclass: options.hoverclass,
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
693
onHover: Sortable.onHover
272
by Jacques Distler
Rails 2.2.2
694
};
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
696
var options_for_tree = {
697
onHover: Sortable.onEmptyHover,
698
overlap: options.overlap,
699
containment: options.containment,
700
hoverclass: options.hoverclass
272
by Jacques Distler
Rails 2.2.2
701
};
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
702
703
// fix for gecko engine
272
by Jacques Distler
Rails 2.2.2
704
Element.cleanWhitespace(element);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
705
706
options.draggables = [];
707
options.droppables = [];
709
// drop on empty handling
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
710
if(options.dropOnEmpty || options.tree) {
711
Droppables.add(element, options_for_tree);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
712
options.droppables.push(element);
238
by Jacques Distler
Scripts and Javascripts
715
(options.elements || this.findElements(element, options) || []).each( function(e,i) {
716
var handle = options.handles ? $(options.handles[i]) :
272
by Jacques Distler
Rails 2.2.2
717
(options.handle ? $(e).select('.' + options.handle)[0] : e);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
718
options.draggables.push(
719
new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
720
Droppables.add(e, options_for_droppable);
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
721
if(options.tree) e.treeNode = element;
272
by Jacques Distler
Rails 2.2.2
722
options.droppables.push(e);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
723
});
272
by Jacques Distler
Rails 2.2.2
724
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
725
if(options.tree) {
726
(Sortable.findTreeElements(element, options) || []).each( function(e) {
727
Droppables.add(e, options_for_tree);
728
e.treeNode = element;
729
options.droppables.push(e);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
732
693
by Jacques Distler
Update Scriptaculous
734
this.sortables[element.identify()] = options;
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
735
737
Draggables.addObserver(new SortableObserver(element, options.onUpdate));
741
// return all suitable-for-sortable elements in a guaranteed order
742
findElements: function(element, options) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
743
return Element.findChildren(
744
element, options.only, options.tree ? true : false, options.tag);
272
by Jacques Distler
Rails 2.2.2
746
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
747
findTreeElements: function(element, options) {
748
return Element.findChildren(
749
element, options.only, options.tree ? true : false, options.treeTag);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
750
},
752
onHover: function(element, dropon, overlap) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
753
if(Element.isParent(dropon, element)) return;
755
if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
757
} else if(overlap>0.5) {
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
758
Sortable.mark(dropon, 'before');
759
if(dropon.previousSibling != element) {
760
var oldParentNode = element.parentNode;
761
element.style.visibility = "hidden"; // fix gecko rendering
762
dropon.parentNode.insertBefore(element, dropon);
272
by Jacques Distler
Rails 2.2.2
763
if(dropon.parentNode!=oldParentNode)
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
764
Sortable.options(oldParentNode).onChange(element);
765
Sortable.options(dropon.parentNode).onChange(element);
768
Sortable.mark(dropon, 'after');
769
var nextElement = dropon.nextSibling || null;
770
if(nextElement != element) {
771
var oldParentNode = element.parentNode;
772
element.style.visibility = "hidden"; // fix gecko rendering
773
dropon.parentNode.insertBefore(element, nextElement);
272
by Jacques Distler
Rails 2.2.2
774
if(dropon.parentNode!=oldParentNode)
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
775
Sortable.options(oldParentNode).onChange(element);
776
Sortable.options(dropon.parentNode).onChange(element);
272
by Jacques Distler
Rails 2.2.2
780
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
781
onEmptyHover: function(element, dropon, overlap) {
782
var oldParentNode = element.parentNode;
783
var droponOptions = Sortable.options(dropon);
272
by Jacques Distler
Rails 2.2.2
784
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
785
if(!Element.isParent(dropon, element)) {
272
by Jacques Distler
Rails 2.2.2
787
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
788
var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
272
by Jacques Distler
Rails 2.2.2
790
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
791
if(children) {
792
var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
272
by Jacques Distler
Rails 2.2.2
793
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
794
for (index = 0; index < children.length; index += 1) {
795
if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
796
offset -= Element.offsetSize (children[index], droponOptions.overlap);
797
} else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
798
child = index + 1 < children.length ? children[index + 1] : null;
801
child = children[index];
272
by Jacques Distler
Rails 2.2.2
806
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
807
dropon.insertBefore(element, child);
272
by Jacques Distler
Rails 2.2.2
808
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
809
Sortable.options(oldParentNode).onChange(element);
810
droponOptions.onChange(element);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
811
}
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
815
if(Sortable._marker) Sortable._marker.hide();
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
816
},
818
mark: function(dropon, position) {
819
// mark on ghosting only
820
var sortable = Sortable.options(dropon.parentNode);
272
by Jacques Distler
Rails 2.2.2
821
if(sortable && !sortable.ghosting) return;
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
822
823
if(!Sortable._marker) {
272
by Jacques Distler
Rails 2.2.2
824
Sortable._marker =
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
825
($('dropmarker') || Element.extend(document.createElement('DIV'))).
826
hide().addClassName('dropmarker').setStyle({position:'absolute'});
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
827
document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
272
by Jacques Distler
Rails 2.2.2
828
}
693
by Jacques Distler
Update Scriptaculous
829
var offsets = dropon.cumulativeOffset();
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
830
Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
272
by Jacques Distler
Rails 2.2.2
831
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
832
if(position=='after')
272
by Jacques Distler
Rails 2.2.2
833
if(sortable.overlap == 'horizontal')
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
834
Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
836
Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
272
by Jacques Distler
Rails 2.2.2
837
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
838
Sortable._marker.show();
272
by Jacques Distler
Rails 2.2.2
840
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
841
_tree: function(element, options, parent) {
842
var children = Sortable.findElements(element, options) || [];
272
by Jacques Distler
Rails 2.2.2
843
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
844
for (var i = 0; i < children.length; ++i) {
845
var match = children[i].id.match(options.format);
847
if (!match) continue;
272
by Jacques Distler
Rails 2.2.2
848
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
849
var child = {
850
id: encodeURIComponent(match ? match[1] : null),
854
position: parent.children.length,
855
container: $(children[i]).down(options.treeTag)
272
by Jacques Distler
Rails 2.2.2
856
};
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
858
/* Get the element containing the children and recurse over it */
272
by Jacques Distler
Rails 2.2.2
860
this._tree(child.container, options, child);
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
862
parent.children.push (child);
272
by Jacques Distler
Rails 2.2.2
865
return parent;
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
866
},
868
tree: function(element) {
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
869
element = $(element);
870
var sortableOptions = this.options(element);
871
var options = Object.extend({
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
872
tag: sortableOptions.tag,
873
treeTag: sortableOptions.treeTag,
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
874
only: sortableOptions.only,
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
876
format: sortableOptions.format
238
by Jacques Distler
Scripts and Javascripts
877
}, arguments[1] || { });
272
by Jacques Distler
Rails 2.2.2
878
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
879
var root = {
272
by Jacques Distler
Rails 2.2.2
885
};
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
887
return Sortable._tree(element, options, root);
890
/* Construct a [i] index for a particular node */
891
_constructIndex: function(node) {
894
if (node.id) index = '[' + node.position + ']' + index;
895
} while ((node = node.parent) != null);
899
sequence: function(element) {
900
element = $(element);
238
by Jacques Distler
Scripts and Javascripts
901
var options = Object.extend(this.options(element), arguments[1] || { });
272
by Jacques Distler
Rails 2.2.2
902
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
903
return $(this.findElements(element, options) || []).map( function(item) {
904
return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
908
setSequence: function(element, new_sequence) {
909
element = $(element);
238
by Jacques Distler
Scripts and Javascripts
910
var options = Object.extend(this.options(element), arguments[2] || { });
272
by Jacques Distler
Rails 2.2.2
911
238
by Jacques Distler
Scripts and Javascripts
912
var nodeMap = { };
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
913
this.findElements(element, options).each( function(n) {
914
if (n.id.match(options.format))
915
nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
916
n.parentNode.removeChild(n);
272
by Jacques Distler
Rails 2.2.2
918
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
919
new_sequence.each(function(ident) {
920
var n = nodeMap[ident];
922
n[1].appendChild(n[0]);
923
delete nodeMap[ident];
272
by Jacques Distler
Rails 2.2.2
927
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
928
serialize: function(element) {
929
element = $(element);
238
by Jacques Distler
Scripts and Javascripts
930
var options = Object.extend(Sortable.options(element), arguments[1] || { });
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
931
var name = encodeURIComponent(
932
(arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
272
by Jacques Distler
Rails 2.2.2
933
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
934
if (options.tree) {
935
return Sortable.tree(element, arguments[1]).children.map( function (item) {
272
by Jacques Distler
Rails 2.2.2
936
return [name + Sortable._constructIndex(item) + "[id]=" +
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
937
encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
938
}).flatten().join('&');
940
return Sortable.sequence(element, arguments[1]).map( function(item) {
941
return name + "[]=" + encodeURIComponent(item);
1
by Jacques Distler
Checkout of Instiki Trunk 1/21/2007.
944
}
272
by Jacques Distler
Rails 2.2.2
945
};
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
946
947
// Returns true if child is contained within element
948
Element.isParent = function(child, element) {
949
if (!child.parentNode || child == element) return false;
950
if (child.parentNode == element) return true;
951
return Element.isParent(child.parentNode, element);
272
by Jacques Distler
Rails 2.2.2
952
};
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
953
272
by Jacques Distler
Rails 2.2.2
954
Element.findChildren = function(element, only, recursive, tagName) {
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
955
if(!element.hasChildNodes()) return null;
956
tagName = tagName.toUpperCase();
957
if(only) only = [only].flatten();
959
$A(element.childNodes).each( function(e) {
960
if(e.tagName && e.tagName.toUpperCase()==tagName &&
961
(!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
964
var grandchildren = Element.findChildren(e, only, recursive, tagName);
965
if(grandchildren) elements.push(grandchildren);
969
return (elements.length>0 ? elements.flatten() : []);
272
by Jacques Distler
Rails 2.2.2
970
};
24
by Jacques Distler
Sync with latest (2/13/2007) Instiki svn.
971
972
Element.offsetSize = function (element, type) {
973
return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
272
by Jacques Distler
Rails 2.2.2
974
};