meraproject/lib/js/bws/form.min.js
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

1 line
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var Form,Input,InputError,FormRuleAction,FormRuleCommand,FormRuleOperator;!function(t){var i;t.fn.FORM=function(e){var n;return i[e]?i[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?(void 0===(n=t(this).data("form"))&&(n=new Form(this)),void 0!==n[e]?n[e].apply(n,Array.prototype.slice.call(arguments,1)):t.error("Метод с именем "+e+" не существует для jQuery.FORM")):i.init.apply(this,arguments)},i={init:function(i={}){var e;return 1===t(this).length?new Form(this,i):(e=[],t(this).each(function(){return e.push(new Form(this,i))}),e)},setPrepareValidate:function(t){return Form.globalPrepareValidate=t},setGlobalGood:function(t){return Form.globalGood=t},setGlobalBad:function(t){return Form.globalBad=t},setGlobalJSON:function(t){return Form.globalJSON=t},setGlobalOptions:function(t){return Form.globalOptions=t}}}(jQuery),Form=function(){class Form{constructor(t,i){this.container=t,this.init_data=i,this.container=$(this.container),this.isInited()||(this.container.on("destroyed",this.destroy.bind(this)),this.init(this.init_data))}init(t={}){var i,e;return this.container.data("form_inited",!0),this.container.data("form",this),null==this.inputActionWithParent&&(this.inputActionWithParent=null!=(i=t.inputActionWithParent)?i:null!=(e=Form.globalOptions.inputActionWithParent)&&e),this.initInputs(null!=t?t.inputs:void 0),this.checkRules(),this.initActions()}isInited(){return!0===this.container.data("form_inited")}destroy(){var t,i,e,n,r;for(r=[],i=0,e=(n=this.getInputs()).length;i<e;i++)t=n[i],r.push(t.form=null);return r}initActions(){var t,i,e,n,r,s;for(s=[],n=0,r=(i=this.getInputs()).length;n<r;n++)null!==(t=i[n]).rules&&s.push(function(){var i,n,r,s;for(s=[],i=0,n=(r=t.rules).length;i<n;i++)switch((e=r[i])[1]){case FormRuleCommand.ON:switch(e[2]){case FormRuleOperator.CHANGE:switch(e[3]){case FormRuleAction.FUNCTION:s.push(this.initActionOnChange(t,e));break;default:s.push(void 0)}break;default:s.push(void 0)}break;default:s.push(void 0)}return s}.call(this));return s}initActionOnChange($i,i){var n,name;return n=this.getInputByName(i[0]),name="function"+(new Date).getTime(),eval("Form['"+name+"']="+i[4]),console.log("$I",$i),n.$wrap.on("input:change",function(){return Form[name]($i,n.value())}),n.$wrap.on("destroyed",function(){if(null!=Form[name])return delete Form[name]})}validate(t={}){var i,e,n,r,s,a,u;for(u={bad:{},good:{},success:!0},e=0,n=(a=this.getInputs()).length;e<n;e++)s=(i=a[e]).validate(),r={input:i,result:s},void 0!==t.prepare?"function"==typeof t.prepare&&t.prepare(i,s):Form.globalPrepareValidate(i,s),s.errors.length>0?(u.bad[i.getName()]=r,u.success=!1,void 0!==t.bad?"function"==typeof t.bad&&t.bad(i,s):Form.globalBad(i,s)):(u.good[i.getName()]=r,void 0!==t.good?"function"==typeof t.good&&t.good(i,s):Form.globalGood(i,s));return u.success?"function"==typeof t.success&&t.success(u):"function"==typeof t.fail&&t.fail(u),u}getInputs(t={}){var i;return i=[],$("[data-input]",this.container).each(function(){var e;return e=Input.init($(this)),null!=(null!=t?t[e.getName()]:void 0)&&e.initData(t[e.getName()]),i.push(e)}),i}json(){var t,i,e,n,r,s;if(null!=Form.globalJSON)s=Form.globalJSON(this.container);else for(s={},i=0,e=(r=this.getInputs()).length;i<e;i++)n=(t=r[i]).getName(),t.isCheckbox?void 0===s[n]?s[n]=t.value():Array.isArray(s[n])?s[n].push(t.value()):s[n]=[s[n],t.value()]:t.isRadio?t.checked()&&(s[n]=t.value()):s[n]=t.value();return s}initInputs(t={}){var i,e,n,r,s;for(s=[],e=0,n=(r=this.getInputs(t)).length;e<n;e++)(i=r[e]).$wrap.on("input:change",this.checkRules.bind(this)),i.$wrap.on("input:show",this.recheckRules.bind(this)),i.$wrap.on("input:hide",this.recheckRules.bind(this)),s.push(i.form=this);return s}getInputByName(t){var i,e,n,r;for(e=0,n=(r=this.getInputs()).length;e<n;e++)if((i=r[e]).getName()===t)return i;return null}checkRules(){var t,i,e,n;for(t=this.json(),this.needRecheckRules=!1,i=0,e=(n=this.getInputs()).length;i<e;i++)n[i].checkRules(t);if(this.needRecheckRules)return this.checkRules()}recheckRules(){return this.needRecheckRules=!0}static globalBad(t,i){}static globalGood(t,i){}}return Form.globalOptions={},Form.globalJSON=null,Form}.call(this),Input=function(){class t{static init(i,e=null){var n,r,s;if(void 0!==(i=$(i)).data(t._data_input))return null===e?i.data(t._data_input):((r=i.data(t._data_input)).initData(e),r);if(null===e)try{e=JSON.parse(i.attr("data-init"))}catch(t){t,e={}}return void 0!==(s=i.attr("data-input"))?(s=(s=s.toLowerCase()).substr(0,1).toUpperCase()+s.substr(1),n=void 0!==t[s]?new t[s](i,e):new t(i,e)):n=new t(i,e),n}constructor(i=null,e={}){this.$wrap=i,this.init_data=e,null!==this.$wrap&&void 0!==this.$wrap.data(t._data_input)||this.initData(this.init_data)}initData(i={}){var e,n,r;return void 0!==(r=i.validation)&&(this.isErrorWhenEmpty=null!=(e=r.notEmpty)&&e,this.required=null!=(n=r.required)&&n),null!=i.rules&&(this.rules=i.rules),null===this.$wrap&&(this.$wrap=this.render()),this.initInput(),this.$wrap.data(t._data_input,this)}initInput(){return"INPUT"===this.$wrap[0].tagName?this.$input=this.$wrap:this.$input=$("input:eq(0)",this.$wrap),this.$input.on("change",this.triggerChange.bind(this))}triggerChange(){return this.format(),this.$wrap.trigger("input:change")}format(){}value(t){return void 0!==t?this.$input.val(t):this.$input.val()}getName(){return this.$wrap.attr("data-name")}testRule(t,i){var e,n,r,s,a,u;if(void 0===i[e=t[0]])return!0;switch(u=i[t[0]].toString(),n=t[2].toString(),t[1]){case"=":return u===n;case"is":case"not":switch(n){case"visible":a=null!=(r=this.form)?r.getInputByName(e).isVisible():void 0;break;case"checked":a=null!=(s=this.form)?s.getInputByName(e).checked():void 0}return"is"===t[1]?a:!a;default:return!1}}checkRule(t,i){var e,n,r,s,a,u,o,h,l;if(e=null,void 0!==t[FormRuleCommand.OR]){for(l=!1,r=0,a=(o=t[FormRuleCommand.OR]).length;r<a;r++)n=o[r],l=l||this.testRule(n,i);e=t.action}else if(void 0!==t[FormRuleCommand.AND]){for(l=!0,s=0,u=(h=t[FormRuleCommand.AND]).length;s<u;s++)n=h[s],l=l&&this.testRule(n,i);e=t.action}else l=this.testRule(t,i),e=t[3];if(null!==e)switch(e){case FormRuleAction.HIDE:return l?this.hide():this.show();case FormRuleAction.SHOW:return l?this.show():this.hide()}}checkRules(t){var i,e,n,r,s;if(null!==this.rules){for(s=[],e=0,n=(r=this.rules).length;e<n;e++)i=r[e],s.push(this.checkRule(i,t));return s}}isInputActionWithParent(){return this.form.inputActionWithParent}hide(){if(this.isVisible())return this.isInputActionWithParent()?this.$wrap.parent().hide():this.$wrap.hide(),this.$wrap.trigger("input:hide")}show(){if(!this.isVisible())return this.isInputActionWithParent()?this.$wrap.parent().show():this.$wrap.show(),this.$wrap.trigger("input:show")}attributesToString(){var t,i;for(i in t=[],this.attributes)t.push(i+'="'+this.attributes[i]+'"');return t.join(" ")}toString(){return'<input data-input="text" '+this.attributesToString()+"/>"}render(){return this.$input=$(this.toString())}isVisible(){return this.$wrap.is(":visible")}checkErrors(t){return t}validate(){var t;return t={errors:[]},this.isEmpty()?(t.isEmpty=!0,(this.isErrorWhenEmpty||this.required)&&(t.errorEmptyText=InputError.errorEmptyText,t.errors.push(InputError.errorEmptyText))):t=this.checkErrors(t),t}isEmpty(){return!1}}return t.prototype.errorEmptyText="Не должно быть пустым",t.prototype.name="",t.prototype.isErrorWhenEmpty=!1,t.prototype.rules=null,t.prototype.required=!1,t.prototype.isRadio=!1,t.prototype.isCheckbox=!1,t._data_input="_data_input",t}.call(this),InputError=function(){class t{}return t.errorEmptyText="Не должно быть пустым",t.errorEmailInvalid="Некорректный email",t}.call(this),FormRuleCommand=function(){class t{}return t.OR="or",t.AND="and",t.IN="in",t.IS="is",t.ON="on",t}.call(this),FormRuleOperator=function(){class t{}return t.EQUAL="=",t}.call(this),FormRuleAction=function(){class t{}return t.HIDE="hide",t.SHOW="show",t.FUNCTION="function",t}.call(this),FormRuleOperator=function(){class t{}return t.CHANGE="change",t}.call(this),Input.Text=class extends Input{constructor(t=null,i={}){super(t,i)}isEmpty(){return 0===$.trim(this.value()).length}},Input.Email=function(){class t extends Input.Text{testMail(t){return this.mail.test(t)}checkErrors(t){var i;return i=(i=this.value()).replace(/ /g,""),this.testMail(i)||(t.isEmailInvalid=!0,t.errorEmailInvalid=InputError.errorEmailInvalid,t.errors.push(InputError.errorEmailInvalid)),t}}return t.prototype.mail=/^([A-Za-z0-9_-]+\.)*[A-Za-z0-9_-]+@[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*\.[A-Za-z]{2,6}$/,t}.call(this),Input.Int=class extends Input.Text{format(){var t;return t=this.value(),t=parseInt(t),isNaN(t)&&(t=0),this.$input.val(t)}},Input.Hidden=class extends Input{},Input.Select=class extends Input{initInput(){return"SELECT"===this.$wrap[0].tagName?this.$input=this.$wrap:this.$input=$("select:eq(0)",this.$wrap),this.$input.on("change",this.triggerChange.bind(this))}isEmpty(){return""===this.value()}},Input.Select_ajax=class extends Input.Select{isEmpty(){return null===this.value()||void 0===this.value}},Input.Checkbox=function(){class t extends Input{initInput(){return"INPUT"===this.$wrap[0].tagName?this.$input=this.$wrap:this.$input=$("input[type=checkbox]:eq(0)",this.$wrap),this.$input.on("change",this.triggerChange.bind(this))}value(t){return null!=t&&this.$input.val(t),this.checked()?this.$input.val():0}checked(){return this.$input.is(":checked")}isEmpty(){return null===this.value()}}return t.prototype.isCheckbox=!0,t}.call(this),Input.Textarea=class extends Input{initInput(){return"TEXTAREA"===this.$wrap[0].tagName?this.$input=this.$wrap:this.$input=$("textarea:eq(0)",this.$wrap),this.$input.on("change",this.triggerChange.bind(this))}isEmpty(){return""===this.value()}},Input.Image=class extends Input{initInput(){return this.$input=$("input[type=hidden]:eq(0)",this.$wrap),this.$input.on("change",this.triggerChange.bind(this))}static value(t){return void 0!==t?this.$input.val(t):this.$input.val()}isEmpty(){return""===this.value()}},Input.Radio=function(){class t extends Input{initInput(){return"INPUT"===this.$wrap[0].tagName?this.$input=this.$wrap:this.$input=$("input[type=radio]:eq(0)",this.$wrap),this.$input.on("change",this.triggerChange.bind(this))}value(t){return null!=t&&this.$input.val(t),this.checked()?this.$input.val():null}checked(){return this.$input.is(":checked")}isEmpty(){return null===this.value()}}return t.prototype.isRadio=!0,t}.call(this),Input.Date=class extends Input.Text{},Input.Video=class extends Input{initInput(){return this.$input=$("input[type=hidden]:eq(0)",this.$wrap),this.$input.on("change",this.triggerChange.bind(this))}static value(t){return void 0!==t?this.$input.val(t):this.$input.val()}isEmpty(){return""===this.value()}},Input.Datetime=class extends Input.Text{value(t){var i;return void 0!==t?this.$input.val(t):(i=Date.parse(this.$input.val())/1e3,isNaN(i)&&(i=0),i)}},Input.Float=class extends Input.Text{format(){var t;return t=this.value(),t=parseFloat(t),isNaN(t)&&(t=0),this.$input.val(t)}value(t){var i;return i=void 0!==t?t:this.$input.val(),i=parseFloat(i),isNaN(i)&&(i=0),this.$input.val(i),i}},Input.Tinymce=class extends Input{getNodeId(){return this.$wrap.attr("data-input-tinymce")}value(t){return void 0!==t?tinymce.get(this.getNodeId()).setContent(t):tinymce.get(this.getNodeId()).getContent()}};