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;
}
};
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;
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),
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.
return false;
}
- var line, realPoints, idx, handler;
+ var line, realPoints, idx;
line = new OpenLayers.Geometry.LineString();
realPoints = this.editControl.handler.realPoints;
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;
}
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();
}
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 {
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;
$$(".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();
+ }
}
},
SYJNewpwd.init();
LoginMgr.updateUI();
});
+window.onbeforeunload = function() {
+ if (SYJView.unsavedRoute) {
+ return SyjStrings.unsavedConfirmExit;
+ } else {
+ return undefined;
+ }
+};