summaryrefslogtreecommitdiff
path: root/plugins/managesieve/managesieve.js
diff options
context:
space:
mode:
authoralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2011-09-04 06:44:18 +0000
committeralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2011-09-04 06:44:18 +0000
commitefe8de0b5b3dcc305cb8b353fd4dce8913052005 (patch)
tree02af1ea92e87c3eb04906a8ede98cfedd8581f75 /plugins/managesieve/managesieve.js
parent6b0b80d957e05b5dfacf4ea070ebf2ff0dbdd803 (diff)
- Added possibility to create a filter based on selected message "in-place"
git-svn-id: https://svn.roundcube.net/trunk@5155 208e9e7b-5314-0410-a742-e7e81cd9613c
Diffstat (limited to 'plugins/managesieve/managesieve.js')
-rw-r--r--plugins/managesieve/managesieve.js180
1 files changed, 144 insertions, 36 deletions
diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js
index ec6247aff..9efbfe6b4 100644
--- a/plugins/managesieve/managesieve.js
+++ b/plugins/managesieve/managesieve.js
@@ -1,43 +1,59 @@
-/* Sieve Filters (tab) */
+/* (Manage)Sieve Filters */
if (window.rcmail) {
rcmail.addEventListener('init', function(evt) {
+ // add managesieve-create command to message_commands array,
+ // so it's state will be updated on message selection/unselection
+ if (rcmail.env.task == 'mail') {
+ if (rcmail.env.action != 'show')
+ rcmail.env.message_commands.push('managesieve-create');
+ else
+ rcmail.enable_command('managesieve-create', true);
+ }
+ else {
+ var tab = $('<span>').attr('id', 'settingstabpluginmanagesieve').addClass('tablink'),
+ button = $('<a>').attr('href', rcmail.env.comm_path+'&_action=plugin.managesieve')
+ .attr('title', rcmail.gettext('managesieve.managefilters'))
+ .html(rcmail.gettext('managesieve.filters'))
+ .appendTo(tab);
- var tab = $('<span>').attr('id', 'settingstabpluginmanagesieve').addClass('tablink');
- var 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');
+ }
- // add button and register commands
- rcmail.add_element(tab, 'tabs');
- rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() }, true);
- rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() }, true);
- rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() }, true);
- rcmail.register_command('plugin.managesieve-up', function() { rcmail.managesieve_up() }, true);
- rcmail.register_command('plugin.managesieve-down', function() { rcmail.managesieve_down() }, true);
- rcmail.register_command('plugin.managesieve-set', function() { rcmail.managesieve_set() }, true);
- rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() }, true);
- rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() }, true);
- rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() }, true);
- rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() }, true);
+ if (rcmail.env.task == 'mail' || rcmail.env.action.indexOf('plugin.managesieve') != -1) {
+ // Create layer for form tips
+ if (!rcmail.env.framed) {
+ rcmail.env.ms_tip_layer = $('<div id="managesieve-tip" class="popupmenu"></div>');
+ rcmail.env.ms_tip_layer.appendTo(document.body);
+ }
+ }
- if (rcmail.env.action == 'plugin.managesieve') {
+ // register commands
+ rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() });
+ rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() });
+ rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() });
+ rcmail.register_command('plugin.managesieve-up', function() { rcmail.managesieve_up() });
+ rcmail.register_command('plugin.managesieve-down', function() { rcmail.managesieve_down() });
+ rcmail.register_command('plugin.managesieve-set', function() { rcmail.managesieve_set() });
+ rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() });
+ rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() });
+ 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.gui_objects.sieveform) {
rcmail.enable_command('plugin.managesieve-save', true);
+ // resize dialog window
+ if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') {
+ parent.rcmail.managesieve_dialog_resize(rcmail.gui_objects.sieveform);
+ }
+ $('input[type="text"]:first', rcmail.gui_objects.sieveform).focus();
}
else {
- rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up',
- 'plugin.managesieve-down', false);
rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror);
}
- // Create layer for form tips
- if (!rcmail.env.framed) {
- rcmail.env.ms_tip_layer = $('<div id="managesieve-tip" class="popupmenu"></div>');
- rcmail.env.ms_tip_layer.appendTo(document.body);
- }
-
if (rcmail.gui_objects.filterslist) {
var p = rcmail;
rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:false, keyboard:false});
@@ -479,17 +495,19 @@ rcube_webmail.prototype.managesieve_reload = function(set)
// Register onmouse(leave/enter) events for tips on specified form element
rcube_webmail.prototype.managesieve_tip_register = function(tips)
{
+ var n, framed = parent.rcmail,
+ tip = framed ? parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer;
+
for (var n in tips) {
$('#'+tips[n][0])
.bind('mouseenter', {str: tips[n][1]},
function(e) {
var offset = $(this).offset(),
- tip = rcmail.env.framed ? parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer,
left = offset.left,
top = offset.top - 12;
- if (rcmail.env.framed) {
- offset = $(parent.document.getElementById('filter-box')).offset();
+ if (framed) {
+ offset = $((rcmail.env.task == 'mail' ? '#sievefilterform > iframe' : '#filter-box'), parent.document).offset();
top += offset.top;
left += offset.left;
}
@@ -499,12 +517,7 @@ rcube_webmail.prototype.managesieve_tip_register = function(tips)
tip.css({left: left, top: top}).show();
})
- .bind('mouseleave',
- function(e) {
- var tip = parent.rcmail && parent.rcmail.env.ms_tip_layer ?
- parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer;
- tip.hide();
- });
+ .bind('mouseleave', function(e) { tip.hide(); });
}
};
@@ -579,3 +592,98 @@ function action_type_select(id)
elems[x].style.display = !enabled[x] ? 'none' : 'inline';
}
};
+
+/*********************************************************/
+/********* Mail UI methods *********/
+/*********************************************************/
+
+rcube_webmail.prototype.managesieve_create = function()
+{
+ if (!rcmail.env.sieve_headers || !rcmail.env.sieve_headers.length)
+ return;
+
+ var i, html, buttons = {}, dialog = $("#sievefilterform");
+
+ // create dialog window
+ if (!dialog.length) {
+ dialog = $('<div id="sievefilterform"></div>');
+ $('body').append(dialog);
+ }
+
+ // build dialog window content
+ html = '<fieldset><legend>'+this.gettext('managesieve.usedata')+'</legend><ul>';
+ for (i in rcmail.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>';
+ html += '</ul></fieldset>';
+
+ dialog.html(html);
+
+ // [Next Step] button action
+ buttons[this.gettext('managesieve.nextstep')] = function () {
+ // check if there's at least one checkbox checked
+ var hdrs = $('input[name="headers[]"]:checked', dialog);
+ if (!hdrs.length) {
+ alert(rcmail.gettext('managesieve.nodata'));
+ return;
+ }
+
+ // build frame URL
+ var url = rcmail.get_task_url('mail');
+ url = rcmail.add_url(url, '_action', 'plugin.managesieve');
+ url = rcmail.add_url(url, '_framed', 1);
+
+ hdrs.map(function() {
+ var val = rcmail.env.sieve_headers[this.value];
+ url = rcmail.add_url(url, 'r['+this.value+']', val[0]+':'+val[1]);
+ });
+
+ // load form in the iframe
+ var frame = $('<iframe>').attr({src: url, frameborder: 0})
+ frame.height(dialog.height()); // temp.
+ dialog.empty().append(frame);
+ dialog.dialog('dialog').resize();
+
+ // Change [Next Step] button with [Save] button
+ buttons = {};
+ buttons[rcmail.gettext('save')] = function() {
+ var win = $('iframe', dialog).get(0).contentWindow;
+ win.rcmail.managesieve_save();
+ };
+ dialog.dialog('option', 'buttons', buttons);
+ };
+
+ // show dialog window
+ dialog.dialog({
+ modal: false,
+ resizable: !bw.ie6,
+ closeOnEscape: (!bw.ie6 && !bw.ie7), // disable for performance reasons
+ title: this.gettext('managesieve.newfilter'),
+ close: function() { rcmail.managesieve_dialog_close(); },
+ buttons: buttons,
+ minWidth: 600,
+ minHeight: 300
+ }).show();
+
+ this.env.managesieve_dialog = dialog;
+}
+
+rcube_webmail.prototype.managesieve_dialog_close = function()
+{
+ var dialog = this.env.managesieve_dialog;
+
+ // BUG(?): if we don't remove the iframe first, it will be reloaded
+ dialog.html('');
+ dialog.dialog('destroy').hide();
+}
+
+rcube_webmail.prototype.managesieve_dialog_resize = function(o)
+{
+ var dialog = this.env.managesieve_dialog,
+ win = $(window), form = $(o);
+ width = form.width(), height = form.height(),
+ w = win.width(), h = win.height();
+
+ dialog.dialog('option', { height: Math.min(h-20, height+120), width: Math.min(w-20, width+65) })
+ .dialog('option', 'position', ['center', 'center']); // only works in a separate call (!?)
+}