/* 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",
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", [
+ 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'],
- { wrapDateLine: true , attribution: SyjStrings.osmAttribution });
+ { 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.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();
},
+ 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;
+ },
+
initMaPos: function (aPos) {
var extent = null, center = null, zoom = 0;
} 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.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)
},
},
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"]
$("termsofuseiframe").setAttribute("src", evt.target.href);
}
evt.stop();
- }.bindAsEventListener(this));
+ }).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) {
},
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;
}
return undefined;
}
};
-
-window.onresize = function() {
- SYJView.resizeMap();
-};