--- zogiLib/js/Attic/dl_lib.js 2004/05/05 12:29:08 1.1 +++ zogiLib/js/Attic/dl_lib.js 2004/06/02 17:32:54 1.2 @@ -43,9 +43,9 @@ function setParamFromArea(rect) { var dlTrafo = new Transform(); -function parseTrafo() { +function parseTrafo(elem) { // returns Transform from current dlArea and picsize - var picsize = getElementSize("pic"); + var picsize = getElementRect(elem); var trafo = new Transform(); // subtract area offset and size trafo.concat(getTranslation(new Position(-dlArea.x, -dlArea.y))); @@ -71,7 +71,14 @@ var dlMarks = new Array(); function parseMarks() { // returns marks array from current parameters 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++) { var pos = ma[i].split("/"); if (pos.length > 1) { @@ -87,7 +94,7 @@ function getAllMarks() { for (var i = 0; i < dlMarks.length; i++) { marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y)); } - return marks.join(";"); + return marks.join(","); } function addMark(pos) { @@ -160,11 +167,13 @@ function parseFlags() { } -function bestPicSize(tagid) { - // returns a Size with the best image size for the given tagid - var inset = 0; +function bestPicSize(elem, inset) { + // returns a Size with the best image size for the given element + if (! defined(inset)) { + inset = 25; + } var ws = getWinSize(); - var es = getElementSize(tagid); + var es = getElementPosition(elem); if (es) { ws.width = ws.width - es.x - inset; ws.height = ws.height - es.y - inset; @@ -177,41 +186,54 @@ function bestPicSize(tagid) { * digilib specific routines * ******************************************** */ -function init() { - if (document.layers) { - alert("Sorry Netscape4 is not supported!"); +var elemScaler = null; +var picElem = null; + +function dl_init() { + elemScaler = getElement("scaler"); + if (! elemScaler) { return false; } - // give a name to the window containing digilib - this way one can test if there is already a - // digilib-window open and replace the contents of it (ex. digicat) + picElem = getElement("pic", true); + 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"; - // put the query parameters (sans "&") in the parameters array + // put the query parameters (sans "?") in the parameters array parseParameters(location.search.slice(1)); // treat special parameters dlMarks = parseMarks(); dlArea = parseArea(); dlFlags = parseFlags(); - - //registerKeyDown(parseKeypress); - + // wait for image to load and display marks renderMarks(); - + // done focus(); return null; } function display(detail) { // redisplay the page + if (! detail) { + detail = 9; + } var queryString = getAllParameters(detail); 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 * ******************************************** */ -function ref(select) { +function getRef(select) { // open a dialog with a reference to the current digilib set var hyperlinkRef = baseUrl + "?" + getAllParameters(9); if ( select == 0 ) { @@ -224,32 +246,32 @@ function ref(select) { function renderMarks() { // put the visible marks on the image var mark_count = dlMarks.length; - var picelem = getElement("pic"); // make shure the image is loaded so we know its size - if (picelem && picelem.complete == false) { - setTimeout("placeMarks()", 100); + if (defined(picElem.complete) && picElem.complete == false && ! browserType.isN4 ) { + setTimeout("renderMarks()", 100); } else { - var picsize = getElementSize("pic"); - dlTrafo = parseTrafo(); + //alert("rendermarks!"); + dlTrafo = parseTrafo(picElem); for (var i = 0; i < 8; i++) { + var me = getElement("dot"+i); if (i < mark_count) { if (dlArea.containsPosition(dlMarks[i])) { var mpos = dlTrafo.transform(dlMarks[i]); // suboptimal to place -5 pixels and not half size of mark-image mpos.x = mpos.x -5; mpos.y = mpos.y -5; - moveElement("dot"+i, mpos); - showElement("dot"+i, true); + moveElement(me, mpos); + showElement(me, true); } } else { // hide the other marks - showElement("dot"+i, false); + showElement(me, false); } } } } -function mark() { +function setMark() { // add a mark where clicked if ( dlMarks.length > 7 ) { alert("Only 8 marks are possible at the moment!"); @@ -258,20 +280,14 @@ function mark() { function markEvent(evt) { // event handler adding a new mark - unregisterMouseDown("scaler", markEvent); var p = dlTrafo.invtransform(evtPosition(evt)); + unregisterMouseDown(elemScaler, markEvent); addMark(p); - placeMarks(); + display(); } // starting event capture - registerMouseDown("scaler", markEvent); -} - -function unmark() { - // remove the last mark - deleteMark(); - placeMarks(); + registerMouseDown(elemScaler, markEvent); } var ZOOMFACTOR = Math.sqrt(2); @@ -297,11 +313,13 @@ function zoomPoint(inout) { // set parameters setParamFromArea(zoomarea); parseArea(); - display(3); + // zoomed is always fit + setParameter("ws", 1); + display(); } // starting event capture - registerMouseDown("scaler", zoomPointEvent); + registerMouseDown(elemScaler, zoomPointEvent); } @@ -310,6 +328,10 @@ function zoomArea() { var pt1, pt2; var eck1pos, eck2pos, eck3pos, eck4pos; window.focus(); + var eck1 = getElement("eck1"); + var eck2 = getElement("eck2"); + var eck3 = getElement("eck3"); + var eck4 = getElement("eck4"); function zoomClick(evt) { // mouse click handler @@ -322,27 +344,27 @@ function zoomArea() { eck2pos = new Position(pt1.x - 12, pt1.y); eck3pos = new Position(pt1.x, pt1.y - 12); eck4pos = new Position(pt1.y - 12, pt1.y - 12); - moveElement("eck1", eck1pos); - moveElement("eck2", eck2pos); - moveElement("eck3", eck3pos); - moveElement("eck4", eck4pos); - showElement("eck1", true); - showElement("eck2", true); - showElement("eck3", true); - showElement("eck4", true); - registerMouseMove("scaler", zoomMove); - registerMouseMove("eck4", zoomMove); + moveElement(eck1, eck1pos); + moveElement(eck2, eck2pos); + moveElement(eck3, eck3pos); + moveElement(eck4, eck4pos); + showElement(eck1, true); + showElement(eck2, true); + showElement(eck3, true); + showElement(eck4, true); + registerMouseMove(elemScaler, zoomMove); + registerMouseMove(eck4, zoomMove); } else { // second click -- end moving pt2 = evtPosition(evt); - showElement("eck1", false); - showElement("eck2", false); - showElement("eck3", false); - showElement("eck4", false); - unregisterMouseMove("scaler", zoomMove); - unregisterMouseMove("eck4", zoomMove); - unregisterMouseDown("scaler", zoomClick); - unregisterMouseDown("eck4", zoomClick); + showElement(eck1, false); + showElement(eck2, false); + showElement(eck3, false); + showElement(eck4, false); + unregisterMouseMove(elemScaler, zoomMove); + unregisterMouseMove(eck4, zoomMove); + unregisterMouseDown(elemScaler, zoomClick); + unregisterMouseDown(eck4, zoomClick); var p1 = dlTrafo.invtransform(pt1); var p2 = dlTrafo.invtransform(pt2); var ww = p2.x-p1.x; @@ -353,7 +375,9 @@ function zoomArea() { setParameter("ww", cropFloat(ww)); setParameter("wh", cropFloat(wh)); parseArea(); - display(3); + // zoomed is always fit + setParameter("ws", 1); + display(); } } } @@ -366,15 +390,15 @@ function zoomArea() { eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y); 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); - moveElement("eck1", eck1pos); - moveElement("eck2", eck2pos); - moveElement("eck3", eck3pos); - moveElement("eck4", eck4pos); + moveElement(eck1, eck1pos); + moveElement(eck2, eck2pos); + moveElement(eck3, eck3pos); + moveElement(eck4, eck4pos); } // starting event capture - registerMouseDown("scaler", zoomClick); - registerMouseDown("eck4", zoomClick); + registerMouseDown(elemScaler, zoomClick); + registerMouseDown(eck4, zoomClick); } @@ -391,111 +415,31 @@ function moveTo() { var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height); newarea = dlMaxArea.fit(newarea); // stopping event capture - unregisterMouseDown("scaler", moveToEvent); + unregisterMouseDown(elemScaler, moveToEvent); // set parameters setParameter("wx", cropFloat(newarea.x)); setParameter("wy", cropFloat(newarea.y)); setParameter("ww", cropFloat(newarea.width)); setParameter("wh", cropFloat(newarea.height)); - display(3); + display(); } // 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'); - } - } -} - - -/* ********************************************** - * digilib parameter-only functions - * ******************************************** */ - -function setSize(factor) { - // change the size of the image - setParameter("ws", cropFloat(factor)); - display(3); -} -function setQuality(qual) { - // set the image quality - for (var i = 0; i < 3; i++) { - removeFlag("q"+i); - if (i == qual) { - addFlag("q"+i); +// debuggin' +function showcoordsN4() { + var s = ""; + for (var l in document.layers) { + if (l == "length") continue; + e = document.layers[l]; + if (e) { + s += " [" + e.name + "]: pageX:" + e.pageX + " pageY:" + e.pageY + " width:" + e.clip.width + " height:" + e.clip.height + " visibility:" + e.visibility + " zindex:" + e.zIndex + "
\n"; + } else { + s += " {" + l + "}
\n"; } } - 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 { - alert("You are already on the first page!"); - } - - } 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); - } - -} - -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); -} - + return s; +} \ No newline at end of file