-
Notifications
You must be signed in to change notification settings - Fork 649
/
Copy pathschema-form.min.js
1 lines (1 loc) · 14.2 KB
/
schema-form.min.js
1
var deps=["ObjectPath"];try{angular.module("ngSanitize"),deps.push("ngSanitize")}catch(e){}try{angular.module("ui.sortable"),deps.push("ui.sortable")}catch(e){}try{angular.module("angularSpectrumColorpicker"),deps.push("angularSpectrumColorpicker")}catch(e){}angular.module("schemaForm",deps),angular.module("schemaForm").provider("sfPath",["ObjectPathProvider",function(e){var r={parse:e.parse};r.stringify=1===angular.version.major&&angular.version.minor<3?function(e){return Array.isArray(e)?e.join("."):e.toString()}:e.stringify,r.normalize=function(e,t){return r.stringify(Array.isArray(e)?e:r.parse(e),t)},this.parse=r.parse,this.stringify=r.stringify,this.normalize=r.normalize,this.$get=function(){return r}}]),angular.module("schemaForm").factory("sfSelect",["sfPath",function(e){var r=/^\d+$/;return function(t,n,a){n||(n=this);var i="string"==typeof t?e.parse(t):t;if("undefined"!=typeof a&&1===i.length)return n[i[0]]=a,n;"undefined"!=typeof a&&"undefined"==typeof n[i[0]]&&(n[i[0]]=i.length>2&&r.test(i[1])?[]:{});for(var o=n[i[0]],u=1;u<i.length;u++){if(""===i[u])return void 0;if("undefined"!=typeof a){if(u===i.length-1)return o[i[u]]=a,a;var l=o[i[u]];("undefined"==typeof l||null===l)&&(l=r.test(i[u+1])?[]:{},o[i[u]]=l),o=l}else o&&(o=o[i[u]])}return o}}]),angular.module("schemaForm").provider("schemaFormDecorators",["$compileProvider","sfPathProvider",function(e,r){var t="",n={},a=function(e,r){"sfDecorator"===e&&(e=t);for(var a=n[e],i=a.rules,o=0;o<i.length;o++){var u=i[o](r);if(u)return u}return a.mappings[r.type]?a.mappings[r.type]:a.mappings["default"]},i=function(e){return"model"+("["!==e[0]?".":"")+e},o=function(t){e.directive(t,["$parse","$compile","$http","$templateCache",function(e,n,o,u){return{restrict:"AE",replace:!1,transclude:!1,scope:!0,require:"?^sfSchema",link:function(e,l,s,c){var f=e.$watch(s.form,function(i){if(i){e.form=i;var s=a(t,i);o.get(s,{cache:u}).then(function(t){var a=i.key?r.stringify(i.key).replace(/"/g,"""):"",o=t.data.replace(/\$\$value\$\$/g,"model"+("["!==a[0]?".":"")+a);l.html(o),n(l.contents())(e)}),f()}});e.showTitle=function(){return e.form&&e.form.notitle!==!0&&e.form.title},e.listToCheckboxValues=function(e){var r={};return angular.forEach(e,function(e){r[e]=!0}),r},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}))};var m=function(r){return angular.forEach(e.form.dependencies,function(e){r=r.replace(e,i(e))}),e.$eval(r)},d=function(){e.ngModel&&(e.ngModel.$setViewValue(void 0),e.ngModel.$render(),e.ngModel.$setPristine())};e.showCondition=function(){var r=e.form.expression;if(angular.isUndefined(r))return!0;var t=m(r);return angular.isDefined(e.form.required)&&(e.form.required=t,e.form.schema.required=t),e.form.key&&!t&&d(),t},e.disabledElement=function(){var r=e.form.disabledExpression;if(angular.isUndefined(r))return!1;var t=m(r);return angular.isDefined(e.form.required)&&(e.form.required=!t,e.form.schema.required=!t),t&&d(),t},e.evalExpr=function(r,t){return c?c.evalInParentScope(r,t):e.$eval(r,t)},e.evalInScope=function(r,t){return r?e.$eval(r,t):void 0},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.number||e.form.validationMessage["default"]||e.form.validationMessage:r?r.message:"Not a number"}}}}])},u=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,r,a){n[e]={mappings:r||{},rules:a||[]},n[t]||(t=e),o(e)},this.createDirective=u,this.createDirectives=function(e){angular.forEach(e,function(e,r){u(r,e)})},this.directive=function(e){return e=e||t,n[e]},this.addMapping=function(e,r,t){n[e]&&(n[e].mappings[r]=t)},this.$get=function(){return{directive:function(e){return n[e]},defaultDecorator:t}},o("sfDecorator")}]),angular.module("schemaForm").provider("schemaForm",["sfPathProvider",function(e){var r=function(e){var r=[];return e.forEach(function(e){r.push({name:e,value:e})}),r},t=function(e,r){if(!angular.isArray(e)){var t=[];return r?angular.forEach(r,function(r){t.push({name:e[r],value:r})}):angular.forEach(e,function(e,r){t.push({name:e,value:r})}),t}return e},n=function(e,r,t){var n=d[r.type];if(n)for(var a,i=0;i<n.length;i++)if(a=n[i](e,r,t))return a},a=function(e,r,n){n=n||{};var a=n.global&&n.global.formDefaults?angular.copy(n.global.formDefaults):{};return a.title=n.global&&n.global.supressPropertyTitles===!0?r.title:r.title||e,r.description&&(a.description=r.description),(n.required===!0||r.required===!0)&&(a.required=!0),r.maxLength&&(a.maxlength=r.maxLength),r.minLength&&(a.minlength=r.maxLength),(r.readOnly||r.readonly)&&(a.readonly=!0),r.minimum&&(a.minimum=r.minimum+(r.exclusiveMinimum?1:0)),r.maximum&&(a.maximum=r.maximum-(r.exclusiveMaximum?1:0)),r.validationMessage&&(a.validationMessage=r.validationMessage),r.enumNames&&(a.titleMap=t(r.enumNames,r["enum"])),a.schema=r,a.ngModelOptions=a.ngModelOptions||{},a},i=function(r,t,n){if("string"===t.type&&!t["enum"]){var i=a(r,t,n);return i.key=n.path,i.type="text",n.lookup[e.stringify(n.path)]=i,i}},o=function(r,t,n){if("number"===t.type){var i=a(r,t,n);return i.key=n.path,i.type="number",n.lookup[e.stringify(n.path)]=i,i}},u=function(r,t,n){if("integer"===t.type){var i=a(r,t,n);return i.key=n.path,i.type="number",n.lookup[e.stringify(n.path)]=i,i}},l=function(r,t,n){if("boolean"===t.type){var i=a(r,t,n);return i.key=n.path,i.type="checkbox",n.lookup[e.stringify(n.path)]=i,i}},s=function(t,n,i){if("string"===n.type&&n["enum"]){var o=a(t,n,i);return o.key=i.path,o.type="select",o.titleMap||(o.titleMap=r(n["enum"])),i.lookup[e.stringify(i.path)]=o,o}},c=function(t,n,i){if("array"===n.type&&n.items&&n.items["enum"]){var o=a(t,n,i);return o.key=i.path,o.type="checkboxes",o.titleMap||(o.titleMap=r(n.items["enum"])),i.lookup[e.stringify(i.path)]=o,o}},f=function(r,t,i){if("object"===t.type){var o=a(r,t,i);return o.type="fieldset",o.items=[],i.lookup[e.stringify(i.path)]=o,angular.forEach(t.properties,function(r,a){var u=i.path.slice();if(u.push(a),i.ignore[e.stringify(u)]!==!0){var l=t.required&&-1!==t.required.indexOf(a),s=n(a,r,{path:u,required:l||!1,lookup:i.lookup,ignore:i.ignore});s&&o.items.push(s)}}),o}},m=function(r,t,i){if("array"===t.type){var o=a(r,t,i);o.type="array",o.key=i.path,i.lookup[e.stringify(i.path)]=o;var u=t.required&&-1!==t.required.indexOf(i.path[i.path.length-1]),l=i.path.slice();return l.push(""),o.items=[n(r,t.items,{path:l,required:u||!1,lookup:i.lookup,ignore:i.ignore,global:i.global})],o}},d={string:[s,i],object:[f],number:[o],integer:[u],"boolean":[l],array:[c,m]},p=function(e){return e};this.defaults=d,this.stdFormObj=a,this.defaultFormDefinition=n,this.postProcess=function(e){p=e},this.appendRule=function(e,r){d[e]||(d[e]=[]),d[e].push(r)},this.prependRule=function(e,r){d[e]||(d[e]=[]),d[e].unshift(r)},this.createStandardForm=a,this.$get=function(){var r={};return r.merge=function(n,a,i,o,u){a=a||["*"],o=o||{},u=u||n.readonly||n.readOnly;var l=r.defaults(n,i,o),s=a.indexOf("*");-1!==s&&(a=a.slice(0,s).concat(l.form).concat(a.slice(s+1)));var c=l.lookup;return p(a.map(function(a){if("string"==typeof a&&(a={key:a}),a.key&&"string"==typeof a.key&&(a.key=e.parse(a.key)),a.titleMap&&(a.titleMap=t(a.titleMap)),a.itemForm){a.items=[];var l=e.stringify(a.key),s=c[l];angular.forEach(s.items,function(e){var r=angular.copy(a.itemForm);r.key=e.key,a.items.push(r)})}if(a.key){var f=e.stringify(a.key);c[f]&&(a=angular.extend(c[f],a))}return u===!0&&(a.readonly=!0),a.items&&(a.items=r.merge(n,a.items,i,o,a.readonly)),a.tabs&&angular.forEach(a.tabs,function(e){e.items=r.merge(n,e.items,i,o,a.readonly)}),"checkbox"===a.type&&angular.isUndefined(a.schema["default"])&&(a.schema["default"]=!1),a}))},r.defaults=function(e,r,t){var a=[],i={};if(r=r||{},t=t||{},"object"!==e.type)throw new Error('Not implemented. Only type "object" allowed at root level of schema.');return angular.forEach(e.properties,function(o,u){if(r[u]!==!0){var l=e.required&&-1!==e.required.indexOf(u),s=n(u,o,{path:[u],lookup:i,ignore:r,required:l,global:t});s&&a.push(s)}}),{form:a,lookup:i}},r.traverseSchema=function(e,r,t,n){n=angular.isDefined(n)?n:!0,t=t||[];var a=function(e,r,t){if(r(e,t),angular.forEach(e.properties,function(e,n){var i=t.slice();i.push(n),a(e,r,i)}),!n&&e.items){var i=t.slice();i.push(""),a(e.items,r,i)}};a(e,r,t||[])},r.traverseForm=function(e,t){t(e),angular.forEach(e.items,function(e){r.traverseForm(e,t)}),e.tabs&&angular.forEach(e.tabs,function(e){angular.forEach(e.items,function(e){r.traverseForm(e,t)})})},r}}]),angular.module("schemaForm").factory("sfValidator",[function(){var e={};return e.validate=function(e,r){if(!e)return{valid:!0};var t=e.schema;if(!t)return{valid:!0};""===r&&(r=void 0),"number"===e.type&&null===r&&(r=void 0);var n={type:"object",properties:{}},a=e.key[e.key.length-1];n.properties[a]=t,e.required&&(n.required=[a]);var i={};return angular.isDefined(r)&&(i[a]=r),tv4.validateResult(i,n)},e}]),angular.module("schemaForm").directive("sfArray",["sfSelect","schemaForm","sfValidator",function(e,r,t){var n=function(e){return function(r){r.key&&(r.key[r.key.indexOf("")]=e)}};return{restrict:"A",scope:!0,require:"?ngModel",link:function(a,i,o,u){var l={},s=a.$watch(o.sfArray,function(i){var o=e(i.key,a.model);if(angular.isUndefined(o)&&(o=[],e(i.key,a.model,o)),a.modelArray=o,i.items){var c=i.items[0];i.items.length>1&&(c={type:"section",items:i.items.map(function(e){return e.ngModelOptions=i.ngModelOptions,e.readonly=i.readonly,e})})}if(a.copyWithIndex=function(e){if(!l[e]&&c){var t=angular.copy(c);t.arrayIndex=e,r.traverseForm(t,n(e)),l[e]=t}return l[e]},a.appendToArray=function(){var t=o.length,n=a.copyWithIndex(t);if(r.traverseForm(n,function(r){r.key&&r.schema&&angular.isDefined(r.schema["default"])&&e(r.key,a.model,r.schema["default"])}),t===o.length){var u,l=e("schema.items.type",i);"object"===l?u={}:"array"===l&&(u=[]),o.push(u)}return a.validateArray&&a.validateArray(),o},a.deleteFromArray=function(e){return o.splice(e,1),a.validateArray&&a.validateArray(),o},i.titleMap||i.startEmpty===!0||0!==o.length||a.appendToArray(),i.titleMap&&i.titleMap.length>0){a.titleMapValues=[];var f=function(e){a.titleMapValues=[],e=e||[],i.titleMap.forEach(function(r){a.titleMapValues.push(-1!==e.indexOf(r.value))})};f(a.modelArray),a.$watchCollection("modelArray",f),a.$watchCollection("titleMapValues",function(e){if(e){for(var r=a.modelArray;r.length>0;)r.shift();i.titleMap.forEach(function(t,n){e[n]&&r.push(t.value)})}})}if(u){var m;a.validateArray=function(){var e=t.validate(i,a.modelArray.length>0?a.modelArray:void 0);e.valid!==!1||!e.error||""!==e.error.dataPath&&e.error.dataPath!=="/"+i.key[i.key.length-1]?u.$setValidity("schema",!0):(u.$setViewValue(a.modelArray),m=e.error,u.$setValidity("schema",!1))},a.$on("schemaFormValidate",a.validateArray),a.hasSuccess=function(){return u.$valid&&!u.$pristine},a.hasError=function(){return u.$invalid},a.schemaError=function(){return m}}s()})}}}]),angular.module("schemaForm").directive("sfChanged",function(){return{require:"ngModel",restrict:"AC",scope:!1,link:function(e,r,t,n){var a=e.$eval(t.sfChanged);a&&a.onChange&&n.$viewChangeListeners.push(function(){angular.isFunction(a.onChange)?a.onChange(n.$modelValue,a):e.evalExpr(a.onChange,{modelValue:n.$modelValue,form:a})})}}}),angular.module("schemaForm").directive("sfSchema",["$compile","schemaForm","schemaFormDecorators","sfSelect",function(e,r,t,n){var a=/[A-Z]/g,i=function(e,r){return r=r||"_",e.replace(a,function(e,t){return(t?r:"")+e.toLowerCase()})};return{scope:{schema:"=sfSchema",initialForm:"=sfForm",model:"=sfModel",options:"=sfOptions"},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(a,o,u,l,s){a.formCtrl=l;var c={};s(a,function(e){if(e.addClass("schema-form-ignore"),o.prepend(e),o[0].querySelectorAll){var r=o[0].querySelectorAll("[ng-model]");if(r)for(var t=0;t<r.length;t++){var n=r[t].getAttribute("ng-model");c[n.substring(n.indexOf(".")+1)]=!0}}});var f={};a.$watch(function(){var l=a.schema,s=a.initialForm||["*"];if(s&&l&&l.type&&(f.form!==s||f.schema!==l)&&Object.keys(l.properties).length>0){f.schema=l,f.form=s;var m=r.merge(l,s,c,a.options),d=document.createDocumentFragment();a.schemaForm={form:m,schema:l},o.children(":not(.schema-form-ignore)").remove(),angular.forEach(m,function(e,r){var n=document.createElement(u.sfDecorator||i(t.defaultDecorator,"-"));n.setAttribute("form","schemaForm.form["+r+"]");var a;try{a=o[0].querySelector('*[sf-insert-field="'+e.key+'"]')}catch(l){a=null}a?(a.innerHTML="",a.appendChild(n)):d.appendChild(n)}),o[0].appendChild(d),e(o.children())(a),r.traverseSchema(l,function(e,r){if(angular.isDefined(e["default"])){var t=n(r,a.model);angular.isUndefined(t)&&n(r,a.model,e["default"])}})}})}}}]),angular.module("schemaForm").directive("schemaValidate",["sfValidator",function(e){return{restrict:"A",scope:!1,priority:1e3,require:"ngModel",link:function(r,t,n,a){r.ngModel=a;var i=null,o=function(){return u||(u=r.$eval(n.schemaValidate)),u},u=o();a.$validators?a.$validators.schema=function(r){var t=e.validate(o(),r);return i=t.error,t.valid}:a.$parsers.push(function(r){if(u=o(),!u)return r;var t=e.validate(u,r);return t.valid?(a.$setValidity("schema",!0),r):(a.$setValidity("schema",!1),void(i=t.error))}),r.$on("schemaFormValidate",function(){a.$validate?(a.$validate(),a.$invalid&&(a.$dirty=!0,a.$pristine=!1)):a.$setViewValue(a.$viewValue)}),r.hasSuccess=function(){return a.$valid&&(!a.$pristine||!a.$isEmpty(a.$modelValue))},r.hasError=function(){return a.$invalid&&!a.$pristine},r.schemaError=function(){return i}}}}]);