2017-02-18 23:46:59 +01:00
|
|
|
const Backbone = require('backbone');
|
|
|
|
const Locale = require('../../util/locale');
|
|
|
|
const PluginManager = require('../../plugins/plugin-manager');
|
2017-05-13 22:36:07 +02:00
|
|
|
const PluginGallery = require('../../plugins/plugin-gallery');
|
2017-02-19 12:40:21 +01:00
|
|
|
const AppSettingsModel = require('../../models/app-settings-model');
|
2017-04-26 22:12:41 +02:00
|
|
|
const Comparators = require('../../util/comparators');
|
2017-05-13 14:00:03 +02:00
|
|
|
const Format = require('../../util/format');
|
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-04-26 22:06:07 +02:00
|
|
|
'click .settings_plugins-disable-btn': 'disableClick',
|
|
|
|
'click .settings_plugins-enable-btn': 'enableClick',
|
2017-04-08 23:35:26 +02:00
|
|
|
'click .settings_plugins-update-btn': 'updateClick',
|
2017-02-21 22:05:18 +01:00
|
|
|
'click .settings_plugins-use-locale-btn': 'useLocaleClick',
|
2017-05-13 22:36:07 +02:00
|
|
|
'click .settings_plugins-use-theme-btn': 'useThemeClick',
|
|
|
|
'click .settings__plugins-gallery-plugin-install-btn': 'galleryInstallClick'
|
2017-02-19 12:40:21 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
initialize() {
|
2017-04-26 22:06:07 +02:00
|
|
|
this.listenTo(PluginManager, 'change', this.render.bind(this));
|
2017-05-13 22:36:07 +02:00
|
|
|
this.listenTo(Backbone, 'plugin-gallery-load-complete', this.render.bind(this));
|
|
|
|
PluginGallery.loadPlugins();
|
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'),
|
2017-04-08 23:35:26 +02:00
|
|
|
installTime: Math.round(plugin.get('installTime')),
|
2017-04-27 14:50:36 +02:00
|
|
|
updateError: plugin.get('updateError'),
|
2017-05-13 14:00:03 +02:00
|
|
|
updateCheckDate: Format.dtStr(plugin.get('updateCheckDate')),
|
2017-05-13 22:36:49 +02:00
|
|
|
installError: plugin.get('installError')
|
2017-04-26 22:12:41 +02:00
|
|
|
})).sort(Comparators.stringComparator('id', true)),
|
2017-02-19 12:40:21 +01:00
|
|
|
lastInstallUrl: PluginManager.get('installing') || (lastInstall.error ? lastInstall.url : ''),
|
2017-05-13 22:36:07 +02:00
|
|
|
lastInstallError: lastInstall.error,
|
|
|
|
galleryLoading: PluginGallery.loading,
|
|
|
|
galleryLoadError: PluginGallery.loadError,
|
|
|
|
gallery: this.getGallery()
|
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
|
|
|
},
|
|
|
|
|
2017-05-13 22:36:07 +02:00
|
|
|
getGallery() {
|
|
|
|
if (!PluginGallery.gallery) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return PluginGallery.gallery;
|
|
|
|
},
|
|
|
|
|
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);
|
|
|
|
},
|
|
|
|
|
2017-04-26 22:06:07 +02:00
|
|
|
disableClick(e) {
|
|
|
|
const pluginId = $(e.target).data('plugin');
|
|
|
|
PluginManager.disable(pluginId);
|
|
|
|
},
|
|
|
|
|
|
|
|
enableClick(e) {
|
|
|
|
const pluginId = $(e.target).data('plugin');
|
|
|
|
PluginManager.activate(pluginId);
|
|
|
|
},
|
|
|
|
|
2017-04-08 23:35:26 +02:00
|
|
|
updateClick(e) {
|
|
|
|
const pluginId = $(e.target).data('plugin');
|
|
|
|
PluginManager.update(pluginId);
|
|
|
|
},
|
|
|
|
|
2017-02-19 12:40:21 +01:00
|
|
|
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-05-13 22:36:07 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
galleryInstallClick(e) {
|
|
|
|
const pluginId = $(e.target).data('plugin');
|
|
|
|
const plugin = PluginGallery.gallery.plugins.find(pl => pl.manifest.name === pluginId);
|
|
|
|
PluginManager.install(plugin.url, plugin.manifest);
|
2017-02-18 23:46:59 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
module.exports = SettingsPluginsView;
|