changeset 1242:b5ceeeae3582

measure plugin, first check-in
author hertzhaft
date Wed, 15 Jan 2014 19:19:49 +0100
parents 34c68ecef8cf
children e69b80f99a00
files webapp/src/main/webapp/jquery/jquery-test-measure.html webapp/src/main/webapp/jquery/jquery.digilib.measure.css webapp/src/main/webapp/jquery/jquery.digilib.measure.js
diffstat 3 files changed, 969 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webapp/src/main/webapp/jquery/jquery-test-measure.html	Wed Jan 15 19:19:49 2014 +0100
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" >
+    <head>
+        <title>jquery.digilib.svg.js test</title>
+
+        <script type="text/javascript" src="jquery.js"></script>
+        <script type="text/javascript" src="jquery.cookie.js"></script>
+        <script type="text/javascript" src="jquery.digilib.js"></script>
+        <script type="text/javascript" src="jquery.digilib.geometry.js"></script>
+        <script type="text/javascript" src="jquery.digilib.arrows.js"></script>
+        <script type="text/javascript" src="jquery.range.js"></script>
+        <link rel="stylesheet" type="text/css" href="jquery.range.css"></link>
+        <script type="text/javascript" src="jquery.digilib.buttons.js"></script>
+        <script type="text/javascript" src="jquery.digilib.dialogs.js"></script>
+        <script type="text/javascript" src="jquery.digilib.sliders.js"></script>
+        <script type="text/javascript" src="jquery.digilib.birdseye.js"></script>
+        <script type="text/javascript" src="jquery.digilib.marks.js"></script>
+        <script type="text/javascript" src="jquery.digilib.regions.js"></script>
+        <link rel="stylesheet" type="text/css" href="jquery.digilib.css"></link>
+        <link rel="stylesheet" type="text/css" href="jquery.digilib.measure.css"></link>
+        <script type="text/javascript" src="jquery.digilib.vector.js"></script>
+        <script type="text/javascript" src="jquery.digilib.measure.js"></script>
+
+        <script type="text/javascript">
+            $(document).ready(function(){
+                var opts = {
+                    interactionMode : 'fullscreen',
+                    showRegionNumbers : true
+                    };
+                var $div = $('div#digilib');
+                $div.digilib(opts);
+                DIGILIB = function (action) {
+                    return $div.digilib(action);
+                    };
+            });
+        </script>
+    </head>
+
+    <body>
+
+        <div id="digilib">
+            <p>digilib doesn't work! Please switch on Javascript or notify the server administrator!</p>
+            <img src="http://digilib.berlios.de/images/digilib-logo-big.png" />
+        </div>
+
+        <a href="javascript: DIGILIB('test')">test</a>
+
+    </body>
+</html>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.measure.css	Wed Jan 15 19:19:49 2014 +0100
@@ -0,0 +1,17 @@
+/* 
+ * CSS style file for jQuery digilib
+ *
+ * Martin Raspe, Robert Casties, 26.3.2012
+ */
+
+div#measure-toolbar {
+    display: none;
+	border: 2px solid aqua;
+	background-color: silver;
+    padding: 5px;
+    position: absolute;
+}
+
+option.dl-units {
+    margin-left: 10px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.measure.js	Wed Jan 15 19:19:49 2014 +0100
@@ -0,0 +1,902 @@
+/*
+ * #%L
+ * digilib SVG plugin
+ * %%
+ * Copyright (C) 2012 - 2013 Bibliotheca Hertziana, MPIWG Berlin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as 
+ * published by the Free Software Foundation, either version 3 of the 
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Lesser Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Lesser Public 
+ * License along with this program.  If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ * Authors: Martin Raspe, Robert Casties, 2012-2014
+ */
+/**
+ * digilib SVG plugin (display a SVG on top if scaler image and zoom/rotate/mirror etc.)
+**/ 
+
+/* jslint browser: true, debug: true, forin: true
+*/
+
+(function($) {
+
+    // the digilib object
+    var digilib = null;
+    // the normal zoom area
+    var FULL_AREA = null;
+
+    // the functions made available by digilib
+    var fn = {
+        // dummy function to avoid errors, gets overwritten by buttons plugin
+        highlightButtons : function () {
+            console.debug('svg: dummy function - highlightButtons');
+            }
+        };
+    // affine geometry plugin
+    var geom = null;
+    // convenience variable, set in init()
+    var CSS = '';
+
+    var UNITS = {
+        "comment" : [
+          "Angaben nach:",
+          "Klimpert, Richard: Lexikon der Münzen, Maße, Gewichte, Zählarten und Zeitgrößen aller Länder der Erde 2) Berlin 1896 (Reprint Graz 1972)",
+          "Doursther, Horace: Dictionnaire universel des poids et mesures anciens et modernes. Paris 1840 (Reprint Amsterdam 1965)"
+          ],
+        "sections" : [{
+            "name"  : "Längenmaße: metrisch",
+            "group" : "1",
+            "units" : [{
+				"name" : "m",
+				"factor" : "1"
+				},
+				{
+				"name" : "mm",
+				"factor" : "0.001"
+				},
+				{
+				"name" : "cm",
+				"factor" : "0.01"
+				},
+				{
+				"name" : "dm",
+				"factor" : "0.1"
+				},
+				{
+				"name" : "km",
+				"factor" : "1000"
+				}]
+            },
+            {
+            "name"  : "Längenmaße: nautisch",
+            "group" : "1",
+            "units" : [{
+				"name" : "geographische Meile",
+				"factor" : "7420"
+				},
+				{
+				"name" : "Seemeile",
+				"factor" : "1854.965"
+				},
+				{
+				"name" : "fathom",
+				"factor" : "1.828782"
+				},
+				{
+				"name" : "cable",
+				"factor" : "182.8782"
+				},
+				{
+				"name" : "league",
+				"factor" : "5564.895"
+				}]
+            },
+            {
+            "name"  : "Längenmaße: England",
+            "group" : "1",
+            "units" : [{
+				"name" : "foot",
+				"factor" : "0.304797",
+				"subunits" : "12"
+				},
+				{
+				"name" : "inch",
+				"factor" : "0.02539975"
+				},
+				{
+				"name" : "yard",
+				"factor" : "0.914391",
+				"subunits" : "3"
+				},
+				{
+				"name" : "pole",
+				"factor" : "5.0291505",
+				"subunits" : "11"
+				},
+				{
+				"name" : "chain",
+				"factor" : "20.116602",
+				"subunits" : "4"
+				},
+				{
+				"name" : "furlong",
+				"factor" : "201.16602"
+				},
+				{
+				"name" : "mile",
+				"factor" : "1609.32816",
+				"subunits" : "8"
+				}]
+            },
+            {
+            "name"  : "Längenmaße: Italien",
+            "group" : "1",
+            "units" : [{
+				"name" : "palmo d'architetto (Rom)",
+				"factor" : "0.223425",
+				"subunits" : "12"
+				},
+				{
+				"name" : "braccio (Florenz)",
+				"factor" : "0.5836"
+				},
+				{
+				"name" : "braccio (Mailand)",
+				"factor" : "0.5949"
+				},
+				{
+				"name" : "canna d'architetto (Rom)",
+				"factor" : "2.23425"
+				},
+				{
+				"name" : "canna di commercio (Rom)",
+				"factor" : "1.9920"
+				},
+				{
+				"name" : "canna d'architetto (Florenz)",
+				"factor" : "2.9180"
+				},
+				{
+				"name" : "canna di commercio (Florenz)",
+				"factor" : "2.3344"
+				},
+				{
+				"name" : "canna (Neapel)",
+				"factor" : "2.0961"
+				},
+				{
+				"name" : "miglio (Lombardei)",
+				"factor" : "1784.808"
+				},
+				{
+				"name" : "miglio (Neapel)",
+				"factor" : "1855.110"
+				},
+				{
+				"name" : "miglio (Rom)",
+				"factor" : "1489.50"
+				},
+				{
+				"name" : "minuta (Rom)",
+				"factor" : "0.00372375"
+				},
+				{
+				"name" : "oncia (Rom)",
+				"factor" : "0.01861875"
+				},
+				{
+				"name" : "oncia (Mailand)",
+				"factor" : "0.49575"
+				},
+				{
+				"name" : "palmo di commercio (Rom)",
+				"factor" : "0.249"
+				},
+				{
+				"name" : "palmo (Florenz)",
+				"factor" : "0.2918"
+				},
+				{
+				"name" : "piede (Brescia)",
+				"factor" : "0.471"
+				},
+				{
+				"name" : "piede (Carrara)",
+				"factor" : "0.2933"
+				},
+				{
+				"name" : "piede (Como)",
+				"factor" : "0.4512"
+				},
+				{
+				"name" : "piede (Modena)",
+				"factor" : "0.523048"
+				},
+				{
+				"name" : "piede (Reggio Em.)",
+				"factor" : "0.530898"
+				},
+				{
+				"name" : "piede (Venedig)",
+				"factor" : "0.347735"
+				},
+				{
+				"name" : "piede (Vicenza)",
+				"factor" : "0.3574"
+				},
+				{
+				"name" : "piede (Verona)",
+				"factor" : "0.3429"
+				},
+				{
+				"name" : "piede (Rom)",
+				"factor" : "0.297587"
+				},
+				{
+				"name" : "piede Lombardo",
+				"factor" : "0.435185"
+				},
+				{
+				"name" : "piede liprando (Turin)",
+				"factor" : "0.51377"
+				},
+				{
+				"name" : "piede manuale (Turin)",
+				"factor" : "0.342511"
+				},
+				{
+				"name" : "piede (Neapel, 'palmo')",
+				"factor" : "0.26455"
+				},
+				{
+				"name" : "soldo (Florenz)",
+				"factor" : "0.2918"
+				},
+				{
+				"name" : "trabucco piemontese (Turin)",
+				"factor" : "3.08259"
+				}]
+            },
+            {
+            "name"  : "Längenmaße: Niederlande",
+            "group" : "1",
+            "units" : [{
+				"name" : "voet (Amsterdam)",
+				"factor" : "0.283113"
+				},
+				{
+				"name" : "voet (Antwerpen)",
+				"factor" : "0.2868"
+				},
+				{
+				"name" : "voet (Aelst)",
+				"factor" : "0.2772"
+				},
+				{
+				"name" : "voet (Breda)",
+				"factor" : "0.28413"
+				},
+				{
+				"name" : "voet (Brügge)",
+				"factor" : "0.27439"
+				},
+				{
+				"name" : "voet (Brüssel)",
+				"factor" : "0.2757503"
+				},
+				{
+				"name" : "voet (Groningen)",
+				"factor" : "0.2922"
+				},
+				{
+				"name" : "voet (Haarlem)",
+				"factor" : "0.2858"
+				},
+				{
+				"name" : "voet (Kortrijk)",
+				"factor" : "0.2977"
+				},
+				{
+				"name" : "voet (Tournai)",
+				"factor" : "0.2977"
+				},
+				{
+				"name" : "voet (Utrecht)",
+				"factor" : "0.2683"
+				},
+				{
+				"name" : "voet (Ypern)",
+				"factor" : "0.2739"
+				},
+				{
+				"name" : "pied (Hainaut)",
+				"factor" : "0.2934"
+				},
+				{
+				"name" : "pied St. Hubert (Lüttich)",
+				"factor" : "0.294698"
+				},
+				{
+				"name" : "pied St. Lambert (Lüttich)",
+				"factor" : "0.291796"
+				},
+				{
+				"name" : "pied Ste. Gertrude (Nivelles)",
+				"factor" : "0.27709"
+				},
+				{
+				"name" : "steenvoet (Oudenaerde)",
+				"factor" : "0.2977"
+				},
+				{
+				"name" : "houtvoet (Oudenaerde)",
+				"factor" : "0.292"
+				}]
+            },
+            {
+            "name"  : "Längenmaße: Frankreich",
+            "group" : "1",
+            "units" : [{
+				"name" : "pied du Roi (Paris)",
+				"factor" : "0.32483938497"
+				},
+				{
+				"name" : "pied (Arras)",
+				"factor" : "0.29777"
+				},
+				{
+				"name" : "pied (Cambrai)",
+				"factor" : "0.29777"
+				},
+				{
+				"name" : "Burgundischer Fuß",
+				"factor" : "0.33212"
+				}]
+            },
+            {
+            "name"  : "Längenmaße: Südeuropa",
+            "group" : "1",
+            "units" : [{
+				"name" : "pié de Burgos (Spanien)",
+				"factor" : "0.278635"
+				},
+				{
+				"name" : "pé (Portugal)",
+				"factor" : "0.33"
+				}]
+            },
+            {
+            "name"  : "Längenmaße: deutschspr. Länder",
+            "group" : "1",
+            "units" : [{
+				"name" : "Fuß (Basel)",
+				"factor" : "0.29820"
+				},
+				{
+				"name" : "Fuß (Bayern)",
+				"factor" : "0.2918592"
+				},
+				{
+				"name" : "Fuß (Braunschweig)",
+				"factor" : "0.2853624"
+				},
+				{
+				"name" : "Fuß (Gotha)",
+				"factor" : "0.287622"
+				},
+				{
+				"name" : "Fuß (Hamburg)",
+				"factor" : "0.286575"
+				},
+				{
+				"name" : "Fuß (Hessen)",
+				"factor" : "0.287669"
+				},
+				{
+				"name" : "Fuß (Köln)",
+				"factor" : "0.2876"
+				},
+				{
+				"name" : "Fuß (Mecklenburg)",
+				"factor" : "0.291006"
+				},
+				{
+				"name" : "Fuß (Münster)",
+				"factor" : "0.2908"
+				},
+				{
+				"name" : "Fuß (Pommern)",
+				"factor" : "0.2921"
+				},
+				{
+				"name" : "Fuß (rheinisch)",
+				"factor" : "0.3138535"
+				},
+				{
+				"name" : "Fuß (Sachsen)",
+				"factor" : "0.2831901"
+				},
+				{
+				"name" : "Fuß (Preußen)",
+				"factor" : "0.3138535"
+				},
+				{
+				"name" : "Fuß (Wien)",
+				"factor" : "0.3180807"
+				},
+				{
+				"name" : "Fuß (Württemberg)",
+				"factor" : "0.2864903"
+				},
+				{
+				"name" : "Werkschuh (Frankfurt)",
+				"factor" : "0.2846143"
+				},
+				{
+				"name" : "Meile (Preußen)",
+				"factor" : "7532.485"
+				},
+				{
+				"name" : "Postmeile (Österreich)",
+				"factor" : "7585.937"
+				},
+				{
+				"name" : "Dezimalfuß (Preußen)",
+				"factor" : "0.3766242"
+				}]
+            },
+            {
+            "name"  : "Längenmaße: Osteuropa",
+            "group" : "1",
+            "units" : [{
+				"name" : "Fuß (Böhmen)",
+				"factor" : "0.2964"
+				},
+				{
+				"name" : "Fuß (Mähren)",
+				"factor" : "0.29596"
+				},
+				{
+				"name" : "stopa (Krakauer Fuß)",
+				"factor" : "0.3564"
+				},
+				{
+				"name" : "stopa (Warschauer Fuß)",
+				"factor" : "0.288"
+				},
+				{
+				"name" : "Fuß (Rußland)",
+				"factor" : "0.3556"
+				},
+				{
+				"name" : "arschin",
+				"factor" : "0.7112"
+				},
+				{
+				"name" : "saschen (Faden)",
+				"factor" : "2.133"
+				},
+				{
+				"name" : "werst",
+				"factor" : "1066.8"
+				},
+				{
+				"name" : "milja",
+				"factor" : "7468"
+				}]
+            },
+            {
+            "name"  : "Längenmaße: Antike",
+            "group" : "1",
+            "units" : [{
+				"name" : "pes romanus",
+				"factor" : "0.2945"
+				},
+				{
+				"name" : "pollex (Zoll)",
+				"factor" : "0.0245416667"
+				},
+				{
+				"name" : "digitus (Fingerbreite)",
+				"factor" : "0.01840625"
+				},
+				{
+				"name" : "palmus (Handbreite)",
+				"factor" : "0.073625"
+				},
+				{
+				"name" : "cubitus (Elle)",
+				"factor" : "0.44175"
+				},
+				{
+				"name" : "passus (Doppelschritt)",
+				"factor" : "1.4725"
+				},
+				{
+				"name" : "pertica",
+				"factor" : "2.945"
+				},
+				{
+				"name" : "actus",
+				"factor" : "35.34"
+				},
+				{
+				"name" : "mille passus (Meile)",
+				"factor" : "1472.5"
+				},
+				{
+				"name" : "stadium (600 Fuß)",
+				"factor" : "176.7"
+				},
+				{
+				"name" : "stadium (1/8 Meile)",
+				"factor" : "184.0625"
+				},
+				{
+				"name" : "stadion (Olympia)",
+				"factor" : "192.25"
+				},
+				{
+				"name" : "Fuß (attisch)",
+				"factor" : "0.308"
+				},
+				{
+				"name" : "Fuß (Babylon)",
+				"factor" : "0.35"
+				},
+				{
+				"name" : "Fuß (Delphi)",
+				"factor" : "0.1848"
+				},
+				{
+				"name" : "Fuß (Olympia)",
+				"factor" : "0.32041667"
+				}]
+            },
+            {
+            "name"  : "Fläche",
+            "group" : "4",
+            "units" : [{
+				"name" : "qm",
+				"factor" : "1"
+				},
+				{
+				"name" : "qmm",
+				"factor" : "0.000001"
+				},
+				{
+				"name" : "qcm",
+				"factor" : "0.0001"
+				},
+				{
+				"name" : "qdm",
+				"factor" : "0.01"
+				},
+				{
+				"name" : "Ar",
+				"factor" : "100"
+				},
+				{
+				"name" : "Morgen",
+				"factor" : "2500"
+				},
+				{
+				"name" : "Hektar",
+				"factor" : "10000"
+				},
+				{
+				"name" : "qkm",
+				"factor" : "1000000"
+				},
+				{
+				"name" : "square inch",
+				"factor" : "0.0006452"
+				},
+				{
+				"name" : "square foot",
+				"factor" : "0.09288"
+				},
+				{
+				"name" : "square yard",
+				"factor" : "0.836",
+				"subunits" : "9"
+				},
+				{
+				"name" : "pole (rod, perch)",
+				"factor" : "25.289"
+				},
+				{
+				"name" : "rood",
+				"factor" : "1012",
+				"subunits" : "40"
+				},
+				{
+				"name" : "acre",
+				"factor" : "4048",
+				"subunits" : "4"
+				},
+				{
+				"name" : "square mile",
+				"factor" : "2590000"
+				}]
+            },
+            {
+            "name"  : "Sonstige",
+            "group" : "0",
+            "units" : [{
+				"name" : "Maßstab 1:200",
+				"factor" : "200"
+				},
+				{
+				"name" : "Maßstab",
+				"factor" : "1:100",
+				"add" : "100"
+				},
+				{
+				"name" : "Maßstab 1:75",
+				"factor" : "75"
+				},
+				{
+				"name" : "Maßstab 1:60",
+				"factor" : "60"
+				},
+				{
+				"name" : "Maßstab",
+				"factor" : "1:50",
+				"add" : "50"
+				},
+				{
+				"name" : "Maßstab 1:25",
+				"factor" : "25"
+				},
+				{
+				"name" : "Maßstab 1:20",
+				"factor" : "20"
+				},
+				{
+				"name" : "Maßstab 1:10",
+				"factor" : "10"
+				},
+				{
+				"name" : "Maßstab 1:5",
+				"factor" : "5"
+				},
+				{
+				"name" : "Maßstab 1:3",
+				"factor" : "3"
+				}]
+          }]
+        };
+    var buttons = {
+        toolbar : {
+            onclick : "toolbar",
+            tooltip : "show toolbar",
+            icon : "showregions.png"
+            }
+        };
+
+    var defaults = {
+        // buttonset of this plugin
+        measureButtonSet : ['toolbar'],
+        // unit data
+        units : UNITS,
+        // choice of colors offered by toolbar
+        lineColors : ['white', 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet', 'black'],
+        // default color
+        lineColor : 'white',
+        // color while the line is drawn
+        drawColor : 'green',
+        // color of selected objects
+        selectColor : 'red',
+        // drawing shapes
+        shapes : ['line', 'polyline', 'rectangle', 'square', 'circle', 'arch',
+            'ratio', 'intercolumnium', 'line grid'],
+        // default shape
+        shape : 'line',
+        // measuring unit (index into unit list)
+        unit : 1,
+        // converted unit (index into unit list)
+        converted : 2,
+        // last measured distance 
+        lastDistance : 0,
+        // last measured angle 
+        lastAngle : 0,
+        // maximal denominator for mixed fractions
+        maxDenominator : 20,
+        // number of decimal places for convert results
+        maxDecimals : 3,
+        // show convert result as mixed fraction?
+        showMixedFraction : false,
+        // show angle relative to last line?
+        showRelativeAngle : false,
+        // show distance numbers?
+        showDistanceNumbers : true,
+        // show ratio of rectangle sides?
+        showRectangleRatios : false,
+        // draw line ends as small crosses
+        drawEndPoints : true,
+        // draw mid points of lines
+        drawMidPoints : false,
+        // draw circle centers
+        drawCenters : false,
+        // draw rectangles from the diagonal and one point
+        drawFromDiagonal : false,
+        // draw circles from center
+        drawFromCenter : false,
+        // snap to endpoints
+        snapEndPoints : false,
+        // snap to mid points of lines
+        snapMidPoints : false,
+        // snap to circle centers
+        snapCenters : false,
+        // snap distance (in screen pixels)
+        snapDistance : 5,
+        // keep original object when moving/scaling/rotating
+        keepOriginal : false,
+        // number of copies when drawing grids
+        gridCopies : 10
+        };
+
+    var actions = {
+        toolbar : function(data) {
+            var $toolbar = data.settings.$toolbar;
+            if (!$toolbar) {
+                $toolbar = setupToolbar(data);
+				};
+			$toolbar.toggle();
+            setBottom(data, $toolbar);
+			return;
+            },
+        line : function(data) {
+            //
+            }
+        };
+
+    // load shapes into select element
+    var loadShapes = function(data) {
+        var $t = data.settings.$toolbar;
+        var $shape = $t.find('#measure-shapes');
+        $.each(data.settings.shapes, function(index, name) {
+            var $opt = $('<option value="'+index+'">'+name+'</option>');
+            $shape.append($opt);
+            });
+    };
+
+    // load units into select elements
+    var loadSections = function(data) {
+        var $t = data.settings.$toolbar;
+        var $unit1 = $t.find('#measure-unit1');
+        var $unit2 = $t.find('#measure-unit2');
+        var sections = data.settings.units.sections;
+        $.each(sections, function(index, section) {
+            var $opt = $('<option class="dl-section" disabled="disabled">'+ section.name +'</option>');
+            $unit1.append($opt);
+            $unit2.append($opt.clone());
+            $.each(section.units, function(index, unit) {
+				var $opt = $('<option class="dl-units" value="'+ unit.factor + '">'+ unit.name + '</option>');
+				$opt.data('unit', unit);
+				$unit1.append($opt);
+				$unit2.append($opt.clone());
+				});
+            });
+    };
+
+    var setBottom = function(data, $div) {
+        if ($div == null) return;
+        var h = geom.rectangle($div).height;
+        var s = fn.getFullscreenRect(data);
+        geom.position(0, s.height - h).adjustDiv($div);
+    };
+
+    // setup a div for accessing the main SVG functionality
+    var setupToolbar = function(data) {
+        var html = '\
+            <div id="measure-toolbar">\
+                <button id="measure-draw">M</button>\
+				<select id="measure-shapes"/>\
+				<span class="dl-measure-label">pixel</span>\
+				<span id="measure-pixel" class="measure-number">0.0</span>\
+				<span class="dl-measure-label">factor</span>\
+				<span id="measure-factor" class="dl-measure-number">0.0</span>\
+				<input id="measure-value1" class="dl-measure-input" value="0.0"/>\
+				<span class="measure-label">=</span>\
+				<select id="measure-unit1"/>\
+				<input id="measure-value2" class="dl-measure-input" value="0.0"/>\
+				<span class="dl-measure-label">=</span>\
+				<select id="measure-unit2"/>\
+				<span id="measure-angle" class="dl-measure-number">0.0</span>\
+            </div>';
+        var $toolbar = $(html);
+        data.$elem.append($toolbar);
+        data.settings.$toolbar = $toolbar;
+        loadShapes(data);
+        loadSections(data);
+        return $toolbar;
+        };
+
+    var drawInitial = function ($svg) {
+        console.debug('Measure is ready');
+        };
+
+    var handleSetup = function (evt) {
+        console.debug("measure: handleSetup");
+        // var data = this;
+        // var settings = data.settings;
+    };
+
+    var handleUpdate = function (evt) {
+        console.debug("svg: handleUpdate");
+        // var data = this;
+        // var settings = data.settings;
+    };
+
+    // additional buttons
+    var installButtons = function (data) {
+        var settings = data.settings;
+        var mode = settings.interactionMode;
+        var buttonSettings = settings.buttonSettings[mode];
+        var buttonSet = settings.measureButtonSet;
+        if (buttonSet.length && buttonSet.length > 0) {
+            buttonSettings.measureButtonSet = buttonSet;
+            buttonSettings.buttonSets.push('measureButtonSet');
+            }
+    };
+
+    // plugin installation called by digilib on plugin object.
+    var install = function (plugin) {
+        digilib = plugin;
+        console.debug('installing measure plugin. digilib:', digilib);
+        fn = digilib.fn;
+        // import geometry classes
+        geom = fn.geometry;
+        // add defaults, actions, buttons
+        $.extend(true, digilib.defaults, defaults);
+        $.extend(digilib.actions, actions);
+        $.extend(true, digilib.buttons, buttons);
+        // export functions
+        // fn.test = test;
+    };
+
+    // plugin initialization
+    var init = function (data) {
+        console.debug('initialising svg plugin. data:', data);
+        var settings = data.settings;
+        CSS = settings.cssPrefix;
+        FULL_AREA  = geom.rectangle(0, 0, 1, 1);
+        // install event handlers
+        var $data = $(data);
+        $data.on('setup', handleSetup);
+        $data.on('update', handleUpdate);
+        // install region buttons if user defined regions are allowed
+        if (digilib.plugins.buttons != null) {
+            installButtons(data);
+        }
+    };
+
+    // plugin object with name and init
+    // shared objects filled by digilib on registration
+    var pluginProperties = {
+            name : 'measure',
+            install : install,
+            init : init,
+            buttons : {},
+            actions : {},
+            fn : {},
+            plugins : {}
+    };
+
+    if ($.fn.digilib == null) {
+        $.error("jquery.digilib.measure must be loaded after jquery.digilib!");
+    } else {
+        $.fn.digilib('plugin', pluginProperties);
+    }
+})(jQuery);