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