X-Git-Url: https://dev.renevier.net/?p=syj.git;a=blobdiff_plain;f=public%2Fjs%2Fsyj.js;h=112c6f762530d03ba2c67a0144dc98ab075911e3;hp=44dd2ff6d4aba093b7b363fe6594e7f5ac095553;hb=925b83c0d6703c33469ec668171ac11f36db7980;hpb=45b1d23778c17da3082c4f3b97497af854d7fc83 diff --git a/public/js/syj.js b/public/js/syj.js index 44dd2ff..112c6f7 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), @@ -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(); } @@ -376,6 +417,29 @@ 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 (typeof this.unsavedRoute.features !== "undefined") { + this.viewLayer.addFeatures(this.unsavedRoute.features); + } + if (typeof this.unsavedRoute.title !== "undefined") { + $("geom_title").value = this.unsavedRoute.title; + } else { + $("geom_title").value = ""; + } + this.unsavedRoute = null; + }.bind(this) + }); }, saveSuccess: function(transport) { @@ -387,6 +451,7 @@ var SYJView = { this.messenger.setMessage(SyjStrings.saveSuccess, "success"); SyjSaveUI.hide(); SyjEditUI.show(); + this.unsavedRoute = null; document.title = $('geom_title').value; }, @@ -791,10 +856,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(); + } } },