|
|
| version 1.1, 2004/07/21 17:44:51 | version 1.7, 2005/11/08 18:10:10 |
|---|---|
| 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, 8.11.2005 | |
| 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 188 function bestPicSize(elem, inset) { | Line 186 function bestPicSize(elem, inset) { |
| 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.2b"; | |
| 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)); | parseParameters(location.search.slice(1)); |
| Line 211 function dl_param_init() { | Line 238 function dl_param_init() { |
| 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 248 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 244 function dl_init() { | Line 274 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); |
| location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString; | location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString; |
| Line 290 function setMark(reload) { | Line 320 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 336 function setMark(reload) { |
| } | } |
| // starting event capture | // starting event capture |
| registerMouseDown(elemScaler, markEvent); | registerEvent("mousedown", elemScaler, markEvent); |
| } | } |
| Line 350 function zoomArea() { | Line 381 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 394 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 430 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 460 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 478 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 503 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+16); // 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(15+32); // all, no mark | |
| } else { | |
| display(3+32); // 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); | |
| } | |