@matdata/yasgui 5.10.1 → 5.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/build/ts/src/PersistentConfig.d.ts +14 -0
- package/build/ts/src/PersistentConfig.js +52 -0
- package/build/ts/src/PersistentConfig.js.map +1 -1
- package/build/ts/src/Tab.d.ts +17 -0
- package/build/ts/src/Tab.js +374 -16
- package/build/ts/src/Tab.js.map +1 -1
- package/build/ts/src/TabContextMenu.d.ts +1 -0
- package/build/ts/src/TabContextMenu.js +17 -0
- package/build/ts/src/TabContextMenu.js.map +1 -1
- package/build/ts/src/TabElements.d.ts +3 -0
- package/build/ts/src/TabElements.js +97 -28
- package/build/ts/src/TabElements.js.map +1 -1
- package/build/ts/src/TabSettingsModal.d.ts +2 -0
- package/build/ts/src/TabSettingsModal.js +160 -19
- package/build/ts/src/TabSettingsModal.js.map +1 -1
- package/build/ts/src/ThemeManager.d.ts +3 -0
- package/build/ts/src/ThemeManager.js +11 -1
- package/build/ts/src/ThemeManager.js.map +1 -1
- package/build/ts/src/index.d.ts +4 -0
- package/build/ts/src/index.js +6 -0
- package/build/ts/src/index.js.map +1 -1
- package/build/ts/src/queryManagement/QueryBrowser.d.ts +64 -0
- package/build/ts/src/queryManagement/QueryBrowser.js +914 -0
- package/build/ts/src/queryManagement/QueryBrowser.js.map +1 -0
- package/build/ts/src/queryManagement/SaveManagedQueryModal.d.ts +55 -0
- package/build/ts/src/queryManagement/SaveManagedQueryModal.js +451 -0
- package/build/ts/src/queryManagement/SaveManagedQueryModal.js.map +1 -0
- package/build/ts/src/queryManagement/WorkspaceSettingsForm.d.ts +16 -0
- package/build/ts/src/queryManagement/WorkspaceSettingsForm.js +452 -0
- package/build/ts/src/queryManagement/WorkspaceSettingsForm.js.map +1 -0
- package/build/ts/src/queryManagement/backends/BaseGitProviderClient.d.ts +19 -0
- package/build/ts/src/queryManagement/backends/BaseGitProviderClient.js +77 -0
- package/build/ts/src/queryManagement/backends/BaseGitProviderClient.js.map +1 -0
- package/build/ts/src/queryManagement/backends/BitbucketProviderClient.d.ts +16 -0
- package/build/ts/src/queryManagement/backends/BitbucketProviderClient.js +269 -0
- package/build/ts/src/queryManagement/backends/BitbucketProviderClient.js.map +1 -0
- package/build/ts/src/queryManagement/backends/GitWorkspaceBackend.d.ts +26 -0
- package/build/ts/src/queryManagement/backends/GitWorkspaceBackend.js +93 -0
- package/build/ts/src/queryManagement/backends/GitWorkspaceBackend.js.map +1 -0
- package/build/ts/src/queryManagement/backends/GiteaProviderClient.d.ts +14 -0
- package/build/ts/src/queryManagement/backends/GiteaProviderClient.js +244 -0
- package/build/ts/src/queryManagement/backends/GiteaProviderClient.js.map +1 -0
- package/build/ts/src/queryManagement/backends/GithubProviderClient.d.ts +14 -0
- package/build/ts/src/queryManagement/backends/GithubProviderClient.js +252 -0
- package/build/ts/src/queryManagement/backends/GithubProviderClient.js.map +1 -0
- package/build/ts/src/queryManagement/backends/GitlabProviderClient.d.ts +16 -0
- package/build/ts/src/queryManagement/backends/GitlabProviderClient.js +246 -0
- package/build/ts/src/queryManagement/backends/GitlabProviderClient.js.map +1 -0
- package/build/ts/src/queryManagement/backends/InMemoryWorkspaceBackend.d.ts +21 -0
- package/build/ts/src/queryManagement/backends/InMemoryWorkspaceBackend.js +175 -0
- package/build/ts/src/queryManagement/backends/InMemoryWorkspaceBackend.js.map +1 -0
- package/build/ts/src/queryManagement/backends/SparqlWorkspaceBackend.d.ts +28 -0
- package/build/ts/src/queryManagement/backends/SparqlWorkspaceBackend.js +687 -0
- package/build/ts/src/queryManagement/backends/SparqlWorkspaceBackend.js.map +1 -0
- package/build/ts/src/queryManagement/backends/WorkspaceBackend.d.ts +15 -0
- package/build/ts/src/queryManagement/backends/WorkspaceBackend.js +2 -0
- package/build/ts/src/queryManagement/backends/WorkspaceBackend.js.map +1 -0
- package/build/ts/src/queryManagement/backends/errors.d.ts +7 -0
- package/build/ts/src/queryManagement/backends/errors.js +18 -0
- package/build/ts/src/queryManagement/backends/errors.js.map +1 -0
- package/build/ts/src/queryManagement/backends/getWorkspaceBackend.d.ts +8 -0
- package/build/ts/src/queryManagement/backends/getWorkspaceBackend.js +114 -0
- package/build/ts/src/queryManagement/backends/getWorkspaceBackend.js.map +1 -0
- package/build/ts/src/queryManagement/backends/gitRemote.d.ts +5 -0
- package/build/ts/src/queryManagement/backends/gitRemote.js +40 -0
- package/build/ts/src/queryManagement/backends/gitRemote.js.map +1 -0
- package/build/ts/src/queryManagement/browserFilter.d.ts +2 -0
- package/build/ts/src/queryManagement/browserFilter.js +7 -0
- package/build/ts/src/queryManagement/browserFilter.js.map +1 -0
- package/build/ts/src/queryManagement/index.d.ts +13 -0
- package/build/ts/src/queryManagement/index.js +14 -0
- package/build/ts/src/queryManagement/index.js.map +1 -0
- package/build/ts/src/queryManagement/normalizeQueryFilename.d.ts +1 -0
- package/build/ts/src/queryManagement/normalizeQueryFilename.js +10 -0
- package/build/ts/src/queryManagement/normalizeQueryFilename.js.map +1 -0
- package/build/ts/src/queryManagement/openManagedQuery.d.ts +15 -0
- package/build/ts/src/queryManagement/openManagedQuery.js +27 -0
- package/build/ts/src/queryManagement/openManagedQuery.js.map +1 -0
- package/build/ts/src/queryManagement/saveManagedQuery.d.ts +20 -0
- package/build/ts/src/queryManagement/saveManagedQuery.js +109 -0
- package/build/ts/src/queryManagement/saveManagedQuery.js.map +1 -0
- package/build/ts/src/queryManagement/textHash.d.ts +2 -0
- package/build/ts/src/queryManagement/textHash.js +13 -0
- package/build/ts/src/queryManagement/textHash.js.map +1 -0
- package/build/ts/src/queryManagement/types.d.ts +76 -0
- package/build/ts/src/queryManagement/types.js +2 -0
- package/build/ts/src/queryManagement/types.js.map +1 -0
- package/build/ts/src/queryManagement/validateWorkspaceConfig.d.ts +6 -0
- package/build/ts/src/queryManagement/validateWorkspaceConfig.js +33 -0
- package/build/ts/src/queryManagement/validateWorkspaceConfig.js.map +1 -0
- package/build/ts/src/version.d.ts +1 -1
- package/build/ts/src/version.js +1 -1
- package/build/yasgui.min.css +10 -1
- package/build/yasgui.min.css.map +3 -3
- package/build/yasgui.min.js +398 -172
- package/build/yasgui.min.js.map +4 -4
- package/package.json +1 -1
- package/src/PersistentConfig.ts +76 -0
- package/src/Tab.ts +434 -22
- package/src/TabContextMenu.ts +10 -0
- package/src/TabElements.scss +46 -7
- package/src/TabElements.ts +95 -27
- package/src/TabSettingsModal.scss +102 -5
- package/src/TabSettingsModal.ts +194 -25
- package/src/ThemeManager.ts +18 -1
- package/src/endpointSelect.scss +2 -3
- package/src/github-dark-theme.scss +167 -0
- package/src/index.scss +4 -0
- package/src/index.ts +11 -0
- package/src/queryManagement/QueryBrowser.scss +418 -0
- package/src/queryManagement/QueryBrowser.ts +1079 -0
- package/src/queryManagement/SaveManagedQueryModal.scss +245 -0
- package/src/queryManagement/SaveManagedQueryModal.ts +554 -0
- package/src/queryManagement/WorkspaceSettingsForm.ts +546 -0
- package/src/queryManagement/backends/BaseGitProviderClient.ts +124 -0
- package/src/queryManagement/backends/BitbucketProviderClient.ts +403 -0
- package/src/queryManagement/backends/GitWorkspaceBackend.ts +96 -0
- package/src/queryManagement/backends/GiteaProviderClient.ts +316 -0
- package/src/queryManagement/backends/GithubProviderClient.ts +319 -0
- package/src/queryManagement/backends/GitlabProviderClient.ts +327 -0
- package/src/queryManagement/backends/InMemoryWorkspaceBackend.ts +175 -0
- package/src/queryManagement/backends/SparqlWorkspaceBackend.ts +729 -0
- package/src/queryManagement/backends/WorkspaceBackend.ts +41 -0
- package/src/queryManagement/backends/errors.ts +28 -0
- package/src/queryManagement/backends/getWorkspaceBackend.ts +132 -0
- package/src/queryManagement/backends/gitRemote.ts +54 -0
- package/src/queryManagement/browserFilter.ts +8 -0
- package/src/queryManagement/index.ts +15 -0
- package/src/queryManagement/normalizeQueryFilename.ts +8 -0
- package/src/queryManagement/openManagedQuery.ts +31 -0
- package/src/queryManagement/saveManagedQuery.ts +135 -0
- package/src/queryManagement/textHash.ts +15 -0
- package/src/queryManagement/types.ts +85 -0
- package/src/queryManagement/validateWorkspaceConfig.ts +40 -0
- package/src/tab.scss +4 -14
- package/src/themes.scss +54 -63
- package/src/version.ts +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Yasgui, { EndpointButton, EndpointConfig } from "./";
|
|
2
2
|
import * as Tab from "./Tab";
|
|
3
|
+
import type { WorkspaceConfig } from "./queryManagement/types";
|
|
3
4
|
export declare var storageNamespace: string;
|
|
4
5
|
export interface PersistedJson {
|
|
5
6
|
endpointHistory: string[];
|
|
@@ -16,10 +17,14 @@ export interface PersistedJson {
|
|
|
16
17
|
autoCaptureEnabled?: boolean;
|
|
17
18
|
customEndpointButtons?: EndpointButton[];
|
|
18
19
|
endpointConfigs?: EndpointConfig[];
|
|
20
|
+
workspaces?: WorkspaceConfig[];
|
|
21
|
+
activeWorkspaceId?: string;
|
|
19
22
|
theme?: "light" | "dark";
|
|
20
23
|
orientation?: "vertical" | "horizontal";
|
|
21
24
|
showSnippetsBar?: boolean;
|
|
22
25
|
disabledDevButtons?: string[];
|
|
26
|
+
codeMirrorThemeLight?: string;
|
|
27
|
+
codeMirrorThemeDark?: string;
|
|
23
28
|
}
|
|
24
29
|
export default class PersistentConfig {
|
|
25
30
|
private persistedJson;
|
|
@@ -55,11 +60,20 @@ export default class PersistentConfig {
|
|
|
55
60
|
setCustomEndpointButtons(buttons: EndpointButton[]): void;
|
|
56
61
|
getShowSnippetsBar(): boolean | undefined;
|
|
57
62
|
setShowSnippetsBar(show: boolean): void;
|
|
63
|
+
getCodeMirrorTheme(mode: "light" | "dark"): string | undefined;
|
|
64
|
+
setCodeMirrorTheme(mode: "light" | "dark", theme: string): void;
|
|
58
65
|
getEndpointConfigs(): EndpointConfig[];
|
|
59
66
|
setEndpointConfigs(configs: EndpointConfig[]): void;
|
|
60
67
|
addOrUpdateEndpoint(endpoint: string, updates: Partial<Omit<EndpointConfig, "endpoint">>): void;
|
|
61
68
|
getEndpointConfig(endpoint: string): EndpointConfig | undefined;
|
|
62
69
|
deleteEndpointConfig(endpoint: string): void;
|
|
70
|
+
getWorkspaces(): WorkspaceConfig[];
|
|
71
|
+
getWorkspace(workspaceId: string): WorkspaceConfig | undefined;
|
|
72
|
+
setWorkspaces(workspaces: WorkspaceConfig[]): void;
|
|
73
|
+
addOrUpdateWorkspace(workspace: WorkspaceConfig): void;
|
|
74
|
+
deleteWorkspace(workspaceId: string): void;
|
|
75
|
+
getActiveWorkspaceId(): string | undefined;
|
|
76
|
+
setActiveWorkspaceId(workspaceId: string | undefined): void;
|
|
63
77
|
static clear(): void;
|
|
64
78
|
getPersistedConfig(): PersistedJson;
|
|
65
79
|
updatePersistedConfig(config: Partial<PersistedJson>): void;
|
|
@@ -11,6 +11,8 @@ function getDefaults() {
|
|
|
11
11
|
autoCaptureEnabled: true,
|
|
12
12
|
customEndpointButtons: [],
|
|
13
13
|
endpointConfigs: [],
|
|
14
|
+
workspaces: [],
|
|
15
|
+
activeWorkspaceId: undefined,
|
|
14
16
|
};
|
|
15
17
|
}
|
|
16
18
|
export default class PersistentConfig {
|
|
@@ -135,6 +137,18 @@ export default class PersistentConfig {
|
|
|
135
137
|
this.persistedJson.showSnippetsBar = show;
|
|
136
138
|
this.toStorage();
|
|
137
139
|
}
|
|
140
|
+
getCodeMirrorTheme(mode) {
|
|
141
|
+
return mode === "dark" ? this.persistedJson.codeMirrorThemeDark : this.persistedJson.codeMirrorThemeLight;
|
|
142
|
+
}
|
|
143
|
+
setCodeMirrorTheme(mode, theme) {
|
|
144
|
+
if (mode === "dark") {
|
|
145
|
+
this.persistedJson.codeMirrorThemeDark = theme;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.persistedJson.codeMirrorThemeLight = theme;
|
|
149
|
+
}
|
|
150
|
+
this.toStorage();
|
|
151
|
+
}
|
|
138
152
|
getEndpointConfigs() {
|
|
139
153
|
return this.persistedJson.endpointConfigs || [];
|
|
140
154
|
}
|
|
@@ -166,6 +180,44 @@ export default class PersistentConfig {
|
|
|
166
180
|
const filtered = configs.filter((c) => c.endpoint !== endpoint);
|
|
167
181
|
this.setEndpointConfigs(filtered);
|
|
168
182
|
}
|
|
183
|
+
getWorkspaces() {
|
|
184
|
+
return this.persistedJson.workspaces || [];
|
|
185
|
+
}
|
|
186
|
+
getWorkspace(workspaceId) {
|
|
187
|
+
return this.getWorkspaces().find((w) => w.id === workspaceId);
|
|
188
|
+
}
|
|
189
|
+
setWorkspaces(workspaces) {
|
|
190
|
+
this.persistedJson.workspaces = workspaces;
|
|
191
|
+
this.toStorage();
|
|
192
|
+
}
|
|
193
|
+
addOrUpdateWorkspace(workspace) {
|
|
194
|
+
const workspaces = this.getWorkspaces();
|
|
195
|
+
const existingIndex = workspaces.findIndex((w) => w.id === workspace.id);
|
|
196
|
+
const now = new Date().toISOString();
|
|
197
|
+
if (existingIndex >= 0) {
|
|
198
|
+
const existing = workspaces[existingIndex];
|
|
199
|
+
workspaces[existingIndex] = Object.assign(Object.assign(Object.assign({}, existing), workspace), { createdAt: existing.createdAt || workspace.createdAt || now, updatedAt: now });
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
workspaces.push(Object.assign(Object.assign({}, workspace), { createdAt: workspace.createdAt || now, updatedAt: now }));
|
|
203
|
+
}
|
|
204
|
+
this.setWorkspaces(workspaces);
|
|
205
|
+
}
|
|
206
|
+
deleteWorkspace(workspaceId) {
|
|
207
|
+
const workspaces = this.getWorkspaces();
|
|
208
|
+
const filtered = workspaces.filter((w) => w.id !== workspaceId);
|
|
209
|
+
this.setWorkspaces(filtered);
|
|
210
|
+
if (this.getActiveWorkspaceId() === workspaceId) {
|
|
211
|
+
this.setActiveWorkspaceId(undefined);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
getActiveWorkspaceId() {
|
|
215
|
+
return this.persistedJson.activeWorkspaceId;
|
|
216
|
+
}
|
|
217
|
+
setActiveWorkspaceId(workspaceId) {
|
|
218
|
+
this.persistedJson.activeWorkspaceId = workspaceId;
|
|
219
|
+
this.toStorage();
|
|
220
|
+
}
|
|
169
221
|
static clear() {
|
|
170
222
|
const storage = new YStorage(storageNamespace);
|
|
171
223
|
storage.removeNamespace();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistentConfig.js","sourceRoot":"","sources":["../../../../../packages/yasgui/src/PersistentConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"PersistentConfig.js","sourceRoot":"","sources":["../../../../../packages/yasgui/src/PersistentConfig.ts"],"names":[],"mappings":"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"}
|
package/build/ts/src/Tab.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { default as Yasr, Parser, PersistentConfig as YasrPersistentConfig } fro
|
|
|
4
4
|
import * as shareLink from "./linkUtils";
|
|
5
5
|
import "./tab.scss";
|
|
6
6
|
import { default as Yasgui, YasguiRequestConfig } from "./";
|
|
7
|
+
import type { ManagedTabMetadata } from "./queryManagement/types";
|
|
7
8
|
export interface PersistedJsonYasr extends YasrPersistentConfig {
|
|
8
9
|
responseSummary: Parser.ResponseSummary;
|
|
9
10
|
}
|
|
@@ -20,6 +21,7 @@ export interface PersistedJson {
|
|
|
20
21
|
};
|
|
21
22
|
requestConfig: YasguiRequestConfig;
|
|
22
23
|
orientation?: "vertical" | "horizontal";
|
|
24
|
+
managedQuery?: ManagedTabMetadata;
|
|
23
25
|
}
|
|
24
26
|
export interface Tab {
|
|
25
27
|
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
@@ -66,6 +68,16 @@ export declare class Tab extends EventEmitter {
|
|
|
66
68
|
name(): string;
|
|
67
69
|
getPersistedJson(): PersistedJson;
|
|
68
70
|
getId(): string;
|
|
71
|
+
getManagedQueryMetadata(): ManagedTabMetadata | undefined;
|
|
72
|
+
setManagedQueryMetadata(metadata: ManagedTabMetadata | undefined): void;
|
|
73
|
+
isManagedQueryTab(): boolean;
|
|
74
|
+
hasUnsavedManagedChanges(): boolean;
|
|
75
|
+
private getDefaultSaveModalValues;
|
|
76
|
+
private getManagedQueryIdFromMetadata;
|
|
77
|
+
private versionRefFromVersionTag;
|
|
78
|
+
private getQueryTextForSave;
|
|
79
|
+
saveManagedQueryOrSaveAsManagedQuery(): Promise<void>;
|
|
80
|
+
saveAsManagedQuery(): Promise<void>;
|
|
69
81
|
private draw;
|
|
70
82
|
hide(): void;
|
|
71
83
|
show(): void;
|
|
@@ -74,6 +86,7 @@ export declare class Tab extends EventEmitter {
|
|
|
74
86
|
private detachKeyboardListeners;
|
|
75
87
|
select(): void;
|
|
76
88
|
close(): void;
|
|
89
|
+
private closeNow;
|
|
77
90
|
getQuery(): any;
|
|
78
91
|
setQuery(query: string): this;
|
|
79
92
|
getRequestConfig(): YasguiRequestConfig;
|
|
@@ -101,6 +114,8 @@ export declare class Tab extends EventEmitter {
|
|
|
101
114
|
getShareObject(): shareLink.ShareConfigObject;
|
|
102
115
|
private getTabListEl;
|
|
103
116
|
setName(newName: string): this;
|
|
117
|
+
private suggestManagedFilenameFromName;
|
|
118
|
+
renameTab(newName: string): Promise<void>;
|
|
104
119
|
hasResults(): boolean;
|
|
105
120
|
getName(): string;
|
|
106
121
|
query(): Promise<any>;
|
|
@@ -109,6 +124,8 @@ export declare class Tab extends EventEmitter {
|
|
|
109
124
|
private ensureOAuth2TokenValid;
|
|
110
125
|
private getStaticRequestConfig;
|
|
111
126
|
private initYasqe;
|
|
127
|
+
private updateSaveButtonVisibility;
|
|
128
|
+
private initSaveManagedQueryIcon;
|
|
112
129
|
private destroyYasqe;
|
|
113
130
|
handleYasqeBlur: (yasqe: Yasqe) => void;
|
|
114
131
|
handleYasqeQuery: (yasqe: Yasqe) => void;
|
package/build/ts/src/Tab.js
CHANGED
|
@@ -18,25 +18,29 @@ import EndpointSelect from "./endpointSelect";
|
|
|
18
18
|
import "./tab.scss";
|
|
19
19
|
import { getRandomId, default as Yasgui } from "./";
|
|
20
20
|
import * as OAuth2Utils from "./OAuth2Utils";
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
<rect x="2" y="12" width="20" height="10" stroke="currentColor" stroke-width="2" fill="none"/>
|
|
28
|
-
</svg>`;
|
|
29
|
-
const OVERFLOW_ICON = `<svg viewBox="0 0 24 24" fill="currentColor">
|
|
30
|
-
<circle cx="5" cy="12" r="2"/>
|
|
31
|
-
<circle cx="12" cy="12" r="2"/>
|
|
32
|
-
<circle cx="19" cy="12" r="2"/>
|
|
33
|
-
</svg>`;
|
|
21
|
+
import { hashQueryText } from "./queryManagement/textHash";
|
|
22
|
+
import SaveManagedQueryModal from "./queryManagement/SaveManagedQueryModal";
|
|
23
|
+
import { saveManagedQuery } from "./queryManagement/saveManagedQuery";
|
|
24
|
+
import { getWorkspaceBackend } from "./queryManagement/backends/getWorkspaceBackend";
|
|
25
|
+
import { asWorkspaceBackendError } from "./queryManagement/backends/errors";
|
|
26
|
+
import { normalizeQueryFilename } from "./queryManagement/normalizeQueryFilename";
|
|
34
27
|
export class Tab extends EventEmitter {
|
|
35
28
|
constructor(yasgui, conf) {
|
|
36
29
|
super();
|
|
37
30
|
this.endpointButtonConfigs = [];
|
|
38
31
|
this.handleKeyDown = (event) => {
|
|
39
32
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
33
|
+
if (event.defaultPrevented)
|
|
34
|
+
return;
|
|
35
|
+
const saveModalOpen = !!document.querySelector(".saveManagedQueryModalOverlay.open");
|
|
36
|
+
if (!saveModalOpen) {
|
|
37
|
+
const isSaveShortcut = (event.ctrlKey || event.metaKey) && !event.shiftKey && !event.altKey && event.key.toLowerCase() === "s";
|
|
38
|
+
if (isSaveShortcut) {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
void this.saveManagedQueryOrSaveAsManagedQuery();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
40
44
|
if (event.key === "F11") {
|
|
41
45
|
event.preventDefault();
|
|
42
46
|
if (this.yasqe) {
|
|
@@ -220,6 +224,205 @@ WHERE {
|
|
|
220
224
|
getId() {
|
|
221
225
|
return this.persistentJson.id;
|
|
222
226
|
}
|
|
227
|
+
getManagedQueryMetadata() {
|
|
228
|
+
return this.persistentJson.managedQuery;
|
|
229
|
+
}
|
|
230
|
+
setManagedQueryMetadata(metadata) {
|
|
231
|
+
if (metadata) {
|
|
232
|
+
this.persistentJson.managedQuery = metadata;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
delete this.persistentJson.managedQuery;
|
|
236
|
+
}
|
|
237
|
+
this.emit("change", this, this.persistentJson);
|
|
238
|
+
}
|
|
239
|
+
isManagedQueryTab() {
|
|
240
|
+
return !!this.persistentJson.managedQuery;
|
|
241
|
+
}
|
|
242
|
+
hasUnsavedManagedChanges() {
|
|
243
|
+
const meta = this.getManagedQueryMetadata();
|
|
244
|
+
if (!meta)
|
|
245
|
+
return false;
|
|
246
|
+
if (!meta.lastSavedTextHash)
|
|
247
|
+
return false;
|
|
248
|
+
try {
|
|
249
|
+
const current = this.yasqe ? this.yasqe.getValue() : this.persistentJson.yasqe.value;
|
|
250
|
+
const currentHash = hashQueryText(current);
|
|
251
|
+
return currentHash !== meta.lastSavedTextHash;
|
|
252
|
+
}
|
|
253
|
+
catch (_a) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
getDefaultSaveModalValues() {
|
|
258
|
+
var _a;
|
|
259
|
+
const meta = this.getManagedQueryMetadata();
|
|
260
|
+
if (!meta)
|
|
261
|
+
return { name: this.name() };
|
|
262
|
+
if (meta.backendType !== "git")
|
|
263
|
+
return { workspaceId: meta.workspaceId };
|
|
264
|
+
const path = (_a = meta.queryRef) === null || _a === void 0 ? void 0 : _a.path;
|
|
265
|
+
if (!path)
|
|
266
|
+
return { workspaceId: meta.workspaceId };
|
|
267
|
+
const parts = path.split("/");
|
|
268
|
+
const filename = parts.pop();
|
|
269
|
+
const folderPath = parts.join("/");
|
|
270
|
+
return {
|
|
271
|
+
workspaceId: meta.workspaceId,
|
|
272
|
+
folderPath,
|
|
273
|
+
filename,
|
|
274
|
+
name: this.name(),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
getManagedQueryIdFromMetadata(meta) {
|
|
278
|
+
var _a, _b;
|
|
279
|
+
if (meta.backendType === "git")
|
|
280
|
+
return (_a = meta.queryRef) === null || _a === void 0 ? void 0 : _a.path;
|
|
281
|
+
return (_b = meta.queryRef) === null || _b === void 0 ? void 0 : _b.managedQueryIri;
|
|
282
|
+
}
|
|
283
|
+
versionRefFromVersionTag(backendType, versionTag) {
|
|
284
|
+
if (!versionTag)
|
|
285
|
+
return undefined;
|
|
286
|
+
if (backendType === "git")
|
|
287
|
+
return { commitSha: versionTag };
|
|
288
|
+
return { managedQueryVersionIri: versionTag };
|
|
289
|
+
}
|
|
290
|
+
getQueryTextForSave() {
|
|
291
|
+
try {
|
|
292
|
+
if (this.yasqe)
|
|
293
|
+
return this.yasqe.getValue();
|
|
294
|
+
}
|
|
295
|
+
catch (_a) {
|
|
296
|
+
}
|
|
297
|
+
return this.persistentJson.yasqe.value;
|
|
298
|
+
}
|
|
299
|
+
saveManagedQueryOrSaveAsManagedQuery() {
|
|
300
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
301
|
+
const meta = this.getManagedQueryMetadata();
|
|
302
|
+
if (!meta) {
|
|
303
|
+
yield this.saveAsManagedQuery();
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
const queryId = this.getManagedQueryIdFromMetadata(meta);
|
|
307
|
+
if (!queryId) {
|
|
308
|
+
yield this.saveAsManagedQuery();
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const workspace = this.yasgui.persistentConfig.getWorkspace(meta.workspaceId);
|
|
312
|
+
if (!workspace) {
|
|
313
|
+
window.alert("Selected workspace no longer exists");
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
const backend = getWorkspaceBackend(workspace, { persistentConfig: this.yasgui.persistentConfig });
|
|
317
|
+
const expectedVersionTag = (() => {
|
|
318
|
+
var _a, _b;
|
|
319
|
+
if (!(meta === null || meta === void 0 ? void 0 : meta.lastSavedVersionRef))
|
|
320
|
+
return undefined;
|
|
321
|
+
if (meta.backendType === "git")
|
|
322
|
+
return (_a = meta.lastSavedVersionRef) === null || _a === void 0 ? void 0 : _a.commitSha;
|
|
323
|
+
return (_b = meta.lastSavedVersionRef) === null || _b === void 0 ? void 0 : _b.managedQueryVersionIri;
|
|
324
|
+
})();
|
|
325
|
+
try {
|
|
326
|
+
yield backend.writeQuery(queryId, this.getQueryTextForSave(), { expectedVersionTag });
|
|
327
|
+
}
|
|
328
|
+
catch (e) {
|
|
329
|
+
const err = asWorkspaceBackendError(e);
|
|
330
|
+
if (err.code === "CONFLICT") {
|
|
331
|
+
if (meta.backendType === "git") {
|
|
332
|
+
try {
|
|
333
|
+
const latest = yield backend.readQuery(queryId);
|
|
334
|
+
const latestHash = hashQueryText(latest.queryText);
|
|
335
|
+
if (meta.lastSavedTextHash && meta.lastSavedTextHash === latestHash && latest.versionTag) {
|
|
336
|
+
yield backend.writeQuery(queryId, this.getQueryTextForSave(), { expectedVersionTag: latest.versionTag });
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
window.alert("Save conflict. Resolve the conflict externally (e.g., pull/rebase/merge) and then try saving again.");
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
catch (_a) {
|
|
344
|
+
window.alert("Save conflict. Resolve the conflict externally (e.g., pull/rebase/merge) and then try saving again.");
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
window.alert("Save conflict. Refresh the query and try again.");
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
window.alert(err.message);
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const read = yield backend.readQuery(queryId);
|
|
357
|
+
const lastSavedTextHash = hashQueryText(read.queryText);
|
|
358
|
+
const lastSavedVersionRef = this.versionRefFromVersionTag(meta.backendType, read.versionTag);
|
|
359
|
+
this.setManagedQueryMetadata(Object.assign(Object.assign({}, meta), { lastSavedTextHash,
|
|
360
|
+
lastSavedVersionRef }));
|
|
361
|
+
this.yasgui.queryBrowser.invalidateAndRefresh(meta.workspaceId);
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
saveAsManagedQuery() {
|
|
365
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
366
|
+
const modal = new SaveManagedQueryModal(this.yasgui);
|
|
367
|
+
const defaults = this.getDefaultSaveModalValues();
|
|
368
|
+
let result;
|
|
369
|
+
try {
|
|
370
|
+
const modalDefaults = {
|
|
371
|
+
workspaceId: defaults.workspaceId,
|
|
372
|
+
folderPath: defaults.folderPath || "",
|
|
373
|
+
name: defaults.name || this.name(),
|
|
374
|
+
};
|
|
375
|
+
if (defaults.filename)
|
|
376
|
+
modalDefaults.filename = defaults.filename;
|
|
377
|
+
result = yield modal.show(modalDefaults);
|
|
378
|
+
}
|
|
379
|
+
catch (_a) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
const workspace = this.yasgui.persistentConfig.getWorkspace(result.workspaceId);
|
|
383
|
+
if (!workspace) {
|
|
384
|
+
window.alert("Selected workspace no longer exists");
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
const backend = getWorkspaceBackend(workspace, { persistentConfig: this.yasgui.persistentConfig });
|
|
388
|
+
const meta = this.getManagedQueryMetadata();
|
|
389
|
+
const expectedVersionTag = (() => {
|
|
390
|
+
var _a, _b;
|
|
391
|
+
if (!(meta === null || meta === void 0 ? void 0 : meta.lastSavedVersionRef))
|
|
392
|
+
return undefined;
|
|
393
|
+
if (meta.backendType === "git")
|
|
394
|
+
return (_a = meta.lastSavedVersionRef) === null || _a === void 0 ? void 0 : _a.commitSha;
|
|
395
|
+
return (_b = meta.lastSavedVersionRef) === null || _b === void 0 ? void 0 : _b.managedQueryVersionIri;
|
|
396
|
+
})();
|
|
397
|
+
try {
|
|
398
|
+
modal.notifySaveInProgress();
|
|
399
|
+
const { managedMetadata } = yield saveManagedQuery({
|
|
400
|
+
backend,
|
|
401
|
+
backendType: workspace.type,
|
|
402
|
+
workspaceId: workspace.id,
|
|
403
|
+
workspaceIri: workspace.type === "sparql" ? workspace.workspaceIri : undefined,
|
|
404
|
+
folderPath: result.folderPath,
|
|
405
|
+
name: result.name,
|
|
406
|
+
filename: result.filename,
|
|
407
|
+
queryText: this.getQueryTextForSave(),
|
|
408
|
+
associatedEndpoint: workspace.type === "sparql" ? this.getEndpoint() : undefined,
|
|
409
|
+
message: result.message,
|
|
410
|
+
expectedVersionTag,
|
|
411
|
+
});
|
|
412
|
+
modal.notifySaveComplete();
|
|
413
|
+
this.setManagedQueryMetadata(managedMetadata);
|
|
414
|
+
if (result.name && result.name.trim()) {
|
|
415
|
+
this.setName(result.name.trim());
|
|
416
|
+
}
|
|
417
|
+
this.yasgui.queryBrowser.invalidateAndRefresh(workspace.id);
|
|
418
|
+
}
|
|
419
|
+
catch (e) {
|
|
420
|
+
modal.notifySaveComplete();
|
|
421
|
+
const err = asWorkspaceBackendError(e);
|
|
422
|
+
window.alert(err.message);
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
}
|
|
223
426
|
draw() {
|
|
224
427
|
if (this.rootEl)
|
|
225
428
|
return;
|
|
@@ -281,6 +484,23 @@ WHERE {
|
|
|
281
484
|
this.yasgui.selectTabId(this.persistentJson.id);
|
|
282
485
|
}
|
|
283
486
|
close() {
|
|
487
|
+
if (this.isManagedQueryTab() && this.hasUnsavedManagedChanges()) {
|
|
488
|
+
const wantsSave = window.confirm("This managed query has unsaved changes. Save before closing?");
|
|
489
|
+
if (wantsSave) {
|
|
490
|
+
void this.saveManagedQueryOrSaveAsManagedQuery().then(() => {
|
|
491
|
+
if (!this.hasUnsavedManagedChanges()) {
|
|
492
|
+
this.closeNow();
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
const discard = window.confirm("Discard changes and close the tab?");
|
|
498
|
+
if (!discard)
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
this.closeNow();
|
|
502
|
+
}
|
|
503
|
+
closeNow() {
|
|
284
504
|
this.detachKeyboardListeners();
|
|
285
505
|
if (this.yasqe)
|
|
286
506
|
this.yasqe.abortQuery();
|
|
@@ -342,7 +562,9 @@ WHERE {
|
|
|
342
562
|
if (!this.orientationToggleButton)
|
|
343
563
|
return;
|
|
344
564
|
this.orientationToggleButton.innerHTML =
|
|
345
|
-
this.currentOrientation === "vertical"
|
|
565
|
+
this.currentOrientation === "vertical"
|
|
566
|
+
? '<i class="fas fa-grip-lines-vertical"></i>'
|
|
567
|
+
: '<i class="fas fa-grip-lines"></i>';
|
|
346
568
|
this.orientationToggleButton.title =
|
|
347
569
|
this.currentOrientation === "vertical" ? "Switch to horizontal layout" : "Switch to vertical layout";
|
|
348
570
|
}
|
|
@@ -465,7 +687,7 @@ WHERE {
|
|
|
465
687
|
if (!this.endpointOverflowButton) {
|
|
466
688
|
this.endpointOverflowButton = document.createElement("button");
|
|
467
689
|
addClass(this.endpointOverflowButton, "endpointOverflowBtn");
|
|
468
|
-
this.endpointOverflowButton.innerHTML =
|
|
690
|
+
this.endpointOverflowButton.innerHTML = '<i class="fas fa-ellipsis-vertical"></i>';
|
|
469
691
|
this.endpointOverflowButton.title = "More endpoints";
|
|
470
692
|
this.endpointOverflowButton.setAttribute("aria-label", "More endpoint options");
|
|
471
693
|
this.endpointOverflowButton.setAttribute("aria-haspopup", "true");
|
|
@@ -615,6 +837,95 @@ WHERE {
|
|
|
615
837
|
this.emit("change", this, this.persistentJson);
|
|
616
838
|
return this;
|
|
617
839
|
}
|
|
840
|
+
suggestManagedFilenameFromName(name) {
|
|
841
|
+
const trimmed = name.trim();
|
|
842
|
+
const safe = trimmed.replace(/[\\/]/g, "-");
|
|
843
|
+
return normalizeQueryFilename(safe);
|
|
844
|
+
}
|
|
845
|
+
renameTab(newName) {
|
|
846
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
847
|
+
var _a;
|
|
848
|
+
const nextName = newName.trim();
|
|
849
|
+
if (!nextName)
|
|
850
|
+
return;
|
|
851
|
+
if (nextName === this.name())
|
|
852
|
+
return;
|
|
853
|
+
const meta = this.getManagedQueryMetadata();
|
|
854
|
+
if (!meta) {
|
|
855
|
+
this.setName(nextName);
|
|
856
|
+
return;
|
|
857
|
+
}
|
|
858
|
+
const workspace = this.yasgui.persistentConfig.getWorkspace(meta.workspaceId);
|
|
859
|
+
if (!workspace) {
|
|
860
|
+
window.alert("Selected workspace no longer exists");
|
|
861
|
+
return;
|
|
862
|
+
}
|
|
863
|
+
const backend = getWorkspaceBackend(workspace, { persistentConfig: this.yasgui.persistentConfig });
|
|
864
|
+
if (meta.backendType === "sparql") {
|
|
865
|
+
const queryId = this.getManagedQueryIdFromMetadata(meta);
|
|
866
|
+
if (!queryId)
|
|
867
|
+
return;
|
|
868
|
+
if (!backend.renameQuery) {
|
|
869
|
+
window.alert("This workspace does not support renaming queries");
|
|
870
|
+
return;
|
|
871
|
+
}
|
|
872
|
+
try {
|
|
873
|
+
this.getTabListEl().setAsRenaming(true);
|
|
874
|
+
yield backend.renameQuery(queryId, nextName);
|
|
875
|
+
this.setName(nextName);
|
|
876
|
+
this.yasgui.queryBrowser.invalidateAndRefresh(meta.workspaceId);
|
|
877
|
+
}
|
|
878
|
+
catch (e) {
|
|
879
|
+
const err = asWorkspaceBackendError(e);
|
|
880
|
+
window.alert(err.message);
|
|
881
|
+
}
|
|
882
|
+
finally {
|
|
883
|
+
this.getTabListEl().setAsRenaming(false);
|
|
884
|
+
}
|
|
885
|
+
return;
|
|
886
|
+
}
|
|
887
|
+
const oldPath = (_a = meta.queryRef) === null || _a === void 0 ? void 0 : _a.path;
|
|
888
|
+
if (!oldPath) {
|
|
889
|
+
this.setName(nextName);
|
|
890
|
+
return;
|
|
891
|
+
}
|
|
892
|
+
const parts = oldPath.split("/").filter(Boolean);
|
|
893
|
+
const oldFilename = parts.pop() || oldPath;
|
|
894
|
+
const folderPrefix = parts.join("/");
|
|
895
|
+
const newFilename = this.suggestManagedFilenameFromName(nextName);
|
|
896
|
+
const newPath = folderPrefix ? `${folderPrefix}/${newFilename}` : newFilename;
|
|
897
|
+
if (newPath === oldPath) {
|
|
898
|
+
this.setName(nextName);
|
|
899
|
+
return;
|
|
900
|
+
}
|
|
901
|
+
try {
|
|
902
|
+
this.getTabListEl().setAsRenaming(true);
|
|
903
|
+
yield backend.writeQuery(newPath, this.getQueryTextForSave(), {
|
|
904
|
+
message: `Rename ${oldFilename} to ${newFilename}`,
|
|
905
|
+
});
|
|
906
|
+
if (!backend.deleteQuery) {
|
|
907
|
+
window.alert("This workspace does not support deleting queries, so the old file could not be removed.");
|
|
908
|
+
}
|
|
909
|
+
else {
|
|
910
|
+
yield backend.deleteQuery(oldPath);
|
|
911
|
+
}
|
|
912
|
+
const read = yield backend.readQuery(newPath);
|
|
913
|
+
const lastSavedTextHash = hashQueryText(read.queryText);
|
|
914
|
+
const lastSavedVersionRef = this.versionRefFromVersionTag("git", read.versionTag);
|
|
915
|
+
this.setManagedQueryMetadata(Object.assign(Object.assign({}, meta), { queryRef: Object.assign(Object.assign({}, meta.queryRef), { path: newPath }), lastSavedTextHash,
|
|
916
|
+
lastSavedVersionRef }));
|
|
917
|
+
this.setName(nextName);
|
|
918
|
+
this.yasgui.queryBrowser.invalidateAndRefresh(meta.workspaceId);
|
|
919
|
+
}
|
|
920
|
+
catch (e) {
|
|
921
|
+
const err = asWorkspaceBackendError(e);
|
|
922
|
+
window.alert(err.message);
|
|
923
|
+
}
|
|
924
|
+
finally {
|
|
925
|
+
this.getTabListEl().setAsRenaming(false);
|
|
926
|
+
}
|
|
927
|
+
});
|
|
928
|
+
}
|
|
618
929
|
hasResults() {
|
|
619
930
|
var _a;
|
|
620
931
|
return !!((_a = this.yasr) === null || _a === void 0 ? void 0 : _a.results);
|
|
@@ -737,7 +1048,8 @@ WHERE {
|
|
|
737
1048
|
}
|
|
738
1049
|
initYasqe() {
|
|
739
1050
|
const currentTheme = this.yasgui.getTheme();
|
|
740
|
-
const
|
|
1051
|
+
const storedCmTheme = this.yasgui.persistentConfig.getCodeMirrorTheme(currentTheme);
|
|
1052
|
+
const cmTheme = storedCmTheme || (currentTheme === "dark" ? "github-dark" : "default");
|
|
741
1053
|
const yasqeConf = Object.assign(Object.assign({}, this.yasgui.config.yasqe), { theme: cmTheme, value: this.persistentJson.yasqe.value, editorHeight: this.persistentJson.yasqe.editorHeight ? this.persistentJson.yasqe.editorHeight : undefined, persistenceId: null, consumeShareLink: null, createShareableLink: () => this.getShareableLink(), showSnippetsBar: this.yasgui.config.showSnippetsBar !== false, requestConfig: () => {
|
|
742
1054
|
const processedReqConfig = Object.assign(Object.assign({ acceptHeaderGraph: "text/turtle", acceptHeaderSelect: "application/sparql-results+json" }, mergeWith({}, this.persistentJson.requestConfig, this.getStaticRequestConfig(), function customizer(objValue, srcValue) {
|
|
743
1055
|
if (Array.isArray(objValue) || Array.isArray(srcValue)) {
|
|
@@ -761,6 +1073,16 @@ WHERE {
|
|
|
761
1073
|
}
|
|
762
1074
|
return processedReqConfig;
|
|
763
1075
|
} });
|
|
1076
|
+
const existingExtraKeys = yasqeConf.extraKeys;
|
|
1077
|
+
const mergedExtraKeys = existingExtraKeys && typeof existingExtraKeys === "object" ? Object.assign({}, existingExtraKeys) : {};
|
|
1078
|
+
mergedExtraKeys["Ctrl-S"] = () => {
|
|
1079
|
+
const saveModalOpen = !!document.querySelector(".saveManagedQueryModalOverlay.open");
|
|
1080
|
+
if (saveModalOpen)
|
|
1081
|
+
return;
|
|
1082
|
+
void this.saveManagedQueryOrSaveAsManagedQuery();
|
|
1083
|
+
};
|
|
1084
|
+
mergedExtraKeys["Cmd-S"] = mergedExtraKeys["Ctrl-S"];
|
|
1085
|
+
yasqeConf.extraKeys = mergedExtraKeys;
|
|
764
1086
|
if (!yasqeConf.hintConfig) {
|
|
765
1087
|
yasqeConf.hintConfig = {};
|
|
766
1088
|
}
|
|
@@ -771,6 +1093,10 @@ WHERE {
|
|
|
771
1093
|
throw new Error("Expected a wrapper element before instantiating yasqe");
|
|
772
1094
|
}
|
|
773
1095
|
this.yasqe = new Yasqe(this.yasqeWrapperEl, yasqeConf);
|
|
1096
|
+
this.yasqe.on("saveManagedQuery", () => {
|
|
1097
|
+
void this.saveManagedQueryOrSaveAsManagedQuery();
|
|
1098
|
+
});
|
|
1099
|
+
this.updateSaveButtonVisibility();
|
|
774
1100
|
this.yasqe.on("blur", this.handleYasqeBlur);
|
|
775
1101
|
this.yasqe.on("query", this.handleYasqeQuery);
|
|
776
1102
|
this.yasqe.on("queryBefore", this.handleYasqeQueryBefore);
|
|
@@ -781,6 +1107,38 @@ WHERE {
|
|
|
781
1107
|
this.yasqe.on("queryResponse", this.handleQueryResponse);
|
|
782
1108
|
this.attachYasqeMouseHandler();
|
|
783
1109
|
}
|
|
1110
|
+
updateSaveButtonVisibility() {
|
|
1111
|
+
if (!this.yasqe)
|
|
1112
|
+
return;
|
|
1113
|
+
const workspaces = this.yasgui.persistentConfig.getWorkspaces();
|
|
1114
|
+
const hasWorkspaces = workspaces && workspaces.length > 0;
|
|
1115
|
+
this.yasqe.setSaveButtonVisible(hasWorkspaces);
|
|
1116
|
+
}
|
|
1117
|
+
initSaveManagedQueryIcon() {
|
|
1118
|
+
if (!this.yasqe)
|
|
1119
|
+
return;
|
|
1120
|
+
const wrapper = this.yasqe.getWrapperElement();
|
|
1121
|
+
const buttons = wrapper === null || wrapper === void 0 ? void 0 : wrapper.querySelector(".yasqe_buttons");
|
|
1122
|
+
if (!buttons)
|
|
1123
|
+
return;
|
|
1124
|
+
if (buttons.querySelector(".yasqe_saveManagedQueryButton"))
|
|
1125
|
+
return;
|
|
1126
|
+
const queryBtn = buttons.querySelector(".yasqe_queryButton");
|
|
1127
|
+
if (!queryBtn)
|
|
1128
|
+
return;
|
|
1129
|
+
const saveBtn = document.createElement("button");
|
|
1130
|
+
saveBtn.type = "button";
|
|
1131
|
+
saveBtn.className = "yasqe_saveManagedQueryButton";
|
|
1132
|
+
saveBtn.title = "Save managed query";
|
|
1133
|
+
saveBtn.setAttribute("aria-label", "Save managed query");
|
|
1134
|
+
saveBtn.innerHTML = '<i class="fas fa-save" aria-hidden="true"></i>';
|
|
1135
|
+
saveBtn.addEventListener("click", (e) => {
|
|
1136
|
+
e.preventDefault();
|
|
1137
|
+
e.stopPropagation();
|
|
1138
|
+
void this.saveManagedQueryOrSaveAsManagedQuery();
|
|
1139
|
+
});
|
|
1140
|
+
buttons.insertBefore(saveBtn, queryBtn);
|
|
1141
|
+
}
|
|
784
1142
|
destroyYasqe() {
|
|
785
1143
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
786
1144
|
(_a = this.yasqe) === null || _a === void 0 ? void 0 : _a.off("blur", this.handleYasqeBlur);
|