Mercurial > hg > digilib-old
comparison client/digitallibrary/jquery/jquery.digilib.js @ 723:123706249227 jquery
improved bird image handling.
still some issues with bird image position in embedded mode.
author | robcast |
---|---|
date | Mon, 31 Jan 2011 16:24:31 +0100 |
parents | 3da6db751448 |
children | c6878e9575fe |
comparison
equal
deleted
inserted
replaced
719:3da6db751448 | 723:123706249227 |
---|---|
307 showButtons(data, true, i); | 307 showButtons(data, true, i); |
308 } | 308 } |
309 // bird's eye view creation | 309 // bird's eye view creation |
310 if (elemSettings.isBirdDivVisible) { | 310 if (elemSettings.isBirdDivVisible) { |
311 setupBirdDiv(data); | 311 setupBirdDiv(data); |
312 data.$birdDiv.show(); | |
312 } | 313 } |
313 // about window creation - TODO: could be deferred? restrict to only one item? | 314 // about window creation - TODO: could be deferred? restrict to only one item? |
314 setupAboutDiv(data); | 315 setupAboutDiv(data); |
315 // TODO: the actual moving code | 316 // TODO: the actual moving code |
316 setupZoomDrag(data); | 317 setupZoomDrag(data); |
337 if (data.$birdDiv == null) { | 338 if (data.$birdDiv == null) { |
338 // no bird div -> create | 339 // no bird div -> create |
339 setupBirdDiv(data); | 340 setupBirdDiv(data); |
340 } | 341 } |
341 data.settings.isBirdDivVisible = showDiv(data.settings.isBirdDivVisible, data.$birdDiv, show); | 342 data.settings.isBirdDivVisible = showDiv(data.settings.isBirdDivVisible, data.$birdDiv, show); |
342 data.$birdImg.triggerHandler('load'); | 343 storeOptions(data); |
344 // data.$birdImg.triggerHandler('load'); // TODO: we shouldn't do that | |
343 }, | 345 }, |
344 | 346 |
345 // goto given page nr (+/-: relative) | 347 // goto given page nr (+/-: relative) |
346 gotoPage : function (data, pageNr) { | 348 gotoPage : function (data, pageNr) { |
347 var settings = data.settings; | 349 var settings = data.settings; |
487 var setIdx = settings.visibleButtonSets; | 489 var setIdx = settings.visibleButtonSets; |
488 if (showButtons(data, true, setIdx, true)) { | 490 if (showButtons(data, true, setIdx, true)) { |
489 settings.visibleButtonSets++; | 491 settings.visibleButtonSets++; |
490 } | 492 } |
491 } | 493 } |
494 // persist setting | |
495 storeOptions(data); | |
492 }, | 496 }, |
493 | 497 |
494 // reset image parameters to defaults | 498 // reset image parameters to defaults |
495 reset : function (data) { | 499 reset : function (data) { |
496 var settings = data.settings; | 500 var settings = data.settings; |
656 for (var i = 0; i < pa.length ; i++) { | 660 for (var i = 0; i < pa.length ; i++) { |
657 flags[pa[i]] = pa[i]; | 661 flags[pa[i]] = pa[i]; |
658 } | 662 } |
659 } | 663 } |
660 data.scalerFlags = flags; | 664 data.scalerFlags = flags; |
661 retrieveOptionsCookie(data); | 665 retrieveOptions(data); |
662 }; | 666 }; |
663 | 667 |
664 // put objects back into parameters | 668 // put objects back into parameters |
665 var packParams = function (data) { | 669 var packParams = function (data) { |
666 var settings = data.settings; | 670 var settings = data.settings; |
692 mo += f; | 696 mo += f; |
693 } | 697 } |
694 settings.mo = mo; | 698 settings.mo = mo; |
695 } | 699 } |
696 // user interface options | 700 // user interface options |
697 storeOptionsCookie(data); | 701 storeOptions(data); |
698 }; | 702 }; |
699 | 703 |
700 var storeOptionsCookie = function (data) { | 704 var storeOptions = function (data) { |
701 // save digilib options in cookie | 705 // save digilib options in cookie |
702 // TODO: in embedded mode this is not called | 706 // TODO: in embedded mode this is not called |
703 /* store in parameter clop | 707 /* store in parameter clop |
704 * if (data.dlOpts) { | 708 * if (data.dlOpts) { |
705 var clop = ''; | 709 var clop = ''; |
729 jQuery.cookie(ck, clop); | 733 jQuery.cookie(ck, clop); |
730 } | 734 } |
731 } | 735 } |
732 }; | 736 }; |
733 | 737 |
734 var retrieveOptionsCookie = function (data) { | 738 var retrieveOptions = function (data) { |
735 // clop (digilib options) | 739 // clop (digilib options) |
736 var opts = {}; | 740 var opts = {}; |
737 var settings = data.settings; | 741 var settings = data.settings; |
738 if (jQuery.cookie) { | 742 if (jQuery.cookie) { |
739 /* read from parameter clop | 743 /* read from parameter clop |
786 data.$img.attr('src', url); | 790 data.$img.attr('src', url); |
787 // set scaler div size explicitly in case $img is hidden (for zoomDrag) | 791 // set scaler div size explicitly in case $img is hidden (for zoomDrag) |
788 $imgRect = geom.rectangle(data.$img); | 792 $imgRect = geom.rectangle(data.$img); |
789 $imgRect.adjustDiv(data.$scaler); | 793 $imgRect.adjustDiv(data.$scaler); |
790 // load new bird img (in case the scalerUrl has changed, like in gotopage) | 794 // load new bird img (in case the scalerUrl has changed, like in gotopage) |
791 showBirdDiv(data); | 795 //showBirdDiv(data); //TODO: change url explicitly |
792 } | 796 } |
793 }; | 797 }; |
794 | 798 |
795 // returns maximum size for scaler img in fullscreen mode | 799 // returns maximum size for scaler img in fullscreen mode |
796 var getFullscreenImgSize = function($elem) { | 800 var getFullscreenImgSize = function($elem) { |
911 data.$buttonSets[buttonSetIdx] = $buttonsDiv; | 915 data.$buttonSets[buttonSetIdx] = $buttonsDiv; |
912 } | 916 } |
913 return $buttonsDiv; | 917 return $buttonsDiv; |
914 }; | 918 }; |
915 | 919 |
920 // returns URL for bird's eye view image | |
921 var getBirdImgUrl = function (data) { | |
922 var settings = data.settings; | |
923 var birdDivOptions = { | |
924 dw : settings.birdDivWidth, | |
925 dh : settings.birdDivHeight | |
926 }; | |
927 var birdSettings = $.extend({}, settings, birdDivOptions); | |
928 // use only the relevant parameters | |
929 var birdUrl = settings.scalerBaseUrl + '?' + | |
930 getParamString(birdSettings, settings.birdDivParams); | |
931 return birdUrl; | |
932 }; | |
933 | |
916 // creates HTML structure for the bird's eye view in elem | 934 // creates HTML structure for the bird's eye view in elem |
917 var setupBirdDiv = function (data) { | 935 var setupBirdDiv = function (data) { |
918 var $elem = data.$elem; | 936 var $elem = data.$elem; |
919 // the bird's eye div | 937 // the bird's eye div |
920 var $birdDiv = $('<div class="birdview" style="display:none"/>'); | 938 var $birdDiv = $('<div class="birdview" style="display:none"/>'); |
921 // the detail indicator frame | 939 // the detail indicator frame |
922 var $birdZoom = $('<div class="birdZoom" style="display:none; position:absolute; background-color:transparent;"/>'); | 940 var $birdZoom = $('<div class="birdZoom" style="display:none; background-color:transparent;"/>'); |
923 // the small image | 941 // the small image |
924 var $birdImg = $('<img class="birdimg"/>'); | 942 var $birdImg = $('<img class="birdimg"/>'); |
943 data.$birdDiv = $birdDiv; | |
944 data.$birdZoom = $birdZoom; | |
945 data.$birdImg = $birdImg; | |
925 $elem.append($birdDiv); | 946 $elem.append($birdDiv); |
926 $birdDiv.append($birdZoom); | 947 $birdDiv.append($birdZoom); |
927 $birdDiv.append($birdImg); | 948 $birdDiv.append($birdImg); |
928 $birdZoom.css(data.settings.birdIndicatorStyle); | 949 $birdZoom.css(data.settings.birdIndicatorStyle); |
929 data.$birdDiv = $birdDiv; | 950 var birdUrl = getBirdImgUrl(data); |
930 data.$birdZoom = $birdZoom; | |
931 data.$birdImg = $birdImg; | |
932 $birdImg.load(birdImgLoadedHandler(data)); | 951 $birdImg.load(birdImgLoadedHandler(data)); |
933 showBirdDiv(data); | 952 $birdImg.attr('src', birdUrl); |
934 birdZoom(data); | 953 }; |
954 | |
955 // update bird's eye view | |
956 var updateBirdDiv = function (data) { | |
957 if (!data.settings.isBirdDivVisible) return; | |
958 var $birdImg = data.$birdImg; | |
959 var oldsrc = $birdImg.attr('src'); | |
960 var newsrc = getBirdImgUrl(data); | |
961 if (oldsrc !== newsrc) { | |
962 $birdImg.attr('src', newsrc); | |
963 // onload handler re-renders | |
964 } else { | |
965 // re-render | |
966 renderBirdArea(data); | |
967 } | |
935 }; | 968 }; |
936 | 969 |
937 // puts correct img into bird div | |
938 var showBirdDiv = function (data) { | |
939 var settings = data.settings; | |
940 var $birdImg = data.$birdImg; | |
941 var $birdDiv = data.$birdDiv; | |
942 var birdDivOptions = { | |
943 dw : settings.birdDivWidth, | |
944 dh : settings.birdDivHeight | |
945 }; | |
946 var birdSettings = $.extend({}, settings, birdDivOptions); | |
947 // use only the relevant parameters | |
948 var birdUrl = settings.scalerBaseUrl + '?' | |
949 + getParamString(birdSettings, settings.birdDivParams); | |
950 // the bird's eye div | |
951 $birdImg.attr('src', birdUrl); | |
952 if (settings.isBirdDivVisible) { | |
953 $birdDiv.show(); | |
954 } | |
955 }; | |
956 | |
957 | |
958 // creates HTML structure for the about view in elem | 970 // creates HTML structure for the about view in elem |
959 var setupAboutDiv = function (data) { | 971 var setupAboutDiv = function (data) { |
960 var $elem = data.$elem; | 972 var $elem = data.$elem; |
961 var settings = data.settings; | 973 var settings = data.settings; |
962 var $aboutDiv = $('<div class="about" style="display:none"/>'); | 974 var $aboutDiv = $('<div class="about" style="display:none"/>'); |
1066 return trafo; | 1078 return trafo; |
1067 }; | 1079 }; |
1068 | 1080 |
1069 // returns function for load event of scaler img | 1081 // returns function for load event of scaler img |
1070 var scalerImgLoadedHandler = function (data) { | 1082 var scalerImgLoadedHandler = function (data) { |
1071 var $img = data.$img; | |
1072 return function () { | 1083 return function () { |
1084 var $img = $(this); | |
1073 console.debug("img loaded! this=", this, " data=", data); | 1085 console.debug("img loaded! this=", this, " data=", data); |
1074 // create Transform from current area and picsize | 1086 // create Transform from current area and picsize |
1075 data.imgTrafo = getImgTrafo($img, data.zoomArea, | 1087 data.imgTrafo = getImgTrafo($img, data.zoomArea, |
1076 data.settings.rot, data.scalerFlags.hmir, data.scalerFlags.vmir); | 1088 data.settings.rot, data.scalerFlags.hmir, data.scalerFlags.vmir); |
1077 console.debug("imgTrafo=", data.imgTrafo); | 1089 console.debug("imgTrafo=", data.imgTrafo); |
1078 // show image in case it was hidden (for example in zoomDrag) | 1090 // show image in case it was hidden (for example in zoomDrag) |
1079 $img.show(); | 1091 $img.show(); |
1080 // display marks | 1092 // display marks |
1081 renderMarks(data); | 1093 renderMarks(data); |
1082 // TODO: digilib.showArrows(); // show arrow overlays for zoom navigation | 1094 // TODO: digilib.showArrows(); // show arrow overlays for zoom navigation |
1083 var $birdImg = data.$birdImg; | |
1084 // should the birdview adapt to mirror or rotation? decision: No. :-) | |
1085 if ($birdImg) { | |
1086 $birdImg.triggerHandler('load'); | |
1087 } | |
1088 }; | 1095 }; |
1089 }; | 1096 }; |
1090 | 1097 |
1091 // returns function for load event of bird's eye view img | 1098 // returns function for load event of bird's eye view img |
1092 var birdImgLoadedHandler = function (data) { | 1099 var birdImgLoadedHandler = function (data) { |
1093 var $img = data.$birdImg; | |
1094 return function () { | 1100 return function () { |
1101 var $img = $(this); | |
1095 console.debug("birdimg loaded! this=", this, " data=", data); | 1102 console.debug("birdimg loaded! this=", this, " data=", data); |
1096 // create Transform from current area and picsize | 1103 // create Transform from current area and picsize |
1097 data.birdTrafo = getImgTrafo($img, MAX_ZOOMAREA); | 1104 data.birdTrafo = getImgTrafo($img, MAX_ZOOMAREA); |
1098 // display red indicator around zoomarea | 1105 // display red indicator around zoomarea |
1099 renderbirdZoom(data); | 1106 renderBirdArea(data); |
1107 // enable click and drag | |
1108 birdMoveArea(data); | |
1100 }; | 1109 }; |
1101 }; | 1110 }; |
1102 | 1111 |
1103 // place marks on the image | 1112 // place marks on the image |
1104 var renderMarks = function (data) { | 1113 var renderMarks = function (data) { |
1118 } | 1127 } |
1119 } | 1128 } |
1120 }; | 1129 }; |
1121 | 1130 |
1122 // show zoom area indicator on bird's eye view | 1131 // show zoom area indicator on bird's eye view |
1123 var renderbirdZoom = function (data) { | 1132 var renderBirdArea = function (data) { |
1124 var $birdZoom = data.$birdZoom; | 1133 var $birdZoom = data.$birdZoom; |
1125 var zoomArea = data.zoomArea; | 1134 var zoomArea = data.zoomArea; |
1135 var normalSize = isFullArea(zoomArea); | |
1136 if (normalSize) { | |
1137 $birdZoom.hide(); | |
1138 return; | |
1139 } else { | |
1140 $birdZoom.show(); | |
1141 } | |
1126 var indRect = data.birdTrafo.transform(zoomArea); | 1142 var indRect = data.birdTrafo.transform(zoomArea); |
1127 var coords = { | 1143 var coords = { |
1128 left : indRect.x-2, // acount for frame width | 1144 left : indRect.x-2, // acount for frame width |
1129 top : indRect.y-2, | 1145 top : indRect.y-2, |
1130 width : indRect.width, | 1146 width : indRect.width, |
1131 height: indRect.height | 1147 height: indRect.height |
1132 }; | 1148 }; |
1133 var normalSize = isFullArea(zoomArea); | |
1134 if (data.settings.interactionMode === 'fullscreen') { | 1149 if (data.settings.interactionMode === 'fullscreen') { |
1135 // no animation for fullscreen | 1150 // no animation for fullscreen |
1136 if (normalSize) return $birdZoom.hide(); | |
1137 $birdZoom.width(coords.width); | 1151 $birdZoom.width(coords.width); |
1138 $birdZoom.height(coords.height); | 1152 $birdZoom.height(coords.height); |
1139 $birdZoom.offset(coords); | 1153 $birdZoom.offset(coords); |
1140 $birdZoom.show(); | 1154 } else { |
1141 return; | 1155 // nice animation for embedded mode :-) |
1142 } | 1156 $birdZoom.animate(coords, opts); |
1143 // nice animation for embedded mode :-) | 1157 } |
1144 var makeCompleteFunction = function($birdZoom, normalSize) { | |
1145 return function() { | |
1146 if (normalSize) $birdZoom.hide(); | |
1147 }; | |
1148 }; | |
1149 var opts = { | |
1150 'complete' : makeCompleteFunction($birdZoom, normalSize) | |
1151 }; | |
1152 if (!normalSize && $birdZoom.css('display') === 'none') $birdZoom.show(); | |
1153 $birdZoom.animate(coords, opts); | |
1154 }; | 1158 }; |
1155 | 1159 |
1156 // zooms by the given factor | 1160 // zooms by the given factor |
1157 var zoomBy = function(data, factor) { | 1161 var zoomBy = function(data, factor) { |
1158 var area = data.zoomArea; | 1162 var area = data.zoomArea; |
1240 | 1244 |
1241 // bind start zoom handler | 1245 // bind start zoom handler |
1242 $scaler.one('mousedown.digilib', zoomStart); | 1246 $scaler.one('mousedown.digilib', zoomStart); |
1243 }; | 1247 }; |
1244 | 1248 |
1245 var birdZoom = function(data) { | 1249 // bird's eye view zoom area click and drag handler |
1250 var birdMoveArea = function(data) { | |
1246 var $birdImg = data.$birdImg; | 1251 var $birdImg = data.$birdImg; |
1247 var $birdZoom = data.$birdZoom; | 1252 var $birdZoom = data.$birdZoom; |
1248 var startPos, newRect, birdImgRect, birdZoomRect; | 1253 var startPos, newRect, birdImgRect, birdZoomRect; |
1249 | 1254 |
1250 var birdZoomMove = function(evt) { | 1255 var birdZoomMove = function(evt) { |