/** * (Manage)Sieve Filters plugin * * @licstart The following is the entire license notice for the * JavaScript code in this file. * * Copyright (c) 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. */ window.rcmail&&rcmail.addEventListener("init",function(a){"mail"==rcmail.env.task&&("show"!=rcmail.env.action?rcmail.env.message_commands.push("managesieve-create"):rcmail.enable_command("managesieve-create",!0));"mail"!=rcmail.env.task&&!rcmail.env.action.startsWith("plugin.managesieve")||rcmail.env.framed||(rcmail.env.ms_tip_layer=$('
'),rcmail.env.ms_tip_layer.appendTo(document.body));rcmail.register_command("plugin.managesieve-save",function(){rcmail.managesieve_save()}); rcmail.register_command("plugin.managesieve-act",function(){rcmail.managesieve_act()});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-move",function(){rcmail.managesieve_move()});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()});rcmail.register_command("plugin.managesieve-seteditraw",function(){rcmail.managesieve_seteditraw()});rcmail.env.action.startsWith("plugin.managesieve")&&(rcmail.gui_objects.sieveform?(rcmail.enable_command("plugin.managesieve-save",!0),sieve_form_init()):rcmail.gui_objects.sievesetrawform?(rcmail.enable_command("plugin.managesieve-save", !0),sieve_raw_editor_init()):(rcmail.enable_command("plugin.managesieve-add",!rcmail.env.sieveconnerror&&-1==$.inArray("new_rule",rcmail.env.managesieve_disabled_actions)),rcmail.enable_command("plugin.managesieve-setadd",!rcmail.env.sieveconnerror&&-1==$.inArray("new_set",rcmail.env.managesieve_disabled_actions))),a=rcmail.env.currentset,rcmail.gui_objects.filterslist&&(rcmail.filters_list=new rcube_list_widget(rcmail.gui_objects.filterslist,{multiselect:!1,draggable:!0,keyboard:!0}),rcmail.filters_list.addEventListener("select", function(b){rcmail.managesieve_select(b)}).addEventListener("keypress",function(b){rcmail.list_keypress(b,{del:"plugin.managesieve-del"})}).addEventListener("dragstart",function(b){rcmail.managesieve_dragstart(b)}).addEventListener("dragend",function(b){rcmail.managesieve_dragend(b)}).addEventListener("initrow",function(b){b.obj.onmouseover=function(){rcmail.managesieve_focus_filter(b)};b.obj.onmouseout=function(){rcmail.managesieve_unfocus_filter(b)}}).init()),rcmail.gui_objects.filtersetslist&& (rcmail.filtersets_list=new rcube_list_widget(rcmail.gui_objects.filtersetslist,{multiselect:!1,draggable:!1,keyboard:!0}),rcmail.filtersets_list.init().focus(),null!=a&&($("#filterset-name").text(a),a=rcmail.managesieve_setid(a),rcmail.filtersets_list.select(a)),rcmail.filtersets_list.addEventListener("select",function(b){rcmail.managesieve_setselect(b)}),a=rcmail.filtersets_list.rowcount,rcmail.enable_command("plugin.managesieve-set",!0),rcmail.enable_command("plugin.managesieve-setact",0c&&(this.uid=String(l-1),$(this).attr("id","rcmrow"+this.uid))}});a.init();break;case "update":var d=$("#rcmrow"+this.managesieve_rowid(b.id)); b.name&&$("td",d).text(b.name);b.disabled?d.addClass("disabled"):d.removeClass("disabled");$("#fenabled",$("iframe").contents()).prop("checked",!b.disabled);break;case "add":a=this.filters_list;d=$('');$("td",d).text(b.name);d.attr("id","rcmrow"+b.id);b.disabled&&d.addClass("disabled");a.insert_row(d.get(0));a.highlight_row(b.id);this.enable_command("plugin.managesieve-del",-1==$.inArray("delete_rule",rcmail.env.managesieve_disabled_actions));this.enable_command("plugin.managesieve-act", !0);break;case "list":a=this.filters_list;b.clear&&a.clear();for(d in b.list){var f=b.list[d];var e=document.createElement("TR");var g=document.createElement("TD");$(g).text(f.name);g.className="name";e.id="rcmrow"+f.id;f["class"]&&(e.className=f["class"]);e.appendChild(g);a.insert_row(e)}b.set?a.highlight_row(b.set):this.enable_command("plugin.managesieve-del","plugin.managesieve-act",!1);break;case "setact":c=this.managesieve_setid(b.name);d=$("#rcmrow"+c);b.active?(b.all&&$("tr",this.gui_objects.filtersetslist).addClass("disabled"), d.removeClass("disabled")):d.addClass("disabled");break;case "setdel":c=this.managesieve_setid(b.name);this.filters_list.clear();this.show_contentframe(!1);this.enable_command("plugin.managesieve-setdel","plugin.managesieve-setact","plugin.managesieve-setget","plugin.managesieve-seteditraw",!1);this.filtersets_list.remove_row(c,!0);delete this.env.filtersets[c];break;case "setadd":c="S"+(new Date).getTime();a=this.filtersets_list;d=$('');$("td",d).text(b.name); d.attr("id","rcmrow"+c);this.env.filtersets[c]=b.name;a.insert_row(d.get(0));b.index!=a.rowcount-1&&(d.detach(),b=$("tr:visible",a.list).get(b.index),d.insertBefore(b));a.select(c);this.managesieve_fixdragend(d);break;case "refresh":this.reset_filters_list(!0)}this.set_busy(!1)}; rcube_webmail.prototype.reset_filters_list=function(a){this.filters_list.clear_selection();this.enable_command("plugin.managesieve-act","plugin.managesieve-del",!1);a&&(a=this.filtersets_list.get_single_selection(),this.filters_list.clear(!0),this.managesieve_list(this.env.filtersets[a]))}; rcube_webmail.prototype.load_managesieveframe=function(a,b){b&&this.reset_filters_list();b=this.get_frame_window(this.env.contentframe);a=this.url("plugin.managesieve-action","_framed=1"+(a?"&"+a:""));b&&this.location_href(a,b,!0)};rcube_webmail.prototype.managesieve_dragstart=function(a){a=this.filters_list.get_single_selection();this.drag_active=!0;this.drag_filter=a}; rcube_webmail.prototype.managesieve_dragend=function(a){this.drag_active&&(this.drag_filter_target&&(a=this.set_busy(!0,"loading"),this.show_contentframe(!1),this.http_post("plugin.managesieve-action","_act=move&_fid="+this.drag_filter+"&_to="+this.drag_filter_target,a)),this.drag_active=!1)};rcube_webmail.prototype.managesieve_fixdragend=function(a){var b=this;$(a).on("mouseup"+(bw.iphone||bw.ipad?" touchend":""),function(c){b.drag_active&&b.filters_list.drag_mouse_up(c)})}; rcube_webmail.prototype.managesieve_focus_filter=function(a){var b=a.id.replace(/^rcmrow/,"");this.drag_active&&b!=this.drag_filter&&(this.drag_filter_target=b,$(a.obj).addClass(b").attr({"class":"rulerow",id:"rulerow"+b}).html(a);this.managesieve_insertrow(d,a,c);$('textarea[data-type="list"]',a).each(function(){smart_field_init(this)});this.managesieve_formbuttons(d)}}; rcube_webmail.prototype.managesieve_ruledel=function(a){$("#ruledel"+a).hasClass("disabled")||this.confirm_dialog(this.get_label("managesieve.ruledeleteconfirm"),"delete",function(b,c){b=document.getElementById("rulerow"+a);b.parentNode.removeChild(b);c.managesieve_formbuttons(document.getElementById("rules"))})};rcube_webmail.prototype.managesieve_actionadd=function(a){this.http_post("plugin.managesieve-action","_act=actionadd&_aid="+a)}; rcube_webmail.prototype.managesieve_actionfill=function(a,b,c){if(""!=a){var d=$("#actions")[0];a=$("
").attr({"class":"actionrow",id:"actionrow"+b}).html(a);this.managesieve_insertrow(d,a,c);$('textarea[data-type="list"]',a).each(function(){smart_field_init(this)});this.managesieve_formbuttons(d)}}; rcube_webmail.prototype.managesieve_actiondel=function(a){$("#actiondel"+a).hasClass("disabled")||this.confirm_dialog(this.get_label("managesieve.actiondeleteconfirm"),"delete",function(b,c){b=document.getElementById("actionrow"+a);b.parentNode.removeChild(b);c.managesieve_formbuttons(document.getElementById("actions"))})}; rcube_webmail.prototype.managesieve_insertrow=function(a,b,c){(c=$("#"+("rules"==$(a).attr("id")?"rulerow":"actionrow")+c)[0])?$(b).insertAfter(c):$(a).append(b);this.triggerEvent("managesieve.insertrow",{obj:b})};rcube_webmail.prototype.managesieve_formbuttons=function(a){a=$("a.delete",a);a.removeClass("disabled");1==a.length&&a.addClass("disabled")}; rcube_webmail.prototype.managesieve_vacation_addresses=function(a){var b=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action",{_act:"addresses",_aid:a},b)};rcube_webmail.prototype.managesieve_vacation_addresses_update=function(a,b){a=$("#vacation_addresses,#action_addresses"+(a||""));smart_field_reset(a.get(0),b)}; function rule_header_select(a){var b=document.getElementById("header"+a),c=document.getElementById("rule_size"+a),d=document.getElementById("rule_message"+a),f=document.getElementById("rule_op"+a),e=document.getElementById("custom_header"+a+"_list"),g=document.getElementById("custom_var"+a+"_list"),l=document.getElementById("rule_mod"+a),m=document.getElementById("rule_trans"+a),u=document.getElementById("rule_comp"+a),p=document.getElementById("rule_mime"+a),q=document.getElementById("rule_mime_part"+ a),v=document.getElementById("rule_date_part"+a),x=document.getElementById("rule_date_header_div"+a),r=$("#rule_op"+a),k=b.value,t=[f,e,g,l,m,u,c,p,q];if("size"==k)d&&t.push(d),$.each(t,function(){this!=window&&(this.style.display="none")}),c.style.display="";else if("message"==k&&d)$.each(t,function(){this!=window&&(this.style.display="none")}),d.style.display="";else{var n="body"!=k&&"currentdate"!=k&&"date"!=k&&"string"!=k;e.style.display="..."!=k?"none":"";g.style.display="string"!=k?"none":""; c.style.display="none";f.style.display="";u.style.display="";l.style.display=n?"":"none";m.style.display="body"==k?"":"none";p&&(p.style.display=n?"":"none");q&&(q.style.display=n?"":"none");d&&(d.style.display="message"==k?"":"none")}v&&(v.style.display="currentdate"==k||"date"==k?"inline":"none");x&&(x.style.display="date"==k?"":"none");$('[value="exists"],[value="notexists"]',r).prop("disabled","string"==k);r.val()||r.val("contains");rule_op_select(f,a,k);rule_mod_select(a,k,!n);rule_mime_select(a); b.style.width="..."==k?"40px":""}function rule_op_select(a,b,c){var d=document.getElementById("rule_target"+b+"_list");c||(c=document.getElementById("header"+b).value);d.style.display=a.value.match(/^(exists|notexists)$/)||c.match(/^(size|message)$/)?"none":""}function rule_trans_select(a){var b=document.getElementById("rule_trans_op"+a);document.getElementById("rule_trans_type"+a).style.display="content"!=b.value?"none":"inline"} function rule_mod_select(a,b,c){var d=document.getElementById("rule_mod_op"+a),f=document.getElementById("rule_mod_type"+a),e=document.getElementById("rule_duplicate_div"+a),g=document.getElementById("rule_index_div"+a);c&&(d.value="");b||(b=document.getElementById("header"+a).value);f.style.display="address"!=d.value&&"envelope"!=d.value?"none":"";g&&(g.style.display=b.match(/^(body|currentdate|size|message|string)$/)||"envelope"==d.value?"none":"");e&&(e.style.display="message"==b?"":"none")} function rule_join_radio(a){$("#rules").css("display","any"==a?"none":"block")}function rule_adv_switch(a,b){b=$(b);var c=b.hasClass("hide");a=$("#rule_advanced"+a);c?(a.get(0).style.display="none",b.removeClass("hide").addClass("show")):(a.get(0).style.display="",b.removeClass("show").addClass("hide"))}function rule_mime_select(a){var b=$("#rule_mime_type"+a);a=$("#rule_mime_param"+a+"_list");a.length&&(a[0].style.display="param"==b.val()?"":"none")} function action_type_select(a){var b=document.getElementById("action_type"+a).value,c={};a={mailbox:document.getElementById("action_mailbox"+a),target:document.getElementById("redirect_target"+a),target_area:document.getElementById("action_target_area"+a),flags:document.getElementById("action_flags"+a),vacation:document.getElementById("action_vacation"+a),forward:document.getElementById("action_forward"+a),set:document.getElementById("action_set"+a),notify:document.getElementById("action_notify"+ a),addheader:document.getElementById("action_addheader"+a),deleteheader:document.getElementById("action_deleteheader"+a)};"fileinto"==b||"fileinto_copy"==b?c.mailbox=1:"redirect"==b||"redirect_copy"==b?c.target=1:b.match(/^reject|ereject$/)?c.target_area=1:b.match(/^(add|set|remove)flag$/)?c.flags=1:b.match(/^(vacation|forward|set|notify|addheader|deleteheader)$/)&&(c[b]=1);for(var d in a)a[d]&&(a[d].style.display=c[d]?"inline":"none")} function vacation_action_select(){var a=$("#vacation_action").val();$("#action_target_span")["discard"==a||"keep"==a?"hide":"show"]()} function smart_field_init(a){if(window.UI&&UI.smart_field_init)return UI.smart_field_init(a);var b=a.id+"_list",c=$(''),d=a.value?a.value.split("\n"):[""];$("#"+b).length||($.each(d,function(f,e){c.append(smart_field_row(e,a.name,f,$(a).data("size")))}),c.attr("id",b),a=$(a),a.attr("disabled")?c.hide():a.prop("disabled",!0),a.data("hidden")&&c.hide(),a.after(c),a.hasClass("error")&&(c.addClass("error"),rcmail.managesieve_tip_register([[b,a.data("tip-class"),a.data("tip-msg")]])))} function smart_field_row(a,b,c,d){c=$('');a={value:a,name:b+"[]"};d&&(a.size=d);$("input",c).attr(a).keydown(function(f){var e=$(this);if(13==f.which){f=e.attr("name").replace(/\[\]$/,"");var g=(new Date).getTime();f=smart_field_row("",f,g,d);e.parent().after(f);$("input",f).focus()}else if((8==f.which||46==f.which)&&""==e.val()&&(e=e.parent(),1").addClass(e.data("tip-class")).text(e.data("tip-msg"));c&&(f=$("mail"==rcmail.env.task?"#sievefilterform > iframe": "#filter-box",parent.document).offset(),l+=f.top,g+=f.left);d.html("").append(e);l-=d.height();d.css({left:g,top:l,minWidth:m-2+"px"}).show()})}; function sieve_formattime(a,b){var c,d="",f=rcmail.env.time_format||"H:i";for(c=0;ca?"0":"")+a;break;case "G":d+=a;break;case "H":d+=(10>a?"0":"")+a;break;case "i":d+=(10>b?"0":"")+b;break;case "s":d+="00";default:d+=e}}return d} function sieve_form_init(){var a=rcmail.gui_objects.sieveform;"plugin.managesieve"==rcmail.env.action&&"mail"==rcmail.env.task&&parent.rcmail.managesieve_dialog_resize(a);$('input[type="text"]',a).first().focus();$('textarea[data-type="list"]',a).each(function(){smart_field_init(this)});$('[name^="_header"]',a).each(function(){/([0-9]+)$/.test(this.id)&&rule_header_select(RegExp.$1)});$.datepicker&&rcmail.env.date_format&&($.datepicker.setDefaults({dateFormat:rcmail.env.date_format,changeMonth:!0, showOtherMonths:!0,selectOtherMonths:!0,onSelect:function(b){$(this).focus().val(b)}}),$("input.datepicker").datepicker());$("#vacation_timefrom, #vacation_timeto").attr("autocomplete","off").autocomplete({delay:100,minLength:1,source:function(b,c){var d=[];for(b=0;24>b;b++)d.push(sieve_formattime(b,0));d.push(sieve_formattime(23,59));return c(d)},open:function(b,c){b=$(this);var d=b.val();c=b.autocomplete("widget").css("width","10em");var f=b.data("ui-autocomplete").menu;d&&d.length&&c.children().each(function(){var e= $(this);0==e.text().indexOf(d)&&f._scrollIntoView(e)})},select:function(b,c){$(this).val(c.item.value);return!1}}).click(function(){$(this).autocomplete("search",$(this).val()||" ")});$("input.error").each(function(){String(this.id).match(/([0-9]+)$/)&&$("#ruleadv"+RegExp.$1+".show").click()})}var cmeditor;function cmCreateErrorElem(a){var b=document.createElement("div");b.style.color="#822";b.innerHTML="\u25cf";b.title=a;return b} function cmScrollToError(){var a=$(".CodeMirror-lines .line-error"),b=$(".CodeMirror-scroll");a.parent();b.scrollTop(a.offset().top-b.offset().top-Math.round(b.height()/2))} function sieve_raw_editor_init(){var a=document.getElementById("rawfiltersettxt");a&&!cmeditor&&(cmeditor=CodeMirror.fromTextArea(a,{mode:"sieve",lineNumbers:!0,gutters:["CodeMirror-linenumbers","errorGutter"],styleActiveLine:!0}),$.each(rcmail.env.sieve_errors||[],function(b,c){var d=Number(c.line)-1;cmeditor.addLineClass(d,"background","line-error");cmeditor.setGutterMarker(d,"errorGutter",cmCreateErrorElem(c.msg));b||cmScrollToError()}))} rcube_webmail.prototype.managesieve_create=function(a){if(!a&&"show"!=this.env.action){a=this.message_list.get_single_selection();var b=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action",{_uid:a},b)}else if(this.env.sieve_headers&&this.env.sieve_headers.length){a={};var c=this.get_label("managesieve.newfilter"),d=$('
'),f={minWidth:600,minHeight:250,height:300};d.append($("
").append($("").text(this.get_label("managesieve.usedata"))).append($('
    '))); $.each(this.env.sieve_headers,function(e,g){g={type:"checkbox",name:"headers[]",id:"sievehdr"+e,value:e,checked:!0};var l=rcmail.env.sieve_headers[e][0]+": "+rcmail.env.sieve_headers[e][1];$("ul",d).append($("
  • ").append($("").attr(g)).append($("