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