Commit b140204cebc77d486f82391954ba2cfd60a0afd0

Authored by Anan Sangthongtum
0 parents
Exists in master

.

README.md 0 โ†’ 100644
  1 +++ a/README.md
... ... @@ -0,0 +1,27 @@
  1 +# DemoEditer
  2 +
  3 +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.7.4.
  4 +
  5 +## Development server
  6 +
  7 +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
  8 +
  9 +## Code scaffolding
  10 +
  11 +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
  12 +
  13 +## Build
  14 +
  15 +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
  16 +
  17 +## Running unit tests
  18 +
  19 +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
  20 +
  21 +## Running end-to-end tests
  22 +
  23 +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
  24 +
  25 +## Further help
  26 +
  27 +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
... ...
e2e/app.e2e-spec.ts 0 โ†’ 100644
  1 +++ a/e2e/app.e2e-spec.ts
... ... @@ -0,0 +1,14 @@
  1 +import { AppPage } from './app.po';
  2 +
  3 +describe('demo-editer App', () => {
  4 + let page: AppPage;
  5 +
  6 + beforeEach(() => {
  7 + page = new AppPage();
  8 + });
  9 +
  10 + it('should display welcome message', () => {
  11 + page.navigateTo();
  12 + expect(page.getParagraphText()).toEqual('Welcome to app!');
  13 + });
  14 +});
... ...
e2e/app.po.ts 0 โ†’ 100644
  1 +++ a/e2e/app.po.ts
... ... @@ -0,0 +1,11 @@
  1 +import { browser, by, element } from 'protractor';
  2 +
  3 +export class AppPage {
  4 + navigateTo() {
  5 + return browser.get('/');
  6 + }
  7 +
  8 + getParagraphText() {
  9 + return element(by.css('app-root h1')).getText();
  10 + }
  11 +}
... ...
e2e/tsconfig.e2e.json 0 โ†’ 100644
  1 +++ a/e2e/tsconfig.e2e.json
... ... @@ -0,0 +1,14 @@
  1 +{
  2 + "extends": "../tsconfig.json",
  3 + "compilerOptions": {
  4 + "outDir": "../out-tsc/e2e",
  5 + "baseUrl": "./",
  6 + "module": "commonjs",
  7 + "target": "es5",
  8 + "types": [
  9 + "jasmine",
  10 + "jasminewd2",
  11 + "node"
  12 + ]
  13 + }
  14 +}
... ...
karma.conf.js 0 โ†’ 100644
  1 +++ a/karma.conf.js
... ... @@ -0,0 +1,33 @@
  1 +// Karma configuration file, see link for more information
  2 +// https://karma-runner.github.io/1.0/config/configuration-file.html
  3 +
  4 +module.exports = function (config) {
  5 + config.set({
  6 + basePath: '',
  7 + frameworks: ['jasmine', '@angular/cli'],
  8 + plugins: [
  9 + require('karma-jasmine'),
  10 + require('karma-chrome-launcher'),
  11 + require('karma-jasmine-html-reporter'),
  12 + require('karma-coverage-istanbul-reporter'),
  13 + require('@angular/cli/plugins/karma')
  14 + ],
  15 + client:{
  16 + clearContext: false // leave Jasmine Spec Runner output visible in browser
  17 + },
  18 + coverageIstanbulReporter: {
  19 + reports: [ 'html', 'lcovonly' ],
  20 + fixWebpackSourcePaths: true
  21 + },
  22 + angularCli: {
  23 + environment: 'dev'
  24 + },
  25 + reporters: ['progress', 'kjhtml'],
  26 + port: 9876,
  27 + colors: true,
  28 + logLevel: config.LOG_INFO,
  29 + autoWatch: true,
  30 + browsers: ['Chrome'],
  31 + singleRun: false
  32 + });
  33 +};
... ...
package.json 0 โ†’ 100644
  1 +++ a/package.json
