-
Notifications
You must be signed in to change notification settings - Fork 649
/
Copy pathschema-form.min.js
1 lines (1 loc) · 7.25 KB
/
schema-form.min.js
1
angular.module("schemaForm",[]),angular.module("schemaForm").provider("schemaFormDecorators",["$compileProvider",function(e){var r="",t={},n=function(e,n){"sfDecorator"===e&&(e=r);for(var a=t[e],i=a.rules,o=0;o<i.length;o++){var u=i[o](n);if(u)return u}return a.mappings[n.type]?a.mappings[n.type]:a.mappings["default"]},a=function(r){e.directive(r,["$parse","$compile","$http","$templateCache",function(e,t,a,i){return{restrict:"AE",replace:!0,transclude:!1,scope:!0,require:"?^sfSchema",link:function(e,o,u,c){var l=e.$watch(u.form,function(u){if(u){e.form=u;var c=n(r,u);a.get(c,{cache:i}).then(function(r){var n=r.data.replace(/\$\$value\$\$/g,"model."+(u.key||""));t(n)(e,function(e){o.replaceWith(e)})}),l()}});e.showTitle=function(){return e.form&&e.form.notitle!==!0&&e.form.title},e.checkboxValuesToList=function(e){var r=[];return angular.forEach(e,function(e,t){e&&r.push(t)}),r},e.buttonClick=function(r,t){angular.isFunction(t.onClick)?t.onClick(r,t):angular.isString(t.onClick)&&(c?c.evalInParentScope(t.onClick,{$event:r,form:t}):e.$eval(t.onClick,{$event:r,form:t}))},e.evalExpr=function(r,t){return c?c.evalInParentScope(r,t):e.$eval(r,t)},e.errorMessage=function(r){return e.form.validationMessage?r?angular.isString(e.form.validationMessage)?e.form.validationMessage:e.form.validationMessage[r.code]||e.form.validationMessage["default"]:e.form.validationMessage.required||e.form.validationMessage["default"]||e.form.validationMessage:r?r.message:"Required"}}}}])},i=function(r,t,n){n=angular.isDefined(n)?n:!1,e.directive("sf"+angular.uppercase(r[0])+r.substr(1),function(){return{restrict:"EAC",scope:!0,replace:!0,transclude:n,template:'<sf-decorator form="form"></sf-decorator>',link:function(e,t,n){var a={items:"c",titleMap:"c",schema:"c"},i={type:r},o=!0;angular.forEach(n,function(r,t){if("$"!==t[0]&&0!==t.indexOf("ng")&&"sfField"!==t){var u=function(r){angular.isDefined(r)&&r!==i[t]&&(i[t]=r,o&&i.type&&(i.key||angular.isUndefined(n.key))&&(e.form=i,o=!1))};"model"===t?e.$watch(r,function(r){r&&e.model!==r&&(e.model=r)}):"c"===a[t]?e.$watchCollection(r,u):n.$observe(t,u)}})}}})};this.createDecorator=function(e,n,i){t[e]={mappings:n||{},rules:i||[]},t[r]||(r=e),a(e)},this.createDirective=i,this.createDirectives=function(e){angular.forEach(e,function(e,r){i(r,e)})},this.directive=function(e){return e=e||r,t[e]},this.$get=function(){return{directive:function(e){return t[e]},defaultDecorator:r}},a("sfDecorator")}]),angular.module("schemaForm").provider("schemaForm",[function(){var e=function(e,r,t){var n=l[r.type];if(n)for(var a,i=0;i<n.length;i++)if(a=n[i](e,r,t))return a},r=function(e,r){var t={};return e.title&&(t.title=e.title),e.description&&(t.description=e.description),(r.required===!0||e.required===!0)&&(t.required=!0),e.default&&(t.default=e.default),e.maxLength&&(t.maxlength=e.maxLength),e.minLength&&(t.minlength=e.maxLength),(e.readOnly||e.readonly)&&(t.readonly=e.readOnly||e.readonly),e.minimum&&(t.minimum=e.minimum+(e.exclusiveMinimum?1:0)),e.maximum&&(t.maximum=e.maximum-(e.exclusiveMaximum?1:0)),e.validationMessage&&(t.validationMessage=e.validationMessage),e.enumNames&&(t.titleMap=e.enumNames),t.schema=e,t},t=function(e,t,n){if("string"===t.type&&!t.enum){var a=r(t,n);return a.key=n.path,a.type="text",n.lookup[n.path]=a,a}},n=function(e,t,n){if("number"===t.type){var a=r(t,n);return a.key=n.path,a.type="number",n.lookup[n.path]=a,a}},a=function(e,t,n){if("integer"===t.type){var a=r(t,n);return a.key=n.path,a.type="number",n.lookup[n.path]=a,a}},i=function(e,t,n){if("boolean"===t.type){var a=r(t,n);return a.key=n.path,a.type="checkbox",n.lookup[n.path]=a,a}},o=function(e,t,n){if("string"===t.type&&t.enum){var a=r(t,n);return a.key=n.path,a.type="select",a.titleMap||(a.titleMap={},t.enum.forEach(function(e){a.titleMap[e]=e})),n.lookup[n.path]=a,a}},u=function(e,t,n){if("array"===t.type&&t.items&&t.items.enum){var a=r(t,n);return a.key=n.path,a.type="checkboxes",a.titleMap||(a.titleMap={},t.items.enum.forEach(function(e){a.titleMap[e]=e})),n.lookup[n.path]=a,a}},c=function(t,n,a){if("object"===n.type){var i=r(n,a);return i.type="fieldset",i.items=[],a.lookup[a.path]=i,angular.forEach(n.properties,function(r,t){var o=a.path+"."+t;if(a.ignore[o]!==!0){var u=n.required&&-1!==n.required.indexOf(t),c=e(t,r,{path:o,required:u||!1,lookup:a.lookup,ignore:a.ignore});c&&i.items.push(c)}}),i}},l={string:[o,t],object:[c],number:[n],integer:[a],"boolean":[i],array:[u]};this.defaults=l,this.appendRule=function(e,r){l[e]||(l[e]=[]),l[e].push(r)},this.prependRule=function(e,r){l[e]||(l[e]=[]),l[e].unshift(r)},this.createStandardForm=r,this.$get=function(){var r={};return r.merge=function(e,t,n){t=t||["*"];var a=r.defaults(e,n),i=t.indexOf("*");if(-1!==i)return t=t.slice(0,i).concat(a.form).concat(t.slice(i+1));var o=a.lookup;return t.map(function(t){return"string"==typeof t&&(t={key:t}),t.items&&(t.items=r.merge(e,t.items,n)),t.key&&o[t.key]?angular.extend(o[t.key],t):t})},r.defaults=function(r,t){var n=[],a={};if(t=t||{},"object"!==r.type)throw new Error('Not implemented. Only type "object" allowed at root level of schema.');return angular.forEach(r.properties,function(i,o){if(t[o]!==!0){var u=r.required&&-1!==r.required.indexOf(o),c=e(o,i,{path:o,lookup:a,ignore:t,required:u});c&&n.push(c)}}),{form:n,lookup:a}},r}}]),angular.module("schemaForm").directive("sfSchema",["$compile","schemaForm","schemaFormDecorators",function(e,r,t){function n(e,r){return r=r||"_",e.replace(i,function(e,t){return(t?r:"")+e.toLowerCase()})}var a=function(e,r,t){t=t||"",r(e,t),angular.forEach(e.properties,function(e,n){a(e,r,""===t?n:t+"."+n)})},i=/[A-Z]/g;return{scope:{schema:"=sfSchema",initialForm:"=sfForm",model:"=sfModel"},controller:["$scope",function(e){this.evalInParentScope=function(r,t){return e.$parent.$eval(r,t)}}],replace:!1,restrict:"A",transclude:!0,require:"?form",link:function(i,o,u,c,l){i.formCtrl=c;var f={};l(i,function(e){e.addClass("schema-form-ignore"),o.prepend(e),angular.forEach(o.find("[ng-model]"),function(e){var r=angular.element(e).attr("ng-model");f[r.substring(r.indexOf(".")+1)]=!0})});var s={};i.$watch(function(){var c=i.schema,l=i.initialForm||["*"];if(l&&c&&c.type&&(s.form!==l||s.schema!==c)){s.schema=c,s.form=l;var m=r.merge(c,l,f),p=document.createDocumentFragment();i.schemaForm={form:m,schema:c},angular.forEach(m,function(e,r){var a=document.createElement(u.sfDecorator||n(t.defaultDecorator,"-"));a.setAttribute("form","schemaForm.form["+r+"]"),p.appendChild(a)}),o.children(":not(.schema-form-ignore)").remove(),o[0].appendChild(p),e(o.children())(i),a(c,function(e,r){angular.isDefined(e["default"])&&i.$eval("model."+r+" = model."+r+" || defaltValue",{defaltValue:e["default"]})})}})}}}]),angular.module("schemaForm").directive("schemaValidate",function(){return{restrict:"A",scope:!1,require:"ngModel",link:function(e,r,t,n){e.ngModel=n;var a=null,i=e.$eval(t.schemaValidate);n.$parsers.unshift(function(r){if(i||(i=e.$eval(t.schemaValidate)),!i)return r;if(angular.isUndefined(r))return void 0;var o=r;"integer"===i.type?o=parseInt(o,10):"number"===i.type?o=parseFloat(o,10):"boolean"===i.type&&"string"==typeof r&&("true"===r?o=!0:"false"===r&&(o=!1));var u=tv4.validateResult(o,i);return u.valid?(n.$setValidity("schema",!0),a=null,r):(n.$setValidity("schema",!1),void(a=u.error))}),e.hasError=function(){return e.ngModel.$invalid&&!e.ngModel.$pristine},e.schemaError=function(){return a}}}});