236 lines
7.3 KiB
JavaScript
236 lines
7.3 KiB
JavaScript
/*
|
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
if you want to view the source, please visit the github repository of this plugin
|
|
*/
|
|
|
|
var __create = Object.create;
|
|
var __defProp = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __getProtoOf = Object.getPrototypeOf;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
var __export = (target, all) => {
|
|
__markAsModule(target);
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __reExport = (target, module2, desc) => {
|
|
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
for (let key of __getOwnPropNames(module2))
|
|
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
|
}
|
|
return target;
|
|
};
|
|
var __toModule = (module2) => {
|
|
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
|
};
|
|
var __async = (__this, __arguments, generator) => {
|
|
return new Promise((resolve, reject) => {
|
|
var fulfilled = (value) => {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
};
|
|
var rejected = (value) => {
|
|
try {
|
|
step(generator.throw(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
};
|
|
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
});
|
|
};
|
|
|
|
// main.ts
|
|
__export(exports, {
|
|
default: () => PersistentGraphPlugin
|
|
});
|
|
var import_obsidian = __toModule(require("obsidian"));
|
|
var DEFAULT_SETTINGS = {
|
|
nodePositions: [],
|
|
automaticallyRestoreNodePositions: false
|
|
};
|
|
var PersistentGraphPlugin = class extends import_obsidian.Plugin {
|
|
findGraphLeaf() {
|
|
let activeLeaf = this.app.workspace.activeLeaf;
|
|
if (activeLeaf.view.getViewType() === "graph") {
|
|
return activeLeaf;
|
|
}
|
|
let graphLeaves = this.app.workspace.getLeavesOfType("graph");
|
|
if (graphLeaves.length != 1) {
|
|
if (graphLeaves.length < 1) {
|
|
new import_obsidian.Notice("No graph view open");
|
|
} else {
|
|
new import_obsidian.Notice("More than one graph view open, please choose an active one");
|
|
}
|
|
return;
|
|
}
|
|
return graphLeaves[0];
|
|
}
|
|
saveNodePositions() {
|
|
let graphLeaf = this.findGraphLeaf();
|
|
if (!graphLeaf)
|
|
return;
|
|
return graphLeaf.view.renderer.nodes.map((node) => {
|
|
return {
|
|
id: node.id,
|
|
x: node.x,
|
|
y: node.y
|
|
};
|
|
});
|
|
}
|
|
restoreNodePositions(nodePositions, graphLeaf) {
|
|
if (graphLeaf === void 0) {
|
|
graphLeaf = this.findGraphLeaf();
|
|
}
|
|
if (!graphLeaf)
|
|
return;
|
|
nodePositions.forEach((node) => {
|
|
graphLeaf.view.renderer.worker.postMessage({
|
|
forceNode: node
|
|
});
|
|
});
|
|
graphLeaf.view.renderer.worker.postMessage({
|
|
run: true,
|
|
alpha: 0.1
|
|
});
|
|
setTimeout(() => {
|
|
nodePositions.forEach((node) => {
|
|
if (!graphLeaf)
|
|
return;
|
|
graphLeaf.view.renderer.worker.postMessage({
|
|
forceNode: {
|
|
id: node.id,
|
|
x: null,
|
|
y: null
|
|
}
|
|
});
|
|
});
|
|
}, 1e3);
|
|
}
|
|
runGraphSimlation() {
|
|
let graphLeaf = this.findGraphLeaf();
|
|
if (!graphLeaf)
|
|
return;
|
|
graphLeaf.view.renderer.worker.postMessage({
|
|
run: true,
|
|
alpha: 1,
|
|
alphaTarget: 1
|
|
});
|
|
}
|
|
stopGraphSimulation() {
|
|
let graphLeaf = this.findGraphLeaf();
|
|
if (!graphLeaf)
|
|
return;
|
|
graphLeaf.view.renderer.worker.postMessage({
|
|
run: true,
|
|
alpha: 0,
|
|
alphaTarget: 0
|
|
});
|
|
}
|
|
onLayoutChange() {
|
|
const activeLeaf = this.app.workspace.activeLeaf;
|
|
if (activeLeaf.view.getViewType() != "graph" || activeLeaf.view.renderer.autoRestored) {
|
|
return;
|
|
}
|
|
activeLeaf.view.renderer.autoRestored = true;
|
|
setTimeout(() => {
|
|
this.restoreOnceNodeCountStable(activeLeaf, 0, 0, 0);
|
|
}, 1e3);
|
|
}
|
|
restoreOnceNodeCountStable(leaf, nodeCount, iterations, totalIterations) {
|
|
if (!leaf || !leaf.view || !leaf.view.renderer) {
|
|
return;
|
|
}
|
|
if (totalIterations > 20) {
|
|
return;
|
|
}
|
|
if (this.settings.automaticallyRestoreNodePositions) {
|
|
const currentNodeCount = leaf.view.renderer.nodes.length;
|
|
if (currentNodeCount === nodeCount) {
|
|
if (iterations >= 3) {
|
|
this.restoreNodePositions(this.settings.nodePositions, leaf);
|
|
new import_obsidian.Notice("Automatically restored node positions");
|
|
} else {
|
|
setTimeout(() => {
|
|
this.restoreOnceNodeCountStable(leaf, currentNodeCount, iterations + 1, totalIterations + 1);
|
|
}, 200);
|
|
}
|
|
} else {
|
|
setTimeout(() => {
|
|
this.restoreOnceNodeCountStable(leaf, currentNodeCount, 0, totalIterations + 1);
|
|
}, 200);
|
|
}
|
|
}
|
|
}
|
|
onload() {
|
|
return __async(this, null, function* () {
|
|
yield this.loadSettings();
|
|
this.addCommand({
|
|
id: "save-node-positions",
|
|
name: "Save graph node positions",
|
|
callback: () => __async(this, null, function* () {
|
|
this.settings.nodePositions = this.saveNodePositions();
|
|
yield this.saveSettings();
|
|
})
|
|
});
|
|
this.addCommand({
|
|
id: "restore-node-positions",
|
|
name: "Restore graph node positions",
|
|
callback: () => {
|
|
this.restoreNodePositions(this.settings.nodePositions);
|
|
}
|
|
});
|
|
this.addCommand({
|
|
id: "run-graph-simulation",
|
|
name: "Run graph simulation",
|
|
callback: () => {
|
|
this.runGraphSimlation();
|
|
}
|
|
});
|
|
this.addCommand({
|
|
id: "stop-graph-simulation",
|
|
name: "Stop graph simulation",
|
|
callback: () => {
|
|
this.stopGraphSimulation();
|
|
}
|
|
});
|
|
this.addSettingTab(new PersistentGraphSettingTab(this.app, this));
|
|
this.registerEvent(this.app.workspace.on("layout-change", this.onLayoutChange.bind(this)));
|
|
});
|
|
}
|
|
onunload() {
|
|
}
|
|
loadSettings() {
|
|
return __async(this, null, function* () {
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
|
});
|
|
}
|
|
saveSettings() {
|
|
return __async(this, null, function* () {
|
|
yield this.saveData(this.settings);
|
|
});
|
|
}
|
|
};
|
|
var PersistentGraphSettingTab = class extends import_obsidian.PluginSettingTab {
|
|
constructor(app, plugin) {
|
|
super(app, plugin);
|
|
this.plugin = plugin;
|
|
}
|
|
display() {
|
|
const { containerEl } = this;
|
|
containerEl.empty();
|
|
containerEl.createEl("h2", { text: "Settings for PersistentGraphPlugin" });
|
|
new import_obsidian.Setting(containerEl).setName("Automatically restore node positions").setDesc("Restore node positions every time a graph view is opened").addToggle((toggle) => toggle.setValue(this.plugin.settings.automaticallyRestoreNodePositions).onChange((value) => {
|
|
this.plugin.settings.automaticallyRestoreNodePositions = value;
|
|
this.plugin.saveSettings();
|
|
}));
|
|
}
|
|
};
|