comparison client/digitallibrary/greyskin/dllib.js @ 425:ab2557f079fc

added showArrows() function (navigation arrows overlay) added canMove() function () pulled global vars out of init functions
author hertzhaft
date Thu, 22 Dec 2005 11:46:22 +0100
parents e2bc7587aee1
children fc5b8cade32f
comparison
equal deleted inserted replaced
424:de930d030a53 425:ab2557f079fc
24 24
25 */ 25 */
26 digilibVersion = "Digilib NG"; 26 digilibVersion = "Digilib NG";
27 dllibVersion = "2.0"; 27 dllibVersion = "2.0";
28 isDigilibInitialized = false; // gets set to true in dl_param_init 28 isDigilibInitialized = false; // gets set to true in dl_param_init
29 reloadPage = true; // reload the page when parameters are changed 29 reloadPage = true; // reload the page when parameters are changed, otherwise update only "src" attribute of scaler img
30 // (false: update only "src" attribute of scaler img) 30
31 // global variables
32 dlTrafo = new Transform();
33 dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0);
34 dlArea = null;
35 dlMarks = null;
36 dlFlags = null;
37
38 // global elements
39 elemScaler = null;
40 picElem = null;
41
31 42
32 // flags for parameter sets 43 // flags for parameter sets
33 PARAM_FILE = 1; 44 PARAM_FILE = 1;
34 PARAM_MODE = 2; 45 PARAM_MODE = 2;
35 PARAM_SIZE = 4; 46 PARAM_SIZE = 4;
301 312
302 function dl_param_init() { 313 function dl_param_init() {
303 // initialisation before onload 314 // initialisation before onload
304 if (!baseLibVersion) alert("ERROR: baselib.js not loaded!"); 315 if (!baseLibVersion) alert("ERROR: baselib.js not loaded!");
305 if (isDigilibInitialized) return false; // dl_param_init was already run 316 if (isDigilibInitialized) return false; // dl_param_init was already run
306 dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0);
307 dlTrafo = new Transform();
308 // dlArea = new Rectangle(0.0, 0.0, 1.0, 1.0); // overwritten by parseAllParameters() below 317 // dlArea = new Rectangle(0.0, 0.0, 1.0, 1.0); // overwritten by parseAllParameters() below
309 // dlMarks = new Array(); // dito 318 // dlMarks = new Array(); // dito
310 // dlFlags = new Object(); // dito 319 // dlFlags = new Object(); // dito
311 elemScaler = null; // ?
312 picElem = null; // ?
313 // parse parameters 320 // parse parameters
314 parseAllParameters(); 321 parseAllParameters();
315 isDigilibInitialized = true; 322 isDigilibInitialized = true;
316 return true; 323 return true;
317 } 324 }
384 dlTrafo = parseTrafo(picElem); 391 dlTrafo = parseTrafo(picElem);
385 // debugProps(dlArea, "dlArea"); 392 // debugProps(dlArea, "dlArea");
386 for (var i = 0; i < dlMarks.length; i++) { 393 for (var i = 0; i < dlMarks.length; i++) {
387 var div = document.getElementById("mark" + i) || createMarkDiv(i); 394 var div = document.getElementById("mark" + i) || createMarkDiv(i);
388 var mark = dlMarks[i]; 395 var mark = dlMarks[i];
389 debugProps(mark, "mark"); 396 // debugProps(mark, "mark");
390 if (dlArea.containsPosition(mark)) { 397 if (dlArea.containsPosition(mark)) {
391 var mpos = dlTrafo.transform(mark); // FIX ME: transform does not change anything 398 var mpos = dlTrafo.transform(mark); // FIX ME: transform does not change anything
392 debugProps(mark, "mpos"); 399 // debugProps(mark, "mpos");
393 // suboptimal to place -5 pixels and not half size of mark-image 400 // suboptimal to place -5 pixels and not half size of mark-image
394 // better not hide the marked spot (MR) 401 // better not hide the marked spot (MR)
395 // mpos.x = mpos.x -5; 402 // mpos.x = mpos.x -5;
396 // mpos.y = mpos.y -5; 403 // mpos.y = mpos.y -5;
397 moveElement(div, mpos); 404 moveElement(div, mpos);
554 } 561 }
555 window.focus(); 562 window.focus();
556 563
557 function moveCenterEvent(evt) { 564 function moveCenterEvent(evt) {
558 // move to handler 565 // move to handler
566 var pt = dlTrafo.invtransform(evtPosition(evt));
567 var newarea = new Rectangle(
568 pt.x - 0.5 * dlArea.width,
569 pt.y - 0.5 * dlArea.height,
570 dlArea.width,
571 dlArea.height
572 );
573 newarea.stayInside(dlMaxArea);
574 // newarea = dlMaxArea.fit(newarea);
575 // debugProps(newarea, "newarea");
576 // debugProps(dlArea, "dlArea");
577 if (newarea.equals(dlArea)) return; // keep event handler
559 unregisterEvent("mousedown", elemScaler, moveCenterEvent); 578 unregisterEvent("mousedown", elemScaler, moveCenterEvent);
560 var pt = dlTrafo.invtransform(evtPosition(evt));
561 var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height);
562 newarea = dlMaxArea.fit(newarea);
563 // set parameters 579 // set parameters
564 setParamFromArea(newarea); 580 setParamFromArea(newarea);
565 parseArea(); 581 parseArea();
566 display(); 582 display();
567 } 583 }
574 if (!area) area = dlArea; 590 if (!area) area = dlArea;
575 return ((area.width == 1.0) && (area.height == 1.0)); 591 return ((area.width == 1.0) && (area.height == 1.0));
576 } 592 }
577 593
578 function canMove(movx, movy) { 594 function canMove(movx, movy) {
579 if (isFullArea) return false; 595 if (isFullArea()) return false;
596 // debugProps(dlArea);
580 return ((movx < 0) && (dlArea.x > 0)) 597 return ((movx < 0) && (dlArea.x > 0))
581 || ((movy < 0) && (dlArea.y > 0)) 598 || ((movy < 0) && (dlArea.y > 0))
582 || ((movx > 0) && (dlArea.x + dlArea.width < 1.0)) 599 || ((movx > 0) && (dlArea.x + dlArea.width < 1.0))
583 || ((movy > 0) && (dlArea.y + dlArea.height < 1.0)) 600 || ((movy > 0) && (dlArea.y + dlArea.height < 1.0))
584 } 601 }
585 602
586 function moveBy(movx, movy) { 603 function moveBy(movx, movy) {
587 // move visible area by movx and movy (in units of ww, wh) 604 // move visible area by movx and movy (in units of ww, wh)
588 if (isFullArea) return; 605 if (!canMove(movx, movy)) return; // nothing to do
589 // nothing to do
590 var newarea = dlArea.copy(); 606 var newarea = dlArea.copy();
591 newarea.x += parseFloat(movx)*dlArea.width; 607 newarea.x += parseFloat(movx)*dlArea.width;
592 newarea.y += parseFloat(movy)*dlArea.height; 608 newarea.y += parseFloat(movy)*dlArea.height;
593 newarea = dlMaxArea.fit(newarea); 609 newarea = dlMaxArea.fit(newarea);
594 // set parameters 610 // set parameters
597 display(); 613 display();
598 } 614 }
599 615
600 function getRef(baseURL) { 616 function getRef(baseURL) {
601 // returns a reference to the current digilib set 617 // returns a reference to the current digilib set
602 if (!baseUrl) baseUrl 618 if (!baseUrl) baseUrl
603 = location.protocol 619 = location.protocol
604 + "//" 620 + "//"
605 + location.host 621 + location.host
606 + location.pathname; 622 + location.pathname;
607 var hyperlinkRef = baseUrl; 623 var hyperlinkRef = baseUrl;
608 var params = getAllParameters(PARAM_ALL & ~(PARAM_DPI | PARAM_PAGES)); // all without ddpi, pt 624 var params = getAllParameters(PARAM_ALL & ~(PARAM_DPI | PARAM_PAGES)); // all without ddpi, pt
609 if (params.length > 0) hyperlinkRef += "?" + params; 625 if (params.length > 0) hyperlinkRef += "?" + params;
610 return hyperlinkRef; 626 return hyperlinkRef;
611 } 627 }
641 if (newq) setQuality(newq); 657 if (newq) setQuality(newq);
642 } 658 }
643 659
644 function mirror(dir) { 660 function mirror(dir) {
645 // mirror the image horizontally or vertically 661 // mirror the image horizontally or vertically
646 if (dir == "h") { 662 toggleFlag(dir == "h"
647 toggleFlag("hmir"); 663 ? "hmir"
648 } else { 664 : "vmir"
649 toggleFlag("vmir"); 665 );
650 }
651 setParameter("mo", getAllFlags()); 666 setParameter("mo", getAllFlags());
652 display(); 667 display();
653 } 668 }
654 669
655 function gotoPage(gopage, keep) { 670 function gotoPage(gopage, keep) {
803 display(); 818 display();
804 return stopEvent(evt); 819 return stopEvent(evt);
805 } 820 }
806 } 821 }
807 822
808 function showArrows() { 823 function showArrow(name, rect, show) {
809 if (defined(picElem.complete) && !picElem.complete && !browserType.isN4 ) { 824 var arrow = getElement(name);
810 setTimeout("showArrows()", 100); 825 moveElement(arrow, rect);
811 return; 826 showElement(arrow, show);
812 } 827 }
813 var arrow, pos, r; 828
814 r = getElementRect(picElem); 829 function showArrows() {
815 // up 830 if (defined(picElem.complete) && !picElem.complete && !browserType.isN4 ) {
816 arrow = getElement("up"); 831 setTimeout("showArrows()", 100);
817 pos = r.copy(); 832 return;
818 pos.height = ARROW_WIDTH; 833 }
819 moveElement(arrow, pos); 834 var r = getElementRect(picElem);
820 showElement(arrow, true); 835 showArrow('up',
821 // down 836 new Rectangle(r.x, r.y, r.width, ARROW_WIDTH),
822 arrow = getElement("down"); 837 canMove(0, -1)
823 pos = r.copy(); 838 );
824 pos.y = pos.y + pos.height - ARROW_WIDTH; 839 showArrow('down',
825 pos.height = ARROW_WIDTH; 840 new Rectangle(r.x, r.y + r.height - ARROW_WIDTH, r.width, ARROW_WIDTH),
826 debugProps(pos); 841 canMove(0, 1)
827 moveElement(arrow, pos); 842 );
828 showElement(arrow, true); 843 showArrow('left',
829 // left 844 new Rectangle(r.x, r.y, ARROW_WIDTH, r.height),
830 arrow = getElement("left"); 845 canMove(-1, 0)
831 pos = r.copy(); 846 );
832 pos.width = ARROW_WIDTH; 847 showArrow('right',
833 debugProps(pos); 848 new Rectangle(r.x + r.width - ARROW_WIDTH, r.y, ARROW_WIDTH, r.height),
834 moveElement(arrow, pos); 849 canMove(1, 0)
835 showElement(arrow, true); 850 );
836 // right 851 }
837 arrow = getElement("right"); 852
838 pos = r.copy();
839 pos.x = pos.x + pos.width - ARROW_WIDTH;
840 pos.width = ARROW_WIDTH;
841 debugProps(pos);
842 moveElement(arrow, pos);
843 showElement(arrow, true);
844 }
845