Mercurial > hg > digilib-old
comparison client/digitallibrary/dllib.js @ 386:3b710e39823b
latest version of baselib.js and dllib.js
author | robcast |
---|---|
date | Wed, 07 Dec 2005 16:13:49 +0100 |
parents | d14782908c37 |
children | 92e49afaea90 |
comparison
equal
deleted
inserted
replaced
385:0155f1c3f505 | 386:3b710e39823b |
---|---|
15 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | 15 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
16 | 16 |
17 Authors: | 17 Authors: |
18 Christian Luginbuehl, 01.05.2003 (first version) | 18 Christian Luginbuehl, 01.05.2003 (first version) |
19 DW 24.03.2004 (Changed for digiLib in Zope) | 19 DW 24.03.2004 (Changed for digiLib in Zope) |
20 Robert Casties, 2.11.2004 | 20 Robert Casties, 8.11.2005 |
21 | 21 |
22 ! Requires baselib.js ! | 22 ! Requires baselib.js ! |
23 | 23 |
24 */ | 24 */ |
25 | 25 |
26 | 26 |
27 function identify() { | 27 function identify() { |
28 // used for identifying a digilib instance | 28 // used for identifying a digilib instance |
29 // Relato uses that function - lugi | 29 // Relato uses that function - lugi |
30 return "Digilib 0.6"; | 30 return "Digilib 0.6"; |
31 } | 31 } |
32 | 32 |
33 | 33 |
34 /* | 34 /* |
35 * more parameter handling | 35 * more parameter handling |
76 // returns marks array from current parameters | 76 // returns marks array from current parameters |
77 var marks = new Array(); | 77 var marks = new Array(); |
78 var ma; | 78 var ma; |
79 var mk = getParameter("mk"); | 79 var mk = getParameter("mk"); |
80 if (mk.indexOf(";") >= 0) { | 80 if (mk.indexOf(";") >= 0) { |
81 // old format with ";" | 81 // old format with ";" |
82 ma = mk.split(";"); | 82 ma = mk.split(";"); |
83 } else { | 83 } else { |
84 ma = mk.split(","); | 84 ma = mk.split(","); |
85 } | 85 } |
86 for (var i = 0; i < ma.length ; i++) { | 86 for (var i = 0; i < ma.length ; i++) { |
87 var pos = ma[i].split("/"); | 87 var pos = ma[i].split("/"); |
88 if (pos.length > 1) { | 88 if (pos.length > 1) { |
89 marks.push(new Position(pos[0], pos[1])); | 89 marks.push(new Position(pos[0], pos[1])); |
90 } | 90 } |
91 } | 91 } |
92 return marks; | 92 return marks; |
93 } | 93 } |
94 | 94 |
95 function getAllMarks() { | 95 function getAllMarks() { |
96 // returns a string with all marks in query format | 96 // returns a string with all marks in query format |
97 var marks = new Array(); | 97 var marks = new Array(); |
98 for (var i = 0; i < dlMarks.length; i++) { | 98 for (var i = 0; i < dlMarks.length; i++) { |
99 marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y)); | 99 marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y)); |
100 } | 100 } |
101 return marks.join(","); | 101 return marks.join(","); |
102 } | 102 } |
103 | 103 |
104 function addMark(pos) { | 104 function addMark(pos) { |
128 } | 128 } |
129 | 129 |
130 function removeFlag(mode) { | 130 function removeFlag(mode) { |
131 // remove a mode flag | 131 // remove a mode flag |
132 if (dlFlags[mode]) { | 132 if (dlFlags[mode]) { |
133 delete dlFlags[mode]; | 133 delete dlFlags[mode]; |
134 } | 134 } |
135 setParameter("mo", getAllFlags()); | 135 setParameter("mo", getAllFlags()); |
136 return true; | 136 return true; |
137 } | 137 } |
138 | 138 |
139 function toggleFlag(mode) { | 139 function toggleFlag(mode) { |
140 // change a mode flag | 140 // change a mode flag |
141 if (dlFlags[mode]) { | 141 if (dlFlags[mode]) { |
142 delete dlFlags[mode]; | 142 delete dlFlags[mode]; |
143 } else { | 143 } else { |
144 dlFlags[mode] = mode; | 144 dlFlags[mode] = mode; |
145 } | 145 } |
146 setParameter("mo", getAllFlags()); | 146 setParameter("mo", getAllFlags()); |
147 return true; | 147 return true; |
148 } | 148 } |
149 | 149 |
150 function getAllFlags() { | 150 function getAllFlags() { |
151 // returns a string with all flags in query format | 151 // returns a string with all flags in query format |
152 var fa = new Array(); | 152 var fa = new Array(); |
153 for (var f in dlFlags) { | 153 for (var f in dlFlags) { |
154 if ((f != "")&&(dlFlags[f] != null)) { | 154 if ((f != "")&&(dlFlags[f] != null)) { |
155 fa.push(f); | 155 fa.push(f); |
156 } | 156 } |
157 } | 157 } |
158 return fa.join(","); | 158 return fa.join(","); |
159 } | 159 } |
160 | 160 |
161 function parseFlags() { | 161 function parseFlags() { |
162 // sets dlFlags from the current parameters | 162 // sets dlFlags from the current parameters |
163 var flags = new Object(); | 163 var flags = new Object(); |
164 var fa = getParameter("mo").split(","); | 164 var fa = getParameter("mo").split(","); |
165 for (var i = 0; i < fa.length ; i++) { | 165 for (var i = 0; i < fa.length ; i++) { |
166 var f = fa[i]; | 166 var f = fa[i]; |
167 if (f != "") { | 167 if (f != "") { |
168 flags[f] = f; | 168 flags[f] = f; |
169 } | 169 } |
170 } | 170 } |
171 return flags; | 171 return flags; |
172 } | 172 } |
173 | 173 |
174 | 174 |
175 function bestPicSize(elem, inset) { | 175 function bestPicSize(elem, inset) { |
176 // returns a Size with the best image size for the given element | 176 // returns a Size with the best image size for the given element |
177 if (! defined(inset)) { | 177 if (! defined(inset)) { |
178 inset = 25; | 178 inset = 25; |
179 } | 179 } |
180 var ws = getWinSize(); | 180 var ws = getWinSize(); |
181 var es = getElementPosition(elem); | 181 var es = getElementPosition(elem); |
182 if (es) { | 182 if (es) { |
183 ws.width = ws.width - es.x - inset; | 183 ws.width = ws.width - es.x - inset; |
184 ws.height = ws.height - es.y - inset; | 184 ws.height = ws.height - es.y - inset; |
185 } | 185 } |
186 return ws; | 186 return ws; |
187 } | |
188 | |
189 function setDLParam(e, s, relative) { | |
190 // sets parameter based on HTML event | |
191 var nam; | |
192 var val; | |
193 if (s.type && (s.type == "select-one")) { | |
194 nam = s.name; | |
195 val = s.options[s.selectedIndex].value; | |
196 } else if (s.name && s.value) { | |
197 nam = s.name; | |
198 val = s.value; | |
199 } | |
200 if (nam && val) { | |
201 setParameter(nam, val, relative); | |
202 display(); | |
203 } else { | |
204 alert("ERROR: unable to process event!"); | |
205 } | |
206 return true; | |
187 } | 207 } |
188 | 208 |
189 | 209 |
190 /* ********************************************** | 210 /* ********************************************** |
191 * digilib specific routines | 211 * digilib specific routines |
193 | 213 |
194 | 214 |
195 function dl_param_init() { | 215 function dl_param_init() { |
196 // parameter initialisation before onload | 216 // parameter initialisation before onload |
197 if (!baseScriptVersion) { | 217 if (!baseScriptVersion) { |
198 base_init(); | 218 base_init(); |
199 } | 219 } |
200 dlScriptVersion = "1.1b"; | 220 dlScriptVersion = "1.2b"; |
201 dlArea = new Rectangle(0.0, 0.0, 1.0, 1.0); | 221 dlArea = new Rectangle(0.0, 0.0, 1.0, 1.0); |
202 dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0); | 222 dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0); |
203 dlTrafo = new Transform(); | 223 dlTrafo = new Transform(); |
204 dlMarks = new Array(); | 224 dlMarks = new Array(); |
205 dlFlags = new Object(); | 225 dlFlags = new Object(); |
217 | 237 |
218 | 238 |
219 function dl_init() { | 239 function dl_init() { |
220 // initalisation on load | 240 // initalisation on load |
221 if (!dlScriptVersion) { | 241 if (!dlScriptVersion) { |
222 dl_param_init(); | 242 dl_param_init(); |
223 } | 243 } |
224 elemScaler = getElement("scaler", true); | 244 elemScaler = getElement("scaler", true); |
225 picElem = getElement("pic", true); | 245 picElem = getElement("pic", true); |
226 if (picElem == null && elemScaler) { | 246 if (picElem == null && elemScaler) { |
227 // in N4 pic is in the scaler layer | 247 // in N4 pic is in the scaler layer |
228 picElem = elemScaler.document.images[0]; | 248 picElem = elemScaler.document.images[0]; |
229 } | 249 } |
230 if ((!elemScaler)||(!picElem)) { | 250 if ((!elemScaler)||(!picElem)) { |
231 alert("Sorry, zogilib doesn't work here!"); | 251 alert("Sorry, digilib doesn't work here!"); |
232 return false; | 252 return false; |
233 } | 253 } |
234 // give a name to the window containing digilib | 254 // give a name to the window containing digilib |
235 if (defined(dlTarget)&&(dlTarget)) { | 255 if (defined(dlTarget)&&(dlTarget)) { |
236 window.name = dlTarget; | 256 window.name = dlTarget; |
237 } else { | 257 } else { |
238 window.name = "digilib"; | 258 window.name = "digilib"; |
239 } | 259 } |
240 // put the query parameters (sans "?") in the parameters array | 260 // put the query parameters (sans "?") in the parameters array |
241 parseParameters(location.search.slice(1)); | 261 parseParameters(location.search.slice(1)); |
242 // treat special parameters | 262 // treat special parameters |
243 dlMarks = parseMarks(); | 263 dlMarks = parseMarks(); |
252 | 272 |
253 | 273 |
254 function display(detail) { | 274 function display(detail) { |
255 // redisplay the page | 275 // redisplay the page |
256 if (! detail) { | 276 if (! detail) { |
257 detail = 9; | 277 detail = 255; |
258 } | 278 } |
259 var queryString = getAllParameters(detail); | 279 var queryString = getAllParameters(detail); |
260 location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString; | 280 location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString; |
261 } | 281 } |
262 | 282 |
269 function renderMarks() { | 289 function renderMarks() { |
270 // put the visible marks on the image | 290 // put the visible marks on the image |
271 var mark_count = dlMarks.length; | 291 var mark_count = dlMarks.length; |
272 // make shure the image is loaded so we know its size | 292 // make shure the image is loaded so we know its size |
273 if (defined(picElem.complete) && picElem.complete == false && ! browserType.isN4 ) { | 293 if (defined(picElem.complete) && picElem.complete == false && ! browserType.isN4 ) { |
274 setTimeout("renderMarks()", 100); | 294 setTimeout("renderMarks()", 100); |
275 } else { | 295 } else { |
276 dlTrafo = parseTrafo(picElem); | 296 dlTrafo = parseTrafo(picElem); |
277 for (var i = 0; i < 8; i++) { | 297 for (var i = 0; i < 8; i++) { |
278 var me = getElement("dot"+i); | 298 var me = getElement("dot"+i); |
279 if (i < mark_count) { | 299 if (i < mark_count) { |
280 if (dlArea.containsPosition(dlMarks[i])) { | 300 if (dlArea.containsPosition(dlMarks[i])) { |
281 var mpos = dlTrafo.transform(dlMarks[i]); | 301 var mpos = dlTrafo.transform(dlMarks[i]); |
282 // suboptimal to place -5 pixels and not half size of mark-image | 302 // suboptimal to place -5 pixels and not half size of mark-image |
283 mpos.x = mpos.x -5; | 303 mpos.x = mpos.x -5; |
284 mpos.y = mpos.y -5; | 304 mpos.y = mpos.y -5; |
285 moveElement(me, mpos); | 305 moveElement(me, mpos); |
286 showElement(me, true); | 306 showElement(me, true); |
287 } | 307 } |
288 } else { | 308 } else { |
289 // hide the other marks | 309 // hide the other marks |
290 showElement(me, false); | 310 showElement(me, false); |
291 } | 311 } |
292 } | 312 } |
293 } | 313 } |
294 } | 314 } |
295 | 315 |
296 | 316 |
297 function setMark(reload) { | 317 function setMark(reload) { |
298 // add a mark where clicked | 318 // add a mark where clicked |
299 if ( dlMarks.length > 7 ) { | 319 if ( dlMarks.length > 7 ) { |
300 alert("Only 8 marks are possible at the moment!"); | 320 alert("Only 8 marks are possible at the moment!"); |
301 return; | 321 return; |
302 } | 322 } |
303 window.focus(); | 323 window.focus(); |
304 | 324 |
305 function markEvent(evt) { | 325 function markEvent(evt) { |
306 // event handler adding a new mark | 326 // event handler adding a new mark |
307 unregisterEvent("mousedown", elemScaler, markEvent); | 327 unregisterEvent("mousedown", elemScaler, markEvent); |
308 var p = dlTrafo.invtransform(evtPosition(evt)); | 328 var p = dlTrafo.invtransform(evtPosition(evt)); |
309 addMark(p); | 329 addMark(p); |
310 if (defined(reload)&&(!reload)) { | 330 if (defined(reload)&&(!reload)) { |
311 // don't redisplay | 331 // don't redisplay |
312 renderMarks(); | 332 renderMarks(); |
313 return; | 333 return; |
314 } | 334 } |
315 display(); | 335 display(); |
316 } | 336 } |
317 | 337 |
318 // starting event capture | 338 // starting event capture |
319 registerEvent("mousedown", elemScaler, markEvent); | 339 registerEvent("mousedown", elemScaler, markEvent); |
320 } | 340 } |
322 | 342 |
323 function removeMark(reload) { | 343 function removeMark(reload) { |
324 // remove the last mark | 344 // remove the last mark |
325 deleteMark(); | 345 deleteMark(); |
326 if (defined(reload)&&(!reload)) { | 346 if (defined(reload)&&(!reload)) { |
327 // don't redisplay | 347 // don't redisplay |
328 renderMarks(); | 348 renderMarks(); |
329 return; | 349 return; |
330 } | 350 } |
331 display(); | 351 display(); |
332 } | 352 } |
333 | 353 |
334 | 354 |
341 var eck2 = getElement("eck2"); | 361 var eck2 = getElement("eck2"); |
342 var eck3 = getElement("eck3"); | 362 var eck3 = getElement("eck3"); |
343 var eck4 = getElement("eck4"); | 363 var eck4 = getElement("eck4"); |
344 | 364 |
345 function zoomClick(evt) { | 365 function zoomClick(evt) { |
346 // mouse click handler | 366 // mouse click handler |
347 if (click == 1) { | 367 if (click == 1) { |
348 // first click -- start moving | 368 // first click -- start moving |
349 click = 2; | 369 click = 2; |
350 pt1 = evtPosition(evt); | 370 pt1 = evtPosition(evt); |
351 pt2 = pt1; | 371 pt2 = pt1; |
352 eck1pos = pt1; | 372 eck1pos = pt1; |
353 eck2pos = new Position(pt1.x - 12, pt1.y); | 373 eck2pos = new Position(pt1.x - 12, pt1.y); |
354 eck3pos = new Position(pt1.x, pt1.y - 12); | 374 eck3pos = new Position(pt1.x, pt1.y - 12); |
355 eck4pos = new Position(pt1.y - 12, pt1.y - 12); | 375 eck4pos = new Position(pt1.y - 12, pt1.y - 12); |
356 moveElement(eck1, eck1pos); | 376 moveElement(eck1, eck1pos); |
357 moveElement(eck2, eck2pos); | 377 moveElement(eck2, eck2pos); |
358 moveElement(eck3, eck3pos); | 378 moveElement(eck3, eck3pos); |
359 moveElement(eck4, eck4pos); | 379 moveElement(eck4, eck4pos); |
360 showElement(eck1, true); | 380 showElement(eck1, true); |
361 showElement(eck2, true); | 381 showElement(eck2, true); |
362 showElement(eck3, true); | 382 showElement(eck3, true); |
363 showElement(eck4, true); | 383 showElement(eck4, true); |
364 // show moving | 384 // show moving |
365 registerEvent("mousemove", elemScaler, zoomMove); | 385 registerEvent("mousemove", elemScaler, zoomMove); |
366 registerEvent("mousemove", eck4, zoomMove); | 386 registerEvent("mousemove", eck4, zoomMove); |
367 // enable drag-to-zoom | 387 // enable drag-to-zoom |
368 registerEvent("mouseup", elemScaler, zoomClick); | 388 registerEvent("mouseup", elemScaler, zoomClick); |
369 registerEvent("mouseup", eck4, zoomClick); | 389 registerEvent("mouseup", eck4, zoomClick); |
370 } else { | 390 } else { |
371 // second click -- end moving | 391 // second click -- end moving |
372 pt2 = evtPosition(evt); | 392 pt2 = evtPosition(evt); |
373 showElement(eck1, false); | 393 showElement(eck1, false); |
374 showElement(eck2, false); | 394 showElement(eck2, false); |
375 showElement(eck3, false); | 395 showElement(eck3, false); |
376 showElement(eck4, false); | 396 showElement(eck4, false); |
377 unregisterEvent("mousemove", elemScaler, zoomMove); | 397 unregisterEvent("mousemove", elemScaler, zoomMove); |
378 unregisterEvent("mousemove", eck4, zoomMove); | 398 unregisterEvent("mousemove", eck4, zoomMove); |
379 unregisterEvent("mousedown", elemScaler, zoomClick); | 399 unregisterEvent("mousedown", elemScaler, zoomClick); |
380 unregisterEvent("mousedown", eck4, zoomClick); | 400 unregisterEvent("mousedown", eck4, zoomClick); |
381 var p1 = dlTrafo.invtransform(pt1); | 401 var p1 = dlTrafo.invtransform(pt1); |
382 var p2 = dlTrafo.invtransform(pt2); | 402 var p2 = dlTrafo.invtransform(pt2); |
383 var ww = p2.x-p1.x; | 403 var ww = p2.x-p1.x; |
384 var wh = p2.y-p1.y; | 404 var wh = p2.y-p1.y; |
385 if ((ww > 0)&&(wh > 0)) { | 405 if ((ww > 0)&&(wh > 0)) { |
386 setParameter("wx", cropFloat(p1.x)); | 406 setParameter("wx", cropFloat(p1.x)); |
387 setParameter("wy", cropFloat(p1.y)); | 407 setParameter("wy", cropFloat(p1.y)); |
388 setParameter("ww", cropFloat(ww)); | 408 setParameter("ww", cropFloat(ww)); |
389 setParameter("wh", cropFloat(wh)); | 409 setParameter("wh", cropFloat(wh)); |
390 parseArea(); | 410 parseArea(); |
391 // zoomed is always fit | 411 // zoomed is always fit |
392 setParameter("ws", 1); | 412 setParameter("ws", 1); |
393 display(); | 413 display(); |
394 } | 414 } |
395 } | 415 } |
396 } | 416 } |
397 | 417 |
398 function zoomMove(evt) { | 418 function zoomMove(evt) { |
399 // mouse move handler | 419 // mouse move handler |
400 pt2 = evtPosition(evt); | 420 pt2 = evtPosition(evt); |
401 // restrict marks to move right and down | 421 // restrict marks to move right and down |
402 eck1pos = pt1; | 422 eck1pos = pt1; |
403 eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y); | 423 eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y); |
404 eck3pos = new Position(pt1.x, Math.max(pt1.y, pt2.y)-12); | 424 eck3pos = new Position(pt1.x, Math.max(pt1.y, pt2.y)-12); |
405 eck4pos = new Position(Math.max(pt1.x, pt2.x)-12, Math.max(pt1.y, pt2.y)-12); | 425 eck4pos = new Position(Math.max(pt1.x, pt2.x)-12, Math.max(pt1.y, pt2.y)-12); |
406 moveElement(eck1, eck1pos); | 426 moveElement(eck1, eck1pos); |
407 moveElement(eck2, eck2pos); | 427 moveElement(eck2, eck2pos); |
408 moveElement(eck3, eck3pos); | 428 moveElement(eck3, eck3pos); |
409 moveElement(eck4, eck4pos); | 429 moveElement(eck4, eck4pos); |
410 } | 430 } |
411 | 431 |
412 // starting event capture | 432 // starting event capture |
413 registerEvent("mousedown", elemScaler, zoomClick); | 433 registerEvent("mousedown", elemScaler, zoomClick); |
414 registerEvent("mousedown", eck4, zoomClick); | 434 registerEvent("mousedown", eck4, zoomClick); |
438 | 458 |
439 | 459 |
440 function moveCenter() { | 460 function moveCenter() { |
441 // move visible area so that it's centered around the clicked point | 461 // move visible area so that it's centered around the clicked point |
442 if ( (dlArea.width == 1.0) && (dlArea.height == 1.0) ) { | 462 if ( (dlArea.width == 1.0) && (dlArea.height == 1.0) ) { |
443 // noting to do | 463 // nothing to do |
444 return; | 464 return; |
445 } | 465 } |
446 window.focus(); | 466 window.focus(); |
447 | 467 |
448 function moveCenterEvent(evt) { | 468 function moveCenterEvent(evt) { |
449 // move to handler | 469 // move to handler |
450 unregisterEvent("mousedown", elemScaler, moveCenterEvent); | 470 unregisterEvent("mousedown", elemScaler, moveCenterEvent); |
451 var pt = dlTrafo.invtransform(evtPosition(evt)); | 471 var pt = dlTrafo.invtransform(evtPosition(evt)); |
452 var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height); | 472 var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height); |
453 newarea = dlMaxArea.fit(newarea); | 473 newarea = dlMaxArea.fit(newarea); |
454 // set parameters | 474 // set parameters |
455 setParamFromArea(newarea); | 475 setParamFromArea(newarea); |
456 parseArea(); | 476 parseArea(); |
457 display(); | 477 display(); |
458 } | 478 } |
459 | 479 |
460 // starting event capture | 480 // starting event capture |
461 registerEvent("mousedown", elemScaler, moveCenterEvent); | 481 registerEvent("mousedown", elemScaler, moveCenterEvent); |
462 } | 482 } |
463 | 483 |
464 function moveBy(movx, movy) { | 484 function moveBy(movx, movy) { |
465 // move visible area by movx and movy (in units of dw, dh) | 485 // move visible area by movx and movy (in units of ww, wh) |
466 if ((dlArea.width == 1.0)&&(dlArea.height == 1.0)) { | 486 if ((dlArea.width == 1.0)&&(dlArea.height == 1.0)) { |
467 // nothing to do | 487 // nothing to do |
468 return; | 488 return; |
469 } | 489 } |
470 var newarea = dlArea.copy(); | 490 var newarea = dlArea.copy(); |
471 newarea.x += parseFloat(movx)*dlArea.width; | 491 newarea.x += parseFloat(movx)*dlArea.width; |
472 newarea.y += parseFloat(movy)*dlArea.height; | 492 newarea.y += parseFloat(movy)*dlArea.height; |
473 newarea = dlMaxArea.fit(newarea); | 493 newarea = dlMaxArea.fit(newarea); |
475 setParamFromArea(newarea); | 495 setParamFromArea(newarea); |
476 parseArea(); | 496 parseArea(); |
477 display(); | 497 display(); |
478 } | 498 } |
479 | 499 |
480 | |
481 | |
482 | |
483 function getRef() { | 500 function getRef() { |
484 // returns a reference to the current digilib set | 501 // returns a reference to the current digilib set |
485 if (! baseUrl) { | 502 if (! baseUrl) { |
486 var baseUrl = location.protocol + "//" + location.host + location.pathname; | 503 var baseUrl = location.protocol + "//" + location.host + location.pathname; |
487 } | 504 } |
488 var hyperlinkRef = baseUrl; | 505 var hyperlinkRef = baseUrl; |
489 var par = getAllParameters(9); | 506 var par = getAllParameters(7+16); // all without ddpi, pt |
490 if (par.length > 0) { | 507 if (par.length > 0) { |
491 hyperlinkRef += "?" + par; | 508 hyperlinkRef += "?" + par; |
492 } | 509 } |
493 return hyperlinkRef; | 510 return hyperlinkRef; |
494 } | 511 } |
495 | 512 |
496 function getRefWin(type, msg) { | 513 function getRefWin(type, msg) { |
497 // shows an alert with a reference to the current digilib set | 514 // shows an alert with a reference to the current digilib set |
498 if (! msg) { | 515 if (! msg) { |
499 msg = "Link for HTML documents"; | 516 msg = "Link for HTML documents"; |
500 } | 517 } |
501 prompt(msg, getRef()); | 518 prompt(msg, getRef()); |
502 } | 519 } |
520 | |
521 function getQuality() { | |
522 // returns the current q setting | |
523 for (var i = 0; i < 3; i++) { | |
524 if (hasFlag("q"+i)) { | |
525 return i; | |
526 } | |
527 } | |
528 return 1 | |
529 } | |
530 | |
531 function setQuality(qual) { | |
532 // set the image quality | |
533 for (var i = 0; i < 3; i++) { | |
534 removeFlag("q"+i); | |
535 if (i == qual) { | |
536 addFlag("q"+i); | |
537 } | |
538 } | |
539 setParameter("mo", getAllFlags()); | |
540 display(); | |
541 } | |
542 | |
543 function setQualityWin(msg) { | |
544 // dialog for setting quality | |
545 if (! msg) { | |
546 msg = "Quality (0..2)"; | |
547 } | |
548 var q = getQuality(); | |
549 var newq = window.prompt(msg, q); | |
550 if (newq) { | |
551 setQuality(newq); | |
552 } | |
553 } | |
554 | |
555 function mirror(dir) { | |
556 // mirror the image horizontally or vertically | |
557 if (dir == "h") { | |
558 toggleFlag("hmir"); | |
559 } else { | |
560 toggleFlag("vmir"); | |
561 } | |
562 setParameter("mo", getAllFlags()); | |
563 display(); | |
564 } | |
565 | |
566 function gotoPage(gopage, keep) { | |
567 // goto given page nr (+/-: relative) | |
568 var oldpn = parseInt(getParameter("pn")); | |
569 setParameter("pn", gopage, true); | |
570 var pn = parseInt(getParameter("pn")); | |
571 if (pn < 1) { | |
572 alert("No such page! (Page number too low)"); | |
573 setParameter("pn", oldpn); | |
574 return; | |
575 } | |
576 if (hasParameter("pt")) { | |
577 pt = parseInt(getParameter("pt")) | |
578 if (pn > pt) { | |
579 alert("No such page! (Page number too high)"); | |
580 setParameter("pn", oldpn); | |
581 return; | |
582 } | |
583 } | |
584 if (keep) { | |
585 display(15+32); // all, no mark | |
586 } else { | |
587 display(3+32); // fn, pn, ws, mo + pt | |
588 } | |
589 } | |
590 | |
591 function gotoPageWin() { | |
592 // dialog to ask for new page nr | |
593 var pn = getParameter("pn"); | |
594 var gopage = window.prompt("Go to page", pn); | |
595 if (gopage) { | |
596 gotoPage(gopage); | |
597 } | |
598 } | |
599 | |
600 function setParamWin(param, text, relative) { | |
601 // dialog to ask for new parameter value | |
602 var val = getParameter(param); | |
603 var newval = window.prompt(text, val); | |
604 if (newval) { | |
605 setParameter(param, newval, relative); | |
606 display(); | |
607 } | |
608 } | |
609 | |
610 function showOptions(show) { | |
611 // show or hide option div | |
612 var elem = getElement("dloptions"); | |
613 showElement(elem, show); | |
614 } |