2023-06-29 11:55:02 +08:00
|
|
|
/*
|
2024-04-15 11:54:03 +08:00
|
|
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
|
|
if you want to view the source, please visit the github repository of this plugin
|
2023-06-29 11:55:02 +08:00
|
|
|
*/
|
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
"use strict";
|
|
|
|
var __defProp = Object.defineProperty;
|
|
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
|
|
var __export = (target, all) => {
|
|
|
|
for (var name in all)
|
|
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
|
|
};
|
|
|
|
var __copyProps = (to, from, except, desc) => {
|
|
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
|
|
for (let key of __getOwnPropNames(from))
|
|
|
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
|
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
|
|
}
|
|
|
|
return to;
|
|
|
|
};
|
|
|
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// main.ts
|
|
|
|
var main_exports = {};
|
|
|
|
__export(main_exports, {
|
|
|
|
default: () => main_default
|
|
|
|
});
|
|
|
|
module.exports = __toCommonJS(main_exports);
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/plugin.ts
|
|
|
|
var import_obsidian2 = require("obsidian");
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/constants.ts
|
|
|
|
var DEFAULT_SETTINGS = {
|
|
|
|
commands: {
|
|
|
|
Global: false,
|
|
|
|
FileExplorer: true,
|
|
|
|
TagPane: true,
|
|
|
|
Search: false,
|
|
|
|
Bookmarks: false
|
|
|
|
}
|
|
|
|
};
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/provider/base.ts
|
|
|
|
var ProviderBase = class {
|
|
|
|
constructor(plugin) {
|
|
|
|
this.plugin = plugin;
|
|
|
|
this.registered = false;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Collapse command config
|
|
|
|
*/
|
|
|
|
get collapseCommand() {
|
|
|
|
return {
|
|
|
|
id: `collapse-${this.leafType}`,
|
|
|
|
name: this.collapseCommandName,
|
|
|
|
icon: "double-up-arrow-glyph",
|
|
|
|
callback: () => {
|
|
|
|
this.collapseAll();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Expand command config
|
|
|
|
*/
|
|
|
|
get expandCommand() {
|
|
|
|
return {
|
|
|
|
id: `expand-${this.leafType}`,
|
|
|
|
name: this.expandCommandName,
|
|
|
|
icon: "double-down-arrow-glyph",
|
|
|
|
callback: () => {
|
|
|
|
this.expandAll();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Toggle command config
|
|
|
|
*/
|
|
|
|
get toggleCommand() {
|
|
|
|
return {
|
|
|
|
id: `toggle-${this.leafType}`,
|
|
|
|
name: this.toggleCommandName,
|
|
|
|
icon: "double-down-arrow-glyph",
|
|
|
|
callback: () => {
|
|
|
|
this.toggleCollapse();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
get commands() {
|
|
|
|
return [this.collapseCommand, this.expandCommand, this.toggleCommand];
|
|
|
|
}
|
|
|
|
register() {
|
|
|
|
if (this.registered) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
for (const command of this.commands) {
|
|
|
|
this.plugin.addCommand(command);
|
|
|
|
}
|
|
|
|
this.registered = true;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Collapse or expand all items for the given leaf
|
|
|
|
* @argument collapsed if not provided, will toggle the state
|
|
|
|
*/
|
|
|
|
collapseOrExpandAll(leaf, collapsed) {
|
|
|
|
var _a, _b, _c;
|
|
|
|
if (collapsed === void 0) {
|
|
|
|
if (!((_a = leaf.view.tree) == null ? void 0 : _a.toggleCollapseAll)) {
|
|
|
|
console.error(
|
|
|
|
`No toggle collapse function found on ${this.leafType} view.`
|
|
|
|
);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
(_b = leaf.view.tree) == null ? void 0 : _b.toggleCollapseAll();
|
|
|
|
} else {
|
|
|
|
if (!((_c = leaf.view.tree) == null ? void 0 : _c.setCollapseAll)) {
|
|
|
|
console.error(`No collapse function found on ${this.leafType} view.`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
leaf.view.tree.setCollapseAll(collapsed);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Returns true if every item in the given leaf is collapsed
|
|
|
|
*/
|
|
|
|
allCollapsed(singleLeaf = null) {
|
|
|
|
var _a;
|
|
|
|
const leaves = singleLeaf ? [singleLeaf] : this.leaves;
|
|
|
|
let collapsed = true;
|
|
|
|
for (const leaf of leaves) {
|
|
|
|
if (((_a = leaf.view.tree) == null ? void 0 : _a.isAllCollapsed) === void 0) {
|
|
|
|
console.error("No collapsed state found on view.");
|
|
|
|
collapsed = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return collapsed;
|
|
|
|
}
|
|
|
|
toggleCollapse(singleLeaf = null) {
|
|
|
|
const leaves = singleLeaf ? [singleLeaf] : this.leaves;
|
|
|
|
for (const leaf of leaves) {
|
|
|
|
this.collapseOrExpandAll(leaf);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Collapse all open items in the given leaf or all leaves
|
|
|
|
*/
|
|
|
|
collapseAll(singleLeaf = null) {
|
|
|
|
const leaves = singleLeaf ? [singleLeaf] : this.leaves;
|
|
|
|
for (const leaf of leaves) {
|
|
|
|
this.collapseOrExpandAll(leaf, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Expand all collapsed items in the given leaf or all leaves
|
|
|
|
*/
|
|
|
|
expandAll(singleLeaf = null) {
|
|
|
|
const leaves = singleLeaf ? [singleLeaf] : this.leaves;
|
|
|
|
for (const leaf of leaves) {
|
|
|
|
this.collapseOrExpandAll(leaf, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Returns all loaded leaves of the class leafType
|
|
|
|
*/
|
|
|
|
get leaves() {
|
|
|
|
return this.plugin.app.workspace.getLeavesOfType(this.leafType);
|
|
|
|
}
|
|
|
|
};
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/provider/file-explorer.ts
|
|
|
|
var FileExplorerProvider = class extends ProviderBase {
|
|
|
|
constructor() {
|
|
|
|
super(...arguments);
|
|
|
|
this.providerType = "FileExplorer" /* FileExplorer */;
|
|
|
|
this.displayName = "File explorer";
|
|
|
|
this.leafType = "file-explorer";
|
|
|
|
this.collapseCommandName = "Collapse open folders in all file explorers";
|
|
|
|
this.expandCommandName = "Expand closed folders in all file explorers";
|
|
|
|
this.toggleCommandName = "Toggle collapse in all file explorers";
|
|
|
|
}
|
|
|
|
};
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/provider/tag-pane.ts
|
|
|
|
var TagPaneProvider = class extends ProviderBase {
|
|
|
|
constructor() {
|
|
|
|
super(...arguments);
|
|
|
|
this.providerType = "TagPane" /* TagPane */;
|
|
|
|
this.displayName = "Tag pane";
|
|
|
|
this.leafType = "tag";
|
|
|
|
this.collapseCommandName = "Not available";
|
|
|
|
this.expandCommandName = "Not available";
|
|
|
|
this.toggleCommandName = "Toggle collapse in all tag explorers";
|
|
|
|
}
|
|
|
|
get commands() {
|
|
|
|
return [this.toggleCommand];
|
|
|
|
}
|
|
|
|
toggleCollapse(singleLeaf) {
|
|
|
|
const leaves = singleLeaf ? [singleLeaf] : this.leaves;
|
|
|
|
for (const leaf of leaves) {
|
|
|
|
if (!leaf.view.collapseOrExpandAllEl) {
|
|
|
|
console.error(`No collapse element found on ${this.leafType} view.`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
leaf.view.collapseOrExpandAllEl.click();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
collapseAll(_) {
|
|
|
|
}
|
|
|
|
expandAll(_) {
|
|
|
|
}
|
2023-06-29 11:55:02 +08:00
|
|
|
};
|
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/provider/global.ts
|
|
|
|
var GlobalProvider = class extends ProviderBase {
|
|
|
|
constructor() {
|
|
|
|
super(...arguments);
|
|
|
|
this.providerType = "Global" /* Global */;
|
|
|
|
this.displayName = "All supported explorers (global)";
|
|
|
|
this.leafType = "";
|
|
|
|
this.toggleCommandName = "Toggle collapse state in all supported explorers";
|
|
|
|
this.collapseCommandName = "Collapse open items in all supported explorers";
|
|
|
|
this.expandCommandName = "Expand closed items in all supported explorers";
|
|
|
|
}
|
|
|
|
get providers() {
|
|
|
|
return this.plugin.allProviders.filter(
|
|
|
|
(p) => p.providerType !== "Global" /* Global */
|
|
|
|
);
|
|
|
|
}
|
|
|
|
allCollapsed() {
|
|
|
|
return this.providers.every((p) => p.allCollapsed());
|
|
|
|
}
|
|
|
|
toggleCollapse(_ = null) {
|
|
|
|
for (const provider of this.providers) {
|
|
|
|
provider.toggleCollapse();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
collapseAll(_ = null) {
|
|
|
|
for (const provider of this.providers) {
|
|
|
|
provider.collapseAll();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
expandAll(_ = null) {
|
|
|
|
for (const provider of this.providers) {
|
|
|
|
provider.expandAll();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/provider/search.ts
|
|
|
|
var SearchProvider = class extends ProviderBase {
|
|
|
|
constructor() {
|
|
|
|
super(...arguments);
|
|
|
|
this.providerType = "Search" /* Search */;
|
|
|
|
this.displayName = "Search";
|
|
|
|
this.leafType = "search";
|
|
|
|
this.collapseCommandName = "Collapse all in search views";
|
|
|
|
this.expandCommandName = "Expand all in search views";
|
|
|
|
this.toggleCommandName = "Not available";
|
|
|
|
}
|
|
|
|
get commands() {
|
|
|
|
return [this.collapseCommand, this.expandCommand];
|
|
|
|
}
|
|
|
|
toggleCollapse() {
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Collapse or expand all items for the given leaf
|
|
|
|
* @argument collapsed if not provided, will toggle the state
|
|
|
|
*/
|
|
|
|
collapseOrExpandAll(leaf, collapsed) {
|
|
|
|
if (collapsed === void 0) {
|
|
|
|
} else {
|
|
|
|
if (!leaf.view.setCollapseAll) {
|
|
|
|
console.error(`No collapse function found on ${this.leafType} view.`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
leaf.view.setCollapseAll(collapsed);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/provider/bookmarks.ts
|
|
|
|
var BookmarksProvider = class extends ProviderBase {
|
|
|
|
constructor() {
|
|
|
|
super(...arguments);
|
|
|
|
this.providerType = "Bookmarks" /* Bookmarks */;
|
|
|
|
this.displayName = "Bookmarks";
|
|
|
|
this.leafType = "bookmarks";
|
|
|
|
this.toggleCommandName = "Toggle collapse in bookmarks view";
|
|
|
|
this.collapseCommandName = "Collapse all in bookmarks view";
|
|
|
|
this.expandCommandName = "Expand all in bookmarks view";
|
|
|
|
}
|
|
|
|
};
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/settings.ts
|
|
|
|
var import_obsidian = require("obsidian");
|
|
|
|
var CollapseAllPluginSettings = class extends import_obsidian.PluginSettingTab {
|
|
|
|
constructor(app, plugin) {
|
|
|
|
super(app, plugin);
|
|
|
|
this.plugin = plugin;
|
|
|
|
}
|
|
|
|
display() {
|
|
|
|
this.containerEl.empty();
|
|
|
|
this.containerEl.createEl("h3", { text: "Command settings" });
|
|
|
|
this.containerEl.createEl("p", {
|
|
|
|
text: "Each toggle controls whether commands should be added to collapse and expand that view, or global which operates on all available views."
|
|
|
|
});
|
|
|
|
this.plugin.allProviders.forEach((provider) => {
|
|
|
|
new import_obsidian.Setting(this.containerEl).setName(provider.displayName).addToggle((toggle) => {
|
|
|
|
toggle.setTooltip(provider.displayName).setValue(this.plugin.settings.commands[provider.providerType]).onChange(async (value) => {
|
|
|
|
this.plugin.settings.commands[provider.providerType] = value;
|
|
|
|
if (value === true) {
|
|
|
|
provider.register();
|
|
|
|
}
|
|
|
|
await this.plugin.saveSettings();
|
2023-06-29 11:55:02 +08:00
|
|
|
});
|
2024-04-15 11:54:03 +08:00
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// src/plugin.ts
|
|
|
|
var CollapseAllPlugin = class extends import_obsidian2.Plugin {
|
|
|
|
constructor() {
|
|
|
|
super(...arguments);
|
|
|
|
this.settings = DEFAULT_SETTINGS;
|
|
|
|
this.providers = {
|
|
|
|
["Global" /* Global */]: new GlobalProvider(this),
|
|
|
|
["FileExplorer" /* FileExplorer */]: new FileExplorerProvider(this),
|
|
|
|
["TagPane" /* TagPane */]: new TagPaneProvider(this),
|
|
|
|
["Search" /* Search */]: new SearchProvider(this),
|
|
|
|
["Bookmarks" /* Bookmarks */]: new BookmarksProvider(this)
|
|
|
|
};
|
|
|
|
}
|
|
|
|
get allProviders() {
|
|
|
|
return Object.values(this.providers);
|
|
|
|
}
|
|
|
|
async onload() {
|
|
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
|
|
|
|
this.allProviders.forEach((provider) => {
|
|
|
|
if (this.settings.commands[provider.providerType]) {
|
|
|
|
provider.register();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.addSettingTab(new CollapseAllPluginSettings(this.app, this));
|
|
|
|
}
|
|
|
|
saveSettings() {
|
|
|
|
return this.saveData(this.settings);
|
|
|
|
}
|
|
|
|
};
|
2023-06-29 11:55:02 +08:00
|
|
|
|
2024-04-15 11:54:03 +08:00
|
|
|
// main.ts
|
|
|
|
var main_default = CollapseAllPlugin;
|