├── .clang-format
├── .gitignore
├── LICENSE
├── Procfile
├── README.md
├── angular-cli-build.js
├── angular-cli.json
├── config
└── environment.js
├── dist
├── app.js
├── app.js.map
├── app
│ ├── album-cover
│ │ ├── album-cover.css
│ │ ├── album-cover.html
│ │ ├── album-cover.js
│ │ └── album-cover.js.map
│ ├── albums-page
│ │ ├── albums-page.css
│ │ ├── albums-page.html
│ │ ├── albums-page.js
│ │ └── albums-page.js.map
│ ├── albums-service
│ │ ├── albums-service.js
│ │ └── albums-service.js.map
│ ├── music.html
│ ├── music.js
│ ├── music.js.map
│ ├── route-config.js
│ ├── route-config.js.map
│ └── tracks-page
│ │ ├── tracks-page.css
│ │ ├── tracks-page.html
│ │ ├── tracks-page.js
│ │ └── tracks-page.js.map
├── favicon.ico
├── index.html
├── manifest.appcache
├── tsconfig.json
└── vendor
│ ├── angular2
│ └── bundles
│ │ ├── angular2-polyfills.js
│ │ ├── angular2.dev.js
│ │ ├── http.dev.js
│ │ ├── router.dev.js
│ │ └── upgrade.dev.js
│ ├── es6-shim
│ └── es6-shim.js
│ ├── rxjs
│ └── bundles
│ │ └── Rx.js
│ └── systemjs
│ └── dist
│ ├── system-polyfills.js
│ └── system.src.js
├── e2e
├── app.e2e.ts
├── app.po.ts
├── tsconfig.json
└── typings.d.ts
├── index.js
├── karma-test-shim.js
├── karma.conf.js
├── package.json
├── protractor.conf.js
├── public
└── .npmignore
├── src
└── client
│ ├── app.ts
│ ├── app
│ ├── album-cover
│ │ ├── album-cover.css
│ │ ├── album-cover.html
│ │ ├── album-cover.spec.ts
│ │ └── album-cover.ts
│ ├── albums-page
│ │ ├── albums-page.css
│ │ ├── albums-page.html
│ │ ├── albums-page.spec.ts
│ │ └── albums-page.ts
│ ├── albums-service
│ │ ├── albums-service.spec.ts
│ │ └── albums-service.ts
│ ├── music.html
│ ├── music.spec.ts
│ ├── music.ts
│ ├── route-config.ts
│ └── tracks-page
│ │ ├── tracks-page.css
│ │ ├── tracks-page.html
│ │ ├── tracks-page.spec.ts
│ │ └── tracks-page.ts
│ ├── favicon.ico
│ ├── index.html
│ ├── tsconfig.json
│ └── typings.d.ts
├── tslint.json
└── typings.json
/.clang-format:
--------------------------------------------------------------------------------
1 | Language: JavaScript
2 | BasedOnStyle: Google
3 | ColumnLimit: 100
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # compiled output
4 | /tmp
5 |
6 | # dependencies
7 | /node_modules
8 | /bower_components
9 |
10 | # IDEs and editors
11 | /.idea
12 | /.vscode
13 |
14 | # misc
15 | /.sass-cache
16 | /connect.lock
17 | /coverage/*
18 | /libpeerconnection.log
19 | npm-debug.log
20 | testem.log
21 | /typings
22 |
23 | # e2e
24 | /e2e/*.js
25 | /e2e/*.map
26 |
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 AngularMVD
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: node index.js
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ng-music
2 | Workshop created for the Jsconf based on Spotyngular project. It is a clone of the well known streaming music service Spotify and uses Angular 2 like base framework
3 |
--------------------------------------------------------------------------------
/angular-cli-build.js:
--------------------------------------------------------------------------------
1 | /* global require, module */
2 |
3 | var Angular2App = require('angular-cli/lib/broccoli/angular2-app');
4 |
5 | module.exports = function(defaults) {
6 | var app = new Angular2App(defaults, {
7 | vendorNpmFiles: []
8 | });
9 | return app.toTree();
10 | };
11 |
--------------------------------------------------------------------------------
/angular-cli.json:
--------------------------------------------------------------------------------
1 | {
2 | "routes": []
3 | }
--------------------------------------------------------------------------------
/config/environment.js:
--------------------------------------------------------------------------------
1 | /* jshint node: true */
2 |
3 | module.exports = function(environment) {
4 | return {
5 | environment: environment,
6 | baseURL: '/',
7 | locationType: 'auto'
8 | };
9 | };
10 |
11 |
--------------------------------------------------------------------------------
/dist/app.js:
--------------------------------------------------------------------------------
1 | System.register(["angular2/platform/browser","./app/music"],function(exports_1,context_1){"use strict";var __moduleName=context_1&&context_1.id;var browser_1,music_1;return{setters:[function(browser_1_1){browser_1=browser_1_1},function(music_1_1){music_1=music_1_1}],execute:function(){browser_1.bootstrap(music_1.MusicApp,[])}}});
--------------------------------------------------------------------------------
/dist/app.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":";;;;;;;;;;;;;YAGA,mBAAS,CAAC,gBAAQ,EAAE,EAAE,CAAC,CAAC","sourcesContent":["import {bootstrap} from 'angular2/platform/browser';\nimport {MusicApp} from './app/music';\n\nbootstrap(MusicApp, []);\n"]}
--------------------------------------------------------------------------------
/dist/app/album-cover/album-cover.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngularMVD/ng-music/4df1004586501e3b9c6f43e26e332734e126c1b5/dist/app/album-cover/album-cover.css
--------------------------------------------------------------------------------
/dist/app/album-cover/album-cover.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/dist/app/album-cover/album-cover.js:
--------------------------------------------------------------------------------
1 | System.register(["angular2/core","angular2/router"],function(exports_1,context_1){"use strict";var __moduleName=context_1&&context_1.id;var __decorate=this&&this.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)if(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r;return c>3&&r&&Object.defineProperty(target,key,r),r};var __metadata=this&&this.__metadata||function(k,v){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(k,v)};var core_1,router_1;var AlbumCover;return{setters:[function(core_1_1){core_1=core_1_1},function(router_1_1){router_1=router_1_1}],execute:function(){AlbumCover=function(){function AlbumCover(){}AlbumCover.prototype.selectAlbum=function(){alert("Album selected")};__decorate([core_1.Input(),__metadata("design:type",Object)],AlbumCover.prototype,"album",void 0);AlbumCover=__decorate([core_1.Component({selector:"album-cover",templateUrl:"app/album-cover/album-cover.html",styleUrls:["app/album-cover/album-cover.css"],providers:[],directives:[router_1.RouterLink],pipes:[]}),__metadata("design:paramtypes",[])],AlbumCover);return AlbumCover}();exports_1("AlbumCover",AlbumCover)}}});
--------------------------------------------------------------------------------
/dist/app/album-cover/album-cover.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"album-cover.js","sourceRoot":"","sources":["album-cover.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;YAWA;gBAAA;gBAMA,CAAC;gBAHC,gCAAW,GAAX;oBACA,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACxB,CAAC;gBAJF;oBAAC,YAAK,EAAE;;yDAAA;gBATT;oBAAC,gBAAS,CAAC;wBACT,QAAQ,EAAE,aAAa;wBACvB,WAAW,EAAE,kCAAkC;wBAC/C,SAAS,EAAE,CAAC,iCAAiC,CAAC;wBAC9C,SAAS,EAAE,EAAE;wBACb,UAAU,EAAE,CAAC,mBAAU,CAAC;wBACxB,KAAK,EAAE,EAAE;qBACV,CAAC;;8BAAA;gBAOF,iBAAC;YAAD,CAAC,AAND,IAMC;YAND,mCAMC,CAAA","sourcesContent":["import {Component, Input} from 'angular2/core';\nimport {RouterLink} from 'angular2/router';\n\n@Component({\n selector: 'album-cover',\n templateUrl: 'app/album-cover/album-cover.html',\n styleUrls: ['app/album-cover/album-cover.css'],\n providers: [],\n directives: [RouterLink],\n pipes: [],\n})\nexport class AlbumCover {\n\t@Input() album: any;\n\n selectAlbum() {\n\t\talert(\"Album selected\");\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/app/albums-page/albums-page.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngularMVD/ng-music/4df1004586501e3b9c6f43e26e332734e126c1b5/dist/app/albums-page/albums-page.css
--------------------------------------------------------------------------------
/dist/app/albums-page/albums-page.html:
--------------------------------------------------------------------------------
1 | ng-music
2 |
13 |
14 |
15 |
16 | Pick an album
17 |
18 |
19 |
--------------------------------------------------------------------------------
/dist/app/albums-page/albums-page.js:
--------------------------------------------------------------------------------
1 | System.register(["angular2/core","angular2/common","../album-cover/album-cover","../albums-service/albums-service"],function(exports_1,context_1){"use strict";var __moduleName=context_1&&context_1.id;var __decorate=this&&this.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)if(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r;return c>3&&r&&Object.defineProperty(target,key,r),r};var __metadata=this&&this.__metadata||function(k,v){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(k,v)};var core_1,common_1,album_cover_1,albums_service_1;var AlbumsPage;return{setters:[function(core_1_1){core_1=core_1_1},function(common_1_1){common_1=common_1_1},function(album_cover_1_1){album_cover_1=album_cover_1_1},function(albums_service_1_1){albums_service_1=albums_service_1_1}],execute:function(){AlbumsPage=function(){function AlbumsPage(_albumsService){var _this=this;this._albumsService=_albumsService;this.albums=[];_albumsService.getAllAlbums().subscribe(function(albums){return _this.albums=albums})}AlbumsPage=__decorate([core_1.Component({selector:"albums-page",templateUrl:"app/albums-page/albums-page.html",styleUrls:["app/albums-page/albums-page.css"],providers:[albums_service_1.AlbumsService],directives:[album_cover_1.AlbumCover,common_1.NgFor],pipes:[]}),__metadata("design:paramtypes",[albums_service_1.AlbumsService])],AlbumsPage);return AlbumsPage}();exports_1("AlbumsPage",AlbumsPage)}}});
--------------------------------------------------------------------------------
/dist/app/albums-page/albums-page.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"albums-page.js","sourceRoot":"","sources":["albums-page.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAcA;gBAGE,oBAAoB,cAA6B;oBAHnD,iBAOC;oBAJqB,mBAAc,GAAd,cAAc,CAAe;oBAFlD,WAAM,GAAQ,EAAE,CAAC;oBAGhB,cAAc,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,MAAM,GAAG,MAAM,EAApB,CAAoB,CAAC,CAAC;gBACxE,CAAC;gBAbH;oBAAC,gBAAS,CAAC;wBACT,QAAQ,EAAE,aAAa;wBACvB,WAAW,EAAE,kCAAkC;wBAC/C,SAAS,EAAE,CAAC,iCAAiC,CAAC;wBAC9C,SAAS,EAAE,CAAC,8BAAa,CAAC;wBAC1B,UAAU,EAAE,CAAC,wBAAU,EAAE,cAAK,CAAC;wBAC/B,KAAK,EAAE,EAAE;qBACV,CAAC;;8BAAA;gBAQF,iBAAC;YAAD,CAAC,AAPD,IAOC;YAPD,mCAOC,CAAA","sourcesContent":["import {Component} from 'angular2/core';\nimport {NgFor} from 'angular2/common';\n\nimport {AlbumCover} from '../album-cover/album-cover';\nimport {AlbumsService} from '../albums-service/albums-service';\n\n@Component({\n selector: 'albums-page',\n templateUrl: 'app/albums-page/albums-page.html',\n styleUrls: ['app/albums-page/albums-page.css'],\n providers: [AlbumsService],\n directives: [AlbumCover, NgFor],\n pipes: []\n})\nexport class AlbumsPage {\n\talbums: any = [];\n\n constructor(private _albumsService: AlbumsService) {\n\t\t_albumsService.getAllAlbums().subscribe(albums => this.albums = albums);\n }\n\n}\n"]}
--------------------------------------------------------------------------------
/dist/app/albums-service/albums-service.js:
--------------------------------------------------------------------------------
1 | System.register(["angular2/core","angular2/http","rxjs/add/operator/map"],function(exports_1,context_1){"use strict";var __moduleName=context_1&&context_1.id;var __decorate=this&&this.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)if(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r;return c>3&&r&&Object.defineProperty(target,key,r),r};var __metadata=this&&this.__metadata||function(k,v){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(k,v)};var core_1,http_1;var AlbumsService;return{setters:[function(core_1_1){core_1=core_1_1},function(http_1_1){http_1=http_1_1},function(_1){}],execute:function(){AlbumsService=function(){function AlbumsService(http){this.http=http}AlbumsService.prototype.getAllAlbums=function(){return this.http.get("/api/albums").map(function(response){return response.json()["albums"]})};AlbumsService=__decorate([core_1.Injectable(),__metadata("design:paramtypes",[http_1.Http])],AlbumsService);return AlbumsService}();exports_1("AlbumsService",AlbumsService)}}});
--------------------------------------------------------------------------------
/dist/app/albums-service/albums-service.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"albums-service.js","sourceRoot":"","sources":["albums-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;YAKA;gBACE,uBAAoB,IAAU;oBAAV,SAAI,GAAJ,IAAI,CAAM;gBAAG,CAAC;gBAElC,oCAAY,GAAZ;oBACA,MAAM,CAAC,IAAI,CAAC,IAAI;yBACd,GAAG,CAAC,aAAa,CAAC;yBAClB,GAAG,CAAC,UAAA,QAAQ;wBACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;oBAClC,CAAC,CAAC,CAAC;gBACJ,CAAC;gBAVH;oBAAC,iBAAU,EAAE;;iCAAA;gBAYb,oBAAC;YAAD,CAAC,AAXD,IAWC;YAXD,yCAWC,CAAA","sourcesContent":["import {Injectable} from 'angular2/core';\nimport {Http} from 'angular2/http';\nimport 'rxjs/add/operator/map';\n\n@Injectable()\nexport class AlbumsService {\n constructor(private http: Http) {}\n\n getAllAlbums() {\n\t\treturn this.http\n\t\t\t.get('/api/albums')\n\t\t\t.map(response => {\n\t\t\t\treturn response.json()['albums'];\n\t\t\t});\n }\n\n}\n"]}
--------------------------------------------------------------------------------
/dist/app/music.html:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/dist/app/music.js:
--------------------------------------------------------------------------------
1 | System.register(["angular2/core","angular2/router","angular2/http","./route-config","./albums-page/albums-page","./tracks-page/tracks-page"],function(exports_1,context_1){"use strict";var __moduleName=context_1&&context_1.id;var __decorate=this&&this.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)if(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r;return c>3&&r&&Object.defineProperty(target,key,r),r};var __metadata=this&&this.__metadata||function(k,v){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(k,v)};var core_1,router_1,http_1,route_config_1,albums_page_1,tracks_page_1;var MusicApp;return{setters:[function(core_1_1){core_1=core_1_1},function(router_1_1){router_1=router_1_1},function(http_1_1){http_1=http_1_1},function(route_config_1_1){route_config_1=route_config_1_1},function(albums_page_1_1){albums_page_1=albums_page_1_1},function(tracks_page_1_1){tracks_page_1=tracks_page_1_1}],execute:function(){MusicApp=function(){function MusicApp(){this.defaultMeaning=42}MusicApp.prototype.meaningOfLife=function(meaning){return"The meaning of life is "+(meaning||this.defaultMeaning)};MusicApp=__decorate([core_1.Component({selector:"music-app",providers:[router_1.ROUTER_PROVIDERS,http_1.HTTP_PROVIDERS],templateUrl:"app/music.html",directives:[router_1.ROUTER_DIRECTIVES],pipes:[]}),router_1.RouteConfig([{path:"/",component:albums_page_1.AlbumsPage,name:"AlbumsPage"},{path:"/:id",component:tracks_page_1.TracksPage,name:"TracksPage"}].concat(route_config_1.CliRouteConfig)),__metadata("design:paramtypes",[])],MusicApp);return MusicApp}();exports_1("MusicApp",MusicApp)}}});
--------------------------------------------------------------------------------
/dist/app/music.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"music.js","sourceRoot":"","sources":["music.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAoBA;gBAAA;oBACE,mBAAc,GAAW,EAAE,CAAC;gBAK9B,CAAC;gBAHC,gCAAa,GAAb,UAAc,OAAgB;oBAC5B,MAAM,CAAC,6BAA0B,OAAO,IAAI,IAAI,CAAC,cAAc,CAAE,CAAC;gBACpE,CAAC;gBAjBH;oBAAC,gBAAS,CAAC;wBACT,QAAQ,EAAE,WAAW;wBACrB,SAAS,EAAE,CAAC,yBAAgB,EAAE,qBAAc,CAAC;wBAC7C,WAAW,EAAE,gBAAgB;wBAC7B,UAAU,EAAE,CAAC,0BAAiB,CAAC;wBAC/B,KAAK,EAAE,EAAE;qBACV,CAAC;oBACD,oBAAW,CAAC;wBACX,EAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,wBAAU,EAAE,IAAI,EAAC,YAAY,EAAC;wBACrD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,wBAAU,EAAE,IAAI,EAAE,YAAY,EAAE;qBAC5D,CAAC,MAAM,CAAC,6BAAc,CAAC,CAAC;;4BAAA;gBAQzB,eAAC;YAAD,CAAC,AAND,IAMC;YAND,+BAMC,CAAA","sourcesContent":["import {Component} from 'angular2/core';\nimport {RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS} from 'angular2/router';\nimport {HTTP_PROVIDERS} from 'angular2/http';\nimport {CliRouteConfig} from './route-config';\n\nimport {AlbumsPage} from './albums-page/albums-page';\nimport {TracksPage} from './tracks-page/tracks-page';\n\n@Component({\n selector: 'music-app',\n providers: [ROUTER_PROVIDERS, HTTP_PROVIDERS],\n templateUrl: 'app/music.html',\n directives: [ROUTER_DIRECTIVES],\n pipes: []\n})\n@RouteConfig([\n {path: '/', component: AlbumsPage, name:'AlbumsPage'},\n { path: '/:id', component: TracksPage, name: 'TracksPage' },\n].concat(CliRouteConfig))\n\nexport class MusicApp {\n defaultMeaning: number = 42;\n\n meaningOfLife(meaning?: number) {\n return `The meaning of life is ${meaning || this.defaultMeaning}`;\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/app/route-config.js:
--------------------------------------------------------------------------------
1 | System.register([],function(exports_1,context_1){"use strict";var __moduleName=context_1&&context_1.id;var CliRouteConfig;return{setters:[],execute:function(){exports_1("CliRouteConfig",CliRouteConfig=[])}}});
--------------------------------------------------------------------------------
/dist/app/route-config.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"route-config.js","sourceRoot":"","sources":["route-config.ts"],"names":[],"mappings":"AACA,wBAAwB;AACxB,sCAAsC;;;;QAEzB,cAAc;;;;YAAd,4BAAA,cAAc,GAAG,EAE7B,CAAA,CAAC","sourcesContent":["\n// DO NOT EDIT THIS FILE\n// IT IS AUTO GENERATED BY ANGULAR-CLI\n\nexport const CliRouteConfig = [\n\n];"]}
--------------------------------------------------------------------------------
/dist/app/tracks-page/tracks-page.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngularMVD/ng-music/4df1004586501e3b9c6f43e26e332734e126c1b5/dist/app/tracks-page/tracks-page.css
--------------------------------------------------------------------------------
/dist/app/tracks-page/tracks-page.html:
--------------------------------------------------------------------------------
1 |
22 |
32 |
33 |
34 |
SONG
35 |
ARTIST
36 |
ALBUM
37 |
38 |
39 |
40 |
Blitzkrieg Bop
41 |
Ramones
42 |
Ramones
43 |
2:12
44 |
45 |
46 |
Beat on the Brat
47 |
Ramones
48 |
Ramones
49 |
2:30
50 |
51 |
52 |
Judy Is a Punk
53 |
Ramones
54 |
Ramones
55 |
1:30
56 |
57 |
58 |
I Wanna Be Your Boyfriend
59 |
Ramones
60 |
Ramones
61 |
2:24
62 |
63 |
64 |
Chain Saw
65 |
Ramones
66 |
Ramones
67 |
1:55
68 |
69 |
70 |
Now I Wanna Sniff Some Glue
71 |
Ramones
72 |
Ramones
73 |
1:34
74 |
75 |
76 |
I Don't Wanna Go Down to the Basement
77 |
Ramones
78 |
Ramones
79 |
2:35
80 |
81 |
82 |
Loudmouth
83 |
Ramones
84 |
Ramones
85 |
2:14
86 |
87 |
88 |
Havana Affair
89 |
Ramones
90 |
Ramones
91 |
2:00
92 |
93 |
94 |
Listen to My Heart
95 |
Ramones
96 |
Ramones
97 |
1:56
98 |
99 |
100 |
53rd & 3rd
101 |
Ramones
102 |
Ramones
103 |
2:19
104 |
105 |
106 |
Let's Dance
107 |
Ramones
108 |
Ramones
109 |
1:51
110 |
111 |
112 |
I Don't Wanna Walk Around with You
113 |
Ramones
114 |
Ramones
115 |
1:43
116 |
117 |
118 |
Today Your Love, Tomorrow the World
119 |
Ramones
120 |
Ramones
121 |
2:09
122 |
123 |
124 |
--------------------------------------------------------------------------------
/dist/app/tracks-page/tracks-page.js:
--------------------------------------------------------------------------------
1 | System.register(["angular2/core"],function(exports_1,context_1){"use strict";var __moduleName=context_1&&context_1.id;var __decorate=this&&this.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)if(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r;return c>3&&r&&Object.defineProperty(target,key,r),r};var __metadata=this&&this.__metadata||function(k,v){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(k,v)};var core_1;var TracksPage;return{setters:[function(core_1_1){core_1=core_1_1}],execute:function(){TracksPage=function(){function TracksPage(){}TracksPage=__decorate([core_1.Component({selector:"tracks-page",templateUrl:"app/tracks-page/tracks-page.html",styleUrls:["app/tracks-page/tracks-page.css"],providers:[],directives:[],pipes:[]}),__metadata("design:paramtypes",[])],TracksPage);return TracksPage}();exports_1("TracksPage",TracksPage)}}});
--------------------------------------------------------------------------------
/dist/app/tracks-page/tracks-page.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"tracks-page.js","sourceRoot":"","sources":["tracks-page.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;YAWA;gBAEE;gBAAe,CAAC;gBAVlB;oBAAC,gBAAS,CAAC;wBACT,QAAQ,EAAE,aAAa;wBACvB,WAAW,EAAE,kCAAkC;wBAC/C,SAAS,EAAE,CAAC,iCAAiC,CAAC;wBAC9C,SAAS,EAAE,EAAE;wBACb,UAAU,EAAE,EAAE;wBACd,KAAK,EAAE,EAAE;qBACV,CAAC;;8BAAA;gBAKF,iBAAC;YAAD,CAAC,AAJD,IAIC;YAJD,mCAIC,CAAA","sourcesContent":["import {Component} from 'angular2/core';\n\n\n@Component({\n selector: 'tracks-page',\n templateUrl: 'app/tracks-page/tracks-page.html',\n styleUrls: ['app/tracks-page/tracks-page.css'],\n providers: [],\n directives: [],\n pipes: []\n})\nexport class TracksPage {\n\n constructor() {}\n\n}\n"]}
--------------------------------------------------------------------------------
/dist/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngularMVD/ng-music/4df1004586501e3b9c6f43e26e332734e126c1b5/dist/favicon.ico
--------------------------------------------------------------------------------
/dist/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Music
6 |
7 |
8 |
9 |
10 |
11 |
12 |
23 |
24 |
25 | Loading...
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/dist/manifest.appcache:
--------------------------------------------------------------------------------
1 | CACHE MANIFEST
2 | # sw.bundle: ng-cli
3 | # sw.version: 074e707b124cebcd41a34eb25552fbf4fd84b53a
4 | # sw.file.hash: a1dc8eb862c9fd5890c6fff9f58134aa5740b91c
5 | /app.js
6 | # sw.file.hash: 217805be65f12bcf50de7c3bd1b67ac1a5c1e5b8
7 | /app.js.map
8 | # sw.file.hash: da39a3ee5e6b4b0d3255bfef95601890afd80709
9 | /app/album-cover/album-cover.css
10 | # sw.file.hash: fd951a872fc72a31d6f4d13bb3f573232da6c230
11 | /app/album-cover/album-cover.html
12 | # sw.file.hash: 985433d83caac58785fcb401b079cc4c2a0bd4b2
13 | /app/album-cover/album-cover.js
14 | # sw.file.hash: 8c2fc72a67afc5ee36862b3637ede8939000d431
15 | /app/album-cover/album-cover.js.map
16 | # sw.file.hash: da39a3ee5e6b4b0d3255bfef95601890afd80709
17 | /app/albums-page/albums-page.css
18 | # sw.file.hash: 7705e4b730120897e0192ae5085db9fe6647de8d
19 | /app/albums-page/albums-page.html
20 | # sw.file.hash: 240a48f4e552ff6757c383cae7b4a4742a4f963b
21 | /app/albums-page/albums-page.js
22 | # sw.file.hash: ad025367a1a5e17ffcdcd834cabfa1653899b82f
23 | /app/albums-page/albums-page.js.map
24 | # sw.file.hash: 6477db2c123cd039cd59dfd27798d2a7c6d2cce9
25 | /app/albums-service/albums-service.js
26 | # sw.file.hash: 0f46d1a4231daa7e27ae3cb750185226999d691c
27 | /app/albums-service/albums-service.js.map
28 | # sw.file.hash: 2f7eec5861a00535c73bec5b081db31495e45329
29 | /app/music.html
30 | # sw.file.hash: 6c3a75e5ba00bb9b33d5f9ec31062259c28d337a
31 | /app/music.js
32 | # sw.file.hash: 3317f4b04b6f7addcc51c81869a4dbecd0fc5e58
33 | /app/music.js.map
34 | # sw.file.hash: 25c384aaa3e15e652caf24fb11218e3692c9c799
35 | /app/route-config.js
36 | # sw.file.hash: a76ea96f1c0a6d7bfcf67d81abab01e6d6b41838
37 | /app/route-config.js.map
38 | # sw.file.hash: da39a3ee5e6b4b0d3255bfef95601890afd80709
39 | /app/tracks-page/tracks-page.css
40 | # sw.file.hash: e73b7fbe699e9ae0a2d9b7b63e1ec5b6b04b2130
41 | /app/tracks-page/tracks-page.html
42 | # sw.file.hash: 5c32591cc894720e0f8b8a45b294232e2de36fe7
43 | /app/tracks-page/tracks-page.js
44 | # sw.file.hash: ae639e0452dd5b6e6c732b430a0bc8b9bd6f099f
45 | /app/tracks-page/tracks-page.js.map
46 | # sw.file.hash: 84161b857f5c547e3699ddfbffc6d8d737542e01
47 | /favicon.ico
48 | # sw.file.hash: e6c3428e264e4d4d54ca37bc3ede67b8924fe9ee
49 | /index.html
50 | # sw.file.hash: e5e036b749a151842a579c1f964e7e57e9abd09d
51 | /tsconfig.json
52 | # sw.file.hash: be771bd0a4170c04abff753212def2a2376a408e
53 | /vendor/angular2/bundles/angular2-polyfills.js
54 | # sw.file.hash: bf6570ef9f7655ac76c11d3383716a9c182b7229
55 | /vendor/angular2/bundles/angular2.dev.js
56 | # sw.file.hash: e161d053cf096f7e43daa9aafc58026972429e6c
57 | /vendor/angular2/bundles/http.dev.js
58 | # sw.file.hash: 90796944735dcf41318c43d57b5753e9affb56be
59 | /vendor/angular2/bundles/router.dev.js
60 | # sw.file.hash: ea0d5118949013b3cacdeda5f73c250cab615804
61 | /vendor/angular2/bundles/upgrade.dev.js
62 | # sw.file.hash: 2adbdc3a7b6d85ac53b76b52234f28b16c88c7b2
63 | /vendor/es6-shim/es6-shim.js
64 | # sw.file.hash: 736fe8675af5630486329adf5efe12ec7be449b1
65 | /vendor/rxjs/bundles/Rx.js
66 | # sw.file.hash: 064ab212cfd9e125474ae3bbb600c366b31e79cb
67 | /vendor/systemjs/dist/system-polyfills.js
68 | # sw.file.hash: 83128f4a4209eb7b16ad0bb729fda6939bc450fc
69 | /vendor/systemjs/dist/system.src.js
70 |
--------------------------------------------------------------------------------
/dist/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "declaration": false,
5 | "emitDecoratorMetadata": true,
6 | "experimentalDecorators": true,
7 | "mapRoot": "",
8 | "module": "system",
9 | "moduleResolution": "node",
10 | "noEmitOnError": true,
11 | "noImplicitAny": false,
12 | "outDir": "../dist/",
13 | "rootDir": ".",
14 | "sourceMap": true,
15 | "target": "es5",
16 | "inlineSources": true
17 | },
18 |
19 | "files": [
20 | "app.ts",
21 | "typings.d.ts"
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/dist/vendor/angular2/bundles/http.dev.js:
--------------------------------------------------------------------------------
1 | "format register";
2 | System.register("angular2/src/http/interfaces", [], true, function(require, exports, module) {
3 | var global = System.global,
4 | __define = global.define;
5 | global.define = undefined;
6 | var ConnectionBackend = (function() {
7 | function ConnectionBackend() {}
8 | return ConnectionBackend;
9 | })();
10 | exports.ConnectionBackend = ConnectionBackend;
11 | var Connection = (function() {
12 | function Connection() {}
13 | return Connection;
14 | })();
15 | exports.Connection = Connection;
16 | global.define = __define;
17 | return module.exports;
18 | });
19 |
20 | System.register("angular2/src/http/headers", ["angular2/src/facade/lang", "angular2/src/facade/exceptions", "angular2/src/facade/collection"], true, function(require, exports, module) {
21 | var global = System.global,
22 | __define = global.define;
23 | global.define = undefined;
24 | var lang_1 = require("angular2/src/facade/lang");
25 | var exceptions_1 = require("angular2/src/facade/exceptions");
26 | var collection_1 = require("angular2/src/facade/collection");
27 | var Headers = (function() {
28 | function Headers(headers) {
29 | var _this = this;
30 | if (headers instanceof Headers) {
31 | this._headersMap = headers._headersMap;
32 | return ;
33 | }
34 | this._headersMap = new collection_1.Map();
35 | if (lang_1.isBlank(headers)) {
36 | return ;
37 | }
38 | collection_1.StringMapWrapper.forEach(headers, function(v, k) {
39 | _this._headersMap.set(k, collection_1.isListLikeIterable(v) ? v : [v]);
40 | });
41 | }
42 | Headers.fromResponseHeaderString = function(headersString) {
43 | return headersString.trim().split('\n').map(function(val) {
44 | return val.split(':');
45 | }).map(function(_a) {
46 | var key = _a[0],
47 | parts = _a.slice(1);
48 | return ([key.trim(), parts.join(':').trim()]);
49 | }).reduce(function(headers, _a) {
50 | var key = _a[0],
51 | value = _a[1];
52 | return !headers.set(key, value) && headers;
53 | }, new Headers());
54 | };
55 | Headers.prototype.append = function(name, value) {
56 | var mapName = this._headersMap.get(name);
57 | var list = collection_1.isListLikeIterable(mapName) ? mapName : [];
58 | list.push(value);
59 | this._headersMap.set(name, list);
60 | };
61 | Headers.prototype.delete = function(name) {
62 | this._headersMap.delete(name);
63 | };
64 | Headers.prototype.forEach = function(fn) {
65 | this._headersMap.forEach(fn);
66 | };
67 | Headers.prototype.get = function(header) {
68 | return collection_1.ListWrapper.first(this._headersMap.get(header));
69 | };
70 | Headers.prototype.has = function(header) {
71 | return this._headersMap.has(header);
72 | };
73 | Headers.prototype.keys = function() {
74 | return collection_1.MapWrapper.keys(this._headersMap);
75 | };
76 | Headers.prototype.set = function(header, value) {
77 | var list = [];
78 | if (collection_1.isListLikeIterable(value)) {
79 | var pushValue = value.join(',');
80 | list.push(pushValue);
81 | } else {
82 | list.push(value);
83 | }
84 | this._headersMap.set(header, list);
85 | };
86 | Headers.prototype.values = function() {
87 | return collection_1.MapWrapper.values(this._headersMap);
88 | };
89 | Headers.prototype.toJSON = function() {
90 | var serializableHeaders = {};
91 | this._headersMap.forEach(function(values, name) {
92 | var list = [];
93 | collection_1.iterateListLike(values, function(val) {
94 | return list = collection_1.ListWrapper.concat(list, val.split(','));
95 | });
96 | serializableHeaders[name] = list;
97 | });
98 | return serializableHeaders;
99 | };
100 | Headers.prototype.getAll = function(header) {
101 | var headers = this._headersMap.get(header);
102 | return collection_1.isListLikeIterable(headers) ? headers : [];
103 | };
104 | Headers.prototype.entries = function() {
105 | throw new exceptions_1.BaseException('"entries" method is not implemented on Headers class');
106 | };
107 | return Headers;
108 | })();
109 | exports.Headers = Headers;
110 | global.define = __define;
111 | return module.exports;
112 | });
113 |
114 | System.register("angular2/src/http/enums", [], true, function(require, exports, module) {
115 | var global = System.global,
116 | __define = global.define;
117 | global.define = undefined;
118 | (function(RequestMethod) {
119 | RequestMethod[RequestMethod["Get"] = 0] = "Get";
120 | RequestMethod[RequestMethod["Post"] = 1] = "Post";
121 | RequestMethod[RequestMethod["Put"] = 2] = "Put";
122 | RequestMethod[RequestMethod["Delete"] = 3] = "Delete";
123 | RequestMethod[RequestMethod["Options"] = 4] = "Options";
124 | RequestMethod[RequestMethod["Head"] = 5] = "Head";
125 | RequestMethod[RequestMethod["Patch"] = 6] = "Patch";
126 | })(exports.RequestMethod || (exports.RequestMethod = {}));
127 | var RequestMethod = exports.RequestMethod;
128 | (function(ReadyState) {
129 | ReadyState[ReadyState["Unsent"] = 0] = "Unsent";
130 | ReadyState[ReadyState["Open"] = 1] = "Open";
131 | ReadyState[ReadyState["HeadersReceived"] = 2] = "HeadersReceived";
132 | ReadyState[ReadyState["Loading"] = 3] = "Loading";
133 | ReadyState[ReadyState["Done"] = 4] = "Done";
134 | ReadyState[ReadyState["Cancelled"] = 5] = "Cancelled";
135 | })(exports.ReadyState || (exports.ReadyState = {}));
136 | var ReadyState = exports.ReadyState;
137 | (function(ResponseType) {
138 | ResponseType[ResponseType["Basic"] = 0] = "Basic";
139 | ResponseType[ResponseType["Cors"] = 1] = "Cors";
140 | ResponseType[ResponseType["Default"] = 2] = "Default";
141 | ResponseType[ResponseType["Error"] = 3] = "Error";
142 | ResponseType[ResponseType["Opaque"] = 4] = "Opaque";
143 | })(exports.ResponseType || (exports.ResponseType = {}));
144 | var ResponseType = exports.ResponseType;
145 | global.define = __define;
146 | return module.exports;
147 | });
148 |
149 | System.register("angular2/src/http/url_search_params", ["angular2/src/facade/lang", "angular2/src/facade/collection"], true, function(require, exports, module) {
150 | var global = System.global,
151 | __define = global.define;
152 | global.define = undefined;
153 | var lang_1 = require("angular2/src/facade/lang");
154 | var collection_1 = require("angular2/src/facade/collection");
155 | function paramParser(rawParams) {
156 | if (rawParams === void 0) {
157 | rawParams = '';
158 | }
159 | var map = new collection_1.Map();
160 | if (rawParams.length > 0) {
161 | var params = rawParams.split('&');
162 | params.forEach(function(param) {
163 | var split = param.split('=');
164 | var key = split[0];
165 | var val = split[1];
166 | var list = lang_1.isPresent(map.get(key)) ? map.get(key) : [];
167 | list.push(val);
168 | map.set(key, list);
169 | });
170 | }
171 | return map;
172 | }
173 | var URLSearchParams = (function() {
174 | function URLSearchParams(rawParams) {
175 | if (rawParams === void 0) {
176 | rawParams = '';
177 | }
178 | this.rawParams = rawParams;
179 | this.paramsMap = paramParser(rawParams);
180 | }
181 | URLSearchParams.prototype.clone = function() {
182 | var clone = new URLSearchParams();
183 | clone.appendAll(this);
184 | return clone;
185 | };
186 | URLSearchParams.prototype.has = function(param) {
187 | return this.paramsMap.has(param);
188 | };
189 | URLSearchParams.prototype.get = function(param) {
190 | var storedParam = this.paramsMap.get(param);
191 | if (collection_1.isListLikeIterable(storedParam)) {
192 | return collection_1.ListWrapper.first(storedParam);
193 | } else {
194 | return null;
195 | }
196 | };
197 | URLSearchParams.prototype.getAll = function(param) {
198 | var mapParam = this.paramsMap.get(param);
199 | return lang_1.isPresent(mapParam) ? mapParam : [];
200 | };
201 | URLSearchParams.prototype.set = function(param, val) {
202 | var mapParam = this.paramsMap.get(param);
203 | var list = lang_1.isPresent(mapParam) ? mapParam : [];
204 | collection_1.ListWrapper.clear(list);
205 | list.push(val);
206 | this.paramsMap.set(param, list);
207 | };
208 | URLSearchParams.prototype.setAll = function(searchParams) {
209 | var _this = this;
210 | searchParams.paramsMap.forEach(function(value, param) {
211 | var mapParam = _this.paramsMap.get(param);
212 | var list = lang_1.isPresent(mapParam) ? mapParam : [];
213 | collection_1.ListWrapper.clear(list);
214 | list.push(value[0]);
215 | _this.paramsMap.set(param, list);
216 | });
217 | };
218 | URLSearchParams.prototype.append = function(param, val) {
219 | var mapParam = this.paramsMap.get(param);
220 | var list = lang_1.isPresent(mapParam) ? mapParam : [];
221 | list.push(val);
222 | this.paramsMap.set(param, list);
223 | };
224 | URLSearchParams.prototype.appendAll = function(searchParams) {
225 | var _this = this;
226 | searchParams.paramsMap.forEach(function(value, param) {
227 | var mapParam = _this.paramsMap.get(param);
228 | var list = lang_1.isPresent(mapParam) ? mapParam : [];
229 | for (var i = 0; i < value.length; ++i) {
230 | list.push(value[i]);
231 | }
232 | _this.paramsMap.set(param, list);
233 | });
234 | };
235 | URLSearchParams.prototype.replaceAll = function(searchParams) {
236 | var _this = this;
237 | searchParams.paramsMap.forEach(function(value, param) {
238 | var mapParam = _this.paramsMap.get(param);
239 | var list = lang_1.isPresent(mapParam) ? mapParam : [];
240 | collection_1.ListWrapper.clear(list);
241 | for (var i = 0; i < value.length; ++i) {
242 | list.push(value[i]);
243 | }
244 | _this.paramsMap.set(param, list);
245 | });
246 | };
247 | URLSearchParams.prototype.toString = function() {
248 | var paramsList = [];
249 | this.paramsMap.forEach(function(values, k) {
250 | values.forEach(function(v) {
251 | return paramsList.push(k + '=' + v);
252 | });
253 | });
254 | return paramsList.join('&');
255 | };
256 | URLSearchParams.prototype.delete = function(param) {
257 | this.paramsMap.delete(param);
258 | };
259 | return URLSearchParams;
260 | })();
261 | exports.URLSearchParams = URLSearchParams;
262 | global.define = __define;
263 | return module.exports;
264 | });
265 |
266 | System.register("angular2/src/http/static_response", ["angular2/src/facade/lang", "angular2/src/facade/exceptions", "angular2/src/http/http_utils"], true, function(require, exports, module) {
267 | var global = System.global,
268 | __define = global.define;
269 | global.define = undefined;
270 | var lang_1 = require("angular2/src/facade/lang");
271 | var exceptions_1 = require("angular2/src/facade/exceptions");
272 | var http_utils_1 = require("angular2/src/http/http_utils");
273 | var Response = (function() {
274 | function Response(responseOptions) {
275 | this._body = responseOptions.body;
276 | this.status = responseOptions.status;
277 | this.statusText = responseOptions.statusText;
278 | this.headers = responseOptions.headers;
279 | this.type = responseOptions.type;
280 | this.url = responseOptions.url;
281 | }
282 | Response.prototype.blob = function() {
283 | throw new exceptions_1.BaseException('"blob()" method not implemented on Response superclass');
284 | };
285 | Response.prototype.json = function() {
286 | var jsonResponse;
287 | if (http_utils_1.isJsObject(this._body)) {
288 | jsonResponse = this._body;
289 | } else if (lang_1.isString(this._body)) {
290 | jsonResponse = lang_1.Json.parse(this._body);
291 | }
292 | return jsonResponse;
293 | };
294 | Response.prototype.text = function() {
295 | return this._body.toString();
296 | };
297 | Response.prototype.arrayBuffer = function() {
298 | throw new exceptions_1.BaseException('"arrayBuffer()" method not implemented on Response superclass');
299 | };
300 | return Response;
301 | })();
302 | exports.Response = Response;
303 | global.define = __define;
304 | return module.exports;
305 | });
306 |
307 | System.register("angular2/src/http/base_response_options", ["angular2/core", "angular2/src/facade/lang", "angular2/src/http/headers", "angular2/src/http/enums"], true, function(require, exports, module) {
308 | var global = System.global,
309 | __define = global.define;
310 | global.define = undefined;
311 | var __extends = (this && this.__extends) || function(d, b) {
312 | for (var p in b)
313 | if (b.hasOwnProperty(p))
314 | d[p] = b[p];
315 | function __() {
316 | this.constructor = d;
317 | }
318 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
319 | };
320 | var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
321 | var c = arguments.length,
322 | r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
323 | d;
324 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
325 | r = Reflect.decorate(decorators, target, key, desc);
326 | else
327 | for (var i = decorators.length - 1; i >= 0; i--)
328 | if (d = decorators[i])
329 | r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
330 | return c > 3 && r && Object.defineProperty(target, key, r), r;
331 | };
332 | var __metadata = (this && this.__metadata) || function(k, v) {
333 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
334 | return Reflect.metadata(k, v);
335 | };
336 | var core_1 = require("angular2/core");
337 | var lang_1 = require("angular2/src/facade/lang");
338 | var headers_1 = require("angular2/src/http/headers");
339 | var enums_1 = require("angular2/src/http/enums");
340 | var ResponseOptions = (function() {
341 | function ResponseOptions(_a) {
342 | var _b = _a === void 0 ? {} : _a,
343 | body = _b.body,
344 | status = _b.status,
345 | headers = _b.headers,
346 | statusText = _b.statusText,
347 | type = _b.type,
348 | url = _b.url;
349 | this.body = lang_1.isPresent(body) ? body : null;
350 | this.status = lang_1.isPresent(status) ? status : null;
351 | this.headers = lang_1.isPresent(headers) ? headers : null;
352 | this.statusText = lang_1.isPresent(statusText) ? statusText : null;
353 | this.type = lang_1.isPresent(type) ? type : null;
354 | this.url = lang_1.isPresent(url) ? url : null;
355 | }
356 | ResponseOptions.prototype.merge = function(options) {
357 | return new ResponseOptions({
358 | body: lang_1.isPresent(options) && lang_1.isPresent(options.body) ? options.body : this.body,
359 | status: lang_1.isPresent(options) && lang_1.isPresent(options.status) ? options.status : this.status,
360 | headers: lang_1.isPresent(options) && lang_1.isPresent(options.headers) ? options.headers : this.headers,
361 | statusText: lang_1.isPresent(options) && lang_1.isPresent(options.statusText) ? options.statusText : this.statusText,
362 | type: lang_1.isPresent(options) && lang_1.isPresent(options.type) ? options.type : this.type,
363 | url: lang_1.isPresent(options) && lang_1.isPresent(options.url) ? options.url : this.url
364 | });
365 | };
366 | return ResponseOptions;
367 | })();
368 | exports.ResponseOptions = ResponseOptions;
369 | var BaseResponseOptions = (function(_super) {
370 | __extends(BaseResponseOptions, _super);
371 | function BaseResponseOptions() {
372 | _super.call(this, {
373 | status: 200,
374 | statusText: 'Ok',
375 | type: enums_1.ResponseType.Default,
376 | headers: new headers_1.Headers()
377 | });
378 | }
379 | BaseResponseOptions = __decorate([core_1.Injectable(), __metadata('design:paramtypes', [])], BaseResponseOptions);
380 | return BaseResponseOptions;
381 | })(ResponseOptions);
382 | exports.BaseResponseOptions = BaseResponseOptions;
383 | global.define = __define;
384 | return module.exports;
385 | });
386 |
387 | System.register("angular2/src/http/backends/browser_xhr", ["angular2/core"], true, function(require, exports, module) {
388 | var global = System.global,
389 | __define = global.define;
390 | global.define = undefined;
391 | var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
392 | var c = arguments.length,
393 | r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
394 | d;
395 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
396 | r = Reflect.decorate(decorators, target, key, desc);
397 | else
398 | for (var i = decorators.length - 1; i >= 0; i--)
399 | if (d = decorators[i])
400 | r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
401 | return c > 3 && r && Object.defineProperty(target, key, r), r;
402 | };
403 | var __metadata = (this && this.__metadata) || function(k, v) {
404 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
405 | return Reflect.metadata(k, v);
406 | };
407 | var core_1 = require("angular2/core");
408 | var BrowserXhr = (function() {
409 | function BrowserXhr() {}
410 | BrowserXhr.prototype.build = function() {
411 | return (new XMLHttpRequest());
412 | };
413 | BrowserXhr = __decorate([core_1.Injectable(), __metadata('design:paramtypes', [])], BrowserXhr);
414 | return BrowserXhr;
415 | })();
416 | exports.BrowserXhr = BrowserXhr;
417 | global.define = __define;
418 | return module.exports;
419 | });
420 |
421 | System.register("angular2/src/http/backends/browser_jsonp", ["angular2/core", "angular2/src/facade/lang"], true, function(require, exports, module) {
422 | var global = System.global,
423 | __define = global.define;
424 | global.define = undefined;
425 | var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
426 | var c = arguments.length,
427 | r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
428 | d;
429 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
430 | r = Reflect.decorate(decorators, target, key, desc);
431 | else
432 | for (var i = decorators.length - 1; i >= 0; i--)
433 | if (d = decorators[i])
434 | r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
435 | return c > 3 && r && Object.defineProperty(target, key, r), r;
436 | };
437 | var __metadata = (this && this.__metadata) || function(k, v) {
438 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
439 | return Reflect.metadata(k, v);
440 | };
441 | var core_1 = require("angular2/core");
442 | var lang_1 = require("angular2/src/facade/lang");
443 | var _nextRequestId = 0;
444 | exports.JSONP_HOME = '__ng_jsonp__';
445 | var _jsonpConnections = null;
446 | function _getJsonpConnections() {
447 | if (_jsonpConnections === null) {
448 | _jsonpConnections = lang_1.global[exports.JSONP_HOME] = {};
449 | }
450 | return _jsonpConnections;
451 | }
452 | var BrowserJsonp = (function() {
453 | function BrowserJsonp() {}
454 | BrowserJsonp.prototype.build = function(url) {
455 | var node = document.createElement('script');
456 | node.src = url;
457 | return node;
458 | };
459 | BrowserJsonp.prototype.nextRequestID = function() {
460 | return "__req" + _nextRequestId++;
461 | };
462 | BrowserJsonp.prototype.requestCallback = function(id) {
463 | return exports.JSONP_HOME + "." + id + ".finished";
464 | };
465 | BrowserJsonp.prototype.exposeConnection = function(id, connection) {
466 | var connections = _getJsonpConnections();
467 | connections[id] = connection;
468 | };
469 | BrowserJsonp.prototype.removeConnection = function(id) {
470 | var connections = _getJsonpConnections();
471 | connections[id] = null;
472 | };
473 | BrowserJsonp.prototype.send = function(node) {
474 | document.body.appendChild((node));
475 | };
476 | BrowserJsonp.prototype.cleanup = function(node) {
477 | if (node.parentNode) {
478 | node.parentNode.removeChild((node));
479 | }
480 | };
481 | BrowserJsonp = __decorate([core_1.Injectable(), __metadata('design:paramtypes', [])], BrowserJsonp);
482 | return BrowserJsonp;
483 | })();
484 | exports.BrowserJsonp = BrowserJsonp;
485 | global.define = __define;
486 | return module.exports;
487 | });
488 |
489 | System.register("angular2/src/http/http_utils", ["angular2/src/facade/lang", "angular2/src/http/enums", "angular2/src/facade/exceptions", "angular2/src/facade/lang"], true, function(require, exports, module) {
490 | var global = System.global,
491 | __define = global.define;
492 | global.define = undefined;
493 | var lang_1 = require("angular2/src/facade/lang");
494 | var enums_1 = require("angular2/src/http/enums");
495 | var exceptions_1 = require("angular2/src/facade/exceptions");
496 | function normalizeMethodName(method) {
497 | if (lang_1.isString(method)) {
498 | var originalMethod = method;
499 | method = method.replace(/(\w)(\w*)/g, function(g0, g1, g2) {
500 | return g1.toUpperCase() + g2.toLowerCase();
501 | });
502 | method = enums_1.RequestMethod[method];
503 | if (typeof method !== 'number')
504 | throw exceptions_1.makeTypeError("Invalid request method. The method \"" + originalMethod + "\" is not supported.");
505 | }
506 | return method;
507 | }
508 | exports.normalizeMethodName = normalizeMethodName;
509 | exports.isSuccess = function(status) {
510 | return (status >= 200 && status < 300);
511 | };
512 | function getResponseURL(xhr) {
513 | if ('responseURL' in xhr) {
514 | return xhr.responseURL;
515 | }
516 | if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
517 | return xhr.getResponseHeader('X-Request-URL');
518 | }
519 | return ;
520 | }
521 | exports.getResponseURL = getResponseURL;
522 | var lang_2 = require("angular2/src/facade/lang");
523 | exports.isJsObject = lang_2.isJsObject;
524 | global.define = __define;
525 | return module.exports;
526 | });
527 |
528 | System.register("angular2/src/http/base_request_options", ["angular2/src/facade/lang", "angular2/src/http/headers", "angular2/src/http/enums", "angular2/core", "angular2/src/http/url_search_params", "angular2/src/http/http_utils"], true, function(require, exports, module) {
529 | var global = System.global,
530 | __define = global.define;
531 | global.define = undefined;
532 | var __extends = (this && this.__extends) || function(d, b) {
533 | for (var p in b)
534 | if (b.hasOwnProperty(p))
535 | d[p] = b[p];
536 | function __() {
537 | this.constructor = d;
538 | }
539 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
540 | };
541 | var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
542 | var c = arguments.length,
543 | r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
544 | d;
545 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
546 | r = Reflect.decorate(decorators, target, key, desc);
547 | else
548 | for (var i = decorators.length - 1; i >= 0; i--)
549 | if (d = decorators[i])
550 | r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
551 | return c > 3 && r && Object.defineProperty(target, key, r), r;
552 | };
553 | var __metadata = (this && this.__metadata) || function(k, v) {
554 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
555 | return Reflect.metadata(k, v);
556 | };
557 | var lang_1 = require("angular2/src/facade/lang");
558 | var headers_1 = require("angular2/src/http/headers");
559 | var enums_1 = require("angular2/src/http/enums");
560 | var core_1 = require("angular2/core");
561 | var url_search_params_1 = require("angular2/src/http/url_search_params");
562 | var http_utils_1 = require("angular2/src/http/http_utils");
563 | var RequestOptions = (function() {
564 | function RequestOptions(_a) {
565 | var _b = _a === void 0 ? {} : _a,
566 | method = _b.method,
567 | headers = _b.headers,
568 | body = _b.body,
569 | url = _b.url,
570 | search = _b.search;
571 | this.method = lang_1.isPresent(method) ? http_utils_1.normalizeMethodName(method) : null;
572 | this.headers = lang_1.isPresent(headers) ? headers : null;
573 | this.body = lang_1.isPresent(body) ? body : null;
574 | this.url = lang_1.isPresent(url) ? url : null;
575 | this.search = lang_1.isPresent(search) ? (lang_1.isString(search) ? new url_search_params_1.URLSearchParams((search)) : (search)) : null;
576 | }
577 | RequestOptions.prototype.merge = function(options) {
578 | return new RequestOptions({
579 | method: lang_1.isPresent(options) && lang_1.isPresent(options.method) ? options.method : this.method,
580 | headers: lang_1.isPresent(options) && lang_1.isPresent(options.headers) ? options.headers : this.headers,
581 | body: lang_1.isPresent(options) && lang_1.isPresent(options.body) ? options.body : this.body,
582 | url: lang_1.isPresent(options) && lang_1.isPresent(options.url) ? options.url : this.url,
583 | search: lang_1.isPresent(options) && lang_1.isPresent(options.search) ? (lang_1.isString(options.search) ? new url_search_params_1.URLSearchParams((options.search)) : (options.search).clone()) : this.search
584 | });
585 | };
586 | return RequestOptions;
587 | })();
588 | exports.RequestOptions = RequestOptions;
589 | var BaseRequestOptions = (function(_super) {
590 | __extends(BaseRequestOptions, _super);
591 | function BaseRequestOptions() {
592 | _super.call(this, {
593 | method: enums_1.RequestMethod.Get,
594 | headers: new headers_1.Headers()
595 | });
596 | }
597 | BaseRequestOptions = __decorate([core_1.Injectable(), __metadata('design:paramtypes', [])], BaseRequestOptions);
598 | return BaseRequestOptions;
599 | })(RequestOptions);
600 | exports.BaseRequestOptions = BaseRequestOptions;
601 | global.define = __define;
602 | return module.exports;
603 | });
604 |
605 | System.register("angular2/src/http/backends/xhr_backend", ["angular2/src/http/enums", "angular2/src/http/static_response", "angular2/src/http/headers", "angular2/src/http/base_response_options", "angular2/core", "angular2/src/http/backends/browser_xhr", "angular2/src/facade/lang", "rxjs/Observable", "angular2/src/http/http_utils"], true, function(require, exports, module) {
606 | var global = System.global,
607 | __define = global.define;
608 | global.define = undefined;
609 | var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
610 | var c = arguments.length,
611 | r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
612 | d;
613 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
614 | r = Reflect.decorate(decorators, target, key, desc);
615 | else
616 | for (var i = decorators.length - 1; i >= 0; i--)
617 | if (d = decorators[i])
618 | r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
619 | return c > 3 && r && Object.defineProperty(target, key, r), r;
620 | };
621 | var __metadata = (this && this.__metadata) || function(k, v) {
622 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
623 | return Reflect.metadata(k, v);
624 | };
625 | var enums_1 = require("angular2/src/http/enums");
626 | var static_response_1 = require("angular2/src/http/static_response");
627 | var headers_1 = require("angular2/src/http/headers");
628 | var base_response_options_1 = require("angular2/src/http/base_response_options");
629 | var core_1 = require("angular2/core");
630 | var browser_xhr_1 = require("angular2/src/http/backends/browser_xhr");
631 | var lang_1 = require("angular2/src/facade/lang");
632 | var Observable_1 = require("rxjs/Observable");
633 | var http_utils_1 = require("angular2/src/http/http_utils");
634 | var XHRConnection = (function() {
635 | function XHRConnection(req, browserXHR, baseResponseOptions) {
636 | var _this = this;
637 | this.request = req;
638 | this.response = new Observable_1.Observable(function(responseObserver) {
639 | var _xhr = browserXHR.build();
640 | _xhr.open(enums_1.RequestMethod[req.method].toUpperCase(), req.url);
641 | var onLoad = function() {
642 | var body = lang_1.isPresent(_xhr.response) ? _xhr.response : _xhr.responseText;
643 | var headers = headers_1.Headers.fromResponseHeaderString(_xhr.getAllResponseHeaders());
644 | var url = http_utils_1.getResponseURL(_xhr);
645 | var status = _xhr.status === 1223 ? 204 : _xhr.status;
646 | if (status === 0) {
647 | status = body ? 200 : 0;
648 | }
649 | var responseOptions = new base_response_options_1.ResponseOptions({
650 | body: body,
651 | status: status,
652 | headers: headers,
653 | url: url
654 | });
655 | if (lang_1.isPresent(baseResponseOptions)) {
656 | responseOptions = baseResponseOptions.merge(responseOptions);
657 | }
658 | var response = new static_response_1.Response(responseOptions);
659 | if (http_utils_1.isSuccess(status)) {
660 | responseObserver.next(response);
661 | responseObserver.complete();
662 | return ;
663 | }
664 | responseObserver.error(response);
665 | };
666 | var onError = function(err) {
667 | var responseOptions = new base_response_options_1.ResponseOptions({
668 | body: err,
669 | type: enums_1.ResponseType.Error
670 | });
671 | if (lang_1.isPresent(baseResponseOptions)) {
672 | responseOptions = baseResponseOptions.merge(responseOptions);
673 | }
674 | responseObserver.error(new static_response_1.Response(responseOptions));
675 | };
676 | if (lang_1.isPresent(req.headers)) {
677 | req.headers.forEach(function(values, name) {
678 | return _xhr.setRequestHeader(name, values.join(','));
679 | });
680 | }
681 | _xhr.addEventListener('load', onLoad);
682 | _xhr.addEventListener('error', onError);
683 | _xhr.send(_this.request.text());
684 | return function() {
685 | _xhr.removeEventListener('load', onLoad);
686 | _xhr.removeEventListener('error', onError);
687 | _xhr.abort();
688 | };
689 | });
690 | }
691 | return XHRConnection;
692 | })();
693 | exports.XHRConnection = XHRConnection;
694 | var XHRBackend = (function() {
695 | function XHRBackend(_browserXHR, _baseResponseOptions) {
696 | this._browserXHR = _browserXHR;
697 | this._baseResponseOptions = _baseResponseOptions;
698 | }
699 | XHRBackend.prototype.createConnection = function(request) {
700 | return new XHRConnection(request, this._browserXHR, this._baseResponseOptions);
701 | };
702 | XHRBackend = __decorate([core_1.Injectable(), __metadata('design:paramtypes', [browser_xhr_1.BrowserXhr, base_response_options_1.ResponseOptions])], XHRBackend);
703 | return XHRBackend;
704 | })();
705 | exports.XHRBackend = XHRBackend;
706 | global.define = __define;
707 | return module.exports;
708 | });
709 |
710 | System.register("angular2/src/http/backends/jsonp_backend", ["angular2/src/http/interfaces", "angular2/src/http/enums", "angular2/src/http/static_response", "angular2/src/http/base_response_options", "angular2/core", "angular2/src/http/backends/browser_jsonp", "angular2/src/facade/exceptions", "angular2/src/facade/lang", "rxjs/Observable"], true, function(require, exports, module) {
711 | var global = System.global,
712 | __define = global.define;
713 | global.define = undefined;
714 | var __extends = (this && this.__extends) || function(d, b) {
715 | for (var p in b)
716 | if (b.hasOwnProperty(p))
717 | d[p] = b[p];
718 | function __() {
719 | this.constructor = d;
720 | }
721 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
722 | };
723 | var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
724 | var c = arguments.length,
725 | r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
726 | d;
727 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
728 | r = Reflect.decorate(decorators, target, key, desc);
729 | else
730 | for (var i = decorators.length - 1; i >= 0; i--)
731 | if (d = decorators[i])
732 | r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
733 | return c > 3 && r && Object.defineProperty(target, key, r), r;
734 | };
735 | var __metadata = (this && this.__metadata) || function(k, v) {
736 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
737 | return Reflect.metadata(k, v);
738 | };
739 | var interfaces_1 = require("angular2/src/http/interfaces");
740 | var enums_1 = require("angular2/src/http/enums");
741 | var static_response_1 = require("angular2/src/http/static_response");
742 | var base_response_options_1 = require("angular2/src/http/base_response_options");
743 | var core_1 = require("angular2/core");
744 | var browser_jsonp_1 = require("angular2/src/http/backends/browser_jsonp");
745 | var exceptions_1 = require("angular2/src/facade/exceptions");
746 | var lang_1 = require("angular2/src/facade/lang");
747 | var Observable_1 = require("rxjs/Observable");
748 | var JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';
749 | var JSONP_ERR_WRONG_METHOD = 'JSONP requests must use GET request method.';
750 | var JSONPConnection = (function() {
751 | function JSONPConnection() {}
752 | return JSONPConnection;
753 | })();
754 | exports.JSONPConnection = JSONPConnection;
755 | var JSONPConnection_ = (function(_super) {
756 | __extends(JSONPConnection_, _super);
757 | function JSONPConnection_(req, _dom, baseResponseOptions) {
758 | var _this = this;
759 | _super.call(this);
760 | this._dom = _dom;
761 | this.baseResponseOptions = baseResponseOptions;
762 | this._finished = false;
763 | if (req.method !== enums_1.RequestMethod.Get) {
764 | throw exceptions_1.makeTypeError(JSONP_ERR_WRONG_METHOD);
765 | }
766 | this.request = req;
767 | this.response = new Observable_1.Observable(function(responseObserver) {
768 | _this.readyState = enums_1.ReadyState.Loading;
769 | var id = _this._id = _dom.nextRequestID();
770 | _dom.exposeConnection(id, _this);
771 | var callback = _dom.requestCallback(_this._id);
772 | var url = req.url;
773 | if (url.indexOf('=JSONP_CALLBACK&') > -1) {
774 | url = lang_1.StringWrapper.replace(url, '=JSONP_CALLBACK&', "=" + callback + "&");
775 | } else if (url.lastIndexOf('=JSONP_CALLBACK') === url.length - '=JSONP_CALLBACK'.length) {
776 | url = url.substring(0, url.length - '=JSONP_CALLBACK'.length) + ("=" + callback);
777 | }
778 | var script = _this._script = _dom.build(url);
779 | var onLoad = function(event) {
780 | if (_this.readyState === enums_1.ReadyState.Cancelled)
781 | return ;
782 | _this.readyState = enums_1.ReadyState.Done;
783 | _dom.cleanup(script);
784 | if (!_this._finished) {
785 | var responseOptions_1 = new base_response_options_1.ResponseOptions({
786 | body: JSONP_ERR_NO_CALLBACK,
787 | type: enums_1.ResponseType.Error,
788 | url: url
789 | });
790 | if (lang_1.isPresent(baseResponseOptions)) {
791 | responseOptions_1 = baseResponseOptions.merge(responseOptions_1);
792 | }
793 | responseObserver.error(new static_response_1.Response(responseOptions_1));
794 | return ;
795 | }
796 | var responseOptions = new base_response_options_1.ResponseOptions({
797 | body: _this._responseData,
798 | url: url
799 | });
800 | if (lang_1.isPresent(_this.baseResponseOptions)) {
801 | responseOptions = _this.baseResponseOptions.merge(responseOptions);
802 | }
803 | responseObserver.next(new static_response_1.Response(responseOptions));
804 | responseObserver.complete();
805 | };
806 | var onError = function(error) {
807 | if (_this.readyState === enums_1.ReadyState.Cancelled)
808 | return ;
809 | _this.readyState = enums_1.ReadyState.Done;
810 | _dom.cleanup(script);
811 | var responseOptions = new base_response_options_1.ResponseOptions({
812 | body: error.message,
813 | type: enums_1.ResponseType.Error
814 | });
815 | if (lang_1.isPresent(baseResponseOptions)) {
816 | responseOptions = baseResponseOptions.merge(responseOptions);
817 | }
818 | responseObserver.error(new static_response_1.Response(responseOptions));
819 | };
820 | script.addEventListener('load', onLoad);
821 | script.addEventListener('error', onError);
822 | _dom.send(script);
823 | return function() {
824 | _this.readyState = enums_1.ReadyState.Cancelled;
825 | script.removeEventListener('load', onLoad);
826 | script.removeEventListener('error', onError);
827 | if (lang_1.isPresent(script)) {
828 | _this._dom.cleanup(script);
829 | }
830 | };
831 | });
832 | }
833 | JSONPConnection_.prototype.finished = function(data) {
834 | this._finished = true;
835 | this._dom.removeConnection(this._id);
836 | if (this.readyState === enums_1.ReadyState.Cancelled)
837 | return ;
838 | this._responseData = data;
839 | };
840 | return JSONPConnection_;
841 | })(JSONPConnection);
842 | exports.JSONPConnection_ = JSONPConnection_;
843 | var JSONPBackend = (function(_super) {
844 | __extends(JSONPBackend, _super);
845 | function JSONPBackend() {
846 | _super.apply(this, arguments);
847 | }
848 | return JSONPBackend;
849 | })(interfaces_1.ConnectionBackend);
850 | exports.JSONPBackend = JSONPBackend;
851 | var JSONPBackend_ = (function(_super) {
852 | __extends(JSONPBackend_, _super);
853 | function JSONPBackend_(_browserJSONP, _baseResponseOptions) {
854 | _super.call(this);
855 | this._browserJSONP = _browserJSONP;
856 | this._baseResponseOptions = _baseResponseOptions;
857 | }
858 | JSONPBackend_.prototype.createConnection = function(request) {
859 | return new JSONPConnection_(request, this._browserJSONP, this._baseResponseOptions);
860 | };
861 | JSONPBackend_ = __decorate([core_1.Injectable(), __metadata('design:paramtypes', [browser_jsonp_1.BrowserJsonp, base_response_options_1.ResponseOptions])], JSONPBackend_);
862 | return JSONPBackend_;
863 | })(JSONPBackend);
864 | exports.JSONPBackend_ = JSONPBackend_;
865 | global.define = __define;
866 | return module.exports;
867 | });
868 |
869 | System.register("angular2/src/http/static_request", ["angular2/src/http/headers", "angular2/src/http/http_utils", "angular2/src/facade/lang"], true, function(require, exports, module) {
870 | var global = System.global,
871 | __define = global.define;
872 | global.define = undefined;
873 | var headers_1 = require("angular2/src/http/headers");
874 | var http_utils_1 = require("angular2/src/http/http_utils");
875 | var lang_1 = require("angular2/src/facade/lang");
876 | var Request = (function() {
877 | function Request(requestOptions) {
878 | var url = requestOptions.url;
879 | this.url = requestOptions.url;
880 | if (lang_1.isPresent(requestOptions.search)) {
881 | var search = requestOptions.search.toString();
882 | if (search.length > 0) {
883 | var prefix = '?';
884 | if (lang_1.StringWrapper.contains(this.url, '?')) {
885 | prefix = (this.url[this.url.length - 1] == '&') ? '' : '&';
886 | }
887 | this.url = url + prefix + search;
888 | }
889 | }
890 | this._body = requestOptions.body;
891 | this.method = http_utils_1.normalizeMethodName(requestOptions.method);
892 | this.headers = new headers_1.Headers(requestOptions.headers);
893 | }
894 | Request.prototype.text = function() {
895 | return lang_1.isPresent(this._body) ? this._body.toString() : '';
896 | };
897 | return Request;
898 | })();
899 | exports.Request = Request;
900 | global.define = __define;
901 | return module.exports;
902 | });
903 |
904 | System.register("angular2/src/http/http", ["angular2/src/facade/lang", "angular2/src/facade/exceptions", "angular2/core", "angular2/src/http/interfaces", "angular2/src/http/static_request", "angular2/src/http/base_request_options", "angular2/src/http/enums"], true, function(require, exports, module) {
905 | var global = System.global,
906 | __define = global.define;
907 | global.define = undefined;
908 | var __extends = (this && this.__extends) || function(d, b) {
909 | for (var p in b)
910 | if (b.hasOwnProperty(p))
911 | d[p] = b[p];
912 | function __() {
913 | this.constructor = d;
914 | }
915 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
916 | };
917 | var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
918 | var c = arguments.length,
919 | r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
920 | d;
921 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
922 | r = Reflect.decorate(decorators, target, key, desc);
923 | else
924 | for (var i = decorators.length - 1; i >= 0; i--)
925 | if (d = decorators[i])
926 | r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
927 | return c > 3 && r && Object.defineProperty(target, key, r), r;
928 | };
929 | var __metadata = (this && this.__metadata) || function(k, v) {
930 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
931 | return Reflect.metadata(k, v);
932 | };
933 | var lang_1 = require("angular2/src/facade/lang");
934 | var exceptions_1 = require("angular2/src/facade/exceptions");
935 | var core_1 = require("angular2/core");
936 | var interfaces_1 = require("angular2/src/http/interfaces");
937 | var static_request_1 = require("angular2/src/http/static_request");
938 | var base_request_options_1 = require("angular2/src/http/base_request_options");
939 | var enums_1 = require("angular2/src/http/enums");
940 | function httpRequest(backend, request) {
941 | return backend.createConnection(request).response;
942 | }
943 | function mergeOptions(defaultOpts, providedOpts, method, url) {
944 | var newOptions = defaultOpts;
945 | if (lang_1.isPresent(providedOpts)) {
946 | return newOptions.merge(new base_request_options_1.RequestOptions({
947 | method: providedOpts.method || method,
948 | url: providedOpts.url || url,
949 | search: providedOpts.search,
950 | headers: providedOpts.headers,
951 | body: providedOpts.body
952 | }));
953 | }
954 | if (lang_1.isPresent(method)) {
955 | return newOptions.merge(new base_request_options_1.RequestOptions({
956 | method: method,
957 | url: url
958 | }));
959 | } else {
960 | return newOptions.merge(new base_request_options_1.RequestOptions({url: url}));
961 | }
962 | }
963 | var Http = (function() {
964 | function Http(_backend, _defaultOptions) {
965 | this._backend = _backend;
966 | this._defaultOptions = _defaultOptions;
967 | }
968 | Http.prototype.request = function(url, options) {
969 | var responseObservable;
970 | if (lang_1.isString(url)) {
971 | responseObservable = httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Get, url)));
972 | } else if (url instanceof static_request_1.Request) {
973 | responseObservable = httpRequest(this._backend, url);
974 | } else {
975 | throw exceptions_1.makeTypeError('First argument must be a url string or Request instance.');
976 | }
977 | return responseObservable;
978 | };
979 | Http.prototype.get = function(url, options) {
980 | return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Get, url)));
981 | };
982 | Http.prototype.post = function(url, body, options) {
983 | return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions.merge(new base_request_options_1.RequestOptions({body: body})), options, enums_1.RequestMethod.Post, url)));
984 | };
985 | Http.prototype.put = function(url, body, options) {
986 | return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions.merge(new base_request_options_1.RequestOptions({body: body})), options, enums_1.RequestMethod.Put, url)));
987 | };
988 | Http.prototype.delete = function(url, options) {
989 | return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Delete, url)));
990 | };
991 | Http.prototype.patch = function(url, body, options) {
992 | return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions.merge(new base_request_options_1.RequestOptions({body: body})), options, enums_1.RequestMethod.Patch, url)));
993 | };
994 | Http.prototype.head = function(url, options) {
995 | return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Head, url)));
996 | };
997 | Http = __decorate([core_1.Injectable(), __metadata('design:paramtypes', [interfaces_1.ConnectionBackend, base_request_options_1.RequestOptions])], Http);
998 | return Http;
999 | })();
1000 | exports.Http = Http;
1001 | var Jsonp = (function(_super) {
1002 | __extends(Jsonp, _super);
1003 | function Jsonp(backend, defaultOptions) {
1004 | _super.call(this, backend, defaultOptions);
1005 | }
1006 | Jsonp.prototype.request = function(url, options) {
1007 | var responseObservable;
1008 | if (lang_1.isString(url)) {
1009 | url = new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Get, url));
1010 | }
1011 | if (url instanceof static_request_1.Request) {
1012 | if (url.method !== enums_1.RequestMethod.Get) {
1013 | exceptions_1.makeTypeError('JSONP requests must use GET request method.');
1014 | }
1015 | responseObservable = httpRequest(this._backend, url);
1016 | } else {
1017 | throw exceptions_1.makeTypeError('First argument must be a url string or Request instance.');
1018 | }
1019 | return responseObservable;
1020 | };
1021 | Jsonp = __decorate([core_1.Injectable(), __metadata('design:paramtypes', [interfaces_1.ConnectionBackend, base_request_options_1.RequestOptions])], Jsonp);
1022 | return Jsonp;
1023 | })(Http);
1024 | exports.Jsonp = Jsonp;
1025 | global.define = __define;
1026 | return module.exports;
1027 | });
1028 |
1029 | System.register("angular2/http", ["angular2/core", "angular2/src/http/http", "angular2/src/http/backends/xhr_backend", "angular2/src/http/backends/jsonp_backend", "angular2/src/http/backends/browser_xhr", "angular2/src/http/backends/browser_jsonp", "angular2/src/http/base_request_options", "angular2/src/http/base_response_options", "angular2/src/http/static_request", "angular2/src/http/static_response", "angular2/src/http/interfaces", "angular2/src/http/backends/browser_xhr", "angular2/src/http/base_request_options", "angular2/src/http/base_response_options", "angular2/src/http/backends/xhr_backend", "angular2/src/http/backends/jsonp_backend", "angular2/src/http/http", "angular2/src/http/headers", "angular2/src/http/enums", "angular2/src/http/url_search_params"], true, function(require, exports, module) {
1030 | var global = System.global,
1031 | __define = global.define;
1032 | global.define = undefined;
1033 | var core_1 = require("angular2/core");
1034 | var http_1 = require("angular2/src/http/http");
1035 | var xhr_backend_1 = require("angular2/src/http/backends/xhr_backend");
1036 | var jsonp_backend_1 = require("angular2/src/http/backends/jsonp_backend");
1037 | var browser_xhr_1 = require("angular2/src/http/backends/browser_xhr");
1038 | var browser_jsonp_1 = require("angular2/src/http/backends/browser_jsonp");
1039 | var base_request_options_1 = require("angular2/src/http/base_request_options");
1040 | var base_response_options_1 = require("angular2/src/http/base_response_options");
1041 | var static_request_1 = require("angular2/src/http/static_request");
1042 | exports.Request = static_request_1.Request;
1043 | var static_response_1 = require("angular2/src/http/static_response");
1044 | exports.Response = static_response_1.Response;
1045 | var interfaces_1 = require("angular2/src/http/interfaces");
1046 | exports.Connection = interfaces_1.Connection;
1047 | exports.ConnectionBackend = interfaces_1.ConnectionBackend;
1048 | var browser_xhr_2 = require("angular2/src/http/backends/browser_xhr");
1049 | exports.BrowserXhr = browser_xhr_2.BrowserXhr;
1050 | var base_request_options_2 = require("angular2/src/http/base_request_options");
1051 | exports.BaseRequestOptions = base_request_options_2.BaseRequestOptions;
1052 | exports.RequestOptions = base_request_options_2.RequestOptions;
1053 | var base_response_options_2 = require("angular2/src/http/base_response_options");
1054 | exports.BaseResponseOptions = base_response_options_2.BaseResponseOptions;
1055 | exports.ResponseOptions = base_response_options_2.ResponseOptions;
1056 | var xhr_backend_2 = require("angular2/src/http/backends/xhr_backend");
1057 | exports.XHRBackend = xhr_backend_2.XHRBackend;
1058 | exports.XHRConnection = xhr_backend_2.XHRConnection;
1059 | var jsonp_backend_2 = require("angular2/src/http/backends/jsonp_backend");
1060 | exports.JSONPBackend = jsonp_backend_2.JSONPBackend;
1061 | exports.JSONPConnection = jsonp_backend_2.JSONPConnection;
1062 | var http_2 = require("angular2/src/http/http");
1063 | exports.Http = http_2.Http;
1064 | exports.Jsonp = http_2.Jsonp;
1065 | var headers_1 = require("angular2/src/http/headers");
1066 | exports.Headers = headers_1.Headers;
1067 | var enums_1 = require("angular2/src/http/enums");
1068 | exports.ResponseType = enums_1.ResponseType;
1069 | exports.ReadyState = enums_1.ReadyState;
1070 | exports.RequestMethod = enums_1.RequestMethod;
1071 | var url_search_params_1 = require("angular2/src/http/url_search_params");
1072 | exports.URLSearchParams = url_search_params_1.URLSearchParams;
1073 | exports.HTTP_PROVIDERS = [core_1.provide(http_1.Http, {
1074 | useFactory: function(xhrBackend, requestOptions) {
1075 | return new http_1.Http(xhrBackend, requestOptions);
1076 | },
1077 | deps: [xhr_backend_1.XHRBackend, base_request_options_1.RequestOptions]
1078 | }), browser_xhr_1.BrowserXhr, core_1.provide(base_request_options_1.RequestOptions, {useClass: base_request_options_1.BaseRequestOptions}), core_1.provide(base_response_options_1.ResponseOptions, {useClass: base_response_options_1.BaseResponseOptions}), xhr_backend_1.XHRBackend];
1079 | exports.HTTP_BINDINGS = exports.HTTP_PROVIDERS;
1080 | exports.JSONP_PROVIDERS = [core_1.provide(http_1.Jsonp, {
1081 | useFactory: function(jsonpBackend, requestOptions) {
1082 | return new http_1.Jsonp(jsonpBackend, requestOptions);
1083 | },
1084 | deps: [jsonp_backend_1.JSONPBackend, base_request_options_1.RequestOptions]
1085 | }), browser_jsonp_1.BrowserJsonp, core_1.provide(base_request_options_1.RequestOptions, {useClass: base_request_options_1.BaseRequestOptions}), core_1.provide(base_response_options_1.ResponseOptions, {useClass: base_response_options_1.BaseResponseOptions}), core_1.provide(jsonp_backend_1.JSONPBackend, {useClass: jsonp_backend_1.JSONPBackend_})];
1086 | exports.JSON_BINDINGS = exports.JSONP_PROVIDERS;
1087 | global.define = __define;
1088 | return module.exports;
1089 | });
1090 |
1091 | //# sourceMappingURLDisabled=http.dev.js.map
--------------------------------------------------------------------------------
/dist/vendor/angular2/bundles/upgrade.dev.js:
--------------------------------------------------------------------------------
1 | "format register";
2 | System.register("angular2/src/upgrade/metadata", ["angular2/core"], true, function(require, exports, module) {
3 | var global = System.global,
4 | __define = global.define;
5 | global.define = undefined;
6 | var core_1 = require("angular2/core");
7 | var COMPONENT_SELECTOR = /^[\w|-]*$/;
8 | var SKEWER_CASE = /-(\w)/g;
9 | var directiveResolver = new core_1.DirectiveResolver();
10 | function getComponentInfo(type) {
11 | var resolvedMetadata = directiveResolver.resolve(type);
12 | var selector = resolvedMetadata.selector;
13 | if (!selector.match(COMPONENT_SELECTOR)) {
14 | throw new Error('Only selectors matching element names are supported, got: ' + selector);
15 | }
16 | var selector = selector.replace(SKEWER_CASE, function(all, letter) {
17 | return letter.toUpperCase();
18 | });
19 | return {
20 | type: type,
21 | selector: selector,
22 | inputs: parseFields(resolvedMetadata.inputs),
23 | outputs: parseFields(resolvedMetadata.outputs)
24 | };
25 | }
26 | exports.getComponentInfo = getComponentInfo;
27 | function parseFields(names) {
28 | var attrProps = [];
29 | if (names) {
30 | for (var i = 0; i < names.length; i++) {
31 | var parts = names[i].split(':');
32 | var prop = parts[0].trim();
33 | var attr = (parts[1] || parts[0]).trim();
34 | var capitalAttr = attr.charAt(0).toUpperCase() + attr.substr(1);
35 | attrProps.push({
36 | prop: prop,
37 | attr: attr,
38 | bracketAttr: "[" + attr + "]",
39 | parenAttr: "(" + attr + ")",
40 | bracketParenAttr: "[(" + attr + ")]",
41 | onAttr: "on" + capitalAttr,
42 | bindAttr: "bind" + capitalAttr,
43 | bindonAttr: "bindon" + capitalAttr
44 | });
45 | }
46 | }
47 | return attrProps;
48 | }
49 | exports.parseFields = parseFields;
50 | global.define = __define;
51 | return module.exports;
52 | });
53 |
54 | System.register("angular2/src/upgrade/util", [], true, function(require, exports, module) {
55 | var global = System.global,
56 | __define = global.define;
57 | global.define = undefined;
58 | function stringify(obj) {
59 | if (typeof obj == 'function')
60 | return obj.name || obj.toString();
61 | return '' + obj;
62 | }
63 | exports.stringify = stringify;
64 | function onError(e) {
65 | console.log(e, e.stack);
66 | throw e;
67 | }
68 | exports.onError = onError;
69 | function controllerKey(name) {
70 | return '$' + name + 'Controller';
71 | }
72 | exports.controllerKey = controllerKey;
73 | global.define = __define;
74 | return module.exports;
75 | });
76 |
77 | System.register("angular2/src/upgrade/constants", [], true, function(require, exports, module) {
78 | var global = System.global,
79 | __define = global.define;
80 | global.define = undefined;
81 | exports.NG2_APP_VIEW_MANAGER = 'ng2.AppViewManager';
82 | exports.NG2_COMPILER = 'ng2.Compiler';
83 | exports.NG2_INJECTOR = 'ng2.Injector';
84 | exports.NG2_HOST_VIEW_FACTORY_REF_MAP = 'ng2.HostViewFactoryRefMap';
85 | exports.NG2_ZONE = 'ng2.NgZone';
86 | exports.NG1_CONTROLLER = '$controller';
87 | exports.NG1_SCOPE = '$scope';
88 | exports.NG1_ROOT_SCOPE = '$rootScope';
89 | exports.NG1_COMPILE = '$compile';
90 | exports.NG1_HTTP_BACKEND = '$httpBackend';
91 | exports.NG1_INJECTOR = '$injector';
92 | exports.NG1_PARSE = '$parse';
93 | exports.NG1_TEMPLATE_CACHE = '$templateCache';
94 | exports.NG1_TESTABILITY = '$$testability';
95 | exports.REQUIRE_INJECTOR = '^' + exports.NG2_INJECTOR;
96 | global.define = __define;
97 | return module.exports;
98 | });
99 |
100 | System.register("angular2/src/upgrade/downgrade_ng2_adapter", ["angular2/core", "angular2/src/upgrade/constants"], true, function(require, exports, module) {
101 | var global = System.global,
102 | __define = global.define;
103 | global.define = undefined;
104 | var core_1 = require("angular2/core");
105 | var constants_1 = require("angular2/src/upgrade/constants");
106 | var INITIAL_VALUE = {__UNINITIALIZED__: true};
107 | var DowngradeNg2ComponentAdapter = (function() {
108 | function DowngradeNg2ComponentAdapter(id, info, element, attrs, scope, parentInjector, parse, viewManager, hostViewFactory) {
109 | this.id = id;
110 | this.info = info;
111 | this.element = element;
112 | this.attrs = attrs;
113 | this.scope = scope;
114 | this.parentInjector = parentInjector;
115 | this.parse = parse;
116 | this.viewManager = viewManager;
117 | this.hostViewFactory = hostViewFactory;
118 | this.component = null;
119 | this.inputChangeCount = 0;
120 | this.inputChanges = null;
121 | this.hostViewRef = null;
122 | this.changeDetector = null;
123 | this.contentInsertionPoint = null;
124 | this.element[0].id = id;
125 | this.componentScope = scope.$new();
126 | this.childNodes = element.contents();
127 | }
128 | DowngradeNg2ComponentAdapter.prototype.bootstrapNg2 = function() {
129 | var childInjector = this.parentInjector.resolveAndCreateChild([core_1.provide(constants_1.NG1_SCOPE, {useValue: this.componentScope})]);
130 | this.contentInsertionPoint = document.createComment('ng1 insertion point');
131 | this.hostViewRef = this.viewManager.createRootHostView(this.hostViewFactory, '#' + this.id, childInjector, [[this.contentInsertionPoint]]);
132 | var hostElement = this.viewManager.getHostElement(this.hostViewRef);
133 | this.changeDetector = this.hostViewRef.changeDetectorRef;
134 | this.component = this.viewManager.getComponent(hostElement);
135 | };
136 | DowngradeNg2ComponentAdapter.prototype.setupInputs = function() {
137 | var _this = this;
138 | var attrs = this.attrs;
139 | var inputs = this.info.inputs;
140 | for (var i = 0; i < inputs.length; i++) {
141 | var input = inputs[i];
142 | var expr = null;
143 | if (attrs.hasOwnProperty(input.attr)) {
144 | var observeFn = (function(prop) {
145 | var prevValue = INITIAL_VALUE;
146 | return function(value) {
147 | if (_this.inputChanges !== null) {
148 | _this.inputChangeCount++;
149 | _this.inputChanges[prop] = new Ng1Change(value, prevValue === INITIAL_VALUE ? value : prevValue);
150 | prevValue = value;
151 | }
152 | _this.component[prop] = value;
153 | };
154 | })(input.prop);
155 | attrs.$observe(input.attr, observeFn);
156 | } else if (attrs.hasOwnProperty(input.bindAttr)) {
157 | expr = attrs[input.bindAttr];
158 | } else if (attrs.hasOwnProperty(input.bracketAttr)) {
159 | expr = attrs[input.bracketAttr];
160 | } else if (attrs.hasOwnProperty(input.bindonAttr)) {
161 | expr = attrs[input.bindonAttr];
162 | } else if (attrs.hasOwnProperty(input.bracketParenAttr)) {
163 | expr = attrs[input.bracketParenAttr];
164 | }
165 | if (expr != null) {
166 | var watchFn = (function(prop) {
167 | return function(value, prevValue) {
168 | if (_this.inputChanges != null) {
169 | _this.inputChangeCount++;
170 | _this.inputChanges[prop] = new Ng1Change(prevValue, value);
171 | }
172 | _this.component[prop] = value;
173 | };
174 | })(input.prop);
175 | this.componentScope.$watch(expr, watchFn);
176 | }
177 | }
178 | var prototype = this.info.type.prototype;
179 | if (prototype && prototype.ngOnChanges) {
180 | this.inputChanges = {};
181 | this.componentScope.$watch(function() {
182 | return _this.inputChangeCount;
183 | }, function() {
184 | var inputChanges = _this.inputChanges;
185 | _this.inputChanges = {};
186 | _this.component.ngOnChanges(inputChanges);
187 | });
188 | }
189 | this.componentScope.$watch(function() {
190 | return _this.changeDetector && _this.changeDetector.detectChanges();
191 | });
192 | };
193 | DowngradeNg2ComponentAdapter.prototype.projectContent = function() {
194 | var childNodes = this.childNodes;
195 | var parent = this.contentInsertionPoint.parentNode;
196 | if (parent) {
197 | for (var i = 0,
198 | ii = childNodes.length; i < ii; i++) {
199 | parent.insertBefore(childNodes[i], this.contentInsertionPoint);
200 | }
201 | }
202 | };
203 | DowngradeNg2ComponentAdapter.prototype.setupOutputs = function() {
204 | var _this = this;
205 | var attrs = this.attrs;
206 | var outputs = this.info.outputs;
207 | for (var j = 0; j < outputs.length; j++) {
208 | var output = outputs[j];
209 | var expr = null;
210 | var assignExpr = false;
211 | var bindonAttr = output.bindonAttr ? output.bindonAttr.substring(0, output.bindonAttr.length - 6) : null;
212 | var bracketParenAttr = output.bracketParenAttr ? "[(" + output.bracketParenAttr.substring(2, output.bracketParenAttr.length - 8) + ")]" : null;
213 | if (attrs.hasOwnProperty(output.onAttr)) {
214 | expr = attrs[output.onAttr];
215 | } else if (attrs.hasOwnProperty(output.parenAttr)) {
216 | expr = attrs[output.parenAttr];
217 | } else if (attrs.hasOwnProperty(bindonAttr)) {
218 | expr = attrs[bindonAttr];
219 | assignExpr = true;
220 | } else if (attrs.hasOwnProperty(bracketParenAttr)) {
221 | expr = attrs[bracketParenAttr];
222 | assignExpr = true;
223 | }
224 | if (expr != null && assignExpr != null) {
225 | var getter = this.parse(expr);
226 | var setter = getter.assign;
227 | if (assignExpr && !setter) {
228 | throw new Error("Expression '" + expr + "' is not assignable!");
229 | }
230 | var emitter = this.component[output.prop];
231 | if (emitter) {
232 | emitter.subscribe({next: assignExpr ? (function(setter) {
233 | return function(value) {
234 | return setter(_this.scope, value);
235 | };
236 | })(setter) : (function(getter) {
237 | return function(value) {
238 | return getter(_this.scope, {$event: value});
239 | };
240 | })(getter)});
241 | } else {
242 | throw new Error("Missing emitter '" + output.prop + "' on component '" + this.info.selector + "'!");
243 | }
244 | }
245 | }
246 | };
247 | DowngradeNg2ComponentAdapter.prototype.registerCleanup = function() {
248 | var _this = this;
249 | this.element.bind('$remove', function() {
250 | return _this.viewManager.destroyRootHostView(_this.hostViewRef);
251 | });
252 | };
253 | return DowngradeNg2ComponentAdapter;
254 | })();
255 | exports.DowngradeNg2ComponentAdapter = DowngradeNg2ComponentAdapter;
256 | var Ng1Change = (function() {
257 | function Ng1Change(previousValue, currentValue) {
258 | this.previousValue = previousValue;
259 | this.currentValue = currentValue;
260 | }
261 | Ng1Change.prototype.isFirstChange = function() {
262 | return this.previousValue === this.currentValue;
263 | };
264 | return Ng1Change;
265 | })();
266 | global.define = __define;
267 | return module.exports;
268 | });
269 |
270 | System.register("angular2/src/upgrade/angular_js", [], true, function(require, exports, module) {
271 | var global = System.global,
272 | __define = global.define;
273 | global.define = undefined;
274 | function noNg() {
275 | throw new Error('AngularJS v1.x is not loaded!');
276 | }
277 | var angular = {
278 | bootstrap: noNg,
279 | module: noNg,
280 | element: noNg,
281 | version: noNg,
282 | resumeBootstrap: noNg,
283 | getTestability: noNg
284 | };
285 | try {
286 | if (window.hasOwnProperty('angular')) {
287 | angular = window.angular;
288 | }
289 | } catch (e) {}
290 | exports.bootstrap = angular.bootstrap;
291 | exports.module = angular.module;
292 | exports.element = angular.element;
293 | exports.version = angular.version;
294 | exports.resumeBootstrap = angular.resumeBootstrap;
295 | exports.getTestability = angular.getTestability;
296 | global.define = __define;
297 | return module.exports;
298 | });
299 |
300 | System.register("angular2/src/upgrade/upgrade_ng1_adapter", ["angular2/core", "angular2/src/upgrade/constants", "angular2/src/upgrade/util", "angular2/src/upgrade/angular_js"], true, function(require, exports, module) {
301 | var global = System.global,
302 | __define = global.define;
303 | global.define = undefined;
304 | var core_1 = require("angular2/core");
305 | var constants_1 = require("angular2/src/upgrade/constants");
306 | var util_1 = require("angular2/src/upgrade/util");
307 | var angular = require("angular2/src/upgrade/angular_js");
308 | var CAMEL_CASE = /([A-Z])/g;
309 | var INITIAL_VALUE = {__UNINITIALIZED__: true};
310 | var NOT_SUPPORTED = 'NOT_SUPPORTED';
311 | var UpgradeNg1ComponentAdapterBuilder = (function() {
312 | function UpgradeNg1ComponentAdapterBuilder(name) {
313 | this.name = name;
314 | this.inputs = [];
315 | this.inputsRename = [];
316 | this.outputs = [];
317 | this.outputsRename = [];
318 | this.propertyOutputs = [];
319 | this.checkProperties = [];
320 | this.propertyMap = {};
321 | this.linkFn = null;
322 | this.directive = null;
323 | this.$controller = null;
324 | var selector = name.replace(CAMEL_CASE, function(all, next) {
325 | return '-' + next.toLowerCase();
326 | });
327 | var self = this;
328 | this.type = core_1.Directive({
329 | selector: selector,
330 | inputs: this.inputsRename,
331 | outputs: this.outputsRename
332 | }).Class({
333 | constructor: [new core_1.Inject(constants_1.NG1_SCOPE), core_1.ElementRef, function(scope, elementRef) {
334 | return new UpgradeNg1ComponentAdapter(self.linkFn, scope, self.directive, elementRef, self.$controller, self.inputs, self.outputs, self.propertyOutputs, self.checkProperties, self.propertyMap);
335 | }],
336 | ngOnChanges: function() {},
337 | ngDoCheck: function() {}
338 | });
339 | }
340 | UpgradeNg1ComponentAdapterBuilder.prototype.extractDirective = function(injector) {
341 | var directives = injector.get(this.name + 'Directive');
342 | if (directives.length > 1) {
343 | throw new Error('Only support single directive definition for: ' + this.name);
344 | }
345 | var directive = directives[0];
346 | if (directive.replace)
347 | this.notSupported('replace');
348 | if (directive.terminal)
349 | this.notSupported('terminal');
350 | var link = directive.link;
351 | if (typeof link == 'object') {
352 | if (link.post)
353 | this.notSupported('link.post');
354 | }
355 | return directive;
356 | };
357 | UpgradeNg1ComponentAdapterBuilder.prototype.notSupported = function(feature) {
358 | throw new Error("Upgraded directive '" + this.name + "' does not support '" + feature + "'.");
359 | };
360 | UpgradeNg1ComponentAdapterBuilder.prototype.extractBindings = function() {
361 | var btcIsObject = typeof this.directive.bindToController === 'object';
362 | if (btcIsObject && Object.keys(this.directive.scope).length) {
363 | throw new Error("Binding definitions on scope and controller at the same time are not supported.");
364 | }
365 | var context = (btcIsObject) ? this.directive.bindToController : this.directive.scope;
366 | if (typeof context == 'object') {
367 | for (var name in context) {
368 | if (context.hasOwnProperty(name)) {
369 | var localName = context[name];
370 | var type = localName.charAt(0);
371 | localName = localName.substr(1) || name;
372 | var outputName = 'output_' + name;
373 | var outputNameRename = outputName + ': ' + name;
374 | var outputNameRenameChange = outputName + ': ' + name + 'Change';
375 | var inputName = 'input_' + name;
376 | var inputNameRename = inputName + ': ' + name;
377 | switch (type) {
378 | case '=':
379 | this.propertyOutputs.push(outputName);
380 | this.checkProperties.push(localName);
381 | this.outputs.push(outputName);
382 | this.outputsRename.push(outputNameRenameChange);
383 | this.propertyMap[outputName] = localName;
384 | case '@':
385 | this.inputs.push(inputName);
386 | this.inputsRename.push(inputNameRename);
387 | this.propertyMap[inputName] = localName;
388 | break;
389 | case '&':
390 | this.outputs.push(outputName);
391 | this.outputsRename.push(outputNameRename);
392 | this.propertyMap[outputName] = localName;
393 | break;
394 | default:
395 | var json = JSON.stringify(context);
396 | throw new Error("Unexpected mapping '" + type + "' in '" + json + "' in '" + this.name + "' directive.");
397 | }
398 | }
399 | }
400 | }
401 | };
402 | UpgradeNg1ComponentAdapterBuilder.prototype.compileTemplate = function(compile, templateCache, httpBackend) {
403 | var _this = this;
404 | if (this.directive.template !== undefined) {
405 | this.linkFn = compileHtml(this.directive.template);
406 | } else if (this.directive.templateUrl) {
407 | var url = this.directive.templateUrl;
408 | var html = templateCache.get(url);
409 | if (html !== undefined) {
410 | this.linkFn = compileHtml(html);
411 | } else {
412 | return new Promise(function(resolve, err) {
413 | httpBackend('GET', url, null, function(status, response) {
414 | if (status == 200) {
415 | resolve(_this.linkFn = compileHtml(templateCache.put(url, response)));
416 | } else {
417 | err("GET " + url + " returned " + status + ": " + response);
418 | }
419 | });
420 | });
421 | }
422 | } else {
423 | throw new Error("Directive '" + this.name + "' is not a component, it is missing template.");
424 | }
425 | return null;
426 | function compileHtml(html) {
427 | var div = document.createElement('div');
428 | div.innerHTML = html;
429 | return compile(div.childNodes);
430 | }
431 | };
432 | UpgradeNg1ComponentAdapterBuilder.resolve = function(exportedComponents, injector) {
433 | var promises = [];
434 | var compile = injector.get(constants_1.NG1_COMPILE);
435 | var templateCache = injector.get(constants_1.NG1_TEMPLATE_CACHE);
436 | var httpBackend = injector.get(constants_1.NG1_HTTP_BACKEND);
437 | var $controller = injector.get(constants_1.NG1_CONTROLLER);
438 | for (var name in exportedComponents) {
439 | if (exportedComponents.hasOwnProperty(name)) {
440 | var exportedComponent = exportedComponents[name];
441 | exportedComponent.directive = exportedComponent.extractDirective(injector);
442 | exportedComponent.$controller = $controller;
443 | exportedComponent.extractBindings();
444 | var promise = exportedComponent.compileTemplate(compile, templateCache, httpBackend);
445 | if (promise)
446 | promises.push(promise);
447 | }
448 | }
449 | return Promise.all(promises);
450 | };
451 | return UpgradeNg1ComponentAdapterBuilder;
452 | })();
453 | exports.UpgradeNg1ComponentAdapterBuilder = UpgradeNg1ComponentAdapterBuilder;
454 | var UpgradeNg1ComponentAdapter = (function() {
455 | function UpgradeNg1ComponentAdapter(linkFn, scope, directive, elementRef, $controller, inputs, outputs, propOuts, checkProperties, propertyMap) {
456 | this.directive = directive;
457 | this.inputs = inputs;
458 | this.outputs = outputs;
459 | this.propOuts = propOuts;
460 | this.checkProperties = checkProperties;
461 | this.propertyMap = propertyMap;
462 | this.destinationObj = null;
463 | this.checkLastValues = [];
464 | var element = elementRef.nativeElement;
465 | var childNodes = [];
466 | var childNode;
467 | while (childNode = element.firstChild) {
468 | element.removeChild(childNode);
469 | childNodes.push(childNode);
470 | }
471 | var componentScope = scope.$new(!!directive.scope);
472 | var $element = angular.element(element);
473 | var controllerType = directive.controller;
474 | var controller = null;
475 | if (controllerType) {
476 | var locals = {
477 | $scope: componentScope,
478 | $element: $element
479 | };
480 | controller = $controller(controllerType, locals, null, directive.controllerAs);
481 | $element.data(util_1.controllerKey(directive.name), controller);
482 | }
483 | var link = directive.link;
484 | if (typeof link == 'object')
485 | link = link.pre;
486 | if (link) {
487 | var attrs = NOT_SUPPORTED;
488 | var transcludeFn = NOT_SUPPORTED;
489 | var linkController = this.resolveRequired($element, directive.require);
490 | directive.link(componentScope, $element, attrs, linkController, transcludeFn);
491 | }
492 | this.destinationObj = directive.bindToController && controller ? controller : componentScope;
493 | linkFn(componentScope, function(clonedElement, scope) {
494 | for (var i = 0,
495 | ii = clonedElement.length; i < ii; i++) {
496 | element.appendChild(clonedElement[i]);
497 | }
498 | }, {parentBoundTranscludeFn: function(scope, cloneAttach) {
499 | cloneAttach(childNodes);
500 | }});
501 | for (var i = 0; i < inputs.length; i++) {
502 | this[inputs[i]] = null;
503 | }
504 | for (var j = 0; j < outputs.length; j++) {
505 | var emitter = this[outputs[j]] = new core_1.EventEmitter();
506 | this.setComponentProperty(outputs[j], (function(emitter) {
507 | return function(value) {
508 | return emitter.emit(value);
509 | };
510 | })(emitter));
511 | }
512 | for (var k = 0; k < propOuts.length; k++) {
513 | this[propOuts[k]] = new core_1.EventEmitter();
514 | this.checkLastValues.push(INITIAL_VALUE);
515 | }
516 | }
517 | UpgradeNg1ComponentAdapter.prototype.ngOnChanges = function(changes) {
518 | for (var name in changes) {
519 | if (changes.hasOwnProperty(name)) {
520 | var change = changes[name];
521 | this.setComponentProperty(name, change.currentValue);
522 | }
523 | }
524 | };
525 | UpgradeNg1ComponentAdapter.prototype.ngDoCheck = function() {
526 | var count = 0;
527 | var destinationObj = this.destinationObj;
528 | var lastValues = this.checkLastValues;
529 | var checkProperties = this.checkProperties;
530 | for (var i = 0; i < checkProperties.length; i++) {
531 | var value = destinationObj[checkProperties[i]];
532 | var last = lastValues[i];
533 | if (value !== last) {
534 | if (typeof value == 'number' && isNaN(value) && typeof last == 'number' && isNaN(last)) {} else {
535 | var eventEmitter = this[this.propOuts[i]];
536 | eventEmitter.emit(lastValues[i] = value);
537 | }
538 | }
539 | }
540 | return count;
541 | };
542 | UpgradeNg1ComponentAdapter.prototype.setComponentProperty = function(name, value) {
543 | this.destinationObj[this.propertyMap[name]] = value;
544 | };
545 | UpgradeNg1ComponentAdapter.prototype.resolveRequired = function($element, require) {
546 | if (!require) {
547 | return undefined;
548 | } else if (typeof require == 'string') {
549 | var name = require;
550 | var isOptional = false;
551 | var startParent = false;
552 | var searchParents = false;
553 | var ch;
554 | if (name.charAt(0) == '?') {
555 | isOptional = true;
556 | name = name.substr(1);
557 | }
558 | if (name.charAt(0) == '^') {
559 | searchParents = true;
560 | name = name.substr(1);
561 | }
562 | if (name.charAt(0) == '^') {
563 | startParent = true;
564 | name = name.substr(1);
565 | }
566 | var key = util_1.controllerKey(name);
567 | if (startParent)
568 | $element = $element.parent();
569 | var dep = searchParents ? $element.inheritedData(key) : $element.data(key);
570 | if (!dep && !isOptional) {
571 | throw new Error("Can not locate '" + require + "' in '" + this.directive.name + "'.");
572 | }
573 | return dep;
574 | } else if (require instanceof Array) {
575 | var deps = [];
576 | for (var i = 0; i < require.length; i++) {
577 | deps.push(this.resolveRequired($element, require[i]));
578 | }
579 | return deps;
580 | }
581 | throw new Error("Directive '" + this.directive.name + "' require syntax unrecognized: " + this.directive.require);
582 | };
583 | return UpgradeNg1ComponentAdapter;
584 | })();
585 | global.define = __define;
586 | return module.exports;
587 | });
588 |
589 | System.register("angular2/src/upgrade/upgrade_adapter", ["angular2/core", "angular2/src/facade/lang", "angular2/src/facade/async", "angular2/platform/browser", "angular2/src/upgrade/metadata", "angular2/src/upgrade/util", "angular2/src/upgrade/constants", "angular2/src/upgrade/downgrade_ng2_adapter", "angular2/src/upgrade/upgrade_ng1_adapter", "angular2/src/upgrade/angular_js"], true, function(require, exports, module) {
590 | var global = System.global,
591 | __define = global.define;
592 | global.define = undefined;
593 | var core_1 = require("angular2/core");
594 | var lang_1 = require("angular2/src/facade/lang");
595 | var async_1 = require("angular2/src/facade/async");
596 | var browser_1 = require("angular2/platform/browser");
597 | var metadata_1 = require("angular2/src/upgrade/metadata");
598 | var util_1 = require("angular2/src/upgrade/util");
599 | var constants_1 = require("angular2/src/upgrade/constants");
600 | var downgrade_ng2_adapter_1 = require("angular2/src/upgrade/downgrade_ng2_adapter");
601 | var upgrade_ng1_adapter_1 = require("angular2/src/upgrade/upgrade_ng1_adapter");
602 | var angular = require("angular2/src/upgrade/angular_js");
603 | var upgradeCount = 0;
604 | var UpgradeAdapter = (function() {
605 | function UpgradeAdapter() {
606 | this.idPrefix = "NG2_UPGRADE_" + upgradeCount++ + "_";
607 | this.upgradedComponents = [];
608 | this.downgradedComponents = {};
609 | this.providers = [];
610 | }
611 | UpgradeAdapter.prototype.downgradeNg2Component = function(type) {
612 | this.upgradedComponents.push(type);
613 | var info = metadata_1.getComponentInfo(type);
614 | return ng1ComponentDirective(info, "" + this.idPrefix + info.selector + "_c");
615 | };
616 | UpgradeAdapter.prototype.upgradeNg1Component = function(name) {
617 | if (this.downgradedComponents.hasOwnProperty(name)) {
618 | return this.downgradedComponents[name].type;
619 | } else {
620 | return (this.downgradedComponents[name] = new upgrade_ng1_adapter_1.UpgradeNg1ComponentAdapterBuilder(name)).type;
621 | }
622 | };
623 | UpgradeAdapter.prototype.bootstrap = function(element, modules, config) {
624 | var _this = this;
625 | var upgrade = new UpgradeAdapterRef();
626 | var ng1Injector = null;
627 | var platformRef = core_1.platform(browser_1.BROWSER_PROVIDERS);
628 | var applicationRef = platformRef.application([browser_1.BROWSER_APP_PROVIDERS, core_1.provide(constants_1.NG1_INJECTOR, {useFactory: function() {
629 | return ng1Injector;
630 | }}), core_1.provide(constants_1.NG1_COMPILE, {useFactory: function() {
631 | return ng1Injector.get(constants_1.NG1_COMPILE);
632 | }}), this.providers]);
633 | var injector = applicationRef.injector;
634 | var ngZone = injector.get(core_1.NgZone);
635 | var compiler = injector.get(core_1.Compiler);
636 | var delayApplyExps = [];
637 | var original$applyFn;
638 | var rootScopePrototype;
639 | var rootScope;
640 | var hostViewFactoryRefMap = {};
641 | var ng1Module = angular.module(this.idPrefix, modules);
642 | var ng1BootstrapPromise = null;
643 | var ng1compilePromise = null;
644 | ng1Module.value(constants_1.NG2_INJECTOR, injector).value(constants_1.NG2_ZONE, ngZone).value(constants_1.NG2_COMPILER, compiler).value(constants_1.NG2_HOST_VIEW_FACTORY_REF_MAP, hostViewFactoryRefMap).value(constants_1.NG2_APP_VIEW_MANAGER, injector.get(core_1.AppViewManager)).config(['$provide', function(provide) {
645 | provide.decorator(constants_1.NG1_ROOT_SCOPE, ['$delegate', function(rootScopeDelegate) {
646 | rootScopePrototype = rootScopeDelegate.constructor.prototype;
647 | if (rootScopePrototype.hasOwnProperty('$apply')) {
648 | original$applyFn = rootScopePrototype.$apply;
649 | rootScopePrototype.$apply = function(exp) {
650 | return delayApplyExps.push(exp);
651 | };
652 | } else {
653 | throw new Error("Failed to find '$apply' on '$rootScope'!");
654 | }
655 | return rootScope = rootScopeDelegate;
656 | }]);
657 | provide.decorator(constants_1.NG1_TESTABILITY, ['$delegate', function(testabilityDelegate) {
658 | var _this = this;
659 | var ng2Testability = injector.get(core_1.Testability);
660 | var origonalWhenStable = testabilityDelegate.whenStable;
661 | var newWhenStable = function(callback) {
662 | var whenStableContext = _this;
663 | origonalWhenStable.call(_this, function() {
664 | if (ng2Testability.isStable()) {
665 | callback.apply(this, arguments);
666 | } else {
667 | ng2Testability.whenStable(newWhenStable.bind(whenStableContext, callback));
668 | }
669 | });
670 | };
671 | testabilityDelegate.whenStable = newWhenStable;
672 | return testabilityDelegate;
673 | }]);
674 | }]);
675 | ng1compilePromise = new Promise(function(resolve, reject) {
676 | ng1Module.run(['$injector', '$rootScope', function(injector, rootScope) {
677 | ng1Injector = injector;
678 | async_1.ObservableWrapper.subscribe(ngZone.onMicrotaskEmpty, function(_) {
679 | return ngZone.runOutsideAngular(function() {
680 | return rootScope.$apply();
681 | });
682 | });
683 | upgrade_ng1_adapter_1.UpgradeNg1ComponentAdapterBuilder.resolve(_this.downgradedComponents, injector).then(resolve, reject);
684 | }]);
685 | });
686 | var windowAngular = lang_1.global.angular;
687 | windowAngular.resumeBootstrap = undefined;
688 | angular.element(element).data(util_1.controllerKey(constants_1.NG2_INJECTOR), injector);
689 | ngZone.run(function() {
690 | angular.bootstrap(element, [_this.idPrefix], config);
691 | });
692 | ng1BootstrapPromise = new Promise(function(resolve, reject) {
693 | if (windowAngular.resumeBootstrap) {
694 | var originalResumeBootstrap = windowAngular.resumeBootstrap;
695 | windowAngular.resumeBootstrap = function() {
696 | windowAngular.resumeBootstrap = originalResumeBootstrap;
697 | windowAngular.resumeBootstrap.apply(this, arguments);
698 | resolve();
699 | };
700 | } else {
701 | resolve();
702 | }
703 | });
704 | Promise.all([this.compileNg2Components(compiler, hostViewFactoryRefMap), ng1BootstrapPromise, ng1compilePromise]).then(function() {
705 | ngZone.run(function() {
706 | if (rootScopePrototype) {
707 | rootScopePrototype.$apply = original$applyFn;
708 | while (delayApplyExps.length) {
709 | rootScope.$apply(delayApplyExps.shift());
710 | }
711 | upgrade._bootstrapDone(applicationRef, ng1Injector);
712 | rootScopePrototype = null;
713 | }
714 | });
715 | }, util_1.onError);
716 | return upgrade;
717 | };
718 | UpgradeAdapter.prototype.addProvider = function(provider) {
719 | this.providers.push(provider);
720 | };
721 | UpgradeAdapter.prototype.upgradeNg1Provider = function(name, options) {
722 | var token = options && options.asToken || name;
723 | this.providers.push(core_1.provide(token, {
724 | useFactory: function(ng1Injector) {
725 | return ng1Injector.get(name);
726 | },
727 | deps: [constants_1.NG1_INJECTOR]
728 | }));
729 | };
730 | UpgradeAdapter.prototype.downgradeNg2Provider = function(token) {
731 | var factory = function(injector) {
732 | return injector.get(token);
733 | };
734 | factory.$inject = [constants_1.NG2_INJECTOR];
735 | return factory;
736 | };
737 | UpgradeAdapter.prototype.compileNg2Components = function(compiler, hostViewFactoryRefMap) {
738 | var _this = this;
739 | var promises = [];
740 | var types = this.upgradedComponents;
741 | for (var i = 0; i < types.length; i++) {
742 | promises.push(compiler.compileInHost(types[i]));
743 | }
744 | return Promise.all(promises).then(function(hostViewFactories) {
745 | var types = _this.upgradedComponents;
746 | for (var i = 0; i < hostViewFactories.length; i++) {
747 | hostViewFactoryRefMap[metadata_1.getComponentInfo(types[i]).selector] = hostViewFactories[i];
748 | }
749 | return hostViewFactoryRefMap;
750 | }, util_1.onError);
751 | };
752 | return UpgradeAdapter;
753 | })();
754 | exports.UpgradeAdapter = UpgradeAdapter;
755 | function ng1ComponentDirective(info, idPrefix) {
756 | directiveFactory.$inject = [constants_1.NG2_HOST_VIEW_FACTORY_REF_MAP, constants_1.NG2_APP_VIEW_MANAGER, constants_1.NG1_PARSE];
757 | function directiveFactory(hostViewFactoryRefMap, viewManager, parse) {
758 | var hostViewFactory = hostViewFactoryRefMap[info.selector];
759 | if (!hostViewFactory)
760 | throw new Error('Expecting HostViewFactoryRef for: ' + info.selector);
761 | var idCount = 0;
762 | return {
763 | restrict: 'E',
764 | require: constants_1.REQUIRE_INJECTOR,
765 | link: {post: function(scope, element, attrs, parentInjector, transclude) {
766 | var domElement = element[0];
767 | var facade = new downgrade_ng2_adapter_1.DowngradeNg2ComponentAdapter(idPrefix + (idCount++), info, element, attrs, scope, parentInjector, parse, viewManager, hostViewFactory);
768 | facade.setupInputs();
769 | facade.bootstrapNg2();
770 | facade.projectContent();
771 | facade.setupOutputs();
772 | facade.registerCleanup();
773 | }}
774 | };
775 | }
776 | return directiveFactory;
777 | }
778 | var UpgradeAdapterRef = (function() {
779 | function UpgradeAdapterRef() {
780 | this._readyFn = null;
781 | this.ng1RootScope = null;
782 | this.ng1Injector = null;
783 | this.ng2ApplicationRef = null;
784 | this.ng2Injector = null;
785 | }
786 | UpgradeAdapterRef.prototype._bootstrapDone = function(applicationRef, ng1Injector) {
787 | this.ng2ApplicationRef = applicationRef;
788 | this.ng2Injector = applicationRef.injector;
789 | this.ng1Injector = ng1Injector;
790 | this.ng1RootScope = ng1Injector.get(constants_1.NG1_ROOT_SCOPE);
791 | this._readyFn && this._readyFn(this);
792 | };
793 | UpgradeAdapterRef.prototype.ready = function(fn) {
794 | this._readyFn = fn;
795 | };
796 | UpgradeAdapterRef.prototype.dispose = function() {
797 | this.ng1Injector.get(constants_1.NG1_ROOT_SCOPE).$destroy();
798 | this.ng2ApplicationRef.dispose();
799 | };
800 | return UpgradeAdapterRef;
801 | })();
802 | exports.UpgradeAdapterRef = UpgradeAdapterRef;
803 | global.define = __define;
804 | return module.exports;
805 | });
806 |
807 | System.register("angular2/upgrade", ["angular2/src/upgrade/upgrade_adapter"], true, function(require, exports, module) {
808 | var global = System.global,
809 | __define = global.define;
810 | global.define = undefined;
811 | var upgrade_adapter_1 = require("angular2/src/upgrade/upgrade_adapter");
812 | exports.UpgradeAdapter = upgrade_adapter_1.UpgradeAdapter;
813 | exports.UpgradeAdapterRef = upgrade_adapter_1.UpgradeAdapterRef;
814 | global.define = __define;
815 | return module.exports;
816 | });
817 |
818 | //# sourceMappingURLDisabled=upgrade.dev.js.map
--------------------------------------------------------------------------------
/dist/vendor/systemjs/dist/system-polyfills.js:
--------------------------------------------------------------------------------
1 | /*
2 | * SystemJS Polyfills for URL and Promise providing IE8+ Support
3 | */
4 | !function(t){!function(t){function e(t,n){if("string"!=typeof t)throw new TypeError("URL must be a string");var o=String(t).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@\/?#]*)(?::([^:@\/?#]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);if(!o)throw new RangeError;var r=o[1]||"",i=o[2]||"",u=o[3]||"",c=o[4]||"",s=o[5]||"",f=o[6]||"",a=o[7]||"",h=o[8]||"",p=o[9]||"";if(void 0!==n){var l=n instanceof e?n:new e(n),d=""===r&&""===c&&""===i;d&&""===a&&""===h&&(h=l.search),d&&"/"!==a.charAt(0)&&(a=""!==a?(""===l.host&&""===l.username||""!==l.pathname?"":"/")+l.pathname.slice(0,l.pathname.lastIndexOf("/")+1)+a:l.pathname);var y=[];a.replace(/^(\.\.?(\/|$))+/,"").replace(/\/(\.(\/|$))+/g,"/").replace(/\/\.\.$/,"/../").replace(/\/?[^\/]*/g,function(t){"/.."===t?y.pop():y.push(t)}),a=y.join("").replace(/^\//,"/"===a.charAt(0)?"/":""),d&&(f=l.port,s=l.hostname,c=l.host,u=l.password,i=l.username),""===r&&(r=l.protocol)}"file:"==r&&(a=a.replace(/\\/g,"/")),this.origin=r+(""!==r||""!==c?"//":"")+c,this.href=r+(""!==r||""!==c?"//":"")+(""!==i?i+(""!==u?":"+u:"")+"@":"")+c+a+h+p,this.protocol=r,this.username=i,this.password=u,this.host=c,this.hostname=s,this.port=f,this.pathname=a,this.search=h,this.hash=p}t.URLPolyfill=e}("undefined"!=typeof self?self:global),!function(e){"object"==typeof exports?module.exports=e():"function"==typeof t&&t.amd?t(e):"undefined"!=typeof window?window.Promise=e():"undefined"!=typeof global?global.Promise=e():"undefined"!=typeof self&&(self.Promise=e())}(function(){var t;return function e(t,n,o){function r(u,c){if(!n[u]){if(!t[u]){var s="function"==typeof require&&require;if(!c&&s)return s(u,!0);if(i)return i(u,!0);throw new Error("Cannot find module '"+u+"'")}var f=n[u]={exports:{}};t[u][0].call(f.exports,function(e){var n=t[u][1][e];return r(n?n:e)},f,f.exports,e,t,n,o)}return n[u].exports}for(var i="function"==typeof require&&require,u=0;u=0&&(l.splice(e,1),h("Handled previous rejection ["+t.id+"] "+r.formatObject(t.value)))}function c(t,e){p.push(t,e),null===d&&(d=o(s,0))}function s(){for(d=null;p.length>0;)p.shift()(p.shift())}var f,a=n,h=n;"undefined"!=typeof console&&(f=console,a="undefined"!=typeof f.error?function(t){f.error(t)}:function(t){f.log(t)},h="undefined"!=typeof f.info?function(t){f.info(t)}:function(t){f.log(t)}),t.onPotentiallyUnhandledRejection=function(t){c(i,t)},t.onPotentiallyUnhandledRejectionHandled=function(t){c(u,t)},t.onFatalRejection=function(t){c(e,t.value)};var p=[],l=[],d=null;return t}})}("function"==typeof t&&t.amd?t:function(t){n.exports=t(e)})},{"../env":5,"../format":6}],5:[function(e,n,o){!function(t){"use strict";t(function(t){function e(){return"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process)}function n(){return"function"==typeof MutationObserver&&MutationObserver||"function"==typeof WebKitMutationObserver&&WebKitMutationObserver}function o(t){function e(){var t=n;n=void 0,t()}var n,o=document.createTextNode(""),r=new t(e);r.observe(o,{characterData:!0});var i=0;return function(t){n=t,o.data=i^=1}}var r,i="undefined"!=typeof setTimeout&&setTimeout,u=function(t,e){return setTimeout(t,e)},c=function(t){return clearTimeout(t)},s=function(t){return i(t,0)};if(e())s=function(t){return process.nextTick(t)};else if(r=n())s=o(r);else if(!i){var f=t,a=f("vertx");u=function(t,e){return a.setTimer(e,t)},c=a.cancelTimer,s=a.runOnLoop||a.runOnContext}return{setTimer:u,clearTimer:c,asap:s}})}("function"==typeof t&&t.amd?t:function(t){n.exports=t(e)})},{}],6:[function(e,n,o){!function(t){"use strict";t(function(){function t(t){var n="object"==typeof t&&null!==t&&(t.stack||t.message)?t.stack||t.message:e(t);return t instanceof Error?n:n+" (WARNING: non-Error used)"}function e(t){var e=String(t);return"[object Object]"===e&&"undefined"!=typeof JSON&&(e=n(t,e)),e}function n(t,e){try{return JSON.stringify(t)}catch(n){return e}}return{formatError:t,formatObject:e,tryStringify:n}})}("function"==typeof t&&t.amd?t:function(t){n.exports=t()})},{}],7:[function(e,n,o){!function(t){"use strict";t(function(){return function(t){function e(t,e){this._handler=t===j?e:n(t)}function n(t){function e(t){r.resolve(t)}function n(t){r.reject(t)}function o(t){r.notify(t)}var r=new b;try{t(e,n,o)}catch(i){n(i)}return r}function o(t){return U(t)?t:new e(j,new g(v(t)))}function r(t){return new e(j,new g(new q(t)))}function i(){return Z}function u(){return new e(j,new b)}function c(t,e){var n=new b(t.receiver,t.join().context);return new e(j,n)}function s(t){return a(z,null,t)}function f(t,e){return a(J,t,e)}function a(t,n,o){function r(e,r,u){u.resolved||h(o,i,e,t(n,r,e),u)}function i(t,e,n){a[t]=e,0===--f&&n.become(new R(a))}for(var u,c="function"==typeof n?r:i,s=new b,f=o.length>>>0,a=new Array(f),p=0;p0?e(n,i.value,r):(r.become(i),p(t,n+1,i))}else e(n,o,r)}function p(t,e,n){for(var o=e;on&&t._unreport()}}function d(t){return"object"!=typeof t||null===t?r(new TypeError("non-iterable passed to race()")):0===t.length?i():1===t.length?o(t[0]):y(t)}function y(t){var n,o,r,i=new b;for(n=0;n0||"function"!=typeof e&&0>r)return new this.constructor(j,o);var i=this._beget(),u=i._handler;return o.chain(u,o.receiver,t,e,n),i},e.prototype["catch"]=function(t){return this.then(void 0,t)},e.prototype._beget=function(){return c(this._handler,this.constructor)},e.all=s,e.race=d,e._traverse=f,e._visitRemaining=p,j.prototype.when=j.prototype.become=j.prototype.notify=j.prototype.fail=j.prototype._unreport=j.prototype._report=B,j.prototype._state=0,j.prototype.state=function(){return this._state},j.prototype.join=function(){for(var t=this;void 0!==t.handler;)t=t.handler;return t},j.prototype.chain=function(t,e,n,o,r){this.when({resolver:t,receiver:e,fulfilled:n,rejected:o,progress:r})},j.prototype.visit=function(t,e,n,o){this.chain(V,t,e,n,o)},j.prototype.fold=function(t,e,n,o){this.when(new S(t,e,n,o))},W(j,_),_.prototype.become=function(t){t.fail()};var V=new _;W(j,b),b.prototype._state=0,b.prototype.resolve=function(t){this.become(v(t))},b.prototype.reject=function(t){this.resolved||this.become(new q(t))},b.prototype.join=function(){if(!this.resolved)return this;for(var t=this;void 0!==t.handler;)if(t=t.handler,t===this)return this.handler=O();return t},b.prototype.run=function(){var t=this.consumers,e=this.handler;this.handler=this.handler.join(),this.consumers=void 0;for(var n=0;n {
7 | page = new MusicPage();
8 | })
9 |
10 | it('should display message saying app works', () => {
11 | page.navigateTo();
12 | expect(page.getParagraphText()).toEqual('music Works!');
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/e2e/app.po.ts:
--------------------------------------------------------------------------------
1 | export class MusicPage {
2 | navigateTo() {
3 | return browser.get('/');
4 | }
5 |
6 | getParagraphText() {
7 | return element(by.css('music-app p')).getText();
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/e2e/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "declaration": false,
5 | "emitDecoratorMetadata": true,
6 | "experimentalDecorators": true,
7 | "mapRoot": "",
8 | "module": "commonjs",
9 | "moduleResolution": "node",
10 | "noEmitOnError": true,
11 | "noImplicitAny": false,
12 | "rootDir": ".",
13 | "sourceMap": true,
14 | "sourceRoot": "/",
15 | "target": "es5"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/e2e/typings.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | var request = require('request');
2 | var express = require('express');
3 | var app = express();
4 |
5 | app.set('port', (process.env.PORT || 5000));
6 |
7 | app.use(express.static(__dirname + '/dist'));
8 | app.use('/api/*', function(req, res, next) {
9 | request('http://em-ng-workshop.herokuapp.com' + req.baseUrl, function(err, response, body) {
10 | if(!err) {
11 | res.send(body);
12 | }
13 | });
14 | });
15 |
16 | app.listen(app.get('port'), function() {
17 | console.log('Node app is running on port', app.get('port'));
18 | });
19 |
20 | app.use('/*', function(req, res) {
21 | res.redirect('/')
22 | });
23 |
--------------------------------------------------------------------------------
/karma-test-shim.js:
--------------------------------------------------------------------------------
1 | /*global jasmine, __karma__, window*/
2 | Error.stackTraceLimit = Infinity;
3 |
4 | jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
5 |
6 | __karma__.loaded = function () {
7 | };
8 |
9 | System.config({
10 | packages: {
11 | 'base/dist/app': {
12 | defaultExtension: false,
13 | format: 'register',
14 | map: Object.keys(window.__karma__.files)
15 | .filter(onlyAppFiles)
16 | .reduce(function (pathsMapping, appPath) {
17 | var moduleName = appPath.replace(/^\/base\/dist\/app\//, './').replace(/\.js$/, '');
18 | pathsMapping[moduleName] = appPath + '?' + window.__karma__.files[appPath];
19 | return pathsMapping;
20 | }, {})
21 | }
22 | }
23 | });
24 |
25 | System.import('angular2/testing').then(function (testing) {
26 | return System.import('angular2/platform/testing/browser').then(function (providers) {
27 | testing.setBaseTestProviders(providers.TEST_BROWSER_PLATFORM_PROVIDERS,
28 | providers.TEST_BROWSER_APPLICATION_PROVIDERS);
29 | });
30 | }).then(function () {
31 | return Promise.all(
32 | Object.keys(window.__karma__.files)
33 | .filter(onlySpecFiles)
34 | .map(function (moduleName) {
35 | return System.import(moduleName);
36 | }));
37 | }).then(function () {
38 | __karma__.start();
39 | }, function (error) {
40 | __karma__.error(error.stack || error);
41 | });
42 |
43 | function onlyAppFiles(filePath) {
44 | return /^\/base\/dist\/app\/(?!.*\.spec\.js$)([a-z0-9-_\.\/]+)\.js$/.test(filePath);
45 | }
46 |
47 | function onlySpecFiles(path) {
48 | return /\.spec\.js$/.test(path);
49 | }
50 |
--------------------------------------------------------------------------------
/karma.conf.js:
--------------------------------------------------------------------------------
1 | module.exports = function (config) {
2 | config.set({
3 | basePath: '',
4 | frameworks: ['jasmine'],
5 | plugins: [
6 | require('karma-jasmine'),
7 | require('karma-chrome-launcher')
8 | ],
9 | customLaunchers: {
10 | // chrome setup for travis CI using chromium
11 | Chrome_travis_ci: {
12 | base: 'Chrome',
13 | flags: ['--no-sandbox']
14 | }
15 | },
16 | files: [
17 | { pattern: 'node_modules/systemjs/dist/system-polyfills.js', included: true, watched: true },
18 | { pattern: 'node_modules/systemjs/dist/system.src.js', included: true, watched: true },
19 | { pattern: 'node_modules/es6-shim/es6-shim.js', included: true, watched: true },
20 | { pattern: 'node_modules/angular2/bundles/angular2-polyfills.js', included: true, watched: true },
21 | { pattern: 'node_modules/rxjs/bundles/Rx.js', included: true, watched: true },
22 | { pattern: 'node_modules/angular2/bundles/angular2.js', included: true, watched: true },
23 | { pattern: 'node_modules/angular2/bundles/http.dev.js', included: true, watched: true },
24 | { pattern: 'node_modules/angular2/bundles/router.dev.js', included: true, watched: true },
25 | { pattern: 'node_modules/angular2/bundles/testing.dev.js', included: true, watched: true },
26 |
27 |
28 | { pattern: 'karma-test-shim.js', included: true, watched: true },
29 |
30 | // paths loaded via module imports
31 | { pattern: 'dist/**/*.js', included: false, watched: true },
32 |
33 | // paths loaded via Angular's component compiler
34 | // (these paths need to be rewritten, see proxies section)
35 | { pattern: 'dist/**/*.html', included: false, watched: true },
36 | { pattern: 'dist/**/*.css', included: false, watched: true },
37 |
38 | // paths to support debugging with source maps in dev tools
39 | { pattern: 'dist/**/*.ts', included: false, watched: false },
40 | { pattern: 'dist/**/*.js.map', included: false, watched: false }
41 | ],
42 | proxies: {
43 | // required for component assets fetched by Angular's compiler
44 | '/app/': '/base/dist/app/'
45 | },
46 | exclude: [],
47 | preprocessors: {},
48 | reporters: ['progress'],
49 | port: 9876,
50 | colors: true,
51 | logLevel: config.LOG_INFO,
52 | autoWatch: true,
53 | browsers: ['Chrome'],
54 | singleRun: false
55 | });
56 | };
57 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "music",
3 | "version": "0.0.0",
4 | "license": "MIT",
5 | "main": "index.js",
6 | "angular-cli": {},
7 | "scripts": {
8 | "start": "node index.js",
9 | "typings": "typings install --ambient",
10 | "lint": "tslint src/**/*.ts",
11 | "format": "clang-format -i -style=file --glob=src/**/*.ts",
12 | "pree2e": "webdriver-manager update",
13 | "e2e": "protractor"
14 | },
15 | "private": true,
16 | "dependencies": {
17 | "angular2": "2.0.0-beta.13",
18 | "es6-shim": "^0.35.0",
19 | "express": "~4.9.x",
20 | "reflect-metadata": "0.1.2",
21 | "request": "^2.71.0",
22 | "rxjs": "5.0.0-beta.2",
23 | "systemjs": "0.19.20",
24 | "zone.js": "^0.6.4"
25 | },
26 | "devDependencies": {
27 | "angular-cli": "0.0.*",
28 | "angular-cli-github-pages": "^0.2.0",
29 | "clang-format": "^1.0.35",
30 | "codelyzer": "0.0.12",
31 | "ember-cli-inject-live-reload": "^1.4.0",
32 | "jasmine-core": "^2.3.4",
33 | "jasmine-spec-reporter": "^2.4.0",
34 | "karma": "^0.13.15",
35 | "karma-chrome-launcher": "^0.2.1",
36 | "karma-jasmine": "^0.3.6",
37 | "protractor": "^3.0.0",
38 | "ts-node": "^0.5.5",
39 | "tslint": "^3.6.0",
40 | "typescript": "^1.8.7",
41 | "typings": "^0.6.6"
42 | },
43 | "engines": {
44 | "node": "0.12.2"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/protractor.conf.js:
--------------------------------------------------------------------------------
1 | /*global jasmine */
2 | var SpecReporter = require('jasmine-spec-reporter');
3 |
4 | exports.config = {
5 | allScriptsTimeout: 11000,
6 | specs: [
7 | 'e2e/**/*.e2e.ts'
8 | ],
9 | capabilities: {
10 | 'browserName': 'chrome'
11 | },
12 | directConnect: true,
13 | baseUrl: 'http://localhost:4200/',
14 | framework: 'jasmine',
15 | jasmineNodeOpts: {
16 | showColors: true,
17 | defaultTimeoutInterval: 30000,
18 | print: function() {}
19 | },
20 | useAllAngular2AppRoots: true,
21 | beforeLaunch: function() {
22 | require('ts-node').register({
23 | project: 'e2e'
24 | });
25 | },
26 | onPrepare: function() {
27 | jasmine.getEnv().addReporter(new SpecReporter());
28 | }
29 | };
30 |
--------------------------------------------------------------------------------
/public/.npmignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngularMVD/ng-music/4df1004586501e3b9c6f43e26e332734e126c1b5/public/.npmignore
--------------------------------------------------------------------------------
/src/client/app.ts:
--------------------------------------------------------------------------------
1 | import {bootstrap} from 'angular2/platform/browser';
2 | import {MusicApp} from './app/music';
3 |
4 | bootstrap(MusicApp, []);
5 |
--------------------------------------------------------------------------------
/src/client/app/album-cover/album-cover.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngularMVD/ng-music/4df1004586501e3b9c6f43e26e332734e126c1b5/src/client/app/album-cover/album-cover.css
--------------------------------------------------------------------------------
/src/client/app/album-cover/album-cover.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/client/app/album-cover/album-cover.spec.ts:
--------------------------------------------------------------------------------
1 | import {
2 | it,
3 | iit,
4 | describe,
5 | ddescribe,
6 | expect,
7 | inject,
8 | injectAsync,
9 | TestComponentBuilder,
10 | beforeEachProviders
11 | } from 'angular2/testing';
12 | import {provide} from 'angular2/core';
13 | import {AlbumCover} from './album-cover';
14 |
15 | describe('AlbumCover Component', () => {
16 |
17 | beforeEachProviders((): any[] => []);
18 |
19 |
20 | it('should ...', injectAsync([TestComponentBuilder], (tcb:TestComponentBuilder) => {
21 | return tcb.createAsync(AlbumCover).then((fixture) => {
22 | fixture.detectChanges();
23 | });
24 | }));
25 |
26 | });
27 |
--------------------------------------------------------------------------------
/src/client/app/album-cover/album-cover.ts:
--------------------------------------------------------------------------------
1 | import {Component, Input} from 'angular2/core';
2 | import {RouterLink} from 'angular2/router';
3 |
4 | @Component({
5 | selector: 'album-cover',
6 | templateUrl: 'app/album-cover/album-cover.html',
7 | styleUrls: ['app/album-cover/album-cover.css'],
8 | providers: [],
9 | directives: [RouterLink],
10 | pipes: [],
11 | })
12 | export class AlbumCover {
13 | @Input() album: any;
14 |
15 | selectAlbum() {
16 | alert("Album selected");
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/client/app/albums-page/albums-page.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngularMVD/ng-music/4df1004586501e3b9c6f43e26e332734e126c1b5/src/client/app/albums-page/albums-page.css
--------------------------------------------------------------------------------
/src/client/app/albums-page/albums-page.html:
--------------------------------------------------------------------------------
1 | ng-music
2 |
13 |
14 |
15 |
16 | Pick an album
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/client/app/albums-page/albums-page.spec.ts:
--------------------------------------------------------------------------------
1 | import {
2 | it,
3 | iit,
4 | describe,
5 | ddescribe,
6 | expect,
7 | inject,
8 | injectAsync,
9 | TestComponentBuilder,
10 | beforeEachProviders
11 | } from 'angular2/testing';
12 | import {provide} from 'angular2/core';
13 | import {AlbumsPage} from './albums-page';
14 |
15 | describe('AlbumsPage Component', () => {
16 |
17 | beforeEachProviders((): any[] => []);
18 |
19 |
20 | it('should ...', injectAsync([TestComponentBuilder], (tcb:TestComponentBuilder) => {
21 | return tcb.createAsync(AlbumsPage).then((fixture) => {
22 | fixture.detectChanges();
23 | });
24 | }));
25 |
26 | });
27 |
--------------------------------------------------------------------------------
/src/client/app/albums-page/albums-page.ts:
--------------------------------------------------------------------------------
1 | import {Component} from 'angular2/core';
2 | import {NgFor} from 'angular2/common';
3 |
4 | import {AlbumCover} from '../album-cover/album-cover';
5 | import {AlbumsService} from '../albums-service/albums-service';
6 |
7 | @Component({
8 | selector: 'albums-page',
9 | templateUrl: 'app/albums-page/albums-page.html',
10 | styleUrls: ['app/albums-page/albums-page.css'],
11 | providers: [AlbumsService],
12 | directives: [AlbumCover, NgFor],
13 | pipes: []
14 | })
15 | export class AlbumsPage {
16 | albums: any = [];
17 |
18 | constructor(private _albumsService: AlbumsService) {
19 | _albumsService.getAllAlbums().subscribe(albums => this.albums = albums);
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/client/app/albums-service/albums-service.spec.ts:
--------------------------------------------------------------------------------
1 | import {
2 | it,
3 | iit,
4 | describe,
5 | ddescribe,
6 | expect,
7 | inject,
8 | injectAsync,
9 | TestComponentBuilder,
10 | beforeEachProviders
11 | } from 'angular2/testing';
12 | import {provide} from 'angular2/core';
13 | import {AlbumsService} from './albums-service';
14 |
15 |
16 | describe('AlbumsService Service', () => {
17 |
18 | beforeEachProviders(() => [AlbumsService]);
19 |
20 |
21 | it('should ...', inject([AlbumsService], (service: AlbumsService) => {
22 |
23 | }));
24 |
25 | });
26 |
--------------------------------------------------------------------------------
/src/client/app/albums-service/albums-service.ts:
--------------------------------------------------------------------------------
1 | import {Injectable} from 'angular2/core';
2 | import {Http} from 'angular2/http';
3 | import 'rxjs/add/operator/map';
4 |
5 | @Injectable()
6 | export class AlbumsService {
7 | constructor(private http: Http) {}
8 |
9 | getAllAlbums() {
10 | return this.http
11 | .get('/api/albums')
12 | .map(response => {
13 | return response.json()['albums'];
14 | });
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/client/app/music.html:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/src/client/app/music.spec.ts:
--------------------------------------------------------------------------------
1 | import {describe, it, expect, beforeEachProviders, inject} from 'angular2/testing';
2 | import {MusicApp} from '../app/music';
3 |
4 | beforeEachProviders(() => [MusicApp]);
5 |
6 | describe('App: Music', () => {
7 | it('should have the `defaultMeaning` as 42', inject([MusicApp], (app: MusicApp) => {
8 | expect(app.defaultMeaning).toBe(42);
9 | }));
10 |
11 | describe('#meaningOfLife', () => {
12 | it('should get the meaning of life', inject([MusicApp], (app: MusicApp) => {
13 | expect(app.meaningOfLife()).toBe('The meaning of life is 42');
14 | expect(app.meaningOfLife(22)).toBe('The meaning of life is 22');
15 | }));
16 | });
17 | });
18 |
19 |
--------------------------------------------------------------------------------
/src/client/app/music.ts:
--------------------------------------------------------------------------------
1 | import {Component} from 'angular2/core';
2 | import {RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS} from 'angular2/router';
3 | import {HTTP_PROVIDERS} from 'angular2/http';
4 | import {CliRouteConfig} from './route-config';
5 |
6 | import {AlbumsPage} from './albums-page/albums-page';
7 | import {TracksPage} from './tracks-page/tracks-page';
8 |
9 | @Component({
10 | selector: 'music-app',
11 | providers: [ROUTER_PROVIDERS, HTTP_PROVIDERS],
12 | templateUrl: 'app/music.html',
13 | directives: [ROUTER_DIRECTIVES],
14 | pipes: []
15 | })
16 | @RouteConfig([
17 | {path: '/', component: AlbumsPage, name:'AlbumsPage'},
18 | { path: '/:id', component: TracksPage, name: 'TracksPage' },
19 | ].concat(CliRouteConfig))
20 |
21 | export class MusicApp {
22 | defaultMeaning: number = 42;
23 |
24 | meaningOfLife(meaning?: number) {
25 | return `The meaning of life is ${meaning || this.defaultMeaning}`;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/client/app/route-config.ts:
--------------------------------------------------------------------------------
1 |
2 | // DO NOT EDIT THIS FILE
3 | // IT IS AUTO GENERATED BY ANGULAR-CLI
4 |
5 | export const CliRouteConfig = [
6 |
7 | ];
--------------------------------------------------------------------------------
/src/client/app/tracks-page/tracks-page.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngularMVD/ng-music/4df1004586501e3b9c6f43e26e332734e126c1b5/src/client/app/tracks-page/tracks-page.css
--------------------------------------------------------------------------------
/src/client/app/tracks-page/tracks-page.html:
--------------------------------------------------------------------------------
1 |
22 |
32 |
33 |
34 |
SONG
35 |
ARTIST
36 |
ALBUM
37 |
38 |
39 |
40 |
Blitzkrieg Bop
41 |
Ramones
42 |
Ramones
43 |
2:12
44 |
45 |
46 |
Beat on the Brat
47 |
Ramones
48 |
Ramones
49 |
2:30
50 |
51 |
52 |
Judy Is a Punk
53 |
Ramones
54 |
Ramones
55 |
1:30
56 |
57 |
58 |
I Wanna Be Your Boyfriend
59 |
Ramones
60 |
Ramones
61 |
2:24
62 |
63 |
64 |
Chain Saw
65 |
Ramones
66 |
Ramones
67 |
1:55
68 |
69 |
70 |
Now I Wanna Sniff Some Glue
71 |
Ramones
72 |
Ramones
73 |
1:34
74 |
75 |
76 |
I Don't Wanna Go Down to the Basement
77 |
Ramones
78 |
Ramones
79 |
2:35
80 |
81 |
82 |
Loudmouth
83 |
Ramones
84 |
Ramones
85 |
2:14
86 |
87 |
88 |
Havana Affair
89 |
Ramones
90 |
Ramones
91 |
2:00
92 |
93 |
94 |
Listen to My Heart
95 |
Ramones
96 |
Ramones
97 |
1:56
98 |
99 |
100 |
53rd & 3rd
101 |
Ramones
102 |
Ramones
103 |
2:19
104 |
105 |
106 |
Let's Dance
107 |
Ramones
108 |
Ramones
109 |
1:51
110 |
111 |
112 |
I Don't Wanna Walk Around with You
113 |
Ramones
114 |
Ramones
115 |
1:43
116 |
117 |
118 |
Today Your Love, Tomorrow the World
119 |
Ramones
120 |
Ramones
121 |
2:09
122 |
123 |
124 |
--------------------------------------------------------------------------------
/src/client/app/tracks-page/tracks-page.spec.ts:
--------------------------------------------------------------------------------
1 | import {
2 | it,
3 | iit,
4 | describe,
5 | ddescribe,
6 | expect,
7 | inject,
8 | injectAsync,
9 | TestComponentBuilder,
10 | beforeEachProviders
11 | } from 'angular2/testing';
12 | import {provide} from 'angular2/core';
13 | import {TracksPage} from './tracks-page';
14 |
15 | describe('TracksPage Component', () => {
16 |
17 | beforeEachProviders((): any[] => []);
18 |
19 |
20 | it('should ...', injectAsync([TestComponentBuilder], (tcb:TestComponentBuilder) => {
21 | return tcb.createAsync(TracksPage).then((fixture) => {
22 | fixture.detectChanges();
23 | });
24 | }));
25 |
26 | });
27 |
--------------------------------------------------------------------------------
/src/client/app/tracks-page/tracks-page.ts:
--------------------------------------------------------------------------------
1 | import {Component} from 'angular2/core';
2 |
3 |
4 | @Component({
5 | selector: 'tracks-page',
6 | templateUrl: 'app/tracks-page/tracks-page.html',
7 | styleUrls: ['app/tracks-page/tracks-page.css'],
8 | providers: [],
9 | directives: [],
10 | pipes: []
11 | })
12 | export class TracksPage {
13 |
14 | constructor() {}
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/client/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AngularMVD/ng-music/4df1004586501e3b9c6f43e26e332734e126c1b5/src/client/favicon.ico
--------------------------------------------------------------------------------
/src/client/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Music
6 |
7 | {{content-for 'head'}}
8 |
9 |
10 |
11 |
12 |
23 |
24 |
25 | Loading...
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/src/client/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "declaration": false,
5 | "emitDecoratorMetadata": true,
6 | "experimentalDecorators": true,
7 | "mapRoot": "",
8 | "module": "system",
9 | "moduleResolution": "node",
10 | "noEmitOnError": true,
11 | "noImplicitAny": false,
12 | "outDir": "../dist/",
13 | "rootDir": ".",
14 | "sourceMap": true,
15 | "target": "es5",
16 | "inlineSources": true
17 | },
18 |
19 | "files": [
20 | "app.ts",
21 | "typings.d.ts"
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/src/client/typings.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "rulesDirectory": ["node_modules/codelyzer/dist/src"],
3 | "rules": {
4 | "max-line-length": [true, 100],
5 | "no-inferrable-types": true,
6 | "class-name": true,
7 | "comment-format": [
8 | true,
9 | "check-space"
10 | ],
11 | "indent": [
12 | true,
13 | "spaces"
14 | ],
15 | "eofline": true,
16 | "no-duplicate-variable": true,
17 | "no-eval": true,
18 | "no-arg": true,
19 | "no-internal-module": true,
20 | "no-trailing-whitespace": true,
21 | "no-bitwise": true,
22 | "no-shadowed-variable": true,
23 | "no-unused-expression": true,
24 | "no-unused-variable": true,
25 | "one-line": [
26 | true,
27 | "check-catch",
28 | "check-else",
29 | "check-open-brace",
30 | "check-whitespace"
31 | ],
32 | "quotemark": [
33 | true,
34 | "single",
35 | "avoid-escape"
36 | ],
37 | "semicolon": [true, "always"],
38 | "typedef-whitespace": [
39 | true,
40 | {
41 | "call-signature": "nospace",
42 | "index-signature": "nospace",
43 | "parameter": "nospace",
44 | "property-declaration": "nospace",
45 | "variable-declaration": "nospace"
46 | }
47 | ],
48 | "curly": true,
49 | "variable-name": [
50 | true,
51 | "ban-keywords",
52 | "check-format",
53 | "allow-trailing-underscore"
54 | ],
55 | "whitespace": [
56 | true,
57 | "check-branch",
58 | "check-decl",
59 | "check-operator",
60 | "check-separator",
61 | "check-type"
62 | ],
63 | "component-selector-name": [true, "kebab-case"],
64 | "component-selector-type": [true, "element"],
65 | "host-parameter-decorator": true,
66 | "input-parameter-decorator": true,
67 | "output-parameter-decorator": true,
68 | "attribute-parameter-decorator": true,
69 | "input-property-directive": true,
70 | "output-property-directive": true
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/typings.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {},
3 | "devDependencies": {},
4 | "ambientDevDependencies": {
5 | "angular-protractor": "github:DefinitelyTyped/DefinitelyTyped/angular-protractor/angular-protractor.d.ts#17fa1e5f269189f7f8e0f53f8c443e6c2eac562c",
6 | "jasmine": "github:DefinitelyTyped/DefinitelyTyped/jasmine/jasmine.d.ts#26c98c8a9530c44f8c801ccc3b2057e2101187ee",
7 | "selenium-webdriver": "github:DefinitelyTyped/DefinitelyTyped/selenium-webdriver/selenium-webdriver.d.ts#a83677ed13add14c2ab06c7325d182d0ba2784ea"
8 | },
9 | "ambientDependencies": {
10 | "es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#6697d6f7dadbf5773cb40ecda35a76027e0783b2"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------