... ... @@ -0,0 +1,52 @@
  1 +{
  2 + "name": "demo-editer",
  3 + "version": "0.0.0",
  4 + "license": "MIT",
  5 + "scripts": {
  6 + "ng": "ng",
  7 + "start": "ng serve",
  8 + "build": "ng build --prod",
  9 + "test": "ng test",
  10 + "lint": "ng lint",
  11 + "e2e": "ng e2e"
  12 + },
  13 + "private": true,
  14 + "dependencies": {
  15 + "@angular/animations": "^5.2.0",
  16 + "@angular/common": "^5.2.0",
  17 + "@angular/compiler": "^5.2.0",
  18 + "@angular/core": "^5.2.0",
  19 + "@angular/forms": "^5.2.0",
  20 + "@angular/http": "^5.2.0",
  21 + "@angular/platform-browser": "^5.2.0",
  22 + "@angular/platform-browser-dynamic": "^5.2.0",
  23 + "@angular/router": "^5.2.0",
  24 + "@tinymce/tinymce-angular": "^2.0.0",
  25 + "angular-froala-wysiwyg": "^2.8.4-1",
  26 + "core-js": "^2.4.1",
  27 + "font-awesome": "^4.7.0",
  28 + "jquery": "^3.3.1",
  29 + "rxjs": "^5.5.6",
  30 + "zone.js": "^0.8.19"
  31 + },
  32 + "devDependencies": {
  33 + "@angular/cli": "~1.7.4",
  34 + "@angular/compiler-cli": "^5.2.0",
  35 + "@angular/language-service": "^5.2.0",
  36 + "@types/jasmine": "~2.8.3",
  37 + "@types/jasminewd2": "~2.0.2",
  38 + "@types/node": "~6.0.60",
  39 + "codelyzer": "^4.0.1",
  40 + "jasmine-core": "~2.8.0",
  41 + "jasmine-spec-reporter": "~4.2.1",
  42 + "karma": "~2.0.0",
  43 + "karma-chrome-launcher": "~2.2.0",
  44 + "karma-coverage-istanbul-reporter": "^1.2.1",
  45 + "karma-jasmine": "~1.1.0",
  46 + "karma-jasmine-html-reporter": "^0.2.2",
  47 + "protractor": "~5.1.2",
  48 + "ts-node": "~4.1.0",
  49 + "tslint": "~5.9.1",
  50 + "typescript": "~2.5.3"
  51 + }
  52 +}
... ...
protractor.conf.js 0 โ†’ 100644
  1 +++ a/protractor.conf.js
... ... @@ -0,0 +1,28 @@
  1 +// Protractor configuration file, see link for more information
  2 +// https://github.com/angular/protractor/blob/master/lib/config.ts
  3 +
  4 +const { SpecReporter } = require('jasmine-spec-reporter');
  5 +
  6 +exports.config = {
  7 + allScriptsTimeout: 11000,
  8 + specs: [
  9 + './e2e/**/*.e2e-spec.ts'
  10 + ],
  11 + capabilities: {
  12 + 'browserName': 'chrome'
  13 + },
  14 + directConnect: true,
  15 + baseUrl: 'http://localhost:4200/',
  16 + framework: 'jasmine',
  17 + jasmineNodeOpts: {
  18 + showColors: true,
  19 + defaultTimeoutInterval: 30000,
  20 + print: function() {}
  21 + },
  22 + onPrepare() {
  23 + require('ts-node').register({
  24 + project: 'e2e/tsconfig.e2e.json'
  25 + });
  26 + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
  27 + }
  28 +};
... ...
src/app/app.component.css 0 โ†’ 100644
  1 +++ a/src/app/app.component.css
... ...
src/app/app.component.html 0 โ†’ 100644
  1 +++ a/src/app/app.component.html
... ... @@ -0,0 +1,6 @@
  1 +<nav>
  2 + <a routerLink="/tinymce" routerLinkActive="active">tinymce</a>
  3 + <a routerLink="/froala" routerLinkActive="active">froala</a>
  4 +</nav>
  5 +
  6 + <router-outlet></router-outlet>
