|
|
| version 1.3, 2004/10/04 20:58:01 | version 1.11, 2011/07/26 18:10:24 |
|---|---|
| Line 17 Foundation, Inc., 59 Temple Place - Suit | Line 17 Foundation, Inc., 59 Temple Place - Suit |
| Authors: | Authors: |
| Christian Luginbuehl, 01.05.2003 (first version) | Christian Luginbuehl, 01.05.2003 (first version) |
| DW 24.03.2004 (Changed for digiLib in Zope) | DW 24.03.2004 (Changed for digiLib in Zope) |
| Robert Casties, 04.10.2004 | Robert Casties, 14.7.2006 |
| ! Requires baselib.js ! | ! Requires baselib.js ! |
| */ | */ |
| var dlScriptVersion = "1.0b3"; | |
| 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 46 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 71 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 116 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 181 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 219 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 229 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 245 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 405 function zoomArea() { | Line 446 function zoomArea() { |
| registerEvent("mousedown", 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 433 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(); |
| Line 454 function moveCenter() { | Line 493 function moveCenter() { |
| registerEvent("mousedown", 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 462 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; |
| } | } |
| Line 473 function getRefWin(type, msg) { | Line 526 function getRefWin(type, msg) { |
| // shows an alert with a reference to the current digilib set | // shows an alert with a reference to the current digilib set |
| if (! msg) { | if (! msg) { |
| msg = "Link for HTML documents"; | msg = "Link for HTML documents"; |
| } | |
| prompt(msg, getRef()); | 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)); | |
| } |