comparison client/digitallibrary/jquery/jquery.digilib.js @ 678:d50d24b7fd95 jquery

first step at dragging birdview zoom indicator around
author hertzhaft
date Wed, 26 Jan 2011 01:01:53 +0100
parents 0233e39305d3
children f774b56d3c1a
comparison
equal deleted inserted replaced
677:0233e39305d3 678:d50d24b7fd95
298 // no bird div -> create 298 // no bird div -> create
299 setupBirdDiv(data); 299 setupBirdDiv(data);
300 } 300 }
301 // TODO: keep bird view visible after reload (parameter, cookie?) 301 // TODO: keep bird view visible after reload (parameter, cookie?)
302 data.settings.isBirdDivVisible = showDiv(data.settings.isBirdDivVisible, data.$birdDiv, show); 302 data.settings.isBirdDivVisible = showDiv(data.settings.isBirdDivVisible, data.$birdDiv, show);
303 data.$birdImg.triggerHandler('load');
303 }, 304 },
304 305
305 // goto given page nr (+/-: relative) 306 // goto given page nr (+/-: relative)
306 gotoPage : function (data, pageNr) { 307 gotoPage : function (data, pageNr) {
307 var settings = data.settings; 308 var settings = data.settings;
611 } else { 612 } else {
612 // embedded mode -- just change img src 613 // embedded mode -- just change img src
613 var url = getScalerUrl(data); 614 var url = getScalerUrl(data);
614 data.$img.attr('src', url); 615 data.$img.attr('src', url);
615 // and update bird's eye view 616 // and update bird's eye view
616 if (settings.isBirdDivVisible) { 617 //if (settings.isBirdDivVisible) {
617 renderBirdArea(data); 618 // renderBirdZoom(data);
618 } 619 //}
619 }; 620 };
620 }; 621 };
621 622
622 // returns maximum size for scaler img in fullscreen mode 623 // returns maximum size for scaler img in fullscreen mode
623 var getFullscreenImgSize = function($elem) { 624 var getFullscreenImgSize = function($elem) {
734 var birdSettings = $.extend({}, settings, birdDivOptions); 735 var birdSettings = $.extend({}, settings, birdDivOptions);
735 var birdUrl = settings.scalerBaseUrl + '?' + getParamString(birdSettings, keys); 736 var birdUrl = settings.scalerBaseUrl + '?' + getParamString(birdSettings, keys);
736 // the bird's eye div 737 // the bird's eye div
737 var $birdDiv = $('<div class="birdview" style="display:none"/>'); 738 var $birdDiv = $('<div class="birdview" style="display:none"/>');
738 // the detail indicator frame 739 // the detail indicator frame
739 var $birdzoomDiv = $('<div class="birdzoom" style="display:none; position:absolute; background-color:transparent;"/>'); 740 var $birdZoom = $('<div class="birdZoom" style="display:none; position:absolute; background-color:transparent;"/>');
740 // the small image 741 // the small image
741 var $birdImg = $('<img class="birdimg"/>'); 742 var $birdImg = $('<img class="birdimg"/>');
742 $elem.append($birdDiv); 743 $elem.append($birdDiv);
743 $birdDiv.append($birdzoomDiv); 744 $birdDiv.append($birdZoom);
744 $birdDiv.append($birdImg); 745 $birdDiv.append($birdImg);
745 $birdzoomDiv.css(data.settings.birdIndicatorStyle); 746 $birdZoom.css(data.settings.birdIndicatorStyle);
746 data.$birdDiv = $birdDiv; 747 data.$birdDiv = $birdDiv;
748 data.$birdZoom = $birdZoom;
747 data.$birdImg = $birdImg; 749 data.$birdImg = $birdImg;
748 data.$birdZoom = $birdzoomDiv;
749 $birdImg.load(birdImgLoadedHandler(data)); 750 $birdImg.load(birdImgLoadedHandler(data));
750 $birdImg.attr('src', birdUrl); 751 $birdImg.attr('src', birdUrl);
751 if (data.settings.isBirdDivVisible) { 752 if (data.settings.isBirdDivVisible) {
752 $birdDiv.fadeIn(); 753 $birdDiv.fadeIn();
753 } 754 };
755 birdZoom(data);
754 }; 756 };
755 757
756 // creates HTML structure for the about view in elem 758 // creates HTML structure for the about view in elem
757 var setupAboutDiv = function (data) { 759 var setupAboutDiv = function (data) {
758 var $elem = data.$elem; 760 var $elem = data.$elem;
825 // scale to screen position and size 827 // scale to screen position and size
826 trafo.concat(trafo.getScale(picrect)); 828 trafo.concat(trafo.getScale(picrect));
827 trafo.concat(trafo.getTranslation(picrect)); 829 trafo.concat(trafo.getTranslation(picrect));
828 return trafo; 830 return trafo;
829 }; 831 };
830 832
831 // returns function for load event of scaler img 833 // returns function for load event of scaler img
832 var scalerImgLoadedHandler = function (data) { 834 var scalerImgLoadedHandler = function (data) {
833 var $img = data.$img; 835 var $img = data.$img;
834 return function () { 836 return function () {
835 console.debug("img loaded! this=", this, " data=", data); 837 console.debug("img loaded! this=", this, " data=", data);
837 data.imgTrafo = getImgTrafo($img, data.zoomArea, 839 data.imgTrafo = getImgTrafo($img, data.zoomArea,
838 data.settings.rot, data.scalerFlags.hmir, data.scalerFlags.vmir); 840 data.settings.rot, data.scalerFlags.hmir, data.scalerFlags.vmir);
839 // display marks 841 // display marks
840 renderMarks(data); 842 renderMarks(data);
841 //digilib.showArrows(); // show arrow overlays for zoom navigation 843 //digilib.showArrows(); // show arrow overlays for zoom navigation
842 /* var $birdImg = data.$birdImg; 844 var $birdImg = data.$birdImg;
843 if ($birdImg) { 845 if ($birdImg) {
844 $birdImg.triggerHandler('load'); 846 $birdImg.triggerHandler('load');
845 }; */ 847 };
846 }; 848 };
847 }; 849 };
848 850
849 // returns function for load event of bird's eye view img 851 // returns function for load event of bird's eye view img
850 var birdImgLoadedHandler = function (data) { 852 var birdImgLoadedHandler = function (data) {
852 return function () { 854 return function () {
853 console.debug("birdimg loaded! this=", this, " data=", data); 855 console.debug("birdimg loaded! this=", this, " data=", data);
854 // create Transform from current area and picsize 856 // create Transform from current area and picsize
855 data.birdTrafo = getImgTrafo($img, MAX_ZOOMAREA); 857 data.birdTrafo = getImgTrafo($img, MAX_ZOOMAREA);
856 // display red indicator around zoomarea 858 // display red indicator around zoomarea
857 renderBirdArea(data); 859 renderbirdZoom(data);
858 }; 860 };
859 }; 861 };
860 862
861 // place marks on the image 863 // place marks on the image
862 var renderMarks = function (data) { 864 var renderMarks = function (data) {
876 } 878 }
877 } 879 }
878 }; 880 };
879 881
880 // show zoom area indicator on bird's eye view 882 // show zoom area indicator on bird's eye view
881 var renderBirdArea = function (data) { 883 var renderbirdZoom = function (data) {
882 var $birdzoom = data.$birdZoom; 884 var $birdZoom = data.$birdZoom;
883 var zoomArea = data.zoomArea; 885 var zoomArea = data.zoomArea;
884 var indRect = data.birdTrafo.transform(zoomArea); 886 var indRect = data.birdTrafo.transform(zoomArea);
885 var coords = { 887 var coords = {
886 left : indRect.x-2, // acount for frame width 888 left : indRect.x-2, // acount for frame width
887 top : indRect.y-2, 889 top : indRect.y-2,
889 height: indRect.height 891 height: indRect.height
890 }; 892 };
891 var normalSize = isFullArea(zoomArea); 893 var normalSize = isFullArea(zoomArea);
892 if (data.settings.interactionMode === 'fullscreen') { 894 if (data.settings.interactionMode === 'fullscreen') {
893 // no animation for fullscreen 895 // no animation for fullscreen
894 if (normalSize) return $birdzoom.hide(); 896 if (normalSize) return $birdZoom.hide();
895 $birdzoom.width(coords.width); 897 $birdZoom.width(coords.width);
896 $birdzoom.height(coords.height); 898 $birdZoom.height(coords.height);
897 $birdzoom.offset(coords); 899 $birdZoom.offset(coords);
898 $birdzoom.show(); 900 $birdZoom.show();
899 return; 901 return;
900 }; 902 };
901 // nice animation for embedded mode :-) 903 // nice animation for embedded mode :-)
902 var makeCompleteFunction = function($birdzoom, normalSize) { 904 var makeCompleteFunction = function($birdZoom, normalSize) {
903 return function() { 905 return function() {
904 if (normalSize) $birdzoom.hide(); 906 if (normalSize) $birdZoom.hide();
905 }; 907 };
906 }; 908 };
907 var opts = { 909 var opts = {
908 'complete' : makeCompleteFunction($birdzoom, normalSize) 910 'complete' : makeCompleteFunction($birdZoom, normalSize)
909 }; 911 };
910 if (!normalSize && $birdzoom.css('display') === 'none') $birdzoom.show(); 912 if (!normalSize && $birdZoom.css('display') === 'none') $birdZoom.show();
911 $birdzoom.animate(coords, opts); 913 $birdZoom.animate(coords, opts);
912 }; 914 };
913 915
914 // zooms by the given factor 916 // zooms by the given factor
915 var zoomBy = function(data, factor) { 917 var zoomBy = function(data, factor) {
916 var area = data.zoomArea; 918 var area = data.zoomArea;
1000 1002
1001 // bind start zoom handler 1003 // bind start zoom handler
1002 $scaler.one('mousedown.digilib', zoomStart); 1004 $scaler.one('mousedown.digilib', zoomStart);
1003 }; 1005 };
1004 1006
1007 var birdZoom = function(data) {
1008 var $birdImg = data.$birdImg;
1009 var $birdZoom = data.$birdZoom;
1010 var startPos, newRect, birdImgRect, birdZoomRect;
1011
1012 var birdZoomMove = function(evt) {
1013 // mousemove handler: drag
1014 var pos = geom.position(evt);
1015 var dx = pos.x - startPos.x;
1016 var dy = pos.y - startPos.y;
1017 // move birdZoom div, keeping size
1018 newRect = geom.rectangle(
1019 birdZoomRect.x + dx,
1020 birdZoomRect.y + dy,
1021 birdZoomRect.width,
1022 birdZoomRect.height
1023 );
1024 // stay within birdimage
1025 newRect.stayInside(birdImgRect);
1026 $birdZoom.offset({left : newRect.x, top : newRect.y});
1027 // $birdZoom.show();
1028 return false;
1029 };
1030
1031 var birdZoomEndDrag = function(evt) {
1032 // mouseup handler: reload page
1033 var settings = data.settings;
1034 $birdImg.unbind("mousemove.digilib", birdZoomMove);
1035 $birdImg.unbind("mouseup.digilib", birdZoomEndDrag);
1036 if (newRect == null) { // no movement happened
1037 startPos = birdZoomRect.getCenter();
1038 birdZoomMove(evt); // set center to click position
1039 };
1040 if (data.zoomArea) {
1041 settings.wx = cropFloat((newRect.x - birdImgRect.x) / birdImgRect.width);
1042 settings.wy = cropFloat((newRect.y - birdImgRect.y) / birdImgRect.height);
1043 };
1044 settings.ws = 1; // zoomed is always fit
1045 redisplay(data);
1046 return false;
1047 };
1048
1049 var birdZoomStartDrag = function(evt) {
1050 // mousedown handler: start dragging bird zoom to a new position
1051 startPos = geom.position(evt);
1052 birdImgRect = geom.rectangle($birdImg);
1053 birdZoomRect = geom.rectangle($birdZoom);
1054 $birdImg.bind("mousemove.digilib", birdZoomMove);
1055 $birdImg.bind("mouseup.digilib", birdZoomEndDrag);
1056 return false;
1057 };
1058
1059 $birdImg.one("mousedown.digilib", birdZoomStartDrag);
1060 // $birdZoom.one("mousedown.digilib", birdZoomStartDrag);
1061 };
1062
1005 // sets a key to a value (relative values with +/- if relative=true) 1063 // sets a key to a value (relative values with +/- if relative=true)
1006 var setNumValue = function(settings, key, value) { 1064 var setNumValue = function(settings, key, value) {
1007 if (isNumber(value)) return settings[key] = value; 1065 if (isNumber(value)) return settings[key] = value;
1008 var sign = value.substring(0,1); 1066 var sign = value.substring(0,1);
1009 if (sign === '+' || sign === '-') { 1067 if (sign === '+' || sign === '-') {