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