Subversion Repositories wimsdev

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
/*
2
        DynAPI Distribution
3
        MouseEvent Class
4
 
5
        The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
6
 
7
        requires: dynapi.api.DynDocument
8
*/
9
 
10
function MouseEvent(dyndoc) {
11
        this.DynEvent = DynEvent;
12
        this.DynEvent();
13
        this.bubble = true;
14
        this._mouseEvent = null;
15
        this._relative = null;
16
        this._dyndoc = dyndoc;
17
};
18
var p = dynapi.setPrototype('MouseEvent','DynEvent');
19
p.getX = function() {return this.x};
20
p.getY = function() {return this.y};
21
p.getPageX = function() {return this.pageX};
22
p.getPageY = function() {return this.pageY};
23
p.trapMouseUp = dynapi.functions.Null;
24
p.getRelative = function() {return this._relative};
25
p.preventBubble = function() {
26
        this.bubble = false;
27
};
28
p.getButton = function() {
29
        if (!this._mouseEvent) return "left";
30
        var b = this._mouseEvent.which;
31
        if (b==2) return "middle";
32
        if (b==3) return "right";
33
        else return "left";
34
};
35
p._init = function(type,e,src) {
36
        this.type = type;
37
        this._mouseEvent = e;
38
        this.origin = src;
39
        this.bubbleChild = null;
40
        this.defaultValue = true;
41
        this.bubble = true;
42
};
43
p._invoke = function() {
44
        var o = this.origin;
45
        o.invokeEvent(this.type,this);
46
};
47
MouseEvent._getContainerLayerOf = function(element) {
48
        if (!element) return null;
49
        while (!element._dynobj && element.parentNode && element.parentNode!=element) {
50
                element = element.parentNode;
51
        }
52
        return element._dynobj;
53
};
54
MouseEvent._eventHandler = function(e) {
55
        var dynobj = this._dynobj;
56
        if (!dynobj) return true;
57
        var dyndoc = dynobj._dyndoc;
58
        var target = e.target;
59
 
60
        var me = dyndoc._mouseEvent;
61
        var src = MouseEvent._getContainerLayerOf(target);
62
        me._init(e.type,e,src);
63
        var rel = e.relatedTarget;
64
        var r = me._relative = MouseEvent._getContainerLayerOf(rel);
65
        if (e.type=="mouseout" || e.type=="mouseover") {
66
                if(!r && dynapi.ua.opera) return; //fix for #15
67
                if (r && (r==src||src.isParentOf(r))) return; // fix for #15
68
                if (r && (r==src.parent||r.isChildOf(src.parent))) me.bubble=false;
69
        }
70
        me.pageX = e.clientX;
71
        me.pageY = e.clientY;
72
        if(!src) return;
73
        me.x = me.pageX - src.getPageX(); //offsetX;
74
        me.y = me.pageY - src.getPageY(); //offsetY;
75
        e.cancelBubble = true;
76
        me._invoke();
77
 
78
        var tn=(target.tagName+'').toLowerCase();
79
 
80
        // fix for form elements inside drag-enabled layer #08
81
        if(e.type=='mousedown' && tn=='input'||tn=='textarea'||tn=='button') {
82
                var de=dynapi.frame.DragEvent;
83
                de=(de && de.dragevent)? de.dragevent:null;
84
                if(de && de.isDragging) de.cancelDrag();
85
        }
86
 
87
        // prevent image dragging
88
        if(tn=='img' && typeof(target.onmousedown)!="function") {
89
                target.onmousedown=dynapi.functions.False;
90
        }
91
 
92
        // disable text select
93
        if (e.type=='mousedown' && src._textSelectable==false) {
94
                e.preventDefault();
95
                return false;
96
        }
97
 
98
};
99
 
100
DynElement.prototype.captureMouseEvents = function() {
101
        this._hasMouseEvents = true;
102
        var elm = (this.getClassName()=='DynDocument')? this.doc : this.elm;
103
        if(elm) {
104
                elm.addEventListener("mousemove",MouseEvent._eventHandler,false);
105
                elm.addEventListener("mousedown",MouseEvent._eventHandler,false);
106
                elm.addEventListener("mouseup",MouseEvent._eventHandler,false);
107
                elm.addEventListener("mouseover",MouseEvent._eventHandler,false);
108
                elm.addEventListener("mouseout",MouseEvent._eventHandler,false);
109
                elm.addEventListener("click",MouseEvent._eventHandler,false);
110
                elm.addEventListener("dblclick",MouseEvent._eventHandler,false);
111
        }
112
};
113
DynElement.prototype.releaseMouseEvents=function() {
114
        this._hasMouseEvents = false;
115
        var elm = (this.getClassName()=='DynDocument')? this.doc : this.elm;
116
        if (typeof(elm)=='object') {
117
        /*      elm.removeEventListener("mousemove",MouseEvent._eventHandler,false);
118
                elm.removeEventListener("mousedown",MouseEvent._eventHandler,false);
119
                elm.removeEventListener("mouseup",MouseEvent._eventHandler,false);
120
                elm.removeEventListener("mouseover",MouseEvent._eventHandler,false);
121
                elm.removeEventListener("mouseout",MouseEvent._eventHandler,false);
122
                elm.removeEventListener("click",MouseEvent._eventHandler,false);
123
                elm.removeEventListener("dblclick",MouseEvent._eventHandler,false);*/
124
        }
125
};
126
 
127
function main() {
128
        dynapi.document._mouseEvent = new MouseEvent(dynapi.document);
129
};
130
if (!dynapi.loaded) main();