88 lines
2.0 KiB
JavaScript
Executable File
88 lines
2.0 KiB
JavaScript
Executable File
var _ = require('underscore');
|
|
var CoreView = require('backbone/core-view');
|
|
var OptionsItemView = require('./preview-options-item-view');
|
|
var template = require('./preview-options.tpl');
|
|
var templateNotReady = require('./options-not-ready.tpl');
|
|
|
|
var REQUIRED_OPTS = [
|
|
'mapDefinitionModel',
|
|
'settingsCollection',
|
|
'overlaysCollection'
|
|
];
|
|
|
|
module.exports = CoreView.extend({
|
|
initialize: function (opts) {
|
|
_.each(REQUIRED_OPTS, function (item) {
|
|
if (!opts[item]) throw new Error(item + ' is required');
|
|
this['_' + item] = opts[item];
|
|
}, this);
|
|
|
|
this._initBinds();
|
|
},
|
|
|
|
render: function () {
|
|
this.clearSubViews();
|
|
|
|
if (!this._overlaysCollection.hasFetched()) {
|
|
this.$el.html(templateNotReady());
|
|
} else {
|
|
this.$el.html(template());
|
|
this._initViews();
|
|
}
|
|
|
|
return this;
|
|
},
|
|
|
|
_initBinds: function () {
|
|
this._settingsCollection.on('change', this._onChangeOptions, this);
|
|
this.add_related_model(this._settingsCollection);
|
|
},
|
|
|
|
_onChangeOptions: function (m) {
|
|
var handler = m.get('related');
|
|
var property = m.get('setting');
|
|
var value = m.get('enabler');
|
|
|
|
if (handler === 'overlays') {
|
|
this._overlayHandler(property, value);
|
|
}
|
|
|
|
if (handler === 'map') {
|
|
this._mapHandler(property, value);
|
|
}
|
|
},
|
|
|
|
_initViews: function () {
|
|
this._settingsCollection.each(this._renderSetting, this);
|
|
},
|
|
|
|
_renderSetting: function (model) {
|
|
const hidden = model.get('hidden');
|
|
if (hidden) {
|
|
return;
|
|
}
|
|
|
|
const view = new OptionsItemView({
|
|
model: model
|
|
});
|
|
|
|
this.$('.js-settings').append(view.render().$el);
|
|
this.addView(view);
|
|
},
|
|
|
|
_overlayHandler: function (property, value) {
|
|
if (value === false) {
|
|
this._overlaysCollection.removeOverlay(property);
|
|
} else {
|
|
this._overlaysCollection.createOverlay(property);
|
|
}
|
|
},
|
|
|
|
_mapHandler: function (property, value) {
|
|
var payload = {};
|
|
payload[property] = value;
|
|
this._mapDefinitionModel.set(payload);
|
|
this._mapDefinitionModel.save();
|
|
}
|
|
});
|