/* This file is part of Syj, Copyright (c) 2010-2011 Arnaud Renevier,
and is published under the AGPL license. */
+"use strict";
+
// avoid openlayers alerts
OpenLayers.Console.userError = function(error) {
SYJView.messenger.setMessage(error, "error");
};
+OpenLayers.Layer.Vector.prototype.renderers = ["SVG2", "VML", "Canvas"];
+
var SyjSaveUI = {
status: "unknown",
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, hidemessenger;
+ var externalGraphic, baseURL, mapnikLayer, mapquestLayer, layerOptions, hidemessenger, layerCode, parameters;
// is svg context, opera does not resolve links with base element is svg context
externalGraphic = styleMap.edit.styles.select.defaultStyle.externalGraphic;
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoom(),
+ this.createLayerSwitcher(),
new OpenLayers.Control.Attribution()
],
theme: null
});
- baseLayer = new OpenLayers.Layer.OSM("OSM", null, { wrapDateLine: true , attribution: SyjStrings.osmAttribution });
+ mapnikLayer = new OpenLayers.Layer.OSM("Mapnik", [
+ 'http://a.tile.openstreetmap.org/${z}/${x}/${y}.png',
+ 'http://b.tile.openstreetmap.org/${z}/${x}/${y}.png',
+ 'http://c.tile.openstreetmap.org/${z}/${x}/${y}.png'],
+ { attribution: SyjStrings.osmAttribution, layerCode: 'M' });
+
+ mapquestLayer = new OpenLayers.Layer.OSM("MapQuest", [
+ 'http://otile1.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png',
+ 'http://otile2.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png',
+ 'http://otile3.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png',
+ 'http://otile4.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png'],
+ { attribution: SyjStrings.mapquestAttribution, layerCode: 'Q'});
layerOptions = {format: OpenLayers.Format.WKT,
projection: WGS84,
attribution: SyjStrings.geomAttribution };
this.viewLayer = new OpenLayers.Layer.Vector("View Layer", layerOptions);
- this.map.addLayers([baseLayer, this.viewLayer]);
+ this.map.addLayers([mapnikLayer, mapquestLayer, this.viewLayer]);
+
+ this.map.setBaseLayer(mapnikLayer);
+ layerCode = null;
+ parameters = OpenLayers.Util.getParameters(window.location.href);
+ if (parameters.layer) {
+ layerCode = parameters.layer;
+ try {
+ store.remove('baselayer');
+ } catch(e) {}
+ } else {
+ try {
+ layerCode = store.get('baselayer');
+ } catch(e) {}
+ }
+
+ if (layerCode) {
+ layerCode = layerCode.toUpperCase();
+ var self = this;
+ $([mapnikLayer, mapquestLayer]).each(function(layer) {
+ if (layer.layerCode === layerCode) {
+ self.map.setBaseLayer(layer);
+ }
+ });
+ }
+
+ this.map.events.register("changebaselayer", this, this.saveBaseLayer);
if ($("edit-btn")) {
$("edit-btn").observe('click', function() {
$("geom_submit").value = SyjStrings.editAction;
- this.messenger.hide();
+ this.messenger.clearMessages();
this.editMode();
this.mode = 'edit';
}.bind(this));
if ($("create-btn")) {
$("create-btn").observe('click', function() {
$("geom_submit").value = SyjStrings.createAction;
- this.messenger.hide();
+ this.messenger.clearMessages();
this.editMode();
this.mode = 'create';
}.bind(this));
$("clone-btn").observe('click', function() {
$("geom_submit").value = SyjStrings.cloneAction;
$("geom_title").value = "";
- this.messenger.hide();
+ this.messenger.clearMessages();
this.editMode();
this.mode = 'create';
}.bind(this));
this.map.updateSize();
this.map.zoomToExtent(this.viewLayer.getDataExtent());
} else {
- this.initMaPos(gInitialPos);
+ this.initMapPos(gInitialPos);
}
$("map-overlay").hide();
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'];
+ var data = null, results = null, engine = null, vector = null, i = 0, format = null, formats = ['KML', 'GPX', 'GeoJSON'];
$("geom_upload_container").removeClassName("disabled");
$("geom_upload").disabled = false;
data = evt.target.result;
for (i = 0; i < formats.length; i++) {
- engine = new OpenLayers.Format[formats[i]]({ internalProjection: Mercator, externalProjection: WGS84 });
+ format = formats[i];
+ engine = new OpenLayers.Format[format]({ internalProjection: Mercator, externalProjection: WGS84 });
try {
results = engine.read(data);
} catch(e) {
readerror();
return;
}
+ // merge linestrings for gpx containting multiple trkseg elements.
+ if (format === 'GPX') {
+ for (i = 1; i < results.length; i++) {
+ vector.geometry.addComponents(results[i].geometry.components);
+ }
+ }
this.viewLayer.addFeatures([vector]);
this.map.zoomToExtent(this.viewLayer.getDataExtent());
SYJPathLength.update();
},
- initMaPos: function (aPos) {
+ saveBaseLayer: function(data) {
+ try {
+ store.set('baselayer', data.layer.layerCode);
+ } catch(e) {}
+ },
+
+ createLayerSwitcher: function() {
+ var control = new OpenLayers.Control.LayerSwitcher({roundedCorner: false});
+ // XXX: we need to "live-patch" LayerSwitcher to use our icons. We use
+ // a regexp instead of a string in case OpenLayers is modified and in
+ // case browsers modify the function representation
+ control.loadContents = eval('(function() { return (' + control.loadContents.toString().replace(
+ /\s*=\s*imgLocation\s*\+\s*['"]layer-switcher-maximize\.png['"]\s*;/,
+ " = 'icons/layer-switcher-maximize-flipped.png';"
+ ) + ')}())');
+ var oldMaximizeControl = control.maximizeControl;
+ var self = this;
+ control.maximizeControl = (function(oldfunc) {
+ return function() {
+ oldfunc.apply(control, arguments);
+ self.messenger.hide();
+ };
+ }(control.maximizeControl));
+
+ return control;
+ },
+
+ initMapPos: function (aPos) {
var extent = null, center = null, zoom = 0;
if (aPos.hasOwnProperty('lon') && aPos.hasOwnProperty('lat') && aPos.hasOwnProperty('zoom')) {
observer: function(evt) {
if (evt.eventName === "simplebox:shown" && evt.memo.element !== $("termsofusearea")) {
- this.messenger.hide();
+ this.messenger.clearMessages();
}
},
}
this.needsFormResubmit = false;
SyjSaveUI.disable.bind(SyjSaveUI).defer();
- this.messenger.hide();
+ this.messenger.clearMessages();
return true;
},
}
},
create: function(f, line) {
- this.messenger.hide();
+ this.messenger.clearMessages();
$("geom_upload_container").hide();
}.bind(this)
},
return;
}
+ $('path-profile-content').select('img').each(function(img) {
+ var src = img.src;
+ var found = src.match('foo=bar(\\d*)');
+ var num;
+ if (found) {
+ num = parseInt(found[1], 10);
+ img.src = src.replace(found[0], 'foo=bar' + (num+1));
+ } else if (src.indexOf('?') === -1) {
+ img.src = img.src + '?foo=bar0';
+ } else {
+ img.src = img.src + '&foo=bar0';
+ }
+ });
+
this.messenger.setMessage(SyjStrings.saveSuccess, "success");
SYJDataUi.viewmode();
document.title = $('geom_title').value;
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));
},
reset: function() {
- this.messenger.hide();
+ this.messenger.clearMessages();
this.area.select('.message').invoke('setMessageStatus', null);
}
});
$super();
$("termsofusearea").hide();
- $$("#user_termsofuse_anchor, #geom_termsofuse_anchor").invoke('observe', "click", function(evt) {
+ var touevt = (function(evt) {
+ if (evt.type === "keyup" && evt.keyCode !== 32) { // 32 = space
+ // allow opening box by pressing space
+ return;
+ }
if (!this.toubox) {
this.toubox = new SimpleBox($("termsofusearea"), {
closeMethods: ["onescapekey", "onouterclick", "onbutton"]
evt.stop();
}.bindAsEventListener(this));
+ ["click", "keyup"].each(function (evtName) {
+ $$("#user_termsofuse_anchor, #geom_termsofuse_anchor").invoke('observe', evtName, touevt);
+ });
+
$$("#login_area_create > a").invoke('observe', 'click',
function(evt) {
this.modalbox.show();
},
presubmit: function() {
- this.messenger.hide();
+ this.messenger.clearMessages();
PseudoChecker.reset();
if (!(this.checkNotEmpty("user_pseudo", SyjStrings.userEmptyWarn))) {
return false;
},
presubmit: function() {
- this.messenger.hide();
+ this.messenger.clearMessages();
if (!(this.checkNotEmpty("login_user", SyjStrings.userEmptyWarn))) {
return false;
}