From 4cb999776f0b1a95469d35c76658bdc33123aac0 Mon Sep 17 00:00:00 2001 From: Patrick Opie Date: Sat, 8 Aug 2015 12:22:08 -0700 Subject: [PATCH 01/42] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ef133fb..f422a74 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ -# angular2.0-App +[![GitHub version](https://badge.fury.io/gh/angular-class%2Fangular2-webpack-starter.svg)](http://badge.fury.io/gh/angular-class%2Fangular2-webpack-starter) +# Angular 2.0 Sample App + +## Intro +This a Angular 2.0 Sample App using Typescript as a ECMAScript 6 standard and invoking webpack as a module bundler. From b139c32e2b78522e96835adecd275478a550703b Mon Sep 17 00:00:00 2001 From: Patrick Opie Date: Sat, 8 Aug 2015 12:26:40 -0700 Subject: [PATCH 02/42] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f422a74..763b9d0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -[![GitHub version](https://badge.fury.io/gh/angular-class%2Fangular2-webpack-starter.svg)](http://badge.fury.io/gh/angular-class%2Fangular2-webpack-starter) # Angular 2.0 Sample App ## Intro From 486ef97812b1ab79b750e4babad6698ad8f0d0a7 Mon Sep 17 00:00:00 2001 From: Patrick Opie Date: Sat, 8 Aug 2015 12:30:36 -0700 Subject: [PATCH 03/42] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 763b9d0..a0dee29 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![GitHub version](https://badge.fury.io/gh/1337programming%2Fangular2.0-App.svg)](http://badge.fury.io/gh/1337programming%2Fangular2.0-App) # Angular 2.0 Sample App ## Intro From 6da638741cf77752cb07a553bb5d20d91caf2f57 Mon Sep 17 00:00:00 2001 From: Patrick Opie Date: Sat, 8 Aug 2015 12:39:36 -0700 Subject: [PATCH 04/42] Update README.md --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a0dee29..57037a2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ [![GitHub version](https://badge.fury.io/gh/1337programming%2Fangular2.0-App.svg)](http://badge.fury.io/gh/1337programming%2Fangular2.0-App) +[![Dependency Status](https://david-dm.org/1337-programming/angular2.0-App.svg)](https://david-dm.org/1337programming/angular2.0-App) +[![Issue Stats](http://issuestats.com/github/1337-programming/angular2.0-Appr/badge/pr?style=flat)](http://issuestats.com/github/1337-programming/angular2.0-App) # Angular 2.0 Sample App -## Intro -This a Angular 2.0 Sample App using Typescript as a ECMAScript 6 standard and invoking webpack as a module bundler. + +## Tags +* Angular 2.0 +* TypeScript +* ECMAScript 6 Standard +* Webpack From 4a0d9f2099c6e6b8f073eb16f7109fe7477ce8bb Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 12:50:56 -0700 Subject: [PATCH 05/42] Gitignore file. --- .gitignore | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4e397db --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +# @AngularClass + +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Users Environment Variables +.lock-wscript + +# OS generated files # +.DS_Store +ehthumbs.db +Icon? +Thumbs.db + +# Node Files # +/node_modules +/bower_components + +# Typing TSD # +/src/typings/tsd/ +/typings/ +/tsd_typings/ + +# Dist # +/dist +/public/__build__/ +/src/*/__build__/ +__build__/** +.webpack.json + + +# IDE # +.idea/ From b0e16912c97b95a7562a1f80fed7b2b007ae9713 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 14:20:45 -0700 Subject: [PATCH 06/42] Json files and updated Documentation. --- .editorconfig | 16 ++++ .gitignore | 4 + README.md | 50 +++++++++++ package.json | 72 +++++++++++++++ tsconfig.json | 22 +++++ tsd.json | 33 +++++++ webpack.config.js | 219 ++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 416 insertions(+) create mode 100644 .editorconfig create mode 100644 package.json create mode 100644 tsconfig.json create mode 100644 tsd.json create mode 100644 webpack.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d842ef6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# @AngularClass +# http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore index 4e397db..cc59448 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,7 @@ __build__/** # IDE # .idea/ + +# bash and zbash +*.un~ +*~ diff --git a/README.md b/README.md index 57037a2..e0a4415 100644 --- a/README.md +++ b/README.md @@ -10,3 +10,53 @@ Angular 2.0 Sample App using Typescript as a ECMAScript 6 standard and invoking * TypeScript * ECMAScript 6 Standard * Webpack + +# Getting Started +## Dependencies +What is needed to run this app: +* `node` +* `npm` + +Install the following node modules +* `webpack` (`npm install -g webpack`) +* `webpack-dev-server` (`npm install -g webpack-dev-server`) +* `karma` (`npm install -g karma-cli`) +* `protractor` (`npm install -g protractor`) +* `TypeScript` (`npm install -g typescript`) +* `TSD typings` (`npm install -g tsd`) + +## Install +* `fork` repo +* `clone` +* `npm install` +* `npm install express connect-history-api-fallback morgan body-parser` installs sample backend api +* `npm run express` starts up sample backend api server in one tab +* `npm run server` starts the dev server in another tab + +## Running App +After installation run `npm run server` to start a local server using `webpack-dev-server` which will watch, build (in-memory), and reload for you. The port will be displayed to you as `http://localhost:3000` (or if you prefer IPv6, if you're using `express` server, then it's `http://[::1]:3000/`). + +### build files +```bash +$ npm run build # or webpack +``` + +### watch and build files +```bash +$ npm run watch # or webpack --watch +``` + +### run tests +```bash +$ npm run test # or karma start +``` + +### run webdriver (E2E) +```bash +$ npm run webdriver-start # or webdriver-manager start +then +$ npm rune e2e +``` + +# License + [MIT](/LICENSE) diff --git a/package.json b/package.json new file mode 100644 index 0000000..1ad5414 --- /dev/null +++ b/package.json @@ -0,0 +1,72 @@ +{ + "name": "angular2-webpack-starter", + "version": "0.0.0", + "description": "An Angular 2 Webpack Starter kit featuring Angular 2 (Router, Http, Forms, Services, Tests, E2E), Karma, Protractor, Jasmine, TypeScript, and Webpack by AngularClass", + "main": "", + "scripts": { + "build": "npm run build:dev && npm run build:prod", + "build:dev": " npm run env:dev npm run webpack --colors --display-error-details --display-cached", + "build:prod": "npm run env:prod npm run webpack --colors --display-error-details --display-cached", + "webpack": "webpack", + "clean": "rm -rf node_modules && rm -rf tsd_typings", + "watch": "webpack --watch", + "server": "webpack-dev-server --inline --colors --display-error-details --display-cached --port 3000", + "express": "NODE_ENV=development node ./server/express-server-example.js", + "express:dev": " npm run env:dev node ./server/express-server-example.js", + "express:prod": "npm run env:prod node ./server/express-server-example.js", + "express-install": "npm install express connect-history-api-fallback morgan body-parser", + "env:dev": "NODE_ENV=development", + "env:prod": "NODE_ENV=production", + "webdriver-update": "webdriver-manager update", + "webdriver-start": "webdriver-manager start", + "preprotractor": "npm run webdriver-update", + "protractor": "protractor", + "e2e": "npm run protractor", + "test": "karma start", + "postinstall": "tsd reinstall --overwrite", + "prestart": "npm install", + "start": "npm run server" + }, + "repository": { + "type": "git", + "url": "https://github.com/angular-class/angular2-webpack-starter.git" + }, + "author": "gdi2290 ", + "license": "MIT", + "bugs": { + "url": "https://github.com/angular-class/angular2-webpack-starter/issues" + }, + "homepage": "https://github.com/angular-class/angular2-webpack-starter", + "dependencies": { + "angular2": "2.0.0-alpha.34", + "reflect-metadata": "^0.1.0", + "rtts_assert": "2.0.0-alpha.34", + "rx": "^2.5.3", + "zone.js": "^0.5.2" + }, + "devDependencies": { + "css-loader": "^0.15.1", + "exports-loader": "^0.6.2", + "expose-loader": "^0.7.0", + "file-loader": "^0.8.1", + "imports-loader": "^0.6.3", + "json-loader": "^0.5.1", + "karma": "^0.13.3", + "karma-chrome-launcher": "^0.2.0", + "karma-coverage": "^0.4.2", + "karma-jasmine": "^0.3.5", + "karma-phantomjs-launcher": "^0.2.0", + "karma-sourcemap-loader": "^0.3.5", + "karma-webpack": "^1.7.0", + "phantomjs": "^1.9.17", + "protractor": "^2.1.0", + "raw-loader": "^0.5.1", + "style-loader": "^0.12.2", + "tsd": "^0.6.3", + "typescript": "^1.5.3", + "typescript-simple-loader": "^0.3.2", + "url-loader": "^0.5.5", + "webpack": "^1.10.5", + "webpack-dev-server": "^1.10.1" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e1e340d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "version": "1.5.0", + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "declaration": false, + "noImplicitAny": false, + "removeComments": true, + "noLib": false, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "sourceMap": true, + "listFiles": true, + "outDir": "dist" + }, + "files": [ + "node_modules/typescript/bin/lib.dom.d.ts", + "src/typings/_custom.d.ts", + "src/app/components/app.ts", + "src/app/bootstrap.ts" + ] +} diff --git a/tsd.json b/tsd.json new file mode 100644 index 0000000..db4def1 --- /dev/null +++ b/tsd.json @@ -0,0 +1,33 @@ +{ + "version": "v4", + "repo": "borisyankov/DefinitelyTyped", + "ref": "master", + "path": "tsd_typings", + "bundle": "tsd_typings/tsd.d.ts", + "installed": { + "jasmine/jasmine.d.ts": { + "commit": "f6c8ca47193fb67947944a3170912672ac3e908e" + }, + "angular-protractor/angular-protractor.d.ts": { + "commit": "f6c8ca47193fb67947944a3170912672ac3e908e" + }, + "selenium-webdriver/selenium-webdriver.d.ts": { + "commit": "f6c8ca47193fb67947944a3170912672ac3e908e" + }, + "es6-promise/es6-promise.d.ts": { + "commit": "f6c8ca47193fb67947944a3170912672ac3e908e" + }, + "rx/rx.d.ts": { + "commit": "f6c8ca47193fb67947944a3170912672ac3e908e" + }, + "rx/rx-lite.d.ts": { + "commit": "f6c8ca47193fb67947944a3170912672ac3e908e" + }, + "angular2/angular2.d.ts": { + "commit": "284c2b8828f06bdde1f949a22ad174f5221d57f9" + }, + "angular2/router.d.ts": { + "commit": "284c2b8828f06bdde1f949a22ad174f5221d57f9" + } + } +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..8976cd2 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,219 @@ +// @AngularClass + +// Helper +var sliceArgs = Function.prototype.call.bind(Array.prototype.slice); +var NODE_ENV = process.env.NODE_ENV || 'development'; + +// Node +var webpack = require('webpack'); +var path = require('path'); +var pkg = require('./package.json'); + +// Webpack Plugins +var OccurenceOrderPlugin = webpack.optimize.OccurenceOrderPlugin; +var CommonsChunkPlugin = webpack.optimize.CommonsChunkPlugin; +var UglifyJsPlugin = webpack.optimize.UglifyJsPlugin; +var DedupePlugin = webpack.optimize.DedupePlugin; +var DefinePlugin = webpack.DefinePlugin; +var BannerPlugin = webpack.BannerPlugin; + + +/* + * Config + */ + +var config = { + devtool: 'source-map', + // devtool: 'eval', + + debug: true, + cache: true, + // our Development Server configs + devServer: { + inline: true, + colors: true, + historyApiFallback: true, + contentBase: 'src/public', + publicPath: '/__build__' + }, + + // + entry: { + 'angular2': [ + // Angular 2 Deps + 'zone.js', + 'reflect-metadata', + 'rtts_assert/rtts_assert', + 'angular2/angular2' + ], + 'app': [ + // App + + /* + * include any 3rd party js lib here + */ + + './src/app/bootstrap' + ], + 'app-simple': [ + // Simple Version of App + + /* + * include any 3rd party js lib here + */ + + './src/app-simple/bootstrap' + ] + }, + + // Config for our build files + output: { + path: root('__build__'), + filename: '[name].js', + // filename: '[name].[hash].js', + sourceMapFilename: '[name].js.map', + chunkFilename: '[id].chunk.js' + // publicPath: 'http://mycdn.com/' + }, + + resolve: { + root: __dirname, + extensions: ['','.ts','.js','.json'], + alias: { + // we can switch between development and production + // 'angular2': 'node_modules/angular2/ts', + // 'angular2': 'angular2/ts/dev', + + 'app': 'src/app', + 'common': 'src/common', + + // 'components': 'src/app/components' + // 'services': '/app/services/*.js', + // 'stores/*': '/app/stores/*.js' + // 'angular2': 'angular2/es6/dev' + } + }, + + /* + * When using `templateUrl` and `styleUrls` please use `__filename` + * rather than `module.id` for `moduleId` in `@View` + */ + node: { + __filename: true + }, + + module: { + loaders: [ + // Support for *.json files. + { test: /\.json$/, loader: 'json' }, + + // Support for CSS as raw text + { test: /\.css$/, loader: 'raw' }, + + // support for .html as raw text + { test: /\.html$/, loader: 'raw' }, + + // Support for .ts files. + { test: /\.ts$/, loader: 'typescript-simple?ignoreWarnings[]=2345', exclude: [ + /\.spec\.ts$/, + /\.e2e\.ts$/, + /web_modules/, + /test/, + /node_modules/ + ] + } + ], + noParse: [ + /rtts_assert\/src\/rtts_assert/ + ] + }, + + // plugins: plugins, // see below + context: __dirname, + stats: { colors: true, reasons: true } +}; + + +var commons_chunks_plugins = [ + { + name: 'angular2', + minChunks: Infinity, + filename: 'angular2.js' + }, + { + name: 'common', + filename: 'common.js' + } +] + + +// +var environment_plugins = { + + all: [ + new DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify(NODE_ENV), + 'VERSION': pkg.version + }), + new OccurenceOrderPlugin(), + new DedupePlugin(), + ], + + production: [ + new UglifyJsPlugin({ + compress: { + warnings: false, + drop_debugger: false + }, + output: { + comments: false + }, + beautify: false + }), + new BannerPlugin(getBanner(), {entryOnly: true}) + ], + + development: [ + /* Dev Plugin */ + // new webpack.HotModuleReplacementPlugin(), + ] + +}//env + +if (NODE_ENV === 'production') { + // replace filename `.js` with `.min.js` + config.output.filename = config.output.filename.replace('.js', '.min.js'); + config.output.sourceMapFilename = config.output.sourceMapFilename.replace('.js', '.min.js'); + commons_chunks_plugins = commons_chunks_plugins.map(function(chunk) { + return chunk.filename.replace('.js', '.min.js'); + }); +} +else if (NODE_ENV === 'development') { + // any development actions here +} + +// create CommonsChunkPlugin instance for each config +var combine_common_chunks = commons_chunks_plugins.map(function(config) { + return new CommonsChunkPlugin(config); +}); + +// conbine everything +config.plugins = [].concat(combine_common_chunks, environment_plugins.all, environment_plugins[NODE_ENV]); + + +module.exports = config; + +// Helper functions +function getBanner() { + return 'Angular2 Webpack Starter v'+ pkg.version +' by @gdi2990 from @AngularClass'; +} + +function root(args) { + args = sliceArgs(arguments, 0); + return path.join.apply(path, [__dirname].concat(args)); +} +function rootNode(args) { + args = sliceArgs(arguments, 0); + return root.apply(path, ['node_modules'].concat(args)); +} + From ae2924b6aafdc4cbba5a10971dd066d7e7ce0667 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 14:33:32 -0700 Subject: [PATCH 07/42] (#3) Common injectable classes that will be used through out the APP for shadow dom implementations. --- src/common/changeDetectionInjectables.ts | 25 ++++++++++++++++++++++++ src/common/locationInjectables.ts | 15 ++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/common/changeDetectionInjectables.ts create mode 100644 src/common/locationInjectables.ts diff --git a/src/common/changeDetectionInjectables.ts b/src/common/changeDetectionInjectables.ts new file mode 100644 index 0000000..2e84e0d --- /dev/null +++ b/src/common/changeDetectionInjectables.ts @@ -0,0 +1,25 @@ +/// +import {bind} from 'angular2/angular2'; +import { + ChangeDetection, + DynamicChangeDetection, + JitChangeDetection, + PreGeneratedChangeDetection +} from 'angular2/change_detection'; + +export var jitInjectables = [ + bind(ChangeDetection).toClass(JitChangeDetection) +]; + +export var dynamicInjectables = [ + bind(ChangeDetection).toClass(DynamicChangeDetection) +]; + +export var preGeneratedInjectables = [ + bind(ChangeDetection).toClass(PreGeneratedChangeDetection) +]; + +export var bestChangeDetectionInjectables = [ + PreGeneratedChangeDetection.isSupported() ? preGeneratedInjectables : + JitChangeDetection.isSupported() ? jitInjectables : dynamicInjectables +]; diff --git a/src/common/locationInjectables.ts b/src/common/locationInjectables.ts new file mode 100644 index 0000000..fc71da4 --- /dev/null +++ b/src/common/locationInjectables.ts @@ -0,0 +1,15 @@ +/// +import {bind} from 'angular2/angular2'; +import { + LocationStrategy, + HashLocationStrategy, + HTML5LocationStrategy +} from 'angular2/router'; + +export var html5locationInjectables = [ + bind(LocationStrategy).toClass(HTML5LocationStrategy) +]; + +export var hashlocationInjectables = [ + bind(LocationStrategy).toClass(HashLocationStrategy) +]; From 1b4879182be13db6349bc0b7627c4af0ea834aee Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 14:36:58 -0700 Subject: [PATCH 08/42] (#3) Custom typings for our application. --- src/typings/_custom.d.ts | 12 + src/typings/browser.d.ts | 4 + src/typings/ng2.d.ts | 1011 ++++++++++++++++++++++++++++++++++++++ src/typings/webpack.d.ts | 5 + 4 files changed, 1032 insertions(+) create mode 100644 src/typings/_custom.d.ts create mode 100644 src/typings/browser.d.ts create mode 100644 src/typings/ng2.d.ts create mode 100644 src/typings/webpack.d.ts diff --git a/src/typings/_custom.d.ts b/src/typings/_custom.d.ts new file mode 100644 index 0000000..c2e700f --- /dev/null +++ b/src/typings/_custom.d.ts @@ -0,0 +1,12 @@ +/* + * Our custom types + */ +/// +/// +/// + + +/* + * tsd generated types + */ +/// diff --git a/src/typings/browser.d.ts b/src/typings/browser.d.ts new file mode 100644 index 0000000..ce1c7aa --- /dev/null +++ b/src/typings/browser.d.ts @@ -0,0 +1,4 @@ +interface ObjectConstructor { + assign(target: any, ...sources: any[]): any; + observe(target: any, callback: Function, acceptList?: Array): void; +} \ No newline at end of file diff --git a/src/typings/ng2.d.ts b/src/typings/ng2.d.ts new file mode 100644 index 0000000..23562d7 --- /dev/null +++ b/src/typings/ng2.d.ts @@ -0,0 +1,1011 @@ +declare var zone: any; +declare var Zone: any; +interface Type extends Function { + new (...args: any[]): any; +} + +declare module "angular2/test" { + class TestComponentBuilder {} + class AsyncTestCompleter {} + class DebugElement {} + class By {} + function inject(args: any): any; + var browser: any; + var $: any; + function clickAll(buttonSelectors: any): void; + function verifyNoBrowserErrors(): void; +} + +declare module "angular2/pipes" { + class ObservablePipe { + constructor(ref?: any) + _subscription: any; + _observable: any; + _updateLatestValue(value: any): any; + _subscribe(obs: any): any; + transform(obs: any, args?: List): any; + onDestroy(): void; + } +} + +declare module "angular2/annotations" { + var Component: any; + var View: any; + var Directive: any; + var Query: any; +} + +declare module "angular2/http" { + class Http { + _backend: any; + _defaultOptions: any; + constructor(_backend?: any, _defaultOptions?: any); + request(url: string, options?: any): any; + get(url: string, options?: any): any; + post(url: string, body: any, options?: any): any; + put(url: string, body: any, options?: any): any; + delete(url: string, options?: any): any; + patch(url: string, body: any, options?: any): any; + head(url: string, options?: any): any; + } + class HttpFactory {} + class MockBackend { + constructor(req: any) + } + class Headers { + constructor(config: any) + } + class XHRBackend {} + class BaseRequestOptions {} + var httpInjectables: Array; +} + +declare module "angular2/src/core/life_cycle/life_cycle" { + class LifeCycle { + constructor(...args) + tick(): any; + } +} + +declare module "angular2/src/render/dom/compiler/view_loader" { + class ViewLoader {} +} + +declare module "angular2/src/render/dom/compiler/style_url_resolver" { + class StyleUrlResolver {} +} + +declare module "angular2/src/render/dom/compiler/style_inliner" { + class StyleInliner {} +} + +declare module "angular2/src/core/compiler/view_resolver" { + class ViewResolver { + resolve(appComponent: any): any + } +} + +declare module "angular2/src/services/app_root_url" { + class AppRootUrl {} +} + +declare module "angular2/src/http/backends/browser_xhr" { + class BrowserXHR {} +} + +declare module "angular2/src/core/compiler/view_listener" { + class AppViewListener {} +} + +declare module "angular2/src/render/dom/compiler/template_loader" { + class TemplateLoader { + + } +} + +declare module "angular2/src/core/compiler/template_resolver" { + class TemplateResolver { + + } +} + +declare module "angular2/src/render/xhr_impl" { + class XHRImpl {} +} + +declare module "angular2/src/services/xhr_impl" { + class XHRImpl { + + } +} + +declare module "angular2/src/render/dom/events/key_events" { + class KeyEventsPlugin { + static getEventFullKey: any + getEventFullKey: any + } +} +declare module "angular2/src/render/dom/events/hammer_gestures" { + class HammerGesturesPlugin { + + } +} +declare module "angular2/src/core/compiler/component_url_mapper" { + class ComponentUrlMapper { + + } +} +declare module "angular2/src/services/url_resolver" { + class UrlResolver { + + } + +} +declare module "angular2/src/render/dom/shadow_dom/style_inliner" { + class StyleInliner{} + +} +declare module "angular2/src/core/compiler/dynamic_component_loader" { + class ComponentRef { + constructor(newLocation: any, component: any, dispose: any) + location: any + instance: any + dispose: any + } + class DynamicComponentLoader { + loadAsRoot(appComponentType: any, bindings: any, injector: any): any + } +} +declare module "angular2/src/core/testability/testability" { + class TestabilityRegistry { + + } + class Testability { + + } +} +declare module "angular2/src/core/compiler/view_pool" { + class AppViewPool { + + } + var APP_VIEW_POOL_CAPACITY: any +} +declare module "angular2/src/core/compiler/view_manager" { + class AppViewManager { + + } + +} +declare module "angular2/src/core/compiler/view_manager_utils" { + class AppViewManagerUtils { + + } +} +declare module "angular2/src/core/compiler/proto_view_factory" { + class ProtoViewFactory { + + } +} +declare module "angular2/src/render/dom/compiler/compiler" { + class DefaultDomCompiler { + + } +} +declare module "angular2/src/core/compiler/view_ref" { + var internalView:any +} + +declare module "angular2/src/reflection/reflection" { + var reflector:any + class Reflector { + + } +} +declare module "angular2/src/reflection/reflection_capabilities" { + class ReflectionCapabilities { + + } +} + +declare module "angular2/src/render/dom/view/proto_view" { + class DomProtoView { + rootBindingOffset: any; + element: any; + isTemplateElement(): any + elementBinders(): any + } + +} + +declare module "angular2/src/render/dom/view/view_container" { + class DomViewContainer{} +} + +declare module "angular2/src/render/dom/util" { + var NG_BINDING_CLASS_SELECTOR: any; + var NG_BINDING_CLASS: any ; +} + + +declare module "angular2/src/render/dom/dom_renderer" { + class DomRenderer { + _moveViewNodesIntoParent(): any + _createGlobalEventListener(): any + _createEventListener(): any + } + var DOCUMENT_TOKEN: any; +} + +declare module "angular2/src/render/api" { + class RenderCompiler { + + } + class Renderer { + + } + class RenderViewRef { + + } + class RenderProtoViewRef { + + } + +} +declare module "angular2/src/render/dom/shadow_dom/content_tag" { + function Content(element: any, contentTagSelector:any): void; +} +declare module "angular2/src/render/dom/view/view" { + class DomViewRef { + + } + class DomView { + viewContainers(): any + } + function resolveInternalDomView(viewRef: any): any; +} +declare module "angular2/src/render/dom/shadow_dom/shadow_dom_strategy" { + class ShadowDomStrategy { + prepareShadowRoot(element: any): any + constructLightDom(lightDomView: any, el: any): any + } +} + +declare module "angular2/src/render/dom/events/event_manager" { + class EventManager { + constructor(...args) + addEventListener(element: any, eventName: string, handler: Function): any + addGlobalEventListener(target: string, eventName: string, handler: Function): any + } + class DomEventsPlugin { + + } +} + +declare module "zone.js" { + var zone: any; + var Zone: any; +} + +declare module "rtts_assert/rtts_assert" { + var assert: any; +} + +declare module "angular2/directives" { + class NgSwitch {} + class NgSwitchWhen {} + class NgSwitchDefault {} + class NgNonBindable {} + class NgIf {} + class NgFor {} + class CSSClass {} + + var formDirectives: any; + var coreDirectives: any; + +} + +declare module "angular2/src/change_detection/pipes/pipe" { + class PipeFactory { + } +} + +declare module "angular2/src/change_detection/change_detection" { + var async: any; +} + +declare module "angular2/change_detection" { + interface PipeFactory {} + interface Pipe { + supports(obj: any): boolean; + onDestroy(): void; + transform(value: any, args: List): any; + } + class Pipes { + static extend(pipes: any) + } + class NullPipeFactory {} + class PipeRegistry { + constructor(pipes: any); + } + class WrappedValue { + static wrap(...args): any + } + class ChangeDetectorRef { + requestCheck(): void; + } + class ObservablePipe implements Pipe { + constructor(ref: any); + _subscription: any; + _observable: any; + _updateLatestValue(value: any): any; + _subscribe(obs: any): void; + + _latestValue: any; + _latestReturnedValue: any; + + _dispose(): void; + + supports(obj: any): boolean; + onDestroy(): void; + transform(value: any, args: List): any; + } + var defaultPipeRegistry: any; + var defaultPipes: any; + class Parser { + + } + class Lexer { + + } + class ChangeDetection { + + } + class DynamicChangeDetection { + + } + class PreGeneratedChangeDetection { + static isSupported(): boolean; + } + class JitChangeDetection { + static isSupported(): boolean; + } +} + +declare module "angular2/src/core/zone/ng_zone" { + class NgZone { + constructor(config: any) + initCallbacks(config: any): any + runOutsideAngular(context: any): any; + run(context: any): any + } +} + + +declare module "angular2/src/core/compiler/element_ref" { + class ElementRef { + constructor(host: any, location?: any) + nativeElement: any; + } +} + +declare module "angular2/src/core/exception_handler" { + class ExceptionHandler { + + } +} + +declare module "angular2/src/render/xhr" { + class XHR { + + } +} + +declare module "angular2/src/core/application_tokens" { + var appComponentRefToken: any; + var appComponentTypeToken: any; +} + +declare module "angular2/src/core/compiler/compiler" { + class Compiler { + + } + class CompilerCache { + + } +} + +declare module "angular2/forms" { + var formDirectives: any; + var formInjectables: any; + class FormBuilder { + group(config: any): any + array(): any + } + class Validators { + static required(): any + } + class ControlGroup { + value: any + controls: any + include(): any + exclude(): any + } + class Control { + valueChanges(): any + } + class ControlArray { + push(): any + removeAt(): any + } + + class NgControlName { + + } + class NgControlGroup { + + } + class NgFormControl { + + } + class NgModel { + + } + class NgFormModel { + + } + class NgForm { + + } + class NgSelectOption { + + } + class NgRequiredValidator { + + } + class NgControl { + control: any; + valueAccessor: any; + } + +} + +declare module "angular2/src/render/dom/shadow_dom/emulated_unscoped_shadow_dom_strategy" { + class EmulatedUnscopedShadowDomStrategy { + styleHost: any; + constructor(styleHost: any); + hasNativeContentElement(): boolean; + prepareShadowRoot(el: any): any; + constructLightDom(lightDomView: any, el: any): any; + processStyleElement(hostComponentId: string, templateUrl: string, styleEl: any): void; + + } +} + +declare module "angular2/core" { + class ElementRef { + constructor(host: any, location?: any) + nativeElement: any; + } + class QueryList { + onChange(callback: any): void; + } + class DirectiveResolver { + resolve(appComponent: any): any + } +} + +declare module "angular2/render" { + class ShadowDomStrategy { + hasNativeContentElement(): boolean; + prepareShadowRoot(el: any): any; + constructLightDom(lightDomView: any, el: any): any; + processStyleElement(hostComponentId: string, templateUrl: string, styleElement: any): void; + processElement(hostComponentId: string, elementComponentId: string, element: any): void; + } + class NativeShadowDomStrategy extends ShadowDomStrategy { + prepareShadowRoot(el: any): any; + } + class EmulatedUnscopedShadowDomStrategy extends ShadowDomStrategy { + styleHost: any; + constructor(styleHost: any); + hasNativeContentElement(): boolean; + prepareShadowRoot(el: any): any; + constructLightDom(lightDomView: any, el: any): any; + processStyleElement(hostComponentId: string, templateUrl: string, styleEl: any): void; + + } + class EmulatedScopedShadowDomStrategy extends EmulatedUnscopedShadowDomStrategy { + constructor(styleHost: any); + processStyleElement(hostComponentId: string, templateUrl: string, styleEl: any): void; + _moveToStyleHost(styleEl: any): void; + processElement(hostComponentId: string, elementComponentId: string, element: any): void; + + } + class Renderer { +/** + * Creates a root host view that includes the given element. + * @param {RenderProtoViewRef} hostProtoViewRef a RenderProtoViewRef of type + * ProtoViewDto.HOST_VIEW_TYPE + * @param {any} hostElementSelector css selector for the host element (will be queried against the + * main document) + * @return {RenderViewRef} the created view + */ + createRootHostView(hostProtoViewRef: any, hostElementSelector: string): any; + /** + * Creates a regular view out of the given ProtoView + */ + createView(protoViewRef: any): any; + /** + * Destroys the given view after it has been dehydrated and detached + */ + destroyView(viewRef: any): void; + /** + * Attaches a componentView into the given hostView at the given element + */ + attachComponentView(location: any, componentViewRef: any): void; + /** + * Detaches a componentView into the given hostView at the given element + */ + detachComponentView(location: any, componentViewRef: any): void; + /** + * Attaches a view into a ViewContainer (in the given parentView at the given element) at the + * given index. + */ + attachViewInContainer(location: any, atIndex: number, viewRef: any): void; + /** + * Detaches a view into a ViewContainer (in the given parentView at the given element) at the + * given index. + */ + detachViewInContainer(location: any, atIndex: number, viewRef: any): void; + /** + * Hydrates a view after it has been attached. Hydration/dehydration is used for reusing views + * inside of the view pool. + */ + hydrateView(viewRef: any): void; + /** + * Dehydrates a view after it has been attached. Hydration/dehydration is used for reusing views + * inside of the view pool. + */ + dehydrateView(viewRef: any): void; + /** + * Returns the native element at the given location. + * Attention: In a WebWorker scenario, this should always return null! + */ + getNativeElementSync(location: any): any; + /** + * Sets a property on an element. + */ + setElementProperty(location: any, propertyName: string, propertyValue: any): void; + /** + * Sets an attribute on an element. + */ + setElementAttribute(location: any, attributeName: string, attributeValue: string): void; + /** + * Sets a class on an element. + */ + setElementClass(location: any, className: string, isAdd: boolean): void; + /** + * Sets a style on an element. + */ + setElementStyle(location: any, styleName: string, styleValue: string): void; + /** + * Calls a method on an element. + */ + invokeElementMethod(location: any, methodName: string, args: List): void; + /** + * Sets the value of a text node. + */ + setText(viewRef: any, textNodeIndex: number, text: string): void; + /** + * Sets the dispatcher for all events of the given view + */ + setEventDispatcher(viewRef: any, dispatcher: any): void; + } +} + +declare module "angular2/src/render/dom/shadow_dom/style_url_resolver" { + class StyleUrlResolver { + + } +} + +declare module "angular2/src/facade/async" { + class ObservableWrapper { + static callNext(next:any): any; + static subscribe(observer:any): any; + } + class Promise { + then(pro:any): any; + all(all:any): any; + } + class PromiseWrapper { + static completer(): any; + static all(all: any): any; + static then(pro:any, sucess?: any, failure?: any): any; + static wrap(pro:any): any; + } +} + +declare module "angular2/src/facade/collection" { + var List: Array; + var Map: any; + var ListWrapper: any; + var MapWrapper: any; + var StringMapWrapper: any; +} + +declare module "angular2/src/facade/browser" { + var __esModule: boolean; + var win: any; + var window: any; + var document: any; + var location: any; + var gc: () => void; + var Event: any; + var MouseEvent: any; + var KeyboardEvent: any; +} + +declare module "angular2/src/facade/lang" { + var int: any; + var Type: Function; + var assertionsEnabled: any; + function isPresent(bool: any): boolean; + function isBlank(bool: any): boolean; + function isString(bool: any): boolean; + class BaseException { + + } + class RegExpWrapper { + + } + class NumberWrapper { + + } + class StringWrapper { + static toLowerCase(str: string): string; + static toUpperCase(str: string): string; + } + function print(str: any):any; + function stringify(str: any):any; +} + +declare module "angular2/src/core/compiler/directive_resolver" { + class DirectiveResolver { + resolve(appComponent: any): any + } +} + +declare module "angular2/src/router/route_registry" { + class RouteRegistry {} +} + +declare module "angular2/src/router/pipeline" { + class Pipeline {} +} + +declare module "angular2/src/router/instruction" { + class Instruction { + component: any; + params: any; + reuse: any; + child: any; + } +} + +declare module "angular2/src/dom/browser_adapter" { + class BrowserDomAdapter { + static makeCurrent(): void; + logError(error: any): void; + attrToPropMap: any; + query(selector: string): any; + querySelector(el: any, selector: string): Node; + querySelectorAll(el: any, selector: string): List; + on(el: any, evt: any, listener: any): void; + onAndCancel(el: any, evt: any, listener: any): Function; + dispatchEvent(el: any, evt: any): void; + createMouseEvent(eventType: string): MouseEvent; + createEvent(eventType: any): Event; + getInnerHTML(el: any): any; + getOuterHTML(el: any): any; + nodeName(node: Node): string; + nodeValue(node: Node): string; + type(node: HTMLInputElement): string; + content(node: Node): Node; + firstChild(el: any): Node; + nextSibling(el: any): Node; + parentElement(el: any): any; + childNodes(el: any): List; + childNodesAsList(el: any): List; + clearNodes(el: any): void; + appendChild(el: any, node: any): void; + removeChild(el: any, node: any): void; + replaceChild(el: Node, newChild: any, oldChild: any): void; + remove(el: any): any; + insertBefore(el: any, node: any): void; + insertAllBefore(el: any, nodes: any): void; + insertAfter(el: any, node: any): void; + setInnerHTML(el: any, value: any): void; + getText(el: any): any; + setText(el: any, value: string): void; + getValue(el: any): any; + setValue(el: any, value: string): void; + getChecked(el: any): any; + setChecked(el: any, value: boolean): void; + createTemplate(html: any): HTMLElement; + createElement(tagName: any, doc?: Document): HTMLElement; + createTextNode(text: string, doc?: Document): Text; + createScriptTag(attrName: string, attrValue: string, doc?: Document): HTMLScriptElement; + createStyleElement(css: string, doc?: Document): HTMLStyleElement; + createShadowRoot(el: HTMLElement): DocumentFragment; + getShadowRoot(el: HTMLElement): DocumentFragment; + getHost(el: HTMLElement): HTMLElement; + clone(node: Node): Node; + hasProperty(element: any, name: string): boolean; + getElementsByClassName(element: any, name: string): any; + getElementsByTagName(element: any, name: string): any; + classList(element: any): List; + addClass(element: any, classname: string): void; + removeClass(element: any, classname: string): void; + hasClass(element: any, classname: string): any; + setStyle(element: any, stylename: string, stylevalue: string): void; + removeStyle(element: any, stylename: string): void; + getStyle(element: any, stylename: string): any; + tagName(element: any): string; + attributeMap(element: any): any; + hasAttribute(element: any, attribute: string): any; + getAttribute(element: any, attribute: string): any; + setAttribute(element: any, name: string, value: string): void; + removeAttribute(element: any, attribute: string): any; + templateAwareRoot(el: any): any; + createHtmlDocument(): Document; + defaultDoc(): Document; + getBoundingClientRect(el: any): any; + getTitle(): string; + setTitle(newTitle: string): void; + elementMatches(n: any, selector: string): boolean; + isTemplateElement(el: any): boolean; + isTextNode(node: Node): boolean; + isCommentNode(node: Node): boolean; + isElementNode(node: Node): boolean; + hasShadowRoot(node: any): boolean; + isShadowRoot(node: any): boolean; + importIntoDoc(node: Node): Node; + isPageRule(rule: any): boolean; + isStyleRule(rule: any): boolean; + isMediaRule(rule: any): boolean; + isKeyframesRule(rule: any): boolean; + getHref(el: Element): string; + getEventKey(event: any): string; + getGlobalEventTarget(target: string): EventTarget; + getHistory(): History; + getLocation(): Location; + getBaseHref(): any; + } +} + +declare module "angular2/src/dom/dom_adapter" { + class DomAdapter { + static makeCurrent(): void; + logError(error: any): void; + attrToPropMap: any; + query(selector: string): any; + querySelector(el: any, selector: string): Node; + querySelectorAll(el: any, selector: string): List; + on(el: any, evt: any, listener: any): void; + onAndCancel(el: any, evt: any, listener: any): Function; + dispatchEvent(el: any, evt: any): void; + createMouseEvent(eventType: string): MouseEvent; + createEvent(eventType: any): Event; + getInnerHTML(el: any): any; + getOuterHTML(el: any): any; + nodeName(node: Node): string; + nodeValue(node: Node): string; + type(node: HTMLInputElement): string; + content(node: Node): Node; + firstChild(el: any): Node; + nextSibling(el: any): Node; + parentElement(el: any): any; + childNodes(el: any): List; + childNodesAsList(el: any): List; + clearNodes(el: any): void; + appendChild(el: any, node: any): void; + removeChild(el: any, node: any): void; + replaceChild(el: Node, newChild: any, oldChild: any): void; + remove(el: any): any; + insertBefore(el: any, node: any): void; + insertAllBefore(el: any, nodes: any): void; + insertAfter(el: any, node: any): void; + setInnerHTML(el: any, value: any): void; + getText(el: any): any; + setText(el: any, value: string): void; + getValue(el: any): any; + setValue(el: any, value: string): void; + getChecked(el: any): any; + setChecked(el: any, value: boolean): void; + createTemplate(html: any): HTMLElement; + createElement(tagName: any, doc?: Document): HTMLElement; + createTextNode(text: string, doc?: Document): Text; + createScriptTag(attrName: string, attrValue: string, doc?: Document): HTMLScriptElement; + createStyleElement(css: string, doc?: Document): HTMLStyleElement; + createShadowRoot(el: HTMLElement): DocumentFragment; + getShadowRoot(el: HTMLElement): DocumentFragment; + getHost(el: HTMLElement): HTMLElement; + clone(node: Node): Node; + hasProperty(element: any, name: string): boolean; + getElementsByClassName(element: any, name: string): any; + getElementsByTagName(element: any, name: string): any; + classList(element: any): List; + addClass(element: any, classname: string): void; + removeClass(element: any, classname: string): void; + hasClass(element: any, classname: string): any; + setStyle(element: any, stylename: string, stylevalue: string): void; + removeStyle(element: any, stylename: string): void; + getStyle(element: any, stylename: string): any; + tagName(element: any): string; + attributeMap(element: any): any; + hasAttribute(element: any, attribute: string): any; + getAttribute(element: any, attribute: string): any; + setAttribute(element: any, name: string, value: string): void; + removeAttribute(element: any, attribute: string): any; + templateAwareRoot(el: any): any; + createHtmlDocument(): Document; + defaultDoc(): Document; + getBoundingClientRect(el: any): any; + getTitle(): string; + setTitle(newTitle: string): void; + elementMatches(n: any, selector: string): boolean; + isTemplateElement(el: any): boolean; + isTextNode(node: Node): boolean; + isCommentNode(node: Node): boolean; + isElementNode(node: Node): boolean; + hasShadowRoot(node: any): boolean; + isShadowRoot(node: any): boolean; + importIntoDoc(node: Node): Node; + isPageRule(rule: any): boolean; + isStyleRule(rule: any): boolean; + isMediaRule(rule: any): boolean; + isKeyframesRule(rule: any): boolean; + getHref(el: Element): string; + getEventKey(event: any): string; + getGlobalEventTarget(target: string): EventTarget; + getHistory(): History; + getLocation(): Location; + getBaseHref(): any; + } + var DOM: DomAdapter; +} +declare module "angular2/src/dom/parse5_adapter" { + class Parse5DomAdapter { + static makeCurrent(): void; + logError(error: any): void; + attrToPropMap: any; + query(selector: string): any; + querySelector(el: any, selector: string): Node; + querySelectorAll(el: any, selector: string): List; + on(el: any, evt: any, listener: any): void; + onAndCancel(el: any, evt: any, listener: any): Function; + dispatchEvent(el: any, evt: any): void; + createMouseEvent(eventType: string): MouseEvent; + createEvent(eventType: any): Event; + getInnerHTML(el: any): any; + getOuterHTML(el: any): any; + nodeName(node: Node): string; + nodeValue(node: Node): string; + type(node: HTMLInputElement): string; + content(node: Node): Node; + firstChild(el: any): Node; + nextSibling(el: any): Node; + parentElement(el: any): any; + childNodes(el: any): List; + childNodesAsList(el: any): List; + clearNodes(el: any): void; + appendChild(el: any, node: any): void; + removeChild(el: any, node: any): void; + replaceChild(el: Node, newChild: any, oldChild: any): void; + remove(el: any): any; + insertBefore(el: any, node: any): void; + insertAllBefore(el: any, nodes: any): void; + insertAfter(el: any, node: any): void; + setInnerHTML(el: any, value: any): void; + getText(el: any): any; + setText(el: any, value: string): void; + getValue(el: any): any; + setValue(el: any, value: string): void; + getChecked(el: any): any; + setChecked(el: any, value: boolean): void; + createTemplate(html: any): HTMLElement; + createElement(tagName: any, doc?: Document): HTMLElement; + createTextNode(text: string, doc?: Document): Text; + createScriptTag(attrName: string, attrValue: string, doc?: Document): HTMLScriptElement; + createStyleElement(css: string, doc?: Document): HTMLStyleElement; + createShadowRoot(el: HTMLElement): DocumentFragment; + getShadowRoot(el: HTMLElement): DocumentFragment; + getHost(el: HTMLElement): HTMLElement; + clone(node: Node): Node; + hasProperty(element: any, name: string): boolean; + getElementsByClassName(element: any, name: string): any; + getElementsByTagName(element: any, name: string): any; + classList(element: any): List; + addClass(element: any, classname: string): void; + removeClass(element: any, classname: string): void; + hasClass(element: any, classname: string): any; + setStyle(element: any, stylename: string, stylevalue: string): void; + removeStyle(element: any, stylename: string): void; + getStyle(element: any, stylename: string): any; + tagName(element: any): string; + attributeMap(element: any): any; + hasAttribute(element: any, attribute: string): any; + getAttribute(element: any, attribute: string): any; + setAttribute(element: any, name: string, value: string): void; + removeAttribute(element: any, attribute: string): any; + templateAwareRoot(el: any): any; + createHtmlDocument(): Document; + defaultDoc(): Document; + getBoundingClientRect(el: any): any; + getTitle(): string; + setTitle(newTitle: string): void; + elementMatches(n: any, selector: string): boolean; + isTemplateElement(el: any): boolean; + isTextNode(node: Node): boolean; + isCommentNode(node: Node): boolean; + isElementNode(node: Node): boolean; + hasShadowRoot(node: any): boolean; + isShadowRoot(node: any): boolean; + importIntoDoc(node: Node): Node; + isPageRule(rule: any): boolean; + isStyleRule(rule: any): boolean; + isMediaRule(rule: any): boolean; + isKeyframesRule(rule: any): boolean; + getHref(el: Element): string; + getEventKey(event: any): string; + getGlobalEventTarget(target: string): EventTarget; + getHistory(): History; + getLocation(): Location; + getBaseHref(): any; + } +} + + + +declare module "angular2/src/di/binding" { + class Binding { + + } +} + +declare module "angular2/di" { + class Binding {} + function bind(token: any): any; + class Injector { + resolveAndCreateChild(bindings: [any]): Injector; + static resolveAndCreate(bindings: any): any; + static fromResolvedBindings(bindings: any): any; + asyncGet(di: any):any + get(di: any):any + } + var Inject: any; + var Injectable: any; + var Dependency: any; + var Optional: any; + + var ResolvedBinding: any; + var Key: any; + var KeyRegistry: any; + var TypeLiteral: any; + var NoBindingError: any; + var AbstractBindingError: any; + var AsyncBindingError: any; + var CyclicDependencyError: any; + var InstantiationError: any; + var InvalidBindingError: any; + var NoAnnotationError: any; + var OpaqueToken: any; + var ___esModule: any; + var InjectAnnotation: any; + var InjectPromiseAnnotation: any; + var InjectLazyAnnotation: any; + var OptionalAnnotation: any; + var InjectableAnnotation: any; + var DependencyAnnotation: any; +} diff --git a/src/typings/webpack.d.ts b/src/typings/webpack.d.ts new file mode 100644 index 0000000..530f652 --- /dev/null +++ b/src/typings/webpack.d.ts @@ -0,0 +1,5 @@ +declare var require: any; +declare var __filename: string; +declare var __dirname: string; +declare var global: any; +declare var module: any; From 8c3fe068a606779ce1e67c3db051ba08a0a05dfd Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 14:40:53 -0700 Subject: [PATCH 09/42] (#3) Index file, the public folder will include scripts for SEO Crawling. --- src/public/index.html | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/public/index.html diff --git a/src/public/index.html b/src/public/index.html new file mode 100644 index 0000000..850e689 --- /dev/null +++ b/src/public/index.html @@ -0,0 +1,44 @@ + + + + Angular2 Webpack Starter by @gdi2990 from @AngularClass + + + + + + + + + + + + + + + + + + + + + Loading... + + + + + + + + + + + From 2a544e05217ad8d39f97fba78225f76acf65c254 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 14:57:25 -0700 Subject: [PATCH 10/42] (#3) Bootstraps the entire app --- src/app/bootstrap.ts | 78 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/app/bootstrap.ts diff --git a/src/app/bootstrap.ts b/src/app/bootstrap.ts new file mode 100644 index 0000000..d078ce4 --- /dev/null +++ b/src/app/bootstrap.ts @@ -0,0 +1,78 @@ +/// + +// Angular 2 +import {bootstrap} from 'angular2/angular2'; + + +/* + * Common Injectables + * our custom helper injectables to configure our app differently using the dependency injection system + */ +import { + jitInjectables, + dynamicInjectables, + preGeneratedInjectables +} from '../common/changeDetectionInjectables'; +import { + html5locationInjectables, + hashlocationInjectables +} from '../common/locationInjectables'; + +/* + * Angular Modules + */ +import {httpInjectables, formInjectables} from 'angular2/angular2'; +import {routerInjectables} from 'angular2/router'; + +/* + * App Services + * our collection of injectables services + */ +import {appServicesInjectables} from './services/services'; + + +/* + * App Component + * our top level component that holds all of our components + */ +import {App} from './components/app'; + + +/* + * Universal injectables + */ +var universalInjectables = [ + // Angular's http/form/router services/bindings + httpInjectables, + formInjectables, + routerInjectables, + + // Our collection of services from /services + appServicesInjectables +]; + +/* + * Platform injectables + */ +var platformInjectables = [ + // if we want to use the Just-In-Time change detection + // bestChangeDetectionInjectables, + + // if we want to use hashBash url for the router + // hashlocationInjectables +]; + +/* + * Bootstrap our Angular app with a top level component `App` and inject + * our Universal/Platform services/bindings into Angular's dependency injection + */ +bootstrap( + // Top Level Component + App, + + // AppInjector + [ + universalInjectables, + platformInjectables + ] +); From 1975a2c196fd76f36fb521e3b0ec5a0da28661b4 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 14:57:52 -0700 Subject: [PATCH 11/42] (#3) entry file for components --- src/app/components/app.ts | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/app/components/app.ts diff --git a/src/app/components/app.ts b/src/app/components/app.ts new file mode 100644 index 0000000..6d147fe --- /dev/null +++ b/src/app/components/app.ts @@ -0,0 +1,110 @@ +/// + +/* + * Angular 2 + */ +import {Component, View} from 'angular2/angular2'; +import {RouteConfig} from 'angular2/router'; + +/* + * Directives + */ +import {coreDirectives, formDirectives} from 'angular2/angular2'; +import {routerDirectives} from 'angular2/router'; +// Import all of our custom app directives +import {appDirectives} from '../directives/directives'; + +/* + * App Pipes + * our collection of pipes registry + */ +import {appPipes} from '../pipes/pipes'; + +/* + * Components + */ +/* TODO: Create these Components +// We use a folder if we want separate files +import {Home} from './home/home'; +// Otherwise we only use one file for a component +import {Dashboard} from './dashboard'; +// A simple example of a Component using a Service +import {Todo} from './todo'; + +// RxJs examples +import {RxJsExamples} from './rxjs-examples/rxjs-examples'; +*/ +// Use webpack's `require` to get files as a raw string using raw-loader +let styles = require('./app.css'); + +/* + * App Component + * Top Level Component + * Simple router component example + */ +@Component({ + selector: 'app', // without [ ] means we are selecting the tag directly + viewBindings: [ appPipes ] +}) +@View({ + // needed in order to tell Angular's compiler what's in the template + directives: [ + // Angular's core directives + coreDirectives, + + // Angular's form directives + formDirectives, + + // Angular's router + routerDirectives, + + // Our collection of directives from /directives + appDirectives + ], + // include our .css file + styles: [ styles ], + template: ` +
+
+ Angular2 + + +
+
+ +
+ +
+ + + ` +}) +@RouteConfig([ + /* TODO: create these components + { path: '/', as: 'home', component: Home }, + { path: '/dashboard', as: 'dashboard', component: Dashboard }, + { path: '/todo', as: 'todo', component: Todo }, + { path: '/rxjs-examples/...', as: 'rxjs-examples', component: RxJsExamples } + */ +]) +export class App { + name: string; + constructor() { + this.name = 'angular'; + } +} From 8b70d9052b5cf5365cd242ff532d689ea32d464c Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 14:58:37 -0700 Subject: [PATCH 12/42] (#3) file to gather all directives. --- src/app/directives/directives.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/app/directives/directives.ts diff --git a/src/app/directives/directives.ts b/src/app/directives/directives.ts new file mode 100644 index 0000000..21538ef --- /dev/null +++ b/src/app/directives/directives.ts @@ -0,0 +1,29 @@ +/// +/* + * Angular 2 + */ +import {coreDirectives, formDirectives} from 'angular2/angular2'; +import {routerDirectives} from 'angular2/router'; + +/* + * App + */ +/* TODO: Create Autofocus directive */ +//import {Autofocus} from './Autofocus'; + +// global App only directives +export var appDirectives: Array = [ + //Autofocus +]; + +// global Angular core and other Angular module directives (form/router) +export var angularDirectives: Array = [ + // Angular's core directives + coreDirectives, + + // Angular's form directives + formDirectives, + + // Angular's router + routerDirectives +]; From 77aa3d9aaa16fa3090415e3328337eeb7316db55 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 14:59:03 -0700 Subject: [PATCH 13/42] (#3) File to gather all custom pipes. --- src/app/pipes/pipes.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/app/pipes/pipes.ts diff --git a/src/app/pipes/pipes.ts b/src/app/pipes/pipes.ts new file mode 100644 index 0000000..0f24445 --- /dev/null +++ b/src/app/pipes/pipes.ts @@ -0,0 +1,21 @@ +/// +/* + * Angular 2 + */ +import {Pipes} from 'angular2/change_detection'; + +/* + * App Pipes + */ +/* TODO: Create these pipe classes +import {capitalize} from './CapitalizePipe'; +import {rxAsync} from './RxPipe'; +*/ + +export var appPipes = [ + Pipes.extend({ + //'async': rxAsync, + //'capitalize': capitalize + // add more pipes to this Map + }) +]; From 0a9ceb97a272e740656bc0b17d452340ae913656 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 14:59:42 -0700 Subject: [PATCH 14/42] (#3) file that gathers all injectables from service classes. --- src/app/services/services.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/app/services/services.ts diff --git a/src/app/services/services.ts b/src/app/services/services.ts new file mode 100644 index 0000000..26866af --- /dev/null +++ b/src/app/services/services.ts @@ -0,0 +1,13 @@ +/// + +import {bind} from 'angular2/angular2'; + +/* TO DO: create these components and services. */ +//import {todoInjectables} from './TodoService'; +//import {githubInjectables} from '../components/rxjs-examples/autosuggest/Github'; + +// Include injectables that you want to have globally throughout our app +export var appServicesInjectables: Array = [ + //githubInjectables, + //todoInjectables, +]; From 56775714101aa0f3ad6c96bf3722cda56d9afb20 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 15:54:53 -0700 Subject: [PATCH 15/42] (#6) Home Component --- src/app/components/home/home.ts | 37 +++++++++++++++++++++++ src/app/components/home/styles/home.css | 3 ++ src/app/components/home/test/home.spec.ts | 27 +++++++++++++++++ src/app/components/home/views/home.html | 3 ++ 4 files changed, 70 insertions(+) create mode 100644 src/app/components/home/home.ts create mode 100644 src/app/components/home/styles/home.css create mode 100644 src/app/components/home/test/home.spec.ts create mode 100644 src/app/components/home/views/home.html diff --git a/src/app/components/home/home.ts b/src/app/components/home/home.ts new file mode 100644 index 0000000..abc6a4e --- /dev/null +++ b/src/app/components/home/home.ts @@ -0,0 +1,37 @@ +/// + +/* + * Angular 2 + * @Component: factory function + * @View: factory function + * @ViewEncapsulation: ENUM How the template and styles of a view should be encapsulated. + */ +import {Component, View, ViewEncapsulation} from 'angular2/angular2'; + +/* + * Directives + * @angularDirectives: Angular's core/form/router directives + * @appDirectives: Our collection of directives from /directives + */ +import {appDirectives, angularDirectives} from 'app/directives/directives'; + +// Webpack's `require` to get files +let styles = require('./styles/home.css'); +let template = require('./views/home.html'); + +// Simple external file component example +@Component({ + selector: 'home' +}) +@View({ + directives: [ angularDirectives, appDirectives ], + encapsulation: ViewEncapsulation.EMULATED, // EMULATED: Emulate scoping of styles by preprocessing the style rules and adding additional attributes to elements. + // include .html and .css file + styles: [ styles ], + template: template +}) +export class Home { + constructor() { + + } +} diff --git a/src/app/components/home/styles/home.css b/src/app/components/home/styles/home.css new file mode 100644 index 0000000..a90d011 --- /dev/null +++ b/src/app/components/home/styles/home.css @@ -0,0 +1,3 @@ +.home { + background-color: #F8F8F8; +} diff --git a/src/app/components/home/test/home.spec.ts b/src/app/components/home/test/home.spec.ts new file mode 100644 index 0000000..5a4c50c --- /dev/null +++ b/src/app/components/home/test/home.spec.ts @@ -0,0 +1,27 @@ +/// +import {Component, View} from 'angular2/angular2'; +import {Home} from './home'; + +@Component({ + selector: 'test-cmp' +}) +@View({ + directives: [ Home ] +}) +class TestComponent { + +} + +describe('Home', () => { + var home; + + beforeEach(() => { + home = new Home(); + }); + + it('should work', () => { + expect(home).toBeDefined(); + }); + +}); + diff --git a/src/app/components/home/views/home.html b/src/app/components/home/views/home.html new file mode 100644 index 0000000..204288d --- /dev/null +++ b/src/app/components/home/views/home.html @@ -0,0 +1,3 @@ +
+

Home

+
From 71f0ced8b16a613fc01957dec5eb7ad3fc15adff Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 15:55:24 -0700 Subject: [PATCH 16/42] (#6) Angular API documentation URL. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index e0a4415..0253096 100644 --- a/README.md +++ b/README.md @@ -58,5 +58,8 @@ then $ npm rune e2e ``` +# Angular 2.0 API +reference: https://angular.io/docs/js/latest/api/ + # License [MIT](/LICENSE) From ace9ec8f87c9d276f4ca84caa890ae197f3291c9 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 15:55:47 -0700 Subject: [PATCH 17/42] (#6) lib files. --- src/public/css/angular2_material.css | 1122 ++++++++++++++++++++++++ src/public/lib/traceur-runtime.min.js | 3 + src/public/lib/traceur-runtime.min.map | 2 + 3 files changed, 1127 insertions(+) create mode 100644 src/public/css/angular2_material.css create mode 100644 src/public/lib/traceur-runtime.min.js create mode 100644 src/public/lib/traceur-runtime.min.map diff --git a/src/public/css/angular2_material.css b/src/public/css/angular2_material.css new file mode 100644 index 0000000..56d65e0 --- /dev/null +++ b/src/public/css/angular2_material.css @@ -0,0 +1,1122 @@ +.md-shadow-bottom-z-1, [md-button].md-raised:not([disabled]), [md-button].md-fab { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); } + +.md-shadow-bottom-z-2, [md-button].md-raised:not([disabled]):focus, [md-button].md-raised:not([disabled]):hover, [md-button].md-fab:not([disabled]):focus, [md-button].md-fab:not([disabled]):hover { + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); } + +.md-shadow-bottom-z-1, [md-button].md-raised:not([disabled]), [md-button].md-fab { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); } + +.md-shadow-bottom-z-2, [md-button].md-raised:not([disabled]):focus, [md-button].md-raised:not([disabled]):hover, [md-button].md-fab:not([disabled]):focus, [md-button].md-fab:not([disabled]):hover { + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); } + +/** + * Mixin to create distinct classes for fab positions, e.g. ".md-fab-bottom-right". + */ +[md-button] { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + position: relative; + outline: none; + border: 0; + padding: 6px; + margin: 0; + background: transparent; + white-space: nowrap; + text-align: center; + font-weight: 500; + font-style: inherit; + font-variant: inherit; + font-size: inherit; + font-family: inherit; + line-height: inherit; + text-decoration: none; + cursor: pointer; + overflow: hidden; + -webkit-transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), -webkit-transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); } + [md-button]:focus { + outline: none; } + [md-button]:hover { + text-decoration: none; } + [md-button].md-cornered { + border-radius: 0; } + [md-button].md-icon { + padding: 0; + background: none; } + [md-button].md-raised { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + [md-button].md-fab { + z-index: 20; + width: 56px; + height: 56px; + border-radius: 50%; + overflow: hidden; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transition: 0.2s linear; + transition: 0.2s linear; + -webkit-transition-property: -webkit-transform, box-shadow; + transition-property: transform, box-shadow; } + [md-button].md-fab.md-fab-bottom-right { + top: auto; + right: 20px; + bottom: 20px; + left: auto; + position: absolute; } + [md-button].md-fab.md-fab-bottom-left { + top: auto; + right: auto; + bottom: 20px; + left: 20px; + position: absolute; } + [md-button].md-fab.md-fab-top-right { + top: 20px; + right: 20px; + bottom: auto; + left: auto; + position: absolute; } + [md-button].md-fab.md-fab-top-left { + top: 20px; + right: auto; + bottom: auto; + left: 20px; + position: absolute; } + [md-button].md-fab md-icon { + line-height: 56px; + margin-top: 0; } + [md-button].md-fab.md-mini { + width: 40px; + height: 40px; } + [md-button].md-fab.md-mini md-icon { + line-height: 40px; } + [md-button]:not([disabled]).md-raised:focus, [md-button]:not([disabled]).md-raised:hover, [md-button]:not([disabled]).md-fab:focus, [md-button]:not([disabled]).md-fab:hover { + -webkit-transform: translate3d(0, -1px, 0); + transform: translate3d(0, -1px, 0); } + +.md-toast-open-top [md-button].md-fab-top-left, .md-toast-open-top [md-button].md-fab-top-right { + -webkit-transform: translate3d(0, 42px, 0); + transform: translate3d(0, 42px, 0); } + .md-toast-open-top [md-button].md-fab-top-left:not([disabled]):focus, .md-toast-open-top [md-button].md-fab-top-left:not([disabled]):hover, .md-toast-open-top [md-button].md-fab-top-right:not([disabled]):focus, .md-toast-open-top [md-button].md-fab-top-right:not([disabled]):hover { + -webkit-transform: translate3d(0, 41px, 0); + transform: translate3d(0, 41px, 0); } + +.md-toast-open-bottom [md-button].md-fab-bottom-left, .md-toast-open-bottom [md-button].md-fab-bottom-right { + -webkit-transform: translate3d(0, -42px, 0); + transform: translate3d(0, -42px, 0); } + .md-toast-open-bottom [md-button].md-fab-bottom-left:not([disabled]):focus, .md-toast-open-bottom [md-button].md-fab-bottom-left:not([disabled]):hover, .md-toast-open-bottom [md-button].md-fab-bottom-right:not([disabled]):focus, .md-toast-open-bottom [md-button].md-fab-bottom-right:not([disabled]):hover { + -webkit-transform: translate3d(0, -43px, 0); + transform: translate3d(0, -43px, 0); } + +.md-button-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + width: 100%; } + +.md-button-group > [md-button] { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + display: block; + overflow: hidden; + width: 0; + border-width: 1px 0 1px 1px; + border-radius: 0; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; } + .md-button-group > [md-button]:first-child { + border-radius: 2px 0 0 2px; } + .md-button-group > [md-button]:last-child { + border-right-width: 1px; + border-radius: 0 2px 2px 0; } + +md-toolbar [md-button].md-fab { + background-color: white; } + +[md-button] { + border-radius: 3px; } + [md-button].md-primary { + color: #3f51b5; } + [md-button].md-primary.md-fab, [md-button].md-primary.md-raised { + color: rgba(255, 255, 255, 0.870588); + background-color: #3f51b5; } + [md-button].md-accent { + color: #ff5252; } + [md-button].md-accent.md-fab, [md-button].md-accent.md-raised { + color: white; + background-color: #ff5252; } + [md-button].md-warn { + color: #f44336; } + [md-button].md-warn.md-fab, [md-button].md-warn.md-raised { + color: white; + background-color: #f44336; } + [md-button].md-fab { + border-radius: 50%; + background-color: #ff5252; + color: white; } + [md-button].md-raised { + color: rgba(0, 0, 0, 0.870588); + background-color: #fafafa; } + +[md-button]:not([disabled]):focus, [md-button]:not([disabled]):hover { + background-color: rgba(158, 158, 158, 0.2); } +[md-button]:not([disabled]).md-primary.md-fab:hover, [md-button]:not([disabled]).md-primary.md-fab:focus, [md-button]:not([disabled]).md-primary.md-raised:hover, [md-button]:not([disabled]).md-primary.md-raised:focus { + background-color: #3949ab; } +[md-button]:not([disabled]).md-accent.md-fab:hover, [md-button]:not([disabled]).md-accent.md-fab:focus, [md-button]:not([disabled]).md-accent.md-raised:hover, [md-button]:not([disabled]).md-accent.md-raised:focus { + background-color: #d32f2f; } +[md-button]:not([disabled]).md-warn.md-fab:hover, [md-button]:not([disabled]).md-warn.md-fab:focus, [md-button]:not([disabled]).md-warn.md-raised:hover, [md-button]:not([disabled]).md-warn.md-raised:focus { + background-color: #d32f2f; } +[md-button]:not([disabled]).md-fab:hover, [md-button]:not([disabled]).md-fab:focus { + background-color: #d50000; } +[md-button]:not([disabled]).md-raised:hover, [md-button]:not([disabled]).md-raised:focus { + background-color: #eeeeee; } + +[md-button][disabled], [md-button][disabled].md-fab, [md-button][disabled].md-raised { + color: rgba(0, 0, 0, 0.26); + background-color: transparent; + cursor: not-allowed; } + +.md-shadow-bottom-z-1, [md-button].md-raised:not([disabled]), [md-button].md-fab { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); } + +.md-shadow-bottom-z-2, [md-button].md-raised:not([disabled]):focus, [md-button].md-raised:not([disabled]):hover, [md-button].md-fab:not([disabled]):focus, [md-button].md-fab:not([disabled]):hover { + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); } + +md-checkbox { + box-sizing: border-box; + display: block; + margin: 15px; + white-space: nowrap; + cursor: pointer; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + md-checkbox *, md-checkbox *:after { + box-sizing: border-box; } + md-checkbox[aria-checked="true"] .md-checkbox-icon { + border: none; } + md-checkbox[disabled] { + cursor: no-drop; } + md-checkbox:focus .md-checkbox-label:not(:empty) { + border-color: black; } + md-checkbox[aria-checked="true"] .md-checkbox-icon:after { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + left: 6px; + top: 2px; + display: table; + width: 6px; + height: 12px; + border: 2px solid; + border-top: 0; + border-left: 0; + content: ' '; } + +.md-checkbox-container { + position: relative; + top: 4px; + display: inline-block; + width: 18px; + height: 18px; } + .md-checkbox-container:after { + content: ''; + position: absolute; + top: -10px; + right: -10px; + bottom: -10px; + left: -10px; } + .md-checkbox-container .md-ripple-container { + position: absolute; + display: block; + width: auto; + height: auto; + left: -15px; + top: -15px; + right: -15px; + bottom: -15px; } + +.md-checkbox-icon { + -webkit-transition: 240ms; + transition: 240ms; + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; + border: 2px solid; + border-radius: 2px; } + +.md-checkbox-label { + border: 1px dotted transparent; + position: relative; + display: inline-block; + margin-left: 10px; + vertical-align: middle; + white-space: normal; + pointer-events: none; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; } + +md-checkbox .md-ripple { + color: #e53935; } +md-checkbox[aria-checked="true"] .md-ripple { + color: #757575; } +md-checkbox .md-checkbox-icon { + border-color: rgba(0, 0, 0, 0.54); } +md-checkbox[aria-checked="true"] .md-checkbox-icon { + background-color: rgba(255, 82, 82, 0.87); } +md-checkbox[aria-checked="true"] .md-checkbox-icon:after { + border-color: #eeeeee; } +md-checkbox:not([disabled]).md-primary .md-ripple { + color: #3949ab; } +md-checkbox:not([disabled]).md-primary[aria-checked="true"] .md-ripple { + color: #757575; } +md-checkbox:not([disabled]).md-primary .md-checkbox-icon { + border-color: rgba(0, 0, 0, 0.54); } +md-checkbox:not([disabled]).md-primary[aria-checked="true"] .md-checkbox-icon { + background-color: rgba(63, 81, 181, 0.87); } +md-checkbox:not([disabled]).md-primary[aria-checked="true"] .md-checkbox-icon:after { + border-color: #eeeeee; } +md-checkbox:not([disabled]).md-warn .md-ripple { + color: #e53935; } +md-checkbox:not([disabled]).md-warn .md-checkbox-icon { + border-color: rgba(0, 0, 0, 0.54); } +md-checkbox:not([disabled]).md-warn[aria-checked="true"] .md-checkbox-icon { + background-color: rgba(244, 67, 54, 0.87); } +md-checkbox:not([disabled]).md-warn[aria-checked="true"] .md-checkbox-icon:after { + border-color: #eeeeee; } +md-checkbox[disabled] .md-checkbox-icon { + border-color: rgba(0, 0, 0, 0.26); } +md-checkbox[disabled][aria-checked="true"] .md-checkbox-icon { + background-color: rgba(0, 0, 0, 0.26); } + +md-grid-list { + display: block; + position: relative; } + +md-grid-tile { + display: block; + position: absolute; } + md-grid-tile figure { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + position: absolute; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 0; + margin: 0; } + md-grid-tile md-grid-tile-header, md-grid-tile md-grid-tile-footer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 48px; + color: #fff; + background: rgba(0, 0, 0, 0.18); + overflow: hidden; + position: absolute; + left: 0; + right: 0; } + md-grid-tile md-grid-tile-header h3, md-grid-tile md-grid-tile-header h4, md-grid-tile md-grid-tile-footer h3, md-grid-tile md-grid-tile-footer h4 { + font-weight: 400; + margin: 0 0 0 16px; } + md-grid-tile md-grid-tile-header h3, md-grid-tile md-grid-tile-footer h3 { + font-size: 14px; } + md-grid-tile md-grid-tile-header h4, md-grid-tile md-grid-tile-footer h4 { + font-size: 12px; } + md-grid-tile md-grid-tile-header { + top: 0; } + md-grid-tile md-grid-tile-footer { + bottom: 0; } + +md-input-container { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + position: relative; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + overflow-x: hidden; + padding: 2px; + padding-bottom: 26px; + /* + * The .md-input class is added to the input/textarea + */ } + md-input-container > md-icon { + position: absolute; + top: 5px; + left: 2px; } + md-input-container > md-icon + input { + margin-left: 56px; } + md-input-container textarea, md-input-container input[type="text"], md-input-container input[type="password"], md-input-container input[type="datetime"], md-input-container input[type="datetime-local"], md-input-container input[type="date"], md-input-container input[type="month"], md-input-container input[type="time"], md-input-container input[type="week"], md-input-container input[type="number"], md-input-container input[type="email"], md-input-container input[type="url"], md-input-container input[type="search"], md-input-container input[type="tel"], md-input-container input[type="color"] { + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; } + md-input-container textarea { + resize: none; + overflow: hidden; } + md-input-container textarea.md-input { + min-height: 56px; + -ms-flex-preferred-size: auto; } + md-input-container label:not(.md-no-float), md-input-container .md-placeholder:not(.md-select-label) { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + pointer-events: none; + -webkit-font-smoothing: antialiased; + padding-left: 2px; + z-index: 1; + -webkit-transform: translate3d(0, 24px, 0) scale(1); + transform: translate3d(0, 24px, 0) scale(1); + -webkit-transform-origin: left top; + -ms-transform-origin: left top; + transform-origin: left top; + -webkit-transition: -webkit-transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.25s; + transition: transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.25s; } + md-input-container .md-placeholder:not(.md-select-label) { + position: absolute; + top: 0; + opacity: 0; + -webkit-transition-property: opacity, -webkit-transform; + transition-property: opacity, transform; + -webkit-transform: translate3d(0, 30px, 0); + transform: translate3d(0, 30px, 0); } + md-input-container.md-input-focused .md-placeholder { + opacity: 1; + -webkit-transform: translate3d(0, 24px, 0); + transform: translate3d(0, 24px, 0); } + md-input-container.md-input-has-value .md-placeholder { + -webkit-transition: none; + transition: none; + opacity: 0; } + md-input-container:not(.md-input-has-value) input:not(:focus) { + color: transparent; } + md-input-container .md-input { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; + display: block; + background: none; + padding: 2px 2px 1px; + border-width: 0 0 1px 0; + line-height: 26px; + -ms-flex-preferred-size: 26px; + border-radius: 0; } + md-input-container .md-input:focus { + outline: none; } + md-input-container .md-input:invalid { + outline: none; + box-shadow: none; } + md-input-container .md-char-counter { + -webkit-font-smoothing: antialiased; + position: absolute; + font-size: 12px; + line-height: 24px; + bottom: 2px; + right: 2px; } + md-input-container.md-input-focused label:not(.md-no-float), md-input-container.md-input-has-value label:not(.md-no-float) { + -webkit-transform: translate3d(0, 4px, 0) scale(0.75); + transform: translate3d(0, 4px, 0) scale(0.75); } + md-input-container.md-input-focused .md-input { + padding-bottom: 0; + border-width: 0 0 2px 0; } + md-input-container .md-input[disabled], [disabled] md-input-container .md-input { + background-position: 0 bottom; + background-size: 3px 1px; + background-repeat: repeat-x; } + +md-input-container .md-input { + color: rgba(0, 0, 0, 0.87); + border-color: rgba(0, 0, 0, 0.12); } + md-input-container .md-input::-webkit-input-placeholder, md-input-container .md-input::-moz-placeholder, md-input-container .md-input:-moz-placeholder, md-input-container .md-input:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.26); } +md-input-container > md-icon { + color: rgba(0, 0, 0, 0.87); } +md-input-container label, md-input-container .md-placeholder { + color: rgba(0, 0, 0, 0.26); } +md-input-container div[ng-messages] { + color: #f44336; } +md-input-container:not(.md-input-invalid).md-input-has-value label { + color: rgba(0, 0, 0, 0.54); } +md-input-container:not(.md-input-invalid).md-input-focused .md-input { + border-color: #3f51b5; } +md-input-container:not(.md-input-invalid).md-input-focused label { + color: #3f51b5; } +md-input-container:not(.md-input-invalid).md-input-focused md-icon { + color: #3f51b5; } +md-input-container:not(.md-input-invalid).md-input-focused.md-accent .md-input { + border-color: #f44336; } +md-input-container:not(.md-input-invalid).md-input-focused.md-accent label { + color: #f44336; } +md-input-container:not(.md-input-invalid).md-input-focused.md-warn .md-input { + border-color: #f44336; } +md-input-container:not(.md-input-invalid).md-input-focused.md-warn label { + color: #f44336; } +md-input-container.md-input-invalid .md-input { + border-color: #f44336; } +md-input-container.md-input-invalid label { + color: #f44336; } +md-input-container.md-input-invalid .md-char-counter { + color: #f44336; } +md-input-container .md-input[disabled], [disabled] md-input-container .md-input { + border-bottom-color: transparent; + color: rgba(0, 0, 0, 0.26); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.12) 0%, rgba(0, 0, 0, 0.12) 33%, transparent 0%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.12) 0%, rgba(0, 0, 0, 0.12) 33%, transparent 0%); + background-image: -ms-linear-gradient(left, transparent 0%, rgba(0, 0, 0, 0.12) 100%); } + +md-progress-linear { + display: block; + width: 100%; + height: 5px; } + md-progress-linear *, md-progress-linear *:before { + box-sizing: border-box; } + md-progress-linear .md-progress-linear-container { + overflow: hidden; + position: relative; + height: 5px; + top: 5px; + -webkit-transform: translate(0, 5px) scale(1, 0); + -ms-transform: translate(0, 5px) scale(1, 0); + transform: translate(0, 5px) scale(1, 0); + -webkit-transition: all .3s linear; + transition: all .3s linear; } + md-progress-linear .md-progress-linear-container.md-ready { + -webkit-transform: translate(0, 0) scale(1, 1); + -ms-transform: translate(0, 0) scale(1, 1); + transform: translate(0, 0) scale(1, 1); } + md-progress-linear .md-progress-linear-bar { + height: 5px; + position: absolute; + width: 100%; } + md-progress-linear .md-progress-linear-bar1, md-progress-linear .md-progress-linear-bar2 { + -webkit-transition: all 0.2s linear; + transition: all 0.2s linear; } + md-progress-linear[md-mode="determinate"] .md-progress-linear-bar1 { + display: none; } + md-progress-linear[md-mode="indeterminate"] .md-progress-linear-bar1 { + -webkit-animation: indeterminate1 4s infinite linear; + animation: indeterminate1 4s infinite linear; } + md-progress-linear[md-mode="indeterminate"] .md-progress-linear-bar2 { + -webkit-animation: indeterminate2 4s infinite linear; + animation: indeterminate2 4s infinite linear; } + md-progress-linear[md-mode="buffer"] .md-progress-linear-container { + background-color: transparent !important; } + md-progress-linear[md-mode="buffer"] .md-progress-linear-dashed:before { + content: ""; + display: block; + height: 5px; + width: 100%; + margin-top: 0px; + position: absolute; + background-color: transparent; + background-size: 10px 10px !important; + background-position: 0px -23px; + -webkit-animation: buffer 3s infinite linear; + animation: buffer 3s infinite linear; } + md-progress-linear[md-mode="query"] .md-progress-linear-bar2 { + -webkit-animation: query .8s infinite cubic-bezier(0.39, 0.575, 0.565, 1); + animation: query .8s infinite cubic-bezier(0.39, 0.575, 0.565, 1); } + +@-webkit-keyframes indeterminate1 { + 0% { + -webkit-transform: translateX(-25%) scale(.5, 1); + transform: translateX(-25%) scale(.5, 1); } + + 10% { + -webkit-transform: translateX(25%) scale(.5, 1); + transform: translateX(25%) scale(.5, 1); } + + 19.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 20% { + -webkit-transform: translateX(-37.5%) scale(.25, 1); + transform: translateX(-37.5%) scale(.25, 1); } + + 30% { + -webkit-transform: translateX(37.5%) scale(.25, 1); + transform: translateX(37.5%) scale(.25, 1); } + + 34.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 36.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 37% { + -webkit-transform: translateX(-37.5%) scale(.25, 1); + transform: translateX(-37.5%) scale(.25, 1); } + + 47% { + -webkit-transform: translateX(20%) scale(.25, 1); + transform: translateX(20%) scale(.25, 1); } + + 52% { + -webkit-transform: translateX(35%) scale(.05, 1); + transform: translateX(35%) scale(.05, 1); } + + 55% { + -webkit-transform: translateX(35%) scale(.1, 1); + transform: translateX(35%) scale(.1, 1); } + + 58% { + -webkit-transform: translateX(50%) scale(.1, 1); + transform: translateX(50%) scale(.1, 1); } + + 61.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 69.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 70% { + -webkit-transform: translateX(-37.5%) scale(.25, 1); + transform: translateX(-37.5%) scale(.25, 1); } + + 80% { + -webkit-transform: translateX(20%) scale(.25, 1); + transform: translateX(20%) scale(.25, 1); } + + 85% { + -webkit-transform: translateX(35%) scale(.05, 1); + transform: translateX(35%) scale(.05, 1); } + + 88% { + -webkit-transform: translateX(35%) scale(.1, 1); + transform: translateX(35%) scale(.1, 1); } + + 91% { + -webkit-transform: translateX(50%) scale(.1, 1); + transform: translateX(50%) scale(.1, 1); } + + 92.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 93% { + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } + + 100% { + -webkit-transform: translateX(-25%) scale(.5, 1); + transform: translateX(-25%) scale(.5, 1); } } + +@keyframes indeterminate1 { + 0% { + -webkit-transform: translateX(-25%) scale(.5, 1); + transform: translateX(-25%) scale(.5, 1); } + + 10% { + -webkit-transform: translateX(25%) scale(.5, 1); + transform: translateX(25%) scale(.5, 1); } + + 19.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 20% { + -webkit-transform: translateX(-37.5%) scale(.25, 1); + transform: translateX(-37.5%) scale(.25, 1); } + + 30% { + -webkit-transform: translateX(37.5%) scale(.25, 1); + transform: translateX(37.5%) scale(.25, 1); } + + 34.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 36.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 37% { + -webkit-transform: translateX(-37.5%) scale(.25, 1); + transform: translateX(-37.5%) scale(.25, 1); } + + 47% { + -webkit-transform: translateX(20%) scale(.25, 1); + transform: translateX(20%) scale(.25, 1); } + + 52% { + -webkit-transform: translateX(35%) scale(.05, 1); + transform: translateX(35%) scale(.05, 1); } + + 55% { + -webkit-transform: translateX(35%) scale(.1, 1); + transform: translateX(35%) scale(.1, 1); } + + 58% { + -webkit-transform: translateX(50%) scale(.1, 1); + transform: translateX(50%) scale(.1, 1); } + + 61.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 69.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 70% { + -webkit-transform: translateX(-37.5%) scale(.25, 1); + transform: translateX(-37.5%) scale(.25, 1); } + + 80% { + -webkit-transform: translateX(20%) scale(.25, 1); + transform: translateX(20%) scale(.25, 1); } + + 85% { + -webkit-transform: translateX(35%) scale(.05, 1); + transform: translateX(35%) scale(.05, 1); } + + 88% { + -webkit-transform: translateX(35%) scale(.1, 1); + transform: translateX(35%) scale(.1, 1); } + + 91% { + -webkit-transform: translateX(50%) scale(.1, 1); + transform: translateX(50%) scale(.1, 1); } + + 92.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 93% { + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } + + 100% { + -webkit-transform: translateX(-25%) scale(.5, 1); + transform: translateX(-25%) scale(.5, 1); } } + +@-webkit-keyframes indeterminate2 { + 0% { + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } + + 25.99% { + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } + + 28% { + -webkit-transform: translateX(-37.5%) scale(.25, 1); + transform: translateX(-37.5%) scale(.25, 1); } + + 38% { + -webkit-transform: translateX(37.5%) scale(.25, 1); + transform: translateX(37.5%) scale(.25, 1); } + + 42.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 46.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 49.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 50% { + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } + + 60% { + -webkit-transform: translateX(-25%) scale(.5, 1); + transform: translateX(-25%) scale(.5, 1); } + + 70% { + -webkit-transform: translateX(25%) scale(.5, 1); + transform: translateX(25%) scale(.5, 1); } + + 79.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } } + +@keyframes indeterminate2 { + 0% { + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } + + 25.99% { + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } + + 28% { + -webkit-transform: translateX(-37.5%) scale(.25, 1); + transform: translateX(-37.5%) scale(.25, 1); } + + 38% { + -webkit-transform: translateX(37.5%) scale(.25, 1); + transform: translateX(37.5%) scale(.25, 1); } + + 42.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 46.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 49.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } + + 50% { + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } + + 60% { + -webkit-transform: translateX(-25%) scale(.5, 1); + transform: translateX(-25%) scale(.5, 1); } + + 70% { + -webkit-transform: translateX(25%) scale(.5, 1); + transform: translateX(25%) scale(.5, 1); } + + 79.99% { + -webkit-transform: translateX(50%) scale(0, 1); + transform: translateX(50%) scale(0, 1); } } + +@-webkit-keyframes query { + 0% { + opacity: 1; + -webkit-transform: translateX(35%) scale(.3, 1); + transform: translateX(35%) scale(.3, 1); } + + 100% { + opacity: 0; + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } } + +@keyframes query { + 0% { + opacity: 1; + -webkit-transform: translateX(35%) scale(.3, 1); + transform: translateX(35%) scale(.3, 1); } + + 100% { + opacity: 0; + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } } + +@-webkit-keyframes buffer { + 0% { + opacity: 1; + background-position: 0px -23px; } + + 50% { + opacity: 0; } + + 100% { + opacity: 1; + background-position: -200px -23px; } } + +@keyframes buffer { + 0% { + opacity: 1; + background-position: 0px -23px; } + + 50% { + opacity: 0; } + + 100% { + opacity: 1; + background-position: -200px -23px; } } + +md-progress-linear .md-progress-linear-container { + background-color: #c5cae9; } +md-progress-linear .md-progress-linear-bar { + background-color: #3f51b5; } +md-progress-linear.md-warn .md-progress-linear-container { + background-color: #ffcdd2; } +md-progress-linear.md-warn .md-progress-linear-bar { + background-color: #f44336; } +md-progress-linear.md-accent .md-progress-linear-container { + background-color: #ffcdd2; } +md-progress-linear.md-accent .md-progress-linear-bar { + background-color: #ff5252; } +md-progress-linear[md-mode=buffer].md-primary .md-progress-linear-bar1 { + background-color: #c5cae9; } +md-progress-linear[md-mode=buffer].md-primary .md-progress-linear-dashed:before { + background: -webkit-radial-gradient(#c5cae9 0%, #c5cae9 16%, transparent 42%); + background: radial-gradient(#c5cae9 0%, #c5cae9 16%, transparent 42%); } +md-progress-linear[md-mode=buffer].md-warn .md-progress-linear-bar1 { + background-color: #ffcdd2; } +md-progress-linear[md-mode=buffer].md-warn .md-progress-linear-dashed:before { + background: -webkit-radial-gradient(#ffcdd2 0%, #ffcdd2 16%, transparent 42%); + background: radial-gradient(#ffcdd2 0%, #ffcdd2 16%, transparent 42%); } +md-progress-linear[md-mode=buffer].md-accent .md-progress-linear-bar1 { + background-color: #ffcdd2; } +md-progress-linear[md-mode=buffer].md-accent .md-progress-linear-dashed:before { + background: -webkit-radial-gradient(#ffcdd2 0%, #ffcdd2 16%, transparent 42%); + background: radial-gradient(#ffcdd2 0%, #ffcdd2 16%, transparent 42%); } + +.md-shadow-bottom-z-1, [md-button].md-raised:not([disabled]), [md-button].md-fab { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); } + +.md-shadow-bottom-z-2, [md-button].md-raised:not([disabled]):focus, [md-button].md-raised:not([disabled]):hover, [md-button].md-fab:not([disabled]):focus, [md-button].md-fab:not([disabled]):hover { + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); } + +md-radio-button { + display: block; + margin: 15px; + white-space: nowrap; + cursor: pointer; } + +md-radio-group { + border: 1px dotted transparent; + display: block; + outline: none; } + +.md-radio-container { + box-sizing: border-box; + position: relative; + top: 4px; + display: inline-block; + width: 16px; + height: 16px; + cursor: pointer; } + +.md-radio-off { + box-sizing: border-box; + position: absolute; + top: 0; + left: 0; + width: 16px; + height: 16px; + border: solid 2px; + border-radius: 50%; + -webkit-transition: border-color ease 0.28s; + transition: border-color ease 0.28s; } + +.md-radio-on { + box-sizing: border-box; + position: absolute; + top: 0; + left: 0; + width: 16px; + height: 16px; + border-radius: 50%; + -webkit-transition: -webkit-transform ease 0.28s; + transition: transform ease 0.28s; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); } + .md-radio-checked .md-radio-on { + -webkit-transform: scale(0.55); + -ms-transform: scale(0.55); + transform: scale(0.55); } + +.md-radio-label { + position: relative; + display: inline-block; + margin-left: 10px; + margin-right: 10px; + vertical-align: middle; + white-space: normal; + width: auto; } + +.md-radio-off { + border-color: rgba(0, 0, 0, 0.54); } + +.md-radio-on { + background-color: rgba(255, 82, 82, 0.87); } + +.md-radio-checked .md-radio-off { + border-color: rgba(255, 82, 82, 0.87); } + +p md-radio-group:not([disabled]) md-radio:not([disabled]).md-primary .md-radio-on { + background-color: rgba(63, 81, 181, 0.87); } +p md-radio-group:not([disabled]) md-radio:not([disabled]).md-primary.md-radio-checked .md-radio-off { + border-color: rgba(63, 81, 181, 0.87); } +p md-radio-group:not([disabled]) md-radio:not([disabled]).md-primary.md-radio-checked .md-ink-ripple { + color: rgba(63, 81, 181, 0.87); } +p md-radio-group:not([disabled]) md-radio:not([disabled]).md-primary .md-radio-container .md-ripple { + color: #3949ab; } +p md-radio-group:not([disabled]) md-radio:not([disabled]).md-warn .md-radio-on { + background-color: rgba(244, 67, 54, 0.87); } +p md-radio-group:not([disabled]) md-radio:not([disabled]).md-warn.md-radio-checked .md-radio-off { + border-color: rgba(244, 67, 54, 0.87); } +p md-radio-group:not([disabled]) md-radio:not([disabled]).md-warn.md-radio-checked .md-ink-ripple { + color: rgba(244, 67, 54, 0.87); } +p md-radio-group:not([disabled]) md-radio:not([disabled]).md-warn .md-radio-container .md-ripple { + color: #e53935; } + +md-radio-button[disabled] .md-radio-container .md-radio-off, md-radio-button[disabled] .md-radio-container .md-radio-on, md-radio-group[disabled] md-radio-button .md-radio-container .md-radio-off, md-radio-group[disabled] md-radio-button .md-radio-container .md-radio-on { + border-color: rgba(0, 0, 0, 0.26); } + +md-radio-group { + border: 1px dotted transparent; + display: block; + outline: none; } + +md-switch { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + margin: 15px; + white-space: nowrap; + cursor: pointer; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + md-switch * { + box-sizing: border-box; } + md-switch .md-switch-container { + cursor: -webkit-grab; + cursor: grab; + width: 36px; + height: 24px; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 8px; } + md-switch:not([disabled]) .md-switch-dragging, md-switch:not([disabled]).md-switch-dragging .md-switch-container { + cursor: -webkit-grabbing; + cursor: grabbing; } + md-switch .md-switch-label { + border: 0 transparent; } + md-switch .md-switch-bar { + left: 1px; + width: 34px; + top: 5px; + height: 14px; + border-radius: 8px; + position: absolute; } + md-switch .md-switch-thumb-container { + top: 2px; + left: 0; + width: 16px; + position: absolute; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 1; } + md-switch[aria-checked="true"] .md-switch-thumb-container { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } + md-switch .md-switch-thumb { + position: absolute; + margin: 0; + left: 0; + top: 0; + outline: none; + height: 20px; + width: 20px; + border-radius: 50%; + box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.26); } + md-switch .md-switch-thumb .md-ripple-container { + position: absolute; + display: block; + width: auto; + height: auto; + left: -20px; + top: -20px; + right: -20px; + bottom: -20px; } + md-switch:not(.md-switch-dragging) .md-switch-bar, md-switch:not(.md-switch-dragging) .md-switch-thumb-container, md-switch:not(.md-switch-dragging) .md-switch-thumb { + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + -webkit-transition-property: -webkit-transform, background-color; + transition-property: transform, background-color; } + md-switch:not(.md-switch-dragging) .md-switch-bar, md-switch:not(.md-switch-dragging) .md-switch-thumb { + -webkit-transition-delay: 0.05s; + transition-delay: 0.05s; } + +@media screen and (-ms-high-contrast: active) { + md-switch .md-switch-bar { + background-color: #666; } + md-switch[aria-checked="true"] .md-switch-bar { + background-color: #9E9E9E; } + md-switch.md-default-theme .md-switch-thumb { + background-color: #fff; } } + +md-switch .md-switch-thumb { + background-color: #fafafa; } +md-switch .md-switch-bar { + background-color: #9e9e9e; } +md-switch[aria-checked="true"] .md-switch-thumb { + background-color: #ff5252; } +md-switch[aria-checked="true"] .md-switch-bar { + background-color: rgba(255, 82, 82, 0.5); } +md-switch[aria-checked="true"].md-primary .md-switch-thumb { + background-color: #3f51b5; } +md-switch[aria-checked="true"].md-primary .md-switch-bar { + background-color: rgba(63, 81, 181, 0.5); } +md-switch[aria-checked="true"].md-warn .md-switch-thumb { + background-color: #f44336; } +md-switch[aria-checked="true"].md-warn .md-switch-bar { + background-color: rgba(244, 67, 54, 0.5); } +md-switch[disabled] .md-switch-thumb { + background-color: #bdbdbd; } +md-switch[disabled] .md-switch-bar { + background-color: rgba(0, 0, 0, 0.12); } +md-switch:focus .md-switch-label:not(:empty) { + border: 1px dotted rgba(0, 0, 0, 0.87); } diff --git a/src/public/lib/traceur-runtime.min.js b/src/public/lib/traceur-runtime.min.js new file mode 100644 index 0000000..ec9f201 --- /dev/null +++ b/src/public/lib/traceur-runtime.min.js @@ -0,0 +1,3 @@ +!function(a){"use strict";function b(a,b,c){for(var d=[b],e=0;e0;)e.unshift("..");0===e.length&&e.push(".")}return b+e.join("/")+c}function d(b){var d=b[i.PATH]||"";return d=c(d),b[i.PATH]=d,a(b[i.SCHEME],b[i.USER_INFO],b[i.DOMAIN],b[i.PORT],b[i.PATH],b[i.QUERY_DATA],b[i.FRAGMENT])}function e(a){var c=b(a);return d(c)}function f(a,c){var e=b(c),f=b(a);if(e[i.SCHEME])return d(e);e[i.SCHEME]=f[i.SCHEME];for(var g=i.SCHEME;g<=i.PORT;g++)e[g]||(e[g]=f[g]);if("/"==e[i.PATH][0])return d(e);var h=f[i.PATH],j=h.lastIndexOf("/");return h=h.slice(0,j+1)+e[i.PATH],e[i.PATH]=h,d(e)}function g(a){if(!a)return!1;if("/"===a[0])return!0;var c=b(a);return c[i.SCHEME]?!0:!1}var h=new RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([\\w\\d\\-\\u0100-\\uffff.%]*)(?::([0-9]+))?)?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$"),i={SCHEME:1,USER_INFO:2,DOMAIN:3,PORT:4,PATH:5,QUERY_DATA:6,FRAGMENT:7};$traceurRuntime.canonicalizeUrl=e,$traceurRuntime.isAbsolute=g,$traceurRuntime.removeDotSegments=c,$traceurRuntime.resolveUrl=f}(),function(a){"use strict";function b(a,b){this.url=a,this.value_=b}function c(a,b){this.message=this.constructor.name+": "+this.stripCause(b)+" in "+a,b instanceof c||!b.stack?this.stack="":this.stack=this.stripStack(b.stack)}function d(a,b){var c=[],d=b-3;0>d&&(d=0);for(var e=d;b>e;e++)c.push(a[e]);return c}function e(a,b){var c=b+1;c>a.length-1&&(c=a.length-1);for(var d=[],e=b;c>=e;e++)d.push(a[e]);return d}function f(a){for(var b="",c=0;a-1>c;c++)b+="-";return b}function g(a,c){b.call(this,a,null),this.func=c}function h(a){if(a){var b=r.normalize(a);return o[b]}}function i(a){var b=arguments[1],c=Object.create(null);return Object.getOwnPropertyNames(a).forEach(function(d){var e,f;if(b===q){var g=Object.getOwnPropertyDescriptor(a,d);g.get&&(e=g.get)}e||(f=a[d],e=function(){return f}),Object.defineProperty(c,d,{get:e,enumerable:!0})}),Object.preventExtensions(c),c}var j,k=$traceurRuntime,l=k.canonicalizeUrl,m=k.resolveUrl,n=k.isAbsolute,o=Object.create(null);j=a.location&&a.location.href?m(a.location.href,"./"):"",c.prototype=Object.create(Error.prototype),c.prototype.constructor=c,c.prototype.stripError=function(a){return a.replace(/.*Error:/,this.constructor.name+":")},c.prototype.stripCause=function(a){return a?a.message?this.stripError(a.message):a+"":""},c.prototype.loadedBy=function(a){this.stack+="\n loaded by "+a},c.prototype.stripStack=function(a){var b=[];return a.split("\n").some(function(a){return/UncoatedModuleInstantiator/.test(a)?!0:void b.push(a)}),b[0]=this.stripError(b[0]),b.join("\n")},g.prototype=Object.create(b.prototype),g.prototype.getUncoatedModule=function(){var b=this;if(this.value_)return this.value_;try{var g;return void 0!==typeof $traceurRuntime&&$traceurRuntime.require&&(g=$traceurRuntime.require.bind(null,this.url)),this.value_=this.func.call(a,g)}catch(h){if(h instanceof c)throw h.loadedBy(this.url),h;if(h.stack){var i=this.func.toString().split("\n"),j=[];h.stack.split("\n").some(function(a,c){if(a.indexOf("UncoatedModuleInstantiator.getUncoatedModule")>0)return!0;var g=/(at\s[^\s]*\s).*>:(\d*):(\d*)\)/.exec(a);if(g){var h=parseInt(g[2],10);j=j.concat(d(i,h)),1===c?j.push(f(g[3])+"^ "+b.url):j.push(f(g[3])+"^"),j=j.concat(e(i,h)),j.push("= = = = = = = = =")}else j.push(a)}),h.stack=j.join("\n")}throw new c(this.url,h)}};var p=Object.create(null),q={},r={normalize:function(a,b,c){if("string"!=typeof a)throw new TypeError("module name must be a string, not "+typeof a);if(n(a))return l(a);if(/[^\.]\/\.\.\//.test(a))throw new Error("module name embeds /../: "+a);return"."===a[0]&&b?m(b,a):l(a)},get:function(a){var b=h(a);if(!b)return void 0;var c=p[b.url];return c?c:(c=i(b.getUncoatedModule(),q),p[b.url]=c)},set:function(a,b){a=String(a),o[a]=new g(a,function(){return b}),p[a]=b},get baseURL(){return j},set baseURL(a){j=String(a)},registerModule:function(a,b,c){var d=r.normalize(a);if(o[d])throw new Error("duplicate module named "+d);o[d]=new g(d,c)},bundleStore:Object.create(null),register:function(a,b,c){b&&(b.length||c.length)?this.bundleStore[a]={deps:b,execute:function(){var a=arguments,d={};b.forEach(function(b,c){return d[b]=a[c]});var e=c.call(this,d);return e.execute.call(this),e.exports}}:this.registerModule(a,b,c)},getAnonymousModule:function(b){return new i(b.call(a),q)}},s=new i({ModuleStore:r});r.set("@traceur/src/runtime/ModuleStore.js",s);var t=$traceurRuntime.setupGlobals;$traceurRuntime.setupGlobals=function(a){t(a)},$traceurRuntime.ModuleStore=r,a.System={register:r.register.bind(r),registerModule:r.registerModule.bind(r),get:r.get,set:r.set,normalize:r.normalize}}("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this),System.registerModule("traceur-runtime@0.0.91/src/runtime/async.js",[],function(){"use strict";function a(){}function b(){}function c(a){return a.prototype=j(b.prototype),a.__proto__=b,a}function d(a,b){for(var c=[],d=2;d3?("function"==typeof d&&(a.__proto__=d),a.prototype=l(i(d),f(b))):(g(b),a.prototype=b),n(a,"prototype",{configurable:!1,writable:!1}),m(a,f(c))}function i(a){if("function"==typeof a){var b=a.prototype;if(j(b)===b||null===b)return a.prototype;throw new k("super prototype must be an Object or null")}if(null===a)return null;throw new k("Super expression must either be null or a function, not "+typeof a+".")}var j=Object,k=TypeError,l=j.create,m=$traceurRuntime.defineProperties,n=$traceurRuntime.defineProperty,o=$traceurRuntime.getOwnPropertyDescriptor,p=($traceurRuntime.getOwnPropertyNames,Object.getPrototypeOf),q=Object,r=q.getOwnPropertyNames,s=q.getOwnPropertySymbols,t={enumerable:!1};return $traceurRuntime.createClass=h,$traceurRuntime.superConstructor=b,$traceurRuntime.superGet=c,$traceurRuntime.superSet=d,{}}),System.registerModule("traceur-runtime@0.0.91/src/runtime/destructuring.js",[],function(){"use strict";function a(a){for(var b,c=[],d=0;!(b=a.next()).done;)c[d++]=b.value;return c}return $traceurRuntime.iteratorToArray=a,{}}),System.registerModule("traceur-runtime@0.0.91/src/runtime/generators.js",[],function(){"use strict";function a(a){return{configurable:!0,enumerable:!1,value:a,writable:!0}}function b(a){return new Error("Traceur compiler bug: invalid state in state machine: "+a)}function c(){this.state=0,this.GState=r,this.storedException=void 0,this.finallyFallThrough=void 0,this.sent_=void 0,this.returnValue=void 0,this.oldReturnValue=void 0,this.tryStack_=[]}function d(a,b,c,d){switch(a.GState){case s:throw new Error('"'+c+'" on executing generator');case u:if("next"==c)return{value:void 0,done:!0};if(d===x)return{value:a.returnValue,done:!0};throw d;case r:if("throw"===c){if(a.GState=u,d===x)return{value:a.returnValue,done:!0};throw d}if(void 0!==d)throw q("Sent value to newborn generator");case t:a.GState=s,a.action=c,a.sent=d;var e;try{e=b(a)}catch(f){if(f!==x)throw f;e=a}var g=e===a;return g&&(e=a.returnValue),a.GState=g?u:t,{value:e,done:g}}}function e(){}function f(){}function g(a,b,d){var e=k(a,d),f=new c,g=p(b.prototype);return g[y]=f,g[z]=e,g}function h(a){return a.prototype=p(f.prototype),a.__proto__=f,a}function i(){c.call(this),this.err=void 0;var a=this;a.result=new Promise(function(b,c){a.resolve=b,a.reject=c})}function j(a,b){var c=k(a,b),d=new i;return d.createCallback=function(a){return function(b){d.state=a,d.value=b,c(d)}},d.errback=function(a){l(d,a),c(d)},c(d),d.result}function k(a,b){return function(c){for(;;)try{return a.call(b,c)}catch(d){l(c,d)}}}function l(a,b){a.storedException=b;var c=a.tryStack_[a.tryStack_.length-1];return c?(a.state=void 0!==c["catch"]?c["catch"]:c["finally"],void(void 0!==c.finallyFallThrough&&(a.finallyFallThrough=c.finallyFallThrough))):void a.handleException(b)}if("object"!=typeof $traceurRuntime)throw new Error("traceur runtime not found.");var m=$traceurRuntime.createPrivateName,n=$traceurRuntime.defineProperties,o=$traceurRuntime.defineProperty,p=Object.create,q=TypeError,r=0,s=1,t=2,u=3,v=-2,w=-3,x={};c.prototype={pushTry:function(a,b){if(null!==b){for(var c=null,d=this.tryStack_.length-1;d>=0;d--)if(void 0!==this.tryStack_[d]["catch"]){c=this.tryStack_[d]["catch"];break}null===c&&(c=w),this.tryStack_.push({"finally":b,finallyFallThrough:c})}null!==a&&this.tryStack_.push({"catch":a})},popTry:function(){this.tryStack_.pop()},maybeUncatchable:function(){if(this.storedException===x)throw x},get sent(){return this.maybeThrow(),this.sent_},set sent(a){this.sent_=a},get sentIgnoreThrow(){return this.sent_},maybeThrow:function(){if("throw"===this.action)throw this.action="next",this.sent_},end:function(){switch(this.state){case v:return this;case w:throw this.storedException;default:throw b(this.state)}},handleException:function(a){throw this.GState=u,this.state=v,a},wrapYieldStar:function(a){var b=this;return{next:function(b){return a.next(b)},"throw":function(c){var d;if(c===x){if(a["return"]){if(d=a["return"](b.returnValue),!d.done)return b.returnValue=b.oldReturnValue,d;b.returnValue=d.value}throw c}if(a["throw"])return a["throw"](c);throw a["return"]&&a["return"](),q("Inner iterator does not have a throw method")}}}};var y=m(),z=m();return e.prototype=f,o(f,"constructor",a(e)),f.prototype={constructor:f,next:function(a){return d(this[y],this[z],"next",a)},"throw":function(a){return d(this[y],this[z],"throw",a)},"return":function(a){return this[y].oldReturnValue=this[y].returnValue,this[y].returnValue=a,d(this[y],this[z],"throw",x)}},n(f.prototype,{constructor:{enumerable:!1},next:{enumerable:!1},"throw":{enumerable:!1},"return":{enumerable:!1}}),Object.defineProperty(f.prototype,Symbol.iterator,a(function(){return this})),i.prototype=p(c.prototype),i.prototype.end=function(){switch(this.state){case v:this.resolve(this.returnValue);break;case w:this.reject(this.storedException);break;default:this.reject(b(this.state))}},i.prototype.handleException=function(){this.state=w},$traceurRuntime.asyncWrap=j,$traceurRuntime.initGeneratorFunction=h,$traceurRuntime.createGeneratorInstance=g,{}}),System.registerModule("traceur-runtime@0.0.91/src/runtime/relativeRequire.js",[],function(){"use strict";function a(a,c){function d(a){return"/"===a.slice(-1)}function e(a){return"/"===a[0]}function f(a){return"."===a[0]}return b=b||"undefined"!=typeof require&&require("path"),d(c)||e(c)?void 0:f(c)?require(b.resolve(b.dirname(a),c)):require(c)}var b;return $traceurRuntime.require=a,{}}),System.registerModule("traceur-runtime@0.0.91/src/runtime/spread.js",[],function(){"use strict";function a(){for(var a,b=[],c=0,d=0;d>>0}function b(a){return a&&("object"==typeof a||"function"==typeof a)}function c(a){return"function"==typeof a}function d(a){return"number"==typeof a}function e(a){return a=+a,u(a)?0:0!==a&&t(a)?a>0?s(a):r(a):a}function f(a){var b=e(a);return 0>b?0:w(b,y)}function g(a){return b(a)?a[Symbol.iterator]:void 0}function h(a){return c(a)}function i(a,b){return{value:a,done:b}}function j(a,b,c){b in a||Object.defineProperty(a,b,c)}function k(a,b,c){j(a,b,{value:c,configurable:!0,enumerable:!1,writable:!0})}function l(a,b,c){j(a,b,{value:c,configurable:!1,enumerable:!1,writable:!1})}function m(a,b){for(var c=0;ca;a+=2){var b=r[a],c=r[a+1];b(c),r[a]=void 0,r[a+1]=void 0}k=0}function h(){try{var a=require,b=a("vertx");return i=b.runOnLoop||b.runOnContext,c()}catch(d){return f()}}var i,j,k=0,l=({}.toString,a),m="undefined"!=typeof window?window:void 0,n=m||{},o=n.MutationObserver||n.WebKitMutationObserver,p="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),q="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,r=new Array(1e3);return j=p?b():o?d():q?e():void 0===m&&"function"==typeof require?h():f(),{get default(){return l}}}),System.registerModule("traceur-runtime@0.0.91/src/runtime/polyfills/Promise.js",[],function(){"use strict";function a(a){return a&&"object"==typeof a&&void 0!==a.status_}function b(a){return a}function c(a){throw a}function d(a){var d=void 0!==arguments[1]?arguments[1]:b,f=void 0!==arguments[2]?arguments[2]:c,g=e(a.constructor);switch(a.status_){case void 0:throw TypeError;case 0:a.onResolve_.push(d,g),a.onReject_.push(f,g);break;case 1:k(a.value_,[d,g]);break;case-1:k(a.value_,[f,g])}return g.promise}function e(a){if(this===t){var b=g(new t(r));return{promise:b,resolve:function(a){h(b,a)},reject:function(a){i(b,a)}}}var c={};return c.promise=new a(function(a,b){c.resolve=a,c.reject=b}),c}function f(a,b,c,d,e){return a.status_=b,a.value_=c,a.onResolve_=d,a.onReject_=e,a}function g(a){return f(a,0,void 0,[],[])}function h(a,b){j(a,1,b,a.onResolve_)}function i(a,b){j(a,-1,b,a.onReject_)}function j(a,b,c,d){0===a.status_&&(k(c,d),f(a,b,c))}function k(a,b){p(function(){for(var c=0;c=j)return a[e(g)]=void 0,c(void 0,!0);var k,l=b.charCodeAt(i);if(55296>l||l>56319||i+1===j)k=String.fromCharCode(l);else{var m=b.charCodeAt(i+1);k=56320>m||m>57343?String.fromCharCode(l):String.fromCharCode(l)+String.fromCharCode(m)}return a[e(h)]=i+k.length,c(k,!1)},configurable:!0,enumerable:!0,writable:!0}),Object.defineProperty(b,Symbol.iterator,{value:function(){return this},configurable:!0,enumerable:!0,writable:!0}),b),{})}();return{get createStringIterator(){return a}}}),System.registerModule("traceur-runtime@0.0.91/src/runtime/polyfills/String.js",[],function(){"use strict";function a(a){var b=String(this);if(null==this||"[object RegExp]"==o.call(a))throw TypeError();var c=b.length,d=String(a),e=(d.length,arguments.length>1?arguments[1]:void 0),f=e?Number(e):0;isNaN(f)&&(f=0);var g=Math.min(Math.max(f,0),c);return p.call(b,d,f)==g}function b(a){var b=String(this);if(null==this||"[object RegExp]"==o.call(a))throw TypeError();var c=b.length,d=String(a),e=d.length,f=c;if(arguments.length>1){var g=arguments[1];void 0!==g&&(f=g?Number(g):0,isNaN(f)&&(f=0))}var h=Math.min(Math.max(f,0),c),i=h-e;return 0>i?!1:q.call(b,d,i)==i}function c(a){if(null==this)throw TypeError();var b=String(this);if(a&&"[object RegExp]"==o.call(a))throw TypeError();var c=b.length,d=String(a),e=d.length,f=arguments.length>1?arguments[1]:void 0,g=f?Number(f):0;g!=g&&(g=0);var h=Math.min(Math.max(g,0),c);return e+h>c?!1:-1!=p.call(b,d,g)}function d(a){if(null==this)throw TypeError();var b=String(this),c=a?Number(a):0;if(isNaN(c)&&(c=0),0>c||c==1/0)throw RangeError();if(0==c)return"";for(var d="";c--;)d+=b;return d}function e(a){if(null==this)throw TypeError();var b=String(this),c=b.length,d=a?Number(a):0;if(isNaN(d)&&(d=0),0>d||d>=c)return void 0;var e,f=b.charCodeAt(d);return f>=55296&&56319>=f&&c>d+1&&(e=b.charCodeAt(d+1),e>=56320&&57343>=e)?1024*(f-55296)+e-56320+65536:f}function f(a){var b=a.raw,c=b.length>>>0;if(0===c)return"";for(var d="",e=0;;){if(d+=b[e],e+1===c)return d;d+=arguments[++e]}}function g(a){var b,c,d=[],e=Math.floor,f=-1,g=arguments.length;if(!g)return"";for(;++fh||h>1114111||e(h)!=h)throw RangeError("Invalid code point: "+h);65535>=h?d.push(h):(h-=65536,b=(h>>10)+55296,c=h%1024+56320,d.push(b,c))}return String.fromCharCode.apply(null,d)}function h(){var a=$traceurRuntime.checkObjectCoercible(this),b=String(a);return j(b)}function i(i){var j=i.String;l(j.prototype,["codePointAt",e,"endsWith",b,"includes",c,"repeat",d,"startsWith",a]),l(j,["fromCodePoint",g,"raw",f]),m(j.prototype,h,Symbol)}var j=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/StringIterator.js").createStringIterator,k=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/utils.js"),l=k.maybeAddFunctions,m=k.maybeAddIterator,n=k.registerPolyfill,o=Object.prototype.toString,p=String.prototype.indexOf,q=String.prototype.lastIndexOf;return n(i),{get startsWith(){return a},get endsWith(){return b},get includes(){return c},get repeat(){return d},get codePointAt(){return e},get raw(){return f},get fromCodePoint(){return g},get stringPrototypeIterator(){return h},get polyfillString(){return i}}}),System.get("traceur-runtime@0.0.91/src/runtime/polyfills/String.js"),System.registerModule("traceur-runtime@0.0.91/src/runtime/polyfills/ArrayIterator.js",[],function(){"use strict";function a(a,b){var c=f(a),d=new l;return d.iteratorObject_=c,d.arrayIteratorNextIndex_=0,d.arrayIterationKind_=b,d}function b(){return a(this,k)}function c(){return a(this,i)}function d(){return a(this,j)}var e=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/utils.js"),f=e.toObject,g=e.toUint32,h=e.createIteratorResultObject,i=1,j=2,k=3,l=function(){function a(){}var b;return $traceurRuntime.createClass(a,(b={},Object.defineProperty(b,"next",{value:function(){var a=f(this),b=a.iteratorObject_;if(!b)throw new TypeError("Object is not an ArrayIterator");var c=a.arrayIteratorNextIndex_,d=a.arrayIterationKind_,e=g(b.length);return c>=e?(a.arrayIteratorNextIndex_=1/0,h(void 0,!0)):(a.arrayIteratorNextIndex_=c+1,d==j?h(b[c],!1):d==k?h([c,b[c]],!1):h(c,!1))},configurable:!0,enumerable:!0,writable:!0}),Object.defineProperty(b,Symbol.iterator,{value:function(){return this},configurable:!0,enumerable:!0,writable:!0}),b),{})}();return{get entries(){return b},get keys(){return c},get values(){return d}}}),System.registerModule("traceur-runtime@0.0.91/src/runtime/polyfills/Array.js",[],function(){"use strict";function a(a){var b,c,d=arguments[1],e=arguments[2],f=this,g=u(a),h=void 0!==d,i=0;if(h&&!n(d))throw TypeError();if(m(g)){b=o(f)?new f:[];var j=!0,k=!1,l=void 0;try{for(var p=void 0,q=g[$traceurRuntime.toProperty(Symbol.iterator)]();!(j=(p=q.next()).done);j=!0){var r=p.value;h?b[i]=d.call(e,r,i):b[i]=r,i++}}catch(s){k=!0,l=s}finally{try{j||null==q["return"]||q["return"]()}finally{if(k)throw l}}return b.length=i,b}for(c=t(g.length),b=o(f)?new f(c):new Array(c);c>i;i++)h?b[i]="undefined"==typeof e?d(g[i],i):d.call(e,g[i],i):b[i]=g[i];return b.length=c,b}function b(){for(var a=[],b=0;bf;f++)e[f]=a[f];return e.length=d,e}function c(a){var b=void 0!==arguments[1]?arguments[1]:0,c=arguments[2],d=u(this),e=t(d.length),f=s(b),g=void 0!==c?s(c):e;for(f=0>f?Math.max(e+f,0):Math.min(f,e),g=0>g?Math.max(e+g,0):Math.min(g,e);g>f;)d[f]=a,f++;return d}function d(a){var b=arguments[1];return f(this,a,b)}function e(a){var b=arguments[1];return f(this,a,b,!0)}function f(a,b){var c=arguments[2],d=void 0!==arguments[3]?arguments[3]:!1,e=u(a),f=t(e.length);if(!n(b))throw TypeError();for(var g=0;f>g;g++){var h=e[g];if(b.call(c,h,g,e))return d?g:h}return d?-1:void 0}function g(f){var g=f,h=g.Array,l=g.Object,m=g.Symbol,n=k;m&&m.iterator&&h.prototype[m.iterator]&&(n=h.prototype[m.iterator]),p(h.prototype,["entries",i,"keys",j,"values",n,"fill",c,"find",d,"findIndex",e]),p(h,["from",a,"of",b]),q(h.prototype,n,m),q(l.getPrototypeOf([].values()),function(){return this},m)}var h=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/ArrayIterator.js"),i=h.entries,j=h.keys,k=h.values,l=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/utils.js"),m=l.checkIterable,n=l.isCallable,o=l.isConstructor,p=l.maybeAddFunctions,q=l.maybeAddIterator,r=l.registerPolyfill,s=l.toInteger,t=l.toLength,u=l.toObject;return r(g),{get from(){return a},get of(){return b},get fill(){return c},get find(){return d},get findIndex(){return e},get polyfillArray(){return g}}}),System.get("traceur-runtime@0.0.91/src/runtime/polyfills/Array.js"),System.registerModule("traceur-runtime@0.0.91/src/runtime/polyfills/Object.js",[],function(){"use strict";function a(a,b){return a===b?0!==a||1/a===1/b:a!==a&&b!==b}function b(a){for(var b=1;be;e++){var g=d[e];l(g)||(a[g]=c[g])}}return a}function c(a,b){var c,d,e=k(b),f=e.length;for(c=0;f>c;c++){var g=e[c];l(g)||(d=j(b,e[c]),i(a,e[c],d))}return a}function d(d){var e=d.Object;f(e,["assign",b,"is",a,"mixin",c])}var e=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/utils.js"),f=e.maybeAddFunctions,g=e.registerPolyfill,h=$traceurRuntime,i=h.defineProperty,j=h.getOwnPropertyDescriptor,k=h.getOwnPropertyNames,l=h.isPrivateName,m=h.keys;return g(d),{get is(){return a},get assign(){return b},get mixin(){return c},get polyfillObject(){return d}}}),System.get("traceur-runtime@0.0.91/src/runtime/polyfills/Object.js"),System.registerModule("traceur-runtime@0.0.91/src/runtime/polyfills/Number.js",[],function(){"use strict";function a(a){return g(a)&&m(a)}function b(b){return a(b)&&k(b)===b}function c(a){return g(a)&&n(a)}function d(b){if(a(b)){var c=k(b);if(c===b)return l(c)<=o}return!1}function e(e){var f=e.Number;h(f,["MAX_SAFE_INTEGER",o,"MIN_SAFE_INTEGER",p,"EPSILON",q]),i(f,["isFinite",a,"isInteger",b,"isNaN",c,"isSafeInteger",d])}var f=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/utils.js"),g=f.isNumber,h=f.maybeAddConsts,i=f.maybeAddFunctions,j=f.registerPolyfill,k=f.toInteger,l=Math.abs,m=isFinite,n=isNaN,o=Math.pow(2,53)-1,p=-Math.pow(2,53)+1,q=Math.pow(2,-52);return j(e),{get MAX_SAFE_INTEGER(){return o},get MIN_SAFE_INTEGER(){return p},get EPSILON(){return q},get isFinite(){return a},get isInteger(){return b},get isNaN(){return c},get isSafeInteger(){return d},get polyfillNumber(){return e}}}),System.get("traceur-runtime@0.0.91/src/runtime/polyfills/Number.js"),System.registerModule("traceur-runtime@0.0.91/src/runtime/polyfills/fround.js",[],function(){"use strict";function a(a,b,c){function d(a){var b=k(a),c=a-b;return.5>c?b:c>.5?b+1:b%2?b+1:b}var e,f,g,h,o,p,q,r=(1<a?1:0):0===a?(f=0,g=0,e=1/a===-(1/0)?1:0):(e=0>a,a=j(a),a>=n(2,1-r)?(f=m(k(l(a)/i),1023),g=d(a/n(2,f)*n(2,c)),g/n(2,c)>=2&&(f+=1,g=1),f>r?(f=(1<>=1;return l.reverse(),g=l.join(""),h=(1<0?i*n(2,j-h)*(1+k/n(2,c)):0!==k?i*n(2,-(h-1))*(k/n(2,c)):0>i?-0:0}function c(a){return b(a,8,23)}function d(b){return a(b,8,23)}function e(a){return 0===a||!f(a)||g(a)?a:c(d(Number(a)))}var f=isFinite,g=isNaN,h=Math,i=h.LN2,j=h.abs,k=h.floor,l=h.log,m=h.min,n=h.pow;return{get fround(){return e}}}),System.registerModule("traceur-runtime@0.0.91/src/runtime/polyfills/Math.js",[],function(){"use strict";function a(a){if(a=x(+a),0==a)return 32;var b=0;return 0===(4294901760&a)&&(a<<=16,b+=16),0===(4278190080&a)&&(a<<=8,b+=8),0===(4026531840&a)&&(a<<=4,b+=4),0===(3221225472&a)&&(a<<=2,b+=2),0===(2147483648&a)&&(a<<=1,b+=1),b}function b(a,b){a=x(+a),b=x(+b);var c=a>>>16&65535,d=65535&a,e=b>>>16&65535,f=65535&b;return d*f+(c*f+d*e<<16>>>0)|0}function c(a){return a=+a,a>0?1:0>a?-1:a}function d(a){return.4342944819032518*F(a)}function e(a){return 1.4426950408889634*F(a)}function f(a){if(a=+a,-1>a||z(a))return NaN;if(0===a||a===1/0)return a;if(-1===a)return-(1/0);var b=0,c=50;if(0>a||a>1)return F(1+a);for(var d=1;c>d;d++)d%2===0?b-=G(a,d)/d:b+=G(a,d)/d;return b}function g(a){return a=+a,a===-(1/0)?-1:y(a)&&0!==a?D(a)-1:a}function h(a){return a=+a,0===a?1:z(a)?NaN:y(a)?(0>a&&(a=-a),a>21?D(a)/2:(D(a)+D(-a))/2):1/0}function i(a){return a=+a,y(a)&&0!==a?(D(a)-D(-a))/2:a}function j(a){if(a=+a,0===a)return a;if(!y(a))return c(a);var b=D(a),d=D(-a);return(b-d)/(b+d)}function k(a){return a=+a,1>a?NaN:y(a)?F(a+H(a+1)*H(a-1)):a}function l(a){return a=+a,0!==a&&y(a)?a>0?F(a+H(a*a+1)):-F(-a+H(a*a+1)):a}function m(a){return a=+a,-1===a?-(1/0):1===a?1/0:0===a?a:z(a)||-1>a||a>1?NaN:.5*F((1+a)/(1-a))}function n(a,b){for(var c=arguments.length,d=new Array(c),e=0,f=0;c>f;f++){var g=arguments[f];if(g=+g,g===1/0||g===-(1/0))return 1/0;g=B(g),g>e&&(e=g),d[f]=g}0===e&&(e=1);for(var h=0,i=0,f=0;c>f;f++){var g=d[f]/e,j=g*g-i,k=h+j;i=k-h-j,h=k}return H(h)*e}function o(a){return a=+a,a>0?E(a):0>a?C(a):a}function p(a){if(a=+a,0===a)return a;var b=0>a;b&&(a=-a);var c=G(a,1/3);return b?-c:c}function q(q){var s=q.Math;v(s,["acosh",k,"asinh",l,"atanh",m,"cbrt",p,"clz32",a,"cosh",h,"expm1",g,"fround",r,"hypot",n,"imul",b,"log10",d,"log1p",f,"log2",e,"sign",c,"sinh",i,"tanh",j,"trunc",o])}var r,s,t=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/fround.js").fround,u=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/utils.js"),v=u.maybeAddFunctions,w=u.registerPolyfill,x=u.toUint32,y=isFinite,z=isNaN,A=Math,B=A.abs,C=A.ceil,D=A.exp,E=A.floor,F=A.log,G=A.pow,H=A.sqrt;return"function"==typeof Float32Array?(s=new Float32Array(1),r=function(a){return s[0]=Number(a),s[0]}):r=t,w(q),{get clz32(){return a},get imul(){return b},get sign(){return c},get log10(){return d},get log2(){return e},get log1p(){return f},get expm1(){return g},get cosh(){return h},get sinh(){return i},get tanh(){return j},get acosh(){return k},get asinh(){return l},get atanh(){return m},get hypot(){return n},get trunc(){return o},get fround(){return r},get cbrt(){return p},get polyfillMath(){return q}}}),System.get("traceur-runtime@0.0.91/src/runtime/polyfills/Math.js"),System.registerModule("traceur-runtime@0.0.91/src/runtime/polyfills/polyfills.js",[],function(){"use strict";var a=System.get("traceur-runtime@0.0.91/src/runtime/polyfills/utils.js").polyfillAll;a(Reflect.global);var b=$traceurRuntime.setupGlobals;return $traceurRuntime.setupGlobals=function(c){b(c),a(c)},{}}),System.get("traceur-runtime@0.0.91/src/runtime/polyfills/polyfills.js"); +//# sourceMappingURL=traceur-runtime.min.map diff --git a/src/public/lib/traceur-runtime.min.map b/src/public/lib/traceur-runtime.min.map new file mode 100644 index 0000000..b038a54 --- /dev/null +++ b/src/public/lib/traceur-runtime.min.map @@ -0,0 +1,2 @@ + +{"version":3,"file":"traceur-runtime.min.js","sources":["traceur-runtime.js"],"names":["global","$bind","operand","thisArg","args","argArray","i","length","func","$apply","Function","prototype","bind","$construct","object","newUniqueString","Math","floor","random","counter","isPrivateName","s","privateNames","createPrivateName","createContinuation","argsArray","CONTINUATION_TYPE","isContinuation","setupProperTailCalls","isTailRecursiveName","call","initTailRecursiveFunction","result","tailCall","arguments","continuation","this","apply","isTailRecursive","construct","$traceurRuntime","$Object","Object","$TypeError","TypeError","$create","create","$defineProperties","defineProperties","$defineProperty","defineProperty","$freeze","freeze","$getOwnPropertyDescriptor","getOwnPropertyDescriptor","$getOwnPropertyNames","getOwnPropertyNames","$keys","keys","$hasOwnProperty","hasOwnProperty","$preventExtensions","toString","preventExtensions","$seal","seal","$isExtensible","isExtensible","nonEnum","value","configurable","enumerable","writable","isShimSymbol","symbol","SymbolValue","typeOf","v","Symbol","description","key","symbolDataProperty","symbolInternalProperty","symbolDescriptionProperty","symbolValues","getOwnHashObject","hashObject","hashProperty","self","hashObjectProperties","hash","hashCounter","hashPropertyDescriptor","undefined","isSymbolString","toProperty","name","removeSymbolKeys","array","rv","push","getOwnPropertySymbols","names","getOption","options","descriptor","polyfillObject","exportStar","j","mod","get","isObject","x","toObject","checkObjectCoercible","argument","polyfillSymbol","hasNativeSymbol","iterator","observer","hasNativeSymbolFunc","setupGlobals","Reflect","method","symbolValue","valueOf","typeof","window","buildFromEncodedParts","opt_scheme","opt_userInfo","opt_domain","opt_port","opt_path","opt_queryData","opt_fragment","out","join","split","uri","match","splitRe","removeDotSegments","path","leadingSlash","trailingSlash","slice","segments","up","pos","segment","pop","unshift","joinAndCanonicalizePath","parts","ComponentIndex","PATH","SCHEME","USER_INFO","DOMAIN","PORT","QUERY_DATA","FRAGMENT","canonicalizeUrl","url","resolveUrl","base","baseParts","index","lastIndexOf","isAbsolute","RegExp","UncoatedModuleEntry","uncoatedModule","value_","ModuleEvaluationError","erroneousModuleName","cause","message","constructor","stripCause","stack","stripStack","beforeLines","lines","number","first","afterLines","last","columnSpacing","columns","UncoatedModuleInstantiator","getUncoatedModuleInstantiator","ModuleStore","normalize","moduleInstantiators","Module","isLive","coatedModule","forEach","getter","liveModuleSentinel","descr","baseURL","$__3","location","href","Error","stripError","replace","loadedBy","moduleName","causeStack","some","frame","test","getUncoatedModule","$__2","relativeRequire","require","ex","evaled","indexOf","m","exec","line","parseInt","concat","moduleInstances","refererName","refererAddress","normalizedName","moduleInstance","set","module","String",{"end":{"file":"traceur-runtime.js","comments_before":[],"nlb":false,"endpos":21688,"endcol":15,"endline":660,"pos":21681,"col":8,"line":660,"value":"baseURL","type":"name"},"start":{"file":"traceur-runtime.js","comments_before":[],"nlb":false,"endpos":21688,"endcol":15,"endline":660,"pos":21681,"col":8,"line":660,"value":"baseURL","type":"name"},"name":"baseURL"},"registerModule","deps","bundleStore","register","execute","depMap","dep","registryEntry","exports","getAnonymousModule","moduleStoreModule","System","AsyncGeneratorFunction","AsyncGeneratorFunctionPrototype","initAsyncGeneratorFunction","functionObject","__proto__","createAsyncGeneratorInstance","observe","$__10","thisName","argsName","observeName","observeForEach","next","Promise","resolve","reject","generator","throw","error","return","schedule","asyncF","then","createDecoratedGenerator","onDone","DecoratedGenerator","$createPrivateName","AsyncGeneratorContext","decoratedObserver","done","inReturn","yield","e","yieldFor","observable","ctx","_generator","_onDone","Array","$__6","$__7","$__8","$__4","$__9","superDescriptor","homeObject","proto","$getPrototypeOf","superConstructor","ctor","superGet","superSet","forEachPropertyKey","f","getDescriptors","descriptors","makePropertiesNonEnumerable","createClass","staticObject","superClass","getProtoParent","getPrototypeOf","$__1","iteratorToArray","iter","tmp","getInternalError","state","GeneratorContext","GState","ST_NEWBORN","storedException","finallyFallThrough","sent_","returnValue","oldReturnValue","tryStack_","nextOrThrow","moveNext","action","ST_EXECUTING","ST_CLOSED","RETURN_SENTINEL","ST_SUSPENDED","sent","GeneratorFunction","GeneratorFunctionPrototype","createGeneratorInstance","innerFunction","getMoveNext","ctxName","moveNextName","initGeneratorFunction","AsyncFunctionContext","err","asyncWrap","createCallback","newState","errback","handleCatch","handleException","END_STATE","RETHROW_STATE","pushTry","catchState","finallyState","finally","catch","popTry","maybeUncatchable","maybeThrow","sentIgnoreThrow","end","wrapYieldStar","callerPath","requiredPath","isDirectory","isRelative","dirname","spread","iterResult","valueToSpread","getTemplateObject","raw","cooked","templateObject","map","genericType","type","argumentTypes","typeMap","typeRegister","tail","GenericType","types","any","boolean","string","void","toUint32","isCallable","isNumber","toInteger","$isNaN","$isFinite","$floor","$ceil","toLength","len","$min","MAX_SAFE_LENGTH","checkIterable","isConstructor","createIteratorResultObject","maybeDefine","maybeDefineMethod","maybeDefineConst","maybeAddFunctions","functions","maybeAddConsts","consts","maybeAddIterator","registerPolyfill","polyfills","polyfillAll","ceil","isFinite","isNaN","$pow","pow","min","lookupIndex","objectIndex_","stringIndex_","primitiveIndex_","initMap","entries_","deletedCount_","needsPolyfill","$__11","Map","entries","size","polyfillMap","$__0","deletedSentinel","$__12","$__13","iterable","objectMode","stringMode","has","delete","clear","callbackFn","$__14","$ctx","$__15","values","$__16","initSet","map_","Set","polyfillSet","$__5","item","add","$__17","$__18","asap","callback","arg","queue","scheduleFlush","useNextTick","nextTick","process","version","versions","node","isArray","setImmediate","flush","useVertxTimer","vertxNext","useMutationObserver","iterations","BrowserMutationObserver","document","createTextNode","characterData","data","useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","useSetTimeout","setTimeout","attemptVertex","r","vertx","runOnLoop","runOnContext","$__default","browserWindow","browserGlobal","MutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","importScripts","isPromise","status_","idResolveHandler","idRejectHandler","chain","promise","onResolve","onReject","deferred","getDeferred","onResolve_","onReject_","promiseEnqueue","C","$Promise","promiseInit","promiseRaw","promiseResolve","promiseReject","promiseSet","status","promiseDone","reactions","tasks","async","promiseHandle","handler","promiseCoerce","$PromiseReject","thenableSymbol","p","polyfillPromise","resolver","that","all","resolutions","makeCountdownFunction","count","countdownFunction","race","createStringIterator","StringIterator","iteratedString","stringIteratorNextIndex","o","position","resultString","charCodeAt","fromCharCode","second","startsWith","search","$toString","stringLength","searchString","Number","start","max","$indexOf","endsWith","searchLength","$lastIndexOf","includes","repeat","n","Infinity","RangeError","codePointAt","callsite","fromCodePoint","_","highSurrogate","lowSurrogate","codeUnits","codePoint","stringPrototypeIterator","polyfillString","createArrayIterator","kind","ArrayIterator","iteratorObject_","arrayIteratorNextIndex_","arrayIterationKind_","ARRAY_ITERATOR_KIND_ENTRIES","ARRAY_ITERATOR_KIND_KEYS","ARRAY_ITERATOR_KIND_VALUES","itemKind","from","arrLike","arr","mapFn","items","mapping","k","of","fill","fillStart","fillEnd","find","predicate","findHelper","findIndex","returnIndex","polyfillArray","jsValues","is","left","right","assign","target","source","props","mixin","NumberIsFinite","isInteger","NumberIsNaN","isSafeInteger","integral","$abs","MAX_SAFE_INTEGER","polyfillNumber","MIN_SAFE_INTEGER","EPSILON","abs","packIEEE754","ebits","fbits","roundToEven","w","bits","str","bytes","bias","log","LN2","reverse","substring","unpackIEEE754","b","NaN","unpackF32","packF32","fround","clz32","imul","y","xh","xl","yh","yl","sign","log10","log2","log1p","expm1","exp","cosh","sinh","tanh","exp1","exp2","acosh","sqrt","asinh","atanh","hypot","sum","compensation","summand","preliminary","trunc","cbrt","negate","polyfillMath","f32","jsFround","Float32Array"],"mappings":"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"} From e3af5c07396291a0e8150ad621ac75af36faa666 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 15:56:28 -0700 Subject: [PATCH 18/42] (#6) Auto focus public directive --- src/app/directives/directives.ts | 3 +++ src/app/directives/directives/auto-focus.ts | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 src/app/directives/directives/auto-focus.ts diff --git a/src/app/directives/directives.ts b/src/app/directives/directives.ts index 21538ef..c7887e2 100644 --- a/src/app/directives/directives.ts +++ b/src/app/directives/directives.ts @@ -1,6 +1,9 @@ /// /* * Angular 2 + * @coreDirectives: collection of Angular core directives + * @formDirectives: list of all the form directives + * @routerDirectives: list of all the router directives */ import {coreDirectives, formDirectives} from 'angular2/angular2'; import {routerDirectives} from 'angular2/router'; diff --git a/src/app/directives/directives/auto-focus.ts b/src/app/directives/directives/auto-focus.ts new file mode 100644 index 0000000..358bbf4 --- /dev/null +++ b/src/app/directives/directives/auto-focus.ts @@ -0,0 +1,19 @@ +/// +/* + * Angular 2 + * @Directive: factory function + * @ElementRef: class, reference to the element + */ +import {Directive, ElementRef} from 'angular2/angular2'; +// Simple example directive that fixes autofocus problem with multiple views +@Directive({ + selector: '[autofocus]' // using [ ] means selecting attributes +}) +export class Autofocus { + constructor(public el: ElementRef) { + // autofocus fix for multiple views + if (this.el.nativeElement.focus) { + this.el.nativeElement.focus(); + } + } +} From 545fc1b3dab168048893b28b7ae7c89c417350bb Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 16:18:28 -0700 Subject: [PATCH 19/42] (#8) Capitalize Pipes --- .../pipes/capitalize/capitalize-pipe.spec.ts | 138 ++++++++++++++++++ src/app/pipes/capitalize/capitalize-pipe.ts | 43 ++++++ 2 files changed, 181 insertions(+) create mode 100644 src/app/pipes/capitalize/capitalize-pipe.spec.ts create mode 100644 src/app/pipes/capitalize/capitalize-pipe.ts diff --git a/src/app/pipes/capitalize/capitalize-pipe.spec.ts b/src/app/pipes/capitalize/capitalize-pipe.spec.ts new file mode 100644 index 0000000..3f935f9 --- /dev/null +++ b/src/app/pipes/capitalize/capitalize-pipe.spec.ts @@ -0,0 +1,138 @@ +/// +import {CapitalizePipe, CapitalizeFactory} from './Capitalize-Pipe'; + +describe('Capitalize', () => { + + describe('CapitalizePipe', () => { + var subject; + var result; + var pipe; + + beforeEach(() => { + pipe = new CapitalizePipe(); + }); + afterEach(() => { + expect(subject).toEqual(result); + }); + + describe('#support', () => { + + it('should support string', () => { + subject = pipe.supports('yolo'); + result = true; + }); + + it('should not support null', () => { + subject = pipe.supports(null); + result = false; + }); + + it('should not support NaN', () => { + subject = pipe.supports(NaN); + result = false; + }); + + it('should not support new Object()', () => { + subject = pipe.supports(new Object()); + result = false; + }); + + it('should not support function(){}', () => { + subject = pipe.supports(function(){}); + result = false; + }); + + }); + + describe('#transform', () => { + it('should transform string to Capitalized versions', () => { + subject = pipe.transform('yolo'); + result = 'Yolo'; + }); + + it('should transform all strings to Capitalized versions', () => { + var str = 'what does the scouter say about its power level'; + + subject = pipe.transform(str, true); + result = 'What Does The Scouter Say About Its Power Level'; + }); + + }); + + + describe('#capitalizeWord', () => { + it('should capitalized a word', () => { + subject = pipe.capitalizeWord('something'); + result = 'Something'; + }); + + it('should only capitalized first char', () => { + subject = pipe.capitalizeWord('something something something'); + result = 'Something something something'; + }); + + }); + + + }); + + describe('CapitalizeFactory', () => { + var subject; + var result; + var factory; + + beforeEach(() => { + factory = new CapitalizeFactory(); + }); + + afterEach(() => { + expect(subject).toEqual(result); + }); + + it('should exist', () => { + subject = Boolean(factory); + result = true; + }); + + describe('#support', () => { + it('should support string', () => { + subject = factory.supports('yolo'); + result = true; + }); + + it('should not support null', () => { + subject = factory.supports(null); + result = false; + }); + + it('should not support NaN', () => { + subject = factory.supports(NaN); + result = false; + }); + + it('should not support new Object()', () => { + subject = factory.supports(new Object()); + result = false; + }); + + it('should not support function(){}', () => { + subject = factory.supports(function(){}); + result = false; + }); + + + }); + + describe('#create', () => { + it('should be instance of CapitalizePipe', () => { + subject = factory.create() instanceof CapitalizePipe; + result = true; + }); + + }); + + + }); + + +}); diff --git a/src/app/pipes/capitalize/capitalize-pipe.ts b/src/app/pipes/capitalize/capitalize-pipe.ts new file mode 100644 index 0000000..bf2c6bf --- /dev/null +++ b/src/app/pipes/capitalize/capitalize-pipe.ts @@ -0,0 +1,43 @@ +/// +import {Pipe, PipeFactory} from 'angular2/angular2'; + +// Check if the value is supported for the pipe +export function isString(txt): boolean { + return typeof txt === 'string'; +} + +// Simple example of a Pipe +export class CapitalizePipe implements Pipe { + regexp: RegExp = /([^\W_]+[^\s-]*) */g; + + supports(txt): boolean { + return isString(txt); + } + transform(value: string, args?: List): any { + return (!value) ? '' : + (!args) ? + this.capitalizeWord(value) : + value.replace(this.regexp, this.capitalizeWord); + } + capitalizeWord(txt: string): string { + return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); + } + onDestroy(): void { + // not needed since this is stateless + } + +} + +// We create a factory since we create an instance for each binding for stateful pipes +export class CapitalizeFactory implements PipeFactory { + supports(txt): boolean { + return isString(txt); + } + create(cdRef): Pipe { + return new CapitalizePipe(); + } +} + +// Since templates in angular are async we are passing the value to +// NullPipeFactory if the value is not supported +export var capitalize = [ new CapitalizeFactory() ]; From 141eaee09d5989461c75de823b728ecf9163a08c Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 16:18:57 -0700 Subject: [PATCH 20/42] (#8) add rx support to async pipes --- src/app/pipes/rx/rxpipe.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/app/pipes/rx/rxpipe.ts diff --git a/src/app/pipes/rx/rxpipe.ts b/src/app/pipes/rx/rxpipe.ts new file mode 100644 index 0000000..62c72ac --- /dev/null +++ b/src/app/pipes/rx/rxpipe.ts @@ -0,0 +1,38 @@ +/// + +import {Pipe, PipeFactory} from 'angular2/angular2'; +import {ObservablePipe} from 'angular2/pipes'; +import {async} from 'angular2/src/change_detection/change_detection'; +import * as Rx from 'rx'; + +export function isObservable(obs) { + return obs && typeof obs.subscribe === 'function'; +} + +//upgrade async pipe with Rx support +export class RxPipe extends ObservablePipe { + _subscription: any; + _observable: any; + constructor(ref) { super(ref); } + supports(obs) { return isObservable(obs); } + _subscribe(obs) { + this._observable = obs; + this._subscription = obs.subscribe( + value => this._updateLatestValue(value), + e => { throw e; } + ); + } + transform(value: any, args?: List): any { + return super.transform(value, args); + } + onDestroy(): void { + return super.onDestroy(); + } +} + +export class RxPipeFactory implements PipeFactory { + supports(obs) { return isObservable(obs); } + create(cdRef): Pipe { return new RxPipe(cdRef); } +} + +export var rxAsync = [ new RxPipeFactory() ].concat(async); From 17b0accccaf6201f5fb7e3ab32dc74262b28540a Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 16:19:17 -0700 Subject: [PATCH 21/42] (#8) activate new pipes. --- src/app/pipes/pipes.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/app/pipes/pipes.ts b/src/app/pipes/pipes.ts index 0f24445..74eea72 100644 --- a/src/app/pipes/pipes.ts +++ b/src/app/pipes/pipes.ts @@ -7,15 +7,13 @@ import {Pipes} from 'angular2/change_detection'; /* * App Pipes */ -/* TODO: Create these pipe classes -import {capitalize} from './CapitalizePipe'; +import {capitalize} from './Capitalize/Capitalize-Pipe'; import {rxAsync} from './RxPipe'; -*/ export var appPipes = [ Pipes.extend({ - //'async': rxAsync, - //'capitalize': capitalize + 'async': rxAsync, + 'capitalize': capitalize // add more pipes to this Map }) ]; From 76b3899327d7315331da48d55599db3f7f18723b Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 17:31:48 -0700 Subject: [PATCH 22/42] (#10) tictactoe and search module --- src/app/components/app.css | 84 +++++++++++++++++++ src/app/components/app.html | 27 ++++++ src/app/components/app.ts | 46 ++-------- .../example-modules/example-modules.css | 83 ++++++++++++++++++ .../example-modules/example-modules.html | 39 +++++++++ .../example-modules/example-modules.ts | 27 ++++++ .../search-module/directives/autosuggest.ts | 52 ++++++++++++ .../example-modules/search-module/search.ts | 28 +++++++ .../search-module/services/github.ts | 31 +++++++ .../search-module/services/searchable.ts | 5 ++ .../search-module/views/search.html | 20 +++++ .../tictactoe-module/directives/board.ts | 21 +++++ .../tictactoe-module/services/game.ts | 82 ++++++++++++++++++ .../tictactoe-module/styles/board.css | 42 ++++++++++ .../tictactoe-module/tictactoe.ts | 33 ++++++++ .../tictactoe-module/views/board.html | 11 +++ .../tictactoe-module/views/tictactoe.html | 7 ++ src/app/services/services.ts | 9 +- 18 files changed, 601 insertions(+), 46 deletions(-) create mode 100644 src/app/components/app.css create mode 100644 src/app/components/app.html create mode 100644 src/app/components/example-modules/example-modules.css create mode 100644 src/app/components/example-modules/example-modules.html create mode 100644 src/app/components/example-modules/example-modules.ts create mode 100644 src/app/components/example-modules/search-module/directives/autosuggest.ts create mode 100644 src/app/components/example-modules/search-module/search.ts create mode 100644 src/app/components/example-modules/search-module/services/github.ts create mode 100644 src/app/components/example-modules/search-module/services/searchable.ts create mode 100644 src/app/components/example-modules/search-module/views/search.html create mode 100644 src/app/components/example-modules/tictactoe-module/directives/board.ts create mode 100644 src/app/components/example-modules/tictactoe-module/services/game.ts create mode 100644 src/app/components/example-modules/tictactoe-module/styles/board.css create mode 100644 src/app/components/example-modules/tictactoe-module/tictactoe.ts create mode 100644 src/app/components/example-modules/tictactoe-module/views/board.html create mode 100644 src/app/components/example-modules/tictactoe-module/views/tictactoe.html diff --git a/src/app/components/app.css b/src/app/components/app.css new file mode 100644 index 0000000..63c89c0 --- /dev/null +++ b/src/app/components/app.css @@ -0,0 +1,84 @@ +.top-nav { + height: 56px; + min-height: 56px; + padding: 0 16px; + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.26); +} + +.top-nav h1 { + width: 200px; + float: left; + font-size: 16px; + font-weight: 400; + letter-spacing: 0.005em; +} +.top-nav .logo { + line-height:56px; + display:inline-block; + color:#FFF; + padding:0 5px; + font-weight:400; + font-size:16px; + position:relative +} + + +.top-nav ul { + list-style-type: none; + margin: 0; + padding: 0 20px; +} + +.top-nav ul li { + margin: 0; +} +.l-left { + float: left; +} + +.top-nav { + font-family:'Roboto',"Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif; +} + +.top-nav .top-nav-button{ + line-height:56px; + display:inline-block; + color:#FFF; + text-decoration:none; + padding:0 10px; + text-transform:uppercase; + font-weight:400; + font-size:16px; + border:none; + background:none; + border-radius:0; + position:relative +} + + +.top-nav .top-nav-button:hover{ + background-color: rgba(158, 158, 158, 0.2); +} + +a:active, a:hover { + outline: 0px none; +} + +.ac-default-theme { + background-color: rgb(25,118,210); + color: rgb(255,255,255); +} + + +[layout=row] { + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; +} +[layout] { + box-sizing: border-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; +} diff --git a/src/app/components/app.html b/src/app/components/app.html new file mode 100644 index 0000000..cca5465 --- /dev/null +++ b/src/app/components/app.html @@ -0,0 +1,27 @@ +
+
+ Angular2 + + +
+
+ +
+ +
+ +
+
\ No newline at end of file diff --git a/src/app/components/app.ts b/src/app/components/app.ts index 6d147fe..ad82206 100644 --- a/src/app/components/app.ts +++ b/src/app/components/app.ts @@ -23,19 +23,17 @@ import {appPipes} from '../pipes/pipes'; /* * Components */ -/* TODO: Create these Components + // We use a folder if we want separate files import {Home} from './home/home'; // Otherwise we only use one file for a component import {Dashboard} from './dashboard'; -// A simple example of a Component using a Service -import {Todo} from './todo'; -// RxJs examples -import {RxJsExamples} from './rxjs-examples/rxjs-examples'; -*/ +// Example modules +import {ExampleModules} from './example-modules/example-modules'; // Use webpack's `require` to get files as a raw string using raw-loader let styles = require('./app.css'); +let template = require('./app.html'); /* * App Component @@ -63,44 +61,12 @@ let styles = require('./app.css'); ], // include our .css file styles: [ styles ], - template: ` -
-
- Angular2 - - -
-
- -
- -
- - - ` + template: template }) @RouteConfig([ - /* TODO: create these components { path: '/', as: 'home', component: Home }, { path: '/dashboard', as: 'dashboard', component: Dashboard }, - { path: '/todo', as: 'todo', component: Todo }, - { path: '/rxjs-examples/...', as: 'rxjs-examples', component: RxJsExamples } - */ + { path: '/example-modules/...', as: 'example-modules', component: ExampleModules } ]) export class App { name: string; diff --git a/src/app/components/example-modules/example-modules.css b/src/app/components/example-modules/example-modules.css new file mode 100644 index 0000000..ffb36cb --- /dev/null +++ b/src/app/components/example-modules/example-modules.css @@ -0,0 +1,83 @@ +.example-modules-menu, +.example-modules-menu ul { + list-style: none; + padding: 0; +} + +.example-modules-menu li { + margin: 0; +} + +.example-modules-menu > li:nth-child(1) { + border-top: none; +} + +.example-modules-menu .ac-button { + border-radius: 0; + color: inherit; + cursor: pointer; + display: block; + line-height: 40px; + margin: 0; + max-height: 40px; + overflow: hidden; + padding: 0px 16px; + text-align: left; + text-decoration: none; + white-space: normal; + width: 100%; +} + +.example-modules-menu ac-select { + /* Override md-select margins. With margins the menu will look incorrect and causes mobile list + to not be scrollable. + */ + margin: 0; + width: 100%; +} + +.example-modules-menu .ac-button.active { + color: #03a9f4; +} + +ul.example-modules-menu li:hover { + background: rgba(0, 0, 0, 0.1); +} + +.side-nav { + background: #FFF; + box-shadow: 3px 0 6px rgba(0, 0, 0, 0.3); + width: 260px; + bottom: 0; + overflow: auto; +} + +nav { + align-items: stretch; +} + +[layout] { + box-sizing: border-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; +} + +[layout=column] { + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} + +.wide { + width: 100%; +} + +.example-modules-content { + align-items: stretch; + display: block; + position: relative; + overflow: auto; + -webkit-overflow-scrolling: touch; +} diff --git a/src/app/components/example-modules/example-modules.html b/src/app/components/example-modules/example-modules.html new file mode 100644 index 0000000..21685b6 --- /dev/null +++ b/src/app/components/example-modules/example-modules.html @@ -0,0 +1,39 @@ +
+ + +
+
+ +
+
+ +
\ No newline at end of file diff --git a/src/app/components/example-modules/example-modules.ts b/src/app/components/example-modules/example-modules.ts new file mode 100644 index 0000000..3b5a790 --- /dev/null +++ b/src/app/components/example-modules/example-modules.ts @@ -0,0 +1,27 @@ +/// + +// Angular 2 +import {Component, View, CSSClass} from 'angular2/angular2'; +import {RouteConfig, routerDirectives} from 'angular2/router'; +// Modules +import {Tictactoe} from './tictactoe-module/tictactoe'; +// View +let template = require('./example-modules.html'); +let styles = require('./example-modules.css') +@Component({ + selector: 'example-modules' +}) +@RouteConfig([ + { path: '/', redirectTo: '/search' }, + { path: '/search', as: 'search', component: Search }, + { path: '/tictactoe', as: 'tictactoe', component: Tictactoe } +]) +@View({ + directives: [ routerDirectives, CSSClass ], + // include our .css file + styles: [ styles ], // Use webpack's `require` to get files as a raw string using raw-loader + template: template +}) +export class ExampleModules { + active: number = 0; +} diff --git a/src/app/components/example-modules/search-module/directives/autosuggest.ts b/src/app/components/example-modules/search-module/directives/autosuggest.ts new file mode 100644 index 0000000..35f6b69 --- /dev/null +++ b/src/app/components/example-modules/search-module/directives/autosuggest.ts @@ -0,0 +1,52 @@ +/// + +// Angular 2 +import {Directive, View, EventEmitter, ElementRef, LifecycleEvent} from 'angular2/angular2'; + +import {Github} from './Github'; +// RxJs +import * as Rx from 'rx'; + + +@Directive({ + selector: 'input[type=text][autosuggest]', + lifecycle: [ LifecycleEvent.onInit ], + events: [ 'term', 'loading' ] +}) +export class Autosuggest { + term: EventEmitter = new EventEmitter(); + loading: EventEmitter = new EventEmitter(); + + constructor(private el: ElementRef, public github: Github) { + + } + onInit() { + + (Rx).Observable.fromEvent(this.el.nativeElement, 'keyup'). + map(e => e.target.value). // Project the text from the input + filter((text: string) => text.length > 2). // Only if the text is longer than 2 characters + debounce(250). // Pause for 250ms + distinctUntilChanged(). // Only if the value has changed + do(() => this.loading.next(true)). + flatMapLatest((query: string) => this.github.search(query)). // send query to search service + // here is the real action + subscribe( + (repos: string[]) => { + // fire "term" event + // the Search component is the listener + this.loading.next(false); + this.term.next(repos); + }, + err => { + console.log(err); + this.loading.next(false); + this.term.next(['ERROR, see console']); + }, + () => { + console.log('complete') + this.loading.next(false); + } + )//subscribe + } + +} diff --git a/src/app/components/example-modules/search-module/search.ts b/src/app/components/example-modules/search-module/search.ts new file mode 100644 index 0000000..80ce8b5 --- /dev/null +++ b/src/app/components/example-modules/search-module/search.ts @@ -0,0 +1,28 @@ +/// + +// Angular 2 +import {Component, View, coreDirectives, formDirectives} from 'angular2/angular2'; + +import {Autosuggest} from './directives/autosuggest'; + +let view = require('./views/search.html'); + +@Component({ + selector: 'search-github' +}) +@View({ + directives: [ coreDirectives, formDirectives, Autosuggest ], + template: view +}) +export class Search { + repos: Array = []; + loading: boolean = false; + + constructor() { + } + + showResults(results: string[]) { + this.repos = results; + } + +} diff --git a/src/app/components/example-modules/search-module/services/github.ts b/src/app/components/example-modules/search-module/services/github.ts new file mode 100644 index 0000000..c7093b1 --- /dev/null +++ b/src/app/components/example-modules/search-module/services/github.ts @@ -0,0 +1,31 @@ +/// + +import {bind, Injectable, Http} from 'angular2/angular2' + +import {ISearchable} from './searchable'; + +@Injectable() +export class Github implements ISearchable { + url: string = 'https://api.github.com/search/repositories?q='; + + constructor(public http: Http) { + + } + + /** + * @returns an Observable of repository names + */ + search(query: string): Rx.Observable { + return this.http.get(`${ this.url }${ query }`). + toRx(). // convert it to pure Rx stream + map(res => res.json()). // make json + map(res => res.items). // extract "items" only + filter(repos => repos); // only if there are results + } + +} + + +export var githubInjectables = [ + bind(Github).toClass(Github) +]; diff --git a/src/app/components/example-modules/search-module/services/searchable.ts b/src/app/components/example-modules/search-module/services/searchable.ts new file mode 100644 index 0000000..f52d42e --- /dev/null +++ b/src/app/components/example-modules/search-module/services/searchable.ts @@ -0,0 +1,5 @@ +/// + +export interface ISearchable { + search(query: string): Rx.Observable; +} diff --git a/src/app/components/example-modules/search-module/views/search.html b/src/app/components/example-modules/search-module/views/search.html new file mode 100644 index 0000000..a13d02b --- /dev/null +++ b/src/app/components/example-modules/search-module/views/search.html @@ -0,0 +1,20 @@ +
+

Search Github repos

+ +
+ + + + +
+ +
+ + + +
+
diff --git a/src/app/components/example-modules/tictactoe-module/directives/board.ts b/src/app/components/example-modules/tictactoe-module/directives/board.ts new file mode 100644 index 0000000..1dbfcf5 --- /dev/null +++ b/src/app/components/example-modules/tictactoe-module/directives/board.ts @@ -0,0 +1,21 @@ +/// + +// Angular 2 +import {Component, View, EventEmitter, coreDirectives} from 'angular2/angular2'; + +let styles = require('./styles/board.css'); +let template = require('./views/board.html'); + +@Component({ + selector: 'board', + properties: [ 'board' ], + events: [ 'select' ] +}) +@View({ + directives: [ coreDirectives ], + styles: [styles], + template: template +}) +export class Board { + select: EventEmitter = new EventEmitter(); +} diff --git a/src/app/components/example-modules/tictactoe-module/services/game.ts b/src/app/components/example-modules/tictactoe-module/services/game.ts new file mode 100644 index 0000000..4105242 --- /dev/null +++ b/src/app/components/example-modules/tictactoe-module/services/game.ts @@ -0,0 +1,82 @@ +/// + +import {Injectable} from 'angular2/angular2'; + +type Triple = [ string, string, string ]; // tuple type +type Rows = [ Triple, Triple, Triple ]; +type Point = { x: number; y: number }; + +@Injectable() +export class Game { + + board: Rows = [ + ['', '', ''], + ['', '', ''], + ['', '', ''] + ]; + plays: Point[] = []; + + public static create(): Game { + return new Game(); + } + + dispose() { + this.board = null; + this.plays = null; + } + + play(coord: Point) { + const { x, y } = coord; + if (!this.gameover && this.board[x][y] === '') { + this.board[x][y] = this.player; + } + this.plays.push(coord); //TODO: create Rx Observable + } + + get player() { + return ['x', 'o'][this.plays.length % 2]; + } + + get gameover() { + return this.draw || this.winner !== ''; + } + + get winner(): string { + return getWinnerFromBoard(this.board); + } + + get draw() { + return this.plays.length === 9; + } + +} + +// Pure functions + +function getWinnerFromBoard(board: Rows): string { + const allWinningLists = [].concat( + board, // rows + zip(board), // columns + diagonals(board) // diagonals + ); + + return allWinningLists.reduce(getWinnerFromList, ''); +} + +function getWinnerFromList(winner: string, list: Triple) { + if (winner) return winner; + if (list.every(s => s == 'o')) return 'o'; + if (list.every(s => s == 'x')) return 'x'; + return ''; +} + +function zip(arrays: Rows) { + return arrays[0].map((_, i) => arrays.map(array => array[i])); +} + +function diagonals(rows: Rows) { + return [ + rows.map((row, index) => row[index]), // left to right diagonal + rows.map((row, index) => row[row.length - 1 - index]) // right to left diagonal + ]; +} diff --git a/src/app/components/example-modules/tictactoe-module/styles/board.css b/src/app/components/example-modules/tictactoe-module/styles/board.css new file mode 100644 index 0000000..21d3b93 --- /dev/null +++ b/src/app/components/example-modules/tictactoe-module/styles/board.css @@ -0,0 +1,42 @@ +.board { + margin: 100px auto; +} + +.board .row .tile { + border: 1px solid rgb(210, 210, 210); + height: 100px; + width: 100px; + display: inline-block; + cursor: pointer; + float: left; + margin-left: -1px; + margin-bottom: -1px; +} + + +.board .row .x { + background-image: url(data:image/png;base64,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); +} + +.board .row .o { + background-image: url(data:image/jpeg;base64,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); +} + +.board .row .x, +.board .row .o { + cursor: default; + background-size: 100px 100px; + background-repeat: no-repeat; +} + + +.board .row::after { + content: " "; + clear: both; + display: table; +} + + +.board .row .tile:hover { + background-color: rgb(210, 210, 210); +} diff --git a/src/app/components/example-modules/tictactoe-module/tictactoe.ts b/src/app/components/example-modules/tictactoe-module/tictactoe.ts new file mode 100644 index 0000000..f40bc71 --- /dev/null +++ b/src/app/components/example-modules/tictactoe-module/tictactoe.ts @@ -0,0 +1,33 @@ +/// + +// Angular 2 +import {Component, View, coreDirectives} from 'angular2/angular2'; + +// Services +import {Game} from './services/game'; + +// Directives +import {Board} from './directives/board'; + +// View +let view = require('./views/tictactoe.html'); + +@Component({ + selector: 'tictactoe', + viewBindings: [ Game ] +}) +@View({ + directives: [ coreDirectives, Board ], + template: view +}) +export class Tictactoe { + constructor(public game: Game) { + + } + + reset() { + this.game.dispose(); + this.game = Game.create(); + } + +} diff --git a/src/app/components/example-modules/tictactoe-module/views/board.html b/src/app/components/example-modules/tictactoe-module/views/board.html new file mode 100644 index 0000000..5415481 --- /dev/null +++ b/src/app/components/example-modules/tictactoe-module/views/board.html @@ -0,0 +1,11 @@ +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/src/app/components/example-modules/tictactoe-module/views/tictactoe.html b/src/app/components/example-modules/tictactoe-module/views/tictactoe.html new file mode 100644 index 0000000..c72b80f --- /dev/null +++ b/src/app/components/example-modules/tictactoe-module/views/tictactoe.html @@ -0,0 +1,7 @@ +
+

Tic Tac Toe

+

{{ game.winner }} won!

+

draw

+ + +
diff --git a/src/app/services/services.ts b/src/app/services/services.ts index 26866af..0b72a65 100644 --- a/src/app/services/services.ts +++ b/src/app/services/services.ts @@ -2,12 +2,9 @@ import {bind} from 'angular2/angular2'; -/* TO DO: create these components and services. */ -//import {todoInjectables} from './TodoService'; -//import {githubInjectables} from '../components/rxjs-examples/autosuggest/Github'; +import {githubInjectables} from '../components/example-modules/search-module/services/github'; // Include injectables that you want to have globally throughout our app export var appServicesInjectables: Array = [ - //githubInjectables, - //todoInjectables, -]; + githubInjectables, +]; \ No newline at end of file From b9fe990dce4ed5bf719a922107a0cc865bdbf8ec Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 17:41:42 -0700 Subject: [PATCH 23/42] (#12) dashboard module --- src/app/components/dashboard/dashboard.ts | 38 +++++++++++++++++++ .../components/dashboard/views/dashboard.html | 9 +++++ 2 files changed, 47 insertions(+) create mode 100644 src/app/components/dashboard/dashboard.ts create mode 100644 src/app/components/dashboard/views/dashboard.html diff --git a/src/app/components/dashboard/dashboard.ts b/src/app/components/dashboard/dashboard.ts new file mode 100644 index 0000000..8c03591 --- /dev/null +++ b/src/app/components/dashboard/dashboard.ts @@ -0,0 +1,38 @@ +/// + +/* + * Angular 2 + */ +import {Component, View, Directive, ElementRef} from 'angular2/angular2'; + +let view = require('./views/dashboard.html'); + +/* + * TODO: refactor + * simple example directive that should be in `/directives` folder + */ +@Directive({ + selector: '[x-large]' // using [ ] means selecting attributes +}) +class XLarge { + constructor(public el: ElementRef) { + // simple dom manipulation to set font size to x-large + if (this.el.nativeElement.style) { + this.el.nativeElement.style.fontSize = 'x-large'; + } + } +} + +// Simple component with custom directive example +@Component({ + selector: 'dashboard' +}) +@View({ + directives: [ XLarge ], + template: view +}) +export class Dashboard { + constructor() { + + } +} diff --git a/src/app/components/dashboard/views/dashboard.html b/src/app/components/dashboard/views/dashboard.html new file mode 100644 index 0000000..6246e2d --- /dev/null +++ b/src/app/components/dashboard/views/dashboard.html @@ -0,0 +1,9 @@ + +
+

Dashboard

+ Extra Large Font Directive +
\ No newline at end of file From ddb5ca2cf3c693102d5049e059595a172f989b45 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 17:42:02 -0700 Subject: [PATCH 24/42] (#12) fix reference path --- .../example-modules/search-module/directives/autosuggest.ts | 2 +- .../components/example-modules/search-module/services/github.ts | 2 +- .../example-modules/search-module/services/searchable.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/components/example-modules/search-module/directives/autosuggest.ts b/src/app/components/example-modules/search-module/directives/autosuggest.ts index 35f6b69..6b306b7 100644 --- a/src/app/components/example-modules/search-module/directives/autosuggest.ts +++ b/src/app/components/example-modules/search-module/directives/autosuggest.ts @@ -1,4 +1,4 @@ -/// +/// // Angular 2 import {Directive, View, EventEmitter, ElementRef, LifecycleEvent} from 'angular2/angular2'; diff --git a/src/app/components/example-modules/search-module/services/github.ts b/src/app/components/example-modules/search-module/services/github.ts index c7093b1..890338c 100644 --- a/src/app/components/example-modules/search-module/services/github.ts +++ b/src/app/components/example-modules/search-module/services/github.ts @@ -1,4 +1,4 @@ -/// +/// import {bind, Injectable, Http} from 'angular2/angular2' diff --git a/src/app/components/example-modules/search-module/services/searchable.ts b/src/app/components/example-modules/search-module/services/searchable.ts index f52d42e..921f31d 100644 --- a/src/app/components/example-modules/search-module/services/searchable.ts +++ b/src/app/components/example-modules/search-module/services/searchable.ts @@ -1,4 +1,4 @@ -/// +/// export interface ISearchable { search(query: string): Rx.Observable; From 83f3c79a3469de743193ec980fda294bf03e16d6 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 17:51:25 -0700 Subject: [PATCH 25/42] (#12) modified core functionalities for more performance. --- src/app/components/app.ts | 2 +- .../example-modules/example-modules.ts | 55 ++-- .../pipes/capitalize/capitalize-pipe.spec.ts | 276 +++++++++--------- src/app/pipes/capitalize/capitalize-pipe.ts | 86 +++--- 4 files changed, 210 insertions(+), 209 deletions(-) diff --git a/src/app/components/app.ts b/src/app/components/app.ts index ad82206..b8c27db 100644 --- a/src/app/components/app.ts +++ b/src/app/components/app.ts @@ -27,7 +27,7 @@ import {appPipes} from '../pipes/pipes'; // We use a folder if we want separate files import {Home} from './home/home'; // Otherwise we only use one file for a component -import {Dashboard} from './dashboard'; +import {Dashboard} from './dashboard/dashboard'; // Example modules import {ExampleModules} from './example-modules/example-modules'; diff --git a/src/app/components/example-modules/example-modules.ts b/src/app/components/example-modules/example-modules.ts index 3b5a790..d756e21 100644 --- a/src/app/components/example-modules/example-modules.ts +++ b/src/app/components/example-modules/example-modules.ts @@ -1,27 +1,28 @@ -/// - -// Angular 2 -import {Component, View, CSSClass} from 'angular2/angular2'; -import {RouteConfig, routerDirectives} from 'angular2/router'; -// Modules -import {Tictactoe} from './tictactoe-module/tictactoe'; -// View -let template = require('./example-modules.html'); -let styles = require('./example-modules.css') -@Component({ - selector: 'example-modules' -}) -@RouteConfig([ - { path: '/', redirectTo: '/search' }, - { path: '/search', as: 'search', component: Search }, - { path: '/tictactoe', as: 'tictactoe', component: Tictactoe } -]) -@View({ - directives: [ routerDirectives, CSSClass ], - // include our .css file - styles: [ styles ], // Use webpack's `require` to get files as a raw string using raw-loader - template: template -}) -export class ExampleModules { - active: number = 0; -} +/// + +// Angular 2 +import {Component, View, CSSClass} from 'angular2/angular2'; +import {RouteConfig, routerDirectives} from 'angular2/router'; +// Modules +import {Tictactoe} from './tictactoe-module/tictactoe'; +import {Search} from '.search-module/search'; +// View +let template = require('./example-modules.html'); +let styles = require('./example-modules.css') +@Component({ + selector: 'example-modules' +}) +@RouteConfig([ + { path: '/', redirectTo: '/search' }, + { path: '/search', as: 'search', component: Search }, + { path: '/tictactoe', as: 'tictactoe', component: Tictactoe } +]) +@View({ + directives: [ routerDirectives, CSSClass ], + // include our .css file + styles: [ styles ], // Use webpack's `require` to get files as a raw string using raw-loader + template: template +}) +export class ExampleModules { + active: number = 0; +} diff --git a/src/app/pipes/capitalize/capitalize-pipe.spec.ts b/src/app/pipes/capitalize/capitalize-pipe.spec.ts index 3f935f9..614443b 100644 --- a/src/app/pipes/capitalize/capitalize-pipe.spec.ts +++ b/src/app/pipes/capitalize/capitalize-pipe.spec.ts @@ -1,138 +1,138 @@ -/// -import {CapitalizePipe, CapitalizeFactory} from './Capitalize-Pipe'; - -describe('Capitalize', () => { - - describe('CapitalizePipe', () => { - var subject; - var result; - var pipe; - - beforeEach(() => { - pipe = new CapitalizePipe(); - }); - afterEach(() => { - expect(subject).toEqual(result); - }); - - describe('#support', () => { - - it('should support string', () => { - subject = pipe.supports('yolo'); - result = true; - }); - - it('should not support null', () => { - subject = pipe.supports(null); - result = false; - }); - - it('should not support NaN', () => { - subject = pipe.supports(NaN); - result = false; - }); - - it('should not support new Object()', () => { - subject = pipe.supports(new Object()); - result = false; - }); - - it('should not support function(){}', () => { - subject = pipe.supports(function(){}); - result = false; - }); - - }); - - describe('#transform', () => { - it('should transform string to Capitalized versions', () => { - subject = pipe.transform('yolo'); - result = 'Yolo'; - }); - - it('should transform all strings to Capitalized versions', () => { - var str = 'what does the scouter say about its power level'; - - subject = pipe.transform(str, true); - result = 'What Does The Scouter Say About Its Power Level'; - }); - - }); - - - describe('#capitalizeWord', () => { - it('should capitalized a word', () => { - subject = pipe.capitalizeWord('something'); - result = 'Something'; - }); - - it('should only capitalized first char', () => { - subject = pipe.capitalizeWord('something something something'); - result = 'Something something something'; - }); - - }); - - - }); - - describe('CapitalizeFactory', () => { - var subject; - var result; - var factory; - - beforeEach(() => { - factory = new CapitalizeFactory(); - }); - - afterEach(() => { - expect(subject).toEqual(result); - }); - - it('should exist', () => { - subject = Boolean(factory); - result = true; - }); - - describe('#support', () => { - it('should support string', () => { - subject = factory.supports('yolo'); - result = true; - }); - - it('should not support null', () => { - subject = factory.supports(null); - result = false; - }); - - it('should not support NaN', () => { - subject = factory.supports(NaN); - result = false; - }); - - it('should not support new Object()', () => { - subject = factory.supports(new Object()); - result = false; - }); - - it('should not support function(){}', () => { - subject = factory.supports(function(){}); - result = false; - }); - - - }); - - describe('#create', () => { - it('should be instance of CapitalizePipe', () => { - subject = factory.create() instanceof CapitalizePipe; - result = true; - }); - - }); - - - }); - - -}); +/// +import {CapitalizePipe, CapitalizeFactory} from './Capitalize-Pipe'; + +describe('Capitalize', () => { + + describe('CapitalizePipe', () => { + var subject; + var result; + var pipe; + + beforeEach(() => { + pipe = new CapitalizePipe(); + }); + afterEach(() => { + expect(subject).toEqual(result); + }); + + describe('#support', () => { + + it('should support string', () => { + subject = pipe.supports('yolo'); + result = true; + }); + + it('should not support null', () => { + subject = pipe.supports(null); + result = false; + }); + + it('should not support NaN', () => { + subject = pipe.supports(NaN); + result = false; + }); + + it('should not support new Object()', () => { + subject = pipe.supports({}); + result = false; + }); + + it('should not support function(){}', () => { + subject = pipe.supports(function(){}); + result = false; + }); + + }); + + describe('#transform', () => { + it('should transform string to Capitalized versions', () => { + subject = pipe.transform('yolo'); + result = 'Yolo'; + }); + + it('should transform all strings to Capitalized versions', () => { + var str = 'what does the scouter say about its power level'; + + subject = pipe.transform(str, true); + result = 'What Does The Scouter Say About Its Power Level'; + }); + + }); + + + describe('#capitalizeWord', () => { + it('should capitalized a word', () => { + subject = CapitalizePipe.capitalizeWord('something'); + result = 'Something'; + }); + + it('should only capitalized first char', () => { + subject = CapitalizePipe.capitalizeWord('something something something'); + result = 'Something something something'; + }); + + }); + + + }); + + describe('CapitalizeFactory', () => { + var subject; + var result; + var factory; + + beforeEach(() => { + factory = new CapitalizeFactory(); + }); + + afterEach(() => { + expect(subject).toEqual(result); + }); + + it('should exist', () => { + subject = Boolean(factory); + result = true; + }); + + describe('#support', () => { + it('should support string', () => { + subject = factory.supports('yolo'); + result = true; + }); + + it('should not support null', () => { + subject = factory.supports(null); + result = false; + }); + + it('should not support NaN', () => { + subject = factory.supports(NaN); + result = false; + }); + + it('should not support new Object()', () => { + subject = factory.supports({}); + result = false; + }); + + it('should not support function(){}', () => { + subject = factory.supports(function(){}); + result = false; + }); + + + }); + + describe('#create', () => { + it('should be instance of CapitalizePipe', () => { + subject = factory.create() instanceof CapitalizePipe; + result = true; + }); + + }); + + + }); + + +}); diff --git a/src/app/pipes/capitalize/capitalize-pipe.ts b/src/app/pipes/capitalize/capitalize-pipe.ts index bf2c6bf..2ee9eea 100644 --- a/src/app/pipes/capitalize/capitalize-pipe.ts +++ b/src/app/pipes/capitalize/capitalize-pipe.ts @@ -1,43 +1,43 @@ -/// -import {Pipe, PipeFactory} from 'angular2/angular2'; - -// Check if the value is supported for the pipe -export function isString(txt): boolean { - return typeof txt === 'string'; -} - -// Simple example of a Pipe -export class CapitalizePipe implements Pipe { - regexp: RegExp = /([^\W_]+[^\s-]*) */g; - - supports(txt): boolean { - return isString(txt); - } - transform(value: string, args?: List): any { - return (!value) ? '' : - (!args) ? - this.capitalizeWord(value) : - value.replace(this.regexp, this.capitalizeWord); - } - capitalizeWord(txt: string): string { - return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); - } - onDestroy(): void { - // not needed since this is stateless - } - -} - -// We create a factory since we create an instance for each binding for stateful pipes -export class CapitalizeFactory implements PipeFactory { - supports(txt): boolean { - return isString(txt); - } - create(cdRef): Pipe { - return new CapitalizePipe(); - } -} - -// Since templates in angular are async we are passing the value to -// NullPipeFactory if the value is not supported -export var capitalize = [ new CapitalizeFactory() ]; +/// +import {Pipe, PipeFactory} from 'angular2/angular2'; + +// Check if the value is supported for the pipe +export function isString(txt): boolean { + return typeof txt === 'string'; +} + +// Simple example of a Pipe +export class CapitalizePipe implements Pipe { + regexp: RegExp = /([^\W_]+[^\s-]*) */g; + + supports(txt): boolean { + return isString(txt); + } + transform(value: string, args?: List): any { + return (!value) ? '' : + (!args) ? + CapitalizePipe.capitalizeWord(value) : + value.replace(this.regexp, CapitalizePipe.capitalizeWord); + } + static capitalizeWord(txt: string): string { + return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); + } + onDestroy(): void { + // not needed since this is stateless + } + +} + +// We create a factory since we create an instance for each binding for stateful pipes +export class CapitalizeFactory implements PipeFactory { + supports(txt): boolean { + return isString(txt); + } + create(cdRef): Pipe { + return new CapitalizePipe(); + } +} + +// Since templates in angular are async we are passing the value to +// NullPipeFactory if the value is not supported +export var capitalize = [ new CapitalizeFactory() ]; From 78740dfe3bc6a0996bf5c081ca78aa3a429804a1 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 19:49:06 -0700 Subject: [PATCH 26/42] (#15) Update readme --- README.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0253096..ecbfa96 100644 --- a/README.md +++ b/README.md @@ -36,26 +36,33 @@ Install the following node modules ## Running App After installation run `npm run server` to start a local server using `webpack-dev-server` which will watch, build (in-memory), and reload for you. The port will be displayed to you as `http://localhost:3000` (or if you prefer IPv6, if you're using `express` server, then it's `http://[::1]:3000/`). +### server +```bash +$ webpack-dev-server +``` + +## Other Commands + ### build files ```bash -$ npm run build # or webpack +$ webpack ``` ### watch and build files ```bash -$ npm run watch # or webpack --watch +$ webpack --watch ``` ### run tests ```bash -$ npm run test # or karma start +$ karma start ``` ### run webdriver (E2E) ```bash -$ npm run webdriver-start # or webdriver-manager start +$ webdriver-manager start then -$ npm rune e2e +$ npm run e2e ``` # Angular 2.0 API From a050f13a34b3fba9e2a48b0afd04aea46f31b031 Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 19:56:01 -0700 Subject: [PATCH 27/42] (#15) update index and package folder --- package.json | 12 +++--------- src/public/index.html | 6 ++---- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 1ad5414..66a1912 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "angular2-webpack-starter", + "name": "angular2.0-App", "version": "0.0.0", - "description": "An Angular 2 Webpack Starter kit featuring Angular 2 (Router, Http, Forms, Services, Tests, E2E), Karma, Protractor, Jasmine, TypeScript, and Webpack by AngularClass", + "description": "An Angular 2.0 sample app using Webpack", "main": "", "scripts": { "build": "npm run build:dev && npm run build:prod", @@ -27,16 +27,10 @@ "prestart": "npm install", "start": "npm run server" }, - "repository": { - "type": "git", - "url": "https://github.com/angular-class/angular2-webpack-starter.git" - }, - "author": "gdi2290 ", "license": "MIT", "bugs": { - "url": "https://github.com/angular-class/angular2-webpack-starter/issues" + "url": "https://github.com/1337programming/angular2.0-App/issues" }, - "homepage": "https://github.com/angular-class/angular2-webpack-starter", "dependencies": { "angular2": "2.0.0-alpha.34", "reflect-metadata": "^0.1.0", diff --git a/src/public/index.html b/src/public/index.html index 850e689..276597f 100644 --- a/src/public/index.html +++ b/src/public/index.html @@ -1,14 +1,13 @@ - Angular2 Webpack Starter by @gdi2990 from @AngularClass + Angular 2.0 App - @@ -38,7 +37,6 @@ - - + From d3d0577d088e88fc8d33f80c6f5acbae019d3a0f Mon Sep 17 00:00:00 2001 From: opiepj Date: Sat, 8 Aug 2015 19:56:36 -0700 Subject: [PATCH 28/42] (#15) server implementation. --- server/express-server.js | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 server/express-server.js diff --git a/server/express-server.js b/server/express-server.js new file mode 100644 index 0000000..1def89d --- /dev/null +++ b/server/express-server.js @@ -0,0 +1,60 @@ +// Webpack +var webpack = require('webpack'); +var WebpackDevServer = require('webpack-dev-server'); +var webpackConfig = require('../webpack.config'); + +// Express +var express = require('express'); +var history = require('connect-history-api-fallback'); +var morgan = require('morgan'); +var bodyParser = require('body-parser'); + +// Express App +var app = express(); + +// Env +var PORT = process.env.PORT || 3000; +var NODE_ENV = process.env.NODE_ENV || 'development'; + +app.use(morgan('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ + extended: true +})); + +// Angular Http content type for POST etc defaults to text/plain at +app.use(bodyParser.text(), function ngHttpFix(req, next) { + try { + req.body = JSON.parse(req.body); + next(); + } catch (e) { + next(); + } +}); + +// Your middleware +app.use(history()); +app.use(express.static('src/public')); + +// Only use in development +if (NODE_ENV === 'development') { + var server = new WebpackDevServer(webpack(webpackConfig), { + publicPath: '/__build__', + historyApiFallback: false, // won't work due to order + inline: true, + quiet: false, + noInfo: false, + stats: { + colors: true + } + }); + // Webpack express app that uses socket.io + app.use(server.app); +} else { + app.use('/__build__', express.static('__build__')); +} + + +app.listen(PORT, function () { + console.log('Listen on http://localhost:' + PORT + ' in ' + NODE_ENV); +}); From d9749d4ee4e003e21a6855f1888b758a8553a6a4 Mon Sep 17 00:00:00 2001 From: opiepj Date: Mon, 10 Aug 2015 09:12:04 -0700 Subject: [PATCH 29/42] fix build errors. --- src/app/components/app.html | 7 +- .../example-modules/example-modules.ts | 2 +- .../search-module/directives/autosuggest.ts | 2 +- .../tictactoe-module/directives/board.ts | 4 +- src/app/pipes/pipes.ts | 3 +- src/public/angularjs-logo_patrick.png | Bin 0 -> 74387 bytes webpack.config.js | 95 ++++++++++-------- 7 files changed, 58 insertions(+), 55 deletions(-) create mode 100644 src/public/angularjs-logo_patrick.png diff --git a/src/app/components/app.html b/src/app/components/app.html index cca5465..101bea8 100644 --- a/src/app/components/app.html +++ b/src/app/components/app.html @@ -1,7 +1,7 @@
Angular2 - +
diff --git a/src/app/components/example-modules/example-modules.ts b/src/app/components/example-modules/example-modules.ts index d756e21..cd4e8ea 100644 --- a/src/app/components/example-modules/example-modules.ts +++ b/src/app/components/example-modules/example-modules.ts @@ -5,7 +5,7 @@ import {Component, View, CSSClass} from 'angular2/angular2'; import {RouteConfig, routerDirectives} from 'angular2/router'; // Modules import {Tictactoe} from './tictactoe-module/tictactoe'; -import {Search} from '.search-module/search'; +import {Search} from './search-module/search'; // View let template = require('./example-modules.html'); let styles = require('./example-modules.css') diff --git a/src/app/components/example-modules/search-module/directives/autosuggest.ts b/src/app/components/example-modules/search-module/directives/autosuggest.ts index 6b306b7..3bdbb34 100644 --- a/src/app/components/example-modules/search-module/directives/autosuggest.ts +++ b/src/app/components/example-modules/search-module/directives/autosuggest.ts @@ -3,7 +3,7 @@ // Angular 2 import {Directive, View, EventEmitter, ElementRef, LifecycleEvent} from 'angular2/angular2'; -import {Github} from './Github'; +import {Github} from '../services/github'; // RxJs import * as Rx from 'rx'; diff --git a/src/app/components/example-modules/tictactoe-module/directives/board.ts b/src/app/components/example-modules/tictactoe-module/directives/board.ts index 1dbfcf5..7086b5e 100644 --- a/src/app/components/example-modules/tictactoe-module/directives/board.ts +++ b/src/app/components/example-modules/tictactoe-module/directives/board.ts @@ -3,8 +3,8 @@ // Angular 2 import {Component, View, EventEmitter, coreDirectives} from 'angular2/angular2'; -let styles = require('./styles/board.css'); -let template = require('./views/board.html'); +let styles = require('../styles/board.css'); +let template = require('../views/board.html'); @Component({ selector: 'board', diff --git a/src/app/pipes/pipes.ts b/src/app/pipes/pipes.ts index 74eea72..5b0abff 100644 --- a/src/app/pipes/pipes.ts +++ b/src/app/pipes/pipes.ts @@ -8,12 +8,11 @@ import {Pipes} from 'angular2/change_detection'; * App Pipes */ import {capitalize} from './Capitalize/Capitalize-Pipe'; -import {rxAsync} from './RxPipe'; +import {rxAsync} from './rx/rxpipe'; export var appPipes = [ Pipes.extend({ 'async': rxAsync, 'capitalize': capitalize - // add more pipes to this Map }) ]; diff --git a/src/public/angularjs-logo_patrick.png b/src/public/angularjs-logo_patrick.png new file mode 100644 index 0000000000000000000000000000000000000000..90f9b3af5012cb54f1a3ea80d8963ff0c5241af4 GIT binary patch literal 74387 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 u&3`ukA2 Date: Mon, 10 Aug 2015 09:26:14 -0700 Subject: [PATCH 30/42] template adjustments. --- src/app/components/app.html | 8 +++++--- .../components/example-modules/example-modules.html | 12 ------------ 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/app/components/app.html b/src/app/components/app.html index 101bea8..9b9d5c2 100644 --- a/src/app/components/app.html +++ b/src/app/components/app.html @@ -1,7 +1,9 @@

