mirror of
https://github.com/jaywcjlove/wxmp.git
synced 2026-01-12 00:08:50 +08:00
Compare commits
20 Commits
renovate/n
...
renovate/e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c6b1aeec9 | ||
|
|
1b2e3b534d | ||
|
|
d85368cb4f | ||
|
|
8b4194f5ae | ||
|
|
ab3423a697 | ||
|
|
504259b862 | ||
|
|
b05d90e15b | ||
|
|
f6e71388f1 | ||
|
|
1c9a7a8668 | ||
|
|
314f47f8af | ||
|
|
be06f694a5 | ||
|
|
c23ada95ff | ||
|
|
2632cb1938 | ||
|
|
77616468a4 | ||
|
|
41eb86cd2b | ||
|
|
5fe5ddfa61 | ||
|
|
82cc2a3df4 | ||
|
|
b5596d76b6 | ||
|
|
d2c2746420 | ||
|
|
ef1ed54be7 |
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
ko_fi: jaywcjlove
|
||||
buy_me_a_coffee: jaywcjlove
|
||||
custom: ["https://www.paypal.me/kennyiseeyou", "https://jaywcjlove.github.io/#/sponsor"]
|
||||
73
.github/workflows/ci.yml
vendored
73
.github/workflows/ci.yml
vendored
@@ -8,16 +8,16 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
- run: npm run doc
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: webiste
|
||||
path: |
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
uses: jaywcjlove/changelog-generator@main
|
||||
|
||||
- name: Deploy
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
uses: peaceiris/actions-gh-pages@v4
|
||||
with:
|
||||
commit_message: ${{ github.event.head_commit.message }} ${{steps.tag_version.outputs.tag}}
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -67,8 +67,8 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: webiste
|
||||
path: website/build
|
||||
@@ -122,10 +122,10 @@ jobs:
|
||||
runs-on: windows-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
|
||||
- name: Install
|
||||
run: npm install --build-from-source
|
||||
@@ -134,7 +134,7 @@ jobs:
|
||||
- run: npm run build
|
||||
# - run: npm run electron
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: webiste
|
||||
path: website/build
|
||||
@@ -147,7 +147,8 @@ jobs:
|
||||
- working-directory: electron/app/dist
|
||||
run: ls -R
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: needs.build.outputs.successful == 'true'
|
||||
with:
|
||||
name: wxmp-windows
|
||||
path: |
|
||||
@@ -158,16 +159,16 @@ jobs:
|
||||
runs-on: macos-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
|
||||
- run: npm install
|
||||
- run: npm run hoist
|
||||
- run: npm run build
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: webiste
|
||||
path: website/build
|
||||
@@ -180,7 +181,8 @@ jobs:
|
||||
- working-directory: electron/app/dist
|
||||
run: ls -R
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: needs.build.outputs.successful == 'true'
|
||||
with:
|
||||
name: wxmp-macos
|
||||
path: |
|
||||
@@ -191,16 +193,16 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 45
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
- run: npm install
|
||||
- run: npm run hoist
|
||||
- run: npm run build
|
||||
# - run: npm run electron
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: webiste
|
||||
path: website/build
|
||||
@@ -213,7 +215,8 @@ jobs:
|
||||
- working-directory: electron/app/dist
|
||||
run: ls -R
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: needs.build.outputs.successful == 'true'
|
||||
with:
|
||||
name: wxmp-linux
|
||||
path: |
|
||||
@@ -223,26 +226,26 @@ jobs:
|
||||
|
||||
create_release:
|
||||
needs: [build, build_windows, build_macos, build_linux]
|
||||
if: needs.build.outputs.successful
|
||||
if: needs.build.outputs.successful == 'true'
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 45
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: wxmp-linux
|
||||
path: dist/linux
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: wxmp-macos
|
||||
path: dist/macos
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: wxmp-windows
|
||||
path: dist/windows
|
||||
@@ -261,8 +264,9 @@ jobs:
|
||||
|
||||
- name: Create Release
|
||||
uses: ncipollo/release-action@v1
|
||||
if: needs.build.outputs.successful
|
||||
if: needs.build.outputs.successful == 'true'
|
||||
with:
|
||||
allowUpdates: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
name: ${{ steps.changelog.outputs.tag }}
|
||||
tag: ${{ steps.changelog.outputs.tag }}
|
||||
@@ -295,17 +299,16 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 4
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- run: echo "outputs.version - ${{ needs.build.outputs.create_tag_version }}"
|
||||
|
||||
- uses: dev-drprasad/delete-tag-and-release@v0.2.0
|
||||
if: needs.build.outputs.successful
|
||||
- uses: dev-drprasad/delete-tag-and-release@v1.1
|
||||
if: needs.build.outputs.successful == 'true'
|
||||
with:
|
||||
delete_release: true
|
||||
repo: jaywcjlove/wxmp
|
||||
tag_name: '${{ needs.build.outputs.create_tag_version }}'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
<h1 align="center">微信公众号 Markdown 编辑器</h1>
|
||||
</div>
|
||||
|
||||
[](https://jaywcjlove.github.io/#/sponsor)
|
||||
[](https://github.com/jaywcjlove/wxmp/actions/workflows/ci.yml)
|
||||
|
||||
[](https://jaywcjlove.github.io/wxmp)
|
||||
|
||||
微信公众号文章 Markdown 在线编辑器,使用 markdown 语法创建一篇简介美观大方的微信公众号图文。由于发版本麻烦,和一些功能无法扩展停滞开发了,未来不再开发 Chrome 的插件(暂存在 chrome 分支),通过 web 版本定制更丰富的功能。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "wxmp",
|
||||
"description": "微信公众号 Markdown 编辑器",
|
||||
"homepage": "https://github.com/jaywcjlove/wxmp.git",
|
||||
"version": "2.3.3",
|
||||
"version": "2.4.0",
|
||||
"main": "main.js",
|
||||
"author": "Kenny Wong <398188662@qq.com>",
|
||||
"private": true,
|
||||
@@ -18,13 +18,13 @@
|
||||
"build": "npm run copy && cross-env NODE_ENV=production electron-builder build --publish=never --config config.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@wcj/wxmp-main": "2.3.3"
|
||||
"@wcj/wxmp-main": "2.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@wcj/wxmp-preload": "2.3.3",
|
||||
"@wcj/wxmp-preload": "2.4.0",
|
||||
"cpy-cli": "^5.0.0",
|
||||
"electron": "20.1.3",
|
||||
"electron-builder": "23.3.3",
|
||||
"website": "2.3.3"
|
||||
"electron-builder": "23.6.0",
|
||||
"website": "2.4.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@wcj/wxmp-main",
|
||||
"version": "2.3.3",
|
||||
"version": "2.4.0",
|
||||
"main": "./lib/index.js",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@wcj/wxmp-preload",
|
||||
"version": "2.3.3",
|
||||
"version": "2.4.0",
|
||||
"main": "./lib/index.js",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"version": "2.3.3",
|
||||
"version": "2.4.0",
|
||||
"packages": ["website", "electron/*"]
|
||||
}
|
||||
|
||||
@@ -14,12 +14,14 @@
|
||||
},
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@lerna/legacy-package-management": "^7.1.5",
|
||||
"@lerna/legacy-package-management": "^8.0.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"husky": "^8.0.1",
|
||||
"lerna": "^7.1.5",
|
||||
"lerna": "^8.0.0",
|
||||
"prettier": "^3.0.2",
|
||||
"tsbb": "~4.1.0"
|
||||
"react": "~18.2.0",
|
||||
"react-dom": "~18.2.0",
|
||||
"tsbb": "~4.4.0"
|
||||
},
|
||||
"workspaces": {
|
||||
"packages": [
|
||||
|
||||
@@ -20,6 +20,8 @@ export default (conf: Configuration, env: 'development' | 'production', options:
|
||||
}),
|
||||
);
|
||||
|
||||
/** https://github.com/kktjs/kkt/issues/446 */
|
||||
conf.ignoreWarnings = [{ module: /node_modules[\\/]parse5[\\/]/ }];
|
||||
conf.module!.exprContextCritical = false;
|
||||
if (env === 'production') {
|
||||
conf.output = { ...conf.output, publicPath: './' };
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "website",
|
||||
"version": "2.3.3",
|
||||
"version": "2.4.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "kkt start",
|
||||
@@ -25,23 +25,23 @@
|
||||
"@uiw/codemirror-theme-xcode": "^4.11.6",
|
||||
"@uiw/react-back-to-top": "^1.2.0",
|
||||
"@uiw/react-github-corners": "^1.5.15",
|
||||
"@uiw/react-markdown-editor": "^5.11.2",
|
||||
"@uiw/react-markdown-editor": "^6.0.0",
|
||||
"@wcj/dark-mode": "^1.0.15",
|
||||
"css-tree": "^2.2.1",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react": "~18.2.0",
|
||||
"react-dom": "~18.2.0",
|
||||
"react-hot-toast": "^2.3.0",
|
||||
"react-router-dom": "^6.3.0",
|
||||
"rehype-attr": "^2.0.8",
|
||||
"rehype-ignore": "^1.0.1",
|
||||
"rehype-prism-plus": "^1.5.0",
|
||||
"rehype-raw": "^6.1.1",
|
||||
"rehype-stringify": "^9.0.3",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"remark-parse": "^10.0.1",
|
||||
"remark-rehype": "^10.1.0",
|
||||
"styled-components": "~6.0.7",
|
||||
"unified": "^10.1.2"
|
||||
"rehype-attr": "^3.0.0",
|
||||
"rehype-ignore": "^2.0.0",
|
||||
"rehype-prism-plus": "^2.0.0",
|
||||
"rehype-raw": "^7.0.0",
|
||||
"rehype-stringify": "^10.0.0",
|
||||
"remark-gfm": "^4.0.0",
|
||||
"remark-parse": "^11.0.0",
|
||||
"remark-rehype": "^11.0.0",
|
||||
"styled-components": "~6.1.0",
|
||||
"unified": "^11.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kkt/less-modules": "^7.2.0",
|
||||
|
||||
@@ -13,16 +13,22 @@ const Button = styled.button`
|
||||
const CopyView: React.FC<{ command: ICommand; editorProps: IMarkdownEditor & ToolBarProps }> = (props) => {
|
||||
const { editorProps } = props;
|
||||
const handleClick = () => {
|
||||
const dom = editorProps.preview.current;
|
||||
dom?.focus();
|
||||
window.getSelection()?.removeAllRanges();
|
||||
let range = document.createRange();
|
||||
range.setStartBefore(dom?.firstChild!);
|
||||
range.setEndAfter(dom?.lastChild!);
|
||||
window.getSelection()?.addRange(range);
|
||||
document.execCommand(`copy`);
|
||||
window.getSelection()?.removeAllRanges();
|
||||
toast.success(<div>复制成功!去公众号编辑器复制吧!</div>);
|
||||
const dom: HTMLDivElement | null = editorProps.preview.current;
|
||||
if (!dom) {
|
||||
toast.error(<div>dom is null</div>);
|
||||
return;
|
||||
}
|
||||
dom.focus();
|
||||
const htmlContent = dom.innerHTML;
|
||||
navigator.clipboard
|
||||
.writeText(htmlContent)
|
||||
.then(() => {
|
||||
toast.success(<div>复制成功!去公众号编辑器粘贴吧!</div>);
|
||||
})
|
||||
.catch((err) => {
|
||||
toast.error(<div>{JSON.stringify(err)}</div>);
|
||||
console.error('Failed to copy: ', err);
|
||||
});
|
||||
};
|
||||
return (
|
||||
<Button type="button" onClick={handleClick}>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import MarkdownEditor, { getCommands } from '@uiw/react-markdown-editor';
|
||||
import { useContext } from 'react';
|
||||
// @ts-ignore
|
||||
import { EditorView } from '@codemirror/view';
|
||||
import { Preview } from './Preview';
|
||||
import { copy } from '../../commands/copy';
|
||||
|
||||
@@ -129,7 +129,7 @@ export const footnotesLabel = (node: Element) => {
|
||||
];
|
||||
};
|
||||
|
||||
export const imagesStyle = (node: Element, parent: Root | Element | null) => {
|
||||
export const imagesStyle = (node: Element, parent: Root | Element | undefined) => {
|
||||
if (
|
||||
parent?.type === 'element' &&
|
||||
/(p|a)/.test(parent.tagName) &&
|
||||
|
||||
@@ -26,21 +26,21 @@ export function markdownToHTML(md: string, css: string, opts: MarkdownToHTMLOpti
|
||||
parseCustomProperty: false,
|
||||
positions: false,
|
||||
});
|
||||
|
||||
// @ts-ignore
|
||||
const data = cssdata(ast.children.head, {}, { color: opts.preColor, theme: opts.previewTheme });
|
||||
const processor = unified()
|
||||
.use(remarkParse)
|
||||
.use(remarkGfm)
|
||||
.use(remarkRehype, { allowDangerousHtml: true })
|
||||
.use(rehypeRaw)
|
||||
.use(rehypePrism, {
|
||||
ignoreMissing: true,
|
||||
})
|
||||
.use(rehypeRaw)
|
||||
.use(rehypeIgnore, {})
|
||||
.use(rehypeAttrs, { properties: 'attr' })
|
||||
.use(rehypeRewrite, {
|
||||
rewrite: (node, _index, parent) => {
|
||||
// @ts-ignore
|
||||
if (
|
||||
node?.type === 'element' &&
|
||||
node?.tagName === 'code' &&
|
||||
|
||||
Reference in New Issue
Block a user