54 lines
1.1 KiB
JavaScript
Executable File
54 lines
1.1 KiB
JavaScript
Executable File
var Backbone = require('backbone');
|
|
var syncAbort = require('./backbone/sync-abort');
|
|
|
|
/**
|
|
* State definition model.
|
|
* Used to persist the dashboard state at any time
|
|
*/
|
|
module.exports = Backbone.Model.extend({
|
|
|
|
/**
|
|
* @override {Backbone.prototype.sync} abort ongoing request if there is any
|
|
*/
|
|
sync: syncAbort,
|
|
|
|
url: function () {
|
|
return this._visDefinitionModel.stateURL();
|
|
},
|
|
|
|
isNew: function () {
|
|
return false;
|
|
},
|
|
|
|
initialize: function (attrs, opts) {
|
|
if (!attrs.json) throw new Error('state json is required');
|
|
if (!opts.visDefinitionModel) throw new Error('visDefinitionModel is required');
|
|
|
|
this._visDefinitionModel = opts.visDefinitionModel;
|
|
},
|
|
|
|
toJSON: function () {
|
|
return {
|
|
json: this.get('json')
|
|
};
|
|
},
|
|
|
|
updateState: function (state) {
|
|
this.save({
|
|
json: state
|
|
});
|
|
},
|
|
|
|
setBounds: function (bounds) {
|
|
this.trigger('boundsSet', bounds);
|
|
},
|
|
|
|
getZoom: function () {
|
|
return this.get('json').map.zoom;
|
|
},
|
|
|
|
getCenter: function () {
|
|
return this.get('json').map.center;
|
|
}
|
|
});
|