mirror of
https://github.com/a-nyx/maputnik-with-pmtiles.git
synced 2024-12-28 17:21:18 +01:00
Prototype FontInput field
This commit is contained in:
parent
cfc6085718
commit
0b99e571c4
3 changed files with 104 additions and 8 deletions
|
@ -9,6 +9,7 @@ import StringInput from '../inputs/StringInput'
|
||||||
import SelectInput from '../inputs/SelectInput'
|
import SelectInput from '../inputs/SelectInput'
|
||||||
import MultiButtonInput from '../inputs/MultiButtonInput'
|
import MultiButtonInput from '../inputs/MultiButtonInput'
|
||||||
import ArrayInput from '../inputs/ArrayInput'
|
import ArrayInput from '../inputs/ArrayInput'
|
||||||
|
import FontInput from '../inputs/FontInput'
|
||||||
import capitalize from 'lodash.capitalize'
|
import capitalize from 'lodash.capitalize'
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +39,6 @@ export default class SpecField extends React.Component {
|
||||||
onChange: React.PropTypes.func.isRequired,
|
onChange: React.PropTypes.func.isRequired,
|
||||||
fieldName: React.PropTypes.string.isRequired,
|
fieldName: React.PropTypes.string.isRequired,
|
||||||
fieldSpec: React.PropTypes.object.isRequired,
|
fieldSpec: React.PropTypes.object.isRequired,
|
||||||
|
|
||||||
value: React.PropTypes.oneOfType([
|
value: React.PropTypes.oneOfType([
|
||||||
React.PropTypes.string,
|
React.PropTypes.string,
|
||||||
React.PropTypes.number,
|
React.PropTypes.number,
|
||||||
|
@ -93,13 +93,18 @@ export default class SpecField extends React.Component {
|
||||||
{...commonProps}
|
{...commonProps}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
case 'array': return (
|
case 'array':
|
||||||
<ArrayInput
|
if(this.props.fieldName === 'text-font') {
|
||||||
{...commonProps}
|
return <FontInput
|
||||||
type={this.props.fieldSpec.value}
|
{...commonProps}
|
||||||
length={this.props.fieldSpec.length}
|
/>
|
||||||
/>
|
} else {
|
||||||
)
|
return <ArrayInput
|
||||||
|
{...commonProps}
|
||||||
|
type={this.props.fieldSpec.value}
|
||||||
|
length={this.props.fieldSpec.length}
|
||||||
|
/>
|
||||||
|
}
|
||||||
default: return null
|
default: return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
50
src/components/inputs/FontInput.jsx
Normal file
50
src/components/inputs/FontInput.jsx
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
import React from 'react'
|
||||||
|
import SelectInput from './SelectInput'
|
||||||
|
import input from '../../config/input.js'
|
||||||
|
|
||||||
|
//TODO: Query available font stack dynamically
|
||||||
|
import fontFamilies from '../../config/fontstacks.json'
|
||||||
|
let fontStacks = []
|
||||||
|
|
||||||
|
Object.keys(fontFamilies).forEach(family => {
|
||||||
|
fontStacks = fontStacks.concat(fontFamilies[family])
|
||||||
|
})
|
||||||
|
|
||||||
|
class FontInput extends React.Component {
|
||||||
|
static propTypes = {
|
||||||
|
value: React.PropTypes.array.isRequired,
|
||||||
|
style: React.PropTypes.object,
|
||||||
|
onChange: React.PropTypes.func.isRequired,
|
||||||
|
}
|
||||||
|
|
||||||
|
get values() {
|
||||||
|
return this.props.value || this.props.default || []
|
||||||
|
}
|
||||||
|
|
||||||
|
changeFont(idx, newValue) {
|
||||||
|
const changedValues = this.values.slice(0)
|
||||||
|
changedValues[idx] = newValue
|
||||||
|
this.props.onChange(changedValues)
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const inputs = this.values.map((value, i) => {
|
||||||
|
return <SelectInput
|
||||||
|
key={i}
|
||||||
|
style={{
|
||||||
|
width: '100%',
|
||||||
|
...this.props.style,
|
||||||
|
}}
|
||||||
|
value={value}
|
||||||
|
options={fontStacks.map(f => [f, f])}
|
||||||
|
onChange={this.changeFont.bind(this, i)}
|
||||||
|
/>
|
||||||
|
})
|
||||||
|
|
||||||
|
return <div style={{display: 'inline-block', width: '51%'}}>
|
||||||
|
{inputs}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default FontInput
|
41
src/config/fontstacks.json
Normal file
41
src/config/fontstacks.json
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"Metropolis": [
|
||||||
|
"Metropolis Black Italic",
|
||||||
|
"Metropolis Black",
|
||||||
|
"Metropolis Bold Italic",
|
||||||
|
"Metropolis Bold",
|
||||||
|
"Metropolis Extra Bold Italic",
|
||||||
|
"Metropolis Extra Bold",
|
||||||
|
"Metropolis Extra Light Italic",
|
||||||
|
"Metropolis Extra Light",
|
||||||
|
"Metropolis Light Italic",
|
||||||
|
"Metropolis Light",
|
||||||
|
"Metropolis Medium Italic",
|
||||||
|
"Metropolis Medium",
|
||||||
|
"Metropolis Regular Italic",
|
||||||
|
"Metropolis Regular",
|
||||||
|
"Metropolis Semi Bold Italic",
|
||||||
|
"Metropolis Semi Bold",
|
||||||
|
"Metropolis Thin Italic",
|
||||||
|
"Metropolis Thin"
|
||||||
|
],
|
||||||
|
"Open Sans": [
|
||||||
|
"Open Sans Bold Italic",
|
||||||
|
"Open Sans Bold",
|
||||||
|
"Open Sans Extra Bold Italic",
|
||||||
|
"Open Sans Extra Bold",
|
||||||
|
"Open Sans Italic",
|
||||||
|
"Open Sans Light Italic",
|
||||||
|
"Open Sans Light",
|
||||||
|
"Open Sans Regular",
|
||||||
|
"Open Sans Semibold Italic",
|
||||||
|
"Open Sans Semibold"
|
||||||
|
],
|
||||||
|
"Klokantech Noto Sans": [
|
||||||
|
"Klokantech Noto Sans Bold",
|
||||||
|
"Klokantech Noto Sans CJK Bold",
|
||||||
|
"Klokantech Noto Sans CJK Regular",
|
||||||
|
"Klokantech Noto Sans Italic",
|
||||||
|
"Klokantech Noto Sans Regular"
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in a new issue