]> dev.renevier.net Git - syj.git/blob - public/js/list.js
js strict mode in development files
[syj.git] / public / js / list.js
1 "use strict";
2
3 var WGS84 = new OpenLayers.Projection("EPSG:4326");
4 var Mercator = new OpenLayers.Projection("EPSG:900913");
5
6
7 document.observe("dom:loaded", function() {
8     $("message").hide();
9
10     $$(".item").each(function(elt) {
11         new item(elt);
12     });
13 });
14
15 function item(elt) {
16     this.deleteHandler = elt.on('click', '.delete-link', this.remove.bindAsEventListener(this));
17     this.elt = elt;
18     this.map = this.createmap(elt.down('.map'));
19 }
20 item.prototype = {
21     createmap: function(elt) {
22         var geom = elt.getAttribute('data-geom'),
23             baseLayer = new OpenLayers.Layer.OSM("OSM"),
24             map = new OpenLayers.Map(elt, { controls: [], theme: null}),
25             layerOptions = {format:     OpenLayers.Format.WKT,
26                             projection: WGS84,
27                             styleMap:   new OpenLayers.StyleMap({
28                                             "default": new OpenLayers.Style({
29                                                 strokeColor: "blue",
30                                                 strokeWidth: 5,
31                                                 strokeOpacity: 0.7
32                                             })
33                                          })},
34             wkt = new OpenLayers.Format.WKT({ internalProjection: Mercator, externalProjection: WGS84 }),
35             viewLayer = new OpenLayers.Layer.Vector("View Layer", layerOptions),
36             extent;
37
38         map.addLayers([baseLayer, viewLayer]);
39         viewLayer.addFeatures([wkt.read(geom)]);
40         map.zoomToExtent(viewLayer.getDataExtent());
41         return map;
42     },
43
44     deleteSuccess: function() {
45         this.deactivate();
46         $("message").setMessage(SyjStrings.deleteSuccess, "success");
47     },
48
49     deactivate: function() {
50         this.map.destroy();
51         this.elt.down('.title').update();
52         this.elt.down('.geom').update().setStyle({backgroundColor: 'gray'});
53         this.deleteHandler.stop();
54         this.elt.on('click', 'a', function(evt) { evt.stop(); });
55         this.elt.select('a').invoke('setStyle', {textDecoration: 'line-through'});
56     },
57
58     deleteFailure: function(transport) {
59         var httpCode = 0, message = "";
60         if (transport) {
61             httpCode = transport.getStatus();
62         }
63         switch (httpCode) {
64             case 0:
65                 message = SyjStrings.notReachedError;
66             break;
67             case 400:
68             case 403:
69                 location = loginlink();
70                 return;
71             break;
72             case 404:
73                  message = SyjStrings.requestError;
74             break;
75             case 410:
76                 this.deactivate();
77                 message = SyjStrings.gonePathError;
78             break;
79             case 500:
80                 message = SyjStrings.serverError;
81             break;
82             default:
83                 message = SyjStrings.unknownError;
84             break;
85         }
86         $("message").setMessage(message, "error");
87     },
88
89     remove: function(evt) {
90         evt.stop();
91         if (!confirm(SyjStrings.confirmDelete)) {
92             return;
93         }
94         var id = this.elt.getAttribute('data-id');
95
96         $("message").clearMessages();
97         new Ajax.Request('path/' + id.toString() + '/delete', {
98             method: 'post',
99             onSuccess: this.deleteSuccess.bind(this),
100             onFailure: this.deleteFailure.bind(this)
101         });
102     }
103 };
104
105 function loginlink() {
106     var lang;
107     if (location.search && location.search.length && location.search[0] === '?') {
108         lang = location.search.slice(1).split('&').find(function(str) {
109             return str.startsWith('lang=');
110         });
111         if (lang) {
112             lang = lang.slice('lang='.length);
113         }
114     }
115     return 'login?redirect=' + encodeURIComponent(location.pathname + location.search) + ((lang) ? '&lang=' + lang: "");
116 }