mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-08-14 02:18:31 +02:00
Addition of some javascript files, for functionalities explained earlier.
This commit is contained in:
124
phpgwapi/js/dynapi/api/mouse_ie.js
Normal file
124
phpgwapi/js/dynapi/api/mouse_ie.js
Normal file
@ -0,0 +1,124 @@
|
||||
/*
|
||||
DynAPI Distribution
|
||||
MouseEvent Class
|
||||
|
||||
The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
|
||||
|
||||
requires: dynapi.api.DynDocument
|
||||
*/
|
||||
|
||||
function MouseEvent(dyndoc) {
|
||||
this.DynEvent = DynEvent;
|
||||
this.DynEvent();
|
||||
this.bubble = true;
|
||||
this._mouseEvent = null;
|
||||
this._relative = null;
|
||||
this._dyndoc = dyndoc;
|
||||
};
|
||||
var p = dynapi.setPrototype('MouseEvent','DynEvent');
|
||||
p.getX = function() {return this.x};
|
||||
p.getY = function() {return this.y};
|
||||
p.getPageX = function() {return this.pageX};
|
||||
p.getPageY = function() {return this.pageY};
|
||||
p.getRelative = function() {return this._relative};
|
||||
p.preventBubble = function() {this.bubble = false;};
|
||||
p.getButton = function() {
|
||||
if (!this._mouseEvent) return "left";
|
||||
var b = this._mouseEvent.button;
|
||||
if (b==4) return "middle";
|
||||
if (b==2) return "right";
|
||||
else return "left";
|
||||
};
|
||||
p._init = function(type,e,src) {
|
||||
this.type = type;
|
||||
this._mouseEvent = e;
|
||||
this.origin = src;
|
||||
this.bubbleChild = null;
|
||||
this.defaultValue = true;
|
||||
this.bubble = true;
|
||||
};
|
||||
p._invoke = function() {
|
||||
var o = this.origin;
|
||||
o.invokeEvent(this.type,this);
|
||||
};
|
||||
|
||||
MouseEvent._getContainerLayerOf = function(element) {
|
||||
if (!element) return null;
|
||||
while (!element._dynobj && element.parentElement && element.parentElement!=element) {
|
||||
element = element.parentElement;
|
||||
}
|
||||
return element._dynobj;
|
||||
};
|
||||
//MouseEvent.trapMouseUp = dynapi.functions.False; // or MouseEvent.trapMouseUp=null
|
||||
|
||||
MouseEvent._eventHandler = function() {
|
||||
var e = dynapi.frame.event;
|
||||
var dynobj;
|
||||
if (this._dynobj) dynobj = this._dynobj;
|
||||
else if (e.srcElement._dynobj) dynobj = e.srcElement._dynobj;
|
||||
else dynobj = dynapi.document;
|
||||
|
||||
var dyndoc = dynobj._dyndoc;
|
||||
var target = e.srcElement;
|
||||
|
||||
var me = dyndoc._mouseEvent;
|
||||
var src = MouseEvent._getContainerLayerOf(target);
|
||||
me._init(e.type,e,src);
|
||||
|
||||
var rel = e.type=="mouseout"? e.toElement : e.fromElement;
|
||||
var r = me._relative = MouseEvent._getContainerLayerOf(rel);
|
||||
if (e.type=="mouseout" || e.type=="mouseover") {
|
||||
if (r && src && (r==src||src.isParentOf(r))) return; //fix for #15 (ie only)
|
||||
if (r && src && (r==src.parent||r.isChildOf(src.parent))) me.bubble=false;
|
||||
}
|
||||
me.pageX = e.clientX;
|
||||
me.pageY = e.clientY;
|
||||
if(!src) return;
|
||||
me.x = (me.pageX + (document.body.scrollLeft||0)) - src.getPageX(); //offsetX;
|
||||
me.y = (me.pageY + (document.body.scrollTop||0)) - src.getPageY(); //offsetY;
|
||||
e.cancelBubble = true;
|
||||
me._invoke();
|
||||
|
||||
var tt=target.type;
|
||||
var tn=(target.tagName+'').toLowerCase();
|
||||
|
||||
// fix for form elements inside drag-enabled layer #08
|
||||
if(tt=='textarea'||tt=='text' && target.onselectstart==null) target.onselectstart = dynapi.functions.Allow;
|
||||
if(e.type=='mousedown' && tn=='input'||tn=='textarea'||tn=='button') {
|
||||
var de=dynapi.frame.DragEvent;
|
||||
de=(de && de.dragevent)? de.dragevent:null;
|
||||
if(de && de.isDragging) de.cancelDrag();
|
||||
}
|
||||
|
||||
// prevent image dragging
|
||||
if(target.tagName=='IMG' && typeof(target.ondragstart)!="function") {
|
||||
target.ondragstart=dynapi.functions.False;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
DynElement.prototype.disableContextMenu = function(){
|
||||
this._noContextMenu = true;
|
||||
if(this.elm) this.elm.oncontextmenu = dynapi.functions.False;
|
||||
};
|
||||
DynElement.prototype.captureMouseEvents = function() {
|
||||
this._hasMouseEvents = true;
|
||||
if (this.elm) {
|
||||
var elm = (this.getClassName()=='DynDocument')? this.doc : this.elm;
|
||||
elm.onmouseover = elm.onmouseout = elm.onmousedown = elm.onmouseup = elm.onclick = elm.ondblclick = elm.onmousemove = MouseEvent._eventHandler;
|
||||
if(this._noContextMenu) elm.oncontextmenu = dynapi.functions.False;
|
||||
}
|
||||
};
|
||||
DynElement.prototype.releaseMouseEvents = function() {
|
||||
this._hasMouseEvents = false;
|
||||
if (this.elm) {
|
||||
var elm = (this.getClassName()=='DynDocument')? this.doc : this.elm;
|
||||
elm.onmousedown = elm.onmouseup = elm.onclick = elm.ondblclick = null;
|
||||
elm.oncontextmenu = null;
|
||||
}
|
||||
};
|
||||
|
||||
function main_mouse_ie() {
|
||||
dynapi.document._mouseEvent = new MouseEvent(dynapi.document);
|
||||
};
|
||||
if (!dynapi.loaded) main_mouse_ie();
|
Reference in New Issue
Block a user