1 line
9.6 KiB
JavaScript
1 line
9.6 KiB
JavaScript
!function t(i,e,n){function s(o,u){if(!e[o]){if(!i[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(r)return r(o,!0);var h=new Error("Cannot find module '"+o+"'");throw h.code="MODULE_NOT_FOUND",h}var p=e[o]={exports:{}};i[o][0].call(p.exports,function(t){var e=i[o][1][t];return s(e?e:t)},p,p.exports,t,i,e,n)}return e[o].exports}for(var r="function"==typeof require&&require,o=0;o<n.length;o++)s(n[o]);return s}({1:[function(t,i){(function(e){var n=e.React||t("react"),s={},r=t("./validationRules.js"),o=t("./utils.js"),u=t("./Mixin.js"),a={};s.Mixin=u,s.defaults=function(t){a=t},s.addValidationRule=function(t,i){r[t]=i},s.Form=n.createClass({displayName:"Form",getInitialState:function(){return{isValid:!0,isSubmitting:!1,canChange:!1}},getDefaultProps:function(){return{headers:{},onSuccess:function(){},onError:function(){},onSubmit:function(){},onSubmitted:function(){},onValid:function(){},onInvalid:function(){},onChange:function(){}}},componentWillMount:function(){this.inputs={},this.model={},this.registerInputs(this.props.children)},componentDidMount:function(){this.validateForm()},componentWillUpdate:function(){var t=Object.keys(this.inputs);setTimeout(function(){if(this.isMounted()){this.registerInputs(this.props.children);var i=Object.keys(this.inputs);o.arraysDiffer(t,i)&&this.validateForm()}}.bind(this),0)},submit:function(t){if(t.preventDefault(),this.setFormPristine(!1),!this.props.url)return this.updateModel(),this.props.onSubmit(this.mapModel(),this.resetModel,this.updateInputsWithError),void 0;this.updateModel(),this.setState({isSubmitting:!0}),this.props.onSubmit(this.mapModel(),this.resetModel,this.updateInputsWithError);var i=Object.keys(this.props.headers).length&&this.props.headers||a.headers||{},e=this.props.method&&o.ajax[this.props.method.toLowerCase()]?this.props.method.toLowerCase():"post";o.ajax[e](this.props.url,this.mapModel(),this.props.contentType||a.contentType||"json",i).then(function(t){this.props.onSuccess(t),this.props.onSubmitted()}.bind(this)).catch(this.failSubmit)},mapModel:function(){return this.props.mapping?this.props.mapping(this.model):this.model},updateModel:function(){Object.keys(this.inputs).forEach(function(t){var i=this.inputs[t];this.model[t]=i.state._value}.bind(this))},resetModel:function(){Object.keys(this.inputs).forEach(function(t){this.inputs[t].resetValue()}.bind(this)),this.validateForm()},updateInputsWithError:function(t){Object.keys(t).forEach(function(i){var e=this.inputs[i];if(!e)throw new Error("You are trying to update an input that does not exists. Verify errors object with input names. "+JSON.stringify(t));var n=[{_isValid:!1,_serverError:t[i]}];e.setState.apply(e,n)}.bind(this))},failSubmit:function(t){this.updateInputsWithError(t),this.setState({isSubmitting:!1}),this.props.onError(t),this.props.onSubmitted()},registerInputs:function(t){n.Children.forEach(t,function(t){t&&t.props&&t.props.name&&(t.props._attachToForm=this.attachToForm,t.props._detachFromForm=this.detachFromForm,t.props._validate=this.validate,t.props._isFormDisabled=this.isFormDisabled),t&&t.props&&t.props.children&&this.registerInputs(t.props.children)}.bind(this))},isFormDisabled:function(){return this.props.disabled},getCurrentValues:function(){return Object.keys(this.inputs).reduce(function(t,i){var e=this.inputs[i];return t[i]=e.state._value,t}.bind(this),{})},setFormPristine:function(t){var i=this.inputs,e=Object.keys(i);e.forEach(function(e){var n=i[e];n.setState({_isPristine:t})}.bind(this))},validate:function(t){if(this.state.canChange&&this.props.onChange(this.getCurrentValues()),t.props.required||t._validations){var i=this.runValidation(t);t.setState({_isValid:i,_serverError:null},this.validateForm)}},runValidation:function(t){var i=!0;return t._validations.length&&(t.props.required||""!==t.state._value)&&t._validations.split(",").forEach(function(e){var n=e.split(":"),s=n.shift();if(n=n.map(function(t){try{return JSON.parse(t)}catch(i){return t}}),n=[t.state._value].concat(n),!r[s])throw new Error("Formsy does not have the validation rule: "+s);r[s].apply(this.getCurrentValues(),n)||(i=!1)}.bind(this)),i},validateForm:function(){var t=!0,i=this.inputs,e=Object.keys(i),n=function(){e.forEach(function(e){i[e].state._isValid||(t=!1)}.bind(this)),this.setState({isValid:t}),t?this.props.onValid():this.props.onInvalid(),this.setState({canChange:!0})}.bind(this);e.forEach(function(t,s){var r=i[t],o=this.runValidation(r);r.setState({_isValid:o,_serverError:null},s===e.length-1?n:null)}.bind(this)),!e.length&&this.isMounted()&&this.setState({canChange:!0})},attachToForm:function(t){this.inputs[t.props.name]=t,this.model[t.props.name]=t.state._value,this.validate(t)},detachFromForm:function(t){delete this.inputs[t.props.name],delete this.model[t.props.name]},render:function(){return n.DOM.form({onSubmit:this.submit,className:this.props.className},this.props.children)}}),e.exports||e.module||e.define&&e.define.amd||(e.Formsy=s),i.exports=s}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./Mixin.js":2,"./utils.js":3,"./validationRules.js":4,react:"react"}],2:[function(t,i){i.exports={getInitialState:function(){return{_value:this.props.value?this.props.value:"",_isValid:!0,_isPristine:!0}},componentWillMount:function(){var t=function(){this.setValidations(this.props.validations,this.props.required),this.props._attachToForm(this)}.bind(this);if(!this.props.name)throw new Error("Form Input requires a name property when used");return this.props._attachToForm?(t(),void 0):setTimeout(function(){if(this.isMounted()){if(!this.props._attachToForm)throw new Error("Form Mixin requires component to be nested in a Form");t()}}.bind(this),0)},componentWillReceiveProps:function(t){t._attachToForm=this.props._attachToForm,t._detachFromForm=this.props._detachFromForm,t._validate=this.props._validate,this.setValidations(t.validations,t.required)},componentDidUpdate:function(t){var i=function(){return this.props.value!==t.value&&(this.state._value===t.value||""===this.state._value&&void 0===t.value)}.bind(this);(t.validations!==this.props.validations||i())&&this.setValue(this.props.value||"")},componentWillUnmount:function(){this.props._detachFromForm(this)},setValidations:function(t,i){this._validations=t||"",i&&(this._validations=t?t+",":"",this._validations+="isValue")},setValue:function(t){this.setState({_value:t,_isPristine:!1},function(){this.props._validate(this)}.bind(this))},resetValue:function(){this.setState({_value:"",_isPristine:!0},function(){this.props._validate(this)})},getValue:function(){return this.state._value},hasValue:function(){return""!==this.state._value},getErrorMessage:function(){return this.isValid()||this.showRequired()?null:this.state._serverError||this.props.validationError},isFormDisabled:function(){return this.props._isFormDisabled()},isValid:function(){return this.state._isValid},isPristine:function(){return this.state._isPristine},isRequired:function(){return!!this.props.required},showRequired:function(){return this.isRequired()&&""===this.state._value},showError:function(){return!this.showRequired()&&!this.state._isValid}}},{}],3:[function(t,i){var e=document.querySelector('meta[name="csrf-token"]'),n=function(t,i,e){var e=e||[];if("object"==typeof t)for(var s in t)n(t[s],i?i+"["+s+"]":s,e);else e.push(i+"="+encodeURIComponent(t));return e.join("&")},s=function(t,i,s,r,o){var r="urlencoded"===r?"application/"+r.replace("urlencoded","x-www-form-urlencoded"):"application/json";return s="application/json"===r?JSON.stringify(s):n(s),new Promise(function(n,u){try{var a=new XMLHttpRequest;a.open(t,i,!0),a.setRequestHeader("Accept","application/json"),a.setRequestHeader("Content-Type",r),e&&e.content&&a.setRequestHeader("X-CSRF-Token",e.content),Object.keys(o).forEach(function(t){a.setRequestHeader(t,o[t])}),a.onreadystatechange=function(){if(4===a.readyState)try{var t=a.responseText?JSON.parse(a.responseText):null;a.status>=200&&a.status<300?n(t):u(t)}catch(i){u(i)}},a.send(s)}catch(h){u(h)}})};i.exports={arraysDiffer:function(t,i){var e=!1;return t.length!==i.length?e=!0:t.forEach(function(t,n){t!==i[n]&&(e=!0)}),e},ajax:{post:s.bind(null,"POST"),put:s.bind(null,"PUT")}}},{}],4:[function(t,i){i.exports={isValue:function(t){return""!==t},isEmail:function(t){return t.match(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i)},isTrue:function(t){return t===!0},isNumeric:function(t){return"number"==typeof t?!0:(matchResults=t.match(/[-+]?(\d*[.])?\d+/),matchResults?matchResults[0]==t:!1)},isAlpha:function(t){return t.match(/^[a-zA-Z]+$/)},isWords:function(t){return t.match(/^[a-zA-Z\s]+$/)},isSpecialWords:function(t){return t.match(/^[a-zA-Z\s\u00C0-\u017F]+$/)},isLength:function(t,i,e){return void 0!==e?t.length>=i&&t.length<=e:t.length>=i},equals:function(t,i){return t==i},equalsField:function(t,i){return t===this[i]}}},{}]},{},[1]); |