/*! * AngularJS Material Design * https://github.com/angular/material * @license MIT * v1.1.18-master-97a1616 */ goog.provide("ngmaterial.components.autocomplete"),goog.require("ngmaterial.components.icon"),goog.require("ngmaterial.components.virtualRepeat"),goog.require("ngmaterial.core"),angular.module("material.components.autocomplete",["material.core","material.components.icon","material.components.virtualRepeat"]),MdAutocompleteCtrl.$inject=["$scope","$element","$mdUtil","$mdConstant","$mdTheming","$window","$animate","$rootElement","$attrs","$q","$log","$mdLiveAnnouncer"],angular.module("material.components.autocomplete").controller("MdAutocompleteCtrl",MdAutocompleteCtrl);var ITEM_HEIGHT=48,MAX_ITEMS=5,MENU_PADDING=8,INPUT_PADDING=2,MODE_STANDARD="standard",MODE_VIRTUAL="virtual";function MdAutocompleteCtrl(p,h,g,t,e,n,o,i,f,a,l,r){var c,u,d,s=this,m=p.itemsExpr.split(/ in /i),$=m[1],C=null,x={},v=!1,b=[],A=!1,M=0,T=null,w=null,D=g.debounce(function(){s.hidden||R()}),I=MODE_VIRTUAL;c="hidden",u=function(e,t){!e&&t?(R(),J(!0,E.Count|E.Selected),C&&(g.disableScrollAround(C.ul),T=function(e){function t(e){e.preventDefault()}return e.on("wheel",t),e.on("touchmove",t),function(){e.off("wheel",t),e.off("touchmove",t)}}(angular.element(C.wrap)))):e&&!t&&(g.enableScrolling(),T&&(T(),T=null))},d=!0,Object.defineProperty(s,c,{get:function(){return d},set:function(e){var t=d;u(d=e,t)}}),s.scope=p,s.parent=p.$parent,s.itemName=m[0],s.matches=[],s.loading=!1,s.hidden=!0,s.index=null,s.id=g.nextUid(),s.isDisabled=null,s.isRequired=null,s.isReadonly=null,s.hasNotFound=!1,s.selectedMessage=p.selectedMessage||"selected",s.keydown=function(e){switch(e.keyCode){case t.KEY_CODE.DOWN_ARROW:if(s.loading||z())return;e.stopPropagation(),e.preventDefault(),s.index=Math.min(s.index+1,s.matches.length-1),Q(),J(!1,E.Selected);break;case t.KEY_CODE.UP_ARROW:if(s.loading||z())return;e.stopPropagation(),e.preventDefault(),s.index=s.index<0?s.matches.length-1:Math.max(0,s.index-1),Q(),J(!1,E.Selected);break;case t.KEY_CODE.TAB:if(O(),s.hidden||s.loading||s.index<0||s.matches.length<1)return;K(s.index);break;case t.KEY_CODE.ENTER:if(s.hidden||s.loading||s.index<0||s.matches.length<1)return;if(z())return;e.stopImmediatePropagation(),e.preventDefault(),K(s.index);break;case t.KEY_CODE.ESCAPE:if(e.preventDefault(),!(V("blur")||!s.hidden||s.loading||V("clear")&&p.searchText))return;e.stopPropagation(),Y(),p.searchText&&V("clear")&&X(),s.hidden=!0,V("blur")&&function(e){e&&(A=v=!1);C.input.blur()}(!0)}},s.blur=function(e){A=!1,v||(s.hidden=F(),oe("ngBlur",{$event:e}))},s.focus=function(e){A=!0,U()&&W()&&te();s.hidden=F(),oe("ngFocus",{$event:e})},s.clear=function(){Y(),X()},s.select=K,s.listEnter=function(){v=!0},s.listLeave=O,s.mouseUp=function(){C.input.focus()},s.getCurrentDisplayValue=j,s.registerSelectedItemWatcher=function(e){-1===b.indexOf(e)&&b.push(e)},s.unregisterSelectedItemWatcher=function(e){var t=b.indexOf(e);-1!==t&&b.splice(t,1)},s.notFoundVisible=ee,s.loadingIsVisible=function(){return s.loading&&!z()},s.positionDropdown=R;var y,E={Count:1,Selected:2};return g.initOptionalProperties(p,f,{searchText:"",selectedItem:null,clearButton:!1,disableVirtualRepeat:!1}),e(h),y=parseInt(p.delay,10)||0,f.$observe("disabled",function(e){s.isDisabled=g.parseAttributeBoolean(e,!1)}),f.$observe("required",function(e){s.isRequired=g.parseAttributeBoolean(e,!1)}),f.$observe("readonly",function(e){s.isReadonly=g.parseAttributeBoolean(e,!1)}),p.$watch("searchText",y?g.debounce(_,y):_),p.$watch("selectedItem",H),angular.element(n).on("resize",D),void p.$on("$destroy",S),void g.nextTick(function(){!function(){var e=function(){var e,t;for(e=h;e.length&&(t=e.attr("md-autocomplete-snap"),!angular.isDefined(t));e=e.parent());if(e.length)return{snap:e[0],wrap:"width"===t.toLowerCase()?e[0]:h.find("md-autocomplete-wrap")[0]};var n=h.find("md-autocomplete-wrap")[0];return{snap:n,wrap:n}}();(C={main:h[0],scrollContainer:h[0].querySelector(".md-virtual-repeat-container, .md-standard-list-container"),scroller:h[0].querySelector(".md-virtual-repeat-scroller, .md-standard-list-scroller"),ul:h.find("ul")[0],input:h.find("input")[0],wrap:e.wrap,snap:e.snap,root:document.body}).li=C.ul.getElementsByTagName("li"),C.$=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=angular.element(e[n]));return t}(C),I=C.scrollContainer.classList.contains("md-standard-list-container")?MODE_STANDARD:MODE_VIRTUAL,w=C.$.input.controller("ngModel")}(),C.$.root.length&&(e(C.$.scrollContainer),C.$.scrollContainer.detach(),C.$.root.append(C.$.scrollContainer),o.pin&&o.pin(C.$.scrollContainer,i)),p.autofocus&&h.on("focus",N),p.inputAriaDescribedBy&&C.input.setAttribute("aria-describedby",p.inputAriaDescribedBy),p.floatingLabel||(p.inputAriaLabel?C.input.setAttribute("aria-label",p.inputAriaLabel):p.inputAriaLabelledBy?C.input.setAttribute("aria-labelledby",p.inputAriaLabelledBy):p.placeholder&&C.input.setAttribute("aria-label",p.placeholder))});function L(){p.requireMatch&&w&&w.$setValidity("md-require-match",!!p.selectedItem||!p.searchText)}function R(){if(!C)return g.nextTick(R,!1,p);var e,t=(p.dropdownItems||MAX_ITEMS)*ITEM_HEIGHT,n=C.wrap.getBoundingClientRect(),o=C.snap.getBoundingClientRect(),i=C.root.getBoundingClientRect(),l=o.bottom-i.top,a=i.bottom-o.top,r=n.left-i.left,c=n.width,u=function(){var e=0,t=h.find("md-input-container");if(t.length){var n=t.find("input");e=t.prop("offsetHeight"),e-=n.prop("offsetTop"),e-=n.prop("offsetHeight"),e+=t.prop("offsetTop")}return e}(),d=p.dropdownPosition,s=i.bottom-o.bottom-MENU_PADDING+g.getViewportTop(),m=o.top-MENU_PADDING;d=d||(ti.right&&(t.left=n.right-e.width+"px");C.$.scrollContainer.css(t)},!1,p)}function N(){C.input.focus()}function S(){if(s.hidden||g.enableScrolling(),angular.element(n).off("resize",D),C){angular.forEach(["ul","scroller","scrollContainer","input"],function(e){C.$[e].remove()})}}function O(){A||s.hidden||C.input.focus(),v=!1,s.hidden=F()}function H(t,n){L(),t?k(t).then(function(e){p.searchText=e,function(t,n){b.forEach(function(e){e(t,n)})}(t,n)}):n&&p.searchText&&k(n).then(function(e){angular.isString(p.searchText)&&e.toString().toLowerCase()===p.searchText.toLowerCase()&&(p.searchText="")}),t!==n&&angular.isFunction(p.itemChange)&&p.itemChange(B(p.selectedItem))}function _(t,n){s.index=p.autoselect?0:-1,t!==n&&(L(),k(p.selectedItem).then(function(e){t!==e&&(p.selectedItem=null,t!==n&&angular.isFunction(p.textChange)&&p.textChange(),W()?te():(q(!(s.matches=[])),J(!0,E.Count)))}))}function P(){return angular.isNumber(p.minLength)?p.minLength:1}function k(e){return a.when(((t=e)&&p.itemText?p.itemText(B(t)):null)||e).then(function(e){return e&&!angular.isString(e)&&l.warn("md-autocomplete: Could not resolve display value to a string. Please check the `md-item-text` attribute."),e});var t}function B(e){if(e){var t={};return s.itemName&&(t[s.itemName]=e),t}}function q(e){s.loading!==e&&(s.loading=e),s.hidden=F()}function F(){return!function(){{if(s.isReadonly)return!1;if(!U())return!1}return W()&&G()||ee()}()}function U(){return!(s.loading&&!G())&&(!z()&&!!A)}function V(e){return!p.escapeOptions||-1!==p.escapeOptions.toLowerCase().indexOf(e)}function G(){return!!s.matches.length}function z(){return!!s.scope.selectedItem}function j(){return k(s.matches[s.index])}function W(){return(p.searchText||"").length>=P()}function K(e){g.nextTick(function(){k(s.matches[e]).then(function(e){var t=C.$.input.controller("ngModel");r.announce(e+" "+s.selectedMessage,"assertive"),t.$setViewValue(e),t.$render()}).finally(function(){p.selectedItem=s.matches[e],q(!1)})},!1)}function Y(){s.index=0,s.matches=[]}function X(){q(!0),p.searchText="";var e=document.createEvent("CustomEvent");e.initCustomEvent("change",!0,!0,{value:""}),C.input.dispatchEvent(e),C.input.blur(),p.searchText="",C.input.focus()}function J(e,t){var n=e?"polite":"assertive",o=[];t&E.Selected&&-1!==s.index&&o.push(j()),t&E.Count&&o.push(a.resolve(function(){switch(s.matches.length){case 0:return"There are no matches available.";case 1:return"There is 1 match available.";default:return"There are "+s.matches.length+" matches available."}}())),a.all(o).then(function(e){r.announce(e.join(" "),n)})}function Q(){C.li[0]&&(I===MODE_STANDARD?function(){var e=C.li[s.index]||C.li[0],t=C.scrollContainer.offsetHeight,n=e&&e.offsetTop||0,o=n+e.clientHeight,i=C.scrollContainer.scrollTop;n=P()&&(A||v)&&!z()}function te(){var e=p.searchText||"",t=e.toLowerCase();!p.noCache&&x[t]?ne(x[t]):function(t){var e=p.$parent.$eval($),n=t.toLowerCase(),o=angular.isArray(e),i=!!e.then;function l(e){x[n]=e,(t||"")===(p.searchText||"")&&ne(e)}o?l(e):i&&function(e){if(!e)return;e=a.when(e),M++,q(!0),g.nextTick(function(){e.then(l).finally(function(){0==--M&&q(!1)})},!0,p)}(e)}(e),s.hidden=F()}function ne(e){s.matches=e,s.hidden=F(),s.loading&&q(!1),p.selectOnMatch&&function(){var n=p.searchText,e=s.matches,t=e[0];1===e.length&&k(t).then(function(e){var t=n===e;p.matchInsensitive&&!t&&(t=n.toLowerCase()===e.toLowerCase()),t&&K(0)})}(),R(),J(!0,E.Count)}function oe(e,t){f[e]&&p.$parent.$eval(f[e],t||{})}}function MdAutocomplete(u){var d="virtual",t=["standard",d];function s(e){return e?(e=e.toLowerCase(),-1'+o+"":""),l=function(){var e=n.find("md-item-template").detach(),t=e.length?e.html():n.html();e.length||n.empty();return""+t+""}(),a=n.html(),r=e.tabindex;return i&&n.attr("md-has-not-found",!0),n.attr("tabindex","-1")," "+(e.mdFloatingLabel?'
'+a+"
":' ')+' '+function(e,t){if(e=e?" "+e:"",c(t))return' ":"")+"
";function c(e){return s(e)!==d}}}}function MdAutocompleteItemScopeDirective(e,d){return{restrict:"AE",compile:function(e,t,u){return function(n,t,e){var o,i,l=n.$mdAutocompleteCtrl,a=l.parent.$new(),r=l.itemName;function c(e,t){a[t]=n[e],n.$watch(e,function(e){d.nextTick(function(){a[t]=e})})}c("$index","$index"),c("item",r),i=o=!1,n.$watch(function(){i||o||(o=!0,n.$$postDigest(function(){i||a.$digest(),o=i=!1}))}),a.$watch(function(){i=!0}),u(a,function(e){t.after(e)})}},terminal:!0,transclude:"element"}}function MdHighlightCtrl(e,t,n){this.$scope=e,this.$element=t,this.$attrs=n,this.regex=null}function MdHighlight(n,o){return{terminal:!0,controller:"MdHighlightCtrl",compile:function(e,t){var i=o(t.mdHighlightText),l=n(e.html());return function(e,t,n,o){o.init(i,l)}}}}MdAutocomplete.$inject=["$$mdSvgRegistry"],angular.module("material.components.autocomplete").directive("mdAutocomplete",MdAutocomplete),MdAutocompleteItemScopeDirective.$inject=["$compile","$mdUtil"],angular.module("material.components.autocomplete").directive("mdAutocompleteParentScope",MdAutocompleteItemScopeDirective),MdHighlightCtrl.$inject=["$scope","$element","$attrs"],angular.module("material.components.autocomplete").controller("MdHighlightCtrl",MdHighlightCtrl),MdHighlightCtrl.prototype.init=function(t,n){this.flags=this.$attrs.mdHighlightFlags||"",this.unregisterFn=this.$scope.$watch(function(e){return{term:t(e),contentText:n(e)}}.bind(this),this.onRender.bind(this),!0),this.$element.on("$destroy",this.unregisterFn)},MdHighlightCtrl.prototype.onRender=function(e,t){var n=e.contentText;null!==this.regex&&e.term===t.term||(this.regex=this.createRegex(e.term,this.flags)),e.term?this.applyRegex(n):this.$element.text(n)},MdHighlightCtrl.prototype.applyRegex=function(e){var t=this.resolveTokens(e);this.$element.empty(),t.forEach(function(e){if(e.isMatch){var t=angular.element('').text(e.text);this.$element.append(t)}else this.$element.append(document.createTextNode(e))}.bind(this))},MdHighlightCtrl.prototype.resolveTokens=function(o){var i=[],n=0;return o.replace(this.regex,function(e,t){l(n,t),i.push({text:e,isMatch:!0}),n=t+e.length}),l(n),i;function l(e,t){var n=o.slice(e,t);n&&i.push(n)}},MdHighlightCtrl.prototype.createRegex=function(e,t){var n="",o="",i=this.sanitizeRegex(e);return 0<=t.indexOf("^")&&(n="^"),0<=t.indexOf("$")&&(o="$"),new RegExp(n+i+o,t.replace(/[$^]/g,""))},MdHighlightCtrl.prototype.sanitizeRegex=function(e){return e&&e.toString().replace(/[\\^$*+?.()|{}[\]]/g,"\\$&")},MdHighlight.$inject=["$interpolate","$parse"],angular.module("material.components.autocomplete").directive("mdHighlightText",MdHighlight),ngmaterial.components.autocomplete=angular.module("material.components.autocomplete");