X-Git-Url: https://dev.renevier.net/?a=blobdiff_plain;f=public%2Fjs%2Fsyj.js;h=190cc76ee4d7a192aa56cb298cad4289c7b99f96;hb=17ac0916d7f99be6c7568f0100e5bd628b52124d;hp=44dd2ff6d4aba093b7b363fe6594e7f5ac095553;hpb=ce001229accb2aff799560eec402344f0dbb1762;p=syj.git diff --git a/public/js/syj.js b/public/js/syj.js index 44dd2ff..190cc76 100644 --- a/public/js/syj.js +++ b/public/js/syj.js @@ -66,13 +66,13 @@ var SyjSaveUI = { var SyjEditUI = { hide: function() { - $("edit-btn").blur(); - $("edit-btn").hide(); + $("data_controls_btns").blur(); + $("data_controls_btns").hide(); return this; }, show: function() { - $("edit-btn").show(); + $("data_controls_btns").show(); return this; } }; @@ -210,6 +210,8 @@ var SYJView = { map: null, wkt: new OpenLayers.Format.WKT({ internalProjection: Mercator, externalProjection: WGS84 }), needsFormResubmit: false, + unsavedRoute: null, + mode: 'view', init: function() { var externalGraphic, baseURL, baseLayer, layerOptions, extent, hidemessenger; @@ -240,10 +242,34 @@ var SYJView = { this.viewLayer = new OpenLayers.Layer.Vector("View Layer", layerOptions); this.map.addLayers([baseLayer, this.viewLayer]); - $("edit-btn").observe('click', (function() { - this.messenger.hide(); - this.editMode(); - }).bind(this)); + if ($("edit-btn")) { + $("edit-btn").observe('click', function() { + $("geom_submit").value = SyjStrings.editAction; + this.messenger.hide(); + this.editMode(); + this.mode = 'edit'; + }.bind(this)); + } + + if ($("create-btn")) { + $("create-btn").observe('click', function() { + $("geom_submit").value = SyjStrings.createAction; + this.messenger.hide(); + this.editMode(); + this.mode = 'create'; + }.bind(this)); + } + + if ($("clone-btn")) { + $("clone-btn").observe('click', function() { + $("geom_submit").value = SyjStrings.cloneAction; + $("geom_title").value = ""; + this.messenger.hide(); + this.editMode(); + this.mode = 'create'; + SyjSaveUI.enableSubmit(); + }.bind(this)); + } $("geomform").ajaxize({ presubmit: this.prepareForm.bind(this), @@ -263,8 +289,8 @@ var SYJView = { this.messenger.hide(); } - if ($("geom_data").value) { - this.viewLayer.addFeatures([this.wkt.read($("geom_data").value)]); + 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. @@ -291,7 +317,7 @@ var SYJView = { return false; } - var line, realPoints, idx, handler; + var line, realPoints, idx; line = new OpenLayers.Geometry.LineString(); realPoints = this.editControl.handler.realPoints; @@ -299,21 +325,31 @@ var SYJView = { line.addComponent(realPoints[idx].geometry.clone()); } this.viewLayer.addFeatures(new OpenLayers.Feature.Vector(line)); - handler = this.editControl.handler; - OpenLayers.Handler.ModifiablePath.prototype.finalize.apply(handler, arguments); - // we need to recreate them on next createFeature; otherwise - // they'll reference destroyed features - delete(handler.handlers.drag); - delete(handler.handlers.feature); - this.editControl.deactivate(); + + this.viewMode(); $("geom_data").value = this.wkt.write(new OpenLayers.Feature.Vector(line)); + if (this.mode === "edit" && typeof gLoggedInfo.pathid !== "undefined") { + $("geomform").setAttribute("action", "path/" + gLoggedInfo.pathid.toString() + '/update'); + } else { + $("geomform").setAttribute("action", "path"); + } this.needsFormResubmit = false; SyjSaveUI.disable.bind(SyjSaveUI).defer(); this.messenger.hide(); return true; }, + viewMode: function() { + var handler = this.editControl.handler; + OpenLayers.Handler.ModifiablePath.prototype.finalize.apply(handler, arguments); + // we need to recreate them on next createFeature; otherwise + // they'll reference destroyed features + delete(handler.handlers.drag); + delete(handler.handlers.feature); + this.editControl.deactivate(); + }, + editMode: function() { var components, point0, point, pixels, pixel, idx; @@ -334,13 +370,18 @@ var SYJView = { } this.editControl.handler.addPoints(pixels); } + this.unsavedRoute = { + features: this.viewLayer.features.invoke('clone'), + title: $("geom_title").value + }; } this.viewLayer.destroyFeatures(); SyjEditUI.hide(); if (this.editControl.handler.realPoints && this.editControl.handler.realPoints.length >= 2) { - SyjSaveUI.show().disableSubmit(); + SyjSaveUI.show(); + SyjSaveUI.disableSubmit(); } else { SyjSaveUI.show().disable(); } @@ -356,6 +397,9 @@ var SYJView = { this.editControl = new OpenLayers.Control.DrawFeature(new OpenLayers.Layer.Vector(), OpenLayers.Handler.SyjModifiablePath, { callbacks: { modify: function(f, line) { + if (!SYJView.unsavedRoute) { + SYJView.unsavedRoute = {}; + } if (this.handler.realPoints.length < 2) { SyjSaveUI.show().disable(); } else { @@ -376,9 +420,34 @@ 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'; + SyjSaveUI.hide(); + SyjEditUI.show(); + 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) { + this.unsavedRoute = null; + if (transport.responseJSON && (typeof transport.responseJSON.redirect === "string")) { location = transport.responseJSON.redirect; return; @@ -791,10 +860,12 @@ var LoginMgr = Object.extend(gLoggedInfo, { $$(".logged-show").invoke('hide'); } - if (this.iscreator) { - $("data_controls").show(); - } else { - $("data_controls").hide(); + if ($("edit-btn")) { + if (this.iscreator && SYJView.mode === 'view') { + $("edit-btn").show(); + } else { + $("edit-btn").hide(); + } } }, @@ -908,3 +979,10 @@ document.observe("dom:loaded", function() { SYJNewpwd.init(); LoginMgr.updateUI(); }); +window.onbeforeunload = function() { + if (SYJView.unsavedRoute) { + return SyjStrings.unsavedConfirmExit; + } else { + return undefined; + } +};