diff --git a/playground/basic-example/main.html b/playground/basic-example/main.html index e4456bd680..be67d12c9b 100644 --- a/playground/basic-example/main.html +++ b/playground/basic-example/main.html @@ -1,5 +1,5 @@ - - + + Hello ...

...

...

@@ -7,7 +7,7 @@

...

...

Side menu! -
+
@@ -29,4 +29,4 @@ -->
- + diff --git a/playground/basic-example/main.js b/playground/basic-example/main.js index 21fc20b5ba..3e42498e77 100644 --- a/playground/basic-example/main.js +++ b/playground/basic-example/main.js @@ -1,13 +1,13 @@ import {bootstrap} from 'angular2/core'; import {Component, Template} from 'angular2/angular2'; -import {SideMenu, SideMenuParent} from 'ionic/components'; +import {Aside, AsideParent} from 'ionic/components'; // import 'ionic/components/tabbar/mixins/android/android-tabbar'; @Component({ selector: '[playground-main]' }) @Template({ url: 'main.html', - directives: [SideMenu, SideMenuParent] + directives: [Aside, AsideParent] }) class PlaygroundMain { constructor() { diff --git a/src/components/app/ionic.scss b/src/components/app/ionic.scss index 8510edc05a..5f628d9e92 100644 --- a/src/components/app/ionic.scss +++ b/src/components/app/ionic.scss @@ -20,7 +20,7 @@ @import "../button/button", "../modal/modal", - "../sidemenu/sidemenu", + "../aside/aside", "../switch/switch", "../tabs/tabs", "../tool-bar/tool-bar"; diff --git a/src/components/sidemenu/sidemenu.js b/src/components/aside/aside.js similarity index 86% rename from src/components/sidemenu/sidemenu.js rename to src/components/aside/aside.js index 0d927c91ec..9536b77e0b 100644 --- a/src/components/sidemenu/sidemenu.js +++ b/src/components/aside/aside.js @@ -4,34 +4,34 @@ import {IonConfig} from '../../config'; import {DragGesture} from '../../core/gestures/drag-gesture'; import * as util from '../../util'; -export var sideMenuConfig = new IonConfig(); +export var asideConfig = new IonConfig('sidemenu') // TODO defaults or bindings? -sideMenuConfig.defaults({ +asideConfig.defaults({ side: 'left', - dragThreshold: '50' + dragThreshold: 50 }); @Component({ - selector: 'ion-side-menu', + selector: 'ion-aside', bind: { - side: 'side', + edge: 'side', dragThreshold: 'dragThreshold' }, }) @Template({ inline: `` }) -export class SideMenu extends Ion { +export class Aside extends Ion { constructor( - @Parent() sideMenuParent: SideMenuParent, + @Parent() asideParent: AsideParent, @NgElement() element: NgElement ) { this.domElement = element.domElement; this._drag = {}; - this.gesture = new DragGesture(sideMenuParent.domElement, { + this.gesture = new DragGesture(asideParent.domElement, { onDrag: this.onDrag.bind(this), onDragStart: this.onDragStart.bind(this), onDragEnd: this.onDragEnd.bind(this) @@ -46,7 +46,7 @@ export class SideMenu extends Ion { this.setChanging(false); }) - sideMenuConfig(this); + asideConfig(this); } onDragStart(ev) { if (!this.dragMethods.canStart(ev)) { @@ -97,12 +97,12 @@ export class SideMenu extends Ion { } @Component({ - selector: 'ion-side-menu-parent' + selector: 'ion-aside-parent' }) @Template({ inline: '' }) -export class SideMenuParent { +export class AsideParent { constructor(@NgElement() element: NgElement) { this.domElement = element.domElement; super(); diff --git a/src/components/sidemenu/sidemenu.scss b/src/components/aside/aside.scss similarity index 66% rename from src/components/sidemenu/sidemenu.scss rename to src/components/aside/aside.scss index 353ba21d12..5689efabfe 100644 --- a/src/components/sidemenu/sidemenu.scss +++ b/src/components/aside/aside.scss @@ -1,7 +1,7 @@ -$side-menu-width: 304px; -$side-menu-height: 304px; +$aside-width: 304px; +$aside-height: 304px; -ion-side-menu { +ion-aside { display: block; position: absolute; @@ -17,45 +17,45 @@ ion-side-menu { } &.left { - width: $side-menu-width; + width: $aside-width; left: 0; top: 0; bottom: 0; - transform: translate3d(-$side-menu-width, 0, 0); + transform: translate3d(-$aside-width, 0, 0); &.open { transform: translate3d(0,0,0); } } &.right { - width: $side-menu-width; + width: $aside-width; right: 0; top: 0; bottom: 0; - transform: translate3d($side-menu-width,0,0); + transform: translate3d($aside-width,0,0); &.open { transform: translate3d(0,0,0); } } &.top { - height: $side-menu-width; + height: $aside-width; top: 0; left: 0; right: 0; - transform: translate3d(0,-$side-menu-width,0); + transform: translate3d(0,-$aside-width,0); &.open { transform: translate3d(0,0,0); } } &.bottom { - height: $side-menu-width; + height: $aside-width; bottom: 0; left: 0; right: 0; - transform: translate3d(0,$side-menu-width,0); + transform: translate3d(0,$aside-width,0); &.open { transform: translate3d(0,0,0); } @@ -63,7 +63,7 @@ ion-side-menu { } -ion-side-menu-parent { +ion-aside-parent { position: absolute; top: 0; left: 0; diff --git a/src/components/sidemenu/behaviors/direction/direction.js b/src/components/aside/behaviors/direction/direction.js similarity index 90% rename from src/components/sidemenu/behaviors/direction/direction.js rename to src/components/aside/behaviors/direction/direction.js index fc7e8838cb..c157da2ecb 100644 --- a/src/components/sidemenu/behaviors/direction/direction.js +++ b/src/components/aside/behaviors/direction/direction.js @@ -1,7 +1,7 @@ -import {sideMenuConfig} from '../../sidemenu'; +import {asideConfig} from '../../sidemenu'; import * as util from '../../../../util'; -sideMenuConfig.when(instance => instance.side === 'bottom') +asideConfig.when(instance => instance.side === 'bottom') .mixin(function() { this.gesture.options({ @@ -30,7 +30,7 @@ sideMenuConfig.when(instance => instance.side === 'bottom') }); -sideMenuConfig.when(instance => instance.side === 'left') +asideConfig.when(instance => instance.side === 'left') .mixin(function() { this.domElement.classList.add('left'); @@ -55,7 +55,7 @@ sideMenuConfig.when(instance => instance.side === 'left') }); -sideMenuConfig.when(instance => instance.side === 'right') +asideConfig.when(instance => instance.side === 'right') .mixin(function() { this.domElement.classList.add('right'); @@ -78,7 +78,7 @@ sideMenuConfig.when(instance => instance.side === 'right') }); -sideMenuConfig.when(instance => instance.side === 'top') +asideConfig.when(instance => instance.side === 'top') .mixin(function() { this.domElement.classList.add('top'); diff --git a/src/components/sidemenu/behaviors/direction/directions.scss b/src/components/aside/behaviors/direction/directions.scss similarity index 100% rename from src/components/sidemenu/behaviors/direction/directions.scss rename to src/components/aside/behaviors/direction/directions.scss diff --git a/src/config.js b/src/config.js index 68e528eaa2..9afc21d63a 100644 --- a/src/config.js +++ b/src/config.js @@ -1,13 +1,16 @@ import * as Platform from './platform'; import * as util from './util'; -export function IonConfig() { +export function IonConfig(name) { // TODO automatically add platform class // TODO do bindings/defaults have to be written twice? // TODO maybe add config to IonicComponent annotation // TODO map options to config - function Config(instance) { + function Config(instance, element) { + var platformName = Platform.getPlatform(); + (element.domElement || element).classList.add(`${name}-${platformName}`); + util.defaults(instance, Config._defaults || {}); var conditions = Config._conditions; for (var i = 0, ii = conditions.length; i < ii; i++) { diff --git a/src/core/config/config.js b/src/core/config/config.js new file mode 100644 index 0000000000..47aedea274 --- /dev/null +++ b/src/core/config/config.js @@ -0,0 +1,54 @@ +import * as Platform from '../../platform'; +import * as util from '../../util'; + +export function IonConfig() { + + // TODO automatically add platform class + // TODO do bindings/defaults have to be written twice? + // TODO maybe add config to IonicComponent annotation + // TODO map options to config + function Config(instance, element) { + (element.domElement || element).classList.add('platform-' + Platform.getPlatform()); + + util.defaults(instance, Config._defaults || {}); + var conditions = Config._conditions; + for (var i = 0, ii = conditions.length; i < ii; i++) { + if (conditions[i]._callback(instance)) { + for (var j = 0, jj = conditions[i]._mixins.length; j < jj; j++) { + conditions[i]._mixins[j].call(instance); + } + } + } + } + + Config._conditions = []; + Config.defaults = function(defaults) { + Config._defaults = defaults; + }; + Config.when = function when(callback) { + var condition = new ConfigCondition(callback); + Config._conditions.push(condition); + return condition; + }; + Config.platform = function platform(name) { + return Config.when(() => Platform.getPlatform() === name); + }; + + return Config; +} + +class ConfigCondition { + constructor(callback, mixins = [], template = '') { + this._callback = callback; + this._mixins = mixins; + this._template = template; + } + mixin(mixinFn) { + this._mixins.push(mixinFn); + return this; + } + template(url) { + this._template = url; + return this; + } +} diff --git a/src/core/config/config_spec.js b/src/core/config/config_spec.js new file mode 100644 index 0000000000..d5a4c2c18d --- /dev/null +++ b/src/core/config/config_spec.js @@ -0,0 +1,4 @@ +import {Config} from './config'; + +export function main() { +}