changeset 1485:0831d73ce747

sequence plugin: show images according to inline listing
author hertzhaft
date Fri, 26 Feb 2016 15:12:13 +0100
parents 197d63ff30aa
children c88c1d45e808
files webapp/src/main/webapp/jquery/jquery.digilib.sequence.js
diffstat 1 files changed, 43 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.sequence.js	Thu Feb 25 18:26:48 2016 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.sequence.js	Fri Feb 26 15:12:13 2016 +0100
@@ -47,48 +47,66 @@
             'imageSequence' : null,
             // optional prefix for image file names
             'imageSequenceBase' : null,
+            // contains the HTML to be shown as caption
+            'imageSequenceCaption' : null,
             // show captions for sequential images?
             'imageSequenceShowCaptions' : false
     };
 
+    var hasSequence = function(settings) {
+        return settings.imageSequence != null;
+    };
+
     var actions = {
          // replaces digilib.fn.gotoPage (monkey patch)
         gotoPage : function (data, pageNr) {
             var settings = data.settings;
-            settings.suppressParamNames = ['pt', 'fn'];
-            // settings.fn = 'numbers';
-            // settings.pt = '10';
-            var oldpn = settings.pn;
+            var currentPn = settings.pn;
+            if (hasSequence(settings)) {
+                settings.pt = settings.imageSequence.length;
+                }
             if (pageNr == null) {
-                pageNr = window.prompt("Goto image at index", oldpn);
-            }
+                pageNr = window.prompt("Goto image at index", currentPn);
+                }
             if (pageNr == '-0') {
                 pageNr = settings.pt;
-            }
+                }
             var pn = fn.setNumValue(settings, "pn", pageNr);
             if (pn == null) return false; // nothing happened
             if (pn < 1) {
                 alert("no such image (index number too low)");
-                settings.pn = oldpn;
+                settings.pn = currentPn;
                 return false;
                 }
-            // TODO: how do we get pt?
+            // set fn and pn parameters
             if (settings.pt != null) {
                 if (pn > settings.pt) {
                     alert("no such image (index number too high)");
-                    settings.pn = oldpn;
+                    settings.pn = currentPn;
                     return false;
                     }
+                settings.pn = pn;
+                setSequenceFn(settings);
                 }
             // reset mk and others(?)
             data.marks = [];
             data.zoomArea = FULL_AREA.copy();
             // then reload
-            console.error("fn", settings.fn, "pn", settings.pn);
             fn.redisplay(data);
             }
     };
 
+    // set the fn parameter for the current page index number
+    var setSequenceFn = function(settings) {
+        var pn = settings.pn;
+        if (hasSequence(settings)) {
+             settings.fn = settings.imageSequenceBase == null
+                  ? settings.imageSequence[pn-1].fn
+                  : settings.imageSequenceBase + '/' + settings.imageSequence[pn-1].fn;
+             }
+        return settings.fn
+    };
+
     // plugin installation routine, called by digilib on each plugin object.
     var install = function(plugin) {
         digilib = plugin;
@@ -110,12 +128,24 @@
         // monkey patch for the original action in jquery.digilib.js
         digilib.fn.gotoPage = actions.gotoPage;
         // install event handlers
+        $data.bind('unpack', handleUnpack);
         $data.bind('setup', handleSetup);
         $data.bind('update', handleUpdate);
         $data.bind('redisplay', handleRedisplay);
         $data.bind('dragZoom', handleDragZoom);
     };
 
+    // set parameters for the first image to show
+    var handleUnpack = function (evt) {
+        var data = this;
+        var settings = data.settings;
+        if (settings.pn == null) {
+            settings.pn = '1';
+            }
+        setSequenceFn(settings);
+        // console.warn("fn", settings.fn, "pn", settings.pn);
+        settings.suppressParamNames = ['pt', 'fn'];
+    };
 
     var handleSetup = function (evt) {
         console.debug("sequence: handleSetup");
@@ -128,8 +158,9 @@
     };
 
     var handleRedisplay = function (evt) {
-        console.debug("sequence: handleRedisplay");
         var data = this;
+        var settings = data.settings;
+        // console.warn("fn", settings.fn, "pn", settings.pn);
     };
 
     var handleDragZoom = function (evt, zoomArea) {