1 line
10 KiB
JavaScript
1 line
10 KiB
JavaScript
!function t(i,e,n){function s(o,a){if(!e[o]){if(!i[o]){var u="function"==typeof require&&require;if(!a&&u)return u(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"),a=t("./Mixin.js"),u={};s.Mixin=a,s.defaults=function(t){u=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(){},onValidSubmit:function(){},onInvalidSubmit: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),this.props.validationErrors&&this.setInputValidationErrors(this.props.validationErrors);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){this.updateModel();var i=this.mapModel();return this.props.onSubmit(i,this.resetModel,this.updateInputsWithError),this.state.isValid?this.props.onValidSubmit(i,this.resetModel):this.props.onInvalidSubmit(i,this.resetModel),void 0}this.updateModel(),this.setState({isSubmitting:!0}),this.props.onSubmit(this.mapModel(),this.resetModel,this.updateInputsWithError);var e=Object.keys(this.props.headers).length&&this.props.headers||u.headers||{},n=this.props.method&&o.ajax[this.props.method.toLowerCase()]?this.props.method.toLowerCase():"post";o.ajax[n](this.props.url,this.mapModel(),this.props.contentType||u.contentType||"json",e).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()},setInputValidationErrors:function(t){Object.keys(this.inputs).forEach(function(i){var e=this.inputs[i],n=[{_isValid:!(i in t),_serverError:t[i]}];e.setState.apply(e,n)}.bind(this))},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.props._isValidValue=this.runValidation),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){this.state.canChange&&this.props.onChange(this.getCurrentValues());var i=!0;t.validate&&"function"==typeof t.validate?i=t.validate():(t.props.required||t._validations)&&(i=this.runValidation(t)),t.setState({_isValid:i,_serverError:null},this.validateForm)},runValidation:function(t,i){var e=!0;return i=2===arguments.length?i:t.state._value,t._validations.length&&t._validations.split(/\,(?![^{\[]*[}\]])/g).forEach(function(t){var n=t.split(":"),s=n.shift();if(n=n.map(function(t){try{return JSON.parse(t)}catch(i){return t}}),n=[i].concat(n),!r[s])throw new Error("Formsy does not have the validation rule: "+s);r[s].apply(this.getCurrentValues(),n)||(e=!1)}.bind(this)),"function"==typeof t.validate&&(e=t.validate()),e},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(){var t="value"in this.props?this.props.value:"";return{_value:t,_isValid:!0,_isPristine:!0,_pristineValue:t}},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,t._isValidValue=this.props._isValidValue,t._isFormDisabled=this.props._isFormDisabled,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);if(t.validations!==this.props.validations||i()){var e="value"in this.props?this.props.value:"";this.setValue(e)}},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:this.state._pristineValue,_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},isValidValue:function(t){return this.props._isValidValue.call(null,this,t)}}},{}],3:[function(t,i){var e="undefined"!=typeof document?document.querySelector('meta[name="csrf-token"]'):null,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,a){try{var u=new XMLHttpRequest;u.open(t,i,!0),u.setRequestHeader("Accept","application/json"),u.setRequestHeader("Content-Type",r),e&&e.content&&u.setRequestHeader("X-CSRF-Token",e.content),Object.keys(o).forEach(function(t){u.setRequestHeader(t,o[t])}),u.onreadystatechange=function(){if(4===u.readyState)try{var t=u.responseText?JSON.parse(u.responseText):null;u.status>=200&&u.status<300?n(t):a(t)}catch(i){a(i)}},u.send(s)}catch(h){a(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){if("number"==typeof t)return!0;var i=t.match(/[-+]?(\d*[.])?\d+/);return i?i[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]); |