diff options
| author | Henry Jameson <me@hjkos.com> | 2018-11-25 21:48:16 +0300 |
|---|---|---|
| committer | Henry Jameson <me@hjkos.com> | 2018-11-25 21:48:16 +0300 |
| commit | 1a65895bfd441ea57163ee3e185785c82a81b736 (patch) | |
| tree | 6acf07e334d43b08740bf68d3bfbc7e257d99693 /src/components/font_control/font_control.vue | |
| parent | e8536f3d95144945dcbd6bd96542f8401de3f1ed (diff) | |
initial font support
Diffstat (limited to 'src/components/font_control/font_control.vue')
| -rw-r--r-- | src/components/font_control/font_control.vue | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/components/font_control/font_control.vue b/src/components/font_control/font_control.vue new file mode 100644 index 00000000..424f6259 --- /dev/null +++ b/src/components/font_control/font_control.vue @@ -0,0 +1,93 @@ +<template> +<div class="font-control style-control"> + <label :for="preset === 'custom' ? name : name + '-font-switcher'" class="label"> + {{label}} + </label> + <input + v-if="typeof fallback !== 'undefined'" + class="opt exlcude-disabled" + type="checkbox" + :id="name + '-o'" + :checked="present" + @input="$emit('input', typeof value === 'undefined' ? fallback : undefined)"> + <label v-if="typeof fallback !== 'undefined'" class="opt-l" :for="name + '-o'"></label> + <label :for="name + '-font-switcher'" class="select" :disabled="!present"> + <select + :disabled="!present" + v-model="preset" + class="font-switcher" + id="name + '-font-switcher'"> + <option v-for="option in options" :value="option"> + {{ option }} + </option> + </select> + <i class="icon-down-open"/> + </label> + <input + v-if="preset === 'custom'" + class="custom-font" + type="text" + id="name" + v-model="family"> +</div> +</template> + +<script> +import { set } from 'vue' + +export default { + props: [ + 'name', 'label', 'value', 'fallback', 'options' + ], + data () { + return { + lValue: this.value + } + }, + beforeUpdate () { + this.lValue = this.value + }, + computed: { + present () { + return typeof this.lValue !== 'undefined' + }, + dValue () { + return this.lValue || this.fallback || {} + }, + family: { + get () { + return this.dValue.family + }, + set (v) { + set(this.lValue, 'family', v) + this.$emit('input', this.lValue) + } + }, + preset: { + get () { + console.log(this.family) + if (this.family === 'serif' || + this.family === 'sans-serif' || + this.family === 'monospace' || + this.family === 'inherit') { + return this.family + } else { + return 'custom' + } + }, + set (v) { + this.family = v === 'custom' ? '' : v + } + } + } +} +</script> + +<style lang="scss"> +@import '../../_variables.scss'; +.font-control { + input.custom-font { + min-width: 10em; + } +} +</style> |
