From 0d9beedd0b0a7511f21320984016fcacf55398e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96tv=C3=B6s=20Rich=C3=A1rd?= Date: Thu, 2 May 2019 14:40:14 +0200 Subject: [PATCH 001/129] Fixes typo in method name I guess this should be 'profit'. Is there other places I should change this? --- src/static/patterns/behavioral_observer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/static/patterns/behavioral_observer.js b/src/static/patterns/behavioral_observer.js index 2d29fd5..592db36 100644 --- a/src/static/patterns/behavioral_observer.js +++ b/src/static/patterns/behavioral_observer.js @@ -83,13 +83,13 @@ class fees { } } -class proft { +class profit { update(product) { product.price = product.price * 2; } } -export { Product, fees, proft };` +export { Product, fees, profit };` }; export default OBSERVER; From a41bb9312f1f66478eb734d6b39724297b16aa68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96tv=C3=B6s=20Rich=C3=A1rd?= Date: Thu, 2 May 2019 17:11:25 +0200 Subject: [PATCH 002/129] Fixes the other two typos --- src/static/patterns/behavioral_observer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/static/patterns/behavioral_observer.js b/src/static/patterns/behavioral_observer.js index 592db36..cee093b 100644 --- a/src/static/patterns/behavioral_observer.js +++ b/src/static/patterns/behavioral_observer.js @@ -40,13 +40,13 @@ var fees = { } }; -var proft = { +var profit = { update: function(product) { product.price = product.price * 2; } }; -module.exports = [Product, fees, proft];`, +module.exports = [Product, fees, profit];`, codeES6: `class Product { constructor() { this.price = 0; From 88be38196e02e07588453370ee8ea628f31e638c Mon Sep 17 00:00:00 2001 From: Alexey Berezin Date: Thu, 2 May 2019 21:42:42 +0300 Subject: [PATCH 003/129] prod: wrong indents --- src/static/patterns/behavioral_template.js | 9 ++++----- src/static/patterns/creational_abstractFactory.js | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/static/patterns/behavioral_template.js b/src/static/patterns/behavioral_template.js index e4ebcb0..b6d48a0 100644 --- a/src/static/patterns/behavioral_template.js +++ b/src/static/patterns/behavioral_template.js @@ -7,7 +7,6 @@ const TEMPLATE = { Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.`, when: `you have to define steps of the algorithm once and let subclasses to implement its behaviour`, codeES5: `function Tax() {} - Tax.prototype.calc = function(value) { if (value >= 1000) value = this.overThousand(value); @@ -19,16 +18,16 @@ Tax.prototype.complementaryFee = function(value) { }; function Tax1() {} - Tax1.prototype = Object.create(Tax.prototype); +Tax1.prototype = Object.create(Tax.prototype); - Tax1.prototype.overThousand = function(value) { +Tax1.prototype.overThousand = function(value) { return value * 1.1; }; function Tax2() {} - Tax2.prototype = Object.create(Tax.prototype); +Tax2.prototype = Object.create(Tax.prototype); - Tax2.prototype.overThousand = function(value) { +Tax2.prototype.overThousand = function(value) { return value * 1.2; }; diff --git a/src/static/patterns/creational_abstractFactory.js b/src/static/patterns/creational_abstractFactory.js index 96ceaba..057b9c8 100644 --- a/src/static/patterns/creational_abstractFactory.js +++ b/src/static/patterns/creational_abstractFactory.js @@ -20,12 +20,12 @@ function pilotDroidPattern() { } function B1() {} - B1.prototype.info = function() { +B1.prototype.info = function() { return 'B1, Battle Droid'; }; function Rx24() {} - Rx24.prototype.info = function() { +Rx24.prototype.info = function() { return 'Rx24, Pilot Droid'; }; From 1c2628382ae39aa05fe36cb5cb5823aedfdb4ec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Garc=C3=ADa=20Herv=C3=A1s?= Date: Fri, 3 May 2019 02:10:57 +0200 Subject: [PATCH 004/129] Scroll to top code block on question change --- src/components/Code.jsx | 5 +++-- src/components/CodePreTag.jsx | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/components/CodePreTag.jsx diff --git a/src/components/Code.jsx b/src/components/Code.jsx index 558698c..eab911c 100644 --- a/src/components/Code.jsx +++ b/src/components/Code.jsx @@ -4,6 +4,7 @@ import { connect } from 'react-redux'; import { Light as SyntaxHighlighter } from 'react-syntax-highlighter'; import js from 'react-syntax-highlighter/dist/languages/hljs/javascript'; import { getJS, getCurrent } from '../selectors'; +import CodePreTag from './CodePreTag'; SyntaxHighlighter.registerLanguage('javascript', js); @@ -13,13 +14,13 @@ const Code = props => { return ( {js === 'es5' && ( - + {current.codeES5} )} {js === 'es6' && ( - + {current.codeES6} )} diff --git a/src/components/CodePreTag.jsx b/src/components/CodePreTag.jsx new file mode 100644 index 0000000..bd70695 --- /dev/null +++ b/src/components/CodePreTag.jsx @@ -0,0 +1,20 @@ +import React, { useRef, useEffect } from 'react'; +import PropTypes from 'prop-types'; + +const CodePreTag = ({ children, ...restProps }) => { + const syntaxHighlighterEl = useRef(null); + + useEffect(() => { + if (syntaxHighlighterEl.current && syntaxHighlighterEl.current.scroll) { + syntaxHighlighterEl.current.scroll(0, 0); + } + }, [children]); + + return
{children}
; +}; + +CodePreTag.propTypes = { + children: PropTypes.node +}; + +export default CodePreTag; From 9da2869808e3fe405d37b0386f431a7ce4aa0441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Garc=C3=ADa=20Herv=C3=A1s?= Date: Fri, 3 May 2019 02:21:43 +0200 Subject: [PATCH 005/129] Update snapshots --- .../pages/__snapshots__/Game.test.js.snap | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/__tests__/pages/__snapshots__/Game.test.js.snap b/__tests__/pages/__snapshots__/Game.test.js.snap index bf29e24..e3d94af 100644 --- a/__tests__/pages/__snapshots__/Game.test.js.snap +++ b/__tests__/pages/__snapshots__/Game.test.js.snap @@ -164,6 +164,7 @@ exports[`Game page - GAME - DARK style renders a component 1`] = ` } > component 1`] = ` } } > -
 component 1`] = `
         }
       }
     >
-      
-        Code ES5 - Prototype
-      
-    
+
+        
+          Code ES5 - Prototype
+        
+      
+
`; @@ -592,6 +607,7 @@ exports[`Game page - GAME - LIGHT style renders a component 1`] = ` } > component 1`] = ` } } > -
 component 1`] = `
         }
       }
     >
