├── .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 |
2 | 7 |
-------------------------------------------------------------------------------- /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 |
3 | 12 |
13 | 14 |
15 |
16 | Pick an album 17 |
18 |
19 |
20 |
21 | 22 |
23 |
-------------------------------------------------------------------------------- /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 |
22 |
23 |
24 | 25 |
26 |
27 |
-------------------------------------------------------------------------------- /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 |
2 |
3 | 4 |
5 |
6 |
TRACKS
7 |
Ramones
8 |
Ramones
9 |
10 | 11 | 12 | 13 |
14 |
15 |
16 |
17 |
FOLLOWERS
18 |
172,229
19 |
20 |
21 |
22 |
23 |
24 |
25 | Created by: Iran Reyes 26 | - 27 | 67 songs, 28 | 4 hr 28 min 29 |
30 |
31 |
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 |
2 | 7 |
-------------------------------------------------------------------------------- /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 |
3 | 12 |
13 | 14 |
15 |
16 | Pick an album 17 |
18 |
19 |
20 |
21 | 22 |
23 |
-------------------------------------------------------------------------------- /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 |
22 |
23 |
24 | 25 |
26 |
27 |
-------------------------------------------------------------------------------- /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 |
2 |
3 | 4 |
5 |
6 |
TRACKS
7 |
Ramones
8 |
Ramones
9 |
10 | 11 | 12 | 13 |
14 |
15 |
16 |
17 |
FOLLOWERS
18 |
172,229
19 |
20 |
21 |
22 |
23 |
24 |
25 | Created by: Iran Reyes 26 | - 27 | 67 songs, 28 | 4 hr 28 min 29 |
30 |
31 |
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 | --------------------------------------------------------------------------------