-/* 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
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;
},
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;
},
if (!infotoggler) {
infotoggler = new Toggler('path-infos-content');
$("path-infos-toggler").insert({bottom: infotoggler.element});
- $("path-infos-anchor").observe('click', function(evt) {
+ var anchor = $("path-infos-anchor");
+ var parent = anchor.up('.menu-item');
+ if (parent) {
+ anchor = parent;
+ }
+ anchor.observe('click', function(evt) {
evt.stop();
infotoggler.toggle(evt);
});
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;
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.map.zoomToExtent(extent);
+ this.initMaPos(gInitialPos);
+ }
+
+ $("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;
+ }
+ 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();
+ }.bind(this));
+
document.observe('simplebox:shown', this.observer.bindAsEventListener(this));
SYJPathLength.update();
},
+ 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, 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)
+ .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);
+ }
+ this.resizeMap();
+ },
+
+ resizeMap: function() {
+ var map = $('map');
+ map.style.width = map.offsetWidth.toString() + 'px';
+ map.style.height = map.offsetHeight.toString() + 'px';
+ },
+
observer: function(evt) {
if (evt.eventName === "simplebox:shown" && evt.memo.element !== $("termsofusearea")) {
this.messenger.hide();
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 {
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: {
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) {
- 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;
case 400:
case 404:
message = SyjStrings.requestError;
- if (transport.responseJSON) {
- switch (transport.responseJSON.message) {
- case "uniquepath":
- message = SyjStrings.uniquePathError;
- break;
- default:
- break;
- }
- }
break;
case 403:
message = "";
closeMethods: ["onescapekey", "onouterclick", "onbutton"]
});
- $(this.type + "_control_anchor").observe("click", function(evt) {
+ var anchor = $(this.type + '_control_anchor');
+ var parent = anchor.up('.menu-item');
+ if (parent) {
+ anchor = parent;
+ }
+ anchor.observe("click", function(evt) {
this.modalbox.show();
evt.stop();
}.bindAsEventListener(this));
input = this.area.select('input[type="text"]')[0];
(function () {
input.activate();
- }).defer();
+ }.defer());
} else {
this.modalbox.hide();
}
},
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) {
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) {
}
},
- 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();
}
});
center = bounds.getCenterLonLat().wrapDateLine(maxExtent);
}
this.setCenter(center, this.getZoomForExtent(bounds), false, true);
- }
+ };
var success = function(transport) {
$("nominatim-throbber").hide();
};
};
- 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");
return undefined;
}
};
+
+window.onresize = function() {
+ SYJView.resizeMap();
+};