... ...
src/app/app.component.spec.ts 0 โ†’ 100644
  1 +++ a/src/app/app.component.spec.ts
... ... @@ -0,0 +1,27 @@
  1 +import { TestBed, async } from '@angular/core/testing';
  2 +import { AppComponent } from './app.component';
  3 +describe('AppComponent', () => {
  4 + beforeEach(async(() => {
  5 + TestBed.configureTestingModule({
  6 + declarations: [
  7 + AppComponent
  8 + ],
  9 + }).compileComponents();
  10 + }));
  11 + it('should create the app', async(() => {
  12 + const fixture = TestBed.createComponent(AppComponent);
  13 + const app = fixture.debugElement.componentInstance;
  14 + expect(app).toBeTruthy();
  15 + }));
  16 + it(`should have as title 'app'`, async(() => {
  17 + const fixture = TestBed.createComponent(AppComponent);
  18 + const app = fixture.debugElement.componentInstance;
  19 + expect(app.title).toEqual('app');
  20 + }));
  21 + it('should render title in a h1 tag', async(() => {
  22 + const fixture = TestBed.createComponent(AppComponent);
  23 + fixture.detectChanges();
  24 + const compiled = fixture.debugElement.nativeElement;
  25 + expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');
  26 + }));
  27 +});
... ...
src/app/app.component.ts 0 โ†’ 100644
  1 +++ a/src/app/app.component.ts
... ... @@ -0,0 +1,10 @@
  1 +import { Component } from '@angular/core';
  2 +
  3 +@Component({
  4 + selector: 'app-root',
  5 + templateUrl: './app.component.html',
  6 + styleUrls: ['./app.component.css']
  7 +})
  8 +export class AppComponent {
  9 + title = 'app';
  10 +}
... ...
src/app/app.module.ts 0 โ†’ 100644
  1 +++ a/src/app/app.module.ts
... ... @@ -0,0 +1,40 @@
  1 +import { BrowserModule } from '@angular/platform-browser';
  2 +import { NgModule } from '@angular/core';
  3 +
  4 +
  5 +import { AppComponent } from './app.component';
  6 +import { RouterModule, Routes } from '@angular/router';
  7 +import { TinymceComponent } from './components/tinymce.component';
  8 +import { FroalaComponent } from './components/froala.component';
  9 +import { PageNotFoundComponent } from './components/pageNotFound.component';
  10 +import { EditorModule } from '@tinymce/tinymce-angular';
  11 +import { FroalaEditorModule, FroalaViewModule } from 'angular-froala-wysiwyg';
  12 +import { FormsModule } from '@angular/forms';
  13 +const appRoutes: Routes = [
  14 + { path: '', component: TinymceComponent },
  15 + { path: 'tinymce', component: TinymceComponent },
  16 + { path: 'froala', component: FroalaComponent },
  17 + { path: '**', component: PageNotFoundComponent }
  18 +];
  19 +
  20 +@NgModule({
  21 + declarations: [
  22 + AppComponent,
  23 + TinymceComponent,
  24 + FroalaComponent,
  25 + PageNotFoundComponent
  26 + ],
  27 + imports: [
  28 + FormsModule,
  29 + FroalaEditorModule.forRoot(), FroalaViewModule.forRoot(),
  30 + EditorModule,
  31 + RouterModule.forRoot(
  32 + appRoutes,
  33 + { enableTracing: true } // <-- debugging purposes only
  34 + ),
  35 + BrowserModule
  36 + ],
  37 + providers: [],
  38 + bootstrap: [AppComponent]
  39 +})
  40 +export class AppModule { }
... ...
src/app/components/froala.component.ts 0 โ†’ 100644
  1 +++ a/src/app/components/froala.component.ts
