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

81 lines
2.8 KiB
JavaScript
Raw Normal View History

2017-02-18 23:46:59 +01:00
const Backbone = require('backbone');
const Locale = require('../../util/locale');
const PluginManager = require('../../plugins/plugin-manager');
2017-02-19 12:40:21 +01:00
const AppSettingsModel = require('../../models/app-settings-model');
2017-02-18 23:46:59 +01:00
const SettingsPluginsView = Backbone.View.extend({
template: require('templates/settings/settings-plugins.hbs'),
events: {
2017-02-19 12:40:21 +01:00
'click .settings_plugins-install-btn': 'installClick',
'click .settings_plugins-uninstall-btn': 'uninstallClick',
2017-02-21 22:05:18 +01:00
'click .settings_plugins-use-locale-btn': 'useLocaleClick',
'click .settings_plugins-use-theme-btn': 'useThemeClick'
2017-02-19 12:40:21 +01:00
},
initialize() {
this.listenTo(PluginManager, 'change:installing change:uninstalling', this.render.bind(this));
2017-02-18 23:46:59 +01:00
},
render() {
2017-02-19 12:40:21 +01:00
const lastInstall = PluginManager.get('lastInstall') || {};
2017-02-18 23:46:59 +01:00
this.renderTemplate({
2017-02-19 12:40:21 +01:00
plugins: PluginManager.get('plugins').map(plugin => ({
id: plugin.id,
manifest: plugin.get('manifest'),
2017-02-19 19:30:59 +01:00
status: plugin.get('status'),
installTime: Math.round(plugin.get('installTime'))
2017-02-19 12:40:21 +01:00
})),
lastInstallUrl: PluginManager.get('installing') || (lastInstall.error ? lastInstall.url : ''),
lastInstallError: lastInstall.error
2017-02-18 23:46:59 +01:00
});
2017-02-19 12:40:21 +01:00
return this;
2017-02-18 23:46:59 +01:00
},
installClick() {
const installBtn = this.$el.find('.settings_plugins-install-btn');
const urlTextBox = this.$el.find('#settings__plugins-install-url');
const errorBox = this.$el.find('.settings__plugins-install-error');
errorBox.html('');
const url = urlTextBox.val().trim();
if (!url) {
return;
}
urlTextBox.prop('disabled', true);
installBtn.text(Locale.setPlInstallBtnProgress + '...').prop('disabled', true);
PluginManager.install(url)
.then(() => {
this.installFinished();
urlTextBox.val('');
})
.catch(e => {
this.installFinished();
errorBox.text(e.toString());
});
},
installFinished() {
const installBtn = this.$el.find('.settings_plugins-install-btn');
const urlTextBox = this.$el.find('#settings__plugins-install-url');
urlTextBox.prop('disabled', false);
installBtn.text(Locale.setPlInstallBtn).prop('disabled', false);
2017-02-19 12:40:21 +01:00
},
uninstallClick(e) {
const pluginId = $(e.target).data('plugin');
PluginManager.uninstall(pluginId);
},
useLocaleClick(e) {
const locale = $(e.target).data('locale');
AppSettingsModel.instance.set('locale', locale);
2017-02-21 22:05:18 +01:00
},
useThemeClick(e) {
const theme = $(e.target).data('theme');
AppSettingsModel.instance.set('theme', theme);
2017-02-18 23:46:59 +01:00
}
});
module.exports = SettingsPluginsView;