Mercurial > hg > digilib
comparison client/digitallibrary/jquery/jquery.digilib.js @ 649:e328273b7ef4 jquery
first try at birdview indicator
| author | hertzhaft |
|---|---|
| date | Fri, 21 Jan 2011 00:34:15 +0100 |
| parents | 8f76bd79648e a2aadf44a454 |
| children | 2d85d820501d |
comparison
equal
deleted
inserted
replaced
| 648:8f76bd79648e | 649:e328273b7ef4 |
|---|---|
| 28 onclick : ["zoomBy", 0.7], | 28 onclick : ["zoomBy", 0.7], |
| 29 tooltip : "zoom out", | 29 tooltip : "zoom out", |
| 30 img : "zoom-out.png" | 30 img : "zoom-out.png" |
| 31 }, | 31 }, |
| 32 zoomarea : { | 32 zoomarea : { |
| 33 onclick : "javascript:zoomArea()", | 33 onclick : "zoomArea", |
| 34 tooltip : "zoom area", | 34 tooltip : "zoom area", |
| 35 img : "zoom-area.png" | 35 img : "zoom-area.png" |
| 36 }, | 36 }, |
| 37 zoomfull : { | 37 zoomfull : { |
| 38 onclick : "zoomFull", | 38 onclick : "zoomFull", |
| 203 var geom = dlGeometry(); | 203 var geom = dlGeometry(); |
| 204 | 204 |
| 205 var MAX_ZOOMAREA = geom.rectangle(0, 0, 1, 1); | 205 var MAX_ZOOMAREA = geom.rectangle(0, 0, 1, 1); |
| 206 | 206 |
| 207 var actions = { | 207 var actions = { |
| 208 // digilib initialization | 208 // init: digilib initialization |
| 209 init : function(options) { | 209 init : function(options) { |
| 210 // settings for this digilib instance are merged from defaults and options | 210 // settings for this digilib instance are merged from defaults and options |
| 211 var settings = $.extend({}, defaults, options); | 211 var settings = $.extend({}, defaults, options); |
| 212 var isFullscreen = settings.interactionMode === 'fullscreen'; | 212 var isFullscreen = settings.interactionMode === 'fullscreen'; |
| 213 var queryParams = {}; | 213 var queryParams = {}; |
| 259 // about window creation - TODO: could be deferred? restrict to only one item? | 259 // about window creation - TODO: could be deferred? restrict to only one item? |
| 260 setupAboutDiv(data); | 260 setupAboutDiv(data); |
| 261 }); | 261 }); |
| 262 }, | 262 }, |
| 263 | 263 |
| 264 // clean up digilib | 264 // destroy: clean up digilib |
| 265 destroy : function(data) { | 265 destroy : function(data) { |
| 266 return this.each(function(){ | 266 return this.each(function(){ |
| 267 var $elem = $(this); | 267 var $elem = $(this); |
| 268 // Namespacing FTW | 268 $(window).unbind('.digilib'); // unbind all digilibs(?) |
| 269 $(window).unbind('.digilib'); // unbinds all digilibs(?) | |
| 270 data.digilib.remove(); | 269 data.digilib.remove(); |
| 271 $elem.removeData('digilib'); | 270 $elem.removeData('digilib'); |
| 272 }); | 271 }); |
| 273 }, | 272 }, |
| 274 | 273 |
| 314 }, | 313 }, |
| 315 | 314 |
| 316 // zoom by a given factor | 315 // zoom by a given factor |
| 317 zoomBy : function (data, factor) { | 316 zoomBy : function (data, factor) { |
| 318 zoomBy(data, factor); | 317 zoomBy(data, factor); |
| 318 }, | |
| 319 | |
| 320 // zoom interactively | |
| 321 zoomArea : function (data) { | |
| 322 zoomArea(data); | |
| 319 }, | 323 }, |
| 320 | 324 |
| 321 // zoom out to full page | 325 // zoom out to full page |
| 322 zoomFull : function (data, mode) { | 326 zoomFull : function (data, mode) { |
| 323 data.zoomArea = MAX_ZOOMAREA; | 327 data.zoomArea = MAX_ZOOMAREA; |
| 734 | 738 |
| 735 return function () { | 739 return function () { |
| 736 console.debug("img loaded! this=", this, " data=", data); | 740 console.debug("img loaded! this=", this, " data=", data); |
| 737 var area = data.zoomArea; | 741 var area = data.zoomArea; |
| 738 // create Transform from current area and picsize | 742 // create Transform from current area and picsize |
| 739 var picpos = $img.offset(); | 743 var picrect = geom.rectangle($img); |
| 740 var picrect = geom.rectangle(picpos.left, picpos.top, $img.width(), $img.height()); | |
| 741 var trafo = geom.transform(); | 744 var trafo = geom.transform(); |
| 742 // subtract area offset and size | 745 // subtract area offset and size |
| 743 trafo.concat(trafo.getTranslation(geom.position(- area.x, - area.y))); | 746 trafo.concat(trafo.getTranslation(geom.position(- area.x, - area.y))); |
| 744 trafo.concat(trafo.getScale(geom.size(1/area.width, 1/area.height))); | 747 trafo.concat(trafo.getScale(geom.size(1/area.width, 1/area.height))); |
| 745 // scale to screen size | 748 // scale to screen size |
| 767 var mpos = data.imgTrafo.transform(mark); | 770 var mpos = data.imgTrafo.transform(mark); |
| 768 // create mark | 771 // create mark |
| 769 var html = '<div class="mark">'+(i+1)+'</div>'; | 772 var html = '<div class="mark">'+(i+1)+'</div>'; |
| 770 var $mark = $(html); | 773 var $mark = $(html); |
| 771 $elem.append($mark); | 774 $elem.append($mark); |
| 772 $mark.offset({ left : mpos.x, top : mpos.y}); | 775 $mark.offset({left : mpos.x, top : mpos.y}); |
| 773 } | 776 } |
| 774 } | 777 } |
| 775 }; | 778 }; |
| 776 | 779 |
| 777 // zooms by the given factor | 780 // zooms by the given factor |
| 802 data.marks.push(pos); | 805 data.marks.push(pos); |
| 803 redisplay(data); | 806 redisplay(data); |
| 804 return false; // do we even get here? | 807 return false; // do we even get here? |
| 805 }); | 808 }); |
| 806 }; | 809 }; |
| 810 | |
| 811 var zoomArea = function(data) { | |
| 812 $elem = data.$elem; | |
| 813 $scaler = data.$scaler; | |
| 814 var pt1, pt2; | |
| 815 var $zoomDiv = $('<div class="zoomrect" style="display:none"/>'); | |
| 816 $elem.append($zoomDiv); | |
| 817 //var overlay = getElement("overlay"); | |
| 818 // use overlay div to avoid <img> mousemove problems | |
| 819 var picRect = geom.rectangle($scaler); | |
| 820 // FIX ME: is there a way to query the border width from CSS info? | |
| 821 // rect.x -= 2; // account for overlay borders | |
| 822 // rect.y -= 2; | |
| 823 //moveElement(overlay, picRect); | |
| 824 //showElement(overlay, true); | |
| 825 // start event capturing | |
| 826 //registerEvent("mousedown", overlay, zoomStart); | |
| 827 //registerEvent("mousedown", this.scalerImg, zoomStart); | |
| 828 | |
| 829 var zoomStart = function (evt) { | |
| 830 pt1 = geom.position(evt); | |
| 831 // setup and show zoom div | |
| 832 //moveElement(zoomdiv, Rectangle(pt1.x, pt1.y, 0, 0)); | |
| 833 $zoomDiv.offset({left : pt1.x, top : pt1.y}); | |
| 834 $zoomDiv.show(); | |
| 835 // register events | |
| 836 $elem.bind("mousemove.digilib", zoomMove); | |
| 837 $elem.bind("mouseup.digilib", zoomEnd); | |
| 838 return false; | |
| 839 }; | |
| 840 | |
| 841 // mouseup handler: end moving | |
| 842 var zoomEnd = function (evt) { | |
| 843 pt2 = geom.position(evt); | |
| 844 // assume a click and continue if the area is too small | |
| 845 var clickRect = geom.rectangle(pt1, pt2); | |
| 846 clickRect.normalize(); | |
| 847 console.debug("clickRect.getArea()=",clickRect.getArea()); | |
| 848 if (clickRect.getArea() <= 5) { | |
| 849 return false; | |
| 850 } | |
| 851 // hide zoom div | |
| 852 $zoomDiv.remove(); | |
| 853 // unregister events | |
| 854 $elem.unbind("mousemove.digilib", zoomMove); | |
| 855 $elem.unbind("mouseup.digilib", zoomEnd); | |
| 856 // clip and transform | |
| 857 clickRect.clipTo(picRect); | |
| 858 var area = data.imgTrafo.invtransform(clickRect); | |
| 859 data.zoomArea = area; | |
| 860 // zoomed is always fit | |
| 861 data.settings.ws = 1; | |
| 862 redisplay(data); | |
| 863 return false; | |
| 864 }; | |
| 865 | |
| 866 // mouse move handler | |
| 867 var zoomMove = function (evt) { | |
| 868 pt2 = geom.position(evt); | |
| 869 var rect = geom.rectangle(pt1, pt2); | |
| 870 rect.normalize(); | |
| 871 rect.clipTo(picRect); | |
| 872 // update zoom div | |
| 873 $zoomDiv.offset({left : rect.x, top : rect.y}); | |
| 874 $zoomDiv.width(rect.width).height(rect.height); | |
| 875 return false; | |
| 876 }; | |
| 877 | |
| 878 // bind start zoom handler | |
| 879 $scaler.one('mousedown.digilib', zoomStart); | |
| 880 }; | |
| 807 | 881 |
| 808 // sets a key to a value (relative values with +/- if relative=true) | 882 // sets a key to a value (relative values with +/- if relative=true) |
| 809 var setNumValue = function(settings, key, value) { | 883 var setNumValue = function(settings, key, value) { |
| 810 if (isNumber(value)) return settings[key] = value; | 884 if (isNumber(value)) return settings[key] = value; |
| 811 var sign = value.substring(0,1); | 885 var sign = value.substring(0,1); |
