From 2e2851dc13d73352530dd4495c7e05603b2e520d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 23:38:38 +0200 Subject: Adding upstream version 2.1.2~dev0+20240219. Signed-off-by: Daniel Baumann --- .../web/js/deluge-all/preferences/PluginsPage.js | 277 +++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 deluge/ui/web/js/deluge-all/preferences/PluginsPage.js (limited to 'deluge/ui/web/js/deluge-all/preferences/PluginsPage.js') diff --git a/deluge/ui/web/js/deluge-all/preferences/PluginsPage.js b/deluge/ui/web/js/deluge-all/preferences/PluginsPage.js new file mode 100644 index 0000000..f771d96 --- /dev/null +++ b/deluge/ui/web/js/deluge-all/preferences/PluginsPage.js @@ -0,0 +1,277 @@ +/** + * Deluge.preferences.PluginsPage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with + * the additional special exception to link portions of this program with the OpenSSL library. + * See LICENSE for more details. + */ +Ext.namespace('Deluge.preferences'); + +/** + * @class Deluge.preferences.Plugins + * @extends Ext.Panel + */ +Deluge.preferences.Plugins = Ext.extend(Ext.Panel, { + layout: 'border', + title: _('Plugins'), + header: false, + border: false, + cls: 'x-deluge-plugins', + + pluginTemplate: new Ext.Template( + '
' + + '
' + + _('Author:') + + '
{author}
' + + '
' + + _('Version:') + + '
{version}
' + + '
' + + _('Author Email:') + + '
{email}
' + + '
' + + _('Homepage:') + + '
{homepage}
' + + '
' + + _('Details:') + + '
{details}
' + + '
' + ), + + initComponent: function () { + Deluge.preferences.Plugins.superclass.initComponent.call(this); + this.defaultValues = { + version: '', + email: '', + homepage: '', + details: '', + }; + this.pluginTemplate.compile(); + + var checkboxRenderer = function (v, p, record) { + p.css += ' x-grid3-check-col-td'; + return ( + '
' + ); + }; + + this.list = this.add({ + xtype: 'listview', + store: new Ext.data.ArrayStore({ + fields: [ + { name: 'enabled', mapping: 0 }, + { name: 'plugin', mapping: 1, sortType: 'asUCString' }, + ], + }), + columns: [ + { + id: 'enabled', + header: _('Enabled'), + width: 0.2, + sortable: true, + tpl: new Ext.XTemplate('{enabled:this.getCheckbox}', { + getCheckbox: function (v) { + return ( + '
' + ); + }, + }), + dataIndex: 'enabled', + }, + { + id: 'plugin', + header: _('Plugin'), + width: 0.8, + sortable: true, + dataIndex: 'plugin', + }, + ], + singleSelect: true, + autoExpandColumn: 'plugin', + listeners: { + selectionchange: { fn: this.onPluginSelect, scope: this }, + }, + }); + + this.panel = this.add({ + region: 'center', + autoScroll: true, + items: [this.list], + bbar: new Ext.Toolbar({ + items: [ + { + cls: 'x-btn-text-icon', + iconCls: 'x-deluge-install-plugin', + text: _('Install'), + handler: this.onInstallPluginWindow, + scope: this, + }, + '->', + { + cls: 'x-btn-text-icon', + text: _('Find More'), + iconCls: 'x-deluge-find-more', + handler: this.onFindMorePlugins, + scope: this, + }, + ], + }), + }); + + var pp = (this.pluginInfo = this.add({ + xtype: 'panel', + border: false, + height: 100, + region: 'south', + padding: '5', + autoScroll: true, + bodyCfg: { + style: 'white-space: nowrap', + }, + })); + + this.pluginInfo.on('render', this.onPluginInfoRender, this); + this.list.on('click', this.onNodeClick, this); + deluge.preferences.on('show', this.onPreferencesShow, this); + deluge.events.on('PluginDisabledEvent', this.onPluginDisabled, this); + deluge.events.on('PluginEnabledEvent', this.onPluginEnabled, this); + }, + + disablePlugin: function (plugin) { + deluge.client.core.disable_plugin(plugin); + }, + + enablePlugin: function (plugin) { + deluge.client.core.enable_plugin(plugin); + }, + + setInfo: function (plugin) { + if (!this.pluginInfo.rendered) return; + var values = plugin || this.defaultValues; + this.pluginInfo.body.dom.innerHTML = this.pluginTemplate.apply(values); + }, + + updatePlugins: function () { + var onGotAvailablePlugins = function (plugins) { + this.availablePlugins = plugins.sort(function (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }); + + deluge.client.core.get_enabled_plugins({ + success: onGotEnabledPlugins, + scope: this, + }); + }; + + var onGotEnabledPlugins = function (plugins) { + this.enabledPlugins = plugins; + this.onGotPlugins(); + }; + + deluge.client.core.get_available_plugins({ + success: onGotAvailablePlugins, + scope: this, + }); + }, + + updatePluginsGrid: function () { + var plugins = []; + Ext.each( + this.availablePlugins, + function (plugin) { + if (this.enabledPlugins.indexOf(plugin) > -1) { + plugins.push([true, plugin]); + } else { + plugins.push([false, plugin]); + } + }, + this + ); + this.list.getStore().loadData(plugins); + }, + + onNodeClick: function (dv, index, node, e) { + var el = new Ext.Element(e.target); + if (el.getAttribute('rel') != 'chkbox') return; + + var r = dv.getStore().getAt(index); + if (r.get('plugin') == 'WebUi') return; + r.set('enabled', !r.get('enabled')); + r.commit(); + if (r.get('enabled')) { + this.enablePlugin(r.get('plugin')); + } else { + this.disablePlugin(r.get('plugin')); + } + }, + + onFindMorePlugins: function () { + window.open('http://dev.deluge-torrent.org/wiki/Plugins'); + }, + + onGotPlugins: function () { + this.setInfo(); + this.updatePluginsGrid(); + }, + + onGotPluginInfo: function (info) { + var values = { + author: info['Author'], + version: info['Version'], + email: info['Author-email'], + homepage: info['Home-page'], + details: info['Description'], + }; + this.setInfo(values); + delete info; + }, + + onInstallPluginWindow: function () { + if (!this.installWindow) { + this.installWindow = new Deluge.preferences.InstallPluginWindow(); + this.installWindow.on('pluginadded', this.onPluginInstall, this); + } + this.installWindow.show(); + }, + + onPluginEnabled: function (pluginName) { + var index = this.list.getStore().find('plugin', pluginName); + if (index == -1) return; + var plugin = this.list.getStore().getAt(index); + plugin.set('enabled', true); + plugin.commit(); + }, + + onPluginDisabled: function (pluginName) { + var index = this.list.getStore().find('plugin', pluginName); + if (index == -1) return; + var plugin = this.list.getStore().getAt(index); + plugin.set('enabled', false); + plugin.commit(); + }, + + onPluginInstall: function () { + this.updatePlugins(); + }, + + onPluginSelect: function (dv, selections) { + if (selections.length == 0) return; + var r = dv.getRecords(selections)[0]; + deluge.client.web.get_plugin_info(r.get('plugin'), { + success: this.onGotPluginInfo, + scope: this, + }); + }, + + onPreferencesShow: function () { + this.updatePlugins(); + }, + + onPluginInfoRender: function (ct, position) { + this.setInfo(); + }, +}); -- cgit v1.2.3