From f9f3022f6a7dcc4fea63409cf993d1de12fb954d Mon Sep 17 00:00:00 2001 From: Adam Bradley Date: Sun, 23 Aug 2015 22:39:46 -0500 Subject: [PATCH] mode configs Closes #61 --- ionic/components/app/app.ts | 6 ++-- ionic/components/aside/aside.ts | 8 ++--- ionic/components/icon/icon.ts | 6 ++-- ionic/config/config.ts | 34 ++++++++++++++++----- ionic/config/modes.ts | 52 +++++++++++++++++++++++++++++++++ ionic/ionic.ts | 1 + ionic/platform/registry.ts | 36 ----------------------- ionic/transitions/transition.ts | 1 - 8 files changed, 90 insertions(+), 54 deletions(-) create mode 100644 ionic/config/modes.ts diff --git a/ionic/components/app/app.ts b/ionic/components/app/app.ts index 48fb0c735b..b5d9b66cfb 100644 --- a/ionic/components/app/app.ts +++ b/ionic/components/app/app.ts @@ -136,8 +136,10 @@ function initApp(window, document, config) { Platform.navigatorPlatform(window.navigator.platform); Platform.load(config); - // on resize be sure to clear out existing window dimensions - window.addEventListener('resize', Platform.winResize); + setTimeout(() => { + // start listening for resizes XXms after the app starts + window.addEventListener('resize', Platform.winResize); + }, 2000); return app; } diff --git a/ionic/components/aside/aside.ts b/ionic/components/aside/aside.ts index 1bd660d289..3a54c11978 100644 --- a/ionic/components/aside/aside.ts +++ b/ionic/components/aside/aside.ts @@ -42,8 +42,8 @@ import {dom} from 'ionic/util' }) export class Aside extends Ion { - constructor(elementRef: ElementRef, ionicConfig: IonicConfig) { - super(elementRef, ionicConfig); + constructor(elementRef: ElementRef, config: IonicConfig) { + super(elementRef, config); this.opening = new EventEmitter('opening'); @@ -133,8 +133,8 @@ export class Aside extends Ion { template: '' }) export class AsideBackdrop extends Ion { - constructor(elementRef: ElementRef, ionicConfig: IonicConfig, @Host() aside: Aside) { - super(elementRef, ionicConfig); + constructor(elementRef: ElementRef, config: IonicConfig, @Host() aside: Aside) { + super(elementRef, config); aside.backdrop = this; diff --git a/ionic/components/icon/icon.ts b/ionic/components/icon/icon.ts index ca2d8ba573..678473e91d 100644 --- a/ionic/components/icon/icon.ts +++ b/ionic/components/icon/icon.ts @@ -77,7 +77,7 @@ export class IconDirective { this.ariaHidden = true; if (forward !== null) { - this.fwdIcon = config.setting('forwardIcon'); + this.iconFwd = config.setting('iconForward'); } if (hostButton) { @@ -103,8 +103,8 @@ export class IconDirective { } onInit() { - if (this.fwdIcon) { - this.name = this.fwdIcon; + if (this.iconFwd) { + this.name = this.iconFwd; } if (!this.name) return; diff --git a/ionic/config/config.ts b/ionic/config/config.ts index 4da5c553e7..b2f76ff593 100644 --- a/ionic/config/config.ts +++ b/ionic/config/config.ts @@ -65,9 +65,21 @@ export class IonicConfig { let platformValue = undefined; for (let i = 0; i < activePlatformKeys.length; i++) { platformObj = platformSettings[ activePlatformKeys[i] ]; - if (platformObj && isDefined(platformObj[arg0])) { - platformValue = platformObj[arg0]; + + if (platformObj) { + if (isDefined(platformObj[arg0])) { + // check assigned platform settings + platformValue = platformObj[arg0]; + + } else if (platformObj.mode) { + // check the platform default mode settings + platformObj = IonicConfig.modeConfig(platformObj.mode); + if (platformObj) { + platformValue = platformObj[arg0]; + } + } } + } if (isDefined(platformValue)) { settings[arg0] = platformValue; @@ -132,14 +144,20 @@ export class IonicConfig { this._settings.platforms = extend(platform.settings(), this._settings.platforms || {}); } - static set global(config) { - globalConfig = config; - } + static modeConfig(mode, config) { + const args = arguments; + + if (args.length === 2) { + // modeConfig('ios', {...}) + modeConfigs[mode] = extend(modeConfigs[mode] || {}, config); + + } else { + // modeConfig('ios') + return modeConfigs[mode]; + } - static get global() { - return globalConfig; } } -let globalConfig = null; +let modeConfigs = {}; diff --git a/ionic/config/modes.ts b/ionic/config/modes.ts new file mode 100644 index 0000000000..dd1d64d0c4 --- /dev/null +++ b/ionic/config/modes.ts @@ -0,0 +1,52 @@ + +import {IonicConfig} from './config'; + + +// iOS Mode Settings +IonicConfig.modeConfig('ios', { + + actionMenuEnter: 'action-menu-slide-in', + actionMenuLeave: 'action-menu-slide-out', + actionMenuCancelIcon: 'ion-close', + actionMenuDestructiveIcon: 'ion-trash-a', + + backButtonText: 'Back', + backButtonIcon: 'ion-ios-arrow-back', + + iconForward: 'ion-ios-arrow-forward', + iconMode: 'ios', + + keyboardScrollAssist: true, + tapPolyfill: false, + + navTitleAlign: 'center', + tabBarPlacement: 'bottom', + viewTransition: 'ios', + +}); + + +// Material Design Mode Settings +IonicConfig.modeConfig('md', { + + actionMenuEnter: 'action-menu-md-slide-in', + actionMenuLeave: 'action-menu-md-slide-out', + actionMenuCancelIcon: 'ion-close', + actionMenuDestructiveIcon: 'ion-trash-a', + + backButtonText: '', + backButtonIcon: 'ion-android-arrow-back', + + iconForward: '', + iconMode: 'md', + + keyboardScrollAssist: true, + tapPolyfill: false, + + navTitleAlign: 'left', + tabBarPlacement: 'top', + viewTransition: 'md' + + type: 'overlay', + mdRipple: true, +}); diff --git a/ionic/ionic.ts b/ionic/ionic.ts index 1ddb0984db..72709fc48c 100644 --- a/ionic/ionic.ts +++ b/ionic/ionic.ts @@ -1,5 +1,6 @@ export * from './config/config' +export * from './config/modes' export * from './config/annotations' export * from './net/http' diff --git a/ionic/platform/registry.ts b/ionic/platform/registry.ts index 693f9a6d47..e67fdc2ca7 100644 --- a/ionic/platform/registry.ts +++ b/ionic/platform/registry.ts @@ -4,15 +4,7 @@ import {Platform} from './platform'; Platform.register({ name: 'core', settings: { - actionMenuEnter: 'action-menu-slide-in', - actionMenuLeave: 'action-menu-slide-out', - backButtonText: 'Back', - backButtonIcon: 'ion-ios-arrow-back', - forwardIcon: 'ion-ios-arrow-forward', mode: 'ios', - iconMode: 'ios', - navTitleAlign: 'center', - viewTransition: 'ios' } }); Platform.setDefault('core'); @@ -55,21 +47,7 @@ Platform.register({ 'tablet' ], settings: { - actionMenuEnter: 'action-menu-md-slide-in', - actionMenuLeave: 'action-menu-md-slide-out', - actionMenuCancelIcon: 'ion-close', - actionMenuDestructiveIcon: 'ion-trash-a', - backButtonText: '', - backButtonIcon: 'ion-android-arrow-back', - forwardIcon: '', mode: 'md', - iconMode: 'md', - type: 'overlay', - keyboardScrollAssist: true, - mdRipple: true, - tabBarPlacement: 'top', - navTitleAlign: 'left', - viewTransition: 'md' }, isMatch(p) { // "silk" is kindle fire @@ -90,24 +68,12 @@ Platform.register({ 'iphone' ], settings: { - actionMenuEnter: 'action-menu-slide-in', - actionMenuLeave: 'action-menu-slide-out', - actionMenuCancelIcon: 'ion-close', - actionMenuDestructiveIcon: 'ion-trash-a', - backButtonText: 'Back', - backButtonIcon: 'ion-ios-arrow-back', - forwardIcon: 'ion-ios-arrow-forward', mode: 'ios', - iconMode: 'ios', tapPolyfill: function() { // this ensures it's actually a physical iOS device // and not just an a spoofed user-agent string return /iphone|ipad|ipod/i.test(Platform.navigatorPlatform()); }, - keyboardScrollAssist: true, - viewTransition: 'ios', - navTitleAlign: 'center', - mdRipple: false }, isMatch(p) { return p.isPlatform('ios', 'iphone|ipad|ipod'); @@ -147,8 +113,6 @@ Platform.register({ ], settings: { mode: 'wp', - iconMode: 'md', - viewTransition: 'md', }, isMatch(p) { return p.isPlatform('windowsphone', 'windows phone'); diff --git a/ionic/transitions/transition.ts b/ionic/transitions/transition.ts index 68c773b07e..96e8651f25 100644 --- a/ionic/transitions/transition.ts +++ b/ionic/transitions/transition.ts @@ -86,7 +86,6 @@ export class Transition extends Animation { STATIC CLASSES */ static create(nav, opts = {}) { - //const name = opts.animation || IonicConfig.global.setting('viewTransition') || 'ios'; const name = opts.animation || 'ios'; let TransitionClass = TransitionRegistry[name];