All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web-interface.assets.1255d548-2507.c880aec23359f5fe633d.js Maven / Gradle / Ivy

There is a newer version: 6.1.4
Show newest version
"use strict";(()=>{(self.webpackChunkgraylog_web_interface=self.webpackChunkgraylog_web_interface||[]).push([["1255d548-2507"],{WXKdeTMX:(x,B,r)=>{r.d(B,{Z:()=>l});var t=r("pmX897Fv"),I=r.n(t),n=r("DjJvgDaP"),y=r.n(n),P=y()(I());P.push([x.id,`.YdarIKpxaNitFlWJ678S {
    height: 160px;
    max-height: 160px;
    overflow: hidden;
    overflow-y: scroll;
    padding-left: 0;
    border-bottom: 1px solid #ddd;
}

.kqwpZ3NGYl1tRenAeuma {
    margin-bottom: 0px;
}

.lmEVMuAgMnJwEQOO5HRZ {
    position: absolute;
    top: 7px;
    right: 7px;
}

.J36QQw1MHcjMFdoQeCi9 {
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
    display: block;
}
`,"",{version:3,sources:["webpack://./src/components/grok-patterns/GrokPatternFilter.css"],names:[],mappings:"AAAA;IACI,aAAa;IACb,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,6BAA6B;AACjC;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,kBAAkB;IAClB,QAAQ;IACR,UAAU;AACd;;AAEA;IACI,uBAAuB;IACvB,mBAAmB;IACnB,gBAAgB;IAChB,cAAc;AAClB",sourcesContent:[`:local(.resultList) {
    height: 160px;
    max-height: 160px;
    overflow: hidden;
    overflow-y: scroll;
    padding-left: 0;
    border-bottom: 1px solid #ddd;
}

:local(.filterFormGroup) {
    margin-bottom: 0px;
}

:local(.addButton) {
    position: absolute;
    top: 7px;
    right: 7px;
}

:local(.patternDisplay) {
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
    display: block;
}
`],sourceRoot:""}]),P.locals={resultList:"YdarIKpxaNitFlWJ678S",filterFormGroup:"kqwpZ3NGYl1tRenAeuma",addButton:"lmEVMuAgMnJwEQOO5HRZ",patternDisplay:"J36QQw1MHcjMFdoQeCi9"};const l=P},XyJ0Mvpg:(x,B,r)=>{r.d(B,{Z:()=>y});var t=r("Z7aTuO5B"),I=r("rVdVsuGH");const y=(P,l)=>function(R){const k=(0,I.ZP)(l==null?void 0:l.pageSizes);return t.createElement(P,{...R,paginationQueryParameter:k})}},"5chL1ePP":(x,B,r)=>{r.d(B,{Z:()=>U});var t=r("ii0bleBb"),I=r.n(t),n=r("Z7aTuO5B"),y=r("uZqmR+ju"),P=r("+KM7MH1U"),l=r.n(P),_=r("dFpwyWHg"),R=r.n(_),k=r("C2ikvoS0"),c=r.n(k),A=r("1IntWRSu"),m=r.n(A),E=r("8nGWeFnd"),g=r.n(E),h=r("TeAcaicX"),v=r.n(h),f=r("eE3+5goe"),D=r.n(f),G=r("WXKdeTMX"),S={};S.styleTagTransform=D(),S.setAttributes=g(),S.insert=m().bind(null,"head"),S.domAPI=c(),S.insertStyleElement=v();var K=R()(G.Z,S);const N=G.Z&&G.Z.locals?G.Z.locals:void 0;var $=Object.defineProperty,j=(T,d,i)=>d in T?$(T,d,{enumerable:!0,configurable:!0,writable:!0,value:i}):T[d]=i,w=(T,d,i)=>(j(T,typeof d!="symbol"?d+"":d,i),i);class W extends n.Component{constructor(d){super(d),w(this,"shownListItems",[]),w(this,"_onPatternFilterChange",i=>{this.setState({patternFilter:i.target.value,activeListItem:-1})}),w(this,"_onPatternFilterKeyDown",i=>{const{addToPattern:o}=this.props,{activeListItem:a}=this.state,e=40,s=38,u=13,p=this.shownListItems[a];let C=0;const O=document.getElementById("list-item-0");let b,F;switch(i.keyCode){case e:if(C=a+1,a>=this.shownListItems.length)return;b=document.getElementById(`list-item-${C}`),F=b.parentElement,F.scrollTop=b.offsetTop-O.offsetTop,this.setState({activeListItem:C}),i.preventDefault();break;case s:if(C=a-1,C<0)return;b=document.getElementById(`list-item-${C}`),F=b.parentElement,F.scrollTop=b.offsetTop-O.offsetTop,this.setState({activeListItem:C}),i.preventDefault();break;case u:p&&o(p),i.preventDefault();break;default:break}}),this.state={patternFilter:"",activeListItem:-1}}shouldComponentUpdate(d,i){const{patterns:o}=this.props,{patternFilter:a,activeListItem:e}=this.state;return!(l()(d.patterns,o)&&a===i.patternFilter&&e===i.activeListItem)}render(){const{activeListItem:d,patternFilter:i}=this.state,{addToPattern:o,patterns:a}=this.props;let e,s;try{e=RegExp(i,"i")}catch(p){s=p==null?void 0:p.message}this.shownListItems=[];let u=[];return s||(u=a.filter(p=>e.test(p.name)).map((p,C)=>{const O=C===d;return this.shownListItems.push(p.name),n.createElement(y.ListGroupItem,{id:`list-item-${C}`,header:p.name,bsStyle:O?"info":void 0,onKeyDown:this._onPatternFilterKeyDown,key:p.name},n.createElement("span",{className:N.patternDisplay},p.pattern),n.createElement("span",{className:N.addButton},n.createElement(y.Button,{bsSize:"xsmall",bsStyle:"primary",onClick:()=>{o(p.name)}},"Add")))})),n.createElement(n.Fragment,null,n.createElement(y.Input,{type:"text",id:"pattern-selector",label:"Filter pattern",onChange:this._onPatternFilterChange,autoComplete:"off",formGroupClassName:N.filterFormGroup,onKeyDown:this._onPatternFilterKeyDown,value:i,error:s}),!s&&n.createElement(y.ListGroup,{bsClass:N.resultList},u))}}w(W,"propTypes",{addToPattern:I().func.isRequired,patterns:I().array.isRequired});const Q=W;var M=Object.defineProperty,J=(T,d,i)=>d in T?M(T,d,{enumerable:!0,configurable:!0,writable:!0,value:i}):T[d]=i,L=(T,d,i)=>(J(T,typeof d!="symbol"?d+"":d,i),i);class Z extends n.Component{constructor(){super(...arguments),L(this,"shownListItems",[]),L(this,"_onPatternChange",d=>{const{onPatternChange:i}=this.props;i(d.target.value)}),L(this,"_addToPattern",d=>{const{pattern:i,onPatternChange:o}=this.props,a=this.patternInput.getInputDOMNode().selectionStart||i.length,e=`${i.slice(0,a)}%{${d}}${i.slice(a)}`;o(e)})}render(){const{className:d,patterns:i,pattern:o}=this.props;return this.shownListItems=[],n.createElement(y.Row,{className:d},n.createElement(y.Col,{sm:8},n.createElement(y.Input,{ref:a=>{this.patternInput=a},type:"textarea",id:"pattern-input",label:"Pattern",help:"The pattern which will match the log line e.g: '%{IP:client}' or '.*?'",rows:9,onChange:this._onPatternChange,value:o,required:!0})),n.createElement(y.Col,{sm:4},n.createElement(Q,{addToPattern:this._addToPattern,patterns:i})))}}L(Z,"propTypes",{pattern:I().string,patterns:I().array,onPatternChange:I().func,className:I().string}),L(Z,"defaultProps",{pattern:"",patterns:[],onPatternChange:()=>{},className:""});const U=Z},"2ZvCF5AB":(x,B,r)=>{r.r(B),r.d(B,{default:()=>i});var t=r("Z7aTuO5B"),I=r("ii0bleBb"),n=r.n(I),y=r("J6y4/h8P"),P=r("/GOzvPf6"),l=r("uZqmR+ju"),_=r("BqxuktKK"),R=r("v4GbOr/o"),k=r("5chL1ePP"),c=Object.defineProperty,A=(o,a,e)=>a in o?c(o,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[a]=e,m=(o,a,e)=>(A(o,typeof a!="symbol"?a+"":a,e),e);class E extends t.Component{constructor(a){super(a),m(this,"openModal",()=>{this.setState({showModal:!0})}),m(this,"_onPatternChange",e=>{this.setState({pattern:e})}),m(this,"_onNameChange",e=>{const{validPatternName:s}=this.props,u=e.target.value;s(u)?this.setState({name:u,error:!1,error_message:""}):this.setState({name:u,error:!0,error_message:"Pattern with that name already exists!"})}),m(this,"_onSampleDataChange",e=>{this.setState({sampleData:e.target.value})}),m(this,"_getId",e=>{const{name:s}=this.state;return s!==void 0?e+s:e}),m(this,"_closeModal",()=>{this.setState({showModal:!1})}),m(this,"_saved",()=>{const{create:e,sendTelemetry:s}=this.props;s(R.A.GROK_PATTERN[e?"CREATED":"UPDATED"],{app_pathname:"grokpatterns",app_section:"grokpatterns"}),this._closeModal(),e&&this.setState({name:"",pattern:"",sampleData:"",test_result:""})}),m(this,"_save",()=>{const{savePattern:e}=this.props,{error:s}=this.state;s||e(this.state,this._saved)}),m(this,"_sendTelemetry",()=>{this.props.sendTelemetry(R.A.GROK_PATTERN.TESTED,{app_pathname:"grokpatterns",app_section:"grokpatterns"})}),m(this,"_testPattern",()=>{const{name:e,pattern:s}=this.state,{testPattern:u}=this.props;if(e===""||s===""){this.setState({error:!0,error_message:"To test the pattern a name and a pattern must be given!"});return}this.setState({error:!1,error_message:""}),u(this.state,p=>{this.setState({test_result:JSON.stringify(p,null,2),test_error:void 0}),this._sendTelemetry()},p=>{this.setState({test_result:"",test_error:p}),this._sendTelemetry()})}),this.state={showModal:!1,id:a.id,name:a.name,pattern:a.pattern,sampleData:a.sampleData,test_result:"",test_error:void 0,error:!1,error_message:""}}render(){const{create:a,patterns:e}=this.props,{showModal:s,name:u,error:p,error_message:C,pattern:O,test_error:b,sampleData:F,test_result:X}=this.state;let H;return a?H="Create pattern":H=t.createElement("span",null,"Edit"),t.createElement("span",null,t.createElement(l.Button,{onClick:this.openModal,bsStyle:a?"success":"default",bsSize:a?void 0:"xs"},H),t.createElement(l.BootstrapModalForm,{show:s,title:`${a?"Create":"Edit"} Grok Pattern ${u}`,"data-telemetry-title":`${a?"Create":"Edit"} Grok Pattern`,bsSize:"large",onSubmitForm:this._save,onCancel:this._closeModal,submitButtonText:`${a?"Create":"Update"} pattern`},t.createElement("fieldset",null,t.createElement(l.Input,{type:"text",id:this._getId("pattern-name"),label:"Name",onChange:this._onNameChange,value:u,bsStyle:p?"error":null,help:p?C:"Under this name the pattern will be stored and can be used like: '%{THISNAME}' later on ",autoFocus:!0,required:!0}),t.createElement(k.Z,{onPatternChange:this._onPatternChange,pattern:O,patterns:e}),b&&t.createElement(l.Panel,{bsStyle:"danger",header:"Grok Error"},t.createElement("code",{style:{display:"block",whiteSpace:"pre-wrap"}},b)),t.createElement(l.Input,{type:"textarea",id:this._getId("sampleData"),label:"Sample Data",help:"Here you can add sample data to test your pattern",onChange:this._onSampleDataChange,value:F}),t.createElement(l.Button,{bsStyle:"info",onClick:this._testPattern},"Test with Sample Data"),t.createElement("br",null),t.createElement("br",null),t.createElement(l.Input,{type:"textarea",id:this._getId("test_result"),readOnly:!0,rows:8,help:"Will contain the result of your test in a JSON format",label:"Test Result",value:X}))))}}m(E,"propTypes",{id:n().string,name:n().string,pattern:n().string,patterns:n().array,create:n().bool,sampleData:n().string,savePattern:n().func.isRequired,testPattern:n().func.isRequired,validPatternName:n().func.isRequired,sendTelemetry:n().func}),m(E,"defaultProps",{id:"",name:"",pattern:"",patterns:[],create:!1,sampleData:"",sendTelemetry:()=>{}});const g=(0,_.Z)(E);var h=r("jAGDuYSC"),v=r("gTexEe+8"),f=r("ZYJ7aiK3"),D=Object.defineProperty,G=(o,a,e)=>a in o?D(o,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[a]=e,S=(o,a,e)=>(G(o,typeof a!="symbol"?a+"":a,e),e);class K extends t.Component{constructor(a){super(a),S(this,"_openModal",()=>{this.setState({showModal:!0})}),S(this,"_closeModal",()=>{this.setState({importStrategy:"ABORT_ON_CONFLICT",showModal:!1})}),S(this,"_onSubmit",e=>{e.preventDefault();const s=new FileReader,{importStrategy:u}=this.state,{onSuccess:p}=this.props;s.onload=C=>{const O=C.target.result;f.o.bulkImport(O,u).then(()=>{h.Z.success("Grok Patterns imported successfully","Success!"),this._closeModal(),this.props.sendTelemetry(R.A.GROK_PATTERN.IMPORTED,{app_pathname:"grokpatterns",app_section:"grokpatterns"}),p()})},s.readAsText(this.patternFile.getInputDOMNode().files[0])}),S(this,"_onImportStrategyChange",e=>this.setState({importStrategy:e.target.value})),this.state={showModal:!1,importStrategy:"ABORT_ON_CONFLICT"}}render(){return t.createElement("span",null,t.createElement(l.Button,{bsStyle:"info",style:{marginRight:5},onClick:this._openModal},"Import pattern file"),t.createElement(v.Z,{show:this.state.showModal,title:"Import Grok patterns from file",submitButtonText:"Upload",onCancel:this._closeModal,onSubmitForm:this._onSubmit},t.createElement(l.Input,{id:"pattern-file",type:"file",ref:a=>{this.patternFile=a},name:"patterns",label:"Pattern file",help:"A file containing Grok patterns, one per line. Name and patterns should be separated by whitespace.",required:!0}),t.createElement(l.Input,{id:"abort-on-conflicting-patterns-radio",type:"radio",name:"import-strategy",value:"ABORT_ON_CONFLICT",label:"Abort import if a pattern with the same name already exists",defaultChecked:!0,onChange:a=>this._onImportStrategyChange(a)}),t.createElement(l.Input,{id:"replace-conflicting-patterns-radio",type:"radio",name:"import-strategy",value:"REPLACE_ON_CONFLICT",label:"Replace existing patterns with the same name",onChange:a=>this._onImportStrategyChange(a)}),t.createElement(l.Input,{id:"drop-existing-patterns-radio",type:"radio",name:"import-strategy",value:"DROP_ALL_EXISTING",label:"Drop all existing patterns before import",onChange:a=>this._onImportStrategyChange(a)})))}}S(K,"propTypes",{onSuccess:n().func.isRequired,sendTelemetry:n().func}),K.defaultProps={sendTelemetry:()=>{}};const N=(0,_.Z)(K);var $=r("XyJ0Mvpg");const w=()=>t.createElement(l.Popover,{id:"search-query-help",className:"popover-wide",title:"Search Syntax Help"},t.createElement("p",null,t.createElement("strong",null,"Available search fields")),t.createElement(l.Table,{condensed:!0},t.createElement("thead",null,t.createElement("tr",null,t.createElement("th",null,"Field"),t.createElement("th",null,"Description"))),t.createElement("tbody",null,t.createElement("tr",null,t.createElement("td",null,"name"),t.createElement("td",null,"The grok patterns name")),t.createElement("tr",null,t.createElement("td",null,"pattern"),t.createElement("td",null,"The pattern of the grok pattern")))),t.createElement("p",null,t.createElement("strong",null,"Examples")),t.createElement("p",null,"Find grok patterns containing COMMON in the pattern:",t.createElement("br",null),t.createElement("kbd",null,"pattern:COMMON"),t.createElement("br",null)));var W=Object.defineProperty,Q=(o,a,e)=>a in o?W(o,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[a]=e,M=(o,a,e)=>(Q(o,typeof a!="symbol"?a+"":a,e),e);const J=(0,y.default)(P.wQ)`
  th.name {
    min-width: 200px;
  }

  td {
    word-break: break-all;
  }
`,L=(o,a,e)=>{f.o.testPattern(o,a,e)},Z=o=>{let a;switch(o.toLocaleLowerCase()){case"name":a=t.createElement("th",{className:"name"},o);break;case"actions":a=t.createElement("th",{className:"actions"},o);break;default:a=t.createElement("th",null,o)}return a};class U extends t.Component{constructor(a){super(a),M(this,"loadData",(e,s=this.props.paginationQueryParameter.page,u=this.props.paginationQueryParameter.pageSize)=>{const{pagination:{query:p}}=this.state;this.loadPromise=f.o.searchPaginated(s,u,p).then(({patterns:C,pagination:O})=>{var b;e&&e(),(b=this.loadPromise)!=null&&b.isCancelled()||(this.loadPromise=void 0,this.setState({patterns:C,pagination:O}))})}),M(this,"validPatternName",e=>{const{patterns:s}=this.state;return!s.some(u=>u.name===e)}),M(this,"savePattern",(e,s)=>{f.o.savePattern(e,()=>{s(),this.loadData()})}),M(this,"_onPageChange",(e,s)=>{this.loadData(null,e,s)}),M(this,"_onSearch",(e,s)=>{const{pagination:u}=this.state,p=Object.assign(u,{query:e});this.props.paginationQueryParameter.resetPage(),this.setState({pagination:p},()=>this.loadData(s))}),M(this,"_onReset",()=>{const{pagination:e}=this.state,s=Object.assign(e,{query:""});this.props.paginationQueryParameter.resetPage(),this.setState({pagination:s},this.loadData)}),M(this,"confirmedRemove",e=>{window.confirm(`Really delete the grok pattern ${e.name}?
It will be removed from the system and unavailable for any extractor. If it is still in use by extractors those will fail to work.`)&&f.o.deletePattern(e,()=>{this.props.sendTelemetry(R.A.GROK_PATTERN.DELETED,{app_pathname:"grokpatterns",app_section:"grokpatterns"}),this.loadData()})}),M(this,"_patternFormatter",e=>{const{patterns:s}=this.state,u=s.filter(p=>p.name!==e.name);return t.createElement("tr",{key:e.id},t.createElement("td",null,e.name),t.createElement("td",null,e.pattern),t.createElement("td",null,t.createElement(l.ButtonToolbar,null,t.createElement(P.AE,{permissions:"inputs:edit"},t.createElement(g,{id:e.id,name:e.name,pattern:e.pattern,testPattern:L,patterns:u,create:!1,reload:this.loadData,savePattern:this.savePattern,validPatternName:this.validPatternName}),t.createElement(l.Button,{style:{marginRight:5},bsStyle:"danger",bsSize:"xs",onClick:()=>this.confirmedRemove(e)},"Delete")))))}),this.state={patterns:[],pagination:{count:0,total:0,query:""}}}componentDidMount(){this.loadData()}componentWillUnmount(){this.loadPromise&&this.loadPromise.cancel()}render(){const a=["Name","Pattern","Actions"],{pagination:e,patterns:s}=this.state,u=t.createElement(P.Ox,{trigger:"click",rootClose:!0,placement:"bottom",overlay:t.createElement(w,null)},t.createElement(l.Button,{bsStyle:"link",className:"archive-search-help-button"},t.createElement(P.JO,{name:"question-circle",fixedWidth:!0})));return t.createElement("div",null,t.createElement(P.mr,{title:"Grok patterns",actions:t.createElement(P.AE,{permissions:"inputs:edit"},t.createElement(l.ButtonToolbar,null,t.createElement(N,{onSuccess:this.loadData}),t.createElement(g,{id:"",name:"",pattern:"",patterns:s,create:!0,testPattern:L,reload:this.loadData,savePattern:this.savePattern,validPatternName:this.validPatternName})))},t.createElement("span",null,"This is a list of grok patterns you can use in your Graylog grok extractors. You can add your own manually or import a whole list of patterns from a so called pattern file.")),t.createElement(l.Row,{className:"content"},t.createElement(l.Col,{md:12},t.createElement(P.AE,{permissions:"inputs:read"},t.createElement(l.Row,{className:"row-sm"},t.createElement(l.Col,{md:8},t.createElement(P.UI,{onSearch:this._onSearch,onReset:this._onReset,queryHelpComponent:u,useLoadingState:!0}))),t.createElement(l.Row,null,t.createElement(l.Col,{md:12},t.createElement(P.l9,{onChange:this._onPageChange,totalItems:e.total},t.createElement(J,{id:"grok-pattern-list",className:"table-striped table-hover",headers:a,headerCellFormatter:Z,sortByKey:"name",rows:s,noDataText:"No grok patterns have been found.",dataRowFormatter:this._patternFormatter}))))))))}}M(U,"propTypes",{paginationQueryParameter:n().object.isRequired,sendTelemetry:n().func}),U.defaultProps={sendTelemetry:()=>{}};const T=(0,_.Z)((0,$.Z)(U)),i=()=>t.createElement(P.$4,{title:"Grok patterns"},t.createElement(T,null))},ZYJ7aiK3:(x,B,r)=>{r.d(B,{o:()=>k});var t=r("JnTtTRmZ"),I=r.n(t),n=r("eFxcQyPT"),y=r("gyRmhZSW"),P=r("U1Iufsob"),l=r("MdYBRjRJ"),_=r("jAGDuYSC"),R=r("IA3Ku5lS");const k=(0,R.dS)("core.GrokPatterns",()=>I().createStore({URL:(0,l.DC)("/system/grok"),loadPatterns(c){const A=m=>{_.Z.error(`Loading Grok patterns failed with status: ${m.message}`,"Could not load Grok patterns")};return(0,n.ZP)("GET",this.URL).then(m=>{const{patterns:E}=m;return E.sort((g,h)=>g.name.toLowerCase().localeCompare(h.name.toLowerCase())),c(E),m},A)},searchPaginated(c,A,m){const E=(0,y.Z)(P.Z.GrokPatternsController.paginated().url,c,A,m);return(0,n.ZP)("GET",(0,l.DC)(E)).then(g=>{const h={count:g.count,total:g.total,page:g.page,perPage:g.per_page,query:m};return{patterns:g.patterns,pagination:h}}).catch(g=>{_.Z.error(`Loading patterns failed with status: ${g}`,"Could not load streams")})},testPattern(c,A,m){const E=h=>{let v=h.message;const f=h.additional.body;f&&f.message&&(v=h.additional.body.message),m(v)},g={grok_pattern:{name:c.name,pattern:c.pattern},sampleData:c.sampleData};(0,n.ZP)("POST",(0,l.DC)(P.Z.GrokPatternsController.test().url),g).then(h=>(A(h),h),E)},savePattern(c,A){const m=v=>{let f=v.message;const D=v.additional.body;D&&D.message&&(f=v.additional.body.message),_.Z.error(`Testing Grok pattern "${c.name}" failed with status: ${f}`,"Could not test Grok pattern")},E={id:c.id,pattern:c.pattern,name:c.name,content_pack:c.content_pack};let g=this.URL,h;c.id===""?h="POST":(g+=`/${c.id}`,h="PUT"),(0,n.ZP)(h,g,E).then(v=>{A();const f=c.id===""?"created":"updated",D=`Grok pattern "${c.name}" successfully ${f}`;return _.Z.success(D),v},m)},deletePattern(c,A){const m=E=>{_.Z.error(`Deleting Grok pattern "${c.name}" failed with status: ${E.message}`,"Could not delete Grok pattern")};(0,n.ZP)("DELETE",`${this.URL}/${c.id}`).then(E=>(A(),_.Z.success(`Grok pattern "${c.name}" successfully deleted`),E),m)},bulkImport(c,A){const m=g=>{let h=g.message;const v=g.additional.body;if(v&&v.validation_errors&&v.validation_errors._){h="";const f=v.validation_errors._;for(let D=0,G=f.length;D




© 2015 - 2024 Weber Informatics LLC | Privacy Policy