mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-11-04 09:57:26 +03:00 
			
		
		
		
	Move Dropdown to own component
This commit is contained in:
		
							parent
							
								
									761431f5cb
								
							
						
					
					
						commit
						164559c336
					
				
							
								
								
									
										28
									
								
								website/src/components/dropdown.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								website/src/components/dropdown.js
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					import React from 'react'
 | 
				
			||||||
 | 
					import PropTypes from 'prop-types'
 | 
				
			||||||
 | 
					import classNames from 'classnames'
 | 
				
			||||||
 | 
					import { navigate } from 'gatsby'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import classes from '../styles/dropdown.module.sass'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Dropdown = ({ defaultValue, className, onChange, children }) => {
 | 
				
			||||||
 | 
					    const defaultOnChange = ({ target }) => navigate(target.value)
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					        <select
 | 
				
			||||||
 | 
					            defaultValue={defaultValue}
 | 
				
			||||||
 | 
					            className={classNames(classes.root, className)}
 | 
				
			||||||
 | 
					            onChange={onChange || defaultOnChange}
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					            {children}
 | 
				
			||||||
 | 
					        </select>
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Dropdown.propTypes = {
 | 
				
			||||||
 | 
					    defaultValue: PropTypes.string,
 | 
				
			||||||
 | 
					    className: PropTypes.string,
 | 
				
			||||||
 | 
					    onChange: PropTypes.func,
 | 
				
			||||||
 | 
					    children: PropTypes.node.isRequired,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default Dropdown
 | 
				
			||||||
| 
						 | 
					@ -1,23 +1,19 @@
 | 
				
			||||||
import React from 'react'
 | 
					import React from 'react'
 | 
				
			||||||
import PropTypes from 'prop-types'
 | 
					import PropTypes from 'prop-types'
 | 
				
			||||||
import classNames from 'classnames'
 | 
					import classNames from 'classnames'
 | 
				
			||||||
import { navigate } from 'gatsby'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Link from './link'
 | 
					import Link from './link'
 | 
				
			||||||
import Icon from './icon'
 | 
					import Icon from './icon'
 | 
				
			||||||
 | 
					import Dropdown from './dropdown'
 | 
				
			||||||
import { github } from './util'
 | 
					import { github } from './util'
 | 
				
			||||||
import { ReactComponent as Logo } from '../images/logo.svg'
 | 
					import { ReactComponent as Logo } from '../images/logo.svg'
 | 
				
			||||||
import classes from '../styles/navigation.module.sass'
 | 
					import classes from '../styles/navigation.module.sass'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const Dropdown = ({ items, section }) => {
 | 
					const NavigationDropdown = ({ items, section }) => {
 | 
				
			||||||
    const active = items.find(({ text }) => text.toLowerCase() === section)
 | 
					    const active = items.find(({ text }) => text.toLowerCase() === section)
 | 
				
			||||||
    const defaultValue = active ? active.url : 'title'
 | 
					    const defaultValue = active ? active.url : 'title'
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
        <select
 | 
					        <Dropdown defaultValue={defaultValue} className={classes.dropdown}>
 | 
				
			||||||
            defaultValue={defaultValue}
 | 
					 | 
				
			||||||
            className={classes.dropdown}
 | 
					 | 
				
			||||||
            onChange={({ target }) => navigate(target.value)}
 | 
					 | 
				
			||||||
        >
 | 
					 | 
				
			||||||
            <option value="title" disabled>
 | 
					            <option value="title" disabled>
 | 
				
			||||||
                Menu
 | 
					                Menu
 | 
				
			||||||
            </option>
 | 
					            </option>
 | 
				
			||||||
| 
						 | 
					@ -26,7 +22,7 @@ const Dropdown = ({ items, section }) => {
 | 
				
			||||||
                    {text}
 | 
					                    {text}
 | 
				
			||||||
                </option>
 | 
					                </option>
 | 
				
			||||||
            ))}
 | 
					            ))}
 | 
				
			||||||
        </select>
 | 
					        </Dropdown>
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,7 +35,7 @@ const Navigation = ({ title, items, section, search, children }) => {
 | 
				
			||||||
            </Link>
 | 
					            </Link>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div className={classes.menu}>
 | 
					            <div className={classes.menu}>
 | 
				
			||||||
                <Dropdown items={items} section={section} />
 | 
					                <NavigationDropdown items={items} section={section} />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <ul className={classes.list}>
 | 
					                <ul className={classes.list}>
 | 
				
			||||||
                    {items.map(({ text, url }, i) => {
 | 
					                    {items.map(({ text, url }, i) => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										15
									
								
								website/src/styles/dropdown.module.sass
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								website/src/styles/dropdown.module.sass
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					.root
 | 
				
			||||||
 | 
					    font: inherit
 | 
				
			||||||
 | 
					    background: transparent
 | 
				
			||||||
 | 
					    border: none
 | 
				
			||||||
 | 
					    appearance: none
 | 
				
			||||||
 | 
					    background-color: var(--color-back)
 | 
				
			||||||
 | 
					    background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23929e9b%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E')
 | 
				
			||||||
 | 
					    background-repeat: no-repeat
 | 
				
			||||||
 | 
					    background-position: right 0.7em top 50%
 | 
				
			||||||
 | 
					    background-size: 0.5em auto
 | 
				
			||||||
 | 
					    padding: 0 1.4em 0 0.5em
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    &:-moz-focusring
 | 
				
			||||||
 | 
					        text-shadow: 0 0 0 var(--color-theme)
 | 
				
			||||||
 | 
					        color: transparent
 | 
				
			||||||
| 
						 | 
					@ -74,23 +74,10 @@
 | 
				
			||||||
    font-weight: bold
 | 
					    font-weight: bold
 | 
				
			||||||
    color: var(--color-theme)
 | 
					    color: var(--color-theme)
 | 
				
			||||||
    text-transform: uppercase
 | 
					    text-transform: uppercase
 | 
				
			||||||
    background: transparent
 | 
					 | 
				
			||||||
    border: 0
 | 
					 | 
				
			||||||
    margin-right: 0.5rem
 | 
					    margin-right: 0.5rem
 | 
				
			||||||
    appearance: none
 | 
					 | 
				
			||||||
    background-color: var(--color-back)
 | 
					 | 
				
			||||||
    background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23929e9b%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E')
 | 
					 | 
				
			||||||
    background-repeat: no-repeat
 | 
					 | 
				
			||||||
    background-position: right 0.7em top 50%
 | 
					 | 
				
			||||||
    background-size: 0.5em auto
 | 
					 | 
				
			||||||
    padding: 0 1.4em 0 0.5em
 | 
					 | 
				
			||||||
    border: 2px solid var(--color-back)
 | 
					    border: 2px solid var(--color-back)
 | 
				
			||||||
    border-radius: 2em
 | 
					    border-radius: 2em
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    &:-moz-focusring
 | 
					 | 
				
			||||||
        text-shadow: 0 0 0 var(--color-theme)
 | 
					 | 
				
			||||||
        color: transparent
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    &:focus
 | 
					    &:focus
 | 
				
			||||||
        border: 2px dotted var(--color-theme)
 | 
					        border: 2px dotted var(--color-theme)
 | 
				
			||||||
        outline: none
 | 
					        outline: none
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user