From 814ec22fc6b0d57dc7b4873a1fbe94b7851ebb9f Mon Sep 17 00:00:00 2001
From: Toke Eskildsen <te@ekot.dk>
Date: Fri, 27 Sep 2013 12:49:21 +0200
Subject: [PATCH] Introduced dragonscale.html for performance testing of
 multiple live OpenSeadragons. Not very flexible at this point

---
 dragonscale.html | 136 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 136 insertions(+)
 create mode 100644 dragonscale.html

diff --git a/dragonscale.html b/dragonscale.html
new file mode 100644
index 0000000..6b840ed
--- /dev/null
+++ b/dragonscale.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <!-- Tests performance of multiple, potentially active, OpenSeadragons.
+         No sample data due to immaterial rights, sorry.
+         Adjust "scale_tiles" and "6448" and "9101" to your own tile data.
+    -->
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Dragon Scale</title>
+    <link rel="stylesheet" type="text/css" href="quack.css" />
+    <script src="openseadragon.min.js"></script>
+    <script>
+        var dragons = [];
+        var springTime = 1500; // OpenSeadragon default
+        var triggerTime = 300; // Should be < springTime / dragons.length but beware performance
+        var triggerCount = 0;
+
+        // Add count dragons to the page
+        function add(count) {
+            for (var i = 0 ; i < count ; i++) {
+                // Add div
+                var den = document.getElementById('dragonden');
+                var newDragonDiv = document.createElement('div');
+                newDragonDiv.setAttribute('id', 'dragon' + dragons.length);
+                newDragonDiv.setAttribute('class', 'openseadragon');
+                den.appendChild(newDragonDiv);
+
+                // Assign dragon
+                var dragon = OpenSeadragon({
+                id:             "dragon" + dragons.length,
+                maxZoomLevel:   16,
+                animationTime:  1.5,
+                zoomPerSecond:  1.5,
+                showNavigator:  false,
+                wrapHorizontal: false,
+                tileSources: {
+                    Image: {
+                    xmlns:    "http://schemas.microsoft.com/deepzoom/2008",
+                    Url:      "scale_tiles/",
+                    Format:   "png",
+                    Overlap:  "4",
+                    TileSize: "256",
+                    Size: {
+                        Width:  "6448",
+                        Height: "9101"
+                    }
+                }
+                }
+                });
+                dragons[dragons.length] = dragon;
+            }
+        }
+
+        // Add count dragons to the page
+        function removeD(count) {
+            count = Math.min(count, dragons.length);
+            for (var i = 0 ; i < count ; i++) {
+                var dragonDiv = document.getElementById("dragon" + (dragons.length-1));
+                document.title = dragonDiv;
+                dragonDiv.parentNode.removeChild(dragonDiv);
+                dragons.splice(dragons.length-1, 1);
+            }
+        }
+
+        // Reset to default views
+        function reset() {
+            for (var i = 0 ; i < dragons.length ; i++) {
+                var dragon = dragons[i];
+                dragon.viewport.goHome(true);
+            }
+        }
+
+        function pokeDragon(dragon) {
+            var zoom = Math.random() * 8 + 1;
+            var origo = dragon.viewport.getCenter(false);
+            var x = origo.x;
+            var y = origo.y;
+            dragon.viewport.zoomTo(zoom, new OpenSeadragon.Point(x, y), false);
+            dragon.viewport.panTo(new OpenSeadragon.Point(Math.random(), Math.random()));
+        }
+
+        // Zoom in/out a little bit
+        function motion() {
+            for (var i = 0 ; i < dragons.length ; i++) {
+                pokeDragon(dragons[i]);
+            }
+        }
+
+        function live() {
+            if (document.getElementById('liveCheck').checked) {
+                every = springTime / triggerTime; // what if this is not a whole number?
+                for (var i = triggerCount ; i < dragons.length ; i += every) {
+                    pokeDragon(dragons[i]);
+                }
+                triggerCount++;
+                if (triggerCount >= every) {
+                    triggerCount = 0;
+                }
+            }
+        }
+
+        function init() {
+            add(1);
+            window.setInterval("live()", triggerTime);
+        }
+    </script>
+    <style>
+        .openseadragon {
+           width: 200px;
+           height: 300px;
+           border: 2px solid #8888ff;
+           margin-right: 1em;
+           margin-bottom: 1em;
+           float: left;
+        }
+    </style>
+</head>
+
+<body class="previewpage" onLoad="init();">
+<h1>Dragon Scale</span></h1>
+<p>OpenSeadragon scaling test</p>
+<div class="moreless">
+<input type="button" onClick="removeD(10);" value="-10" />
+<input type="button" onClick="removeD(1);" value="-1" />
+<input type="button" onClick="add(1);" value="+1" />
+<input type="button" onClick="add(10);" value="+10" />
+<input type="button" onClick="motion();" value="poke" />
+<input type="checkbox" id="liveCheck">live</input>
+</div>
+</p>
+
+<div id="dragonden"></div>
+
+</body>
+</html>
-- 
GitLab