# HG changeset patch
# User Charlie Root
# Date 1517157140 18000
# Node ID b2b6c0af2383c971e81153b438d8dd10233f7312
# Parent 4b2bc456ce42d77048846916585cd51cab1d8e9c
remove _ from name, lots of other hacks to get label context menu working
diff -r 4b2bc456ce42 -r b2b6c0af2383 plugins/thunderbird_labels/skins/larry/tb_label.css
--- a/plugins/thunderbird_labels/skins/larry/tb_label.css Thu Jan 18 07:54:45 2018 -0500
+++ b/plugins/thunderbird_labels/skins/larry/tb_label.css Sun Jan 28 11:32:20 2018 -0500
@@ -6,7 +6,7 @@
* CSS is Based on a patch for roundcube 0.3 I found a long time ago
*/
-#tb_label_popuplink {
+#tblabelpopuplink {
background-image: url(thunderbird_32.png);
/*background-repeat: repeat;*/
background-position: 50% 0px;
@@ -16,13 +16,13 @@
margin: 0px 5px 0px 5px;
}
-#tb_label_popup
+#tblabelpopup
{
width: auto;
position: absolute;
}
-#tb_label_popup a.active
+#tblabelpopup a.active
{
color: inherit; /* fix for firefox */
}
diff -r 4b2bc456ce42 -r b2b6c0af2383 plugins/thunderbird_labels/tb_label.js
--- a/plugins/thunderbird_labels/tb_label.js Thu Jan 18 07:54:45 2018 -0500
+++ b/plugins/thunderbird_labels/tb_label.js Sun Jan 28 11:32:20 2018 -0500
@@ -14,14 +14,14 @@
if (typeof rcmail_ui == "undefined")
rcmail_ui = UI;
if (!rcmail_ui.check_tb_popup())
- rcmail_ui.tb_label_popup_add();
+ rcmail_ui.tblabelpopup_add();
// Show the popup menu with tags
// -- skin larry vs classic
if (typeof rcmail_ui.show_popupmenu == "undefined")
- rcmail_ui.show_popup('tb_label_popup');
+ rcmail_ui.show_popup('tblabelpopup');
else
- rcmail_ui.show_popupmenu('tb_label_popup');
+ rcmail_ui.show_popupmenu('tblabelpopup');
return false;
}
@@ -82,12 +82,12 @@
// -- create sensible popup, using roundcubes internals
if (!rcmail_ui.check_tb_popup())
- rcmail_ui.tb_label_popup_add();
+ rcmail_ui.tblabelpopup_add();
// -- skin larry vs classic
if (typeof rcmail_ui.show_popupmenu == "undefined")
- rcmail_ui.show_popup('tb_label_popup');
+ rcmail_ui.show_popup('tblabelpopup');
else
- rcmail_ui.show_popupmenu('tb_label_popup');
+ rcmail_ui.show_popupmenu('tblabelpopup');
return false;
}
@@ -209,124 +209,127 @@
}
}
+function tblabeldoit(props,obj,event) {
+ var toggle_label = props;
+ var toggle_label_no = parseInt(toggle_label.replace('label', ''));
+ var label_name = rcmail.env.tb_label_custom_labels[toggle_label_no];
+ var hasParm = rcmail.env.tb_label_parm_labels[toggle_label_no];
+ var selection = rcm_tb_label_get_selection();
+
+ if (!selection.length)
+ return;
+
+ var from = toggle_label_no;
+ var to = toggle_label_no;
+ var unset_all = false;
+ // special case flag 0 means remove all flags
+ if (toggle_label_no == 0)
+ {
+ from = 1;
+ to = rcmail.env.tb_max_label;
+ ;
+ unset_all = true;
+ }
+ for (i = from; i <= to; i++)
+ {
+ toggle_label = 'label' + i;
+ toggle_label_no = i;
+ // compile list of unflag and flag msgs and then send command
+ // Thunderbird modifies multiple message flags like it did the first in the selection
+ // e.g. first message has flag1, you click flag1, every message select loses flag1, the ones not having flag1 don't get it!
+ var first_toggle_mode = 'on';
+ if (rcmail.env.messages)
+ {
+ var first_message = rcmail.env.messages[selection[0]];
+ if (first_message.flags
+ && jQuery.inArray(toggle_label_no,
+ first_message.flags.tb_labels) >= 0
+ )
+ first_toggle_mode = 'off';
+ else
+ first_toggle_mode = 'on';
+ }
+ else // single message display
+ {
+ // flag already set?
+ if (jQuery.inArray(toggle_label_no,
+ tb_labels_for_message) >= 0)
+ first_toggle_mode = 'off';
+ }
+ if (hasParm && first_toggle_mode == 'on') {
+ var dates=prompt("Booking dates in form d/m-d/m : ","25/7-1/8");
+ if (dates!=null){
+ toggle_label+='_'+dates;
+ }
+ else {
+ return;
+ }
+ }
+ var flag_uids = [];
+ var unflag_uids = [];
+ jQuery.each(selection, function (idx, uid) {
+ // message list not available (example: in detailview)
+ if (!rcmail.env.messages)
+ {
+ if (first_toggle_mode == 'on')
+ flag_uids.push(uid);
+ else
+ unflag_uids.push(uid);
+ // make sure for unset all there is the single message id
+ if (unset_all && unflag_uids.length == 0)
+ unflag_uids.push(uid);
+ return;
+ }
+ var message = rcmail.env.messages[uid];
+ if (message.flags
+ && jQuery.inArray(toggle_label_no,
+ message.flags.tb_labels) >= 0
+ )
+ {
+ if (first_toggle_mode == 'off')
+ unflag_uids.push(uid);
+ }
+ else
+ {
+ if (first_toggle_mode == 'on')
+ flag_uids.push(uid);
+ }
+ });
+
+ if (unset_all)
+ flag_uids = [];
+
+ // skip sending flags to backend that are not set anywhere
+ if (flag_uids.length == 0
+ && unflag_uids.length == 0)
+ continue;
+
+ var str_flag_uids = flag_uids.join(',');
+ var str_unflag_uids = unflag_uids.join(',');
+
+ var lock = rcmail.set_busy(true, 'loading');
+ // call PHP set_flags to set the flags in IMAP server
+ rcmail.http_request('plugin.thunderbird_labels.set_flags', '_flag_uids=' + str_flag_uids + '&_unflag_uids=' + str_unflag_uids + '&_mbox=' + urlencode(rcmail.env.mailbox) + "&_toggle_label=" + toggle_label, lock);
+
+ // remove/add classes and tb labels from messages in JS
+ rcm_tb_label_flag_msgs(flag_uids, toggle_label_no);
+ rcm_tb_label_unflag_msgs(unflag_uids, toggle_label_no);
+ }
+}
+
function rcm_tb_label_init_onclick()
{
var max_id = rcmail.env.tb_max_label;
for (i = 0; i <= max_id ; i++)
{
// find the "HTML a tags" of tb-label submenus
- var cur_a = $('#tb_label_popup li.label' + i +' a');
+ var cur_a = $('#tblabelpopup li.label' + i +' a');
// TODO check if click event is defined instead of unbinding?
cur_a.unbind('click');
- cur_a.click(function() {
- var toggle_label = $(this).parent().attr('class');
- var toggle_label_no = parseInt(toggle_label.replace('label', ''));
- var label_name = rcmail.env.tb_label_custom_labels[toggle_label_no];
- var hasParm = rcmail.env.tb_label_parm_labels[toggle_label_no];
- var selection = rcm_tb_label_get_selection();
-
- if (!selection.length)
- return;
-
- var from = toggle_label_no;
- var to = toggle_label_no;
- var unset_all = false;
- // special case flag 0 means remove all flags
- if (toggle_label_no == 0)
- {
- from = 1;
- to = rcmail.env.tb_max_label;
-;
- unset_all = true;
- }
- for (i = from; i <= to; i++)
- {
- toggle_label = 'label' + i;
- toggle_label_no = i;
- // compile list of unflag and flag msgs and then send command
- // Thunderbird modifies multiple message flags like it did the first in the selection
- // e.g. first message has flag1, you click flag1, every message select loses flag1, the ones not having flag1 don't get it!
- var first_toggle_mode = 'on';
- if (rcmail.env.messages)
- {
- var first_message = rcmail.env.messages[selection[0]];
- if (first_message.flags
- && jQuery.inArray(toggle_label_no,
- first_message.flags.tb_labels) >= 0
- )
- first_toggle_mode = 'off';
- else
- first_toggle_mode = 'on';
- }
- else // single message display
- {
- // flag already set?
- if (jQuery.inArray(toggle_label_no,
- tb_labels_for_message) >= 0)
- first_toggle_mode = 'off';
- }
- if (hasParm && first_toggle_mode == 'on') {
- var dates=prompt("Booking dates in form d/m-d/m : ","25/7-1/8");
- if (dates!=null){
- toggle_label+='_'+dates;
- }
- else {
- return;
- }
- }
- var flag_uids = [];
- var unflag_uids = [];
- jQuery.each(selection, function (idx, uid) {
- // message list not available (example: in detailview)
- if (!rcmail.env.messages)
- {
- if (first_toggle_mode == 'on')
- flag_uids.push(uid);
- else
- unflag_uids.push(uid);
- // make sure for unset all there is the single message id
- if (unset_all && unflag_uids.length == 0)
- unflag_uids.push(uid);
- return;
- }
- var message = rcmail.env.messages[uid];
- if (message.flags
- && jQuery.inArray(toggle_label_no,
- message.flags.tb_labels) >= 0
- )
- {
- if (first_toggle_mode == 'off')
- unflag_uids.push(uid);
- }
- else
- {
- if (first_toggle_mode == 'on')
- flag_uids.push(uid);
- }
- });
-
- if (unset_all)
- flag_uids = [];
-
- // skip sending flags to backend that are not set anywhere
- if (flag_uids.length == 0
- && unflag_uids.length == 0)
- continue;
-
- var str_flag_uids = flag_uids.join(',');
- var str_unflag_uids = unflag_uids.join(',');
-
- var lock = rcmail.set_busy(true, 'loading');
- // call PHP set_flags to set the flags in IMAP server
- rcmail.http_request('plugin.thunderbird_labels.set_flags', '_flag_uids=' + str_flag_uids + '&_unflag_uids=' + str_unflag_uids + '&_mbox=' + urlencode(rcmail.env.mailbox) + "&_toggle_label=" + toggle_label, lock);
-
- // remove/add classes and tb labels from messages in JS
- rcm_tb_label_flag_msgs(flag_uids, toggle_label_no);
- rcm_tb_label_unflag_msgs(unflag_uids, toggle_label_no);
- }
- });
+ cur_a.attr('onclick',"rcmail.command('tblabeldoit','label"+i+"',this,event)");
}
+ rcmail.register_command('tblabeldoit',function(props,obj,event) {tblabeldoit(props,obj,event);});
}
function rcmail_ctxm_label(command, el, pos)
@@ -340,7 +343,7 @@
if (!selection.length && rcmail.env.uid)
rcmail.message_list.select_row(rcmail.env.uid);
- var cur_a = $('#tb_label_popup li.label' + rcmail.tb_label_no +' a');
+ var cur_a = $('#tblabelpopup li.label' + rcmail.tb_label_no +' a');
if (cur_a)
{
cur_a.click();
@@ -366,7 +369,7 @@
if ((k > 47 && k < 58) || (k > 95 && k < 106))
{
var label_no = k % 48;
- var cur_a = $('#tb_label_popup li.label' + label_no + ' a');
+ var cur_a = $('#tblabelpopup li.label' + label_no + ' a');
if (cur_a)
{
@@ -375,11 +378,19 @@
}
});
}
-
+ rcmail.addEventListener('contextmenu_init', function(menu) {
+ // identify the folder list context menu
+ if (menu.menu_name == 'messagelist') {
+ var mc = menu.menu_source.length; // BREAK HERE
+ //.push({label: 'Labels', command: 'folders', props: '', classes: 'managefolders'}); }
+ }
+ }
+ );
// if exists add contextmenu entries
- if (window.rcm_contextmenu_register_command) {
+ /*if (window.rcm_contextmenu_register_command) {
+ [Doesn't exist -- HST]
rcm_contextmenu_register_command('ctxm_tb_label', rcmail_ctxm_label, $('#tb_label_ctxm_mainmenu'), 'moreacts', 'after', true);
- }
+ }*/
// single message displayed?
if (window.tb_labels_for_message)
@@ -399,10 +410,10 @@
// add roundcube events
rcmail.addEventListener('insertrow', function(event) { rcm_tb_label_insert(event.uid, event.row); });
-
+
rcmail.addEventListener('init', function(evt) {
// create custom button, JS method, broken layout in Firefox 9 using PHP method now
- /*var button = $('').attr('href', '#').attr('id', 'tb_label_popuplink').attr('title', rcmail.gettext('label', 'thunderbird_labels')).html('');
+ /*var button = $('').attr('href', '#').attr('id', 'tblabelpopuplink').attr('title', rcmail.gettext('label', 'thunderbird_labels')).html('');
button.bind('click', function(e) {
rcmail.command('plugin.thunderbird_labels.rcm_tb_label_submenu', this);
@@ -411,7 +422,7 @@
// add and register
rcmail.add_element(button, 'toolbar');
- rcmail.register_button('plugin.thunderbird_labels.rcm_tb_label_submenu', 'tb_label_popuplink', 'link');
+ rcmail.register_button('plugin.thunderbird_labels.rcm_tb_label_submenu', 'tblabelpopuplink', 'link');
*/
//rcmail.register_command('plugin.thunderbird_labels.rcm_tb_label_submenu', rcm_tb_label_submenu, true);
rcmail.register_command('plugin.thunderbird_labels.rcm_tb_label_submenu', rcm_tb_label_submenu, rcmail.env.uid);
@@ -421,21 +432,24 @@
rcmail.message_list.addEventListener('select', function(list){
rcmail.enable_command('plugin.thunderbird_labels.rcm_tb_label_submenu', list.get_selection().length > 0);
});
+ rcmail.message_list.addEventListener('select', function(list) {
+ rcmail.enable_command('tblabeldoit',list.get_selection().length > 0);
+ });
}
- });
+ });
// -- add my submenu to roundcubes UI (for roundcube classic only?)
if (window.rcube_mail_ui)
- rcube_mail_ui.prototype.tb_label_popup_add = function() {
+ rcube_mail_ui.prototype.tblabelpopup_add = function() {
add = {
- tb_label_popup: {id:'tb_label_popup'}
+ tblabelpopup: {id:'tblabelpopup'}
};
this.popups = $.extend(this.popups, add);
- var obj = $('#'+this.popups.tb_label_popup.id);
+ var obj = $('#'+this.popups.tblabelpopup.id);
if (obj.length)
- this.popups.tb_label_popup.obj = obj;
+ this.popups.tblabelpopup.obj = obj;
else
- delete this.popups.tb_label_popup;
+ delete this.popups.tblabelpopup;
};
if (window.rcube_mail_ui)
@@ -443,7 +457,7 @@
// larry skin doesn't have that variable, popup works automagically, return true
if (typeof this.popups == 'undefined')
return true;
- if (this.popups.tb_label_popup)
+ if (this.popups.tblabelpopup)
return true;
else
return false;
diff -r 4b2bc456ce42 -r b2b6c0af2383 plugins/thunderbird_labels/thunderbird_labels.php
--- a/plugins/thunderbird_labels/thunderbird_labels.php Thu Jan 18 07:54:45 2018 -0500
+++ b/plugins/thunderbird_labels/thunderbird_labels.php Sun Jan 28 11:32:20 2018 -0500
@@ -44,7 +44,7 @@
$this->add_hook('messages_list', array($this, 'read_flags'));
$this->add_hook('message_load', array($this, 'read_single_flags'));
$this->add_hook('template_object_messageheaders', array($this, 'color_headers'));
- $this->add_hook('render_page', array($this, 'tb_label_popup'));
+ $this->add_hook('render_page', array($this, 'tblabelpopup'));
$this->include_stylesheet($this->local_skin_path() . '/tb_label.css');
$this->name = get_class($this);
@@ -55,20 +55,35 @@
}
$this->message_tb_labels = array();
+ # This builds the toolbar button, but
+ # it's also used by the ctxtmenu initialisation
+ # contextmenu.js:rcube_context_menu to build
+ # the context menu, and that somehow
+ # ends up with display: none???
+ # Bother, missed it, it's before this.container.show
+ # Afeter ul.appendnd -- inside menu.show on 307
+ # 567? Yes -- that's calling 'hide', but overriding
+ # doesn't fix :-(
+ rcube::write_log('lab','add_button');
$this->add_button(
array(
- 'command' => 'plugin.thunderbird_labels.rcm_tb_label_submenu',
- 'id' => 'tb_label_popuplink',
+ #'command' => 'plugin.thunderbird_labels.rcm_tb_label_submenu',
+ 'name' => 'tblabellink',
+ 'id' => 'tblabelpopuplink',
+ #'domain' => $this->ID,
+ 'type' => 'link',
+ 'class' => 'button tblabel',
+ 'label' => $this->gettext('tb_label_button_label'),
'title' => 'tb_label_button_title',
- 'domain' => $this->ID,
- 'type' => 'link',
- 'content' => $this->gettext('tb_label_button_label'),
- 'class' => 'button buttonPas disabled',
- 'classact' => 'button',
+ 'onclick' => "UI.toggle_popup('tblabelpopup',event);return false",
+ 'aria-haspopup' => true,
+ 'aria-expanded' => false,
+ 'aria-owns' => 'plugin.thunderbird_labels.rcm_tb_label_submenu-menu'
+ #'classact' => 'listbutton add',
),
'toolbar'
);
-
+
// JS function "set_flags" => PHP function "set_flags"
$this->register_action('plugin.thunderbird_labels.set_flags', array($this, 'set_flags'));
@@ -80,10 +95,10 @@
{
if ($this->rc->action == 'list')
$this->add_hook('render_mailboxlist', array($this, 'show_tb_label_contextmenu'));
- #rcube::write_log('lab','ctxt: '.$this->rc->action);
+ rcube::write_log('lab','ctxt: '.$this->rc->action);
}
else {
- #rcube::write_log('lab','no ctxt');
+ rcube::write_log('lab','no ctxt');
}
}
elseif ($this->rc->task == 'settings')
@@ -264,17 +279,19 @@
}
public function show_tb_label_contextmenu($args)
+ # never called?
{
#$this->api->output->add_label('copymessage.copyingmessage');
- #rcube::write_log('lab',"stblc");
$li = html::tag('li',
array('class' => 'submenu'),
''.rcube::Q($this->gettext('tb_label_contextmenu_title')).'' . $this->_gen_label_submenu($args, 'tb_label_ctxm_submenu'));
$out .= html::tag('ul', array('id' => 'tb_label_ctxm_mainmenu'), $li);
+ rcube::write_log('lab',"stblc $out");
$this->api->output->add_footer(html::div(array('style' => 'display: none;'), $out));
}
private function _gen_label_submenu($args, $id)
+ # never called?
{
$out = '';
$custom_labels = $this->rc->config->get('tb_label_custom_labels');
@@ -513,21 +530,22 @@
$this->api->output->send();
}
- function tb_label_popup()
+ function tblabelpopup()
{
$custom_labels = $this->rc->config->get('tb_label_custom_labels');
$max_id = $this->rc->config->get('tb_max_label');
- $out = '