first commit
This commit is contained in:
commit
54d132170f
|
|
@ -0,0 +1,13 @@
|
||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: ['hkgnp']
|
||||||
|
patreon: # Replace with a single Patreon username
|
||||||
|
open_collective: # Replace with a single Open Collective username
|
||||||
|
ko_fi: # Replace with a single Ko-fi username
|
||||||
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
|
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||||
|
liberapay: # Replace with a single Liberapay username
|
||||||
|
issuehunt: # Replace with a single IssueHunt username
|
||||||
|
otechie: # Replace with a single Otechie username
|
||||||
|
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
||||||
|
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
name: Build plugin
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
# Sequence of patterns matched against refs/tags
|
||||||
|
tags:
|
||||||
|
- '*' # Push events to matching any tag format, i.e. 1.0, 20.15.10
|
||||||
|
|
||||||
|
env:
|
||||||
|
PLUGIN_NAME: ${{ github.event.repository.name }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Use Node.js
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: '16.x' # You might need to adjust this value to your own version
|
||||||
|
- name: Build
|
||||||
|
id: build
|
||||||
|
run: |
|
||||||
|
npm i && npm run build
|
||||||
|
mkdir ${{ env.PLUGIN_NAME }}
|
||||||
|
cp README.md package.json icon.svg ${{ env.PLUGIN_NAME }}
|
||||||
|
mv dist ${{ env.PLUGIN_NAME }}
|
||||||
|
zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }}
|
||||||
|
ls
|
||||||
|
echo "::set-output name=tag_name::$(git tag --sort version:refname | tail -n 1)"
|
||||||
|
- name: Create Release
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
id: create_release
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
VERSION: ${{ github.ref }}
|
||||||
|
with:
|
||||||
|
allowUpdates: true
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
|
|
||||||
|
- name: Upload zip file
|
||||||
|
id: upload_zip
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
|
asset_path: ./${{ env.PLUGIN_NAME }}.zip
|
||||||
|
asset_name: ${{ env.PLUGIN_NAME }}-${{ steps.build.outputs.tag_name }}.zip
|
||||||
|
asset_content_type: application/zip
|
||||||
|
|
||||||
|
- name: Upload package.json
|
||||||
|
id: upload_metadata
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
|
asset_path: ./package.json
|
||||||
|
asset_name: package.json
|
||||||
|
asset_content_type: application/json
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
.DS_Store
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
.pnpm-debug.log*
|
||||||
|
|
||||||
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# Snowpack dependency directory (https://snowpack.dev/)
|
||||||
|
web_modules/
|
||||||
|
|
||||||
|
# TypeScript cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Microbundle cache
|
||||||
|
.rpt2_cache/
|
||||||
|
.rts2_cache_cjs/
|
||||||
|
.rts2_cache_es/
|
||||||
|
.rts2_cache_umd/
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
||||||
|
.env.test
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
.cache
|
||||||
|
.parcel-cache
|
||||||
|
|
||||||
|
# Next.js build output
|
||||||
|
.next
|
||||||
|
out
|
||||||
|
|
||||||
|
# Nuxt.js build / generate output
|
||||||
|
.nuxt
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Gatsby files
|
||||||
|
.cache/
|
||||||
|
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||||
|
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||||
|
# public
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless/
|
||||||
|
|
||||||
|
# FuseBox cache
|
||||||
|
.fusebox/
|
||||||
|
|
||||||
|
# DynamoDB Local files
|
||||||
|
.dynamodb/
|
||||||
|
|
||||||
|
# TernJS port file
|
||||||
|
.tern-port
|
||||||
|
|
||||||
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
|
.vscode-test
|
||||||
|
|
||||||
|
# yarn v2
|
||||||
|
.yarn/cache
|
||||||
|
.yarn/unplugged
|
||||||
|
.yarn/build-state.yml
|
||||||
|
.yarn/install-state.gz
|
||||||
|
.pnp.*
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 hkgnp
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
# Overview
|
||||||
|
|
||||||
|
This simple plugin allows you to quickly insert mermaid diagrams in your notes.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Installation
|
||||||
|
|
||||||
|
If not available in the marketplace, download the latest release and manually load it into Logseq after unzipping.
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
|
||||||
|
[mermaid.ink](https://github.com/jihchi/mermaid.ink)
|
||||||
|
|
||||||
|
[mermaid-js-converter](https://github.com/superj80820/mermaid-js-converter) for the idea.
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-hierarchy" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="gray" fill="gray" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="5" r="2" />
|
||||||
|
<circle cx="5" cy="19" r="2" />
|
||||||
|
<circle cx="19" cy="19" r="2" />
|
||||||
|
<path d="M6.5 17.5l5.5 -4.5l5.5 4.5" />
|
||||||
|
<line x1="12" y1="7" x2="12" y2="13" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 471 B |
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"logseq": {
|
||||||
|
"id": "logseq-mermaid-plugin",
|
||||||
|
"title": "logseq-mermaid-plugin",
|
||||||
|
"icon": "./icon.svg"
|
||||||
|
},
|
||||||
|
"name": "logseq-mermaid-plugin",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "dist/index.html",
|
||||||
|
"targets": {
|
||||||
|
"main": false
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"build": "parcel build --no-source-maps src/index.html --public-url ./"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "hkgnp",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@logseq/libs": "^0.0.1-alpha.34",
|
||||||
|
"mermaid": "^8.14.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"parcel": "^2.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
|
|
@ -0,0 +1,12 @@
|
||||||
|
export const convert = (data: string) => {
|
||||||
|
const matchData = data.match(/```mermaid(.|\n)*?```/gm);
|
||||||
|
|
||||||
|
console.log(matchData[0]);
|
||||||
|
|
||||||
|
let toDecode = matchData[0];
|
||||||
|
toDecode = toDecode.replace('```mermaid', '').replace('```', '');
|
||||||
|
toDecode = toDecode.replace('\n', ' ');
|
||||||
|
|
||||||
|
const jsonString = btoa(toDecode);
|
||||||
|
return `<img src="https://mermaid.ink/img/${jsonString}" />`;
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Document</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script src="index.ts" type="module"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
import '@logseq/libs';
|
||||||
|
import { convert } from './convert';
|
||||||
|
|
||||||
|
const uniqueIdentifier = () =>
|
||||||
|
Math.random()
|
||||||
|
.toString(36)
|
||||||
|
.replace(/[^a-z]+/g, '');
|
||||||
|
|
||||||
|
const main = () => {
|
||||||
|
console.log('logseq-mermaid-plugin loaded');
|
||||||
|
|
||||||
|
logseq.Editor.registerSlashCommand('Draw mermaid diagram', async () => {
|
||||||
|
await logseq.Editor.insertAtEditingCursor(
|
||||||
|
`{{renderer :mermaid_${uniqueIdentifier()}}}`
|
||||||
|
);
|
||||||
|
|
||||||
|
const currBlock = await logseq.Editor.getCurrentBlock();
|
||||||
|
await logseq.Editor.insertBlock(
|
||||||
|
currBlock.uuid,
|
||||||
|
`\`\`\`mermaid
|
||||||
|
\`\`\``,
|
||||||
|
{
|
||||||
|
sibling: false,
|
||||||
|
before: false,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
logseq.App.onMacroRendererSlotted(async ({ slot, payload }) => {
|
||||||
|
const [type] = payload.arguments;
|
||||||
|
const id = type.split('_')[1]?.trim();
|
||||||
|
const mermaidId = `mermaid_${id}`;
|
||||||
|
|
||||||
|
if (!type.startsWith(':mermaid_')) return;
|
||||||
|
|
||||||
|
const dataBlock = await logseq.Editor.getBlock(payload.uuid, {
|
||||||
|
includeChildren: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const mermaidUUID = dataBlock.children[0]['uuid'];
|
||||||
|
|
||||||
|
logseq.provideModel({
|
||||||
|
async show() {
|
||||||
|
await logseq.Editor.editBlock(payload.uuid);
|
||||||
|
await logseq.Editor.exitEditingMode();
|
||||||
|
const mermaidBlock = await logseq.Editor.getBlock(mermaidUUID);
|
||||||
|
await logseq.Editor.updateBlock(
|
||||||
|
payload.uuid,
|
||||||
|
`${convert(mermaidBlock.content)}
|
||||||
|
{{renderer ${type}}}`
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
logseq.provideStyle(`
|
||||||
|
.renderBtn {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 3px;
|
||||||
|
font-size: 80%;
|
||||||
|
background-color: white;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.renderBtn:hover {
|
||||||
|
background-color: black;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
|
||||||
|
logseq.provideUI({
|
||||||
|
key: `${mermaidId}`,
|
||||||
|
slot,
|
||||||
|
reset: true,
|
||||||
|
template: `<button data-on-click="show" class="renderBtn">Render</button>`,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
logseq.ready(main).catch(console.error);
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
declare global {
|
||||||
|
interface Window {
|
||||||
|
HTMLDivElement: any;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const renderMermaid = (content) => {};
|
||||||
Loading…
Reference in New Issue