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

B
baiy 已提交
43
export default {
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
  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 已提交
59
    },
60 61 62 63 64 65 66 67 68 69 70 71 72
  },
  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 已提交
73
    },
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
  },
  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",
        ts: "text/typescript",
        css: "text/css",
        scss: "text/scss",
        less: "text/less",
        json5: "text/json5",
        graphql: "text/graphql",
        markdown: "text/markdown",
        html: "text/html",
        xml: "application/xml",
        sql: "text/x-mysql",
        vue: "text/vue",
        angular: "text/angular",
      },
    };
  },
};
B
baiy 已提交
108
</script>