blob: 43d2ee24e00bfdb47f9871c1b0d8504e31aeae5f [file] [log] [blame]
/*!
* Angular Material Design
* https://github.com/angular/material
* @license MIT
* v1.0.0-master-19c11fd
*/
function mdInputContainerDirective(e,t){function n(t,n,i){e(n),n.find("md-icon").length&&n.addClass("md-has-icon")}function i(e,n,i,a){var r=this;r.isErrorGetter=i.mdIsError&&t(i.mdIsError),r.delegateClick=function(){r.input.focus()},r.element=n,r.setFocused=function(e){n.toggleClass("md-input-focused",!!e)},r.setHasValue=function(e){n.toggleClass("md-input-has-value",!!e)},r.setHasPlaceholder=function(e){n.toggleClass("md-input-has-placeholder",!!e)},r.setInvalid=function(e){e?a.addClass(n,"md-input-invalid"):a.removeClass(n,"md-input-invalid")},e.$watch(function(){return r.label&&r.input},function(e){e&&!r.label.attr("for")&&r.label.attr("for",r.input.attr("id"))})}return i.$inject=["$scope","$element","$attrs","$animate"],{restrict:"E",link:n,controller:i}}function labelDirective(){return{restrict:"E",require:"^?mdInputContainer",link:function(e,t,n,i){!i||n.mdNoFloat||t.hasClass("md-container-ignore")||(i.label=t,e.$on("$destroy",function(){i.label=null}))}}}function inputTextareaDirective(e,t,n){function i(i,a,r,s){function o(e){return c.setHasValue(!d.$isEmpty(e)),e}function l(){c.setHasValue(a.val().length>0||(a[0].validity||{}).badInput)}function u(){function n(e){return f(),e}function r(){if(u.style.height=u.offsetHeight+"px",a.addClass("md-no-flex"),isNaN(g)){l.style.height="auto",l.scrollTop=0;var e=s();e&&(l.style.height=e+"px")}else{l.setAttribute("rows",1),m||(l.style.minHeight="0",m=a.prop("clientHeight"),l.style.minHeight=null);var t=Math.min(g,Math.round(l.scrollHeight/m));l.setAttribute("rows",t),l.style.height=m*t+"px"}a.removeClass("md-no-flex"),u.style.height="auto"}function s(){var e=l.scrollHeight-l.offsetHeight;return l.offsetHeight+(e>0?e:0)}function o(e){l.scrollTop=0;var t=l.scrollHeight-l.offsetHeight,n=l.offsetHeight+t;l.style.height=n+"px"}if(!angular.isDefined(a.attr("md-no-autogrow"))){var l=a[0],u=c.element[0],g=NaN,m=null;l.hasAttribute("rows")&&(g=parseInt(l.getAttribute("rows")));var f=e.debounce(r,1);if(d?(d.$formatters.push(n),d.$viewChangeListeners.push(n)):f(),a.on("keydown input",f),isNaN(g)&&(a.attr("rows","1"),a.on("scroll",o)),angular.element(t).on("resize",f),i.$on("$destroy",function(){angular.element(t).off("resize",f)}),angular.isDefined(a.attr("md-detect-hidden"))){var p=function(){var e=!1;return function(){var t=0===l.offsetHeight;t===!1&&e===!0&&r(),e=t}}();i.$watch(function(){return e.nextTick(p,!1),!0})}}}var c=s[0],g=!!s[1],d=s[1]||e.fakeNgModel(),m=angular.isDefined(r.readonly);if(c){if(c.input)throw new Error("<md-input-container> can only have *one* <input>, <textarea> or <md-select> child element!");c.input=a;var f=angular.element('<div class="md-errors-spacer">');a.after(f),c.label||n.expect(a,"aria-label",a.attr("placeholder")),a.addClass("md-input"),a.attr("id")||a.attr("id","input_"+e.nextUid()),"textarea"===a[0].tagName.toLowerCase()&&u(),g||l();var p=c.isErrorGetter||function(){return d.$invalid&&(d.$touched||d.$$parentForm&&d.$$parentForm.$submitted)};i.$watch(p,c.setInvalid),d.$parsers.push(o),d.$formatters.push(o),a.on("input",l),m||a.on("focus",function(e){c.setFocused(!0)}).on("blur",function(e){c.setFocused(!1),l()}),i.$on("$destroy",function(){c.setFocused(!1),c.setHasValue(!1),c.input=null})}}return{restrict:"E",require:["^?mdInputContainer","?ngModel"],link:i}}function mdMaxlengthDirective(e,t){function n(n,i,a,r){function s(e){return l.parent?(l.text(String(i.val()||e||"").length+"/"+o),e):e}var o,l,u,c=r[0],g=r[1];t.nextTick(function(){u=angular.element(g.element[0].querySelector(".md-errors-spacer")),l=angular.element('<div class="md-char-counter">'),u.append(l),a.$set("ngTrim","false"),c.$formatters.push(s),c.$viewChangeListeners.push(s),i.on("input keydown keyup",function(){s()}),n.$watch(a.mdMaxlength,function(t){o=t,angular.isNumber(t)&&t>0?(l.parent().length||e.enter(l,u),s()):e.leave(l)}),c.$validators["md-maxlength"]=function(e,t){return!angular.isNumber(o)||0>o?!0:(e||i.val()||t||"").length<=o}})}return{restrict:"A",require:["ngModel","^mdInputContainer"],link:n}}function placeholderDirective(e){function t(e,t,n,i){if(i){var a=i.element.find("label"),r=angular.isDefined(i.element.attr("md-no-float"));if(a&&a.length||r)return void i.setHasPlaceholder(!0);var s=n.placeholder;if(t.removeAttr("placeholder"),i.input&&"MD-SELECT"!=i.input[0].nodeName){var o='<label ng-click="delegateClick()">'+s+"</label>";i.element.addClass("md-icon-float"),i.element.prepend(o)}}}return{restrict:"A",require:"^^?mdInputContainer",priority:200,link:t}}function ngMessagesDirective(){function e(e,n,i,a){a&&(n.toggleClass("md-input-messages-animation",!0),n.toggleClass("md-auto-hide",!0),("false"==i.mdAutoHide||t(i))&&n.toggleClass("md-auto-hide",!1))}function t(e){return visibilityDirectives.some(function(t){return e[t]})}return{restrict:"EA",link:e,require:"^^?mdInputContainer"}}function ngMessageDirective(e){function t(t){var n=e.getClosest(t,"md-input-container");if(n)return t.toggleClass("md-input-message-animation",!0),{}}return{restrict:"EA",compile:t,priority:100}}function mdInputInvalidMessagesAnimation(e,t){return{addClass:function(n,i,a){var r=getMessagesElement(n);"md-input-invalid"==i&&r.hasClass("md-auto-hide")&&showInputMessages(n,t,e)["finally"](a)}}}function ngMessagesAnimation(e,t){return{enter:function(n,i){showInputMessages(n,t,e)["finally"](i)},leave:function(n,i){hideInputMessages(n,t,e)["finally"](i)},addClass:function(n,i,a){"ng-hide"==i?hideInputMessages(n,t,e)["finally"](a):a()},removeClass:function(n,i,a){"ng-hide"==i?showInputMessages(n,t,e)["finally"](a):a()}}}function ngMessageAnimation(e){return{enter:function(t,n){var i=getMessagesElement(t);return i.hasClass("md-auto-hide")?void n():showMessage(t,e)},leave:function(t,n){return hideMessage(t,e)}}}function showInputMessages(e,t,n){var i,a=[],r=getMessagesElement(e);return angular.forEach(r.children(),function(e){i=showMessage(angular.element(e),t),a.push(i.start())}),n.all(a)}function hideInputMessages(e,t,n){var i,a=[],r=getMessagesElement(e);return angular.forEach(r.children(),function(e){i=hideMessage(angular.element(e),t),a.push(i.start())}),n.all(a)}function showMessage(e,t){var n=e[0].offsetHeight;return t(e,{event:"enter",structural:!0,from:{opacity:0,"margin-top":-n+"px"},to:{opacity:1,"margin-top":"0"},duration:.3})}function hideMessage(e,t){var n=e[0].offsetHeight,i=window.getComputedStyle(e[0]);return 0==i.opacity?t(e,{}):t(e,{event:"leave",structural:!0,from:{opacity:1,"margin-top":0},to:{opacity:0,"margin-top":-n+"px"},duration:.3})}function getInputElement(e){var t=e.controller("mdInputContainer");return t.element}function getMessagesElement(e){var t=getInputElement(e),n="ng-messages,data-ng-messages,x-ng-messages,[ng-messages],[data-ng-messages],[x-ng-messages]";return angular.element(t[0].querySelector(n))}goog.provide("ng.material.components.input"),goog.require("ng.material.core"),angular.module("material.components.input",["material.core"]).directive("mdInputContainer",mdInputContainerDirective).directive("label",labelDirective).directive("input",inputTextareaDirective).directive("textarea",inputTextareaDirective).directive("mdMaxlength",mdMaxlengthDirective).directive("placeholder",placeholderDirective).directive("ngMessages",ngMessagesDirective).directive("ngMessage",ngMessageDirective).directive("ngMessageExp",ngMessageDirective).animation(".md-input-invalid",mdInputInvalidMessagesAnimation).animation(".md-input-messages-animation",ngMessagesAnimation).animation(".md-input-message-animation",ngMessageAnimation),mdInputContainerDirective.$inject=["$mdTheming","$parse"],inputTextareaDirective.$inject=["$mdUtil","$window","$mdAria"],mdMaxlengthDirective.$inject=["$animate","$mdUtil"],placeholderDirective.$inject=["$log"];var visibilityDirectives=["ngIf","ngShow","ngHide","ngSwitchWhen","ngSwitchDefault"];ngMessageDirective.$inject=["$mdUtil"],mdInputInvalidMessagesAnimation.$inject=["$q","$animateCss"],ngMessagesAnimation.$inject=["$q","$animateCss"],ngMessageAnimation.$inject=["$animateCss"],ng.material.components.input=angular.module("material.components.input");