changeset 1472:56d69da93849

bird's eye: use existing HTML div; animation only when zoom area resizes; no re-rendering when moving zoom area
author hertzhaft
date Thu, 07 Jan 2016 00:26:58 +0100
parents cc8a97739121
children ec3c18079511
files webapp/src/main/webapp/jquery/jquery.digilib.birdseye.js webapp/src/main/webapp/jquery/jquery.digilib.js
diffstat 2 files changed, 40 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.birdseye.js	Wed Jan 06 18:57:59 2016 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.birdseye.js	Thu Jan 07 00:26:58 2016 +0100
@@ -59,12 +59,13 @@
             showBirdDiv : function (data, show) {
                 var settings = data.settings;
                 if (data.$birdDiv == null) {
-                    // no bird div -> create
+                    // no bird div: create it
                     setupBirdDiv(data);
                 }
+                // console.debug('showBirdDiv, visible:' + settings.isBirdDivVisible +' , show:' + show);
                 var on = digilib.fn.showDiv(settings.isBirdDivVisible, data.$birdDiv, show);
                 settings.isBirdDivVisible = on;
-                //digilib.fn.highlightButtons(data, 'bird', on);
+                // digilib.fn.highlightButtons(data, 'bird', on);
                 updateBirdDiv(data);
                 digilib.fn.storeOptions(data);
             }
@@ -103,39 +104,40 @@
     };
 
     var handleSetup = function (evt) {
-        console.debug("birdseye: handleSetup");
         var data = this;
         var visible = data.settings.isBirdDivVisible;
         var auto = data.settings.autoBirdDiv;
-        // bird's eye view creation
+        console.debug("birdseye: handleSetup, auto:"+auto, ", visible:"+visible);
+        // create bird's eye view
         if (visible || auto) {
             setupBirdDiv(data);
         }
-        if (visible) {
-            data.$birdDiv.show();
-        }
     };
 
     var handleUpdate = function (evt) {
         console.debug("birdseye: handleUpdate");
         var data = this;
-        if (data.settings.isBirdDivVisible) {
-            renderBirdArea(data);
-            setupBirdDrag(data);
-        }
+        // if (data.settings.isBirdDivVisible) {
+        //    renderBirdArea(data);
+        //    setupBirdDrag(data);
+        // }
     };
 
     var handleRedisplay = function (evt) {
     	// TODO: do we need this?
         console.debug("birdseye: handleRedisplay");
         var data = this;
+        if (data.settings.autoBirdDiv) {
+            data.settings.isBirdDivVisible = !digilib.fn.isFullArea(data.zoomArea);
+        }
         actions.showBirdDiv(data, data.settings.isBirdDivVisible);
     };
 
     var handleChangeZoomArea = function (evt, zoomArea) {
-        //console.debug("birdseye: handleDragZoom za="+zoomArea);
-    	var data = this;
-        updateBirdZoom(data, zoomArea);
+        var data = this;
+        if (data.settings.isBirdDivVisible && zoomArea.moved) {
+            moveBirdZoom(data, zoomArea);
+        }
     };
 
     // returns URL for bird's eye view image
