forked from refactorthis/xtform
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxtForm.tpl.min.js
1 lines (1 loc) · 7.43 KB
/
xtForm.tpl.min.js
1
!function(){"use strict";var t=angular.module("xtForm",[]);t.directive("xtValidationInline",function(t){function r(){return"validation_"+e++}var e=0;return{require:["^xtForm"],restrict:"EA",scope:!0,replace:!0,template:function(r,e){return t.get(e.templateUrl||"xtForm/inline/validationInline.html")},link:function(t,e,n){function i(){e.addClass("xt-validation-inline"),n.id||(n.id=r(),e.attr("id",n.id)),u.attr("required")&&u.attr("aria-required",!0),t.$on("XtForm.ErrorsUpdated",function(t,r){(null===r||r===d)&&a()})}function a(){var r=n.multiple?d.$xtErrors.length:1;t.errors=d.$xtErrors.slice(0,r),t.showErrors=t.errors.length>0,o(t.showErrors)}function o(t){t?u.attr("aria-invalid",!0).attr("aria-describedby",n.id):(u.removeAttr("aria-invalid"),u.removeAttr("aria-describedby"))}var l=n.for||n.xtValidationInline;if(angular.isUndefined(l))throw new Error('The validation input id must be specified eg. for="id"');var u=angular.element(document.getElementById(l));if(0===u.length)throw new Error("Can not find input element for the validation directive");var d=u.controller("ngModel");i()}}}),t.directive("xtValidationSummary",function(t){return{require:["^xtForm","^form"],restrict:"EA",replace:!0,scope:!0,template:function(r,e){return t.get(e.templateUrl||"xtForm/summary/validationSummary.html")},link:function(t,r,e,n){function i(){t.errors=[],angular.forEach(a,function(r,n){if("$"!==n[0]){var i=e.multiple?r.$xtErrors.length:1,a=r.$xtErrors.slice(0,i);angular.forEach(a,function(e){t.errors.push({key:e.key,label:r.$label,message:e.message})})}}),t.showErrors=t.errors.length>0}var a=n[1];t.showLabel="true"===e.showLabel||angular.isUndefined(e.showLabel),t.$on("XtForm.ErrorsUpdated",i)}}}),t.directive("xtValidationTooltip",function(t){return{require:["^xtForm"],restrict:"EA",link:function(r,e,n){function i(){o(),a(),r.$on("XtForm.ErrorsUpdated",function(t,r){(null===r||r===d)&&l()})}function a(){e.addClass("xt-error-container"),"SELECT"!==e[0].nodeName.toUpperCase()||n.placement||(n.placement="top",e.attr("placement",n.placement)),e.tooltip({animation:!1,html:!0,placement:n.placement||"bottom",trigger:"manual",container:n.container||"body"})}function o(){var r=n.for||n.xtValidationTooltip;u=r?angular.element(document.getElementById(r)):e,u.addClass("xt-validation-tooltip"),u.attr("required")&&u.attr("aria-required",!0),t(function(){if(d=u.controller("ngModel"),!d)throw new Error("Cannot find ngModel element for xtValidationTooltip")})}function l(){if(0===d.$xtErrors.length)return s=null,void e.tooltip("hide");var t=n.multiple?d.$xtErrors.length:1,r=d.$xtErrors.slice(0,t).map(function(t){return t.message}).join("<br />");r!==s&&(s=r,setTimeout(function(){e.attr("title",r).tooltip("fixTitle").tooltip("show")}))}var u,d,s;if(!$||!angular.isFunction($.fn.tooltip))throw new Error("xtform requires a jquery tooltip plugin, like bootstrap.js");i()}}}),t.directive("ngModel",function(t,r,e,n){var i="ng-untouched",a="ng-touched";return{require:["ngModel","^?xtForm","^?form"],link:function(o,l,u,d){function s(){g=h.$setTouched||f,v=$.getValidationStrategy(),h.$untouched=!0;var t=n[0].querySelectorAll('label[for="'+u.id+'"]');angular.extend(h,{$focused:!1,$label:t.length>0?t[0].innerText:"",$xtErrors:[]}),o.$watch(function(){return h.$error},m,!0),o.$on("XtForm.ForceErrorUpdate",m),l.on("focus",function(){h.$touched||g(),h.$focused=!0,m(),o.$apply()}).on("blur",function(){h.$focused=!1,m(),o.$apply()})}function c(t){var r="msg"+t[0].toUpperCase()+t.substring(1);return u[r]?u[r]:e(p[t])(u)}function m(){h.$xtErrors=[],angular.forEach(h.$error,function(t,r){var e=t&&v(b,h);if(e){var n={key:r,message:c(r)};"required"===r?h.$xtErrors.push(n):h.$xtErrors.unshift(n)}}),r.$broadcast("XtForm.ErrorsUpdated",h)}function f(){h.$touched=!0,h.$untouched=!1,l.addClass(a).removeClass(i)}var g,v,p=t.getErrorMessages(),h=d[0],$=d[1],b=d[2];$&&s()}}}),t.directive("xtForm",function(t){return{require:"",priority:-1,controller:"XtFormController",controllerAs:"xtForm",link:function(r,e,n,i){e.on("submit",function(){r.$apply(function(){i.submit()})}).on("reset",function(){t(function(){i.reset()})})}}}).controller("XtFormController",function(t,r,e,n,i){function a(){return angular.isFunction(u.$setSubmitted)?void u.$setSubmitted():(u.$submitted=!0,void r.addClass("ng-submitted"))}function o(){angular.isFunction(u.$setSubmitted)||(u.$submitted=!1,r.removeClass("ng-submitted"))}var l=this,u=r.controller("form"),d=e.strategy?n.getValidationStrategy(e.strategy):n.getDefaultValidationStrategy();angular.extend(l,{form:u,getValidationStrategy:function(){return d},submit:function(){a(),u.$invalid&&e.focusError&&i.setTimeout(function(){r.find(".ng-invalid:input:visible:first").focus()}),t.$broadcast("XtForm.ForceErrorUpdate",null,"submit")},reset:function(){l.form.$setPristine(),l.form.$setUntouched(),o(),t.$broadcast("XtForm.ForceErrorUpdate",null,"reset")}})}),t.provider("xtFormConfig",function(){var t,r=this,e={minlength:"Needs to be at least {{ngMinlength}} characters long",maxlength:"Can be no longer than {{ngMaxlength}} characters long",required:"This field is required",number:"Must be a number",min:"Must be at least {{min}}",max:"Must be no greater than {{max}}",email:"Must be a valid E-mail address",pattern:"Illegal value",url:"Must be a valid URL",date:"Must be a valid date",datetimelocal:"Must be a valid date",time:"Must be a valid time",week:"Must be a valid week",month:"Must be a valid month",$$server:"An error has occurred"};angular.extend(r,{$validationStrategies:{invalid:function(t){return t.$invalid},submitted:function(t){return t.$invalid&&t.$submitted},dirty:function(t,r){return r.$invalid&&(t.$submitted||r.$dirty)},dirtyOrSubmitted:function(t,r){return r.$invalid&&(t.$submitted||r.$dirty)},focusedAndDirtyOrSubmitted:function(t,r){return r.$invalid&&r.$focused&&(r.$dirty||t.$submitted)},dirtyAndFocusedOrSubmitted:function(t,r){return r.$invalid&&(t.$submitted||r.$dirty&&r.$focused)}},addValidationStrategy:function(t,e){r.$validationStrategies[t]=e},setDefaultValidationStrategy:function(e){if(!r.$validationStrategies[e])throw new Error("Could not find validation strategy by name: "+e);t=r.$validationStrategies[e]},setErrorMessages:function(t){angular.extend(e,t)}}),this.$get=function(){return{getErrorMessages:function(){return angular.copy(e)},getValidationStrategy:function(t){if(!r.$validationStrategies[t])throw new Error("Could not find validation strategy by name: "+t);return r.$validationStrategies[t]},getDefaultValidationStrategy:function(){return t}}},r.setDefaultValidationStrategy("dirtyOrSubmitted")})}(),angular.module("xtForm").run(["$templateCache",function(t){t.put("xtForm/inline/validationInline.html",'<div data-ng-show="showErrors">\n <span class="xt-validation-item" data-ng-repeat="error in errors" data-key="error.key">{{error.message}}</span>\n</div>')}]),angular.module("xtForm").run(["$templateCache",function(t){t.put("xtForm/summary/validationSummary.html",'<div class="panel panel-danger" data-ng-show="showErrors">\n <div class="panel-heading">\n <h3 class="panel-title">\n <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>\n Validation errors\n </h3>\n </div>\n <div class="panel-body">\n <ul class="xt-validation-summary">\n <li data-ng-repeat="error in errors" data-key="{{error.key}}">\n <span data-ng-show="showLabel" data-ng-bind="error.label"></span>\n -\n <span data-ng-bind="error.message"></span>\n </li>\n </ul>\n </div>\n</div>')}]);