... ... @@ -0,0 +1,14 @@
  1 +import { Component } from '@angular/core';
  2 +
  3 +@Component({
  4 + template: `<h2>Froala Two way Binding</h2>
  5 +
  6 + <div [froalaEditor] [(froalaModel)]="dataModel"></div>
  7 +
  8 +
  9 + {{dataModel}}
  10 + `
  11 +})
  12 +export class FroalaComponent {
  13 + dataModel:string = `<p>36aaaaa</p><table style="width: 100%;"><thead><tr><th><br></th><th><br></th><th><br></th><th><br></th><th><br></th><th><br></th><th><br></th><th><br></th></tr></thead><tbody><tr><td class="fr-highlighted" style="width: 7.1891%; background-color: rgb(235, 107, 86);"><br></td><td class="fr-highlighted" style="width: 7.1891%; background-color: rgb(184, 49, 47);"><br></td><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td colspan="2" style="width: 14.2857%;"><br></td><td style="width: 14.2857%;"><table style="width: 100%;"><tbody><tr><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td></tr><tr><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td><td style="width: 16.6667%;"><br></td></tr></tbody></table><br></td><td style="width: 14.2857%; background-color: rgb(61, 142, 185);"><br></td><td style="width: 14.2857%; background-color: rgb(84, 172, 210);">aaa</td><td style="width: 14.2857%;"><br></td><td style="width: 14.2857%;"><br></td><td style="width: 14.2857%;"><br></td></tr><tr><td colspan="2" style="width: 14.2857%;">aa</td><td class="fr-highlighted" style="width: 14.2857%; text-align: right;">aa</td><td style="width: 14.2857%;">aa</td><td style="width: 14.2857%;">aaa</td><td style="width: 14.2857%;"><br></td><td style="width: 14.2857%;"><br></td><td style="width: 14.2857%;"><br></td></tr><tr><td colspan="2" style="width: 14.2857%;">aa</td><td style="width: 14.2857%;">aa</td><td style="width: 14.2857%; background-color: rgb(84, 172, 210);">aa</td><td style="width: 14.2857%;">aaa</td><td style="width: 14.2857%;"><br></td><td style="width: 14.2857%;"><br></td><td style="width: 14.2857%;"><br></td></tr></tbody></table><h1>test</h1><p><span style="font-size: 20px; color: red;">sdasdasdasd</span></p>`
  14 +}
... ...
src/app/components/pageNotFound.component.ts 0 โ†’ 100644
  1 +++ a/src/app/components/pageNotFound.component.ts
... ... @@ -0,0 +1,6 @@
  1 +import { Component } from '@angular/core';
  2 +
  3 +@Component({
  4 + template: '<h2>Page not found</h2>'
  5 +})
  6 +export class PageNotFoundComponent {}
... ...
src/app/components/tinymce.component.ts 0 โ†’ 100644
  1 +++ a/src/app/components/tinymce.component.ts
