From e7839f4cb1fdcc93aeadc277da2d4f3271c8540f Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 16:10:16 +0200 Subject: [PATCH 01/10] Fix title. --- src/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index b314509..99d7b95 100644 --- a/src/index.html +++ b/src/index.html @@ -4,7 +4,7 @@ - my-app + VIzon Countdown -- 2.40.1 From f957968d4135d4c4303400b3db50ded95eeae8eb Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 16:10:44 +0200 Subject: [PATCH 02/10] Render app in dynamically added div container instead of static div. --- src/index.html | 2 +- src/index.jsx | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/index.html b/src/index.html index 99d7b95..27ebc5d 100644 --- a/src/index.html +++ b/src/index.html @@ -8,6 +8,6 @@ -
+ diff --git a/src/index.jsx b/src/index.jsx index 4693b48..ee96d1c 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -4,4 +4,8 @@ import { render } from 'react-dom'; import './index.sass'; import App from './App'; -render(, document.querySelector('#app')); +// Create div node to render app in +const rootContainer = document.createElement('div'); +document.body.appendChild(rootContainer); + +render(, rootContainer); -- 2.40.1 From 96510676e337d00708c47be31414b6e56493d316 Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 16:21:19 +0200 Subject: [PATCH 03/10] Fix prop type for date in Countdown component. --- src/Countdown.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Countdown.jsx b/src/Countdown.jsx index 4318146..3c8b2fa 100644 --- a/src/Countdown.jsx +++ b/src/Countdown.jsx @@ -8,7 +8,7 @@ import style from './Countdown.sass'; export default class Countdown extends React.Component { static propTypes = { - date: PropTypes.object.isRequired, + date: PropTypes.instanceOf(moment).isRequired, locale: PropTypes.string, minimumIntegerDigits: PropTypes.number, useGrouping: PropTypes.bool, -- 2.40.1 From 7e0f58d1131a7bb366d11c5c26a29b302852e1b6 Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 16:21:58 +0200 Subject: [PATCH 04/10] Update eslint to 4.5.0. --- package-lock.json | 55 +++++++++++++++++++++++++++++++++++++++++++---- package.json | 2 +- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ac4607..c7a59c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3454,14 +3454,14 @@ } }, "eslint": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.4.1.tgz", - "integrity": "sha1-mc1+r8/8ov+Zpcj18qR01jZLS9M=", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.5.0.tgz", + "integrity": "sha1-u3XTuL3pf7XhPvzVOXRGd/6wGcM=", "dev": true, "requires": { "ajv": "5.2.2", "babel-code-frame": "6.26.0", - "chalk": "1.1.3", + "chalk": "2.1.0", "concat-stream": "1.6.0", "cross-spawn": "5.1.0", "debug": "2.6.8", @@ -3492,9 +3492,56 @@ "progress": "2.0.0", "require-uncached": "1.0.3", "semver": "5.4.1", + "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", "table": "4.0.1", "text-table": "0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } } }, "eslint-config-airbnb": { diff --git a/package.json b/package.json index 91194a2..65651b5 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "babel-eslint": "^7.2.3", "babel-plugin-transform-class-properties": "^6.24.1", "babel-preset-env": "^1.6.0", - "eslint": "^4.4.1", + "eslint": "^4.5.0", "eslint-config-airbnb": "^15.1.0", "eslint-plugin-babel": "^4.1.2", "eslint-plugin-import": "^2.7.0", -- 2.40.1 From fa7c2fdcf385b3e32559d0fd237e7173859bb8ee Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 16:22:06 +0200 Subject: [PATCH 05/10] Add .eslintignore. --- .eslintignore | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .eslintignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..b73b591 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# Deployed apps should consider commenting this line out: +# see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git +node_modules + +# Webpack output +/dist -- 2.40.1 From 02aff29fc170a34e8af27865d5f0e58e90ba3dc5 Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 16:23:35 +0200 Subject: [PATCH 06/10] Downgrade eslint-plugin-jsx-a11y to 5.1.1. Fixes error message regarding missing lint rule. --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c7a59c3..5f6ceb9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3628,9 +3628,9 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.2.tgz", - "integrity": "sha1-ZZJ3p1iwNsMFp+ShMFfDAc075z8=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz", + "integrity": "sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==", "dev": true, "requires": { "aria-query": "0.7.0", diff --git a/package.json b/package.json index 65651b5..6914296 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "eslint-plugin-babel": "^4.1.2", "eslint-plugin-import": "^2.7.0", "eslint-plugin-json": "^1.2.0", - "eslint-plugin-jsx-a11y": "^6.0.2", + "eslint-plugin-jsx-a11y": "^5.1.1", "eslint-plugin-react": "^7.2.1", "file-loader": "^0.11.2", "nwb": "^0.18.10", -- 2.40.1 From b87e1e75775dca9f8bd8742a2332ae2edb4f5cbc Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 16:49:02 +0200 Subject: [PATCH 07/10] Apply some measurements for shaving off the few kilobytes. - Shave off about 30 kB by building with preact instead of react. - Shave off another 20 kB by using a moment-timezone build with only data for 2012~2022. Should be updated in time! --- nwb.config.js | 4 ++++ package-lock.json | 48 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +++- src/App.jsx | 3 +++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/nwb.config.js b/nwb.config.js index eb171e2..19ffc43 100644 --- a/nwb.config.js +++ b/nwb.config.js @@ -12,6 +12,10 @@ module.exports = { }, webpack: { + aliases: { + 'moment-timezone': 'moment-timezone/builds/moment-timezone-with-data-2012-2022.js', + }, + autoprefixer: '> 1%, last 2 versions, Firefox ESR, ios >= 8', extra: { diff --git a/package-lock.json b/package-lock.json index 5f6ceb9..aeb9ab6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4980,6 +4980,14 @@ "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", "dev": true }, + "immutability-helper": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-2.3.1.tgz", + "integrity": "sha1-jM/OkhVyCMEgsq+tftBcERFMCG4=", + "requires": { + "invariant": "2.2.2" + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -8752,6 +8760,36 @@ } } }, + "preact": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.1.tgz", + "integrity": "sha1-Z0JD3wyEeITQGYNARKovzTEecu0=" + }, + "preact-compat": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/preact-compat/-/preact-compat-3.17.0.tgz", + "integrity": "sha1-Uoz9/DARkMGg9HVnM2vh9L4CZrM=", + "requires": { + "immutability-helper": "2.3.1", + "preact-render-to-string": "3.6.3", + "preact-transition-group": "1.1.1", + "prop-types": "15.5.10", + "standalone-react-addons-pure-render-mixin": "0.1.1" + } + }, + "preact-render-to-string": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-3.6.3.tgz", + "integrity": "sha1-SB0NW9rJGS0zR1V0N9XNAKoxIEM=", + "requires": { + "pretty-format": "3.8.0" + } + }, + "preact-transition-group": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/preact-transition-group/-/preact-transition-group-1.1.1.tgz", + "integrity": "sha1-8KSTJ+pRXs406ivoZMSn0p5dbhA=" + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -8780,6 +8818,11 @@ "utila": "0.4.0" } }, + "pretty-format": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U=" + }, "private": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", @@ -10272,6 +10315,11 @@ "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=", "dev": true }, + "standalone-react-addons-pure-render-mixin": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/standalone-react-addons-pure-render-mixin/-/standalone-react-addons-pure-render-mixin-0.1.1.tgz", + "integrity": "sha1-PHQJ9MecQN6axyxhbPZ5qZTzdVE=" + }, "statuses": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", diff --git a/package.json b/package.json index 6914296..487766e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "private": true, "main": "src/index.jsx", "scripts": { - "build": "nwb build-react-app ./src", + "build": "nwb build-react-app ./src --preact", "clean": "nwb clean-app", "start": "nwb serve-react-app ./src", "test": "nwb test-react", @@ -45,6 +45,8 @@ "dependencies": { "moment-timezone": "^0.5.13", "normalize-scss": "^7.0.0", + "preact": "^8.2.1", + "preact-compat": "^3.17.0", "prop-types": "^15.5.10", "react": "^15.6.1", "react-dom": "^15.6.1", diff --git a/src/App.jsx b/src/App.jsx index 0b611ab..40bfbe5 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -50,6 +50,9 @@ class App extends React.Component { } const { nextUpcomingDate } = this.state; + if (!nextUpcomingDate) { + return null; + } return (
-- 2.40.1 From 1d45cae31856336fdf44ed250fbaac4705e2e82c Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 17:38:20 +0200 Subject: [PATCH 08/10] Remove useless extra container and import from App component. --- src/App.jsx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index 40bfbe5..517b384 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -3,7 +3,6 @@ import PropTypes from 'prop-types'; import moment from 'moment-timezone'; import Countdown from './Countdown'; import Header from './Header'; -import ProgressCircle from './ProgressCircle'; import getUpcomingDate from './getUpcomingDate'; import style from './App.sass'; @@ -61,12 +60,10 @@ class App extends React.Component {
-
-

+

The next VIzon draw is on {nextUpcomingDate.format('dddd')}, {nextUpcomingDate.format('L LT')}. -

- -
+

+
); -- 2.40.1 From e0812afb567258c1eafd4b5f1dc9b25f29b19278 Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 18:55:01 +0200 Subject: [PATCH 09/10] Implement workaround for https://github.com/webpack/webpack/issues/1866. --- nwb.config.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/nwb.config.js b/nwb.config.js index 19ffc43..8d6ddf0 100644 --- a/nwb.config.js +++ b/nwb.config.js @@ -39,3 +39,13 @@ module.exports = { }, }, }; + +// @HACK - workaround for https://github.com/webpack/webpack/issues/1866 + +function batchresolve(arr) { + return arr.map(require.resolve); +} + +module.exports.babel.presets = batchresolve(module.exports.babel.presets); +module.exports.babel.plugins = batchresolve(module.exports.babel.plugins); + -- 2.40.1 From fb523804ec911e6c372bedb39154c5aafcd7dd28 Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 19 Aug 2017 23:01:36 +0200 Subject: [PATCH 10/10] Add Dockerfile and update .dockerignore. --- .dockerignore | 36 ++++++++++++++++++++++++++++++------ Dockerfile | 17 +++++++++++++++++ 2 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore index be1cf61..2bf5677 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,11 +1,35 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# Deployed apps should consider commenting this line out: +# see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git +node_modules + +# Webpack output +/dist + ### -.git* - Dockerfile -.dockerignore - docker-compose.yml - +.git* *.md - diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..305d4f0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM icedream/caddy + +COPY . /src/ +RUN \ + (cd /src \ + && apk add --no-cache --virtual .build-deps \ + nodejs-lts \ + && npm i \ + && NODE_ENV=production npm run build \ + && rm -rf /data \ + && mv dist /data \ + && apk del --no-cache .build-deps \ + ) \ + && rm -rf /src /tmp/* /var/tmp/* + +WORKDIR /data +EXPOSE 2015 -- 2.40.1