@wonseok-han/confluence-sync 1.8.0 โ 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -410
- package/dist/cli/args.js +1 -1
- package/dist/cli/help.js +214 -115
- package/dist/cli/init.js +44 -5
- package/dist/cli/main.js +42 -11
- package/dist/cli/status.js +83 -0
- package/dist/confluence/client.js +121 -57
- package/dist/confluence/config.js +12 -8
- package/dist/confluence/env-file.js +23 -0
- package/dist/confluence/links.js +18 -0
- package/dist/conversion/asset-paths.js +5 -0
- package/dist/conversion/attachments.js +29 -7
- package/dist/conversion/convert.js +10 -22
- package/dist/conversion/footnotes.js +114 -11
- package/dist/conversion/markdown.js +26 -0
- package/dist/conversion/pdf-pages.js +10 -8
- package/dist/documents/anchors.js +9 -0
- package/dist/documents/callout-roundtrip.js +75 -0
- package/dist/documents/callouts.js +74 -0
- package/dist/documents/catalog.js +2 -2
- package/dist/documents/footnote-roundtrip.js +96 -0
- package/dist/documents/format.js +116 -0
- package/dist/documents/html-tables.js +30 -0
- package/dist/documents/html-to-markdown.js +47 -13
- package/dist/documents/markdown.js +46 -4
- package/dist/documents/obsidian.js +6 -3
- package/dist/documents/tables.js +89 -0
- package/dist/runtime/network.js +4 -0
- package/dist/shared/colors.js +2 -2
- package/dist/shared/progress.js +164 -0
- package/dist/shared/version.js +12 -0
- package/dist/site/assets/Monaco-LICENSE.txt +21 -0
- package/dist/site/assets/Monaco-ThirdPartyNotices.txt +448 -0
- package/dist/site/assets/PDFJS-LICENSE.txt +177 -0
- package/dist/site/assets/app.css +1 -0
- package/dist/site/assets/app.js +4 -0
- package/dist/site/assets/chunks/chunk-TEW74QPN.js +35 -0
- package/dist/site/assets/chunks/markdown-S6623E66.js +1 -0
- package/dist/site/assets/chunks/monaco-36ZGUH4Y.js +897 -0
- package/dist/site/assets/chunks/monaco-HFLEBJTI.css +1 -0
- package/dist/site/assets/chunks/pdf-DDN7TXTP.js +55 -0
- package/dist/site/assets/confluence-env-example.txt +32 -0
- package/dist/site/assets/editor.worker.js +1 -0
- package/dist/site/assets/favicon.svg +3 -0
- package/dist/site/assets/guide/01-account-settings.png +0 -0
- package/dist/site/assets/guide/02-atlassian-security.png +0 -0
- package/dist/site/assets/guide/03-api-tokens.png +0 -0
- package/dist/site/assets/guide/04-scope-api-token-step1.png +0 -0
- package/dist/site/assets/guide/05-scope-api-token-step2.png +0 -0
- package/dist/site/assets/guide/06-scope-api-token-step3.png +0 -0
- package/dist/site/assets/guide/07-scope-api-token-step4.png +0 -0
- package/dist/site/assets/guide/web/document-preview.png +0 -0
- package/dist/site/assets/guide/web/remote-diff.png +0 -0
- package/dist/site/assets/guide/web/sync-workspace.png +0 -0
- package/dist/site/assets/pdf/cmaps/78-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78ms-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78ms-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/83pv-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90ms-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90ms-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90msp-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90msp-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90pv-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90pv-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Add-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Add-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Add-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Add-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-0.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-1.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-3.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-4.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-5.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-6.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-0.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-1.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-3.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-4.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-5.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-0.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-1.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-3.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-4.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-5.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-6.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Korea1-0.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Korea1-1.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Korea1-2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/B5pc-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/B5pc-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS1-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS1-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS2-V.bcmap +3 -0
- package/dist/site/assets/pdf/cmaps/ETHK-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/ETHK-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/ETen-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/ETen-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/ETenms-B5-H.bcmap +3 -0
- package/dist/site/assets/pdf/cmaps/ETenms-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Ext-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Ext-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Ext-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Ext-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GB-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GB-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GB-H.bcmap +4 -0
- package/dist/site/assets/pdf/cmaps/GB-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBK-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBK-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBK2K-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBK2K-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBKp-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBKp-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBT-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBT-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBT-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBT-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBTpc-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBTpc-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBpc-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBpc-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKdla-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKdla-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKdlb-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKdlb-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKgccs-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKgccs-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKm314-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKm314-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKm471-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKm471-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKscs-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKscs-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Hankaku.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Hiragana.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-Johab-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-Johab-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCms-UHC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCms-UHC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCpc-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCpc-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Katakana.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/LICENSE +36 -0
- package/dist/site/assets/pdf/cmaps/NWP-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/NWP-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Roman.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UCS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UCS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/WP-Symbol.bcmap +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitDingbats.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitFixed.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitFixedBold.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitFixedItalic.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSerif.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSerifBold.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSerifItalic.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSymbol.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/LICENSE_FOXIT +27 -0
- package/dist/site/assets/pdf/standard_fonts/LICENSE_LIBERATION +363 -0
- package/dist/site/assets/pdf/standard_fonts/LiberationSans-Bold.ttf +0 -0
- package/dist/site/assets/pdf/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
- package/dist/site/assets/pdf/standard_fonts/LiberationSans-Italic.ttf +0 -0
- package/dist/site/assets/pdf/standard_fonts/LiberationSans-Regular.ttf +0 -0
- package/dist/site/assets/pdf/wasm/LICENSE_JBIG2 +196 -0
- package/dist/site/assets/pdf/wasm/LICENSE_OPENJPEG +39 -0
- package/dist/site/assets/pdf/wasm/LICENSE_PDFJS_JBIG2 +13 -0
- package/dist/site/assets/pdf/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
- package/dist/site/assets/pdf/wasm/LICENSE_PDFJS_QCMS +19 -0
- package/dist/site/assets/pdf/wasm/LICENSE_QCMS +21 -0
- package/dist/site/assets/pdf/wasm/jbig2.wasm +0 -0
- package/dist/site/assets/pdf/wasm/jbig2_nowasm_fallback.js +15 -0
- package/dist/site/assets/pdf/wasm/openjpeg.wasm +0 -0
- package/dist/site/assets/pdf/wasm/openjpeg_nowasm_fallback.js +17 -0
- package/dist/site/assets/pdf/wasm/qcms_bg.wasm +0 -0
- package/dist/site/assets/pdf/wasm/quickjs-eval.js +16 -0
- package/dist/site/assets/pdf/wasm/quickjs-eval.wasm +0 -0
- package/dist/site/assets/pdf.worker.min.mjs +29 -0
- package/dist/site/assets/workspace.worker.js +409 -0
- package/dist/site/index.html +253 -0
- package/dist/sync/baseline.js +45 -0
- package/dist/sync/changes.js +51 -0
- package/dist/sync/diff.js +80 -0
- package/dist/sync/fetch.js +287 -0
- package/dist/sync/ignore.js +4 -4
- package/dist/sync/local-state.js +12 -0
- package/dist/sync/mapping.js +31 -8
- package/dist/sync/metadata.js +57 -0
- package/dist/sync/prepare.js +52 -0
- package/dist/sync/pull.js +618 -141
- package/dist/sync/push.js +260 -213
- package/dist/sync/reconcile.js +51 -0
- package/dist/sync/references.js +2 -2
- package/dist/sync/remap.js +17 -5
- package/dist/sync/render.js +3 -2
- package/dist/sync/restore.js +28 -0
- package/dist/sync/scope.js +47 -0
- package/dist/sync/staging.js +193 -0
- package/dist/sync/workspace.js +100 -0
- package/dist/web/assets/PDFJS-LICENSE.txt +177 -0
- package/dist/web/assets/app.css +1 -1
- package/dist/web/assets/app.js +3 -938
- package/dist/web/assets/chunks/chunk-TEW74QPN.js +35 -0
- package/dist/web/assets/chunks/markdown-S6623E66.js +1 -0
- package/dist/web/assets/chunks/monaco-36ZGUH4Y.js +897 -0
- package/dist/web/assets/chunks/monaco-HFLEBJTI.css +1 -0
- package/dist/web/assets/chunks/pdf-DDN7TXTP.js +55 -0
- package/dist/web/assets/confluence-env-example.txt +32 -0
- package/dist/web/assets/editor.worker.js +1 -30
- package/dist/web/assets/favicon.svg +3 -0
- package/dist/web/assets/guide/01-account-settings.png +0 -0
- package/dist/web/assets/guide/02-atlassian-security.png +0 -0
- package/dist/web/assets/guide/03-api-tokens.png +0 -0
- package/dist/web/assets/guide/04-scope-api-token-step1.png +0 -0
- package/dist/web/assets/guide/05-scope-api-token-step2.png +0 -0
- package/dist/web/assets/guide/06-scope-api-token-step3.png +0 -0
- package/dist/web/assets/guide/07-scope-api-token-step4.png +0 -0
- package/dist/web/assets/guide/web/document-preview.png +0 -0
- package/dist/web/assets/guide/web/remote-diff.png +0 -0
- package/dist/web/assets/guide/web/sync-workspace.png +0 -0
- package/dist/web/assets/pdf/cmaps/78-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78ms-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78ms-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/83pv-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90ms-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90ms-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90msp-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90msp-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90pv-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90pv-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Add-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Add-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Add-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Add-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-0.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-1.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-3.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-4.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-5.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-6.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-0.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-1.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-3.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-4.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-5.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-0.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-1.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-3.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-4.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-5.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-6.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Korea1-0.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Korea1-1.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Korea1-2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/B5pc-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/B5pc-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS1-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS1-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS2-V.bcmap +3 -0
- package/dist/web/assets/pdf/cmaps/ETHK-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/ETHK-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/ETen-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/ETen-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/ETenms-B5-H.bcmap +3 -0
- package/dist/web/assets/pdf/cmaps/ETenms-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Ext-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Ext-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Ext-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Ext-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GB-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GB-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GB-H.bcmap +4 -0
- package/dist/web/assets/pdf/cmaps/GB-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBK-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBK-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBK2K-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBK2K-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBKp-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBKp-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBT-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBT-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBT-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBT-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBTpc-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBTpc-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBpc-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBpc-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKdla-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKdla-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKdlb-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKdlb-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKgccs-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKgccs-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKm314-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKm314-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKm471-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKm471-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKscs-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKscs-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Hankaku.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Hiragana.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-Johab-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-Johab-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCms-UHC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCms-UHC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCpc-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCpc-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Katakana.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/LICENSE +36 -0
- package/dist/web/assets/pdf/cmaps/NWP-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/NWP-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Roman.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UCS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UCS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/WP-Symbol.bcmap +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitDingbats.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitFixed.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitFixedBold.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitFixedItalic.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSerif.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSerifBold.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSerifItalic.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSymbol.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/LICENSE_FOXIT +27 -0
- package/dist/web/assets/pdf/standard_fonts/LICENSE_LIBERATION +363 -0
- package/dist/web/assets/pdf/standard_fonts/LiberationSans-Bold.ttf +0 -0
- package/dist/web/assets/pdf/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
- package/dist/web/assets/pdf/standard_fonts/LiberationSans-Italic.ttf +0 -0
- package/dist/web/assets/pdf/standard_fonts/LiberationSans-Regular.ttf +0 -0
- package/dist/web/assets/pdf/wasm/LICENSE_JBIG2 +196 -0
- package/dist/web/assets/pdf/wasm/LICENSE_OPENJPEG +39 -0
- package/dist/web/assets/pdf/wasm/LICENSE_PDFJS_JBIG2 +13 -0
- package/dist/web/assets/pdf/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
- package/dist/web/assets/pdf/wasm/LICENSE_PDFJS_QCMS +19 -0
- package/dist/web/assets/pdf/wasm/LICENSE_QCMS +21 -0
- package/dist/web/assets/pdf/wasm/jbig2.wasm +0 -0
- package/dist/web/assets/pdf/wasm/jbig2_nowasm_fallback.js +15 -0
- package/dist/web/assets/pdf/wasm/openjpeg.wasm +0 -0
- package/dist/web/assets/pdf/wasm/openjpeg_nowasm_fallback.js +17 -0
- package/dist/web/assets/pdf/wasm/qcms_bg.wasm +0 -0
- package/dist/web/assets/pdf/wasm/quickjs-eval.js +16 -0
- package/dist/web/assets/pdf/wasm/quickjs-eval.wasm +0 -0
- package/dist/web/assets/pdf.worker.min.mjs +29 -0
- package/dist/web/assets/workspace.worker.js +409 -0
- package/dist/web/document-source.js +14 -0
- package/dist/web/hosted-files.js +189 -0
- package/dist/web/hosted.js +316 -0
- package/dist/web/node-runner.js +26 -0
- package/dist/web/preview.js +74 -0
- package/dist/web/server.js +85 -240
- package/dist/web/sync.js +364 -70
- package/dist/web/table-editor-script.js +99 -0
- package/dist/web/table-format.js +224 -0
- package/dist/web/views/help.js +15 -10
- package/dist/web/views/sync-panel.js +90 -19
- package/dist/web/views/token-guide.js +27 -0
- package/dist/web/views/usage-guide.js +12 -0
- package/dist/web/views/workspace.js +85 -15
- package/dist/web/workspace-api.js +371 -0
- package/docs/user/CLI.md +366 -0
- package/docs/user/CONFIGURATION.md +125 -0
- package/docs/user/OBSIDIAN.md +117 -0
- package/docs/user/WEB.md +90 -0
- package/docs/user/images/web/document-preview.png +0 -0
- package/docs/user/images/web/remote-diff.png +0 -0
- package/docs/user/images/web/sync-workspace.png +0 -0
- package/package.json +23 -6
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { readFile, realpath, stat, mkdtemp, writeFile, rename, rm } from 'node:fs/promises';
|
|
2
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { createDocument } from '@mixmark-io/domino';
|
|
5
|
+
import { htmlTableMarkdown } from '../documents/html-tables.js';
|
|
6
|
+
import { splitFrontmatter } from '../documents/obsidian.js';
|
|
7
|
+
import { applyTableWidths, tableWidths } from '../documents/tables.js';
|
|
8
|
+
import { formatDocument } from '../documents/format.js';
|
|
9
|
+
import { readPreviewSource } from './document-source.js';
|
|
10
|
+
export const sourceHash = (source) => createHash('sha256').update(source).digest('hex');
|
|
11
|
+
/** Source ranges come from Markdown tokens, never from the preview's sanitized HTML. */
|
|
12
|
+
function targets(source) {
|
|
13
|
+
const { body } = splitFrontmatter(source);
|
|
14
|
+
const prefix = source.length - body.length;
|
|
15
|
+
const lines = body.split('\n');
|
|
16
|
+
const offsets = [prefix];
|
|
17
|
+
for (const line of lines)
|
|
18
|
+
offsets.push(offsets.at(-1) + line.length + 1);
|
|
19
|
+
const md = htmlTableMarkdown();
|
|
20
|
+
const tokens = md.parse(body, {});
|
|
21
|
+
const result = [];
|
|
22
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
23
|
+
const token = tokens[i];
|
|
24
|
+
if (token.type === 'table_open' && token.map) {
|
|
25
|
+
let end = i;
|
|
26
|
+
while (tokens[end]?.type !== 'table_close')
|
|
27
|
+
end++;
|
|
28
|
+
result.push(token.level === 0 ? { start: offsets[token.map[0]], end: Math.min(source.length, offsets[token.map[1]]), html: md.renderer.render(tokens.slice(i, end + 1), md.options, {}), markdown: true } : null);
|
|
29
|
+
i = end;
|
|
30
|
+
}
|
|
31
|
+
else if (token.type === 'html_block' && token.map) {
|
|
32
|
+
const count = createDocument(token.content).querySelectorAll('table').length;
|
|
33
|
+
const start = offsets[token.map[0]];
|
|
34
|
+
const raw = source.slice(start, Math.min(source.length, offsets[token.map[1]]));
|
|
35
|
+
const opening = raw.match(/^\s*<table\b(?:[^"'<>]|"[^"]*"|'[^']*')*>/i);
|
|
36
|
+
const close = raw.match(/<\/table\s*>/i);
|
|
37
|
+
const target = count === 1 && token.level === 0 && opening && close
|
|
38
|
+
? { start: start + raw.indexOf('<'), end: start + close.index + close[0].length, html: raw.slice(raw.indexOf('<'), close.index + close[0].length), markdown: false } : null;
|
|
39
|
+
for (let n = 0; n < count; n++)
|
|
40
|
+
result.push(target);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
function columnCount(table, visit) {
|
|
46
|
+
const occupied = [];
|
|
47
|
+
let count = 0;
|
|
48
|
+
const rows = Array.from(table.querySelectorAll('tr'));
|
|
49
|
+
rows.forEach((row, r) => {
|
|
50
|
+
let column = 0;
|
|
51
|
+
for (const cell of Array.from(row.children).filter(c => /^(TD|TH)$/.test(c.tagName))) {
|
|
52
|
+
while ((occupied[column] ?? 0) > r)
|
|
53
|
+
column++;
|
|
54
|
+
const span = Math.max(1, Number(cell.getAttribute('colspan')) || 1);
|
|
55
|
+
const rawRows = cell.getAttribute('rowspan');
|
|
56
|
+
const rowSpan = rawRows === '0' ? rows.length - r : Math.max(1, Number(rawRows) || 1);
|
|
57
|
+
if (!Number.isInteger(span) || span > 32 || !Number.isInteger(rowSpan))
|
|
58
|
+
return;
|
|
59
|
+
visit?.(cell, column, span);
|
|
60
|
+
for (let n = 0; n < span; n++)
|
|
61
|
+
occupied[column + n] = r + rowSpan;
|
|
62
|
+
column += span;
|
|
63
|
+
}
|
|
64
|
+
count = Math.max(count, column, occupied.length);
|
|
65
|
+
});
|
|
66
|
+
return count;
|
|
67
|
+
}
|
|
68
|
+
/** Visual-length estimate: wide characters count twice; row/column spans use logical columns. */
|
|
69
|
+
function contentWeights(table, count) {
|
|
70
|
+
const samples = Array.from({ length: count }, () => []);
|
|
71
|
+
columnCount(table, (cell, column, span) => {
|
|
72
|
+
const text = (cell.textContent ?? '').normalize('NFC').replace(/\s+/g, ' ').trim();
|
|
73
|
+
let length = 0;
|
|
74
|
+
for (const character of text) {
|
|
75
|
+
if (/\p{Mark}|[\u200d\ufe0e\ufe0f]/u.test(character))
|
|
76
|
+
continue;
|
|
77
|
+
length += /\p{Script=Hangul}|\p{Script=Han}|\p{Script=Hiragana}|\p{Script=Katakana}|\p{Extended_Pictographic}/u.test(character) ? 2 : 1;
|
|
78
|
+
}
|
|
79
|
+
for (let i = column; i < Math.min(count, column + span); i++)
|
|
80
|
+
samples[i].push(length / span);
|
|
81
|
+
});
|
|
82
|
+
return samples.map(values => {
|
|
83
|
+
values.sort((a, b) => a - b);
|
|
84
|
+
const typical = values[Math.ceil((values.length - 1) * 0.75)] ?? 0;
|
|
85
|
+
const longest = values.at(-1) ?? 0;
|
|
86
|
+
// Compress long prose, and limit a single unusually long cell's influence.
|
|
87
|
+
return Math.max(1, Math.sqrt(typical) * 0.8 + Math.sqrt(Math.min(longest, typical * 2)) * 0.2);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
export function editableTables(source) {
|
|
91
|
+
return targets(source).map((target, index) => {
|
|
92
|
+
const table = target && createDocument(target.html).querySelector('table');
|
|
93
|
+
const count = table ? columnCount(table) : 0;
|
|
94
|
+
if (!table || count < 1 || count > 32)
|
|
95
|
+
return { index, widths: [], editable: false };
|
|
96
|
+
const dimensions = tableWidths(table);
|
|
97
|
+
const total = Math.round(Math.max(count * 40, Math.min(3000, dimensions.width ?? 760)));
|
|
98
|
+
const existing = dimensions.columns.length === count && dimensions.columns.every(w => w !== undefined) ? dimensions.columns : Array(count).fill(1);
|
|
99
|
+
const sum = existing.reduce((a, b) => a + b, 0);
|
|
100
|
+
const widths = existing.map(w => Math.max(40, Math.floor(w / sum * total)));
|
|
101
|
+
let remaining = total - widths.reduce((a, b) => a + b, 0);
|
|
102
|
+
while (remaining !== 0) {
|
|
103
|
+
const column = remaining > 0 ? widths.indexOf(Math.min(...widths)) : widths.indexOf(Math.max(...widths));
|
|
104
|
+
widths[column] += remaining > 0 ? 1 : -1;
|
|
105
|
+
remaining += remaining > 0 ? -1 : 1;
|
|
106
|
+
}
|
|
107
|
+
return { index, widths, editable: true, contentWeights: contentWeights(table, count) };
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
export function formatTable(source, index, widths) {
|
|
111
|
+
const list = targets(source);
|
|
112
|
+
const target = list[index];
|
|
113
|
+
const info = editableTables(source)[index];
|
|
114
|
+
if (!target || !info?.editable || !Number.isInteger(index))
|
|
115
|
+
throw new Error('์ด ํ๋ ๋๋น ํธ์ง์ ์ง์ํ์ง ์์ต๋๋ค.');
|
|
116
|
+
if (!Array.isArray(widths) || widths.length !== info.widths.length || widths.some(w => !Number.isInteger(w) || w < 40 || w > 3000)
|
|
117
|
+
|| widths.reduce((a, b) => a + b, 0) > 3000)
|
|
118
|
+
throw new Error('์ด ๋๋น๋ 40px ์ด์, ์ ์ฒด ๋๋น๋ 3000px ์ดํ์ฌ์ผ ํฉ๋๋ค.');
|
|
119
|
+
const table = createDocument(target.html).querySelector('table');
|
|
120
|
+
const signature = (el) => Array.from(el.querySelectorAll('th, td')).map(c => [c.innerHTML, c.getAttribute('colspan'), c.getAttribute('rowspan')]);
|
|
121
|
+
const before = signature(table);
|
|
122
|
+
const total = widths.reduce((a, b) => a + b, 0);
|
|
123
|
+
applyTableWidths(table, { width: total, columns: widths });
|
|
124
|
+
if (table.hasAttribute('data-table-width'))
|
|
125
|
+
table.setAttribute('data-table-width', String(total));
|
|
126
|
+
let html;
|
|
127
|
+
if (target.markdown)
|
|
128
|
+
html = table.outerHTML + '\n';
|
|
129
|
+
else {
|
|
130
|
+
const opening = table.cloneNode(false);
|
|
131
|
+
const startTag = opening.outerHTML.slice(0, -'</table>'.length);
|
|
132
|
+
const group = table.querySelector('colgroup').outerHTML;
|
|
133
|
+
const original = target.html.replace(/^<table\b(?:[^"'<>]|"[^"]*"|'[^']*')*>/i, startTag);
|
|
134
|
+
html = /<colgroup\b/i.test(original)
|
|
135
|
+
? original.replace(/<colgroup\b[^>]*>[\s\S]*?<\/colgroup\s*>/i, group)
|
|
136
|
+
: original.replace(startTag, startTag + '\n' + group);
|
|
137
|
+
}
|
|
138
|
+
const checked = createDocument(html).querySelector('table');
|
|
139
|
+
if (JSON.stringify(signature(checked)) !== JSON.stringify(before)
|
|
140
|
+
|| tableWidths(checked).width !== total
|
|
141
|
+
|| JSON.stringify(tableWidths(checked).columns) !== JSON.stringify(widths))
|
|
142
|
+
throw new Error('ํ ๋ด์ฉ์ ๋ณด์กดํ ์ ์์ด ๋ณ๊ฒฝํ์ง ์์์ต๋๋ค.');
|
|
143
|
+
return source.slice(0, target.start) + html + source.slice(target.end);
|
|
144
|
+
}
|
|
145
|
+
export function formatAllTables(source, mode) {
|
|
146
|
+
let after = source;
|
|
147
|
+
for (const table of editableTables(source).filter(t => t.editable)) {
|
|
148
|
+
const total = table.widths.reduce((a, b) => a + b, 0), count = table.widths.length;
|
|
149
|
+
const weights = mode === 'fit' ? table.contentWeights : Array(count).fill(1);
|
|
150
|
+
const extra = total - count * 40, sum = weights.reduce((a, b) => a + b, 0);
|
|
151
|
+
const shares = weights.map(w => w / sum * extra), widths = shares.map(w => 40 + Math.floor(w));
|
|
152
|
+
const order = shares.map((w, i) => ({ i, fraction: w - Math.floor(w) })).sort((a, b) => b.fraction - a.fraction);
|
|
153
|
+
const rest = total - widths.reduce((a, b) => a + b, 0);
|
|
154
|
+
for (let i = 0; i < rest; i++)
|
|
155
|
+
widths[order[i].i]++;
|
|
156
|
+
after = formatTable(after, table.index, widths);
|
|
157
|
+
}
|
|
158
|
+
return after;
|
|
159
|
+
}
|
|
160
|
+
export function createTableFormatting() {
|
|
161
|
+
const plans = new Map();
|
|
162
|
+
const plan = (base, file, before, after) => {
|
|
163
|
+
if (Buffer.byteLength(after) > 1_000_000)
|
|
164
|
+
throw new Error('๋ณ๊ฒฝ ๊ฒฐ๊ณผ๊ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ง์ ํฌ๊ธฐ์ธ 1MB๋ฅผ ๋์ต๋๋ค.');
|
|
165
|
+
const planId = randomUUID();
|
|
166
|
+
if (plans.size >= 20)
|
|
167
|
+
plans.delete(plans.keys().next().value);
|
|
168
|
+
plans.set(planId, { base, file, before, after });
|
|
169
|
+
return { planId, before, after };
|
|
170
|
+
};
|
|
171
|
+
return {
|
|
172
|
+
async documentPreview(base, file, hash, basic, tables, changes = []) {
|
|
173
|
+
if (typeof basic !== 'boolean' || !['keep', 'fit', 'equal'].includes(tables))
|
|
174
|
+
throw new Error('๋ฌธ์ ์์ ์ต์
์ ํ์ธํด ์ฃผ์ธ์.');
|
|
175
|
+
const { source, path } = await readPreviewSource(base, file);
|
|
176
|
+
if (sourceHash(source) !== hash)
|
|
177
|
+
throw new Error('ํ์ผ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋ฌธ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์๋ก๊ณ ์นจํด ์ฃผ์ธ์.');
|
|
178
|
+
if (!Array.isArray(changes) || changes.length > 100 || new Set(changes.map(e => e?.index)).size !== changes.length)
|
|
179
|
+
throw new Error('ํ ๋ณ๊ฒฝ ๋ชฉ๋ก์ ํ์ธํด ์ฃผ์ธ์.');
|
|
180
|
+
let after = source;
|
|
181
|
+
for (const edit of changes)
|
|
182
|
+
after = formatTable(after, edit?.index, edit?.widths);
|
|
183
|
+
if (basic)
|
|
184
|
+
after = formatDocument(after);
|
|
185
|
+
if (tables !== 'keep')
|
|
186
|
+
after = formatAllTables(after, tables);
|
|
187
|
+
return plan(base, path, source, after);
|
|
188
|
+
},
|
|
189
|
+
async preview(base, file, hash, index, widths, changes) {
|
|
190
|
+
const { source, path } = await readPreviewSource(base, file);
|
|
191
|
+
if (sourceHash(source) !== hash)
|
|
192
|
+
throw new Error('ํ์ผ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋ฌธ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์๋ก๊ณ ์นจํด ์ฃผ์ธ์.');
|
|
193
|
+
const edits = changes ?? [{ index, widths }];
|
|
194
|
+
if (!Array.isArray(edits) || !edits.length || edits.length > 100 || new Set(edits.map(e => e?.index)).size !== edits.length)
|
|
195
|
+
throw new Error('ํ ๋ณ๊ฒฝ ๋ชฉ๋ก์ ํ์ธํด ์ฃผ์ธ์.');
|
|
196
|
+
let after = source;
|
|
197
|
+
for (const edit of edits)
|
|
198
|
+
after = formatTable(after, edit?.index, edit?.widths);
|
|
199
|
+
return plan(base, path, source, after);
|
|
200
|
+
},
|
|
201
|
+
async save(planId) {
|
|
202
|
+
const plan = plans.get(planId);
|
|
203
|
+
if (!plan)
|
|
204
|
+
throw new Error('๋ณ๊ฒฝ ๋น๊ต๋ฅผ ๋ค์ ์คํํด ์ฃผ์ธ์.');
|
|
205
|
+
const { source, path } = await readPreviewSource(plan.base, plan.file);
|
|
206
|
+
if (source !== plan.before || path !== plan.file)
|
|
207
|
+
throw new Error('ํ์ผ์ด ๋ณ๊ฒฝ๋์ด ์ ์ฅํ์ง ์์์ต๋๋ค. ์๋ก๊ณ ์นจ ํ ๋ค์ ๋น๊ตํด ์ฃผ์ธ์.');
|
|
208
|
+
const mode = (await stat(path)).mode & 0o777;
|
|
209
|
+
const stage = await mkdtemp(join(dirname(path), '.csync-table-'));
|
|
210
|
+
try {
|
|
211
|
+
const candidate = join(stage, 'document.md');
|
|
212
|
+
await writeFile(candidate, plan.after, { mode });
|
|
213
|
+
if (await realpath(plan.file) !== path || await readFile(path, 'utf8') !== plan.before)
|
|
214
|
+
throw new Error('ํ์ผ์ด ๋ณ๊ฒฝ๋์ด ์ ์ฅํ์ง ์์์ต๋๋ค.');
|
|
215
|
+
await rename(candidate, path);
|
|
216
|
+
plans.delete(planId);
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
await rm(stage, { recursive: true, force: true });
|
|
220
|
+
}
|
|
221
|
+
return { saved: path };
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
}
|
package/dist/web/views/help.js
CHANGED
|
@@ -1,30 +1,35 @@
|
|
|
1
|
+
import { tokenGuide } from './token-guide.js';
|
|
2
|
+
import { usageGuide } from './usage-guide.js';
|
|
1
3
|
/** In-app guide for the local document workflow. */
|
|
2
4
|
export const helpDialog = `
|
|
3
5
|
<dialog id="help-dialog" class="help-dialog" aria-labelledby="help-title">
|
|
4
6
|
<header class="help-heading"><div><span class="eyebrow">WORKSPACE GUIDE</span><h2 id="help-title">์ฌ์ฉ ๋์๋ง</h2></div><form method="dialog"><button aria-label="๋์๋ง ๋ซ๊ธฐ" autofocus>๋ซ๊ธฐ</button></form></header>
|
|
5
|
-
<nav class="help-nav" aria-label="๋์๋ง ๋ชฉ์ฐจ"><a href="#help-convert">๋ฌธ์ ๋ณํ</a><a href="#help-sync"
|
|
7
|
+
<nav class="help-nav" aria-label="๋์๋ง ๋ชฉ์ฐจ"><a href="#help-screens">ํ๋ฉด์ผ๋ก ๋ณด๊ธฐ</a><a href="#help-convert">๋ฌธ์ ๋ณํ</a><a href="#help-sync">Confluence</a><a href="#help-token">API ํ ํฐ ๋ฐ๊ธ</a><a href="#help-links">์ฐธ์กฐ ๋งํฌ</a><a href="#help-faq">์์ฃผ ๋ฌป๋ ์ง๋ฌธ</a></nav>
|
|
6
8
|
<div class="help-body" tabindex="0" aria-label="์ฌ์ฉ ๋์๋ง ๋ด์ฉ">
|
|
7
|
-
<p class="help-intro">Obsidian์์ ์์
ํ ๋ฌธ์๋ฅผ ๋ณํํ ๋ค์, ๋ณํ ๊ฒฐ๊ณผ ํด๋๋ฅผ ๊ธฐ์ค์ผ๋ก Confluence์ ์ฌ๋ฆด ์ ์์ต๋๋ค. ๋ ํญ์ ๊ธฐ์ค
|
|
9
|
+
<p class="help-intro">Obsidian์์ ์์
ํ ๋ฌธ์๋ฅผ ๋ณํํ ๋ค์, ๋ณํ ๊ฒฐ๊ณผ ํด๋๋ฅผ ๊ธฐ์ค์ผ๋ก Confluence์ ์ฌ๋ฆด ์ ์์ต๋๋ค. ๋ก์ปฌ ์คํ์์๋ ๋ ํญ์ ๊ธฐ์ค ํด๋๋ฅผ ๊ฐ๊ฐ ์ค์ ํฉ๋๋ค. ๋ฐฐํฌ ์น์ ๋ก์ปฌ CLI ์์ด ๋ธ๋ผ์ฐ์ ์์ ๋ฌธ์ ํด๋๋ฅผ ์ ํํฉ๋๋ค. Vercel ๋ฐฐํฌ์์๋ ๋ณํยท๋ณ๊ฒฝ ํ์ธ์ ๋ธ๋ผ์ฐ์ ์์ ์ฒ๋ฆฌํ๊ณ Confluence ์์ฒญ๋ง ์ค๊ณํฉ๋๋ค. Docker ๋ฐฐํฌ์์๋ ๋ฌธ์ยท์ฒจ๋ถยท.env๋ฅผ ์๋ฒ์ ์์ ๊ณต๊ฐ์ผ๋ก ์ ๋ฌํด ์ฒ๋ฆฌํฉ๋๋ค. ๋ ๋ฐฉ์ ๋ชจ๋ ๋ก์ปฌ ํธ์ง ์ถฉ๋์ ํ์ธํ ๋ค ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐ์คํฌํฑ ChromeยทEdge์ HTTPS๊ฐ ํ์ํฉ๋๋ค. ๋ณํ ์ ์ฅ ์ ์ ์ถ๋ ฅ ํด๋๋ฅผ ์ ํํ์ธ์. ์๋ณธ๊ณผ ๊ฐ์ ํด๋๋ฅผ ์ง์ ํ๋ฉด ์ ์ฅ ์ ๋ฎ์ด์ฐ๊ธฐ ํ์ธ์ฐฝ์ด ๋น๋๋ค.</p>
|
|
10
|
+
${usageGuide}
|
|
8
11
|
<section id="help-convert"><h3>๋ฌธ์ ๋ณํ</h3>
|
|
9
|
-
<ol><li><strong
|
|
10
|
-
<dl><dt>Markdown</dt><dd>์ฐพ์ ์ ์๋ ์ํค๋งํฌ๋ฅผ ์๋ ๋งํฌ๋ก ๋ฐ๊พธ๊ณ PDF ํ์ด์ง ์ฐธ์กฐ๋ฅผ ์ด๋ฏธ์ง๋ก ๋ณํํฉ๋๋ค. ์ฐพ์ง ๋ชปํ ๋ฌธ์ ์ํค๋งํฌ๋ ๊ทธ๋๋ก ๋จ์ต๋๋ค.</dd><dt>Obsidian</dt><dd>ํด์ ๊ฐ๋ฅํ Markdown ๋ฌธ์ ๋งํฌ๋ฅผ ์ํค๋งํฌ๋ก ๋ฐ๊ฟ๋๋ค.</dd><dt>Confluence ๋ณํ ์ค๋ฅ ๋ณด์ </dt><dd>์ ๋ณํ ๊ฒฐ๊ณผ์ CSS ์ํด, ๋ถํ์ํ ์ด์ค์ผ์ดํ์ ์ฝ๋๋ธ๋ก ์ธ์ด ๋ฑ์ ๋ณด์ ํฉ๋๋ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ก ๋ฐ๋ ๋ด์ฉ์ ํ์ธํ์ธ์.</dd><dt>์ถ๋ ฅ ์์น</dt><dd>ํ์ผ ํ๋๋ ์ถ๋ ฅ ํด๋ ๋ฐ๋ก ์๋์, ํด๋ ์ ์ฒด๋ ์ ํ ํด๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ์งํด ์ ์ฅํฉ๋๋ค. ์ถ๋ ฅ ๊ฒฝ๋ก๋ฅผ ๋น์ฐ๋ฉด ์๋ณธ ๊ธฐ์ค ํด๋ ์์ ์ ๊ฒฐ๊ณผ ํด๋๋ฅผ ๋ง๋ญ๋๋ค.</dd></dl>
|
|
12
|
+
<ol><li><strong>๊ธฐ์ค ํด๋ ๋ณ๊ฒฝโฆ</strong>์ผ๋ก ์๋ณธ ํด๋๋ฅผ ์ฝ๋๋ค. ํ์ดํ๋ ํด๋๋ฅผ ํผ์น๊ณ , ์ด๋ฆ์ ๋๋ฅด๋ฉด ๋ณํ ๋์์ ์ ํํฉ๋๋ค.</li><li>ํ์ผ์ ์ ํํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํ <strong>๋ฌธ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ</strong>๋ฅผ ํผ์น๋ฉด ํ์ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ ๋ณธ๋ฌธ์ด ํ์๋ฉ๋๋ค. ํ์ผ ํ๋๋ฅผ ์ ํํ๋ฉด ๊ทธ ํ์ผ๋ง, ํด๋๋ฅผ ์ ํํ๋ฉด ํ์ Markdown ์ ์ฒด๋ฅผ ๋ณํํฉ๋๋ค. ๋ณํ ์ค์ ์ ๊ธฐ์ค ํด๋ ์ ์ฒด ์ ํ์ ๋๋ฅด๋ฉด ํ์ฌ ํ์ ์์น์ ๊ด๊ณ์์ด ๊ธฐ์ค ํด๋ ์๋ ๋ชจ๋ Markdown์ ๋์์ผ๋ก ํฉ๋๋ค. ์ ํ ํ ๋ณํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ๋ณํ ํ ์ ์ฅ์ ์ฌ์ฉํ์ธ์.</li><li>๋ณํ ํ์๊ณผ ์ถ๋ ฅ ํด๋๋ฅผ ์ ํ๊ณ <strong>๋ณํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ</strong>๋ก ์๋ณธ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํฉ๋๋ค.</li><li><strong>๋ณํ ํ ์ ์ฅ</strong>์ ๋๋ฅธ ๋ค <strong>๊ฒฐ๊ณผ ํด๋ ์ด๊ธฐ</strong>๋ก ํ์ธํฉ๋๋ค. ์น ๋ณํ์ ์ง์ ํ ์ถ๋ ฅ ํด๋์ ์ ์ฅํ๋ฉฐ, ์ฒจ๋ถ์ PDF ํ์ด์ง ์ด๋ฏธ์ง๋ ๊ฐ ๋ฌธ์ ์์ attachments/๋ฌธ์๋ช
/์ ๋ชจ์๋๋ค.</li></ol>
|
|
13
|
+
<dl><dt>Markdown</dt><dd>์ฐพ์ ์ ์๋ ์ํค๋งํฌ๋ฅผ ์๋ ๋งํฌ๋ก ๋ฐ๊พธ๊ณ PDF ํ์ด์ง ์ฐธ์กฐ๋ฅผ ์ด๋ฏธ์ง๋ก ๋ณํํฉ๋๋ค. ์ฐพ์ง ๋ชปํ ๋ฌธ์ ์ํค๋งํฌ๋ ๊ทธ๋๋ก ๋จ์ต๋๋ค.</dd><dt>Obsidian</dt><dd>ํด์ ๊ฐ๋ฅํ Markdown ๋ฌธ์ ๋งํฌ๋ฅผ ์ํค๋งํฌ๋ก ๋ฐ๊ฟ๋๋ค.</dd><dt>Confluence ๋ณํ ์ค๋ฅ ๋ณด์ </dt><dd>์ ๋ณํ ๊ฒฐ๊ณผ์ CSS ์ํด, ๋ถํ์ํ ์ด์ค์ผ์ดํ์ ์ฝ๋๋ธ๋ก ์ธ์ด ๋ฑ์ ๋ณด์ ํฉ๋๋ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ก ๋ฐ๋ ๋ด์ฉ์ ํ์ธํ์ธ์.</dd><dt>์ถ๋ ฅ ์์น</dt><dd>ํ์ผ ํ๋๋ ์ถ๋ ฅ ํด๋ ๋ฐ๋ก ์๋์, ํด๋ ์ ์ฒด๋ ์ ํ ํด๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ์งํด ์ ์ฅํฉ๋๋ค. ์ถ๋ ฅ ํด๋๋ฅผ ์๋ณธ๊ณผ ๊ฐ๊ฒ ์ง์ ํ๋ฉด ์ ํ ๋ฒ์์ ์๋ ์์น์ ๋ฐ์ํฉ๋๋ค. ์ค์ ๋ฎ์ด์ฐ๊ธฐ ์ ๋ณ๊ฒฝ ํ์ผ์ ํ์ธํ๋ฉฐ, ํ์ธ ์ดํ ์๋ณธ์ด ๋ฐ๋๋ฉด ์ ์ฅ์ ์ค๋จํฉ๋๋ค. ๋ก์ปฌ ์คํ์์ ์ถ๋ ฅ ๊ฒฝ๋ก๋ฅผ ๋น์ฐ๋ฉด ์๋ณธ ๊ธฐ์ค ํด๋ ์์ ์ ๊ฒฐ๊ณผ ํด๋๋ฅผ ๋ง๋ญ๋๋ค.</dd></dl>
|
|
11
14
|
</section>
|
|
12
|
-
<section id="help-sync"><h3>Confluence
|
|
13
|
-
<
|
|
14
|
-
<dl><dt
|
|
15
|
-
<p class="help-note"
|
|
15
|
+
<section id="help-sync"><h3>Confluence: Push / Pull</h3>
|
|
16
|
+
<p>๋ก์ปฌ ๋ฌธ์์์ ์คํ์ด์ค ๋ฌธ์๋ฅผ ๋ณด๊ดํ ๊ธฐ์ค ํด๋๋ฅผ ์ ํํ๊ณ , .env ์ฐ๊ฒฐ ์ค์ ์์ ์ค์ ํ์ธ ํ ์คํ์ด์ค ์ฐ๊ฒฐ์ ๋๋ฅด์ธ์. ๋ณ๋ ํ์ผยทํด๋ ์ค์ฝํ ์ค์ ์ ์์ต๋๋ค.</p>
|
|
17
|
+
<dl><dt>๋ณ๊ฒฝ์ฌํญ๊ณผ Fetch</dt><dd>๋ก์ปฌ์ 5์ด ๊ฐ๊ฒฉ์ผ๋ก ์๋ ํ์ธํ๋ฉฐ Confluence API๋ฅผ ํธ์ถํ์ง ์์ต๋๋ค. Fetch๋ ์คํ์ด์ค ํ์ด์ง๋ฅผ 100๊ฐ์ฉ ์กฐํํด ์ ๋ฌธ์์ ๋ฒ์ ยท์์น ๋ณ๊ฒฝ์ ํ์ธํ๊ณ 2๋ถ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค. PushยทPull ์ฑ๊ณต ํ์๋ ์บ์๋ฅผ ๊ฑด๋๋ฐ๊ณ ํ ๋ฒ ๋ Fetchํด ๋ชฉ๋ก์ ๊ฐฑ์ ํฉ๋๋ค. ํ์ Fetch๋ง ์คํจํ๋ฉด ์๋ฃ๋ PushยทPull์ ์ ์งํ๊ณ ๊ฒฝ๊ณ ๋ฅผ ํ์ํฉ๋๋ค. ๋ฌธ์์ ๋๊ธฐํ ๊ธฐ์ค์ ์ ์งํฉ๋๋ค.</dd><dt>์
๋ก๋(Push)</dt><dd>์
๋ก๋ํ ๋ฌธ์๋ฅผ ์ฒดํฌํ๊ณ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์๋ฃํ ๋ค ์
๋ก๋ํ์ธ์. ์ฒดํฌํ ๋ฌธ์๋ง ์ฒ๋ฆฌํ๋ฉฐ ์๊ฒฉ ์ถฉ๋ ๊ฒ์ฌ๋ ์ ์งํฉ๋๋ค. ์ ํ ํ ๋ฌธ์๋ฅผ ์์ ํ๋ฉด ์ต์ ๋ด์ฉ ๋ฐ์๊ณผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ๋ค์ ํ์ํฉ๋๋ค.</dd><dt>๊ฐ์ ธ์ค๊ธฐ(Pull)</dt><dd>๋ณ๊ฒฝ ๋ชฉ๋ก ์์ โ์๊ฒฉ ๋ฌธ์ n๊ฐ ๊ฐ์ ธ์ค๊ธฐโ๋ก ์๊ฒฉ ์ ๊ท ๋ฌธ์์ ์๊ฒฉ์์๋ง ๋ฐ๋ ๋ฌธ์๋ฅผ ๋ฐ์ต๋๋ค. ๋ก์ปฌ์ด ๋น์ด ์์ด๋ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค. ๋ก์ปฌ ์์ ยท์๋์ ์ธ ์ญ์ ยท์์ชฝ ๋ณ๊ฒฝ์ ๋ณด์กดํ๋ฉฐ ์
๋ก๋ ์ฒดํฌ๋ ์ ์ฉ๋์ง ์์ต๋๋ค. ๋ฌธ์ ๋ฒ์ ์ด ๊ทธ๋๋ก์ธ ์ฒจ๋ถ ๋จ๋
๋ณ๊ฒฝ์ Fetch์์ ๊ฐ์งํ์ง ์์ต๋๋ค. ๊ฐ์ ธ์ค๊ธฐ ํ์์ Markdown ๋๋ Obsidian์ ์ ํํ๋ฉฐ, ๊ฐ์ ธ์ค๊ธฐ์ ๋ณต๊ตฌยท์๋ณต์ ์ ์ฉํฉ๋๋ค. ๋ด๋ถ ๋งํฌ ํ๊ธฐ์ ํจ๋ ๋ณต์ ๋ฐฉ์์ด ๋ฌ๋ผ์ง๋๋ค. Markdown์ ์ ๋ชฉ์ด ์๋ ์ธ์ฉ๋ฌธ๊ณผ ์์ฒจ์ ๊ฐ์ฃผ ๋ชฉ๋ก์ผ๋ก, Obsidian์ ์ฝ์์๊ณผ ์ ์ํยท์ธ๋ผ์ธ ๊ฐ์ฃผ๋ก ๋ณต์ํฉ๋๋ค. ์ ํํ ๊ฐ์ฃผ ๋ณต์ ์ ๋ณด๋ ์ ์
๋ก๋๋ถํฐ ๋ณด๊ดํฉ๋๋ค. ๊ธฐ์กด ํ์ผ์ ์ผ๊ด ๋ณํํ์ง ์์ต๋๋ค.</dd><dt>๋ฌธ์ ๋ณต๊ตฌยท์๋ณต</dt><dd>๊ฐ ๋ฌธ์ ํ์์ ์๊ฒฉ์์ ๋ณต๊ตฌ ๋๋ ์๊ฒฉ์ผ๋ก ์๋ณต์ ๋๋ฅด๊ณ ํ์ธํ์ธ์. ์๋ณต์ ํด๋น ๋ฌธ์์ ์ฐธ์กฐ ์ฒจ๋ถ์ ๋ก์ปฌ ์์ ์ ๋ฒ๋ฆฝ๋๋ค. ์๊ฒฉ ๋ฌธ์๋ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ ๋ณต๊ตฌํ ๋ฌธ์๋ ์
๋ก๋ ์ ํ์์ ์ ์ธ๋ฉ๋๋ค.</dd><dt>์ผ์ชฝ ๋ฌธ์ ํ์</dt><dd>ํ์ผ์ ์ ํํ๋ฉด ๋ฌธ์๋ฅผ ๋ฏธ๋ฆฌ๋ณผ ์ ์์ต๋๋ค. ํ์ ์์น๋ฅผ ๋ฐ๊ฟ๋ ์์
๊ณต๊ฐ์ด๋ ์
๋ก๋ ์ ํ์ ๋ฐ๋์ง ์์ต๋๋ค. ์ ์ธ ๊ท์น๊ณผ ๋
๋ฆฝ๋ ํ์ ์์
๊ณต๊ฐ์ ์ ์งํฉ๋๋ค.</dd><dt>๋ค์ด๋ก๋</dt><dd>.env ์ฐ๊ฒฐ ์ค์ ์์ ๋น .env ์ํ์ ๋ด๋ ค๋ฐ์ ๊ฐ์ ์ฑ์ฐ์ธ์. ๋์ ๋ฐ ์คํ ๋ด์ญ์ ๋ก๊ทธ ๋ค์ด๋ก๋๋ ํ์ฌ ์์
์ ์งํยท์ฑ๊ณตยท์คํจ ๋ก๊ทธ๋ฅผ ์ ์ฅํฉ๋๋ค. ํ ํฐ์ ๊ฐ๋ ค์ง์ง๋ง ๋ฌธ์ ๊ฒฝ๋ก์ ์ค๋ฅ ๋ฉ์์ง๋ ํฌํจ๋ฉ๋๋ค.</dd><dt>์ค์ ํ์ผ</dt><dd>๊ธฐ์ค ํด๋์ .env ๋๋ ์ง์ ๊ฐ์ ธ์จ .env๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ์ ธ์จ ๊ฐ์ ํ์ฌ ์น ์์
์๋ง ์ ์ฉ๋๋ฉฐ ๋ณ๋ ์ ์ฅ ๋ฒํผ์ผ๋ก ๊ธฐ์ค ํด๋์ ์ ์ฅํ ์ ์์ต๋๋ค. ์๋ฒ ์คํ ํ๊ฒฝ์ ๋์ ์ฌ์ฉํ์ง ์์ต๋๋ค.</dd></dl>
|
|
18
|
+
<p class="help-note">Pull์ ์๊ฒฉ ์ญ์ ๋ฅผ ๋ก์ปฌ์ ์๋ ๋ฐ์ํ๊ฑฐ๋ ์์ชฝ ๋ณ๊ฒฝ์ ์๋ ๋ณํฉํ์ง ์์ต๋๋ค. ๋๋ฝ๋ ์๊ฒฉ ์ฒจ๋ถ๋ ์๊ฒฉ ์ฐธ์กฐ๋ฅผ ์ ์งํ๊ณ ๊ฒฝ๊ณ ํ๋ฉฐ, ๊ถํยท๋คํธ์ํฌ ์ค๋ฅ๋ ์ค๋จํฉ๋๋ค. ๊ธฐ์กด ์๊ฒฉ ๋ฃจํธ ์ฐ๊ฒฐ๊ณผ ๋ฌธ์ ๋งคํ์ ์์๋ก ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.</p>
|
|
16
19
|
</section>
|
|
20
|
+
${tokenGuide}
|
|
17
21
|
<section id="help-links"><h3>๋ค๋ฅธ ํด๋์ ๋ฌธ์์ ์ฐ๊ฒฐํ๊ธฐ</h3>
|
|
18
22
|
<p>์
๋ก๋ํ ๋ฌธ์๋ ํ๋ก์ ํธ ํด๋์ ์๊ณ , ์ฐ๊ฒฐํ ๋ฌธ์๋ ๋ณ๋ DBP ํด๋์ ์๋ค๋ฉด <strong>์ฐธ์กฐ ๋ฌธ์ ํด๋</strong>์ DBP์ ๋๊ธฐํ ๋ฃจํธ๋ฅผ ์ถ๊ฐํ์ธ์. ์ฌ๋ฌ ๊ฒฝ๋ก๋ฅผ ํ ์ค์ฉ ์
๋ ฅํ๊ฑฐ๋ ํด๋ ์ ํ์ฐฝ์ผ๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค.</p>
|
|
19
23
|
<pre><code>[[์๋ณธ/๊ธด/๊ฒฝ๋ก/๋ฌธ์๋ช
|ํ์ ์ด๋ฆ]]
|
|
20
24
|
[ํ์ ์ด๋ฆ](../์ด์ /๋ฌธ์๋ช
.md)</code></pre>
|
|
21
25
|
<p>๋จผ์ ๊ฒฝ๋ก๋ก ์ฐพ๊ณ , ์ฐพ์ง ๋ชปํ๋ฉด ๊ธฐ์คยท์ฐธ์กฐ ํด๋์์ ํ์ผ๋ช
์ผ๋ก ์ฐพ์ต๋๋ค. ํ๋ณด๊ฐ ํ๋์ผ ๋๋ง ์ฐ๊ฒฐํ๋ฉฐ <code>|</code> ์ค๋ฅธ์ชฝ์ ํ๋ฉด์ ํ์ํ ์ด๋ฆ์
๋๋ค.</p>
|
|
22
|
-
<ul><li>ํ์ฌ ๋ฃจํธ์ ๋ฌธ์๋ ๊ทธ ๋ฌธ์์ ํ์ด์ง ์ ๋ชฉ์ผ๋ก ์ฐ๊ฒฐํฉ๋๋ค. ํ์ผ๋ช
๊ณผ H1์ด ๋ฌ๋ผ๋ ๋ฉ๋๋ค.</li><li>์ฐธ์กฐ ๋ฌธ์๋ <code>.
|
|
26
|
+
<ul><li>ํ์ฌ ๋ฃจํธ์ ๋ฌธ์๋ ๊ทธ ๋ฌธ์์ ํ์ด์ง ์ ๋ชฉ์ผ๋ก ์ฐ๊ฒฐํฉ๋๋ค. ํ์ผ๋ช
๊ณผ H1์ด ๋ฌ๋ผ๋ ๋ฉ๋๋ค.</li><li>์ฐธ์กฐ ๋ฌธ์๋ <code>.csync/mapping.json</code>์ ๊ฒ์๋ ํ์ด์ง ID๋ก ์ฐ๊ฒฐํฉ๋๋ค. ์ฐธ์กฐ ๋ฌธ์ ์์ฒด๋ ์
๋ก๋ํ์ง ์์ต๋๋ค.</li><li>๊ฐ์ Confluence ์๋ฒ์ ๋ณ๋ ๋๊ธฐํ ํด๋๋ฅผ ์ง์ ํ์ธ์. ์ค๋ณต ํ์ผ๋ช
, ๋ฌธ์ ๋๋ฝ, ๊ฒ์ ๋งคํ ๋๋ฝ์ ๊ฒฝ๊ณ ๋ก ํ์ํฉ๋๋ค.</li></ul>
|
|
23
27
|
<p class="help-note">๋งํฌ ๊ฒฝ๊ณ ๊ฐ ์์ด๋ ์
๋ก๋ํ ์ ์์ต๋๋ค. ํด๊ฒฐํ์ง ๋ชปํ ๋งํฌ๋ ์๋ฌธ์ผ๋ก ๋จ์ผ๋ฏ๋ก ์คํ ์ ์ ๊ฒฝ๊ณ ๋ฅผ ํ์ธํ์ธ์.</p>
|
|
24
28
|
</section>
|
|
25
29
|
<section id="help-faq"><h3>์์ฃผ ๋ฌป๋ ์ง๋ฌธ</h3>
|
|
30
|
+
<details><summary>๋ฌธ์์ ํ ์์์ ํ ๋ฒ์ ์ ๋ฆฌํ ์ ์๋์?</summary><p>๋ฌธ์๋ฅผ ์ ํํ๊ณ ๋ฌธ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ๋ฌธ์ ์์ ์ ๋ฆฌ๋ฅผ ์ด๊ณ ๊ธฐ๋ณธ ์์ ์ ๋ฆฌ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ๋น๊ตํฉ๋๋ค. ์ ์ฅ์ ๋๋ฌ์ผ ํ์ผ์ ๋ฐ์๋ฉ๋๋ค. ๊ธฐ์กด ๋๋น ์ ์ง๊ฐ ๊ธฐ๋ณธ์
๋๋ค. ๋ฌธ์ ์์ ์ ๋ฆฌ ์์ ๋ชจ๋ ํ ๋ฉ๋ด์์ ๋ด์ฉ์ ๋ง์ถคยท๊ท ๋ฑ ๋ฐฐ๋ถ์ ์ ํํ ์ ์์ต๋๋ค. ํ ํ๋๋ฅผ ์กฐ์ ํ๋ ค๋ฉด ๊ฐ์ ํด๋ฐ์ ํ ์ง์ ํธ์ง์ ๋๋ฅธ ๋ค ํ๋ฅผ ํด๋ฆญํ์ธ์. ๋ฏธ์ ์ฅ ํ ์กฐ์ ๋ ๊ธฐ๋ณธ ์์ ์ ๋ฆฌ ๊ฒฐ๊ณผ์ ํจ๊ป ํ์ธํ ์ ์์ต๋๋ค. ์ค๋ฅธ์ชฝ ๋ณ๊ฒฝ ๋น๊ต๋ ํ ์กฐ์ ๋ง ๋น๊ตํฉ๋๋ค. ๋ด์ฉ์ ๋ง์ถค์ผ๋ก ๊ธ์ ๊ธธ์ด์ ๋ฐ๋ผ ์๋ ๋ฐฐ๋ถํ๊ฑฐ๋, ์ด ๊ฒฝ๊ณ ๋๋๊ทธยท๊ท ๋ฑ ๋ฐฐ๋ถยท์ ์ฒด ๋๋น๋ฅผ ์กฐ์ ํ ๋ค, ๋ณ๊ฒฝ ๋น๊ต์์ ์๋ณธ ํ์ผ์ ์ ์ฅํฉ๋๋ค. ์ผ๋ฐ Markdown ํ๋ HTML๋ก ๋ณํ๋ฉ๋๋ค. ํ์ผ์ ๋ฐ๊พธ๊ฑฐ๋ ์๋ก๊ณ ์นจํ๋ฉด ๋ฏธ์ ์ฅ ๋ณ๊ฒฝ์ ์ทจ์๋ฉ๋๋ค.</p></details>
|
|
26
31
|
<details><summary>๊ธฐ์กด ํ์ผ์ด ์๋๋ฐ ๋ฎ์ด์ฐ๊ธฐ ํ์ธ์ฐฝ์ด ์ ๋์์.</summary><p>๋ด์ฉ์ด ๊ฐ์ผ๋ฉด ํ์ผ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์ฌ์ฌ์ฉํฉ๋๋ค. ๋ด์ฉ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ง ๋์ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๊ณ ๋ฎ์ด์ธ์ง ํ์ธํฉ๋๋ค. ์ทจ์ํ๋ฉด ์ ์ฅํ์ง ์์ต๋๋ค.</p></details>
|
|
27
|
-
<details><summary>๋ฌธ์๋ฅผ ๊ฒ์ํ๋๋ฐ ๋์ค์ง ์์์.</summary><p>๊ฒ์์ ์ ํํ ๊ธฐ์ค ํด๋์ ๋ชจ๋ ํ์ Markdown ํ์ผ๋ช
์ ๋์์ผ๋ก ํฉ๋๋ค. ๋ณธ๋ฌธ์ ๊ฒ์ํ์ง ์์ผ๋ฉฐ ์จ๊น
|
|
32
|
+
<details><summary>๋ฌธ์๋ฅผ ๊ฒ์ํ๋๋ฐ ๋์ค์ง ์์์.</summary><p>๊ฒ์์ ์ ํํ ๊ธฐ์ค ํด๋์ ๋ชจ๋ ํ์ Markdown ํ์ผ๋ช
์ ๋์์ผ๋ก ํฉ๋๋ค. ๋ณธ๋ฌธ์ ๊ฒ์ํ์ง ์์ผ๋ฉฐ ์จ๊น ํด๋ยทnode_modulesยทattachments๋ ํ์๊ณผ ๊ฒ์์์ ์ ์ธ๋ฉ๋๋ค. ๋ฌธ์๊ฐ ์ฐธ์กฐํ๋ ์ฒจ๋ถ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐยท๋ณํยท์
๋ก๋์์ ๊ณ์ ์ฌ์ฉํฉ๋๋ค.</p></details>
|
|
28
33
|
<details><summary>ํด๋๋ฅผ ๋ณํํ๋๋ฐ ๋น๊ต ํ๋ฉด์ ์ผ๋ถ๋ง ๋ณด์ฌ์.</summary><p>๋ณธ๋ฌธ ๋น๊ต๋ ์ต๋ 20๊ฐ ๋ฌธ์, ๋ฌธ์๋น 200KB๊น์ง ์ง์ํฉ๋๋ค. ์ค์ ์ ์ฅ์ ์ ํ ํด๋์ ์ ์ฒด ๋ณํ ๋์์ ์ ์ฉ๋ฉ๋๋ค.</p></details>
|
|
29
34
|
<details><summary>์คํ ๋ด์ญ์ ์์ ๋ฌด์์ ๋ปํ๋์?</summary><p>์ด๋ก์ ์ ๊ทยท์์ฑยท์๋ฃ, ํฉ๊ฐ์์ ๋ณ๊ฒฝยท๊ฐฑ์ , ๋ณด๋ผ๋ ์ฐธ์กฐยท์ฐ๊ฒฐ, ํ์์ ๋์ผยท์ฌ์ฌ์ฉ์
๋๋ค. ์ฃผํฉ ๋ฐฐ๊ฒฝ์ ๊ฒฝ๊ณ , ๋นจ๊ฐ ๋ฐฐ๊ฒฝ์ ์ค๋ฅ์
๋๋ค. ํจ๊ป ํ์๋ ๋ฌธ๊ตฌ๋ก ์์ธ ๋ด์ฉ์ ํ์ธํ์ธ์.</p></details>
|
|
30
35
|
<details><summary>์๋ก๊ณ ์นจํ๋ฉด ์ค์ ์ด ์ฌ๋ผ์ง๋์?</summary><p>๊ธฐ์ค ํด๋, ์ถ๋ ฅ ๊ฒฝ๋ก, ์ฐธ์กฐ ํด๋์ ์์
์ต์
์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๊ฑฐ๋ ๋ค๋ฅธ ์ฃผ์ยทํฌํธ์์ ์ด๋ฉด ์ค์ ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค. ์
๋ก๋ ์น์ธ์ ์ ์ฅํ์ง ์์ผ๋ฏ๋ก ๋ค์ ๋ฏธ๋ฆฌ๋ณด๊ธฐํ์ธ์.</p></details>
|
|
@@ -1,26 +1,97 @@
|
|
|
1
1
|
export const syncPanel = `
|
|
2
2
|
<div id="sync-view" class="workspace-content" role="tabpanel" aria-labelledby="tab-sync" hidden>
|
|
3
|
-
<section class="panel" aria-
|
|
4
|
-
|
|
5
|
-
<div
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
3
|
+
<section class="panel env-settings" aria-labelledby="sync-env-heading">
|
|
4
|
+
<div class="panel-heading"><h2 id="sync-env-heading"><button id="sync-env-toggle" class="preview-disclosure" type="button" aria-expanded="false" aria-controls="sync-env-body"><span id="sync-env-chevron" aria-hidden="true">โธ</span>.env ์ฐ๊ฒฐ ์ค์ <span id="sync-env-toggle-label" class="preview-disclosure-label">ํผ์น๊ธฐ</span></button></h2><div class="actions"><button id="sync-load" type="button">์ค์ ํ์ธ</button><button id="sync-connect" type="button" disabled>์คํ์ด์ค ์ฐ๊ฒฐ</button></div></div>
|
|
5
|
+
<div id="sync-env-body" class="env-settings-body" hidden>
|
|
6
|
+
<div class="env-help-actions"><a class="env-template-download" href="/assets/confluence-env-example.txt" download="confluence.env.example"><svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v12m-5-5 5 5 5-5M4 17v4h16v-4"/></svg>.env ์ํ ๋ค์ด๋ก๋</a>
|
|
7
|
+
<p class="hint">API ํ ํฐ์ด ์๋์? <button id="open-token-guide" class="quiet" type="button" aria-haspopup="dialog" aria-controls="help-dialog">API ํ ํฐ ๋ฐ๊ธ ๊ฐ์ด๋</button></p></div>
|
|
8
|
+
<p class="hint">์ํ์ ๋น ๊ฐ์ ์ฑ์ด ๋ค .env ๊ฐ์ ธ์ค๊ธฐ๋ก ์ ํํ๊ฑฐ๋, ์ด๋ฆ์ .env๋ก ๋ฐ๊ฟ ๊ธฐ์ค ํด๋์ ์ ์ฅํ์ธ์.</p>
|
|
9
|
+
<fieldset class="env-source-options"><legend class="sr-only">ํ๊ฒฝ๋ณ์ ์ค์ ๋ฐฉ์</legend>
|
|
10
|
+
<label><input type="radio" name="sync-env-source" id="sync-env-base-mode" checked><span><strong>๊ธฐ์ค ํด๋์ .env ์ฌ์ฉ</strong><small>๋ก์ปฌ ๋ฌธ์์์ ์ ํํ ํด๋์ ์ค์ ์ ์ฝ์ต๋๋ค.</small></span></label>
|
|
11
|
+
<label><input type="radio" name="sync-env-source" id="sync-env-import-mode"><span><strong>.env ๊ฐ์ ธ์ค๊ธฐ</strong><small>ํ์ผ์ ์ ํํด ํ์ฌ ์น ์์
์ ์ ์ฉํฉ๋๋ค.</small></span></label>
|
|
12
|
+
</fieldset>
|
|
13
|
+
<div id="sync-env-import-controls" class="env-import-controls" hidden>
|
|
14
|
+
<input type="file" id="sync-env-file" hidden>
|
|
15
|
+
<div class="env-file-row"><button id="sync-env-choose" type="button">.env ํ์ผ ์ ํโฆ</button><span id="sync-env-file-name">์ ํํ ํ์ผ ์์</span></div>
|
|
16
|
+
<button id="sync-env-save" type="button" disabled>๊ธฐ์ค ํด๋์ .env ์ ์ฅ</button>
|
|
17
|
+
</div>
|
|
18
|
+
<p id="sync-env-source-note" class="hint">๋ก์ปฌ ๋ฌธ์์์ ์ ํํ ๊ธฐ์ค ํด๋์ .env๋ง ์ฝ์ต๋๋ค. ํ์ผ์ด ์์ผ๋ฉด .env๋ฅผ ๊ฐ์ ธ์ค์ธ์.</p>
|
|
19
|
+
<div class="env-config-summary"><h4>์ ์ฉ๋ ์ฐ๊ฒฐ ์ ๋ณด</h4>
|
|
20
|
+
<dl id="sync-config" class="sync-config"><dt>์ฐ๊ฒฐ ์ค์ </dt><dd>์ค์ ํ์ธ์ ๋๋ฅด๋ฉด ์๋ฒยท๊ณ์ ยท์คํ์ด์ค๋ฅผ ๋ณผ ์ ์์ต๋๋ค.</dd></dl>
|
|
15
21
|
<p id="sync-config-status" class="hint" role="status"></p>
|
|
16
|
-
|
|
17
|
-
<p class="hint">.confluence-syncignore์ ๊ธฐ์กด ํ์ด์ง ๋งคํ์ ์ ์ฉํฉ๋๋ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ ๋ก์ปฌ ๋ณ๊ฒฝ ๋น๊ต์ด๋ฉฐ ์๋ฒ ์ฐ๊ฒฐยท๊ถํ์ ๊ฒ์ฌํ์ง ์์ต๋๋ค.</p>
|
|
22
|
+
</div>
|
|
18
23
|
</div>
|
|
19
|
-
<div class="action-bar"><span class="save-note">๋จผ์ ๋์์ ํ์ธํ ๋ค ์
๋ก๋ํ์ธ์.</span><div class="actions"><button id="sync-preview" disabled>๋๊ธฐํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ</button><button id="sync-push" class="primary" disabled>Confluence์ ๋๊ธฐํ</button></div></div>
|
|
20
|
-
<div class="feedback"><p id="sync-status" class="status" role="status" aria-live="polite">๋ฌธ์๋ฅผ ์ ํํ๊ณ ๋๊ธฐํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์คํํ์ธ์.</p><button id="sync-reconnect" hidden>์งํ ์ํ ๋ค์ ํ์ธ</button></div>
|
|
21
24
|
</section>
|
|
22
|
-
<section class="panel sync-
|
|
23
|
-
<div class="panel-heading"><h2
|
|
24
|
-
<div class="sync-
|
|
25
|
+
<section class="panel sync-workbench" aria-label="Confluence ์์
์ค์ ">
|
|
26
|
+
<div class="panel-heading"><h2>Confluence</h2><span id="sync-stage-count" class="count">0๊ฐ ์
๋ก๋ ์์ </span></div>
|
|
27
|
+
<div class="sync-workbench-body">
|
|
28
|
+
<p id="sync-target" class="sync-target">๋ก์ปฌ ๋ฌธ์์์ ์คํ์ด์ค ์ ์ฒด๋ฅผ ๋ณด๊ดํ ๊ธฐ์ค ํด๋๋ฅผ ์ ํํ์ธ์.</p>
|
|
29
|
+
<div class="sync-workbench-toolbar">
|
|
30
|
+
<div class="actions" aria-label="์๊ฒฉ ๋ณ๊ฒฝ ํ์ธ ๋ฐ ๊ฐ์ ธ์ค๊ธฐ">
|
|
31
|
+
<button id="sync-fetch" type="button" title="์คํ์ด์ค์ ์ ๋ฌธ์์ ๋ฒ์ ยท์์น ๋ณ๊ฒฝ์ ํ์ธํฉ๋๋ค. 2๋ถ ์ด๋ด ๊ฒฐ๊ณผ๋ ์ฌ์ฌ์ฉํฉ๋๋ค." disabled>์๊ฒฉ ๋ณ๊ฒฝ ํ์ธ (Fetch)</button>
|
|
32
|
+
<button id="sync-pull-remote" type="button" disabled>โ ์๊ฒฉ ๋ณ๊ฒฝ ๊ฐ์ ธ์ค๊ธฐ (Pull)</button>
|
|
33
|
+
<label class="sync-pull-format" for="sync-pull-format">๊ฐ์ ธ์ค๊ธฐ ํ์<select id="sync-pull-format" aria-describedby="sync-pull-format-help"><option value="markdown">Markdown</option><option value="obsidian">Obsidian</option></select></label>
|
|
34
|
+
<button hidden id="sync-stage-scan" type="button">โป ๋ก์ปฌ ๋ค์ ํ์ธ</button>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="actions" aria-label="์
๋ก๋ ๋์ ์ผ๊ด ์ ํ">
|
|
37
|
+
<button id="sync-stage-add" type="button" disabled><span aria-hidden="true">๏ผ</span> ๋ณ๊ฒฝ ๋ฌธ์ ๋ชจ๋ ํฌํจ</button>
|
|
38
|
+
<button id="sync-stage-remove" type="button" disabled><span aria-hidden="true">โ</span> ๋ชจ๋ ์ ์ธ</button>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<p id="sync-pull-format-help" class="hint sync-pull-format-help">์ผ๋ฐ Markdown ๋งํฌ์ ์ ๋ชฉ์ด ์๋ ์ธ์ฉ๋ฌธ์ผ๋ก ๋ฐ์ต๋๋ค. ์ด ์ค์ ์ ์๋ก ๋ฐ๋ ๋ฌธ์์ ๋ณต๊ตฌยท์๋ณต์ ์ ์ฉํ๋ฉฐ ๊ธฐ์กด ํ์ผ์ ์ผ๊ด ๋ณํํ์ง ์์ต๋๋ค.</p>
|
|
42
|
+
<div class="sync-observation"><span id="sync-stage-checking" class="stage-checking" aria-hidden="true"><i class="activity-spinner" aria-hidden="true"></i>๋ก์ปฌ ํ์ธ ์คโฆ</span><span>๋ก์ปฌ ์๋ ํ์ธ ยท 5์ด ๊ฐ๊ฒฉ ยท API ํธ์ถ ์์</span><span id="sync-stage-remote-note">์๊ฒฉ ์ํ ๋ฏธํ์ธ ยท Fetch๋ก ๊ฐฑ์ ํ์ธ์.</span></div>
|
|
43
|
+
<div class="sync-change-heading"><h3 id="sync-stage-heading">๋ณ๊ฒฝ์ฌํญ</h3><span>๋ฐ์ ๋ฌธ์๋ Pull ยท ๋ณด๋ผ ๋ณ๊ฒฝ์ ์ฒดํฌ ํ Push</span></div>
|
|
44
|
+
<p id="sync-stage-note" class="hint" role="status">๋ก์ปฌ ๋ณ๊ฒฝ์ ์๋์ผ๋ก ํ์ธํฉ๋๋ค. ์๊ฒฉ ์ํ๋ Fetch๋ฅผ ๋๋ฌ ํ์ธํ์ธ์.</p>
|
|
45
|
+
<div id="sync-stage-list" class="sync-stage-list" aria-label="์
๋ก๋ ๋ฌธ์ ์ ํ"></div>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="sync-execution">
|
|
48
|
+
<div class="sync-execution-heading"><h3>์ ํ ๋ฌธ์ ์
๋ก๋</h3><span class="count">๋ก์ปฌ โ Confluence</span></div>
|
|
49
|
+
<p class="sync-intro">์ฒดํฌํ ๋ฌธ์๋ฅผ ๋ฏธ๋ฆฌ๋ณด๊ธฐํ ๋ค ์
๋ก๋ํ์ธ์.</p>
|
|
50
|
+
<details class="sync-advanced"><summary>์ถ๊ฐ ์ค์ <span>์ฐธ์กฐ ๋ฌธ์ ยท ์๊ฒฉ ๊ฒ์ฆ</span></summary>
|
|
51
|
+
<div class="sync-settings">
|
|
52
|
+
<div id="sync-push-options" class="sync-push-options">
|
|
53
|
+
<section class="sync-option-section" aria-labelledby="sync-reference-heading">
|
|
54
|
+
<h3 id="sync-reference-heading">์ฐธ์กฐ ๋ฌธ์ ์ฐ๊ฒฐ <span class="subtle-label">์ ํ ์ฌํญ</span></h3>
|
|
55
|
+
<p id="sync-references-help" class="hint">๋ค๋ฅธ ๋๊ธฐํ ํด๋์ ๊ฒ์ ๋งคํ์ ์ด์ฉํด ๋ฌธ์ ๋งํฌ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. ๊ฐ์ Confluence ์๋ฒ์ ํด๋๋ฅผ ์ง์ ํ์ธ์. ์ฐธ์กฐ ๋ฌธ์๋ ์
๋ก๋ํ์ง ์์ต๋๋ค.</p>
|
|
56
|
+
<div class="field"><label for="sync-references">์ฐธ์กฐ ๋ฌธ์ ํด๋ <span>ํ ์ค์ ํ ๊ฒฝ๋ก</span></label><textarea id="sync-references" class="path-input" rows="3" placeholder="๋ค๋ฅธ ๋๊ธฐํ ํด๋ ๊ฒฝ๋ก" aria-describedby="sync-references-help"></textarea></div>
|
|
57
|
+
<button id="sync-add-reference" type="button">์ฐธ์กฐ ํด๋ ์ถ๊ฐโฆ</button>
|
|
58
|
+
</section>
|
|
59
|
+
<section class="sync-option-section" aria-labelledby="sync-verify-heading">
|
|
60
|
+
<h3 id="sync-verify-heading">๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ์ธ ์ต์
</h3>
|
|
61
|
+
<label class="repair-option sync-verify-option"><input id="sync-verify" type="checkbox" aria-describedby="sync-verify-help">Confluence์ ์๊ฒฉ ๋ฒ์ ๊ณผ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ๋ ํ์ธ</label>
|
|
62
|
+
<p id="sync-verify-help" class="hint">์ ํํ๋ฉด ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ค Confluence๋ฅผ ์กฐํํ๋ฏ๋ก ์๊ฐ์ด ๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ํ์ผ๊ณผ ์๊ฒฉ ๋ด์ฉ์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.</p>
|
|
63
|
+
</section>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</details>
|
|
67
|
+
</div>
|
|
68
|
+
<div class="action-bar"><span class="save-note">๋ฐ์ ๋ณ๊ฒฝ๊ณผ ์ฒดํฌํ ์
๋ก๋ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.</span><div class="actions"><button id="sync-preview" disabled>์
๋ก๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ</button><button id="sync-push" class="primary" disabled>Confluence์ ์
๋ก๋</button></div></div>
|
|
69
|
+
<div class="feedback"><p id="sync-status" class="status" role="status" aria-live="polite">๋ณ๊ฒฝ์ฌํญ์ ํ์ธํ๊ณ ๋ฐ์ ๋ฌธ์์ ๋ณด๋ผ ๋ฌธ์๋ฅผ ์ ํํ์ธ์.</p><button id="sync-reconnect" hidden>์งํ ์ํ ๋ค์ ํ์ธ</button></div>
|
|
70
|
+
</section>
|
|
71
|
+
|
|
72
|
+
<dialog id="sync-diff-dialog" class="sync-diff-dialog" aria-labelledby="sync-diff-title">
|
|
73
|
+
<div class="panel-heading"><h2 id="sync-diff-title">๋ฌธ์ ๋ณ๊ฒฝ ๋น๊ต</h2><button id="sync-diff-close" type="button">๋ซ๊ธฐ</button></div>
|
|
74
|
+
<div class="settings-body"><p id="sync-diff-path" class="sync-diff-path"></p><p id="sync-diff-note" class="hint" role="status"></p>
|
|
75
|
+
<div class="actions"><button id="sync-diff-remote" type="button" hidden>์๊ฒฉ๊ณผ ๋น๊ต ยท ๋ณธ๋ฌธ 1ํ ์กฐํ</button></div>
|
|
76
|
+
<div id="sync-diff-labels" class="sync-diff-labels" hidden><span id="sync-diff-before-label">๊ธฐ์ค Markdown</span><span>ํ์ฌ ๋ก์ปฌ Markdown</span></div>
|
|
77
|
+
<div id="sync-diff-editor" class="sync-diff-editor" hidden></div>
|
|
78
|
+
</div>
|
|
79
|
+
</dialog>
|
|
80
|
+
<dialog id="sync-restore-dialog" class="env-confirm-dialog restore-dialog" aria-labelledby="sync-restore-title" aria-describedby="sync-restore-warning">
|
|
81
|
+
<h3 id="sync-restore-title">๋ฌธ์๋ฅผ ์๊ฒฉ ์ต์ ์ผ๋ก ๋ณต๊ตฌํ ๊น์?</h3>
|
|
82
|
+
<p id="sync-restore-path" class="sync-diff-path"></p>
|
|
83
|
+
<p id="sync-restore-warning" class="restore-warning"></p>
|
|
84
|
+
<p class="hint">์๊ฒฉ ๋ฌธ์๋ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. ๋ณต๊ตฌ ํ ์
๋ก๋ ์ ํ์์ ์ ์ธํฉ๋๋ค. ๋ค์ด๋ก๋ ๋์ค ์ถ๊ฐ ์์ ์ด ์๊ธฐ๋ฉด ์ค๋จํฉ๋๋ค.</p>
|
|
85
|
+
<div class="actions"><button id="sync-restore-cancel" type="button">์ทจ์</button><button id="sync-restore-confirm" type="button" class="restore-confirm">์๊ฒฉ์์ ๋ณต๊ตฌ</button></div>
|
|
86
|
+
</dialog>
|
|
87
|
+
<dialog id="sync-env-confirm" class="env-confirm-dialog" aria-labelledby="sync-env-confirm-title">
|
|
88
|
+
<h3 id="sync-env-confirm-title">๊ธฐ์กด .env์ ์ฐ๊ฒฐ ์ค์ ์ ๋ฐ๊ฟ๊น์?</h3>
|
|
89
|
+
<p id="sync-env-confirm-path" class="hint"></p>
|
|
90
|
+
<p>์๋ฒ ์ฃผ์, ๊ณ์ , API ํ ํฐ, ์คํ์ด์ค ํค๋ฅผ ๊ฐ์ ธ์จ ๊ฐ์ผ๋ก ๊ต์ฒดํฉ๋๋ค. ๋ค๋ฅธ ํ๊ฒฝ๋ณ์๋ ์ ์งํฉ๋๋ค.</p>
|
|
91
|
+
<div class="actions"><button id="sync-env-confirm-cancel" type="button">์ทจ์</button><button id="sync-env-confirm-save" type="button" class="primary">์ฐ๊ฒฐ ์ค์ ๊ต์ฒด ํ ์ ์ฅ</button></div>
|
|
92
|
+
</dialog>
|
|
93
|
+
<section id="sync-results" class="panel sync-results" aria-label="Confluence ์์
๋ด์ญ">
|
|
94
|
+
<div class="panel-heading"><h2>๋์ ๋ฐ ์คํ ๋ด์ญ</h2><div class="actions sync-log-actions"><span id="sync-job-state" class="count sync-job-status" role="status" hidden></span><button id="sync-log-download" type="button" disabled title="ํ์ฌ ์์
์ ์คํ ๋ด์ญ์ ๋ด๋ ค๋ฐ์ต๋๋ค. ์คํ ์ค์๋ ํ์ฌ๊น์ง์ ๋ก๊ทธ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค."><svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v12m-5-5 5 5 5-5M4 17v4h16v-4"/></svg>๋ก๊ทธ ๋ค์ด๋ก๋</button></div></div>
|
|
95
|
+
<div class="sync-result-body"><p id="sync-job-summary" class="hint" hidden></p><p id="sync-log-empty" class="empty">๋ฏธ๋ฆฌ๋ณด๊ธฐํ๋ฉด ๋ฌธ์๋ณ ์ ๊ทยท๋ณ๊ฒฝยท๋์ผ ์ํ์ ๋ถ๋ชจ ๊ณ์ธต์ ํ์ธํ ์ ์์ต๋๋ค.</p><pre id="sync-log" tabindex="0" aria-label="Confluence ์์
๋ก๊ทธ" hidden></pre></div>
|
|
25
96
|
</section>
|
|
26
97
|
</div>`;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Only annotated, account-redacted screenshots are included in the web build. */
|
|
2
|
+
const steps = [
|
|
3
|
+
['01-account-settings', '๊ณ์ ์ค์ ์ด๊ธฐ', 'Confluence ์ค๋ฅธ์ชฝ ์ ํ๋กํ ์์ด์ฝ์ ๋๋ฅธ ๋ค์ Account settings๋ฅผ ์ ํํฉ๋๋ค.'],
|
|
4
|
+
['02-atlassian-security', '๋ณด์ โ API ํ ํฐ ๊ด๋ฆฌ', '์๋จ ๋ณด์ ํญ์์ API ํ ํฐ ๋ง๋ค๊ธฐ ๋ฐ ๊ด๋ฆฌ๋ฅผ ๋๋ฆ
๋๋ค. ์๋ ๋ฐ๋ก๊ฐ๊ธฐ ๋งํฌ๋ก๋ ์ด๋ํ ์ ์์ต๋๋ค.'],
|
|
5
|
+
['03-api-tokens', '๋ฒ์๋ฅผ ํฌํจํ ํ ํฐ ๋ง๋ค๊ธฐ', '๋ฒ์๋ฅผ ํฌํจํ์ฌ API ํ ํฐ ๋ง๋ค๊ธฐ๋ฅผ ์ ํํฉ๋๋ค.'],
|
|
6
|
+
['04-scope-api-token-step1', '์ด๋ฆ๊ณผ ๋ง๋ฃ์ผ ์
๋ ฅ', 'Name์ ์ฉ๋๋ฅผ ์ ์ ์๋ ์ด๋ฆ(์: csync)์ ์
๋ ฅํ๊ณ ๋ง๋ฃ์ผ์ ์ ํ ๋ค ๋ค์์ผ๋ก ์งํํฉ๋๋ค. ์คํฌ๋ฆฐ์ท์ ๋ ์ง๋ ์์์
๋๋ค.'],
|
|
7
|
+
['05-scope-api-token-step2', 'Confluence ์ฑ ์ ํ', '์ฑ ๋ชฉ๋ก์์ Confluence๋ฅผ ์ ํํ๊ณ ๋ค์์ ๋๋ฆ
๋๋ค.'],
|
|
8
|
+
['06-scope-api-token-step3', 'ํ์ํ ๊ถํ ๊ฒ์ยท์ ํ', '๊ถํ ์ด๋ฆ์ ๊ฒ์ํ๊ณ ๊ฒฐ๊ณผ ์ผ์ชฝ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ ํํฉ๋๋ค. ํ์ํ ๊ถํ๋ง๋ค ๋ฐ๋ณตํ ๋ค ๋ค์์ผ๋ก ์งํํฉ๋๋ค. ์๋ ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํํ์ธ์.'],
|
|
9
|
+
['07-scope-api-token-step4', '๊ฒํ ํ ํ ํฐ ๋ง๋ค๊ธฐ', '์ด๋ฆยท๋ง๋ฃ์ผยท์ฑยท์ ํํ ๊ถํ์ ํ์ธํ๊ณ ํ ํฐ ๋ง๋ค๊ธฐ๋ฅผ ๋๋ฆ
๋๋ค. ํ๋ฉด์ read:space ํ๋๋ ์์์ด๋ฉฐ csync ์ ์ฒด ๊ธฐ๋ฅ์ ์ถฉ๋ถํ์ง ์์ต๋๋ค.'],
|
|
10
|
+
];
|
|
11
|
+
export const tokenGuide = `<section id="help-token"><h3>API ํ ํฐ ๋ฐ๊ธ ๊ฐ์ด๋</h3>
|
|
12
|
+
<p>๋นจ๊ฐ ํ
๋๋ฆฌ์ Click ํ์๋ฅผ ๋ฐ๋ผ ์งํํ์ธ์. ๊ณ์ ์ ๋ณด๋ ๊ฐ๋ ค์ ธ ์์ต๋๋ค. API ํ ํฐ์ ๊ถํ(scope)์ csync์์ ์ฒ๋ฆฌํ ๋ก์ปฌ ํ์ผยทํด๋ ์์
์ค์ฝํ์ ๋ณ๊ฐ์ ์ค์ ์
๋๋ค.</p>
|
|
13
|
+
<p><a href="https://id.atlassian.com/manage-profile/security/api-tokens" target="_blank" rel="noopener noreferrer">Atlassian API ํ ํฐ ๊ด๋ฆฌ ์ด๊ธฐ โ</a></p>
|
|
14
|
+
<div class="token-guide-steps guide-steps">${steps.map(([file, title, description], i) => `<details${i === 0 ? ' open' : ''}><summary>${i + 1}. ${title}</summary><p>${description}</p><figure><a href="/assets/guide/${file}.png" target="_blank" rel="noopener noreferrer" aria-label="${i + 1}๋จ๊ณ ์ด๋ฏธ์ง ์๋ณธ ํฌ๊ธฐ๋ก ๋ณด๊ธฐ"><img src="/assets/guide/${file}.png" alt="${title}: ๋นจ๊ฐ ํ
๋๋ฆฌ๋ก ํ์ํ ์กฐ์ ์์น" loading="lazy"></a><figcaption>์ด๋ฏธ์ง๋ฅผ ๋๋ฅด๋ฉด ์๋ณธ ํฌ๊ธฐ๋ก ๋ณผ ์ ์์ต๋๋ค.</figcaption></figure></details>`).join('')}</div>
|
|
15
|
+
<h4>csync์์ ์ฌ์ฉํ๋ ๊ถํ</h4>
|
|
16
|
+
<p>์๋ ์ด๋ฆ ์ ์ฒด๋ฅผ ๊ฒ์ํ์ธ์. ์กฐํยทPull์๋ ๊ธฐ๋ณธ ์ฝ๊ธฐ ๊ถํ์, Push์๋ ํ์ํ ์ฐ๊ธฐ ๊ถํ์ ์ถ๊ฐํฉ๋๋ค. ํ ํฐ ๊ณ์ ์์ฒด์๋ ๋์ ์คํ์ด์ค์ ํด๋น ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.</p>
|
|
17
|
+
<div class="token-scope-table"><table><thead><tr><th>์์
</th><th>๊ถํ</th></tr></thead><tbody>
|
|
18
|
+
<tr><td>์ค์ฝํ ํ์ยท๋ฌธ์ ์กฐํยทPull</td><td><code>read:space:confluence</code><br><code>read:page:confluence</code><br><code>read:content-details:confluence</code></td></tr>
|
|
19
|
+
<tr><td>ํ์ด์ง Push</td><td><code>write:page:confluence</code></td></tr>
|
|
20
|
+
<tr><td>์ด๋ฏธ์งยท์ฒจ๋ถ ๋ค์ด๋ก๋</td><td><code>read:attachment:confluence</code></td></tr>
|
|
21
|
+
<tr><td>์ด๋ฏธ์งยท์ฒจ๋ถ ์
๋ก๋</td><td><code>read:content-details:confluence</code><br><code>write:attachment:confluence</code></td></tr>
|
|
22
|
+
<tr><td>README ์๋ ํด๋ ์์ฑ</td><td><code>write:folder:confluence</code></td></tr>
|
|
23
|
+
</tbody></table></div>
|
|
24
|
+
<h4>๋ฐ๊ธํ ํ ํฐ ์ ์ฉ</h4><p>์์ฑ ์งํ Copy to clipboard๋ก ๋ณต์ฌํ์ฌ <code>.env</code>์ <code>CONFLUENCE_API_TOKEN</code>์ ๋ฃ์ต๋๋ค. ํ ํฐ์ ๋ฐ๊ธ ํ๋ฉด์ ๋ซ์ ๋ค ๋ค์ ํ์ธํ ์ ์์ต๋๋ค. ์น์ <strong>.env ๊ฐ์ ธ์ค๊ธฐ</strong>๋ก ์ ์ฉํ๊ฑฐ๋ ๊ธฐ์ค ํด๋์ <code>.env</code>๋ฅผ ๊ฐฑ์ ํ ๋ค <strong>์ค์ ํ์ธ</strong>์ ๋๋ฅด์ธ์.</p>
|
|
25
|
+
<p>๋ฒ์๋ฅผ ํฌํจํ ํ ํฐ์ <code>CONFLUENCE_BASE_URL</code>์ <code>https://api.atlassian.com/ex/confluence/<CLOUD_ID>/wiki</code> ํ์์
๋๋ค. Cloud ID๋ <code>https://<์ฌ์ดํธ>.atlassian.net/_edge/tenant_info</code>์ <code>cloudId</code> ๊ฐ์
๋๋ค.</p>
|
|
26
|
+
<p><a href="https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/" target="_blank" rel="noopener noreferrer">Atlassian ๊ณต์ ๋ฐ๊ธ ์๋ด โ</a> ยท <a href="https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content---children-and-descendants/" target="_blank" rel="noopener noreferrer">Confluence API ๊ถํ ๋ฌธ์ โ</a></p>
|
|
27
|
+
</section>`;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const screens = [
|
|
2
|
+
{ file: 'sync-workspace', title: 'FetchยทPull๊ณผ ์
๋ก๋ํ ๋ฌธ์ ์ ํ', width: 1440, height: 1280,
|
|
3
|
+
description: 'Fetch๋ก ์๊ฒฉ ์ ๊ทยท๋ณ๊ฒฝ์ ํ์ธํ๊ณ ๋ฐ์ ๋ฌธ์๋ Pull๋ก ๊ฐ์ ธ์ต๋๋ค. ๋ณด๋ผ ๋ฌธ์๋ง ์ฒดํฌํ ๋ค ์
๋ก๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์คํํด์ผ ์
๋ก๋ ๋ฒํผ์ด ํ์ฑํ๋ฉ๋๋ค.' },
|
|
4
|
+
{ file: 'remote-diff', title: '์๊ฒฉ ๋ณธ๋ฌธ๊ณผ ๋ก์ปฌ ๋ฌธ์ ๋น๊ต', width: 1120, height: 718,
|
|
5
|
+
description: '๋ฌธ์ ํ์ diff ๋ณด๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ํ์ฌ ์๊ฒฉ ๋ณธ๋ฌธ๊ณผ ๋ก์ปฌ Markdown์ ๋น๊ตํฉ๋๋ค. ์ผ์ชฝ์ ์๊ฒฉ HTML์ ๊ทผ์ฌ ๋ณํ๋ณธ, ์ค๋ฅธ์ชฝ์ ๋ก์ปฌ ๋ณธ๋ฌธ์
๋๋ค.' },
|
|
6
|
+
{ file: 'document-preview', title: '๋ฌธ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ํ ์์ ์ ๋ฆฌ', width: 1078, height: 867,
|
|
7
|
+
description: '์ผ์ชฝ์์ ํ์ผ์ ์ ํํ๊ณ ๋ฌธ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํผ์นฉ๋๋ค. ๋ฌธ์ ์์ ์ ๋ฆฌ์์ ๊ธฐ๋ณธ ์์์ด๋ ๋ชจ๋ ํ์ ๋ด์ฉ์ ๋ง์ถคยท๊ท ๋ฑ ๋ฐฐ๋ถ์ ์ ์ฉํ๊ณ , ๋ณ๊ฒฝ ๋น๊ต ํ ์ ์ฅํฉ๋๋ค.' },
|
|
8
|
+
];
|
|
9
|
+
export const usageGuide = `<section id="help-screens"><h3>ํ๋ฉด์ผ๋ก ๋ณด๊ธฐ</h3>
|
|
10
|
+
<p>๋ฌธ์์ Confluence ๋ฐ์ดํฐ๋ ์ฌ์ฉ๋ฒ ์ค๋ช
์ฉ ์์์
๋๋ค. ํ์ํ ํ๋ฉด์ ํผ์ณ ๋ณด์ธ์.</p>
|
|
11
|
+
<div class="guide-steps usage-guide-steps">${screens.map(({ file, title, description, width, height }) => `<details><summary>${title}</summary><p>${description}</p><figure><a href="/assets/guide/web/${file}.png" target="_blank" rel="noopener noreferrer" aria-label="${title} ํ๋ฉด ์๋ณธ ํฌ๊ธฐ๋ก ๋ณด๊ธฐ"><img src="/assets/guide/web/${file}.png" alt="${title} ์ฌ์ฉ ํ๋ฉด" width="${width}" height="${height}" loading="lazy" decoding="async"></a><figcaption>์ด๋ฏธ์ง๋ฅผ ๋๋ฅด๋ฉด ์ ํญ์์ ์๋ณธ ํฌ๊ธฐ๋ก ๋ณผ ์ ์์ต๋๋ค.</figcaption></figure></details>`).join('')}</div>
|
|
12
|
+
</section>`;
|