mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-06-25 07:33:57 +00:00
@@ -1,4 +1,4 @@
|
||||
import { App, PluginSettingTab } from "@/deps.ts";
|
||||
import { App, Component, PluginSettingTab } from "@/deps.ts";
|
||||
import {
|
||||
type ObsidianLiveSyncSettings,
|
||||
type RemoteDBSettings,
|
||||
@@ -40,12 +40,13 @@ import { JournalSyncMinio } from "@lib/replication/journal/objectstore/JournalSy
|
||||
import { paneChangeLog } from "./PaneChangeLog.ts";
|
||||
import {
|
||||
enableOnly,
|
||||
findAttrFromParent,
|
||||
getLevelStr,
|
||||
// findAttrFromParent,
|
||||
// getLevelStr,
|
||||
setLevelClass,
|
||||
setStyle,
|
||||
visibleOnly,
|
||||
type OnSavedHandler,
|
||||
type OnSavedHandlerFunc,
|
||||
type OnUpdateFunc,
|
||||
type OnUpdateResult,
|
||||
type PageFunctions,
|
||||
@@ -65,28 +66,14 @@ import { paneMaintenance } from "./PaneMaintenance.ts";
|
||||
import { compatGlobal } from "@lib/common/coreEnvFunctions.ts";
|
||||
|
||||
// For creating a document
|
||||
const toc = new Set<string>();
|
||||
const stubs = {} as {
|
||||
[key: string]: { [key: string]: Map<string, Record<string, string>> };
|
||||
};
|
||||
export function createStub(name: string, key: string, value: string, panel: string, pane: string) {
|
||||
DEV: {
|
||||
if (!(pane in stubs)) {
|
||||
stubs[pane] = {};
|
||||
}
|
||||
if (!(panel in stubs[pane])) {
|
||||
stubs[pane][panel] = new Map<string, Record<string, string>>();
|
||||
}
|
||||
const old = stubs[pane][panel].get(name) ?? {};
|
||||
stubs[pane][panel].set(name, { ...old, [key]: value });
|
||||
scheduleTask("update-stub", 100, () => {
|
||||
eventHub.emitEvent("document-stub-created", { toc: toc, stub: stubs });
|
||||
});
|
||||
}
|
||||
}
|
||||
// const toc = new Set<string>();
|
||||
|
||||
export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
plugin: ObsidianLiveSyncPlugin;
|
||||
private _lifetimeComponent: Component = new Component();
|
||||
get lifetimeComponent(): Component {
|
||||
return this._lifetimeComponent;
|
||||
}
|
||||
get core() {
|
||||
return this.plugin.core;
|
||||
}
|
||||
@@ -181,7 +168,7 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
// if (runOnSaved) {
|
||||
const handlers = this.onSavedHandlers
|
||||
.filter((e) => appliedKeys.indexOf(e.key) !== -1)
|
||||
.map((e) => Promise.resolve(e.handler(this.editingSettings[e.key as AllSettingItemKey])));
|
||||
.map((e) => Promise.resolve(e.handler(this.editingSettings[e.key])));
|
||||
await Promise.all(handlers);
|
||||
// }
|
||||
keys.forEach((e) => this.refreshSetting(e));
|
||||
@@ -287,7 +274,7 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
// UI Element Wrapper -->
|
||||
settingComponents = [] as Setting[];
|
||||
controlledElementFunc = [] as UpdateFunction[];
|
||||
onSavedHandlers = [] as OnSavedHandler<any>[];
|
||||
onSavedHandlers = [] as OnSavedHandler<AllSettingItemKey>[];
|
||||
|
||||
inWizard: boolean = false;
|
||||
|
||||
@@ -370,8 +357,9 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
return Promise.resolve(elm);
|
||||
}
|
||||
|
||||
addOnSaved<T extends AllSettingItemKey>(key: T, func: (value: AllSettings[T]) => Promise<void> | void) {
|
||||
this.onSavedHandlers.push({ key, handler: func });
|
||||
addOnSaved<T extends AllSettingItemKey>(key: T, func: OnSavedHandlerFunc<T>) {
|
||||
const newHandler = { key, handler: func } as OnSavedHandler<AllSettingItemKey>;
|
||||
this.onSavedHandlers.push(newHandler);
|
||||
}
|
||||
resetEditingSettings() {
|
||||
this._editingSettings = undefined;
|
||||
@@ -379,6 +367,8 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
}
|
||||
|
||||
override hide() {
|
||||
super.hide();
|
||||
this._lifetimeComponent.unload();
|
||||
this.isShown = false;
|
||||
}
|
||||
isShown: boolean = false;
|
||||
@@ -663,8 +653,10 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
}
|
||||
}
|
||||
|
||||
display(): void {
|
||||
override display(): void {
|
||||
const changeDisplay = this.changeDisplay.bind(this);
|
||||
// Make sure lifetime component is loaded for markdown rendering in panes.
|
||||
this._lifetimeComponent.load();
|
||||
const { containerEl } = this;
|
||||
this.settingComponents.length = 0;
|
||||
this.controlledElementFunc.length = 0;
|
||||
@@ -718,7 +710,7 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
visibleOnly(() => this.isNeedRebuildLocal() || this.isNeedRebuildRemote())
|
||||
);
|
||||
|
||||
let paneNo = 0;
|
||||
// let paneNo = 0;
|
||||
const addPane = (
|
||||
parentEl: HTMLElement,
|
||||
title: string,
|
||||
@@ -728,20 +720,9 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
level?: ConfigLevel
|
||||
) => {
|
||||
const el = this.createEl(parentEl, "div", { text: "" });
|
||||
DEV: {
|
||||
const mdTitle = `${paneNo++}. ${title}${getLevelStr(level ?? "")}`;
|
||||
el.setAttribute("data-pane", mdTitle);
|
||||
toc.add(
|
||||
`| ${icon} | [${mdTitle}](#${mdTitle
|
||||
.toLowerCase()
|
||||
.replace(/ /g, "-")
|
||||
.replace(/[^\w\s-]/g, "")}) | `
|
||||
);
|
||||
}
|
||||
|
||||
setLevelClass(el, level);
|
||||
// TODO: Refactor to use Obsidian's recommended way to create heading.
|
||||
// eslint-disable-next-line obsidianmd/settings-tab/no-manual-html-headings
|
||||
el.createEl("h3", { text: title, cls: "sls-setting-pane-title" });
|
||||
new Setting(el).setName(title).setHeading().setClass("sls-setting-pane-title");
|
||||
if (this.menuEl) {
|
||||
this.menuEl.createEl(
|
||||
"label",
|
||||
@@ -772,7 +753,7 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
// });
|
||||
return p;
|
||||
};
|
||||
const panelNoMap = {} as { [key: string]: number };
|
||||
// const panelNoMap = {} as { [key: string]: number };
|
||||
const addPanel = (
|
||||
parentEl: HTMLElement,
|
||||
title: string,
|
||||
@@ -781,15 +762,6 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
level?: ConfigLevel
|
||||
) => {
|
||||
const el = this.createEl(parentEl, "div", { text: "" }, callback, func);
|
||||
DEV: {
|
||||
const paneNo = findAttrFromParent(parentEl, "data-pane");
|
||||
if (!(paneNo in panelNoMap)) {
|
||||
panelNoMap[paneNo] = 0;
|
||||
}
|
||||
panelNoMap[paneNo] += 1;
|
||||
const panelNo = panelNoMap[paneNo];
|
||||
el.setAttribute("data-panel", `${panelNo}. ${title}${getLevelStr(level ?? "")}`);
|
||||
}
|
||||
setLevelClass(el, level);
|
||||
this.createEl(el, "h4", { text: title, cls: "sls-setting-panel-title" });
|
||||
const p = Promise.resolve(el);
|
||||
@@ -823,6 +795,9 @@ export class ObsidianLiveSyncSettingTab extends PluginSettingTab {
|
||||
return callback;
|
||||
};
|
||||
|
||||
// Add panes
|
||||
|
||||
// TODO: Refactor to new API style.
|
||||
void addPane(containerEl, $msg("obsidianLiveSyncSettingTab.panelChangeLog"), "💬", 100, false).then(
|
||||
bindPane(paneChangeLog)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user