initial implementation of the label plugin webui, purely a mock up at the moment

This commit is contained in:
Damien Churchill 2010-04-24 02:32:18 +01:00
parent 1825ce09fb
commit 9cde1f3e45
3 changed files with 79 additions and 101 deletions

View File

@ -1,106 +1,84 @@
/* /*!
# Copyright (C) Martijn Voncken 2008 <mvoncken@gmail.com> * label.js
# *
# This program is free software; you can redistribute it and/or modify * Copyright (c) Damien Churchill 2010 <damoxc@gmail.com>
# it under the terms of the GNU General Public License as published by *
# the Free Software Foundation; either version 3, or (at your option) * This program is free software; you can redistribute it and/or modify
# any later version. * it under the terms of the GNU General Public License as published by
# * the Free Software Foundation; either version 3, or (at your option)
# This program is distributed in the hope that it will be useful, * any later version.
# but WITHOUT ANY WARRANTY; without even the implied warranty of *
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * This program is distributed in the hope that it will be useful,
# GNU General Public License for more details. * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# You should have received a copy of the GNU General Public License * GNU General Public License for more details.
# along with this program. If not, write to: *
# The Free Software Foundation, Inc., * You should have received a copy of the GNU General Public License
# 51 Franklin Street, Fifth Floor * along with this program. If not, write to:
# Boston, MA 02110-1301, USA. * The Free Software Foundation, Inc.,
# * 51 Franklin Street, Fifth Floor
# In addition, as a special exception, the copyright holders give * Boston, MA 02110-1301, USA.
# permission to link the code of portions of this program with the OpenSSL *
# library. * In addition, as a special exception, the copyright holders give
# You must obey the GNU General Public License in all respects for all of * permission to link the code of portions of this program with the OpenSSL
# the code used other than OpenSSL. If you modify file(s) with this * library.
# exception, you may extend this exception to your version of the file(s), * You must obey the GNU General Public License in all respects for all of
# but you are not obligated to do so. If you do not wish to do so, delete * the code used other than OpenSSL. If you modify file(s) with this
# this exception statement from your version. If you delete this exception * exception, you may extend this exception to your version of the file(s),
# statement from all source files in the program, then also delete it here. * 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 = {} createMenu: function() {
Plugins.Label = { this.labelMenu = new Ext.menu.Menu({
initialize : function() { items: [{
this.bound = { text: _('Add Label'),
addPopup: this.addPopup.bind(this), iconCls: 'icon-add'
labelAction: this.labelAction.bindWithEvent(this), }, {
}; text: _('Remove Label'),
disabled: true,
$$('.filter_label').each(this.bound.addPopup); iconCls: 'icon-remove'
}, {
var menu = new Widgets.PopupMenu(); text: _('Label Options'),
menu.add(this.menu); disabled: true
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;
}); });
}, },
/*callback handler*/ onDisable: function() {
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; onEnable: function() {
func(label_id); deluge.sidebar.on('filtercreate', this.onFilterCreate, this);
}, },
/*menu callbacks:*/ onFilterCreate: function(sidebar, filter) {
add: function(label_id) { if (filter.filter != 'label') return;
alert("Add Label:" + label_id); filter.list.on('contextmenu', this.onLabelContextMenu, this);
}, filter.header.on('contextmenu', this.onLabelHeaderContextMenu, this);
edit: function() {
alert("Edit Label:" + label_id);
},
remove: function() {
alert("Remove Label:" + label_id);
}, },
/*popup menu definition*/ onLabelContextMenu: function(dv, i, node, e) {
menu:[ e.preventDefault();
{ if (!this.labelMenu) this.createMenu();
type:'text', this.labelMenu.items.get(1).setDisabled(false);
action:'add', this.labelMenu.items.get(2).setDisabled(false);
text: _('Add Label'), dv.select(i);
icon:'/static/images/tango/pause.png' this.labelMenu.showAt(e.getXY());
}, },
{
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'
}
]
};
window.addEvent('domready', function(e) { onLabelHeaderContextMenu: function(e, t) {
Plugins.Label.initialize(); 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);

View File

@ -38,17 +38,17 @@
# #
import os import os
import pkg_resources
from deluge.common import fspeed from deluge.common import fspeed
from deluge.log import LOG as log from deluge.log import LOG as log
from deluge.ui.client import client from deluge.ui.client import client
from deluge.plugins.pluginbase import WebPluginBase from deluge.plugins.pluginbase import WebPluginBase
from deluge import component from deluge import component
def get_resource(filename):
return pkg_resources.resource_filename("label", os.path.join("data", filename))
class WebUI(WebPluginBase): class WebUI(WebPluginBase):
def enable(self): scripts = [get_resource("label.js")]
pass debug_scripts = scripts
def disable(self):
pass

View File

@ -69,7 +69,7 @@ setup(
%s = %s:CorePlugin %s = %s:CorePlugin
[deluge.plugin.gtkui] [deluge.plugin.gtkui]
%s = %s:GtkUIPlugin %s = %s:GtkUIPlugin
[deluge.plugin.webui] [deluge.plugin.web]
%s = %s:WebUIPlugin %s = %s:WebUIPlugin
""" % ((__plugin_name__, __plugin_name__.lower())*3) """ % ((__plugin_name__, __plugin_name__.lower())*3)
) )