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

114 lines
3.3 KiB
JavaScript
Raw Normal View History

2019-09-15 14:16:32 +02:00
import Backbone from 'backbone';
import { KeyHandler } from 'comp/browser/key-handler';
import { Keys } from 'const/keys';
import { UpdateModel } from 'models/update-model';
import { GeneratorView } from 'views/generator-view';
2015-10-17 23:49:24 +02:00
2017-01-31 07:50:28 +01:00
const FooterView = Backbone.View.extend({
2015-12-16 22:50:45 +01:00
template: require('templates/footer.hbs'),
2015-10-17 23:49:24 +02:00
events: {
'click .footer__db-item': 'showFile',
'click .footer__db-open': 'openFile',
2015-10-22 20:03:44 +02:00
'click .footer__btn-help': 'toggleHelp',
2015-10-17 23:49:24 +02:00
'click .footer__btn-settings': 'toggleSettings',
'click .footer__btn-generate': 'genPass',
'click .footer__btn-lock': 'lockWorkspace'
},
2019-08-18 10:17:09 +02:00
initialize() {
2015-10-19 23:24:32 +02:00
this.views = {};
2019-08-18 08:05:38 +02:00
KeyHandler.onKey(
Keys.DOM_VK_L,
this.lockWorkspace,
this,
KeyHandler.SHORTCUT_ACTION,
false,
true
);
2015-10-17 23:49:24 +02:00
KeyHandler.onKey(Keys.DOM_VK_G, this.genPass, this, KeyHandler.SHORTCUT_ACTION);
KeyHandler.onKey(Keys.DOM_VK_O, this.openFile, this, KeyHandler.SHORTCUT_ACTION);
KeyHandler.onKey(Keys.DOM_VK_S, this.saveAll, this, KeyHandler.SHORTCUT_ACTION);
KeyHandler.onKey(Keys.DOM_VK_COMMA, this.toggleSettings, this, KeyHandler.SHORTCUT_ACTION);
2016-04-15 21:27:48 +02:00
this.listenTo(this, 'hide', this.viewHidden);
2015-10-25 10:26:59 +01:00
this.listenTo(this.model.files, 'update reset change', this.render);
2016-08-24 22:06:25 +02:00
this.listenTo(Backbone, 'set-locale', this.render);
this.listenTo(UpdateModel.instance, 'change:updateStatus', this.render);
2015-10-17 23:49:24 +02:00
},
2019-08-18 10:17:09 +02:00
render() {
2019-08-16 23:05:39 +02:00
this.renderTemplate(
{
files: this.model.files,
2019-08-18 08:05:38 +02:00
updateAvailable:
['ready', 'found'].indexOf(UpdateModel.instance.get('updateStatus')) >= 0
2019-08-16 23:05:39 +02:00
},
{ plain: true }
);
2015-10-17 23:49:24 +02:00
return this;
},
2019-08-18 10:17:09 +02:00
viewHidden() {
2016-04-15 21:27:48 +02:00
if (this.views.gen) {
this.views.gen.remove();
delete this.views.gen;
}
},
2019-08-18 10:17:09 +02:00
lockWorkspace(e) {
if (this.model.files.hasOpenFiles()) {
e.preventDefault();
Backbone.trigger('lock-workspace');
}
2015-10-17 23:49:24 +02:00
},
2019-08-18 10:17:09 +02:00
genPass(e) {
2015-10-19 23:24:32 +02:00
e.stopPropagation();
if (this.views.gen) {
this.views.gen.remove();
return;
}
2017-01-31 07:50:28 +01:00
const el = this.$el.find('.footer__btn-generate');
const rect = el[0].getBoundingClientRect();
const bodyRect = document.body.getBoundingClientRect();
const right = bodyRect.right - rect.right;
const bottom = bodyRect.bottom - rect.top;
2019-08-18 08:05:38 +02:00
const generator = new GeneratorView({
2019-08-18 10:17:09 +02:00
model: { copy: true, pos: { right, bottom } }
2019-08-18 08:05:38 +02:00
}).render();
2019-08-16 23:05:39 +02:00
generator.once('remove', () => {
delete this.views.gen;
});
2015-10-19 23:24:32 +02:00
this.views.gen = generator;
2015-10-17 23:49:24 +02:00
},
2019-08-18 10:17:09 +02:00
showFile(e) {
2019-08-16 23:05:39 +02:00
const fileId = $(e.target)
.closest('.footer__db-item')
.data('file-id');
2015-10-17 23:49:24 +02:00
if (fileId) {
2019-08-18 10:17:09 +02:00
Backbone.trigger('show-file', { fileId });
2015-10-17 23:49:24 +02:00
}
},
2019-08-18 10:17:09 +02:00
openFile() {
2015-10-17 23:49:24 +02:00
Backbone.trigger('open-file');
},
2019-08-18 10:17:09 +02:00
saveAll() {
2015-10-17 23:49:24 +02:00
Backbone.trigger('save-all');
},
2019-08-18 10:17:09 +02:00
toggleHelp() {
2015-10-22 20:03:44 +02:00
Backbone.trigger('toggle-settings', 'help');
},
2019-08-18 10:17:09 +02:00
toggleSettings() {
2015-10-22 20:03:44 +02:00
Backbone.trigger('toggle-settings', 'general');
2015-10-17 23:49:24 +02:00
}
});
2019-09-15 14:16:32 +02:00
export { FooterView };