... ... @@ -0,0 +1,30 @@
  1 +import { Component } from '@angular/core';
  2 +
  3 +@Component({
  4 + template: `
  5 + <h2>Tiny Mce Two way Binding</h2>
  6 + <editor apiKey="uzbt478yqnylj2r2q44eh97rvsqmppn53wr58akhlurwzav9" [init]="init" [(ngModel)]="dataModel" cloudChannel="dev"></editor>
  7 +
  8 +
  9 + {{dataModel}}
  10 + `
  11 +})
  12 +export class TinymceComponent {
  13 + dataModel:string = `<!DOCTYPE html> <html> <head> </head> <body> <p><span style="background-color: #000080; color: #33cccc;"><strong><span style="text-decoration: underline;">sdsdsd</span></strong></span></p> <p>&nbsp;</p> <table style="border-collapse: collapse; width: 54.9891%; height: 149px;" border="1"> <tbody> <tr style="height: 49px; background-color: #8b32cf; border-color: #6231bd;"> <td style="width: 20%; height: 49px;">sadas <table style="border-collapse: collapse; width: 100%;" border="1"> <tbody> <tr> <td style="width: 33.3333%;">&nbsp;</td> <td style="width: 33.3333%;">&nbsp;</td> <td style="width: 33.3333%; background-color: #14b343;">&nbsp;</td> </tr> <tr> <td style="width: 33.3333%;">&nbsp;</td> <td style="width: 33.3333%;">&nbsp;</td> <td style="width: 33.3333%;">&nbsp;</td> </tr> <tr> <td style="width: 33.3333%;">&nbsp;</td> <td style="width: 33.3333%;">&nbsp;</td> <td style="width: 33.3333%;">&nbsp;</td> </tr> </tbody> </table> </td> <td style="width: 20%; height: 49px;"><span style="background-color: #008080;">asdas</span></td> <td style="width: 20%; height: 49px;"><span style="color: #ccffff;">asdasasd</span></td> <td style="width: 20%; height: 49px;">&nbsp;</td> <td style="width: 20%; height: 49px;">&nbsp;</td> </tr> <tr style="height: 49px;"> <td style="width: 20%; height: 49px;"><span style="background-color: #003300;">asd</span></td> <td style="width: 20%; height: 49px;">&nbsp;</td> <td style="width: 20%; height: 49px;">asdasd</td> <td style="width: 20%; height: 49px;">&nbsp;</td> <td style="width: 20%; height: 49px;">asdas</td> </tr> <tr style="height: 49px;"> <td style="width: 20%; height: 49px;">asdasd</td> <td style="width: 20%; height: 49px;">dasd</td> <td style="width: 20%; height: 49px;">asda</td> <td style="width: 20%; height: 49px;">&nbsp;</td> <td style="width: 20%; height: 49px;">&nbsp;</td> </tr> <tr style="height: 49px;"> <td style="width: 20%; height: 49px;">&nbsp;</td> <td style="width: 20%; height: 49px;">&nbsp;</td> <td style="width: 20%; height: 49px;">&nbsp;</td> <td style="width: 20%; height: 49px;">sdasd</td> <td style="width: 20%; height: 49px;">asd</td> </tr> </tbody> </table> <p>&nbsp;</p> <ol> <li>123asdasd</li> <li>123</li> <li>asd123</li> <li>123</li> <li>123</li> </ol> </body> </html>`
  14 + init:any = {
  15 + selector: 'textarea',
  16 + height: 500,
  17 + theme: 'modern',
  18 + plugins: 'print preview fullpage powerpaste searchreplace autolink directionality advcode visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor toc insertdatetime advlist lists textcolor wordcount tinymcespellchecker a11ychecker imagetools mediaembed linkchecker contextmenu colorpicker textpattern help',
  19 + toolbar1: 'formatselect | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat',
  20 + image_advtab: true,
  21 + templates: [
  22 + { title: 'Test template 1', content: 'Test 1' },
  23 + { title: 'Test template 2', content: 'Test 2' }
  24 + ],
  25 + content_css: [
  26 + '//fonts.googleapis.com/css?family=Lato:300,300i,400,400i',
  27 + '//www.tinymce.com/css/codepen.min.css'
  28 + ]
  29 + }
  30 +}
... ...
src/assets/.gitkeep 0 โ†’ 100644
  1 +++ a/src/assets/.gitkeep
... ...
src/environments/environment.prod.ts 0 โ†’ 100644
  1 +++ a/src/environments/environment.prod.ts
... ... @@ -0,0 +1,3 @@
  1 +export const environment = {
  2 + production: true
  3 +};
... ...
src/environments/environment.ts 0 โ†’ 100644
  1 +++ a/src/environments/environment.ts
... ... @@ -0,0 +1,8 @@
  1 +// The file contents for the current environment will overwrite these during build.
  2 +// The build system defaults to the dev environment which uses `environment.ts`, but if you do
  3 +// `ng build --env=prod` then `environment.prod.ts` will be used instead.
  4 +// The list of which env maps to which file can be found in `.angular-cli.json`.
  5 +
  6 +export const environment = {
  7 + production: false
  8 +};
