diff --git a/package-lock.json b/package-lock.json index 295ec9d795d7..f767cb5f5ad0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12068,9 +12068,9 @@ } }, "react-banner": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/react-banner/-/react-banner-0.5.0.tgz", - "integrity": "sha512-Z3pN+L6v3G08k0wxDQIzzTBAKBtdvM3VFdrV0FiLd/iQiVhuC9bEfeCFacTjxa/0KK0spKfImLGRHa80xoV6xw==" + "version": "1.0.0-rc.0", + "resolved": "https://registry.npmjs.org/react-banner/-/react-banner-1.0.0-rc.0.tgz", + "integrity": "sha512-d9U9ArDcNjegwCcl5+Q4NbGSLHMqsxjALJLnmO6BX0biF5D6HCJuJcHGXxlr9AMnSKMZPUWca8RTGnadYoBujg==" }, "react-dom": { "version": "16.2.0", diff --git a/package.json b/package.json index 1647646766a3..3d83293f1c07 100644 --- a/package.json +++ b/package.json @@ -104,12 +104,13 @@ }, "dependencies": { "ajv": "^5.5.2", + "docsearch.js": "^2.5.2", "gitter-sidecar": "^1.2.3", "preact": "^8.2.7", "preact-compat": "3.17.0", "prop-types": "^15.5.10", "react": "^16.2.0", - "react-banner": "^0.5.0", + "react-banner": "^1.0.0-rc.0", "react-dom": "^16.2.0", "react-hot-loader": "^4.0.0-beta.12", "react-router": "^4.2.0", diff --git a/src/components/Dropdown/Dropdown.scss b/src/components/Dropdown/Dropdown.scss index 0cf9c2bc3551..cef9210394f6 100644 --- a/src/components/Dropdown/Dropdown.scss +++ b/src/components/Dropdown/Dropdown.scss @@ -24,6 +24,7 @@ position: absolute; top: 100%; right: 0; + font-size: getFontSize(-1); margin: auto; background-color: #2B3A42; z-index: 1; diff --git a/src/components/Navigation/Navigation.jsx b/src/components/Navigation/Navigation.jsx index 0f3c0b3e0953..11a9806bd966 100644 --- a/src/components/Navigation/Navigation.jsx +++ b/src/components/Navigation/Navigation.jsx @@ -1,67 +1,64 @@ +// Import External Dependencies import React from 'react'; import Banner from 'react-banner'; +import DocSearch from 'docsearch.js'; + +// Import Components import Link from '../Link/Link'; import Container from '../Container/Container'; import Logo from '../Logo/Logo'; import Dropdown from '../Dropdown/Dropdown'; + +// Load Styling +import 'docsearch.js/dist/cdn/docsearch.css'; import './Navigation.scss'; import './Search.scss'; -// TODO: Re-incorporate the icon links -// -// -// -// -// -// -// - -// TODO: Re-incorporate docsearch (see `react-banner` docs and `SearchResults` component/discussion) -// componentDidMount() { -// if (typeof window !== 'undefined') { -// let docsearch = () => {}; - -// // XXX: hack around docsearch -// if (window.docsearch) { -// docsearch = window.docsearch.default || window.docsearch; -// } - -// docsearch({ -// apiKey: 'fac401d1a5f68bc41f01fb6261661490', -// indexName: 'webpack-js-org', -// inputSelector: '.navigation__search-input' -// }); - -// window.addEventListener('keyup', e => { -// if (e.which === 9 && e.target.classList.contains('navigation__search-input')) { -// this._openSearch(); -// } -// }); -// } -// } - export default class Navigation extends React.Component { render() { let { pathname, links, toggleSidebar } = this.props; return ( } url={ pathname } - links={ links } + items={[ + ...links, + { + title: 'GitHub Repository', + url: 'https://github.com/webpack/webpack', + className: 'navigation__item--icon', + content: + }, + { + title: 'Webpack on Stack Overflow', + url: 'https://stackoverflow.com/questions/tagged/webpack', + className: 'navigation__item--icon', + content: + }, + { + className: 'navigation__item--icon', + content: ( + + ) + } + ]} link={ Link } onMenuClick={ toggleSidebar } /> ); } + + componentDidMount() { + DocSearch({ + apiKey: 'fac401d1a5f68bc41f01fb6261661490', + indexName: 'webpack-js-org', + inputSelector: '.navigation-search__input' + }); + } } diff --git a/src/components/Navigation/Navigation.scss b/src/components/Navigation/Navigation.scss index bc086d8fd511..b8265bf9289a 100644 --- a/src/components/Navigation/Navigation.scss +++ b/src/components/Navigation/Navigation.scss @@ -2,21 +2,13 @@ @import 'mixins'; @import 'functions'; -// TODO: Re-incorporate language dropdown and github links although -// this may require linking and re-releasing `react-banner` -// -// .navigation__languages { -// margin-left: 1em; -// margin-top: -4px; -// } - -.banner { +.navigation { flex: 0 0 auto; transition: background 250ms; background: getColor(elephant); } -.banner__inner { +.navigation__inner { position: relative; display: flex; align-items: center; @@ -30,7 +22,7 @@ } } -.banner__mobile { +.navigation__mobile { display: none; fill: white; padding: 0; @@ -43,12 +35,12 @@ transition: color 250ms; } -.banner__mobile svg { +.navigation__mobile svg { width: 20px; height: 20px; } -.banner__logo { +.navigation__logo { margin: auto; text-decoration: none; text-transform: uppercase; @@ -58,7 +50,7 @@ transition: all 250ms; } -.banner__links { +.navigation__items { flex: 1 1 auto; display: flex; height: 56px; @@ -66,12 +58,12 @@ justify-content: flex-end; } -.banner__link { +.navigation__item { position: relative; display: inline-block; font-size: getFontSize(-1); padding-bottom: 0.1em; - margin-right: 1.5em; + margin-right: 18px; text-transform: uppercase; letter-spacing: 0.5px; color: getColor(white); @@ -82,6 +74,12 @@ color: getColor(malibu); } + &--icon { + font-size: 16px; + margin-top: 2px; + -webkit-font-smoothing: antialiased; + } + &--active { color: #fff; @@ -101,14 +99,14 @@ } } -.banner-search { +.navigation-search { flex: 0 0 auto; position: relative; display: flex; justify-content: flex-end; } -.banner-search__input { +.navigation-search__input { font-size: 14px; width: 0; max-width: calc(100vw - 8.5em); @@ -128,7 +126,7 @@ } } -.banner-search__icon { +.navigation-search__icon { font-size: 1em; width: 1em; height: 1em; @@ -140,27 +138,27 @@ transition: color 250ms; } -.banner-search__input:focus, -.banner-search__icon:focus { +.navigation-search__input:focus, +.navigation-search__icon:focus { outline: none; } -.banner-search__clear { +.navigation-search__clear { display: none; margin-right: 0.25em; margin-bottom: -1px; } -.banner-search--active .banner-search__input { +.navigation-search--active .navigation-search__input { margin-right: 0.5em; width: 400px; } -.banner-search--active .banner-search__clear { +.navigation-search--active .navigation-search__clear { display: block; } -.banner-search__results { +.navigation-search__results { position: absolute; top: 100%; right: 0; @@ -168,7 +166,7 @@ margin-top: 5px; } -.banner--search .banner__link { +.navigation--search .navigation__item { pointer-events: none; overflow: hidden; white-space: nowrap; @@ -177,19 +175,19 @@ opacity: 0; } -.banner-sub { +.navigation-sub { display: block; background: getColor(concrete); } -.banner-sub__inner { +.navigation-sub__inner { max-width: map-get($screens, large); margin: 0 auto; padding: 0 1.5em; text-align: right; } -.banner-sub__link { +.navigation-sub__link { display: inline-block; font-size: 0.8em; margin-left: 1.5em; @@ -209,15 +207,15 @@ } @media (max-width: 720px) { - .banner-sub { + .navigation-sub { display: none; } } @media (max-width: 720px) { - .banner__mobile { display: block; } - .banner__links { display: none; } - .banner--search .banner__logo { + .navigation__mobile { display: block; } + .navigation__items { display: none; } + .navigation--search .navigation__logo { pointer-events: none; overflow: hidden; white-space: nowrap; diff --git a/src/components/Navigation/Search.scss b/src/components/Navigation/Search.scss index 9c9a59972b5d..98f86a369574 100644 --- a/src/components/Navigation/Search.scss +++ b/src/components/Navigation/Search.scss @@ -6,6 +6,8 @@ .ds-dropdown-menu { box-shadow: none; + margin-top: 19px; + margin-right: -37px; &:before { content: none; diff --git a/src/components/Site/Site.jsx b/src/components/Site/Site.jsx index b09d303aa0d5..ea37bec2fe37 100644 --- a/src/components/Site/Site.jsx +++ b/src/components/Site/Site.jsx @@ -62,16 +62,16 @@ class Site extends React.Component { toggleSidebar={ this._toggleSidebar } links={[ { - title: 'Documentation', + content: 'Documentation', url: '/concepts', isActive: url => /^\/(api|concepts|configuration|guides|loaders|plugins)/.test(url), children: this._strip( sections.filter(item => item.name !== 'contribute') ) }, - { title: 'Contribute', url: '/contribute' }, - { title: 'Vote', url: '/vote' }, - { title: 'Blog', url: '//medium.com/webpack' } + { content: 'Contribute', url: '/contribute' }, + { content: 'Vote', url: '/vote' }, + { content: 'Blog', url: 'https://medium.com/webpack' } ]} /> { window.document !== undefined ? ( @@ -165,6 +165,7 @@ class Site extends React.Component { _strip = array => { return array.map(({ title, name, url, group, sort, anchors, children }) => ({ title: title || name, + content: title || name, url, group, sort, diff --git a/src/styles/icons/github.svg b/src/styles/icons/github.svg index 941feab41d88..5f08fd120073 100644 --- a/src/styles/icons/github.svg +++ b/src/styles/icons/github.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/src/styles/icons/medium.svg b/src/styles/icons/medium.svg index a3cecb5441c1..732be4edc566 100644 --- a/src/styles/icons/medium.svg +++ b/src/styles/icons/medium.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/src/styles/icons/stack-overflow.svg b/src/styles/icons/stack-overflow.svg index 4a726692091a..d55416d87906 100644 --- a/src/styles/icons/stack-overflow.svg +++ b/src/styles/icons/stack-overflow.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file +