Diff for /zogiLib/js/Attic/js_lib.js between versions 1.1 and 1.2

version 1.1, 2004/05/05 12:29:08 version 1.2, 2004/06/02 17:32:54
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 3.5.2004  Authors: ROC 27.05.2004
   first version by Christian Luginbuehl, 01.05.2003    first version by Christian Luginbuehl, 01.05.2003
   Changed for digiLib in Zope by DW 24.03.2004    Changed for digiLib in Zope by DW 24.03.2004
 */  */
   
   function getInt (n) {
       // returns always an integer
       n = parseInt (n);
       if (isNaN (n))
       return 0;
       return n;
   }
   
   function defined(x) {
       // returns if x is defined
       return (typeof arguments[0] != "undefined");
   }
   
   // auxiliary function to crop senseless precision
   function cropFloat(x) {
       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.isMac = navigator.platform.indexOf('Mac') >= 0;
       browserType.isWin = navigator.platform.indexOf('Win') >= 0;
       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;
       }
   }
   //alert("browser: dhtml="+browserType.doDHTML+" ie="+browserType.versIE+" mac="+browserType.isMac);
   
 // fixes for javascript < 1.2  // fixes for javascript < 1.2
 if (! Array.prototype.push) {  if (! Array.prototype.push) {
     Array.prototype.push = function(val) {      Array.prototype.push = function(val) {
Line 32  if (! Array.prototype.push) { Line 70  if (! Array.prototype.push) {
     }      }
 }  }
   
 // auxiliary function to crop senseless precision  
 function cropFloat(x) {  
     return parseInt(10000*x)/10000;  
 }  
   
   
 /* **********************************************  /* **********************************************
  *     geometry classes   *     geometry classes
Line 74  Rectangle.prototype.copy = function() { Line 107  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);
 }  }
   Rectangle.prototype.getPosition = function() {
       // returns the position of this Rectangle
       return new Position(this.x, this.y);
   }
   Rectangle.prototype.getSize = function() {
       // returns the size of this Rectangle
       return new Size(this.width, this.height);
   }
   Rectangle.prototype.getArea = function() {
       // returns the area of this Rectangle
       return (this.width * this.height);
   }
 Rectangle.prototype.containsPosition = function(pos) {  Rectangle.prototype.containsPosition = function(pos) {
     // returns if the given Position lies in this Rectangle      // returns if the given Position lies in this Rectangle
     return ((pos.x >= this.x)&&(pos.y >= this.y)&&(pos.x <= this.x+this.width)&&(pos.y <= this.y+this.width));      return ((pos.x >= this.x)&&(pos.y >= this.y)&&(pos.x <= this.x+this.width)&&(pos.y <= this.y+this.width));
Line 141  Transform.prototype.concat = function(tr Line 186  Transform.prototype.concat = function(tr
     }      }
     return this;      return this;
 }  }
 Transform.prototype.transform = function(pos) {  Transform.prototype.transform = function(rect) {
     // returns transformed Position pos with this Transform applied      // returns transformed Rectangle or Position with this Transform applied
     var x = this.m00 * pos.x + this.m01 * pos.y + this.m02;      var x = this.m00 * rect.x + this.m01 * rect.y + this.m02;
     var y = this.m10 * pos.x + this.m11 * pos.y + this.m12;      var y = this.m10 * rect.x + this.m11 * rect.y + this.m12;
       if (rect.width) {
       var width = this.m00 * rect.width + this.m01 * rect.height;
       var height = this.m10 * rect.width + this.m11 * rect.height;
       return new Rectangle(x, y, width, height);
       }
     return new Position(x, y);      return new Position(x, y);
 }  }
 Transform.prototype.invtransform = function(pos) {  Transform.prototype.invtransform = function(pos) {
Line 192  var dlParams = new Object(); Line 242  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 (dlParams[name]) {      if (defined(dlParams[name])) {
     alert("Fatal: An object with name '" + name + "' already exists - cannot recreate!");      alert("Fatal: An object with name '" + name + "' already exists - cannot recreate!");
     return false;      return false;
     } else {      } else {
Line 207  function newParameter(name, defaultValue Line 257  function newParameter(name, defaultValue
   
 function getParameter(name) {  function getParameter(name) {
     // returns the named parameter value or its default value      // returns the named parameter value or its default value
     if (dlParams[name]) {      if (defined(dlParams[name])) {
     if (dlParams[name].hasValue) {      if (dlParams[name].hasValue) {
         return dlParams[name].value;          return dlParams[name].value;
     } else {      } else {
         return dlParams[name].defaultValue;          return dlParams[name].defaultValue;
     }      }
     } else {      } else {
     return undefined;      return null;
     }      }
 }  }
   
 function setParameter(name, value) {  function setParameter(name, value) {
     // sets parameter value      // sets parameter value
     if (dlParams[name]) {      if (defined(dlParams[name])) {
     dlParams[name].value = value;      dlParams[name].value = value;
     dlParams[name].hasValue = true;      dlParams[name].hasValue = true;
     return true;      return true;
Line 258  function parseParameters(query) { Line 308  function parseParameters(query) {
  *     HTML/DOM routines   *     HTML/DOM routines
  * ******************************************** */   * ******************************************** */
   
 function getElement(tagid) {  function getElement(tagid, quiet) {
     // returns the element object with the id tagid      // returns the element object with the id tagid
       var e;
     if (document.getElementById) {      if (document.getElementById) {
     return document.getElementById(tagid);      e = document.getElementById(tagid);
     } else if (document.all) {      } else if (document.all) {
     alert("document.all!");      alert("document.all!");
     return document.all[tagid];      e = document.all[tagid];
       } else if (document.layers) {
           e = document.layers[tagid];
       //alert("e: "+e+" layers? "+tagid);
       } 
       if (e) {
       return e;
     } else {      } else {
     var s = "";      if (! quiet) {
     for (var e in document.layers) {          alert("unable to find element: "+tagid);
         s += "'" + e + "', ";  
     }      }
     alert("no document.all! "+tagid+" = "+s);      return null;
     return document[tagid];  
     }      }
 }      }    
   
 function getElementSize(tagid) {  function getElementPosition(elem) {
     // returns a Rectangle with the size and position of the named element      // returns a Position with the position of the element
     var x = 0;      var x = 0;
     var y = 0;      var y = 0;
     var width = 0;      if (defined(elem.offsetLeft)) {
     var height = 0;  
     var elem = getElement(tagid);  
     if (elem.left) {  
     alert("elem.left!");  
     x = elem.left;  
     y = elem.top;  
     width = elem.width;  
     height = elem.height;  
     } else {  
     if (elem.clientLeft) {  
         // spass mit IE  
         x = elem.clientLeft;  
         y = elem.clientTop;  
     } else {  
         var e = elem;          var e = elem;
         while (e) {          while (e) {
           if (defined(e.clientLeft)) {
           // special for IE
           if (browserType.isMac) {
               if (e.offsetParent.tagName == "BODY") {
               // IE for Mac extraspecial
               x += e.clientLeft;
               y += e.clientTop;
               break;
               }
           } else {
               if ((e.tagName != "TABLE") && (e.tagName != "BODY")) {
               x += e.clientLeft;
               y += e.clientTop;
               }
           }
           }
         x += e.offsetLeft;          x += e.offsetLeft;
         y += e.offsetTop;          y += e.offsetTop;
         e = e.offsetParent;          e = e.offsetParent;
         }          }
       } else if (defined(elem.x)) {
       x = elem.x;
       y = elem.y;
       } else if (document.layers) {
       x = elem.pageX;
       y = elem.pageY;
       } else {
       alert("unable to get position of "+elem+" (id:"+elem.id+")");
       }
       return new Position(getInt(x), getInt(y));
     }      }
   
   function getElementSize(elem) {
       // returns a Rectangle with the size of the element
       var width = 0;
       var height = 0;
       if (defined(elem.offsetWidth)) {
     width = elem.offsetWidth;      width = elem.offsetWidth;
     height = elem.offsetHeight;      height = elem.offsetHeight;
       } else if (document.layers) {
       width = elem.clip.width;
       height = elem.clip.height;
       } else {
       alert("unable to get size of "+elem+" (id:"+elem.id+")");
     }      }
     return new Rectangle(x, y, width, height);      return new Size(getInt(width), getInt(height));
 }  }
   
 function moveElement(tagid, pos) {  function getElementRect(elem) {
     // moves the named element to the indicated position      // returns a Rectangle with the size and position of the element
     var elem = getElement(tagid);      var pos = getElementPosition(elem);
       var size = getElementSize(elem);
       return new Rectangle(pos.x, pos.y, size.width, size.height);
   }
   
   
   
   function moveElement(elem, rect) {
       // moves and sizes the element
       //alert("move: "+elem+" "+rect);
     if (elem.style) {      if (elem.style) {
     elem.style.left = pos.x + "px";      if (defined(rect.x)) {
     elem.style.top = pos.y + "px";          elem.style.left = Math.round(rect.x) + "px";
           elem.style.top = Math.round(rect.y) + "px";
           //alert(elem.id+"move: "+rect.x+", "+rect.y+" = "+elem.style.left+", "+elem.style.top);
       }
       if (defined(rect.width)) {
           elem.style.width = Math.round(rect.width) + "px";
           elem.style.height = Math.round(rect.height) + "px";
       }
       } else if (document.layers) {
       if (defined(rect.x)) {
           elem.pageX = getInt(rect.x);
           elem.pageY = getInt(rect.y);
       }
       if (defined(rect.width)) {
           elem.clip.width = getInt(rect.width);
           elem.clip.height = getInt(rect.height);
       }
     } else {      } else {
     alert("moveelement: no style property!");          alert("moveelement: no style nor layer property!");
     elem.left = pos.x;      return false;
     elem.top = pos.y;  
     }      }
     return true;      return true;
 }  }
   
 function showElement(tagid, show) {  function showElement(elem, show) {
     // shows or hides the named element      // shows or hides the element
     var elem = getElement(tagid);  
     if (elem.style) {      if (elem.style) {
     if (show) {      if (show) {
         elem.style.visibility = "visible";          elem.style.visibility = "visible";
Line 340  function evtPosition(evt) { Line 441  function evtPosition(evt) {
     // returns the on-screen Position of the Event       // returns the on-screen Position of the Event 
     var x;      var x;
     var y;      var y;
     if (document.all) {      evt = (evt) ? evt : window.event;
     x = parseInt(document.body.scrollLeft+event.clientX);      if (!evt) {
     y = parseInt(document.body.scrollLeft+event.clientY);      alert("no event found! "+evt);
     } else {      return;
       }
       if (defined(evt.pageX)) {
     x = parseInt(evt.pageX);      x = parseInt(evt.pageX);
     y = parseInt(evt.pageY);      y = parseInt(evt.pageY);
       } else if (defined(evt.clientX)) {
       x = parseInt(document.body.scrollLeft+evt.clientX);
       y = parseInt(document.body.scrollLeft+evt.clientY);
       } else {
       alert("evtPosition: don't know how to deal with "+evt);
     }      }
     return new Position(x, y);      return new Position(x, y);
 }  }
   
 function registerMouseDown(tagid, handler) {  function registerMouseDown(elem, handler) {
     // register a mouse down event handler on the indicated element      // register a mouse down event handler on the indicated element
     if ( document.all ) {      if (elem.addEventListener) {
     document.all[tagid].onmousedown = handler;      elem.addEventListener("mousedown", handler, false);
     } else if (document.getElementById) {  
     document.getElementById(tagid).addEventListener("mousedown", handler, true);  
     } else {      } else {
     document[tagid].captureEvents(Event.MOUSEDOWN);      elem.onmousedown = handler;
     document[tagid].onmousedown = handler;  
     }      }
     return true;      return true;
 }  }
   
 function unregisterMouseDown(tagid, handler) {  function unregisterMouseDown(elem, handler) {
     // unregister the mouse down event handler      // unregister the mouse down event handler
     if ( document.all ) {      if (elem.removeEventListener) {
     document.all[tagid].onmousedown = null;      elem.removeEventListener("mousedown", handler, false);
     } else if (document.getElementById) {  
     document.getElementById(tagid).removeEventListener("mousedown", handler, true);  
     } else {      } else {
     document[tagid].releaseEvents(Event.MOUSEDOWN);      elem.onmousedown = null;
     }      }
     return true;      return true;
 }  }
   
 function registerMouseMove(tagid, handler) {  function registerMouseMove(elem, handler) {
     // register a mouse move event handler on the indicated element      // register a mouse move event handler on the indicated element
     if ( document.all ) {      if (elem.addEventListener) {
     document.all[tagid].onmousemove = handler;      elem.addEventListener("mousemove", handler, false);
     } else if (document.getElementById) {  
     document.getElementById(tagid).addEventListener("mousemove", handler, true);  
     } else {      } else {
     document[tagid].captureEvents(Event.MOUSEMOVE);      elem.onmousemove = handler;
     document[tagid].onmousemove = handler;  
     }      }
     return true;      return true;
 }  }
   
 function unregisterMouseMove(tagid, handler) {  function unregisterMouseMove(elem, handler) {
     // unregister the mouse move event handler      // unregister the mouse move event handler
     if ( document.all ) {      if (elem.removeEventListener) {
     document.all[tagid].onmousemove = null;      elem.removeEventListener("mousemove", handler, false);
     } else if (document.getElementById) {  
     document.getElementById(tagid).removeEventListener("mousemove", handler, true);  
     } else {      } else {
     document[tagid].releaseEvents(Event.MOUSEMOVE);      elem.onmousemove = null;
     }      }
     return true;      return true;
 }  }
   
 function registerKeyDown(handler) {  function registerKeyDown(handler) {
     // register a key down handler      // register a key down handler
     if ( document.all ) {      if ( document.addEventListener ) {
     this.document.onkeypress = handler      this.document.addEventListener('keypress', handler, false);
     } else if ( typeof(document.addEventListener) == "function" ) {  
     this.document.addEventListener('keypress', handler, true);  
     } else {      } else {
     window.captureEvents(Event.KEYDOWN);      this.document.onkeypress = handler
     window.onkeydown = handler;  
     }      }
     return true;      return true;
 }  }
Line 416  function registerKeyDown(handler) { Line 511  function registerKeyDown(handler) {
 function getWinSize() {  function getWinSize() {
     // returns a Size with the current window size (from www.quirksmode.org)      // returns a Size with the current window size (from www.quirksmode.org)
     var wsize = new Size(100, 100);      var wsize = new Size(100, 100);
     if (self.innerHeight)  {      if (defined(self.innerHeight))  {
     // all except Explorer      // all except Explorer
     wsize.width = self.innerWidth;      wsize.width = self.innerWidth;
     wsize.height = self.innerHeight;      wsize.height = self.innerHeight;

Removed from v.1.1  
changed lines
  Added in v.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>