mirror of
https://github.com/jaywcjlove/wxmp.git
synced 2026-01-10 23:38:48 +08:00
Compare commits
51 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49bf21de71 | ||
|
|
15723a08c9 | ||
|
|
4fd4f3644d | ||
|
|
7969fb28a4 | ||
|
|
1955ec9cbd | ||
|
|
54e4188eb0 | ||
|
|
6fe79146d3 | ||
|
|
e7b52e0ebe | ||
|
|
8991adcd15 | ||
|
|
1b2e3b534d | ||
|
|
d85368cb4f | ||
|
|
8b4194f5ae | ||
|
|
ab3423a697 | ||
|
|
504259b862 | ||
|
|
b05d90e15b | ||
|
|
f6e71388f1 | ||
|
|
1c9a7a8668 | ||
|
|
314f47f8af | ||
|
|
be06f694a5 | ||
|
|
c23ada95ff | ||
|
|
2632cb1938 | ||
|
|
77616468a4 | ||
|
|
41eb86cd2b | ||
|
|
5fe5ddfa61 | ||
|
|
82cc2a3df4 | ||
|
|
b5596d76b6 | ||
|
|
d2c2746420 | ||
|
|
ef1ed54be7 | ||
|
|
e3a3cf5ff6 | ||
|
|
4f4ad71d09 | ||
|
|
3b32e76f65 | ||
|
|
056b792519 | ||
|
|
de98442b3c | ||
|
|
8bf24877bf | ||
|
|
ad546bfb6c | ||
|
|
bac929d894 | ||
|
|
ab1c043931 | ||
|
|
5afb09a715 | ||
|
|
df79dcf694 | ||
|
|
33a60420a4 | ||
|
|
c7dba6d5de | ||
|
|
ed596a7403 | ||
|
|
7f28e6ada1 | ||
|
|
df10f96a65 | ||
|
|
02cb33cfcd | ||
|
|
13a96916d7 | ||
|
|
245d54e511 | ||
|
|
06e216aa22 | ||
|
|
a50acf3888 | ||
|
|
195d2ce8d0 | ||
|
|
9adcd7eaa7 |
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"]
|
||||||
165
.github/workflows/ci.yml
vendored
165
.github/workflows/ci.yml
vendored
@@ -6,17 +6,18 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 20
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
- run: npm run doc
|
- run: npm run doc
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: webiste
|
name: webiste
|
||||||
path: |
|
path: |
|
||||||
@@ -40,7 +41,7 @@ jobs:
|
|||||||
uses: jaywcjlove/changelog-generator@main
|
uses: jaywcjlove/changelog-generator@main
|
||||||
|
|
||||||
- name: Deploy
|
- name: Deploy
|
||||||
uses: peaceiris/actions-gh-pages@v3
|
uses: peaceiris/actions-gh-pages@v4
|
||||||
with:
|
with:
|
||||||
commit_message: ${{ github.event.head_commit.message }} ${{steps.tag_version.outputs.tag}}
|
commit_message: ${{ github.event.head_commit.message }} ${{steps.tag_version.outputs.tag}}
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -66,8 +67,8 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [build]
|
needs: [build]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: webiste
|
name: webiste
|
||||||
path: website/build
|
path: website/build
|
||||||
@@ -77,54 +78,62 @@ jobs:
|
|||||||
- run: echo "outputs.create_tag_versionNumber - ${{ needs.build.outputs.create_tag_versionNumber }}"
|
- run: echo "outputs.create_tag_versionNumber - ${{ needs.build.outputs.create_tag_versionNumber }}"
|
||||||
- run: echo "outputs.tag - ${{ needs.build.outputs.tag }}"
|
- run: echo "outputs.tag - ${{ needs.build.outputs.tag }}"
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
# Create Docker Image
|
# Create Docker Image
|
||||||
- name: Docker login
|
- name: Docker login
|
||||||
run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}
|
run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Build wxmp image
|
# - name: Build wxmp image
|
||||||
|
# working-directory: website
|
||||||
|
# run: docker image build -t wxmp .
|
||||||
|
|
||||||
|
- name: Build and push multi-platform image
|
||||||
working-directory: website
|
working-directory: website
|
||||||
run: docker image build -t wxmp .
|
|
||||||
|
|
||||||
- name: Tags & Push image (latest)
|
|
||||||
run: |
|
run: |
|
||||||
echo "outputs.tag - ${{ needs.build.outputs.version }}"
|
docker buildx build \
|
||||||
docker tag wxmp ${{ secrets.DOCKER_USER }}/wxmp:latest
|
--platform linux/amd64,linux/arm64 \
|
||||||
docker push ${{ secrets.DOCKER_USER }}/wxmp:latest
|
-t ${{ secrets.DOCKER_USER }}/wxmp:latest \
|
||||||
|
--push .
|
||||||
|
|
||||||
|
|
||||||
- name: Tags & Push image
|
- name: Build and push multi-platform image (with tag)
|
||||||
if: needs.build.outputs.successful
|
if: needs.build.outputs.successful
|
||||||
run: |
|
|
||||||
echo "outputs.tag - ${{ needs.build.outputs.version }}"
|
|
||||||
docker tag wxmp ${{ secrets.DOCKER_USER }}/wxmp:${{needs.build.outputs.version}}
|
|
||||||
docker push ${{ secrets.DOCKER_USER }}/wxmp:${{needs.build.outputs.version}}
|
|
||||||
|
|
||||||
# Create Docker Image in GitHub
|
|
||||||
- name: Login to GitHub registry
|
|
||||||
run: echo ${{ github.token }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
|
|
||||||
|
|
||||||
- name: Build docker image
|
|
||||||
working-directory: website
|
working-directory: website
|
||||||
run: docker build -t ghcr.io/jaywcjlove/wxmp:latest .
|
|
||||||
|
|
||||||
- name: Publish to GitHub registry
|
|
||||||
run: docker push ghcr.io/jaywcjlove/wxmp:latest
|
|
||||||
|
|
||||||
- name: Tag docker image (beta) and publish to GitHub registry
|
|
||||||
if: needs.build.outputs.successful
|
|
||||||
run: |
|
run: |
|
||||||
echo "version: v${{ needs.build.outputs.version }}"
|
docker buildx build \
|
||||||
docker tag ghcr.io/jaywcjlove/wxmp:latest ghcr.io/jaywcjlove/wxmp:${{needs.build.outputs.version}}
|
--platform linux/amd64,linux/arm64 \
|
||||||
docker push ghcr.io/jaywcjlove/wxmp:${{needs.build.outputs.version}}
|
-t ${{ secrets.DOCKER_USER }}/wxmp:${{ needs.build.outputs.version }} \
|
||||||
|
--push .
|
||||||
|
|
||||||
|
# # Create Docker Image in GitHub
|
||||||
|
# - name: Login to GitHub registry
|
||||||
|
# run: echo ${{ github.token }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
|
||||||
|
|
||||||
|
# - name: Build docker image
|
||||||
|
# working-directory: website
|
||||||
|
# run: docker build -t ghcr.io/jaywcjlove/wxmp:latest .
|
||||||
|
|
||||||
|
# - name: Publish to GitHub registry
|
||||||
|
# run: docker push ghcr.io/jaywcjlove/wxmp:latest
|
||||||
|
|
||||||
|
# - name: Tag docker image (beta) and publish to GitHub registry
|
||||||
|
# if: needs.build.outputs.successful
|
||||||
|
# run: |
|
||||||
|
# echo "version: v${{ needs.build.outputs.version }}"
|
||||||
|
# docker tag ghcr.io/jaywcjlove/wxmp:latest ghcr.io/jaywcjlove/wxmp:${{needs.build.outputs.version}}
|
||||||
|
# docker push ghcr.io/jaywcjlove/wxmp:${{needs.build.outputs.version}}
|
||||||
|
|
||||||
build_windows:
|
build_windows:
|
||||||
needs: [build]
|
needs: [build]
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 20
|
||||||
|
|
||||||
- name: Install
|
- name: Install
|
||||||
run: npm install --build-from-source
|
run: npm install --build-from-source
|
||||||
@@ -133,7 +142,7 @@ jobs:
|
|||||||
- run: npm run build
|
- run: npm run build
|
||||||
# - run: npm run electron
|
# - run: npm run electron
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: webiste
|
name: webiste
|
||||||
path: website/build
|
path: website/build
|
||||||
@@ -143,8 +152,11 @@ jobs:
|
|||||||
run: npm run deps
|
run: npm run deps
|
||||||
|
|
||||||
- run: npm run build:app
|
- run: npm run build:app
|
||||||
|
- 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:
|
with:
|
||||||
name: wxmp-windows
|
name: wxmp-windows
|
||||||
path: |
|
path: |
|
||||||
@@ -155,16 +167,16 @@ jobs:
|
|||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 20
|
||||||
|
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run hoist
|
- run: npm run hoist
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: webiste
|
name: webiste
|
||||||
path: website/build
|
path: website/build
|
||||||
@@ -174,8 +186,11 @@ jobs:
|
|||||||
run: npm run deps
|
run: npm run deps
|
||||||
|
|
||||||
- run: npm run build:app
|
- run: npm run build:app
|
||||||
|
- 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:
|
with:
|
||||||
name: wxmp-macos
|
name: wxmp-macos
|
||||||
path: |
|
path: |
|
||||||
@@ -186,16 +201,16 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 45
|
timeout-minutes: 45
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 20
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run hoist
|
- run: npm run hoist
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
# - run: npm run electron
|
# - run: npm run electron
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: webiste
|
name: webiste
|
||||||
path: website/build
|
path: website/build
|
||||||
@@ -205,8 +220,11 @@ jobs:
|
|||||||
run: npm run deps
|
run: npm run deps
|
||||||
|
|
||||||
- run: npm run build:app
|
- run: npm run build:app
|
||||||
|
- 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:
|
with:
|
||||||
name: wxmp-linux
|
name: wxmp-linux
|
||||||
path: |
|
path: |
|
||||||
@@ -216,26 +234,26 @@ jobs:
|
|||||||
|
|
||||||
create_release:
|
create_release:
|
||||||
needs: [build, build_windows, build_macos, build_linux]
|
needs: [build, build_windows, build_macos, build_linux]
|
||||||
if: needs.build.outputs.successful
|
if: needs.build.outputs.successful == 'true'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 45
|
timeout-minutes: 45
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 20
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: wxmp-linux
|
name: wxmp-linux
|
||||||
path: dist/linux
|
path: dist/linux
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: wxmp-macos
|
name: wxmp-macos
|
||||||
path: dist/macos
|
path: dist/macos
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: wxmp-windows
|
name: wxmp-windows
|
||||||
path: dist/windows
|
path: dist/windows
|
||||||
@@ -246,7 +264,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate Changelog
|
- name: Generate Changelog
|
||||||
id: changelog
|
id: changelog
|
||||||
uses: jaywcjlove/changelog-generator@v1.5.7
|
uses: jaywcjlove/changelog-generator@main
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
filter-author: (jaywcjlove|小弟调调™|dependabot\[bot\]|Renovate Bot)
|
filter-author: (jaywcjlove|小弟调调™|dependabot\[bot\]|Renovate Bot)
|
||||||
@@ -254,34 +272,51 @@ jobs:
|
|||||||
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
uses: ncipollo/release-action@v1
|
uses: ncipollo/release-action@v1
|
||||||
if: needs.build.outputs.successful
|
if: needs.build.outputs.successful == 'true'
|
||||||
with:
|
with:
|
||||||
|
allowUpdates: true
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
name: ${{ steps.changelog.outputs.tag }}
|
name: ${{ steps.changelog.outputs.tag }}
|
||||||
tag: ${{ steps.changelog.outputs.tag }}
|
tag: ${{ steps.changelog.outputs.tag }}
|
||||||
|
artifacts: "dist/linux/*.rpm,dist/linux/*.deb,dist/macos/*.zip,dist/macos/*.dmg,dist/windows/*.exe"
|
||||||
body: |
|
body: |
|
||||||
Documentation ${{ steps.changelog.outputs.tag }}: https://raw.githack.com/jaywcjlove/wxmp/${{ steps.changelog.outputs.gh-pages-short-hash }}/index.html
|
Documentation ${{ steps.changelog.outputs.tag }}: https://raw.githack.com/jaywcjlove/wxmp/${{ steps.changelog.outputs.gh-pages-short-hash }}/index.html
|
||||||
Comparing Changes: ${{ steps.changelog.outputs.compareurl }}
|
Comparing Changes: ${{ steps.changelog.outputs.compareurl }}
|
||||||
|
|
||||||
${{ steps.changelog.outputs.changelog }}
|
${{ steps.changelog.outputs.changelog }}
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker pull wcjiang/wxmp:${{needs.build.outputs.create_tag_versionNumber}}
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --name wxmp --rm -d -p 9666:3000 wcjiang/wxmp:${{ needs.build.outputs.create_tag_versionNumber }}
|
||||||
|
# Or
|
||||||
|
docker run --name wxmp -itd -p 9666:3000 wcjiang/wxmp:${{ needs.build.outputs.create_tag_versionNumber }}
|
||||||
|
```
|
||||||
|
|
||||||
|
Visit the following URL in your browser
|
||||||
|
|
||||||
|
```bash
|
||||||
|
http://localhost:9666/
|
||||||
|
```
|
||||||
|
|
||||||
roll_back:
|
roll_back:
|
||||||
if: failure()
|
if: failure()
|
||||||
needs: [build, create_release]
|
needs: [build, create_release]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 4
|
timeout-minutes: 4
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.head_ref }}
|
ref: ${{ github.head_ref }}
|
||||||
|
|
||||||
- run: echo "outputs.version - ${{ needs.build.outputs.create_tag_version }}"
|
- run: echo "outputs.version - ${{ needs.build.outputs.create_tag_version }}"
|
||||||
|
|
||||||
- uses: dev-drprasad/delete-tag-and-release@v0.2.0
|
- uses: dev-drprasad/delete-tag-and-release@v1.1
|
||||||
if: needs.build.outputs.successful
|
if: needs.build.outputs.successful == 'true'
|
||||||
with:
|
with:
|
||||||
delete_release: true
|
delete_release: true
|
||||||
repo: jaywcjlove/wxmp
|
repo: jaywcjlove/wxmp
|
||||||
tag_name: '${{ needs.build.outputs.create_tag_version }}'
|
tag_name: '${{ needs.build.outputs.create_tag_version }}'
|
||||||
env:
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|||||||
52
README.md
52
README.md
@@ -1,12 +1,54 @@
|
|||||||
|
<div markdown="1">
|
||||||
|
<sup>使用<a href="https://wangchujiang.com/#/app" target="_blank">我的应用</a>也是一种<a href="https://wangchujiang.com/#/sponsor" target="_blank">支持</a>我的方式:</sup>
|
||||||
|
<br>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/Deskmark/6755948110" title="Deskmark for macOS"><img alt="Deskmark" height="52" width="52" src="https://wangchujiang.com/appicon/deskmark.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/Keyzer/6500434773" title="Keyzer for macOS"><img alt="Keyzer" height="52" width="52" src="https://wangchujiang.com/appicon/keyzer.png"></a>
|
||||||
|
<a target="_blank" href="https://github.com/jaywcjlove/vidwall-hub" title="Vidwall Hub for macOS"><img alt="Vidwall Hub" height="52" width="52" src="https://wangchujiang.com/appicon/vidwall-hub.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/VidCrop/6752624705" title="VidCrop for macOS"><img alt="VidCrop" height="52" width="52" src="https://wangchujiang.com/appicon/vidcrop.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/Vidwall/6747587746" title="Vidwall for macOS"><img alt="Vidwall" height="52" width="52" src="https://wangchujiang.com/appicon/vidwall.png"></a>
|
||||||
|
<a target="_blank" href="https://wangchujiang.com/mousio-hint/" title="Mousio Hint for macOS"><img alt="Mousio Hint" height="52" width="52" src="https://wangchujiang.com/appicon/mousio-hint.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6746747327" title="Mousio for macOS"><img alt="Mousio" height="52" width="52" src="https://wangchujiang.com/appicon/mousio.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6745227444" title="Musicer for macOS"><img alt="Musicer" height="52" width="52" src="https://wangchujiang.com/appicon/musicer.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6743841447" title="Audioer for macOS"><img alt="Audioer" height="52" width="52" src="https://wangchujiang.com/appicon/audioer.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6744690194" title="FileSentinel for macOS"><img alt="FileSentinel" height="52" width="52" src="https://wangchujiang.com/appicon/file-sentinel.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6743495172" title="FocusCursor for macOS"><img alt="FocusCursor" height="52" width="52" src="https://wangchujiang.com/appicon/focus-cursor.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6742680573" title="Videoer for macOS"><img alt="Videoer" height="52" width="52" src="https://wangchujiang.com/appicon/videoer.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6740425504" title="KeyClicker for macOS"><img alt="KeyClicker" height="52" width="52" src="https://wangchujiang.com/appicon/key-clicker.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6739052447" title="DayBar for macOS"><img alt="DayBar" height="52" width="52" src="https://wangchujiang.com/appicon/daybar.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6739444407" title="Iconed for macOS"><img alt="Iconed" height="52" width="52" src="https://wangchujiang.com/appicon/iconed.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6737160756" title="Mousio for macOS"><img alt="Mousio" height="52" width="52" src="https://wangchujiang.com/appicon/rightmenu-master.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6723903021" title="Paste Quick for macOS"><img alt="Quick RSS" height="52" width="52" src="https://wangchujiang.com/appicon/paste-quick.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6670696072" title="Quick RSS for macOS/iOS"><img alt="Quick RSS" height="52" width="52" src="https://wangchujiang.com/appicon/quick-rss.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6670167443" title="Web Serve for macOS"><img alt="Web Serve" height="52" width="52" src="https://wangchujiang.com/appicon/web-serve.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6503953628" title="Copybook Generator for macOS/iOS"><img alt="Copybook Generator" height="52" width="52" src="https://wangchujiang.com/appicon/copybook-generator.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6471227008" title="DevTutor for macOS/iOS"><img alt="DevTutor for SwiftUI" height="52" width="52" src="https://wangchujiang.com/appicon/devtutor.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6479819388" title="RegexMate for macOS/iOS"><img alt="RegexMate" height="52" width="52" src="https://wangchujiang.com/appicon/regex-mate.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6479194014" title="Time Passage for macOS/iOS"><img alt="Time Passage" height="52" width="52" src="https://wangchujiang.com/appicon/time-passage.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6478772538" title="IconizeFolder for macOS"><img alt="Iconize Folder" height="52" width="52" src="https://wangchujiang.com/appicon/iconize-folder.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6478511402" title="Textsound Saver for macOS/iOS"><img alt="Textsound Saver" height="52" width="52" src="https://wangchujiang.com/appicon/textsound-saver.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6476924627" title="Create Custom Symbols for macOS"><img alt="Create Custom Symbols" height="52" width="52" src="https://wangchujiang.com/appicon/create-custom-symbols.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6476452351" title="DevHub for macOS"><img alt="DevHub" height="52" width="52" src="https://wangchujiang.com/appicon/devhub.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6476400184" title="Resume Revise for macOS"><img alt="Resume Revise" height="52" width="52" src="https://wangchujiang.com/appicon/resume-revise.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6472593276" title="Palette Genius for macOS"><img alt="Palette Genius" height="52" width="52" src="https://wangchujiang.com/appicon/palette-genius.png"></a>
|
||||||
|
<a target="_blank" href="https://apps.apple.com/app/6470879005" title="Symbol Scribe for macOS"><img alt="Symbol Scribe" height="52" width="52" src="https://wangchujiang.com/appicon/symbol-scribe.png"></a>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<h1 align="center">微信公众号 Markdown 编辑器</h1>
|
<h1 align="center">微信公众号 Markdown 编辑器</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
[](https://jaywcjlove.github.io/#/sponsor)
|
||||||
|
[](https://github.com/jaywcjlove/wxmp/actions/workflows/ci.yml)
|
||||||
|
[](https://hub.docker.com/r/wcjiang/wxmp)
|
||||||
|
[](https://hub.docker.com/r/wcjiang/wxmp)
|
||||||
|
[](https://hub.docker.com/r/wcjiang/wxmp)
|
||||||
|
|
||||||
[](https://jaywcjlove.github.io/wxmp)
|
[](https://jaywcjlove.github.io/wxmp)
|
||||||
|
|
||||||
微信公众号文章 Markdown 在线编辑器,使用 markdown 语法创建一篇简介美观大方的微信公众号图文。由于发版本麻烦,和一些功能无法扩展停滞开发了,未来不再开发 Chrome 的插件(暂存在 chrome 分支),通过 web 版本定制更丰富的功能。
|
微信公众号文章 Markdown 在线编辑器,使用 markdown 语法创建一篇简介美观大方的微信公众号图文。由于发版本麻烦,和一些功能无法扩展停滞开发了,未来不再开发 Chrome 的插件(暂存在 chrome 分支),通过 web 版本定制更丰富的功能。
|
||||||
|
|
||||||
[](https://jaywcjlove.github.io/wxmp)
|
[](https://github.com/jaywcjlove/wxmp/releases)
|
||||||
|
|
||||||
## 功能特性
|
## 功能特性
|
||||||
|
|
||||||
@@ -23,6 +65,14 @@
|
|||||||
- [x] CI 自动生成 Electron 桌面应用。
|
- [x] CI 自动生成 Electron 桌面应用。
|
||||||
- [ ] ~~支持全局字号大小选择。~~
|
- [ ] ~~支持全局字号大小选择。~~
|
||||||
|
|
||||||
|
### 数学公式
|
||||||
|
|
||||||
|
$\\c = \pm\sqrt{a^2 + b^2}$ 和 $C_L$ 数学公式行内显示
|
||||||
|
|
||||||
|
```math
|
||||||
|
L = \frac{1}{2} \rho v^2 S C_L
|
||||||
|
```
|
||||||
|
|
||||||
### 支持代码块样式
|
### 支持代码块样式
|
||||||
|
|
||||||
下面是 `jsx` 代码块展示示例,并高亮代码,用于 web 应用中效果展示。
|
下面是 `jsx` 代码块展示示例,并高亮代码,用于 web 应用中效果展示。
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "wxmp",
|
"name": "wxmp",
|
||||||
"description": "微信公众号 Markdown 编辑器",
|
"description": "微信公众号 Markdown 编辑器",
|
||||||
"homepage": "https://github.com/jaywcjlove/wxmp.git",
|
"homepage": "https://github.com/jaywcjlove/wxmp.git",
|
||||||
"version": "2.3.0",
|
"version": "2.4.1",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"author": "Kenny Wong <398188662@qq.com>",
|
"author": "Kenny Wong <398188662@qq.com>",
|
||||||
"private": true,
|
"private": true,
|
||||||
@@ -18,13 +18,13 @@
|
|||||||
"build": "npm run copy && cross-env NODE_ENV=production electron-builder build --publish=never --config config.json"
|
"build": "npm run copy && cross-env NODE_ENV=production electron-builder build --publish=never --config config.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@wcj/wxmp-main": "2.3.0"
|
"@wcj/wxmp-main": "2.4.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@wcj/wxmp-preload": "2.3.0",
|
"@wcj/wxmp-preload": "2.4.1",
|
||||||
"cpy-cli": "4.2.0",
|
"cpy-cli": "^5.0.0",
|
||||||
"electron": "19.0.5",
|
"electron": "20.1.3",
|
||||||
"electron-builder": "23.3.3",
|
"electron-builder": "23.3.3",
|
||||||
"website": "2.3.0"
|
"website": "2.4.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"name": "@wcj/wxmp-main",
|
"name": "@wcj/wxmp-main",
|
||||||
"version": "2.3.0",
|
"version": "2.4.1",
|
||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsbb build --disable-babel --file-names src/index.ts",
|
"build": "tsbb build",
|
||||||
"watch": "tsbb watch --disable-babel --file-names src/index.ts"
|
"watch": "tsbb watch"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"lib"
|
"lib"
|
||||||
],
|
],
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "19.0.5"
|
"electron": "20.1.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"name": "@wcj/wxmp-preload",
|
"name": "@wcj/wxmp-preload",
|
||||||
"version": "2.3.0",
|
"version": "2.4.1",
|
||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsbb build --disable-babel --file-names src/index.ts",
|
"build": "tsbb build",
|
||||||
"watch": "tsbb watch --disable-babel --file-names src/index.ts"
|
"watch": "tsbb watch"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"lib"
|
"lib"
|
||||||
],
|
],
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "19.0.5"
|
"electron": "20.1.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"version": "2.3.0",
|
"version": "2.4.1",
|
||||||
"packages": ["website", "electron/*"]
|
"packages": ["website", "electron/*"]
|
||||||
}
|
}
|
||||||
|
|||||||
11
package.json
11
package.json
@@ -9,18 +9,19 @@
|
|||||||
"version": "lerna version --exact --force-publish --no-push --no-git-tag-version",
|
"version": "lerna version --exact --force-publish --no-push --no-git-tag-version",
|
||||||
"prepare": "husky install",
|
"prepare": "husky install",
|
||||||
"prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
|
"prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
|
||||||
"pretty-quick": "pretty-quick --staged",
|
|
||||||
"hoist": "lerna bootstrap --hoist",
|
"hoist": "lerna bootstrap --hoist",
|
||||||
"clean": "lerna clean --yes"
|
"clean": "lerna clean --yes"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@lerna/legacy-package-management": "^8.0.0",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"husky": "^8.0.1",
|
"husky": "^8.0.1",
|
||||||
"lerna": "5.5.0",
|
"lerna": "^8.0.0",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^3.0.2",
|
||||||
"pretty-quick": "~3.1.3",
|
"react": "~18.2.0",
|
||||||
"tsbb": "^3.7.5"
|
"react-dom": "~18.2.0",
|
||||||
|
"tsbb": "~4.4.0"
|
||||||
},
|
},
|
||||||
"workspaces": {
|
"workspaces": {
|
||||||
"packages": [
|
"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;
|
conf.module!.exprContextCritical = false;
|
||||||
if (env === 'production') {
|
if (env === 'production') {
|
||||||
conf.output = { ...conf.output, publicPath: './' };
|
conf.output = { ...conf.output, publicPath: './' };
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "website",
|
"name": "website",
|
||||||
"version": "2.3.0",
|
"version": "2.4.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "kkt start",
|
"start": "kkt start",
|
||||||
@@ -25,33 +25,33 @@
|
|||||||
"@uiw/codemirror-theme-xcode": "^4.11.6",
|
"@uiw/codemirror-theme-xcode": "^4.11.6",
|
||||||
"@uiw/react-back-to-top": "^1.2.0",
|
"@uiw/react-back-to-top": "^1.2.0",
|
||||||
"@uiw/react-github-corners": "^1.5.15",
|
"@uiw/react-github-corners": "^1.5.15",
|
||||||
"@uiw/react-markdown-editor": "^5.7.0",
|
"@uiw/react-markdown-editor": "^6.0.0",
|
||||||
"@wcj/dark-mode": "^1.0.15",
|
"@wcj/dark-mode": "^1.0.15",
|
||||||
"css-tree": "^2.2.1",
|
"css-tree": "^2.2.1",
|
||||||
"react": "^18.2.0",
|
"react": "~18.2.0",
|
||||||
"react-code-preview-layout": "^2.0.4",
|
"react-dom": "~18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
|
||||||
"react-hot-toast": "^2.3.0",
|
"react-hot-toast": "^2.3.0",
|
||||||
"react-router-dom": "^6.3.0",
|
"react-router-dom": "^6.3.0",
|
||||||
"rehype-attr": "^2.0.8",
|
"rehype-attr": "^3.0.0",
|
||||||
"rehype-ignore": "^1.0.1",
|
"rehype-ignore": "^2.0.0",
|
||||||
"rehype-prism-plus": "^1.5.0",
|
"rehype-katex": "^7.0.1",
|
||||||
"rehype-raw": "^6.1.1",
|
"rehype-prism-plus": "^2.0.0",
|
||||||
"rehype-stringify": "^9.0.3",
|
"rehype-raw": "^7.0.0",
|
||||||
"remark-gfm": "^3.0.1",
|
"rehype-stringify": "^10.0.0",
|
||||||
"remark-parse": "^10.0.1",
|
"remark-gfm": "^4.0.0",
|
||||||
"remark-rehype": "^10.1.0",
|
"remark-math": "^6.0.0",
|
||||||
"styled-components": "^5.3.5",
|
"remark-parse": "^11.0.0",
|
||||||
"unified": "^10.1.2"
|
"remark-rehype": "^11.0.0",
|
||||||
|
"styled-components": "~6.1.0",
|
||||||
|
"unified": "^11.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@kkt/less-modules": "^7.2.0",
|
"@kkt/less-modules": "^7.2.0",
|
||||||
"@kkt/raw-modules": "^7.2.0",
|
"@kkt/raw-modules": "^7.2.0",
|
||||||
"@kkt/scope-plugin-options": "^7.2.0",
|
"@kkt/scope-plugin-options": "^7.2.0",
|
||||||
"@types/css-tree": "^1.0.7",
|
"@types/css-tree": "^2.3.1",
|
||||||
"@types/react": "^18.0.17",
|
"@types/react": "^18.0.17",
|
||||||
"@types/react-dom": "^18.0.6",
|
"@types/react-dom": "^18.0.6",
|
||||||
"@types/styled-components": "^5.1.25",
|
|
||||||
"kkt": "^7.2.0",
|
"kkt": "^7.2.0",
|
||||||
"markdown-react-code-preview-loader": "^2.1.2"
|
"markdown-react-code-preview-loader": "^2.1.2"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -13,16 +13,22 @@ const Button = styled.button`
|
|||||||
const CopyView: React.FC<{ command: ICommand; editorProps: IMarkdownEditor & ToolBarProps }> = (props) => {
|
const CopyView: React.FC<{ command: ICommand; editorProps: IMarkdownEditor & ToolBarProps }> = (props) => {
|
||||||
const { editorProps } = props;
|
const { editorProps } = props;
|
||||||
const handleClick = () => {
|
const handleClick = () => {
|
||||||
const dom = editorProps.preview.current;
|
const dom: HTMLDivElement | null = editorProps.preview.current;
|
||||||
dom?.focus();
|
if (!dom) {
|
||||||
window.getSelection()?.removeAllRanges();
|
toast.error(<div>dom is null</div>);
|
||||||
let range = document.createRange();
|
return;
|
||||||
range.setStartBefore(dom?.firstChild!);
|
}
|
||||||
range.setEndAfter(dom?.lastChild!);
|
dom.focus();
|
||||||
window.getSelection()?.addRange(range);
|
const htmlContent = dom.innerHTML;
|
||||||
document.execCommand(`copy`);
|
navigator.clipboard
|
||||||
window.getSelection()?.removeAllRanges();
|
.writeText(htmlContent)
|
||||||
toast.success(<div>复制成功!去公众号编辑器复制吧!</div>);
|
.then(() => {
|
||||||
|
toast.success(<div>复制成功!去公众号编辑器粘贴吧!</div>);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
toast.error(<div>{JSON.stringify(err)}</div>);
|
||||||
|
console.error('Failed to copy: ', err);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<Button type="button" onClick={handleClick}>
|
<Button type="button" onClick={handleClick}>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import styled from 'styled-components';
|
|||||||
|
|
||||||
const Link = styled(NavLink)`
|
const Link = styled(NavLink)`
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
line-height: 0.8rem;
|
line-height: 0.7rem;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
padding: 0.18rem 0.3rem;
|
padding: 0.18rem 0.3rem;
|
||||||
&:hover {
|
&:hover {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ const Select = styled.select`
|
|||||||
padding: 0 0.2rem 0 0.2rem;
|
padding: 0 0.2rem 0 0.2rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
font-size: 0.8rem;
|
font-size: 0.7rem;
|
||||||
outline: none;
|
outline: none;
|
||||||
height: 1.15rem;
|
height: 1.15rem;
|
||||||
cursor: inherit;
|
cursor: inherit;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import MarkdownEditor, { getCommands } from '@uiw/react-markdown-editor';
|
import MarkdownEditor, { getCommands } from '@uiw/react-markdown-editor';
|
||||||
import { useContext } from 'react';
|
import { useContext } from 'react';
|
||||||
|
// @ts-ignore
|
||||||
import { EditorView } from '@codemirror/view';
|
import { EditorView } from '@codemirror/view';
|
||||||
import { Preview } from './Preview';
|
import { Preview } from './Preview';
|
||||||
import { copy } from '../../commands/copy';
|
import { copy } from '../../commands/copy';
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ a {
|
|||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
font-size: 16px;
|
font-size: 18px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ h4 {
|
|||||||
|
|
||||||
p {
|
p {
|
||||||
color: initial;
|
color: initial;
|
||||||
font-size: 14px;
|
font-size: 16px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ h1 {
|
|||||||
line-height: 1.75;
|
line-height: 1.75;
|
||||||
font-family: -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',
|
font-family: -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',
|
||||||
'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;
|
'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;
|
||||||
font-size: 16px;
|
font-size: 18px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 2em auto 1em;
|
margin: 2em auto 1em;
|
||||||
padding: 0 1em;
|
padding: 0 1em;
|
||||||
@@ -63,7 +63,7 @@ li {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: 14px;
|
font-size: 16px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
padding: 0.5em 0 !important;
|
padding: 0.5em 0 !important;
|
||||||
margin-bottom: 0 !important;
|
margin-bottom: 0 !important;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ h1 {
|
|||||||
line-height: 1.75;
|
line-height: 1.75;
|
||||||
font-family: -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',
|
font-family: -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',
|
||||||
'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;
|
'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;
|
||||||
font-size: 16px;
|
font-size: 18px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 2em auto 1em;
|
margin: 2em auto 1em;
|
||||||
padding: 0 1em;
|
padding: 0 1em;
|
||||||
@@ -63,7 +63,7 @@ li {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: 14px;
|
font-size: 16px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
padding: 0.5em 0 !important;
|
padding: 0.5em 0 !important;
|
||||||
margin-bottom: 0 !important;
|
margin-bottom: 0 !important;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ h1 {
|
|||||||
line-height: 1.15;
|
line-height: 1.15;
|
||||||
font-family: -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',
|
font-family: -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',
|
||||||
'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;
|
'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;
|
||||||
font-size: 16px;
|
font-size: 18px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 2em auto 1em;
|
margin: 2em auto 1em;
|
||||||
padding: 0 1em 0.3em 1em;
|
padding: 0 1em 0.3em 1em;
|
||||||
@@ -37,7 +37,7 @@ h3 {
|
|||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
font-family: -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',
|
font-family: -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',
|
||||||
'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;
|
'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;
|
||||||
font-size: 1.1em;
|
font-size: 14px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 2em 8px 0.75em 0;
|
margin: 2em 8px 0.75em 0;
|
||||||
padding-left: 8px;
|
padding-left: 8px;
|
||||||
@@ -59,7 +59,7 @@ li {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: 14px;
|
font-size: 16px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
padding: 0.5em 0 !important;
|
padding: 0.5em 0 !important;
|
||||||
margin-bottom: 0 !important;
|
margin-bottom: 0 !important;
|
||||||
|
|||||||
@@ -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 (
|
if (
|
||||||
parent?.type === 'element' &&
|
parent?.type === 'element' &&
|
||||||
/(p|a)/.test(parent.tagName) &&
|
/(p|a)/.test(parent.tagName) &&
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ import { Element } from 'hast';
|
|||||||
import remarkParse from 'remark-parse';
|
import remarkParse from 'remark-parse';
|
||||||
import remarkGfm from 'remark-gfm';
|
import remarkGfm from 'remark-gfm';
|
||||||
import remarkRehype from 'remark-rehype';
|
import remarkRehype from 'remark-rehype';
|
||||||
|
import remarkMath from 'remark-math';
|
||||||
import rehypePrism from 'rehype-prism-plus';
|
import rehypePrism from 'rehype-prism-plus';
|
||||||
|
import rehypeKatex from 'rehype-katex';
|
||||||
|
import 'katex/dist/katex.min.css'; // Ensure KaTeX styles are included
|
||||||
import rehypeRaw from 'rehype-raw';
|
import rehypeRaw from 'rehype-raw';
|
||||||
import rehypeAttrs from 'rehype-attr';
|
import rehypeAttrs from 'rehype-attr';
|
||||||
import rehypeIgnore from 'rehype-ignore';
|
import rehypeIgnore from 'rehype-ignore';
|
||||||
@@ -26,19 +29,23 @@ export function markdownToHTML(md: string, css: string, opts: MarkdownToHTMLOpti
|
|||||||
parseCustomProperty: false,
|
parseCustomProperty: false,
|
||||||
positions: false,
|
positions: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const data = cssdata(ast.children.head, {}, { color: opts.preColor, theme: opts.previewTheme });
|
const data = cssdata(ast.children.head, {}, { color: opts.preColor, theme: opts.previewTheme });
|
||||||
const processor = unified()
|
const processor = unified()
|
||||||
.use(remarkParse)
|
.use(remarkParse)
|
||||||
.use(remarkGfm)
|
.use(remarkGfm)
|
||||||
|
.use(remarkMath)
|
||||||
.use(remarkRehype, { allowDangerousHtml: true })
|
.use(remarkRehype, { allowDangerousHtml: true })
|
||||||
.use(rehypePrism)
|
|
||||||
.use(rehypeRaw)
|
.use(rehypeRaw)
|
||||||
|
.use(rehypeKatex)
|
||||||
|
.use(rehypePrism, {
|
||||||
|
ignoreMissing: true,
|
||||||
|
})
|
||||||
.use(rehypeIgnore, {})
|
.use(rehypeIgnore, {})
|
||||||
.use(rehypeAttrs, { properties: 'attr' })
|
.use(rehypeAttrs, { properties: 'attr' })
|
||||||
.use(rehypeRewrite, {
|
.use(rehypeRewrite, {
|
||||||
rewrite: (node, _index, parent) => {
|
rewrite: (node, _index, parent) => {
|
||||||
// @ts-ignore
|
|
||||||
if (
|
if (
|
||||||
node?.type === 'element' &&
|
node?.type === 'element' &&
|
||||||
node?.tagName === 'code' &&
|
node?.tagName === 'code' &&
|
||||||
|
|||||||
Reference in New Issue
Block a user