diff --git a/ionic/components.js b/ionic/components.js index e3a5d5851b..255c004815 100644 --- a/ionic/components.js +++ b/ionic/components.js @@ -24,5 +24,5 @@ export * from 'ionic/components/radio/radio' // export * from 'ionic/components/split-view/split-view' export * from 'ionic/components/segment/segment' export * from 'ionic/components/switch/switch' -//export * from 'ionic/components/tabs/tabs' -//export * from 'ionic/components/tabs/tab' +export * from 'ionic/components/tabs/tabs' +export * from 'ionic/components/tabs/tab' diff --git a/ionic/components/app/structure.scss b/ionic/components/app/structure.scss index af24c56770..e216427834 100644 --- a/ionic/components/app/structure.scss +++ b/ionic/components/app/structure.scss @@ -24,6 +24,18 @@ ion-app { padding: 0; } +ion-tabs { + display: flex; + flex-direction: column; + + overflow: hidden; + height: 100%; + max-width: 100%; + max-height: 100%; + margin: 0; + padding: 0; +} + ion-nav { position: absolute; top: 0; diff --git a/ionic/components/tabs/tab.js b/ionic/components/tabs/tab.js index c248512e57..485695b35b 100644 --- a/ionic/components/tabs/tab.js +++ b/ionic/components/tabs/tab.js @@ -1,62 +1,73 @@ -import {Ancestor} from 'angular2/src/core/annotations_impl/visibility'; +import {Parent} from 'angular2/src/core/annotations_impl/visibility'; import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; import {View} from 'angular2/src/core/annotations_impl/view'; import {ElementRef} from 'angular2/src/core/compiler/element_ref'; +import {DynamicComponentLoader} from 'angular2/src/core/compiler/dynamic_component_loader'; +import {Injector} from 'angular2/di'; -import {Tabs} from 'ionic/components/tabs/tabs'; +import {Tabs} from './tabs'; +import {Content} from '../content/content'; import * as util from 'ionic/util'; import {IonicComponent} from 'ionic/config/component'; +import {NavBase} from '../nav/nav-base'; -@Component({ +@Directive({ selector: 'ion-tab', - properties: { - title: 'tab-title', - icon: 'tab-icon', - initial: 'initial' + properties: [ + 'initial', + 'tabTitle', + 'tabIcon' + ], + hostProperties: { + 'contentId': 'attr.id', + 'labeledBy': 'attr.aria-labelledby' + }, + hostAttributes: { + 'role': 'tabpanel' } }) -@View({ - template: ` - - ` -}) export class Tab { constructor( + @Parent() tabs: Tabs, elementRef: ElementRef, - @Ancestor() tabs: Tabs + loader: DynamicComponentLoader, + injector: Injector ) { - // this.nav = new NavBase(element); - // this.domElement = element.domElement; + this.nav = new NavBase(loader, injector); + this.domElement = elementRef.domElement; - // let setHidden = (v) => this.domElement.classList[v?'add':'remove']('hide'); - // let setRole = (v) => this.domElement.setAttribute('role', v); - // let setId = (v) => this.domElement.setAttribute('id', v); - // let setLabelby = (v) => this.domElement.setAttribute('aria-labelledby', v); + this.config = Tab.config.invoke(this); - // this.config = Tab.config.invoke(this); - // this.setHidden = setHidden; + this.tabId = util.nextUid(); + this.contentId = 'tab-content-' + this.tabId; + this.labeledBy = 'tab-item-' + this.tabId; - // this.tabId = util.nextUid(); - // setId('tab-content-' + this.tabId); - // setLabelby('tab-item-' + this.tabId); - // setRole('tabpanel'); - - // this.setSelected(false); tabs.addTab(this); } + setRef(ref) { + this.nav.contentElementRef = ref; + } + set initial(value) { this.nav.initial = value; } setSelected(isSelected) { - this.isSelected = !!isSelected; - //this.setHidden(!this.isSelected); + this.isSelected = isSelected; } } new IonicComponent(Tab, {}); + + +@Directive({ + selector: '[content-anchor]' +}) +class ContentAnchor { + constructor(@Parent() tab: Tab, elementRef: ElementRef) { + tab.setRef(elementRef); + } +} diff --git a/ionic/components/tabs/tabs.js b/ionic/components/tabs/tabs.js index 18c4c115f5..633490b831 100644 --- a/ionic/components/tabs/tabs.js +++ b/ionic/components/tabs/tabs.js @@ -5,7 +5,6 @@ import {ElementRef} from 'angular2/src/core/compiler/element_ref'; import {DynamicComponentLoader} from 'angular2/src/core/compiler/dynamic_component_loader'; import {Injector} from 'angular2/di'; -import {NavBase} from '../nav/nav-base'; import {IonicComponent} from 'ionic/config/component'; import {Tab} from './tab'; @@ -19,7 +18,7 @@ import {Tab} from './tab'; }) @View({ template: ` -