63 lines
1.4 KiB
JavaScript
Executable File
63 lines
1.4 KiB
JavaScript
Executable File
var Backbone = require('backbone');
|
|
|
|
var VIEWING_MODE = 'viewing';
|
|
var DRAWING_FEATURE_MODE = 'drawing';
|
|
var EDITING_FEATURE_MODE = 'editing';
|
|
|
|
var MapMode = Backbone.Model.extend({
|
|
defaults: {
|
|
mode: VIEWING_MODE
|
|
},
|
|
|
|
enterViewingMode: function () {
|
|
delete this._featureDefinition;
|
|
this.set('mode', VIEWING_MODE);
|
|
},
|
|
|
|
enterDrawingFeatureMode: function (feature) {
|
|
this._featureDefinition = feature;
|
|
this.set('mode', DRAWING_FEATURE_MODE);
|
|
},
|
|
|
|
enterEditingFeatureMode: function (feature) {
|
|
this._featureDefinition = feature;
|
|
this.set('mode', EDITING_FEATURE_MODE);
|
|
},
|
|
|
|
getFeatureDefinition: function () {
|
|
return this._featureDefinition;
|
|
},
|
|
|
|
isViewingMode: function () {
|
|
return this._isMode(VIEWING_MODE);
|
|
},
|
|
|
|
isDrawingFeatureMode: function () {
|
|
return this._isMode(DRAWING_FEATURE_MODE);
|
|
},
|
|
|
|
isEditingFeatureMode: function () {
|
|
return this._isMode(EDITING_FEATURE_MODE);
|
|
},
|
|
|
|
bindRouteEvents: function (routeModel) {
|
|
this.listenTo(routeModel, 'change:currentRoute', this._handleRoute, this);
|
|
},
|
|
|
|
_handleRoute: function (routeModel) {
|
|
var currentRoute = routeModel.get('currentRoute');
|
|
var routeName = currentRoute[0];
|
|
|
|
if (routeName !== 'edit_feature' &&
|
|
routeName.indexOf('add_feature_') !== 0) {
|
|
this.enterViewingMode();
|
|
}
|
|
},
|
|
|
|
_isMode: function (mode) {
|
|
return this.get('mode') === mode;
|
|
}
|
|
});
|
|
|
|
module.exports = MapMode;
|