... ...
src/favicon.ico 0 โ†’ 100644
No preview for this file type
src/index.html 0 โ†’ 100644
  1 +++ a/src/index.html
... ... @@ -0,0 +1,14 @@
  1 +<!doctype html>
  2 +<html lang="en">
  3 +<head>
  4 + <meta charset="utf-8">
  5 + <title>DemoEditer</title>
  6 + <base href="/">
  7 +
  8 + <meta name="viewport" content="width=device-width, initial-scale=1">
  9 + <link rel="icon" type="image/x-icon" href="favicon.ico">
  10 +</head>
  11 +<body>
  12 + <app-root></app-root>
  13 +</body>
  14 +</html>
... ...
src/main.ts 0 โ†’ 100644
  1 +++ a/src/main.ts
... ... @@ -0,0 +1,12 @@
  1 +import { enableProdMode } from '@angular/core';
  2 +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
  3 +
  4 +import { AppModule } from './app/app.module';
  5 +import { environment } from './environments/environment';
  6 +
  7 +if (environment.production) {
  8 + enableProdMode();
  9 +}
  10 +
  11 +platformBrowserDynamic().bootstrapModule(AppModule)
  12 + .catch(err => console.log(err));
... ...
src/polyfills.ts 0 โ†’ 100644
  1 +++ a/src/polyfills.ts
... ... @@ -0,0 +1,79 @@
  1 +/**
  2 + * This file includes polyfills needed by Angular and is loaded before the app.
  3 + * You can add your own extra polyfills to this file.
  4 + *
  5 + * This file is divided into 2 sections:
  6 + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
  7 + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
  8 + * file.
  9 + *
  10 + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
  11 + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
  12 + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
  13 + *
  14 + * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
  15 + */
  16 +
  17 +/***************************************************************************************************
  18 + * BROWSER POLYFILLS
  19 + */
  20 +
  21 +/** IE9, IE10 and IE11 requires all of the following polyfills. **/
  22 +// import 'core-js/es6/symbol';
  23 +// import 'core-js/es6/object';
  24 +// import 'core-js/es6/function';
  25 +// import 'core-js/es6/parse-int';
  26 +// import 'core-js/es6/parse-float';
  27 +// import 'core-js/es6/number';
  28 +// import 'core-js/es6/math';
  29 +// import 'core-js/es6/string';
  30 +// import 'core-js/es6/date';
  31 +// import 'core-js/es6/array';
  32 +// import 'core-js/es6/regexp';
  33 +// import 'core-js/es6/map';
  34 +// import 'core-js/es6/weak-map';
  35 +// import 'core-js/es6/set';
  36 +
  37 +/** IE10 and IE11 requires the following for NgClass support on SVG elements */
  38 +// import 'classlist.js'; // Run `npm install --save classlist.js`.
  39 +
  40 +/** IE10 and IE11 requires the following for the Reflect API. */
  41 +// import 'core-js/es6/reflect';
  42 +
  43 +
  44 +/** Evergreen browsers require these. **/
  45 +// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
  46 +import 'core-js/es7/reflect';
  47 +
  48 +
  49 +/**
  50 + * Required to support Web Animations `@angular/platform-browser/animations`.
  51 + * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
  52 + **/
  53 +// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
  54 +
  55 +/**
  56 + * By default, zone.js will patch all possible macroTask and DomEvents
  57 + * user can disable parts of macroTask/DomEvents patch by setting following flags
  58 + */
  59 +
  60 + // (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
  61 + // (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
  62 + // (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
  63 +
  64 + /*
  65 + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
  66 + * with the following flag, it will bypass `zone.js` patch for IE/Edge
  67 + */
  68 +// (window as any).__Zone_enable_cross_context_check = true;
  69 +
  70 +/***************************************************************************************************
  71 + * Zone JS is required by default for Angular itself.
  72 + */
  73 +import 'zone.js/dist/zone'; // Included with Angular CLI.
  74 +
  75 +
  76 +
  77 +/***************************************************************************************************
  78 + * APPLICATION IMPORTS
  79 + */
