summaryrefslogtreecommitdiff
path: root/media/javascript/lib/EventHandler.js
blob: fbc94b00c7b2205a1a048c7c01a55b81e6bab754 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/********************************************************************************************
* BlueShoes Framework; This file is part of the php application framework.
* NOTE: This code is stripped (obfuscated). To get the clean documented code goto 
*       www.blueshoes.org and register for the free open source *DEVELOPER* version or 
*       buy the commercial version.
*       
*       In case you've already got the developer version, then this is one of the few 
*       packages/classes that is only available to *PAYING* customers.
*       To get it go to www.blueshoes.org and buy a commercial version.
* 
* @copyright www.blueshoes.org
* @author    Samuel Blume <sam at blueshoes dot org>
* @author    Andrej Arn <andrej at blueshoes dot org>
*/
_grabObj = null;function EventCtrl(div){
this.div   = div;this.type  = ''; this.mask  = 0;this.pageX = 0;  this.pageY = 0;}
EventCtrl.prototype.linkCtrl = function(obj){
if(obj && !obj.eventCtrl) obj.eventCtrl=this;return this;}
EventCtrl.prototype.setThreshold = function(threshold){
this.threshold = threshold;return this;}
function getCtrlFromElementIE(el,tagName){
for(;el;el=el.parentElement)
if((tagName==null || el.tagName==tagName) && el.eventCtrl)
return el.eventCtrl;return null;}
function getCtrlFromEventIE(e,tagName){
var ctrl=_grabObj;var event=window.event;var fromCtrl, toCtrl;if (ctrl==null){
var mask=0, type=event.type;switch(type){
case 'mouseover':
fromCtrl = getCtrlFromElementIE(event.fromElement,tagName);toCtrl   = getCtrlFromElementIE(event.toElement,  tagName);if(fromCtrl!=toCtrl) ctrl=toCtrl;if(!ctrl || (ctrl.mask&1)==0) ctrl=null;break;case 'mouseout':
fromCtrl = getCtrlFromElementIE(event.fromElement,tagName);toCtrl   = getCtrlFromElementIE(event.toElement,  tagName);if(fromCtrl!=toCtrl) ctrl=fromCtrl;if(!ctrl || (ctrl.mask&1)==0) ctrl=null;break;case 'mousedown':
case 'mousemove':
case 'mouseup':
ctrl = getCtrlFromElementIE(event.srcElement,tagName);if(ctrl && (ctrl.mask&2)!=0) break;default: ctrl=null; break;}
}
if(ctrl){
ctrl.pageX = document.body.scrollLeft+event.clientX;ctrl.pageY = document.body.scrollTop +event.clientY;ctrl.type  = event.type;}
return ctrl;}
function getCtrlFromEventNN4(e,tagName){
var ctrl=_grabObj;if(ctrl==null) ctrl=e.target.eventCtrl;if(ctrl){
var mask=0;switch(e.type){
case 'mouseover': case 'mouseout':
mask|=1; break;case 'mousedown': case 'mousemove': case 'mouseup':
mask|=2; break;}
if((ctrl.mask&mask)!=0){
ctrl.pageX = e.pageX; ctrl.pageY = e.pageY;ctrl.type  = e.type;} else ctrl=null;}
return ctrl;}
function getCtrlFromEventMz(e,tagName){
var ctrl=_grabObj;if(ctrl==null){
for(var t=e.target; t!=null; t=t.parentNode){
if((  tagName==null
||(t.nodeType==Node.ELEMENT_NODE && t.tagName==tagName))
&& ('undefined' != typeof(t.eventCtrl)) ){
ctrl=t.eventCtrl;break;}
}
}
if(ctrl){
ctrl.pageX = e.clientX+window.scrollX;ctrl.pageY = e.clientY+window.scrollY;ctrl.type  = e.type;}
return ctrl;}
function getCtrlFromEventNop(e,tagName){ return null; }
getCtrlFromEvent=(_dom==1||_dom==2)?getCtrlFromEventIE:
(_dom==3?getCtrlFromEventNN4:
(_dom==4?getCtrlFromEventMz:
getCtrlFromEventNop));function ech_mouseover(e){
var ctrl = getCtrlFromEvent(e,null);if(ctrl && ctrl.mouseover && !ctrl.mouseoverState){
ctrl.mouseoverState = true;if(ctrl.mouseover) ctrl.mouseover(ctrl,ctrl.mouseoverClient);}
}
function ech_mouseout(e){
var ctrl = getCtrlFromEvent(e,null);if(ctrl && ctrl.mouseover && ctrl.mouseoverState){
ctrl.mouseoverState = false;if(ctrl.mouseout) ctrl.mouseout(ctrl,ctrl.mouseoutClient);}
}
function ech_mousedown(e){
var ctrl = getCtrlFromEvent(e,null);if(ctrl && !ctrl.dragging){
_grabObj = ctrl; ctrl.dragging=true; ctrl.dragged = false;ctrl.startX = ctrl.curX = ctrl.pageX;ctrl.startY = ctrl.curY = ctrl.pageY;if(ctrl.mousedown) ctrl.mousedown(ctrl,ctrl.mousedownClient);return false;}
return true;}
function ech_mousemove(e){
var ctrl = getCtrlFromEvent(e,null);if(ctrl && ctrl.dragging){
if(ctrl.curX!=ctrl.pageX || ctrl.curY!=ctrl.pageY){
if(Math.abs(ctrl.pageX-ctrl.startX)>ctrl.threshold || Math.abs(ctrl.pageY-ctrl.startY)>ctrl.threshold)
ctrl.dragged = true;if(ctrl.mousemove) ctrl.mousemove(ctrl,ctrl.mousemoveClient);ctrl.curX = ctrl.pageX; ctrl.curY = ctrl.pageY;}
return false;}
return true;}
function ech_mouseup(e){
var ctrl = getCtrlFromEvent(e,null);if(ctrl && ctrl.dragging){
_grabObj = null; ctrl.dragging = false;if(ctrl.mouseup) ctrl.mouseup(ctrl,ctrl.mouseupClient);if(!ctrl.dragged && ctrl.mouseclick)
ctrl.mouseclick(ctrl,ctrl.mouseclickClient);ctrl.curX = ctrl.pageX; ctrl.curY = ctrl.pageY;return false;}
return true;}
function ech_attachMouseOverOut(div,ovrf,ovrc,outf,outc){
if(!div.eventCtrl) div.eventCtrl = new EventCtrl(div);var ctrl = div.eventCtrl;ctrl.mouseoverState = false;ctrl.mouseover  = ovrf; ctrl.mouseoverClient = ovrc;ctrl.mouseout   = outf; ctrl.mouseoutClient  = outc;div.onmouseover = ech_mouseover;div.onmouseout  = ech_mouseout;ctrl.mask|=1;return ctrl;}
function ech_detachMouseOverOut(div){
var ctrl = div.eventCtrl;if(ctrl){
ctrl.div.onmouseover = null;ctrl.div.onmouseout  = null;ctrl.mask=~1;}
}
function ech_attachMouseDrag(div,dwnf,dwnc,movf,movc,upf,upc,clkf,clkc){
var doc;if(_dom==1||_dom==2){
doc = div;doc.onmousedown      = ech_mousedown;document.onmousemove = ech_mousemove;document.onmouseup   = ech_mouseup;} else if(_dom==3){
doc = div.document;doc.onmousedown = ech_mousedown;doc.onmousemove = ech_mousemove;doc.onmouseup   = ech_mouseup;doc.captureEvents(Event.MOUSEDOWN|Event.MOUSEMOVE|Event.MOUSEUP);} else if(_dom==4){
doc = div;div.onmousedown           = ech_mousedown;document.body.onmousemove = ech_mousemove;document.body.onmouseup   = ech_mouseup;} else return null;if(!doc.eventCtrl) doc.eventCtrl = new EventCtrl(div);var ctrl=doc.eventCtrl;ctrl.dragging  = false; ctrl.dragged   = false;ctrl.startX    = 0;     ctrl.startY    = 0;ctrl.curX      = 0;     ctrl.curY      = 0;ctrl.mousedown = dwnf; ctrl.mousedownClient = dwnc;ctrl.mousemove = movf; ctrl.mousemoveClient = movc;ctrl.mouseup   = upf;  ctrl.mouseupClient   = upc;ctrl.mouseclick= clkf; ctrl.mouseclickClient= clkc;ctrl.threshold = 5;ctrl.mask|=2;return ctrl;}
function ech_detachMouseDrag(div){
var ctrl = null;if(_dom==1||_dom==2){
ctrl=div.eventCtrl;if(ctrl) ctrl.div.onmousedown=null;} else if(_dom==3){
ctrl = div.document.eventCtrl;if(ctrl){
var doc = ctrl.div.document;doc.releaseEvents(Event.MOUSEDOWN|Event.MOUSEMOVE|Event.MOUSEUP);doc.onmousedown = null;doc.onmousemove = null;doc.onmouseup   = null;}
} else if(_dom==4){
ctrl = div.eventCtrl;if(ctrl) ctrl.div.onmousedown=null;}
if(ctrl) ctrl.mask&=~2;}