/** * (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. */ 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","plugin.managesieve-setadd",!rcmail.env.sieveconnerror),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(a){rcmail.managesieve_select(a)}).addEventListener("dragstart",function(a){rcmail.managesieve_dragstart(a)}).addEventListener("dragend",function(a){rcmail.managesieve_dragend(a)}).addEventListener("initrow", function(a){a.obj.onmouseover=function(){rcmail.managesieve_focus_filter(a)};a.obj.onmouseout=function(){rcmail.managesieve_unfocus_filter(a)}}).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&&(a=rcmail.managesieve_setid(a),rcmail.filtersets_list.select(a)),rcmail.filtersets_list.addEventListener("select",function(a){rcmail.managesieve_setselect(a)}), a=rcmail.filtersets_list.rowcount,rcmail.enable_command("plugin.managesieve-set",!0),rcmail.enable_command("plugin.managesieve-setact","plugin.managesieve-setget",0c&&(this.uid=a-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");$("#disabled",$("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","plugin.managesieve-act",!0);break;case "list":a=this.filters_list;b.clear&&a.clear();for(d in b.list){var e= b.list[d];var g=document.createElement("TR");var l=document.createElement("TD");$(l).text(e.name);l.className="name";g.id="rcmrow"+e.id;e["class"]&&(g.className=e["class"]);g.appendChild(l);a.insert_row(g)}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.filtersets_list.remove_row(c);this.filters_list.clear();this.show_contentframe(!1);this.enable_command("plugin.managesieve-setdel","plugin.managesieve-setact","plugin.managesieve-setget",!1);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();this.env.contentframe&&window.frames&&window.frames[this.env.contentframe]&&(b=this.set_busy(!0,"loading"),target=window.frames[this.env.contentframe],target.location.href=this.env.comm_path+"&_action=plugin.managesieve-action&_framed=1&_unlock="+b+(a?"&"+a:""))};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(a){b.drag_active&&b.filters_list.drag_mouse_up(a)})}; 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'),d=a.value?a.value.split("\n"):[""];$("#"+b).length||($.each(d,function(b,d){c.append(smart_field_row(d,a.name,b,$(a).data("size")))}),c.attr("id",b),a=$(a),a.attr("disabled")?c.hide():a.prop("disabled",!0),a.after(c),a.hasClass("error")&&(c.addClass("error"),rcmail.managesieve_tip_register([[b,a.data("tip")]])))} function smart_field_row(a,b,c,d){c=$('');a={value:a,name:b+"[]"};d&&(a.size=d);$("input",c).attr(a).keydown(function(a){var b=$(this);if(13==a.which){a=b.attr("name").replace(/\[\]$/,"");var c=(new Date).getTime();a=smart_field_row("",a,c,d);b.parent().after(a);$("input",a).focus()}else if((8==a.which||46==a.which)&&""==b.val()&&(b=b.parent(),1 iframe":"#filter-box",parent.document).offset(),k+=b.top,e+=b.left);d.html(a.data("tip"));k-=d.height();d.css({left:e,top:k,minWidth:m-2+"px"}).show()})}; function sieve_formattime(a,b){var c,d="",e=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+=g}}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"]:first',a).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(a){$(this).focus().val(a)}}),$("input.datepicker").datepicker());$("#vacation_timefrom, #vacation_timeto").attr("autocomplete","off").autocomplete({delay:100,minLength:1,source:function(a,c){var b=[];for(a=0;24>a;a++)b.push(sieve_formattime(a,0));b.push(sieve_formattime(23,59));return c(b)},open:function(a,c){a=$(this);var b=a.val();c=a.autocomplete("widget").css("width","10em");var e=a.data("ui-autocomplete").menu;b&&b.length&&c.children().each(function(){var a= $(this);0==a.text().indexOf(b)&&e._scrollIntoView(a)})},select:function(a,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(a,c){var b=Number(c.line)-1;cmeditor.addLineClass(b,"background","line-error");cmeditor.setGutterMarker(b,"errorGutter",cmCreateErrorElem(c.msg));a||cmScrollToError()}))} rcube_webmail.prototype.managesieve_create=function(a){if(!a&&"show"!=this.env.action){var b=this.message_list.get_single_selection();a=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action",{_uid:b},a)}else if(this.env.sieve_headers&&this.env.sieve_headers.length){var c={},d=$("#sievefilterform");d.length||(d=$('
'),$("body").append(d));a="
"+this.get_label("managesieve.usedata")+"
    ";for(b in this.env.sieve_headers)a+='
  • "+this.env.sieve_headers[b][1]+"
  • ";d.html(a+"
");c[this.get_label("managesieve.nextstep")]=function(){var a=$('input[name="headers[]"]:checked',d);if(a.length){var b=rcmail.get_task_url("mail");b=rcmail.add_url(b,"_action","plugin.managesieve");b=rcmail.add_url(b,"_framed",1);a.map(function(){var a=rcmail.env.sieve_headers[this.value];b=rcmail.add_url(b,"r["+this.value+"]", a[0]+":"+a[1])});a=$("