]> dev.renevier.net Git - syj.git/blobdiff - public/js/syj.js
minor jslint cleanup
[syj.git] / public / js / syj.js
index de3333f5c41d0028b60313604ea9ff0582bfaebc..7b2448cb09481b86a79f90f6120ae6178173baaf 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;
     },
@@ -349,45 +349,34 @@ var SYJView = {
             this.initMaPos(gInitialPos);
         }
 
-        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");
+        $("map-overlay").hide();
+        $("geom_upload").observe('change', function(evt) {
+            var file = null, reader = null, readerror = null;
+            if (window.FileList && window.FileReader) {
+                file = evt.target.files[0];
+                reader = new FileReader();
+                readerror = function() {
+                    this.messenger.setMessage(SyjStrings.uploadFileError, "warn");
                 }.bind(this);
                 reader.onload = function(evt) {
+                    var data = null, results = null, engine = null, vector = null, i = 0, formats = ['KML', 'GPX', 'GeoJSON'];
+
+                    $("geom_upload_container").removeClassName("disabled");
+                    $("geom_upload").disabled = false;
                     if (evt.error) {
                         readerror();
                         return;
                     }
-
-                    var results = null;
-                    var content = evt.target.result;
-
-                    var engine, i;
-                    var formats = ['KML', 'GPX'];
+                    data = evt.target.result;
 
                     for (i = 0; i < formats.length; i++) {
                         engine = new OpenLayers.Format[formats[i]]({ internalProjection: Mercator, externalProjection: WGS84 });
                         try {
-                            results = engine.read(content);
+                            results = engine.read(data);
                         } catch(e) {
                         }
-                        if (results || results.length) {
-                            continue;
+                        if (results && results.length) {
+                            break;
                         }
                     }
                     if (!results || !results.length) {
@@ -395,8 +384,7 @@ var SYJView = {
                         return;
                     }
 
-
-                    var vector = results[0];
+                    vector = results[0];
                     if (vector.geometry.CLASS_NAME !== "OpenLayers.Geometry.LineString") {
                         readerror();
                         return;
@@ -413,17 +401,25 @@ var SYJView = {
                     if (this.editControl.handler.realPoints.length < 2) {
                         SyjSaveUI.disable();
                     } else {
-                        SyjSaveUI.enable();
+                       SyjSaveUI.enable();
                     }
 
-
                     if (vector.data && vector.data.name) {
                         $("geom_title").value = vector.data.name;
                     }
-                 }.bind(this);
+                }.bind(this);
+                $("geom_upload_container").addClassName("disabled");
+                $("geom_upload").disabled = true;
                 reader.readAsText(file);
-           }.bind(this));
-        }
+                return;
+            }
+            $("map-overlay").show();
+            SyjSaveUI.enable();
+            this.editControl.deactivate();
+        }.bind(this));
+
+        document.observe('simplebox:shown', this.observer.bindAsEventListener(this));
+        SYJPathLength.update();
     },
 
     initMaPos: function (aPos) {
@@ -431,7 +427,7 @@ var SYJView = {
 
         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);
+            zoom = parseInt(aPos.zoom, 10);
         } 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)
@@ -472,7 +468,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 {
@@ -541,15 +542,27 @@ 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) {
+                    this.messenger.hide();
+                    $("geom_upload_container").hide();
+                }.bind(this)
             },
 
             handlerOptions: {
@@ -567,8 +580,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;
@@ -579,12 +598,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;
@@ -674,7 +693,7 @@ var SYJModalClass = Class.create({
                 input = this.area.select('input[type="text"]')[0];
                 (function () {
                     input.activate();
-                }).defer();
+                }.defer());
             } else {
                 this.modalbox.hide();
             }