-/* This file is part of Syj, Copyright (c) 2010 Arnaud Renevier,
+/* This file is part of Syj, Copyright (c) 2010-2011 Arnaud Renevier,
and is published under the AGPL license. */
// avoid openlayers alerts
}
$("map-overlay").hide();
- $("geom_upload").observe('change', function() {
+ $("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;
+ }
+ 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(data);
+ } catch(e) {
+ }
+ if (results && results.length) {
+ break;
+ }
+ }
+ if (!results || !results.length) {
+ readerror();
+ return;
+ }
+
+ 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);
+ $("geom_upload_container").addClassName("disabled");
+ $("geom_upload").disabled = true;
+ reader.readAsText(file);
+ return;
+ }
$("map-overlay").show();
SyjSaveUI.enable();
this.editControl.deactivate();
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)
}
},
create: function(f, line) {
+ this.messenger.hide();
$("geom_upload_container").hide();
- }
+ }.bind(this)
},
handlerOptions: {
},
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;
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;
input = this.area.select('input[type="text"]')[0];
(function () {
input.activate();
- }).defer();
+ }.defer());
} else {
this.modalbox.hide();
}