From 0f4806ede6c5933c43221f714f68eeedff5ba389 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 03 Oct 2013 05:07:00 -0400
Subject: [PATCH] Added managesieve_domains option to limit redirect destinations

---
 plugins/managesieve/managesieve.js |  103 ++++++++++++++++++++++++++++-----------------------
 1 files changed, 57 insertions(+), 46 deletions(-)

diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js
index 117097e..fa13b71 100644
--- a/plugins/managesieve/managesieve.js
+++ b/plugins/managesieve/managesieve.js
@@ -263,7 +263,7 @@
       var i, row = $('#rcmrow'+this.managesieve_rowid(o.id));
 
       if (o.name)
-        $('td', row).html(o.name);
+        $('td', row).text(o.name);
       if (o.disabled)
         row.addClass('disabled');
       else
@@ -278,7 +278,7 @@
       var list = this.filters_list,
         row = $('<tr><td class="name"></td></tr>');
 
-      $('td', row).html(o.name);
+      $('td', row).text(o.name);
       row.attr('id', 'rcmrow'+o.id);
       if (o.disabled)
         row.addClass('disabled');
@@ -302,7 +302,7 @@
         tr = document.createElement('TR');
         td = document.createElement('TD');
 
-        td.innerHTML = el.name;
+        $(td).text(el.name);
         td.className = 'name';
         tr.id = 'rcmrow' + el.id;
         if (el['class'])
@@ -351,7 +351,7 @@
         list = this.filtersets_list,
         row = $('<tr class="disabled"><td class="name"></td></tr>');
 
-      $('td', row).html(o.name);
+      $('td', row).text(o.name);
       row.attr('id', 'rcmrow'+id);
 
       this.env.filtersets[id] = o.name;
@@ -575,38 +575,45 @@
   var obj = document.getElementById('header' + id),
     size = document.getElementById('rule_size' + id),
     op = document.getElementById('rule_op' + id),
-    header = document.getElementById('custom_header' + id),
+    header = document.getElementById('custom_header' + id + '_list'),
     mod = document.getElementById('rule_mod' + id),
     trans = document.getElementById('rule_trans' + id),
-    comp = document.getElementById('rule_comp' + id);
+    comp = document.getElementById('rule_comp' + id),
+    datepart = document.getElementById('rule_date_part' + id),
+    dateheader = document.getElementById('rule_date_header_div' + id),
+    h = obj.value;
 
-  if (obj.value == 'size') {
+  if (h == 'size') {
     size.style.display = 'inline';
-    op.style.display = 'none';
-    header.style.display = 'none';
-    mod.style.display = 'none';
-    trans.style.display = 'none';
-    comp.style.display = 'none';
+    $.each([op, header, mod, trans, comp], function() { this.style.display = 'none'; });
   }
   else {
-    header.style.display = obj.value != '...' ? 'none' : 'inline-block';
+    header.style.display = h != '...' ? 'none' : 'inline-block';
     size.style.display = 'none';
     op.style.display = 'inline';
     comp.style.display = '';
-    mod.style.display = obj.value == 'body' ? 'none' : 'block';
-    trans.style.display = obj.value == 'body' ? 'block' : 'none';
+    mod.style.display = h == 'body' || h == 'currentdate' || h == 'date' ? 'none' : 'block';
+    trans.style.display = h == 'body' ? 'block' : 'none';
   }
 
-  rule_op_select(op, id, obj.value);
-  obj.style.width = obj.value == '...' ? '40px' : '';
+  if (datepart)
+    datepart.style.display = h == 'currentdate' || h == 'date' ? 'inline' : 'none';
+  if (dateheader)
+    dateheader.style.display = h == 'date' ? '' : 'none';
+
+  rule_op_select(op, id, h);
+  rule_mod_select(id, h);
+  obj.style.width = h == '...' ? '40px' : '';
 };
 
 function rule_op_select(obj, id, header)
 {
-  var target = document.getElementById('rule_target' + id + '_list'),
-    style = obj.value == 'exists' || obj.value == 'notexists' || header == 'size' ? 'none' : 'inline-block';
+  var target = document.getElementById('rule_target' + id + '_list');
 
-  target.style.display = style;
+  if (!header)
+    header = document.getElementById('header' + id).value;
+
+  target.style.display = obj.value == 'exists' || obj.value == 'notexists' || header == 'size' ? 'none' : 'inline-block';
 };
 
 function rule_trans_select(id)
