/* 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, osmLayer, layerOptions, hidemessenger, layerCode, parameters;
+ 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;
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoom(),
- this.createLayerSwitcher(),
new OpenLayers.Control.Attribution()
],
theme: null
});
- osmLayer = new OpenLayers.Layer.OSM("OSM", [
+ baseLayer = new OpenLayers.Layer.OSM("OSM", [
'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, layerCode: 'O'});
-
- 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'],
- { wrapDateLine: true , attribution: SyjStrings.mapquestAttribution, layerCode: 'M'});
+ { attribution: SyjStrings.osmAttribution });
layerOptions = {format: OpenLayers.Format.WKT,
projection: WGS84,
attribution: SyjStrings.geomAttribution };
this.viewLayer = new OpenLayers.Layer.Vector("View Layer", layerOptions);
- this.map.addLayers([osmLayer, mapquestLayer, this.viewLayer]);
-
- this.map.setBaseLayer(mapquestLayer);
- 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;
- $([osmLayer, mapquestLayer]).each(function(layer) {
- if (layer.layerCode === layerCode) {
- self.map.setBaseLayer(layer);
- }
- });
- }
-
-
- this.map.events.register("changebaselayer", this, this.saveBaseLayer);
+ this.map.addLayers([baseLayer, this.viewLayer]);
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();
-};