source: gs3-extensions/map-editor/DrawingManager/historyManager.js@ 32724

Last change on this file since 32724 was 32724, checked in by ak19, 5 years ago

Potential fix for a history bug found after resizing rectangles and circles

File size: 7.8 KB
Line 
1var prevOverlays = [];
2var presentOverlays = [];
3var undoneOverlays = [];
4var enableSelectionFeature = false;
5
6function undo() {
7
8 for (var i = 0; i < overlays.length; i++) {
9 overlays[i].setMap(null);
10
11 }
12 if (prevOverlays.length != 0) {
13 selectedShapes = [];
14 overlays = [];
15 undoneOverlaysPush();
16 var prev_overlay = prevOverlays.pop();
17
18 if(prev_overlay.length > 0) {
19 for (var i = 0; i < prev_overlay.length; i++) {
20 overlays[i] = prev_overlay[i];
21 overlays[i].setMap(map);
22 }
23 }
24
25
26 }
27
28 //Deactivated at the moment
29 //if (enableSelectionFeature) {
30 // selectedShapes = [];
31 // var i = 0;
32 // var lastEntry = prevOverlays[prevOverlays.length - 1][i];
33 // console.log(prevOverlays[prevOverlays.length - 1].length);
34 //
35 // for (var i = 0; i < lastEntry.length; i++) {
36 // selectedShapes.push(prevOverlays)
37 // console.log("comes here");
38 // }
39 //
40 //}
41}
42
43function redo() {
44
45 if (undoneOverlays.length != 0) {
46 selectedShapes = [];
47 for (var i = 0; i < overlays.length; i++) {
48 overlays[i].setMap(null);
49 }
50 overlays = [];
51 var lastEntry = undoneOverlays[undoneOverlays.length - 1];
52 for (var i = 0; i < lastEntry.length; i++) {
53 overlays[i] = lastEntry[i];
54 overlays[i].setMap(map);
55 }
56 var conditionPrevious = presentOverlays[presentOverlays.length - 1] !== undefined ;
57
58 if (conditionPrevious){
59 prevOverlays.push(presentOverlays[0]);
60 }
61
62 presentOverlays = [];
63 //console.log("last undone", undoneOverlays[undoneOverlays.length -1]);
64 presentOverlays.push(undoneOverlays[undoneOverlays.length - 1]);
65 undoneOverlays.pop();
66
67 }
68
69}
70
71function clonePath(path) {
72 var clone_path = [];
73
74 for (var i = 0; i < path.length; i++) {
75 var lati = path.getAt(i).lat();
76 var lngi = path.getAt(i).lng();
77 clone_lat_lng = {
78 lat: lati,
79 lng: lngi
80 };
81 clone_path.push(clone_lat_lng);
82 }
83
84 return clone_path;
85}
86
87function clonePolyline(polyline) {
88 var path = polyline.getPath();
89 var geodesic = polyline.geodesic;
90 var strokeColor = polyline.strokeColor;
91 var strokeOpacity = polyline.strokeOpacity;
92 var strokeWeight = polyline.strokeWeight;
93 var clone_path = clonePath(path);
94 //var editable = rect.editable;
95
96 var clone_polyline = new google.maps.Polyline({
97 geodesic: geodesic,
98 strokeColor: strokeColor,
99 strokeOpacity: strokeOpacity,
100 strokeWeight: strokeWeight,
101 path: clone_path,
102 draggable: true,
103 editable: false
104 });
105
106 clone_polyline.type = google.maps.drawing.OverlayType.POLYLINE;
107
108 return clone_polyline;
109}
110
111function clonePolygon(polygon) {
112 var path = polygon.getPath();
113 var geodesic = polygon.geodesic;
114 var strokeColor = polygon.strokeColor;
115 var strokeOpacity = polygon.strokeOpacity;
116 var strokeWeight = polygon.strokeWeight;
117 var fillColor = polygon.fillColor;
118 var fillOpacity = polygon.fillOpacity;
119 var clone_path = clonePath(path);
120 //var editable = rect.editable;
121
122 var clone_polygon = new google.maps.Polygon({
123 geodesic: geodesic,
124 strokeColor: strokeColor,
125 strokeOpacity: strokeOpacity,
126 strokeWeight: strokeWeight,
127 fillColor: fillColor,
128 fillOpacity: fillOpacity,
129 path: clone_path,
130 draggable: true,
131 editable: false
132 });
133
134 clone_polygon.type = google.maps.drawing.OverlayType.POLYGON;
135
136 return clone_polygon;
137}
138
139function cloneRectangle(rect) {
140 var strokeColor = rect.strokeColor;
141 var strokeOpacity = rect.strokeOpacity;
142 var strokeWeight = rect.strokeWeight;
143 var fillColor = rect.fillColor;
144 var fillOpacity = rect.fillOpacity;
145 var bounds = rect.getBounds();
146 var type = rect.type;
147 //var editable = rect.editable;
148
149 var clone_rect = new google.maps.Rectangle({
150 strokeColor: strokeColor,
151 strokeOpacity: strokeOpacity,
152 strokeWeight: strokeWeight,
153 fillColor: fillColor,
154 fillOpacity: fillOpacity,
155 bounds: bounds,
156 draggable: true,
157 editable: false,
158 type: type
159 });
160
161 clone_rect.type = google.maps.drawing.OverlayType.RECTANGLE;
162
163 return clone_rect;
164}
165
166function cloneCircle(circ) {
167 var strokeColor = circ.strokeColor;
168 var strokeOpacity = circ.strokeOpacity;
169 var strokeWeight = circ.strokeWeight;
170 var fillColor = circ.fillColor;
171 var fillOpacity = circ.fillOpacity;
172 var center = circ.center;
173 var radius = circ.radius;
174 //var editable = rect.editable;
175
176 var clone_circ = new google.maps.Circle({
177 strokeColor: strokeColor,
178 strokeOpacity: strokeOpacity,
179 strokeWeight: strokeWeight,
180 fillColor: fillColor,
181 fillOpacity: fillOpacity,
182 center: center,
183 radius: radius,
184 draggable: true,
185 editable: false
186 });
187
188 clone_circ.type = google.maps.drawing.OverlayType.CIRCLE;
189
190 return clone_circ;
191}
192
193function cloneMarker(marker) {
194 var position = marker.getPosition();
195 var anchorPoint = marker.anchorPoint;
196 var clone_marker = new google.maps.Marker({
197 anchorPoint: anchorPoint,
198 position : position,
199 clickable: true,
200 draggable: true,
201 editable: false
202 })
203 clone_marker.type = google.maps.drawing.OverlayType.MARKER;
204
205 return clone_marker;
206}
207
208function cloneShape(shape) {
209 if (shape.type === google.maps.drawing.OverlayType.POLYLINE) {
210 var clone_polyline = clonePolyline(shape);
211 return clone_polyline;
212 } else if (shape.type === google.maps.drawing.OverlayType.POLYGON) {
213 var clone_polygon = clonePolygon(shape);
214 return clone_polygon;
215 } else if (shape.type === google.maps.drawing.OverlayType.RECTANGLE) {
216 var clone_rect = cloneRectangle(shape);
217 return clone_rect;
218
219 } else if (shape.type === google.maps.drawing.OverlayType.CIRCLE) {
220 var clone_circ = cloneCircle(shape);
221 return clone_circ;
222
223 } else {
224 var clone_marker = cloneMarker(shape);
225 return clone_marker;
226 }
227 console.log(cloneShape);
228}
229
230function overlayItemIsShape(overlay_item) {
231 var type = overlay_item.type;
232
233 is_shape = (type === google.maps.drawing.OverlayType.POLYLINE)
234 || (type === google.maps.drawing.OverlayType.POLYGON)
235 || (type === google.maps.drawing.OverlayType.RECTANGLE)
236 || (type === google.maps.drawing.OverlayType.CIRCLE);
237
238 return is_shape;
239}
240
241function historyOverlayPush() {
242 if(undoneOverlays.length > 0) {
243 for(var i = 0; i < undoneOverlays.length; i++) {
244
245 entryType.pop();
246 }
247 }
248 undoneOverlays = [];
249 //if(resizeEntry){
250 //prevOverlays.push(presentOverlays[0]);
251
252 //} else {
253 var overlays_copy = [];
254 for (var i = 0; i < overlays.length; i++) {
255 var clone_shape = cloneShape(overlays[i]);
256 if(resizeEntry) {
257 //console.log("hey lol");
258 clone_shape = cloneShape(presentOverlays[0][i]);
259 }
260 if (overlayItemIsShape(clone_shape)) {
261 addShapeListeners(clone_shape, null); // don't have an overlay event!
262 } else {
263 addMarkerListeners(clone_shape, null); // don't have an overlay event!
264 }
265 overlays_copy[i] = clone_shape;
266 }
267 prevOverlays.push(overlays_copy);
268 //}
269}
270
271function presentOverlayPush() {
272
273 //clean the entry type array
274
275 if(resizeEntry) {
276 entryType.push("resize");
277 } else {
278 entryType.push("not resize");
279 }
280
281 presentOverlays = [];
282 var overlays_copy = [];
283 for (var i = 0; i < overlays.length; i++) {
284 var clone_shape = cloneShape(overlays[i]);
285 if (overlayItemIsShape(clone_shape)) {
286 addShapeListeners(clone_shape, null); // don't have an overlay event!
287 } else {
288 addMarkerListeners(clone_shape, null); // don't have an overlay event!
289 }
290 overlays_copy[i] = clone_shape;
291 }
292 presentOverlays.push(overlays_copy);
293}
294
295function undoneOverlaysPush() {
296
297 var conditionUndone = presentOverlays[presentOverlays.length - 1] !== undefined;
298
299 if (conditionUndone) {
300 undoneOverlays.push(presentOverlays[0]);
301 }
302 presentOverlays = [];
303 var conditionPresent = prevOverlays[prevOverlays.length - 1] !== undefined;
304
305 if (conditionPresent) {
306 presentOverlays.push(prevOverlays[prevOverlays.length - 1]);
307 }
308}
Note: See TracBrowser for help on using the repository browser.