mirror of
https://github.com/woodchen-ink/md-wechat.git
synced 2025-07-18 13:42:02 +08:00
chore: remove deprecated workflows and scripts
This commit is contained in:
parent
b9f6bfddbd
commit
fd70e62fce
46
.github/workflows/build.yml
vendored
46
.github/workflows/build.yml
vendored
@ -1,46 +0,0 @@
|
|||||||
name: Build and Deploy
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'doocs/md'
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: Set up node
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: npm run build
|
|
||||||
|
|
||||||
- name: Deploy
|
|
||||||
uses: JamesIves/github-pages-deploy-action@v4
|
|
||||||
with:
|
|
||||||
branch: gh-pages
|
|
||||||
folder: dist
|
|
||||||
|
|
||||||
sync-to-gitee:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'doocs/md'
|
|
||||||
needs: build-and-deploy
|
|
||||||
steps:
|
|
||||||
- name: Sync to Gitee
|
|
||||||
uses: wearerequired/git-mirror-action@v1
|
|
||||||
env:
|
|
||||||
SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
|
|
||||||
with:
|
|
||||||
source-repo: git@github.com:doocs/md.git
|
|
||||||
destination-repo: git@gitee.com:Doocs/md.git
|
|
43
.github/workflows/preview-build.yml
vendored
43
.github/workflows/preview-build.yml
vendored
@ -1,43 +0,0 @@
|
|||||||
name: Preview Build
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize, reopened]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-preview:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'doocs/md'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
|
||||||
|
|
||||||
- name: Set up node
|
|
||||||
uses: actions/setup-node@v2
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
npm install
|
|
||||||
npm run build:h5-netlify
|
|
||||||
|
|
||||||
- name: Upload dist artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: dist
|
|
||||||
path: dist
|
|
||||||
retention-days: 5
|
|
||||||
|
|
||||||
- name: Save PR number
|
|
||||||
if: ${{ always() }}
|
|
||||||
run: echo ${{ github.event.number }} > ./pr-id.txt
|
|
||||||
|
|
||||||
- name: Upload PR number
|
|
||||||
if: ${{ always() }}
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: pr
|
|
||||||
path: ./pr-id.txt
|
|
89
.github/workflows/preview-deploy.yml
vendored
89
.github/workflows/preview-deploy.yml
vendored
@ -1,89 +0,0 @@
|
|||||||
name: Preview Deploy
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_run:
|
|
||||||
workflows: ["Preview Build"]
|
|
||||||
types:
|
|
||||||
- completed
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
success:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' && github.repository == 'doocs/md'
|
|
||||||
steps:
|
|
||||||
- name: Download PR artifact
|
|
||||||
uses: dawidd6/action-download-artifact@v2
|
|
||||||
with:
|
|
||||||
workflow: ${{ github.event.workflow_run.workflow_id }}
|
|
||||||
name: pr
|
|
||||||
|
|
||||||
- name: Save PR id
|
|
||||||
id: pr
|
|
||||||
run: echo "::set-output name=id::$(<pr-id.txt)"
|
|
||||||
|
|
||||||
- name: Download dist artifact
|
|
||||||
uses: dawidd6/action-download-artifact@v2
|
|
||||||
with:
|
|
||||||
workflow: ${{ github.event.workflow_run.workflow_id }}
|
|
||||||
workflow_conclusion: success
|
|
||||||
name: dist
|
|
||||||
|
|
||||||
- name: Upload surge service
|
|
||||||
id: deploy
|
|
||||||
run: |
|
|
||||||
export DEPLOY_DOMAIN=https://doocs-md-preview-pr-${{ steps.pr.outputs.id }}.surge.sh
|
|
||||||
npx surge --project ./ --domain $DEPLOY_DOMAIN --token ${{ secrets.SURGE_TOKEN }}
|
|
||||||
|
|
||||||
- name: Upload status comment
|
|
||||||
uses: actions-cool/maintain-one-comment@v2
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
body: |
|
|
||||||
🎊 PR Preview has been successfully built and deployed to https://doocs-md-preview-pr-${{ steps.pr.outputs.id }}.surge.sh
|
|
||||||
|
|
||||||
<img width="300" src="https://user-images.githubusercontent.com/507615/90250366-88233900-de6e-11ea-95a5-84f0762ffd39.png">
|
|
||||||
|
|
||||||
<!-- Sticky Pull Request Comment -->
|
|
||||||
body-include: '<!-- Sticky Pull Request Comment -->'
|
|
||||||
number: ${{ steps.pr.outputs.id }}
|
|
||||||
|
|
||||||
- name: The job failed
|
|
||||||
if: ${{ failure() }}
|
|
||||||
uses: actions-cool/maintain-one-comment@v2
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
body: |
|
|
||||||
😭 Deploy PR Preview failed.
|
|
||||||
|
|
||||||
<img width="300" src="https://user-images.githubusercontent.com/507615/90250824-4e066700-de6f-11ea-8230-600ecc3d6a6b.png">
|
|
||||||
|
|
||||||
<!-- Sticky Pull Request Comment -->
|
|
||||||
body-include: '<!-- Sticky Pull Request Comment -->'
|
|
||||||
number: ${{ steps.pr.outputs.id }}
|
|
||||||
|
|
||||||
failed:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'failure' && github.repository == 'doocs/md'
|
|
||||||
steps:
|
|
||||||
- name: Download PR artifact
|
|
||||||
uses: dawidd6/action-download-artifact@v2
|
|
||||||
with:
|
|
||||||
workflow: ${{ github.event.workflow_run.workflow_id }}
|
|
||||||
name: pr
|
|
||||||
|
|
||||||
- name: Save PR id
|
|
||||||
id: pr
|
|
||||||
run: echo "::set-output name=id::$(<pr-id.txt)"
|
|
||||||
|
|
||||||
- name: The job failed
|
|
||||||
uses: actions-cool/maintain-one-comment@v2
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
body: |
|
|
||||||
😭 Deploy PR Preview failed.
|
|
||||||
|
|
||||||
<img width="300" src="https://user-images.githubusercontent.com/507615/90250824-4e066700-de6f-11ea-8230-600ecc3d6a6b.png">
|
|
||||||
|
|
||||||
<!-- Sticky Pull Request Comment -->
|
|
||||||
body-include: '<!-- Sticky Pull Request Comment -->'
|
|
||||||
number: ${{ steps.pr.outputs.id }}
|
|
18
.github/workflows/preview-start.yml
vendored
18
.github/workflows/preview-start.yml
vendored
@ -1,18 +0,0 @@
|
|||||||
name: Preview Start
|
|
||||||
|
|
||||||
on: pull_request_target
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
preview:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'doocs/md'
|
|
||||||
steps:
|
|
||||||
- name: Create
|
|
||||||
uses: actions-cool/maintain-one-comment@v3
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
body: |
|
|
||||||
⚡️ Deploying PR Preview...
|
|
||||||
<img src="https://user-images.githubusercontent.com/507615/90240294-8d2abd00-de5b-11ea-8140-4840a0b2d571.gif" width="300" />
|
|
||||||
<!-- Sticky Pull Request Comment -->
|
|
||||||
body-include: '<!-- Sticky Pull Request Comment -->'
|
|
24
.github/workflows/release-cli.yml
vendored
24
.github/workflows/release-cli.yml
vendored
@ -1,24 +0,0 @@
|
|||||||
name: Create Cli Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'cli-v*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'doocs/md'
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
# Setup .npmrc file to publish to npm
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: '20'
|
|
||||||
registry-url: 'https://registry.npmjs.org'
|
|
||||||
- run: npm install
|
|
||||||
- run: npm run build-cli
|
|
||||||
- run: cd md-cli && npm ci && npm publish
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
|
|
||||||
|
|
32
.github/workflows/release.yml
vendored
32
.github/workflows/release.yml
vendored
@ -1,32 +0,0 @@
|
|||||||
name: Create Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- "v*"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
name: Create Release
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'doocs/md'
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Create Release
|
|
||||||
id: create_release
|
|
||||||
uses: actions/create-release@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
tag_name: ${{ github.ref }}
|
|
||||||
release_name: ${{ github.ref }}
|
|
||||||
body: |
|
|
||||||
# 微信 Markdown 编辑器 ${{ github.ref }} 发布🎈
|
|
||||||
|
|
||||||
[](https://github.com/doocs/md/releases) [](https://gitee.com/doocs/md/releases)
|
|
||||||
|
|
||||||
> Markdown 文档自动即时渲染为微信图文,让你不再为微信文章排版而发愁!
|
|
||||||
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
|
||||||
|
|
||||||
npm run lint
|
|
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"editor.codeActionsOnSave": {
|
|
||||||
"source.fixAll": "explicit"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
(async function () {
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
const packageJson = require('../md-cli/package.json');
|
|
||||||
const child_process = require('child_process');
|
|
||||||
// 自动更新版本
|
|
||||||
// version可以传递如 6.1.1 | patch | minor | major
|
|
||||||
const execCommand = arr => (Array.isArray(arr) ? arr : [arr]).forEach(c => {
|
|
||||||
try {
|
|
||||||
console.log(`start: ${c}...`)
|
|
||||||
console.log(child_process.execSync(c).toString('utf8'))
|
|
||||||
} catch (error) {
|
|
||||||
console.log('\x1B[31m%s\x1B[0m', error.stdout.toString())
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const getNewVersion = (oldVersion, version = 'patch') => {
|
|
||||||
// [<newversion> | major | minor | patch]
|
|
||||||
if (/^([0-9]+\.*)+$/.test(version)) return version
|
|
||||||
const types = ['major', 'minor', 'patch']
|
|
||||||
const index = types.indexOf(version)
|
|
||||||
if (index >= 0) {
|
|
||||||
const versionArr = oldVersion.split('.')
|
|
||||||
versionArr[index] = Number(versionArr[index]) + 1
|
|
||||||
return versionArr.map((e, i) => i > index ? 0 : e).join('.')
|
|
||||||
}
|
|
||||||
return getNewVersion(oldVersion)
|
|
||||||
}
|
|
||||||
const newVersionObj = {
|
|
||||||
version: getNewVersion(packageJson.version, process.argv[2]),
|
|
||||||
};
|
|
||||||
fs.writeFileSync(
|
|
||||||
path.resolve(__dirname, '../md-cli/package.json'),
|
|
||||||
JSON.stringify(Object.assign({}, packageJson, newVersionObj), null, 2) +
|
|
||||||
'\n'
|
|
||||||
);
|
|
||||||
console.log(newVersionObj);
|
|
||||||
execCommand([
|
|
||||||
`git commit -a -m 'chore: update version cli-v${newVersionObj.version}'`,
|
|
||||||
`git tag cli-v${newVersionObj.version}`,
|
|
||||||
'git push && git push --tags',
|
|
||||||
])
|
|
||||||
console.log('\x1B[32m%s\x1B[0m', '发布完成,请关注github CI构建')
|
|
||||||
}())
|
|
1
md-cli/.gitignore
vendored
1
md-cli/.gitignore
vendored
@ -1 +0,0 @@
|
|||||||
doocs-md-cli-*
|
|
@ -1,2 +0,0 @@
|
|||||||
.tgz
|
|
||||||
httpData/
|
|
@ -1 +0,0 @@
|
|||||||
registry=https://registry.npmjs.org
|
|
@ -1,38 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
const { ProcessManager } = require(`@wll8/process-manager`);
|
|
||||||
const getPort = require(`get-port`)
|
|
||||||
const {
|
|
||||||
handleSpace,
|
|
||||||
colors,
|
|
||||||
parseArgv,
|
|
||||||
} = require(`./util.js`)
|
|
||||||
|
|
||||||
const arg = parseArgv()
|
|
||||||
|
|
||||||
new Promise(async () => {
|
|
||||||
let { port = 8800, testPort, replayPort } = arg
|
|
||||||
port = Number(port)
|
|
||||||
;[port, testPort, replayPort] = await Promise.all([port, port+1, port+2].map(item => getPort({port: item}) )).catch(err => console.log(`err`, err))
|
|
||||||
const line = Object.entries({
|
|
||||||
...arg,
|
|
||||||
proxy: `https://doocs.gitee.io/`,
|
|
||||||
port,
|
|
||||||
testPort,
|
|
||||||
replayPort,
|
|
||||||
'--config': handleSpace(`${__dirname}/mm.config.js`),
|
|
||||||
}).map(([key, val]) => `${key}=${val}`)
|
|
||||||
const cliArg = [handleSpace(`${__dirname}/node_modules/mockm/run.js`), `--log-line`, ...line]
|
|
||||||
console.log(`doocs/md-cli v${require(`./package.json`).version}`)
|
|
||||||
console.log(`服务启动中...`)
|
|
||||||
const cp = new ProcessManager(cliArg)
|
|
||||||
cp.on(`stdout`, (info = ``) => {
|
|
||||||
if(info.match(`:${port}/`)) {
|
|
||||||
console.log(`服务已启动:`)
|
|
||||||
console.log(`打开链接 ${colors.green(`http://127.0.0.1:${port}/md/`)} 即刻使用吧~`)
|
|
||||||
}
|
|
||||||
if(info.match(`Port is occupied`)) {
|
|
||||||
process.exit()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}).catch(err => console.log(err))
|
|
@ -1,55 +0,0 @@
|
|||||||
const fs = require(`fs`)
|
|
||||||
const path = require(`path`)
|
|
||||||
|
|
||||||
const {
|
|
||||||
dcloud,
|
|
||||||
parseArgv,
|
|
||||||
} = require(`./util.js`)
|
|
||||||
|
|
||||||
const arg = parseArgv()
|
|
||||||
|
|
||||||
// unicloud 服务空间配置
|
|
||||||
const spaceInfo = {
|
|
||||||
spaceId: ``,
|
|
||||||
clientSecret: ``,
|
|
||||||
...arg,
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 配置说明请参考文档:
|
|
||||||
* https://hongqiye.com/doc/mockm/config/option.html
|
|
||||||
* @type {import('mockm/@types/config').Config}
|
|
||||||
*/
|
|
||||||
module.exports = util => {
|
|
||||||
const port = Number(arg.port) || 9000
|
|
||||||
return {
|
|
||||||
api: {
|
|
||||||
async '/upload'(req, res) {
|
|
||||||
const multiparty = await util.toolObj.generate.initPackge(`multiparty`)
|
|
||||||
const form = new multiparty.Form({
|
|
||||||
uploadDir: `${__dirname}/public/upload/`,
|
|
||||||
})
|
|
||||||
form.parse(req, async (err, fields = [], files) => {
|
|
||||||
const file = files.file[0]
|
|
||||||
let url = `http://127.0.0.1:${port}/public/upload/${path.parse(file.path).base}`
|
|
||||||
try {
|
|
||||||
url = await dcloud(spaceInfo)({name: file.originalFilename, file: fs.createReadStream(file.path)})
|
|
||||||
} catch (err) {
|
|
||||||
// console.log(err)
|
|
||||||
}
|
|
||||||
res.json({url})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
},
|
|
||||||
static: [
|
|
||||||
{
|
|
||||||
fileDir: `${__dirname}/dist`,
|
|
||||||
path: `/md`,
|
|
||||||
},
|
|
||||||
{ // 访问公共目录
|
|
||||||
fileDir: `${__dirname}/public`,
|
|
||||||
path: `/public`,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
8610
md-cli/package-lock.json
generated
8610
md-cli/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@doocs/md-cli",
|
|
||||||
"version": "0.0.7",
|
|
||||||
"description": "✍ 一款高度简洁的微信 Markdown 编辑器:支持 Markdown 所有基础语法、色盘取色、一键复制并粘贴到公众号后台、多图上传、一键下载文档、自定义 CSS 样式、一键重置等特性",
|
|
||||||
"main": "index.js",
|
|
||||||
"scripts": {
|
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"md-cli": "index.js"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"dist",
|
|
||||||
"public",
|
|
||||||
"index.js",
|
|
||||||
"mm.config.js",
|
|
||||||
"util.js"
|
|
||||||
],
|
|
||||||
"keywords": [],
|
|
||||||
"author": "wll8",
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@wll8/process-manager": "^1.0.1",
|
|
||||||
"form-data": "4.0.0",
|
|
||||||
"get-port": "5.1.1",
|
|
||||||
"mockm": "^1.1.27-alpha.2",
|
|
||||||
"node-fetch": "^3.2.10"
|
|
||||||
}
|
|
||||||
}
|
|
218
md-cli/util.js
218
md-cli/util.js
@ -1,218 +0,0 @@
|
|||||||
const fetch = (...args) => import(`node-fetch`).then(({default: fetch}) => fetch(...args))
|
|
||||||
const FormData = require(`form-data`)
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断端口是否可用
|
|
||||||
* @param {string|array} port 多个端口用数组
|
|
||||||
*/
|
|
||||||
function portIsOk (port) {
|
|
||||||
if(typeof(port) === `object`) { // 判断多个端口
|
|
||||||
return Promise.all(port.map(item => portIsOk(item)))
|
|
||||||
}
|
|
||||||
return new Promise(resolve => {
|
|
||||||
const net = require(`net`)
|
|
||||||
const server = net.createServer().listen(port)
|
|
||||||
server.on(`listening`, () => server.close(resolve(true)))
|
|
||||||
server.on(`error`, () => resolve(port))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理不同系统的命令行空格差异, 在 cp.spawn 中的参数中, 如果包含空格, win 平台需要使用双引号包裹, unix 不需要
|
|
||||||
* @param {string} str
|
|
||||||
*/
|
|
||||||
function handleSpace(str = ``) {
|
|
||||||
const newStr = require('os').type() === 'Windows_NT' && str.match(` `) ? `"${str}"` : str
|
|
||||||
return newStr
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 自定义控制台颜色
|
|
||||||
* https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color
|
|
||||||
* nodejs 内置颜色: https://nodejs.org/api/util.html#util_foreground_colors
|
|
||||||
*/
|
|
||||||
function colors () {
|
|
||||||
const util = require('util')
|
|
||||||
|
|
||||||
function colorize (color, text) {
|
|
||||||
const codes = util.inspect.colors[color]
|
|
||||||
return `\x1b[${codes[0]}m${text}\x1b[${codes[1]}m`
|
|
||||||
}
|
|
||||||
|
|
||||||
let returnValue = {}
|
|
||||||
Object.keys(util.inspect.colors).forEach((color) => {
|
|
||||||
returnValue[color] = (text) => colorize(color, text)
|
|
||||||
})
|
|
||||||
|
|
||||||
const colorTable = new Proxy(returnValue, {
|
|
||||||
get (obj, prop) {
|
|
||||||
// 在没有对应的具名颜色函数时, 返回空函数作为兼容处理
|
|
||||||
const res = obj[prop] ? obj[prop] : (arg => arg)
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// 取消下行注释, 查看所有的颜色和名字:
|
|
||||||
// Object.keys(returnValue).forEach((color) => console.log(returnValue[color](color)))
|
|
||||||
return colorTable
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 以 Promise 方式运行 spawn
|
|
||||||
* @param {*} cmd 主程序
|
|
||||||
* @param {*} args 程序参数数组
|
|
||||||
* @param {*} opts spawn 选项
|
|
||||||
*/
|
|
||||||
function spawn (cmd, args, opts) {
|
|
||||||
opts = { stdio: `inherit`, ...opts }
|
|
||||||
opts.shell = opts.shell || process.platform === 'win32'
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const cp = require('child_process')
|
|
||||||
const child = cp.spawn(cmd, args, opts)
|
|
||||||
let stdout = ''
|
|
||||||
let stderr = ''
|
|
||||||
child.stdout && child.stdout.on('data', d => { stdout += d })
|
|
||||||
child.stderr && child.stderr.on('data', d => { stderr += d })
|
|
||||||
child.on('error', reject)
|
|
||||||
child.on('close', code => {
|
|
||||||
resolve({code, stdout, stderr})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解析命令行参数
|
|
||||||
* @param {*} arr
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
function parseArgv(arr) {
|
|
||||||
return (arr || process.argv.slice(2)).reduce((acc, arg) => {
|
|
||||||
let [k, ...v] = arg.split('=')
|
|
||||||
v = v.join(`=`) // 把带有 = 的值合并为字符串
|
|
||||||
acc[k] = v === '' // 没有值时, 则表示为 true
|
|
||||||
? true
|
|
||||||
: (
|
|
||||||
/^(true|false)$/.test(v) // 转换指明的 true/false
|
|
||||||
? v === 'true'
|
|
||||||
: (
|
|
||||||
/[\d|.]+/.test(v)
|
|
||||||
? (isNaN(Number(v)) ? v : Number(v)) // 如果转换为数字失败, 则使用原始字符
|
|
||||||
: v
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return acc
|
|
||||||
}, {})
|
|
||||||
}
|
|
||||||
|
|
||||||
function dcloud(spaceInfo) {
|
|
||||||
if(Boolean(spaceInfo.spaceId && spaceInfo.clientSecret) === false) {
|
|
||||||
throw new Error(`请填写 spaceInfo`)
|
|
||||||
}
|
|
||||||
|
|
||||||
function sign(data, secret) {
|
|
||||||
const hmac = require(`crypto`).createHmac(`md5`, secret)
|
|
||||||
// 排序 obj 再转换为 key=val&key=val 的格式
|
|
||||||
const str = Object.keys(data).sort().reduce((acc, cur) => `${acc}&${cur}=${data[cur]}`, ``).slice(1)
|
|
||||||
hmac.update(str)
|
|
||||||
return hmac.digest(`hex`)
|
|
||||||
}
|
|
||||||
|
|
||||||
async function anonymousAuthorize() {
|
|
||||||
const data = {
|
|
||||||
method: `serverless.auth.user.anonymousAuthorize`,
|
|
||||||
params: `{}`,
|
|
||||||
spaceId: spaceInfo.spaceId,
|
|
||||||
timestamp: Date.now(),
|
|
||||||
}
|
|
||||||
return await fetch(`https://api.bspapp.com/client`, {
|
|
||||||
headers: {
|
|
||||||
'x-serverless-sign': sign(data, spaceInfo.clientSecret),
|
|
||||||
},
|
|
||||||
body: `{"method":"serverless.auth.user.anonymousAuthorize","params":"{}","spaceId":"${spaceInfo.spaceId}","timestamp":${data.timestamp}}`,
|
|
||||||
method: `POST`,
|
|
||||||
}).then((res) => res.json())
|
|
||||||
}
|
|
||||||
|
|
||||||
async function report({ id, token }) {
|
|
||||||
const reportReq = {
|
|
||||||
method: `serverless.file.resource.report`,
|
|
||||||
params: `{"id":"${id}"}`,
|
|
||||||
spaceId: spaceInfo.spaceId,
|
|
||||||
timestamp: Date.now(),
|
|
||||||
token: token,
|
|
||||||
}
|
|
||||||
return await fetch(`https://api.bspapp.com/client`, {
|
|
||||||
headers: {
|
|
||||||
'x-basement-token': reportReq.token,
|
|
||||||
'x-serverless-sign': sign(reportReq, spaceInfo.clientSecret),
|
|
||||||
},
|
|
||||||
body: JSON.stringify(reportReq),
|
|
||||||
method: `POST`,
|
|
||||||
}).then((res) => res.json())
|
|
||||||
}
|
|
||||||
|
|
||||||
async function generateProximalSign({ name, token }) {
|
|
||||||
const data = {
|
|
||||||
method: `serverless.file.resource.generateProximalSign`,
|
|
||||||
params: `{"env":"public","filename":"${name}"}`,
|
|
||||||
spaceId: spaceInfo.spaceId,
|
|
||||||
timestamp: Date.now(),
|
|
||||||
token,
|
|
||||||
}
|
|
||||||
const res = await fetch(`https://api.bspapp.com/client`, {
|
|
||||||
headers: {
|
|
||||||
'x-basement-token': data.token,
|
|
||||||
'x-serverless-sign': sign(data, spaceInfo.clientSecret),
|
|
||||||
},
|
|
||||||
body: JSON.stringify(data),
|
|
||||||
method: `POST`,
|
|
||||||
}).then((res) => res.json())
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
async function upload({ data, file }) {
|
|
||||||
const formdata = new FormData()
|
|
||||||
Object.entries({
|
|
||||||
'Cache-Control': `max-age=2592000`,
|
|
||||||
'Content-Disposition': `attachment`,
|
|
||||||
OSSAccessKeyId: data.accessKeyId,
|
|
||||||
Signature: data.signature,
|
|
||||||
host: data.host,
|
|
||||||
id: data.id,
|
|
||||||
key: data.ossPath,
|
|
||||||
policy: data.policy,
|
|
||||||
success_action_status: 200,
|
|
||||||
file,
|
|
||||||
}).forEach(([key, val]) => formdata.append(key, val))
|
|
||||||
|
|
||||||
return await fetch(`https://${data.host}`, {
|
|
||||||
headers: {
|
|
||||||
'X-OSS-server-side-encrpytion': `AES256`,
|
|
||||||
},
|
|
||||||
body: formdata,
|
|
||||||
method: `POST`,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
async function uploadFile({ name = `unnamed.file`, file }) {
|
|
||||||
const token = (await anonymousAuthorize()).data.accessToken
|
|
||||||
const res = await generateProximalSign({ name, token })
|
|
||||||
await upload({ data: res.data, file })
|
|
||||||
await report({ id: res.data.id, token })
|
|
||||||
const fileUrl = `https://${res.data.cdnDomain}/${res.data.ossPath}`
|
|
||||||
return fileUrl
|
|
||||||
}
|
|
||||||
|
|
||||||
return uploadFile
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
portIsOk,
|
|
||||||
handleSpace,
|
|
||||||
colors: colors(),
|
|
||||||
spawn,
|
|
||||||
parseArgv,
|
|
||||||
dcloud,
|
|
||||||
}
|
|
741
package-lock.json
generated
741
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,6 @@
|
|||||||
"private": false,
|
"private": false,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"release:cli": "node ./bin/release.js",
|
"release:cli": "node ./bin/release.js",
|
||||||
"prepare": "husky install",
|
|
||||||
"lint": "vue-cli-service lint src",
|
"lint": "vue-cli-service lint src",
|
||||||
"start": "npm run lint -- --fix && run-p serve",
|
"start": "npm run lint -- --fix && run-p serve",
|
||||||
"serve": "vue-cli-service serve",
|
"serve": "vue-cli-service serve",
|
||||||
|
79
public/assets/css/css.css
Normal file
79
public/assets/css/css.css
Normal file
File diff suppressed because one or more lines are too long
BIN
public/assets/favicon.png
Normal file
BIN
public/assets/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
53316
public/assets/js/js.js
Normal file
53316
public/assets/js/js.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -3,33 +3,21 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||||
<meta
|
|
||||||
name="keywords"
|
|
||||||
content="md,markdown,markdown-editor,wechat,official-account,yanglbme,doocs"
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Wechat Markdown Editor | 一款高度简洁的微信 Markdown 编辑器"
|
|
||||||
/>
|
|
||||||
<meta
|
<meta
|
||||||
name="viewport"
|
name="viewport"
|
||||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
|
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
|
||||||
/>
|
/>
|
||||||
<title>微信 Markdown 编辑器 | Doocs 开源社区</title>
|
<title>微信 Markdown 编辑器</title>
|
||||||
<link
|
<link
|
||||||
rel="shortcut icon"
|
rel="shortcut icon"
|
||||||
href="https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/doocs/md/images/favicon.png"
|
href="./assets/favicon.png"
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="apple-touch-icon-precomposed"
|
|
||||||
href="https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/doocs/md/images/1648303220922-7e14aefa-816e-44c1-8604-ade709ca1c69.png"
|
|
||||||
/>
|
/>
|
||||||
<link
|
<link
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/wechatsync/article-syncjs@latest/dist/styles.css"
|
href="./assets/css/css.css"
|
||||||
/>
|
/>
|
||||||
<!-- KaTeX CSS -->
|
<!-- KaTeX CSS -->
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css" integrity="sha384-n8MVd4RsNIU0tAv4ct0nTaAbDJwPJzDEaqSD1odI+WdtXRGWt2kTvGFasHpSy3SV" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://i-aws.czl.net/jsdelivr/npm/katex@0.16.9/dist/katex.min.css" >
|
||||||
|
|
||||||
<script src="https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/npm/prettify/r298/prettify.min.js"></script>
|
<script src="https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/npm/prettify/r298/prettify.min.js"></script>
|
||||||
<style>
|
<style>
|
||||||
@ -50,11 +38,5 @@
|
|||||||
<!-- built files will be auto injected -->
|
<!-- built files will be auto injected -->
|
||||||
</body>
|
</body>
|
||||||
<script src="https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/wechatsync/article-syncjs@latest/dist/main.js"></script>
|
<script src="https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/wechatsync/article-syncjs@latest/dist/main.js"></script>
|
||||||
<!-- 支持一下 mermaid -->
|
|
||||||
<script type="module">
|
|
||||||
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
|
|
||||||
mermaid.initialize({ startOnLoad: true });
|
|
||||||
window.mermaid = mermaid;
|
|
||||||
</script>
|
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-dialog
|
|
||||||
title="关于"
|
|
||||||
class="about__dialog"
|
|
||||||
:visible="visible"
|
|
||||||
@close="$emit('close')"
|
|
||||||
width="30%"
|
|
||||||
center
|
|
||||||
>
|
|
||||||
<div style="text-align: center">
|
|
||||||
<h3>一款高度简洁的微信 Markdown 编辑器</h3>
|
|
||||||
<p>扫码关注公众号 Doocs,原创技术文章第一时间推送!</p>
|
|
||||||
<img
|
|
||||||
src="https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/doocs/md/images/1648303220922-7e14aefa-816e-44c1-8604-ade709ca1c69.png"
|
|
||||||
style="width: 40%"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<template slot="footer">
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
@click="onRedirect('https://github.com/doocs/md')"
|
|
||||||
plain
|
|
||||||
>
|
|
||||||
GitHub 仓库
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
@click="onRedirect('https://gitee.com/doocs/md')"
|
|
||||||
plain
|
|
||||||
>
|
|
||||||
Gitee 仓库
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
visible: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
onRedirect(url) {
|
|
||||||
window.open(url)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="less" scoped>
|
|
||||||
/deep/ .el-dialog {
|
|
||||||
min-width: 420px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -121,13 +121,6 @@
|
|||||||
<el-dropdown-item class="padding-left-3" @click.native="customStyle">
|
<el-dropdown-item class="padding-left-3" @click.native="customStyle">
|
||||||
自定义 CSS
|
自定义 CSS
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
<el-dropdown-item divided @click.native="codeBlockChanged">
|
|
||||||
<i
|
|
||||||
class="el-icon-check"
|
|
||||||
:style="{ opacity: isMacCodeBlock ? 1 : 0 }"
|
|
||||||
></i>
|
|
||||||
Mac 代码块
|
|
||||||
</el-dropdown-item>
|
|
||||||
<el-dropdown-item
|
<el-dropdown-item
|
||||||
divided
|
divided
|
||||||
class="padding-left-3"
|
class="padding-left-3"
|
||||||
@ -137,16 +130,6 @@
|
|||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
</el-dropdown-menu>
|
</el-dropdown-menu>
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
<el-dropdown>
|
|
||||||
<span class="el-dropdown-link">
|
|
||||||
帮助<i class="el-icon-arrow-down el-icon--right"></i>
|
|
||||||
</span>
|
|
||||||
<el-dropdown-menu slot="dropdown">
|
|
||||||
<el-dropdown-item @click.native="$emit('show-about-dialog')">
|
|
||||||
关于
|
|
||||||
</el-dropdown-item>
|
|
||||||
</el-dropdown-menu>
|
|
||||||
</el-dropdown>
|
|
||||||
</div>
|
</div>
|
||||||
<el-button plain size="medium" :type="btnType" @click="copy">
|
<el-button plain size="medium" :type="btnType" @click="copy">
|
||||||
复制
|
复制
|
||||||
@ -187,7 +170,6 @@ export default {
|
|||||||
return {
|
return {
|
||||||
config,
|
config,
|
||||||
citeStatus: false,
|
citeStatus: false,
|
||||||
isMacCodeBlock: true,
|
|
||||||
showResetConfirm: false,
|
showResetConfirm: false,
|
||||||
selectFont: ``,
|
selectFont: ``,
|
||||||
selectSize: ``,
|
selectSize: ``,
|
||||||
@ -248,7 +230,6 @@ export default {
|
|||||||
codeTheme: (state) => state.codeTheme,
|
codeTheme: (state) => state.codeTheme,
|
||||||
nightMode: (state) => state.nightMode,
|
nightMode: (state) => state.nightMode,
|
||||||
currentCiteStatus: (state) => state.citeStatus,
|
currentCiteStatus: (state) => state.citeStatus,
|
||||||
currentIsMacCodeBlock: (state) => state.isMacCodeBlock,
|
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -328,11 +309,6 @@ export default {
|
|||||||
this.setCiteStatus(this.citeStatus)
|
this.setCiteStatus(this.citeStatus)
|
||||||
this.$emit(`refresh`)
|
this.$emit(`refresh`)
|
||||||
},
|
},
|
||||||
codeBlockChanged() {
|
|
||||||
this.isMacCodeBlock = !this.isMacCodeBlock
|
|
||||||
this.setIsMacCodeBlock(this.isMacCodeBlock)
|
|
||||||
this.$emit(`refresh`)
|
|
||||||
},
|
|
||||||
// 复制到微信公众号
|
// 复制到微信公众号
|
||||||
copy() {
|
copy() {
|
||||||
this.$emit(`startCopy`)
|
this.$emit(`startCopy`)
|
||||||
@ -351,12 +327,6 @@ export default {
|
|||||||
// 公众号不支持 position, 转换为等价的 translateY
|
// 公众号不支持 position, 转换为等价的 translateY
|
||||||
.replace(/top:(.*?)em/g, `transform: translateY($1em)`)
|
.replace(/top:(.*?)em/g, `transform: translateY($1em)`)
|
||||||
|
|
||||||
if (this.isMacCodeBlock) {
|
|
||||||
clipboardDiv.innerHTML = clipboardDiv.innerHTML.replaceAll(
|
|
||||||
/(<code class="prettyprint[^>]*)(style=")/g,
|
|
||||||
`$1style="font-family: Menlo, 'Operator Mono', Consolas, Monaco, monospace;`
|
|
||||||
)
|
|
||||||
}
|
|
||||||
clipboardDiv.focus()
|
clipboardDiv.focus()
|
||||||
window.getSelection().removeAllRanges()
|
window.getSelection().removeAllRanges()
|
||||||
let range = document.createRange()
|
let range = document.createRange()
|
||||||
@ -412,8 +382,6 @@ export default {
|
|||||||
this.selectSize = this.currentSize
|
this.selectSize = this.currentSize
|
||||||
this.selectColor = this.currentColor
|
this.selectColor = this.currentColor
|
||||||
this.selectCodeTheme = this.codeTheme
|
this.selectCodeTheme = this.codeTheme
|
||||||
|
|
||||||
this.isMacCodeBlock = false
|
|
||||||
this.codeBlockChanged()
|
this.codeBlockChanged()
|
||||||
},
|
},
|
||||||
cancelReset() {
|
cancelReset() {
|
||||||
@ -429,7 +397,6 @@ export default {
|
|||||||
`setCssEditorValue`,
|
`setCssEditorValue`,
|
||||||
`setCurrentCodeTheme`,
|
`setCurrentCodeTheme`,
|
||||||
`setWxRendererOptions`,
|
`setWxRendererOptions`,
|
||||||
`setIsMacCodeBlock`,
|
|
||||||
]),
|
]),
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -438,7 +405,6 @@ export default {
|
|||||||
this.selectColor = this.currentColor
|
this.selectColor = this.currentColor
|
||||||
this.selectCodeTheme = this.codeTheme
|
this.selectCodeTheme = this.codeTheme
|
||||||
this.citeStatus = this.currentCiteStatus
|
this.citeStatus = this.currentCiteStatus
|
||||||
this.isMacCodeBlock = this.currentIsMacCodeBlock
|
|
||||||
|
|
||||||
const fileInput = this.$refs.fileInput
|
const fileInput = this.$refs.fileInput
|
||||||
fileInput.onchange = () => {
|
fileInput.onchange = () => {
|
||||||
|
@ -165,36 +165,6 @@ export const useStore = defineStore(`store`, {
|
|||||||
// 附加的一些 style
|
// 附加的一些 style
|
||||||
output += this.wxRenderer.buildAddition()
|
output += this.wxRenderer.buildAddition()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.isMacCodeBlock) {
|
|
||||||
output += `
|
|
||||||
<style>
|
|
||||||
.hljs.code__pre::before {
|
|
||||||
position: initial;
|
|
||||||
padding: initial;
|
|
||||||
content: '';
|
|
||||||
display: block;
|
|
||||||
height: 25px;
|
|
||||||
background-color: transparent;
|
|
||||||
background-image: url("https://doocs.oss-cn-shenzhen.aliyuncs.com/img/123.svg");
|
|
||||||
background-position: 14px 10px;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-size: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hljs.code__pre {
|
|
||||||
padding: 0!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hljs.code__pre code {
|
|
||||||
display: -webkit-box;
|
|
||||||
padding: 0.5em 1em 1em;
|
|
||||||
overflow-x: auto;
|
|
||||||
text-indent: 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
`
|
|
||||||
}
|
|
||||||
this.output = output
|
this.output = output
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
@download="downloadEditorContent"
|
@download="downloadEditorContent"
|
||||||
@export="exportEditorContent"
|
@export="exportEditorContent"
|
||||||
@showCssEditor="showCssEditor = !showCssEditor"
|
@showCssEditor="showCssEditor = !showCssEditor"
|
||||||
@show-about-dialog="aboutDialogVisible = true"
|
|
||||||
@show-dialog-form="insertFormDialogVisible = true"
|
@show-dialog-form="insertFormDialogVisible = true"
|
||||||
@show-dialog-upload-img="dialogUploadImgVisible = true"
|
@show-dialog-upload-img="dialogUploadImgVisible = true"
|
||||||
@startCopy=";(isCoping = true), (backLight = true)"
|
@startCopy=";(isCoping = true), (backLight = true)"
|
||||||
@ -69,10 +68,6 @@
|
|||||||
@uploadImage="uploadImage"
|
@uploadImage="uploadImage"
|
||||||
@uploaded="uploaded"
|
@uploaded="uploaded"
|
||||||
></upload-img-dialog>
|
></upload-img-dialog>
|
||||||
<about-dialog
|
|
||||||
:visible="aboutDialogVisible"
|
|
||||||
@close="aboutDialogVisible = false"
|
|
||||||
></about-dialog>
|
|
||||||
<insert-form-dialog
|
<insert-form-dialog
|
||||||
:visible="insertFormDialogVisible"
|
:visible="insertFormDialogVisible"
|
||||||
@close="insertFormDialogVisible = false"
|
@close="insertFormDialogVisible = false"
|
||||||
@ -94,7 +89,6 @@ import { mapState, mapActions } from 'pinia'
|
|||||||
import { useStore } from '@/stores'
|
import { useStore } from '@/stores'
|
||||||
|
|
||||||
import EditorHeader from '@/components/CodemirrorEditor/EditorHeader/index'
|
import EditorHeader from '@/components/CodemirrorEditor/EditorHeader/index'
|
||||||
import AboutDialog from '@/components/CodemirrorEditor/AboutDialog'
|
|
||||||
import InsertFormDialog from '@/components/CodemirrorEditor/InsertFormDialog'
|
import InsertFormDialog from '@/components/CodemirrorEditor/InsertFormDialog'
|
||||||
import RightClickMenu from '@/components/CodemirrorEditor/RightClickMenu'
|
import RightClickMenu from '@/components/CodemirrorEditor/RightClickMenu'
|
||||||
import UploadImgDialog from '@/components/CodemirrorEditor/UploadImgDialog'
|
import UploadImgDialog from '@/components/CodemirrorEditor/UploadImgDialog'
|
||||||
@ -120,7 +114,6 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
showCssEditor: false,
|
showCssEditor: false,
|
||||||
aboutDialogVisible: false,
|
|
||||||
dialogUploadImgVisible: false,
|
dialogUploadImgVisible: false,
|
||||||
insertFormDialogVisible: false,
|
insertFormDialogVisible: false,
|
||||||
isCoping: false,
|
isCoping: false,
|
||||||
@ -138,7 +131,6 @@ export default {
|
|||||||
CssEditor,
|
CssEditor,
|
||||||
RunLoading,
|
RunLoading,
|
||||||
EditorHeader,
|
EditorHeader,
|
||||||
AboutDialog,
|
|
||||||
InsertFormDialog,
|
InsertFormDialog,
|
||||||
RightClickMenu,
|
RightClickMenu,
|
||||||
UploadImgDialog,
|
UploadImgDialog,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user