input.min.js 4.9 KB

1234567
  1. /*!
  2. * Angular Material Design
  3. * https://github.com/angular/material
  4. * @license MIT
  5. * v0.11.3-master-3fe7d76
  6. */
  7. !function(e,t,n){"use strict";function i(e,t){function n(t,n,i){e(n)}function i(e,n,i){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.setHasMessages=function(e){n.toggleClass("md-input-has-messages",!!e)},r.setHasPlaceholder=function(e){n.toggleClass("md-input-has-placeholder",!!e)},r.setInvalid=function(e){n.toggleClass("md-input-invalid",!!e)},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"],{restrict:"E",link:n,controller:i}}function r(){return{restrict:"E",require:"^?mdInputContainer",link:function(e,t,n,i){i&&!n.mdNoFloat&&(i.label=t,e.$on("$destroy",function(){i.label=null}))}}}function a(e,n,i){function r(r,a,s,o){function l(e){return d.setHasValue(!m.$isEmpty(e)),e}function u(){d.setHasValue(a.val().length>0||(a[0].validity||{}).badInput)}function c(){function i(e){return h(),e}function s(){if(c.style.height=c.offsetHeight+"px",a.addClass("md-no-flex"),isNaN(f)){u.style.height="auto",u.scrollTop=0;var e=o();e&&(u.style.height=e+"px")}else{u.setAttribute("rows",1),g||(u.style.minHeight="0",g=a.prop("clientHeight"),u.style.minHeight=null);var t=Math.max(f,Math.round(u.scrollHeight/g));u.setAttribute("rows",t)}a.removeClass("md-no-flex"),c.style.height="auto"}function o(){var e=u.scrollHeight-u.offsetHeight;return u.offsetHeight+(e>0?e:0)}function l(e){u.scrollTop=0;var t=u.scrollHeight-u.offsetHeight,n=u.offsetHeight+t;u.style.height=n+"px"}if(!t.isDefined(a.attr("md-no-autogrow"))){var u=a[0],c=d.element[0],f=NaN,g=null;u.hasAttribute("rows")&&(f=parseInt(u.getAttribute("rows")));var h=e.debounce(s,1);if(m?(m.$formatters.push(i),m.$viewChangeListeners.push(i)):h(),a.on("keydown input",h),isNaN(f)&&(a.attr("rows","1"),a.on("scroll",l)),t.element(n).on("resize",h),r.$on("$destroy",function(){t.element(n).off("resize",h)}),t.isDefined(a.attr("md-detect-hidden"))){var p=function(){var e=!1;return function(){var t=0===u.offsetHeight;t===!1&&e===!0&&s(),e=t}}();r.$watch(function(){return e.nextTick(p,!1),!0})}}}var d=o[0],f=!!o[1],m=o[1]||e.fakeNgModel(),g=t.isDefined(s.readonly);if(d){if(d.input)throw new Error("<md-input-container> can only have *one* <input>, <textarea> or <md-select> child element!");d.input=a,d.label||i.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()&&c(),f||u();var h=d.isErrorGetter||function(){return m.$invalid&&m.$touched};r.$watch(h,d.setInvalid),m.$parsers.push(l),m.$formatters.push(l),a.on("input",u),g||a.on("focus",function(e){d.setFocused(!0)}).on("blur",function(e){d.setFocused(!1),u()}),r.$on("$destroy",function(){d.setFocused(!1),d.setHasValue(!1),d.input=null})}}return{restrict:"E",require:["^?mdInputContainer","?ngModel"],link:r}}function s(e){function n(n,i,r,a){function s(e){return c.text(String(i.val()||e||"").length+"/"+o),e}var o,l=a[0],u=a[1],c=t.element('<div class="md-char-counter">'),d=t.element(u.element[0].querySelector("[md-maxlength]"));r.$set("ngTrim","false");var f=["ng-messages","data-ng-messages","x-ng-messages","[ng-messages]","[data-ng-messages]","[x-ng-messages]"],m=u.element[0].querySelector(f.join(","));m?t.element(m).prepend(c):d.after(c),l.$formatters.push(s),l.$viewChangeListeners.push(s),i.on("input keydown keyup",function(){s()}),n.$watch(r.mdMaxlength,function(n){o=n,t.isNumber(n)&&n>0?(c.parent().length||e.enter(c,u.element,d),s()):e.leave(c)}),l.$validators["md-maxlength"]=function(e,n){return!t.isNumber(o)||0>o?!0:(e||i.val()||n||"").length<=o}}return{restrict:"A",require:["ngModel","^mdInputContainer"],link:n}}function o(e){function n(e,n,i,r){if(r){var a=r.element.find("label"),s=t.isDefined(r.element.attr("md-no-float"));if(a&&a.length||s)return void r.setHasPlaceholder(!0);var o=i.placeholder;if(n.removeAttr("placeholder"),r.input&&"MD-SELECT"!=r.input[0].nodeName){var l='<label ng-click="delegateClick()">'+o+"</label>";r.element.addClass("md-icon-float"),r.element.prepend(l)}}}return{restrict:"A",require:"^^?mdInputContainer",priority:200,link:n}}function l(){function e(e,t,n,i){i&&(i.setHasMessages(!0),e.$on("$destroy",function(){i.setHasMessages(!1)}))}return{restrict:"EA",link:e,require:"^^?mdInputContainer"}}t.module("material.components.input",["material.core"]).directive("mdInputContainer",i).directive("label",r).directive("input",a).directive("textarea",a).directive("mdMaxlength",s).directive("placeholder",o).directive("ngMessages",l),i.$inject=["$mdTheming","$parse"],a.$inject=["$mdUtil","$window","$mdAria"],s.$inject=["$animate"],o.$inject=["$log"]}(window,window.angular);