@@ -617,12 +624,19 @@
   target.style.display = obj.value != 'content' ? 'none' : 'inline';
 };
 
-function rule_mod_select(id)
+function rule_mod_select(id, header)
 {
   var obj = document.getElementById('rule_mod_op' + id),
-    target = document.getElementById('rule_mod_type' + id);
+    target = document.getElementById('rule_mod_type' + id),
+    index = document.getElementById('rule_index_div' + id);
+
+  if (!header)
+    header = document.getElementById('header' + id).value;
 
   target.style.display = obj.value != 'address' && obj.value != 'envelope' ? 'none' : 'inline';
+
+  if (index)
+    index.style.display = header != 'body' && header != 'currentdate' && header != 'size' && obj.value != 'envelope'  ? '' : 'none';
 };
 
 function rule_join_radio(value)
@@ -647,10 +661,10 @@
 function action_type_select(id)
 {
   var obj = document.getElementById('action_type' + id),
-    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),
@@ -658,25 +672,25 @@
       notify: document.getElementById('action_notify' + id)
     };
 
-  if (obj.value == 'fileinto' || obj.value == 'fileinto_copy') {
+  if (v == 'fileinto' || v == 'fileinto_copy') {
     enabled.mailbox = 1;
   }
-  else if (obj.value == 'redirect' || obj.value == 'redirect_copy') {
+  else if (v == 'redirect' || v == 'redirect_copy') {
     enabled.target = 1;
   }
-  else if (obj.value.match(/^reject|ereject$/)) {
+  else if (v.match(/^reject|ereject$/)) {
     enabled.target_area = 1;
   }
-  else if (obj.value.match(/^(add|set|remove)flag$/)) {
+  else if (v.match(/^(add|set|remove)flag$/)) {
     enabled.flags = 1;
   }
-  else if (obj.value == 'vacation') {
+  else if (v == 'vacation') {
     enabled.vacation = 1;
   }
-  else if (obj.value == 'set') {
+  else if (v == 'set') {
     enabled.set = 1;
   }
-  else if (obj.value == 'notify') {
+  else if (v == 'notify') {
     enabled.notify = 1;
   }
 
@@ -718,32 +732,29 @@
 {
   // build row element content
   var input, content = '<span class="listelement">'
-      + '<span class="actions"><span class="add"></span><span class="reset"></span></span>'
-      + '<input type="text"></span>',
+      + '<span class="reset"></span><input type="text"></span>',
     elem = $(content),
     attrs = {value: value, name: name + '[]'};
 
   if (size)
     attrs.size = size;
 
-  input = $('input', elem).attr(attrs)
-    .keydown(function(e) { if (e.which == 13) $('span[class="add"]', elem).click(); });
+  input = $('input', elem).attr(attrs).keydown(function(e) {
+    var input = $(this);
+    // element creation event (on Enter)
+    if (e.which == 13) {
+      var name = input.attr('name').replace(/\[\]$/, ''),
+        dt = (new Date()).getTime(),
+        elem = smart_field_row('', name, dt, size);
 
-  // element creation event
-  $('span[class="add"]', elem).click(function() {
-    var span = $(this.parentNode.parentNode),
-      input = $('input', span),
-      name = input.attr('name').replace(/\[\]$/, ''),
-      dt = (new Date()).getTime(),
-      elem = smart_field_row('', name, dt, size);
-
-    span.after(elem);
-    $('input', elem).focus();
+      input.parent().after(elem);
+      $('input', elem).focus();
+    }
   });
 
   // element deletion event
   $('span[class="reset"]', elem).click(function() {
-    var span = $(this.parentNode.parentNode);
+    var span = $(this.parentNode);
 
     if (span.parent().children().length > 1)
       span.remove();

--
Gitblit v1.9.1