X-Git-Url: https://dev.renevier.net/?a=blobdiff_plain;f=public%2Fjs%2Fsyj.js;h=47e5540f3377d89591e5f2a9d731bf96e7699077;hb=087eabcce8fb3e745e056e40a1b12869eab34f62;hp=54677a27fb09992e40fdfb09f53e4d5078651622;hpb=f0cec87e660f4c34740d6a8c6256f534c67bb8b1;p=syj.git diff --git a/public/js/syj.js b/public/js/syj.js index 54677a2..47e5540 100644 --- a/public/js/syj.js +++ b/public/js/syj.js @@ -352,6 +352,66 @@ var SYJView = { 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; + 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(); @@ -1090,13 +1150,12 @@ var Nominatim = (function() { }); anchor.observe('click', clickhandler(item.boundingbox)); + Element.text(anchor, item.display_name); - var text = document.createTextNode(item.display_name); var icon = new Element("img", { className: "nominatim-suggestions-icon", src: item.icon || 'icons/world.png' }); - anchor.appendChild(text); // insert does not work; see prototype #1125 li.insert(icon).insert(anchor); $("nominatim-suggestions-list").insert(li); if ($("nominatim-suggestions-list").childNodes.length >= 6) { @@ -1108,7 +1167,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 {