@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
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/// <reference lib="dom" />
|
|
2
3
|
/**
|
|
3
4
|
* @file
|
|
4
5
|
*
|
|
5
6
|
* Utilities for working with MarkdownView
|
|
6
7
|
*/
|
|
7
|
-
import type {
|
|
8
|
+
import type { App } from 'obsidian';
|
|
9
|
+
import { MarkdownView } from 'obsidian';
|
|
10
|
+
/**
|
|
11
|
+
* Options for {@link rerenderPreviews}.
|
|
12
|
+
*/
|
|
13
|
+
export interface RerenderPreviewsParams {
|
|
14
|
+
/**
|
|
15
|
+
* Stops waiting for the renders when aborted, rejecting with the signal's reason. The renders already requested still
|
|
16
|
+
* happen.
|
|
17
|
+
*/
|
|
18
|
+
readonly abortSignal?: AbortSignal;
|
|
19
|
+
/**
|
|
20
|
+
* The Obsidian app.
|
|
21
|
+
*/
|
|
22
|
+
readonly app: App;
|
|
23
|
+
/**
|
|
24
|
+
* The code block language whose blocks to render again, matched exactly and case-sensitively, the way Obsidian matches a
|
|
25
|
+
* code block processor's language. Only the sections holding such a block are rendered again, and a view holding none
|
|
26
|
+
* is left alone.
|
|
27
|
+
*
|
|
28
|
+
* @default `null`, which renders every section of every Reading view again
|
|
29
|
+
*/
|
|
30
|
+
readonly language?: null | string;
|
|
31
|
+
}
|
|
8
32
|
/**
|
|
9
33
|
* Get the full HTML content of the current MarkdownView
|
|
10
34
|
*
|
|
@@ -12,3 +36,26 @@ import type { MarkdownView } from 'obsidian';
|
|
|
12
36
|
* @returns The full HTML of the MarkdownView
|
|
13
37
|
*/
|
|
14
38
|
export declare function getFullContentHtml(view: MarkdownView): string;
|
|
39
|
+
/**
|
|
40
|
+
* Renders the open Reading views again, so a markdown post-processor or code block processor registered or reconfigured
|
|
41
|
+
* since they rendered applies to them.
|
|
42
|
+
*
|
|
43
|
+
* It covers every Markdown view in every window, popouts included. A full refresh is what Obsidian itself does when a
|
|
44
|
+
* post-processor is registered: every section is rendered again, except the header holding the inline title and the
|
|
45
|
+
* properties, and the footer holding the backlinks, which keep their DOM. With a `language`, only the sections holding a
|
|
46
|
+
* code block of that language are rendered again. The note is never written, the view mode never changes, and the
|
|
47
|
+
* scroll position is kept by Obsidian's renderer.
|
|
48
|
+
*
|
|
49
|
+
* The promise settles once every view SHOWN in Reading view has finished rendering, the promises of asynchronous
|
|
50
|
+
* post-processors included. A preview that is not shown (a background tab, a view in editing mode) is marked to render
|
|
51
|
+
* again when it is next shown, and is not waited for, since Obsidian does not render it until then. A view that is closed,
|
|
52
|
+
* hidden or switched out of Reading view while rendering stops being waited for. A post-processor whose promise never
|
|
53
|
+
* settles, or rejects, keeps its view's render open, exactly as it keeps Obsidian's own render open; pass an
|
|
54
|
+
* `abortSignal` to bound the wait.
|
|
55
|
+
*
|
|
56
|
+
* Hover popovers, embeds, canvas cards and Live Preview widgets are not refreshed.
|
|
57
|
+
*
|
|
58
|
+
* @param params - The options.
|
|
59
|
+
* @returns A promise that resolves once the shown Reading views have rendered.
|
|
60
|
+
*/
|
|
61
|
+
export declare function rerenderPreviews(params: RerenderPreviewsParams): Promise<void>;
|
|
@@ -2,7 +2,91 @@
|
|
|
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 ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
7
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
8
|
+
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function ensureBrowserProcess() {
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return "/";
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: "android"
|
|
19
|
+
};
|
|
20
|
+
const existingProcess = globalThis.process;
|
|
21
|
+
if (!existingProcess) {
|
|
22
|
+
globalThis.process = browserProcess;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (existingProcess.versions?.node) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const existingProcessRecord = existingProcess;
|
|
29
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
30
|
+
existingProcessRecord[key] ??= value;
|
|
31
|
+
}
|
|
32
|
+
existingProcessRecord["browser"] = true;
|
|
33
|
+
}
|
|
5
34
|
|
|
35
|
+
ensureDisposeSymbols();
|
|
36
|
+
ensureBrowserProcess();
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
|
|
40
|
+
var __typeError = (msg) => {
|
|
41
|
+
throw TypeError(msg);
|
|
42
|
+
};
|
|
43
|
+
var __using = (stack, value, async) => {
|
|
44
|
+
if (value != null) {
|
|
45
|
+
if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
|
|
46
|
+
var dispose, inner;
|
|
47
|
+
if (async) dispose = value[__knownSymbol("asyncDispose")];
|
|
48
|
+
if (dispose === void 0) {
|
|
49
|
+
dispose = value[__knownSymbol("dispose")];
|
|
50
|
+
if (async) inner = dispose;
|
|
51
|
+
}
|
|
52
|
+
if (typeof dispose !== "function") __typeError("Object not disposable");
|
|
53
|
+
if (inner) dispose = function() {
|
|
54
|
+
try {
|
|
55
|
+
inner.call(this);
|
|
56
|
+
} catch (e) {
|
|
57
|
+
return Promise.reject(e);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
stack.push([async, dispose, value]);
|
|
61
|
+
} else if (async) {
|
|
62
|
+
stack.push([async]);
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
};
|
|
66
|
+
var __callDispose = (stack, error, hasError) => {
|
|
67
|
+
var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
|
|
68
|
+
return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
|
|
69
|
+
};
|
|
70
|
+
var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
|
|
71
|
+
var next = (it) => {
|
|
72
|
+
while (it = stack.pop()) {
|
|
73
|
+
try {
|
|
74
|
+
var result = it[1] && it[1].call(it[2]);
|
|
75
|
+
if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
|
|
76
|
+
} catch (e) {
|
|
77
|
+
fail(e);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (hasError) throw error;
|
|
81
|
+
};
|
|
82
|
+
return next();
|
|
83
|
+
};
|
|
84
|
+
import { onAbort } from "@mnaoumov/typescript-lib/abort-controller";
|
|
85
|
+
import { noop } from "@mnaoumov/typescript-lib/function";
|
|
86
|
+
import {
|
|
87
|
+
Component,
|
|
88
|
+
MarkdownView
|
|
89
|
+
} from "obsidian";
|
|
6
90
|
function getFullContentHtml(view) {
|
|
7
91
|
const codeMirror = view.editor.cm;
|
|
8
92
|
codeMirror.viewState.printing = true;
|
|
@@ -12,7 +96,113 @@ function getFullContentHtml(view) {
|
|
|
12
96
|
codeMirror.measure();
|
|
13
97
|
return html;
|
|
14
98
|
}
|
|
99
|
+
async function rerenderPreviews(params) {
|
|
100
|
+
var _stack = [];
|
|
101
|
+
try {
|
|
102
|
+
const { abortSignal, app, language = null } = params;
|
|
103
|
+
abortSignal?.throwIfAborted();
|
|
104
|
+
const views = [];
|
|
105
|
+
app.workspace.iterateAllLeaves((leaf) => {
|
|
106
|
+
if (leaf.view instanceof MarkdownView) {
|
|
107
|
+
views.push(leaf.view);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
const waits = [];
|
|
111
|
+
for (const view of views) {
|
|
112
|
+
const isShown = isPreviewShown(view);
|
|
113
|
+
const scroll = isShown ? view.previewMode.getScroll() : null;
|
|
114
|
+
if (language === null) {
|
|
115
|
+
view.previewMode.rerender(true);
|
|
116
|
+
} else {
|
|
117
|
+
const sections = getSectionsWithLanguage(view.previewMode, language);
|
|
118
|
+
if (sections.length === 0) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
rerenderSections(view.previewMode, sections);
|
|
122
|
+
}
|
|
123
|
+
if (scroll !== null) {
|
|
124
|
+
waits.push(waitForPreviewRender(app, view, scroll));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (waits.length === 0) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const allRendered = Promise.all(waits);
|
|
131
|
+
if (!abortSignal) {
|
|
132
|
+
await allRendered;
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
let resolveAborted = noop;
|
|
136
|
+
const aborted = new Promise((resolve) => {
|
|
137
|
+
resolveAborted = resolve;
|
|
138
|
+
});
|
|
139
|
+
const _abortListener = __using(_stack, onAbort(abortSignal, () => {
|
|
140
|
+
resolveAborted();
|
|
141
|
+
}));
|
|
142
|
+
await Promise.race([allRendered, aborted]);
|
|
143
|
+
abortSignal.throwIfAborted();
|
|
144
|
+
} catch (_) {
|
|
145
|
+
var _error = _, _hasError = true;
|
|
146
|
+
} finally {
|
|
147
|
+
__callDispose(_stack, _error, _hasError);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function getSectionsWithLanguage(previewMode, language) {
|
|
151
|
+
const { renderer } = previewMode;
|
|
152
|
+
const selector = `code.language-${CSS.escape(language)}`;
|
|
153
|
+
const parser = new DOMParser();
|
|
154
|
+
return renderer.sections.filter(
|
|
155
|
+
(section) => section !== renderer.header && section !== renderer.footer && !!section.html && parser.parseFromString(section.html, "text/html").querySelector(selector) !== null
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
function isPreviewShown(view) {
|
|
159
|
+
if (view.getMode() !== "preview") {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const { previewEl } = view.previewMode.renderer;
|
|
163
|
+
return previewEl.isConnected && previewEl.offsetParent !== null && previewEl.offsetWidth > 0;
|
|
164
|
+
}
|
|
165
|
+
function rerenderSections(previewMode, sections) {
|
|
166
|
+
for (const section of sections) {
|
|
167
|
+
section.rendered = false;
|
|
168
|
+
section.el.empty();
|
|
169
|
+
}
|
|
170
|
+
previewMode.renderer.queueRender();
|
|
171
|
+
}
|
|
172
|
+
async function waitForPreviewRender(app, view, scroll) {
|
|
173
|
+
const { previewMode } = view;
|
|
174
|
+
const isRendered = await new Promise((resolve) => {
|
|
175
|
+
let isSettled = false;
|
|
176
|
+
const watcher = new Component();
|
|
177
|
+
function settle(isRenderedNow) {
|
|
178
|
+
if (isSettled) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
isSettled = true;
|
|
182
|
+
previewMode.removeChild(watcher);
|
|
183
|
+
resolve(isRenderedNow);
|
|
184
|
+
}
|
|
185
|
+
function settleIfHidden() {
|
|
186
|
+
if (!isPreviewShown(view)) {
|
|
187
|
+
settle(false);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
watcher.register(() => {
|
|
191
|
+
settle(false);
|
|
192
|
+
});
|
|
193
|
+
watcher.registerEvent(app.workspace.on("layout-change", settleIfHidden));
|
|
194
|
+
watcher.registerEvent(app.workspace.on("active-leaf-change", settleIfHidden));
|
|
195
|
+
previewMode.addChild(watcher);
|
|
196
|
+
previewMode.renderer.onRendered(() => {
|
|
197
|
+
settle(true);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
if (isRendered) {
|
|
201
|
+
previewMode.applyScroll(scroll);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
15
204
|
export {
|
|
16
|
-
getFullContentHtml
|
|
205
|
+
getFullContentHtml,
|
|
206
|
+
rerenderPreviews
|
|
17
207
|
};
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21hcmtkb3duLXZpZXcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBNYXJrZG93blZpZXdcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1hcmtkb3duVmlldyB9IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBHZXQgdGhlIGZ1bGwgSFRNTCBjb250ZW50IG9mIHRoZSBjdXJyZW50IE1hcmtkb3duVmlld1xuICpcbiAqIEBwYXJhbSB2aWV3IC0gVGhlIE1hcmtkb3duVmlldyB0byBnZXQgdGhlIEhUTUwgZnJvbVxuICogQHJldHVybnMgVGhlIGZ1bGwgSFRNTCBvZiB0aGUgTWFya2Rvd25WaWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdWxsQ29udGVudEh0bWwodmlldzogTWFya2Rvd25WaWV3KTogc3RyaW5nIHtcbiAgY29uc3QgY29kZU1pcnJvciA9IHZpZXcuZWRpdG9yLmNtO1xuICBjb2RlTWlycm9yLnZpZXdTdGF0ZS5wcmludGluZyA9IHRydWU7XG4gIGNvZGVNaXJyb3IubWVhc3VyZSgpO1xuICBjb25zdCBodG1sID0gdmlldy5jb250ZW50RWwuaW5uZXJIVE1MO1xuICBjb2RlTWlycm9yLnZpZXdTdGF0ZS5wcmludGluZyA9IGZhbHNlO1xuICBjb2RlTWlycm9yLm1lYXN1cmUoKTtcbiAgcmV0dXJuIGh0bWw7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQWNPLFNBQVMsbUJBQW1CLE1BQTRCO0FBQzdELFFBQU0sYUFBYSxLQUFLLE9BQU87QUFDL0IsYUFBVyxVQUFVLFdBQVc7QUFDaEMsYUFBVyxRQUFRO0FBQ25CLFFBQU0sT0FBTyxLQUFLLFVBQVU7QUFDNUIsYUFBVyxVQUFVLFdBQVc7QUFDaEMsYUFBVyxRQUFRO0FBQ25CLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXJrZG93bi12aWV3LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBNYXJrZG93blZpZXdcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlbmRlcmVyU2VjdGlvbiB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QnO1xuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIE1hcmtkb3duUHJldmlld1ZpZXdcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBvbkFib3J0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Fib3J0LWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE1hcmtkb3duVmlld1xufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlcmVuZGVyUHJldmlld3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcmVuZGVyUHJldmlld3NQYXJhbXMge1xuICAvKipcbiAgICogU3RvcHMgd2FpdGluZyBmb3IgdGhlIHJlbmRlcnMgd2hlbiBhYm9ydGVkLCByZWplY3Rpbmcgd2l0aCB0aGUgc2lnbmFsJ3MgcmVhc29uLiBUaGUgcmVuZGVycyBhbHJlYWR5IHJlcXVlc3RlZCBzdGlsbFxuICAgKiBoYXBwZW4uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb2RlIGJsb2NrIGxhbmd1YWdlIHdob3NlIGJsb2NrcyB0byByZW5kZXIgYWdhaW4sIG1hdGNoZWQgZXhhY3RseSBhbmQgY2FzZS1zZW5zaXRpdmVseSwgdGhlIHdheSBPYnNpZGlhbiBtYXRjaGVzIGFcbiAgICogY29kZSBibG9jayBwcm9jZXNzb3IncyBsYW5ndWFnZS4gT25seSB0aGUgc2VjdGlvbnMgaG9sZGluZyBzdWNoIGEgYmxvY2sgYXJlIHJlbmRlcmVkIGFnYWluLCBhbmQgYSB2aWV3IGhvbGRpbmcgbm9uZVxuICAgKiBpcyBsZWZ0IGFsb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgbnVsbGAsIHdoaWNoIHJlbmRlcnMgZXZlcnkgc2VjdGlvbiBvZiBldmVyeSBSZWFkaW5nIHZpZXcgYWdhaW5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlPzogbnVsbCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZ1bGwgSFRNTCBjb250ZW50IG9mIHRoZSBjdXJyZW50IE1hcmtkb3duVmlld1xuICpcbiAqIEBwYXJhbSB2aWV3IC0gVGhlIE1hcmtkb3duVmlldyB0byBnZXQgdGhlIEhUTUwgZnJvbVxuICogQHJldHVybnMgVGhlIGZ1bGwgSFRNTCBvZiB0aGUgTWFya2Rvd25WaWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdWxsQ29udGVudEh0bWwodmlldzogTWFya2Rvd25WaWV3KTogc3RyaW5nIHtcbiAgY29uc3QgY29kZU1pcnJvciA9IHZpZXcuZWRpdG9yLmNtO1xuICBjb2RlTWlycm9yLnZpZXdTdGF0ZS5wcmludGluZyA9IHRydWU7XG4gIGNvZGVNaXJyb3IubWVhc3VyZSgpO1xuICBjb25zdCBodG1sID0gdmlldy5jb250ZW50RWwuaW5uZXJIVE1MO1xuICBjb2RlTWlycm9yLnZpZXdTdGF0ZS5wcmludGluZyA9IGZhbHNlO1xuICBjb2RlTWlycm9yLm1lYXN1cmUoKTtcbiAgcmV0dXJuIGh0bWw7XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb3BlbiBSZWFkaW5nIHZpZXdzIGFnYWluLCBzbyBhIG1hcmtkb3duIHBvc3QtcHJvY2Vzc29yIG9yIGNvZGUgYmxvY2sgcHJvY2Vzc29yIHJlZ2lzdGVyZWQgb3IgcmVjb25maWd1cmVkXG4gKiBzaW5jZSB0aGV5IHJlbmRlcmVkIGFwcGxpZXMgdG8gdGhlbS5cbiAqXG4gKiBJdCBjb3ZlcnMgZXZlcnkgTWFya2Rvd24gdmlldyBpbiBldmVyeSB3aW5kb3csIHBvcG91dHMgaW5jbHVkZWQuIEEgZnVsbCByZWZyZXNoIGlzIHdoYXQgT2JzaWRpYW4gaXRzZWxmIGRvZXMgd2hlbiBhXG4gKiBwb3N0LXByb2Nlc3NvciBpcyByZWdpc3RlcmVkOiBldmVyeSBzZWN0aW9uIGlzIHJlbmRlcmVkIGFnYWluLCBleGNlcHQgdGhlIGhlYWRlciBob2xkaW5nIHRoZSBpbmxpbmUgdGl0bGUgYW5kIHRoZVxuICogcHJvcGVydGllcywgYW5kIHRoZSBmb290ZXIgaG9sZGluZyB0aGUgYmFja2xpbmtzLCB3aGljaCBrZWVwIHRoZWlyIERPTS4gV2l0aCBhIGBsYW5ndWFnZWAsIG9ubHkgdGhlIHNlY3Rpb25zIGhvbGRpbmcgYVxuICogY29kZSBibG9jayBvZiB0aGF0IGxhbmd1YWdlIGFyZSByZW5kZXJlZCBhZ2Fpbi4gVGhlIG5vdGUgaXMgbmV2ZXIgd3JpdHRlbiwgdGhlIHZpZXcgbW9kZSBuZXZlciBjaGFuZ2VzLCBhbmQgdGhlXG4gKiBzY3JvbGwgcG9zaXRpb24gaXMga2VwdCBieSBPYnNpZGlhbidzIHJlbmRlcmVyLlxuICpcbiAqIFRoZSBwcm9taXNlIHNldHRsZXMgb25jZSBldmVyeSB2aWV3IFNIT1dOIGluIFJlYWRpbmcgdmlldyBoYXMgZmluaXNoZWQgcmVuZGVyaW5nLCB0aGUgcHJvbWlzZXMgb2YgYXN5bmNocm9ub3VzXG4gKiBwb3N0LXByb2Nlc3NvcnMgaW5jbHVkZWQuIEEgcHJldmlldyB0aGF0IGlzIG5vdCBzaG93biAoYSBiYWNrZ3JvdW5kIHRhYiwgYSB2aWV3IGluIGVkaXRpbmcgbW9kZSkgaXMgbWFya2VkIHRvIHJlbmRlclxuICogYWdhaW4gd2hlbiBpdCBpcyBuZXh0IHNob3duLCBhbmQgaXMgbm90IHdhaXRlZCBmb3IsIHNpbmNlIE9ic2lkaWFuIGRvZXMgbm90IHJlbmRlciBpdCB1bnRpbCB0aGVuLiBBIHZpZXcgdGhhdCBpcyBjbG9zZWQsXG4gKiBoaWRkZW4gb3Igc3dpdGNoZWQgb3V0IG9mIFJlYWRpbmcgdmlldyB3aGlsZSByZW5kZXJpbmcgc3RvcHMgYmVpbmcgd2FpdGVkIGZvci4gQSBwb3N0LXByb2Nlc3NvciB3aG9zZSBwcm9taXNlIG5ldmVyXG4gKiBzZXR0bGVzLCBvciByZWplY3RzLCBrZWVwcyBpdHMgdmlldydzIHJlbmRlciBvcGVuLCBleGFjdGx5IGFzIGl0IGtlZXBzIE9ic2lkaWFuJ3Mgb3duIHJlbmRlciBvcGVuOyBwYXNzIGFuXG4gKiBgYWJvcnRTaWduYWxgIHRvIGJvdW5kIHRoZSB3YWl0LlxuICpcbiAqIEhvdmVyIHBvcG92ZXJzLCBlbWJlZHMsIGNhbnZhcyBjYXJkcyBhbmQgTGl2ZSBQcmV2aWV3IHdpZGdldHMgYXJlIG5vdCByZWZyZXNoZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBvcHRpb25zLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc2hvd24gUmVhZGluZyB2aWV3cyBoYXZlIHJlbmRlcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVyZW5kZXJQcmV2aWV3cyhwYXJhbXM6IFJlcmVuZGVyUHJldmlld3NQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhYm9ydFNpZ25hbCwgYXBwLCBsYW5ndWFnZSA9IG51bGwgfSA9IHBhcmFtcztcbiAgYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3Qgdmlld3M6IE1hcmtkb3duVmlld1tdID0gW107XG4gIGFwcC53b3Jrc3BhY2UuaXRlcmF0ZUFsbExlYXZlcygobGVhZikgPT4ge1xuICAgIGlmIChsZWFmLnZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcpIHtcbiAgICAgIHZpZXdzLnB1c2gobGVhZi52aWV3KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHdhaXRzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcbiAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XG4gICAgY29uc3QgaXNTaG93biA9IGlzUHJldmlld1Nob3duKHZpZXcpO1xuICAgIC8vIEVtcHR5aW5nIHRoZSBzZWN0aW9ucyBzaHJpbmtzIHRoZSBjb250ZW50IGJlZm9yZSB0aGUgbmV4dCBmcmFtZSByZW5kZXJzIGl0IGFnYWluLCB3aGljaCBjYW4gY2xhbXAgdGhlIHNjcm9sbC5cbiAgICBjb25zdCBzY3JvbGwgPSBpc1Nob3duID8gdmlldy5wcmV2aWV3TW9kZS5nZXRTY3JvbGwoKSA6IG51bGw7XG4gICAgaWYgKGxhbmd1YWdlID09PSBudWxsKSB7XG4gICAgICB2aWV3LnByZXZpZXdNb2RlLnJlcmVuZGVyKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWN0aW9ucyA9IGdldFNlY3Rpb25zV2l0aExhbmd1YWdlKHZpZXcucHJldmlld01vZGUsIGxhbmd1YWdlKTtcbiAgICAgIGlmIChzZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXJlbmRlclNlY3Rpb25zKHZpZXcucHJldmlld01vZGUsIHNlY3Rpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsICE9PSBudWxsKSB7XG4gICAgICB3YWl0cy5wdXNoKHdhaXRGb3JQcmV2aWV3UmVuZGVyKGFwcCwgdmlldywgc2Nyb2xsKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdhaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFsbFJlbmRlcmVkID0gUHJvbWlzZS5hbGwod2FpdHMpO1xuICBpZiAoIWFib3J0U2lnbmFsKSB7XG4gICAgYXdhaXQgYWxsUmVuZGVyZWQ7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHJlc29sdmVBYm9ydGVkID0gbm9vcDtcbiAgY29uc3QgYWJvcnRlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgcmVzb2x2ZUFib3J0ZWQgPSByZXNvbHZlO1xuICB9KTtcbiAgdXNpbmcgX2Fib3J0TGlzdGVuZXIgPSBvbkFib3J0KGFib3J0U2lnbmFsLCAoKSA9PiB7XG4gICAgcmVzb2x2ZUFib3J0ZWQoKTtcbiAgfSk7XG4gIGF3YWl0IFByb21pc2UucmFjZShbYWxsUmVuZGVyZWQsIGFib3J0ZWRdKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VjdGlvbnNXaXRoTGFuZ3VhZ2UocHJldmlld01vZGU6IE1hcmtkb3duUHJldmlld1ZpZXcsIGxhbmd1YWdlOiBzdHJpbmcpOiBSZW5kZXJlclNlY3Rpb25bXSB7XG4gIGNvbnN0IHsgcmVuZGVyZXIgfSA9IHByZXZpZXdNb2RlO1xuICBjb25zdCBzZWxlY3RvciA9IGBjb2RlLmxhbmd1YWdlLSR7Q1NTLmVzY2FwZShsYW5ndWFnZSl9YDtcbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXIgY2Fycnkgbm8gSFRNTCBvZiB0aGVpciBvd24uIEEgc2VjdGlvbidzIEhUTUwgaXMgcGFyc2VkIGludG8gYW4gaW5lcnQgZG9jdW1lbnQ6IG5vdGhpbmcgcnVuc1xuICAvLyBhbmQgbm90aGluZyBsb2Fkcy5cbiAgcmV0dXJuIHJlbmRlcmVyLnNlY3Rpb25zLmZpbHRlcigoc2VjdGlvbikgPT5cbiAgICBzZWN0aW9uICE9PSByZW5kZXJlci5oZWFkZXIgJiYgc2VjdGlvbiAhPT0gcmVuZGVyZXIuZm9vdGVyICYmICEhc2VjdGlvbi5odG1sXG4gICAgJiYgcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhzZWN0aW9uLmh0bWwsICd0ZXh0L2h0bWwnKS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSAhPT0gbnVsbFxuICApO1xufVxuXG5mdW5jdGlvbiBpc1ByZXZpZXdTaG93bih2aWV3OiBNYXJrZG93blZpZXcpOiBib29sZWFuIHtcbiAgaWYgKHZpZXcuZ2V0TW9kZSgpICE9PSAncHJldmlldycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUaGUgc2FtZSB2aXNpYmlsaXR5IHRlc3QgYFJlYWRWaWV3UmVuZGVyZXIub25SZW5kZXJgIG1ha2VzIGJlZm9yZSBpdCByZW5kZXJzIGFueXRoaW5nLlxuICBjb25zdCB7IHByZXZpZXdFbCB9ID0gdmlldy5wcmV2aWV3TW9kZS5yZW5kZXJlcjtcbiAgcmV0dXJuIHByZXZpZXdFbC5pc0Nvbm5lY3RlZCAmJiBwcmV2aWV3RWwub2Zmc2V0UGFyZW50ICE9PSBudWxsICYmIHByZXZpZXdFbC5vZmZzZXRXaWR0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyU2VjdGlvbnMocHJldmlld01vZGU6IE1hcmtkb3duUHJldmlld1ZpZXcsIHNlY3Rpb25zOiByZWFkb25seSBSZW5kZXJlclNlY3Rpb25bXSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICBzZWN0aW9uLnJlbmRlcmVkID0gZmFsc2U7XG4gICAgc2VjdGlvbi5lbC5lbXB0eSgpO1xuICB9XG4gIHByZXZpZXdNb2RlLnJlbmRlcmVyLnF1ZXVlUmVuZGVyKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JQcmV2aWV3UmVuZGVyKGFwcDogQXBwLCB2aWV3OiBNYXJrZG93blZpZXcsIHNjcm9sbDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcHJldmlld01vZGUgfSA9IHZpZXc7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgIGxldCBpc1NldHRsZWQgPSBmYWxzZTtcbiAgICBjb25zdCB3YXRjaGVyID0gbmV3IENvbXBvbmVudCgpO1xuXG4gICAgZnVuY3Rpb24gc2V0dGxlKGlzUmVuZGVyZWROb3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIGlmIChpc1NldHRsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXNTZXR0bGVkID0gdHJ1ZTtcbiAgICAgIC8vIEEgbm8tb3Agd2hlbiB0aGUgcHJldmlldyBpcyB1bmxvYWRpbmcsIHNpbmNlIGl0IGhhcyBhbHJlYWR5IHRha2VuIHRoZSB3YXRjaGVyIG9mZiBpdHMgY2hpbGRyZW4uXG4gICAgICBwcmV2aWV3TW9kZS5yZW1vdmVDaGlsZCh3YXRjaGVyKTtcbiAgICAgIHJlc29sdmUoaXNSZW5kZXJlZE5vdyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0dGxlSWZIaWRkZW4oKTogdm9pZCB7XG4gICAgICBpZiAoIWlzUHJldmlld1Nob3duKHZpZXcpKSB7XG4gICAgICAgIHNldHRsZShmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2F0Y2hlci5yZWdpc3RlcigoKSA9PiB7XG4gICAgICBzZXR0bGUoZmFsc2UpO1xuICAgIH0pO1xuICAgIHdhdGNoZXIucmVnaXN0ZXJFdmVudChhcHAud29ya3NwYWNlLm9uKCdsYXlvdXQtY2hhbmdlJywgc2V0dGxlSWZIaWRkZW4pKTtcbiAgICB3YXRjaGVyLnJlZ2lzdGVyRXZlbnQoYXBwLndvcmtzcGFjZS5vbignYWN0aXZlLWxlYWYtY2hhbmdlJywgc2V0dGxlSWZIaWRkZW4pKTtcbiAgICBwcmV2aWV3TW9kZS5hZGRDaGlsZCh3YXRjaGVyKTtcbiAgICBwcmV2aWV3TW9kZS5yZW5kZXJlci5vblJlbmRlcmVkKCgpID0+IHtcbiAgICAgIHNldHRsZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaWYgKGlzUmVuZGVyZWQpIHtcbiAgICBwcmV2aWV3TW9kZS5hcHBseVNjcm9sbChzY3JvbGwpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* A modal that shows a text for the user to copy by hand, for when writing it to the clipboard failed.
|
|
6
|
+
*/
|
|
7
|
+
import type { ModalParamsBase } from './modal.mjs';
|
|
8
|
+
/**
|
|
9
|
+
* Parameters for {@link copyTextManually}.
|
|
10
|
+
*/
|
|
11
|
+
export interface CopyTextManuallyParams extends ModalParamsBase {
|
|
12
|
+
/**
|
|
13
|
+
* What the user is asked to do with the text.
|
|
14
|
+
*/
|
|
15
|
+
readonly message: string;
|
|
16
|
+
/**
|
|
17
|
+
* A text for the button that continues.
|
|
18
|
+
*/
|
|
19
|
+
readonly okButtonText?: string;
|
|
20
|
+
/**
|
|
21
|
+
* The text to copy.
|
|
22
|
+
*/
|
|
23
|
+
readonly text: string;
|
|
24
|
+
/**
|
|
25
|
+
* A title of the modal.
|
|
26
|
+
*
|
|
27
|
+
* @default `''`
|
|
28
|
+
*/
|
|
29
|
+
readonly title?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Shows a read-only text, selected when focused, for the user to copy by hand, with a button that
|
|
33
|
+
* continues and one that cancels.
|
|
34
|
+
*
|
|
35
|
+
* @param params - The parameters.
|
|
36
|
+
* @returns A {@link Promise} that resolves with whether the user continued.
|
|
37
|
+
*/
|
|
38
|
+
export declare function copyTextManually(params: CopyTextManuallyParams): Promise<boolean>;
|
|
@@ -0,0 +1,99 @@
|
|
|
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 {
|
|
34
|
+
ButtonComponent,
|
|
35
|
+
TextAreaComponent
|
|
36
|
+
} from "obsidian";
|
|
37
|
+
import { CssClass } from "../css-class.mjs";
|
|
38
|
+
import { t } from "../i18n/i18n.mjs";
|
|
39
|
+
import {
|
|
40
|
+
ModalBase,
|
|
41
|
+
showModal
|
|
42
|
+
} from "./modal.mjs";
|
|
43
|
+
const TEXT_AREA_ROWS = 12;
|
|
44
|
+
class CopyTextManuallyModal extends ModalBase {
|
|
45
|
+
isConfirmed = false;
|
|
46
|
+
message;
|
|
47
|
+
okButtonText;
|
|
48
|
+
text;
|
|
49
|
+
title;
|
|
50
|
+
constructor(params) {
|
|
51
|
+
super(params);
|
|
52
|
+
this.addCssClasses(CssClass.CopyTextManuallyModal);
|
|
53
|
+
this.message = params.message;
|
|
54
|
+
this.okButtonText = params.okButtonText ?? t(($) => $.obsidianLib.buttons.ok);
|
|
55
|
+
this.text = params.text;
|
|
56
|
+
this.title = params.title ?? "";
|
|
57
|
+
}
|
|
58
|
+
onClose() {
|
|
59
|
+
this.promiseResolve(this.isConfirmed);
|
|
60
|
+
}
|
|
61
|
+
onOpen() {
|
|
62
|
+
this.titleEl.setText(this.title);
|
|
63
|
+
this.contentEl.createEl("p", { text: this.message });
|
|
64
|
+
const textArea = new TextAreaComponent(this.contentEl);
|
|
65
|
+
textArea.setValue(this.text);
|
|
66
|
+
textArea.inputEl.readOnly = true;
|
|
67
|
+
textArea.inputEl.rows = TEXT_AREA_ROWS;
|
|
68
|
+
textArea.inputEl.addClass(CssClass.CopyTextManuallyText);
|
|
69
|
+
textArea.inputEl.addEventListener("focus", () => {
|
|
70
|
+
textArea.inputEl.select();
|
|
71
|
+
});
|
|
72
|
+
const buttonContainerEl = this.contentEl.createDiv({ cls: "modal-button-container" });
|
|
73
|
+
const okButton = new ButtonComponent(buttonContainerEl);
|
|
74
|
+
okButton.setButtonText(this.okButtonText);
|
|
75
|
+
okButton.setCta();
|
|
76
|
+
okButton.onClick(() => {
|
|
77
|
+
this.isConfirmed = true;
|
|
78
|
+
this.close();
|
|
79
|
+
});
|
|
80
|
+
okButton.setClass(CssClass.OkButton);
|
|
81
|
+
const cancelButton = new ButtonComponent(buttonContainerEl);
|
|
82
|
+
cancelButton.setButtonText(t(($) => $.obsidianLib.buttons.cancel));
|
|
83
|
+
cancelButton.onClick(this.close.bind(this));
|
|
84
|
+
cancelButton.setClass(CssClass.CancelButton);
|
|
85
|
+
textArea.inputEl.focus();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async function copyTextManually(params) {
|
|
89
|
+
return await showModal(
|
|
90
|
+
(promiseResolve) => new CopyTextManuallyModal({
|
|
91
|
+
...params,
|
|
92
|
+
promiseResolve
|
|
93
|
+
})
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
export {
|
|
97
|
+
copyTextManually
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvY29weS10ZXh0LW1hbnVhbGx5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIG1vZGFsIHRoYXQgc2hvd3MgYSB0ZXh0IGZvciB0aGUgdXNlciB0byBjb3B5IGJ5IGhhbmQsIGZvciB3aGVuIHdyaXRpbmcgaXQgdG8gdGhlIGNsaXBib2FyZCBmYWlsZWQuXG4gKi9cblxuaW1wb3J0IHtcbiAgQnV0dG9uQ29tcG9uZW50LFxuICBUZXh0QXJlYUNvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgTW9kYWxCYXNlQ29uc3RydWN0b3JQYXJhbXMsXG4gIE1vZGFsUGFyYW1zQmFzZVxufSBmcm9tICcuL21vZGFsLnRzJztcblxuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQge1xuICBNb2RhbEJhc2UsXG4gIHNob3dNb2RhbFxufSBmcm9tICcuL21vZGFsLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29weVRleHRNYW51YWxseX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVRleHRNYW51YWxseVBhcmFtcyBleHRlbmRzIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBXaGF0IHRoZSB1c2VyIGlzIGFza2VkIHRvIGRvIHdpdGggdGhlIHRleHQuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgdGV4dCBmb3IgdGhlIGJ1dHRvbiB0aGF0IGNvbnRpbnVlcy5cbiAgICovXG4gIHJlYWRvbmx5IG9rQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gY29weS5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSB0aXRsZSBvZiB0aGUgbW9kYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG5jb25zdCBURVhUX0FSRUFfUk9XUyA9IDEyO1xuXG50eXBlIENvcHlUZXh0TWFudWFsbHlNb2RhbENvbnN0cnVjdG9yUGFyYW1zID0gQ29weVRleHRNYW51YWxseVBhcmFtcyAmIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zPGJvb2xlYW4+O1xuXG5jbGFzcyBDb3B5VGV4dE1hbnVhbGx5TW9kYWwgZXh0ZW5kcyBNb2RhbEJhc2U8Ym9vbGVhbj4ge1xuICBwcml2YXRlIGlzQ29uZmlybWVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG9rQnV0dG9uVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IENvcHlUZXh0TWFudWFsbHlNb2RhbENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLmFkZENzc0NsYXNzZXMoQ3NzQ2xhc3MuQ29weVRleHRNYW51YWxseU1vZGFsKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBwYXJhbXMubWVzc2FnZTtcbiAgICB0aGlzLm9rQnV0dG9uVGV4dCA9IHBhcmFtcy5va0J1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLm9rKTtcbiAgICB0aGlzLnRleHQgPSBwYXJhbXMudGV4dDtcbiAgICB0aGlzLnRpdGxlID0gcGFyYW1zLnRpdGxlID8/ICcnO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh0aGlzLmlzQ29uZmlybWVkKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbk9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy50aXRsZUVsLnNldFRleHQodGhpcy50aXRsZSk7XG4gICAgdGhpcy5jb250ZW50RWwuY3JlYXRlRWwoJ3AnLCB7IHRleHQ6IHRoaXMubWVzc2FnZSB9KTtcblxuICAgIGNvbnN0IHRleHRBcmVhID0gbmV3IFRleHRBcmVhQ29tcG9uZW50KHRoaXMuY29udGVudEVsKTtcbiAgICB0ZXh0QXJlYS5zZXRWYWx1ZSh0aGlzLnRleHQpO1xuICAgIHRleHRBcmVhLmlucHV0RWwucmVhZE9ubHkgPSB0cnVlO1xuICAgIHRleHRBcmVhLmlucHV0RWwucm93cyA9IFRFWFRfQVJFQV9ST1dTO1xuICAgIHRleHRBcmVhLmlucHV0RWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuQ29weVRleHRNYW51YWxseVRleHQpO1xuICAgIHRleHRBcmVhLmlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICB0ZXh0QXJlYS5pbnB1dEVsLnNlbGVjdCgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYnV0dG9uQ29udGFpbmVyRWwgPSB0aGlzLmNvbnRlbnRFbC5jcmVhdGVEaXYoeyBjbHM6ICdtb2RhbC1idXR0b24tY29udGFpbmVyJyB9KTtcbiAgICBjb25zdCBva0J1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQoYnV0dG9uQ29udGFpbmVyRWwpO1xuICAgIG9rQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5va0J1dHRvblRleHQpO1xuICAgIG9rQnV0dG9uLnNldEN0YSgpO1xuICAgIG9rQnV0dG9uLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgdGhpcy5pc0NvbmZpcm1lZCA9IHRydWU7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSk7XG4gICAgb2tCdXR0b24uc2V0Q2xhc3MoQ3NzQ2xhc3MuT2tCdXR0b24pO1xuXG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25Db250YWluZXJFbCk7XG4gICAgY2FuY2VsQnV0dG9uLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLmNhbmNlbCkpO1xuICAgIGNhbmNlbEJ1dHRvbi5vbkNsaWNrKHRoaXMuY2xvc2UuYmluZCh0aGlzKSk7XG4gICAgY2FuY2VsQnV0dG9uLnNldENsYXNzKENzc0NsYXNzLkNhbmNlbEJ1dHRvbik7XG5cbiAgICB0ZXh0QXJlYS5pbnB1dEVsLmZvY3VzKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG93cyBhIHJlYWQtb25seSB0ZXh0LCBzZWxlY3RlZCB3aGVuIGZvY3VzZWQsIGZvciB0aGUgdXNlciB0byBjb3B5IGJ5IGhhbmQsIHdpdGggYSBidXR0b24gdGhhdFxuICogY29udGludWVzIGFuZCBvbmUgdGhhdCBjYW5jZWxzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB3aGV0aGVyIHRoZSB1c2VyIGNvbnRpbnVlZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1ib29sZWFuLW5hbWUgLS0gYGJvb2xlYW5gIGdpdmVzIGJldHRlciBEWCB0aGFuIGVudW0sIGFzIGluIGBjb25maXJtYC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5VGV4dE1hbnVhbGx5KHBhcmFtczogQ29weVRleHRNYW51YWxseVBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gYXdhaXQgc2hvd01vZGFsPGJvb2xlYW4+KChwcm9taXNlUmVzb2x2ZSkgPT5cbiAgICBuZXcgQ29weVRleHRNYW51YWxseU1vZGFsKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHByb21pc2VSZXNvbHZlXG4gICAgfSlcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQU9QLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsU0FBUztBQUNsQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQTZCUCxNQUFNLGlCQUFpQjtBQUl2QixNQUFNLDhCQUE4QixVQUFtQjtBQUFBLEVBQzdDLGNBQWM7QUFBQSxFQUNMO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFVixZQUFZLFFBQWdEO0FBQ2pFLFVBQU0sTUFBTTtBQUNaLFNBQUssY0FBYyxTQUFTLHFCQUFxQjtBQUNqRCxTQUFLLFVBQVUsT0FBTztBQUN0QixTQUFLLGVBQWUsT0FBTyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLFFBQVEsRUFBRTtBQUM1RSxTQUFLLE9BQU8sT0FBTztBQUNuQixTQUFLLFFBQVEsT0FBTyxTQUFTO0FBQUEsRUFDL0I7QUFBQSxFQUVnQixVQUFnQjtBQUM5QixTQUFLLGVBQWUsS0FBSyxXQUFXO0FBQUEsRUFDdEM7QUFBQSxFQUVnQixTQUFlO0FBQzdCLFNBQUssUUFBUSxRQUFRLEtBQUssS0FBSztBQUMvQixTQUFLLFVBQVUsU0FBUyxLQUFLLEVBQUUsTUFBTSxLQUFLLFFBQVEsQ0FBQztBQUVuRCxVQUFNLFdBQVcsSUFBSSxrQkFBa0IsS0FBSyxTQUFTO0FBQ3JELGFBQVMsU0FBUyxLQUFLLElBQUk7QUFDM0IsYUFBUyxRQUFRLFdBQVc7QUFDNUIsYUFBUyxRQUFRLE9BQU87QUFDeEIsYUFBUyxRQUFRLFNBQVMsU0FBUyxvQkFBb0I7QUFDdkQsYUFBUyxRQUFRLGlCQUFpQixTQUFTLE1BQU07QUFDL0MsZUFBUyxRQUFRLE9BQU87QUFBQSxJQUMxQixDQUFDO0FBRUQsVUFBTSxvQkFBb0IsS0FBSyxVQUFVLFVBQVUsRUFBRSxLQUFLLHlCQUF5QixDQUFDO0FBQ3BGLFVBQU0sV0FBVyxJQUFJLGdCQUFnQixpQkFBaUI7QUFDdEQsYUFBUyxjQUFjLEtBQUssWUFBWTtBQUN4QyxhQUFTLE9BQU87QUFDaEIsYUFBUyxRQUFRLE1BQU07QUFDckIsV0FBSyxjQUFjO0FBQ25CLFdBQUssTUFBTTtBQUFBLElBQ2IsQ0FBQztBQUNELGFBQVMsU0FBUyxTQUFTLFFBQVE7QUFFbkMsVUFBTSxlQUFlLElBQUksZ0JBQWdCLGlCQUFpQjtBQUMxRCxpQkFBYSxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxRQUFRLE1BQU0sQ0FBQztBQUNqRSxpQkFBYSxRQUFRLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQztBQUMxQyxpQkFBYSxTQUFTLFNBQVMsWUFBWTtBQUUzQyxhQUFTLFFBQVEsTUFBTTtBQUFBLEVBQ3pCO0FBQ0Y7QUFVQSxlQUFzQixpQkFBaUIsUUFBa0Q7QUFDdkYsU0FBTyxNQUFNO0FBQUEsSUFBbUIsQ0FBQyxtQkFDL0IsSUFBSSxzQkFBc0I7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSDtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDRjsiLCJuYW1lcyI6W119
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
export * as 'alert' from './alert.mjs';
|
|
3
3
|
export * as 'code-block-builder' from './code-block-builder.mjs';
|
|
4
4
|
export * as 'confirm' from './confirm.mjs';
|
|
5
|
+
export * as 'copy-text-manually' from './copy-text-manually.mjs';
|
|
5
6
|
export * as 'minimizable-modal' from './minimizable-modal.mjs';
|
|
6
7
|
export * as 'modal-command-builder' from './modal-command-builder.mjs';
|
|
7
8
|
export * as 'modal' from './modal.mjs';
|
|
8
9
|
export * as 'prompt' from './prompt.mjs';
|
|
10
|
+
export * as 'review-bug-report-diagnostics' from './review-bug-report-diagnostics.mjs';
|
|
9
11
|
export * as 'select-item' from './select-item.mjs';
|
|
10
12
|
export * as 'select-option' from './select-option.mjs';
|
|
11
13
|
export * as 'suggest-modal-command-builder' from './suggest-modal-command-builder.mjs';
|
|
@@ -6,10 +6,12 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
6
6
|
import * as alert from "./alert.mjs";
|
|
7
7
|
import * as code_block_builder from "./code-block-builder.mjs";
|
|
8
8
|
import * as confirm from "./confirm.mjs";
|
|
9
|
+
import * as copy_text_manually from "./copy-text-manually.mjs";
|
|
9
10
|
import * as minimizable_modal from "./minimizable-modal.mjs";
|
|
10
11
|
import * as modal_command_builder from "./modal-command-builder.mjs";
|
|
11
12
|
import * as modal from "./modal.mjs";
|
|
12
13
|
import * as prompt from "./prompt.mjs";
|
|
14
|
+
import * as review_bug_report_diagnostics from "./review-bug-report-diagnostics.mjs";
|
|
13
15
|
import * as select_item from "./select-item.mjs";
|
|
14
16
|
import * as select_option from "./select-option.mjs";
|
|
15
17
|
import * as suggest_modal_command_builder from "./suggest-modal-command-builder.mjs";
|
|
@@ -17,12 +19,14 @@ export {
|
|
|
17
19
|
alert,
|
|
18
20
|
code_block_builder as "code-block-builder",
|
|
19
21
|
confirm,
|
|
22
|
+
copy_text_manually as "copy-text-manually",
|
|
20
23
|
minimizable_modal as "minimizable-modal",
|
|
21
24
|
modal,
|
|
22
25
|
modal_command_builder as "modal-command-builder",
|
|
23
26
|
prompt,
|
|
27
|
+
review_bug_report_diagnostics as "review-bug-report-diagnostics",
|
|
24
28
|
select_item as "select-item",
|
|
25
29
|
select_option as "select-option",
|
|
26
30
|
suggest_modal_command_builder as "suggest-modal-command-builder"
|
|
27
31
|
};
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL21vZGFscy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhbGVydCcgZnJvbSAnLi9hbGVydC50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1ibG9jay1idWlsZGVyJyBmcm9tICcuL2NvZGUtYmxvY2stYnVpbGRlci50cyc7XG5leHBvcnQgKiBhcyAnY29uZmlybScgZnJvbSAnLi9jb25maXJtLnRzJztcbmV4cG9ydCAqIGFzICdjb3B5LXRleHQtbWFudWFsbHknIGZyb20gJy4vY29weS10ZXh0LW1hbnVhbGx5LnRzJztcbmV4cG9ydCAqIGFzICdtaW5pbWl6YWJsZS1tb2RhbCcgZnJvbSAnLi9taW5pbWl6YWJsZS1tb2RhbC50cyc7XG5leHBvcnQgKiBhcyAnbW9kYWwtY29tbWFuZC1idWlsZGVyJyBmcm9tICcuL21vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG5leHBvcnQgKiBhcyAnbW9kYWwnIGZyb20gJy4vbW9kYWwudHMnO1xuZXhwb3J0ICogYXMgJ3Byb21wdCcgZnJvbSAnLi9wcm9tcHQudHMnO1xuZXhwb3J0ICogYXMgJ3Jldmlldy1idWctcmVwb3J0LWRpYWdub3N0aWNzJyBmcm9tICcuL3Jldmlldy1idWctcmVwb3J0LWRpYWdub3N0aWNzLnRzJztcbmV4cG9ydCAqIGFzICdzZWxlY3QtaXRlbScgZnJvbSAnLi9zZWxlY3QtaXRlbS50cyc7XG5leHBvcnQgKiBhcyAnc2VsZWN0LW9wdGlvbicgZnJvbSAnLi9zZWxlY3Qtb3B0aW9uLnRzJztcbmV4cG9ydCAqIGFzICdzdWdnZXN0LW1vZGFsLWNvbW1hbmQtYnVpbGRlcicgZnJvbSAnLi9zdWdnZXN0LW1vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVksV0FBYTtBQUN6QixZQUFZQSx3QkFBMEI7QUFDdEMsWUFBWSxhQUFlO0FBQzNCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMsMkJBQTZCO0FBQ3pDLFlBQVksV0FBYTtBQUN6QixZQUFZLFlBQWM7QUFDMUIsWUFBWUMsbUNBQXFDO0FBQ2pELFlBQVlDLGlCQUFtQjtBQUMvQixZQUFZQyxtQkFBcUI7QUFDakMsWUFBWUMsbUNBQXFDOyIsCiAgIm5hbWVzIjogWyJjb2RlLWJsb2NrLWJ1aWxkZXIiLCAiY29weS10ZXh0LW1hbnVhbGx5IiwgIm1pbmltaXphYmxlLW1vZGFsIiwgIm1vZGFsLWNvbW1hbmQtYnVpbGRlciIsICJyZXZpZXctYnVnLXJlcG9ydC1kaWFnbm9zdGljcyIsICJzZWxlY3QtaXRlbSIsICJzZWxlY3Qtb3B0aW9uIiwgInN1Z2dlc3QtbW9kYWwtY29tbWFuZC1idWlsZGVyIl0KfQo=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* A modal where the user reviews, and chooses, the diagnostics a bug report will carry, before anything
|
|
6
|
+
* leaves Obsidian.
|
|
7
|
+
*/
|
|
8
|
+
import type { BugReportDiagnosticSection } from '../bug-report-diagnostics.mjs';
|
|
9
|
+
import type { ModalParamsBase } from './modal.mjs';
|
|
10
|
+
/**
|
|
11
|
+
* Parameters for {@link reviewBugReportDiagnostics}.
|
|
12
|
+
*/
|
|
13
|
+
export interface ReviewBugReportDiagnosticsParams extends ModalParamsBase {
|
|
14
|
+
/**
|
|
15
|
+
* The text the report always carries, shown first in the preview, such as the formatted environment.
|
|
16
|
+
*/
|
|
17
|
+
readonly alwaysIncludedText?: string;
|
|
18
|
+
/**
|
|
19
|
+
* The sections the user may include. A potentially private section starts excluded.
|
|
20
|
+
*/
|
|
21
|
+
readonly sections: readonly BugReportDiagnosticSection[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Shows the user the diagnostics a bug report can carry, with a switch per section and a preview of the
|
|
25
|
+
* exact text, and lets them continue or cancel. A potentially private section starts switched off.
|
|
26
|
+
*
|
|
27
|
+
* @param params - The parameters.
|
|
28
|
+
* @returns The sections the user chose, in their original order, or `null` when the user cancelled.
|
|
29
|
+
*/
|
|
30
|
+
export declare function reviewBugReportDiagnostics(params: ReviewBugReportDiagnosticsParams): Promise<null | readonly BugReportDiagnosticSection[]>;
|
|
@@ -0,0 +1,120 @@
|
|
|
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 {
|
|
34
|
+
ButtonComponent,
|
|
35
|
+
Setting
|
|
36
|
+
} from "obsidian";
|
|
37
|
+
import { formatBugReportDiagnostics } from "../bug-report-diagnostics.mjs";
|
|
38
|
+
import { CssClass } from "../css-class.mjs";
|
|
39
|
+
import { t } from "../i18n/i18n.mjs";
|
|
40
|
+
import {
|
|
41
|
+
ModalBase,
|
|
42
|
+
showModal
|
|
43
|
+
} from "./modal.mjs";
|
|
44
|
+
class ReviewBugReportDiagnosticsModal extends ModalBase {
|
|
45
|
+
alwaysIncludedText;
|
|
46
|
+
includedSectionIds = /* @__PURE__ */ new Set();
|
|
47
|
+
isContinued = false;
|
|
48
|
+
previewEl = null;
|
|
49
|
+
sections;
|
|
50
|
+
constructor(params) {
|
|
51
|
+
super(params);
|
|
52
|
+
this.addCssClasses(CssClass.BugReportReviewModal);
|
|
53
|
+
this.alwaysIncludedText = params.alwaysIncludedText ?? "";
|
|
54
|
+
this.sections = params.sections;
|
|
55
|
+
for (const section of this.sections) {
|
|
56
|
+
if (!section.isPotentiallyPrivate) {
|
|
57
|
+
this.includedSectionIds.add(section.id);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
onClose() {
|
|
62
|
+
this.promiseResolve(this.isContinued ? this.getIncludedSections() : null);
|
|
63
|
+
}
|
|
64
|
+
onOpen() {
|
|
65
|
+
this.titleEl.setText(t(($) => $.obsidianLib.bugReport.reviewTitle));
|
|
66
|
+
this.contentEl.createEl("p", { text: t(($) => $.obsidianLib.bugReport.reviewMessage) });
|
|
67
|
+
for (const section of this.sections) {
|
|
68
|
+
const setting = new Setting(this.contentEl).setName(section.title).addToggle((toggle) => {
|
|
69
|
+
toggle.setValue(this.includedSectionIds.has(section.id));
|
|
70
|
+
toggle.onChange((value) => {
|
|
71
|
+
if (value) {
|
|
72
|
+
this.includedSectionIds.add(section.id);
|
|
73
|
+
} else {
|
|
74
|
+
this.includedSectionIds.delete(section.id);
|
|
75
|
+
}
|
|
76
|
+
this.updatePreview();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
if (section.isPotentiallyPrivate) {
|
|
80
|
+
setting.setDesc(t(($) => $.obsidianLib.bugReport.potentiallyPrivate));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
this.contentEl.createEl("p", { text: t(($) => $.obsidianLib.bugReport.previewHeading) });
|
|
84
|
+
this.previewEl = this.contentEl.createEl("pre", { cls: CssClass.BugReportPreview });
|
|
85
|
+
this.updatePreview();
|
|
86
|
+
const buttonContainerEl = this.contentEl.createDiv({ cls: "modal-button-container" });
|
|
87
|
+
const continueButton = new ButtonComponent(buttonContainerEl);
|
|
88
|
+
continueButton.setButtonText(t(($) => $.obsidianLib.bugReport.continue));
|
|
89
|
+
continueButton.setCta();
|
|
90
|
+
continueButton.onClick(() => {
|
|
91
|
+
this.isContinued = true;
|
|
92
|
+
this.close();
|
|
93
|
+
});
|
|
94
|
+
continueButton.setClass(CssClass.OkButton);
|
|
95
|
+
const cancelButton = new ButtonComponent(buttonContainerEl);
|
|
96
|
+
cancelButton.setButtonText(t(($) => $.obsidianLib.buttons.cancel));
|
|
97
|
+
cancelButton.onClick(this.close.bind(this));
|
|
98
|
+
cancelButton.setClass(CssClass.CancelButton);
|
|
99
|
+
}
|
|
100
|
+
getIncludedSections() {
|
|
101
|
+
return this.sections.filter((section) => this.includedSectionIds.has(section.id));
|
|
102
|
+
}
|
|
103
|
+
updatePreview() {
|
|
104
|
+
const diagnostics = formatBugReportDiagnostics(this.getIncludedSections());
|
|
105
|
+
const parts = [this.alwaysIncludedText, diagnostics].filter((part) => part !== "");
|
|
106
|
+
this.previewEl?.setText(parts.join("\n\n"));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function reviewBugReportDiagnostics(params) {
|
|
110
|
+
return await showModal(
|
|
111
|
+
(promiseResolve) => new ReviewBugReportDiagnosticsModal({
|
|
112
|
+
...params,
|
|
113
|
+
promiseResolve
|
|
114
|
+
})
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
export {
|
|
118
|
+
reviewBugReportDiagnostics
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvcmV2aWV3LWJ1Zy1yZXBvcnQtZGlhZ25vc3RpY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgbW9kYWwgd2hlcmUgdGhlIHVzZXIgcmV2aWV3cywgYW5kIGNob29zZXMsIHRoZSBkaWFnbm9zdGljcyBhIGJ1ZyByZXBvcnQgd2lsbCBjYXJyeSwgYmVmb3JlIGFueXRoaW5nXG4gKiBsZWF2ZXMgT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHtcbiAgQnV0dG9uQ29tcG9uZW50LFxuICBTZXR0aW5nXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbiB9IGZyb20gJy4uL2J1Zy1yZXBvcnQtZGlhZ25vc3RpY3MudHMnO1xuaW1wb3J0IHR5cGUge1xuICBNb2RhbEJhc2VDb25zdHJ1Y3RvclBhcmFtcyxcbiAgTW9kYWxQYXJhbXNCYXNlXG59IGZyb20gJy4vbW9kYWwudHMnO1xuXG5pbXBvcnQgeyBmb3JtYXRCdWdSZXBvcnREaWFnbm9zdGljcyB9IGZyb20gJy4uL2J1Zy1yZXBvcnQtZGlhZ25vc3RpY3MudHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQge1xuICBNb2RhbEJhc2UsXG4gIHNob3dNb2RhbFxufSBmcm9tICcuL21vZGFsLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmV2aWV3QnVnUmVwb3J0RGlhZ25vc3RpY3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldmlld0J1Z1JlcG9ydERpYWdub3N0aWNzUGFyYW1zIGV4dGVuZHMgTW9kYWxQYXJhbXNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRoZSByZXBvcnQgYWx3YXlzIGNhcnJpZXMsIHNob3duIGZpcnN0IGluIHRoZSBwcmV2aWV3LCBzdWNoIGFzIHRoZSBmb3JtYXR0ZWQgZW52aXJvbm1lbnQuXG4gICAqL1xuICByZWFkb25seSBhbHdheXNJbmNsdWRlZFRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9ucyB0aGUgdXNlciBtYXkgaW5jbHVkZS4gQSBwb3RlbnRpYWxseSBwcml2YXRlIHNlY3Rpb24gc3RhcnRzIGV4Y2x1ZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdGlvbnM6IHJlYWRvbmx5IEJ1Z1JlcG9ydERpYWdub3N0aWNTZWN0aW9uW107XG59XG5cbnR5cGUgUmV2aWV3QnVnUmVwb3J0RGlhZ25vc3RpY3NNb2RhbENvbnN0cnVjdG9yUGFyYW1zID1cbiAgJiBNb2RhbEJhc2VDb25zdHJ1Y3RvclBhcmFtczxudWxsIHwgcmVhZG9ubHkgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb25bXT5cbiAgJiBSZXZpZXdCdWdSZXBvcnREaWFnbm9zdGljc1BhcmFtcztcblxuY2xhc3MgUmV2aWV3QnVnUmVwb3J0RGlhZ25vc3RpY3NNb2RhbCBleHRlbmRzIE1vZGFsQmFzZTxudWxsIHwgcmVhZG9ubHkgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb25bXT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGFsd2F5c0luY2x1ZGVkVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGVkU2VjdGlvbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIGlzQ29udGludWVkID0gZmFsc2U7XG4gIHByaXZhdGUgcHJldmlld0VsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlY3Rpb25zOiByZWFkb25seSBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbltdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFJldmlld0J1Z1JlcG9ydERpYWdub3N0aWNzTW9kYWxDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5hZGRDc3NDbGFzc2VzKENzc0NsYXNzLkJ1Z1JlcG9ydFJldmlld01vZGFsKTtcbiAgICB0aGlzLmFsd2F5c0luY2x1ZGVkVGV4dCA9IHBhcmFtcy5hbHdheXNJbmNsdWRlZFRleHQgPz8gJyc7XG4gICAgdGhpcy5zZWN0aW9ucyA9IHBhcmFtcy5zZWN0aW9ucztcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9ucykge1xuICAgICAgaWYgKCFzZWN0aW9uLmlzUG90ZW50aWFsbHlQcml2YXRlKSB7XG4gICAgICAgIHRoaXMuaW5jbHVkZWRTZWN0aW9uSWRzLmFkZChzZWN0aW9uLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnByb21pc2VSZXNvbHZlKHRoaXMuaXNDb250aW51ZWQgPyB0aGlzLmdldEluY2x1ZGVkU2VjdGlvbnMoKSA6IG51bGwpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uT3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlRWwuc2V0VGV4dCh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmJ1Z1JlcG9ydC5yZXZpZXdUaXRsZSkpO1xuICAgIHRoaXMuY29udGVudEVsLmNyZWF0ZUVsKCdwJywgeyB0ZXh0OiB0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmJ1Z1JlcG9ydC5yZXZpZXdNZXNzYWdlKSB9KTtcblxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLnNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBzZXR0aW5nID0gbmV3IFNldHRpbmcodGhpcy5jb250ZW50RWwpXG4gICAgICAgIC5zZXROYW1lKHNlY3Rpb24udGl0bGUpXG4gICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4ge1xuICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLmluY2x1ZGVkU2VjdGlvbklkcy5oYXMoc2VjdGlvbi5pZCkpO1xuICAgICAgICAgIHRvZ2dsZS5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLmluY2x1ZGVkU2VjdGlvbklkcy5hZGQoc2VjdGlvbi5pZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmluY2x1ZGVkU2VjdGlvbklkcy5kZWxldGUoc2VjdGlvbi5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXcoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICBpZiAoc2VjdGlvbi5pc1BvdGVudGlhbGx5UHJpdmF0ZSkge1xuICAgICAgICBzZXR0aW5nLnNldERlc2ModCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idWdSZXBvcnQucG90ZW50aWFsbHlQcml2YXRlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50RWwuY3JlYXRlRWwoJ3AnLCB7IHRleHQ6IHQoKCQpID0+ICQub2JzaWRpYW5MaWIuYnVnUmVwb3J0LnByZXZpZXdIZWFkaW5nKSB9KTtcbiAgICB0aGlzLnByZXZpZXdFbCA9IHRoaXMuY29udGVudEVsLmNyZWF0ZUVsKCdwcmUnLCB7IGNsczogQ3NzQ2xhc3MuQnVnUmVwb3J0UHJldmlldyB9KTtcbiAgICB0aGlzLnVwZGF0ZVByZXZpZXcoKTtcblxuICAgIGNvbnN0IGJ1dHRvbkNvbnRhaW5lckVsID0gdGhpcy5jb250ZW50RWwuY3JlYXRlRGl2KHsgY2xzOiAnbW9kYWwtYnV0dG9uLWNvbnRhaW5lcicgfSk7XG4gICAgY29uc3QgY29udGludWVCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGJ1dHRvbkNvbnRhaW5lckVsKTtcbiAgICBjb250aW51ZUJ1dHRvbi5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5MaWIuYnVnUmVwb3J0LmNvbnRpbnVlKSk7XG4gICAgY29udGludWVCdXR0b24uc2V0Q3RhKCk7XG4gICAgY29udGludWVCdXR0b24ub25DbGljaygoKSA9PiB7XG4gICAgICB0aGlzLmlzQ29udGludWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9KTtcbiAgICBjb250aW51ZUJ1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5Pa0J1dHRvbik7XG5cbiAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGJ1dHRvbkNvbnRhaW5lckVsKTtcbiAgICBjYW5jZWxCdXR0b24uc2V0QnV0dG9uVGV4dCh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmJ1dHRvbnMuY2FuY2VsKSk7XG4gICAgY2FuY2VsQnV0dG9uLm9uQ2xpY2sodGhpcy5jbG9zZS5iaW5kKHRoaXMpKTtcbiAgICBjYW5jZWxCdXR0b24uc2V0Q2xhc3MoQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5jbHVkZWRTZWN0aW9ucygpOiByZWFkb25seSBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9ucy5maWx0ZXIoKHNlY3Rpb24pID0+IHRoaXMuaW5jbHVkZWRTZWN0aW9uSWRzLmhhcyhzZWN0aW9uLmlkKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVByZXZpZXcoKTogdm9pZCB7XG4gICAgY29uc3QgZGlhZ25vc3RpY3MgPSBmb3JtYXRCdWdSZXBvcnREaWFnbm9zdGljcyh0aGlzLmdldEluY2x1ZGVkU2VjdGlvbnMoKSk7XG4gICAgY29uc3QgcGFydHMgPSBbdGhpcy5hbHdheXNJbmNsdWRlZFRleHQsIGRpYWdub3N0aWNzXS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcnKTtcbiAgICB0aGlzLnByZXZpZXdFbD8uc2V0VGV4dChwYXJ0cy5qb2luKCdcXG5cXG4nKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG93cyB0aGUgdXNlciB0aGUgZGlhZ25vc3RpY3MgYSBidWcgcmVwb3J0IGNhbiBjYXJyeSwgd2l0aCBhIHN3aXRjaCBwZXIgc2VjdGlvbiBhbmQgYSBwcmV2aWV3IG9mIHRoZVxuICogZXhhY3QgdGV4dCwgYW5kIGxldHMgdGhlbSBjb250aW51ZSBvciBjYW5jZWwuIEEgcG90ZW50aWFsbHkgcHJpdmF0ZSBzZWN0aW9uIHN0YXJ0cyBzd2l0Y2hlZCBvZmYuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHNlY3Rpb25zIHRoZSB1c2VyIGNob3NlLCBpbiB0aGVpciBvcmlnaW5hbCBvcmRlciwgb3IgYG51bGxgIHdoZW4gdGhlIHVzZXIgY2FuY2VsbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV2aWV3QnVnUmVwb3J0RGlhZ25vc3RpY3MocGFyYW1zOiBSZXZpZXdCdWdSZXBvcnREaWFnbm9zdGljc1BhcmFtcyk6IFByb21pc2U8bnVsbCB8IHJlYWRvbmx5IEJ1Z1JlcG9ydERpYWdub3N0aWNTZWN0aW9uW10+IHtcbiAgcmV0dXJuIGF3YWl0IHNob3dNb2RhbDxudWxsIHwgcmVhZG9ubHkgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb25bXT4oKHByb21pc2VSZXNvbHZlKSA9PlxuICAgIG5ldyBSZXZpZXdCdWdSZXBvcnREaWFnbm9zdGljc01vZGFsKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHByb21pc2VSZXNvbHZlXG4gICAgfSlcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQVFQLFNBQVMsa0NBQWtDO0FBQzNDLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsU0FBUztBQUNsQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXFCUCxNQUFNLHdDQUF3QyxVQUF3RDtBQUFBLEVBQ25GO0FBQUEsRUFDQSxxQkFBcUIsb0JBQUksSUFBWTtBQUFBLEVBQzlDLGNBQWM7QUFBQSxFQUNkLFlB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
|