From 3412e50b54e3daac8745234e21ab6e72be0ed165 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Wed, 04 Jun 2014 11:20:33 -0400 Subject: [PATCH] Fix attachment menu structure and aria-attributes --- plugins/managesieve/managesieve.js | 145 +++++++++++++++++++++++++++++++---------------- 1 files changed, 95 insertions(+), 50 deletions(-) diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js index 5a75ef1..27ab38a 100644 --- a/plugins/managesieve/managesieve.js +++ b/plugins/managesieve/managesieve.js @@ -1,4 +1,19 @@ -/* (Manage)Sieve Filters */ +/** + * (Manage)Sieve Filters plugin + * + * @licstart The following is the entire license notice for the + * JavaScript code in this file. + * + * Copyright (c) 2012-2014, The Roundcube Dev Team + * + * The JavaScript code in this page 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 of + * the License, or (at your option) any later version. + * + * @licend The above is the entire license notice + * for the JavaScript code in this file. + */ if (window.rcmail) { rcmail.addEventListener('init', function(evt) { @@ -10,18 +25,8 @@ else rcmail.enable_command('managesieve-create', true); } - else { - var tab = $('<span>').attr('id', 'settingstabpluginmanagesieve').addClass('tablink filter'), - button = $('<a>').attr('href', rcmail.env.comm_path+'&_action=plugin.managesieve') - .attr('title', rcmail.gettext('managesieve.managefilters')) - .html(rcmail.gettext('managesieve.filters')) - .appendTo(tab); - // add tab - rcmail.add_element(tab, 'tabs'); - } - - if (rcmail.env.task == 'mail' || rcmail.env.action.indexOf('plugin.managesieve') != -1) { + if (rcmail.env.task == 'mail' || rcmail.env.action.startsWith('plugin.managesieve')) { // Create layer for form tips if (!rcmail.env.framed) { rcmail.env.ms_tip_layer = $('<div id="managesieve-tip" class="popupmenu"></div>'); @@ -40,7 +45,7 @@ rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() }); rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() }); - if (rcmail.env.action == 'plugin.managesieve' || rcmail.env.action == 'plugin.managesieve-save') { + if (rcmail.env.action.startsWith('plugin.managesieve')) { if (rcmail.gui_objects.sieveform) { rcmail.enable_command('plugin.managesieve-save', true); @@ -60,6 +65,18 @@ $('textarea[data-type="list"]', rcmail.gui_objects.sieveform).each(function() { smart_field_init(this); }); + + // enable date pickers on date fields + if ($.datepicker && rcmail.env.date_format) { + $.datepicker.setDefaults({ + dateFormat: rcmail.env.date_format, + changeMonth: true, + showOtherMonths: true, + selectOtherMonths: true, + onSelect: function(dateText) { $(this).focus().val(dateText) } + }); + $('input.datepicker').datepicker(); + } } else { rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror); @@ -70,22 +87,25 @@ if (rcmail.gui_objects.filterslist) { rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:true, keyboard:false}); - rcmail.filters_list.addEventListener('select', function(e) { p.managesieve_select(e); }); - rcmail.filters_list.addEventListener('dragstart', function(e) { p.managesieve_dragstart(e); }); - rcmail.filters_list.addEventListener('dragend', function(e) { p.managesieve_dragend(e); }); - rcmail.filters_list.row_init = function (row) { - row.obj.onmouseover = function() { p.managesieve_focus_filter(row); }; - row.obj.onmouseout = function() { p.managesieve_unfocus_filter(row); }; - }; - rcmail.filters_list.init(); - rcmail.filters_list.focus(); + + rcmail.filters_list + .addEventListener('select', function(e) { p.managesieve_select(e); }) + .addEventListener('dragstart', function(e) { p.managesieve_dragstart(e); }) + .addEventListener('dragend', function(e) { p.managesieve_dragend(e); }) + .addEventListener('initrow', function(row) { + row.obj.onmouseover = function() { p.managesieve_focus_filter(row); }; + row.obj.onmouseout = function() { p.managesieve_unfocus_filter(row); }; + }) + .init().focus(); } if (rcmail.gui_objects.filtersetslist) { - rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist, {multiselect:false, draggable:false, keyboard:false}); - rcmail.filtersets_list.addEventListener('select', function(e) { p.managesieve_setselect(e); }); - rcmail.filtersets_list.init(); - rcmail.filtersets_list.focus(); + rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist, + {multiselect:false, draggable:false, keyboard:false}); + + rcmail.filtersets_list + .addEventListener('select', function(e) { p.managesieve_setselect(e); }) + .init().focus(); if (set != null) { set = rcmail.managesieve_setid(set); @@ -122,7 +142,7 @@ var id = this.filters_list.get_single_selection(); if (confirm(this.get_label('managesieve.filterdeleteconfirm'))) { var lock = this.set_busy(true, 'loading'); - this.http_post('plugin.managesieve', + this.http_post('plugin.managesieve-action', '_act=delete&_fid='+this.filters_list.rows[id].uid, lock); } }; @@ -132,7 +152,7 @@ var id = this.filters_list.get_single_selection(), lock = this.set_busy(true, 'loading'); - this.http_post('plugin.managesieve', + this.http_post('plugin.managesieve-action', '_act=act&_fid='+this.filters_list.rows[id].uid, lock); }; @@ -150,7 +170,7 @@ this.show_contentframe(false); this.filters_list.clear(true); this.enable_command('plugin.managesieve-setdel', list.rowcount > 1); - this.enable_command( 'plugin.managesieve-setact', 'plugin.managesieve-setget', true); + this.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', true); var id = list.get_single_selection(); if (id != null) @@ -161,7 +181,7 @@ { var i, rows = this.filters_list.rows; - for (i=0; i<rows.length; i++) + for (i in rows) if (rows[i] != null && rows[i].uid == id) return i; }; @@ -179,7 +199,7 @@ { var lock = this.set_busy(true, 'loading'); - this.http_post('plugin.managesieve', '_act=list&_set='+urlencode(script), lock); + this.http_post('plugin.managesieve-action', '_act=list&_set='+urlencode(script), lock); }; // Script download request @@ -188,7 +208,7 @@ var id = this.filtersets_list.get_single_selection(), script = this.env.filtersets[id]; - location.href = this.env.comm_path+'&_action=plugin.managesieve&_act=setget&_set='+urlencode(script); + location.href = this.env.comm_path+'&_action=plugin.managesieve-action&_act=setget&_set='+urlencode(script); }; // Set activate/deactivate request @@ -199,7 +219,7 @@ script = this.env.filtersets[id], action = $('#rcmrow'+id).hasClass('disabled') ? 'setact' : 'deact'; - this.http_post('plugin.managesieve', '_act='+action+'&_set='+urlencode(script), lock); + this.http_post('plugin.managesieve-action', '_act='+action+'&_set='+urlencode(script), lock); }; // Set delete request @@ -212,7 +232,7 @@ lock = this.set_busy(true, 'loading'), script = this.env.filtersets[id]; - this.http_post('plugin.managesieve', '_act=setdel&_set='+urlencode(script), lock); + this.http_post('plugin.managesieve-action', '_act=setdel&_set='+urlencode(script), lock); }; // Set add request @@ -224,7 +244,7 @@ if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { var lock = this.set_busy(true, 'loading'); target = window.frames[this.env.contentframe]; - target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_newset=1&_unlock='+lock; + target.location.href = this.env.comm_path+'&_action=plugin.managesieve-action&_framed=1&_newset=1&_unlock='+lock; } }; @@ -236,7 +256,7 @@ // Delete filter row case 'del': - var i = 0, list = this.filters_list; + var id = o.id, list = this.filters_list; list.remove_row(this.managesieve_rowid(o.id)); list.clear_selection(); @@ -251,8 +271,14 @@ return; } - // modify ID and remove all attached events - $(this).attr('id', 'rcmrow'+(i++)).unbind(); + var rowid = this.id.substr(6); + + // remove all attached events + $(this).unbind(); + + // update row id + if (rowid > id) + $(this).attr('id', 'rcmrow' + (rowid-1)); }); list.init(); @@ -384,7 +410,7 @@ if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { target = window.frames[this.env.contentframe]; var msgid = this.set_busy(true, 'loading'); - target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1' + target.location.href = this.env.comm_path+'&_action=plugin.managesieve-action&_framed=1' +(has_id ? '&_fid='+id : '')+'&_unlock='+msgid; } }; @@ -405,7 +431,7 @@ var lock = this.set_busy(true, 'loading'); this.show_contentframe(false); - this.http_post('plugin.managesieve', '_act=move&_fid='+this.drag_filter + this.http_post('plugin.managesieve-action', '_act=move&_fid='+this.drag_filter +'&_to='+this.drag_filter_target, lock); } this.drag_active = false; @@ -447,6 +473,12 @@ // Form submition rcube_webmail.prototype.managesieve_save = function() { + if (this.env.action == 'plugin.managesieve-vacation') { + var data = $(this.gui_objects.sieveform).serialize(); + this.http_post('plugin.managesieve-vacation', data, this.display_message(this.get_label('managesieve.vacation.saving'), 'loading')); + return; + } + if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') { var id = parent.rcmail.filters_list.get_single_selection(); if (id != null) @@ -458,7 +490,7 @@ // Operations on filters form rcube_webmail.prototype.managesieve_ruleadd = function(id) { - this.http_post('plugin.managesieve', '_act=ruleadd&_rid='+id); + this.http_post('plugin.managesieve-action', '_act=ruleadd&_rid='+id); }; rcube_webmail.prototype.managesieve_rulefill = function(content, id, after) @@ -497,7 +529,7 @@ rcube_webmail.prototype.managesieve_actionadd = function(id) { - this.http_post('plugin.managesieve', '_act=actionadd&_aid='+id); + this.http_post('plugin.managesieve-action', '_act=actionadd&_aid='+id); }; rcube_webmail.prototype.managesieve_actionfill = function(content, id, after) @@ -511,6 +543,11 @@ row.className = 'actionrow'; row.setAttribute('id', 'actionrow'+id); row.innerHTML = content; + + // initialize smart list inputs + $('textarea[data-type="list"]', row).each(function() { + smart_field_init(this); + }); this.managesieve_formbuttons(div); } @@ -661,10 +698,10 @@ function action_type_select(id) { var obj = document.getElementById('action_type' + id), - v = obj.value(), enabled = {}, + v = obj.value, enabled = {}, elems = { mailbox: document.getElementById('action_mailbox' + id), - target: document.getElementById('action_target' + id), + target: document.getElementById('redirect_target' + id), target_area: document.getElementById('action_target_area' + id), flags: document.getElementById('action_flags' + id), vacation: document.getElementById('action_vacation' + id), @@ -800,9 +837,17 @@ /********* Mail UI methods *********/ /*********************************************************/ -rcube_webmail.prototype.managesieve_create = function() +rcube_webmail.prototype.managesieve_create = function(force) { - if (!rcmail.env.sieve_headers || !rcmail.env.sieve_headers.length) + if (!force && this.env.action != 'show' && !$('#'+this.env.contentframe).is(':visible')) { + var uid = this.message_list.get_single_selection(), + lock = this.set_busy(true, 'loading'); + + this.http_post('plugin.managesieve-action', {_uid: uid}, lock); + return; + } + + if (!this.env.sieve_headers || !this.env.sieve_headers.length) return; var i, html, buttons = {}, dialog = $("#sievefilterform"); @@ -815,9 +860,9 @@ // build dialog window content html = '<fieldset><legend>'+this.gettext('managesieve.usedata')+'</legend><ul>'; - for (i in rcmail.env.sieve_headers) + for (i in this.env.sieve_headers) html += '<li><input type="checkbox" name="headers[]" id="sievehdr'+i+'" value="'+i+'" checked="checked" />' - +'<label for="sievehdr'+i+'">'+rcmail.env.sieve_headers[i][0]+':</label> '+rcmail.env.sieve_headers[i][1]+'</li>'; + +'<label for="sievehdr'+i+'">'+this.env.sieve_headers[i][0]+':</label> '+this.env.sieve_headers[i][1]+'</li>'; html += '</ul></fieldset>'; dialog.html(html); @@ -857,8 +902,8 @@ // show dialog window dialog.dialog({ modal: false, - resizable: !bw.ie6, - closeOnEscape: (!bw.ie6 && !bw.ie7), // disable for performance reasons + resizable: true, + closeOnEscape: !bw.ie7, // disable for performance reasons title: this.gettext('managesieve.newfilter'), close: function() { rcmail.managesieve_dialog_close(); }, buttons: buttons, -- Gitblit v1.9.1