Mercurial > hg > digilib-old
comparison client/digitallibrary/jquery/jquery.digilib.js @ 713:c1fa722c570e jquery
more cosmetics: added options to validate with http://www.jslint.com
still doesn't fully validate because of "== null" and if without block.
removed unnecessary semicolons after if and for.
author | robcast |
---|---|
date | Sun, 30 Jan 2011 17:58:56 +0100 |
parents | eab17859be79 |
children | 667a316edb89 |
comparison
equal
deleted
inserted
replaced
711:eab17859be79 | 713:c1fa722c570e |
---|---|
1 /* | 1 /* Copyright (c) 2011 Martin Raspe, Robert Casties |
2 | |
3 This program is free software: you can redistribute it and/or modify | |
4 it under the terms of the GNU Lesser General Public License as published by | |
5 the Free Software Foundation, either version 2 of the License, or | |
6 (at your option) any later version. | |
7 | |
8 This program is distributed in the hope that it will be useful, | |
9 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 GNU Lesser General Public License for more details. | |
12 | |
13 You should have received a copy of the GNU Lesser General Public License | |
14 along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | |
16 Authors: | |
17 Martin Raspe, Robert Casties, 11.1.2011 | |
18 */ | |
19 | |
20 /** | |
2 * digilib jQuery plugin | 21 * digilib jQuery plugin |
3 * | 22 * |
4 */ | 23 */ |
24 | |
25 /*jslint browser: true, debug: true, forin: true */ | |
5 | 26 |
6 // fallback for console.log calls | 27 // fallback for console.log calls |
7 if (typeof(console) === 'undefined') { | 28 if (typeof(console) === 'undefined') { |
8 var console = { | 29 var console = { |
9 log : function(){}, | 30 log : function(){}, |
10 debug : function(){}, | 31 debug : function(){}, |
11 error : function(){} | 32 error : function(){} |
12 }; | 33 }; |
13 var customConsole = true; | 34 var customConsole = true; |
14 }; | 35 } |
15 | 36 |
16 (function($) { | 37 (function($) { |
17 var buttons = { | 38 var buttons = { |
18 reference : { | 39 reference : { |
19 onclick : "reference", | 40 onclick : "reference", |
263 // merge query parameters | 284 // merge query parameters |
264 if (isFullscreen) { | 285 if (isFullscreen) { |
265 params = queryParams; | 286 params = queryParams; |
266 } else { | 287 } else { |
267 params = parseImgParams($elem); | 288 params = parseImgParams($elem); |
268 }; | 289 } |
269 // store $(this) element in the settings | 290 // store $(this) element in the settings |
270 elemSettings = $.extend({}, settings, params); | 291 elemSettings = $.extend({}, settings, params); |
271 data = { | 292 data = { |
272 $elem : $elem, | 293 $elem : $elem, |
273 settings : elemSettings, | 294 settings : elemSettings, |
280 // create HTML structure for scaler | 301 // create HTML structure for scaler |
281 setupScalerDiv(data); | 302 setupScalerDiv(data); |
282 // add buttons | 303 // add buttons |
283 for (var i = 0; i < elemSettings.visibleButtonSets; ++i) { | 304 for (var i = 0; i < elemSettings.visibleButtonSets; ++i) { |
284 showButtons(data, true, i); | 305 showButtons(data, true, i); |
285 }; | 306 } |
286 // bird's eye view creation | 307 // bird's eye view creation |
287 if (elemSettings.isBirdDivVisible) { | 308 if (elemSettings.isBirdDivVisible) { |
288 setupBirdDiv(data); | 309 setupBirdDiv(data); |
289 }; | 310 } |
290 // about window creation - TODO: could be deferred? restrict to only one item? | 311 // about window creation - TODO: could be deferred? restrict to only one item? |
291 setupAboutDiv(data); | 312 setupAboutDiv(data); |
292 // TODO: the actual moving code | 313 // TODO: the actual moving code |
293 setupZoomDrag(data); | 314 setupZoomDrag(data); |
294 }); | 315 }); |
473 resetData(data); | 494 resetData(data); |
474 // delete all digilib parameters | 495 // delete all digilib parameters |
475 for (var i = 0; i < paramNames.length; i++) { | 496 for (var i = 0; i < paramNames.length; i++) { |
476 var paramName = paramNames[i]; | 497 var paramName = paramNames[i]; |
477 delete settings[paramName]; | 498 delete settings[paramName]; |
478 }; | 499 } |
479 // fullscreen: restore only fn/pn parameters | 500 // fullscreen: restore only fn/pn parameters |
480 if (settings.interactionMode === 'fullscreen') { | 501 if (settings.interactionMode === 'fullscreen') { |
481 settings['fn'] = params.fn || ''; // no default defined | 502 settings.fn = params.fn || ''; // no default defined |
482 settings['pn'] = params.pn || defaults.pn; | 503 settings.pn = params.pn || defaults.pn; |
483 // embedded: restore original parameters | 504 // embedded: restore original parameters |
484 } else { | 505 } else { |
485 $.extend(settings, params); | 506 $.extend(settings, params); |
486 }; | 507 } |
487 // TODO: should we really reset all user preferences here? | 508 // TODO: should we really reset all user preferences here? |
488 settings.isBirdDivVisible = false; | 509 settings.isBirdDivVisible = false; |
489 settings.visibleButtonSets = 1; | 510 settings.visibleButtonSets = 1; |
490 redisplay(data); | 511 redisplay(data); |
491 }, | 512 }, |
496 var url; | 517 var url; |
497 if (settings.interactionMode === 'fullscreen') { | 518 if (settings.interactionMode === 'fullscreen') { |
498 url = getDigilibUrl(data); | 519 url = getDigilibUrl(data); |
499 } else { | 520 } else { |
500 url = getScalerUrl(data); | 521 url = getScalerUrl(data); |
501 }; | 522 } |
502 if (noprompt == null) { | 523 if (noprompt == null) { |
503 window.prompt("URL reference to the current view", url); | 524 window.prompt("URL reference to the current view", url); |
504 } | 525 } |
505 return url; | 526 return url; |
506 }, | 527 }, |
575 // returns URL and query string for Scaler | 596 // returns URL and query string for Scaler |
576 var getScalerUrl = function (data) { | 597 var getScalerUrl = function (data) { |
577 var settings = data.settings; | 598 var settings = data.settings; |
578 if (settings.scalerBaseUrl == null) { | 599 if (settings.scalerBaseUrl == null) { |
579 alert("ERROR: URL of digilib Scaler servlet missing!"); | 600 alert("ERROR: URL of digilib Scaler servlet missing!"); |
580 }; | 601 } |
581 packParams(data); | 602 packParams(data); |
582 var keys = settings.scalerParamNames; | 603 var keys = settings.scalerParamNames; |
583 var queryString = getParamString(settings, keys, defaults); | 604 var queryString = getParamString(settings, keys, defaults); |
584 var url = settings.scalerBaseUrl + '?' + queryString; | 605 var url = settings.scalerBaseUrl + '?' + queryString; |
585 return url; | 606 return url; |
609 var mk = settings.mk; | 630 var mk = settings.mk; |
610 if (mk.indexOf(";") >= 0) { | 631 if (mk.indexOf(";") >= 0) { |
611 var pa = mk.split(";"); // old format with ";" | 632 var pa = mk.split(";"); // old format with ";" |
612 } else { | 633 } else { |
613 var pa = mk.split(","); // new format | 634 var pa = mk.split(","); // new format |
614 }; | 635 } |
615 for (var i = 0; i < pa.length ; i++) { | 636 for (var i = 0; i < pa.length ; i++) { |
616 var pos = pa[i].split("/"); | 637 var pos = pa[i].split("/"); |
617 if (pos.length > 1) { | 638 if (pos.length > 1) { |
618 marks.push(geom.position(pos[0], pos[1])); | 639 marks.push(geom.position(pos[0], pos[1])); |
619 }; | 640 } |
620 }; | 641 } |
621 }; | 642 } |
622 data.marks = marks; | 643 data.marks = marks; |
623 // mo (Scaler flags) | 644 // mo (Scaler flags) |
624 var flags = {}; | 645 var flags = {}; |
625 if (settings.mo) { | 646 if (settings.mo) { |
626 var pa = settings.mo.split(","); | 647 var pa = settings.mo.split(","); |
627 for (var i = 0; i < pa.length ; i++) { | 648 for (var i = 0; i < pa.length ; i++) { |
628 flags[pa[i]] = pa[i]; | 649 flags[pa[i]] = pa[i]; |
629 }; | 650 } |
630 }; | 651 } |
631 data.scalerFlags = flags; | 652 data.scalerFlags = flags; |
632 retrieveOptionsCookie(data); | 653 retrieveOptionsCookie(data); |
633 }; | 654 }; |
634 | 655 |
635 // put objects back into parameters | 656 // put objects back into parameters |
639 if (data.zoomArea) { | 660 if (data.zoomArea) { |
640 settings.wx = cropFloat(data.zoomArea.x); | 661 settings.wx = cropFloat(data.zoomArea.x); |
641 settings.wy = cropFloat(data.zoomArea.y); | 662 settings.wy = cropFloat(data.zoomArea.y); |
642 settings.ww = cropFloat(data.zoomArea.width); | 663 settings.ww = cropFloat(data.zoomArea.width); |
643 settings.wh = cropFloat(data.zoomArea.height); | 664 settings.wh = cropFloat(data.zoomArea.height); |
644 }; | 665 } |
645 // marks | 666 // marks |
646 if (data.marks) { | 667 if (data.marks) { |
647 settings.mk = ''; | 668 settings.mk = ''; |
648 for (var i = 0; i < data.marks.length; i++) { | 669 for (var i = 0; i < data.marks.length; i++) { |
649 if (i) { | 670 if (i) { |
650 settings.mk += ','; | 671 settings.mk += ','; |
651 }; | 672 } |
652 settings.mk | 673 settings.mk += cropFloat(data.marks[i].x).toString() + |
653 += cropFloat(data.marks[i].x).toString() + '/' | 674 '/' + cropFloat(data.marks[i].y).toString(); |
654 + cropFloat(data.marks[i].y).toString(); | 675 } |
655 }; | 676 } |
656 }; | |
657 // Scaler flags | 677 // Scaler flags |
658 if (data.scalerFlags) { | 678 if (data.scalerFlags) { |
659 var mo = ''; | 679 var mo = ''; |
660 for (var f in data.scalerFlags) { | 680 for (var f in data.scalerFlags) { |
661 if (mo) { | 681 if (mo) { |
690 data.dlOpts.buttons = settings.visibleButtonSets; | 710 data.dlOpts.buttons = settings.visibleButtonSets; |
691 var clop = ''; | 711 var clop = ''; |
692 for (var o in data.dlOpts) { | 712 for (var o in data.dlOpts) { |
693 if (clop) { | 713 if (clop) { |
694 clop += '&'; | 714 clop += '&'; |
695 }; | 715 } |
696 clop += o + '=' + data.dlOpts[o]; | 716 clop += o + '=' + data.dlOpts[o]; |
697 }; | 717 } |
698 if (jQuery.cookie) { | 718 if (jQuery.cookie) { |
699 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn; | 719 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn; |
700 console.debug("set cookie=", ck, " value=", clop); | 720 console.debug("set cookie=", ck, " value=", clop); |
701 jQuery.cookie(ck, clop); | 721 jQuery.cookie(ck, clop); |
702 }; | 722 } |
703 }; | 723 } |
704 }; | 724 }; |
705 | 725 |
706 var retrieveOptionsCookie = function (data) { | 726 var retrieveOptionsCookie = function (data) { |
707 // clop (digilib options) | 727 // clop (digilib options) |
708 var opts = {}; | 728 var opts = {}; |
719 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn; | 739 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn; |
720 var cp = jQuery.cookie(ck); | 740 var cp = jQuery.cookie(ck); |
721 console.debug("get cookie=", ck, " value=", cp); | 741 console.debug("get cookie=", ck, " value=", cp); |
722 // in query string format | 742 // in query string format |
723 opts = parseQueryString(cp); | 743 opts = parseQueryString(cp); |
724 }; | 744 } |
725 data.dlOpts = opts; | 745 data.dlOpts = opts; |
726 // birdview option | 746 // birdview option |
727 if (opts.birdview != null) { | 747 if (opts.birdview != null) { |
728 settings.isBirdDivVisible = opts.birdview === '1'; | 748 settings.isBirdDivVisible = opts.birdview === '1'; |
729 }; | 749 } |
730 // visible button sets | 750 // visible button sets |
731 if (opts.buttons != null) { | 751 if (opts.buttons != null) { |
732 settings.visibleButtonSets = opts.buttons; | 752 settings.visibleButtonSets = opts.buttons; |
733 }; | 753 } |
734 }; | 754 }; |
735 | 755 |
736 // clear digilib data for reset | 756 // clear digilib data for reset |
737 var resetData = function (data) { | 757 var resetData = function (data) { |
758 // TODO: we should reset instead of delete | |
738 if (data.zoomArea) delete data.zoomArea; | 759 if (data.zoomArea) delete data.zoomArea; |
739 if (data.marks) delete data.marks; | 760 if (data.marks) delete data.marks; |
740 if (data.scalerFlags) delete data.scalerFlags; | 761 if (data.scalerFlags) delete data.scalerFlags; |
741 }; | 762 }; |
742 | 763 |
747 // update location.href (browser URL) in fullscreen mode | 768 // update location.href (browser URL) in fullscreen mode |
748 var url = getDigilibUrl(data); | 769 var url = getDigilibUrl(data); |
749 var history = window.history; | 770 var history = window.history; |
750 if (typeof(history.pushState) === 'function') { | 771 if (typeof(history.pushState) === 'function') { |
751 console.debug("we could modify history, but we don't..."); | 772 console.debug("we could modify history, but we don't..."); |
752 }; | 773 } |
753 window.location = url; | 774 window.location = url; |
754 } else { | 775 } else { |
755 // embedded mode -- just change img src | 776 // embedded mode -- just change img src |
756 var url = getScalerUrl(data); | 777 var url = getScalerUrl(data); |
757 data.$img.attr('src', url); | 778 data.$img.attr('src', url); |
758 }; | 779 } |
759 }; | 780 }; |
760 | 781 |
761 // returns maximum size for scaler img in fullscreen mode | 782 // returns maximum size for scaler img in fullscreen mode |
762 var getFullscreenImgSize = function($elem) { | 783 var getFullscreenImgSize = function($elem) { |
763 var $win = $(window); | 784 var $win = $(window); |
774 var $img, scalerUrl; | 795 var $img, scalerUrl; |
775 // fullscreen | 796 // fullscreen |
776 if (settings.interactionMode === 'fullscreen') { | 797 if (settings.interactionMode === 'fullscreen') { |
777 var imgSize = getFullscreenImgSize($elem); | 798 var imgSize = getFullscreenImgSize($elem); |
778 // fitwidth/height omits destination height/width | 799 // fitwidth/height omits destination height/width |
779 if (data.dlOpts['fitheight'] == null) { | 800 if (data.dlOpts.fitheight == null) { |
780 settings.dw = imgSize.width; | 801 settings.dw = imgSize.width; |
781 }; | 802 } |
782 if (data.dlOpts['fitwidth'] == null) { | 803 if (data.dlOpts.fitwidth == null) { |
783 settings.dh = imgSize.height; | 804 settings.dh = imgSize.height; |
784 }; | 805 } |
785 $img = $('<img/>'); | 806 $img = $('<img/>'); |
786 scalerUrl = getScalerUrl(data); | 807 scalerUrl = getScalerUrl(data); |
787 // embedded mode -- try to keep img tag | 808 // embedded mode -- try to keep img tag |
788 } else { | 809 } else { |
789 $img = $elem.find('img'); | 810 $img = $elem.find('img'); |
792 scalerUrl = $img.attr('src'); | 813 scalerUrl = $img.attr('src'); |
793 $img.detach(); | 814 $img.detach(); |
794 } else { | 815 } else { |
795 $img = $('<img/>'); | 816 $img = $('<img/>'); |
796 scalerUrl = getScalerUrl(data); | 817 scalerUrl = getScalerUrl(data); |
797 }; | 818 } |
798 } | 819 } |
799 // create new html | 820 // create new html |
800 $elem.empty(); // TODO: should we keep stuff for customization? | 821 $elem.empty(); // TODO: should we keep stuff for customization? |
801 var $scaler = $('<div class="scaler"/>'); | 822 var $scaler = $('<div class="scaler"/>'); |
802 $elem.append($scaler); | 823 $elem.append($scaler); |
901 data.$birdImg = $birdImg; | 922 data.$birdImg = $birdImg; |
902 $birdImg.load(birdImgLoadedHandler(data)); | 923 $birdImg.load(birdImgLoadedHandler(data)); |
903 $birdImg.attr('src', birdUrl); | 924 $birdImg.attr('src', birdUrl); |
904 if (data.settings.isBirdDivVisible) { | 925 if (data.settings.isBirdDivVisible) { |
905 $birdDiv.show(); | 926 $birdDiv.show(); |
906 }; | 927 } |
907 birdZoom(data); | 928 birdZoom(data); |
908 }; | 929 }; |
909 | 930 |
910 // creates HTML structure for the about view in elem | 931 // creates HTML structure for the about view in elem |
911 var setupAboutDiv = function (data) { | 932 var setupAboutDiv = function (data) { |
938 // toggle visibility | 959 // toggle visibility |
939 isVisible = !isVisible; | 960 isVisible = !isVisible; |
940 } else { | 961 } else { |
941 // set visibility | 962 // set visibility |
942 isVisible = show; | 963 isVisible = show; |
943 }; | 964 } |
944 if (isVisible) { | 965 if (isVisible) { |
945 $div.fadeIn(); | 966 $div.fadeIn(); |
946 } else { | 967 } else { |
947 $div.fadeOut(); | 968 $div.fadeOut(); |
948 }; | 969 } |
949 return isVisible; | 970 return isVisible; |
950 }; | 971 }; |
951 | 972 |
952 // display more (or less) button sets | 973 // display more (or less) button sets |
953 var showButtons = function (data, more, setIdx, animated) { | 974 var showButtons = function (data, more, setIdx, animated) { |
959 if (data.$buttonSets && data.$buttonSets[setIdx]) { | 980 if (data.$buttonSets && data.$buttonSets[setIdx]) { |
960 // set exists | 981 // set exists |
961 $set = data.$buttonSets[setIdx]; | 982 $set = data.$buttonSets[setIdx]; |
962 } else { | 983 } else { |
963 $set = createButtons(data, setIdx); | 984 $set = createButtons(data, setIdx); |
964 }; | 985 } |
965 if ($set == null) return false; | 986 if ($set == null) return false; |
966 var btnWidth = $set.width(); | 987 var btnWidth = $set.width(); |
967 // move remaining sets left and show new set | 988 // move remaining sets left and show new set |
968 if ($otherSets.length > 0) { | 989 if ($otherSets.length > 0) { |
969 $otherSets.animate({right : '+='+btnWidth+'px'}, atime, | 990 $otherSets.animate({right : '+='+btnWidth+'px'}, atime, |
998 // move [0.5,0.5] to center | 1019 // move [0.5,0.5] to center |
999 trafo.concat(trafo.getTranslation(geom.position(-0.5, -0.5))); | 1020 trafo.concat(trafo.getTranslation(geom.position(-0.5, -0.5))); |
1000 if (hmir) { | 1021 if (hmir) { |
1001 // mirror about center | 1022 // mirror about center |
1002 trafo.concat(trafo.getMirror('y')); | 1023 trafo.concat(trafo.getMirror('y')); |
1003 }; | 1024 } |
1004 if (vmir) { | 1025 if (vmir) { |
1005 // mirror about center | 1026 // mirror about center |
1006 trafo.concat(trafo.getMirror('x')); | 1027 trafo.concat(trafo.getMirror('x')); |
1007 }; | 1028 } |
1008 if (rot) { | 1029 if (rot) { |
1009 // rotate around center | 1030 // rotate around center |
1010 trafo.concat(trafo.getRotation(parseFloat(rot))); | 1031 trafo.concat(trafo.getRotation(parseFloat(rot))); |
1011 }; | 1032 } |
1012 // move back | 1033 // move back |
1013 trafo.concat(trafo.getTranslation(geom.position(0.5, 0.5))); | 1034 trafo.concat(trafo.getTranslation(geom.position(0.5, 0.5))); |
1014 }; | 1035 } |
1015 // scale to screen position and size | 1036 // scale to screen position and size |
1016 trafo.concat(trafo.getScale(picrect)); | 1037 trafo.concat(trafo.getScale(picrect)); |
1017 trafo.concat(trafo.getTranslation(picrect)); | 1038 trafo.concat(trafo.getTranslation(picrect)); |
1018 return trafo; | 1039 return trafo; |
1019 }; | 1040 }; |
1032 // TODO: digilib.showArrows(); // show arrow overlays for zoom navigation | 1053 // TODO: digilib.showArrows(); // show arrow overlays for zoom navigation |
1033 var $birdImg = data.$birdImg; | 1054 var $birdImg = data.$birdImg; |
1034 // should the birdview adapt to mirror or rotation? decision: No. :-) | 1055 // should the birdview adapt to mirror or rotation? decision: No. :-) |
1035 if ($birdImg) { | 1056 if ($birdImg) { |
1036 $birdImg.triggerHandler('load'); | 1057 $birdImg.triggerHandler('load'); |
1037 }; | 1058 } |
1038 }; | 1059 }; |
1039 }; | 1060 }; |
1040 | 1061 |
1041 // returns function for load event of bird's eye view img | 1062 // returns function for load event of bird's eye view img |
1042 var birdImgLoadedHandler = function (data) { | 1063 var birdImgLoadedHandler = function (data) { |
1063 // create mark | 1084 // create mark |
1064 var html = '<div class="mark">'+(i+1)+'</div>'; | 1085 var html = '<div class="mark">'+(i+1)+'</div>'; |
1065 var $mark = $(html); | 1086 var $mark = $(html); |
1066 $elem.append($mark); | 1087 $elem.append($mark); |
1067 $mark.offset({left : mpos.x, top : mpos.y}); | 1088 $mark.offset({left : mpos.x, top : mpos.y}); |
1068 }; | 1089 } |
1069 }; | 1090 } |
1070 }; | 1091 }; |
1071 | 1092 |
1072 // show zoom area indicator on bird's eye view | 1093 // show zoom area indicator on bird's eye view |
1073 var renderbirdZoom = function (data) { | 1094 var renderbirdZoom = function (data) { |
1074 var $birdZoom = data.$birdZoom; | 1095 var $birdZoom = data.$birdZoom; |
1087 $birdZoom.width(coords.width); | 1108 $birdZoom.width(coords.width); |
1088 $birdZoom.height(coords.height); | 1109 $birdZoom.height(coords.height); |
1089 $birdZoom.offset(coords); | 1110 $birdZoom.offset(coords); |
1090 $birdZoom.show(); | 1111 $birdZoom.show(); |
1091 return; | 1112 return; |
1092 }; | 1113 } |
1093 // nice animation for embedded mode :-) | 1114 // nice animation for embedded mode :-) |
1094 var makeCompleteFunction = function($birdZoom, normalSize) { | 1115 var makeCompleteFunction = function($birdZoom, normalSize) { |
1095 return function() { | 1116 return function() { |
1096 if (normalSize) $birdZoom.hide(); | 1117 if (normalSize) $birdZoom.hide(); |
1097 }; | 1118 }; |
1205 // move birdZoom div, keeping size | 1226 // move birdZoom div, keeping size |
1206 newRect = geom.rectangle( | 1227 newRect = geom.rectangle( |
1207 birdZoomRect.x + dx, | 1228 birdZoomRect.x + dx, |
1208 birdZoomRect.y + dy, | 1229 birdZoomRect.y + dy, |
1209 birdZoomRect.width, | 1230 birdZoomRect.width, |
1210 birdZoomRect.height | 1231 birdZoomRect.height); |
1211 ); | |
1212 // stay within birdimage | 1232 // stay within birdimage |
1213 newRect.stayInside(birdImgRect); | 1233 newRect.stayInside(birdImgRect); |
1214 $birdZoom.offset({left : newRect.x, top : newRect.y}); | 1234 $birdZoom.offset({left : newRect.x, top : newRect.y}); |
1215 // $birdZoom.show(); | 1235 // $birdZoom.show(); |
1216 return false; | 1236 return false; |
1224 $birdZoom.unbind("mousemove.digilib", birdZoomMove); | 1244 $birdZoom.unbind("mousemove.digilib", birdZoomMove); |
1225 $birdZoom.unbind("mouseup.digilib", birdZoomEndDrag); | 1245 $birdZoom.unbind("mouseup.digilib", birdZoomEndDrag); |
1226 if (newRect == null) { // no movement happened | 1246 if (newRect == null) { // no movement happened |
1227 startPos = birdZoomRect.getCenter(); | 1247 startPos = birdZoomRect.getCenter(); |
1228 birdZoomMove(evt); // set center to click position | 1248 birdZoomMove(evt); // set center to click position |
1229 }; | 1249 } |
1230 if (data.zoomArea) { | 1250 if (data.zoomArea) { |
1231 // should always be true | 1251 // should always be true |
1232 var x = cropFloat((newRect.x - birdImgRect.x + 2) / birdImgRect.width); | 1252 var x = cropFloat((newRect.x - birdImgRect.x + 2) / birdImgRect.width); |
1233 var y = cropFloat((newRect.y - birdImgRect.y + 2) / birdImgRect.height); | 1253 var y = cropFloat((newRect.y - birdImgRect.y + 2) / birdImgRect.height); |
1234 data.zoomArea.x = x; | 1254 data.zoomArea.x = x; |
1235 data.zoomArea.y = y; | 1255 data.zoomArea.y = y; |
1236 }; | 1256 } |
1237 settings.ws = 1; // zoomed is always fit | 1257 settings.ws = 1; // zoomed is always fit |
1238 redisplay(data); | 1258 redisplay(data); |
1239 return false; | 1259 return false; |
1240 }; | 1260 }; |
1241 | 1261 |
1265 var $img = data.$img; | 1285 var $img = data.$img; |
1266 var $bg = $elem.has('div.bgDrag'); | 1286 var $bg = $elem.has('div.bgDrag'); |
1267 if ($bg.length === 0) { | 1287 if ($bg.length === 0) { |
1268 $bg = $('<div class="bgDrag" style="display:none; position:absolute"/>'); | 1288 $bg = $('<div class="bgDrag" style="display:none; position:absolute"/>'); |
1269 $scaler.before($bg); // set as background | 1289 $scaler.before($bg); // set as background |
1270 }; | 1290 } |
1271 | 1291 |
1272 var dragStart = function (evt) { | 1292 var dragStart = function (evt) { |
1273 // drag the image and load a new detail on mouse up | 1293 // drag the image and load a new detail on mouse up |
1274 // useless if not zoomed | 1294 // useless if not zoomed |
1275 if (isFullArea(data.zoomArea)) return false; | 1295 if (isFullArea(data.zoomArea)) return false; |
1276 if(evt.preventDefault) evt.preventDefault(); // no Firefox drag and drop (NEEDED?) | |
1277 pt1 = geom.position(evt); | 1296 pt1 = geom.position(evt); |
1278 $imgRect = geom.rectangle($img); | 1297 $imgRect = geom.rectangle($img); |
1279 $imgRect.adjustDiv($bg); // set background size | 1298 $imgRect.adjustDiv($bg); // set background size |
1280 // hide the scaler image, show it as background of div instead | 1299 // hide the scaler image, show it as background of div instead |
1281 $bg.css({ | 1300 $bg.css({ |
1286 }); | 1305 }); |
1287 $img.hide(); | 1306 $img.hide(); |
1288 $bg.show(); | 1307 $bg.show(); |
1289 $(document).bind("mousemove.digilib", dragMove); | 1308 $(document).bind("mousemove.digilib", dragMove); |
1290 $(document).bind("mouseup.digilib", dragEnd); | 1309 $(document).bind("mouseup.digilib", dragEnd); |
1291 window.focus(); | 1310 return false; |
1292 }; | 1311 }; |
1293 | 1312 |
1294 var dragMove = function (evt) { | 1313 var dragMove = function (evt) { |
1295 // mousemove handler: drag | 1314 // mousemove handler: drag |
1296 var pos = geom.position(evt); | 1315 var pos = geom.position(evt); |
1297 if(evt.preventDefault) evt.preventDefault(); // no Firefox drag and drop (NEEDED?) | |
1298 dx = pos.x - pt1.x; | 1316 dx = pos.x - pt1.x; |
1299 dy = pos.y - pt1.y; | 1317 dy = pos.y - pt1.y; |
1300 // move the background image to the new position | 1318 // move the background image to the new position |
1301 $bg.css({ | 1319 $bg.css({ |
1302 'background-position' : dx + "px " + dy + "px" | 1320 'background-position' : dx + "px " + dy + "px" |
1310 'cursor' : 'default' | 1328 'cursor' : 'default' |
1311 }); | 1329 }); |
1312 $(document).unbind("mousemove.digilib", dragMove); | 1330 $(document).unbind("mousemove.digilib", dragMove); |
1313 $(document).unbind("mouseup.digilib", dragEnd); | 1331 $(document).unbind("mouseup.digilib", dragEnd); |
1314 // calculate relative offset | 1332 // calculate relative offset |
1315 if (dx == 0 && dy == 0) return false; // no movement | 1333 if (dx === 0 && dy === 0) return false; // no movement |
1316 // reload with scaler image showing the new ausschnitt | 1334 // reload with scaler image showing the new ausschnitt |
1317 // digilib.moveBy(x, y); | 1335 // digilib.moveBy(x, y); |
1318 var pos = geom.position(-dx, -dy); | 1336 var pos = geom.position(-dx, -dy); |
1319 var newPos = data.imgTrafo.invtransform(pos); | 1337 var newPos = data.imgTrafo.invtransform(pos); |
1320 var newArea = data.zoomArea.setPt1(newPos); | 1338 var newArea = data.zoomArea.setPt1(newPos); |
1338 var setQuality = function (data, qual) { | 1356 var setQuality = function (data, qual) { |
1339 var flags = data.scalerFlags; | 1357 var flags = data.scalerFlags; |
1340 // clear flags | 1358 // clear flags |
1341 for (var i = 0; i < 3; ++i) { | 1359 for (var i = 0; i < 3; ++i) { |
1342 delete flags['q'+i]; | 1360 delete flags['q'+i]; |
1343 }; | 1361 } |
1344 flags['q'+qual] = 'q'+qual; | 1362 flags['q'+qual] = 'q'+qual; |
1345 }; | 1363 }; |
1346 | 1364 |
1347 // sets a key to a value (relative values with +/- if relative=true) | 1365 // sets a key to a value (relative values with +/- if relative=true) |
1348 var setNumValue = function(settings, key, value) { | 1366 var setNumValue = function(settings, key, value) { |
1349 if (isNumber(value)) return settings[key] = value; | 1367 if (isNumber(value)) { |
1350 var sign = value.substring(0,1); | 1368 settings[key] = value; |
1369 return value; | |
1370 } | |
1371 var sign = value[0]; | |
1351 if (sign === '+' || sign === '-') { | 1372 if (sign === '+' || sign === '-') { |
1352 if (settings[key] == null) { | 1373 if (settings[key] == null) { |
1353 // this isn't perfect but still... | 1374 // this isn't perfect but still... |
1354 settings[key] = 0; | 1375 settings[key] = 0; |
1355 }; | 1376 } |
1356 settings[key] = parseFloat(settings[key]) + parseFloat(value); | 1377 settings[key] = parseFloat(settings[key]) + parseFloat(value); |
1357 } else { | 1378 } else { |
1358 settings[key] = value; | 1379 settings[key] = value; |
1359 }; | 1380 } |
1360 return settings[key]; | 1381 return settings[key]; |
1361 }; | 1382 }; |
1362 | 1383 |
1363 // auxiliary function (from old dllib.js) | 1384 // auxiliary function (from old dllib.js) |
1364 isFullArea = function(area) { | 1385 isFullArea = function(area) { |
1390 }; | 1411 }; |
1391 }; | 1412 }; |
1392 console.log = logFunction('_log'); | 1413 console.log = logFunction('_log'); |
1393 console.debug = logFunction('_debug'); | 1414 console.debug = logFunction('_debug'); |
1394 console.error = logFunction('_error'); | 1415 console.error = logFunction('_error'); |
1395 }; | 1416 } |
1396 | 1417 |
1397 // hook plugin into jquery | 1418 // hook plugin into jquery |
1398 $.fn.digilib = function(action) { | 1419 $.fn.digilib = function(action) { |
1399 if (actions[action]) { | 1420 if (actions[action]) { |
1400 // call action on this with the remaining arguments (inserting data as first argument) | 1421 // call action on this with the remaining arguments (inserting data as first argument) |
1405 return actions[action].apply(this, args); | 1426 return actions[action].apply(this, args); |
1406 } else if (typeof(action) === 'object' || !action) { | 1427 } else if (typeof(action) === 'object' || !action) { |
1407 // call init on this | 1428 // call init on this |
1408 return actions.init.apply(this, arguments); | 1429 return actions.init.apply(this, arguments); |
1409 } else { | 1430 } else { |
1410 $.error( 'action ' + action + ' does not exist on jQuery.digilib' ); | 1431 $.error('action ' + action + ' does not exist on jQuery.digilib'); |
1411 }; | 1432 } |
1412 }; | 1433 }; |
1413 | 1434 |
1414 })(jQuery); | 1435 })(jQuery); |