]> dev.renevier.net Git - syj.git/commitdiff
ability to drag and drop a route file
authorarno <arno@renevier.net>
Wed, 25 Aug 2010 13:06:07 +0000 (15:06 +0200)
committerarno <arno@renevier.net>
Wed, 25 Aug 2010 14:29:10 +0000 (16:29 +0200)
application/controllers/IdxController.php
public/js/syj.js
public/openlayers

index 10506dab3aee3a286a16bea8439ddcc6e03b52a9..29e142d27772b8b87364d9cfc57af851936fc07d 100644 (file)
@@ -149,6 +149,7 @@ class IdxController extends Zend_Controller_Action
             'unsavedConfirmExit' => __("You have an unsaved route"),
             'notEmptyField' => __("Value is required"),
             'noResult' => __("no result"),
+            'dragFileError' => __("could not read content of file"),
             );
     }
 
index e33ea4e306cfef58018c21641c4a1b98e9595748..565d0e15e243e5d7aeb76f240a62f79eb1c6ce86 100644 (file)
@@ -352,6 +352,66 @@ var SYJView = {
         this.map.zoomToExtent(extent);
         document.observe('simplebox:shown', this.observer.bindAsEventListener(this));
         SYJPathLength.update();
+
+        if (FileList && 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;
+                    var formats = ['KML', 'GPX'];
+
+                    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) {
+                            break;
+                        }
+                    }
+                    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());
+                    this.editMode();
+                    if (vector.data && vector.data.name) {
+                        $("geom_title").value = vector.data.name;
+                    }
+                 }.bind(this);
+                reader.readAsText(file);
+           }.bind(this));
+        }
     },
 
     observer: function(evt) {
@@ -1046,7 +1106,7 @@ var Nominatim = (function() {
             center = bounds.getCenterLonLat().wrapDateLine(maxExtent);
         }
         this.setCenter(center, this.getZoomForExtent(bounds), false, true);
-    }
+    };
 
     var success = function(transport) {
         $("nominatim-throbber").hide();
index f2a457cae0c516e35a7c4c3c32c3b4af040415da..477e4c8b4919e4650694a05eaeb022c7eedad303 160000 (submodule)
@@ -1 +1 @@
-Subproject commit f2a457cae0c516e35a7c4c3c32c3b4af040415da
+Subproject commit 477e4c8b4919e4650694a05eaeb022c7eedad303