Diff for /zogiLib/js/dllib.js between versions 1.1 and 1.10

version 1.1, 2004/07/21 17:44:51 version 1.10, 2011/02/14 16:33:43
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 20.7.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
   
 Requires baselib.js !    ! Requires baselib.js !
   
 */  */
   
 var dlScriptVersion = "1.0b1";  
   function identify() {
           // used for identifying a digilib instance
           // Relato uses that function - lugi
           return "Digilib 0.6";
   }
   
   
 /*  /*
  * more parameter handling   * more parameter handling
  */   */
   
 var dlArea = new Rectangle(0.0, 0.0, 1.0, 1.0);  
 var dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0);  
   
 function parseArea() {  function parseArea() {
     // returns area Rectangle from current parameters      // returns area Rectangle from current parameters
     return new Rectangle(getParameter("wx"), getParameter("wy"), getParameter("ww"), getParameter("wh"));      return new Rectangle(getParameter("wx"), getParameter("wy"), getParameter("ww"), getParameter("wh"));
Line 45  function setParamFromArea(rect) { Line 49  function setParamFromArea(rect) {
     return true;      return true;
 }  }
   
 var dlTrafo = new Transform();  
   
 function parseTrafo(elem) {  function parseTrafo(elem) {
     // returns Transform from current dlArea and picsize      // returns Transform from current dlArea and picsize
     var picsize = getElementRect(elem);      var picsize = getElementRect(elem);
Line 70  function parseTrafo(elem) { Line 72  function parseTrafo(elem) {
 }  }
   
   
 var dlMarks = new Array();  
   
 function parseMarks() {  function parseMarks() {
     // returns marks array from current parameters      // returns marks array from current parameters
     var marks = new Array();      var marks = new Array();
Line 115  function deleteMark() { Line 115  function deleteMark() {
     return true;      return true;
 }  }
   
 var dlFlags = new Object();  
   
 function hasFlag(mode) {  function hasFlag(mode) {
     // returns if mode flag is set      // returns if mode flag is set
     return (dlFlags[mode]);      return (dlFlags[mode]);
Line 180  function bestPicSize(elem, inset) { Line 178  function bestPicSize(elem, inset) {
     inset = 25;      inset = 25;
     }      }
     var ws = getWinSize();      var ws = getWinSize();
       var wsold = ws.copy();
     var es = getElementPosition(elem);      var es = getElementPosition(elem);
     if (es) {      if (es) {
           if ((es.x > ws.width)||(es.y > ws.height)) {
               alert("es="+es+" is outside ws="+ws+" fixing...");
               ws.width = ws.width - inset;
               ws.height = ws.height - inset;
           } else {
     ws.width = ws.width - es.x - inset;      ws.width = ws.width - es.x - inset;
     ws.height = ws.height - es.y - inset;      ws.height = ws.height - es.y - inset;
     }      }
       }
       alert("ws="+wsold+" es="+es+" -> ws="+ws);
       //alert("ws="+ws+"("+typeof(ws)+") es="+es);
     return ws;      return ws;
 }  }
   
   function setDLParam(e, s, relative) {
       // sets parameter based on HTML event
       var nam;
       var val;
       if (s.type && (s.type == "select-one")) {
           nam = s.name;
           val = s.options[s.selectedIndex].value;
       } else if (s.name && s.value) {
           nam = s.name;
           val = s.value;
       }
       if (nam && val) {
           setParameter(nam, val, relative);
           display();
       } else {
           alert("ERROR: unable to process event!");
       }
       return true;
   }
   
   
 /* **********************************************  /* **********************************************
  *     digilib specific routines   *     digilib specific routines
  * ******************************************** */   * ******************************************** */
   
 var elemScaler = null;  
 var picElem = null;  
   
   
 function dl_param_init() {  function dl_param_init() {
     // parameter initialisation before onload      // parameter initialisation before onload
       if (!baseScriptVersion) {
           base_init();
       }
       dlScriptVersion = "1.3a";
       dlArea = new Rectangle(0.0, 0.0, 1.0, 1.0);
       dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0);
       dlTrafo = new Transform();
       dlMarks = new Array();
       dlFlags = new Object();
       elemScaler = null;
       picElem = null;
       ZOOMFACTOR = Math.sqrt(2);
   
     // put the query parameters (sans "?") in the parameters array      // put the query parameters (sans "?") in the parameters array
     parseParameters(location.search.slice(1));      // non-digilib parameters get detail level 32
       parseParameters(location.search.slice(1),32);
     // treat special parameters      // treat special parameters
     dlMarks = parseMarks();      dlMarks = parseMarks();
     dlArea = parseArea();      dlArea = parseArea();
     dlFlags = parseFlags();      dlFlags = parseFlags();
       // mask for parameters when creating new URL
       dlUrlParamMask = 255;
 }  }
   
   
 function dl_init() {  function dl_init() {
     // initalisation on load      // initalisation on load
       if (!dlScriptVersion) {
           dl_param_init();
       }
     elemScaler = getElement("scaler", true);      elemScaler = getElement("scaler", true);
     picElem = getElement("pic", true);      picElem = getElement("pic", true);
     if (picElem == null && elemScaler) {      if (picElem == null && elemScaler) {
Line 218  function dl_init() { Line 260  function dl_init() {
     picElem = elemScaler.document.images[0];      picElem = elemScaler.document.images[0];
     }      }
     if ((!elemScaler)||(!picElem)) {      if ((!elemScaler)||(!picElem)) {
     alert("Sorry, zogilib doesn't work here!");          alert("Sorry, digilib doesn't work here!");
     return false;      return false;
     }      }
     // give a name to the window containing digilib      // give a name to the window containing digilib
Line 228  function dl_init() { Line 270  function dl_init() {
     window.name = "digilib";      window.name = "digilib";
     }      }
     // put the query parameters (sans "?") in the parameters array      // put the query parameters (sans "?") in the parameters array
     parseParameters(location.search.slice(1));      //parseParameters(location.search.slice(1),32);
     // treat special parameters      // treat special parameters
     dlMarks = parseMarks();      dlMarks = parseMarks();
     dlArea = parseArea();      dlArea = parseArea();
Line 244  function dl_init() { Line 286  function dl_init() {
 function display(detail) {  function display(detail) {
     // redisplay the page      // redisplay the page
     if (! detail) {      if (! detail) {
     detail = 9;          detail = 255;
     }      }
     var queryString = getAllParameters(detail);      var queryString = getAllParameters(detail & dlUrlParamMask);
     location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString;      location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString;
 }  }
   
Line 290  function setMark(reload) { Line 332  function setMark(reload) {
     alert("Only 8 marks are possible at the moment!");      alert("Only 8 marks are possible at the moment!");
     return;      return;
     }      }
       window.focus();
   
     function markEvent(evt) {      function markEvent(evt) {
     // event handler adding a new mark      // event handler adding a new mark
     unregisterMouseDown(elemScaler, markEvent);          unregisterEvent("mousedown", elemScaler, markEvent);
     var p = dlTrafo.invtransform(evtPosition(evt));      var p = dlTrafo.invtransform(evtPosition(evt));
     addMark(p);      addMark(p);
     if (defined(reload)&&(!reload)) {      if (defined(reload)&&(!reload)) {
Line 305  function setMark(reload) { Line 348  function setMark(reload) {
     }      }
   
     // starting event capture      // starting event capture
     registerMouseDown(elemScaler, markEvent);      registerEvent("mousedown", elemScaler, markEvent);
 }  }
   
   
Line 350  function zoomArea() { Line 393  function zoomArea() {
         showElement(eck2, true);          showElement(eck2, true);
         showElement(eck3, true);          showElement(eck3, true);
         showElement(eck4, true);          showElement(eck4, true);
         registerMouseMove(elemScaler, zoomMove);              // show moving
         registerMouseMove(eck4, zoomMove);              registerEvent("mousemove", elemScaler, zoomMove);
               registerEvent("mousemove", eck4, zoomMove);
               // enable drag-to-zoom
               registerEvent("mouseup", elemScaler, zoomClick);
               registerEvent("mouseup", eck4, zoomClick);
     } else {      } else {
         // second click -- end moving          // second click -- end moving
         pt2 = evtPosition(evt);          pt2 = evtPosition(evt);
Line 359  function zoomArea() { Line 406  function zoomArea() {
         showElement(eck2, false);          showElement(eck2, false);
         showElement(eck3, false);          showElement(eck3, false);
         showElement(eck4, false);          showElement(eck4, false);
         unregisterMouseMove(elemScaler, zoomMove);              unregisterEvent("mousemove", elemScaler, zoomMove);
         unregisterMouseMove(eck4, zoomMove);              unregisterEvent("mousemove", eck4, zoomMove);
         unregisterMouseDown(elemScaler, zoomClick);              unregisterEvent("mousedown", elemScaler, zoomClick);
         unregisterMouseDown(eck4, zoomClick);              unregisterEvent("mousedown", eck4, zoomClick);
         var p1 = dlTrafo.invtransform(pt1);          var p1 = dlTrafo.invtransform(pt1);
         var p2 = dlTrafo.invtransform(pt2);          var p2 = dlTrafo.invtransform(pt2);
         var ww = p2.x-p1.x;          var ww = p2.x-p1.x;
Line 395  function zoomArea() { Line 442  function zoomArea() {
     }      }
   
     // starting event capture      // starting event capture
     registerMouseDown(elemScaler, zoomClick);      registerEvent("mousedown", elemScaler, zoomClick);
     registerMouseDown(eck4, zoomClick);      registerEvent("mousedown", eck4, zoomClick);
 }  }
   
 var ZOOMFACTOR = Math.sqrt(2);  
   
 function zoomBy(factor) {  function zoomBy(factor) {
     // zooms by the given factor      // zooms by the given factor
     var newarea = dlArea.copy();      var newarea = dlArea.copy();
Line 427  function zoomFullpage() { Line 472  function zoomFullpage() {
 function moveCenter() {  function moveCenter() {
     // move visible area so that it's centered around the clicked point      // move visible area so that it's centered around the clicked point
     if ( (dlArea.width == 1.0) && (dlArea.height == 1.0) ) {      if ( (dlArea.width == 1.0) && (dlArea.height == 1.0) ) {
     // noting to do          // nothing to do
     return;      return;
     }      }
     window.focus();      window.focus();
   
     function moveCenterEvent(evt) {      function moveCenterEvent(evt) {
     // move to handler      // move to handler
     unregisterMouseDown(elemScaler, moveCenterEvent);          unregisterEvent("mousedown", elemScaler, moveCenterEvent);
     var pt = dlTrafo.invtransform(evtPosition(evt));      var pt = dlTrafo.invtransform(evtPosition(evt));
     var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height);      var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height);
     newarea = dlMaxArea.fit(newarea);      newarea = dlMaxArea.fit(newarea);
Line 445  function moveCenter() { Line 490  function moveCenter() {
     }      }
   
     // starting event capture      // starting event capture
     registerMouseDown(elemScaler, moveCenterEvent);      registerEvent("mousedown", elemScaler, moveCenterEvent);
 }  }
   
   function moveBy(movx, movy) {
       // move visible area by movx and movy (in units of ww, wh)
       if ((dlArea.width == 1.0)&&(dlArea.height == 1.0)) {
           // nothing to do
           return;
       }
       var newarea = dlArea.copy();
       newarea.x += parseFloat(movx)*dlArea.width;
       newarea.y += parseFloat(movy)*dlArea.height;
       newarea = dlMaxArea.fit(newarea);
       // set parameters
       setParamFromArea(newarea);
       parseArea();
       display();
   }
   
 function getRef() {  function getRef() {
     // returns a reference to the current digilib set      // returns a reference to the current digilib set
Line 456  function getRef() { Line 515  function getRef() {
     var baseUrl = location.protocol + "//" + location.host + location.pathname;      var baseUrl = location.protocol + "//" + location.host + location.pathname;
     }      }
     var hyperlinkRef = baseUrl;      var hyperlinkRef = baseUrl;
     var par = getAllParameters(9);      var par = getAllParameters((7+32+64) & dlUrlParamMask); // all without ddpi, pt
     if (par.length > 0) {      if (par.length > 0) {
     hyperlinkRef += "?" + par;      hyperlinkRef += "?" + par;
     }      }
     return hyperlinkRef;      return hyperlinkRef;
 }  }
   
   function getRefWin(type, msg) {
       // shows an alert with a reference to the current digilib set
       if (! msg) {
           msg = "Link for HTML documents";
       }
       prompt(msg, getRef());
   }
   
   function getQuality() {
       // returns the current q setting
       for (var i = 0; i < 3; i++) {
           if (hasFlag("q"+i)) {
               return i;
           }
       }
       return 1
   }
   
   function setQuality(qual) {
       // set the image quality
       for (var i = 0; i < 3; i++) {
           removeFlag("q"+i);
           if (i == qual) {
               addFlag("q"+i);
           }
       }
       setParameter("mo", getAllFlags());
       display();
   }    
   
   function setQualityWin(msg) {
       // dialog for setting quality
       if (! msg) {
           msg = "Quality (0..2)";
       }
       var q = getQuality();
       var newq = window.prompt(msg, q);
       if (newq) {
           setQuality(newq);
       }
   }
   
   function mirror(dir) {
       // mirror the image horizontally or vertically
       if (dir == "h") {
           toggleFlag("hmir");
       } else {
           toggleFlag("vmir");
       }
       setParameter("mo", getAllFlags());
       display();
   }
   
   function gotoPage(gopage, keep) {
       // goto given page nr (+/-: relative)
       var oldpn = parseInt(getParameter("pn"));
       setParameter("pn", gopage, true);
       var pn = parseInt(getParameter("pn"));
       if (pn < 1) {
           alert("No such page! (Page number too low)");
           setParameter("pn", oldpn);
           return;
       }
       if (hasParameter("pt")) {
           pt = parseInt(getParameter("pt"))
           if (pn > pt) {
               alert("No such page! (Page number too high)");
               setParameter("pn", oldpn);
               return;
           }
       }
       if (keep) {
           display(63+128); // all, no mark
       } else {    
           display(3+32+128); // fn, pn, ws, mo + pt
       }
   }
   
   function gotoPageWin() {
       // dialog to ask for new page nr
       var pn = getParameter("pn");
       var gopage = window.prompt("Go to page", pn);
       if (gopage) {
           gotoPage(gopage);
       }
   }
   
   function setParamWin(param, text, relative) {
       // dialog to ask for new parameter value
       var val = getParameter(param);
       var newval = window.prompt(text, val);
       if (newval) {
           setParameter(param, newval, relative);
           display();
       }
   }
   
   function showOptions(show) {
       // show or hide option div
       var elem = getElement("dloptions");
       showElement(elem, show);
   }
   
   function toggleOptions() {
       // toggle option div
       var elem = getElement("dloptions");
       showOptions(! isElementVisible(elem));
   }

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


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