File manager - Edit - /usr/local/CyberCP/public/snappymail/snappymail/v/2.38.2/static/js/min/sieve.min.js
Back
!function(){"use strict";const t=rl.i18n,e=(t,e)=>Object.values(t).forEach(e),s=(t,e)=>Object.entries(t).forEach((([t,s])=>e(t,s))),a=t=>((t=ko.observableArray(t)).subscribe((t=>t.forEach((t=>"deleted"===t.status&&null==t.moved&&t.value.onDestroy?.()))),t,"arrayChange"),t),r=t=>ko.computed(t,{pure:!0}),i=(t,e)=>(t||[]).map((t=>t.toString?.()||t)).join(e),n=t=>"ERROR "+t,o=rl.app.Remote,l=ko.observableArray(),m=a(),h=ko.observable(!1),u=ko.observable(!1),c=ko.observable(""),d=t=>{u(!0),c(t)},p=(t=1)=>{let e=[":is",":contains",":matches"];return!l.includes("extlists")&&t||e.push(":list"),!l.includes("relational")&&t||(e.push(":value"),e.push(":count")),e};function _(t,e){if(null!=t)switch(typeof t){case"boolean":return 0!=e&&!!e;case"number":return isFinite(e)?parseFloat(e):0;case"string":return null!=e?""+e:"";case"object":if(t.constructor.reviveFromJson)return t.constructor.reviveFromJson(e);if(Array.isArray(t)&&!Array.isArray(e))return[]}return e}class AbstractModel{constructor(){Object.defineProperty(this,"disposables",{value:[]})}addObservables(t){s(t,((t,e)=>this[t]||(this[t]=ko.observable(e))))}addComputables(t){s(t,((t,e)=>this[t]=r(e)))}addSubscribables(t){s(t,((t,e)=>this.disposables.push(this[t].subscribe(e))))}onDestroy(){this.disposables.forEach((t=>{"function"==typeof t?.dispose&&t.dispose()})),e(this,(t=>{(ko.isObservableArray(t)?t():t)?.onDestroy?.()}))}static validJson(t){return!(!t||"Object/"+this.name.replace("Model","")!==t["@Object"])}static reviveFromJson(t){let e=this.validJson(t)?new this:null;return e?.revivePropertiesFromJson(t),e}revivePropertiesFromJson(t){const e=this.constructor.validJson(t);return e&&s(t,((t,e)=>{if("@"!==t[0])try{switch(typeof this[t=t[0].toLowerCase()+t.slice(1)]){case"function":ko.isObservable(this[t])&&this[t](_(this[t](),e));break;case"boolean":case"number":case"object":case"string":this[t]=_(this[t],e)}}catch(t){}})),e}}const g="From",v="Recipient",f="Subject",b="Header",S="Body",y="Size",C="Contains",x="NotContains",w="EqualTo",T="NotEqualTo",E="Regex",G="Over",A="Under",k="Text",F="Raw";class FilterConditionModel extends AbstractModel{constructor(){super(),this.addObservables({field:g,type:C,value:"",valueError:!1,valueSecond:"",valueSecondError:!1}),this.template=r((()=>{const t="SettingsFiltersCondition";switch(this.field()){case S:return t+"Body";case y:return t+"Size";case b:return t+"More";default:return t+"Default"}})),this.addSubscribables({field:()=>{this.value(""),this.valueSecond("")}})}verify(){return this.value()?!(b===this.field()&&!this.valueSecond())||(this.valueSecondError(!0),!1):(this.valueError(!0),!1)}toJSON(){return{Field:this.field(),Type:this.type(),Value:this.value(),ValueSecond:this.valueSecond()}}cloneSelf(){const t=new FilterConditionModel;return t.field(this.field()),t.type(this.type()),t.value(this.value()),t.valueSecond(this.valueSecond()),t}}const O={None:"None",MoveTo:"MoveTo",Discard:"Discard",Vacation:"Vacation",Reject:"Reject",Forward:"Forward"},L="Any";class FilterModel extends AbstractModel{constructor(){super(),this.id="",this.addObservables({enabled:!0,askDelete:!1,name:"",nameError:!1,conditionsType:L,actionValue:"",actionValueError:!1,actionValueSecond:"",actionValueThird:"",actionValueFourth:"",actionValueFourthError:!1,markAsRead:!1,keep:!0,stop:!0,actionType:O.MoveTo}),this.conditions=a();this.addComputables({nameSub:()=>{let t="";const e=this.actionValue(),s="SETTINGS_FILTERS/SUBNAME_";switch(this.actionType()){case O.MoveTo:t=rl.i18n(s+"MOVE_TO",{FOLDER:e});break;case O.Forward:t=rl.i18n(s+"FORWARD_TO",{EMAIL:e});break;case O.Vacation:t=rl.i18n(s+"VACATION_MESSAGE");break;case O.Reject:t=rl.i18n(s+"REJECT");break;case O.Discard:t=rl.i18n(s+"DISCARD")}return t?"("+t+")":""},actionTemplate:()=>{const t="SettingsFiltersAction";switch(this.actionType()){case O.Forward:return t+"Forward";case O.Vacation:return t+"Vacation";case O.Reject:return t+"Reject";case O.None:return t+"None";case O.Discard:return t+"Discard";case O.MoveTo:default:return t+"MoveToFolder"}}}),this.addSubscribables({name:t=>this.nameError(!t),actionValue:t=>this.actionValueError(!t),actionType:()=>{this.actionValue(""),this.actionValueError(!1),this.actionValueSecond(""),this.actionValueThird(""),this.actionValueFourth(""),this.actionValueFourthError(!1)}})}generateID(){this.id=Jua.randomId()}verify(){return this.name()?(!this.conditions.length||!this.conditions.find((t=>t&&!t.verify())))&&(!this.actionValue()&&[O.MoveTo,O.Forward,O.Reject,O.Vacation].includes(this.actionType())?(this.actionValueError(!0),!1):O.Forward!==this.actionType()||this.actionValue().includes("@")?O.Vacation===this.actionType()&&this.actionValueFourth()&&!this.actionValueFourth().includes("@")?(this.actionValueFourthError(!0),!1):(this.nameError(!1),this.actionValueError(!1),!0):(this.actionValueError(!0),!1)):(this.nameError(!0),!1)}addCondition(){this.conditions.push(new FilterConditionModel)}removeCondition(t){this.conditions.remove(t)}toJSON(){return{ID:this.id,Enabled:this.enabled(),Name:this.name(),Conditions:this.conditions(),ConditionsType:this.conditionsType(),ActionType:this.actionType(),ActionValue:this.actionValue(),ActionValueSecond:this.actionValueSecond(),ActionValueThird:this.actionValueThird(),ActionValueFourth:this.actionValueFourth(),Keep:this.keep(),Stop:this.stop(),MarkAsRead:this.markAsRead()}}static reviveFromJson(t){t.id=t.ID,delete t.ID;const e=super.reviveFromJson(t);return e&&(e.id=""+(e.id||""),e.conditions((t.Conditions||t.conditions||[]).map((t=>(t["@Object"]="Object/FilterCondition",FilterConditionModel.reviveFromJson(t)))).filter((t=>t)))),e}assignTo(t){const e=t||new FilterModel;return e.id=this.id,e.enabled(this.enabled()),e.name(this.name()),e.nameError(this.nameError()),e.conditionsType(this.conditionsType()),e.markAsRead(this.markAsRead()),e.actionType(this.actionType()),e.actionValue(this.actionValue()),e.actionValueError(this.actionValueError()),e.actionValueSecond(this.actionValueSecond()),e.actionValueThird(this.actionValueThird()),e.actionValueFourth(this.actionValueFourth()),e.keep(this.keep()),e.stop(this.stop()),e.conditions(this.conditions.map((t=>t.cloneSelf()))),e}}class SieveScriptModel extends AbstractModel{constructor(){super(),this.addObservables({name:"",active:!1,body:"",exists:!1,nameError:!1,askDelete:!1,hasChanges:!1}),this.filters=a(),this.addSubscribables({name:()=>this.hasChanges(!0),filters:()=>this.hasChanges(!0),body:()=>this.hasChanges(!0)})}filtersToRaw(){return function(t){let e="\r\n",s=/.{0,74}/g,a={},r=["# This is SnappyMail sieve script.","# Please don't change anything here.","# RAINLOOP:SIEVE",""];const i=t=>'"'+t.replace(/(\\|")/g,"\\$1")+'"',n=t=>t.replace(/\s+/," "),o=(t,e)=>{let s="",a=t.type(),r=t.field(),o=t.value(),l=t.valueSecond();if(o.length&&("Header"!==r||l.length)){switch(a){case"NotEqualTo":s+="not ",a=":is";break;case"EqualTo":a=":is";break;case"NotContains":s+="not ",a=":contains";break;case"Text":case"Raw":case"Over":case"Under":case"Contains":a=":"+a.toLowerCase();break;case"Regex":a=":regex",e.regex=1;break;default:return"/* @Error: unknown type value "+a+"*/ false"}switch(r){case"From":s+="header "+a+' ["From"]';break;case"Recipient":s+="header "+a+' ["To", "CC"]';break;case"Subject":s+="header "+a+' ["Subject"]';break;case"Header":s+="header "+a+" ["+i(l)+"]";break;case"Body":s+="body "+a+" :contains",e.body=1;break;case"Size":s+="size "+a;break;default:return"/* @Error: unknown field value "+r+" */ false"}return"From"!==r&&"Recipient"!==r||!o.includes(",")?s+="Size"===r?" "+o:" "+i(o):s+=" ["+o.split(",").map((t=>i(t))).join(", ")+"]",n(s)}return"/* @Error: empty condition value */ false"},l=(t,s)=>{let a=" ",r=!0,l=[],m=t.conditions();const h=t=>l.push(a+"# @Error ("+t+"): empty action value");1<m.length?(l.push("Any"===t.conditionsType()?"if anyof(":"if allof("),l.push(m.map((t=>a+o(t,s))).join(",\r\n")),l.push(")")):m.length?l.push("if "+o(m[0],s)):r=!1,r?l.push("{"):a="",t.markAsRead()&&["None","MoveTo","Forward"].includes(t.actionType())&&(s.imap4flags=1,l.push(a+'addflag "\\\\Seen";'));let u=t.actionValue();switch(u=u.length?i(u):0,t.actionType()){case"None":break;case"Discard":l.push(a+"discard;");break;case"Vacation":if(u){s.vacation=1;let e=1,r="",o="",m=t.actionValueSecond();m.length&&(r=":subject "+i(n(m))+" "),m=""+(t.actionValueThird()||""),m.length&&(e=Math.max(1,parseInt(m,10))),m=""+(t.actionValueFourth()||""),m.length&&(m=m.split(",").map((t=>t.length?i(t):"")).filter((t=>t.length)),m.length&&(o=":addresses ["+m.join(", ")+"] ")),l.push(a+"vacation :days "+e+" "+o+r+u+";")}else h("vacation");break;case"Reject":u?(s.reject=1,l.push(a+"reject "+u+";")):h("reject");break;case"Forward":u?(t.keep()&&(s.fileinto=1,l.push(a+'fileinto "INBOX";')),l.push(a+"redirect "+u+";")):h("redirect");break;case"MoveTo":u?(s.fileinto=1,l.push(a+"fileinto "+u+";")):h("fileinto")}return t.stop()&&l.push(a+"stop;"),r&&l.push("}"),l.join(e)};return t.forEach((t=>{r.push(["/*","BEGIN:FILTER:"+t.id,"BEGIN:HEADER",btoa(unescape(encodeURIComponent(JSON.stringify(t)))).match(s).join(e)+"END:HEADER","*/",t.enabled()?"":"/* @Filter is disabled ",l(t,a),t.enabled()?"":"*/","/* END:FILTER */",""].join(e))})),a=Object.keys(a),(a.length?"require "+JSON.stringify(a)+";"+e:"")+e+r.join(e)}(this.filters)}verify(){return this.nameError(!this.name()),!this.nameError()}toJSON(){return{name:this.name,active:this.active,body:this.body}}allowFilters(){return"rainloop.user"===this.name()}static reviveFromJson(t){const e=super.reviveFromJson(t);return e&&(e.allowFilters()&&e.filters(function(t){let e,s,a=/BEGIN:HEADER([\s\S]+?)END:HEADER/gm,r=[];if(t.length&&t.includes("RAINLOOP:SIEVE"))for(;e=a.exec(t);)e=decodeURIComponent(escape(atob(e[1].replace(/\s+/g,"")))),e&&e.length&&(e=JSON.parse(e))&&(e["@Object"]="Object/Filter",s=FilterModel.reviveFromJson(e),s&&r.push(s));return r}(e.body())),e.exists(!0),e.hasChanges(!1)),e}}const V=(t,e)=>e&&void 0!==e.disabled&&t?.classList.toggle("disabled",t.disabled=e.disabled),j=()=>{const t=[{id:"",name:"",system:!1,disabled:!1}],e=s=>{s.forEach((s=>{t.push({id:s.fullName,name:" ".repeat(s.deep)+s.detailedName(),system:!1,disabled:!s.selectable()}),s.subFolders.length&&e(s.subFolders())}))};return e(window.Sieve.folderList()||[]),t};class FilterPopupView extends rl.pluginPopupView{constructor(){super("Filter"),this.addObservables({isNew:!0,filter:null,allowMarkAsRead:!1,selectedFolderValue:""}),this.defaultOptionsAfterRender=V,this.folderSelectList=r(j),this.selectedFolderValue.subscribe((()=>this.filter().actionValueError(!1))),["actionTypeOptions","fieldOptions","typeOptions","typeOptionsSize","typeOptionsBody"].forEach((t=>this[t]=ko.observableArray())),this.populateOptions()}saveFilter(){O.MoveTo===this.filter().actionType()&&this.filter().actionValue(this.selectedFolderValue()),this.filter().verify()&&(this.fTrueCallback(),this.close())}populateOptions(){this.actionTypeOptions([]);let e=e=>t("POPUPS_FILTER/SELECT_"+e);this.fieldOptions([{id:g,name:t("GLOBAL/FROM")},{id:v,name:e("FIELD_RECIPIENTS")},{id:f,name:t("GLOBAL/SUBJECT")},{id:y,name:e("FIELD_SIZE")},{id:b,name:e("FIELD_HEADER")}]),this.typeOptions([{id:C,name:e("TYPE_CONTAINS")},{id:x,name:e("TYPE_NOT_CONTAINS")},{id:w,name:e("TYPE_EQUAL_TO")},{id:T,name:e("TYPE_NOT_EQUAL_TO")}]),l&&(this.allowMarkAsRead(l.includes("imap4flags")),l.includes("fileinto")&&this.actionTypeOptions.push({id:O.MoveTo,name:e("ACTION_MOVE_TO")}),this.actionTypeOptions.push({id:O.Forward,name:e("ACTION_FORWARD_TO")}),l.includes("reject")&&this.actionTypeOptions.push({id:O.Reject,name:e("ACTION_REJECT")}),l.includes("vacation")&&this.actionTypeOptions.push({id:O.Vacation,name:e("ACTION_VACATION_MESSAGE")}),l.includes("body")&&this.fieldOptions.push({id:S,name:e("FIELD_BODY")}),l.includes("regex")&&this.typeOptions.push({id:E,name:"Regex"})),this.actionTypeOptions.push({id:O.Discard,name:e("ACTION_DISCARD")}),this.typeOptionsSize([{id:G,name:e("TYPE_OVER")},{id:A,name:e("TYPE_UNDER")}]),this.typeOptionsBody([{id:k,name:e("TYPE_TEXT")},{id:F,name:e("TYPE_RAW")}])}removeCondition(t){this.filter().removeCondition(t)}beforeShow(t,e,s){this.populateOptions(),this.isNew(!s),this.fTrueCallback=e,this.filter(t),this.selectedFolderValue(t.actionValue())}}const R="[^\\x00\\r\\n]",N="#"+R+"*\\r\\n",q='(?:\\r\\n|[^\\x00\\r\\n"\\\\]|\\\\\\\\|\\\\")*',I="[^\\x00\\r\\n\\.]"+R+"*\\r\\n",M="\\."+R+"+\\r\\n",Q="text:[ \\t]*(?:"+N+")?\\r\\n(?:"+I+"|"+M+")*\\.\\r\\n",D="[0-9]+[KMGkmg]?",z='"'+q+'"',P=z+"|"+Q,J="\\[\\s*(?:"+P+")(?:\\s*,\\s*(?:"+P+"))*\\s*\\]";class GrammarString{constructor(t=""){this._value=t.toString?t.toString():t}toString(){return this._value}get value(){return this._value}set value(t){this._value=t}get length(){return this._value.length}}class GrammarComment extends GrammarString{}const B=/(test|command|action)$/;class GrammarCommand{constructor(t){this.identifier=t||this.constructor.name.toLowerCase().replace(B,"")}toString(){let t=this.identifier;return this.arguments?.length&&(t+=" "+i(this.arguments," ")),t+";"}pushArguments(t){this.arguments=t}}class GrammarCommands extends Array{toString(){return this.length?"{\r\n\t"+i(this,"\r\n\t")+"\r\n}":"{}"}push(t){(t instanceof GrammarCommand||t instanceof GrammarComment)&&super.push(t)}}class ControlCommand extends GrammarCommand{}class ActionCommand extends GrammarCommand{}class TestCommand extends GrammarCommand{constructor(t){super(t),this._comparator="",this._match_type="",this.relational_match=""}get require(){return/:value|:count/.test(this._match_type)?"relational":""}get match_type(){return this._match_type}set match_type(t){if(":is"==t&&(t=""),t.length&&!p(0).includes(t))throw"Unsupported match-type "+t;":list"==t&&(this._comparator=""),":count"!=t&&":value"!=t&&(this.relational_match=""),this._match_type=t}get comparator(){return this._comparator}set comparator(t){if(t instanceof GrammarQuotedString||(t=new GrammarQuotedString(t)),t.length&&"i;ascii-casemap"!=t.value){if(":list"==this._match_type)throw"Comparator not allowed when using :list";if(!((t=0)=>{let e=["i;ascii-casemap"];return!l.includes("relational")&&t||e.push("i;octet"),!l.includes("comparator-i;ascii-numeric")&&t||e.push("i;ascii-numeric"),!l.includes("comparator-i;unicode-casemap")&&t||e.push("i;unicode-casemap"),e})().includes(t.value))throw"Unsupported comparator "+t;this._comparator=t}else this._comparator=""}toString(){return(this.identifier+(this._comparator?" :comparator "+this._comparator:"")+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+i(this.arguments," ")).trim()}}class GrammarTestList extends Array{toString(){return 1<this.length?"("+this.join(", ")+")":this.length?this[0].toString():""}push(t){if(!(t instanceof TestCommand))throw"Not an instanceof Test";super.push(t)}}class GrammarBracketComment extends GrammarComment{toString(){return"/* "+super.toString()+" */"}}class GrammarHashComment extends GrammarComment{toString(){return"# "+super.toString()}}class GrammarNumber{constructor(t="0"){this._value=t}toString(){return this._value}get value(){return this._value}set value(t){this._value=t}}class GrammarStringList extends Array{toString(){return 1<this.length?"["+this.join(",")+"]":this.length?this[0].toString():""}push(t){t instanceof GrammarQuotedString||(t=new GrammarQuotedString(t)),super.push(t)}}const H=RegExp('(?:^\\s*|\\s*,\\s*)(?:"('+q+')"|text:[ \\t]*('+N+")?\\r\\n((?:"+I+"|"+M+")*)\\.\\r\\n)","gm");GrammarStringList.fromString=t=>{let e,s=new GrammarStringList;for(t=t.replace(/^[\r\n\t[]+/,"");e=H.exec(t);)e[3]?s.push(new GrammarMultiLine(e[3],e[2])):s.push(new GrammarQuotedString(e[1]));return s};class GrammarQuotedString extends GrammarString{constructor(t=""){super(t instanceof GrammarQuotedString?t.value:t)}toString(){return'"'+this._value.replace(/[\\"]/g,"\\$&")+'"'}}class GrammarMultiLine extends GrammarString{constructor(t,e=""){super(),this.value=t,this.comment=e}toString(){return"text:"+(this.comment?"# "+this.comment:"")+"\r\n"+this.value+"\r\n.\r\n"}}const U=RegExp("text:[ \\t]*("+N+")?\\r\\n((?:"+I+"|"+M+")*)\\.\\r\\n","m");GrammarMultiLine.fromString=t=>(t=t.match(U))[2]?new GrammarMultiLine(t[2].replace(/\r\n$/,""),t[1]):new GrammarMultiLine;class ConditionalCommand extends ControlCommand{constructor(){super(),this.commands=new GrammarCommands}}class IfCommand extends ConditionalCommand{constructor(){super(),this._test=null}get test(){return this._test}set test(t){this._test=t}toString(){return this.identifier+" "+this._test+" "+this.commands}}class RequireCommand extends ControlCommand{constructor(){super(),this.capabilities=new GrammarStringList}toString(){return"require "+this.capabilities+";"}pushArguments(t){t[0]instanceof GrammarStringList?this.capabilities=t[0]:t[0]instanceof GrammarQuotedString&&this.capabilities.push(t[0])}}const Y=t=>":localpart"===t||":domain"===t||":all"===t||Z(t),Z=t=>":user"===t||":detail"===t,$=t=>{if(t instanceof GrammarStringList)return t;let e=new GrammarStringList;return t instanceof GrammarString&&e.push(t.value),e};class NotTest extends TestCommand{constructor(){super(),this.test=new TestCommand}toString(){return"not "+this.test}}class FlagCommand extends ActionCommand{constructor(){super(),this._variablename=new GrammarQuotedString,this.list_of_flags=new GrammarStringList}get require(){return"imap4flags"}toString(){let t=this._variablename;return this.identifier+(t.length?" "+this.variablename:"")+" "+this.list_of_flags+";"}get variablename(){return this._variablename.value}set variablename(t){this._variablename.value=t}pushArguments(t){t[1]&&(t[0]instanceof GrammarQuotedString&&(this._variablename=t[0]),t[0]=t[1]),t[0]instanceof GrammarStringList?this.list_of_flags=t[0]:t[0]&&this.list_of_flags.push(t[0])}}class rfc5429Command extends ActionCommand{constructor(){super(),this._reason=new GrammarQuotedString}toString(){return this.require+" "+this._reason+";"}get reason(){return this._reason.value}set reason(t){this._reason.value=t}pushArguments(t){t[0]instanceof GrammarString&&(this._reason=t[0])}}class ForEveryPartCommand extends ControlCommand{constructor(){super(),this.name=new GrammarString,this.commands=new GrammarCommands}get require(){return"foreverypart"}toString(){let t="foreverypart";return this.name.length&&(t+=" :name "+this.name),t+" "+this.commands}pushArguments(t){t.forEach(((e,s)=>{":name"===e&&(this.name.value=t[s+1].value)}))}}const W=(t,e)=>{const s=new t,a=s.require;return e&&!(s instanceof e)||a&&!(Array.isArray(a)?a:[a]).every((t=>l.includes(t)))?null:s.identifier},K=[IfCommand,class ElsIfCommand extends IfCommand{},class ElseCommand extends ConditionalCommand{toString(){return this.identifier+" "+this.commands}},RequireCommand,class StopCommand extends ControlCommand{},class DiscardCommand extends ActionCommand{},class FileIntoCommand extends ActionCommand{constructor(){super(),this._mailbox=new GrammarQuotedString,this.copy=!1,this.create=!1}get require(){return"fileinto"}toString(){return"fileinto"+(this.copy&&l.includes("copy")?" :copy":"")+(this.create&&l.includes("mailbox")?" :create":"")+" "+this._mailbox+";"}get mailbox(){return this._mailbox.value}set mailbox(t){this._mailbox.value=t}pushArguments(t){t[0]instanceof GrammarString&&(this._mailbox=t[0])}},class KeepCommand extends ActionCommand{},class RedirectCommand extends ActionCommand{constructor(){super(),this._address=new GrammarQuotedString,this.copy=!1,this.list=null}toString(){return"redirect"+(this.copy&&l.includes("copy")?" :copy":"")+" "+this._address+";"}get address(){return this._address.value}set address(t){this._address.value=t}pushArguments(t){t[0]instanceof GrammarString&&(this._address=t[0])}},class AddressTest extends TestCommand{constructor(){super(),this.address_part=":all",this.header_list=new GrammarStringList,this.key_list=new GrammarStringList,this.index=new GrammarNumber(""),this.last=!1}get require(){let t=[];return Z(this.address_part)&&t.push("subaddress"),(this.last||this.index&&this.index.value)&&t.push("index"),(this.mime||this.anychild)&&t.push("mime"),t}toString(){let t="address";return l.includes("mime")&&(this.mime&&(t+=" :mime"),this.anychild&&(t+=" :anychild")),t+(this.last?" :last":this.index.value?" :index "+this.index:"")+(this._comparator?" :comparator "+this._comparator:"")+" "+this.address_part+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+this.header_list+" "+this.key_list}pushArguments(t){this.key_list=$(t.pop()),this.header_list=$(t.pop()),t.forEach(((e,s)=>{Y(e)?this.address_part=e:":last"===e?this.last=!0:":mime"===e?this.mime=!0:":anychild"===e?this.anychild=!0:s&&":index"===t[s-1]&&(this.index.value=e.value)}))}},class AllOfTest extends TestCommand{constructor(){super(),this.tests=new GrammarTestList}toString(){return"allof "+this.tests}},class AnyOfTest extends TestCommand{constructor(){super(),this.tests=new GrammarTestList}toString(){return"anyof "+this.tests}},class EnvelopeTest extends TestCommand{constructor(){super(),this.address_part=":all",this.envelope_part=new GrammarStringList,this.key_list=new GrammarStringList}get require(){return Z(this.address_part)?["envelope","subaddress"]:"envelope"}toString(){return"envelope"+(this._comparator?" :comparator "+this._comparator:"")+" "+this.address_part+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+this.envelope_part+" "+this.key_list}pushArguments(t){this.key_list=$(t.pop()),this.envelope_part=$(t.pop()),t.forEach((t=>{Y(t)&&(this.address_part=t)}))}},class ExistsTest extends TestCommand{constructor(){super(),this.header_names=new GrammarStringList}get require(){return this.mime||this.anychild?["mime"]:null}toString(){let t="exists";return l.includes("mime")&&(this.mime&&(t+=" :mime"),this.anychild&&(t+=" :anychild")),t+" "+this.header_names}pushArguments(t){this.header_names=$(t.pop()),t.forEach((t=>{":mime"===t?this.mime=!0:":anychild"===t&&(this.anychild=!0)}))}},class FalseTest extends TestCommand{toString(){return"false"}},class HeaderTest extends TestCommand{constructor(){super(),this.address_part=":all",this.header_names=new GrammarStringList,this.key_list=new GrammarStringList,this.index=new GrammarNumber(""),this.last=!1,this.mime=!1,this.anychild=!1,this.type=!1,this.subtype=!1,this.contenttype=!1,this.param=new GrammarStringList}get require(){let t=[];return Z(this.address_part)&&t.push("subaddress"),(this.last||this.index&&this.index.value)&&t.push("index"),(this.mime||this.anychild)&&t.push("mime"),t}toString(){let t="header";return l.includes("mime")&&(this.mime&&(t+=" :mime",this.type&&(t+=" :type"),this.subtype&&(t+=" :subtype"),this.contenttype&&(t+=" :contenttype"),this.param.length&&(t+=" :param "+this.param)),this.anychild&&(t+=" :anychild")),t+(this.last?" :last":this.index.value?" :index "+this.index:"")+(this._comparator?" :comparator "+this._comparator:"")+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+this.header_names+" "+this.key_list}pushArguments(t){this.key_list=$(t.pop()),this.header_names=$(t.pop()),t.forEach(((e,s)=>{Y(e)?this.address_part=e:":last"===e?this.last=!0:s&&":index"===t[s-1]&&(this.index.value=e.value)}))}},NotTest,class SizeTest extends TestCommand{constructor(){super(),this.mode=":over",this.limit=0}toString(){return"size "+this.mode+" "+this.limit}pushArguments(t){t.forEach((t=>{":over"===t||":under"===t?this.mode=t:t instanceof GrammarNumber&&(this.limit=t)}))}},class TrueTest extends TestCommand{toString(){return"true"}},class BodyTest extends TestCommand{constructor(){super(),this.body_transform="",this.key_list=new GrammarStringList}get require(){return"body"}toString(){return"body"+(this._comparator?" :comparator "+this._comparator:"")+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+this.body_transform+" "+this.key_list}pushArguments(t){t.forEach(((e,s)=>{":raw"===e||":text"===e?this.body_transform=e:(e instanceof GrammarStringList||e instanceof GrammarString)&&(s&&":content"===t[s-1]?this.body_transform=":content "+e:this[t[s+1]?"content_list":"key_list"]=e)}))}},class EnvironmentTest extends TestCommand{constructor(){super(),this._name=new GrammarQuotedString,this.key_list=new GrammarStringList}get name(){return this._name.value}set name(t){this._name.value=t}get require(){return"environment"}toString(){return"environment"+(this._comparator?" :comparator "+this._comparator:"")+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+this._name+" "+this.key_list}pushArguments(t){this.key_list=t.pop(),this._name=t.pop()}},class SetCommand extends ActionCommand{constructor(){super(),this.modifiers=[],this._name=new GrammarQuotedString,this._value=new GrammarQuotedString}get require(){return"variables"}get name(){return this._name.value}set name(t){this._name.value=t}get value(){return this._value.value}set value(t){this._value.value=t}toString(){return"set "+this.modifiers.join(" ")+" "+this._name+" "+this._value}pushArguments(t){[":lower",":upper",":lowerfirst",":upperfirst",":quotewildcard",":length"].forEach((e=>{t.includes(e)&&this.modifiers.push(e)})),this._value=t.pop(),this._name=t.pop()}},class StringTest extends TestCommand{constructor(){super(),this.source=new GrammarStringList,this.key_list=new GrammarStringList}toString(){return"string"+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+(this._comparator?" :comparator "+this._comparator:"")+" "+this.source+" "+this.key_list}pushArguments(t){this.key_list=t.pop(),this.source=t.pop()}},class VacationCommand extends ActionCommand{constructor(){super(),this._days=new GrammarNumber,this._seconds=new GrammarNumber,this._subject=new GrammarQuotedString,this._from=new GrammarQuotedString,this.addresses=new GrammarStringList,this.mime=!1,this._handle=new GrammarQuotedString,this._reason=new GrammarQuotedString}get require(){return"vacation"}get days(){return this._days.value}get seconds(){return this._seconds.value}get subject(){return this._subject.value}get from(){return this._from.value}get handle(){return this._handle.value}get reason(){return this._reason.value}set days(t){this._days.value=t}set seconds(t){this._seconds.value=t}set subject(t){this._subject.value=t}set from(t){this._from.value=t}set handle(t){this._handle.value=t}set reason(t){this._reason.value=t}toString(){let t="vacation";return 0<this._seconds.value&&l.includes("vacation-seconds")?t+=" :seconds "+this._seconds:0<this._days.value&&(t+=" :days "+this._days),this._subject.length&&(t+=" :subject "+this._subject),this._from.length&&(t+=" :from "+this._from),this.addresses.length&&(t+=" :addresses "+this.addresses),this.mime&&(t+=" :mime"),this._handle.length&&(t+=" :handle "+this._handle),t+" "+this._reason}pushArguments(t){this._reason.value=t.pop().value,t.forEach(((e,s)=>{if(":mime"===e)this.mime=!0;else if(s&&":addresses"===t[s-1])this.addresses=e;else if(s&&":"===t[s-1][0]){let a=t[s-1].replace(":","_");this[a]&&(this[a].value=e.value)}}))}},class SetFlagCommand extends FlagCommand{},class AddFlagCommand extends FlagCommand{},class RemoveFlagCommand extends FlagCommand{},class HasFlagTest extends TestCommand{constructor(){super(),this.variable_list=new GrammarStringList,this.list_of_flags=new GrammarStringList}get require(){return"imap4flags"}toString(){return"hasflag"+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+(this._comparator?" :comparator "+this._comparator:"")+" "+this.variable_list+" "+this.list_of_flags}pushArguments(t){t.forEach(((e,s)=>{(e instanceof GrammarStringList||e instanceof GrammarString)&&(this[t[s+1]?"variable_list":"list_of_flags"]=e)}))}},class SpamTestTest extends TestCommand{constructor(){super(),this.percent=!1,this._value=new GrammarQuotedString}get require(){return/:value|:count/.test(this._match_type)?["spamtestplus","relational"]:"spamtestplus"}get value(){return this._value.value}set value(t){this._value.value=t}toString(){return"spamtest"+(this.percent?" :percent":"")+(this._comparator?" :comparator "+this._comparator:"")+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+this._value}pushArguments(t){t.forEach((t=>{":percent"===t?this.percent=!0:t instanceof GrammarQuotedString&&(this._value=t)}))}},class VirusTestTest extends TestCommand{constructor(){super(),this._value=new GrammarQuotedString}get require(){return":value"==this._match_type?["virustest","relational"]:"virustest"}get value(){return this._value.value}set value(t){this._value.value=t}toString(){return"virustest"+(this._comparator?" :comparator "+this._comparator:"")+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+this._value}pushArguments(t){t.forEach((t=>{t instanceof GrammarQuotedString&&(this._value=t)}))}},class DateTest extends TestCommand{constructor(){super(),this._zone=new GrammarQuotedString,this.originalzone=!1,this._header_name=new GrammarQuotedString,this._date_part=new GrammarQuotedString,this.key_list=new GrammarStringList,this.index=new GrammarNumber,this.last=!1}get require(){return"date"}get zone(){return this._zone.value}set zone(t){this._zone.value=t}get header_name(){return this._header_name.value}set header_name(t){this._header_name.value=t}get date_part(){return this._date_part.value}set date_part(t){this._date_part.value=t}toString(){return"date"+(this.last?" :last":this.index.value?" :index "+this.index:"")+(this.originalzone?" :originalzone":this._zone.length?" :zone "+this._zone:"")+(this._comparator?" :comparator "+this._comparator:"")+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+this._header_name+" "+this._date_part+" "+this.key_list}pushArguments(t){this.key_list=t.pop(),this._date_part=t.pop(),this._header_name=t.pop(),t.forEach(((e,s)=>{":originalzone"===e?this.originalzone=!0:":last"===e?this.last=!0:s&&":zone"===t[s-1]?this._zone.value=e.value:s&&":index"===t[s-1]&&(this.index.value=e.value)}))}},class CurrentDateTest extends TestCommand{constructor(){super(),this._zone=new GrammarQuotedString,this._date_part=new GrammarQuotedString,this.key_list=new GrammarStringList}get require(){return"date"}get zone(){return this._zone.value}set zone(t){this._zone.value=t}get date_part(){return this._date_part.value}set date_part(t){this._date_part.value=t}toString(){return"currentdate"+(this._zone.length?" :zone "+this._zone:"")+(this._comparator?" :comparator "+this._comparator:"")+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+" "+this._date_part+" "+this.key_list}pushArguments(t){this.key_list=t.pop(),this._date_part=t.pop(),t.forEach(((e,s)=>{s&&":zone"===t[s-1]&&(this._zone.value=e.value)}))}},class AddHeaderCommand extends ActionCommand{constructor(){super(),this.last=!1,this._field_name=new GrammarQuotedString,this._value=new GrammarQuotedString}get require(){return"editheader"}get field_name(){return this._field_name.value}set field_name(t){this._field_name.value=t}get value(){return this._value.value}set value(t){this._value.value=t}toString(){return this.identifier+(this.last?" :last":"")+" "+this._field_name+" "+this._value+";"}pushArguments(t){this._value=t.pop(),this._field_name=t.pop(),this.last=t.includes(":last")}},class DeleteHeaderCommand extends ActionCommand{constructor(){super(),this.index=new GrammarNumber,this.last=!1,this.comparator="",this.match_type=":is",this._field_name=new GrammarQuotedString,this.value_patterns=new GrammarStringList}get require(){return"editheader"}get field_name(){return this._field_name.value}set field_name(t){this._field_name.value=t}toString(){return this.identifier+(this.last?" :last":this.index.value?" :index "+this.index:"")+(this.comparator?" :comparator "+this.comparator:"")+" "+this.match_type+" "+this._field_name+" "+this.value_patterns+";"}pushArguments(t){let e=t.length-1;t.forEach(((e,s)=>{":last"===e?this.last=!0:s&&":index"===t[s-1]&&(this.index.value=e.value,t[s]=null)})),e&&t[e-1]instanceof GrammarString?(this._field_name=t[e-1],this.value_patterns=t[e]):this._field_name=t[e]}},class ErejectCommand extends rfc5429Command{get require(){return"ereject"}},class RejectCommand extends rfc5429Command{get require(){return"reject"}},class NotifyCommand extends ActionCommand{constructor(){super(),this._method=new GrammarQuotedString,this._from=new GrammarQuotedString,this._importance=new GrammarNumber,this.options=new GrammarStringList,this._message=new GrammarQuotedString}get method(){return this._method.value}set method(t){this._method.value=t}get from(){return this._from.value}set from(t){this._from.value=t}get importance(){return this._importance.value}set importance(t){this._importance.value=t}get message(){return this._message.value}set message(t){this._message.value=t}get require(){return"enotify"}toString(){let t="notify";return this._from.value&&(t+=" :from "+this._from),0<this._importance.value&&(t+=" :importance "+this._importance),this.options.length&&(t+=" :options "+this.options),this._message.value&&(t+=" :message "+this._message),t+" "+this._method}pushArguments(t){this._method.value=t.pop().value,t.forEach(((e,s)=>{if(s&&":options"===t[s-1])this.options=e;else if(s&&":"===t[s-1][0]){let a=t[s-1].replace(":","_");this[a]&&(this[a].value=e.value)}}))}},class ValidNotifyMethodTest extends TestCommand{constructor(){super(),this.notification_uris=new GrammarStringList}toString(){return"valid_notify_method "+this.notification_uris}pushArguments(t){this.notification_uris=t.pop()}},class NotifyMethodCapabilityTest extends TestCommand{constructor(){super(),this._notification_uri=new GrammarQuotedString,this._notification_capability=new GrammarQuotedString,this.key_list=new GrammarStringList}get notification_uri(){return this._notification_uri.value}set notification_uri(t){this._notification_uri.value=t}get notification_capability(){return this._notification_capability.value}set notification_capability(t){this._notification_capability.value=t}toString(){return"valid_notify_method "+(this._comparator?" :comparator "+this._comparator:"")+(this._match_type?" "+this._match_type:"")+(this.relational_match?" "+this.relational_match:"")+this._notification_uri+this._notification_capability+this.key_list}pushArguments(t){this.key_list=t.pop(),this._notification_capability=t.pop(),this._notification_uri=t.pop()}},class IHaveTest extends TestCommand{constructor(){super(),this.capabilities=new GrammarStringList}get require(){return"ihave"}toString(){return"ihave "+this.capabilities}pushArguments(t){this.capabilities=t.pop()}},class ErrorCommand extends ControlCommand{constructor(){super(),this._message=new GrammarQuotedString}get require(){return"ihave"}get message(){return this._message.value}set message(t){this._message.value=t}toString(){return"error "+this._message+";"}pushArguments(t){this._message=t.pop()}},class MailboxExistsTest extends TestCommand{constructor(){super(),this.mailbox_names=new GrammarStringList}get require(){return"mailbox"}toString(){return"mailboxexists "+this.mailbox_names+";"}pushArguments(t){t[0]instanceof GrammarStringList&&(this.mailbox_names=t[0])}},class MetadataTest extends TestCommand{constructor(){super(),this._mailbox=new GrammarQuotedString,this._annotation_name=new GrammarQuotedString,this.key_list=new GrammarStringList}get require(){return"mboxmetadata"}get mailbox(){return this._mailbox.value}set mailbox(t){this._mailbox.value=t}get annotation_name(){return this._annotation_name.value}set annotation_name(t){this._annotation_name.value=t}toString(){return"metadata "+this._match_type+(this.relational_match?" "+this.relational_match:"")+(this._comparator?" :comparator "+this._comparator:"")+" "+this._mailbox+" "+this._annotation_name+" "+this.key_list}pushArguments(t){this.key_list=t.pop(),this._annotation_name=t.pop(),this._mailbox=t.pop()}},class MetadataExistsTest extends TestCommand{constructor(){super(),this._mailbox=new GrammarQuotedString,this.annotation_names=new GrammarStringList}get require(){return"mboxmetadata"}get mailbox(){return this._mailbox.value}set mailbox(t){this._mailbox.value=t}toString(){return"metadataexists "+this._mailbox+" "+this.annotation_names}pushArguments(t){this.annotation_names=t.pop(),this._mailbox=t.pop()}},ForEveryPartCommand,class BreakCommand extends ForEveryPartCommand{toString(){let t="break";return this.name.length&&(t+=" :name "+this.name),t+";"}},class ReplaceCommand extends ActionCommand{constructor(){super(),this.mime=!1,this._subject=new GrammarQuotedString,this._from=new GrammarQuotedString,this._replacement=new GrammarQuotedString}get require(){return"replace"}get subject(){return this._subject.value}set subject(t){this._subject.value=t}get from(){return this._from.value}set from(t){this._from.value=t}get replacement(){return this._replacement.value}set replacement(t){this._replacement.value=t}toString(){let t="replace";return this.mime&&(t+=" :mime"),this._subject.length&&(t+=" :subject "+this._subject),this._from.length&&(t+=" :from "+this._from),t+this._replacement+";"}pushArguments(t){this._replacement=t.pop(),t.forEach(((e,s)=>{if(":mime"===e)this.mime=!0;else if(s&&":"===t[s-1][0]){let a=t[s-1].replace(":","_");this[a]&&(this[a].value=e.value)}}))}},class EncloseCommand extends ActionCommand{constructor(){super(),this._subject=new GrammarQuotedString,this.headers=new GrammarStringList}get require(){return"enclose"}get subject(){return this._subject.value}set subject(t){this._subject.value=t}toString(){let t="enclose";return this._subject.length&&(t+=" :subject "+this._subject),this.headers.length&&(t+=" :headers "+this.headers),t+" :text;"}pushArguments(t){t.forEach(((e,s)=>{if(s&&":"===t[s-1][0]){let a=t[s-1].replace(":","_");this[a]&&(this[a].value=e.value)}}))}},class ExtractTextCommand extends ActionCommand{constructor(){super(),this.modifiers=[],this._first=new GrammarNumber,this._varname=new GrammarQuotedString}get varname(){return this._varname.value}set varname(t){this._varname.value=t}get require(){return"extracttext"}toString(){let t="extracttext "+this.modifiers.join(" ");return 0<this._first.value&&(t+=" :first "+this._first),t+" "+this._varname+";"}pushArguments(t){this._varname=t.pop(),[":lower",":upper",":lowerfirst",":upperfirst",":quotewildcard",":length"].forEach((e=>{t.includes(e)&&this.modifiers.push(e)})),t.forEach(((e,s)=>{s&&":"===t[s-1][0]&&(this[t[s-1].replace(":","_")].value=e.value)}))}},class ValidExtListTest extends TestCommand{constructor(){super("valid_ext_list"),this.ext_list_names=new GrammarStringList}get require(){return"foreverypart"}toString(){return"valid_ext_list "+this.ext_list_names}pushArguments(t){this.ext_list_names=t.pop()}},class IncludeCommand extends ControlCommand{constructor(){super(),this.global=!1,this.once=!1,this.optional=!1,this._value=new GrammarQuotedString}get require(){return"include"}get value(){return this._value.value}set value(t){this._value.value=t}toString(){return"include"+(this.global?" :global":"")+(this.once?" :once":"")+(this.optional?" :optional":"")+" "+this._value+";"}pushArguments(t){t.forEach((t=>{":global"===t||":once"===t||":optional"===t?this[t.slice(1)]=!0:t instanceof GrammarQuotedString&&(this._value=t)}))}},class ReturnCommand extends ControlCommand{get require(){return"include"}},class GlobalCommand extends ControlCommand{constructor(){super(),this.value=new GrammarStringList}get require(){return["include","variables"]}toString(){return"global "+this.value+";"}pushArguments(t){this.value=t.pop()}}],X=()=>{let t,e={};return K.forEach((s=>{t=W(s,ActionCommand),t&&(e[t]=s)})),e},tt=()=>{let t,e={};return K.forEach((s=>{t=W(s,ControlCommand),t&&(e[t]=s)})),e},et=()=>{let t,e={};return K.forEach((s=>{t=W(s,TestCommand),t&&(e[t]=s)})),e},st="("+[J,z,Q,N,"/\\*[\\s\\S]*?\\*/","\\{","\\}","\\(","\\)",",",";",":[a-zA-Z_][a-zA-Z0-9_]*","[a-zA-Z_][a-zA-Z0-9_]*",D,"(?: |\\r\\n|\\t)+","[^ \\r\\n\\t]+"].join(")|(")+")",at=["","","","","","Block start not part of control command","Block end has no matching block start","Test start not part of anyof/allof test","Test end not part of test-list","Comma not part of test-list","Semicolon not at end of command","","","","",""],rt=(t,e="script.sieve")=>{t=t.replace(/\r?\n/g,"\r\n");const s=(()=>{let t,e={};return K.forEach((s=>{t=W(s),t&&(e[t]=s)})),e})(),a=(()=>{let t={};return K.forEach((e=>{const s=new e,a=s.require;a&&!(Array.isArray(a)?a:[a]).every((t=>l.includes(t)))&&(t[s.identifier]=e)})),t})();let r,i=1,n=[],o=RegExp(st,"gm"),m=[],h=null,u=[],c=[];const d=s=>{throw new SyntaxError(s+" on line "+i+" around:\n\n"+t.slice(o.lastIndex-20,o.lastIndex+10),e,i)},_=t=>{h||d("Argument not part of command");let e=c[c.length-1];if(p(0).includes(t))h.match_type=t;else if(p(0).includes(e)){if(--c.length,":value"===e||":count"===e)return/^"(gt|ge|lt|le|eq|ne)"$/.test(t)||d("Invalid relational match-type "+t),void(h.relational_match=t)}else":comparator"===e&&(h.comparator=t,--c.length);c.push(t)},g=()=>{c.length&&(h&&h.pushArguments(c),c=[])};for(m.up=()=>(m.pop(),m[m.length-1]);r=o.exec(t);){let t=r.findIndex(((t,e)=>0<e&&void 0!==t)),e=r[t];switch(t){case 13:{let t;if(g(),e=e.toLowerCase(),s[e]){if("elsif"===e||"else"===e){let t=!1,e=h?h?.commands:n,s=e?.length;for(;s;){if(e[--s],e[s]instanceof IfCommand){t=!0;break}if("string"!=typeof e[s]&&!(e[s]instanceof GrammarComment))break}t||d("Not after IF/ELSIF condition")}t=new s[e]}else t=a[e]?new a[e]:new GrammarCommand(e);t instanceof TestCommand?h instanceof ConditionalCommand||h instanceof NotTest?h.test=t:h.tests instanceof GrammarTestList?h.tests.push(t):d('Test "'+e+'" not allowed in "'+h.identifier+'" command'):h?h.commands?h.commands.push(t):d('command "'+t.identifier+'" not allowed in "'+h.identifier+'" command'):n.push(t),m.push(t),h=t,h.require&&(Array.isArray(h.require)?h.require:[h.require]).forEach((t=>u.push(t))),h.comparator&&u.push("comparator-"+h.comparator);break}case 12:_(e.toLowerCase());break;case 1:_(GrammarStringList.fromString(e));break;case 3:_(GrammarMultiLine.fromString(e));break;case 2:try{e=JSON.parse(e)}catch(t){}_(new GrammarQuotedString(e));break;case 14:_(new GrammarNumber(e));break;case 5:case 4:{let s=4==t?new GrammarHashComment(e.slice(1).trim()):new GrammarBracketComment(e.slice(2,-2));h?(h.comments||(h.comments=[]),(h.commands||h.comments).push(s)):n.push(s);break}case 15:h||n.push(e.trim());break;case 11:h||d(at[t]),g(),h instanceof RequireCommand&&h.capabilities.forEach((t=>u.push(t.value))),h=m.up();break;case 6:for(g();h&&!(h instanceof ConditionalCommand);)h=m.up();h||d(at[t]);break;case 7:h instanceof ConditionalCommand||d(at[t]),h=m.up();break;case 8:case 9:case 10:for(g();h&&!(h.tests instanceof GrammarTestList);)h=m.up();h||d(at[t]);break;case 0:d("Invalid token "+e)}i+=e.split("\n").length-1}return n.requires=u,n.toString=()=>n.join("\r\n"),n};class SieveScriptPopupView extends rl.pluginPopupView{constructor(){super("SieveScript"),this.addObservables({saveError:!1,errorText:"",rawActive:!1,script:null,saving:!1,sieveCapabilities:"",availableActions:"",availableControls:"",availableTests:""}),this.filterForDeletion=ko.observable(null).askDeleteHelper()}validateScript(){try{this.errorText(""),rt(this.script().body())}catch(t){this.errorText(t.message)}}saveScript(){let t=this,e=t.script();if(!t.saving()){if(this.errorText(""),t.saveError(!1),!e.verify())return;if(!e.exists()&&m.find((t=>t.name()===e.name())))return void e.nameError(!0);try{rt(e.body())}catch(t){return void this.errorText(t.message)}t.saving(!0),e.allowFilters()&&e.body(e.filtersToRaw()),o.request("FiltersScriptSave",((s,a)=>{t.saving(!1),s?(t.saveError(!0),t.errorText(a?.messageAdditional||n(s))):(e.exists()||m.push(e),e.exists(!0),e.hasChanges(!1))}),e.toJSON())}}deleteFilter(t){this.script().filters.remove(t)}addFilter(){const t=new FilterModel;t.generateID(),FilterPopupView.showModal([t,()=>this.filters.push(t.assignTo())])}editFilter(t){const e=t.assignTo();FilterPopupView.showModal([e,()=>{e.assignTo(t);const s=this.script();s.hasChanges(s.body()!=s.filtersToRaw())},!0])}toggleFiltersRaw(){const t=this.script(),e=!this.rawActive();e&&t.body(t.filtersToRaw()),this.rawActive(e)}onBuild(t){t.addEventListener("click",(e=>{const s=e.target.closestWithin("td.e-action",t),a=s&&ko.dataFor(s);a&&this.editFilter(a)}))}beforeShow(t){this.sieveCapabilities(l.join(" ")),this.availableActions([...Object.keys(X())].join(", ")),this.availableControls([...Object.keys(tt())].join(", ")),this.availableTests([...Object.keys(et())].join(", ")),t=t||new SieveScriptModel,this.script(t),this.rawActive(!t.allowFilters()),this.saveError(!1),this.errorText("")}}window.Sieve={capa:l,scripts:m,loading:h,serverError:u,serverErrorDesc:c,ScriptView:SieveScriptPopupView,folderList:null,updateList:()=>{h()||(h(!0),u(!1),o.request("Filters",((t,s)=>{h(!1),m([]),t?(l([]),d(n(t))):(l(s.Result.Capa),e(s.Result.Scripts,(t=>{(t=SieveScriptModel.reviveFromJson(t))&&(t.allowFilters()?m.unshift(t):m.push(t))})))})))},deleteScript:t=>{u(!1),o.request("FiltersScriptDelete",((e,s)=>e?d(s?.messageAdditional||n(e)):m.remove(t)),{name:t.name()})},setActiveScript(t){u(!1),o.request("FiltersScriptActivate",((e,s)=>e?d(s?.messageAdditional||e):m.forEach((e=>e.active(e.name()===t)))),{name:t})}}}();
| ver. 1.4 |
Github
|
.
| PHP 8.2.28 | Generation time: 0.05 |
proxy
|
phpinfo
|
Settings