author | Tero Marttila <terom@fixme.fi> |
Tue, 05 May 2009 19:37:32 +0300 | |
changeset 13 | a0cb32f3de3d |
permissions | -rw-r--r-- |
13
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
// script.aculo.us dragdrop.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007 |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
// (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
// |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
// script.aculo.us is freely distributable under the terms of an MIT-style license. |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
// For details, see the script.aculo.us web site: http://script.aculo.us/ |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
// |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
// Modified by Tero Marttila to strip unused code |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
var Draggables = { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
drags: [], |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
observers: [], |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
register: function(draggable) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
if(this.drags.length == 0) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
this.eventMouseUp = this.endDrag.bindAsEventListener(this); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
this.eventMouseMove = this.updateDrag.bindAsEventListener(this); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
this.eventKeypress = this.keyPress.bindAsEventListener(this); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
Event.observe(document, "mouseup", this.eventMouseUp); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
Event.observe(document, "mousemove", this.eventMouseMove); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
Event.observe(document, "keypress", this.eventKeypress); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
} |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
this.drags.push(draggable); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
unregister: function(draggable) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
this.drags = this.drags.reject(function(d) { return d==draggable }); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
if(this.drags.length == 0) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
Event.stopObserving(document, "mouseup", this.eventMouseUp); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
Event.stopObserving(document, "mousemove", this.eventMouseMove); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
Event.stopObserving(document, "keypress", this.eventKeypress); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
} |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
activate: function(draggable) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
if(draggable.options.delay) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
this._timeout = setTimeout(function() { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
Draggables._timeout = null; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
window.focus(); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
Draggables.activeDraggable = draggable; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
}.bind(this), draggable.options.delay); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
} else { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
window.focus(); // allows keypress events if window isn't currently focused, fails for Safari |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
this.activeDraggable = draggable; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
} |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
deactivate: function() { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
this.activeDraggable = null; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
updateDrag: function(event) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
if(!this.activeDraggable) return; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
var pointer = [Event.pointerX(event), Event.pointerY(event)]; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
// Mozilla-based browsers fire successive mousemove events with |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
// the same coordinates, prevent needless redrawing (moz bug?) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
this._lastPointer = pointer; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
this.activeDraggable.updateDrag(event, pointer); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
endDrag: function(event) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
if(this._timeout) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
clearTimeout(this._timeout); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |
this._timeout = null; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
69 |
} |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
if(!this.activeDraggable) return; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
this._lastPointer = null; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
this.activeDraggable.endDrag(event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
this.activeDraggable = null; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
74 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
75 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
76 |
keyPress: function(event) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
77 |
if(this.activeDraggable) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
78 |
this.activeDraggable.keyPress(event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
79 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
80 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
addObserver: function(observer) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
82 |
this.observers.push(observer); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
83 |
this._cacheObserverCallbacks(); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
84 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
removeObserver: function(element) { // element instead of observer fixes mem leaks |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
87 |
this.observers = this.observers.reject( function(o) { return o.element==element }); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
this._cacheObserverCallbacks(); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag' |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
if(this[eventName+'Count'] > 0) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
93 |
this.observers.each( function(o) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
94 |
if(o[eventName]) o[eventName](eventName, draggable, event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
95 |
}); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
96 |
if(draggable.options[eventName]) draggable.options[eventName](draggable, event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
97 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
98 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
99 |
_cacheObserverCallbacks: function() { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
100 |
['onStart','onEnd','onDrag'].each( function(eventName) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
101 |
Draggables[eventName+'Count'] = Draggables.observers.select( |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
102 |
function(o) { return o[eventName]; } |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
103 |
).length; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
104 |
}); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
105 |
} |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
106 |
} |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
107 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
108 |
/*--------------------------------------------------------------------------*/ |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
109 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
110 |
var Draggable = Class.create({ |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
111 |
initialize: function(element) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
112 |
var defaults = { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
113 |
handle: false, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
114 |
zindex: 1000, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
115 |
quiet: false, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
116 |
delay: 0 |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
117 |
}; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
118 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
119 |
var options = Object.extend(defaults, arguments[1] || { }); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
120 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
121 |
this.element = $(element); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
122 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
123 |
if(options.handle && Object.isString(options.handle)) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
124 |
this.handle = this.element.down('.'+options.handle, 0); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
125 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
126 |
if(!this.handle) this.handle = $(options.handle); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
127 |
if(!this.handle) this.handle = this.element; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
128 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
129 |
Element.makePositioned(this.element); // fix IE |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
130 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
131 |
this.options = options; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
132 |
this.dragging = false; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
133 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
134 |
this.eventMouseDown = this.initDrag.bindAsEventListener(this); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
135 |
Event.observe(this.handle, "mousedown", this.eventMouseDown); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
136 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
137 |
Draggables.register(this); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
138 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
139 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
140 |
destroy: function() { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
141 |
Event.stopObserving(this.handle, "mousedown", this.eventMouseDown); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
142 |
Draggables.unregister(this); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
143 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
144 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
145 |
currentDelta: function() { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
146 |
return([ |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
147 |
parseInt(Element.getStyle(this.element,'left') || '0'), |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
148 |
parseInt(Element.getStyle(this.element,'top') || '0')]); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
149 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
150 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
151 |
initDrag: function(event) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
152 |
if(!Object.isUndefined(Draggable._dragging[this.element]) && |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
153 |
Draggable._dragging[this.element]) return; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
154 |
if(Event.isLeftClick(event)) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
155 |
// abort on form elements, fixes a Firefox issue |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
156 |
var src = Event.element(event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
157 |
if((tag_name = src.tagName.toUpperCase()) && ( |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
158 |
tag_name=='INPUT' || |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
159 |
tag_name=='SELECT' || |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
160 |
tag_name=='OPTION' || |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
161 |
tag_name=='BUTTON' || |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
162 |
tag_name=='TEXTAREA')) return; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
163 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
164 |
var pointer = [Event.pointerX(event), Event.pointerY(event)]; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
165 |
var pos = Position.cumulativeOffset(this.element); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
166 |
this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
167 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
168 |
Draggables.activate(this); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
169 |
Event.stop(event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
170 |
} |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
171 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
172 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
173 |
startDrag: function(event) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
174 |
this.dragging = true; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
175 |
if(!this.delta) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
176 |
this.delta = this.currentDelta(); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
177 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
178 |
if(this.options.zindex) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
179 |
this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
180 |
this.element.style.zIndex = this.options.zindex; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
181 |
} |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
182 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
183 |
Draggables.notify('onStart', this, event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
184 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
185 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
186 |
updateDrag: function(event, pointer) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
187 |
if(!this.dragging) this.startDrag(event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
188 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
189 |
Draggables.notify('onDrag', this, event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
190 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
191 |
this.draw(pointer); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
192 |
if(this.options.change) this.options.change(this); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
193 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
194 |
// fix AppleWebKit rendering |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
195 |
if(Prototype.Browser.WebKit) window.scrollBy(0,0); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
196 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
197 |
Event.stop(event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
198 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
199 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
200 |
finishDrag: function(event, success) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
201 |
this.dragging = false; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
202 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
203 |
Draggables.notify('onEnd', this, event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
204 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
205 |
var d = this.currentDelta(); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
206 |
this.delta = d; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
207 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
208 |
if(this.options.zindex) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
209 |
this.element.style.zIndex = this.originalZ; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
210 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
211 |
Draggables.deactivate(this); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
212 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
213 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
214 |
keyPress: function(event) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
215 |
if(event.keyCode!=Event.KEY_ESC) return; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
216 |
this.finishDrag(event, false); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
217 |
Event.stop(event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
218 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
219 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
220 |
endDrag: function(event) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
221 |
if(!this.dragging) return; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
222 |
this.finishDrag(event, true); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
223 |
Event.stop(event); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
224 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
225 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
226 |
draw: function(point) { |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
227 |
var pos = Position.cumulativeOffset(this.element); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
228 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
229 |
var d = this.currentDelta(); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
230 |
pos[0] -= d[0]; pos[1] -= d[1]; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
231 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
232 |
var p = [0,1].map(function(i){ |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
233 |
return (point[i]-pos[i]-this.offset[i]) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
234 |
}.bind(this)); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
235 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
236 |
var style = this.element.style; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
237 |
if((!this.options.constraint) || (this.options.constraint=='horizontal')) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
238 |
style.left = p[0] + "px"; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
239 |
if((!this.options.constraint) || (this.options.constraint=='vertical')) |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
240 |
style.top = p[1] + "px"; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
241 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
242 |
if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
243 |
}, |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
244 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
245 |
}); |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
246 |
|
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
247 |
Draggable._dragging = { }; |
a0cb32f3de3d
add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
248 |