X-Git-Url: https://dev.renevier.net/?a=blobdiff_plain;f=public%2Fjs%2Fsyj.js;h=02336343d9d781d8f6bacb808b4855ea8180b413;hb=4022a532856c006efc57fbd8830bde4607c0114d;hp=a297706556f1b0f0c406de57e3d208724e2c5ea8;hpb=e534c17db2f3986751f4a96900e4aaae56d34873;p=syj.git diff --git a/public/js/syj.js b/public/js/syj.js index a297706..0233634 100644 --- a/public/js/syj.js +++ b/public/js/syj.js @@ -100,7 +100,12 @@ var SYJDataUi = (function() { 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); }); @@ -267,7 +272,7 @@ var SYJView = { mode: 'view', init: function() { - var externalGraphic, baseURL, baseLayer, layerOptions, hidemessenger; + var externalGraphic, baseURL, osmLayer, 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; @@ -278,12 +283,24 @@ var SYJView = { 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 }); + osmLayer = 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'}); layerOptions = {format: OpenLayers.Format.WKT, projection: WGS84, @@ -291,7 +308,34 @@ var SYJView = { attribution: SyjStrings.geomAttribution }; this.viewLayer = new OpenLayers.Layer.Vector("View Layer", layerOptions); - this.map.addLayers([baseLayer, this.viewLayer]); + 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); if ($("edit-btn")) { $("edit-btn").observe('click', function() { @@ -422,6 +466,33 @@ var SYJView = { 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; @@ -441,6 +512,13 @@ var SYJView = { } 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) { @@ -651,7 +729,12 @@ var SYJModalClass = Class.create({ 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)); @@ -1272,3 +1355,7 @@ window.onbeforeunload = function() { return undefined; } }; + +window.onresize = function() { + SYJView.resizeMap(); +};