@mnaoumov/obsidian-lib 10.5.1 → 10.7.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/codemirror/inline-token-widgets/package.json +6 -0
- package/codemirror/settings-facet/package.json +6 -0
- package/command-handlers/open-discussion-command-handler/package.json +6 -0
- package/command-handlers/open-feature-request-command-handler/package.json +6 -0
- package/command-handlers/open-git-hub-command-handler/package.json +6 -0
- package/components/settings-facet-component/package.json +6 -0
- package/components/style-sheet-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +137 -1
- package/dist/lib/cjs/__merged.d.cts +26 -0
- package/dist/lib/cjs/anchored-suggest.cjs +232 -0
- package/dist/lib/cjs/anchored-suggest.d.cts +116 -0
- package/dist/lib/cjs/broken-link-candidates.cjs +366 -0
- package/dist/lib/cjs/broken-link-candidates.d.cts +181 -0
- package/dist/lib/cjs/bug-report.cjs +4 -2
- package/dist/lib/cjs/bug-report.d.cts +1 -1
- package/dist/lib/cjs/code-block-render-handoff.cjs +272 -0
- package/dist/lib/cjs/code-block-render-handoff.d.cts +131 -0
- package/dist/lib/cjs/codemirror/index.cjs +7 -1
- package/dist/lib/cjs/codemirror/index.d.cts +2 -0
- package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +250 -0
- package/dist/lib/cjs/codemirror/inline-token-widgets.d.cts +109 -0
- package/dist/lib/cjs/codemirror/settings-facet.cjs +132 -0
- package/dist/lib/cjs/codemirror/settings-facet.d.cts +19 -0
- package/dist/lib/cjs/command-handlers/index.cjs +10 -1
- package/dist/lib/cjs/command-handlers/index.d.cts +3 -0
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +9 -12
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +6 -8
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +127 -0
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.d.cts +45 -0
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +119 -0
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.d.cts +33 -0
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +121 -0
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.d.cts +43 -0
- package/dist/lib/cjs/components/index.cjs +7 -1
- package/dist/lib/cjs/components/index.d.cts +2 -0
- package/dist/lib/cjs/components/settings-facet-component.cjs +136 -0
- package/dist/lib/cjs/components/settings-facet-component.d.cts +68 -0
- package/dist/lib/cjs/components/style-sheet-component.cjs +198 -0
- package/dist/lib/cjs/components/style-sheet-component.d.cts +79 -0
- package/dist/lib/cjs/css-class.cjs +8 -1
- package/dist/lib/cjs/css-class.d.cts +28 -0
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +7 -4
- package/dist/lib/cjs/data-stores/data-store-transport.d.cts +1 -1
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +1 -1
- package/dist/lib/cjs/data-stores/shared-data-store.d.cts +1 -1
- package/dist/lib/cjs/desktop-git-runner.cjs +117 -0
- package/dist/lib/cjs/desktop-git-runner.d.cts +17 -0
- package/dist/lib/cjs/desktop-request-url-stream.cjs +258 -0
- package/dist/lib/cjs/desktop-request-url-stream.d.cts +22 -0
- package/dist/lib/cjs/editor-suggest-registrar.cjs +8 -2
- package/dist/lib/cjs/editor-suggest-registrar.d.cts +14 -2
- package/dist/lib/cjs/editor-suggest.cjs +197 -0
- package/dist/lib/cjs/editor-suggest.d.cts +103 -0
- package/dist/lib/cjs/feature-request.cjs +115 -0
- package/dist/lib/cjs/feature-request.d.cts +54 -0
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/git-hub-discussion.cjs +101 -0
- package/dist/lib/cjs/git-hub-discussion.d.cts +28 -0
- package/dist/lib/cjs/git-rename-history.cjs +148 -0
- package/dist/lib/cjs/git-rename-history.d.cts +43 -0
- package/dist/lib/cjs/hotkey.cjs +185 -0
- package/dist/lib/cjs/hotkey.d.cts +59 -0
- package/dist/lib/cjs/i18n/locales/en.cjs +13 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +12 -0
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +12 -0
- package/dist/lib/cjs/index.cjs +46 -1
- package/dist/lib/cjs/index.d.cts +15 -0
- package/dist/lib/cjs/inline-token-renderer.cjs +145 -0
- package/dist/lib/cjs/inline-token-renderer.d.cts +88 -0
- package/dist/lib/cjs/link-and-tag-input-suggest.cjs +325 -0
- package/dist/lib/cjs/link-and-tag-input-suggest.d.cts +229 -0
- package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -1
- package/dist/lib/cjs/markdown-code-block-processor.d.cts +18 -0
- package/dist/lib/cjs/markdown.cjs +6 -1
- package/dist/lib/cjs/markdown.d.cts +10 -1
- package/dist/lib/cjs/rendered-markdown.cjs +306 -0
- package/dist/lib/cjs/rendered-markdown.d.cts +77 -0
- package/dist/lib/cjs/request-url.cjs +523 -0
- package/dist/lib/cjs/request-url.d.cts +233 -0
- package/dist/lib/cjs/setting-components/folder-list-component.cjs +216 -0
- package/dist/lib/cjs/setting-components/folder-list-component.d.cts +73 -0
- package/dist/lib/cjs/setting-components/hotkey-component.cjs +260 -0
- package/dist/lib/cjs/setting-components/hotkey-component.d.cts +85 -0
- package/dist/lib/cjs/setting-components/index.cjs +13 -1
- package/dist/lib/cjs/setting-components/index.d.cts +4 -0
- package/dist/lib/cjs/setting-components/list-component.cjs +291 -0
- package/dist/lib/cjs/setting-components/list-component.d.cts +106 -0
- package/dist/lib/cjs/setting-components/tag-list-component.cjs +220 -0
- package/dist/lib/cjs/setting-components/tag-list-component.d.cts +82 -0
- package/dist/lib/cjs/setting-ex.cjs +51 -1
- package/dist/lib/cjs/setting-ex.d.cts +35 -1
- package/dist/lib/cjs/settings-tabs.cjs +258 -0
- package/dist/lib/cjs/settings-tabs.d.cts +101 -0
- package/dist/lib/cjs/vault.cjs +2 -2
- package/dist/lib/cjs/vault.d.cts +3 -1
- package/dist/lib/esm/__merged.d.mts +26 -0
- package/dist/lib/esm/__merged.mjs +139 -1
- package/dist/lib/esm/anchored-suggest.d.mts +116 -0
- package/dist/lib/esm/anchored-suggest.mjs +144 -0
- package/dist/lib/esm/broken-link-candidates.d.mts +181 -0
- package/dist/lib/esm/broken-link-candidates.mjs +275 -0
- package/dist/lib/esm/bug-report.d.mts +1 -1
- package/dist/lib/esm/bug-report.mjs +4 -2
- package/dist/lib/esm/code-block-render-handoff.d.mts +131 -0
- package/dist/lib/esm/code-block-render-handoff.mjs +183 -0
- package/dist/lib/esm/codemirror/index.d.mts +2 -0
- package/dist/lib/esm/codemirror/index.mjs +5 -1
- package/dist/lib/esm/codemirror/inline-token-widgets.d.mts +109 -0
- package/dist/lib/esm/codemirror/inline-token-widgets.mjs +167 -0
- package/dist/lib/esm/codemirror/settings-facet.d.mts +19 -0
- package/dist/lib/esm/codemirror/settings-facet.mjs +44 -0
- package/dist/lib/esm/command-handlers/index.d.mts +3 -0
- package/dist/lib/esm/command-handlers/index.mjs +7 -1
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +6 -8
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +9 -12
- package/dist/lib/esm/command-handlers/open-discussion-command-handler.d.mts +45 -0
- package/dist/lib/esm/command-handlers/open-discussion-command-handler.mjs +39 -0
- package/dist/lib/esm/command-handlers/open-feature-request-command-handler.d.mts +33 -0
- package/dist/lib/esm/command-handlers/open-feature-request-command-handler.mjs +31 -0
- package/dist/lib/esm/command-handlers/open-git-hub-command-handler.d.mts +43 -0
- package/dist/lib/esm/command-handlers/open-git-hub-command-handler.mjs +33 -0
- package/dist/lib/esm/components/index.d.mts +2 -0
- package/dist/lib/esm/components/index.mjs +5 -1
- package/dist/lib/esm/components/settings-facet-component.d.mts +68 -0
- package/dist/lib/esm/components/settings-facet-component.mjs +48 -0
- package/dist/lib/esm/components/style-sheet-component.d.mts +79 -0
- package/dist/lib/esm/components/style-sheet-component.mjs +109 -0
- package/dist/lib/esm/css-class.d.mts +28 -0
- package/dist/lib/esm/css-class.mjs +8 -1
- package/dist/lib/esm/data-stores/data-store-transport.d.mts +1 -1
- package/dist/lib/esm/data-stores/data-store-transport.mjs +7 -4
- package/dist/lib/esm/data-stores/shared-data-store.d.mts +1 -1
- package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
- package/dist/lib/esm/desktop-git-runner.d.mts +17 -0
- package/dist/lib/esm/desktop-git-runner.mjs +19 -0
- package/dist/lib/esm/desktop-request-url-stream.d.mts +22 -0
- package/dist/lib/esm/desktop-request-url-stream.mjs +170 -0
- package/dist/lib/esm/editor-suggest-registrar.d.mts +14 -2
- package/dist/lib/esm/editor-suggest-registrar.mjs +8 -2
- package/dist/lib/esm/editor-suggest.d.mts +103 -0
- package/dist/lib/esm/editor-suggest.mjs +108 -0
- package/dist/lib/esm/feature-request.d.mts +54 -0
- package/dist/lib/esm/feature-request.mjs +25 -0
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/git-hub-discussion.d.mts +28 -0
- package/dist/lib/esm/git-hub-discussion.mjs +13 -0
- package/dist/lib/esm/git-rename-history.d.mts +43 -0
- package/dist/lib/esm/git-rename-history.mjs +59 -0
- package/dist/lib/esm/hotkey.d.mts +59 -0
- package/dist/lib/esm/hotkey.mjs +95 -0
- package/dist/lib/esm/i18n/locales/en.d.mts +12 -0
- package/dist/lib/esm/i18n/locales/en.mjs +13 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +12 -0
- package/dist/lib/esm/index.d.mts +15 -0
- package/dist/lib/esm/index.mjs +31 -1
- package/dist/lib/esm/inline-token-renderer.d.mts +88 -0
- package/dist/lib/esm/inline-token-renderer.mjs +59 -0
- package/dist/lib/esm/link-and-tag-input-suggest.d.mts +229 -0
- package/dist/lib/esm/link-and-tag-input-suggest.mjs +239 -0
- package/dist/lib/esm/markdown-code-block-processor.d.mts +18 -0
- package/dist/lib/esm/markdown-code-block-processor.mjs +16 -1
- package/dist/lib/esm/markdown.d.mts +10 -1
- package/dist/lib/esm/markdown.mjs +9 -1
- package/dist/lib/esm/rendered-markdown.d.mts +77 -0
- package/dist/lib/esm/rendered-markdown.mjs +219 -0
- package/dist/lib/esm/request-url.d.mts +233 -0
- package/dist/lib/esm/request-url.mjs +428 -0
- package/dist/lib/esm/setting-components/folder-list-component.d.mts +73 -0
- package/dist/lib/esm/setting-components/folder-list-component.mjs +131 -0
- package/dist/lib/esm/setting-components/hotkey-component.d.mts +85 -0
- package/dist/lib/esm/setting-components/hotkey-component.mjs +178 -0
- package/dist/lib/esm/setting-components/index.d.mts +4 -0
- package/dist/lib/esm/setting-components/index.mjs +9 -1
- package/dist/lib/esm/setting-components/list-component.d.mts +106 -0
- package/dist/lib/esm/setting-components/list-component.mjs +206 -0
- package/dist/lib/esm/setting-components/tag-list-component.d.mts +82 -0
- package/dist/lib/esm/setting-components/tag-list-component.mjs +131 -0
- package/dist/lib/esm/setting-ex.d.mts +35 -1
- package/dist/lib/esm/setting-ex.mjs +51 -1
- package/dist/lib/esm/settings-tabs.d.mts +101 -0
- package/dist/lib/esm/settings-tabs.mjs +170 -0
- package/dist/lib/esm/vault.d.mts +3 -1
- package/dist/lib/esm/vault.mjs +2 -2
- package/dist/styles.css +83 -1
- package/package.json +2 -2
- package/setting-components/folder-list-component/package.json +6 -0
- package/setting-components/hotkey-component/package.json +6 -0
- package/setting-components/list-component/package.json +6 -0
- package/setting-components/tag-list-component/package.json +6 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
(function patchObsidianRequire() {
|
|
33
|
+
const originalRequire = require;
|
|
34
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
require = Object.assign(
|
|
38
|
+
(id) => requirePatched(id),
|
|
39
|
+
originalRequire,
|
|
40
|
+
{
|
|
41
|
+
__isPatched: true
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
|
+
}
|
|
47
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
|
+
"@codemirror/autocomplete",
|
|
49
|
+
"@codemirror/collab",
|
|
50
|
+
"@codemirror/commands",
|
|
51
|
+
"@codemirror/language",
|
|
52
|
+
"@codemirror/lint",
|
|
53
|
+
"@codemirror/search",
|
|
54
|
+
"@codemirror/state",
|
|
55
|
+
"@codemirror/text",
|
|
56
|
+
"@codemirror/view",
|
|
57
|
+
"@lezer/common",
|
|
58
|
+
"@lezer/highlight",
|
|
59
|
+
"@lezer/lr",
|
|
60
|
+
"obsidian"
|
|
61
|
+
]);
|
|
62
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
63
|
+
"@codemirror/closebrackets",
|
|
64
|
+
"@codemirror/comment",
|
|
65
|
+
"@codemirror/fold",
|
|
66
|
+
"@codemirror/gutter",
|
|
67
|
+
"@codemirror/highlight",
|
|
68
|
+
"@codemirror/history",
|
|
69
|
+
"@codemirror/matchbrackets",
|
|
70
|
+
"@codemirror/panel",
|
|
71
|
+
"@codemirror/rangeset",
|
|
72
|
+
"@codemirror/rectangular-selection",
|
|
73
|
+
"@codemirror/stream-parser",
|
|
74
|
+
"@codemirror/tooltip"
|
|
75
|
+
]);
|
|
76
|
+
function requirePatched(id) {
|
|
77
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
78
|
+
return originalRequire?.(id);
|
|
79
|
+
}
|
|
80
|
+
const app = globalThis.app;
|
|
81
|
+
if (app?.isMobile) {
|
|
82
|
+
if (id === "process" || id === "node:process") {
|
|
83
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
84
|
+
return process;
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
})();
|
|
96
|
+
|
|
97
|
+
"use strict";
|
|
98
|
+
var __defProp = Object.defineProperty;
|
|
99
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
100
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
101
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
102
|
+
var __export = (target, all) => {
|
|
103
|
+
for (var name in all)
|
|
104
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
105
|
+
};
|
|
106
|
+
var __copyProps = (to, from, except, desc) => {
|
|
107
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
108
|
+
for (let key of __getOwnPropNames(from))
|
|
109
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
110
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
111
|
+
}
|
|
112
|
+
return to;
|
|
113
|
+
};
|
|
114
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
115
|
+
var rendered_markdown_exports = {};
|
|
116
|
+
__export(rendered_markdown_exports, {
|
|
117
|
+
isOwnedByRenderedMarkdown: () => isOwnedByRenderedMarkdown,
|
|
118
|
+
registerFoldHandlers: () => registerFoldHandlers,
|
|
119
|
+
registerFootnoteLinkHandler: () => registerFootnoteLinkHandler
|
|
120
|
+
});
|
|
121
|
+
module.exports = __toCommonJS(rendered_markdown_exports);
|
|
122
|
+
var import_async = require('@mnaoumov/typescript-lib/async');
|
|
123
|
+
var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
|
|
124
|
+
var import_obsidian = require('obsidian');
|
|
125
|
+
var import_css_class = require('./css-class.cjs');
|
|
126
|
+
const FLASH_DURATION_IN_MILLISECONDS = 3e3;
|
|
127
|
+
const FOLD_ICON = "right-triangle";
|
|
128
|
+
const HEADING_TAG_NAMES = /* @__PURE__ */ new Set(["H1", "H2", "H3", "H4", "H5", "H6"]);
|
|
129
|
+
function isOwnedByRenderedMarkdown(element, rootEl) {
|
|
130
|
+
let current = element;
|
|
131
|
+
while (current) {
|
|
132
|
+
if (current === rootEl) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
if (current.hasClass("markdown-preview-view") || current.hasClass("bases-view")) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
current = current.parentElement;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
function registerFoldHandlers(params) {
|
|
143
|
+
const {
|
|
144
|
+
el,
|
|
145
|
+
shouldFoldHeadings = true,
|
|
146
|
+
shouldFoldLists = true
|
|
147
|
+
} = params;
|
|
148
|
+
el.addClass(import_css_class.CssClass.LibraryName, import_css_class.CssClass.FoldableMarkdown);
|
|
149
|
+
if (shouldFoldHeadings) {
|
|
150
|
+
for (const block of getBlocks(el)) {
|
|
151
|
+
const headingEl = getBlockHeading(block);
|
|
152
|
+
if (headingEl && !headingEl.querySelector(":scope > .heading-collapse-indicator")) {
|
|
153
|
+
addIndicator(headingEl, "heading-collapse-indicator");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (shouldFoldLists) {
|
|
158
|
+
for (const listItemEl of el.findAll("li")) {
|
|
159
|
+
if (isOwnedByRenderedMarkdown(listItemEl, el) && listItemEl.querySelector(":scope > ul, :scope > ol") && !listItemEl.querySelector(":scope > .list-collapse-indicator")) {
|
|
160
|
+
addIndicator(listItemEl, "list-collapse-indicator");
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (registeredFoldEls.has(el)) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
registeredFoldEls.add(el);
|
|
168
|
+
el.on("click", ".heading-collapse-indicator", (clickEvent, indicatorEl) => {
|
|
169
|
+
handleIndicatorClick(clickEvent, indicatorEl, el, (headingEl) => {
|
|
170
|
+
if (!isHeading(headingEl)) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
toggleCollapsed(headingEl, !headingEl.hasClass("is-collapsed"));
|
|
174
|
+
updateFoldedBlocks(el);
|
|
175
|
+
el.win.getSelection()?.removeAllRanges();
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
el.on("click", "li > .list-collapse-indicator", (clickEvent, indicatorEl) => {
|
|
179
|
+
handleIndicatorClick(clickEvent, indicatorEl, el, (listItemEl) => {
|
|
180
|
+
toggleCollapsed(listItemEl, !listItemEl.hasClass("is-collapsed"));
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function registerFootnoteLinkHandler(params) {
|
|
185
|
+
const { el } = params;
|
|
186
|
+
el.on("click", "a.footnote-link", (clickEvent, linkEl) => {
|
|
187
|
+
if (clickEvent.button !== 0 || !isOwnedByRenderedMarkdown(linkEl, el)) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
clickEvent.preventDefault();
|
|
191
|
+
const href = linkEl.getAttr("href");
|
|
192
|
+
if (!href?.startsWith("#")) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const footnoteId = href.slice(1);
|
|
196
|
+
const targetEl = el.findAll("[data-footnote-id]").find((candidateEl) => candidateEl.getAttr("data-footnote-id") === footnoteId);
|
|
197
|
+
if (!targetEl) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
unfoldAncestors(targetEl, el);
|
|
201
|
+
targetEl.scrollIntoView({ block: "center" });
|
|
202
|
+
flash(targetEl, el);
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
const registeredFoldEls = /* @__PURE__ */ new WeakSet();
|
|
206
|
+
function addIndicator(parentEl, cls) {
|
|
207
|
+
const indicatorEl = parentEl.createSpan({
|
|
208
|
+
cls: [cls, "collapse-indicator", "collapse-icon"],
|
|
209
|
+
prepend: true
|
|
210
|
+
});
|
|
211
|
+
(0, import_obsidian.setIcon)(indicatorEl, FOLD_ICON);
|
|
212
|
+
}
|
|
213
|
+
function flash(targetEl, rootEl) {
|
|
214
|
+
for (const flashingEl of rootEl.findAll(".is-flashing")) {
|
|
215
|
+
flashingEl.removeClass("is-flashing");
|
|
216
|
+
}
|
|
217
|
+
targetEl.addClass("is-flashing");
|
|
218
|
+
(0, import_async.invokeAsyncSafely)(async () => {
|
|
219
|
+
await (0, import_async.sleep)({ milliseconds: FLASH_DURATION_IN_MILLISECONDS });
|
|
220
|
+
targetEl.removeClass("is-flashing");
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
function getBlockHeading(block) {
|
|
224
|
+
if (isHeading(block)) {
|
|
225
|
+
return block;
|
|
226
|
+
}
|
|
227
|
+
const firstChild = block.firstElementChild;
|
|
228
|
+
return firstChild && isHeading(firstChild) ? firstChild : null;
|
|
229
|
+
}
|
|
230
|
+
function getBlockHeadingLevel(block) {
|
|
231
|
+
const headingEl = getBlockHeading(block);
|
|
232
|
+
return headingEl ? getHeadingLevel(headingEl) : null;
|
|
233
|
+
}
|
|
234
|
+
function getBlocks(rootEl) {
|
|
235
|
+
return rootEl.findAll(":scope > *");
|
|
236
|
+
}
|
|
237
|
+
function getHeadingLevel(headingEl) {
|
|
238
|
+
return Number(headingEl.tagName.slice(1));
|
|
239
|
+
}
|
|
240
|
+
function handleIndicatorClick(clickEvent, indicatorEl, rootEl, toggle) {
|
|
241
|
+
if (clickEvent.button !== 0 || clickEvent.defaultPrevented || !isOwnedByRenderedMarkdown(indicatorEl, rootEl)) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
clickEvent.preventDefault();
|
|
245
|
+
toggle((0, import_type_guards.ensureNonNullable)(indicatorEl.parentElement));
|
|
246
|
+
}
|
|
247
|
+
function isHeading(element) {
|
|
248
|
+
return HEADING_TAG_NAMES.has(element.tagName);
|
|
249
|
+
}
|
|
250
|
+
function toggleCollapsed(parentEl, isCollapsed) {
|
|
251
|
+
parentEl.toggleClass("is-collapsed", isCollapsed);
|
|
252
|
+
parentEl.querySelector(":scope > .collapse-icon")?.toggleClass("is-collapsed", isCollapsed);
|
|
253
|
+
}
|
|
254
|
+
function unfoldAncestors(targetEl, rootEl) {
|
|
255
|
+
let targetBlock = targetEl;
|
|
256
|
+
for (; ; ) {
|
|
257
|
+
if (targetBlock.tagName === "LI" && targetBlock.hasClass("is-collapsed")) {
|
|
258
|
+
toggleCollapsed(targetBlock, false);
|
|
259
|
+
}
|
|
260
|
+
const parentEl = (0, import_type_guards.ensureNonNullable)(targetBlock.parentElement);
|
|
261
|
+
if (parentEl === rootEl) {
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
targetBlock = parentEl;
|
|
265
|
+
}
|
|
266
|
+
const blocks = getBlocks(rootEl);
|
|
267
|
+
let level = getBlockHeadingLevel(targetBlock) ?? Infinity;
|
|
268
|
+
let hasUnfolded = false;
|
|
269
|
+
for (let index = blocks.indexOf(targetBlock) - 1; index >= 0; index--) {
|
|
270
|
+
const headingEl = getBlockHeading((0, import_type_guards.ensureNonNullable)(blocks[index]));
|
|
271
|
+
if (!headingEl || getHeadingLevel(headingEl) >= level) {
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
level = getHeadingLevel(headingEl);
|
|
275
|
+
if (!headingEl.hasClass("is-collapsed")) {
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
toggleCollapsed(headingEl, false);
|
|
279
|
+
hasUnfolded = true;
|
|
280
|
+
}
|
|
281
|
+
if (hasUnfolded) {
|
|
282
|
+
updateFoldedBlocks(rootEl);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
function updateFoldedBlocks(rootEl) {
|
|
286
|
+
let foldedLevel = null;
|
|
287
|
+
for (const block of getBlocks(rootEl)) {
|
|
288
|
+
const headingEl = getBlockHeading(block);
|
|
289
|
+
const headingLevel = headingEl ? getHeadingLevel(headingEl) : null;
|
|
290
|
+
if (foldedLevel !== null && headingLevel !== null && headingLevel <= foldedLevel) {
|
|
291
|
+
foldedLevel = null;
|
|
292
|
+
}
|
|
293
|
+
const isShown = foldedLevel === null;
|
|
294
|
+
block.toggle(isShown);
|
|
295
|
+
if (isShown && headingEl?.hasClass("is-collapsed")) {
|
|
296
|
+
foldedLevel = headingLevel;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
301
|
+
0 && (module.exports = {
|
|
302
|
+
isOwnedByRenderedMarkdown,
|
|
303
|
+
registerFoldHandlers,
|
|
304
|
+
registerFootnoteLinkHandler
|
|
305
|
+
});
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW5kZXJlZC1tYXJrZG93bi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHBhcnRzIG9mIGEgUmVhZGluZyB2aWV3J3MgYmVoYXZpb3IgdGhhdCBPYnNpZGlhbiBrZWVwcyBpbnNpZGUgaXRzIHByZXZpZXcgcmVuZGVyZXIsIHBvcnRlZCBmb3JcbiAqIG1hcmtkb3duIHJlbmRlcmVkIGFueXdoZXJlIGVsc2Ugd2l0aCBgTWFya2Rvd25SZW5kZXJlci5yZW5kZXJgLlxuICpcbiAqIGBNYXJrZG93blByZXZpZXdSZW5kZXJlci5yZWdpc3RlckRvbUV2ZW50c2AgY292ZXJzIGludGVybmFsIGFuZCBleHRlcm5hbCBsaW5rcywgdGFncywgZHJhZ3MsIGNvbnRleHRcbiAqIG1lbnVzIGFuZCB0aGUgZm9vdG5vdGUgSE9WRVIuIFRocmVlIHRoaW5ncyBpdCBkb2VzIG5vdCBjb3ZlciwgcmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgOiB0aGUgZm9vdG5vdGVcbiAqIENMSUNLIChgb25Gb290bm90ZUxpbmtDbGlja2ApLCBhbmQgdGhlIGhlYWRpbmcgYW5kIGxpc3QgRk9MRElORywgd2hvc2UgaW5kaWNhdG9ycyB0aGUgcmVuZGVyZXIgb25seSBhZGRzXG4gKiBpbiBpdHMgb3duIGBvblJlbmRlcmAgYW5kIHdob3NlIGNsaWNrcyBvbmx5IGl0IGhhbmRsZXMuIFdpdGhvdXQgdGhlc2UsIGEgZm9vdG5vdGUgY2xpY2sgaW4gc3RhbmRhbG9uZVxuICogcmVuZGVyZWQgbWFya2Rvd24gZmFsbHMgdGhyb3VnaCB0byB0aGUgYnJvd3NlcidzIGhhc2ggbmF2aWdhdGlvbiwgYW5kIG5vdGhpbmcgY2FuIGJlIGZvbGRlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBpbnZva2VBc3luY1NhZmVseSxcbiAgc2xlZXBcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHNldEljb24gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi9jc3MtY2xhc3MudHMnO1xuXG4vKipcbiAqIEhvdyBsb25nIGEgZm9vdG5vdGUncyB0YXJnZXQgc3RheXMgaGlnaGxpZ2h0ZWQgYWZ0ZXIgYSBjbGljayB0b29rIGl0IHRoZXJlLCBhcyBpbiBPYnNpZGlhbidzIG93blxuICogYGhpZ2hsaWdodEVsYC5cbiAqL1xuY29uc3QgRkxBU0hfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTID0gMzAwMDtcblxuY29uc3QgRk9MRF9JQ09OID0gJ3JpZ2h0LXRyaWFuZ2xlJztcblxuY29uc3QgSEVBRElOR19UQUdfTkFNRVMgPSBuZXcgU2V0KFsnSDEnLCAnSDInLCAnSDMnLCAnSDQnLCAnSDUnLCAnSDYnXSk7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlZ2lzdGVyRm9sZEhhbmRsZXJzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckZvbGRIYW5kbGVyc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCBtYXJrZG93biB3YXMgcmVuZGVyZWQgaW50bywgdGhlIG9uZSBgTWFya2Rvd25SZW5kZXJlci5yZW5kZXJgIHdhcyBoYW5kZWQuIEl0cyBkaXJlY3RcbiAgICogY2hpbGRyZW4gYXJlIHRoZSByZW5kZXJlZCBibG9ja3MgYSBmb2xkZWQgaGVhZGluZyBoaWRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogV2hldGhlciBoZWFkaW5ncyBjYW4gYmUgZm9sZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZvbGRIZWFkaW5ncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgbGlzdCBpdGVtcyB3aXRoIGEgbmVzdGVkIGxpc3QgY2FuIGJlIGZvbGRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGb2xkTGlzdHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlckZvb3Rub3RlTGlua0hhbmRsZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRm9vdG5vdGVMaW5rSGFuZGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCBtYXJrZG93biB3YXMgcmVuZGVyZWQgaW50by5cbiAgICovXG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGFuIGVsZW1lbnQgYmVsb25ncyB0byB0aGUgbWFya2Rvd24gcmVuZGVyZWQgaW50byBgcm9vdEVsYCwgcmF0aGVyIHRoYW4gdG8gYSBSZWFkaW5nIHZpZXcgb3IgYVxuICogQmFzZXMgdmlldyBuZXN0ZWQgaW5zaWRlIGl0IChhbiBlbWJlZCksIHdoaWNoIGhhbmRsZXMgaXRzIG93biBldmVudHMuIEEgcG9ydCBvZiBPYnNpZGlhbidzIHN0YXRpY1xuICogYE1hcmtkb3duUHJldmlld1JlbmRlcmVyLmJlbG9uZ3NUb01lYCwgd2hpY2ggYG9ic2lkaWFuLXR5cGluZ3NgIGRvZXMgbm90IGRlY2xhcmUuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCBhbiBldmVudCBsYW5kZWQgb24uXG4gKiBAcGFyYW0gcm9vdEVsIC0gVGhlIGVsZW1lbnQgbWFya2Rvd24gd2FzIHJlbmRlcmVkIGludG8uXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIGByb290RWxgIGl0c2VsZiBvciBzaXRzIGluc2lkZSBpdCB3aXRoIG5vIG5lc3RlZCB2aWV3IGluIGJldHdlZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc093bmVkQnlSZW5kZXJlZE1hcmtkb3duKGVsZW1lbnQ6IEVsZW1lbnQsIHJvb3RFbDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgbGV0IGN1cnJlbnQ6IEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gcm9vdEVsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnQuaGFzQ2xhc3MoJ21hcmtkb3duLXByZXZpZXctdmlldycpIHx8IGN1cnJlbnQuaGFzQ2xhc3MoJ2Jhc2VzLXZpZXcnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgaGVhZGluZ3MgYW5kIHRoZSBuZXN0ZWQgbGlzdHMgb2YgcmVuZGVyZWQgbWFya2Rvd24gZm9sZGFibGUsIHRoZSB3YXkgdGhleSBhcmUgaW4gYSBSZWFkaW5nXG4gKiB2aWV3OiBpdCBhZGRzIE9ic2lkaWFuJ3Mgb3duIGNvbGxhcHNlIGluZGljYXRvcnMgYW5kIGhhbmRsZXMgdGhlaXIgY2xpY2tzLlxuICpcbiAqIEEgZm9sZGVkIGhlYWRpbmcgaGlkZXMgZXZlcnkgYmxvY2sgYWZ0ZXIgaXQgdXAgdG8gdGhlIG5leHQgaGVhZGluZyBvZiB0aGUgc2FtZSBvciBhIGhpZ2hlciBsZXZlbDtcbiAqIHVuZm9sZGluZyBpdCBzaG93cyB0aGVtIGFnYWluLCBleGNlcHQgdGhvc2UgYSBmb2xkZWQgaGVhZGluZyBhbW9uZyB0aGVtIHN0aWxsIGhpZGVzLiBBIGZvbGRlZCBsaXN0XG4gKiBpdGVtIGhpZGVzIGl0cyBuZXN0ZWQgbGlzdHMuIENhbGwgaXQgYWdhaW4gYWZ0ZXIgdGhlIGVsZW1lbnQgaXMgcmUtcmVuZGVyZWQ6IGJsb2NrcyB0aGF0IGFscmVhZHkgaGF2ZVxuICogYW4gaW5kaWNhdG9yIGFyZSBsZWZ0IGFsb25lLCBhbmQgdGhlIGNsaWNrIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBvbmx5IG9uY2UgcGVyIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGb2xkSGFuZGxlcnMocGFyYW1zOiBSZWdpc3RlckZvbGRIYW5kbGVyc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgZWwsXG4gICAgc2hvdWxkRm9sZEhlYWRpbmdzID0gdHJ1ZSxcbiAgICBzaG91bGRGb2xkTGlzdHMgPSB0cnVlXG4gIH0gPSBwYXJhbXM7XG5cbiAgZWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuTGlicmFyeU5hbWUsIENzc0NsYXNzLkZvbGRhYmxlTWFya2Rvd24pO1xuXG4gIGlmIChzaG91bGRGb2xkSGVhZGluZ3MpIHtcbiAgICBmb3IgKGNvbnN0IGJsb2NrIG9mIGdldEJsb2NrcyhlbCkpIHtcbiAgICAgIGNvbnN0IGhlYWRpbmdFbCA9IGdldEJsb2NrSGVhZGluZyhibG9jayk7XG4gICAgICBpZiAoaGVhZGluZ0VsICYmICFoZWFkaW5nRWwucXVlcnlTZWxlY3RvcignOnNjb3BlID4gLmhlYWRpbmctY29sbGFwc2UtaW5kaWNhdG9yJykpIHtcbiAgICAgICAgYWRkSW5kaWNhdG9yKGhlYWRpbmdFbCwgJ2hlYWRpbmctY29sbGFwc2UtaW5kaWNhdG9yJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHNob3VsZEZvbGRMaXN0cykge1xuICAgIGZvciAoY29uc3QgbGlzdEl0ZW1FbCBvZiBlbC5maW5kQWxsKCdsaScpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzT3duZWRCeVJlbmRlcmVkTWFya2Rvd24obGlzdEl0ZW1FbCwgZWwpXG4gICAgICAgICYmIGxpc3RJdGVtRWwucXVlcnlTZWxlY3RvcignOnNjb3BlID4gdWwsIDpzY29wZSA+IG9sJylcbiAgICAgICAgJiYgIWxpc3RJdGVtRWwucXVlcnlTZWxlY3RvcignOnNjb3BlID4gLmxpc3QtY29sbGFwc2UtaW5kaWNhdG9yJylcbiAgICAgICkge1xuICAgICAgICBhZGRJbmRpY2F0b3IobGlzdEl0ZW1FbCwgJ2xpc3QtY29sbGFwc2UtaW5kaWNhdG9yJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlZ2lzdGVyZWRGb2xkRWxzLmhhcyhlbCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVnaXN0ZXJlZEZvbGRFbHMuYWRkKGVsKTtcblxuICBlbC5vbignY2xpY2snLCAnLmhlYWRpbmctY29sbGFwc2UtaW5kaWNhdG9yJywgKGNsaWNrRXZlbnQsIGluZGljYXRvckVsKSA9PiB7XG4gICAgaGFuZGxlSW5kaWNhdG9yQ2xpY2soY2xpY2tFdmVudCwgaW5kaWNhdG9yRWwsIGVsLCAoaGVhZGluZ0VsKSA9PiB7XG4gICAgICBpZiAoIWlzSGVhZGluZyhoZWFkaW5nRWwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRvZ2dsZUNvbGxhcHNlZChoZWFkaW5nRWwsICFoZWFkaW5nRWwuaGFzQ2xhc3MoJ2lzLWNvbGxhcHNlZCcpKTtcbiAgICAgIHVwZGF0ZUZvbGRlZEJsb2NrcyhlbCk7XG4gICAgICBlbC53aW4uZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIH0pO1xuICB9KTtcblxuICBlbC5vbignY2xpY2snLCAnbGkgPiAubGlzdC1jb2xsYXBzZS1pbmRpY2F0b3InLCAoY2xpY2tFdmVudCwgaW5kaWNhdG9yRWwpID0+IHtcbiAgICBoYW5kbGVJbmRpY2F0b3JDbGljayhjbGlja0V2ZW50LCBpbmRpY2F0b3JFbCwgZWwsIChsaXN0SXRlbUVsKSA9PiB7XG4gICAgICB0b2dnbGVDb2xsYXBzZWQobGlzdEl0ZW1FbCwgIWxpc3RJdGVtRWwuaGFzQ2xhc3MoJ2lzLWNvbGxhcHNlZCcpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogTWFrZXMgYSBmb290bm90ZSBsaW5rIGluIHJlbmRlcmVkIG1hcmtkb3duIGFjdCBhcyBpdCBkb2VzIGluIGEgUmVhZGluZyB2aWV3OiBhIGNsaWNrIHNjcm9sbHMgdG8gdGhlXG4gKiBmb290bm90ZSwgb3IgYmFjayB0byBpdHMgcmVmZXJlbmNlLCBhbmQgZmxhc2hlcyBpdCwgaW5zdGVhZCBvZiBuYXZpZ2F0aW5nIHRvIHRoZSBsaW5rJ3MgYCNgIGhhc2guXG4gKlxuICogUmVnaXN0ZXJlZCBieSBgcmVnaXN0ZXJMaW5rSGFuZGxlcnNgLCB3aGljaCBpcyB0aGUgdXN1YWwgd2F5IGluOyBjYWxsIGl0IGRpcmVjdGx5IG9ubHkgZm9yIGFuIGVsZW1lbnRcbiAqIHdob3NlIG90aGVyIGxpbmtzIGFyZSBoYW5kbGVkIHNvbWUgb3RoZXIgd2F5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRm9vdG5vdGVMaW5rSGFuZGxlcihwYXJhbXM6IFJlZ2lzdGVyRm9vdG5vdGVMaW5rSGFuZGxlclBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGVsIH0gPSBwYXJhbXM7XG4gIGVsLm9uKCdjbGljaycsICdhLmZvb3Rub3RlLWxpbmsnLCAoY2xpY2tFdmVudCwgbGlua0VsKSA9PiB7XG4gICAgaWYgKGNsaWNrRXZlbnQuYnV0dG9uICE9PSAwIHx8ICFpc093bmVkQnlSZW5kZXJlZE1hcmtkb3duKGxpbmtFbCwgZWwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNsaWNrRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGhyZWYgPSBsaW5rRWwuZ2V0QXR0cignaHJlZicpO1xuICAgIGlmICghaHJlZj8uc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvb3Rub3RlSWQgPSBocmVmLnNsaWNlKDEpO1xuICAgIGNvbnN0IHRhcmdldEVsID0gZWwuZmluZEFsbCgnW2RhdGEtZm9vdG5vdGUtaWRdJykuZmluZCgoY2FuZGlkYXRlRWwpID0+IGNhbmRpZGF0ZUVsLmdldEF0dHIoJ2RhdGEtZm9vdG5vdGUtaWQnKSA9PT0gZm9vdG5vdGVJZCk7XG4gICAgaWYgKCF0YXJnZXRFbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVuZm9sZEFuY2VzdG9ycyh0YXJnZXRFbCwgZWwpO1xuICAgIHRhcmdldEVsLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgIGZsYXNoKHRhcmdldEVsLCBlbCk7XG4gIH0pO1xufVxuXG5jb25zdCByZWdpc3RlcmVkRm9sZEVscyA9IG5ldyBXZWFrU2V0PEhUTUxFbGVtZW50PigpO1xuXG5mdW5jdGlvbiBhZGRJbmRpY2F0b3IocGFyZW50RWw6IEhUTUxFbGVtZW50LCBjbHM6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBpbmRpY2F0b3JFbCA9IHBhcmVudEVsLmNyZWF0ZVNwYW4oe1xuICAgIGNsczogW2NscywgJ2NvbGxhcHNlLWluZGljYXRvcicsICdjb2xsYXBzZS1pY29uJ10sXG4gICAgcHJlcGVuZDogdHJ1ZVxuICB9KTtcbiAgc2V0SWNvbihpbmRpY2F0b3JFbCwgRk9MRF9JQ09OKTtcbn1cblxuZnVuY3Rpb24gZmxhc2godGFyZ2V0RWw6IEhUTUxFbGVtZW50LCByb290RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGZvciAoY29uc3QgZmxhc2hpbmdFbCBvZiByb290RWwuZmluZEFsbCgnLmlzLWZsYXNoaW5nJykpIHtcbiAgICBmbGFzaGluZ0VsLnJlbW92ZUNsYXNzKCdpcy1mbGFzaGluZycpO1xuICB9XG4gIHRhcmdldEVsLmFkZENsYXNzKCdpcy1mbGFzaGluZycpO1xuICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2xlZXAoeyBtaWxsaXNlY29uZHM6IEZMQVNIX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyB9KTtcbiAgICB0YXJnZXRFbC5yZW1vdmVDbGFzcygnaXMtZmxhc2hpbmcnKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEJsb2NrSGVhZGluZyhibG9jazogRWxlbWVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIGlmIChpc0hlYWRpbmcoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSBibG9jay5maXJzdEVsZW1lbnRDaGlsZDtcbiAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgaXNIZWFkaW5nKGZpcnN0Q2hpbGQpID8gZmlyc3RDaGlsZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEJsb2NrSGVhZGluZ0xldmVsKGJsb2NrOiBFbGVtZW50KTogbnVsbCB8IG51bWJlciB7XG4gIGNvbnN0IGhlYWRpbmdFbCA9IGdldEJsb2NrSGVhZGluZyhibG9jayk7XG4gIHJldHVybiBoZWFkaW5nRWwgPyBnZXRIZWFkaW5nTGV2ZWwoaGVhZGluZ0VsKSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEJsb2Nrcyhyb290RWw6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIHJldHVybiByb290RWwuZmluZEFsbCgnOnNjb3BlID4gKicpO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkaW5nTGV2ZWwoaGVhZGluZ0VsOiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIoaGVhZGluZ0VsLnRhZ05hbWUuc2xpY2UoMSkpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVJbmRpY2F0b3JDbGljayhcbiAgY2xpY2tFdmVudDogTW91c2VFdmVudCxcbiAgaW5kaWNhdG9yRWw6IEhUTUxFbGVtZW50LFxuICByb290RWw6IEhUTUxFbGVtZW50LFxuICB0b2dnbGU6IChwYXJlbnRFbDogRWxlbWVudCkgPT4gdm9pZFxuKTogdm9pZCB7XG4gIGlmIChjbGlja0V2ZW50LmJ1dHRvbiAhPT0gMCB8fCBjbGlja0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzT3duZWRCeVJlbmRlcmVkTWFya2Rvd24oaW5kaWNhdG9yRWwsIHJvb3RFbCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2xpY2tFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBUaGUgZGVsZWdhdGVkIGNsaWNrIG1hdGNoZWQgdGhlIGluZGljYXRvciBpbnNpZGUgYHJvb3RFbGAsIHNvIGl0IGhhcyBhIHBhcmVudC5cbiAgdG9nZ2xlKGVuc3VyZU5vbk51bGxhYmxlKGluZGljYXRvckVsLnBhcmVudEVsZW1lbnQpKTtcbn1cblxuZnVuY3Rpb24gaXNIZWFkaW5nKGVsZW1lbnQ6IEVsZW1lbnQpOiBlbGVtZW50IGlzIEhUTUxFbGVtZW50IHtcbiAgcmV0dXJuIEhFQURJTkdfVEFHX05BTUVTLmhhcyhlbGVtZW50LnRhZ05hbWUpO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVDb2xsYXBzZWQocGFyZW50RWw6IEVsZW1lbnQsIGlzQ29sbGFwc2VkOiBib29sZWFuKTogdm9pZCB7XG4gIHBhcmVudEVsLnRvZ2dsZUNsYXNzKCdpcy1jb2xsYXBzZWQnLCBpc0NvbGxhcHNlZCk7XG4gIHBhcmVudEVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCc6c2NvcGUgPiAuY29sbGFwc2UtaWNvbicpPy50b2dnbGVDbGFzcygnaXMtY29sbGFwc2VkJywgaXNDb2xsYXBzZWQpO1xufVxuXG4vKipcbiAqIFVuZm9sZHMgd2hhdGV2ZXIgaGlkZXMgYHRhcmdldEVsYDogZXZlcnkgZm9sZGVkIGxpc3QgaXRlbSBhcm91bmQgaXQsIGFuZCBldmVyeSBmb2xkZWQgaGVhZGluZyBpdCBzaXRzXG4gKiB1bmRlciwgc28gYSBmb290bm90ZSBjbGljayBuZXZlciBzY3JvbGxzIHRvIGFuIGVsZW1lbnQgbm9ib2R5IGNhbiBzZWUuXG4gKlxuICogQHBhcmFtIHRhcmdldEVsIC0gVGhlIGVsZW1lbnQgdG8gcmV2ZWFsLlxuICogQHBhcmFtIHJvb3RFbCAtIFRoZSBlbGVtZW50IG1hcmtkb3duIHdhcyByZW5kZXJlZCBpbnRvLlxuICovXG5mdW5jdGlvbiB1bmZvbGRBbmNlc3RvcnModGFyZ2V0RWw6IEhUTUxFbGVtZW50LCByb290RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGxldCB0YXJnZXRCbG9jazogRWxlbWVudCA9IHRhcmdldEVsO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHRhcmdldEJsb2NrLnRhZ05hbWUgPT09ICdMSScgJiYgdGFyZ2V0QmxvY2suaGFzQ2xhc3MoJ2lzLWNvbGxhcHNlZCcpKSB7XG4gICAgICB0b2dnbGVDb2xsYXBzZWQodGFyZ2V0QmxvY2ssIGZhbHNlKTtcbiAgICB9XG4gICAgLy8gYHRhcmdldEVsYCB3YXMgZm91bmQgaW5zaWRlIGByb290RWxgLCBzbyB0aGUgd2FsayByZWFjaGVzIGl0IGJlZm9yZSBydW5uaW5nIG91dCBvZiBwYXJlbnRzLlxuICAgIGNvbnN0IHBhcmVudEVsID0gZW5zdXJlTm9uTnVsbGFibGUodGFyZ2V0QmxvY2sucGFyZW50RWxlbWVudCk7XG4gICAgaWYgKHBhcmVudEVsID09PSByb290RWwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0YXJnZXRCbG9jayA9IHBhcmVudEVsO1xuICB9XG5cbiAgLy8gVGhlIGhlYWRpbmdzIGEgYmxvY2sgc2l0cyB1bmRlciBhcmUgdGhlIG5lYXJlc3QgZWFybGllciBoZWFkaW5nIG9mIGVhY2ggc3RyaWN0bHkgbG93ZXIgbGV2ZWwuXG4gIGNvbnN0IGJsb2NrczogRWxlbWVudFtdID0gZ2V0QmxvY2tzKHJvb3RFbCk7XG4gIGxldCBsZXZlbCA9IGdldEJsb2NrSGVhZGluZ0xldmVsKHRhcmdldEJsb2NrKSA/PyBJbmZpbml0eTtcbiAgbGV0IGhhc1VuZm9sZGVkID0gZmFsc2U7XG4gIGZvciAobGV0IGluZGV4ID0gYmxvY2tzLmluZGV4T2YodGFyZ2V0QmxvY2spIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGhlYWRpbmdFbCA9IGdldEJsb2NrSGVhZGluZyhlbnN1cmVOb25OdWxsYWJsZShibG9ja3NbaW5kZXhdKSk7XG4gICAgaWYgKCFoZWFkaW5nRWwgfHwgZ2V0SGVhZGluZ0xldmVsKGhlYWRpbmdFbCkgPj0gbGV2ZWwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXZlbCA9IGdldEhlYWRpbmdMZXZlbChoZWFkaW5nRWwpO1xuICAgIGlmICghaGVhZGluZ0VsLmhhc0NsYXNzKCdpcy1jb2xsYXBzZWQnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ29sbGFwc2VkKGhlYWRpbmdFbCwgZmFsc2UpO1xuICAgIGhhc1VuZm9sZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChoYXNVbmZvbGRlZCkge1xuICAgIHVwZGF0ZUZvbGRlZEJsb2Nrcyhyb290RWwpO1xuICB9XG59XG5cbi8qKlxuICogU2hvd3Mgb3IgaGlkZXMgZXZlcnkgYmxvY2sgb2YgYHJvb3RFbGAgYWZ0ZXIgdGhlIGZvbGRlZCBoZWFkaW5ncywgc28gYSBibG9jayBpcyBoaWRkZW4gZXhhY3RseSB3aGVuIGFcbiAqIGZvbGRlZCBoZWFkaW5nIGFib3ZlIGl0IGhhcyBubyBoZWFkaW5nIG9mIHRoZSBzYW1lIG9yIGEgaGlnaGVyIGxldmVsIGluIGJldHdlZW4uXG4gKlxuICogQHBhcmFtIHJvb3RFbCAtIFRoZSBlbGVtZW50IG1hcmtkb3duIHdhcyByZW5kZXJlZCBpbnRvLlxuICovXG5mdW5jdGlvbiB1cGRhdGVGb2xkZWRCbG9ja3Mocm9vdEVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICBsZXQgZm9sZGVkTGV2ZWw6IG51bGwgfCBudW1iZXIgPSBudWxsO1xuICBmb3IgKGNvbnN0IGJsb2NrIG9mIGdldEJsb2Nrcyhyb290RWwpKSB7XG4gICAgY29uc3QgaGVhZGluZ0VsID0gZ2V0QmxvY2tIZWFkaW5nKGJsb2NrKTtcbiAgICBjb25zdCBoZWFkaW5nTGV2ZWwgPSBoZWFkaW5nRWwgPyBnZXRIZWFkaW5nTGV2ZWwoaGVhZGluZ0VsKSA6IG51bGw7XG4gICAgaWYgKGZvbGRlZExldmVsICE9PSBudWxsICYmIGhlYWRpbmdMZXZlbCAhPT0gbnVsbCAmJiBoZWFkaW5nTGV2ZWwgPD0gZm9sZGVkTGV2ZWwpIHtcbiAgICAgIGZvbGRlZExldmVsID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXNTaG93biA9IGZvbGRlZExldmVsID09PSBudWxsO1xuICAgIGJsb2NrLnRvZ2dsZShpc1Nob3duKTtcbiAgICBpZiAoaXNTaG93biAmJiBoZWFkaW5nRWw/Lmhhc0NsYXNzKCdpcy1jb2xsYXBzZWQnKSkge1xuICAgICAgZm9sZGVkTGV2ZWwgPSBoZWFkaW5nTGV2ZWw7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUEsbUJBR087QUFDUCx5QkFBa0M7QUFDbEMsc0JBQXdCO0FBRXhCLHVCQUF5QjtBQU16QixNQUFNLGlDQUFpQztBQUV2QyxNQUFNLFlBQVk7QUFFbEIsTUFBTSxvQkFBb0Isb0JBQUksSUFBSSxDQUFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7QUE4Qy9ELFNBQVMsMEJBQTBCLFNBQWtCLFFBQThCO0FBQ3hGLE1BQUksVUFBMEI7QUFDOUIsU0FBTyxTQUFTO0FBQ2QsUUFBSSxZQUFZLFFBQVE7QUFDdEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLFFBQVEsU0FBUyx1QkFBdUIsS0FBSyxRQUFRLFNBQVMsWUFBWSxHQUFHO0FBQy9FLGFBQU87QUFBQSxJQUNUO0FBQ0EsY0FBVSxRQUFRO0FBQUEsRUFDcEI7QUFDQSxTQUFPO0FBQ1Q7QUFhTyxTQUFTLHFCQUFxQixRQUEwQztBQUM3RSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EscUJBQXFCO0FBQUEsSUFDckIsa0JBQWtCO0FBQUEsRUFDcEIsSUFBSTtBQUVKLEtBQUcsU0FBUywwQkFBUyxhQUFhLDBCQUFTLGdCQUFnQjtBQUUzRCxNQUFJ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
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.cts" />
|
|
2
|
+
/// <reference lib="dom" />
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
*
|
|
6
|
+
* The parts of a Reading view's behavior that Obsidian keeps inside its preview renderer, ported for
|
|
7
|
+
* markdown rendered anywhere else with `MarkdownRenderer.render`.
|
|
8
|
+
*
|
|
9
|
+
* `MarkdownPreviewRenderer.registerDomEvents` covers internal and external links, tags, drags, context
|
|
10
|
+
* menus and the footnote HOVER. Three things it does not cover, read from Obsidian `1.15.0`: the footnote
|
|
11
|
+
* CLICK (`onFootnoteLinkClick`), and the heading and list FOLDING, whose indicators the renderer only adds
|
|
12
|
+
* in its own `onRender` and whose clicks only it handles. Without these, a footnote click in standalone
|
|
13
|
+
* rendered markdown falls through to the browser's hash navigation, and nothing can be folded.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Parameters for {@link registerFoldHandlers}.
|
|
17
|
+
*/
|
|
18
|
+
export interface RegisterFoldHandlersParams {
|
|
19
|
+
/**
|
|
20
|
+
* The element markdown was rendered into, the one `MarkdownRenderer.render` was handed. Its direct
|
|
21
|
+
* children are the rendered blocks a folded heading hides.
|
|
22
|
+
*/
|
|
23
|
+
readonly el: HTMLElement;
|
|
24
|
+
/**
|
|
25
|
+
* Whether headings can be folded.
|
|
26
|
+
*
|
|
27
|
+
* @default `true`
|
|
28
|
+
*/
|
|
29
|
+
readonly shouldFoldHeadings?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Whether list items with a nested list can be folded.
|
|
32
|
+
*
|
|
33
|
+
* @default `true`
|
|
34
|
+
*/
|
|
35
|
+
readonly shouldFoldLists?: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Parameters for {@link registerFootnoteLinkHandler}.
|
|
39
|
+
*/
|
|
40
|
+
export interface RegisterFootnoteLinkHandlerParams {
|
|
41
|
+
/**
|
|
42
|
+
* The element markdown was rendered into.
|
|
43
|
+
*/
|
|
44
|
+
readonly el: HTMLElement;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Whether an element belongs to the markdown rendered into `rootEl`, rather than to a Reading view or a
|
|
48
|
+
* Bases view nested inside it (an embed), which handles its own events. A port of Obsidian's static
|
|
49
|
+
* `MarkdownPreviewRenderer.belongsToMe`, which `obsidian-typings` does not declare.
|
|
50
|
+
*
|
|
51
|
+
* @param element - The element an event landed on.
|
|
52
|
+
* @param rootEl - The element markdown was rendered into.
|
|
53
|
+
* @returns Whether the element is `rootEl` itself or sits inside it with no nested view in between.
|
|
54
|
+
*/
|
|
55
|
+
export declare function isOwnedByRenderedMarkdown(element: Element, rootEl: HTMLElement): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Makes the headings and the nested lists of rendered markdown foldable, the way they are in a Reading
|
|
58
|
+
* view: it adds Obsidian's own collapse indicators and handles their clicks.
|
|
59
|
+
*
|
|
60
|
+
* A folded heading hides every block after it up to the next heading of the same or a higher level;
|
|
61
|
+
* unfolding it shows them again, except those a folded heading among them still hides. A folded list
|
|
62
|
+
* item hides its nested lists. Call it again after the element is re-rendered: blocks that already have
|
|
63
|
+
* an indicator are left alone, and the click handler is registered only once per element.
|
|
64
|
+
*
|
|
65
|
+
* @param params - The parameters.
|
|
66
|
+
*/
|
|
67
|
+
export declare function registerFoldHandlers(params: RegisterFoldHandlersParams): void;
|
|
68
|
+
/**
|
|
69
|
+
* Makes a footnote link in rendered markdown act as it does in a Reading view: a click scrolls to the
|
|
70
|
+
* footnote, or back to its reference, and flashes it, instead of navigating to the link's `#` hash.
|
|
71
|
+
*
|
|
72
|
+
* Registered by `registerLinkHandlers`, which is the usual way in; call it directly only for an element
|
|
73
|
+
* whose other links are handled some other way.
|
|
74
|
+
*
|
|
75
|
+
* @param params - The parameters.
|
|
76
|
+
*/
|
|
77
|
+
export declare function registerFootnoteLinkHandler(params: RegisterFootnoteLinkHandlerParams): void;
|