changeset 1339:8a0cdf624dc2

refactored the creation of drag handles for shapes
author hertzhaft
date Sun, 01 Feb 2015 15:40:29 +0100
parents 3da1ca0a33d9
children 758036e8e8ed
files webapp/src/main/webapp/jquery/jquery.digilib.vector.js
diffstat 1 files changed, 26 insertions(+), 76 deletions(-) [+]
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.vector.js	Sun Feb 01 14:58:22 2015 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.vector.js	Sun Feb 01 15:40:29 2015 +0100
@@ -341,6 +341,26 @@
         var style = props['style'];
         var coords = shape.geometry.coordinates;
         var gt = shape.geometry.type;
+        //create handles for a shape.
+        var createHandles = function (shape) {
+            if (!shape.properties.editable) { return };
+            var $handles = [];
+            shape.$vertexElems = $handles;
+            var coords = shape.geometry.coordinates;
+            // create handle element from a coordinate pair
+            var createHandle = function (i, coord) {
+                var p = trafo.transform(geom.position(coord));
+                var $handle = $(svgElement('rect', {
+                    'x': p.x-hs/2, 'y': p.y-hs/2, 'width': hs, 'height': hs,
+                    'stroke': 'darkgrey', 'stroke-width': 1, 'fill': 'none',
+                    'class': css+'svg-handle', 'style': 'pointer-events:all'}));
+                $handles.push($handle);
+                $handle.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, i));
+                $svg.append($handle);
+                };
+            $.each(coords, createHandle);
+            };
+        // render the shape
         if (gt === 'Point') {
             /*
              * Point
@@ -371,21 +391,7 @@
                 'stroke': stroke, 'stroke-width': strokeWidth, 'style': style}));
             shape.$elem = $elem;
             $svg.append($elem);
-            if (props.editable) {
-                var $e1 = $(svgElement('rect', {
-                    'x': p1.x-hs/2, 'y': p1.y-hs/2, 'width': hs, 'height': hs,
-                    'stroke': 'darkgrey', 'stroke-width': 1, 'fill': 'none',
-                    'class': css+'svg-handle', 'style': 'pointer-events:all'}));
-                var $e2 = $(svgElement('rect', {
-                    'x': p2.x-hs/2, 'y': p2.y-hs/2, 'width': hs, 'height': hs,
-                    'stroke': 'darkgrey', 'stroke-width': 1, 'fill': 'none',
-                    'class': css+'svg-handle', 'style': 'pointer-events:all'}));
-                var $vertexElems = [$e1, $e2];
-                shape.$vertexElems = $vertexElems;
-                $svg.append($vertexElems);
-                $e1.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, 0));
-                $e2.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, 1));
-            }
+            createHandles(shape);
         } else if (gt === 'Rectangle') {
             /*
              * Rectangle
@@ -401,21 +407,7 @@
                 'fill': fill, 'style': style}));
             shape.$elem = $elem;
             $svg.append($elem);
-            if (props.editable) {
-                var $e1 = $(svgElement('rect', {
-                    'x': p1.x-hs/2, 'y': p1.y-hs/2, 'width': hs, 'height': hs,
-                    'stroke': 'darkgrey', 'stroke-width': 1, 'fill': 'none',
-                    'class': css+'svg-handle', 'style': 'pointer-events:all'}));
-                var $e2 = $(svgElement('rect', {
-                    'x': p2.x-hs/2, 'y': p2.y-hs/2, 'width': hs, 'height': hs,
-                    'stroke': 'darkgrey', 'stroke-width': 1, 'fill': 'none',
-                    'class': css+'svg-handle', 'style': 'pointer-events:all'}));
-                var $vertexElems = [$e1, $e2];
-                shape.$vertexElems = $vertexElems;
-                $svg.append($vertexElems);
-                $e1.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, 0));
-                $e2.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, 1));
-            }
+            createHandles(shape);
         } else if (gt === 'Polygon') {
             /*
              * Polygon
@@ -431,21 +423,7 @@
                 'fill': fill, 'style': style}));
             shape.$elem = $elem;
             $svg.append($elem);
-            if (props.editable) {
-                var $vertexElems = [];
-                shape.$vertexElems = $vertexElems;
-                for (var i in ps) {
-                    var p = ps[i];
-                    var $vertexElem = $(svgElement('rect', {
-                        'x': p.x-hs/2, 'y': p.y-hs/2, 'width': hs, 'height': hs,
-                        'stroke': 'darkgrey', 'stroke-width': 1, 'fill': 'none',
-                        'class': css+'svg-handle', 'style': 'pointer-events:all'}));
-                    $vertexElems[i] = $vertexElem;
-                    // getVertexDragHandler needs shape.$vertexElems
-                    $vertexElem.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, i));
-                }
-                $svg.append($vertexElems);
-            }
+            createHandles(shape);
         } else if (gt === 'LineString') {
             /*
              * Polyline
@@ -461,21 +439,7 @@
                 'fill': 'none', 'style': style}));
             shape.$elem = $elem;
             $svg.append($elem);
-            if (props.editable) {
-                var $vertexElems = [];
-                shape.$vertexElems = $vertexElems;
-                for (var i in ps) {
-                    var p = ps[i];
-                    var $vertexElem = $(svgElement('rect', {
-                        'x': p.x-hs/2, 'y': p.y-hs/2, 'width': hs, 'height': hs,
-                        'stroke': 'darkgrey', 'stroke-width': 1, 'fill': 'none',
-                        'class': css+'svg-handle', 'style': 'pointer-events:all'}));
-                    $vertexElems[i] = $vertexElem;
-                    // getVertexDragHandler needs shape.$vertexElems
-                    $vertexElem.one('mousedown.dlVertexDrag', getVertexDragHandler(data, shape, i));
-                }
-                $svg.append($vertexElems);
-            }
+            createHandles(shape);
         } else if (gt === 'Circle') {
             /*
              * Circle
@@ -489,21 +453,7 @@
                 'style': style}));
             shape.$elem = $elem;
             $svg.append($elem);
-            if (props.editable) {
-                var $e1 = $(svgElement('rect', {
-                    'x': p1.x-hs/2, 'y': p1.y-hs/2, 'width': hs, 'height': hs,
-                    'stroke': 'darkgrey', 'stroke-width': 1, 'fill': 'none',
-                    'class': css+'svg-handle', 'style': 'pointer-events:all'}));
-                var $e2 = $(svgElement('rect', {
-                    'x': p2.x-hs/2, 'y': p2.y-hs/2, 'width': hs, 'height': hs,
-                    'stroke': 'darkgrey', 'stroke-width': 1, 'fill': 'none',
-                    'class': css+'svg-handle', 'style': 'pointer-events:all'}));
-                var $vertexElems = [$e1, $e2];
-                shape.$vertexElems = $vertexElems;
-                $svg.append($vertexElems);
-                $e1.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, 0));
-                $e2.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, 1));
-            }
+            createHandles(shape);
         } else {
         	console.error("Unable to render shape type:", gt);
         	return;
@@ -760,7 +710,7 @@
         // start by clicking
         $overlayDiv.one('mousedown.dlShape', shapeStart);
     };
-    
+
     /**
      * create a SVG element with attributes.
      *