source: main/trunk/greenstone3/web/interfaces/default/js/map-scripts-editor-history.js@ 32766

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

Map editor and history + map themes files

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