... ...
src/styles.css 0 โ†’ 100644
  1 +++ a/src/styles.css
... ... @@ -0,0 +1 @@
  1 +/* You can add global styles to this file, and also import other style files */
... ...
src/test.ts 0 โ†’ 100644
  1 +++ a/src/test.ts
... ... @@ -0,0 +1,20 @@
  1 +// This file is required by karma.conf.js and loads recursively all the .spec and framework files
  2 +
  3 +import 'zone.js/dist/zone-testing';
  4 +import { getTestBed } from '@angular/core/testing';
  5 +import {
  6 + BrowserDynamicTestingModule,
  7 + platformBrowserDynamicTesting
  8 +} from '@angular/platform-browser-dynamic/testing';
  9 +
  10 +declare const require: any;
  11 +
  12 +// First, initialize the Angular testing environment.
  13 +getTestBed().initTestEnvironment(
  14 + BrowserDynamicTestingModule,
  15 + platformBrowserDynamicTesting()
  16 +);
  17 +// Then we find all the tests.
  18 +const context = require.context('./', true, /\.spec\.ts$/);
  19 +// And load the modules.
  20 +context.keys().map(context);
... ...
src/tsconfig.app.json 0 โ†’ 100644
  1 +++ a/src/tsconfig.app.json
... ... @@ -0,0 +1,13 @@
  1 +{
  2 + "extends": "../tsconfig.json",
  3 + "compilerOptions": {
  4 + "outDir": "../out-tsc/app",
  5 + "baseUrl": "./",
  6 + "module": "es2015",
  7 + "types": []
  8 + },
  9 + "exclude": [
  10 + "test.ts",
  11 + "**/*.spec.ts"
  12 + ]
  13 +}
... ...
src/tsconfig.spec.json 0 โ†’ 100644
  1 +++ a/src/tsconfig.spec.json
... ... @@ -0,0 +1,19 @@
  1 +{
  2 + "extends": "../tsconfig.json",
  3 + "compilerOptions": {
  4 + "outDir": "../out-tsc/spec",
  5 + "baseUrl": "./",
  6 + "module": "commonjs",
  7 + "types": [
  8 + "jasmine",
  9 + "node"
  10 + ]
  11 + },
  12 + "files": [
  13 + "test.ts"
  14 + ],
  15 + "include": [
  16 + "**/*.spec.ts",
  17 + "**/*.d.ts"
  18 + ]
  19 +}
... ...
src/typings.d.ts 0 โ†’ 100644
  1 +++ a/src/typings.d.ts
... ... @@ -0,0 +1,5 @@
  1 +/* SystemJS module definition */
  2 +declare var module: NodeModule;
  3 +interface NodeModule {
  4 + id: string;
  5 +}
... ...
tsconfig.json 0 โ†’ 100644
  1 +++ a/tsconfig.json
... ... @@ -0,0 +1,19 @@
  1 +{
  2 + "compileOnSave": false,
  3 + "compilerOptions": {
  4 + "outDir": "./dist/out-tsc",
  5 + "sourceMap": true,
  6 + "declaration": false,
  7 + "moduleResolution": "node",
  8 + "emitDecoratorMetadata": true,
  9 + "experimentalDecorators": true,
  10 + "target": "es5",
  11 + "typeRoots": [
  12 + "node_modules/@types"
  13 + ],
  14 + "lib": [
  15 + "es2017",
  16 + "dom"
  17 + ]
  18 + }
  19 +}
... ...
tslint.json 0 โ†’ 100644
  1 +++ a/tslint.json
