diff --git a/deluge/plugins/label/label/data/label.js b/deluge/plugins/label/label/data/label.js index 4cfd3083e..563b3de6b 100644 --- a/deluge/plugins/label/label/data/label.js +++ b/deluge/plugins/label/label/data/label.js @@ -1,106 +1,84 @@ -/* -# Copyright (C) Martijn Voncken 2008 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, write to: -# The Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor -# Boston, MA 02110-1301, USA. -# -# In addition, as a special exception, the copyright holders give -# permission to link the code of portions of this program with the OpenSSL -# library. -# You must obey the GNU General Public License in all respects for all of -# the code used other than OpenSSL. If you modify file(s) with this -# exception, you may extend this exception to your version of the file(s), -# but you are not obligated to do so. If you do not wish to do so, delete -# this exception statement from your version. If you delete this exception -# statement from all source files in the program, then also delete it here. -# -# -*/ +/*! + * label.js + * + * Copyright (c) Damien Churchill 2010 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, write to: + * The Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301, USA. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.plugins.LabelPlugin = Ext.extend(Deluge.Plugin, { -popup_icon = "/static/images/tango/emblem-symbolic-link.png" /*the best i could find in 15 minutes, i still hate it.*/ + name: 'Label', -Plugins = {} -Plugins.Label = { - initialize : function() { - this.bound = { - addPopup: this.addPopup.bind(this), - labelAction: this.labelAction.bindWithEvent(this), - }; - - $$('.filter_label').each(this.bound.addPopup); - - var menu = new Widgets.PopupMenu(); - menu.add(this.menu); - menu.addEvent('action', this.bound.labelAction); - - }, - - /*add menu to html-ui*/ - addPopup: function (el) { - - var label_id = el.id.substring(13); /*crop of "filter_label_"*/ - el.addEvent('contextmenu', function(el) { - alert('popup menu here : [label="' + label_id + '"] (using this.menu definitions)'); - return false; + createMenu: function() { + this.labelMenu = new Ext.menu.Menu({ + items: [{ + text: _('Add Label'), + iconCls: 'icon-add' + }, { + text: _('Remove Label'), + disabled: true, + iconCls: 'icon-remove' + }, { + text: _('Label Options'), + disabled: true + }] }); }, - - /*callback handler*/ - labelAction: function(action, label_id) { - // We use $empty here to ensure that there is some form of a - // function to call - func = ($defined(this[action])) ? this[action] : $empty; - func(label_id); + + onDisable: function() { + + }, + + onEnable: function() { + deluge.sidebar.on('filtercreate', this.onFilterCreate, this); }, - /*menu callbacks:*/ - add: function(label_id) { - alert("Add Label:" + label_id); - }, - edit: function() { - alert("Edit Label:" + label_id); - }, - remove: function() { - alert("Remove Label:" + label_id); + onFilterCreate: function(sidebar, filter) { + if (filter.filter != 'label') return; + filter.list.on('contextmenu', this.onLabelContextMenu, this); + filter.header.on('contextmenu', this.onLabelHeaderContextMenu, this); }, - /*popup menu definition*/ - menu:[ - { - type:'text', - action:'add', - text: _('Add Label'), - icon:'/static/images/tango/pause.png' - }, - { - type: 'text', - action: 'edit', - text: _('Label Options'), - icon: '/static/images/tango/start.png' - }, - { - type: 'text', - action: 'remove', - text: _('Remove Label'), - icon: '/static/images/tango/start.png' - } - ] -}; + onLabelContextMenu: function(dv, i, node, e) { + e.preventDefault(); + if (!this.labelMenu) this.createMenu(); + this.labelMenu.items.get(1).setDisabled(false); + this.labelMenu.items.get(2).setDisabled(false); + dv.select(i); + this.labelMenu.showAt(e.getXY()); + }, -window.addEvent('domready', function(e) { - Plugins.Label.initialize(); + onLabelHeaderContextMenu: function(e, t) { + e.preventDefault(); + if (!this.labelMenu) this.createMenu(); + this.labelMenu.items.get(1).setDisabled(true); + this.labelMenu.items.get(2).setDisabled(true); + this.labelMenu.showAt(e.getXY()); + } }); +Deluge.registerPlugin('Label', Deluge.plugins.LabelPlugin); diff --git a/deluge/plugins/label/label/webui.py b/deluge/plugins/label/label/webui.py index 102660fbe..bfc495307 100644 --- a/deluge/plugins/label/label/webui.py +++ b/deluge/plugins/label/label/webui.py @@ -38,17 +38,17 @@ # import os +import pkg_resources from deluge.common import fspeed from deluge.log import LOG as log from deluge.ui.client import client from deluge.plugins.pluginbase import WebPluginBase from deluge import component +def get_resource(filename): + return pkg_resources.resource_filename("label", os.path.join("data", filename)) class WebUI(WebPluginBase): - def enable(self): - pass - - def disable(self): - pass + scripts = [get_resource("label.js")] + debug_scripts = scripts diff --git a/deluge/plugins/label/setup.py b/deluge/plugins/label/setup.py index 89da2b4c7..4fc344484 100644 --- a/deluge/plugins/label/setup.py +++ b/deluge/plugins/label/setup.py @@ -69,7 +69,7 @@ setup( %s = %s:CorePlugin [deluge.plugin.gtkui] %s = %s:GtkUIPlugin - [deluge.plugin.webui] + [deluge.plugin.web] %s = %s:WebUIPlugin """ % ((__plugin_name__, __plugin_name__.lower())*3) )