code.vue 2.9 KB
Newer Older
B
baiy 已提交
1
<template>
B
baiy 已提交
2 3 4
  <div>
    <div style="border: 1px solid #dcdee2;border-radius: 4px;">
      <codemirror ref="code" v-model="current.content" :options="options"></codemirror>
B
baiy 已提交
5
    </div>
B
baiy 已提交
6 7 8 9 10 11 12 13 14 15 16
    <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>
  </div>
B
baiy 已提交
17 18
</template>
<script>
B
baiy 已提交
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
    import { codemirror } from 'vue-codemirror'
    import formatter from 'code-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'

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