Mercurial > hg > digilib-old
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 === '-') { |