-      
-        Code ES5 - Prototype
-      
-    
+
+        
+          Code ES5 - Prototype
+        
+      
+
`; From 50eec2d61650360067d3d44eec7763f50bad9bb0 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 3 May 2019 03:36:05 +0000 Subject: [PATCH 006/129] chore(package): update storybook-addon-styled-component-theme to version 1.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 26a7ba4..853679e 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "prettier": "1.17.0", "react-test-renderer": "^16.8.6", "redux-mock-store": "^1.5.3", - "storybook-addon-styled-component-theme": "1.2.1", + "storybook-addon-styled-component-theme": "1.2.2", "surge": "^0.20.4", "wait-on": "^3.2.0", "webpack": "^4.30.0", From 160666b765b01bd8e1bc4e3e311fca14f26f217a Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 3 May 2019 03:36:09 +0000 Subject: [PATCH 007/129] chore(package): update lockfile yarn.lock --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index f28c7c3..24ccb79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11323,10 +11323,10 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -storybook-addon-styled-component-theme@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/storybook-addon-styled-component-theme/-/storybook-addon-styled-component-theme-1.2.1.tgz#f21ae416db31b40882cb9c29e4b6240cbb2e3b63" - integrity sha512-oL3UlKG9fWwZ8AS+bPWp3u4ubeNnygTwojmnZLbZpSA55+PEhadS/X3Fgcuf2/rCIq907KFVAu49mjLMRp26Rg== +storybook-addon-styled-component-theme@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/storybook-addon-styled-component-theme/-/storybook-addon-styled-component-theme-1.2.2.tgz#d352c23b7e0a231d5d6afa966a4e350ec00453d4" + integrity sha512-TRi1RBLvBuq3niko0OnvwxaxgQimJwxyIH5KLXFeZWHIyh7NrEP3ZB6pJhjnmvQ1xxAzkKpudLyGzBLNsU+rRw== dependencies: immutable "^3.8.2" recompose "^0.27.1" From 64fd85adc2557d98ed4d834da902fc7d964a6f0d Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sat, 4 May 2019 12:51:24 +0000 Subject: [PATCH 008/129] chore(package): update storybook-addon-styled-component-theme to version 1.2.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 853679e..8112567 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "prettier": "1.17.0", "react-test-renderer": "^16.8.6", "redux-mock-store": "^1.5.3", - "storybook-addon-styled-component-theme": "1.2.2", + "storybook-addon-styled-component-theme": "1.2.3", "surge": "^0.20.4", "wait-on": "^3.2.0", "webpack": "^4.30.0", From c6c68a06aae67287ca48e922d3fb61a659f9ccaf Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sat, 4 May 2019 12:51:27 +0000 Subject: [PATCH 009/129] chore(package): update lockfile yarn.lock --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 24ccb79..b6958d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11323,10 +11323,10 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -storybook-addon-styled-component-theme@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/storybook-addon-styled-component-theme/-/storybook-addon-styled-component-theme-1.2.2.tgz#d352c23b7e0a231d5d6afa966a4e350ec00453d4" - integrity sha512-TRi1RBLvBuq3niko0OnvwxaxgQimJwxyIH5KLXFeZWHIyh7NrEP3ZB6pJhjnmvQ1xxAzkKpudLyGzBLNsU+rRw== +storybook-addon-styled-component-theme@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/storybook-addon-styled-component-theme/-/storybook-addon-styled-component-theme-1.2.3.tgz#c99625642e07fc7e4965f73c695791b3d81ed969" + integrity sha512-/XrG8VFBpYjyydeYszvbZIsl87SSRmDPKt1zD/uoaHASedUK8rzCBU3MsAGtUi6FvyXCeISj9wsoWnu4FyMS0w== dependencies: immutable "^3.8.2" recompose "^0.27.1" From 6ee513c3949660d63226268cf8123ad38bbada74 Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Mon, 6 May 2019 12:29:21 -0400 Subject: [PATCH 010/129] Add Firebase configs --- .firebaserc | 5 +++++ firebase.json | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 .firebaserc create mode 100644 firebase.json diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 0000000..df497bd --- /dev/null +++ b/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "design-patterns-game-test" + } +} diff --git a/firebase.json b/firebase.json new file mode 100644 index 0000000..340ed5b --- /dev/null +++ b/firebase.json @@ -0,0 +1,16 @@ +{ + "hosting": { + "public": "build", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } +} From f7a8a18436f03384d56189256c4dad155a25632a Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Mon, 6 May 2019 12:31:07 -0400 Subject: [PATCH 011/129] Update .travis.yml with firebase deploy --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4ffab78..720a81c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,7 @@ after_success: - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js deploy: - provider: surge - project: ./build - domain: http://designpatternsgame.com + provider: firebase + token: + secure: $FIREBASE_TOKEN skip_cleanup: true From 3096e97c8dcadbaddc1aa2a805236dd57c486bd0 Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Mon, 6 May 2019 12:35:50 -0400 Subject: [PATCH 012/129] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4f76557..27378a5 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build Status](https://travis-ci.org/zoltantothcom/Design-Patterns-JavaScript.svg?branch=master)](https://travis-ci.org/zoltantothcom/Design-Patterns-JavaScript) [![Coverage Status](https://coveralls.io/repos/github/zoltantothcom/Design-Patterns-JavaScript/badge.svg?branch=master)](https://coveralls.io/github/zoltantothcom/Design-Patterns-JavaScript?branch=master) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/5f4e97b771504e23b0b414d2cbc69506)](https://www.codacy.com/app/zoltantothcom/Design-Patterns-JavaScript) [![Greenkeeper badge](https://badges.greenkeeper.io/zoltantothcom/Design-Patterns-JavaScript.svg)](https://greenkeeper.io/) -Design Patterns - a quick game to test your familiarity with the 'Gang of Four' design patterns implemented in JavaScript. +Design Patterns - a quick game to test your familiarity with the 'Gang of Four' design patterns implemented in JS. ### :zap: [PLAY HERE](http://designpatternsgame.com/) From 6895caa74bca83dafbe58fbebea8358fde2cc3c7 Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Tue, 7 May 2019 10:58:22 -0400 Subject: [PATCH 013/129] Update package.json --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 26a7ba4..834cd7c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,6 @@ { - "name": "javascript-patterns", - "version": "0.1.0", - "private": true, + "name": "design-patterns-game", + "version": "1.0.0", "dependencies": { "prop-types": "^15.7.2", "react": "^16.8.6", From fb1c2d82e6fd8fe74d3d52cce2448325abbb8715 Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Tue, 7 May 2019 11:00:09 -0400 Subject: [PATCH 014/129] Update title subheading with better decription --- src/components/Title.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Title.jsx b/src/components/Title.jsx index 1ee39b2..dac2b2e 100644 --- a/src/components/Title.jsx +++ b/src/components/Title.jsx @@ -18,7 +18,7 @@ const Heading = styled.h1` `; const SubHeading = styled.h2` - font: 400 0.925rem 'Karla', sans-serif; + font: 400 0.875rem 'Karla', sans-serif; color: ${props => props.theme.link}; margin: 0.75rem 0 0; `; @@ -26,7 +26,7 @@ const SubHeading = styled.h2` export const Title = () => ( Design Patterns Game - implemented in JavaScript + “Gang of Four” patterns in JavaScript ); From c75c3744d0a547b1b1ec4f01a1c0bf4e0e56371d Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Tue, 7 May 2019 12:07:02 -0400 Subject: [PATCH 015/129] Highlight pattern class headers in reference --- src/components/PatternsList.jsx | 6 ++++++ src/styles/themes/theme.dark.js | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/PatternsList.jsx b/src/components/PatternsList.jsx index 2e50978..96f0b88 100644 --- a/src/components/PatternsList.jsx +++ b/src/components/PatternsList.jsx @@ -21,6 +21,12 @@ const StyledPatterns = styled.div` color: ${props => props.theme.header}; margin-top: 2.5rem; } + + h3 { + border-bottom: 1px solid ${props => props.theme.text}; + color: ${props => props.theme.header}; + padding-bottom: 1rem; + } `; const PatternsList = () => { diff --git a/src/styles/themes/theme.dark.js b/src/styles/themes/theme.dark.js index 8cea383..910bd33 100644 --- a/src/styles/themes/theme.dark.js +++ b/src/styles/themes/theme.dark.js @@ -36,7 +36,7 @@ export const themeDark = { toggleActiveBorder: C.SILVER, // text and header - header: C.GRAY, + header: C.WILD_SAND, text: C.SILVER, border: C.TUNDORA From b6e5d8c4a25116dc69374b6a1c3b28f4c168b660 Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Tue, 7 May 2019 12:09:01 -0400 Subject: [PATCH 016/129] Update snapshots with subtitles content and styling changes --- __tests__/components/__snapshots__/Header.test.js.snap | 8 ++++---- .../components/__snapshots__/PatternsList.test.js.snap | 5 +++++ __tests__/components/__snapshots__/Title.test.js.snap | 8 ++++---- __tests__/pages/__snapshots__/About.test.js.snap | 2 +- __tests__/pages/__snapshots__/Patterns.test.js.snap | 5 +++++ 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/__tests__/components/__snapshots__/Header.test.js.snap b/__tests__/components/__snapshots__/Header.test.js.snap index dcca459..35aa018 100644 --- a/__tests__/components/__snapshots__/Header.test.js.snap +++ b/__tests__/components/__snapshots__/Header.test.js.snap @@ -53,7 +53,7 @@ exports[`
component renders with DARK theme 1`] = ` } .c8 { - font: 400 0.925rem 'Karla',sans-serif; + font: 400 0.875rem 'Karla',sans-serif; color: #C8C8C8; margin: 0.75rem 0 0; } @@ -226,7 +226,7 @@ exports[`
component renders with DARK theme 1`] = `

- implemented in JavaScript + “Gang of Four” patterns in JavaScript

@@ -286,7 +286,7 @@ exports[`
component renders with LIGHT theme 1`] = ` } .c8 { - font: 400 0.925rem 'Karla',sans-serif; + font: 400 0.875rem 'Karla',sans-serif; color: #6F256F; margin: 0.75rem 0 0; } @@ -459,7 +459,7 @@ exports[`
component renders with LIGHT theme 1`] = `

- implemented in JavaScript + “Gang of Four” patterns in JavaScript

diff --git a/__tests__/components/__snapshots__/PatternsList.test.js.snap b/__tests__/components/__snapshots__/PatternsList.test.js.snap index b0dac56..88566c5 100644 --- a/__tests__/components/__snapshots__/PatternsList.test.js.snap +++ b/__tests__/components/__snapshots__/PatternsList.test.js.snap @@ -16,6 +16,11 @@ exports[`REFERENCE - Patterns List renders all the patterns 1`] = ` margin-top: 2.5rem; } +.c0 h3 { + border-bottom: 1px solid; + padding-bottom: 1rem; +} +
diff --git a/__tests__/components/__snapshots__/Title.test.js.snap b/__tests__/components/__snapshots__/Title.test.js.snap index d5c6ad4..a0e1c4a 100644 --- a/__tests__/components/__snapshots__/Title.test.js.snap +++ b/__tests__/components/__snapshots__/Title.test.js.snap @@ -18,7 +18,7 @@ exports[` component renders with a DARK theme 1`] = ` } .c2 { - font: 400 0.925rem 'Karla',sans-serif; + font: 400 0.875rem 'Karla',sans-serif; color: #C8C8C8; margin: 0.75rem 0 0; } @@ -34,7 +34,7 @@ exports[`<Title /> component renders with a DARK theme 1`] = ` <h2 className="c2" > - implemented in JavaScript + “Gang of Four” patterns in JavaScript </h2> </div> `; @@ -57,7 +57,7 @@ exports[`<Title /> component renders with a LIGHT theme 1`] = ` } .c2 { - font: 400 0.925rem 'Karla',sans-serif; + font: 400 0.875rem 'Karla',sans-serif; color: #6F256F; margin: 0.75rem 0 0; } @@ -73,7 +73,7 @@ exports[`<Title /> component renders with a LIGHT theme 1`] = ` <h2 className="c2" > - implemented in JavaScript + “Gang of Four” patterns in JavaScript </h2> </div> `; diff --git a/__tests__/pages/__snapshots__/About.test.js.snap b/__tests__/pages/__snapshots__/About.test.js.snap index d2c9047..5c53576 100644 --- a/__tests__/pages/__snapshots__/About.test.js.snap +++ b/__tests__/pages/__snapshots__/About.test.js.snap @@ -16,7 +16,7 @@ exports[`About page renders with a DARK theme 1`] = ` } .c1 { - color: #888888; + color: #F5F5F5; margin-top: 2rem; } diff --git a/__tests__/pages/__snapshots__/Patterns.test.js.snap b/__tests__/pages/__snapshots__/Patterns.test.js.snap index eb28cce..2d00123 100644 --- a/__tests__/pages/__snapshots__/Patterns.test.js.snap +++ b/__tests__/pages/__snapshots__/Patterns.test.js.snap @@ -16,6 +16,11 @@ exports[`Patterns page renders the Patterns list 1`] = ` margin-top: 2.5rem; } +.c0 h3 { + border-bottom: 1px solid; + padding-bottom: 1rem; +} + <div className="c0" > From dabaa4bd28566e0014f0808b02442af0a5d5458b Mon Sep 17 00:00:00 2001 From: Zoltan Toth <contact@zoltantoth.com> Date: Tue, 7 May 2019 12:10:28 -0400 Subject: [PATCH 017/129] Update README with secure link to game --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 27378a5..cc37bb0 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Design Patterns - a quick game to test your familiarity with the 'Gang of Four' design patterns implemented in JS. -### :zap: [PLAY HERE](http://designpatternsgame.com/) +### :zap: [PLAY HERE](https://designpatternsgame.com/) ![Design Patterns - game results screenshot](/static/screenshot.png?sanitize=true&raw=true) From 9125713bf76ec70f07470246adb013caa4e28601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Garc=C3=ADa=20Herv=C3=A1s?= <aar.garc.herv@gmail.com> Date: Tue, 7 May 2019 21:38:10 +0200 Subject: [PATCH 018/129] CodePreTag rendering test --- .vscode/settings.json | 3 +++ __tests__/components/CodePreTag.test.jsx | 23 +++++++++++++++++++ .../__snapshots__/CodePreTag.test.jsx.snap | 11 +++++++++ 3 files changed, 37 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 __tests__/components/CodePreTag.test.jsx create mode 100644 __tests__/components/__snapshots__/CodePreTag.test.jsx.snap diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7c2feb7 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": false +} diff --git a/__tests__/components/CodePreTag.test.jsx b/__tests__/components/CodePreTag.test.jsx new file mode 100644 index 0000000..ddb1908 --- /dev/null +++ b/__tests__/components/CodePreTag.test.jsx @@ -0,0 +1,23 @@ +import React from 'react'; +import renderer from 'react-test-renderer'; +import 'jest-styled-components'; + +import CodePreTag from '../../src/components/CodePreTag'; + +describe('<CodePreTag /> component', () => { + it('renders children properly', () => { + const tree = renderer + .create( + <CodePreTag> + <code> + {`function foo() { + return 'bar'; + }`} + </code> + </CodePreTag> + ) + .toJSON(); + + expect(tree).toMatchSnapshot(); + }); +}); diff --git a/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap b/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap new file mode 100644 index 0000000..07ba81f --- /dev/null +++ b/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`<CodePreTag /> component renders children properly 1`] = ` +<pre> + <code> + function foo() { + return 'bar'; + } + </code> +</pre> +`; From 38422e3be73245b6f6dd6bc54e000e1456f6aded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Garc=C3=ADa=20Herv=C3=A1s?= <aar.garc.herv@gmail.com> Date: Tue, 7 May 2019 21:41:29 +0200 Subject: [PATCH 019/129] Update snapshot --- __tests__/components/CodePreTag.test.jsx | 11 ++++++----- .../components/__snapshots__/CodePreTag.test.jsx.snap | 8 +++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/__tests__/components/CodePreTag.test.jsx b/__tests__/components/CodePreTag.test.jsx index ddb1908..c1e5ad3 100644 --- a/__tests__/components/CodePreTag.test.jsx +++ b/__tests__/components/CodePreTag.test.jsx @@ -6,14 +6,15 @@ import CodePreTag from '../../src/components/CodePreTag'; describe('<CodePreTag /> component', () => { it('renders children properly', () => { + const codeToRender = ` + function foo() { + return 'bar'; + } + `; const tree = renderer .create( <CodePreTag> - <code> - {`function foo() { - return 'bar'; - }`} - </code> + <code>{codeToRender}</code> </CodePreTag> ) .toJSON(); diff --git a/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap b/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap index 07ba81f..9da1f3f 100644 --- a/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap +++ b/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap @@ -3,9 +3,11 @@ exports[`<CodePreTag /> component renders children properly 1`] = ` <pre> <code> - function foo() { - return 'bar'; - } + + function foo() { + return 'bar'; + } + </code> </pre> `; From 4e6431e87d6e935eb42678b9c25e8c225d708abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Garc=C3=ADa=20Herv=C3=A1s?= <aar.garc.herv@gmail.com> Date: Tue, 7 May 2019 23:27:50 +0200 Subject: [PATCH 020/129] Set scroll position direcly --- src/components/CodePreTag.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/CodePreTag.jsx b/src/components/CodePreTag.jsx index bd70695..ea2e582 100644 --- a/src/components/CodePreTag.jsx +++ b/src/components/CodePreTag.jsx @@ -5,8 +5,9 @@ const CodePreTag = ({ children, ...restProps }) => { const syntaxHighlighterEl = useRef(null); useEffect(() => { - if (syntaxHighlighterEl.current && syntaxHighlighterEl.current.scroll) { - syntaxHighlighterEl.current.scroll(0, 0); + if (syntaxHighlighterEl.current) { + syntaxHighlighterEl.current.scrollTop = 0; + syntaxHighlighterEl.current.scrollLeft = 0; } }, [children]); From 94842cc698a9162c5c6624f7bcb755469cfe6b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Garc=C3=ADa=20Herv=C3=A1s?= <aar.garc.herv@gmail.com> Date: Tue, 7 May 2019 23:29:08 +0200 Subject: [PATCH 021/129] Test reset scroll position after children update in CodePreTag --- __tests__/components/CodePreTag.test.jsx | 85 +++++++++++++++++-- __tests__/components/ProgressBar.test.js | 2 - .../__snapshots__/CodePreTag.test.jsx.snap | 8 +- 3 files changed, 83 insertions(+), 12 deletions(-) diff --git a/__tests__/components/CodePreTag.test.jsx b/__tests__/components/CodePreTag.test.jsx index c1e5ad3..2cc0634 100644 --- a/__tests__/components/CodePreTag.test.jsx +++ b/__tests__/components/CodePreTag.test.jsx @@ -1,24 +1,97 @@ import React from 'react'; +import TestUtils from 'react-dom/test-utils'; import renderer from 'react-test-renderer'; +import { mount } from 'enzyme'; import 'jest-styled-components'; import CodePreTag from '../../src/components/CodePreTag'; +const shortCodeToRender = ` + function foo() { + return 'bar'; + } +`; + +const longCodeToRender = ` + function EquipmentPattern(name) { + this.equipments = []; + this.name = name; + } + + EquipmentPattern.prototype.add = function(equipment) { + this.equipments.push(equipment); + }; + + EquipmentPattern.prototype.getPrice = function() { + return this.equipments + .map(function(equipment) { + return equipment.getPrice(); + }) + .reduce(function(a, b) { + return a + b; + }); + }; + + function Equipment() {} + + Equipment.prototype.getPrice = function() { + return this.price; + }; + + // -- leafs + function FloppyDisk() { + this.name = 'Floppy Disk'; + this.price = 70; + } + FloppyDisk.prototype = Object.create(Equipment.prototype); + + function HardDrive() { + this.name = 'Hard Drive'; + this.price = 250; + } + HardDrive.prototype = Object.create(Equipment.prototype); + + function Memory() { + this.name = '8gb memomry'; + this.price = 280; + } + Memory.prototype = Object.create(Equipment.prototype); + + module.exports = [EquipmentPattern, FloppyDisk, HardDrive, Memory]; +`; + describe('<CodePreTag /> component', () => { it('renders children properly', () => { - const codeToRender = ` - function foo() { - return 'bar'; - } - `; const tree = renderer .create( <CodePreTag> - <code>{codeToRender}</code> + <code>{shortCodeToRender}</code> </CodePreTag> ) .toJSON(); expect(tree).toMatchSnapshot(); }); + + it('scrolls to position 0,0 on children change', () => { + const container = mount( + <CodePreTag style={{ height: 200 }}> + <code>{longCodeToRender}</code> + </CodePreTag> + ); + const $container = container.getDOMNode(); + + // Initially the scroll position must be at the top + expect($container.scrollTop).toBe(0); + + $container.scrollTop = 100; + + // Test that the scroll position is updated correctly + expect($container.scrollTop).toBe(100); + + container.setProps({ children: shortCodeToRender }); + + // Test that the scroll position is reset after changing its children + expect($container.scrollTop).toBe(0); + }); }); diff --git a/__tests__/components/ProgressBar.test.js b/__tests__/components/ProgressBar.test.js index ab624ca..75dd6b1 100644 --- a/__tests__/components/ProgressBar.test.js +++ b/__tests__/components/ProgressBar.test.js @@ -53,8 +53,6 @@ describe('<ProgressBar /> component', () => { it('has styled-component rendered classes', () => { const tree = renderer.create(result).toJSON(); - // console.log(tree); - expect(tree.children[0].props.className).toBeDefined(); }); diff --git a/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap b/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap index 9da1f3f..b06783f 100644 --- a/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap +++ b/__tests__/components/__snapshots__/CodePreTag.test.jsx.snap @@ -4,10 +4,10 @@ exports[`<CodePreTag /> component renders children properly 1`] = ` <pre> <code> - function foo() { - return 'bar'; - } - + function foo() { + return 'bar'; + } + </code> </pre> `; From be4fb7a8c98ae125951fa43fd470c7ce62362b4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Garc=C3=ADa=20Herv=C3=A1s?= <aar.garc.herv@gmail.com> Date: Tue, 7 May 2019 23:29:53 +0200 Subject: [PATCH 022/129] Sort test code properly --- __tests__/components/CodePreTag.test.jsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/__tests__/components/CodePreTag.test.jsx b/__tests__/components/CodePreTag.test.jsx index 2cc0634..45eb022 100644 --- a/__tests__/components/CodePreTag.test.jsx +++ b/__tests__/components/CodePreTag.test.jsx @@ -84,14 +84,12 @@ describe('<CodePreTag /> component', () => { // Initially the scroll position must be at the top expect($container.scrollTop).toBe(0); - $container.scrollTop = 100; - // Test that the scroll position is updated correctly + $container.scrollTop = 100; expect($container.scrollTop).toBe(100); - container.setProps({ children: shortCodeToRender }); - // Test that the scroll position is reset after changing its children + container.setProps({ children: shortCodeToRender }); expect($container.scrollTop).toBe(0); }); }); From 488cb2305eeb37a3b2f799172e7034f9f9ec7461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Garc=C3=ADa=20Herv=C3=A1s?= <aar.garc.herv@gmail.com> Date: Tue, 7 May 2019 23:33:45 +0200 Subject: [PATCH 023/129] Remove unused import --- __tests__/components/CodePreTag.test.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/__tests__/components/CodePreTag.test.jsx b/__tests__/components/CodePreTag.test.jsx index 45eb022..56bda91 100644 --- a/__tests__/components/CodePreTag.test.jsx +++ b/__tests__/components/CodePreTag.test.jsx @@ -1,5 +1,4 @@ import React from 'react'; -import TestUtils from 'react-dom/test-utils'; import renderer from 'react-test-renderer'; import { mount } from 'enzyme'; import 'jest-styled-components'; From 017446d998c8984c87ed3ca77ce7ef7a70c29c3c Mon Sep 17 00:00:00 2001 From: Dmitri <sardius.main@gmail.com> Date: Mon, 13 May 2019 10:45:55 +0300 Subject: [PATCH 024/129] Remove unused extra parameter from ES6 example --- src/static/patterns/structural_flyweight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/patterns/structural_flyweight.js b/src/static/patterns/structural_flyweight.js index a96e383..0643f1f 100644 --- a/src/static/patterns/structural_flyweight.js +++ b/src/static/patterns/structural_flyweight.js @@ -29,7 +29,7 @@ module.exports = colorCreator;`, } class colorCreator { - constructor(name) { + constructor() { this.colors = {}; } From b416f1415ac1315fe472e3f229e7e2efa491518d Mon Sep 17 00:00:00 2001 From: Zoltan Toth <contact@zoltantoth.com> Date: Mon, 13 May 2019 11:12:13 -0400 Subject: [PATCH 025/129] Remove carat from packages version numbers --- package.json | 90 ++++++++++++++++++++++++++-------------------------- yarn.lock | 88 +++++++++++++++++++++++++------------------------- 2 files changed, 89 insertions(+), 89 deletions(-) diff --git a/package.json b/package.json index 834cd7c..2f7226b 100644 --- a/package.json +++ b/package.json @@ -2,15 +2,15 @@ "name": "design-patterns-game", "version": "1.0.0", "dependencies": { - "prop-types": "^15.7.2", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "react-redux": "^7.0.3", - "react-router-dom": "^5.0.0", - "react-syntax-highlighter": "^10.2.1", - "redux": "^4.0.1", - "styled-components": "^4.2.0", - "uuid": "^3.3.2" + "prop-types": "15.7.2", + "react": "16.8.6", + "react-dom": "16.8.6", + "react-redux": "7.0.3", + "react-router-dom": "5.0.0", + "react-syntax-highlighter": "10.2.1", + "redux": "4.0.1", + "styled-components": "4.2.0", + "uuid": "3.3.2" }, "scripts": { "start": "webpack-dev-server --mode development", @@ -41,43 +41,43 @@ ] }, "devDependencies": { - "@babel/core": "^7.4.4", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/preset-env": "^7.4.4", - "@babel/preset-react": "^7.0.0", - "@storybook/addon-actions": "^5.0.11", - "@storybook/addon-knobs": "^5.0.11", - "@storybook/addon-links": "^5.0.11", - "@storybook/addon-storyshots": "^5.0.11", - "@storybook/addons": "^5.0.11", - "@storybook/react": "^5.0.11", - "babel-eslint": "^10.0.1", - "babel-jest": "^24.7.1", - "babel-loader": "^8.0.5", - "babel-plugin-require-context-hook": "^1.0.0", - "babel-preset-env": "^1.7.0", - "babel-preset-react": "^6.24.1", - "coveralls": "^3.0.3", - "cypress": "^3.2.0", - "enzyme": "^3.9.0", - "enzyme-adapter-react-16": "^1.12.1", - "enzyme-to-json": "^3.3.5", - "eslint": "^5.16.0", - "eslint-config-react": "^1.1.7", - "eslint-loader": "^2.1.2", - "eslint-plugin-react": "^7.12.4", - "html-webpack-plugin": "^3.2.0", - "jest": "^24.7.1", - "jest-styled-components": "^6.3.1", + "@babel/core": "7.4.4", + "@babel/plugin-proposal-class-properties": "7.4.4", + "@babel/preset-env": "7.4.4", + "@babel/preset-react": "7.0.0", + "@storybook/addon-actions": "5.0.11", + "@storybook/addon-knobs": "5.0.11", + "@storybook/addon-links": "5.0.11", + "@storybook/addon-storyshots": "5.0.11", + "@storybook/addons": "5.0.11", + "@storybook/react": "5.0.11", + "babel-eslint": "10.0.1", + "babel-jest": "24.7.1", + "babel-loader": "8.0.5", + "babel-plugin-require-context-hook": "1.0.0", + "babel-preset-env": "1.7.0", + "babel-preset-react": "6.24.1", + "coveralls": "3.0.3", + "cypress": "3.2.0", + "enzyme": "3.9.0", + "enzyme-adapter-react-16": "1.12.1", + "enzyme-to-json": "3.3.5", + "eslint": "5.16.0", + "eslint-config-react": "1.1.7", + "eslint-loader": "2.1.2", + "eslint-plugin-react": "7.12.4", + "html-webpack-plugin": "3.2.0", + "jest": "24.7.1", + "jest-styled-components": "6.3.1", "prettier": "1.17.0", - "react-test-renderer": "^16.8.6", - "redux-mock-store": "^1.5.3", + "react-test-renderer": "16.8.6", + "redux-mock-store": "1.5.3", "storybook-addon-styled-component-theme": "1.2.1", - "surge": "^0.20.4", - "wait-on": "^3.2.0", - "webpack": "^4.30.0", - "webpack-bundle-analyzer": "^3.3.2", - "webpack-cli": "^3.3.1", - "webpack-dev-server": "^3.3.1" + "surge": "0.20.4", + "wait-on": "3.2.0", + "webpack": "4.30.0", + "webpack-bundle-analyzer": "3.3.2", + "webpack-cli": "3.3.1", + "webpack-dev-server": "3.3.1" } } diff --git a/yarn.lock b/yarn.lock index f28c7c3..73ddc0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,7 +29,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.4.3", "@babel/core@^7.4.4": +"@babel/core@7.4.4", "@babel/core@^7.1.0", "@babel/core@^7.4.3": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250" integrity sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ== @@ -275,7 +275,7 @@ "@babel/helper-create-class-features-plugin" "^7.3.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-class-properties@^7.3.0", "@babel/plugin-proposal-class-properties@^7.4.4": +"@babel/plugin-proposal-class-properties@7.4.4", "@babel/plugin-proposal-class-properties@^7.3.0": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg== @@ -783,7 +783,7 @@ js-levenshtein "^1.1.3" semver "^5.3.0" -"@babel/preset-env@^7.4.1", "@babel/preset-env@^7.4.3", "@babel/preset-env@^7.4.4": +"@babel/preset-env@7.4.4", "@babel/preset-env@^7.4.1", "@babel/preset-env@^7.4.3": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.4.tgz#b6f6825bfb27b3e1394ca3de4f926482722c1d6f" integrity sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw== @@ -1258,7 +1258,7 @@ react-lifecycles-compat "^3.0.4" warning "^3.0.0" -"@storybook/addon-actions@^5.0.11": +"@storybook/addon-actions@5.0.11": version "5.0.11" resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.0.11.tgz#7ca6d6ce9400b9b97f2699935edade88905767c3" integrity sha512-1aJ/UDBYAyuqq4wkEYKNv/xwy2BZS61Cl8+c8le5af3Rk/y2HVRuBHPoKptFkS0nACE/XvPSvLPUIHZDLUkkMw== @@ -1278,7 +1278,7 @@ react-inspector "^2.3.0" uuid "^3.3.2" -"@storybook/addon-knobs@^5.0.11": +"@storybook/addon-knobs@5.0.11": version "5.0.11" resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.0.11.tgz#1f093560ceec78f4906e0575ded0ac03b4494b09" integrity sha512-9/Q88GhzISxue1wxvbfVa1e8kBA1V6ny1eXWwKN1TRIfBRk4fzmIQtgKMf2R9kQ1VJCzzPHs1sHEpjjvSGbMFw== @@ -1300,7 +1300,7 @@ react-select "^2.3.0" util-deprecate "^1.0.2" -"@storybook/addon-links@^5.0.11": +"@storybook/addon-links@5.0.11": version "5.0.11" resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-5.0.11.tgz#59a9ce8acc8d5dd7e5622ff875cafc8fe4d6e865" integrity sha512-ZZibz+ROCGz0I8V20jyj8sUjErnbXlFhp5P5xH3reDbfQQwY7ut7BEm0FHM9ksyUA0MvExWmiKuvNDU5dQPqgA== @@ -1313,7 +1313,7 @@ prop-types "^15.6.2" qs "^6.5.2" -"@storybook/addon-storyshots@^5.0.11": +"@storybook/addon-storyshots@5.0.11": version "5.0.11" resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-5.0.11.tgz#006335e7949c6e03b81f6570c050dc5bb912d102" integrity sha512-75G+LMdCJWnLnKNtzwe0xYIf5lg+2v8NHLiHHE4MtFtCDWoP/IlDKS5wqiziHMmtqbFB402HsCuS5u0ArYbw1Q== @@ -1326,7 +1326,7 @@ read-pkg-up "^4.0.0" regenerator-runtime "^0.12.1" -"@storybook/addons@5.0.11", "@storybook/addons@^5.0.11": +"@storybook/addons@5.0.11": version "5.0.11" resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.0.11.tgz#86de70747e0a692d9dd8ea431daa1147d8785697" integrity sha512-zw3vjYa2EfFQKKZd8/o44eVy5xaZpFEBY/4mGMBBTQb57H0X1VTzE4VxHrk7fGPJMdmrPfXbYEiQtfHyO56y+w== @@ -1505,7 +1505,7 @@ pretty-hrtime "^1.0.3" regenerator-runtime "^0.12.1" -"@storybook/react@^5.0.11": +"@storybook/react@5.0.11": version "5.0.11" resolved "https://registry.yarnpkg.com/@storybook/react/-/react-5.0.11.tgz#e131437a59d1f2fac7fbad4ab0c28a54d8a96398" integrity sha512-HOKtOvGAOpwZyKXEEjNg3Exhf1E946H+Wcmfgp3hD7BOdxiWbXvkE3kwdBHb+cnQri0rJaADnYiXB/p8MkxfzQ== @@ -2424,7 +2424,7 @@ babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-eslint@^10.0.1: +babel-eslint@10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== @@ -2585,7 +2585,7 @@ babel-helper-to-multiple-sequence-expressions@^0.5.0: resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA== -babel-jest@^24.7.1: +babel-jest@24.7.1, babel-jest@^24.7.1: version "24.7.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.7.1.tgz#73902c9ff15a7dfbdc9994b0b17fcefd96042178" integrity sha512-GPnLqfk8Mtt0i4OemjWkChi73A3ALs4w2/QbG64uAj8b5mmwzxc7jbJVRZt8NJkxi6FopVHog9S3xX6UJKb2qg== @@ -2598,7 +2598,7 @@ babel-jest@^24.7.1: chalk "^2.4.2" slash "^2.0.0" -babel-loader@8.0.5, babel-loader@^8.0.5: +babel-loader@8.0.5: version "8.0.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33" integrity sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw== @@ -2789,7 +2789,7 @@ babel-plugin-react-docgen@^2.0.2: react-docgen "^3.0.0" recast "^0.14.7" -babel-plugin-require-context-hook@^1.0.0: +babel-plugin-require-context-hook@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-require-context-hook/-/babel-plugin-require-context-hook-1.0.0.tgz#3f0e7cce87c338f53639b948632fd4e73834632d" integrity sha512-EMZD1563QUqLhzrqcThk759RhuNVX/ZJdrtGK6drwzgvnR+ARjWyXIHPbu+tUNaMGtPz/gQeAM2M6VUw2UiUeA== @@ -3156,7 +3156,7 @@ babel-plugin-transform-undefined-to-void@^6.9.4: resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= -babel-preset-env@^1.7.0: +babel-preset-env@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== @@ -3261,7 +3261,7 @@ babel-preset-react-app@^7.0.0: babel-plugin-macros "2.5.0" babel-plugin-transform-react-remove-prop-types "0.4.24" -babel-preset-react@^6.24.1: +babel-preset-react@6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" integrity sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A= @@ -4247,7 +4247,7 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.2.0: js-yaml "^3.13.0" parse-json "^4.0.0" -coveralls@^3.0.3: +coveralls@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.3.tgz#83b1c64aea1c6afa69beaf50b55ac1bc4d13e2b8" integrity sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg== @@ -4495,7 +4495,7 @@ cyclist@~0.2.2: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= -cypress@^3.2.0: +cypress@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.2.0.tgz#c2d5befd5077dab6fb52ad70721e0868ac057001" integrity sha512-PN0wz6x634QyNL56/voTzJoeScDfwtecvSfFTHfv5MkHuECVSR4VQcEZTvYtKWln3CMBMUkWbBKPIwwu2+a/kw== @@ -5024,7 +5024,7 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== -enzyme-adapter-react-16@^1.12.1: +enzyme-adapter-react-16@1.12.1: version "1.12.1" resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.12.1.tgz#6a2d74c80559d35ac0a91ca162fa45f4186290cf" integrity sha512-GB61gvY97XvrA6qljExGY+lgI6BBwz+ASLaRKct9VQ3ozu0EraqcNn3CcrUckSGIqFGa1+CxO5gj5is5t3lwrw== @@ -5049,14 +5049,14 @@ enzyme-adapter-utils@^1.11.0: prop-types "^15.7.2" semver "^5.6.0" -enzyme-to-json@^3.3.5: +enzyme-to-json@3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.3.5.tgz#f8eb82bd3d5941c9d8bc6fd9140030777d17d0af" integrity sha512-DmH1wJ68HyPqKSYXdQqB33ZotwfUhwQZW3IGXaNXgR69Iodaoj8TF/D9RjLdz4pEhGq2Tx2zwNUIjBuqoZeTgA== dependencies: lodash "^4.17.4" -enzyme@^3.9.0: +enzyme@3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.9.0.tgz#2b491f06ca966eb56b6510068c7894a7e0be3909" integrity sha512-JqxI2BRFHbmiP7/UFqvsjxTirWoM1HfeaJrmVSZ9a1EADKkZgdPcAuISPMpoUiHlac9J4dYt81MC5BBIrbJGMg== @@ -5150,12 +5150,12 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-react@^1.1.7: +eslint-config-react@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/eslint-config-react/-/eslint-config-react-1.1.7.tgz#a0918d0fc47d0e9bd161a47308021da85d2585b3" integrity sha1-oJGND8R9DpvRYaRzCAIdqF0lhbM= -eslint-loader@^2.1.2: +eslint-loader@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.2.tgz#453542a1230d6ffac90e4e7cb9cadba9d851be68" integrity sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg== @@ -5166,7 +5166,7 @@ eslint-loader@^2.1.2: object-hash "^1.1.4" rimraf "^2.6.1" -eslint-plugin-react@^7.12.4: +eslint-plugin-react@7.12.4: version "7.12.4" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c" integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ== @@ -5205,7 +5205,7 @@ eslint-visitor-keys@^1.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== -eslint@^5.16.0: +eslint@5.16.0: version "5.16.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== @@ -6456,7 +6456,7 @@ html-minifier@^3.2.3, html-minifier@^3.5.20: relateurl "0.2.x" uglify-js "3.4.x" -html-webpack-plugin@^3.2.0: +html-webpack-plugin@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= @@ -7616,7 +7616,7 @@ jest-specific-snapshot@^1.0.0: dependencies: jest-snapshot "^23.6.0" -jest-styled-components@^6.3.1: +jest-styled-components@6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-6.3.1.tgz#fa21a89bfe8c20081c7c083cbaed2200854b60e3" integrity sha512-zie3ajvJbwlbHCAq8/Bv5jdbcYCz0ZMRNNX6adL7wSRpkCVPQtiJigv1140JN1ZOJIODPn8VKrjeFCN+jlPa7w== @@ -7674,7 +7674,7 @@ jest-worker@^24.6.0: merge-stream "^1.0.1" supports-color "^6.1.0" -jest@^24.7.1: +jest@24.7.1: version "24.7.1" resolved "https://registry.yarnpkg.com/jest/-/jest-24.7.1.tgz#0d94331cf510c75893ee32f87d7321d5bf8f2501" integrity sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA== @@ -9729,7 +9729,7 @@ prop-types-exact@^1.2.0: object.assign "^4.1.0" reflect.ownkeys "^0.2.0" -prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -10005,7 +10005,7 @@ react-docgen@^3.0.0: node-dir "^0.1.10" recast "^0.16.0" -react-dom@^16.8.1, react-dom@^16.8.6: +react-dom@16.8.6, react-dom@^16.8.1: version "16.8.6" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f" integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA== @@ -10116,7 +10116,7 @@ react-popper@^1.3.3: typed-styles "^0.0.7" warning "^4.0.2" -react-redux@^7.0.3: +react-redux@7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.0.3.tgz#983c5a6de81cb1e696bd1c090ba826545f9170f1" integrity sha512-vYZA7ftOYlDk3NetitsI7fLjryt/widNl1SLXYvFenIpm7vjb4ryK0EeFrgn62usg5fYkyIAWNUPKnwWPevKLg== @@ -10138,7 +10138,7 @@ react-resize-detector@^3.2.1: prop-types "^15.6.2" resize-observer-polyfill "^1.5.1" -react-router-dom@^5.0.0: +react-router-dom@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.0.0.tgz#542a9b86af269a37f0b87218c4c25ea8dcf0c073" integrity sha512-wSpja5g9kh5dIteZT3tUoggjnsa+TPFHSMrpHXMpFsaHhQkm/JNVGh2jiF9Dkh4+duj4MKCkwO6H08u6inZYgQ== @@ -10180,7 +10180,7 @@ react-select@^2.3.0: react-input-autosize "^2.2.1" react-transition-group "^2.2.1" -react-syntax-highlighter@^10.2.1: +react-syntax-highlighter@10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-10.2.1.tgz#a30bf8e131c29e714a8e781ecadbace329da1530" integrity sha512-oiCu5H0cv8FoBx1RfKWFJJEWARIyvl8FbOpzLtTextkN2D6mPAFjRooSyP0sU7/BqZnt7C6vF1CqrjdnEKREYw== @@ -10202,7 +10202,7 @@ react-syntax-highlighter@^8.0.1: prismjs "^1.8.4" refractor "^2.4.1" -react-test-renderer@^16.0.0-0, react-test-renderer@^16.8.6: +react-test-renderer@16.8.6, react-test-renderer@^16.0.0-0: version "16.8.6" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.6.tgz#188d8029b8c39c786f998aa3efd3ffe7642d5ba1" integrity sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw== @@ -10230,7 +10230,7 @@ react-transition-group@^2.2.1: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" -react@^16.8.1, react@^16.8.6: +react@16.8.6, react@^16.8.1: version "16.8.6" resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw== @@ -10379,14 +10379,14 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" -redux-mock-store@^1.5.3: +redux-mock-store@1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.3.tgz#1f10528949b7ce8056c2532624f7cafa98576c6d" integrity sha512-ryhkkb/4D4CUGpAV2ln1GOY/uh51aczjcRz9k2L2bPx/Xja3c5pSGJJPyR25GNVRXtKIExScdAgFdiXp68GmJA== dependencies: lodash.isplainobject "^4.0.6" -redux@^4.0.1: +redux@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5" integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg== @@ -11505,7 +11505,7 @@ style-loader@^0.23.1: loader-utils "^1.1.0" schema-utils "^1.0.0" -styled-components@^4.2.0: +styled-components@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.2.0.tgz#811fbbec4d64c7189f6c7482b9eb6fefa7fefef7" integrity sha512-L/LzkL3ZbBhqIVHdR7DbYujy4tqvTNRfc+4JWDCYyhTatI+8CRRQUmdaR0+ARl03DWsfKLhjewll5uNLrqrl4A== @@ -11556,7 +11556,7 @@ surge-ignore@0.2.0: resolved "https://registry.yarnpkg.com/surge-ignore/-/surge-ignore-0.2.0.tgz#5a7f8a20a71188cf9e75a2cfe8eb182de90daf3b" integrity sha1-Wn+KIKcRiM+edaLP6OsYLekNrzs= -surge@^0.20.4: +surge@0.20.4: version "0.20.4" resolved "https://registry.yarnpkg.com/surge/-/surge-0.20.4.tgz#4e180a20c4c44dfa95176049112f3561fe9dfb55" integrity sha512-yIZV6cpL4l6XIqQqP2tI/PIT3gKNxK+jAWBbpwIYK+ECE9KKLmYz4FYxDpSqEq6yfgcUZ8LIsUb4tmpx+MMoew== @@ -12167,7 +12167,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2: +uuid@3.3.2, uuid@^3.0.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== @@ -12254,7 +12254,7 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" -wait-on@^3.2.0: +wait-on@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-3.2.0.tgz#c83924df0fc42a675c678324c49c769d378bcb85" integrity sha512-QUGNKlKLDyY6W/qHdxaRlXUAgLPe+3mLL/tRByHpRNcHs/c7dZXbu+OnJWGNux6tU1WFh/Z8aEwvbuzSAu79Zg== @@ -12312,7 +12312,7 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-bundle-analyzer@^3.3.2: +webpack-bundle-analyzer@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz#3da733a900f515914e729fcebcd4c40dde71fc6f" integrity sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA== @@ -12331,7 +12331,7 @@ webpack-bundle-analyzer@^3.3.2: opener "^1.5.1" ws "^6.0.0" -webpack-cli@^3.3.1: +webpack-cli@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.1.tgz#98b0499c7138ba9ece8898bd99c4f007db59909d" integrity sha512-c2inFU7SM0IttEgF7fK6AaUsbBnORRzminvbyRKS+NlbQHVZdCtzKBlavRL5359bFsywXGRAItA5di/IruC8mg== @@ -12358,7 +12358,7 @@ webpack-dev-middleware@^3.5.1, webpack-dev-middleware@^3.6.2: range-parser "^1.0.3" webpack-log "^2.0.0" -webpack-dev-server@^3.3.1: +webpack-dev-server@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.3.1.tgz#7046e49ded5c1255a82c5d942bcdda552b72a62d" integrity sha512-jY09LikOyGZrxVTXK0mgIq9y2IhCoJ05848dKZqX1gAGLU1YDqgpOT71+W53JH/wI4v6ky4hm+KvSyW14JEs5A== @@ -12420,7 +12420,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.29.0, webpack@^4.30.0: +webpack@4.30.0, webpack@^4.29.0: version "4.30.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.30.0.tgz#aca76ef75630a22c49fcc235b39b4c57591d33a9" integrity sha512-4hgvO2YbAFUhyTdlR4FNyt2+YaYBYHavyzjCMbZzgglo02rlKi/pcsEzwCuCpsn1ryzIl1cq/u8ArIKu8JBYMg== From 184d978ff064f1610b2b41975ae0050076d89e5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aar=C3=B3n=20Garc=C3=ADa=20Herv=C3=A1s?= <aar.garc.herv@gmail.com> Date: Tue, 14 May 2019 18:03:45 +0200 Subject: [PATCH 026/129] Remove .vscode folder --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 7c2feb7..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "editor.formatOnSave": false -} From 96915991a0c9e0079a33e270b82117c68053d520 Mon Sep 17 00:00:00 2001 From: Zoltan Toth <contact@zoltantoth.com> Date: Wed, 15 May 2019 12:51:10 -0400 Subject: [PATCH 027/129] Remove Twitter widget and share button --- index.html | 15 ------ src/pages/Game.jsx | 114 ++++++++++++++++++--------------------------- 2 files changed, 46 insertions(+), 83 deletions(-) diff --git a/index.html b/index.html index f81dc6b..d6816e1 100644 --- a/index.html +++ b/index.html @@ -8,22 +8,7 @@ <body> <a href="https://github.com/zoltantothcom/Design-Patterns-JavaScript" target="_blank" class="github-corner" aria-label="View source on GitHub"><svg width="80" height="80" viewBox="0 0 250 250" style="fill:#fff; color:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z" fill="#e22a23"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style> <div id="root" /> - <script>window.twttr = (function(d, s, id) { - var js, fjs = d.getElementsByTagName(s)[0], - t = window.twttr || {}; - if (d.getElementById(id)) return t; - js = d.createElement(s); - js.id = id; - js.src = "https://platform.twitter.com/widgets.js"; - fjs.parentNode.insertBefore(js, fjs); - t._e = []; - t.ready = function(f) { - t._e.push(f); - }; - - return t; - }(document, "script", "twitter-wjs"));</script> <!-- Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-25262063-2"></script> <script> diff --git a/src/pages/Game.jsx b/src/pages/Game.jsx index 062c063..a3c17c4 100644 --- a/src/pages/Game.jsx +++ b/src/pages/Game.jsx @@ -1,4 +1,4 @@ -import React, { Fragment } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; import styled from 'styled-components'; import { connect } from 'react-redux'; @@ -22,7 +22,6 @@ const Intro = styled.div` const StartButtonContainer = styled.div` margin: 3rem auto 1rem; - /* text-align: center; */ `; const Restart = styled.div` @@ -30,9 +29,9 @@ const Restart = styled.div` text-align: center; `; -const TwitterButton = styled.a` - background: #1da1f2; - color: #ffffff; +const GitHubButton = styled.a` + background: #e9ecef; + color: #495057; padding: 6px 12px; border-radius: 4px; margin: 0 8px; @@ -40,75 +39,54 @@ const TwitterButton = styled.a` font-size: 0.8rem; `; -const GitHubButton = styled(TwitterButton)` - background: #e9ecef; - color: #495057; -`; - const ShareContainer = styled.p` text-align: center; `; -const Game = ({ intro, current, answers, style, onStart, onRestart }) => { - let correct; +const Game = ({ intro, current, answers, style, onStart, onRestart }) => ( + <> + {intro && ( + <Intro> + <p> + Each question contains a code snippet and four answer choices. + <br /> + Look carefully at the code and choose the one correct answer. + </p> + <p>After answering all 23 questions you'll be shown your results.</p> + <StartButtonContainer> + <Button label="Start Game" id="start" onClick={onStart} /> + </StartButtonContainer> + </Intro> + )} - if (!current) { - correct = answers.filter(item => item.correct).length; - } - - return ( - <Fragment> - {intro && ( - <Intro> - <p> - Each question contains a code snippet and four answer choices. - <br /> - Look carefully at the code and choose the one correct answer. - </p> - <p>After answering all 23 questions you'll be shown your results.</p> - <StartButtonContainer> - <Button label="Start Game" id="start" onClick={onStart} /> - </StartButtonContainer> - </Intro> - )} - - {!intro && current && ( - <Fragment> - <ProgressBar /> - <Code style={style} /> - <ButtonContainer /> - </Fragment> - )} + {!intro && current && ( + <> + <ProgressBar /> + <Code style={style} /> + <ButtonContainer /> + </> + )} - {!intro && !current && ( - <Fragment> - <Result /> - <Percentage /> - <Restart> - <Button label="Try Again" id="try_again" onClick={onRestart} /> - </Restart> - <ShareContainer> - <TwitterButton - className="twitter-share-button" - data-dnt="true" - href={`https://twitter.com/intent/tweet?text=I%20scored%20${correct}%20out%20of%2023%20in%20JavaScript%20Design%20Patterns%20game!&url=http://designpatternsgame.com`} - > - Tweet Your Score - </TwitterButton> - - <GitHubButton - href="https://github.com/zoltantothcom/Design-Patterns-JavaScript" - aria-label="Star zoltantothcom/Design-Patterns-JavaScript on GitHub" - target="_blank" - > - Star on GitHub - </GitHubButton> - </ShareContainer> - </Fragment> - )} - </Fragment> - ); -}; + {!intro && !current && ( + <> + <Result /> + <Percentage /> + <Restart> + <Button label="Try Again" id="try_again" onClick={onRestart} /> + </Restart> + <ShareContainer> + <GitHubButton + href="https://github.com/zoltantothcom/Design-Patterns-JavaScript" + aria-label="Star zoltantothcom/Design-Patterns-JavaScript on GitHub" + target="_blank" + > + Star on GitHub + </GitHubButton> + </ShareContainer> + </> + )} + </> +); Game.propTypes = { style: PropTypes.object.isRequired, From 5cc713158569b78720310f2c27a0fc4e803128f4 Mon Sep 17 00:00:00 2001 From: Zoltan Toth <contact@zoltantoth.com> Date: Wed, 15 May 2019 13:26:08 -0400 Subject: [PATCH 028/129] Add Facebook icon --- src/Layout.jsx | 3 +++ src/components/Footer.jsx | 36 ++++++++++++++++++++++++++++++++++++ src/static/icons/index.js | 7 +++++++ 3 files changed, 46 insertions(+) create mode 100644 src/components/Footer.jsx diff --git a/src/Layout.jsx b/src/Layout.jsx index 6d5fdc2..fcef844 100644 --- a/src/Layout.jsx +++ b/src/Layout.jsx @@ -6,6 +6,7 @@ import { connect } from 'react-redux'; import styleLight from './styles/hljs/hljs.light'; import styleDark from './styles/hljs/hljs.dark'; import Header from './components/Header'; +import Footer from './components/Footer'; import GlobalStyle from './styles/global'; import { themeCommon } from './styles/themes/theme.common'; import { themeLight } from './styles/themes/theme.light'; @@ -38,6 +39,8 @@ const Layout = props => { <Route path="/about" component={About} /> <Redirect to="/" /> </Switch> + + <Footer /> </React.Fragment> </ThemeProvider> ); diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx new file mode 100644 index 0000000..aa98d13 --- /dev/null +++ b/src/components/Footer.jsx @@ -0,0 +1,36 @@ +import React from 'react'; +import styled from 'styled-components'; +import { ICON_FACEBOOK } from '../static/icons'; + +const FooterContainer = styled.footer` + display: flex; + justify-content: center; + margin-top: 5rem; + + a { + border: 1px solid ${props => props.theme.buttonBackground}; + border-radius: 50%; + display: inline-flex; + padding: 0.5rem; + + :hover svg, + :active svg { + fill: ${props => props.theme.toggleFillHover}; + } + } + + svg { + fill: ${props => props.theme.buttonBackground}; + transition: 0.2s; + } +`; + +const Footer = () => ( + <FooterContainer> + <a href="https://www.facebook.com/sharer.php?u=https://designpatternsgame.com/" target="_blank"> + {ICON_FACEBOOK} + </a> + </FooterContainer> +); + +export default Footer; diff --git a/src/static/icons/index.js b/src/static/icons/index.js index b429bb3..37ef38f 100644 --- a/src/static/icons/index.js +++ b/src/static/icons/index.js @@ -37,3 +37,10 @@ export const SUN_FILLED = ( <path d="M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z" /> </Fragment> ); + +export const ICON_FACEBOOK = ( + <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"> + <title>facebook + + +); From c47cc2d33d93cbd630ad043d5de625433f496f07 Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Wed, 15 May 2019 13:34:34 -0400 Subject: [PATCH 029/129] Add Twitter icon --- src/components/Footer.jsx | 11 +++++++++-- src/static/icons/index.js | 7 +++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index aa98d13..0384e3b 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -1,6 +1,6 @@ import React from 'react'; import styled from 'styled-components'; -import { ICON_FACEBOOK } from '../static/icons'; +import { ICON_TWITTER, ICON_FACEBOOK } from '../static/icons'; const FooterContainer = styled.footer` display: flex; @@ -11,10 +11,11 @@ const FooterContainer = styled.footer` border: 1px solid ${props => props.theme.buttonBackground}; border-radius: 50%; display: inline-flex; + margin: 1rem; padding: 0.5rem; :hover svg, - :active svg { + :focus svg { fill: ${props => props.theme.toggleFillHover}; } } @@ -27,6 +28,12 @@ const FooterContainer = styled.footer` const Footer = () => ( + + {ICON_TWITTER} + {ICON_FACEBOOK} diff --git a/src/static/icons/index.js b/src/static/icons/index.js index 37ef38f..236baf4 100644 --- a/src/static/icons/index.js +++ b/src/static/icons/index.js @@ -44,3 +44,10 @@ export const ICON_FACEBOOK = ( ); + +export const ICON_TWITTER = ( + + twitter + + +); From a24acf66c4d04b12c321d73421a5f3009ebebfbd Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Wed, 15 May 2019 13:40:19 -0400 Subject: [PATCH 030/129] Add LinkedIn icon --- src/components/Footer.jsx | 10 ++++++++-- src/static/icons/index.js | 9 +++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index 0384e3b..816db6a 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -1,6 +1,6 @@ import React from 'react'; import styled from 'styled-components'; -import { ICON_TWITTER, ICON_FACEBOOK } from '../static/icons'; +import { ICON_TWITTER, ICON_FACEBOOK, ICON_LINKEDIN } from '../static/icons'; const FooterContainer = styled.footer` display: flex; @@ -11,7 +11,7 @@ const FooterContainer = styled.footer` border: 1px solid ${props => props.theme.buttonBackground}; border-radius: 50%; display: inline-flex; - margin: 1rem; + margin: 0.75rem; padding: 0.5rem; :hover svg, @@ -37,6 +37,12 @@ const Footer = () => ( {ICON_FACEBOOK} + + {ICON_LINKEDIN} + ); diff --git a/src/static/icons/index.js b/src/static/icons/index.js index 236baf4..d2f977f 100644 --- a/src/static/icons/index.js +++ b/src/static/icons/index.js @@ -51,3 +51,12 @@ export const ICON_TWITTER = ( ); + +export const ICON_LINKEDIN = ( + + linkedin + + + + +); From 62cad55c7e041194dfd44094c1296e946103f368 Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Wed, 15 May 2019 13:43:12 -0400 Subject: [PATCH 031/129] Add Reddit icon --- src/components/Footer.jsx | 8 +++++++- src/static/icons/index.js | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index 816db6a..1f62626 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -1,6 +1,6 @@ import React from 'react'; import styled from 'styled-components'; -import { ICON_TWITTER, ICON_FACEBOOK, ICON_LINKEDIN } from '../static/icons'; +import { ICON_TWITTER, ICON_FACEBOOK, ICON_LINKEDIN, ICON_REDDIT } from '../static/icons'; const FooterContainer = styled.footer` display: flex; @@ -43,6 +43,12 @@ const Footer = () => ( > {ICON_LINKEDIN} + + {ICON_REDDIT} + ); diff --git a/src/static/icons/index.js b/src/static/icons/index.js index d2f977f..6dae72b 100644 --- a/src/static/icons/index.js +++ b/src/static/icons/index.js @@ -60,3 +60,10 @@ export const ICON_LINKEDIN = ( ); + +export const ICON_REDDIT = ( + + reddit + + +); From dbd425ec02bb029a7ef8ab82a04d913a8e2ad299 Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Wed, 15 May 2019 13:48:27 -0400 Subject: [PATCH 032/129] Add GitHub icon --- src/components/Footer.jsx | 11 ++++++++++- src/static/icons/index.js | 7 +++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index 1f62626..29804f4 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -1,6 +1,12 @@ import React from 'react'; import styled from 'styled-components'; -import { ICON_TWITTER, ICON_FACEBOOK, ICON_LINKEDIN, ICON_REDDIT } from '../static/icons'; +import { + ICON_TWITTER, + ICON_FACEBOOK, + ICON_LINKEDIN, + ICON_REDDIT, + ICON_GITHUB +} from '../static/icons'; const FooterContainer = styled.footer` display: flex; @@ -49,6 +55,9 @@ const Footer = () => ( > {ICON_REDDIT} + + {ICON_GITHUB} + ); diff --git a/src/static/icons/index.js b/src/static/icons/index.js index 6dae72b..034c176 100644 --- a/src/static/icons/index.js +++ b/src/static/icons/index.js @@ -67,3 +67,10 @@ export const ICON_REDDIT = ( ); + +export const ICON_GITHUB = ( + + github + + +); From db5ddc2c055c371049341864866f4b088826b990 Mon Sep 17 00:00:00 2001 From: Zoltan Toth Date: Thu, 16 May 2019 15:22:02 -0400 Subject: [PATCH 033/129] Fix toggle buttons on m obile screens --- .../__snapshots__/Header.test.js.snap | 36 +++++++++++++++++-- .../__snapshots__/Toggle.test.js.snap | 36 ++++++++++++++++--- src/components/Header.jsx | 7 ++++ src/components/Toggle.jsx | 7 +++- 4 files changed, 79 insertions(+), 7 deletions(-) diff --git a/__tests__/components/__snapshots__/Header.test.js.snap b/__tests__/components/__snapshots__/Header.test.js.snap index 35aa018..e0701bc 100644 --- a/__tests__/components/__snapshots__/Header.test.js.snap +++ b/__tests__/components/__snapshots__/Header.test.js.snap @@ -7,9 +7,10 @@ exports[`
component renders with DARK theme 1`] = ` border-radius: 50%; cursor: pointer; height: 2.5rem; - margin: 0 0 0 1rem; + margin: 0.5rem 1.5rem 0 0; outline: 0; width: 2.5rem; + z-index: 10; } .c5 svg, @@ -89,6 +90,8 @@ exports[`
component renders with DARK theme 1`] = ` display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; + margin: 1rem 0; + width: 100%; } .c3 { @@ -125,6 +128,12 @@ exports[`
component renders with DARK theme 1`] = ` color: #FFFFFF; } +@media (min-width:769px) { + .c5 { + margin: 0.5rem 0 0 1.5rem; + } +} + @media (min-width:769px) { .c0 { -webkit-box-pack: justify; @@ -134,6 +143,13 @@ exports[`
component renders with DARK theme 1`] = ` } } +@media (min-width:541px) { + .c4 { + margin: 0; + width: auto; + } +} +
component renders with LIGHT theme 1`] = ` border-radius: 50%; cursor: pointer; height: 2.5rem; - margin: 0 0 0 1rem; + margin: 0.5rem 1.5rem 0 0; outline: 0; width: 2.5rem; + z-index: 10; } .c5 svg, @@ -322,6 +339,8 @@ exports[`
component renders with LIGHT theme 1`] = ` display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; + margin: 1rem 0; + width: 100%; } .c3 { @@ -358,6 +377,12 @@ exports[`
component renders with LIGHT theme 1`] = ` color: #EDB8ED; } +@media (min-width:769px) { + .c5 { + margin: 0.5rem 0 0 1.5rem; + } +} + @media (min-width:769px) { .c0 { -webkit-box-pack: justify; @@ -367,6 +392,13 @@ exports[`
component renders with LIGHT theme 1`] = ` } } +@media (min-width:541px) { + .c4 { + margin: 0; + width: auto; + } +} +
renders JS toggle in DARK more 1`] = ` border-radius: 50%; cursor: pointer; height: 2.5rem; - margin: 0 0 0 1rem; + margin: 0.5rem 1.5rem 0 0; outline: 0; width: 2.5rem; + z-index: 10; } .c0 svg, @@ -36,6 +37,12 @@ exports[` renders JS toggle in DARK more 1`] = ` fill: #F2E8F2; } +@media (min-width:769px) { + .c0 { + margin: 0.5rem 0 0 1.5rem; + } +} +