]> dev.renevier.net Git - syj.git/blobdiff - public/js/list.js
js strict mode in development files
[syj.git] / public / js / list.js
index db95dc5016270a23d6d53113ce0e3624927b4e6a..c30fa334aec09efeaca88f4a412c4d850bce9b9c 100644 (file)
@@ -1,58 +1,24 @@
+"use strict";
+
 var WGS84 = new OpenLayers.Projection("EPSG:4326");
 var Mercator = new OpenLayers.Projection("EPSG:900913");
 
-function deletePath(evt) {
-    evt.stop();
-    if (!confirm(SyjStrings.confirmDelete)) {
-        return;
-    }
-    var link = evt.target,
-        item = $(link).up('.item'),
-        id = item.getAttribute('data-id');
 
+document.observe("dom:loaded", function() {
     $("message").hide();
-    new Ajax.Request('path/' + id.toString() + '/delete', {
-        method: 'post',
-        onSuccess: function(transport) {
-            item.down('.title').update();
-            item.down('.geom').update().setStyle({backgroundColor: 'gray'});
-            $("message").setMessage(SyjStrings.deleteSuccess, "success");
-        },
-        onFailure: function(transport) {
-            var httpCode = 0, message = "";
-            if (transport) {
-                httpCode = transport.getStatus();
-            }
-            switch (httpCode) {
-                case 0:
-                    message = SyjStrings.notReachedError;
-                break;
-                case 400:
-                case 403:
-                    location = loginlink();
-                    return;
-                break;
-                case 404:
-                     message = SyjStrings.requestError;
-                break;
-                case 410:
-                    message = SyjStrings.gonePathError;
-                break;
-                case 500:
-                    message = SyjStrings.serverError;
-                break;
-                default:
-                    message = SyjStrings.unknownError;
-                break;
-            }
-            $("message").setMessage(message, "error");
-        }
+
+    $$(".item").each(function(elt) {
+        new item(elt);
     });
-}
+});
 
-document.observe("dom:loaded", function() {
-    $("message").hide();
-    $$(".map").each(function(elt) {
+function item(elt) {
+    this.deleteHandler = elt.on('click', '.delete-link', this.remove.bindAsEventListener(this));
+    this.elt = elt;
+    this.map = this.createmap(elt.down('.map'));
+}
+item.prototype = {
+    createmap: function(elt) {
         var geom = elt.getAttribute('data-geom'),
             baseLayer = new OpenLayers.Layer.OSM("OSM"),
             map = new OpenLayers.Map(elt, { controls: [], theme: null}),
@@ -72,9 +38,69 @@ document.observe("dom:loaded", function() {
         map.addLayers([baseLayer, viewLayer]);
         viewLayer.addFeatures([wkt.read(geom)]);
         map.zoomToExtent(viewLayer.getDataExtent());
-    });
-    $$(".delete-link").invoke('observe', 'click', deletePath);
-});
+        return map;
+    },
+
+    deleteSuccess: function() {
+        this.deactivate();
+        $("message").setMessage(SyjStrings.deleteSuccess, "success");
+    },
+
+    deactivate: function() {
+        this.map.destroy();
+        this.elt.down('.title').update();
+        this.elt.down('.geom').update().setStyle({backgroundColor: 'gray'});
+        this.deleteHandler.stop();
+        this.elt.on('click', 'a', function(evt) { evt.stop(); });
+        this.elt.select('a').invoke('setStyle', {textDecoration: 'line-through'});
+    },
+
+    deleteFailure: function(transport) {
+        var httpCode = 0, message = "";
+        if (transport) {
+            httpCode = transport.getStatus();
+        }
+        switch (httpCode) {
+            case 0:
+                message = SyjStrings.notReachedError;
+            break;
+            case 400:
+            case 403:
+                location = loginlink();
+                return;
+            break;
+            case 404:
+                 message = SyjStrings.requestError;
+            break;
+            case 410:
+                this.deactivate();
+                message = SyjStrings.gonePathError;
+            break;
+            case 500:
+                message = SyjStrings.serverError;
+            break;
+            default:
+                message = SyjStrings.unknownError;
+            break;
+        }
+        $("message").setMessage(message, "error");
+    },
+
+    remove: function(evt) {
+        evt.stop();
+        if (!confirm(SyjStrings.confirmDelete)) {
+            return;
+        }
+        var id = this.elt.getAttribute('data-id');
+
+        $("message").clearMessages();
+        new Ajax.Request('path/' + id.toString() + '/delete', {
+            method: 'post',
+            onSuccess: this.deleteSuccess.bind(this),
+            onFailure: this.deleteFailure.bind(this)
+        });
+    }
+};
 
 function loginlink() {
     var lang;