code.vue 2.6 KB
Newer Older
B
baiy 已提交
1
<template>
B
baiy 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15
    <div>
        <div style="border: 1px solid #dcdee2;border-radius: 4px;">
            <codemirror ref="code" v-model="current.content" :options="options"></codemirror>
        </div>
        <option-block>
            <FormItem>
                <ButtonGroup>
                    <Button type="primary" @click="handle(k,v)" v-for="(v,k) in lang" :key="k">{{ k }}</Button>
                </ButtonGroup>
            </FormItem>
            <FormItem>
                <Checkbox v-model="current.isCompress">压缩</Checkbox>
            </FormItem>
        </option-block>
B
baiy 已提交
16 17 18
    </div>
</template>
<script>
B
baiy 已提交
19 20 21 22 23 24 25 26 27 28 29 30 31
import {codemirror} from 'vue-codemirror'
import formatter from './library/formatter'
import 'codemirror/lib/codemirror.css'
import 'codemirror/mode/javascript/javascript.js'
import 'codemirror/mode/htmlmixed/htmlmixed.js'
import 'codemirror/mode/css/css.js'
import 'codemirror/mode/xml/xml.js'
import 'codemirror/mode/sql/sql.js'
import 'codemirror/addon/fold/foldcode.js'
import 'codemirror/addon/fold/foldgutter.js'
import 'codemirror/addon/fold/brace-fold.js'
import 'codemirror/addon/fold/comment-fold.js'
import 'codemirror/addon/fold/foldgutter.css'
B
baiy 已提交
32

B
baiy 已提交
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
export default {
    components: {
        codemirror,
    },
    created() {
        this.current = Object.assign(this.current, this.$getToolData('content'))
    },
    mounted() {
        this.codemirror.setSize(null, 350)
        if (this.current.lang) {
            this.codemirror.setOption('mode', this.options[this.current.lang])
        }
    },
    computed: {
        codemirror() {
            return this.$refs.code.codemirror
B
baiy 已提交
49
        },
B
baiy 已提交
50 51 52 53 54 55 56 57
    },
    methods: {
        handle(lang, mode) {
            if (this.current.content) {
                this.current.content = formatter(this.current.content, lang, this.current.isCompress)
                this.codemirror.setOption('mode', mode)
                this.current.lang = lang
                this.$saveToolData(this.current)
B
baiy 已提交
58
            }
B
baiy 已提交
59
        },
B
baiy 已提交
60 61 62 63 64 65 66
    },
    data() {
        return {
            current: {
                content: '',
                lang: '',
                isCompress: false,
B
baiy 已提交
67
            },
B
baiy 已提交
68 69 70 71 72 73 74
            options: {
                mode: null,
                lineNumbers: true,
                lineWrapping: false,
                foldGutter: true,
                indentUnit: 4,
                gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter'],
B
baiy 已提交
75
            },
B
baiy 已提交
76 77 78 79 80 81 82 83 84 85
            lang: {
                'js': 'text/javascript',
                'html': 'text/html',
                'css': 'text/css',
                'xml': 'application/xml',
                'sql': 'text/x-mysql',
            },
        }
    },
}
B
baiy 已提交
86
</script>