From ba1791b9b595a6d08fa7b2104a61b820877b3013 Mon Sep 17 00:00:00 2001 From: darlin Date: Thu, 19 Jan 2017 19:44:26 +0800 Subject: [PATCH 1/8] add simplemde --- package.json | 2 ++ src/app/app.module.ts | 21 +++++++++++++++++++ .../comment/comment.template.html | 5 +++-- src/app/share/index.ts | 5 ++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 98ec691..e1e56a5 100644 --- a/package.json +++ b/package.json @@ -75,8 +75,10 @@ "marked": "^0.3.6", "moment": "^2.17.1", "ng2-clip": "1.0.0-beta.1", + "ng2-simplemde": "^1.0.0-alpha.0", "ng2-translate": "^5.0.0", "rxjs": "~5.0.3", + "simplemde": "^1.11.2", "zone.js": "~0.7.6" }, "devDependencies": { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index d6e77f6..48c472d 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -17,6 +17,10 @@ import { createNewHosts, createInputTransfer } from '@angularclass/hmr' +import { + SimplemdeModule, + SIMPLEMDE_CONFIG +} from 'ng2-simplemde' import { AppStore } from './app.store' import { ShareModule } from './share' @@ -59,6 +63,23 @@ export function translateFactory(http: Http) { useFactory: translateFactory, deps: [Http] }), + SimplemdeModule.forRoot({ + provide: SIMPLEMDE_CONFIG, + useValue: { + toolbar: [ + 'bold', + 'italic', + 'heading', + 'quote', + 'unordered-list', + 'ordered-list', + '|', + 'image', + 'link' + ], + status: false + } + }), MdButtonModule.forRoot() ], providers: [ diff --git a/src/app/article/declarations/comment/comment.template.html b/src/app/article/declarations/comment/comment.template.html index ea86f71..6c28586 100644 --- a/src/app/article/declarations/comment/comment.template.html +++ b/src/app/article/declarations/comment/comment.template.html @@ -62,8 +62,9 @@
- + +
diff --git a/src/app/share/index.ts b/src/app/share/index.ts index f3cccba..7682f46 100644 --- a/src/app/share/index.ts +++ b/src/app/share/index.ts @@ -18,6 +18,7 @@ import { MdButtonModule } from '@angular/material/button' import { IconModule } from './icon' import { ClipModule } from 'ng2-clip' import { SortablejsModule } from 'angular-sortablejs' +import { SimplemdeModule } from 'ng2-simplemde' import { components, @@ -41,7 +42,8 @@ import { IconModule, ClipModule, TranslateModule, - SortablejsModule + SortablejsModule, + SimplemdeModule ], exports: [ FormsModule, @@ -55,6 +57,7 @@ import { ClipModule, TranslateModule, SortablejsModule, + SimplemdeModule, ...components, ...pipes, From 1e229197a089778246ef5a08d7eb2fed989b3b5d Mon Sep 17 00:00:00 2001 From: darlin Date: Thu, 19 Jan 2017 22:21:52 +0800 Subject: [PATCH 2/8] optimize simplemde --- package.json | 22 ++++----- src/app/app.module.ts | 45 +++++++++++++------ .../declarations/comment/comment.component.ts | 16 ++++++- .../comment/comment.template.html | 7 +-- src/app/base/styles/global.less | 9 ++++ src/app/base/utils/fullscreen.ts | 44 ++++++++++++++++++ 6 files changed, 114 insertions(+), 29 deletions(-) create mode 100644 src/app/base/utils/fullscreen.ts diff --git a/package.json b/package.json index e1e56a5..8f1c460 100644 --- a/package.json +++ b/package.json @@ -54,15 +54,15 @@ "ngc": "./node_modules/.bin/ngc-w -p tsconfig.aot.json" }, "dependencies": { - "@angular/common": "^2.4.3", - "@angular/compiler": "^2.4.3", - "@angular/core": "^2.4.3", - "@angular/forms": "^2.4.3", - "@angular/http": "^2.4.3", + "@angular/common": "^2.4.4", + "@angular/compiler": "^2.4.4", + "@angular/core": "^2.4.4", + "@angular/forms": "^2.4.4", + "@angular/http": "^2.4.4", "@angular/material": "^2.0.0-beta.1", - "@angular/platform-browser": "^2.4.3", - "@angular/platform-browser-dynamic": "^2.4.3", - "@angular/router": "^3.4.3", + "@angular/platform-browser": "^2.4.4", + "@angular/platform-browser-dynamic": "^2.4.4", + "@angular/router": "^3.4.4", "@angularclass/hmr": "^1.2.2", "@types/whatwg-fetch": "^0.0.33", "angular-sortablejs": "^1.3.1", @@ -75,14 +75,14 @@ "marked": "^0.3.6", "moment": "^2.17.1", "ng2-clip": "1.0.0-beta.1", - "ng2-simplemde": "^1.0.0-alpha.0", + "ng2-simplemde": "^1.0.0-beta.1", "ng2-translate": "^5.0.0", "rxjs": "~5.0.3", "simplemde": "^1.11.2", "zone.js": "~0.7.6" }, "devDependencies": { - "@angular/compiler-cli": "^2.4.3", + "@angular/compiler-cli": "^2.4.4", "@angularclass/hmr-loader": "^3.0.2", "@types/core-js": "^0.9.35", "@types/crypto-js": "^3.1.32", @@ -131,7 +131,7 @@ "sass-loader": "^4.1.1", "source-map-loader": "^0.1.6", "style-loader": "^0.13.1", - "svg-sprite-loader": "0.1.2", + "svg-sprite-loader": "0.2.0", "ts-helpers": "1.1.2", "ts-loader": "^1.3.3", "ts-node": "^2.0.0", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 48c472d..cd6b0f6 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -36,11 +36,41 @@ import { pipes, directives } from './declarations' +import { toggleFullscreen } from 'app/base/utils/fullscreen' export function translateFactory(http: Http) { return new TranslateStaticLoader(http, '/assets/i18n', '.json') } +export function fullscreenAction(editor) { + const dom = editor.element.parentNode + toggleFullscreen(dom) + editor.codemirror.focus() +} + +export function simplemdeValue() { + return { + toolbar: [ + 'bold', + 'italic', + 'heading', + 'quote', + 'unordered-list', + 'ordered-list', + '|', + 'image', + 'link', + { + name: 'fullscreen', + action: fullscreenAction, + className: 'fa fa-arrows-alt no-disable no-mobile', + title: 'Toggle Fullscreen' + } + ], + status: false + } +} + @NgModule({ bootstrap: [ RootAppComponent @@ -65,20 +95,7 @@ export function translateFactory(http: Http) { }), SimplemdeModule.forRoot({ provide: SIMPLEMDE_CONFIG, - useValue: { - toolbar: [ - 'bold', - 'italic', - 'heading', - 'quote', - 'unordered-list', - 'ordered-list', - '|', - 'image', - 'link' - ], - status: false - } + useValue: simplemdeValue() }), MdButtonModule.forRoot() ], diff --git a/src/app/article/declarations/comment/comment.component.ts b/src/app/article/declarations/comment/comment.component.ts index 6fd863d..b4d961d 100644 --- a/src/app/article/declarations/comment/comment.component.ts +++ b/src/app/article/declarations/comment/comment.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit, + ViewEncapsulation, OnDestroy } from '@angular/core' import { ActivatedRoute } from '@angular/router' @@ -21,12 +22,25 @@ const request: IRequestParams = { } @Component({ + encapsulation: ViewEncapsulation.None, selector: 'comp-article-comments', - templateUrl: './comment.template.html' + templateUrl: './comment.template.html', + styles: [ + ` + .reply-floor .CodeMirror, .CodeMirror-scroll { + min-height: 100px; + } + ` + ] }) export class CommentComponent implements OnInit, OnDestroy { + commentMDEOption = {} + subCommentMDEOption = { + toolbar: false + } + private sub: any public icon = { reply: Reply diff --git a/src/app/article/declarations/comment/comment.template.html b/src/app/article/declarations/comment/comment.template.html index 6c28586..d372234 100644 --- a/src/app/article/declarations/comment/comment.template.html +++ b/src/app/article/declarations/comment/comment.template.html @@ -45,8 +45,9 @@
{{ 'pages.article.replyPlaceholder' | translate }} {{ comment.input.nickname }} - + +
@@ -62,7 +63,7 @@
- + diff --git a/src/app/base/styles/global.less b/src/app/base/styles/global.less index cebc3e9..358bce7 100644 --- a/src/app/base/styles/global.less +++ b/src/app/base/styles/global.less @@ -137,3 +137,12 @@ comp-icon { a.badge:hover { color: darken(rgb(255, 255, 255), 10%); } + +simplemde { + display: block; + width: 100%; + height: 100%; + .CodeMirror { + height: 100%; + } +} diff --git a/src/app/base/utils/fullscreen.ts b/src/app/base/utils/fullscreen.ts new file mode 100644 index 0000000..9095f86 --- /dev/null +++ b/src/app/base/utils/fullscreen.ts @@ -0,0 +1,44 @@ +function requestFullscreen(dom) { + if (dom.requestFullscreen) { + dom.requestFullscreen() + } + if (dom.webkitRequestFullscreen) { + dom.webkitRequestFullscreen() + } + if (dom.webkitRequestFullScreen) { + dom.webkitRequestFullScreen() + } + if (dom.mozRequestFullScreen) { + dom.mozRequestFullScreen() + } +} + +function exitFullscreen() { + if (document.exitFullscreen) { + document.exitFullscreen() + } + if (document.webkitExitFullscreen) { + document.webkitExitFullscreen() + } + if (document['webkitExitFullscreen']) { + document['webkitExitFullscreen']() + } + if (document['webkitCancelFullScreen']) { + document['webkitCancelFullScreen']() + } + if (document['mozCancelFullScreen']) { + document['mozCancelFullScreen']() + } +} + +function isDocumentInFullScreenMode() { + return document['fullscreen'] || document.webkitIsFullScreen || document['mozFullScreen'] +} + +export function toggleFullscreen(dom) { + if (isDocumentInFullScreenMode()) { + exitFullscreen() + } else { + requestFullscreen(dom) + } +} From 03ea4c5abd4b0ae1d81ec5ca271631efeb737165 Mon Sep 17 00:00:00 2001 From: darlin Date: Thu, 19 Jan 2017 22:43:10 +0800 Subject: [PATCH 3/8] fix style --- src/app/article/declarations/comment/comment.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/article/declarations/comment/comment.component.ts b/src/app/article/declarations/comment/comment.component.ts index b4d961d..9957937 100644 --- a/src/app/article/declarations/comment/comment.component.ts +++ b/src/app/article/declarations/comment/comment.component.ts @@ -27,7 +27,7 @@ const request: IRequestParams = { templateUrl: './comment.template.html', styles: [ ` - .reply-floor .CodeMirror, .CodeMirror-scroll { + .reply-floor .CodeMirror, .reply-floor .CodeMirror-scroll { min-height: 100px; } ` From ab29de6795f2d3ab94515d5560cc2374558965b6 Mon Sep 17 00:00:00 2001 From: darlin Date: Thu, 19 Jan 2017 22:49:51 +0800 Subject: [PATCH 4/8] add preview --- src/app/app.module.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/app.module.ts b/src/app/app.module.ts index cd6b0f6..a0b0e4f 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -60,6 +60,7 @@ export function simplemdeValue() { '|', 'image', 'link', + 'preview', { name: 'fullscreen', action: fullscreenAction, From 5331b11a86c1ec4a041c93d4191fbf81384b689f Mon Sep 17 00:00:00 2001 From: darlin Date: Sun, 22 Jan 2017 16:43:34 +0800 Subject: [PATCH 5/8] use import to replace System.import --- config/webpack.common.js | 8 ++++---- package.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/config/webpack.common.js b/config/webpack.common.js index ea5abed..cf0b4ab 100644 --- a/config/webpack.common.js +++ b/config/webpack.common.js @@ -60,16 +60,16 @@ module.exports = function(option) { test: /\.ts$/, use: [ '@angularclass/hmr-loader?pretty=' + !isProd + '&prod=' + isProd, - 'ts-loader?{configFileName: "tsconfig' + (AOT ? '.aot' : '') + '.json"}', - 'angular2-template-loader', { loader: 'ng-router-loader', options: { - loader: 'async-system', + loader: 'async-import', genDir: 'compiled', aot: AOT } - } + }, + 'ts-loader?{configFileName: "tsconfig' + (AOT ? '.aot' : '') + '.json"}', + 'angular2-template-loader' ], exclude: [/\.(spec|e2e)\.ts$/] }, diff --git a/package.json b/package.json index 8f1c460..aaf2e35 100644 --- a/package.json +++ b/package.json @@ -90,8 +90,8 @@ "@types/jasmine": "^2.5.41", "@types/marked": "0.0.28", "@types/mathjax": "0.0.31", - "@types/node": "^7.0.0", - "ng-router-loader": "^2.0.0", + "@types/node": "^7.0.1", + "ng-router-loader": "^2.1.0", "angular2-template-loader": "^0.6.0", "autoprefixer": "^6.6.1", "codelyzer": "2.0.0-beta.4", @@ -114,7 +114,7 @@ "karma-chrome-launcher": "^2.0.0", "karma-coverage": "^1.1.1", "karma-jasmine": "^1.1.0", - "karma-mocha-reporter": "^2.2.1", + "karma-mocha-reporter": "^2.2.2", "karma-remap-coverage": "^0.1.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "2.0.1", @@ -133,7 +133,7 @@ "style-loader": "^0.13.1", "svg-sprite-loader": "0.2.0", "ts-helpers": "1.1.2", - "ts-loader": "^1.3.3", + "ts-loader": "^2.0.0", "ts-node": "^2.0.0", "tslint": "^4.3.1", "tslint-loader": "^3.3.0", From a992f6ecefc9d94adc9b859a4308ea696f9cb5f6 Mon Sep 17 00:00:00 2001 From: darlin Date: Mon, 23 Jan 2017 17:46:35 +0800 Subject: [PATCH 6/8] update dep --- config/helpers.js | 8 ++------ package.json | 6 +++--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/config/helpers.js b/config/helpers.js index c71ab23..2cfb87c 100644 --- a/config/helpers.js +++ b/config/helpers.js @@ -5,8 +5,6 @@ const EVENT = process.env.npm_lifecycle_event || '' // Helper functions const ROOT = path.resolve(__dirname, '..') -console.log('root directory:', root() + '\n') - function hasProcessFlag(flag) { return process.argv.join('').indexOf(flag) > -1 } @@ -15,10 +13,8 @@ function hasNpmFlag(flag) { return EVENT.includes(flag); } -function root(args) { - args = Array.prototype.slice.call(arguments, 0) - return path.join.apply(path, [ROOT].concat(args)) -} +const root = path.join.bind(path, ROOT) +console.log('root directory:', root() + '\n') exports.hasProcessFlag = hasProcessFlag exports.hasNpmFlag = hasNpmFlag diff --git a/package.json b/package.json index aaf2e35..96189fa 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "marked": "^0.3.6", "moment": "^2.17.1", "ng2-clip": "1.0.0-beta.1", - "ng2-simplemde": "^1.0.0-beta.1", + "ng2-simplemde": "^1.0.0-beta.3", "ng2-translate": "^5.0.0", "rxjs": "~5.0.3", "simplemde": "^1.11.2", @@ -90,10 +90,10 @@ "@types/jasmine": "^2.5.41", "@types/marked": "0.0.28", "@types/mathjax": "0.0.31", - "@types/node": "^7.0.1", + "@types/node": "^7.0.2", "ng-router-loader": "^2.1.0", "angular2-template-loader": "^0.6.0", - "autoprefixer": "^6.6.1", + "autoprefixer": "^6.7.0", "codelyzer": "2.0.0-beta.4", "copy-webpack-plugin": "^4.0.1", "css-loader": "^0.26.1", From b1c4bb6551cf1d74b5cfbd270363d00575f25246 Mon Sep 17 00:00:00 2001 From: darlin Date: Wed, 25 Jan 2017 16:53:26 +0800 Subject: [PATCH 7/8] update crypto-js use --- package.json | 6 +++--- src/app/base/pic-url/pic-url.service.ts | 2 +- src/app/base/utils/get-aes-token.service.ts | 2 +- src/app/fourth/fourth.component.ts | 3 +-- src/app/user/api/user.api.ts | 2 +- tsconfig.json | 3 ++- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 96189fa..0a0b9fe 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "js-base64": "^2.1.9", "marked": "^0.3.6", "moment": "^2.17.1", - "ng2-clip": "1.0.0-beta.1", + "ng2-clip": "~1.0.0", "ng2-simplemde": "^1.0.0-beta.3", "ng2-translate": "^5.0.0", "rxjs": "~5.0.3", @@ -90,8 +90,7 @@ "@types/jasmine": "^2.5.41", "@types/marked": "0.0.28", "@types/mathjax": "0.0.31", - "@types/node": "^7.0.2", - "ng-router-loader": "^2.1.0", + "@types/node": "^7.0.4", "angular2-template-loader": "^0.6.0", "autoprefixer": "^6.7.0", "codelyzer": "2.0.0-beta.4", @@ -120,6 +119,7 @@ "karma-webpack": "2.0.1", "less": "^2.7.2", "less-loader": "^2.2.3", + "ng-router-loader": "^2.1.0", "ngc-webpack": "^1.1.2", "node-dir": "^0.1.16", "node-sass": "^4.3.0", diff --git a/src/app/base/pic-url/pic-url.service.ts b/src/app/base/pic-url/pic-url.service.ts index 741bd49..cc9df9f 100644 --- a/src/app/base/pic-url/pic-url.service.ts +++ b/src/app/base/pic-url/pic-url.service.ts @@ -2,7 +2,7 @@ import { HEAD_PIC_STYLE, THIRD_PIC_REG } from './picture.constant' -const md5 = require('crypto-js/md5') +import { MD5 as md5 } from 'crypto-js' export class PicUrl { diff --git a/src/app/base/utils/get-aes-token.service.ts b/src/app/base/utils/get-aes-token.service.ts index 05d0b31..cb66c31 100644 --- a/src/app/base/utils/get-aes-token.service.ts +++ b/src/app/base/utils/get-aes-token.service.ts @@ -1,5 +1,5 @@ import { getCookie } from './get-cookie.service' -const md5 = require('crypto-js/md5') +import { MD5 as md5 } from 'crypto-js' export function getAESToken() { return md5(getCookie('csrftoken')).toString() diff --git a/src/app/fourth/fourth.component.ts b/src/app/fourth/fourth.component.ts index 4a949b2..73960bf 100644 --- a/src/app/fourth/fourth.component.ts +++ b/src/app/fourth/fourth.component.ts @@ -9,8 +9,7 @@ import { import { Checkmark } from 'app/share/icon' import { AlertService } from 'app/declarations/alert/alert.service' -const md5 = require('crypto-js/md5') -const sha512 = require('crypto-js/sha512') +import { MD5 as md5, SHA512 as sha512 } from 'crypto-js' interface IGenpassword { initPassword: string diff --git a/src/app/user/api/user.api.ts b/src/app/user/api/user.api.ts index 2087016..e671cf6 100644 --- a/src/app/user/api/user.api.ts +++ b/src/app/user/api/user.api.ts @@ -11,7 +11,7 @@ import { RequestHandler } from 'app/base/http/http-interceptor/http-interceptor.provider' -const aes = require('crypto-js/aes') +import { AES as aes } from 'crypto-js' class Api { diff --git a/tsconfig.json b/tsconfig.json index cdf4c08..7a864c3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,7 +18,8 @@ "marked", "highlight.js", "mathjax", - "whatwg-fetch" + "whatwg-fetch", + "crypto-js" ] }, "exclude": [ From 353104b18aad30ceeffc88f88f7f52a398a1399f Mon Sep 17 00:00:00 2001 From: darlin Date: Thu, 26 Jan 2017 13:44:26 +0800 Subject: [PATCH 8/8] add proxy prod to dev --- Makefile | 3 +++ config/webpack.common.js | 3 ++- config/webpack.dev.js | 13 ++++++++++++- package.json | 25 ++++++++++++++----------- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index ccdfe57..9ca57f8 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,9 @@ SHELL := /bin/bash dev: npm run start:hmr +dev-prod: + npm run server:dev:hmr:proxy-prod + build: npm run build:prod diff --git a/config/webpack.common.js b/config/webpack.common.js index cf0b4ab..f993c2f 100644 --- a/config/webpack.common.js +++ b/config/webpack.common.js @@ -1,5 +1,6 @@ const webpack = require('webpack') const helpers = require('./helpers') +const chalk = require('chalk') /** * Webpack Plugins @@ -11,7 +12,7 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin') const ngcWebpack = require('ngc-webpack') const AOT = helpers.hasNpmFlag('aot') -console.log('is aot?:', AOT) +console.log(chalk.green('is aot?'), AOT ? chalk.green('true') : chalk.red('false')) /** * Webpack configuration diff --git a/config/webpack.dev.js b/config/webpack.dev.js index 7b04589..2df251d 100644 --- a/config/webpack.dev.js +++ b/config/webpack.dev.js @@ -3,12 +3,16 @@ const helpers = require('./helpers') const webpackMerge = require('webpack-merge') // Used to merge webpack configs const commonConfig = require('./webpack.common.js') // The settings that are common to prod and dev const autoprefixer = require('autoprefixer') +const chalk = require('chalk') /** * Webpack Plugins */ const DefinePlugin = require('webpack/lib/DefinePlugin') +const isProxyProd = helpers.hasNpmFlag('proxy-prod') +console.log(chalk.green('is proxy prod?'), isProxyProd ? chalk.green('true') : chalk.red('false')) + /** * Webpack Constants */ @@ -140,9 +144,16 @@ module.exports = webpackMerge(commonConfig({ env: ENV }), { }, proxy: { "/api": { - target: 'http://0.0.0.0:9999', + target: isProxyProd ? 'https://api.darlin.me' : 'http://0.0.0.0:9999', + changeOrigin: isProxyProd, + secure: !isProxyProd, pathRewrite: { '^/api': '' + }, + onProxyReq: function(proxyReq, req, res) { + if (isProxyProd) { + proxyReq.setHeader('referer', 'https://www.darlin.me') + } } } } diff --git a/package.json b/package.json index 0a0b9fe..54b59c8 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,9 @@ "build:prod": "webpack --config config/webpack.prod.js --progress --profile --bail", "server": "npm run server:dev", "server:dev": "npm run clean:aot && webpack-dev-server --config config/webpack.dev.js --progress --profile --watch --content-base src/", + "server:dev:proxy-prod": "npm run clean:aot && webpack-dev-server --config config/webpack.dev.js --progress --profile --watch --content-base src/", "server:dev:hmr": "npm run server:dev -- --inline --hot", + "server:dev:hmr:proxy-prod": "npm run server:dev:proxy-prod -- --inline --hot", "server:prod": "http-server dist --cors", "webdriver:update": "npm run webdriver-manager update", "webdriver:start": "npm run webdriver-manager start", @@ -54,15 +56,15 @@ "ngc": "./node_modules/.bin/ngc-w -p tsconfig.aot.json" }, "dependencies": { - "@angular/common": "^2.4.4", - "@angular/compiler": "^2.4.4", - "@angular/core": "^2.4.4", - "@angular/forms": "^2.4.4", - "@angular/http": "^2.4.4", + "@angular/common": "^2.4.5", + "@angular/compiler": "^2.4.5", + "@angular/core": "^2.4.5", + "@angular/forms": "^2.4.5", + "@angular/http": "^2.4.5", "@angular/material": "^2.0.0-beta.1", - "@angular/platform-browser": "^2.4.4", - "@angular/platform-browser-dynamic": "^2.4.4", - "@angular/router": "^3.4.4", + "@angular/platform-browser": "^2.4.5", + "@angular/platform-browser-dynamic": "^2.4.5", + "@angular/router": "^3.4.5", "@angularclass/hmr": "^1.2.2", "@types/whatwg-fetch": "^0.0.33", "angular-sortablejs": "^1.3.1", @@ -82,7 +84,7 @@ "zone.js": "~0.7.6" }, "devDependencies": { - "@angular/compiler-cli": "^2.4.4", + "@angular/compiler-cli": "^2.4.5", "@angularclass/hmr-loader": "^3.0.2", "@types/core-js": "^0.9.35", "@types/crypto-js": "^3.1.32", @@ -93,6 +95,7 @@ "@types/node": "^7.0.4", "angular2-template-loader": "^0.6.0", "autoprefixer": "^6.7.0", + "chalk": "^1.1.3", "codelyzer": "2.0.0-beta.4", "copy-webpack-plugin": "^4.0.1", "css-loader": "^0.26.1", @@ -120,7 +123,7 @@ "less": "^2.7.2", "less-loader": "^2.2.3", "ng-router-loader": "^2.1.0", - "ngc-webpack": "^1.1.2", + "ngc-webpack": "^1.1.3", "node-dir": "^0.1.16", "node-sass": "^4.3.0", "parse5": "^3.0.1", @@ -135,7 +138,7 @@ "ts-helpers": "1.1.2", "ts-loader": "^2.0.0", "ts-node": "^2.0.0", - "tslint": "^4.3.1", + "tslint": "^4.4.1", "tslint-loader": "^3.3.0", "typedoc": "^0.5.5", "typescript": "~2.1.5",