@mnaoumov/obsidian-lib 10.10.0 → 10.12.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 +26 -0
- package/components/all-windows-status-bar-item-component/package.json +6 -0
- package/components/shared-component-pool-component/package.json +6 -0
- package/components/workspace-layout-state-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +90 -1
- package/dist/lib/cjs/__merged.d.cts +13 -4
- package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
- package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
- package/dist/lib/cjs/bug-report.cjs +36 -10
- package/dist/lib/cjs/bug-report.d.cts +65 -0
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +93 -2
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
- package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
- package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
- package/dist/lib/cjs/components/embed-extensions-component.cjs +20 -3
- package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +16 -2
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
- package/dist/lib/cjs/components/index.cjs +12 -3
- package/dist/lib/cjs/components/index.d.cts +3 -0
- package/dist/lib/cjs/components/plugin-gate-component.cjs +2 -9
- package/dist/lib/cjs/components/plugin-settings-component.cjs +7 -2
- package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
- package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
- package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
- package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
- package/dist/lib/cjs/css-class.cjs +5 -1
- package/dist/lib/cjs/css-class.d.cts +16 -0
- package/dist/lib/cjs/data-handler.cjs +156 -5
- package/dist/lib/cjs/data-handler.d.cts +128 -2
- package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
- package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/git-rename-history.cjs +1 -1
- package/dist/lib/cjs/git-rename-history.d.cts +2 -2
- package/dist/lib/cjs/i18n/locales/en.cjs +29 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +28 -0
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +28 -0
- package/dist/lib/cjs/index.cjs +10 -1
- package/dist/lib/cjs/index.d.cts +3 -0
- package/dist/lib/cjs/link.cjs +40 -1
- package/dist/lib/cjs/link.d.cts +37 -1
- package/dist/lib/cjs/markdown-view.cjs +191 -3
- package/dist/lib/cjs/markdown-view.d.cts +48 -1
- package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
- package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
- package/dist/lib/cjs/modals/index.cjs +7 -1
- package/dist/lib/cjs/modals/index.d.cts +2 -0
- package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
- package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
- package/dist/lib/cjs/plugin/index.cjs +4 -1
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +13 -4
- package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +46 -1
- package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
- package/dist/lib/cjs/plugin/plugin-instance.cjs +448 -0
- package/dist/lib/cjs/plugin/plugin-instance.d.cts +251 -0
- package/dist/lib/cjs/plugin/plugin.cjs +16 -1
- package/dist/lib/cjs/plugin/plugin.d.cts +7 -0
- package/dist/lib/cjs/reference-definition.cjs +234 -0
- package/dist/lib/cjs/reference-definition.d.cts +47 -0
- package/dist/lib/cjs/release-asset.cjs +279 -0
- package/dist/lib/cjs/release-asset.d.cts +190 -0
- package/dist/lib/cjs/workspace.cjs +3 -2
- package/dist/lib/cjs/workspace.d.cts +6 -0
- package/dist/lib/esm/__merged.d.mts +13 -4
- package/dist/lib/esm/__merged.mjs +97 -3
- package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
- package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
- package/dist/lib/esm/bug-report.d.mts +65 -0
- package/dist/lib/esm/bug-report.mjs +33 -10
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
- package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
- package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
- package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
- package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
- package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
- package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
- package/dist/lib/esm/components/index.d.mts +3 -0
- package/dist/lib/esm/components/index.mjs +8 -2
- package/dist/lib/esm/components/plugin-gate-component.mjs +5 -13
- package/dist/lib/esm/components/plugin-settings-component.mjs +7 -2
- package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
- package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
- package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
- package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
- package/dist/lib/esm/css-class.d.mts +16 -0
- package/dist/lib/esm/css-class.mjs +5 -1
- package/dist/lib/esm/data-handler.d.mts +128 -2
- package/dist/lib/esm/data-handler.mjs +152 -4
- package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
- package/dist/lib/esm/desktop-git-runner.mjs +3 -3
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/git-rename-history.d.mts +2 -2
- package/dist/lib/esm/git-rename-history.mjs +1 -1
- package/dist/lib/esm/i18n/locales/en.d.mts +28 -0
- package/dist/lib/esm/i18n/locales/en.mjs +29 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +28 -0
- package/dist/lib/esm/index.d.mts +3 -0
- package/dist/lib/esm/index.mjs +7 -1
- package/dist/lib/esm/link.d.mts +37 -1
- package/dist/lib/esm/link.mjs +40 -1
- package/dist/lib/esm/markdown-view.d.mts +48 -1
- package/dist/lib/esm/markdown-view.mjs +192 -2
- package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
- package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
- package/dist/lib/esm/modals/index.d.mts +2 -0
- package/dist/lib/esm/modals/index.mjs +5 -1
- package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
- package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
- package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
- package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
- package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
- package/dist/lib/esm/plugin/plugin-instance.d.mts +251 -0
- package/dist/lib/esm/plugin/plugin-instance.mjs +366 -0
- package/dist/lib/esm/plugin/plugin.d.mts +7 -0
- package/dist/lib/esm/plugin/plugin.mjs +16 -1
- package/dist/lib/esm/reference-definition.d.mts +47 -0
- package/dist/lib/esm/reference-definition.mjs +146 -0
- package/dist/lib/esm/release-asset.d.mts +190 -0
- package/dist/lib/esm/release-asset.mjs +187 -0
- package/dist/lib/esm/workspace.d.mts +6 -0
- package/dist/lib/esm/workspace.mjs +3 -2
- package/dist/styles.css +16 -1
- package/modals/copy-text-manually/package.json +6 -0
- package/modals/review-bug-report-diagnostics/package.json +6 -0
- package/package.json +2 -1
- package/plugin/plugin-instance/package.json +6 -0
|
@@ -2,14 +2,59 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
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
|
+
}
|
|
5
29
|
|
|
6
|
-
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import { Notice } from "obsidian";
|
|
34
|
+
import {
|
|
35
|
+
buildBugReportIssueFormLink,
|
|
36
|
+
formatBugReportEnvironment,
|
|
37
|
+
getBugReportEnvironment,
|
|
38
|
+
getBugReportIssueFormUrl
|
|
39
|
+
} from "../bug-report.mjs";
|
|
40
|
+
import { t } from "../i18n/i18n.mjs";
|
|
41
|
+
import { copyTextManually } from "../modals/copy-text-manually.mjs";
|
|
42
|
+
import { reviewBugReportDiagnostics } from "../modals/review-bug-report-diagnostics.mjs";
|
|
7
43
|
import { OpenGitHubCommandHandler } from "./open-git-hub-command-handler.mjs";
|
|
44
|
+
const CLIPBOARD_NOTICE_DURATION_IN_MILLISECONDS = 15e3;
|
|
8
45
|
class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
|
|
9
46
|
/**
|
|
10
47
|
* The Obsidian app instance.
|
|
11
48
|
*/
|
|
12
49
|
app;
|
|
50
|
+
/**
|
|
51
|
+
* Gets the optional diagnostics the report can carry.
|
|
52
|
+
*/
|
|
53
|
+
getDiagnostics;
|
|
54
|
+
/**
|
|
55
|
+
* The most characters the encoded link may have before the report moves to the clipboard.
|
|
56
|
+
*/
|
|
57
|
+
maxUrlLength;
|
|
13
58
|
/**
|
|
14
59
|
* The id of the reporting plugin.
|
|
15
60
|
*/
|
|
@@ -27,10 +72,46 @@ class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
|
|
|
27
72
|
name: "Report a bug"
|
|
28
73
|
});
|
|
29
74
|
this.app = params.app;
|
|
75
|
+
this.getDiagnostics = params.getDiagnostics;
|
|
76
|
+
this.maxUrlLength = params.maxUrlLength;
|
|
30
77
|
this.pluginId = params.pluginId;
|
|
31
78
|
}
|
|
32
79
|
/**
|
|
33
|
-
*
|
|
80
|
+
* Lets the user review the diagnostics, if any, then opens the issue form. When the report is too long
|
|
81
|
+
* for a link, it is copied to the clipboard first, or shown for copying by hand when the clipboard
|
|
82
|
+
* refuses it.
|
|
83
|
+
*/
|
|
84
|
+
async execute() {
|
|
85
|
+
if (!this.canExecute()) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const environment = await getBugReportEnvironment({ app: this.app, pluginId: this.pluginId });
|
|
89
|
+
const sections = await this.getDiagnostics?.() ?? [];
|
|
90
|
+
let diagnostics = [];
|
|
91
|
+
if (sections.length > 0) {
|
|
92
|
+
const reviewedSections = await reviewBugReportDiagnostics({
|
|
93
|
+
alwaysIncludedText: formatBugReportEnvironment(environment),
|
|
94
|
+
app: this.app,
|
|
95
|
+
sections
|
|
96
|
+
});
|
|
97
|
+
if (reviewedSections === null) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
diagnostics = reviewedSections;
|
|
101
|
+
}
|
|
102
|
+
const link = buildBugReportIssueFormLink({
|
|
103
|
+
diagnostics,
|
|
104
|
+
environment,
|
|
105
|
+
gitHubRepo: this.gitHubRepo,
|
|
106
|
+
...this.maxUrlLength !== void 0 && { maxUrlLength: this.maxUrlLength }
|
|
107
|
+
});
|
|
108
|
+
if (link.clipboardText !== null && !await this.copyReport(link.clipboardText)) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
window.open(link.url, "_blank");
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Builds the prefilled bug-report URL, with the environment only.
|
|
34
115
|
*
|
|
35
116
|
* @returns The link.
|
|
36
117
|
*/
|
|
@@ -41,8 +122,23 @@ class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
|
|
|
41
122
|
pluginId: this.pluginId
|
|
42
123
|
});
|
|
43
124
|
}
|
|
125
|
+
async copyReport(text) {
|
|
126
|
+
try {
|
|
127
|
+
await activeWindow.navigator.clipboard.writeText(text);
|
|
128
|
+
new Notice(t(($) => $.obsidianLib.bugReport.clipboardCopied), CLIPBOARD_NOTICE_DURATION_IN_MILLISECONDS);
|
|
129
|
+
return true;
|
|
130
|
+
} catch {
|
|
131
|
+
return await copyTextManually({
|
|
132
|
+
app: this.app,
|
|
133
|
+
message: t(($) => $.obsidianLib.bugReport.copyManuallyMessage),
|
|
134
|
+
okButtonText: t(($) => $.obsidianLib.bugReport.openIssueForm),
|
|
135
|
+
text,
|
|
136
|
+
title: t(($) => $.obsidianLib.bugReport.copyManuallyTitle)
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
44
140
|
}
|
|
45
141
|
export {
|
|
46
142
|
OpenBugReportCommandHandler
|
|
47
143
|
};
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1idWctcmVwb3J0LWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhhbmRsZXMgdGhlIFwiUmVwb3J0IGEgYnVnXCIgY29tbWFuZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsIH0gZnJvbSAnLi4vYnVnLXJlcG9ydC50cyc7XG5pbXBvcnQgeyBPcGVuR2l0SHViQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuL29wZW4tZ2l0LWh1Yi1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZm9yIHtAbGluayBPcGVuQnVnUmVwb3J0Q29tbWFuZEhhbmRsZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjb21tYW5kIGhhbmRsZXIgdGhhdCBvcGVucyB0aGUgcGx1Z2luJ3MgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtIG9uIEdpdEh1YiwgcHJlZmlsbGVkIHdpdGggdGhlXG4gKiBlbnZpcm9ubWVudC4gU2VlIHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9IGZvciB0aGUgZmllbGQgaWRzIHRoZSBmb3JtIG11c3QgdXNlLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkJ1Z1JlcG9ydENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgT3BlbkdpdEh1YkNvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQ29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgICBpY29uOiAnYnVnJyxcbiAgICAgIGlkOiAncmVwb3J0LWJ1ZycsXG4gICAgICBuYW1lOiAnUmVwb3J0IGEgYnVnJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwYXJhbXMucGx1Z2luSWQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBwcmVmaWxsZWQgYnVnLXJlcG9ydCBVUkwuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGdldFVybCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmwoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIGdpdEh1YlJlcG86IHRoaXMuZ2l0SHViUmVwbyxcbiAgICAgIHBsdWdpbklkOiB0aGlzLnBsdWdpbklkXG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBUUEsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxnQ0FBZ0M7QUEwQmxDLE1BQU0sb0NBQW9DLHlCQUF5QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSXJEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9aLFlBQVksUUFBc0Q7QUFDdkUsVUFBTTtBQUFBLE1BQ0osWUFBWSxPQUFPO0FBQUEsTUFDbkIsTUFBTTtBQUFBLE1BQ04sSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLElBQ1IsQ0FBQztBQUVELFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssV0FBVyxPQUFPO0FBQUEsRUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUF5QixTQUEwQjtBQUNqRCxXQUFPLHlCQUF5QjtBQUFBLE1BQzlCLEtBQUssS0FBSztBQUFBLE1BQ1YsWUFBWSxLQUFLO0FBQUEsTUFDakIsVUFBVSxLQUFLO0FBQUEsSUFDakIsQ0FBQztBQUFBLEVBQ0g7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kLWhhbmRsZXJzL29wZW4tYnVnLXJlcG9ydC1jb21tYW5kLWhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhhbmRsZXMgdGhlIFwiUmVwb3J0IGEgYnVnXCIgY29tbWFuZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbiB9IGZyb20gJy4uL2J1Zy1yZXBvcnQtZGlhZ25vc3RpY3MudHMnO1xuXG5pbXBvcnQge1xuICBidWlsZEJ1Z1JlcG9ydElzc3VlRm9ybUxpbmssXG4gIGZvcm1hdEJ1Z1JlcG9ydEVudmlyb25tZW50LFxuICBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudCxcbiAgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsXG59IGZyb20gJy4uL2J1Zy1yZXBvcnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBjb3B5VGV4dE1hbnVhbGx5IH0gZnJvbSAnLi4vbW9kYWxzL2NvcHktdGV4dC1tYW51YWxseS50cyc7XG5pbXBvcnQgeyByZXZpZXdCdWdSZXBvcnREaWFnbm9zdGljcyB9IGZyb20gJy4uL21vZGFscy9yZXZpZXctYnVnLXJlcG9ydC1kaWFnbm9zdGljcy50cyc7XG5pbXBvcnQgeyBPcGVuR2l0SHViQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuL29wZW4tZ2l0LWh1Yi1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZm9yIHtAbGluayBPcGVuQnVnUmVwb3J0Q29tbWFuZEhhbmRsZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogR2V0cyB0aGUgb3B0aW9uYWwgZGlhZ25vc3RpY3MgdGhlIHJlcG9ydCBjYW4gY2FycnksIHN1Y2ggYXMgYSBgQnVnUmVwb3J0TG9nQnVmZmVyYCdzIHNlY3Rpb24gb3IgdGhlXG4gICAqIHBsdWdpbidzIG93biByZWRhY3RlZCBzZXR0aW5ncy4gQ2FsbGVkIGVhY2ggdGltZSB0aGUgY29tbWFuZCBydW5zLiBXaGVuIGl0IHJldHVybnMgYW55IHNlY3Rpb24sIHRoZVxuICAgKiB1c2VyIHJldmlld3MgdGhlbSBhbmQgY2hvb3NlcyB3aGljaCB0byBpbmNsdWRlIGJlZm9yZSB0aGUgZm9ybSBvcGVuczsgYSBwb3RlbnRpYWxseSBwcml2YXRlIHNlY3Rpb25cbiAgICogc3RhcnRzIGV4Y2x1ZGVkLiBMZWF2ZSBpdCBvdXQgdG8gb3BlbiB0aGUgZm9ybSB3aXRoIHRoZSBlbnZpcm9ubWVudCBvbmx5LCBhcyBiZWZvcmUuXG4gICAqL1xuICByZWFkb25seSBnZXREaWFnbm9zdGljcz86ICgpID0+IFByb21pc2FibGU8cmVhZG9ubHkgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb25bXT47XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9zdCBjaGFyYWN0ZXJzIHRoZSBlbmNvZGVkIGxpbmsgbWF5IGhhdmUgYmVmb3JlIHRoZSByZXBvcnQgbW92ZXMgdG8gdGhlIGNsaXBib2FyZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYERFRkFVTFRfQlVHX1JFUE9SVF9NQVhfVVJMX0xFTkdUSGBcbiAgICovXG4gIHJlYWRvbmx5IG1heFVybExlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLy8gTG9uZyBlbm91Z2ggdG8gcmVhZCB0aGUgcGFzdGUgaW5zdHJ1Y3Rpb24gd2hpbGUgdGhlIGJyb3dzZXIgb3BlbnMuXG5jb25zdCBDTElQQk9BUkRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDE1XzAwMDtcblxuLyoqXG4gKiBBIGNvbW1hbmQgaGFuZGxlciB0aGF0IG9wZW5zIHRoZSBwbHVnaW4ncyBidWctcmVwb3J0IGlzc3VlIGZvcm0gb24gR2l0SHViLCBwcmVmaWxsZWQgd2l0aCB0aGVcbiAqIGVudmlyb25tZW50IGFuZCBhbnkgZGlhZ25vc3RpY3MgdGhlIHVzZXIgYWdyZWVkIHRvIGluY2x1ZGUuIFNlZSB7QGxpbmsgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsfSBmb3IgdGhlXG4gKiBmaWVsZCBpZHMgdGhlIGZvcm0gbXVzdCB1c2UsIGFuZCB7QGxpbmsgYnVpbGRCdWdSZXBvcnRJc3N1ZUZvcm1MaW5rfSBmb3Igd2hhdCBoYXBwZW5zIHRvIGEgcmVwb3J0IHRvbyBsb25nXG4gKiBmb3IgYSBsaW5rLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkJ1Z1JlcG9ydENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgT3BlbkdpdEh1YkNvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG9wdGlvbmFsIGRpYWdub3N0aWNzIHRoZSByZXBvcnQgY2FuIGNhcnJ5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdldERpYWdub3N0aWNzOiAoKCkgPT4gUHJvbWlzYWJsZTxyZWFkb25seSBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbltdPikgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtb3N0IGNoYXJhY3RlcnMgdGhlIGVuY29kZWQgbGluayBtYXkgaGF2ZSBiZWZvcmUgdGhlIHJlcG9ydCBtb3ZlcyB0byB0aGUgY2xpcGJvYXJkLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1heFVybExlbmd0aDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHJlcG9ydGluZyBwbHVnaW4uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBPcGVuQnVnUmVwb3J0Q29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHtcbiAgICAgIGdpdEh1YlJlcG86IHBhcmFtcy5naXRIdWJSZXBvLFxuICAgICAgaWNvbjogJ2J1ZycsXG4gICAgICBpZDogJ3JlcG9ydC1idWcnLFxuICAgICAgbmFtZTogJ1JlcG9ydCBhIGJ1ZydcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLmdldERpYWdub3N0aWNzID0gcGFyYW1zLmdldERpYWdub3N0aWNzO1xuICAgIHRoaXMubWF4VXJsTGVuZ3RoID0gcGFyYW1zLm1heFVybExlbmd0aDtcbiAgICB0aGlzLnBsdWdpbklkID0gcGFyYW1zLnBsdWdpbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIExldHMgdGhlIHVzZXIgcmV2aWV3IHRoZSBkaWFnbm9zdGljcywgaWYgYW55LCB0aGVuIG9wZW5zIHRoZSBpc3N1ZSBmb3JtLiBXaGVuIHRoZSByZXBvcnQgaXMgdG9vIGxvbmdcbiAgICogZm9yIGEgbGluaywgaXQgaXMgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQgZmlyc3QsIG9yIHNob3duIGZvciBjb3B5aW5nIGJ5IGhhbmQgd2hlbiB0aGUgY2xpcGJvYXJkXG4gICAqIHJlZnVzZXMgaXQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuRXhlY3V0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudCh7IGFwcDogdGhpcy5hcHAsIHBsdWdpbklkOiB0aGlzLnBsdWdpbklkIH0pO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gYXdhaXQgdGhpcy5nZXREaWFnbm9zdGljcz8uKCkgPz8gW107XG4gICAgbGV0IGRpYWdub3N0aWNzOiByZWFkb25seSBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbltdID0gW107XG4gICAgaWYgKHNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJldmlld2VkU2VjdGlvbnMgPSBhd2FpdCByZXZpZXdCdWdSZXBvcnREaWFnbm9zdGljcyh7XG4gICAgICAgIGFsd2F5c0luY2x1ZGVkVGV4dDogZm9ybWF0QnVnUmVwb3J0RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpLFxuICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICBzZWN0aW9uc1xuICAgICAgfSk7XG4gICAgICBpZiAocmV2aWV3ZWRTZWN0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkaWFnbm9zdGljcyA9IHJldmlld2VkU2VjdGlvbnM7XG4gICAgfVxuXG4gICAgY29uc3QgbGluayA9IGJ1aWxkQnVnUmVwb3J0SXNzdWVGb3JtTGluayh7XG4gICAgICBkaWFnbm9zdGljcyxcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgZ2l0SHViUmVwbzogdGhpcy5naXRIdWJSZXBvLFxuICAgICAgLi4udGhpcy5tYXhVcmxMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB7IG1heFVybExlbmd0aDogdGhpcy5tYXhVcmxMZW5ndGggfVxuICAgIH0pO1xuXG4gICAgaWYgKGxpbmsuY2xpcGJvYXJkVGV4dCAhPT0gbnVsbCAmJiAhYXdhaXQgdGhpcy5jb3B5UmVwb3J0KGxpbmsuY2xpcGJvYXJkVGV4dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aW5kb3cub3BlbihsaW5rLnVybCwgJ19ibGFuaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgcHJlZmlsbGVkIGJ1Zy1yZXBvcnQgVVJMLCB3aXRoIHRoZSBlbnZpcm9ubWVudCBvbmx5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbGluay5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBnZXRVcmwoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBnaXRIdWJSZXBvOiB0aGlzLmdpdEh1YlJlcG8sXG4gICAgICBwbHVnaW5JZDogdGhpcy5wbHVnaW5JZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb3B5UmVwb3J0KHRleHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgY2xpcGJvYXJkIG9mIHRoZSBmb2N1c2VkIHdpbmRvdzogYSBwb3BvdXQncyBkb2N1bWVudCBpcyB0aGUgb25lIHRoYXQgaG9sZHMgdGhlIGZvY3VzLlxuICAgICAgYXdhaXQgYWN0aXZlV2luZG93Lm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpO1xuICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmJ1Z1JlcG9ydC5jbGlwYm9hcmRDb3BpZWQpLCBDTElQQk9BUkRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBhd2FpdCBjb3B5VGV4dE1hbnVhbGx5KHtcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgbWVzc2FnZTogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idWdSZXBvcnQuY29weU1hbnVhbGx5TWVzc2FnZSksXG4gICAgICAgIG9rQnV0dG9uVGV4dDogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idWdSZXBvcnQub3Blbklzc3VlRm9ybSksXG4gICAgICAgIHRleHQsXG4gICAgICAgIHRpdGxlOiB0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmJ1Z1JlcG9ydC5jb3B5TWFudWFsbHlUaXRsZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLFNBQVMsY0FBYztBQUl2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxTQUFTO0FBQ2xCLFNBQVMsd0JBQXdCO0FBQ2pDLFNBQVMsa0NBQWtDO0FBQzNDLFNBQVMsZ0NBQWdDO0FBc0N6QyxNQUFNLDRDQUE0QztBQVEzQyxNQUFNLG9DQUFvQyx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlyRDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9aLFlBQVksUUFBc0Q7QUFDdkUsVUFBTTtBQUFBLE1BQ0osWUFBWSxPQUFPO0FBQUEsTUFDbkIsTUFBTTtBQUFBLE1BQ04sSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLElBQ1IsQ0FBQztBQUVELFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssaUJBQWlCLE9BQU87QUFDN0IsU0FBSyxlQUFlLE9BQU87QUFDM0IsU0FBSyxXQUFXLE9BQU87QUFBQSxFQUN6QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQXNCLFVBQXlCO0FBQzdDLFFBQUksQ0FBQyxLQUFLLFdBQVcsR0FBRztBQUN0QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLGNBQWMsTUFBTSx3QkFBd0IsRUFBRSxLQUFLLEtBQUssS0FBSyxVQUFVLEtBQUssU0FBUyxDQUFDO0FBQzVGLFVBQU0sV0FBVyxNQUFNLEtBQUssaUJBQWlCLEtBQUssQ0FBQztBQUNuRCxRQUFJLGNBQXFELENBQUM7QUFDMUQsUUFBSSxTQUFTLFNBQVMsR0FBRztBQUN2QixZQUFNLG1CQUFtQixNQUFNLDJCQUEyQjtBQUFBLFFBQ3hELG9CQUFvQiwyQkFBMkIsV0FBVztBQUFBLFFBQzFELEtBQUssS0FBSztBQUFBLFFBQ1Y7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLHFCQUFxQixNQUFNO0FBQzdCO0FBQUEsTUFDRjtBQUNBLG9CQUFjO0FBQUEsSUFDaEI7QUFFQSxVQUFNLE9BQU8sNEJBQTRCO0FBQUEsTUFDdkM7QUFBQSxNQUNBO0FBQUEsTUFDQSxZQUFZLEtBQUs7QUFBQSxNQUNqQixHQUFHLEtBQUssaUJBQWlCLFVBQWEsRUFBRSxjQUFjLEtBQUssYUFBYTtBQUFBLElBQzFFLENBQUM7QUFFRCxRQUFJLEtBQUssa0JBQWtCLFFBQVEsQ0FBQyxNQUFNLEtBQUssV0FBVyxLQUFLLGFBQWEsR0FBRztBQUM3RTtBQUFBLElBQ0Y7QUFFQSxXQUFPLEtBQUssS0FBSyxLQUFLLFFBQVE7QUFBQSxFQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQXlCLFNBQTBCO0FBQ2pELFdBQU8seUJBQXlCO0FBQUEsTUFDOUIsS0FBSyxLQUFLO0FBQUEsTUFDVixZQUFZLEtBQUs7QUFBQSxNQUNqQixVQUFVLEtBQUs7QUFBQSxJQUNqQixDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRUEsTUFBYyxXQUFXLE1BQWdDO0FBQ3ZELFFBQUk7QUFFRixZQUFNLGFBQWEsVUFBVSxVQUFVLFVBQVUsSUFBSTtBQUNyRCxVQUFJLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLFVBQVUsZUFBZSxHQUFHLHlDQUF5QztBQUN2RyxhQUFPO0FBQUEsSUFDVCxRQUFRO0FBQ04sYUFBTyxNQUFNLGlCQUFpQjtBQUFBLFFBQzVCLEtBQUssS0FBSztBQUFBLFFBQ1YsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksVUFBVSxtQkFBbUI7QUFBQSxRQUM3RCxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxVQUFVLGFBQWE7QUFBQSxRQUM1RDtBQUFBLFFBQ0EsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksVUFBVSxpQkFBaUI7QUFBQSxNQUMzRCxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6W119
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/// <reference lib="dom" />
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
*
|
|
6
|
+
* Shows one status-bar item in the main window and in every desktop popout, including popouts opened later, and
|
|
7
|
+
* removes only its own items when a window closes or the component unloads.
|
|
8
|
+
*
|
|
9
|
+
* Read from Obsidian `1.15.1`: the main window builds `body > .app-container > .status-bar`, and
|
|
10
|
+
* `Plugin.addStatusBarItem` is a `.status-bar-item` created in it. A popout builds `body > .app-container` with the
|
|
11
|
+
* workspace only, and **no status bar**. `app.css` styles `.status-bar` without scoping it to a window, so a
|
|
12
|
+
* `.status-bar` created inside a popout's `.app-container` looks and sits exactly like the main one. By default
|
|
13
|
+
* this component creates that bar in a popout that lacks one, and marks it with
|
|
14
|
+
* {@link WINDOW_STATUS_BAR_CSS_CLASS}. The marker is a wire constant shared by every copy of this library: any copy
|
|
15
|
+
* reuses a marked bar, and whichever copy removes the last item from it removes the bar too.
|
|
16
|
+
*
|
|
17
|
+
* Mobile has no popouts, and `app.css` hides `.status-bar` under `.is-mobile`, so on mobile the component creates
|
|
18
|
+
* nothing and never calls the render callback.
|
|
19
|
+
*/
|
|
20
|
+
import type { App, Component } from 'obsidian';
|
|
21
|
+
import { ComponentEx } from './component-ex.mjs';
|
|
22
|
+
/**
|
|
23
|
+
* The class that marks a status bar this library created in a window that had none.
|
|
24
|
+
* Other copies of the library match it, so its value must never change.
|
|
25
|
+
*/
|
|
26
|
+
export declare const WINDOW_STATUS_BAR_CSS_CLASS = "obsidian-lib-window-status-bar";
|
|
27
|
+
/**
|
|
28
|
+
* Parameters for the {@link AllWindowsStatusBarItemComponent} constructor.
|
|
29
|
+
*/
|
|
30
|
+
export interface AllWindowsStatusBarItemComponentConstructorParams {
|
|
31
|
+
/**
|
|
32
|
+
* The Obsidian app instance.
|
|
33
|
+
*/
|
|
34
|
+
readonly app: App;
|
|
35
|
+
/**
|
|
36
|
+
* Extra CSS classes for each item.
|
|
37
|
+
*/
|
|
38
|
+
readonly cls?: readonly string[];
|
|
39
|
+
/**
|
|
40
|
+
* The plugin id. When given, each item gets the `plugin-<id>` class that `Plugin.addStatusBarItem` adds, so
|
|
41
|
+
* themes and CSS snippets that target the plugin's status-bar items match these too.
|
|
42
|
+
*/
|
|
43
|
+
readonly pluginId?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Renders the item of one window. Called when the item is created and again by
|
|
46
|
+
* {@link AllWindowsStatusBarItemComponent.refresh}, so it must be safe to call repeatedly on the same element.
|
|
47
|
+
*
|
|
48
|
+
* @param params - The item and its window.
|
|
49
|
+
*/
|
|
50
|
+
readonly render: (params: AllWindowsStatusBarItemRenderParams) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Whether to create a status bar in a window that has none, as every popout in Obsidian `1.15.1` does.
|
|
53
|
+
* When `false`, such a window gets no item. Defaults to `true`.
|
|
54
|
+
*/
|
|
55
|
+
readonly shouldCreateMissingStatusBar?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parameters passed to {@link AllWindowsStatusBarItemComponentConstructorParams.render}.
|
|
59
|
+
*/
|
|
60
|
+
export interface AllWindowsStatusBarItemRenderParams {
|
|
61
|
+
/**
|
|
62
|
+
* The status-bar item owned by this component in {@link win}.
|
|
63
|
+
*/
|
|
64
|
+
readonly el: HTMLElement;
|
|
65
|
+
/**
|
|
66
|
+
* The window the item is in. Use its document for anything the render creates outside the item.
|
|
67
|
+
*/
|
|
68
|
+
readonly win: Window;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Parameters for {@link registerAllWindowsStatusBarItem}.
|
|
72
|
+
*/
|
|
73
|
+
export interface RegisterAllWindowsStatusBarItemParams extends AllWindowsStatusBarItemComponentConstructorParams {
|
|
74
|
+
/**
|
|
75
|
+
* The component that owns the items: they are removed when it unloads.
|
|
76
|
+
*/
|
|
77
|
+
readonly component: Component;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Shows one status-bar item in the main window and in every desktop popout while loaded.
|
|
81
|
+
*/
|
|
82
|
+
export declare class AllWindowsStatusBarItemComponent extends ComponentEx {
|
|
83
|
+
/**
|
|
84
|
+
* The Obsidian app instance.
|
|
85
|
+
*/
|
|
86
|
+
protected readonly app: App;
|
|
87
|
+
/**
|
|
88
|
+
* The CSS classes added to each item.
|
|
89
|
+
*/
|
|
90
|
+
protected readonly itemClasses: readonly string[];
|
|
91
|
+
/**
|
|
92
|
+
* Renders the item of one window.
|
|
93
|
+
*/
|
|
94
|
+
protected readonly renderItem: (params: AllWindowsStatusBarItemRenderParams) => void;
|
|
95
|
+
/**
|
|
96
|
+
* Whether a status bar is created in a window that has none.
|
|
97
|
+
*/
|
|
98
|
+
protected readonly shouldCreateMissingStatusBar: boolean;
|
|
99
|
+
private readonly itemElsByWindow;
|
|
100
|
+
/**
|
|
101
|
+
* Creates a new instance of the `AllWindowsStatusBarItemComponent` class.
|
|
102
|
+
*
|
|
103
|
+
* @param params - The {@link AllWindowsStatusBarItemComponentConstructorParams}.
|
|
104
|
+
*/
|
|
105
|
+
constructor(params: AllWindowsStatusBarItemComponentConstructorParams);
|
|
106
|
+
/**
|
|
107
|
+
* Gets the item of a window.
|
|
108
|
+
*
|
|
109
|
+
* @param win - The window.
|
|
110
|
+
* @returns The item, or `null` when the window has none.
|
|
111
|
+
*/
|
|
112
|
+
getItemEl(win: Window): HTMLElement | null;
|
|
113
|
+
/**
|
|
114
|
+
* Gets the items of every window that has one.
|
|
115
|
+
*
|
|
116
|
+
* @returns The items.
|
|
117
|
+
*/
|
|
118
|
+
getItemEls(): HTMLElement[];
|
|
119
|
+
/**
|
|
120
|
+
* Creates the item in every window, now and as popouts open. A no-op on mobile.
|
|
121
|
+
*/
|
|
122
|
+
onload(): void;
|
|
123
|
+
/**
|
|
124
|
+
* Renders the item of every window again.
|
|
125
|
+
*/
|
|
126
|
+
refresh(): void;
|
|
127
|
+
private attach;
|
|
128
|
+
private findOrCreateStatusBar;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Gets the class `Plugin.addStatusBarItem` adds to a plugin's status-bar items.
|
|
132
|
+
* It copies Obsidian `1.15.1` exactly, including that only the first disallowed character is replaced.
|
|
133
|
+
*
|
|
134
|
+
* @param pluginId - The plugin id.
|
|
135
|
+
* @returns The CSS class.
|
|
136
|
+
*/
|
|
137
|
+
export declare function getPluginStatusBarItemCssClass(pluginId: string): string;
|
|
138
|
+
/**
|
|
139
|
+
* Shows one status-bar item in the main window and in every desktop popout, including popouts opened later, until
|
|
140
|
+
* the owning component unloads.
|
|
141
|
+
*
|
|
142
|
+
* @param params - The {@link RegisterAllWindowsStatusBarItemParams}. The owner must be loaded.
|
|
143
|
+
* @returns The {@link AllWindowsStatusBarItemComponent}. Call its {@link AllWindowsStatusBarItemComponent.refresh} to
|
|
144
|
+
* render every item again, or remove it from the owner to stop early.
|
|
145
|
+
*/
|
|
146
|
+
export declare function registerAllWindowsStatusBarItem(params: RegisterAllWindowsStatusBarItemParams): AllWindowsStatusBarItemComponent;
|
|
@@ -0,0 +1,154 @@
|
|
|
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
|
+
|
|
33
|
+
import { Platform } from "obsidian";
|
|
34
|
+
import { AllWindowsEventComponent } from "./all-windows-event-component.mjs";
|
|
35
|
+
import { ComponentEx } from "./component-ex.mjs";
|
|
36
|
+
const WINDOW_STATUS_BAR_CSS_CLASS = "obsidian-lib-window-status-bar";
|
|
37
|
+
const APP_CONTAINER_CSS_CLASS = "app-container";
|
|
38
|
+
const STATUS_BAR_CSS_CLASS = "status-bar";
|
|
39
|
+
const STATUS_BAR_ITEM_CSS_CLASS = "status-bar-item";
|
|
40
|
+
class AllWindowsStatusBarItemComponent extends ComponentEx {
|
|
41
|
+
/**
|
|
42
|
+
* The Obsidian app instance.
|
|
43
|
+
*/
|
|
44
|
+
app;
|
|
45
|
+
/**
|
|
46
|
+
* The CSS classes added to each item.
|
|
47
|
+
*/
|
|
48
|
+
itemClasses;
|
|
49
|
+
/**
|
|
50
|
+
* Renders the item of one window.
|
|
51
|
+
*/
|
|
52
|
+
renderItem;
|
|
53
|
+
/**
|
|
54
|
+
* Whether a status bar is created in a window that has none.
|
|
55
|
+
*/
|
|
56
|
+
shouldCreateMissingStatusBar;
|
|
57
|
+
itemElsByWindow = /* @__PURE__ */ new Map();
|
|
58
|
+
/**
|
|
59
|
+
* Creates a new instance of the `AllWindowsStatusBarItemComponent` class.
|
|
60
|
+
*
|
|
61
|
+
* @param params - The {@link AllWindowsStatusBarItemComponentConstructorParams}.
|
|
62
|
+
*/
|
|
63
|
+
constructor(params) {
|
|
64
|
+
super();
|
|
65
|
+
this.app = params.app;
|
|
66
|
+
this.renderItem = params.render;
|
|
67
|
+
this.shouldCreateMissingStatusBar = params.shouldCreateMissingStatusBar ?? true;
|
|
68
|
+
this.itemClasses = [
|
|
69
|
+
STATUS_BAR_ITEM_CSS_CLASS,
|
|
70
|
+
...params.pluginId === void 0 ? [] : [getPluginStatusBarItemCssClass(params.pluginId)],
|
|
71
|
+
...params.cls ?? []
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Gets the item of a window.
|
|
76
|
+
*
|
|
77
|
+
* @param win - The window.
|
|
78
|
+
* @returns The item, or `null` when the window has none.
|
|
79
|
+
*/
|
|
80
|
+
getItemEl(win) {
|
|
81
|
+
return this.itemElsByWindow.get(win) ?? null;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Gets the items of every window that has one.
|
|
85
|
+
*
|
|
86
|
+
* @returns The items.
|
|
87
|
+
*/
|
|
88
|
+
getItemEls() {
|
|
89
|
+
return [...this.itemElsByWindow.values()];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates the item in every window, now and as popouts open. A no-op on mobile.
|
|
93
|
+
*/
|
|
94
|
+
onload() {
|
|
95
|
+
super.onload();
|
|
96
|
+
if (Platform.isMobile) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const allWindowsEventComponent = this.addChild(new AllWindowsEventComponent(this.app));
|
|
100
|
+
allWindowsEventComponent.registerAllWindowsHandler((win) => this.attach(win));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Renders the item of every window again.
|
|
104
|
+
*/
|
|
105
|
+
refresh() {
|
|
106
|
+
for (const [win, el] of this.itemElsByWindow) {
|
|
107
|
+
this.renderItem({ el, win });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
attach(win) {
|
|
111
|
+
const statusBarEl = this.findOrCreateStatusBar(win.document);
|
|
112
|
+
if (!statusBarEl) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const el = statusBarEl.createDiv({ cls: [...this.itemClasses] });
|
|
116
|
+
this.itemElsByWindow.set(win, el);
|
|
117
|
+
this.renderItem({ el, win });
|
|
118
|
+
return () => {
|
|
119
|
+
this.itemElsByWindow.delete(win);
|
|
120
|
+
el.remove();
|
|
121
|
+
if (statusBarEl.classList.contains(WINDOW_STATUS_BAR_CSS_CLASS) && !statusBarEl.querySelector(`:scope > .${STATUS_BAR_ITEM_CSS_CLASS}`)) {
|
|
122
|
+
statusBarEl.remove();
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
findOrCreateStatusBar(doc) {
|
|
127
|
+
const appContainerEl = doc.body.querySelector(`:scope > .${APP_CONTAINER_CSS_CLASS}`);
|
|
128
|
+
if (!appContainerEl) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const statusBarEl = appContainerEl.querySelector(`:scope > .${STATUS_BAR_CSS_CLASS}`);
|
|
132
|
+
if (statusBarEl) {
|
|
133
|
+
return statusBarEl;
|
|
134
|
+
}
|
|
135
|
+
if (!this.shouldCreateMissingStatusBar) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return appContainerEl.createDiv({ cls: [STATUS_BAR_CSS_CLASS, WINDOW_STATUS_BAR_CSS_CLASS] });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function getPluginStatusBarItemCssClass(pluginId) {
|
|
142
|
+
return `plugin-${pluginId.toLowerCase().replace(/[^_a-zA-Z0-9-]/, "-")}`;
|
|
143
|
+
}
|
|
144
|
+
function registerAllWindowsStatusBarItem(params) {
|
|
145
|
+
const { component, ...constructorParams } = params;
|
|
146
|
+
return component.addChild(new AllWindowsStatusBarItemComponent(constructorParams));
|
|
147
|
+
}
|
|
148
|
+
export {
|
|
149
|
+
AllWindowsStatusBarItemComponent,
|
|
150
|
+
WINDOW_STATUS_BAR_CSS_CLASS,
|
|
151
|
+
getPluginStatusBarItemCssClass,
|
|
152
|
+
registerAllWindowsStatusBarItem
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2FsbC13aW5kb3dzLXN0YXR1cy1iYXItaXRlbS1jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNob3dzIG9uZSBzdGF0dXMtYmFyIGl0ZW0gaW4gdGhlIG1haW4gd2luZG93IGFuZCBpbiBldmVyeSBkZXNrdG9wIHBvcG91dCwgaW5jbHVkaW5nIHBvcG91dHMgb3BlbmVkIGxhdGVyLCBhbmRcbiAqIHJlbW92ZXMgb25seSBpdHMgb3duIGl0ZW1zIHdoZW4gYSB3aW5kb3cgY2xvc2VzIG9yIHRoZSBjb21wb25lbnQgdW5sb2Fkcy5cbiAqXG4gKiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMWA6IHRoZSBtYWluIHdpbmRvdyBidWlsZHMgYGJvZHkgPiAuYXBwLWNvbnRhaW5lciA+IC5zdGF0dXMtYmFyYCwgYW5kXG4gKiBgUGx1Z2luLmFkZFN0YXR1c0Jhckl0ZW1gIGlzIGEgYC5zdGF0dXMtYmFyLWl0ZW1gIGNyZWF0ZWQgaW4gaXQuIEEgcG9wb3V0IGJ1aWxkcyBgYm9keSA+IC5hcHAtY29udGFpbmVyYCB3aXRoIHRoZVxuICogd29ya3NwYWNlIG9ubHksIGFuZCAqKm5vIHN0YXR1cyBiYXIqKi4gYGFwcC5jc3NgIHN0eWxlcyBgLnN0YXR1cy1iYXJgIHdpdGhvdXQgc2NvcGluZyBpdCB0byBhIHdpbmRvdywgc28gYVxuICogYC5zdGF0dXMtYmFyYCBjcmVhdGVkIGluc2lkZSBhIHBvcG91dCdzIGAuYXBwLWNvbnRhaW5lcmAgbG9va3MgYW5kIHNpdHMgZXhhY3RseSBsaWtlIHRoZSBtYWluIG9uZS4gQnkgZGVmYXVsdFxuICogdGhpcyBjb21wb25lbnQgY3JlYXRlcyB0aGF0IGJhciBpbiBhIHBvcG91dCB0aGF0IGxhY2tzIG9uZSwgYW5kIG1hcmtzIGl0IHdpdGhcbiAqIHtAbGluayBXSU5ET1dfU1RBVFVTX0JBUl9DU1NfQ0xBU1N9LiBUaGUgbWFya2VyIGlzIGEgd2lyZSBjb25zdGFudCBzaGFyZWQgYnkgZXZlcnkgY29weSBvZiB0aGlzIGxpYnJhcnk6IGFueSBjb3B5XG4gKiByZXVzZXMgYSBtYXJrZWQgYmFyLCBhbmQgd2hpY2hldmVyIGNvcHkgcmVtb3ZlcyB0aGUgbGFzdCBpdGVtIGZyb20gaXQgcmVtb3ZlcyB0aGUgYmFyIHRvby5cbiAqXG4gKiBNb2JpbGUgaGFzIG5vIHBvcG91dHMsIGFuZCBgYXBwLmNzc2AgaGlkZXMgYC5zdGF0dXMtYmFyYCB1bmRlciBgLmlzLW1vYmlsZWAsIHNvIG9uIG1vYmlsZSB0aGUgY29tcG9uZW50IGNyZWF0ZXNcbiAqIG5vdGhpbmcgYW5kIG5ldmVyIGNhbGxzIHRoZSByZW5kZXIgY2FsbGJhY2suXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIENvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBBbGxXaW5kb3dzRXZlbnRDb21wb25lbnQgfSBmcm9tICcuL2FsbC13aW5kb3dzLWV2ZW50LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBUaGUgY2xhc3MgdGhhdCBtYXJrcyBhIHN0YXR1cyBiYXIgdGhpcyBsaWJyYXJ5IGNyZWF0ZWQgaW4gYSB3aW5kb3cgdGhhdCBoYWQgbm9uZS5cbiAqIE90aGVyIGNvcGllcyBvZiB0aGUgbGlicmFyeSBtYXRjaCBpdCwgc28gaXRzIHZhbHVlIG11c3QgbmV2ZXIgY2hhbmdlLlxuICovXG5leHBvcnQgY29uc3QgV0lORE9XX1NUQVRVU19CQVJfQ1NTX0NMQVNTID0gJ29ic2lkaWFuLWxpYi13aW5kb3ctc3RhdHVzLWJhcic7XG5cbmNvbnN0IEFQUF9DT05UQUlORVJfQ1NTX0NMQVNTID0gJ2FwcC1jb250YWluZXInO1xuY29uc3QgU1RBVFVTX0JBUl9DU1NfQ0xBU1MgPSAnc3RhdHVzLWJhcic7XG5jb25zdCBTVEFUVVNfQkFSX0lURU1fQ1NTX0NMQVNTID0gJ3N0YXR1cy1iYXItaXRlbSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1Db21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEV4dHJhIENTUyBjbGFzc2VzIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICByZWFkb25seSBjbHM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC4gV2hlbiBnaXZlbiwgZWFjaCBpdGVtIGdldHMgdGhlIGBwbHVnaW4tPGlkPmAgY2xhc3MgdGhhdCBgUGx1Z2luLmFkZFN0YXR1c0Jhckl0ZW1gIGFkZHMsIHNvXG4gICAqIHRoZW1lcyBhbmQgQ1NTIHNuaXBwZXRzIHRoYXQgdGFyZ2V0IHRoZSBwbHVnaW4ncyBzdGF0dXMtYmFyIGl0ZW1zIG1hdGNoIHRoZXNlIHRvby5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBpdGVtIG9mIG9uZSB3aW5kb3cuIENhbGxlZCB3aGVuIHRoZSBpdGVtIGlzIGNyZWF0ZWQgYW5kIGFnYWluIGJ5XG4gICAqIHtAbGluayBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudC5yZWZyZXNofSwgc28gaXQgbXVzdCBiZSBzYWZlIHRvIGNhbGwgcmVwZWF0ZWRseSBvbiB0aGUgc2FtZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGl0ZW0gYW5kIGl0cyB3aW5kb3cuXG4gICAqL1xuICByZWFkb25seSByZW5kZXI6IChwYXJhbXM6IEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtUmVuZGVyUGFyYW1zKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNyZWF0ZSBhIHN0YXR1cyBiYXIgaW4gYSB3aW5kb3cgdGhhdCBoYXMgbm9uZSwgYXMgZXZlcnkgcG9wb3V0IGluIE9ic2lkaWFuIGAxLjE1LjFgIGRvZXMuXG4gICAqIFdoZW4gYGZhbHNlYCwgc3VjaCBhIHdpbmRvdyBnZXRzIG5vIGl0ZW0uIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZENyZWF0ZU1pc3NpbmdTdGF0dXNCYXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIHtAbGluayBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zLnJlbmRlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1SZW5kZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHN0YXR1cy1iYXIgaXRlbSBvd25lZCBieSB0aGlzIGNvbXBvbmVudCBpbiB7QGxpbmsgd2lufS5cbiAgICovXG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIHdpbmRvdyB0aGUgaXRlbSBpcyBpbi4gVXNlIGl0cyBkb2N1bWVudCBmb3IgYW55dGhpbmcgdGhlIHJlbmRlciBjcmVhdGVzIG91dHNpZGUgdGhlIGl0ZW0uXG4gICAqL1xuICByZWFkb25seSB3aW46IFdpbmRvdztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJBbGxXaW5kb3dzU3RhdHVzQmFySXRlbX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJBbGxXaW5kb3dzU3RhdHVzQmFySXRlbVBhcmFtcyBleHRlbmRzIEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB0aGF0IG93bnMgdGhlIGl0ZW1zOiB0aGV5IGFyZSByZW1vdmVkIHdoZW4gaXQgdW5sb2Fkcy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudDogQ29tcG9uZW50O1xufVxuXG4vKipcbiAqIFNob3dzIG9uZSBzdGF0dXMtYmFyIGl0ZW0gaW4gdGhlIG1haW4gd2luZG93IGFuZCBpbiBldmVyeSBkZXNrdG9wIHBvcG91dCB3aGlsZSBsb2FkZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3NlcyBhZGRlZCB0byBlYWNoIGl0ZW0uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbUNsYXNzZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBpdGVtIG9mIG9uZSB3aW5kb3cuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVuZGVySXRlbTogKHBhcmFtczogQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1SZW5kZXJQYXJhbXMpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBzdGF0dXMgYmFyIGlzIGNyZWF0ZWQgaW4gYSB3aW5kb3cgdGhhdCBoYXMgbm9uZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzaG91bGRDcmVhdGVNaXNzaW5nU3RhdHVzQmFyOiBib29sZWFuO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbUVsc0J5V2luZG93ID0gbmV3IE1hcDxXaW5kb3csIEhUTUxFbGVtZW50PigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1Db21wb25lbnRgIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zfS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnJlbmRlckl0ZW0gPSBwYXJhbXMucmVuZGVyO1xuICAgIHRoaXMuc2hvdWxkQ3JlYXRlTWlzc2luZ1N0YXR1c0JhciA9IHBhcmFtcy5zaG91bGRDcmVhdGVNaXNzaW5nU3RhdHVzQmFyID8/IHRydWU7XG4gICAgdGhpcy5pdGVtQ2xhc3NlcyA9IFtcbiAgICAgIFNUQVRVU19CQVJfSVRFTV9DU1NfQ0xBU1MsXG4gICAgICAuLi5wYXJhbXMucGx1Z2luSWQgPT09IHVuZGVmaW5lZCA/IFtdIDogW2dldFBsdWdpblN0YXR1c0Jhckl0ZW1Dc3NDbGFzcyhwYXJhbXMucGx1Z2luSWQpXSxcbiAgICAgIC4uLnBhcmFtcy5jbHMgPz8gW11cbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW0gb2YgYSB3aW5kb3cuXG4gICAqXG4gICAqIEBwYXJhbSB3aW4gLSBUaGUgd2luZG93LlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSwgb3IgYG51bGxgIHdoZW4gdGhlIHdpbmRvdyBoYXMgbm9uZS5cbiAgICovXG4gIHB1YmxpYyBnZXRJdGVtRWwod2luOiBXaW5kb3cpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLml0ZW1FbHNCeVdpbmRvdy5nZXQod2luKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW1zIG9mIGV2ZXJ5IHdpbmRvdyB0aGF0IGhhcyBvbmUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBnZXRJdGVtRWxzKCk6IEhUTUxFbGVtZW50W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5pdGVtRWxzQnlXaW5kb3cudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGl0ZW0gaW4gZXZlcnkgd2luZG93LCBub3cgYW5kIGFzIHBvcG91dHMgb3Blbi4gQSBuby1vcCBvbiBtb2JpbGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuXG4gICAgaWYgKFBsYXRmb3JtLmlzTW9iaWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50KHRoaXMuYXBwKSk7XG4gICAgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50LnJlZ2lzdGVyQWxsV2luZG93c0hhbmRsZXIoKHdpbikgPT4gdGhpcy5hdHRhY2god2luKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgaXRlbSBvZiBldmVyeSB3aW5kb3cgYWdhaW4uXG4gICAqL1xuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFt3aW4sIGVsXSBvZiB0aGlzLml0ZW1FbHNCeVdpbmRvdykge1xuICAgICAgdGhpcy5yZW5kZXJJdGVtKHsgZWwsIHdpbiB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaCh3aW46IFdpbmRvdyk6ICgoKSA9PiB2b2lkKSB8IG51bGwge1xuICAgIGNvbnN0IHN0YXR1c0JhckVsID0gdGhpcy5maW5kT3JDcmVhdGVTdGF0dXNCYXIod2luLmRvY3VtZW50KTtcbiAgICBpZiAoIXN0YXR1c0JhckVsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBlbCA9IHN0YXR1c0JhckVsLmNyZWF0ZURpdih7IGNsczogWy4uLnRoaXMuaXRlbUNsYXNzZXNdIH0pO1xuICAgIHRoaXMuaXRlbUVsc0J5V2luZG93LnNldCh3aW4sIGVsKTtcbiAgICB0aGlzLnJlbmRlckl0ZW0oeyBlbCwgd2luIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuaXRlbUVsc0J5V2luZG93LmRlbGV0ZSh3aW4pO1xuICAgICAgZWwucmVtb3ZlKCk7XG4gICAgICBpZiAoc3RhdHVzQmFyRWwuY2xhc3NMaXN0LmNvbnRhaW5zKFdJTkRPV19TVEFUVVNfQkFSX0NTU19DTEFTUykgJiYgIXN0YXR1c0JhckVsLnF1ZXJ5U2VsZWN0b3IoYDpzY29wZSA+IC4ke1NUQVRVU19CQVJfSVRFTV9DU1NfQ0xBU1N9YCkpIHtcbiAgICAgICAgc3RhdHVzQmFyRWwucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE9yQ3JlYXRlU3RhdHVzQmFyKGRvYzogRG9jdW1lbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IGFwcENvbnRhaW5lckVsID0gZG9jLmJvZHkucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYDpzY29wZSA+IC4ke0FQUF9DT05UQUlORVJfQ1NTX0NMQVNTfWApO1xuICAgIGlmICghYXBwQ29udGFpbmVyRWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1c0JhckVsID0gYXBwQ29udGFpbmVyRWwucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYDpzY29wZSA+IC4ke1NUQVRVU19CQVJfQ1NTX0NMQVNTfWApO1xuICAgIGlmIChzdGF0dXNCYXJFbCkge1xuICAgICAgcmV0dXJuIHN0YXR1c0JhckVsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zaG91bGRDcmVhdGVNaXNzaW5nU3RhdHVzQmFyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBwQ29udGFpbmVyRWwuY3JlYXRlRGl2KHsgY2xzOiBbU1RBVFVTX0JBUl9DU1NfQ0xBU1MsIFdJTkRPV19TVEFUVVNfQkFSX0NTU19DTEFTU10gfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjbGFzcyBgUGx1Z2luLmFkZFN0YXR1c0Jhckl0ZW1gIGFkZHMgdG8gYSBwbHVnaW4ncyBzdGF0dXMtYmFyIGl0ZW1zLlxuICogSXQgY29waWVzIE9ic2lkaWFuIGAxLjE1LjFgIGV4YWN0bHksIGluY2x1ZGluZyB0aGF0IG9ubHkgdGhlIGZpcnN0IGRpc2FsbG93ZWQgY2hhcmFjdGVyIGlzIHJlcGxhY2VkLlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gaWQuXG4gKiBAcmV0dXJucyBUaGUgQ1NTIGNsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luU3RhdHVzQmFySXRlbUNzc0NsYXNzKHBsdWdpbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHBsdWdpbi0ke3BsdWdpbklkLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15fYS16QS1aMC05LV0vLCAnLScpfWA7XG59XG5cbi8qKlxuICogU2hvd3Mgb25lIHN0YXR1cy1iYXIgaXRlbSBpbiB0aGUgbWFpbiB3aW5kb3cgYW5kIGluIGV2ZXJ5IGRlc2t0b3AgcG9wb3V0LCBpbmNsdWRpbmcgcG9wb3V0cyBvcGVuZWQgbGF0ZXIsIHVudGlsXG4gKiB0aGUgb3duaW5nIGNvbXBvbmVudCB1bmxvYWRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlZ2lzdGVyQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1QYXJhbXN9LiBUaGUgb3duZXIgbXVzdCBiZSBsb2FkZWQuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtQ29tcG9uZW50fS4gQ2FsbCBpdHMge0BsaW5rIEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtQ29tcG9uZW50LnJlZnJlc2h9IHRvXG4gKiAgIHJlbmRlciBldmVyeSBpdGVtIGFnYWluLCBvciByZW1vdmUgaXQgZnJvbSB0aGUgb3duZXIgdG8gc3RvcCBlYXJseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQWxsV2luZG93c1N0YXR1c0Jhckl0ZW0ocGFyYW1zOiBSZWdpc3RlckFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtUGFyYW1zKTogQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1Db21wb25lbnQge1xuICBjb25zdCB7IGNvbXBvbmVudCwgLi4uY29uc3RydWN0b3JQYXJhbXMgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGNvbXBvbmVudC5hZGRDaGlsZChuZXcgQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1Db21wb25lbnQoY29uc3RydWN0b3JQYXJhbXMpKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkEsU0FBUyxnQkFBZ0I7QUFFekIsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxtQkFBbUI7QUFNckIsTUFBTSw4QkFBOEI7QUFFM0MsTUFBTSwwQkFBMEI7QUFDaEMsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSw0QkFBNEI7QUFpRTNCLE1BQU0seUNBQXlDLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUk3QztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBLEVBRUYsa0JBQWtCLG9CQUFJLElBQXlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT3pELFlBQVksUUFBMkQ7QUFDNUUsVUFBTTtBQUNOLFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssYUFBYSxPQUFPO0FBQ3pCLFNBQUssK0JBQStCLE9BQU8sZ0NBQWdDO0FBQzNFLFNBQUssY0FBYztBQUFBLE1BQ2pCO0FBQUEsTUFDQSxHQUFHLE9BQU8sYUFBYSxTQUFZLENBQUMsSUFBSSxDQUFDLCtCQUErQixPQUFPLFFBQVEsQ0FBQztBQUFBLE1BQ3hGLEdBQUcsT0FBTyxPQUFPLENBQUM7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLFVBQVUsS0FBaUM7QUFDaEQsV0FBTyxLQUFLLGdCQUFnQixJQUFJLEdBQUcsS0FBSztBQUFBLEVBQzFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sYUFBNEI7QUFDakMsV0FBTyxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsT0FBTyxDQUFDO0FBQUEsRUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtnQixTQUFlO0FBQzdCLFVBQU0sT0FBTztBQUViLFFBQUksU0FBUyxVQUFVO0FBQ3JCO0FBQUEsSUFDRjtBQUVBLFVBQU0sMkJBQTJCLEtBQUssU0FBUyxJQUFJLHlCQUF5QixLQUFLLEdBQUcsQ0FBQztBQUNyRiw2QkFBeUIsMEJBQTBCLENBQUMsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsRUFDOUU7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtPLFVBQWdCO0FBQ3JCLGVBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFLLGlCQUFpQjtBQUM1QyxXQUFLLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQztBQUFBLElBQzdCO0FBQUEsRUFDRjtBQUFBLEVBRVEsT0FBTyxLQUFrQztBQUMvQyxVQUFNLGNBQWMsS0FBSyxzQkFBc0IsSUFBSSxRQUFRO0FBQzNELFFBQUksQ0FBQyxhQUFhO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxLQUFLLFlBQVksVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFLENBQUM7QUFDL0QsU0FBSyxnQkFBZ0IsSUFBSSxLQUFLLEVBQUU7QUFDaEMsU0FBSyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFFM0IsV0FBTyxNQUFNO0FBQ1gsV0FBSyxnQkFBZ0IsT0FBTyxHQUFHO0FBQy9CLFNBQUcsT0FBTztBQUNWLFVBQUksWUFBWSxVQUFVLFNBQVMsMkJBQTJCLEtBQUssQ0FBQyxZQUFZLGNBQWMsYUFBYSx5QkFBeUIsRUFBRSxHQUFHO0FBQ3ZJLG9CQUFZLE9BQU87QUFBQSxNQUNyQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFFUSxzQkFBc0IsS0FBbUM7QUFDL0QsVUFBTSxpQkFBaUIsSUFBSSxLQUFLLGNBQTJCLGFBQWEsdUJBQXVCLEVBQUU7QUFDakcsUUFBSSxDQUFDLGdCQUFnQjtBQUNuQixhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sY0FBYyxlQUFlLGNBQTJCLGFBQWEsb0JBQW9CLEVBQUU7QUFDakcsUUFBSSxhQUFhO0FBQ2YsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLENBQUMsS0FBSyw4QkFBOEI7QUFDdEMsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLGVBQWUsVUFBVSxFQUFFLEtBQUssQ0FBQyxzQkFBc0IsMkJBQTJCLEVBQUUsQ0FBQztBQUFBLEVBQzlGO0FBQ0Y7QUFTTyxTQUFTLCtCQUErQixVQUEwQjtBQUN2RSxTQUFPLFVBQVUsU0FBUyxZQUFZLEVBQUUsUUFBUSxrQkFBa0IsR0FBRyxDQUFDO0FBQ3hFO0FBVU8sU0FBUyxnQ0FBZ0MsUUFBaUY7QUFDL0gsUUFBTSxFQUFFLFdBQVcsR0FBRyxrQkFBa0IsSUFBSTtBQUM1QyxTQUFPLFVBQVUsU0FBUyxJQUFJLGlDQUFpQyxpQkFBaUIsQ0FBQztBQUNuRjsiLCJuYW1lcyI6W119
|
|
@@ -26,6 +26,14 @@ export declare class EmbedExtensionsComponent extends ComponentEx {
|
|
|
26
26
|
* Registers the specified file extensions with the given embed type in the Obsidian app.
|
|
27
27
|
* The extensions will be automatically unregistered when the component is unloaded.
|
|
28
28
|
*
|
|
29
|
+
* The registration is all or nothing: Obsidian throws for an extension that is already registered (by the core or by
|
|
30
|
+
* another plugin), and in that case every extension this call registered before the conflict is unregistered again
|
|
31
|
+
* before the error is rethrown. An extension registered by someone else is never unregistered.
|
|
32
|
+
*
|
|
33
|
+
* The creator serves every surface that loads an embed: `![[file.ext#subpath]]` in Reading view and Live Preview,
|
|
34
|
+
* canvas file nodes and the page-preview hover popover. It receives the link's subpath with its leading `#`, or an
|
|
35
|
+
* empty string. Returning `null` makes Obsidian fall back to its generic file embed.
|
|
36
|
+
*
|
|
29
37
|
* @param extensions - An array of file extensions to register.
|
|
30
38
|
* @param embedCreator - The embed creator function to associate with the extensions.
|
|
31
39
|
*
|
|
@@ -19,6 +19,14 @@ class EmbedExtensionsComponent extends ComponentEx {
|
|
|
19
19
|
* Registers the specified file extensions with the given embed type in the Obsidian app.
|
|
20
20
|
* The extensions will be automatically unregistered when the component is unloaded.
|
|
21
21
|
*
|
|
22
|
+
* The registration is all or nothing: Obsidian throws for an extension that is already registered (by the core or by
|
|
23
|
+
* another plugin), and in that case every extension this call registered before the conflict is unregistered again
|
|
24
|
+
* before the error is rethrown. An extension registered by someone else is never unregistered.
|
|
25
|
+
*
|
|
26
|
+
* The creator serves every surface that loads an embed: `![[file.ext#subpath]]` in Reading view and Live Preview,
|
|
27
|
+
* canvas file nodes and the page-preview hover popover. It receives the link's subpath with its leading `#`, or an
|
|
28
|
+
* empty string. Returning `null` makes Obsidian fall back to its generic file embed.
|
|
29
|
+
*
|
|
22
30
|
* @param extensions - An array of file extensions to register.
|
|
23
31
|
* @param embedCreator - The embed creator function to associate with the extensions.
|
|
24
32
|
*
|
|
@@ -29,13 +37,22 @@ class EmbedExtensionsComponent extends ComponentEx {
|
|
|
29
37
|
*/
|
|
30
38
|
registerExtensions(extensions, embedCreator) {
|
|
31
39
|
this.ensureLoaded();
|
|
32
|
-
|
|
40
|
+
const registeredExtensions = [];
|
|
41
|
+
try {
|
|
42
|
+
for (const extension of extensions) {
|
|
43
|
+
this.app.embedRegistry.registerExtension(extension, embedCreator);
|
|
44
|
+
registeredExtensions.push(extension);
|
|
45
|
+
}
|
|
46
|
+
} catch (error) {
|
|
47
|
+
this.app.embedRegistry.unregisterExtensions(registeredExtensions);
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
33
50
|
this.register(() => {
|
|
34
|
-
this.app.embedRegistry.unregisterExtensions(
|
|
51
|
+
this.app.embedRegistry.unregisterExtensions(registeredExtensions);
|
|
35
52
|
});
|
|
36
53
|
}
|
|
37
54
|
}
|
|
38
55
|
export {
|
|
39
56
|
EmbedExtensionsComponent
|
|
40
57
|
};
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyBjbGFzcyB7QGxpbmsgRW1iZWRFeHRlbnNpb25zQ29tcG9uZW50fSB0aGF0IHJlZ2lzdGVycyBlbWJlZCBleHRlbnNpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRW1iZWRDcmVhdG9yIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCByZWdpc3RlcnMgYW5kIHVucmVnaXN0ZXJzIGVtYmVkIGV4dGVuc2lvbnMuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWZ1bCBmb3IgcGx1Z2lucyB0aGF0IHdhbnQgdG8gcmVnaXN0ZXIgY3VzdG9tIGVtYmVkIHR5cGVzIGZvciBzcGVjaWZpYyBmaWxlIGV4dGVuc2lvbnMuXG4gKiBJdCBlbnN1cmVzIHRoYXQgdGhlIGV4dGVuc2lvbnMgYXJlIHJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgdW5yZWdpc3RlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVtYmVkRXh0ZW5zaW9uc0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBFbWJlZEV4dGVuc2lvbnNDb21wb25lbnR9IGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgc3BlY2lmaWVkIGZpbGUgZXh0ZW5zaW9ucyB3aXRoIHRoZSBnaXZlbiBlbWJlZCB0eXBlIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gICAqIFRoZSBleHRlbnNpb25zIHdpbGwgYmUgYXV0b21hdGljYWxseSB1bnJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHVubG9hZGVkLlxuICAgKlxuICAgKiBUaGUgcmVnaXN0cmF0aW9uIGlzIGFsbCBvciBub3RoaW5nOiBPYnNpZGlhbiB0aHJvd3MgZm9yIGFuIGV4dGVuc2lvbiB0aGF0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAoYnkgdGhlIGNvcmUgb3IgYnlcbiAgICogYW5vdGhlciBwbHVnaW4pLCBhbmQgaW4gdGhhdCBjYXNlIGV2ZXJ5IGV4dGVuc2lvbiB0aGlzIGNhbGwgcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGNvbmZsaWN0IGlzIHVucmVnaXN0ZXJlZCBhZ2FpblxuICAgKiBiZWZvcmUgdGhlIGVycm9yIGlzIHJldGhyb3duLiBBbiBleHRlbnNpb24gcmVnaXN0ZXJlZCBieSBzb21lb25lIGVsc2UgaXMgbmV2ZXIgdW5yZWdpc3RlcmVkLlxuICAgKlxuICAgKiBUaGUgY3JlYXRvciBzZXJ2ZXMgZXZlcnkgc3VyZmFjZSB0aGF0IGxvYWRzIGFuIGVtYmVkOiBgIVtbZmlsZS5leHQjc3VicGF0aF1dYCBpbiBSZWFkaW5nIHZpZXcgYW5kIExpdmUgUHJldmlldyxcbiAgICogY2FudmFzIGZpbGUgbm9kZXMgYW5kIHRoZSBwYWdlLXByZXZpZXcgaG92ZXIgcG9wb3Zlci4gSXQgcmVjZWl2ZXMgdGhlIGxpbmsncyBzdWJwYXRoIHdpdGggaXRzIGxlYWRpbmcgYCNgLCBvciBhblxuICAgKiBlbXB0eSBzdHJpbmcuIFJldHVybmluZyBgbnVsbGAgbWFrZXMgT2JzaWRpYW4gZmFsbCBiYWNrIHRvIGl0cyBnZW5lcmljIGZpbGUgZW1iZWQuXG4gICAqXG4gICAqIEBwYXJhbSBleHRlbnNpb25zIC0gQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHJlZ2lzdGVyLlxuICAgKiBAcGFyYW0gZW1iZWRDcmVhdG9yIC0gVGhlIGVtYmVkIGNyZWF0b3IgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhlIGV4dGVuc2lvbnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGNvbXBvbmVudC5yZWdpc3RlckV4dGVuc2lvbnMoWydleHQxJywgJ2V4dDInXSwgKGNvbnRleHQsIGZpbGUsIHN1YnBhdGgpID0+IG5ldyBNeUVtYmVkQ29tcG9uZW50KGNvbnRleHQsIGZpbGUsIHN1YnBhdGgpKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJFeHRlbnNpb25zKGV4dGVuc2lvbnM6IHN0cmluZ1tdLCBlbWJlZENyZWF0b3I6IEVtYmVkQ3JlYXRvcik6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICBjb25zdCByZWdpc3RlcmVkRXh0ZW5zaW9uczogc3RyaW5nW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICB0aGlzLmFwcC5lbWJlZFJlZ2lzdHJ5LnJlZ2lzdGVyRXh0ZW5zaW9uKGV4dGVuc2lvbiwgZW1iZWRDcmVhdG9yKTtcbiAgICAgICAgcmVnaXN0ZXJlZEV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFwcC5lbWJlZFJlZ2lzdHJ5LnVucmVnaXN0ZXJFeHRlbnNpb25zKHJlZ2lzdGVyZWRFeHRlbnNpb25zKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5hcHAuZW1iZWRSZWdpc3RyeS51bnJlZ2lzdGVyRXh0ZW5zaW9ucyhyZWdpc3RlcmVkRXh0ZW5zaW9ucyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBU0EsU0FBUyxtQkFBbUI7QUFTckIsTUFBTSxpQ0FBaUMsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1qRCxZQUErQixLQUFVO0FBQzlDLFVBQU07QUFEOEI7QUFBQSxFQUV0QztBQUFBLEVBRnNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBd0IvQixtQkFBbUIsWUFBc0IsY0FBa0M7QUFDaEYsU0FBSyxhQUFhO0FBRWxCLFVBQU0sdUJBQWlDLENBQUM7QUFDeEMsUUFBSTtBQUNGLGlCQUFXLGFBQWEsWUFBWTtBQUNsQyxhQUFLLElBQUksY0FBYyxrQkFBa0IsV0FBVyxZQUFZO0FBQ2hFLDZCQUFxQixLQUFLLFNBQVM7QUFBQSxNQUNyQztBQUFBLElBQ0YsU0FBUyxPQUFPO0FBQ2QsV0FBSyxJQUFJLGNBQWMscUJBQXFCLG9CQUFvQjtBQUNoRSxZQUFNO0FBQUEsSUFDUjtBQUVBLFNBQUssU0FBUyxNQUFNO0FBQ2xCLFdBQUssSUFBSSxjQUFjLHFCQUFxQixvQkFBb0I7QUFBQSxJQUNsRSxDQUFDO0FBQUEsRUFDSDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -157,6 +157,15 @@ export declare class EmbeddableMarkdownEditorComponent extends ComponentEx {
|
|
|
157
157
|
* @returns The CodeMirror view.
|
|
158
158
|
*/
|
|
159
159
|
get editorView(): EditorView;
|
|
160
|
+
/**
|
|
161
|
+
* Whether the editor holds the focus within its window.
|
|
162
|
+
*
|
|
163
|
+
* Unlike CodeMirror's `EditorView.hasFocus`, this does not also require the window to have the operating system's
|
|
164
|
+
* focus, so it stays `true` while the user is in another application or another Obsidian window is in front.
|
|
165
|
+
*
|
|
166
|
+
* @returns `true` when the editor's content element is its document's active element.
|
|
167
|
+
*/
|
|
168
|
+
get hasFocus(): boolean;
|
|
160
169
|
/**
|
|
161
170
|
* The current document.
|
|
162
171
|
*
|