[巴哈]文字 to MD表格

將文字貼上轉換成Markdown語法的表格,方便在巴哈哈拉區回復文章,推薦用Hackmd。

by dpes5407

HTML

<script src="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@6.x/css/materialdesignicons.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css">
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
  <div id="app">
    <v-app>
      <v-main>
        <v-container>
          <!--form-->
          <v-form v-model="valid">
            <v-container>
              <v-row>
                <v-col cols="12" sm="3">
                  <v-text-field v-model="firstname" label="表格名稱" required></v-text-field>
                </v-col>

                <v-col cols="12" sm="3">
                  <v-text-field v-model="bahaId" label="巴哈id" required></v-text-field>
                </v-col>
                <v-divider></v-divider>
                <template>
                  <v-checkbox v-model="checkbox" :label="`加入超連結`"></v-checkbox>
                </template>
                <v-col cols="12" sm="2">
                  <v-btn @click="translate" color="primary" rounded large>
                    轉換
                  </v-btn>
                </v-col>

              </v-row>
            </v-container>
          </v-form>
          <!-- form end -->
          <br>
          <!--2-->
          <v-row>
            <v-col cols="12" sm="5">
              <v-textarea v-model="inputText" background-color="amber lighten-4" color="orange orange-darken-4" label="before" :placeholder="placeHolder"></v-textarea>
            </v-col>
            <v-col cols="12" sm="5" xs="2">
              <v-textarea id="testing-code" v-model="outputText" background-color="amber lighten-4" color="orange orange-darken-4" label="after">
              </v-textarea>

            </v-col>
            <v-col cols="12" sm="2" xs="2">
              <v-btn @click="copyText"...

JavaScript

new Vue({
      el: '#app',
      vuetify: new Vuetify(),
      data() {
        return {
        checkbox: true,
          placeHolder: `FRAMED Collection
We Need To Go Deeper
Out of Space
          `,
          valid: true,
          firstname: '我有的遊戲',
          nameRules: [
            v => !!v || 'Name is required',
            v => v.length <= 30 || '最多30',
          ],
          bahaId: 'a123',
          inputText: `Lacuna
Orwell: Ignorance is Strength
Heaven's Vault
FRAMED Collection
We Need To Go Deeper
Out of Space`,
          outputText: ``,
        }
      },
      methods: {
        translate() {
          //1.先去除多個\n
          let str = this.killN(this.inputText)
          let arr = []
          //2.split拿到陣列
          arr = str.split('\n')
          this.outputText = this.addHeader() + this.getColString(arr)

        },
        killN(str) {
          const regMultiN = /\n(\n)*( )*(\n)*\n/g
          let newStr = str.replace(regMultiN, '\n')
          //轉換後避免第一列是換行\n
          const r = /^(\n)*/g
          newStr = str.replace(r, '')
          return newStr
        },
        getColString(arr) {
          let str = ''
          for (let i = 0; i < arr.length; i++) {
            let item = arr[i]
            if (i % 3 === 0) str = str + '|'
            //3. embed url 預留不同模式
            if (this.checkbox) {
              item = this.embedUrl(arr[i])
            }
            str += item + '|'
            if (i % 3 === 2) str = str + "\n"
          }
          return str
        },
        embedUrl(str) {
          const reg = /\s/g
          const spl = str.replace(reg, '+')
          const ans = `[${str}](https://store.steampowered.com/search/?term=${spl})`
          return ans
        },
        addHeader() {
          const header = `| ${this.firstname}  |     | ${this.bahaId} |
| - | - | - |\n`
          return header
        },
        copyText() {
          const text = document.querySelector('#testing-code')
          text.select()
         ...