]> dev.renevier.net Git - syj.git/blobdiff - public/js/syj.js
allow setting initial position with get params
[syj.git] / public / js / syj.js
index 916d2775020bfc96b50241ab9e5d93acf9d8c6e5..de3333f5c41d0028b60313604ea9ff0582bfaebc 100644 (file)
@@ -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,17 +341,110 @@ 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;
+
+                    var engine, i;
+                    var formats = ['KML', 'GPX'];
+
+                    for (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;
+                    }
+
+
+                    var vector = results[0];
+                    if (vector.geometry.CLASS_NAME !== "OpenLayers.Geometry.LineString") {
+                        readerror();
+                        return;
+                    }
+                    this.viewLayer.addFeatures([vector]);
+                    this.map.zoomToExtent(this.viewLayer.getDataExtent());
+
+                    if ($("edit-btn")) {
+                        $("edit-btn").click();
+                    } else if ($("create-btn")) {
+                        $("create-btn").click();
+                    }
+
+                    if (this.editControl.handler.realPoints.length < 2) {
+                        SyjSaveUI.disable();
+                    } else {
+                        SyjSaveUI.enable();
+                    }
+
+
+                    if (vector.data && vector.data.name) {
+                        $("geom_title").value = vector.data.name;
+                    }
+                 }.bind(this);
+                reader.readAsText(file);
+           }.bind(this));
+        }
+    },
+
+    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);
+        }
+
+        if (extent) {
+            this.map.zoomToExtent(extent);
+        } else {
+            this.map.setCenter(center, zoom);
+        }
     },
 
     observer: function(evt) {
@@ -471,28 +564,6 @@ var SYJView = {
             styles = this.editControl.handler.layerOptions.styleMap.styles;
             styles.select = styles.select_for_canvas;
         }
-        new CloseBtn($("geomform"), {
-            style : {
-                marginRight: "-40px",
-                marginTop: "-20px"
-            },
-            callback: function(form) {
-                this.viewMode();
-                this.mode = 'view';
-                SYJDataUi.viewmode();
-                this.messenger.hide();
-
-                if (this.unsavedRoute && typeof this.unsavedRoute.features !== "undefined") {
-                    this.viewLayer.addFeatures(this.unsavedRoute.features);
-                }
-                if (this.unsavedRoute && typeof this.unsavedRoute.title !== "undefined") {
-                    $("geom_title").value = this.unsavedRoute.title;
-                } else {
-                    $("geom_title").value = "";
-                }
-                this.unsavedRoute = null;
-            }.bind(this)
-        });
     },
 
     saveSuccess: function(transport) {
@@ -751,7 +822,14 @@ var SYJUserClass = Class.create(SYJModalClass, {
     },
 
     success: function(transport) {
-        LoginMgr.login();
+        if (!transport.responseJSON ||
+            typeof transport.responseJSON.pseudo !== "string"
+            ) {
+            this.messenger.setMessage(SyjStrings.unknownError, "error");
+            return;
+        }
+
+        LoginMgr.login(transport.responseJSON.pseudo);
         SYJView.messenger.setMessage(SyjStrings.userSuccess, "success");
         this.modalbox.hide();
         if (SYJView.needsFormResubmit) {
@@ -829,14 +907,8 @@ var SYJLoginClass = Class.create(SYJModalClass, {
             this.messenger.setMessage(SyjStrings.unknownError, "error");
             return;
         }
-        LoginMgr.login(transport.responseJSON.iscreator);
-        $$('.logged-pseudo').each(function(elt) {
-            $A(elt.childNodes).filter(function(node) {
-                return (node.nodeType === 3 || node.tagName.toLowerCase() === 'br');
-            }).each(function(node) {
-                node.nodeValue = node.nodeValue.replace('%s', transport.responseJSON.pseudo);
-            });
-        });
+        LoginMgr.login(transport.responseJSON.pseudo, transport.responseJSON.iscreator);
+
         SYJView.messenger.setMessage(SyjStrings.loginSuccess, "success");
         this.modalbox.hide();
         if (SYJView.needsFormResubmit) {
@@ -919,11 +991,18 @@ var LoginMgr = Object.extend(gLoggedInfo, {
         }
     },
 
-    login: function(aIsCreator) {
+    login: function(aPseudo, aIsCreator) {
         if (typeof aIsCreator === "boolean") {
             this.iscreator = aIsCreator;
         }
         this.logged = true;
+        $$('.logged-pseudo').each(function(elt) {
+            $A(elt.childNodes).filter(function(node) {
+                return (node.nodeType === 3 || node.tagName.toLowerCase() === 'br');
+            }).each(function(node) {
+                node.nodeValue = node.nodeValue.replace('%s', aPseudo);
+            });
+        });
         this.updateUI();
     }
 });
@@ -1046,7 +1125,7 @@ var Nominatim = (function() {
             center = bounds.getCenterLonLat().wrapDateLine(maxExtent);
         }
         this.setCenter(center, this.getZoomForExtent(bounds), false, true);
-    }
+    };
 
     var success = function(transport) {
         $("nominatim-throbber").hide();
@@ -1080,7 +1159,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");
@@ -1107,7 +1187,7 @@ var Nominatim = (function() {
         if ($("nominatim-suggestions-list").childNodes.length > 1) {
             var bottomOffset = $('data_controls').measure('height') + 3;
             $("nominatim-suggestions").setStyle({
-                bottom: bottomOffset.toString() + 'px'
+                bottom: (document.viewport.getHeight() - $('data_controls').cumulativeOffset().top + 3).toString() + 'px'
             }).show();
             $("nominatim-suggestions-list").select("li:first-child")[0].addClassName('current');
         } else {