--- 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