... ... @@ -0,0 +1,143 @@
  1 +{
  2 + "rulesDirectory": [
  3 + "node_modules/codelyzer"
  4 + ],
  5 + "rules": {
  6 + "arrow-return-shorthand": true,
  7 + "callable-types": true,
  8 + "class-name": true,
  9 + "comment-format": [
  10 + true,
  11 + "check-space"
  12 + ],
  13 + "curly": true,
  14 + "deprecation": {
  15 + "severity": "warn"
  16 + },
  17 + "eofline": true,
  18 + "forin": true,
  19 + "import-blacklist": [
  20 + true,
  21 + "rxjs",
  22 + "rxjs/Rx"
  23 + ],
  24 + "import-spacing": true,
  25 + "indent": [
  26 + true,
  27 + "spaces"
  28 + ],
  29 + "interface-over-type-literal": true,
  30 + "label-position": true,
  31 + "max-line-length": [
  32 + true,
  33 + 140
  34 + ],
  35 + "member-access": false,
  36 + "member-ordering": [
  37 + true,
  38 + {
  39 + "order": [
  40 + "static-field",
  41 + "instance-field",
  42 + "static-method",
  43 + "instance-method"
  44 + ]
  45 + }
  46 + ],
  47 + "no-arg": true,
  48 + "no-bitwise": true,
  49 + "no-console": [
  50 + true,
  51 + "debug",
  52 + "info",
  53 + "time",
  54 + "timeEnd",
  55 + "trace"
  56 + ],
  57 + "no-construct": true,
  58 + "no-debugger": true,
  59 + "no-duplicate-super": true,
  60 + "no-empty": false,
  61 + "no-empty-interface": true,
  62 + "no-eval": true,
  63 + "no-inferrable-types": [
  64 + true,
  65 + "ignore-params"
  66 + ],
  67 + "no-misused-new": true,
  68 + "no-non-null-assertion": true,
  69 + "no-shadowed-variable": true,
  70 + "no-string-literal": false,
  71 + "no-string-throw": true,
  72 + "no-switch-case-fall-through": true,
  73 + "no-trailing-whitespace": true,
  74 + "no-unnecessary-initializer": true,
  75 + "no-unused-expression": true,
  76 + "no-use-before-declare": true,
  77 + "no-var-keyword": true,
  78 + "object-literal-sort-keys": false,
  79 + "one-line": [
  80 + true,
  81 + "check-open-brace",
  82 + "check-catch",
  83 + "check-else",
  84 + "check-whitespace"
  85 + ],
  86 + "prefer-const": true,
  87 + "quotemark": [
  88 + true,
  89 + "single"
  90 + ],
  91 + "radix": true,
  92 + "semicolon": [
  93 + true,
  94 + "always"
  95 + ],
  96 + "triple-equals": [
  97 + true,
  98 + "allow-null-check"
  99 + ],
  100 + "typedef-whitespace": [
  101 + true,
  102 + {
  103 + "call-signature": "nospace",
  104 + "index-signature": "nospace",
  105 + "parameter": "nospace",
  106 + "property-declaration": "nospace",
  107 + "variable-declaration": "nospace"
  108 + }
  109 + ],
  110 + "unified-signatures": true,
  111 + "variable-name": false,
  112 + "whitespace": [
  113 + true,
  114 + "check-branch",
  115 + "check-decl",
  116 + "check-operator",
  117 + "check-separator",
  118 + "check-type"
  119 + ],
  120 + "directive-selector": [
  121 + true,
  122 + "attribute",
  123 + "app",
  124 + "camelCase"
  125 + ],
  126 + "component-selector": [
  127 + true,
  128 + "element",
  129 + "app",
  130 + "kebab-case"
  131 + ],
  132 + "no-output-on-prefix": true,
  133 + "use-input-property-decorator": true,
  134 + "use-output-property-decorator": true,
  135 + "use-host-property-decorator": true,
  136 + "no-input-rename": true,
  137 + "no-output-rename": true,
  138 + "use-life-cycle-interface": true,
  139 + "use-pipe-transform-interface": true,
  140 + "component-class-suffix": true,
  141 + "directive-class-suffix": true
  142 + }
  143 +}
... ...