X-Git-Url: https://dev.renevier.net/?a=blobdiff_plain;f=public%2Fjs%2Fsyj.js;h=de3333f5c41d0028b60313604ea9ff0582bfaebc;hb=ab004bfb8716d3d3a5def0404447a1b0236e3e61;hp=916d2775020bfc96b50241ab9e5d93acf9d8c6e5;hpb=681ed303769262b6108e2e5893fceff999fa92d9;p=syj.git diff --git a/public/js/syj.js b/public/js/syj.js index 916d277..de3333f 100644 --- a/public/js/syj.js +++ b/public/js/syj.js @@ -267,7 +267,7 @@ var SYJView = { 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; @@ -341,17 +341,110 @@ var SYJView = { 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.initMaPos(gInitialPos); } - this.map.zoomToExtent(extent); + document.observe('simplebox:shown', this.observer.bindAsEventListener(this)); SYJPathLength.update(); + + if (window.FileList && window.FileReader) { + $("map").observe("dragenter", function(evt) { evt.stop();}); + $("map").observe("dragover", function(evt) { evt.stop();}); + $("map").observe("drop", function(evt) { + evt.stop(); + if (this.mode !== "view" || this.viewLayer.features.length) { + return; + } + if (!evt.dataTransfer.files.length) { + return; + } + var file = evt.dataTransfer.files[0]; + var reader = new FileReader(); + var readerror = function() { + this.messenger.setMessage(SyjStrings.dragFileError, "warn"); + }.bind(this); + reader.onload = function(evt) { + if (evt.error) { + readerror(); + return; + } + + var results = null; + var content = evt.target.result; + + var engine, i; + var formats = ['KML', 'GPX']; + + for (i = 0; i < formats.length; i++) { + engine = new OpenLayers.Format[formats[i]]({ internalProjection: Mercator, externalProjection: WGS84 }); + try { + results = engine.read(content); + } catch(e) { + } + if (results || results.length) { + continue; + } + } + if (!results || !results.length) { + readerror(); + return; + } + + + var 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); + reader.readAsText(file); + }.bind(this)); + } + }, + + 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); + } 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); + } }, observer: function(evt) { @@ -471,28 +564,6 @@ var SYJView = { 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) { @@ -751,7 +822,14 @@ var SYJUserClass = Class.create(SYJModalClass, { }, 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) { @@ -829,14 +907,8 @@ var SYJLoginClass = Class.create(SYJModalClass, { 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) { @@ -919,11 +991,18 @@ var LoginMgr = Object.extend(gLoggedInfo, { } }, - 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(); } }); @@ -1046,7 +1125,7 @@ var Nominatim = (function() { center = bounds.getCenterLonLat().wrapDateLine(maxExtent); } this.setCenter(center, this.getZoomForExtent(bounds), false, true); - } + }; var success = function(transport) { $("nominatim-throbber").hide(); @@ -1080,7 +1159,8 @@ var Nominatim = (function() { }; }; - 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"); @@ -1107,7 +1187,7 @@ var Nominatim = (function() { if ($("nominatim-suggestions-list").childNodes.length > 1) { var bottomOffset = $('data_controls').measure('height') + 3; $("nominatim-suggestions").setStyle({ - bottom: bottomOffset.toString() + 'px' + bottom: (document.viewport.getHeight() - $('data_controls').cumulativeOffset().top + 3).toString() + 'px' }).show(); $("nominatim-suggestions-list").select("li:first-child")[0].addClassName('current'); } else {