--- zogiLib/js/baselib.js 2004/08/28 20:08:07 1.2 +++ zogiLib/js/baselib.js 2004/11/03 15:24:46 1.4 @@ -1,5 +1,5 @@ -/* 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 modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 @@ -14,11 +14,21 @@ You should have received a copy of the G along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA -Authors: ROC 03.06.2004 - first version by Christian Luginbuehl, 01.05.2003 - Changed for digiLib in Zope by DW 24.03.2004 +Authors: + Christian Luginbuehl, 01.05.2003 (first version) + DW 24.03.2004 (Changed for digiLib in Zope) + Robert Casties, 2.11.2004 + */ +function base_init() { + // init function + baseScriptVersion = "1.1b"; + dlParams = new Object(); + browserType = getBrowserType(); +} + + function getInt(n) { // returns always an integer n = parseInt(n); @@ -31,30 +41,33 @@ function defined(x) { return (typeof arguments[0] != "undefined"); } -// auxiliary function to crop senseless precision function cropFloat(x) { + // auxiliary function to crop senseless precision return parseInt(10000*x)/10000; } -// browser sniffer -var browserType = Object(); -browserType.doDHTML = false; -browserType.versIE = 0; - -if ((! document.cssonly && document.layers) || document.all || document.getElementById) { - var vers = navigator.appVersion.split('MSIE '); - vers = vers[vers.length - 1]; - browserType.versIE = getInt(vers); - browserType.isIE = navigator.userAgent.indexOf('MSIE') >= 0; - browserType.isMac = navigator.platform.indexOf('Mac') >= 0; - browserType.isWin = navigator.platform.indexOf('Win') >= 0; - browserType.isN4 = (navigator.userAgent.indexOf('Mozilla/4.') >= 0) && ! browserType.isIE; - browserType.isIEWin = browserType.versIE > 0 && browserType.isWin; - if (navigator.appVersion.indexOf('MSIE') < 0 || ! browserType.isMac || browserType.versIE >= 5) { - browserType.doDHTML = true; - browserType.isOpera = navigator.userAgent.indexOf(' Opera ') >= 0; - browserType.isKonq = navigator.userAgent.indexOf(' Konqueror') >= 0; +function getBrowserType() { + // browser sniffer + var bt = Object(); + bt.doDHTML = false; + bt.versIE = 0; + + if ((! document.cssonly && document.layers) || document.all || document.getElementById) { + var vers = navigator.appVersion.split('MSIE '); + vers = vers[vers.length - 1]; + bt.versIE = getInt(vers); + bt.isIE = navigator.userAgent.indexOf('MSIE') >= 0; + bt.isMac = navigator.platform.indexOf('Mac') >= 0; + bt.isWin = navigator.platform.indexOf('Win') >= 0; + bt.isN4 = (navigator.userAgent.indexOf('Mozilla/4.') >= 0) && ! bt.isIE; + bt.isIEWin = bt.versIE > 0 && bt.isWin; + if (navigator.appVersion.indexOf('MSIE') < 0 || ! bt.isMac || bt.versIE >= 5) { + bt.doDHTML = true; + bt.isOpera = navigator.userAgent.indexOf(' Opera ') >= 0; + bt.isKonq = navigator.userAgent.indexOf(' Konqueror') >= 0; + } } + return bt; } // fixes for javascript < 1.2 @@ -83,6 +96,10 @@ function Size(w, h) { this.height = parseFloat(h); return this; } +Size.prototype.toString = function() { + return this.width + "x" + this.height; +} + /* * Position class @@ -92,6 +109,9 @@ function Position(x, y) { this.y = parseFloat(y); return this; } +Position.prototype.toString = function() { + return this.x + "," + this.y; +} /* * Rectangle class @@ -103,6 +123,9 @@ function Rectangle(x, y, w, h) { this.height = parseFloat(h); return this; } +Rectangle.prototype.toString = function() { + return this.width+"x"+this.height+"@"+this.x+","+this.y; +} Rectangle.prototype.copy = function() { // returns a copy of this Rectangle return new Rectangle(this.x, this.y, this.width, this.height); @@ -238,8 +261,6 @@ function getScale(size) { * parameter routines * ******************************************** */ -var dlParams = new Object(); - function newParameter(name, defaultValue, detail) { // create a new parameter with a name and a default value if (defined(dlParams[name])) { @@ -278,6 +299,14 @@ function setParameter(name, value) { 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) { // returns a string of all parameters in query format if (! detail) { @@ -467,76 +496,103 @@ function evtPosition(evt) { return new Position(x, y); } -function registerMouseDown(elem, handler) { - // register a mouse down event handler on the indicated element +function registerEvent(type, elem, handler) { + // register the given event handler on the indicated element if (elem.addEventListener) { - elem.addEventListener("mousedown", handler, false); + elem.addEventListener(type, handler, false); } else { - if (elem.captureEvents) { - elem.captureEvents(Event.MOUSEDOWN); + if (type == "mousedown") { + if (elem.captureEvents) { + elem.captureEvents(Event.MOUSEDOWN); + } + 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; } - elem.onmousedown = handler; } return true; } -function unregisterMouseDown(elem, handler) { - // unregister the mouse down event handler +function unregisterEvent(type, elem, handler) { + // unregister the given event handler from the indicated element if (elem.removeEventListener) { - elem.removeEventListener("mousedown", handler, false); + elem.removeEventListener(type, handler, false); } else { - if (elem.releaseEvents) { - elem.releaseEvents(Event.MOUSEDOWN); + if (type == "mousedown") { + if (elem.releaseEvents) { + elem.releaseEvents(Event.MOUSEDOWN); + } + elem.onmousedown = null; + } else if (type == "mouseup") { + if (elem.releaseEvents) { + elem.releaseEvents(Event.MOUSEUP); + } + elem.onmouseup = null; + } else if (type == "mousemove") { + if (elem.releaseEvents) { + elem.releaseEvents(Event.MOUSEMOVE); + } + elem.onmousemove = null; + } else if (type == "keypress") { + if (elem.releaseEvents) { + elem.releaseEvents(Event.KEYPRESS); + } + elem.onkeypress = null; + } else { + alert("unregisterEvent: unknown event type "+type); + return false; } - elem.onmousedown = null; } return true; } + +// old registerXXYY API for compatibility +function registerMouseDown(elem, handler) { + return registerEvent("mousedown", elem, handler); +} +function unregisterMouseDown(elem, handler) { + return unregisterEvent("mousedown", elem, handler); +} function registerMouseMove(elem, handler) { - // register a mouse move event handler on the indicated element - if (elem.addEventListener) { - elem.addEventListener("mousemove", handler, false); - } else { - if (elem.captureEvents) { - elem.captureEvents(Event.MOUSEMOVE); - } - elem.onmousemove = handler; - } - return true; + return registerEvent("mousemove", elem, handler); } - function unregisterMouseMove(elem, handler) { - // unregister the mouse move event handler - if (elem.removeEventListener) { - elem.removeEventListener("mousemove", handler, false); - } else { - if (elem.releaseEvents) { - elem.releaseEvents(Event.MOUSEMOVE); - } - elem.onmousemove = null; - } - return true; + return unregisterEvent("mousemove", elem, handler); } - function registerKeyDown(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 - } - return true; + return registerEvent("keypress", elem, handler); } + function getWinSize() { // returns a Size with the current window size (mostly from www.quirksmode.org) var wsize = new Size(100, 100); if (defined(self.innerHeight)) { // 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.height = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) {