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