- Angular2 - + + Angular2 + +
diff --git a/src/app/components/example-modules/example-modules.html b/src/app/components/example-modules/example-modules.html index 21685b6..4283d1b 100644 --- a/src/app/components/example-modules/example-modules.html +++ b/src/app/components/example-modules/example-modules.html @@ -9,24 +9,12 @@ Search Github -
  • - Timeflies -
  • Tic tac toe
  • -
  • - Drag Element -
  • From c04b137f1e32d075f564c14f68d0b68c452e7b38 Mon Sep 17 00:00:00 2001 From: opiepj Date: Mon, 10 Aug 2015 09:35:19 -0700 Subject: [PATCH 31/42] added images, modified template views. --- src/app/components/app.html | 8 +++++++- .../components/dashboard/views/dashboard.html | 2 +- src/public/angular-shield.png | Bin 0 -> 18982 bytes src/public/webpack.png | Bin 0 -> 58523 bytes 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 src/public/angular-shield.png create mode 100644 src/public/webpack.png diff --git a/src/app/components/app.html b/src/app/components/app.html index 9b9d5c2..61cb3f6 100644 --- a/src/app/components/app.html +++ b/src/app/components/app.html @@ -1,7 +1,7 @@
    - Angular2 + AngularP
      @@ -14,6 +14,12 @@
    • Modules
    • +
    • + Angular2 +
    • +
    • + Webpack +
    diff --git a/src/app/components/dashboard/views/dashboard.html b/src/app/components/dashboard/views/dashboard.html index 6246e2d..c09c167 100644 --- a/src/app/components/dashboard/views/dashboard.html +++ b/src/app/components/dashboard/views/dashboard.html @@ -5,5 +5,5 @@

    Dashboard

    - Extra Large Font Directive + This is a useless dashboard!
    \ No newline at end of file diff --git a/src/public/angular-shield.png b/src/public/angular-shield.png new file mode 100644 index 0000000000000000000000000000000000000000..9838bd7e9fa81eadcaa0559892b22f28b3080820 GIT binary patch literal 18982 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

    Bv!g}o}(${ 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 literal 0 HcmV?d00001 diff --git a/src/public/webpack.png b/src/public/webpack.png new file mode 100644 index 0000000000000000000000000000000000000000..aab676bbecb3eb31504dd702821c453f1d1d7dc7 GIT binary patch literal 58523 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

    =Z_{EDFZF1~_ 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

    Xs~&=OZ|^?j=lGGE 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 literal 0 HcmV?d00001 From 4436c1fe0882caf751caef270dbc17dae35eb96f Mon Sep 17 00:00:00 2001 From: opiepj Date: Mon, 10 Aug 2015 10:28:51 -0700 Subject: [PATCH 32/42] Loading Spinner --- src/public/index.html | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/public/index.html b/src/public/index.html index 276597f..724e5bf 100644 --- a/src/public/index.html +++ b/src/public/index.html @@ -15,6 +15,13 @@