mirror of
https://github.com/marktext/marktext.git
synced 2025-05-17 01:10:41 +08:00

* side-bar-view * list files view * update the structure of store, add modules * open project and change select files * add tabs view * listen for file/dir changing, and update in sidebar * delete some unused code * context menu in sidebar * add tool bar and tab bar menu item * save all and save all and close * copy, cut, paste, new file, new directory, move to trash, open in folder * rename in sidebar
138 lines
3.5 KiB
Vue
138 lines
3.5 KiB
Vue
<template>
|
|
<div class="font" :class="theme">
|
|
<el-dialog
|
|
:visible.sync="showFontSetting"
|
|
:show-close="false"
|
|
:modal="false"
|
|
custom-class="ag-dialog-table"
|
|
width="400px"
|
|
>
|
|
<div slot="title">
|
|
<el-color-picker
|
|
v-model="tempColor"
|
|
size="small"
|
|
@active-change="colorChange"
|
|
></el-color-picker>
|
|
<svg class="icon" aria-hidden="true" :style="{ 'color': tempColor }">
|
|
<use xlink:href="#icon-font"></use>
|
|
</svg>
|
|
</div>
|
|
<div class="row">
|
|
<div class="label">
|
|
<svg class="icon" aria-hidden="true">
|
|
<use xlink:href="#icon-fontsize"></use>
|
|
</svg>
|
|
</div>
|
|
<el-slider v-model="tempSize" :format-tooltip="formatSize" :min="12" :max="30" :step="1"
|
|
@change="sizeChange"
|
|
></el-slider>
|
|
</div>
|
|
<div class="row">
|
|
<div class="label">
|
|
<svg class="icon" aria-hidden="true">
|
|
<use xlink:href="#icon-lineheight"></use>
|
|
</svg>
|
|
</div>
|
|
<el-slider v-model="tempHeight" :format-tooltip="formatHeight" :min="1" :max="3" :step="0.1"
|
|
@change="heightChange"
|
|
></el-slider>
|
|
</div>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapState } from 'vuex'
|
|
import bus from '../bus'
|
|
|
|
export default {
|
|
data () {
|
|
return {
|
|
showFontSetting: false,
|
|
tempSize: 16,
|
|
tempColor: '',
|
|
tempHeight: 1.6
|
|
}
|
|
},
|
|
computed: {
|
|
...mapState({
|
|
'theme': state => state.preferences.theme,
|
|
'fontSize': state => state.preferences.fontSize,
|
|
'lightColor': state => state.preferences.lightColor,
|
|
'darkColor': state => state.preferences.darkColor,
|
|
'lineHeight': state => state.preferences.lineHeight
|
|
}),
|
|
defaultSize () {
|
|
return parseInt(this.fontSize, 10)
|
|
}
|
|
},
|
|
created () {
|
|
this.$nextTick(() => {
|
|
bus.$on('font-setting', this.handleFontSetting)
|
|
})
|
|
},
|
|
beforeDestroy () {
|
|
bus.$off('font-setting', this.handleFontSetting)
|
|
},
|
|
methods: {
|
|
handleFontSetting () {
|
|
this.showFontSetting = true
|
|
const { darkColor, lightColor, theme, lineHeight } = this
|
|
this.tempSize = this.defaultSize
|
|
this.tempColor = theme === 'dark' ? darkColor : lightColor
|
|
this.tempHeight = +lineHeight
|
|
},
|
|
formatSize (val) {
|
|
return `${val} px`
|
|
},
|
|
formatHeight (val) {
|
|
return `${val}`
|
|
},
|
|
colorChange (color) {
|
|
const COLOR_KEY = this.theme === 'dark' ? 'darkColor' : 'lightColor'
|
|
this.handleChange(COLOR_KEY)(color)
|
|
},
|
|
sizeChange (size) {
|
|
this.handleChange('fontSize')(size)
|
|
},
|
|
heightChange (height) {
|
|
this.handleChange('lineHeight')(height)
|
|
},
|
|
handleChange (type) {
|
|
return (value) => {
|
|
if (!value) return
|
|
if (type === 'fontSize') value = value + 'px'
|
|
this.$store.dispatch('CHANGE_FONT', { type, value })
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.font .el-color-picker__trigger {
|
|
position: absolute;
|
|
top: 6px;
|
|
opacity: 0;
|
|
}
|
|
.font .el-dialog__header {
|
|
padding-top: 10px;
|
|
text-align: center;
|
|
}
|
|
.font svg.icon {
|
|
width: 1.5em;
|
|
height: 1.5em;
|
|
}
|
|
.font .row .label {
|
|
display: inline-block;
|
|
width: 50px;
|
|
height: 38px;
|
|
line-height: 38px;
|
|
vertical-align: text-bottom;
|
|
}
|
|
.font .row .el-slider {
|
|
width: 300px;
|
|
display: inline-block;
|
|
}
|
|
</style>
|