diff --git a/gulpfile.js b/gulpfile.js index 250f3247fe..c9f3e6d2d5 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -20,6 +20,7 @@ var exec = require('child_process').exec; var babel = require('gulp-babel'); var traceur = require('gulp-traceur'); var webpack = require('gulp-webpack'); +var tsc = require('gulp-typescript'); var lazypipe = require('lazypipe'); var cache = require('gulp-cached'); var connect = require('gulp-connect'); @@ -59,7 +60,7 @@ gulp.task('watch', function() { 'serve', function() { - watch(['ionic/**/*.js', '!ionic/components/*/test/**/*'], function() { + watch(['ionic/**/*.js', 'ionic/**/*.ts', '!ionic/components/*/test/**/*'], function() { runSequence( 'transpile', 'bundle.js', @@ -92,7 +93,7 @@ var traceurOptions = { annotations: true, types: true, outputLanguage: 'es6' -} +}; var babelOptions = { optional: ['es7.decorators'], @@ -122,14 +123,32 @@ var exampleBabelOptions = { } }; +var tscOptions = { + target: 'ES6', + // Don't use the version of typescript that gulp-typescript depends on, we need 1.5 + // see https://github.com/ivogabe/gulp-typescript#typescript-version + typescript: require('typescript'), + allowNonTsExtensions: true, + isolatedModules: true, + //declaration: true, //generate d.ts files + emitDecoratorMetadata: true, + experimentalDecorators: true, + noEmitOnError: false, // ignore errors + rootDir: '.' +} + gulp.task('transpile', function() { - return gulp.src(['ionic/**/*.js', '!ionic/components/*/test/**/*', '!ionic/init.js']) + var stream = gulp.src(['ionic/**/*.ts', 'ionic/**/*.js', '!ionic/components/*/test/**/*', '!ionic/init.js']) .pipe(cache('transpile', { optimizeMemory: true })) - .pipe(traceur(traceurOptions)) - .on('error', function (err) { - console.log("ERROR: " + err.message); - this.emit('end'); - }) + .pipe(tsc(tscOptions, null, tsc.reporter.nullReporter())) + // .on('error', function(error) { + // stream.emit('error', error); + // }) + // .pipe(traceur(traceurOptions)) + // .on('error', function (err) { + // console.log("ERROR: " + err.message); + // this.emit('end'); + // }) .pipe(gulp.dest('dist/js/es6/ionic')) .pipe(babel(babelOptions)) .on('error', function (err) { @@ -137,6 +156,8 @@ gulp.task('transpile', function() { this.emit('end'); }) .pipe(gulp.dest('dist/js/es5/ionic')) + + return stream; }); gulp.task('bundle.js', function() { @@ -166,18 +187,19 @@ gulp.task('bundle.js', function() { gulp.task('examples', function() { var buildTest = lazypipe() - .pipe(traceur, traceurOptions) + //.pipe(traceur, traceurOptions) + .pipe(tsc, tscOptions, null, tsc.reporter.nullReporter()) .pipe(babel, exampleBabelOptions) // Get each test folder with gulp.src return gulp.src('ionic/components/*/test/*/**/*') .pipe(cache('examples', { optimizeMemory: true })) - .pipe(gulpif(/.js$/, buildTest())) + .pipe(gulpif(/.ts$/, buildTest())) .on('error', function (err) { console.log("ERROR: " + err.message); this.emit('end'); }) - .pipe(gulpif(/index.js$/, createIndexHTML())) + .pipe(gulpif(/index.js$/, createIndexHTML())) //TSC changes .ts to .js .pipe(rename(function(file) { file.dirname = file.dirname.replace(path.sep + 'test' + path.sep, path.sep) })) diff --git a/ionic/animations/animation.js b/ionic/animations/animation.ts similarity index 100% rename from ionic/animations/animation.js rename to ionic/animations/animation.ts diff --git a/ionic/animations/builtins.js b/ionic/animations/builtins.ts similarity index 100% rename from ionic/animations/builtins.js rename to ionic/animations/builtins.ts diff --git a/ionic/components.js b/ionic/components.ts similarity index 100% rename from ionic/components.js rename to ionic/components.ts diff --git a/ionic/components/action-menu/action-menu.js b/ionic/components/action-menu/action-menu.ts similarity index 58% rename from ionic/components/action-menu/action-menu.js rename to ionic/components/action-menu/action-menu.ts index db2175bbfc..202b2c5977 100644 --- a/ionic/components/action-menu/action-menu.js +++ b/ionic/components/action-menu/action-menu.ts @@ -6,79 +6,59 @@ * The ActionMenu is a modal menu with options to select based on an action. */ -import {NgIf, NgFor} from 'angular2/angular2'; -import {View} from 'angular2/src/core/annotations_impl/view'; -import {Injectable} from 'angular2/di'; +import {View, Injectable, NgFor, NgIf} from 'angular2/angular2'; -import {Icon} from 'ionic/ionic'; import {IonicApp} from '../app/app'; +import {Overlay} from '../overlay/overlay'; +import {Animation} from '../../animations/animation'; import * as util from 'ionic/util'; -import {Overlay} from '../overlay/overlay'; -import {IonicComponent} from '../../config/annotations'; -import {Animation} from 'ionic/animations/animation'; - -@IonicComponent(ActionMenu) @View({ template: ` -
+
-
{{options.titleText}}
- - +
{{titleText}}
+ +
-
- +
+
`, - directives: [Icon, NgIf, NgFor] + directives: [NgFor, NgIf] }) -@Injectable() -export class ActionMenu extends Overlay { +class ActionMenuDirective { - static get config() { - return { - selector: 'ion-action-menu', - host: { - '[style.z-index]': 'zIndex' - } - } + _cancel() { + this.cancel && this.cancel(); + return this.overlayRef.close(); } - constructor(app: IonicApp) { - super(app); - - this.extendOptions({ - destructiveButtonClicked: util.noop, - buttonClicked: util.noop, - cancel: util.noop, - enterAnimation: 'action-menu-slide-in', - leaveAnimation: 'action-menu-slide-out' - }); - } - - cancel() { - this.options.cancel(); - this.close(); - } - - _destructiveButtonClicked() { - let shouldClose = this.options.destructiveButtonClicked(); + _destructive() { + let shouldClose = this.destructiveButtonClicked(); if (shouldClose === true) { - return this.close(); + return this.overlayRef.close(); } } _buttonClicked(index) { - let shouldClose = this.options.buttonClicked(index); + let shouldClose = this.buttonClicked(index); if (shouldClose === true) { - return this.close(); + return this.overlayRef.close(); } } +} + + +@Injectable() +export class ActionMenu extends Overlay { + constructor(app: IonicApp) { + super(app); + } /** * Create and open a new Action Menu. This is the @@ -86,8 +66,13 @@ export class ActionMenu extends Overlay { * * @return Promise that resolves when the action menu is open. */ - open(opts) { - return this.create(OVERLAY_TYPE, ActionMenu, opts); + open(opts={}) { + let defaults = { + enterAnimation: 'action-menu-slide-in', + leaveAnimation: 'action-menu-slide-out' + }; + + return this.create(OVERLAY_TYPE, ActionMenuDirective, util.extend(defaults, opts), opts); } get() { @@ -96,7 +81,7 @@ export class ActionMenu extends Overlay { } -const OVERLAY_TYPE = 'actionmenu'; +const OVERLAY_TYPE = 'action-menu'; /** diff --git a/ionic/components/action-menu/test/basic/index.js b/ionic/components/action-menu/test/basic/index.ts similarity index 63% rename from ionic/components/action-menu/test/basic/index.js rename to ionic/components/action-menu/test/basic/index.ts index 2f9b55a854..9e57f8b95d 100644 --- a/ionic/components/action-menu/test/basic/index.js +++ b/ionic/components/action-menu/test/basic/index.ts @@ -1,25 +1,23 @@ -import {Component} from 'angular2/src/core/annotations_impl/annotations'; +import {Component} from 'angular2/angular2'; -import {IonicView} from 'ionic/ionic'; -import {ActionMenu} from 'ionic/components/action-menu/action-menu'; +import {IonicView, ActionMenu} from 'ionic/ionic'; @Component({ - selector: 'ion-app', - appInjector: [ActionMenu] + selector: 'ion-app' }) @IonicView({ templateUrl: 'main.html' }) class IonicApp { - constructor(ActionMenu: ActionMenu) { - this.ActionMenu = ActionMenu; + constructor(actionMenu: ActionMenu) { + this.actionMenu = actionMenu; } openMenu() { - this.ActionMenu.open({ + this.actionMenu.open({ buttons: [ { text: 'Share This' }, { text: 'Move' } @@ -39,8 +37,8 @@ class IonicApp { return true; } - }).then(actionMenu => { - this.actionMenu = actionMenu; + }).then(actionMenuRef => { + this.actionMenuRef = actionMenuRef; }); } diff --git a/ionic/components/alert/alert.js b/ionic/components/alert/alert.ts similarity index 100% rename from ionic/components/alert/alert.js rename to ionic/components/alert/alert.ts diff --git a/ionic/components/alert/test/basic/index.js b/ionic/components/alert/test/basic/index.ts similarity index 84% rename from ionic/components/alert/test/basic/index.js rename to ionic/components/alert/test/basic/index.ts index 9d67db658e..f7ec13ba51 100644 --- a/ionic/components/alert/test/basic/index.js +++ b/ionic/components/alert/test/basic/index.ts @@ -1,4 +1,4 @@ -import {Component} from 'angular2/src/core/annotations_impl/annotations'; +import {Component} from 'angular2/angular2'; import {View} from 'angular2/src/core/annotations_impl/view'; import {IonicView} from 'ionic/ionic'; diff --git a/ionic/components/app/app.js b/ionic/components/app/app.ts similarity index 82% rename from ionic/components/app/app.js rename to ionic/components/app/app.ts index 0250b35e27..3f593a170b 100644 --- a/ionic/components/app/app.js +++ b/ionic/components/app/app.ts @@ -1,8 +1,5 @@ -import {bootstrap} from 'angular2/angular2'; +import {bootstrap, Compiler, ElementRef, NgZone, bind, ViewRef} from 'angular2/angular2'; import {AppViewManager} from 'angular2/src/core/compiler/view_manager'; -import {Compiler} from 'angular2/angular2'; -import {ElementRef} from 'angular2/src/core/compiler/element_ref'; -import {bind} from 'angular2/di'; import {ViewContainerRef} from 'angular2/src/core/compiler/view_container_ref'; import {NgZone} from 'angular2/src/core/zone/ng_zone'; @@ -12,6 +9,10 @@ import {Platform} from '../../platform/platform'; import {Registry} from '../../registry'; import * as util from '../../util/util'; +// injectables +import {ActionMenu} from '../action-menu/action-menu'; +import {Modal} from '../modal/modal'; + export class IonicApp { @@ -77,7 +78,7 @@ export class IonicApp { * @param Component the ComponentType to create and insert * @return Promise that resolves with the ContainerRef created */ - appendComponent(ComponentType: Type) { + appendComponent(ComponentType: Type, context=null) { return new Promise((resolve, reject) => { let injector = this.injector(); let compiler = injector.get(Compiler); @@ -86,19 +87,18 @@ export class IonicApp { let viewContainerLocation = rootComponentRef.location; compiler.compileInHost(ComponentType).then(protoViewRef => { - let atIndex = 0; - let context = null; let hostViewRef = viewMngr.createViewInContainer( viewContainerLocation, atIndex, protoViewRef, - context, + null, injector); hostViewRef.elementRef = new ElementRef(hostViewRef, 0, viewMngr._renderer); hostViewRef.instance = viewMngr.getComponent(hostViewRef.elementRef); + util.extend(hostViewRef.instance, context); hostViewRef.dispose = () => { viewMngr.destroyViewInContainer(viewContainerLocation, 0, 0, hostViewRef.viewRef); @@ -107,30 +107,31 @@ export class IonicApp { resolve(hostViewRef); }).catch(err => { - console.error('IonicApp appendComponent:', err); + console.error('appendComponent:', err); reject(err); }); }); } - applyCss(bodyEle, platform, config) { - let className = bodyEle.className; - + applyBodyCss(bodyClassList, platform, config) { let versions = platform.versions(); platform.platforms().forEach(platformName => { - // platform-ios platform-ios_8 platform-ios_8_3 - let platformClass = ' platform-' + platformName; - className += platformClass; + // platform-ios + let platformClass = 'platform-' + platformName; + bodyClassList.add(platformClass); let platformVersion = versions[platformName]; if (platformVersion) { + // platform-ios_8 platformClass += '_' + platformVersion.major; - className += platformClass + platformClass + '_' + platformVersion.minor; + bodyClassList.add(platformClass); + + // platform-ios_8_3 + bodyClassList.add(platformClass + '_' + platformVersion.minor); } }); - className += ' mode-' + config.setting('mode'); - bodyEle.className = className.trim(); + bodyClassList.add('mode-' + config.setting('mode')); } isRTL(val) { @@ -176,7 +177,7 @@ export function ionicBootstrap(ComponentType, config, router) { // config and platform settings have been figured out // apply the correct CSS to the app - app.applyCss(document.body, Platform, config); + app.applyBodyCss(document.body.classList, Platform, config); // prepare the ready promise to fire....when ready Platform.prepareReady(config); @@ -188,11 +189,17 @@ export function ionicBootstrap(ComponentType, config, router) { // TODO: don't wire these together app.router = router; + // TODO: probs need a better way to inject global injectables + let actionMenu = new ActionMenu(app); + let modal = new Modal(app); + // add injectables that will be available to all child components let injectableBindings = [ bind(IonicApp).toValue(app), bind(IonicConfig).toValue(config), - bind(IonicRouter).toValue(router) + bind(IonicRouter).toValue(router), + bind(ActionMenu).toValue(actionMenu), + bind(Modal).toValue(modal) ]; bootstrap(ComponentType, injectableBindings).then(appRef => { diff --git a/ionic/components/app/test/animations/index.js b/ionic/components/app/test/animations/index.ts similarity index 91% rename from ionic/components/app/test/animations/index.js rename to ionic/components/app/test/animations/index.ts index 04f5b7f42a..51223a8ac4 100644 --- a/ionic/components/app/test/animations/index.js +++ b/ionic/components/app/test/animations/index.ts @@ -1,8 +1,8 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; -import {View} from 'angular2/src/core/annotations_impl/view'; +import {Component, View} from 'angular2/angular2'; import {Animation} from 'ionic/ionic'; + let opacity = 0.2; let rotateZ = '180deg'; let translateX = '100px'; diff --git a/ionic/components/app/test/app_spec.js b/ionic/components/app/test/app_spec.ts similarity index 100% rename from ionic/components/app/test/app_spec.js rename to ionic/components/app/test/app_spec.ts diff --git a/ionic/components/app/test/barkpark/index.js b/ionic/components/app/test/barkpark/index.ts similarity index 93% rename from ionic/components/app/test/barkpark/index.js rename to ionic/components/app/test/barkpark/index.ts index 6058af9172..bb6c8342d5 100644 --- a/ionic/components/app/test/barkpark/index.js +++ b/ionic/components/app/test/barkpark/index.ts @@ -1,6 +1,4 @@ -import {For, Parent} from 'angular2/angular2' -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; -import {View} from 'angular2/src/core/annotations_impl/view'; +import {Component, View, Directive} from 'angular2/angular2'; import {FormBuilder, Validators, FormDirectives, ControlGroup} from 'angular2/forms'; import {Log} from 'ionic/util' diff --git a/ionic/components/app/test/hn/firebase-debug.js b/ionic/components/app/test/hn/firebase-debug.ts similarity index 100% rename from ionic/components/app/test/hn/firebase-debug.js rename to ionic/components/app/test/hn/firebase-debug.ts diff --git a/ionic/components/app/test/hn/firebase.js b/ionic/components/app/test/hn/firebase.ts similarity index 100% rename from ionic/components/app/test/hn/firebase.js rename to ionic/components/app/test/hn/firebase.ts diff --git a/ionic/components/app/test/hn/hn.js b/ionic/components/app/test/hn/hn.ts similarity index 82% rename from ionic/components/app/test/hn/hn.js rename to ionic/components/app/test/hn/hn.ts index 67599b999b..bd92cf19c6 100644 --- a/ionic/components/app/test/hn/hn.js +++ b/ionic/components/app/test/hn/hn.ts @@ -1,5 +1,3 @@ -import {Promise} from 'angular2/src/facade/async'; - var APIUrl = 'https://hacker-news.firebaseio.com/v0/'; export class HackerNewsClient { @@ -29,5 +27,4 @@ export class HackerNewsClient { } } -var HackerNews = new HackerNewsClient(); -export { HackerNews }; +export var HackerNews = new HackerNewsClient(); diff --git a/ionic/components/app/test/hn/index.js b/ionic/components/app/test/hn/index.ts similarity index 96% rename from ionic/components/app/test/hn/index.js rename to ionic/components/app/test/hn/index.ts index efe2a3f5f7..f56e6ade47 100644 --- a/ionic/components/app/test/hn/index.js +++ b/ionic/components/app/test/hn/index.ts @@ -1,4 +1,4 @@ -import {Component} from 'angular2/src/core/annotations_impl/annotations'; +import {Component} from 'angular2/angular2'; import {NavController, IonicView} from 'ionic/ionic'; diff --git a/ionic/components/app/test/hn/pages/single.js b/ionic/components/app/test/hn/pages/single.ts similarity index 64% rename from ionic/components/app/test/hn/pages/single.js rename to ionic/components/app/test/hn/pages/single.ts index 04be7b8cee..09ce12bdd1 100644 --- a/ionic/components/app/test/hn/pages/single.js +++ b/ionic/components/app/test/hn/pages/single.ts @@ -1,7 +1,4 @@ -import {NgFor} from 'angular2/angular2'; -import {Ancestor} 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 {Component, View, NgFor} from 'angular2/angular2'; import {NavController, NavParams, NavbarTemplate, Navbar, Content, Nav, List, Item} from 'ionic/ionic'; diff --git a/ionic/components/app/test/music/index.js b/ionic/components/app/test/music/index.ts similarity index 92% rename from ionic/components/app/test/music/index.js rename to ionic/components/app/test/music/index.ts index 6a2bf1fec5..f98ef8d7c1 100644 --- a/ionic/components/app/test/music/index.js +++ b/ionic/components/app/test/music/index.ts @@ -1,5 +1,4 @@ -import {ElementRef} from 'angular2/angular2'; -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Component, Directive, ElementRef} from 'angular2/angular2'; import {FormBuilder, Validators, FormDirectives, ControlGroup} from 'angular2/forms'; import {Routable, NavController, IonicView} from 'ionic/ionic'; @@ -17,27 +16,6 @@ class AppPage { } } - -/** - * Main app entry point - */ -@Component({ selector: 'ion-app' }) -@IonicView({ - directives: [ParallaxEffect], - templateUrl: 'main.html' -}) -class IonicApp { - constructor() { - this.rootView = AppPage - - this.menuOpenAmount = 0; - } - - onMenuOpening(amt) { - this.menuOpenAmount = amt; - } -} - @Directive({ selector: '[parallax]', properties: [ @@ -71,6 +49,27 @@ export class ParallaxEffect { } } + +/** + * Main app entry point + */ +@Component({ selector: 'ion-app' }) +@IonicView({ + directives: [ParallaxEffect], + templateUrl: 'main.html' +}) +class IonicApp { + constructor() { + this.rootView = AppPage + + this.menuOpenAmount = 0; + } + + onMenuOpening(amt) { + this.menuOpenAmount = amt; + } +} + export function main(ionicBootstrap) { ionicBootstrap(IonicApp); } diff --git a/ionic/components/app/test/net/index.js b/ionic/components/app/test/net/index.ts similarity index 85% rename from ionic/components/app/test/net/index.js rename to ionic/components/app/test/net/index.ts index 4605608cf3..cc0327b9dd 100644 --- a/ionic/components/app/test/net/index.js +++ b/ionic/components/app/test/net/index.ts @@ -1,18 +1,16 @@ -import {bind, Injector} from 'angular2/di'; -import {bootstrap, ElementRef, NgFor} from 'angular2/angular2' -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; - +import {Component} from 'angular2/angular2'; import {Control, ControlGroup, formDirectives} from 'angular2/forms'; import {IonicView, Http} from 'ionic/ionic'; + let testUrl = 'https://ionic-api-tester.herokuapp.com/json'; let testUrl404 = 'https://ionic-api-tester.herokuapp.com/404'; + @Component({ selector: 'ion-app' }) @IonicView({ - templateUrl: 'main.html', - directives: [formDirectives] + templateUrl: 'main.html' }) class IonicApp { constructor() { diff --git a/ionic/components/app/test/profile/index.js b/ionic/components/app/test/profile/index.ts similarity index 88% rename from ionic/components/app/test/profile/index.js rename to ionic/components/app/test/profile/index.ts index 6e0fc15c73..27273e3928 100644 --- a/ionic/components/app/test/profile/index.js +++ b/ionic/components/app/test/profile/index.ts @@ -1,6 +1,5 @@ -import {bind, Injector} from 'angular2/di'; -import {bootstrap, ElementRef, NgFor} from 'angular2/angular2' -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {ElementRef} from 'angular2/angular2' +import {Component, Directive} from 'angular2/angular2'; import {FormBuilder, Control, ControlGroup, Validators, formDirectives} from 'angular2/forms'; import {Modal, Animation, Content} from 'ionic/ionic'; @@ -8,23 +7,6 @@ import {NavController, NavParams, IonicView} from 'ionic/ionic'; import {dom} from 'ionic/util'; -@Component({ selector: 'ion-app' }) -@IonicView({ - templateUrl: 'main.html', - directives: [ParallaxEffect] -}) -class IonicApp { - constructor() { - - this.items = []; - for(let i = 0; i < 100; i++) { - this.items.push({ - title: 'Item ' + i - }) - } - } -} - @Directive({ selector: '[parallax]', properties: [ @@ -57,6 +39,24 @@ export class ParallaxEffect { } } + +@Component({ selector: 'ion-app' }) +@IonicView({ + templateUrl: 'main.html', + directives: [ParallaxEffect] +}) +class IonicApp { + constructor() { + + this.items = []; + for(let i = 0; i < 100; i++) { + this.items.push({ + title: 'Item ' + i + }) + } + } +} + export function main(ionicBootstrap) { ionicBootstrap(IonicApp); } diff --git a/ionic/components/app/test/sink/index.js b/ionic/components/app/test/sink/index.ts similarity index 95% rename from ionic/components/app/test/sink/index.js rename to ionic/components/app/test/sink/index.ts index 5603c80fe9..90ea4fef4b 100644 --- a/ionic/components/app/test/sink/index.js +++ b/ionic/components/app/test/sink/index.ts @@ -1,4 +1,4 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Component, Directive} from 'angular2/angular2'; import {IonicApp, IonicView, Register} from 'ionic/ionic'; diff --git a/ionic/components/app/test/sink/pages/action-menu.js b/ionic/components/app/test/sink/pages/action-menu.ts similarity index 78% rename from ionic/components/app/test/sink/pages/action-menu.js rename to ionic/components/app/test/sink/pages/action-menu.ts index fac89877e9..8420628a71 100644 --- a/ionic/components/app/test/sink/pages/action-menu.js +++ b/ionic/components/app/test/sink/pages/action-menu.ts @@ -1,10 +1,8 @@ -import {NgFor} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {ActionMenu, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ selector: 'ion-view' }) @@ -28,15 +26,15 @@ import {ActionMenu, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ directives: [NavbarTemplate, Navbar, Content] }) export class ActionMenuPage { - constructor(nav: NavController) { + constructor(nav: NavController, actionMenu: ActionMenu) { this.nav = nav; - window.nav = nav; + this.actionMenu = actionMenu; } openMenu() { console.log('Opening ActionMenu') - ActionMenu.open({ + this.actionMenu.open({ buttons: [ { text: 'Share This' }, { text: 'Move' } @@ -56,8 +54,8 @@ export class ActionMenuPage { if(index == 1) { return false; } return true; } - }).then(actionMenu => { - this.actionMenu = actionMenu; + }).then(actionMenuRef => { + this.actionMenuRef = actionMenuRef; }) } diff --git a/ionic/components/app/test/sink/pages/aside.js b/ionic/components/app/test/sink/pages/aside.ts similarity index 75% rename from ionic/components/app/test/sink/pages/aside.js rename to ionic/components/app/test/sink/pages/aside.ts index 1f66648d43..bd42fd41da 100644 --- a/ionic/components/app/test/sink/pages/aside.js +++ b/ionic/components/app/test/sink/pages/aside.ts @@ -1,11 +1,9 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {List, Item, ActionMenu, Modal, ModalRef, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ selector: 'ion-view' }) diff --git a/ionic/components/app/test/sink/pages/button.js b/ionic/components/app/test/sink/pages/button.ts similarity index 83% rename from ionic/components/app/test/sink/pages/button.js rename to ionic/components/app/test/sink/pages/button.ts index eee8f52ace..4b816bb540 100644 --- a/ionic/components/app/test/sink/pages/button.js +++ b/ionic/components/app/test/sink/pages/button.ts @@ -1,10 +1,8 @@ -import {NgFor, NgIf} from 'angular2/angular2'; -import {Ancestor} 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 {Component, View, NgIf} from 'angular2/angular2'; import {Routable, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ selector: 'ion-view' }) diff --git a/ionic/components/app/test/sink/pages/card.js b/ionic/components/app/test/sink/pages/card.ts similarity index 81% rename from ionic/components/app/test/sink/pages/card.js rename to ionic/components/app/test/sink/pages/card.ts index 648551e9b3..2f27a42749 100644 --- a/ionic/components/app/test/sink/pages/card.js +++ b/ionic/components/app/test/sink/pages/card.ts @@ -1,11 +1,9 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {List, Item, ActionMenu, Modal, ModalRef, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ selector: 'ion-view' }) diff --git a/ionic/components/app/test/sink/pages/form.js b/ionic/components/app/test/sink/pages/form.ts similarity index 83% rename from ionic/components/app/test/sink/pages/form.js rename to ionic/components/app/test/sink/pages/form.ts index 10b42daa20..35172eafdc 100644 --- a/ionic/components/app/test/sink/pages/form.js +++ b/ionic/components/app/test/sink/pages/form.ts @@ -1,13 +1,11 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {FormBuilder, Validators, formDirectives, ControlGroup} from 'angular2/forms'; import {List, Item, Input, ActionMenu, Modal, ModalRef, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ selector: 'ion-view' }) diff --git a/ionic/components/app/test/sink/pages/ionicons.js b/ionic/components/app/test/sink/pages/ionicons.ts similarity index 71% rename from ionic/components/app/test/sink/pages/ionicons.js rename to ionic/components/app/test/sink/pages/ionicons.ts index 372c67ea19..3a18d9b8fd 100644 --- a/ionic/components/app/test/sink/pages/ionicons.js +++ b/ionic/components/app/test/sink/pages/ionicons.ts @@ -1,11 +1,9 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {List, Item, ActionMenu, Modal, ModalRef, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ selector: 'ion-view' }) diff --git a/ionic/components/app/test/sink/pages/list.js b/ionic/components/app/test/sink/pages/list.ts similarity index 78% rename from ionic/components/app/test/sink/pages/list.js rename to ionic/components/app/test/sink/pages/list.ts index 33bf8fe403..840fa3e67e 100644 --- a/ionic/components/app/test/sink/pages/list.js +++ b/ionic/components/app/test/sink/pages/list.ts @@ -1,11 +1,9 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {List, Item, ActionMenu, Modal, ModalRef, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ selector: 'ion-view' }) diff --git a/ionic/components/app/test/sink/pages/modal.js b/ionic/components/app/test/sink/pages/modal.ts similarity index 62% rename from ionic/components/app/test/sink/pages/modal.js rename to ionic/components/app/test/sink/pages/modal.ts index 7b240d4321..a070fc8172 100644 --- a/ionic/components/app/test/sink/pages/modal.js +++ b/ionic/components/app/test/sink/pages/modal.ts @@ -1,13 +1,10 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {IonicView, ActionMenu, Modal, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ - selector: 'ion-view', - appInjector: [Modal] + selector: 'ion-view' }) @IonicView({ template: ` @@ -25,18 +22,17 @@ import {IonicView, ActionMenu, Modal, NavbarTemplate, Navbar, NavController, Con

- `, - directives: [NavbarTemplate, Navbar, Content] + ` }) export class ModalPage { - constructor(Modal: Modal) { - this.Modal = Modal; + constructor(modal: Modal) { + this.modal = modal; } openModal() { console.log('Opening modal'); - this.Modal.open(MyModal, { + this.modal.open(MyModal, { enterAnimation: 'my-fade-in', leaveAnimation: 'my-fade-out', handle: 'my-awesome-modal' @@ -44,12 +40,8 @@ export class ModalPage { } } -@IonicComponent(Modal) + @IonicView({ template: '', }) -export class MyModal extends Modal { - constructor() { - super(); - } -} +export class MyModal {} diff --git a/ionic/components/app/test/sink/pages/nav.js b/ionic/components/app/test/sink/pages/nav.ts similarity index 81% rename from ionic/components/app/test/sink/pages/nav.js rename to ionic/components/app/test/sink/pages/nav.ts index d617144103..5902f19099 100644 --- a/ionic/components/app/test/sink/pages/nav.js +++ b/ionic/components/app/test/sink/pages/nav.ts @@ -1,11 +1,9 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {List, Item, ActionMenu, Modal, ModalRef, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ selector: 'ion-view' }) diff --git a/ionic/components/app/test/sink/pages/search-bar.js b/ionic/components/app/test/sink/pages/search-bar.ts similarity index 80% rename from ionic/components/app/test/sink/pages/search-bar.js rename to ionic/components/app/test/sink/pages/search-bar.ts index dc70285a69..fde7203635 100644 --- a/ionic/components/app/test/sink/pages/search-bar.js +++ b/ionic/components/app/test/sink/pages/search-bar.ts @@ -1,7 +1,4 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {FormBuilder, Validators, formDirectives, ControlGroup} from 'angular2/forms'; import {Segment, SegmentButton, SearchBar, List, Item, ActionMenu, Modal, ModalRef, diff --git a/ionic/components/app/test/sink/pages/segment.js b/ionic/components/app/test/sink/pages/segment.ts similarity index 96% rename from ionic/components/app/test/sink/pages/segment.js rename to ionic/components/app/test/sink/pages/segment.ts index 4284ad7356..a059e4960a 100644 --- a/ionic/components/app/test/sink/pages/segment.js +++ b/ionic/components/app/test/sink/pages/segment.ts @@ -1,6 +1,6 @@ import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; import {Ancestor} from 'angular2/src/core/annotations_impl/visibility'; -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Component, Directive} from 'angular2/angular2'; import {View} from 'angular2/src/core/annotations_impl/view'; import {FormBuilder, Validators, formDirectives, Control, ControlGroup} from 'angular2/forms'; diff --git a/ionic/components/app/test/sink/pages/slides.js b/ionic/components/app/test/sink/pages/slides.ts similarity index 80% rename from ionic/components/app/test/sink/pages/slides.js rename to ionic/components/app/test/sink/pages/slides.ts index 4b0460944a..2eaece5bb4 100644 --- a/ionic/components/app/test/sink/pages/slides.js +++ b/ionic/components/app/test/sink/pages/slides.ts @@ -1,11 +1,9 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {Component, Directive, View} from 'angular2/angular2'; import {Slides, Slide, SlidePager, List, Item, ActionMenu, Modal, ModalRef, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + @Component({ selector: 'ion-view' }) diff --git a/ionic/components/app/test/sink/pages/table-search.js b/ionic/components/app/test/sink/pages/table-search.ts similarity index 82% rename from ionic/components/app/test/sink/pages/table-search.js rename to ionic/components/app/test/sink/pages/table-search.ts index c8b63eaec7..560c7cd159 100644 --- a/ionic/components/app/test/sink/pages/table-search.js +++ b/ionic/components/app/test/sink/pages/table-search.ts @@ -1,13 +1,10 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {NgFor, Injector} from 'angular2/angular2'; +import {Component, Directive, View} from 'angular2/angular2'; import {FormBuilder, Validators, formDirectives, ControlGroup} from 'angular2/forms'; import {Segment, SegmentButton, SearchBar, List, Item, ActionMenu, Modal, ModalRef, NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; - console.log(NavbarTemplate, Navbar, Content, formDirectives); function randomTitle() { var items = ['Pizza', 'Pumpkin', 'Apple', 'Bologna', 'Durian', 'Banana', 'Meat pie']; diff --git a/ionic/components/app/test/sink/pages/tabs.js b/ionic/components/app/test/sink/pages/tabs.js deleted file mode 100644 index 9ee748319a..0000000000 --- a/ionic/components/app/test/sink/pages/tabs.js +++ /dev/null @@ -1,25 +0,0 @@ -import {NgFor, Injector, DomRenderer, ElementRef} from 'angular2/angular2'; -import {Ancestor} 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 {FormBuilder, Validators, formDirectives, ControlGroup} from 'angular2/forms'; - -import {NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; - -@Component({ - selector: 'ion-view' -}) -@View({ - template: ` - Tabs - - - - - `, - directives: [NavbarTemplate, Navbar, Content] -}) -export class TabsPage { - constructor() { - } -} diff --git a/ionic/components/app/test/sink/pages/tabs.ts b/ionic/components/app/test/sink/pages/tabs.ts new file mode 100644 index 0000000000..fcbc8ea1da --- /dev/null +++ b/ionic/components/app/test/sink/pages/tabs.ts @@ -0,0 +1,20 @@ +import {Component, Directive, View} from 'angular2/angular2'; +import {FormBuilder, Validators, formDirectives, ControlGroup} from 'angular2/forms'; + +import {NavbarTemplate, Navbar, NavController, Content} from 'ionic/ionic'; + + +@Component({ + selector: 'ion-view' +}) +@View({ + template: ` + Tabs + + `, + directives: [NavbarTemplate, Navbar, Content] +}) +export class TabsPage { + constructor() { + } +} diff --git a/ionic/components/app/test/snapcat/index.js b/ionic/components/app/test/snapcat/index.ts similarity index 89% rename from ionic/components/app/test/snapcat/index.js rename to ionic/components/app/test/snapcat/index.ts index bf0fe09c52..cbb639eeca 100644 --- a/ionic/components/app/test/snapcat/index.js +++ b/ionic/components/app/test/snapcat/index.ts @@ -1,4 +1,4 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Component, Directive} from 'angular2/angular2'; import {FormBuilder, Control, ControlGroup, Validators, formDirectives} from 'angular2/forms'; import {IonicView, Animation, Modal, NavController, NavParams, IonicComponent} from 'ionic/ionic'; @@ -65,22 +65,21 @@ export class FeedPage { } @Component({ - selector: 'ion-app', - appInjector: [Modal] + selector: 'ion-app' }) @IonicView({ templateUrl: 'main.html' }) class IonicApp { - constructor(Modal: Modal) { - this.Modal = Modal; + constructor(modal: Modal) { + this.modal = modal; this.rootView = FeedPage; } openHeart() { console.log('openHeart'); - this.Modal.open(HeartModal, { + this.modal.open(HeartModal, { enterAnimation: 'my-fade-in', leaveAnimation: 'my-fade-out' }); @@ -89,25 +88,23 @@ class IonicApp { openGear() { console.log('openGear'); - this.Modal.open(SettingsModal, { + this.modal.open(SettingsModal, { enterAnimation: 'my-fade-in', leaveAnimation: 'my-fade-out' }); } } -@IonicComponent(Modal) @IonicView({ template: '' }) -export class SettingsModal extends Modal {} +export class SettingsModal {} -@IonicComponent(Modal) @IonicView({ template: '

20

You\'re pretty awesome

' }) -export class HeartModal extends Modal {} +export class HeartModal {} export function main(ionicBootstrap) { diff --git a/ionic/components/app/test/snapcat/main.html b/ionic/components/app/test/snapcat/main.html index 184caa5b7e..6e7003a8e0 100644 --- a/ionic/components/app/test/snapcat/main.html +++ b/ionic/components/app/test/snapcat/main.html @@ -45,7 +45,6 @@ background-color: #F5F5F5; } .platform-ios ion-toolbar { - height: 64px !important; padding-top: 20px; } ion-content { diff --git a/ionic/components/app/test/typography/index.js b/ionic/components/app/test/typography/index.js deleted file mode 100644 index 59be4e13f7..0000000000 --- a/ionic/components/app/test/typography/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import {Component} from 'angular2/src/core/annotations_impl/annotations'; -import {View} from 'angular2/src/core/annotations_impl/view'; - - -@Component({ selector: 'ion-app' }) -@View({ - templateUrl: 'main.html' -}) -class IonicApp {} - -export function main(ionicBootstrap) { - ionicBootstrap(IonicApp); -} diff --git a/ionic/components/app/test/typography/index.ts b/ionic/components/app/test/typography/index.ts new file mode 100644 index 0000000000..9538b6fadc --- /dev/null +++ b/ionic/components/app/test/typography/index.ts @@ -0,0 +1,12 @@ +import {Component, View} from 'angular2/angular2'; + + +@Component({ selector: 'ion-app' }) +@View({ + templateUrl: 'main.html' +}) +class IonicApp {} + +export function main(ionicBootstrap) { + ionicBootstrap(IonicApp); +} diff --git a/ionic/components/app/test/weather/flickr.ts b/ionic/components/app/test/weather/flickr.ts new file mode 100755 index 0000000000..6cb32d9964 --- /dev/null +++ b/ionic/components/app/test/weather/flickr.ts @@ -0,0 +1,35 @@ +import {Http} from 'ionic/net/http'; + +let FLICKR_API_KEY = '504fd7414f6275eb5b657ddbfba80a2c'; + +let baseUrl = 'https://api.flickr.com/services/rest/'; + +export class Flickr { + constructor() { + + /* + var flickrSearch = $resource(baseUrl, { + method: 'flickr.groups.pools.getPhotos', + group_id: '1463451@N25', + safe_search: 1, + jsoncallback: 'JSON_CALLBACK', + api_key: FLICKR_API_KEY, + format: 'json' + }, { + get: { + method: 'JSONP' + } + }); + */ + } + + static search(tags, lat, lng) { + return new Promise((resolve, reject) => { + Http.get(baseUrl + '?method=flickr.groups.pools.getPhotos&group_id=1463451@N25&safe_search=1&api_key=' + FLICKR_API_KEY + '&format=json&tags=' + tags + '&lat=' + lat + '&lng=' + lng).then((val) => { + resolve(val); + }, (err) => { + reject(httpResponse); + }) + }) + } +} diff --git a/ionic/components/app/test/weather/geo.ts b/ionic/components/app/test/weather/geo.ts new file mode 100755 index 0000000000..c56b15e3e8 --- /dev/null +++ b/ionic/components/app/test/weather/geo.ts @@ -0,0 +1,56 @@ +export class Geo { + static reverseGeocode(lat, lng) { + return new Promise((resolve, reject) => { + + let geocoder = new google.maps.Geocoder(); + + geocoder.geocode({ + 'latLng': new google.maps.LatLng(lat, lng) + }, (results, status) => { + + if (status == google.maps.GeocoderStatus.OK) { + + console.log('Reverse', results); + + if(results.length > 1) { + var r = results[1]; + var a, types; + var parts = []; + var foundLocality = false; + var foundState = false; + + for(var i = 0; i < r.address_components.length; i++) { + a = r.address_components[i]; + types = a.types; + for(var j = 0; j < types.length; j++) { + if(!foundLocality && types[j] == 'locality') { + foundLocality = true; + parts.push(a.long_name); + } else if(!foundState && types[j] == 'administrative_area_level_1') { + foundState = true; + parts.push(a.short_name); + } + } + } + + console.log('Reverse', parts); + resolve(parts.join(', ')); + } + } else { + console.log('reverse fail', results, status); + reject(results); + } + }); + }); + } + + static getLocation() { + return new Promise((resolve, reject) => { + navigator.geolocation.getCurrentPosition((position) => { + resolve(position); + }, (error) => { + reject(error); + }) + }); + } +} diff --git a/ionic/components/app/test/weather/index.ts b/ionic/components/app/test/weather/index.ts new file mode 100755 index 0000000000..32f2896ce3 --- /dev/null +++ b/ionic/components/app/test/weather/index.ts @@ -0,0 +1,123 @@ +import {Component, Directive} from 'angular2/angular2'; +import {FormBuilder, Control, ControlGroup, Validators, formDirectives} from 'angular2/forms'; + +import {IonicView, Animation, Modal, NavController, NavParams, IonicComponent} from 'ionic/ionic'; + +import {Geo} from './geo'; +import {Weather} from './weather'; +import {Flickr} from './flickr'; + +console.log('Imported', Geo, Weather, Flickr); + +@Component({ + selector: 'ion-app', +}) +@IonicView({ + templateUrl: 'main.html' +}) +class WeatherApp { + constructor(modal: Modal) { + this.modal = Modal; + + this.currentLocationString = 'Madison, WI'; + this.current = { + local_tz_short: 'CDT' + }; + + this.activeBgImageIndex = 0; + + /* + $ionicPlatform.ready(function() { + // Hide the status bar + if(window.StatusBar) { + StatusBar.hide(); + } + }); + */ + + } + + onInit() { + this.refreshData(); + } + + showSettings() { + this.modal.open(SettingsModal).then((settingsModal) => { + this.settingsModal = settingsModal; + }); + } + + getBackgroundImage(lat, lng, locString) { + Flickr.search(locString, lat, lng).then((resp) => { + let photos = resp.photos; + if(photos.photo.length) { + this.bgImages = photos.photo; + this.cycleBgImages(); + } + }, (error) => { + console.error('Unable to get Flickr images', error); + }); + } + + getCurrent(lat, lng, locString) { + Weather.getAtLocation(lat, lng).then((resp) => { + this.current = resp.data; + console.log('GOT CURRENT', this.current); + }, (error) => { + alert('Unable to get current conditions'); + console.error(error); + }); + } + + cycleBgImages() { + setTimeout(() => { + if(this.bgImages) { + this.activeBgImage = this.bgImages[this.activeBgImageIndex++ % this.bgImages.length]; + } + }); + } + + refreshData() { + Geo.getLocation().then((position) => { + let lat = position.coords.latitude; + let lng = position.coords.longitude; + + Geo.reverseGeocode(lat, lng).then((locString) => { + this.currentLocationString = locString; + this.getBackgroundImage(lat, lng, locString); + }); + + this.getCurrent(lat, lng); + }, (error) => { + alert('Unable to get current location: ' + error); + }); + } +} + +/* +.controller('SettingsCtrl', function($scope, Settings) { + $scope.settings = Settings.getSettings(); + + // Watch deeply for settings changes, and save them + // if necessary + $scope.$watch('settings', function(v) { + Settings.save(); + }, true); + + $scope.closeSettings = function() { + $scope.modal.hide(); + }; + +}); +*/ + +@IonicView({ + template: '' +}) +export class SettingsModal { + +} + +export function main(ionicBootstrap) { + ionicBootstrap(WeatherApp); +} diff --git a/ionic/components/app/test/weather/weather.ts b/ionic/components/app/test/weather/weather.ts new file mode 100755 index 0000000000..0cefbe41c7 --- /dev/null +++ b/ionic/components/app/test/weather/weather.ts @@ -0,0 +1,12 @@ +import {Http} from 'ionic/net/http'; + +let WUNDERGROUND_API_KEY = '1cc2d3de40fa5af0'; + +let FORECASTIO_KEY = '4cd3c5673825a361eb5ce108103ee84a'; + +export class Weather { + static getAtLocation(lat, lng) { + let url = 'https://api.forecast.io/forecast/' + FORECASTIO_KEY + '/'; + return Http.get(url + lat + ',' + lng); + } +} diff --git a/ionic/components/app/test/yerk/index.js b/ionic/components/app/test/yerk/index.ts similarity index 93% rename from ionic/components/app/test/yerk/index.js rename to ionic/components/app/test/yerk/index.ts index f0530ee4fc..78bc0fb532 100644 --- a/ionic/components/app/test/yerk/index.js +++ b/ionic/components/app/test/yerk/index.ts @@ -1,4 +1,4 @@ -import {Component} from 'angular2/src/core/annotations_impl/annotations'; +import {Component} from 'angular2/angular2'; import {IonicView, NavController} from 'ionic/ionic'; diff --git a/ionic/components/app/util.scss b/ionic/components/app/util.scss old mode 100644 new mode 100755 diff --git a/ionic/components/aside/aside.js b/ionic/components/aside/aside.ts similarity index 62% rename from ionic/components/aside/aside.js rename to ionic/components/aside/aside.ts index 86e032f095..12d864dd0b 100644 --- a/ionic/components/aside/aside.js +++ b/ionic/components/aside/aside.ts @@ -1,8 +1,6 @@ -import {EventEmitter, ElementRef} from 'angular2/angular2' -import {onInit} from 'angular2/src/core/annotations_impl/annotations'; -import {View} from 'angular2/src/core/annotations_impl/view'; +import {View, EventEmitter, ElementRef, onInit} from 'angular2/angular2'; -import {IonicComponent} from '../../config/annotations'; +import {IonicComponent, IonicView} from '../../config/annotations'; import * as types from './extensions/types' import * as gestures from './extensions/gestures' import {dom} from 'ionic/util' @@ -11,40 +9,36 @@ import {dom} from 'ionic/util' * TODO (?) add docs about how to have a root aside and a nested aside, then hide the root one */ -@IonicComponent(Aside) +@IonicComponent({ + selector: 'ion-aside', + properties: [ + 'content', + 'dragThreshold' + ], + defaultProperties: { + 'side': 'left', + 'type': 'reveal' + }, + delegates: { + gesture: [ + [instance => instance.side == 'top', gestures.TopAsideGesture], + [instance => instance.side == 'bottom', gestures.BottomAsideGesture], + [instance => instance.side == 'right', gestures.RightAsideGesture], + [instance => instance.side == 'left', gestures.LeftAsideGesture], + ], + type: [ + [instance => instance.type == 'overlay', types.AsideTypeOverlay], + [instance => instance.type == 'reveal', types.AsideTypeReveal], + [instance => instance.type == 'push', types.AsideTypePush], + ] + }, + events: ['opening'] +}) @View({ template: `` }) export class Aside { - static get config() { - return { - selector: 'ion-aside', - properties: [ - 'content', - 'dragThreshold' - ], - defaultProperties: { - 'side': 'left', - 'type': 'reveal' - }, - delegates: { - gesture: [ - [instance => instance.side == 'top', gestures.TopAsideGesture], - [instance => instance.side == 'bottom', gestures.BottomAsideGesture], - [instance => instance.side == 'right', gestures.RightAsideGesture], - [instance => instance.side == 'left', gestures.LeftAsideGesture], - ], - type: [ - [instance => instance.type == 'overlay', types.AsideTypeOverlay], - [instance => instance.type == 'reveal', types.AsideTypeReveal], - [instance => instance.type == 'push', types.AsideTypePush], - ] - }, - events: ['opening'] - } - } - constructor(elementRef: ElementRef) { this.ele = elementRef.nativeElement diff --git a/ionic/components/aside/config.js b/ionic/components/aside/config.ts similarity index 100% rename from ionic/components/aside/config.js rename to ionic/components/aside/config.ts diff --git a/ionic/components/aside/extensions/gestures.js b/ionic/components/aside/extensions/gestures.ts similarity index 100% rename from ionic/components/aside/extensions/gestures.js rename to ionic/components/aside/extensions/gestures.ts diff --git a/ionic/components/aside/extensions/types.js b/ionic/components/aside/extensions/types.ts similarity index 100% rename from ionic/components/aside/extensions/types.js rename to ionic/components/aside/extensions/types.ts diff --git a/ionic/components/aside/test/basic/index.js b/ionic/components/aside/test/basic/index.ts similarity index 71% rename from ionic/components/aside/test/basic/index.js rename to ionic/components/aside/test/basic/index.ts index b970ea821b..9d51c01a5f 100644 --- a/ionic/components/aside/test/basic/index.js +++ b/ionic/components/aside/test/basic/index.ts @@ -1,4 +1,4 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Component, Directive} from 'angular2/angular2'; import {IonicView} from 'ionic/ionic'; diff --git a/ionic/components/button/test/basic/e2e.js b/ionic/components/button/test/basic/e2e.ts similarity index 100% rename from ionic/components/button/test/basic/e2e.js rename to ionic/components/button/test/basic/e2e.ts diff --git a/ionic/components/button/test/basic/index.js b/ionic/components/button/test/basic/index.js deleted file mode 100644 index d2ce3e90c1..0000000000 --- a/ionic/components/button/test/basic/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; - -import {IonicView} from 'ionic/ionic'; - - -@Component({ selector: 'ion-app' }) -@IonicView({ - templateUrl: 'main.html' -}) -class IonicApp {} - -export function main(ionicBootstrap) { - ionicBootstrap(IonicApp); -} diff --git a/ionic/components/list/test/basic/index.js b/ionic/components/button/test/basic/index.ts similarity index 73% rename from ionic/components/list/test/basic/index.js rename to ionic/components/button/test/basic/index.ts index ca42a5e898..8ae1df8e63 100644 --- a/ionic/components/list/test/basic/index.js +++ b/ionic/components/button/test/basic/index.ts @@ -1,4 +1,4 @@ -import {Component} from 'angular2/src/core/annotations_impl/annotations'; +import {Component} from 'angular2/angular2'; import {IonicView} from 'ionic/ionic'; diff --git a/ionic/components/button/test/block/e2e.js b/ionic/components/button/test/block/e2e.ts similarity index 100% rename from ionic/components/button/test/block/e2e.js rename to ionic/components/button/test/block/e2e.ts diff --git a/ionic/components/button/test/block/index.js b/ionic/components/button/test/block/index.js deleted file mode 100644 index d2ce3e90c1..0000000000 --- a/ionic/components/button/test/block/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; - -import {IonicView} from 'ionic/ionic'; - - -@Component({ selector: 'ion-app' }) -@IonicView({ - templateUrl: 'main.html' -}) -class IonicApp {} - -export function main(ionicBootstrap) { - ionicBootstrap(IonicApp); -} diff --git a/ionic/components/tabs/test/basic/index.js b/ionic/components/button/test/block/index.ts similarity index 73% rename from ionic/components/tabs/test/basic/index.js rename to ionic/components/button/test/block/index.ts index ca42a5e898..8ae1df8e63 100644 --- a/ionic/components/tabs/test/basic/index.js +++ b/ionic/components/button/test/block/index.ts @@ -1,4 +1,4 @@ -import {Component} from 'angular2/src/core/annotations_impl/annotations'; +import {Component} from 'angular2/angular2'; import {IonicView} from 'ionic/ionic'; diff --git a/ionic/components/button/test/clear/e2e.js b/ionic/components/button/test/clear/e2e.ts similarity index 100% rename from ionic/components/button/test/clear/e2e.js rename to ionic/components/button/test/clear/e2e.ts diff --git a/ionic/components/button/test/clear/index.js b/ionic/components/button/test/clear/index.js deleted file mode 100644 index d2ce3e90c1..0000000000 --- a/ionic/components/button/test/clear/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; - -import {IonicView} from 'ionic/ionic'; - - -@Component({ selector: 'ion-app' }) -@IonicView({ - templateUrl: 'main.html' -}) -class IonicApp {} - -export function main(ionicBootstrap) { - ionicBootstrap(IonicApp); -} diff --git a/ionic/components/tabs/test/tab-bar-bottom/index.js b/ionic/components/button/test/clear/index.ts similarity index 73% rename from ionic/components/tabs/test/tab-bar-bottom/index.js rename to ionic/components/button/test/clear/index.ts index ca42a5e898..8ae1df8e63 100644 --- a/ionic/components/tabs/test/tab-bar-bottom/index.js +++ b/ionic/components/button/test/clear/index.ts @@ -1,4 +1,4 @@ -import {Component} from 'angular2/src/core/annotations_impl/annotations'; +import {Component} from 'angular2/angular2'; import {IonicView} from 'ionic/ionic'; diff --git a/ionic/components/button/test/full/e2e.js b/ionic/components/button/test/full/e2e.ts similarity index 100% rename from ionic/components/button/test/full/e2e.js rename to ionic/components/button/test/full/e2e.ts diff --git a/ionic/components/button/test/full/index.js b/ionic/components/button/test/full/index.js deleted file mode 100644 index d2ce3e90c1..0000000000 --- a/ionic/components/button/test/full/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; - -import {IonicView} from 'ionic/ionic'; - - -@Component({ selector: 'ion-app' }) -@IonicView({ - templateUrl: 'main.html' -}) -class IonicApp {} - -export function main(ionicBootstrap) { - ionicBootstrap(IonicApp); -} diff --git a/ionic/components/tabs/test/tab-bar-icons/index.js b/ionic/components/button/test/full/index.ts similarity index 73% rename from ionic/components/tabs/test/tab-bar-icons/index.js rename to ionic/components/button/test/full/index.ts index ca42a5e898..8ae1df8e63 100644 --- a/ionic/components/tabs/test/tab-bar-icons/index.js +++ b/ionic/components/button/test/full/index.ts @@ -1,4 +1,4 @@ -import {Component} from 'angular2/src/core/annotations_impl/annotations'; +import {Component} from 'angular2/angular2'; import {IonicView} from 'ionic/ionic'; diff --git a/ionic/components/button/test/icons/e2e.js b/ionic/components/button/test/icons/e2e.ts similarity index 100% rename from ionic/components/button/test/icons/e2e.js rename to ionic/components/button/test/icons/e2e.ts diff --git a/ionic/components/button/test/icons/index.js b/ionic/components/button/test/icons/index.js deleted file mode 100644 index d2ce3e90c1..0000000000 --- a/ionic/components/button/test/icons/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; - -import {IonicView} from 'ionic/ionic'; - - -@Component({ selector: 'ion-app' }) -@IonicView({ - templateUrl: 'main.html' -}) -class IonicApp {} - -export function main(ionicBootstrap) { - ionicBootstrap(IonicApp); -} diff --git a/ionic/components/button/test/icons/index.ts b/ionic/components/button/test/icons/index.ts new file mode 100644 index 0000000000..8ae1df8e63 --- /dev/null +++ b/ionic/components/button/test/icons/index.ts @@ -0,0 +1,14 @@ +import {Component} from 'angular2/angular2'; + +import {IonicView} from 'ionic/ionic'; + + +@Component({ selector: 'ion-app' }) +@IonicView({ + templateUrl: 'main.html' +}) +class IonicApp {} + +export function main(ionicBootstrap) { + ionicBootstrap(IonicApp); +} diff --git a/ionic/components/button/test/outline/e2e.js b/ionic/components/button/test/outline/e2e.ts similarity index 100% rename from ionic/components/button/test/outline/e2e.js rename to ionic/components/button/test/outline/e2e.ts diff --git a/ionic/components/button/test/outline/index.js b/ionic/components/button/test/outline/index.js deleted file mode 100644 index d2ce3e90c1..0000000000 --- a/ionic/components/button/test/outline/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; - -import {IonicView} from 'ionic/ionic'; - - -@Component({ selector: 'ion-app' }) -@IonicView({ - templateUrl: 'main.html' -}) -class IonicApp {} - -export function main(ionicBootstrap) { - ionicBootstrap(IonicApp); -} diff --git a/ionic/components/button/test/outline/index.ts b/ionic/components/button/test/outline/index.ts new file mode 100644 index 0000000000..8ae1df8e63 --- /dev/null +++ b/ionic/components/button/test/outline/index.ts @@ -0,0 +1,14 @@ +import {Component} from 'angular2/angular2'; + +import {IonicView} from 'ionic/ionic'; + + +@Component({ selector: 'ion-app' }) +@IonicView({ + templateUrl: 'main.html' +}) +class IonicApp {} + +export function main(ionicBootstrap) { + ionicBootstrap(IonicApp); +} diff --git a/ionic/components/button/test/sizes/e2e.js b/ionic/components/button/test/sizes/e2e.ts similarity index 100% rename from ionic/components/button/test/sizes/e2e.js rename to ionic/components/button/test/sizes/e2e.ts diff --git a/ionic/components/button/test/sizes/index.js b/ionic/components/button/test/sizes/index.js deleted file mode 100644 index d2ce3e90c1..0000000000 --- a/ionic/components/button/test/sizes/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; - -import {IonicView} from 'ionic/ionic'; - - -@Component({ selector: 'ion-app' }) -@IonicView({ - templateUrl: 'main.html' -}) -class IonicApp {} - -export function main(ionicBootstrap) { - ionicBootstrap(IonicApp); -} diff --git a/ionic/components/button/test/sizes/index.ts b/ionic/components/button/test/sizes/index.ts new file mode 100644 index 0000000000..8ae1df8e63 --- /dev/null +++ b/ionic/components/button/test/sizes/index.ts @@ -0,0 +1,14 @@ +import {Component} from 'angular2/angular2'; + +import {IonicView} from 'ionic/ionic'; + + +@Component({ selector: 'ion-app' }) +@IonicView({ + templateUrl: 'main.html' +}) +class IonicApp {} + +export function main(ionicBootstrap) { + ionicBootstrap(IonicApp); +} diff --git a/ionic/components/card/test/basic/e2e.js b/ionic/components/card/test/basic/e2e.ts similarity index 100% rename from ionic/components/card/test/basic/e2e.js rename to ionic/components/card/test/basic/e2e.ts diff --git a/ionic/components/card/test/basic/index.js b/ionic/components/card/test/basic/index.js deleted file mode 100644 index d2ce3e90c1..0000000000 --- a/ionic/components/card/test/basic/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; - -import {IonicView} from 'ionic/ionic'; - - -@Component({ selector: 'ion-app' }) -@IonicView({ - templateUrl: 'main.html' -}) -class IonicApp {} - -export function main(ionicBootstrap) { - ionicBootstrap(IonicApp); -} diff --git a/ionic/components/card/test/basic/index.ts b/ionic/components/card/test/basic/index.ts new file mode 100644 index 0000000000..8ae1df8e63 --- /dev/null +++ b/ionic/components/card/test/basic/index.ts @@ -0,0 +1,14 @@ +import {Component} from 'angular2/angular2'; + +import {IonicView} from 'ionic/ionic'; + + +@Component({ selector: 'ion-app' }) +@IonicView({ + templateUrl: 'main.html' +}) +class IonicApp {} + +export function main(ionicBootstrap) { + ionicBootstrap(IonicApp); +} diff --git a/ionic/components/checkbox/checkbox.js b/ionic/components/checkbox/checkbox.ts similarity index 63% rename from ionic/components/checkbox/checkbox.js rename to ionic/components/checkbox/checkbox.ts index d18d6930db..1ae446d146 100644 --- a/ionic/components/checkbox/checkbox.js +++ b/ionic/components/checkbox/checkbox.ts @@ -1,19 +1,45 @@ -import {ElementRef, Renderer, EventEmitter, onChange} from 'angular2/angular2'; +import {View, ElementRef, Renderer, EventEmitter, onChange, onInit} from 'angular2/angular2'; import {isPresent} from 'angular2/src/facade/lang'; import {setProperty} from 'angular2/src/forms/directives/shared' -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; -import {Ancestor} from 'angular2/src/core/annotations_impl/visibility'; -import {View} from 'angular2/src/core/annotations_impl/view'; -import {onInit} from 'angular2/angular2'; - //pretty sure this has changed in the latest angular import {NgControl} from 'angular2/forms'; import {IonicComponent} from '../../config/annotations'; import {Icon} from '../icon/icon'; -@IonicComponent(Checkbox) +@IonicComponent({ + selector: 'ion-checkbox', + properties: [ + 'checked', + 'disabled', + 'value' + ], + defaultProperties: { + 'iconOff': 'ion-ios-circle-outline', + 'iconOn': 'ion-ios-checkmark' + }, + //events: ['change'], + host: { + '(^click)': 'onClick($event)', + //'(change)': 'onChange($event.checked)', + '(blur)': 'onTouched()', + //'[checked]': 'checked', + '[attr.aria-checked]': 'checked', + '[attr.aria-disabled]': 'disabled', + '[attr.value]': 'value', + 'role': 'checkbox', + 'class': 'item', + '[class.ng-untouched]': 'ngClassUntouched', + '[class.ng-touched]': 'ngClassTouched', + '[class.ng-pristine]': 'ngClassPristine', + '[class.ng-dirty]': 'ngClassDirty', + '[class.ng-valid]': 'ngClassValid', + '[class.ng-invalid]': 'ngClassInvalid' + }, + appInjector: [ NgControl ] + //lifecycle: [onChange] +}) @View({ template: `
@@ -28,38 +54,6 @@ import {Icon} from '../icon/icon'; directives: [Icon] }) export class Checkbox { - - static get config() { - return { - selector: 'ion-checkbox', - properties: [ 'checked', 'disabled', 'value' ], - defaultProperties: { - 'iconOff': 'ion-ios-circle-outline', - 'iconOn': 'ion-ios-checkmark' - }, - //events: ['change'], - host: { - '(^click)': 'onClick($event)', - //'(change)': 'onChange($event.checked)', - '(blur)': 'onTouched()', - '[checked]': 'checked', - '[attr.aria-checked]': 'checked', - '[attr.aria-disabled]': 'disabled', - '[attr.value]': 'value', - 'role': 'checkbox', - 'class': 'item', - '[class.ng-untouched]': 'ngClassUntouched', - '[class.ng-touched]': 'ngClassTouched', - '[class.ng-pristine]': 'ngClassPristine', - '[class.ng-dirty]': 'ngClassDirty', - '[class.ng-valid]': 'ngClassValid', - '[class.ng-invalid]': 'ngClassInvalid' - }, - appInjector: [ NgControl ], - //lifecycle: [onChange] - } - } - constructor( ngControl: NgControl, renderer: Renderer, diff --git a/ionic/components/checkbox/test/basic/index.js b/ionic/components/checkbox/test/basic/index.ts similarity index 94% rename from ionic/components/checkbox/test/basic/index.js rename to ionic/components/checkbox/test/basic/index.ts index 7f76aa9ab7..eb1428b201 100644 --- a/ionic/components/checkbox/test/basic/index.js +++ b/ionic/components/checkbox/test/basic/index.ts @@ -1,5 +1,4 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; -import {View} from 'angular2/src/core/annotations_impl/view'; +import {Component, View} from 'angular2/angular2'; import {Query, QueryList, NgFor} from 'angular2/angular2'; // import {FormBuilder, Validators, NgFormControl, Control, NgControlName, NgControlGroup, ControlContainer} from 'angular2/forms'; diff --git a/ionic/components/content/content.ts b/ionic/components/content/content.ts new file mode 100644 index 0000000000..221070d453 --- /dev/null +++ b/ionic/components/content/content.ts @@ -0,0 +1,33 @@ +import {Component, View, ElementRef} from 'angular2/angular2'; + +import {Ion} from '../ion'; + + +@Component({ + selector: 'ion-content', + properties: [ + 'parallax' + ] +}) +@View({ + template: '
' +}) +export class Content extends Ion { + constructor(elementRef: ElementRef) { + super(elementRef); + + setTimeout(() => { + this.scrollElement = elementRef.nativeElement.children[0]; + }); + } + + addScrollEventListener(handler) { + if(!this.scrollElement) { return; } + + this.scrollElement.addEventListener('scroll', handler); + + return () => { + this.scrollElement.removeEventListener('scroll', handler); + } + } +} diff --git a/ionic/components/content/test/pull-to-refresh/index.js b/ionic/components/content/test/pull-to-refresh/index.ts similarity index 78% rename from ionic/components/content/test/pull-to-refresh/index.js rename to ionic/components/content/test/pull-to-refresh/index.ts index 265d76f100..1e55c1fec2 100644 --- a/ionic/components/content/test/pull-to-refresh/index.js +++ b/ionic/components/content/test/pull-to-refresh/index.ts @@ -1,4 +1,4 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Component, Directive} from 'angular2/angular2'; import {IonicView} from 'ionic/ionic'; diff --git a/ionic/components/form/form.js b/ionic/components/form/form.ts similarity index 100% rename from ionic/components/form/form.js rename to ionic/components/form/form.ts diff --git a/ionic/components/form/input/input.js b/ionic/components/form/input/input.ts similarity index 65% rename from ionic/components/form/input/input.js rename to ionic/components/form/input/input.ts index 2dcf9f219f..fd9be0b598 100644 --- a/ionic/components/form/input/input.js +++ b/ionic/components/form/input/input.ts @@ -1,4 +1,4 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Component, Directive} from 'angular2/angular2'; @Directive({ diff --git a/ionic/components/form/label/label.js b/ionic/components/form/label/label.ts similarity index 50% rename from ionic/components/form/label/label.js rename to ionic/components/form/label/label.ts index 8a843bca42..2485e60ae0 100644 --- a/ionic/components/form/label/label.js +++ b/ionic/components/form/label/label.ts @@ -1,4 +1,4 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Component, Directive} from 'angular2/angular2'; @Directive({ diff --git a/ionic/components/form/test/basic/e2e.js b/ionic/components/form/test/basic/e2e.ts similarity index 100% rename from ionic/components/form/test/basic/e2e.js rename to ionic/components/form/test/basic/e2e.ts diff --git a/ionic/components/form/test/basic/index.js b/ionic/components/form/test/basic/index.ts similarity index 89% rename from ionic/components/form/test/basic/index.js rename to ionic/components/form/test/basic/index.ts index aa8846d922..0c17dae075 100644 --- a/ionic/components/form/test/basic/index.js +++ b/ionic/components/form/test/basic/index.ts @@ -1,4 +1,4 @@ -import {Component, Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Component, Directive} from 'angular2/angular2'; import {View} from 'angular2/src/core/annotations_impl/view'; import {FormBuilder, Validators, formDirectives, ControlGroup} from 'angular2/forms'; diff --git a/ionic/components/icon/icon.js b/ionic/components/icon/icon.ts similarity index 71% rename from ionic/components/icon/icon.js rename to ionic/components/icon/icon.ts index 2d0a2cb1cb..fb9e92e45e 100644 --- a/ionic/components/icon/icon.js +++ b/ionic/components/icon/icon.ts @@ -1,5 +1,4 @@ -import {Directive, onInit} from 'angular2/src/core/annotations_impl/annotations'; -import {ElementRef} from 'angular2/src/core/compiler/element_ref'; +import {Directive, onInit, ElementRef} from 'angular2/angular2'; @Directive({ diff --git a/ionic/components/ion.ts b/ionic/components/ion.ts new file mode 100644 index 0000000000..311e514e33 --- /dev/null +++ b/ionic/components/ion.ts @@ -0,0 +1,31 @@ +import {IonicConfig} from '../config/config'; + +/** + * Base class for all Ionic components. Exposes some common functionality + * that all Ionic components need, such as accessing underlying native elements and + * sending/receiving app-level events. + */ +export class Ion { + constructor(elementRef: ElementRef) { + this.elementRef = elementRef; + } + + getNativeElement() { + return this.elementRef.nativeElement; + } + + get cssClass() { + // IonicConfig.global + + // should be able to set map of classes to add soon: + // https://github.com/angular/angular/issues/2364 + + let componentId = this.constructor.name; + + // let classes = {}; + // classes[componentId + '-ios'] = true; + // return classes; + + return true; + } +} diff --git a/ionic/components/item/item-options.js b/ionic/components/item/item-options.ts similarity index 100% rename from ionic/components/item/item-options.js rename to ionic/components/item/item-options.ts diff --git a/ionic/components/item/item-swipe-buttons.js b/ionic/components/item/item-swipe-buttons.ts similarity index 95% rename from ionic/components/item/item-swipe-buttons.js rename to ionic/components/item/item-swipe-buttons.ts index 1cf30a0d96..e9063e9590 100644 --- a/ionic/components/item/item-swipe-buttons.js +++ b/ionic/components/item/item-swipe-buttons.ts @@ -1,5 +1,5 @@ import {ElementRef, Parent} from 'angular2/angular2' -import {Directive} from 'angular2/src/core/annotations_impl/annotations'; +import {Directive} from 'angular2/angular2'; import {Item} from 'ionic/components/item/item' import {SlideGesture} from 'ionic/gestures/slide-gesture' diff --git a/ionic/components/item/item.js b/ionic/components/item/item.ts similarity index 88% rename from ionic/components/item/item.js rename to ionic/components/item/item.ts index de113cca00..187dc929d9 100644 --- a/ionic/components/item/item.js +++ b/ionic/components/item/item.ts @@ -1,13 +1,14 @@ -import {ElementRef} from 'angular2/angular2'; +import {Component, View, ElementRef} from 'angular2/angular2'; import {ItemPrimaryOptions, ItemSecondaryOptions} from './item-options'; import {ItemPrimarySwipeButtons, ItemSecondarySwipeButtons} from './item-swipe-buttons'; -import {IonicComponent, IonicView} from '../../config/annotations'; import {dom} from 'ionic/util'; -@IonicComponent(Item) -@IonicView({ +@Component({ + selector: 'ion-item' +}) +@View({ template: `