diff --git a/packages/learn/gatsby-node.js b/packages/learn/gatsby-node.js index 65708235c4..a7cd47fecd 100644 --- a/packages/learn/gatsby-node.js +++ b/packages/learn/gatsby-node.js @@ -114,12 +114,16 @@ exports.modifyWebpackConfig = ({ config, stage }) => { return generateBabelConfig(program, stage).then(babelConfig => { config.removeLoader('js').loader('js', { test: /\.jsx?$/, + /* eslint-disable max-len */ exclude: modulePath => { return ( /node_modules/.test(modulePath) && - !(/node_modules\/(ansi-styles|chalk)/).test(modulePath) + !(/(ansi-styles|chalk|strict-uri-encode|react-freecodecamp-search)/).test( + modulePath + ) ); }, + /* eslint-enable max-len*/ loader: 'babel', query: babelConfig }); @@ -145,6 +149,7 @@ exports.modifyBabelrc = ({ babelrc }) => Object.assign({}, babelrc, { plugins: babelrc.plugins.concat([ [ + 'transform-es2015-arrow-functions', 'transform-imports', { 'react-bootstrap': { diff --git a/packages/learn/package.json b/packages/learn/package.json index bdc5ce2efb..8776ab2bb1 100644 --- a/packages/learn/package.json +++ b/packages/learn/package.json @@ -35,8 +35,10 @@ "react": "16", "react-bootstrap": "^0.32.1", "react-dom": "16", + "react-freecodecamp-search": "^2.0.2", "react-ga": "^2.5.2", "react-helmet": "^5.2.0", + "react-media": "^1.8.0", "react-monaco-editor": "^0.14.1", "react-redux": "^5.0.7", "react-reflex": "^2.2.1", @@ -84,6 +86,7 @@ }, "devDependencies": { "babel-eslint": "^8.2.2", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", "enzyme-adapter-react-16": "^1.1.1", "eslint": "^4.19.1", "eslint-config-freecodecamp": "^1.1.1", diff --git a/packages/learn/src/components/Header/components/NavLogo.js b/packages/learn/src/components/Header/components/NavLogo.js new file mode 100644 index 0000000000..9655ed3e55 --- /dev/null +++ b/packages/learn/src/components/Header/components/NavLogo.js @@ -0,0 +1,31 @@ +import React from 'react'; +import Media from 'react-media'; + +const fCClogo = 'https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg'; +const fCCglyph = 'https://s3.amazonaws.com/freecodecamp/FFCFire.png'; + +function NavLogo() { + return ( + + {matches => + matches ? ( + learn to code at freeCodeCamp logo + ) : ( + learn to code at freeCodeCamp logo + ) + } + + ); +} + +NavLogo.displayName = 'NavLogo'; + +export default NavLogo; diff --git a/packages/learn/src/components/Header/header.css b/packages/learn/src/components/Header/header.css index 845467f455..5ba986506e 100644 --- a/packages/learn/src/components/Header/header.css +++ b/packages/learn/src/components/Header/header.css @@ -14,6 +14,13 @@ header { border: none; display: flex; justify-content: space-between; + padding: 0 30px 0 15px; +} + +@media screen, (max-width: 630px) { + #top-nav { + padding: 0; + } } #top-nav .home-link { @@ -22,7 +29,7 @@ header { } #top-nav img { - max-height: 36px; + max-height: 25px; margin: 0 5px 0 10px; } @@ -41,9 +48,23 @@ header { #top-right-nav li > a { color:#fff; font-size: 17px; + font-weight: 700; } #top-right-nav li > a:hover, #top-right-nav li > a:focus { text-decoration: none; font-weight: 700; } + + +/* Search bar */ +.fcc_searchBar { + flex-grow: 0.8; + padding: 2px 10px 0; +} +.ais-SearchBox-form { + margin-bottom: 0; +} +.ais-Hits { + background-color: #fff; +} \ No newline at end of file diff --git a/packages/learn/src/components/Header/index.js b/packages/learn/src/components/Header/index.js index a7074380ca..3ba2100205 100644 --- a/packages/learn/src/components/Header/index.js +++ b/packages/learn/src/components/Header/index.js @@ -1,5 +1,8 @@ import React from 'react'; import Link from 'gatsby-link'; +import FCCSearch from 'react-freecodecamp-search'; + +import NavLogo from './components/NavLogo'; import './header.css'; @@ -8,12 +11,9 @@ function Header() {
diff --git a/packages/learn/yarn.lock b/packages/learn/yarn.lock index ab04664755..362c01aac8 100644 --- a/packages/learn/yarn.lock +++ b/packages/learn/yarn.lock @@ -220,6 +220,10 @@ after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" +agentkeepalive@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" + ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" @@ -253,6 +257,35 @@ ajv@^6.1.0: json-schema-traverse "^0.3.0" uri-js "^3.0.2" +algoliasearch-helper@^2.21.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-2.26.0.tgz#cb784b692a5aacf17062493cb0b94f6d60d30d0f" + dependencies: + events "^1.1.1" + lodash "^4.17.5" + qs "^6.5.1" + util "^0.10.3" + +algoliasearch@^3.24.0: + version "3.27.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.27.1.tgz#e1af42b97dbf44a2dd3a8c907be99c0c34e48414" + dependencies: + agentkeepalive "^2.2.0" + debug "^2.6.8" + envify "^4.0.0" + es6-promise "^4.1.0" + events "^1.1.0" + foreach "^2.0.5" + global "^4.3.2" + inherits "^2.0.1" + isarray "^2.0.1" + load-script "^1.0.0" + object-keys "^1.0.11" + querystring-es3 "^0.2.1" + reduce "^1.0.1" + semver "^5.1.0" + tunnel-agent "^0.6.0" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -3154,6 +3187,13 @@ entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" +envify@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" + dependencies: + esprima "^4.0.0" + through "~2.3.4" + enzyme-adapter-react-15@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/enzyme-adapter-react-15/-/enzyme-adapter-react-15-1.0.5.tgz#99f9a03ff2c2303e517342935798a6bdfbb75fac" @@ -3478,7 +3518,7 @@ eventemitter3@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" -events@^1.0.0: +events@^1.0.0, events@^1.1.0, events@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -3902,6 +3942,12 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" +for-each@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" + dependencies: + is-function "~1.0.0" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -4498,7 +4544,7 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -global@^4.3.0: +global@^4.3.0, global@^4.3.2, global@~4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" dependencies: @@ -5279,6 +5325,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-function@^1.0.1, is-function@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" + is-generator-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" @@ -5520,6 +5570,10 @@ isarray@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" +isarray@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" + isemail@2.x.x: version "2.2.1" resolved "https://registry.yarnpkg.com/isemail/-/isemail-2.2.1.tgz#0353d3d9a62951080c262c2aa0a42b8ea8e9e2a6" @@ -6028,6 +6082,12 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" + dependencies: + string-convert "^0.2.0" + json3@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" @@ -6225,6 +6285,10 @@ load-json-file@^2.0.0: pify "^2.0.0" strip-bom "^3.0.0" +load-script@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" + loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@~0.2.5: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" @@ -7176,7 +7240,7 @@ object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" -object-keys@^1.0.11, object-keys@^1.0.8: +object-keys@^1.0.11, object-keys@^1.0.8, object-keys@~1.0.0: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" @@ -7480,6 +7544,13 @@ parse-glob@^3.0.4: is-extglob "^1.0.0" is-glob "^2.0.0" +parse-headers@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.1.tgz#6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536" + dependencies: + for-each "^0.3.2" + trim "0.0.1" + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -8390,7 +8461,14 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystring-es3@^0.2.0: +query-string@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.1.0.tgz#01e7d69f6a0940dac67a937d6c6325647aa4532a" + dependencies: + decode-uri-component "^0.2.0" + strict-uri-encode "^2.0.0" + +querystring-es3@^0.2.0, querystring-es3@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -8544,6 +8622,15 @@ react-error-overlay@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-3.0.0.tgz#c2bc8f4d91f1375b3dad6d75265d51cd5eeaf655" +react-freecodecamp-search@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/react-freecodecamp-search/-/react-freecodecamp-search-2.0.2.tgz#2fde10f5a44b1aa15e6a6b8f932d6435eb284f32" + dependencies: + query-string "^6.0.0" + react-instantsearch "^5.0.1" + rxjs "^5.5.7" + xhr "^2.4.1" + react-ga@^2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-2.5.2.tgz#1574b26e30ed668e4e74735527314393b22c55a9" @@ -8570,6 +8657,16 @@ react-hot-loader@^3.0.0-beta.6: redbox-react "^1.3.6" source-map "^0.6.1" +react-instantsearch@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-instantsearch/-/react-instantsearch-5.0.3.tgz#4d082e86678f819949537f2b35acf831325b5a97" + dependencies: + algoliasearch "^3.24.0" + algoliasearch-helper "^2.21.0" + classnames "^2.2.5" + lodash "^4.17.4" + prop-types "^15.5.10" + react-is@^16.3.1: version "16.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.3.1.tgz#ee66e6d8283224a83b3030e110056798488359ba" @@ -8588,6 +8685,14 @@ react-measure@^2.0.2: prop-types "^15.5.10" resize-observer-polyfill "^1.4.2" +react-media@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/react-media/-/react-media-1.8.0.tgz#b86d6d62313f95d53af7d06e23d4f49adfb131d3" + dependencies: + invariant "^2.2.2" + json2mq "^0.2.0" + prop-types "^15.5.10" + react-monaco-editor@^0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/react-monaco-editor/-/react-monaco-editor-0.14.1.tgz#f5163e119e8a7dc79b992cb3fd7af887547d7efd" @@ -8886,6 +8991,12 @@ reduce-reducers@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/reduce-reducers/-/reduce-reducers-0.1.2.tgz#fa1b4718bc5292a71ddd1e5d839c9bea9770f14b" +reduce@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/reduce/-/reduce-1.0.1.tgz#14fa2e5ff1fc560703a020cbb5fbaab691565804" + dependencies: + object-keys "~1.0.0" + redux-actions@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-actions/-/redux-actions-2.3.0.tgz#4e9967d86594b8c235bab6e08960b5c185f296d3" @@ -10135,6 +10246,14 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" + string-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" @@ -10452,7 +10571,7 @@ through2@^2.0.0, through2@^2.0.1: readable-stream "^2.1.5" xtend "~4.0.1" -through@^2.3.6: +through@^2.3.6, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -11366,6 +11485,15 @@ xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" +xhr@^2.4.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" + dependencies: + global "~4.3.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"