import Ember from 'ember'; /** Heavily inspired by ic-tabs (https://github.com/instructure/ic-tabs) Three components work together for smooth tabbing. 1. tabs-manager (gh-tabs) 2. tab (gh-tab) 3. tab-pane (gh-tab-pane) ## Usage: The tabs-manager must wrap all tab and tab-pane components, but they can be nested at any level. A tab and its pane are tied together via their order. So, the second tab within a tab manager will activate the second pane within that manager. ```hbs {{#gh-tabs-manager}} {{#gh-tab}} First tab {{/gh-tab}} {{#gh-tab}} Second tab {{/gh-tab}} .... {{#gh-tab-pane}} First pane {{/gh-tab-pane}} {{#gh-tab-pane}} Second pane {{/gh-tab-pane}} {{/gh-tabs-manager}} ``` ## Options: the tabs-manager will send a "selected" action whenever one of its tabs is clicked. ```hbs {{#gh-tabs-manager selected="myAction"}} .... {{/gh-tabs-manager}} ``` ## Styling: Both tab and tab-pane elements have an "active" class applied when they are active. */ var TabsManager = Ember.Component.extend({ activeTab: null, tabs: [], tabPanes: [], // Called when a gh-tab is clicked. select: function (tab) { this.set('activeTab', tab); this.sendAction('selected'); }, // Used by children to find this tabsManager isTabsManager: true, // Register tabs and their panes to allow for // interaction between components. registerTab: function (tab) { this.get('tabs').addObject(tab); }, unregisterTab: function (tab) { this.get('tabs').removeObject(tab); }, registerTabPane: function (tabPane) { this.get('tabPanes').addObject(tabPane); }, unregisterTabPane: function (tabPane) { this.get('tabPanes').removeObject(tabPane); } }); export default TabsManager;