--- zogiLib/js/dllib.js 2004/07/21 17:44:51 1.1 +++ zogiLib/js/dllib.js 2004/11/03 15:24:46 1.5 @@ -1,4 +1,4 @@ -/* 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 @@ -14,23 +14,27 @@ 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 20.7.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 -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 */ -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() { // returns area Rectangle from current parameters return new Rectangle(getParameter("wx"), getParameter("wy"), getParameter("ww"), getParameter("wh")); @@ -45,8 +49,6 @@ function setParamFromArea(rect) { return true; } -var dlTrafo = new Transform(); - function parseTrafo(elem) { // returns Transform from current dlArea and picsize var picsize = getElementRect(elem); @@ -70,8 +72,6 @@ function parseTrafo(elem) { } -var dlMarks = new Array(); - function parseMarks() { // returns marks array from current parameters var marks = new Array(); @@ -115,8 +115,6 @@ function deleteMark() { return true; } -var dlFlags = new Object(); - function hasFlag(mode) { // returns if mode flag is set return (dlFlags[mode]); @@ -193,12 +191,21 @@ function bestPicSize(elem, inset) { * digilib specific routines * ******************************************** */ -var elemScaler = null; -var picElem = null; - function dl_param_init() { // parameter initialisation before onload + if (!baseScriptVersion) { + base_init(); + } + dlScriptVersion = "1.1b"; + 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 parseParameters(location.search.slice(1)); @@ -211,6 +218,9 @@ function dl_param_init() { function dl_init() { // initalisation on load + if (!dlScriptVersion) { + dl_param_init(); + } elemScaler = getElement("scaler", true); picElem = getElement("pic", true); if (picElem == null && elemScaler) { @@ -218,7 +228,7 @@ function dl_init() { picElem = elemScaler.document.images[0]; } if ((!elemScaler)||(!picElem)) { - alert("Sorry, zogilib doesn't work here!"); + alert("Sorry, digilib doesn't work here!"); return false; } // give a name to the window containing digilib @@ -290,10 +300,11 @@ function setMark(reload) { alert("Only 8 marks are possible at the moment!"); return; } + window.focus(); function markEvent(evt) { // event handler adding a new mark - unregisterMouseDown(elemScaler, markEvent); + unregisterEvent("mousedown", elemScaler, markEvent); var p = dlTrafo.invtransform(evtPosition(evt)); addMark(p); if (defined(reload)&&(!reload)) { @@ -305,7 +316,7 @@ function setMark(reload) { } // starting event capture - registerMouseDown(elemScaler, markEvent); + registerEvent("mousedown", elemScaler, markEvent); } @@ -350,8 +361,12 @@ function zoomArea() { showElement(eck2, true); showElement(eck3, true); showElement(eck4, true); - registerMouseMove(elemScaler, zoomMove); - registerMouseMove(eck4, zoomMove); + // show moving + registerEvent("mousemove", elemScaler, zoomMove); + registerEvent("mousemove", eck4, zoomMove); + // enable drag-to-zoom + registerEvent("mouseup", elemScaler, zoomClick); + registerEvent("mouseup", eck4, zoomClick); } else { // second click -- end moving pt2 = evtPosition(evt); @@ -359,10 +374,10 @@ function zoomArea() { showElement(eck2, false); showElement(eck3, false); showElement(eck4, false); - unregisterMouseMove(elemScaler, zoomMove); - unregisterMouseMove(eck4, zoomMove); - unregisterMouseDown(elemScaler, zoomClick); - unregisterMouseDown(eck4, zoomClick); + unregisterEvent("mousemove", elemScaler, zoomMove); + unregisterEvent("mousemove", eck4, zoomMove); + unregisterEvent("mousedown", elemScaler, zoomClick); + unregisterEvent("mousedown", eck4, zoomClick); var p1 = dlTrafo.invtransform(pt1); var p2 = dlTrafo.invtransform(pt2); var ww = p2.x-p1.x; @@ -395,12 +410,10 @@ function zoomArea() { } // starting event capture - registerMouseDown(elemScaler, zoomClick); - registerMouseDown(eck4, zoomClick); + registerEvent("mousedown", elemScaler, zoomClick); + registerEvent("mousedown", eck4, zoomClick); } -var ZOOMFACTOR = Math.sqrt(2); - function zoomBy(factor) { // zooms by the given factor var newarea = dlArea.copy(); @@ -434,7 +447,7 @@ function moveCenter() { function moveCenterEvent(evt) { // move to handler - unregisterMouseDown(elemScaler, moveCenterEvent); + unregisterEvent("mousedown", elemScaler, moveCenterEvent); 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); newarea = dlMaxArea.fit(newarea); @@ -445,9 +458,26 @@ function moveCenter() { } // starting event capture - registerMouseDown(elemScaler, moveCenterEvent); + registerEvent("mousedown", elemScaler, moveCenterEvent); } +function moveBy(movx, movy) { + // move visible area by movx and movy (in units of dw, dh) + 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() { @@ -462,3 +492,11 @@ function getRef() { } 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()); +}