(www-display-object-desc):
authorMORIOKA Tomohiko <tomo.git@chise.org>
Thu, 9 Jun 2016 15:48:01 +0000 (00:48 +0900)
committerMORIOKA Tomohiko <tomo.git@chise.org>
Thu, 9 Jun 2016 15:48:01 +0000 (00:48 +0900)
- For each image segment, add link to the corresponding original image
  with zooming.
- Implement zooming feature for `image-resource' genre.
- Use HNG-card page of EsT instead of HNG-card image as link from HNG
  glyph-images.
(www-batch-view-smart): Support "...$zoom-xywh=" modifier for
`image-resource' genre.

cwiki-view.el

index 3ce51b5..8f55658 100644 (file)
@@ -68,7 +68,8 @@ size=\"64\" maxlength=\"256\" value=\"%s\">
        without-header
        logical-feature chise-wiki-displayed-features
        parents
-       GlyphWiki-id HNG-card ret object-spec)
+       GlyphWiki-id HNG-card ret object-spec
+       width height base-image x y w h)
     (if (eq level 0)
        (setq level 1
              without-header nil)
@@ -200,10 +201,56 @@ li { margin: 0 0 0 2em; }
        ((eq genre 'image-resource)
        (princ
         (if (setq ret (concord-object-get object '=location@iiif))
-            (if (concord-object-get object 'image-offset-x)
-                (format "<img alt=\"%s\" src=\"%s\" />"
+            (if (setq base-image
+                      (car (concord-object-get object '<-image-segment)))
+                (format "<a href=\"%s...$zoom-xywh=%d,%d,%d,%d\"
+><img alt=\"%s\" src=\"%s\" /></a>"
+                        (www-uri-encode-object base-image)
+                        (concord-object-get object 'image-offset-x)
+                        (concord-object-get object 'image-offset-y)
+                        (concord-object-get object 'image-width)
+                        (concord-object-get object 'image-height)
                         ret ret)
-              (format "<div id=\"openseadragon1\"
+              (if (and image-selection
+                       (string-match "\\([0-9]+\\),\\([0-9]+\\),\\([0-9]+\\),\\([0-9]+\\)" image-selection))
+                  (progn
+                    (setq x (string-to-int (match-string 1 image-selection))
+                          y (string-to-int (match-string 2 image-selection))
+                          w (string-to-int (match-string 3 image-selection))
+                          h (string-to-int (match-string 4 image-selection)))
+                    (setq width (float
+                                 (concord-object-get object 'image-width)))
+                     ;; (setq height (float
+                     ;;               (concord-object-get object 'image-height)))
+                    (format "<div id=\"openseadragon1\"
+ style=\"width: 800px; height: 600px;\"></div>
+
+<script type=\"text/javascript\">
+    var viewer;
+    viewer = OpenSeadragon({
+        id: \"openseadragon1\",
+        prefixUrl: \"http://hng.chise.org/openseadragon/images/\",
+        preserveViewport:   true,
+        visibilityRatio:    1,
+        minZoomLevel:       1,
+        defaultZoomLevel:   1,
+        sequenceMode:       true,
+        tileSources:   [ \"%s/info.json\" ]
+    });
+    viewer.addHandler('open', function () {
+      var newBounds = new OpenSeadragon.Rect( %f, %f, %f, %f, 0 );
+      viewer.viewport.fitBounds(newBounds, true);
+      viewer.viewport.applyConstraints();
+    });
+</script>
+"
+                          ret
+                          (/ x width)
+                          (/ y width)
+                          (/ w width)
+                          (/ h width)
+                          ))
+                (format "<div id=\"openseadragon1\"
  style=\"width: 800px; height: 600px;\"></div>
 
 <script type=\"text/javascript\">
@@ -219,7 +266,7 @@ li { margin: 0 0 0 2em; }
     });
 </script>
 "
-                      ret))
+                        ret)))
           (setq ret (concord-object-get object '=location))
           (format "<img alt=\"%s\" src=\"%s\" />"
                   ret ret)))
@@ -242,10 +289,10 @@ style=\"height: 480px;\" />"
                   (est-format-object object 'readable)))
        (setq HNG-card
              (if (string-match
-                  "<img alt=\"HNG\\([0-9]+\\)-\\([0-9]+\\)\"" ret)
-                 (format "HNG/%s/cards/%s.jpg"
-                         (match-string 1 ret)
-                         (match-string 2 ret))))
+                  "<img alt=\"HNG\\([0-9]+\\)-\\([0-9]+\\)[a-z]?\"" ret)
+                 (format "hng-card/rep.id=%d-%d"
+                         (string-to-int (match-string 1 ret))
+                         (string-to-int (match-string 2 ret)))))
        (princ
         (format "<h%d>%s%s</h%d>\n"
                 level
@@ -260,7 +307,7 @@ style=\"height: 480px;\" />"
                   )
                  (HNG-card
                   (format
-                   "<a href=\"http://hng.chise.org/images/%s\">%s</a>"
+                   "<a href=\"../%s\">%s</a>"
                    HNG-card ret)
                   )
                  (t ret))
@@ -713,10 +760,18 @@ size=\"30\" maxlength=\"30\" value=\"%s\" />"
                               ret (substring cell (match-end 0)))
                         (cons
                          (intern (decode-uri-string genre 'utf-8-mcs-er))
-                         (if (string-match "/feature=" ret)
-                             (list (substring ret 0 (match-beginning 0))
-                                   (substring ret (match-end 0)))
-                           (list ret))))
+                         (cond
+                          ((string-match "/feature=" ret)
+                           (list (substring ret 0 (match-beginning 0))
+                                 (substring ret (match-end 0)))
+                           )
+                          ((string-match "...$zoom-xywh=" ret)
+                           (list (substring ret 0 (match-beginning 0))
+                                 nil
+                                 (substring ret (match-end 0)))
+                           )
+                          (t
+                           (list ret)))))
                     (list (decode-uri-string cell 'utf-8-mcs-er)))
                   ;; (setq ret (split-string cell "/"))
                   ;; (cons (intern
@@ -794,7 +849,7 @@ size=\"30\" maxlength=\"30\" value=\"%s\" />"
                (t
                 (www-display-object-desc
                  (car ret) (nth 1 ret) (nth 2 ret)
-                 nil
+                 (nth 3 ret)
                  lang nil
                  (eq mode 'simple))
                 ))