]> dev.renevier.net Git - syj.git/blobdiff - public/js/syj.js
warns user when there is a server side error
[syj.git] / public / js / syj.js
index 8012d996bf203ef74661924aa22d4ea91e644d8e..9e5b60202fef19c33cd334f54f3af3ff6ff1ae4b 100644 (file)
@@ -21,7 +21,7 @@ var SyjSaveUI = {
         this.enableSubmit();
         $("geom_title").disabled = false;
         $("geom_title").activate();
-        $("geomform").removeClassName("disabled");
+        $$("#geom_accept_container, #geom_title_container").invoke('removeClassName', "disabled");
         this.status = "enabled";
         return this;
     },
@@ -33,7 +33,7 @@ var SyjSaveUI = {
         this.disableSubmit();
         $("geom_title").blur();
         $("geom_title").disabled = true;
-        $("geomform").addClassName("disabled");
+        $$("#geom_accept_container, #geom_title_container").invoke('addClassName', "disabled");
         this.status = "disabled";
         return this;
     },
@@ -267,7 +267,7 @@ var SYJView = {
     mode: 'view',
 
     init: function() {
-        var externalGraphic, baseURL, baseLayer, layerOptions, extent, hidemessenger;
+        var externalGraphic, baseURL, baseLayer, layerOptions, hidemessenger;
 
         // is svg context, opera does not resolve links with base element is svg context
         externalGraphic = styleMap.edit.styles.select.defaultStyle.externalGraphic;
@@ -341,76 +341,43 @@ var SYJView = {
 
         if (typeof gInitialGeom !== "undefined" && typeof gInitialGeom.data !== "undefined") {
             this.viewLayer.addFeatures([this.wkt.read(gInitialGeom.data)]);
-            extent = this.viewLayer.getDataExtent();
             // XXX: ie has not guessed height of map main div yet during map
             // initialisation. Now, it will read it correctly.
             this.map.updateSize();
+            this.map.zoomToExtent(this.viewLayer.getDataExtent());
         } else {
-            extent = new OpenLayers.Bounds(gMaxExtent.minlon, gMaxExtent.minlat, gMaxExtent.maxlon, gMaxExtent.maxlat)
-                                         .transform(WGS84, Mercator);
+            this.initMaPos(gInitialPos);
         }
-        this.map.zoomToExtent(extent);
-        document.observe('simplebox:shown', this.observer.bindAsEventListener(this));
-        SYJPathLength.update();
-
-        if (window.FileList && window.FileReader) {
-            $("map").observe("dragenter", function(evt) { evt.stop();});
-            $("map").observe("dragover", function(evt) { evt.stop();});
-            $("map").observe("drop", function(evt) {
-                evt.stop();
-                if (this.mode !== "view" || this.viewLayer.features.length) {
-                    return;
-                }
-                if (!evt.dataTransfer.files.length) {
-                    return;
-                }
-                var file = evt.dataTransfer.files[0];
-                var reader = new FileReader();
-                var readerror = function() {
-                    this.messenger.setMessage(SyjStrings.dragFileError, "warn");
-                }.bind(this);
-                reader.onload = function(evt) {
-                    if (evt.error) {
-                        readerror();
-                        return;
-                    }
 
-                    var results = null;
-                    var content = evt.target.result;
+        $("map-overlay").hide();
+        $("geom_upload").observe('change', function() {
+            $("map-overlay").show();
+            SyjSaveUI.enable();
+            this.editControl.deactivate();
+        }.bind(this));
 
-                    var engine;
-                    var formats = ['KML', 'GPX'];
+        document.observe('simplebox:shown', this.observer.bindAsEventListener(this));
+        SYJPathLength.update();
+    },
 
-                    for (var i = 0; i < formats.length; i++) {
-                        engine = new OpenLayers.Format[formats[i]]({ internalProjection: Mercator, externalProjection: WGS84 });
-                        try {
-                            results = engine.read(content);
-                        } catch(e) {
-                        }
-                        if (results || results.length) {
-                            continue;
-                        }
-                    }
-                    if (!results || !results.length) {
-                        readerror();
-                        return;
-                    }
+    initMaPos: function (aPos) {
+        var extent = null, center = null, zoom = 0;
 
+        if (aPos.hasOwnProperty('lon') && aPos.hasOwnProperty('lat') && aPos.hasOwnProperty('zoom')) {
+            center = new OpenLayers.LonLat(parseFloat(aPos.lon), parseFloat(aPos.lat)).transform(WGS84, Mercator);
+            zoom = parseInt(aPos.zoom);
+        } else if (aPos.hasOwnProperty('minlon') && aPos.hasOwnProperty('minlat')
+                    && aPos.hasOwnProperty('maxlon') && aPos.hasOwnProperty('maxlat')) {
+            extent = new OpenLayers.Bounds(aPos.minlon, aPos.minlat, aPos.maxlon, aPos.maxlat)
+                                         .transform(WGS84, Mercator);
+        } else {
+            extent = new OpenLayers.Bounds(-160, -70, 160, 70).transform(WGS84, Mercator);
+        }
 
-                    var vector = results[0];
-                    if (vector.geometry.CLASS_NAME !== "OpenLayers.Geometry.LineString") {
-                        readerror();
-                        return;
-                    }
-                    this.viewLayer.addFeatures([vector]);
-                    this.map.zoomToExtent(this.viewLayer.getDataExtent());
-                    this.editMode();
-                    if (vector.data && vector.data.name) {
-                        $("geom_title").value = vector.data.name;
-                    }
-                 }.bind(this);
-                reader.readAsText(file);
-           }.bind(this));
+        if (extent) {
+            this.map.zoomToExtent(extent);
+        } else {
+            this.map.setCenter(center, zoom);
         }
     },
 
@@ -439,7 +406,12 @@ var SYJView = {
 
         this.viewMode();
 
-        $("geom_data").value = this.wkt.write(new OpenLayers.Feature.Vector(line));
+        if (line.components.length) {
+            $("geom_data").value = this.wkt.write(new OpenLayers.Feature.Vector(line));
+        } else {
+            $("geom_data").value = "";
+        }
+
         if (this.mode === "edit" && typeof gLoggedInfo.pathid !== "undefined") {
             $("geomform").setAttribute("action", "path/" + gLoggedInfo.pathid.toString() + '/update');
         } else {
@@ -508,14 +480,25 @@ var SYJView = {
             callbacks: {
                 modify: function(f, line) {
                     SYJPathLength.update();
-                    if (!SYJView.unsavedRoute) {
-                        SYJView.unsavedRoute = {};
+
+                    var npoints = this.handler.realPoints.length;
+                    if (npoints === 0) {
+                        $("geom_upload_container").show();
+                        SYJView.unsavedRoute = null;
+                    } else {
+                        if (!SYJView.unsavedRoute) {
+                            SYJView.unsavedRoute = {};
+                        }
                     }
-                    if (this.handler.realPoints.length < 2) {
+
+                    if (npoints < 2) {
                         SyjSaveUI.disable();
                     } else {
                         SyjSaveUI.enable();
                     }
+                },
+                create: function(f, line) {
+                    $("geom_upload_container").hide();
                 }
             },
 
@@ -534,8 +517,14 @@ var SYJView = {
     },
 
     saveSuccess: function(transport) {
-      this.unsavedRoute = null;
+      // server sends and empty response on success. If we get a response, that
+      // probably means an error or warning has been printed by server.
+      if (!transport.responseJSON && transport.responseText.length) {
+          this.saveFailure(null, 500);
+          return;
+      }
 
+      this.unsavedRoute = null;
       if (transport.responseJSON && (typeof transport.responseJSON.redirect === "string")) {
           location = transport.responseJSON.redirect;
           return;
@@ -546,12 +535,12 @@ var SYJView = {
       document.title = $('geom_title').value;
     },
 
-    saveFailure: function(transport) {
-        var httpCode = 0, message = "";
-
-        if (transport) {
-            httpCode = transport.getStatus();
+    saveFailure: function(transport, httpCode) {
+        var message = "";
+        if (typeof httpCode === "undefined") {
+            httpCode = transport? transport.getStatus(): 0;
         }
+
         switch (httpCode) {
             case 0:
                 message = SyjStrings.notReachedError;
@@ -1126,7 +1115,8 @@ var Nominatim = (function() {
             };
         };
 
-        for (var i = 0; i < transport.responseJSON.length; i++) {
+        var i;
+        for (i = 0; i < transport.responseJSON.length; i++) {
             var item = transport.responseJSON[i];
             if (item.display_name && item.boundingbox && item.boundingbox.length === 4) {
                 var li = new Element("li");