using decorators to write AngularJS in nearly identical syntax to Angular 2

This commit is contained in:
alecmerdler 2017-02-17 02:55:52 -08:00 committed by Joseph Schorr
parent 8e863b8cf5
commit c60ce4a696
19 changed files with 559 additions and 488 deletions

View file

@ -0,0 +1,22 @@
import { PageServiceImpl } from './page.service.impl';
describe("Service: PageServiceImpl", () => {
var pageServiceImpl: PageServiceImpl;
beforeEach(() => {
pageServiceImpl = new PageServiceImpl();
});
describe("create", () => {
});
describe("get", () => {
});
describe("$get", () => {
});
});

View file

@ -0,0 +1,45 @@
import { Injectable } from 'angular-ts-decorators';
import { PageService } from './page.service';
@Injectable(PageService.name)
export class PageServiceImpl implements ng.IServiceProvider {
private pages: any = {};
constructor() {
}
public create(pageName: string,
templateName: string,
controller?: any,
flags: any = {},
profiles: string[] = ['old-layout', 'layout']): void {
for (var i = 0; i < profiles.length; ++i) {
this.pages[profiles[i] + ':' + pageName] = {
'name': pageName,
'controller': controller,
'templateName': templateName,
'flags': flags
};
}
}
public get(pageName: string, profiles: any[]): any[] | null {
for (var i = 0; i < profiles.length; ++i) {
var current = profiles[i];
var key = current.id + ':' + pageName;
var page = this.pages[key];
if (page) {
return [current, page];
}
}
return null;
}
public $get(): PageService {
return this;
}
}

View file

@ -0,0 +1,32 @@
/**
* Manages the creation and retrieval of pages (route + controller)
*/
export abstract class PageService implements ng.IServiceProvider {
/**
* Create a page.
* @param pageName The name of the page.
* @param templateName The file name of the template.
* @param controller Controller for the page.
* @param flags Additional flags passed to route provider.
* @param profiles Available profiles.
*/
public abstract create(pageName: string,
templateName: string,
controller?: any,
flags?: any,
profiles?: string[]): void;
/**
* Retrieve a registered page.
* @param pageName The name of the page.
* @param profiles Available profiles to search.
*/
public abstract get(pageName: string, profiles: any[]): any[] | null;
/**
* Provide the service instance.
* @return pageService The singleton service instance.
*/
public abstract $get(): PageService;
}

View file

@ -1,7 +1,9 @@
import { ViewArray } from './view-array';
import { Inject } from '../../decorators/inject/inject.decorator';
import { Injectable } from 'angular-ts-decorators';
@Injectable(ViewArray.name)
export class ViewArrayImpl implements ViewArray {
public entries: any[];