diff client/digitallibrary/jquery/jquery.digilib.regions.js @ 799:12f790cb30de jquery

started to adapt regions plugin to new plugin mechanism
author hertzhaft
date Fri, 18 Feb 2011 23:13:26 +0100
parents d742bd92b05a
children ae8e98c479d5
line wrap: on
line diff
--- a/client/digitallibrary/jquery/jquery.digilib.regions.js	Fri Feb 18 20:09:15 2011 +0100
+++ b/client/digitallibrary/jquery/jquery.digilib.regions.js	Fri Feb 18 23:13:26 2011 +0100
@@ -15,8 +15,11 @@
     var data;
     var buttons;
     var fn;
+    // affine geometry plugin stub
     var geom;
 
+    var FULL_AREA;
+
     var buttons = {
         addregion : {
             onclick : "setRegion",
@@ -39,25 +42,33 @@
             icon : "regioninfo.png"
             }
         };
-    var regionSet = ['addregion', 'delregion', 'regions', 'regioninfo', 'lessoptions'];
+
+    var defaults = {
+        // are regions shown?
+        'isRegionVisible' : true,
+        // buttonset of this plugin
+        'regionSet' : ['addregion', 'delregion', 'regions', 'regioninfo', 'lessoptions'],
+        // array of defined regions
+        'regions' : []
+    };
 
     var actions = { 
         // define a region interactively with two clicked points
         "setRegion" : function(data) {
-            $elem = data.$elem;
-            $scaler = data.$scaler;
+            var $elem = data.$elem;
+            var $scaler = data.$scaler;
+            var picRect = geom.rectangle($scaler);
             var pt1, pt2;
-            var $regionDiv = $('<div class="region" style="display:none"/>');
-            $regionDiv.attr("id", "region" + data.regions.length);
-            $elem.append($regionDiv);
-            var picRect = geom.rectangle($scaler);
+            // TODO: temporary rectangle only, pass values to "addRegion" factory
+            var $tempDiv = $('<div class="region" style="display:none"/>');
+            $elem.append($tempDiv);
 
             var regionStart = function (evt) {
                 pt1 = geom.position(evt);
                 // setup and show zoom div
-                pt1.adjustDiv($regionDiv);
-                $regionDiv.width(0).height(0);
-                $regionDiv.show();
+                pt1.adjustDiv($tempDiv);
+                $tempDiv.width(0).height(0);
+                $tempDiv.show();
                 // register events
                 $elem.bind("mousemove.dlRegion", regionMove);
                 $elem.bind("mouseup.dlRegion", regionEnd);
@@ -70,7 +81,7 @@
                 var rect = geom.rectangle(pt1, pt2);
                 rect.clipTo(picRect);
                 // update zoom div
-                rect.adjustDiv($regionDiv);
+                rect.adjustDiv($tempDiv);
                 return false;
             };
 
@@ -85,8 +96,9 @@
                 $elem.unbind("mouseup.dlRegion", regionEnd);
                 // clip and transform
                 clickRect.clipTo(picRect);
-                clickRect.adjustDiv($regionDiv);
-                data.regions.push($regionDiv);
+                clickRect.adjustDiv($tempDiv);
+                $tempDiv.remove();
+                data.settings.regions.push(clickRect);
                 // fn.redisplay(data);
                 return false;
             };
@@ -100,7 +112,7 @@
 
         // remove the last added region
         "removeRegion" : function (data) {
-            var $regionDiv = data.regions.pop();
+            var $regionDiv = data.settings.regions.pop();
             $regionDiv.remove();
             // fn.redisplay(data);
         },
@@ -170,16 +182,57 @@
             }
     };
 
-    // export constructor functions to digilib plugin
-    var init = function (digilibdata) {
-        console.log('initialising regions plugin. data:', digilibdata);
-        data = digilibdata;
-        data.regions = [];
-        // setup geometry object
-        geom = data.plugins.geometry.init();
-        // add buttons and actions from this plugin
-        $.extend(this.buttons, buttons);
-        $.extend(this.actions, actions);
+    var handleSetup = function (evt) {
+        console.debug("regions: handleSetup");
+        data = this;
+//        if (data.settings.isBirdDivVisible) {
+//            setupBirdDiv(data);
+//            data.$birdDiv.show();
+//        }
+    };
+
+    var handleUpdate = function (evt) {
+        console.debug("regions: handleUpdate");
+        data = this;
+//        if (data.settings.isBirdDivVisible) {
+//            renderBirdArea(data);
+//            setupBirdDrag(data);
+//        }
+    };
+
+    var handleRedisplay = function (evt) {
+        console.debug("regions: handleRedisplay");
+        data = this;
+//        if (data.settings.isBirdDivVisible) {
+//            updateBirdDiv(data);
+//        }
+    };
+
+    var handleDragZoom = function (evt, zoomArea) {
+        console.debug("regions: handleDragZoom, zoomArea:", zoomArea);
+        data = this;
+//        if (data.settings.isBirdDivVisible) {
+//            setBirdZoom(data, zoomArea);
+//        }
+    };
+
+    // plugin installation called by digilib on plugin object.
+    var install = function(digilib) {
+        // import geometry classes
+        geom = digilib.fn.geometry;
+        FULL_AREA = geom.rectangle(0,0,1,1);
+        // add defaults
+        $.extend(digilib.defaults, defaults);
+        // add actions
+        $.extend(digilib.actions, actions);
+        // add buttons
+        $.extend(digilib.buttons, buttons);
+    };
+
+    // plugin initialization
+    var init = function (data) {
+        console.debug('initialising regions plugin. data:', data);
+        var $data = $(data);
         var buttonSettings = data.settings.buttonSettings.fullscreen;
         // configure buttons through digilib "regionSet" option
         var buttonSet = data.settings.regionSet || regionSet; 
@@ -188,14 +241,28 @@
             buttonSettings['regionSet'] = buttonSet;
             buttonSettings.buttonSets.push('regionSet');
             }
-        fn = this.fn;
-        // console.log(data.settings.buttonSettings.fullscreen.buttonSets);
-        return {
-        };
+        // install event handler
+        $data.bind('setup', handleSetup);
+        $data.bind('update', handleUpdate);
+        $data.bind('redisplay', handleRedisplay);
+        $data.bind('dragZoom', handleDragZoom);
     };
+
+    // plugin object with name and init
+    // shared objects filled by digilib on registration
+    var pluginProperties = {
+            name : 'region',
+            install : install,
+            init : init,
+            buttons : {},
+            actions : {},
+            fn : {},
+            plugins : {}
+    };
+
     if ($.fn.digilib == null) {
-        $.error("jquery.digilib.regions must be loaded after jquery.digilib!");
+        $.error("jquery.digilib.birdview must be loaded after jquery.digilib!");
     } else {
-        $.fn.digilib('plugin', {name : 'regions', init : init});
+        $.fn.digilib('plugin', pluginProperties);
     }
 })(jQuery);