changeset 1303:7b18c8e6ab31 rc_create_polys

clean up.
author robcast
date Wed, 21 Jan 2015 10:45:54 +0100
parents fe413f88f3b6
children 94ca844425fe
files webapp/src/main/webapp/jquery/jquery.digilib.vector.js
diffstat 1 files changed, 36 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.vector.js	Tue Jan 20 18:12:21 2015 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.vector.js	Wed Jan 21 10:45:54 2015 +0100
@@ -317,7 +317,11 @@
         var stroke = props['stroke'] || settings.defaultStroke;
         var strokeWidth = props['stroke-width'] || settings.defaultStrokeWidth;
         var fill = props['fill'] || settings.defaultFill;
-        var coords = shape.geometry.coordinates;
+        var coords = /**
+         * @author casties
+         *
+         */
+        shape.geometry.coordinates;
         var gt = shape.geometry.type;
         if (gt === 'Line') {
             /*
@@ -440,6 +444,14 @@
         }
     };
 
+    /**
+     * remove rendered shape from screen.
+     * 
+     * Removes the SVG elements from the layer.
+     * 
+     * @param data
+     * @param shape
+     */
     var unrenderShape = function (data, shape) {
     	// remove vertex handles
     	if (shape.$vertexElems != null) {
@@ -518,11 +530,9 @@
         };
 
         var dragEnd = function (evt) {
-        	console.debug("dragend!");
             pt = geom.position(evt);
             if ((pt.distance(pt0) < 5) && evt.type === 'mouseup') {
             	// not drag but click to start
-            	console.debug("dragend - not moved");
                 return false;
             }
             pt.clipTo(imgRect);
@@ -587,20 +597,25 @@
                 $overlayDiv.remove();
                 return false;
             }
+            // save editable state and set to non-editable
+            var isShapeEditable = false;
+            if (shape.properties != null) {
+            	isShapeEditable = shape.properties.editable;
+            	shape.properties.editable = false;
+            } else {
+                shape.properties = {'editable' : false};
+            }
             // draw shape
             renderShape(data, shape, layer);
             // vertex drag end handler
             var vertexDragDone = function (data, newshape, newevt) {
-                console.debug("new shape. evtype:", newevt.type, "shape:", newshape);
-                console.debug("coords", newshape.geometry.coordinates.toString());
+                var coords = newshape.geometry.coordinates;
             	if (shapeType === 'LineString' || shapeType === 'Polygon') {
             		if (newevt.type === 'mouseup') {
 	            		// single click adds line to LineString/Polygon
 	            		unrenderShape(data, newshape);
 	            		// copy last vertex as starting point
-	            		var vtx = newshape.geometry.coordinates[vtxidx];
-	            		newshape.geometry.coordinates.push(vtx.slice());
-	                    console.debug("new coords", newshape.geometry.coordinates.toString());
+	            		coords.push(coords[vtxidx].slice());
 	            		vtxidx += 1;
 	                    // draw shape
 	                    renderShape(data, newshape, layer);            		
@@ -608,19 +623,25 @@
 	            		getVertexDragHandler(data, newshape, vtxidx, vertexDragDone)(newevt);
 	            		return false;
             		} else if (newevt.type === 'dblclick') {
-            			// remove last vertex from mouseup
-            			console.debug("dblclick");
-	            		unrenderShape(data, newshape);
-            			newshape.geometry.coordinates.pop();
-	                    console.debug("new coords", newshape.geometry.coordinates.toString());
-	                    renderShape(data, newshape, layer);            		            			
+            			// double click ends Linestring/Polygon
+	            		if (coords[vtxidx][0] === coords[vtxidx-1][0] && 
+	            				coords[vtxidx][1] === coords[vtxidx-1][1]) {
+	            			unrenderShape(data, newshape);
+	            			// remove duplicate last vertex (from mouseup)
+	            			coords.pop();
+		                    renderShape(data, newshape, layer);            		            			
+	            		}
             		} else {
             			console.error("unknown event type!");
             			return false;
             		}
             	}
-            	console.debug("final shape:", newshape);
                 // dragging vertex done
+            	// re-set editable
+            	unrenderShape(data, newshape);
+            	shape.properties.editable = isShapeEditable;
+            	renderShape(data, newshape, layer);
+            	// save shape
                 data.shapes.push(newshape);
                 $overlayDiv.remove();
                 if (onComplete != null) {