/*! * Angular Material Design * https://github.com/angular/material * @license MIT * v1.0.5-master-f171fd2 */ function MdTab(){function e(e,n,a,s){if(s){var d=s.getTabElementIndex(n),i=t(n,"md-tab-body").remove(),r=t(n,"md-tab-label").remove(),o=s.insertTab({scope:e,parent:e.$parent,index:d,element:n,template:i.html(),label:r.html()},d);e.select=e.select||angular.noop,e.deselect=e.deselect||angular.noop,e.$watch("active",function(e){e&&s.select(o.getIndex())}),e.$watch("disabled",function(){s.refreshIndex()}),e.$watch(function(){return s.getTabElementIndex(n)},function(e){o.index=e,s.updateTabOrder()}),e.$on("$destroy",function(){s.removeTab(o)})}}function t(e,t){for(var n=e[0].children,a=0,s=n.length;s>a;a++){var d=n[a];if(d.tagName===t.toUpperCase())return angular.element(d)}return angular.element()}return{require:"^?mdTabs",terminal:!0,compile:function(n,a){var s=t(n,"md-tab-label"),d=t(n,"md-tab-body");if(0==s.length&&(s=angular.element("<md-tab-label></md-tab-label>"),a.label?s.text(a.label):s.append(n.contents()),0==d.length)){var i=n.contents().detach();d=angular.element("<md-tab-body></md-tab-body>"),d.append(i)}return n.append(s),d.html()&&n.append(d),e},scope:{active:"=?mdActive",disabled:"=?ngDisabled",select:"&?mdOnSelect",deselect:"&?mdOnDeselect"}}}function MdTabItem(){return{require:"^?mdTabs",link:function(e,t,n,a){a&&a.attachRipple(e,t)}}}function MdTabLabel(){return{terminal:!0}}function MdTabScroll(e){return{restrict:"A",compile:function(t,n){var a=e(n.mdTabScroll,null,!0);return function(e,t){t.on("mousewheel",function(t){e.$apply(function(){a(e,{$event:t})})})}}}}function MdTabsController(e,t,n,a,s,d,i,r,o,c){function l(){re.selectedIndex=re.selectedIndex||0,m(),u(),b(),c(t),d.nextTick(function(){ne(),X(),ae(),re.tabs[re.selectedIndex]&&re.tabs[re.selectedIndex].scope.select(),be=!0,K()})}function m(){var e=r.$mdTabsTemplate,t=angular.element(ce.data);t.html(e),o(t.contents())(re.parent),delete r.$mdTabsTemplate}function b(){angular.element(n).on("resize",B),e.$on("$destroy",p)}function u(){e.$watch("$mdTabsCtrl.selectedIndex",w)}function f(e,t){var n=r.$normalize("md-"+e);t&&j(e,t),r.$observe(n,function(t){re[e]=t})}function g(e,t){function n(t){re[e]="false"!==t}var a=r.$normalize("md-"+e);t&&j(e,t),r.hasOwnProperty(a)&&n(r[a]),r.$observe(a,n)}function p(){me=!0,angular.element(n).off("resize",B)}function h(e){angular.element(ce.wrapper).toggleClass("md-stretch-tabs",H()),ae()}function T(e){re.shouldCenterTabs=_()}function x(e,t){e!==t&&(angular.forEach(ce.tabs,function(t){t.style.maxWidth=e+"px"}),d.nextTick(re.updateInkBarStyles))}function v(e,t){e!==t&&(re.maxTabWidth=G(),re.shouldCenterTabs=_(),d.nextTick(function(){re.maxTabWidth=G(),X(re.selectedIndex)}))}function C(e){t[e?"removeClass":"addClass"]("md-no-tab-content")}function $(t){var n=re.shouldCenterTabs?"":"-"+t+"px";angular.element(ce.paging).css(a.CSS.TRANSFORM,"translate3d("+n+", 0, 0)"),e.$broadcast("$mdTabsPaginationChanged")}function I(e,t){e!==t&&ce.tabs[e]&&(X(),V())}function w(t,n){t!==n&&(re.selectedIndex=z(t),re.lastSelectedIndex=n,re.updateInkBarStyles(),ne(),X(t),e.$broadcast("$mdTabsChanged"),re.tabs[n]&&re.tabs[n].scope.deselect(),re.tabs[t]&&re.tabs[t].scope.select())}function k(e){var n=t[0].getElementsByTagName("md-tab");return Array.prototype.indexOf.call(n,e[0])}function y(){y.watcher||(y.watcher=e.$watch(function(){d.nextTick(function(){y.watcher&&t.prop("offsetParent")&&(y.watcher(),y.watcher=null,B())},!1)}))}function P(e){switch(e.keyCode){case a.KEY_CODE.LEFT_ARROW:e.preventDefault(),Q(-1,!0);break;case a.KEY_CODE.RIGHT_ARROW:e.preventDefault(),Q(1,!0);break;case a.KEY_CODE.SPACE:case a.KEY_CODE.ENTER:e.preventDefault(),oe||(re.selectedIndex=re.focusIndex)}re.lastClick=!1}function E(e){oe||(re.focusIndex=re.selectedIndex=e),re.lastClick=!0,d.nextTick(function(){re.tabs[e].element.triggerHandler("click")},!1)}function L(e){re.shouldPaginate&&(e.preventDefault(),re.offsetLeft=de(re.offsetLeft-e.wheelDelta))}function M(){var e,t,n=ce.canvas.clientWidth,a=n+re.offsetLeft;for(e=0;e<ce.tabs.length&&(t=ce.tabs[e],!(t.offsetLeft+t.offsetWidth>a));e++);re.offsetLeft=de(t.offsetLeft)}function S(){var e,t;for(e=0;e<ce.tabs.length&&(t=ce.tabs[e],!(t.offsetLeft+t.offsetWidth>=re.offsetLeft));e++);re.offsetLeft=de(t.offsetLeft+t.offsetWidth-ce.canvas.clientWidth)}function B(){re.lastSelectedIndex=re.selectedIndex,re.offsetLeft=de(re.offsetLeft),d.nextTick(function(){re.updateInkBarStyles(),K()})}function W(e){angular.element(ce.inkBar).toggleClass("ng-hide",e)}function D(e){t.toggleClass("md-dynamic-height",e)}function O(e){if(!me){var t=re.selectedIndex,n=re.tabs.splice(e.getIndex(),1)[0];te(),re.selectedIndex===t&&(n.scope.deselect(),re.tabs[re.selectedIndex]&&re.tabs[re.selectedIndex].scope.select()),d.nextTick(function(){K(),re.offsetLeft=de(re.offsetLeft)})}}function A(e,t){var n=be,a={getIndex:function(){return re.tabs.indexOf(s)},isActive:function(){return this.getIndex()===re.selectedIndex},isLeft:function(){return this.getIndex()<re.selectedIndex},isRight:function(){return this.getIndex()>re.selectedIndex},shouldRender:function(){return!re.noDisconnect||this.isActive()},hasFocus:function(){return!re.lastClick&&re.hasFocus&&this.getIndex()===re.focusIndex},id:d.nextUid()},s=angular.extend(a,e);return angular.isDefined(t)?re.tabs.splice(t,0,s):re.tabs.push(s),Z(),ee(),d.nextTick(function(){K(),n&&re.autoselect&&d.nextTick(function(){d.nextTick(function(){E(re.tabs.indexOf(s))})})}),s}function R(){var e={};return e.wrapper=t[0].getElementsByTagName("md-tabs-wrapper")[0],e.data=t[0].getElementsByTagName("md-tab-data")[0],e.canvas=e.wrapper.getElementsByTagName("md-tabs-canvas")[0],e.paging=e.canvas.getElementsByTagName("md-pagination-wrapper")[0],e.tabs=e.paging.getElementsByTagName("md-tab-item"),e.dummies=e.canvas.getElementsByTagName("md-dummy-tab"),e.inkBar=e.paging.getElementsByTagName("md-ink-bar")[0],e.contentsWrapper=t[0].getElementsByTagName("md-tabs-content-wrapper")[0],e.contents=e.contentsWrapper.getElementsByTagName("md-tab-content"),e}function N(){return re.offsetLeft>0}function F(){var e=ce.tabs[ce.tabs.length-1];return e&&e.offsetLeft+e.offsetWidth>ce.canvas.clientWidth+re.offsetLeft}function H(){switch(re.stretchTabs){case"always":return!0;case"never":return!1;default:return!re.shouldPaginate&&n.matchMedia("(max-width: 600px)").matches}}function _(){return re.centerTabs&&!re.shouldPaginate}function q(){if(re.noPagination||!be)return!1;var e=t.prop("clientWidth");return angular.forEach(R().dummies,function(t){e-=t.offsetWidth}),0>e}function z(e){if(-1===e)return-1;var t,n,a=Math.max(re.tabs.length-e,e);for(t=0;a>=t;t++){if(n=re.tabs[e+t],n&&n.scope.disabled!==!0)return n.getIndex();if(n=re.tabs[e-t],n&&n.scope.disabled!==!0)return n.getIndex()}return e}function j(e,t,n){Object.defineProperty(re,e,{get:function(){return n},set:function(e){var a=n;n=e,t&&t(e,a)}})}function K(){U(),re.maxTabWidth=G(),re.shouldPaginate=q()}function U(){H()?angular.element(ce.paging).css("width",""):angular.element(ce.paging).css("width",Y()+"px")}function Y(){var e=1;return angular.forEach(R().dummies,function(t){e+=Math.max(t.offsetWidth,t.getBoundingClientRect().width)}),Math.ceil(e)}function G(){return t.prop("clientWidth")}function J(){var e=re.tabs[re.selectedIndex],t=re.tabs[re.focusIndex];re.tabs=re.tabs.sort(function(e,t){return e.index-t.index}),re.selectedIndex=re.tabs.indexOf(e),re.focusIndex=re.tabs.indexOf(t)}function Q(e,t){var n,a=t?"focusIndex":"selectedIndex",s=re[a];for(n=s+e;re.tabs[n]&&re.tabs[n].scope.disabled;n+=e);re.tabs[n]&&(re[a]=n)}function V(){R().dummies[re.focusIndex].focus()}function X(e){if(null==e&&(e=re.focusIndex),ce.tabs[e]&&!re.shouldCenterTabs){var t=ce.tabs[e],n=t.offsetLeft,a=t.offsetWidth+n;re.offsetLeft=Math.max(re.offsetLeft,de(a-ce.canvas.clientWidth+64)),re.offsetLeft=Math.min(re.offsetLeft,de(n))}}function Z(){le.forEach(function(e){d.nextTick(e)}),le=[]}function ee(){var e=!1;angular.forEach(re.tabs,function(t){t.template&&(e=!0)}),re.hasContent=e}function te(){re.selectedIndex=z(re.selectedIndex),re.focusIndex=z(re.focusIndex)}function ne(){if(!re.dynamicHeight)return t.css("height","");if(!re.tabs.length)return le.push(ne);var e=ce.contents[re.selectedIndex],n=e?e.offsetHeight:0,a=ce.wrapper.offsetHeight,s=n+a,r=t.prop("clientHeight");if(r!==s){"bottom"===t.attr("md-align-tabs")&&(r-=a,s-=a,void 0!==t.attr("md-border-bottom")&&++r),oe=!0;var o={height:r+"px"},c={height:s+"px"};t.css(o),i(t,{from:o,to:c,easing:"cubic-bezier(0.35, 0, 0.25, 1)",duration:.5}).start().done(function(){t.css({transition:"none",height:""}),d.nextTick(function(){t.css("transition","")}),oe=!1})}}function ae(){if(!ce.tabs[re.selectedIndex])return void angular.element(ce.inkBar).css({left:"auto",right:"auto"});if(!re.tabs.length)return le.push(re.updateInkBarStyles);if(!t.prop("offsetParent"))return y();var e,n=re.selectedIndex,a=ce.paging.offsetWidth,s=ce.tabs[n],i=s.offsetLeft,r=a-i-s.offsetWidth;re.shouldCenterTabs&&(e=Array.prototype.slice.call(ce.tabs).reduce(function(e,t){return e+t.offsetWidth},0),a>e&&d.nextTick(ae,!1)),se(),angular.element(ce.inkBar).css({left:i+"px",right:r+"px"})}function se(){var e=re.selectedIndex,t=re.lastSelectedIndex,n=angular.element(ce.inkBar);angular.isNumber(t)&&n.toggleClass("md-left",t>e).toggleClass("md-right",e>t)}function de(e){if(!ce.tabs.length||!re.shouldPaginate)return 0;var t=ce.tabs[ce.tabs.length-1],n=t.offsetLeft+t.offsetWidth;return e=Math.max(0,e),e=Math.min(n-ce.canvas.clientWidth,e)}function ie(e,t){var n={colorElement:angular.element(ce.inkBar)};s.attach(e,t,n)}var re=this,oe=!1,ce=R(),le=[],me=!1,be=!1;f("stretchTabs",h),j("focusIndex",I,re.selectedIndex||0),j("offsetLeft",$,0),j("hasContent",C,!1),j("maxTabWidth",x,G()),j("shouldPaginate",v,!1),g("noInkBar",W),g("dynamicHeight",D),g("noPagination"),g("swipeContent"),g("noDisconnect"),g("autoselect"),g("centerTabs",T,!1),g("enableDisconnect"),re.scope=e,re.parent=e.$parent,re.tabs=[],re.lastSelectedIndex=null,re.hasFocus=!1,re.lastClick=!0,re.shouldCenterTabs=_(),re.updatePagination=d.debounce(K,100),re.redirectFocus=V,re.attachRipple=ie,re.insertTab=A,re.removeTab=O,re.select=E,re.scroll=L,re.nextPage=M,re.previousPage=S,re.keydown=P,re.canPageForward=F,re.canPageBack=N,re.refreshIndex=te,re.incrementIndex=Q,re.getTabElementIndex=k,re.updateInkBarStyles=d.debounce(ae,100),re.updateTabOrder=d.debounce(J,100),l()}function MdTabs(){return{scope:{selectedIndex:"=?mdSelected"},template:function(e,t){return t.$mdTabsTemplate=e.html(),'<md-tabs-wrapper> <md-tab-data></md-tab-data> <md-prev-button tabindex="-1" role="button" aria-label="Previous Page" aria-disabled="{{!$mdTabsCtrl.canPageBack()}}" ng-class="{ \'md-disabled\': !$mdTabsCtrl.canPageBack() }" ng-if="$mdTabsCtrl.shouldPaginate" ng-click="$mdTabsCtrl.previousPage()"> <md-icon md-svg-icon="md-tabs-arrow"></md-icon> </md-prev-button> <md-next-button tabindex="-1" role="button" aria-label="Next Page" aria-disabled="{{!$mdTabsCtrl.canPageForward()}}" ng-class="{ \'md-disabled\': !$mdTabsCtrl.canPageForward() }" ng-if="$mdTabsCtrl.shouldPaginate" ng-click="$mdTabsCtrl.nextPage()"> <md-icon md-svg-icon="md-tabs-arrow"></md-icon> </md-next-button> <md-tabs-canvas tabindex="{{ $mdTabsCtrl.hasFocus ? -1 : 0 }}" aria-activedescendant="tab-item-{{$mdTabsCtrl.tabs[$mdTabsCtrl.focusIndex].id}}" ng-focus="$mdTabsCtrl.redirectFocus()" ng-class="{ \'md-paginated\': $mdTabsCtrl.shouldPaginate, \'md-center-tabs\': $mdTabsCtrl.shouldCenterTabs }" ng-keydown="$mdTabsCtrl.keydown($event)" role="tablist"> <md-pagination-wrapper ng-class="{ \'md-center-tabs\': $mdTabsCtrl.shouldCenterTabs }" md-tab-scroll="$mdTabsCtrl.scroll($event)"> <md-tab-item tabindex="-1" class="md-tab" ng-repeat="tab in $mdTabsCtrl.tabs" role="tab" aria-controls="tab-content-{{::tab.id}}" aria-selected="{{tab.isActive()}}" aria-disabled="{{tab.scope.disabled || \'false\'}}" ng-click="$mdTabsCtrl.select(tab.getIndex())" ng-class="{ \'md-active\': tab.isActive(), \'md-focused\': tab.hasFocus(), \'md-disabled\': tab.scope.disabled }" ng-disabled="tab.scope.disabled" md-swipe-left="$mdTabsCtrl.nextPage()" md-swipe-right="$mdTabsCtrl.previousPage()" md-tabs-template="::tab.label" md-scope="::tab.parent"></md-tab-item> <md-ink-bar></md-ink-bar> </md-pagination-wrapper> <div class="_md-visually-hidden md-dummy-wrapper"> <md-dummy-tab class="md-tab" tabindex="-1" id="tab-item-{{::tab.id}}" role="tab" aria-controls="tab-content-{{::tab.id}}" aria-selected="{{tab.isActive()}}" aria-disabled="{{tab.scope.disabled || \'false\'}}" ng-focus="$mdTabsCtrl.hasFocus = true" ng-blur="$mdTabsCtrl.hasFocus = false" ng-repeat="tab in $mdTabsCtrl.tabs" md-tabs-template="::tab.label" md-scope="::tab.parent"></md-dummy-tab> </div> </md-tabs-canvas> </md-tabs-wrapper> <md-tabs-content-wrapper ng-show="$mdTabsCtrl.hasContent && $mdTabsCtrl.selectedIndex >= 0"> <md-tab-content id="tab-content-{{::tab.id}}" role="tabpanel" aria-labelledby="tab-item-{{::tab.id}}" md-swipe-left="$mdTabsCtrl.swipeContent && $mdTabsCtrl.incrementIndex(1)" md-swipe-right="$mdTabsCtrl.swipeContent && $mdTabsCtrl.incrementIndex(-1)" ng-if="$mdTabsCtrl.hasContent" ng-repeat="(index, tab) in $mdTabsCtrl.tabs" ng-class="{ \'md-no-transition\': $mdTabsCtrl.lastSelectedIndex == null, \'md-active\': tab.isActive(), \'md-left\': tab.isLeft(), \'md-right\': tab.isRight(), \'md-no-scroll\': $mdTabsCtrl.dynamicHeight }"> <div md-tabs-template="::tab.template" md-connected-if="tab.isActive()" md-scope="::tab.parent" ng-if="$mdTabsCtrl.enableDisconnect || tab.shouldRender()"></div> </md-tab-content> </md-tabs-content-wrapper>'},controller:"MdTabsController",controllerAs:"$mdTabsCtrl",bindToController:!0}}function MdTabsTemplate(e,t){function n(n,a,s,d){function i(){n.$watch("connected",function(e){e===!1?r():o()}),n.$on("$destroy",o)}function r(){d.enableDisconnect&&t.disconnectScope(c)}function o(){d.enableDisconnect&&t.reconnectScope(c)}if(d){var c=d.enableDisconnect?n.compileScope.$new():n.compileScope;return a.html(n.template),e(a.contents())(c),a.on("DOMSubtreeModified",function(){d.updatePagination(),d.updateInkBarStyles()}),t.nextTick(i)}}return{restrict:"A",link:n,scope:{template:"=mdTabsTemplate",connected:"=?mdConnectedIf",compileScope:"=mdScope"},require:"^?mdTabs"}}goog.provide("ng.material.components.tabs"),goog.require("ng.material.components.icon"),goog.require("ng.material.core"),angular.module("material.components.tabs",["material.core","material.components.icon"]),angular.module("material.components.tabs").directive("mdTab",MdTab),angular.module("material.components.tabs").directive("mdTabItem",MdTabItem),angular.module("material.components.tabs").directive("mdTabLabel",MdTabLabel),angular.module("material.components.tabs").directive("mdTabScroll",MdTabScroll),MdTabScroll.$inject=["$parse"],angular.module("material.components.tabs").controller("MdTabsController",MdTabsController),MdTabsController.$inject=["$scope","$element","$window","$mdConstant","$mdTabInkRipple","$mdUtil","$animateCss","$attrs","$compile","$mdTheming"],angular.module("material.components.tabs").directive("mdTabs",MdTabs),angular.module("material.components.tabs").directive("mdTabsTemplate",MdTabsTemplate),MdTabsTemplate.$inject=["$compile","$mdUtil"],ng.material.components.tabs=angular.module("material.components.tabs");