ff-stream-web

git clone git://archive.git.mtrnord.blog/MTRNord/ff-stream-web.git
Log | Files | Refs | README | LICENSE

commit 5aee9f5693473e9b0c437e10aaa098156beba1a1
parent d53ea89ce3f9d596410d49e0212fbf4fd0848594
Author: Konstantin Tarkus <hello@tarkus.me>
Date:   Tue,  8 Sep 2015 16:26:30 +0300

Update npm modules, webpack config, app.js

Diffstat:
Mpackage.json | 20++++++++++----------
Msrc/app.js | 27++++++++++-----------------
Mtools/clean.js | 13++++---------
Mtools/config.js | 39++++++++++++---------------------------
Mtools/lib/fs.js | 20++++----------------
5 files changed, 40 insertions(+), 79 deletions(-)

diff --git a/package.json b/package.json @@ -11,10 +11,10 @@ "eventemitter3": "1.1.1", "express": "4.13.3", "fastclick": "1.0.6", - "fbjs": "0.1.0-alpha.12", + "fbjs": "0.2.0", "flux": "2.1.1", "front-matter": "1.0.0", - "history": "1.8.1", + "history": "1.8.4", "jade": "1.11.0", "lodash": "3.10.1", "normalize.css": "3.0.3", @@ -26,23 +26,23 @@ }, "devDependencies": { "autoprefixer-core": "^5.2.1", - "babel-eslint": "^4.1.0", + "babel-eslint": "^4.1.1", "babel-loader": "^5.3.2", - "browser-sync": "^2.8.2", - "css-loader": "^0.16.0", + "browser-sync": "^2.9.2", + "css-loader": "^0.17.0", "csscomb": "^3.1.8", "cssnext": "^1.8.4", - "del": "^1.2.1", + "del": "^2.0.1", "eslint": "^1.3.1", "eslint-loader": "^1.0.0", - "eslint-plugin-react": "^3.3.0", + "eslint-plugin-react": "^3.3.1", "gaze": "^0.5.1", "git-push": "^0.1.1", "glob": "^5.0.14", - "jest-cli": "^0.5.0", + "jest-cli": "^0.5.1", "mkdirp": "^0.5.1", "ncp": "^2.0.0", - "postcss": "^5.0.3", + "postcss": "^5.0.4", "postcss-loader": "^0.5.1", "postcss-nested": "^1.0.0", "psi": "^1.0.6", @@ -51,7 +51,7 @@ "run-sequence": "^1.1.2", "style-loader": "^0.12.3", "url-loader": "^0.5.6", - "webpack": "^1.12.0", + "webpack": "^1.12.1", "webpack-dev-middleware": "^1.2.0", "webpack-hot-middleware": "^2.0.0" }, diff --git a/src/app.js b/src/app.js @@ -9,8 +9,9 @@ import Location from './core/Location'; import ActionTypes from './constants/ActionTypes'; import { addEventListener, removeEventListener } from './utils/DOMUtils'; -const container = document.getElementById('app'); -const context = { +let appContainer = document.getElementById('app'); +let cssContainer = document.getElementById('css'); +let context = { onSetTitle: value => document.title = value, onSetMeta: (name, content) => { // Remove and create a new <meta /> tag in order to make it work @@ -28,29 +29,21 @@ const context = { } }; -function cleanUp() { - let done = false; - if (!done) { - // Remove the pre-rendered CSS because it's no longer used - // after the React app is launched - const css = document.getElementById('css'); - if (css) { - css.parentNode.removeChild(css); - done = true; - } - } -} - function render(state) { Router.dispatch(state, (_, component) => { - ReactDOM.render(component, container, () => { + ReactDOM.render(component, appContainer, () => { // Restore the scroll position if it was saved into the state if (state.scrollY !== undefined) { window.scrollTo(state.scrollX, state.scrollY); } else { window.scrollTo(0, 0); } - cleanUp(); + // Remove the pre-rendered CSS because it's no longer used + // after the React app is launched + if (cssContainer) { + cssContainer.parentNode.removeChild(cssContainer); + cssContainer = null; + } }); }); } diff --git a/tools/clean.js b/tools/clean.js @@ -13,13 +13,8 @@ import fs from './lib/fs'; /** * Cleans up the output (build) directory. */ -export default () => new Promise((resolve, reject) => { +export default async () => { console.log('clean'); - del(['.tmp', 'build/*', '!build/.git'], {dot: true}, err => { - if (err) { - reject(err); - } else { - fs.makeDir('build/public').then(resolve, reject); - } - }); -}); + await del(['.tmp', 'build/*', '!build/.git'], {dot: true}); + await fs.makeDir('build/public'); +}; diff --git a/tools/config.js b/tools/config.js @@ -67,39 +67,24 @@ const config = { module: { loaders: [{ - test: /\.txt/, - loader: 'file-loader?name=[path][name].[ext]' - }, { - test: /\.gif/, - loader: 'url-loader?limit=10000&mimetype=image/gif' - }, { - test: /\.jpg/, - loader: 'url-loader?limit=10000&mimetype=image/jpg' - }, { - test: /\.png/, - loader: 'url-loader?limit=10000&mimetype=image/png' - }, { - test: /\.svg/, - loader: 'url-loader?limit=10000&mimetype=image/svg+xml' - }, { - test: /\.eot/, - loader: 'url-loader?limit=100000&mimetype=application/vnd.ms-fontobject' - }, { - test: /\.woff2/, - loader: 'url-loader?limit=100000&mimetype=application/font-woff2' - }, { - test: /\.woff/, - loader: 'url-loader?limit=100000&mimetype=application/font-woff' - }, { - test: /\.ttf/, - loader: 'url-loader?limit=100000&mimetype=application/font-ttf' - }, { test: /\.jsx?$/, include: [ path.resolve(__dirname, '../node_modules/react-routing/src'), path.resolve(__dirname, '../src') ], loaders: [...(WATCH && ['react-hot']), 'babel-loader'] + }, { + test: /\.json$/, + loader: 'json-loader' + }, { + test: /\.txt$/, + loader: 'raw-loader' + }, { + test: /\.(png|jpg|jpeg|gif|svg|woff|woff2)$/, + loader: 'url-loader?limit=10000' + }, { + test: /\.(eot|tft|wav|mp3)$/, + loader: 'file-loader' }] }, diff --git a/tools/lib/fs.js b/tools/lib/fs.js @@ -10,24 +10,12 @@ import fs from 'fs'; import mkdirp from 'mkdirp'; -const writeFile = (filename, contents) => new Promise((resolve, reject) => { - fs.writeFile(filename, contents, 'utf8', err => { - if (err) { - reject(err); - } else { - resolve(); - } - }); +const writeFile = (file, contents) => new Promise((resolve, reject) => { + fs.writeFile(file, contents, 'utf8', err => err ? reject(err): resolve()); }); -const makeDir = name => new Promise((resolve, reject) => { - mkdirp(name, err => { - if (err) { - reject(err); - } else { - resolve(); - } - }); +const makeDir = (name) => new Promise((resolve, reject) => { + mkdirp(name, err => err ? reject(err) : resolve()); }); export default { writeFile, makeDir };