|
|
| version 1.2, 2004/08/28 20:08:07 | version 1.7, 2006/07/14 12:42:05 |
|---|---|
| Line 1 | Line 1 |
| /* Copyright (C) 2003,2004 WTWG, Uni Bern and others | /* Copyright (C) 2003,2004 IT-Group MPIWG, WTWG Uni Bern and others |
| This program is free software; you can redistribute it and/or | This program is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License | modify it under the terms of the GNU General Public License |
| Line 14 You should have received a copy of the G | Line 14 You should have received a copy of the G |
| along with this program; if not, write to the Free Software | along with this program; if not, write to the Free Software |
| Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
| Authors: ROC 03.06.2004 | Authors: |
| first version by Christian Luginbuehl, 01.05.2003 | Christian Luginbuehl, 01.05.2003 (first version) |
| Changed for digiLib in Zope by DW 24.03.2004 | DW 24.03.2004 (Changed for digiLib in Zope) |
| Robert Casties, 14.7.2006 | |
| */ | */ |
| function base_init() { | |
| // init function | |
| baseScriptVersion = "1.2.1"; | |
| dlParams = new Object(); | |
| browserType = getBrowserType(); | |
| } | |
| function getInt(n) { | function getInt(n) { |
| // returns always an integer | // returns always an integer |
| n = parseInt(n); | n = parseInt(n); |
| Line 31 function defined(x) { | Line 41 function defined(x) { |
| return (typeof arguments[0] != "undefined"); | return (typeof arguments[0] != "undefined"); |
| } | } |
| // auxiliary function to crop senseless precision | |
| function cropFloat(x) { | function cropFloat(x) { |
| // auxiliary function to crop senseless precision | |
| return parseInt(10000*x)/10000; | return parseInt(10000*x)/10000; |
| } | } |
| function getBrowserType() { | |
| // browser sniffer | // browser sniffer |
| var browserType = Object(); | var bt = Object(); |
| browserType.doDHTML = false; | bt.doDHTML = false; |
| browserType.versIE = 0; | bt.versIE = 0; |
| if ((! document.cssonly && document.layers) || document.all || document.getElementById) { | if ((! document.cssonly && document.layers) || document.all || document.getElementById) { |
| var vers = navigator.appVersion.split('MSIE '); | var vers = navigator.appVersion.split('MSIE '); |
| vers = vers[vers.length - 1]; | vers = vers[vers.length - 1]; |
| browserType.versIE = getInt(vers); | bt.versIE = getInt(vers); |
| browserType.isIE = navigator.userAgent.indexOf('MSIE') >= 0; | bt.isIE = navigator.userAgent.indexOf('MSIE') >= 0; |
| browserType.isMac = navigator.platform.indexOf('Mac') >= 0; | bt.isMac = navigator.platform.indexOf('Mac') >= 0; |
| browserType.isWin = navigator.platform.indexOf('Win') >= 0; | bt.isWin = navigator.platform.indexOf('Win') >= 0; |
| browserType.isN4 = (navigator.userAgent.indexOf('Mozilla/4.') >= 0) && ! browserType.isIE; | bt.isN4 = (navigator.userAgent.indexOf('Mozilla/4.') >= 0) && ! bt.isIE; |
| browserType.isIEWin = browserType.versIE > 0 && browserType.isWin; | bt.isIEWin = bt.versIE > 0 && bt.isWin; |
| if (navigator.appVersion.indexOf('MSIE') < 0 || ! browserType.isMac || browserType.versIE >= 5) { | if (navigator.appVersion.indexOf('MSIE') < 0 || ! bt.isMac || bt.versIE >= 5) { |
| browserType.doDHTML = true; | bt.doDHTML = true; |
| browserType.isOpera = navigator.userAgent.indexOf(' Opera ') >= 0; | bt.isOpera = navigator.userAgent.indexOf(' Opera ') >= 0; |
| browserType.isKonq = navigator.userAgent.indexOf(' Konqueror') >= 0; | bt.isKonq = navigator.userAgent.indexOf(' Konqueror') >= 0; |
| } | |
| } | } |
| return bt; | |
| } | } |
| // fixes for javascript < 1.2 | // fixes for javascript < 1.2 |
| Line 83 function Size(w, h) { | Line 96 function Size(w, h) { |
| this.height = parseFloat(h); | this.height = parseFloat(h); |
| return this; | return this; |
| } | } |
| Size.prototype.toString = function() { | |
| return this.width + "x" + this.height; | |
| } | |
| /* | /* |
| * Position class | * Position class |
| Line 92 function Position(x, y) { | Line 109 function Position(x, y) { |
| this.y = parseFloat(y); | this.y = parseFloat(y); |
| return this; | return this; |
| } | } |
| Position.prototype.toString = function() { | |
| return this.x + "," + this.y; | |
| } | |
| /* | /* |
| * Rectangle class | * Rectangle class |
| Line 103 function Rectangle(x, y, w, h) { | Line 123 function Rectangle(x, y, w, h) { |
| this.height = parseFloat(h); | this.height = parseFloat(h); |
| return this; | return this; |
| } | } |
| Rectangle.prototype.toString = function() { | |
| return this.width+"x"+this.height+"@"+this.x+","+this.y; | |
| } | |
| Rectangle.prototype.copy = function() { | Rectangle.prototype.copy = function() { |
| // returns a copy of this Rectangle | // returns a copy of this Rectangle |
| return new Rectangle(this.x, this.y, this.width, this.height); | return new Rectangle(this.x, this.y, this.width, this.height); |
| Line 238 function getScale(size) { | Line 261 function getScale(size) { |
| * parameter routines | * parameter routines |
| * ******************************************** */ | * ******************************************** */ |
| var dlParams = new Object(); | |
| function newParameter(name, defaultValue, detail) { | function newParameter(name, defaultValue, detail) { |
| // create a new parameter with a name and a default value | // create a new parameter with a name and a default value |
| if (defined(dlParams[name])) { | if (defined(dlParams[name])) { |
| Line 268 function getParameter(name) { | Line 289 function getParameter(name) { |
| } | } |
| } | } |
| function setParameter(name, value) { | function setParameter(name, value, relative) { |
| // sets parameter value | // sets parameter value (relative values with +/- unless literal) |
| if (defined(dlParams[name])) { | if (defined(dlParams[name])) { |
| if ((relative)&&(value.slice)) { | |
| var sign = value.slice(0,1); | |
| if (sign == '+') { | |
| dlParams[name].value = parseFloat(dlParams[name].value) + parseFloat(value.slice(1)); | |
| } else if (sign == '-') { | |
| dlParams[name].value = parseFloat(dlParams[name].value) - parseFloat(value.slice(1)); | |
| } else { | |
| dlParams[name].value = value; | |
| } | |
| } else { | |
| dlParams[name].value = value; | dlParams[name].value = value; |
| } | |
| dlParams[name].hasValue = true; | dlParams[name].hasValue = true; |
| return true; | return true; |
| } | } |
| return false; | return false; |
| } | } |
| function hasParameter(name) { | |
| // returns if the parameter's value has been set | |
| if (defined(dlParams[name])) { | |
| return dlParams[name].hasValue; | |
| } | |
| return false; | |
| } | |
| function getAllParameters(detail) { | function getAllParameters(detail) { |
| // returns a string of all parameters in query format | // returns a string of all parameters in query format |
| if (! detail) { | if (! detail) { |
| detail = 10; | detail = 255; |
| } | } |
| var params = new Array(); | var params = new Array(); |
| for ( param in dlParams ) { | for ( param in dlParams ) { |
| if ((dlParams[param].detail <= detail)&&(dlParams[param].hasValue)) { | if (((dlParams[param].detail & detail) > 0)&&(dlParams[param].hasValue)) { |
| var val = getParameter(param); | var val = getParameter(param); |
| if (val != "") { | if (val != "") { |
| params.push(param + "=" + val); | params.push(param + "=" + val); |
| Line 446 function showElement(elem, show) { | Line 486 function showElement(elem, show) { |
| return true; | return true; |
| } | } |
| function isElementVisible(elem) { | |
| // returns of the is shown or hidden | |
| if (elem.style) { | |
| return (elem.style.visibility == "visible"); | |
| } else if (defined(elem.visibility)) { | |
| return (elem.visibility == "show"); | |
| } else { | |
| alert("iselementvisible: no style nor layer property!"); | |
| } | |
| } | |
| function evtPosition(evt) { | function evtPosition(evt) { |
| // returns the on-screen Position of the Event | // returns the on-screen Position of the Event |
| var x; | var x; |
| Line 467 function evtPosition(evt) { | Line 518 function evtPosition(evt) { |
| return new Position(x, y); | return new Position(x, y); |
| } | } |
| function registerMouseDown(elem, handler) { | function registerEvent(type, elem, handler) { |
| // register a mouse down event handler on the indicated element | // register the given event handler on the indicated element |
| if (elem.addEventListener) { | if (elem.addEventListener) { |
| elem.addEventListener("mousedown", handler, false); | elem.addEventListener(type, handler, false); |
| } else { | } else { |
| if (type == "mousedown") { | |
| if (elem.captureEvents) { | if (elem.captureEvents) { |
| elem.captureEvents(Event.MOUSEDOWN); | elem.captureEvents(Event.MOUSEDOWN); |
| } | } |
| elem.onmousedown = handler; | elem.onmousedown = handler; |
| } else if (type == "mouseup") { | |
| if (elem.captureEvents) { | |
| elem.captureEvents(Event.MOUSEUP); | |
| } | |
| elem.onmouseup = handler; | |
| } else if (type == "mousemove") { | |
| if (elem.captureEvents) { | |
| elem.captureEvents(Event.MOUSEMOVE); | |
| } | |
| elem.onmousemove = handler; | |
| } else if (type == "keypress") { | |
| if (elem.captureEvents) { | |
| elem.captureEvents(Event.KEYPRESS); | |
| } | |
| elem.onkeypress = handler; | |
| } else { | |
| alert("registerEvent: unknown event type "+type); | |
| return false; | |
| } | |
| } | } |
| return true; | return true; |
| } | } |
| function unregisterMouseDown(elem, handler) { | function unregisterEvent(type, elem, handler) { |
| // unregister the mouse down event handler | // unregister the given event handler from the indicated element |
| if (elem.removeEventListener) { | if (elem.removeEventListener) { |
| elem.removeEventListener("mousedown", handler, false); | elem.removeEventListener(type, handler, false); |
| } else { | } else { |
| if (type == "mousedown") { | |
| if (elem.releaseEvents) { | if (elem.releaseEvents) { |
| elem.releaseEvents(Event.MOUSEDOWN); | elem.releaseEvents(Event.MOUSEDOWN); |
| } | } |
| elem.onmousedown = null; | elem.onmousedown = null; |
| } else if (type == "mouseup") { | |
| if (elem.releaseEvents) { | |
| elem.releaseEvents(Event.MOUSEUP); | |
| } | } |
| return true; | elem.onmouseup = null; |
| } else if (type == "mousemove") { | |
| if (elem.releaseEvents) { | |
| elem.releaseEvents(Event.MOUSEMOVE); | |
| } | } |
| elem.onmousemove = null; | |
| function registerMouseMove(elem, handler) { | } else if (type == "keypress") { |
| // register a mouse move event handler on the indicated element | if (elem.releaseEvents) { |
| if (elem.addEventListener) { | elem.releaseEvents(Event.KEYPRESS); |
| elem.addEventListener("mousemove", handler, false); | } |
| elem.onkeypress = null; | |
| } else { | } else { |
| if (elem.captureEvents) { | alert("unregisterEvent: unknown event type "+type); |
| elem.captureEvents(Event.MOUSEMOVE); | return false; |
| } | } |
| elem.onmousemove = handler; | |
| } | } |
| return true; | return true; |
| } | } |
| function unregisterMouseMove(elem, handler) { | |
| // unregister the mouse move event handler | // old registerXXYY API for compatibility |
| if (elem.removeEventListener) { | function registerMouseDown(elem, handler) { |
| elem.removeEventListener("mousemove", handler, false); | return registerEvent("mousedown", elem, handler); |
| } else { | |
| if (elem.releaseEvents) { | |
| elem.releaseEvents(Event.MOUSEMOVE); | |
| } | |
| elem.onmousemove = null; | |
| } | } |
| return true; | function unregisterMouseDown(elem, handler) { |
| return unregisterEvent("mousedown", elem, handler); | |
| } | } |
| function registerMouseMove(elem, handler) { | |
| function registerKeyDown(handler) { | return registerEvent("mousemove", elem, handler); |
| // register a key down handler | |
| if ( document.addEventListener ) { | |
| this.document.addEventListener('keypress', handler, false); | |
| } else { | |
| if (elem.captureEvents) { | |
| elem.captureEvents(Event.MOUSEDOWN); | |
| } | } |
| this.document.onkeypress = handler | function unregisterMouseMove(elem, handler) { |
| return unregisterEvent("mousemove", elem, handler); | |
| } | } |
| return true; | function registerKeyDown(handler) { |
| return registerEvent("keypress", elem, handler); | |
| } | } |
| function getWinSize() { | function getWinSize() { |
| // returns a Size with the current window size (mostly from www.quirksmode.org) | // returns a Size with the current window size (mostly from www.quirksmode.org) |
| var wsize = new Size(100, 100); | var wsize = new Size(100, 100); |
| if (defined(self.innerHeight)) { | if (defined(self.innerHeight)) { |
| // all except Explorer | // all except Explorer |
| if ((self.innerWidth == 0)||(self.innerHeight == 0)) { | |
| // Safari 1.2 bug | |
| if (parent) { | |
| parent.innerHeight; | |
| parent.innerWidth; | |
| } | |
| } | |
| wsize.width = self.innerWidth; | wsize.width = self.innerWidth; |
| wsize.height = self.innerHeight; | wsize.height = self.innerHeight; |
| } else if (document.documentElement && document.documentElement.clientHeight) { | } else if (document.documentElement && document.documentElement.clientHeight) { |