|
|
| version 1.1, 2004/05/05 12:29:08 | version 1.2, 2004/06/02 17:32:54 |
|---|---|
| Line 43 function setParamFromArea(rect) { | Line 43 function setParamFromArea(rect) { |
| var dlTrafo = new Transform(); | var dlTrafo = new Transform(); |
| function parseTrafo() { | function parseTrafo(elem) { |
| // returns Transform from current dlArea and picsize | // returns Transform from current dlArea and picsize |
| var picsize = getElementSize("pic"); | var picsize = getElementRect(elem); |
| var trafo = new Transform(); | var trafo = new Transform(); |
| // subtract area offset and size | // subtract area offset and size |
| trafo.concat(getTranslation(new Position(-dlArea.x, -dlArea.y))); | trafo.concat(getTranslation(new Position(-dlArea.x, -dlArea.y))); |
| Line 71 var dlMarks = new Array(); | Line 71 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(); |
| var ma = getParameter("mk").split(";"); | var ma; |
| var mk = getParameter("mk"); | |
| if (mk.indexOf(";") >= 0) { | |
| // old format with ";" | |
| ma = mk.split(";"); | |
| } else { | |
| ma = mk.split(","); | |
| } | |
| for (var i = 0; i < ma.length ; i++) { | for (var i = 0; i < ma.length ; i++) { |
| var pos = ma[i].split("/"); | var pos = ma[i].split("/"); |
| if (pos.length > 1) { | if (pos.length > 1) { |
| Line 87 function getAllMarks() { | Line 94 function getAllMarks() { |
| for (var i = 0; i < dlMarks.length; i++) { | for (var i = 0; i < dlMarks.length; i++) { |
| marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y)); | marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y)); |
| } | } |
| return marks.join(";"); | return marks.join(","); |
| } | } |
| function addMark(pos) { | function addMark(pos) { |
| Line 160 function parseFlags() { | Line 167 function parseFlags() { |
| } | } |
| function bestPicSize(tagid) { | function bestPicSize(elem, inset) { |
| // returns a Size with the best image size for the given tagid | // returns a Size with the best image size for the given element |
| var inset = 0; | if (! defined(inset)) { |
| inset = 25; | |
| } | |
| var ws = getWinSize(); | var ws = getWinSize(); |
| var es = getElementSize(tagid); | var es = getElementPosition(elem); |
| if (es) { | if (es) { |
| 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; |
| Line 177 function bestPicSize(tagid) { | Line 186 function bestPicSize(tagid) { |
| * digilib specific routines | * digilib specific routines |
| * ******************************************** */ | * ******************************************** */ |
| function init() { | var elemScaler = null; |
| if (document.layers) { | var picElem = null; |
| alert("Sorry Netscape4 is not supported!"); | |
| function dl_init() { | |
| elemScaler = getElement("scaler"); | |
| if (! elemScaler) { | |
| return false; | return false; |
| } | } |
| // give a name to the window containing digilib - this way one can test if there is already a | picElem = getElement("pic", true); |
| // digilib-window open and replace the contents of it (ex. digicat) | if (picElem == null) { |
| // in N4 pic is in the layer scaler | |
| picElem = elemScaler.document.images[0]; | |
| } | |
| // give a name to the window containing digilib | |
| top.window.name = "digilib"; | top.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)); |
| // treat special parameters | // treat special parameters |
| dlMarks = parseMarks(); | dlMarks = parseMarks(); |
| dlArea = parseArea(); | dlArea = parseArea(); |
| dlFlags = parseFlags(); | dlFlags = parseFlags(); |
| // wait for image to load and display marks | |
| //registerKeyDown(parseKeypress); | |
| renderMarks(); | renderMarks(); |
| // done | |
| focus(); | focus(); |
| return null; | return null; |
| } | } |
| function display(detail) { | function display(detail) { |
| // redisplay the page | // redisplay the page |
| if (! detail) { | |
| detail = 9; | |
| } | |
| 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; |
| } | } |
| function openWin(url, title, params) { | |
| // open browser window | |
| var ow = window.open(url, title, params); | |
| ow.focus(); | |
| } | |
| /* ********************************************** | /* ********************************************** |
| * interactive digilib functions | * interactive digilib functions |
| * ******************************************** */ | * ******************************************** */ |
| function ref(select) { | function getRef(select) { |
| // open a dialog with a reference to the current digilib set | // open a dialog with a reference to the current digilib set |
| var hyperlinkRef = baseUrl + "?" + getAllParameters(9); | var hyperlinkRef = baseUrl + "?" + getAllParameters(9); |
| if ( select == 0 ) { | if ( select == 0 ) { |
| Line 224 function ref(select) { | Line 246 function ref(select) { |
| function renderMarks() { | function renderMarks() { |
| // put the visible marks on the image | // put the visible marks on the image |
| var mark_count = dlMarks.length; | var mark_count = dlMarks.length; |
| var picelem = getElement("pic"); | |
| // make shure the image is loaded so we know its size | // make shure the image is loaded so we know its size |
| if (picelem && picelem.complete == false) { | if (defined(picElem.complete) && picElem.complete == false && ! browserType.isN4 ) { |
| setTimeout("placeMarks()", 100); | setTimeout("renderMarks()", 100); |
| } else { | } else { |
| var picsize = getElementSize("pic"); | //alert("rendermarks!"); |
| dlTrafo = parseTrafo(); | dlTrafo = parseTrafo(picElem); |
| for (var i = 0; i < 8; i++) { | for (var i = 0; i < 8; i++) { |
| var me = getElement("dot"+i); | |
| if (i < mark_count) { | if (i < mark_count) { |
| if (dlArea.containsPosition(dlMarks[i])) { | if (dlArea.containsPosition(dlMarks[i])) { |
| var mpos = dlTrafo.transform(dlMarks[i]); | var mpos = dlTrafo.transform(dlMarks[i]); |
| // suboptimal to place -5 pixels and not half size of mark-image | // suboptimal to place -5 pixels and not half size of mark-image |
| mpos.x = mpos.x -5; | mpos.x = mpos.x -5; |
| mpos.y = mpos.y -5; | mpos.y = mpos.y -5; |
| moveElement("dot"+i, mpos); | moveElement(me, mpos); |
| showElement("dot"+i, true); | showElement(me, true); |
| } | } |
| } else { | } else { |
| // hide the other marks | // hide the other marks |
| showElement("dot"+i, false); | showElement(me, false); |
| } | } |
| } | } |
| } | } |
| } | } |
| function mark() { | function setMark() { |
| // add a mark where clicked | // add a mark where clicked |
| if ( dlMarks.length > 7 ) { | if ( dlMarks.length > 7 ) { |
| alert("Only 8 marks are possible at the moment!"); | alert("Only 8 marks are possible at the moment!"); |
| Line 258 function mark() { | Line 280 function mark() { |
| function markEvent(evt) { | function markEvent(evt) { |
| // event handler adding a new mark | // event handler adding a new mark |
| unregisterMouseDown("scaler", markEvent); | |
| var p = dlTrafo.invtransform(evtPosition(evt)); | var p = dlTrafo.invtransform(evtPosition(evt)); |
| unregisterMouseDown(elemScaler, markEvent); | |
| addMark(p); | addMark(p); |
| placeMarks(); | display(); |
| } | } |
| // starting event capture | // starting event capture |
| registerMouseDown("scaler", markEvent); | registerMouseDown(elemScaler, markEvent); |
| } | |
| function unmark() { | |
| // remove the last mark | |
| deleteMark(); | |
| placeMarks(); | |
| } | } |
| var ZOOMFACTOR = Math.sqrt(2); | var ZOOMFACTOR = Math.sqrt(2); |
| Line 297 function zoomPoint(inout) { | Line 313 function zoomPoint(inout) { |
| // set parameters | // set parameters |
| setParamFromArea(zoomarea); | setParamFromArea(zoomarea); |
| parseArea(); | parseArea(); |
| display(3); | // zoomed is always fit |
| setParameter("ws", 1); | |
| display(); | |
| } | } |
| // starting event capture | // starting event capture |
| registerMouseDown("scaler", zoomPointEvent); | registerMouseDown(elemScaler, zoomPointEvent); |
| } | } |
| Line 310 function zoomArea() { | Line 328 function zoomArea() { |
| var pt1, pt2; | var pt1, pt2; |
| var eck1pos, eck2pos, eck3pos, eck4pos; | var eck1pos, eck2pos, eck3pos, eck4pos; |
| window.focus(); | window.focus(); |
| var eck1 = getElement("eck1"); | |
| var eck2 = getElement("eck2"); | |
| var eck3 = getElement("eck3"); | |
| var eck4 = getElement("eck4"); | |
| function zoomClick(evt) { | function zoomClick(evt) { |
| // mouse click handler | // mouse click handler |
| Line 322 function zoomArea() { | Line 344 function zoomArea() { |
| eck2pos = new Position(pt1.x - 12, pt1.y); | eck2pos = new Position(pt1.x - 12, pt1.y); |
| eck3pos = new Position(pt1.x, pt1.y - 12); | eck3pos = new Position(pt1.x, pt1.y - 12); |
| eck4pos = new Position(pt1.y - 12, pt1.y - 12); | eck4pos = new Position(pt1.y - 12, pt1.y - 12); |
| moveElement("eck1", eck1pos); | moveElement(eck1, eck1pos); |
| moveElement("eck2", eck2pos); | moveElement(eck2, eck2pos); |
| moveElement("eck3", eck3pos); | moveElement(eck3, eck3pos); |
| moveElement("eck4", eck4pos); | moveElement(eck4, eck4pos); |
| showElement("eck1", true); | showElement(eck1, true); |
| showElement("eck2", true); | showElement(eck2, true); |
| showElement("eck3", true); | showElement(eck3, true); |
| showElement("eck4", true); | showElement(eck4, true); |
| registerMouseMove("scaler", zoomMove); | registerMouseMove(elemScaler, zoomMove); |
| registerMouseMove("eck4", zoomMove); | registerMouseMove(eck4, zoomMove); |
| } else { | } else { |
| // second click -- end moving | // second click -- end moving |
| pt2 = evtPosition(evt); | pt2 = evtPosition(evt); |
| showElement("eck1", false); | showElement(eck1, false); |
| showElement("eck2", false); | showElement(eck2, false); |
| showElement("eck3", false); | showElement(eck3, false); |
| showElement("eck4", false); | showElement(eck4, false); |
| unregisterMouseMove("scaler", zoomMove); | unregisterMouseMove(elemScaler, zoomMove); |
| unregisterMouseMove("eck4", zoomMove); | unregisterMouseMove(eck4, zoomMove); |
| unregisterMouseDown("scaler", zoomClick); | unregisterMouseDown(elemScaler, zoomClick); |
| unregisterMouseDown("eck4", zoomClick); | unregisterMouseDown(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 353 function zoomArea() { | Line 375 function zoomArea() { |
| setParameter("ww", cropFloat(ww)); | setParameter("ww", cropFloat(ww)); |
| setParameter("wh", cropFloat(wh)); | setParameter("wh", cropFloat(wh)); |
| parseArea(); | parseArea(); |
| display(3); | // zoomed is always fit |
| setParameter("ws", 1); | |
| display(); | |
| } | } |
| } | } |
| } | } |
| Line 366 function zoomArea() { | Line 390 function zoomArea() { |
| eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y); | eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y); |
| eck3pos = new Position(pt1.x, Math.max(pt1.y, pt2.y)-12); | eck3pos = new Position(pt1.x, Math.max(pt1.y, pt2.y)-12); |
| eck4pos = new Position(Math.max(pt1.x, pt2.x)-12, Math.max(pt1.y, pt2.y)-12); | eck4pos = new Position(Math.max(pt1.x, pt2.x)-12, Math.max(pt1.y, pt2.y)-12); |
| moveElement("eck1", eck1pos); | moveElement(eck1, eck1pos); |
| moveElement("eck2", eck2pos); | moveElement(eck2, eck2pos); |
| moveElement("eck3", eck3pos); | moveElement(eck3, eck3pos); |
| moveElement("eck4", eck4pos); | moveElement(eck4, eck4pos); |
| } | } |
| // starting event capture | // starting event capture |
| registerMouseDown("scaler", zoomClick); | registerMouseDown(elemScaler, zoomClick); |
| registerMouseDown("eck4", zoomClick); | registerMouseDown(eck4, zoomClick); |
| } | } |
| Line 391 function moveTo() { | Line 415 function moveTo() { |
| 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); |
| // stopping event capture | // stopping event capture |
| unregisterMouseDown("scaler", moveToEvent); | unregisterMouseDown(elemScaler, moveToEvent); |
| // set parameters | // set parameters |
| setParameter("wx", cropFloat(newarea.x)); | setParameter("wx", cropFloat(newarea.x)); |
| setParameter("wy", cropFloat(newarea.y)); | setParameter("wy", cropFloat(newarea.y)); |
| setParameter("ww", cropFloat(newarea.width)); | setParameter("ww", cropFloat(newarea.width)); |
| setParameter("wh", cropFloat(newarea.height)); | setParameter("wh", cropFloat(newarea.height)); |
| display(3); | display(); |
| } | } |
| // starting event capture | // starting event capture |
| registerMouseDown("scaler", moveToEvent); | registerMouseDown(elemScaler, moveToEvent); |
| } | |
| function parseKeypress(evt) { | |
| // capturing keypresses for next and previous page | |
| if ( document.all ) { | |
| if ( event.keyCode == 110 ) { | |
| page('+1'); | |
| } | |
| if ( event.keyCode == 98 ) { | |
| page('-1'); | |
| } | |
| document.cancelBubble = true; | |
| } else { | |
| if ( evt.charCode == 110 ) { | |
| page('+1'); | |
| } else if ( evt.charCode == 98 ) { | |
| page('-1'); | |
| } else if ( evt.which == 110 ) { | |
| page('+1'); | |
| } else if ( evt.which == 98 ) { | |
| // does not work currentlyfor Opera, because it catches the 'b'-key on it's own | |
| // have to change the key or find another way - luginbuehl | |
| page('-1'); | |
| } | |
| } | |
| } | } |
| /* ********************************************** | // debuggin' |
| * digilib parameter-only functions | function showcoordsN4() { |
| * ******************************************** */ | var s = ""; |
| for (var l in document.layers) { | |
| function setSize(factor) { | if (l == "length") continue; |
| // change the size of the image | e = document.layers[l]; |
| setParameter("ws", cropFloat(factor)); | if (e) { |
| display(3); | s += " [" + e.name + "]: pageX:" + e.pageX + " pageY:" + e.pageY + " width:" + e.clip.width + " height:" + e.clip.height + " visibility:" + e.visibility + " zindex:" + e.zIndex + "<br>\n"; |
| } | |
| 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(3); | |
| } | |
| function mirror(dir) { | |
| // mirror the image horizontally or vertically | |
| if (dir == "h") { | |
| toggleFlag("hmir"); | |
| } else { | |
| toggleFlag("vmir"); | |
| } | |
| setParameter("mo", getAllFlags()); | |
| display(3); | |
| } | |
| function page(page, details) { | |
| if ( details == null ) { | |
| details = 1; | |
| } | |
| if ( page.indexOf('-') == 0 ) { | |
| if ( dlParams.pn.value > 1 ) { | |
| page = Math.max(parseInt(dlParams.pn.value) - parseInt(page.slice(1)), 1); | |
| dlParams.pn.value = page; | |
| display(details); | |
| } else { | } else { |
| alert("You are already on the first page!"); | s += " {" + l + "}<br>\n"; |
| } | |
| } else if ( page.indexOf('+') == 0 ) { | |
| page = parseInt(dlParams.pn.value) + parseInt(page.slice(1)); | |
| dlParams.pn.value = page; | |
| display(details); | |
| } else if ( page == parseInt(page) ) { | |
| dlParams.pn.value = parseInt(page); | |
| display(details); | |
| } | } |
| } | } |
| return s; | |
| function zoomFullpage() { | |
| // zooms out to show the whole image | |
| setParameter("wx", 0.0); | |
| setParameter("wy", 0.0); | |
| setParameter("ww", 1.0); | |
| setParameter("wh", 1.0); | |
| parseArea(); | |
| display(3); | |
| } | } |