@@ -156,8 +158,12 @@
     var setupBirdDiv = function (data) {
         var cssPrefix = data.settings.cssPrefix;
         var $elem = data.$elem;
-        // the bird's eye div
-        var $birdDiv = $('<div class="'+cssPrefix+'birdview" style="display:none"/>');
+        // use bird's eye div from HTML if provided
+        var $birdDiv = $('#'+cssPrefix+'birdview');
+        if ($birdDiv.length == 0) {
+            $birdDiv = $('<div class="'+cssPrefix+'birdview" style="display:none"/>');
+            $elem.append($birdDiv);
+        }
         // the detail indicator frame
         var $birdZoom = $('<div class="'+cssPrefix+'birdzoom" style="display:none; background-color:transparent;"/>');
         // the small image
@@ -165,7 +171,6 @@
         data.$birdDiv = $birdDiv;
         data.$birdZoom = $birdZoom;
         data.$birdImg = $birdImg;
-        $elem.append($birdDiv);
         $birdDiv.append($birdZoom);
         $birdDiv.append($birdImg);
         // $birdZoom.css(data.settings.birdIndicatorStyle);
@@ -202,11 +207,11 @@
             data.birdTrafo = digilib.fn.getImgTrafo(data.$birdImg, FULL_AREA);
             // update display (zoom area indicator)
             if (data.settings.isBirdDivVisible) {
-                if (birdRect.width === 0) {
+                //if (birdRect.width === 0) {
                     // workaround: IE7 calls load handler when there is no size info yet 
-                    setTimeout(function () { $birdImg.triggerHandler('load'); }, 200);
-                    return;
-                    }
+                //    setTimeout(function () { $birdImg.triggerHandler('load'); }, 200);
+                //    return;
+                //    }
                 renderBirdArea(data);
                 }
         };
@@ -228,7 +233,7 @@
         data.birdTrafo = digilib.fn.getImgTrafo(data.$birdImg, FULL_AREA);
         var zoomRect = data.birdTrafo.transform(zoomArea);
         console.debug("renderBirdArea:", zoomRect, "zoomArea:", zoomArea, "$birdTrafo:", data.birdTrafo);
-        // compensate border width (different for fullscreen and embedded!)
+        // compensate for border width (different for adjustDiv and animate!)
         var bw = digilib.fn.getBorderWidth($birdZoom);
         if (data.settings.interactionMode === 'fullscreen') {
             // no animation for fullscreen
@@ -250,15 +255,14 @@
         }
     };
 
-    // move bird zoom indicator to reflect zoomed detail area
-    var updateBirdZoom = function(data, zoomArea) {
-        if (!data.settings.isBirdDivVisible) return;
-        var birdRect = data.birdTrafo.transform(zoomArea);
+    // move bird zoom indicator to reflect moved zoomarea directly
+    var moveBirdZoom = function(data, zoomArea) {
+        var zoomRect = data.birdTrafo.transform(zoomArea);
         var $birdZoom = data.$birdZoom;
-        // compensate border width
         var bw = digilib.fn.getBorderWidth($birdZoom);
-        birdRect.addPosition({x : -bw, y : -bw});
-        birdRect.adjustDiv(data.$birdZoom);
+        // compensate for border width
+        zoomRect.addPosition({x : -bw, y : -bw});
+        zoomRect.adjustDiv(data.$birdZoom);
     };
 
     // bird's eye view zoom area click and drag handler
@@ -295,6 +299,7 @@
             newRect.stayInside(birdImgRect);
             // reflect birdview zoom position in scaler image
             var area = data.birdTrafo.invtransform(newRect);
+            area.moved = true;
             $(data).trigger('changeZoomArea', area);
             return false;
         };
--- a/webapp/src/main/webapp/jquery/jquery.digilib.js	Wed Jan 06 18:57:59 2016 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.js	Thu Jan 07 00:26:58 2016 +0100
@@ -944,9 +944,9 @@
      */
     var redisplay = function (data) {
         var settings = data.settings;
-        if (settings.autoBirdDiv) {
-            settings.isBirdDivVisible = !isFullArea(data.zoomArea);
-            }
+        // if (settings.autoBirdDiv) {
+        //    settings.isBirdDivVisible = !isFullArea(data.zoomArea);
+        //    }
         if (settings.interactionMode === 'fullscreen') {
             // update location.href (browser URL) in fullscreen mode
             var url = getDigilibUrl(data);
@@ -1478,8 +1478,9 @@
             var za = geom.rectangle($img);
             za.addPosition(delta.neg());
             // transform back
-            var newArea = data.imgTrafo.invtransform(za);
-            $data.trigger('changeZoomArea', newArea);
+            var area = data.imgTrafo.invtransform(za);
+            area.moved = true;
+            $data.trigger('changeZoomArea', area);
             return false;
             };