keeweb/app/scripts/views/settings/settings-view.js

61 lines
1.7 KiB
JavaScript

import { View } from 'framework/views/view';
import { Events } from 'framework/events';
import { Keys } from 'const/keys';
import { Scrollable } from 'framework/views/scrollable';
import { StringFormat } from 'util/formatting/string-format';
import template from 'templates/settings/settings.hbs';
class SettingsView extends View {
parent = '.app__body';
template = template;
events = {
'click .settings__back-button': 'returnToApp'
};
constructor(model, options) {
super(model, options);
this.initScroll();
this.listenTo(Events, 'set-page', this.setPage);
this.onKey(Keys.DOM_VK_ESCAPE, this.returnToApp);
}
render() {
super.render();
this.createScroll({
root: this.$el.find('.settings')[0],
scroller: this.$el.find('.scroller')[0],
bar: this.$el.find('.scroller__bar')[0]
});
this.pageEl = this.$el.find('.scroller');
}
setPage(e) {
let { page, file } = e;
if (page === 'file' && file && file.external) {
page = 'file-external';
}
const module = require('./settings-' + page + '-view');
const viewName = StringFormat.pascalCase(page);
const SettingsPageView = module[`Settings${viewName}View`];
if (this.views.page) {
this.views.page.remove();
}
this.views.page = new SettingsPageView(file, { parent: this.pageEl[0] });
this.views.page.appModel = this.model;
this.views.page.render();
this.file = file;
this.page = page;
this.pageResized();
}
returnToApp() {
Events.emit('toggle-settings', false);
}
}
Object.assign(SettingsView.prototype, Scrollable);
export { SettingsView };