refactor(all): cosmetic changes + app.resize as event emitter

This commit is contained in:
Manu Mtz.-Almeida
2017-02-16 16:02:55 +01:00
parent f577e54f38
commit be0b6a8872
12 changed files with 103 additions and 119 deletions

View File

@ -126,7 +126,7 @@ export class ActionSheetCmp {
ionViewDidEnter() { ionViewDidEnter() {
this._plt.focusOutActiveElement(); this._plt.focusOutActiveElement();
let focusableEle = this._elementRef.nativeElement.querySelector('button'); const focusableEle = this._elementRef.nativeElement.querySelector('button');
if (focusableEle) { if (focusableEle) {
focusableEle.focus(); focusableEle.focus();
} }
@ -144,7 +144,7 @@ export class ActionSheetCmp {
} }
click(button: any) { click(button: any) {
if (! this.enabled ) { if (!this.enabled) {
return; return;
} }

View File

@ -4,9 +4,9 @@ import { Transition } from '../../transitions/transition';
export class ActionSheetSlideIn extends Transition { export class ActionSheetSlideIn extends Transition {
init() { init() {
let ele = this.enteringView.pageRef().nativeElement; const ele = this.enteringView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper'));
backdrop.fromTo('opacity', 0.01, 0.4); backdrop.fromTo('opacity', 0.01, 0.4);
wrapper.fromTo('translateY', '100%', '0%'); wrapper.fromTo('translateY', '100%', '0%');
@ -18,9 +18,9 @@ export class ActionSheetSlideIn extends Transition {
export class ActionSheetSlideOut extends Transition { export class ActionSheetSlideOut extends Transition {
init() { init() {
let ele = this.leavingView.pageRef().nativeElement; const ele = this.leavingView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper'));
backdrop.fromTo('opacity', 0.4, 0); backdrop.fromTo('opacity', 0.4, 0);
wrapper.fromTo('translateY', '0%', '100%'); wrapper.fromTo('translateY', '0%', '100%');
@ -32,9 +32,9 @@ export class ActionSheetSlideOut extends Transition {
export class ActionSheetMdSlideIn extends Transition { export class ActionSheetMdSlideIn extends Transition {
init() { init() {
let ele = this.enteringView.pageRef().nativeElement; const ele = this.enteringView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper'));
backdrop.fromTo('opacity', 0.01, 0.26); backdrop.fromTo('opacity', 0.01, 0.26);
wrapper.fromTo('translateY', '100%', '0%'); wrapper.fromTo('translateY', '100%', '0%');
@ -46,9 +46,9 @@ export class ActionSheetMdSlideIn extends Transition {
export class ActionSheetMdSlideOut extends Transition { export class ActionSheetMdSlideOut extends Transition {
init() { init() {
let ele = this.leavingView.pageRef().nativeElement; const ele = this.leavingView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper'));
backdrop.fromTo('opacity', 0.26, 0); backdrop.fromTo('opacity', 0.26, 0);
wrapper.fromTo('translateY', '0%', '100%'); wrapper.fromTo('translateY', '0%', '100%');
@ -60,9 +60,9 @@ export class ActionSheetMdSlideOut extends Transition {
export class ActionSheetWpSlideIn extends Transition { export class ActionSheetWpSlideIn extends Transition {
init() { init() {
let ele = this.enteringView.pageRef().nativeElement; const ele = this.enteringView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper'));
backdrop.fromTo('opacity', 0.01, 0.16); backdrop.fromTo('opacity', 0.01, 0.16);
wrapper.fromTo('translateY', '100%', '0%'); wrapper.fromTo('translateY', '100%', '0%');
@ -74,9 +74,9 @@ export class ActionSheetWpSlideIn extends Transition {
export class ActionSheetWpSlideOut extends Transition { export class ActionSheetWpSlideOut extends Transition {
init() { init() {
let ele = this.leavingView.pageRef().nativeElement; const ele = this.leavingView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.action-sheet-wrapper'));
backdrop.fromTo('opacity', 0.1, 0); backdrop.fromTo('opacity', 0.1, 0);
wrapper.fromTo('translateY', '0%', '100%'); wrapper.fromTo('translateY', '0%', '100%');

View File

@ -7,9 +7,9 @@ import { Transition } from '../../transitions/transition';
*/ */
export class AlertPopIn extends Transition { export class AlertPopIn extends Transition {
init() { init() {
let ele = this.enteringView.pageRef().nativeElement; const ele = this.enteringView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper'));
wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.1, 1); wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.1, 1);
backdrop.fromTo('opacity', 0.01, 0.3); backdrop.fromTo('opacity', 0.01, 0.3);
@ -25,9 +25,9 @@ export class AlertPopIn extends Transition {
export class AlertPopOut extends Transition { export class AlertPopOut extends Transition {
init() { init() {
let ele = this.leavingView.pageRef().nativeElement; const ele = this.leavingView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper'));
wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 0.9); wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 0.9);
backdrop.fromTo('opacity', 0.3, 0); backdrop.fromTo('opacity', 0.3, 0);
@ -43,9 +43,9 @@ export class AlertPopOut extends Transition {
export class AlertMdPopIn extends Transition { export class AlertMdPopIn extends Transition {
init() { init() {
let ele = this.enteringView.pageRef().nativeElement; const ele = this.enteringView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper'));
wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.1, 1); wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.1, 1);
backdrop.fromTo('opacity', 0.01, 0.5); backdrop.fromTo('opacity', 0.01, 0.5);
@ -61,9 +61,9 @@ export class AlertMdPopIn extends Transition {
export class AlertMdPopOut extends Transition { export class AlertMdPopOut extends Transition {
init() { init() {
let ele = this.leavingView.pageRef().nativeElement; const ele = this.leavingView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper'));
wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 0.9); wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 0.9);
backdrop.fromTo('opacity', 0.5, 0); backdrop.fromTo('opacity', 0.5, 0);
@ -79,9 +79,9 @@ export class AlertMdPopOut extends Transition {
export class AlertWpPopIn extends Transition { export class AlertWpPopIn extends Transition {
init() { init() {
let ele = this.enteringView.pageRef().nativeElement; const ele = this.enteringView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper'));
wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.3, 1); wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.3, 1);
backdrop.fromTo('opacity', 0.01, 0.5); backdrop.fromTo('opacity', 0.01, 0.5);
@ -97,9 +97,9 @@ export class AlertWpPopIn extends Transition {
export class AlertWpPopOut extends Transition { export class AlertWpPopOut extends Transition {
init() { init() {
let ele = this.leavingView.pageRef().nativeElement; const ele = this.leavingView.pageRef().nativeElement;
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop')); const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
let wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper')); const wrapper = new Animation(this.plt, ele.querySelector('.alert-wrapper'));
wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 1.3); wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 1.3);
backdrop.fromTo('opacity', 0.5, 0); backdrop.fromTo('opacity', 0.5, 0);

View File

@ -25,14 +25,11 @@ export const AppRootToken = new OpaqueToken('USERROOT');
export class IonicApp extends Ion implements OnInit { export class IonicApp extends Ion implements OnInit {
private _stopScrollPlugin: any; private _stopScrollPlugin: any;
private _tmr: number; private _tmr: number;
@ViewChild('viewport', {read: ViewContainerRef}) _viewport: ViewContainerRef; @ViewChild('viewport', {read: ViewContainerRef}) _viewport: ViewContainerRef;
@ViewChild('modalPortal', { read: OverlayPortal }) _modalPortal: OverlayPortal; @ViewChild('modalPortal', { read: OverlayPortal }) _modalPortal: OverlayPortal;
@ViewChild('overlayPortal', { read: OverlayPortal }) _overlayPortal: OverlayPortal; @ViewChild('overlayPortal', { read: OverlayPortal }) _overlayPortal: OverlayPortal;
@ViewChild('loadingPortal', { read: OverlayPortal }) _loadingPortal: OverlayPortal; @ViewChild('loadingPortal', { read: OverlayPortal }) _loadingPortal: OverlayPortal;
@ViewChild('toastPortal', { read: OverlayPortal }) _toastPortal: OverlayPortal; @ViewChild('toastPortal', { read: OverlayPortal }) _toastPortal: OverlayPortal;
constructor( constructor(
@ -92,9 +89,6 @@ export class IonicApp extends Ion implements OnInit {
this._plt.prepareReady(); this._plt.prepareReady();
} }
/**
* @private
*/
_getPortal(portal?: AppPortal): OverlayPortal { _getPortal(portal?: AppPortal): OverlayPortal {
if (portal === AppPortal.LOADING) { if (portal === AppPortal.LOADING) {
return this._loadingPortal; return this._loadingPortal;
@ -110,9 +104,6 @@ export class IonicApp extends Ion implements OnInit {
return this._overlayPortal; return this._overlayPortal;
} }
/**
* @private
*/
_getActivePortal(): OverlayPortal { _getActivePortal(): OverlayPortal {
const defaultPortal = this._overlayPortal; const defaultPortal = this._overlayPortal;
const modalPortal = this._modalPortal; const modalPortal = this._modalPortal;
@ -139,12 +130,8 @@ export class IonicApp extends Ion implements OnInit {
} else if (hasDefault) { } else if (hasDefault) {
return defaultPortal; return defaultPortal;
} }
} }
/**
* @private
*/
_disableScroll(shouldDisableScroll: boolean) { _disableScroll(shouldDisableScroll: boolean) {
if (shouldDisableScroll) { if (shouldDisableScroll) {
this.stopScroll().then(() => { this.stopScroll().then(() => {

View File

@ -1,7 +1,7 @@
import { Menu } from './menu'; import { Menu } from './menu';
import { MenuType } from './menu-types'; import { MenuType } from './menu-types';
import { Platform } from '../../platform/platform'; import { Platform } from '../../platform/platform';
import { removeArrayItem } from '../../util/util'; import { removeArrayItem, assert } from '../../util/util';
/** /**
@ -296,14 +296,16 @@ export class MenuController {
/** /**
* @private * @private
*/ */
register(menu: Menu) { _register(menu: Menu) {
assert(this._menus.indexOf(menu) < 0, 'menu was already registered');
this._menus.push(menu); this._menus.push(menu);
} }
/** /**
* @private * @private
*/ */
unregister(menu: Menu) { _unregister(menu: Menu) {
assert(this._menus.indexOf(menu) >= 0, 'menu is not registered');
removeArrayItem(this._menus, menu); removeArrayItem(this._menus, menu);
} }

View File

@ -54,20 +54,21 @@ export class MenuType {
if (!this.isOpening && !shouldComplete) { if (!this.isOpening && !shouldComplete) {
isOpen = true; isOpen = true;
} }
const ani = this.ani;
this.ani.onFinish(() => { ani.onFinish(() => {
this.isOpening = false; this.isOpening = false;
done(isOpen); done(isOpen);
}, true); }, true);
let factor = 1 - Math.min(Math.abs(velocity) / 4, 0.7); const factor = 1 - Math.min(Math.abs(velocity) / 4, 0.7);
let dur = this.ani.getDuration() * factor; const dur = ani.getDuration() * factor;
this.ani.progressEnd(shouldComplete, currentStepValue, dur); ani.progressEnd(shouldComplete, currentStepValue, dur);
} }
destroy() { destroy() {
this.ani && this.ani.destroy(); this.ani && this.ani.destroy();
this.ani = null;
} }
} }

View File

@ -359,7 +359,7 @@ export class Menu {
this._cntEle.classList.add('menu-content-' + this.type); this._cntEle.classList.add('menu-content-' + this.type);
// register this menu with the app's menu controller // register this menu with the app's menu controller
this._menuCtrl.register(this); this._menuCtrl._register(this);
} }
/** /**
@ -656,7 +656,7 @@ export class Menu {
* @private * @private
*/ */
ngOnDestroy() { ngOnDestroy() {
this._menuCtrl.unregister(this); this._menuCtrl._unregister(this);
this._events.destroy(); this._events.destroy();
this._gesture && this._gesture.destroy(); this._gesture && this._gesture.destroy();
this._type && this._type.destroy(); this._type && this._type.destroy();

View File

@ -13,7 +13,7 @@ describe('MenuController', () => {
it('should get the only menu', () => { it('should get the only menu', () => {
let someMenu = mockMenu(); let someMenu = mockMenu();
menuCtrl.register(someMenu); menuCtrl._register(someMenu);
let menu = menuCtrl.get(); let menu = menuCtrl.get();
expect(menu).toEqual(someMenu); expect(menu).toEqual(someMenu);
@ -21,7 +21,7 @@ describe('MenuController', () => {
it('should get the only menu if menuId === ""', () => { it('should get the only menu if menuId === ""', () => {
let someMenu = mockMenu(); let someMenu = mockMenu();
menuCtrl.register(someMenu); menuCtrl._register(someMenu);
let menu = menuCtrl.get(''); let menu = menuCtrl.get('');
expect(menu).toEqual(someMenu); expect(menu).toEqual(someMenu);
@ -30,11 +30,11 @@ describe('MenuController', () => {
it('should get the enabled menu when multiple menus', () => { it('should get the enabled menu when multiple menus', () => {
let someMenu1 = mockMenu(); let someMenu1 = mockMenu();
someMenu1.enabled = false; someMenu1.enabled = false;
menuCtrl.register(someMenu1); menuCtrl._register(someMenu1);
let someMenu2 = mockMenu(); let someMenu2 = mockMenu();
someMenu2.enabled = true; someMenu2.enabled = true;
menuCtrl.register(someMenu2); menuCtrl._register(someMenu2);
let menu = menuCtrl.get(); let menu = menuCtrl.get();
expect(menu).toEqual(someMenu2); expect(menu).toEqual(someMenu2);
@ -52,7 +52,7 @@ describe('MenuController', () => {
it('should be null if no matching menus with id', () => { it('should be null if no matching menus with id', () => {
let someMenu = mockMenu(); let someMenu = mockMenu();
someMenu.id = 'whatever'; someMenu.id = 'whatever';
menuCtrl.register(someMenu); menuCtrl._register(someMenu);
let menu = menuCtrl.get('myMenu'); let menu = menuCtrl.get('myMenu');
expect(menu).toEqual(null); expect(menu).toEqual(null);
@ -61,7 +61,7 @@ describe('MenuController', () => {
it('should get the menu by id with matching id', () => { it('should get the menu by id with matching id', () => {
let someMenu = mockMenu(); let someMenu = mockMenu();
someMenu.id = 'myMenu'; someMenu.id = 'myMenu';
menuCtrl.register(someMenu); menuCtrl._register(someMenu);
let menu = menuCtrl.get('myMenu'); let menu = menuCtrl.get('myMenu');
expect(menu).toEqual(someMenu); expect(menu).toEqual(someMenu);
@ -71,7 +71,7 @@ describe('MenuController', () => {
let someMenu = mockMenu(); let someMenu = mockMenu();
someMenu.id = 'myMenu'; someMenu.id = 'myMenu';
someMenu.side = 'left'; someMenu.side = 'left';
menuCtrl.register(someMenu); menuCtrl._register(someMenu);
let menu = menuCtrl.get('myMenu'); let menu = menuCtrl.get('myMenu');
expect(menu).toEqual(someMenu); expect(menu).toEqual(someMenu);
@ -80,11 +80,11 @@ describe('MenuController', () => {
it('should get the menu by id with matching id when multiple menus', () => { it('should get the menu by id with matching id when multiple menus', () => {
let someMenu1 = mockMenu(); let someMenu1 = mockMenu();
someMenu1.id = 'myMenu1'; someMenu1.id = 'myMenu1';
menuCtrl.register(someMenu1); menuCtrl._register(someMenu1);
let someMenu2 = mockMenu(); let someMenu2 = mockMenu();
someMenu2.id = 'myMenu2'; someMenu2.id = 'myMenu2';
menuCtrl.register(someMenu2); menuCtrl._register(someMenu2);
let menu = menuCtrl.get('myMenu1'); let menu = menuCtrl.get('myMenu1');
expect(menu).toEqual(someMenu1); expect(menu).toEqual(someMenu1);
@ -110,7 +110,7 @@ describe('MenuController', () => {
it('should get the only left menu', () => { it('should get the only left menu', () => {
let someMenu = mockMenu(); let someMenu = mockMenu();
someMenu.side = 'left'; someMenu.side = 'left';
menuCtrl.register(someMenu); menuCtrl._register(someMenu);
let menu = menuCtrl.get('left'); let menu = menuCtrl.get('left');
expect(menu).toEqual(someMenu); expect(menu).toEqual(someMenu);
@ -120,12 +120,12 @@ describe('MenuController', () => {
let someMenu1 = mockMenu(); let someMenu1 = mockMenu();
someMenu1.side = 'left'; someMenu1.side = 'left';
someMenu1.enabled = false; someMenu1.enabled = false;
menuCtrl.register(someMenu1); menuCtrl._register(someMenu1);
let someMenu2 = mockMenu(); let someMenu2 = mockMenu();
someMenu2.side = 'left'; someMenu2.side = 'left';
someMenu2.enabled = true; someMenu2.enabled = true;
menuCtrl.register(someMenu2); menuCtrl._register(someMenu2);
let menu = menuCtrl.get('left'); let menu = menuCtrl.get('left');
expect(menu).toEqual(someMenu2); expect(menu).toEqual(someMenu2);
@ -135,12 +135,12 @@ describe('MenuController', () => {
let someMenu1 = mockMenu(); let someMenu1 = mockMenu();
someMenu1.side = 'left'; someMenu1.side = 'left';
someMenu1.enabled = false; someMenu1.enabled = false;
menuCtrl.register(someMenu1); menuCtrl._register(someMenu1);
let someMenu2 = mockMenu(); let someMenu2 = mockMenu();
someMenu2.side = 'left'; someMenu2.side = 'left';
someMenu2.enabled = false; someMenu2.enabled = false;
menuCtrl.register(someMenu2); menuCtrl._register(someMenu2);
let menu = menuCtrl.get('left'); let menu = menuCtrl.get('left');
expect(menu).toEqual(someMenu1); expect(menu).toEqual(someMenu1);
@ -149,7 +149,7 @@ describe('MenuController', () => {
it('should get the only right menu', () => { it('should get the only right menu', () => {
let someMenu = mockMenu(); let someMenu = mockMenu();
someMenu.side = 'right'; someMenu.side = 'right';
menuCtrl.register(someMenu); menuCtrl._register(someMenu);
let menu = menuCtrl.get('right'); let menu = menuCtrl.get('right');
expect(menu).toEqual(someMenu); expect(menu).toEqual(someMenu);
@ -159,7 +159,7 @@ describe('MenuController', () => {
let someMenu = mockMenu(); let someMenu = mockMenu();
someMenu.id = 'myMenu'; someMenu.id = 'myMenu';
someMenu.side = 'left'; someMenu.side = 'left';
menuCtrl.register(someMenu); menuCtrl._register(someMenu);
let menu = menuCtrl.get('left'); let menu = menuCtrl.get('left');
expect(menu).toEqual(someMenu); expect(menu).toEqual(someMenu);
@ -172,7 +172,7 @@ describe('MenuController', () => {
it('should enable a menu', () => { it('should enable a menu', () => {
let someMenu = mockMenu(); let someMenu = mockMenu();
someMenu.enabled = true; someMenu.enabled = true;
menuCtrl.register(someMenu); menuCtrl._register(someMenu);
someMenu._menuCtrl = menuCtrl; someMenu._menuCtrl = menuCtrl;
let menu = menuCtrl.enable(true); let menu = menuCtrl.enable(true);
@ -188,21 +188,21 @@ describe('MenuController', () => {
someMenu1.side = 'left'; someMenu1.side = 'left';
someMenu1.id = 'menu1'; someMenu1.id = 'menu1';
someMenu1._menuCtrl = menuCtrl; someMenu1._menuCtrl = menuCtrl;
menuCtrl.register(someMenu1); menuCtrl._register(someMenu1);
let someMenu2 = mockMenu(); let someMenu2 = mockMenu();
someMenu2.enabled = false; someMenu2.enabled = false;
someMenu2.side = 'left'; someMenu2.side = 'left';
someMenu2.id = 'menu2'; someMenu2.id = 'menu2';
someMenu2._menuCtrl = menuCtrl; someMenu2._menuCtrl = menuCtrl;
menuCtrl.register(someMenu2); menuCtrl._register(someMenu2);
let someMenu3 = mockMenu(); let someMenu3 = mockMenu();
someMenu3.enabled = true; someMenu3.enabled = true;
someMenu3.side = 'right'; someMenu3.side = 'right';
someMenu3.id = 'menu2'; someMenu3.id = 'menu2';
someMenu3._menuCtrl = menuCtrl; someMenu3._menuCtrl = menuCtrl;
menuCtrl.register(someMenu3); menuCtrl._register(someMenu3);
menuCtrl.enable(true, 'menu1'); menuCtrl.enable(true, 'menu1');
expect(someMenu1.enabled).toEqual(true); expect(someMenu1.enabled).toEqual(true);
@ -224,15 +224,15 @@ describe('MenuController', () => {
it('should register a menu', () => { it('should register a menu', () => {
let menu = mockMenu(); let menu = mockMenu();
menuCtrl.register(menu); menuCtrl._register(menu);
expect(menuCtrl.getMenus().length).toEqual(1); expect(menuCtrl.getMenus().length).toEqual(1);
let menu2 = mockMenu(); let menu2 = mockMenu();
menuCtrl.register(menu2); menuCtrl._register(menu2);
expect(menuCtrl.getMenus().length).toEqual(2); expect(menuCtrl.getMenus().length).toEqual(2);
menuCtrl.unregister(menu2); menuCtrl._unregister(menu2);
menuCtrl.unregister(menu); menuCtrl._unregister(menu);
expect(menuCtrl.getMenus().length).toEqual(0); expect(menuCtrl.getMenus().length).toEqual(0);
}); });

View File

@ -9,6 +9,7 @@ import { Platform } from '../../platform/platform';
export class DisplayWhen { export class DisplayWhen {
isMatch: boolean = false; isMatch: boolean = false;
conditions: string[]; conditions: string[];
resizeObs: any;
constructor(conditions: string, public _plt: Platform, public zone: NgZone) { constructor(conditions: string, public _plt: Platform, public zone: NgZone) {
if (!conditions) return; if (!conditions) return;
@ -26,12 +27,7 @@ export class DisplayWhen {
if (this.orientation()) { if (this.orientation()) {
// add window resize listener // add window resize listener
_plt.onResize(() => { this.resizeObs = _plt.resize.subscribe(this.orientation.bind(this));
zone.run(() => {
this.orientation();
});
});
return;
} }
} }
@ -49,8 +45,13 @@ export class DisplayWhen {
return true; return true;
} }
} }
return false;
} }
ngOnDestroy() {
this.resizeObs && this.resizeObs.unsubscribe();
this.resizeObs = null;
}
} }
/** /**
@ -110,6 +111,8 @@ export class ShowWhen extends DisplayWhen {
super(showWhen, plt, zone); super(showWhen, plt, zone);
} }
// ngOnDestroy is implemente in DisplayWhen
} }
/** /**
@ -169,4 +172,6 @@ export class HideWhen extends DisplayWhen {
super(hideWhen, plt, zone); super(hideWhen, plt, zone);
} }
// ngOnDestroy is implemente in DisplayWhen
} }

View File

@ -84,9 +84,7 @@ export function initEvents(s: Slides, plt: Platform): Function {
} }
// onresize // onresize
unregs.push(plt.onResize(() => { let resizeObs = plt.resize.subscribe(() => onResize(s, plt, false));
onResize(s, plt, false);
}));
// Next, Prev, Index // Next, Prev, Index
if (s.nextButton) { if (s.nextButton) {
@ -115,7 +113,8 @@ export function initEvents(s: Slides, plt: Platform): Function {
} }
// return a function that removes all of the added listeners // return a function that removes all of the added listeners
return function() { return function () {
resizeObs.unsubscribe();
unregs.forEach(unreg => { unregs.forEach(unreg => {
unreg(); unreg();
}); });

View File

@ -177,6 +177,8 @@ export class Tabs extends Ion implements AfterViewInit {
id: string; id: string;
/** @internal */ /** @internal */
_selectHistory: string[] = []; _selectHistory: string[] = [];
/** @internal */
_resizeObs: any;
/** /**
* @input {string} The color to use from your Sass `$colors` map. * @input {string} The color to use from your Sass `$colors` map.
@ -284,6 +286,7 @@ export class Tabs extends Ion implements AfterViewInit {
} }
ngOnDestroy() { ngOnDestroy() {
this._resizeObs && this._resizeObs.unsubscribe();
this.parent.unregisterChildNav(this); this.parent.unregisterChildNav(this);
} }
@ -296,7 +299,7 @@ export class Tabs extends Ion implements AfterViewInit {
this._setConfig('tabsHighlight', this.tabsHighlight); this._setConfig('tabsHighlight', this.tabsHighlight);
if (this.tabsHighlight) { if (this.tabsHighlight) {
this._plt.onResize(() => { this._resizeObs = this._plt.resize.subscribe(() => {
this._highlight.select(this.getSelected()); this._highlight.select(this.getSelected());
}); });
} }
@ -364,7 +367,7 @@ export class Tabs extends Ion implements AfterViewInit {
/** /**
* @private * @private
*/ */
add(tab: Tab) { add(tab: Tab): string {
this._tabs.push(tab); this._tabs.push(tab);
return this.id + '-' + (++this._ids); return this.id + '-' + (++this._ids);
} }

View File

@ -38,7 +38,6 @@ export class Platform {
private _ua: string; private _ua: string;
private _qp = new QueryParams(); private _qp = new QueryParams();
private _nPlt: string; private _nPlt: string;
private _onResizes: Array<Function> = [];
private _readyPromise: Promise<any>; private _readyPromise: Promise<any>;
private _readyResolve: any; private _readyResolve: any;
private _bbActions: BackButtonAction[] = []; private _bbActions: BackButtonAction[] = [];
@ -404,6 +403,13 @@ export class Platform {
*/ */
resume: EventEmitter<Event> = new EventEmitter<Event>(); resume: EventEmitter<Event> = new EventEmitter<Event>();
/**
* The resize event emits when the native platform pulls the application
* out from the background. This event would emit when a Cordova app comes
* out from the background, however, it would not fire on a standard web browser.
*/
resize: EventEmitter<Event> = new EventEmitter<Event>();
/** /**
* The back button event is triggered when the user presses the native * The back button event is triggered when the user presses the native
* platform's back button, also referred to as the "hardware" back button. * platform's back button, also referred to as the "hardware" back button.
@ -737,18 +743,6 @@ export class Platform {
} }
} }
/**
* @private
*/
onResize(cb: Function): Function {
const self = this;
self._onResizes.push(cb);
return function() {
removeArrayItem(self._onResizes, cb);
};
}
/** /**
* @private * @private
*/ */
@ -812,14 +806,7 @@ export class Platform {
if (this.hasFocusedTextInput() === false) { if (this.hasFocusedTextInput() === false) {
this._isPortrait = null; this._isPortrait = null;
} }
this.resize.emit();
for (let i = 0; i < this._onResizes.length; i++) {
try {
this._onResizes[i]();
} catch (e) {
console.error(e);
}
}
}, 200); }, 200);
}, { passive: true, zone: true }); }, { passive: true, zone: true });
}, 2000); }, 2000);