summaryrefslogtreecommitdiff
path: root/SI/.obsidian/plugins/obsidian-advanced-new-file/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'SI/.obsidian/plugins/obsidian-advanced-new-file/main.js')
-rw-r--r--SI/.obsidian/plugins/obsidian-advanced-new-file/main.js337
1 files changed, 337 insertions, 0 deletions
diff --git a/SI/.obsidian/plugins/obsidian-advanced-new-file/main.js b/SI/.obsidian/plugins/obsidian-advanced-new-file/main.js
new file mode 100644
index 0000000..9efe6a6
--- /dev/null
+++ b/SI/.obsidian/plugins/obsidian-advanced-new-file/main.js
@@ -0,0 +1,337 @@
+/*
+THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
+Obsidian Advanced New File
+https://github.com/vanadium23/obsidian-advanced-new-file
+*/
+
+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());
+ });
+};
+
+// src/main.ts
+__export(exports, {
+ default: () => AdvancedNewFilePlugin
+});
+var import_obsidian4 = __toModule(require("obsidian"));
+
+// src/ChooseFolderModal.ts
+var import_obsidian3 = __toModule(require("obsidian"));
+
+// src/CreateNoteModal.ts
+var import_obsidian2 = __toModule(require("obsidian"));
+
+// src/enums.ts
+var NewFileLocation;
+(function(NewFileLocation2) {
+ NewFileLocation2["CurrentPane"] = "current-pane";
+ NewFileLocation2["NewPane"] = "new-pane";
+ NewFileLocation2["NewTab"] = "new-tab";
+})(NewFileLocation || (NewFileLocation = {}));
+
+// src/utils.ts
+var import_obsidian = __toModule(require("obsidian"));
+var path = {
+ parse(pathString) {
+ const regex = /(?<dir>([^/\\]+[/\\])*)(?<name>[^/\\]*$)/;
+ const match = String(pathString).match(regex);
+ const { dir, name } = match && match.groups;
+ return { dir, name: name || "Untitled" };
+ },
+ join(...strings) {
+ const parts = strings.map((s) => String(s).trim()).filter((s) => s != null);
+ return (0, import_obsidian.normalizePath)(parts.join("/"));
+ }
+};
+
+// src/CreateNoteModal.ts
+var CreateNoteModal = class extends import_obsidian2.Modal {
+ constructor(app, mode) {
+ super(app);
+ this.mode = mode;
+ this.inputEl = document.createElement("input");
+ this.inputEl.type = "text";
+ this.inputEl.placeholder = "Type filename for new note";
+ this.inputEl.className = "prompt-input";
+ const instructions2 = [
+ {
+ command: "\u21B5",
+ purpose: "to create note (default: Untitled)"
+ },
+ {
+ command: "esc",
+ purpose: "to dismiss creation"
+ }
+ ];
+ this.instructionsEl = document.createElement("div");
+ this.instructionsEl.addClass("prompt-instructions");
+ const children = instructions2.map((x) => {
+ const child = document.createElement("div");
+ child.addClass("prompt-instruction");
+ const command = document.createElement("span");
+ command.addClass("prompt-instruction-command");
+ command.innerText = x.command;
+ child.appendChild(command);
+ const purpose = document.createElement("span");
+ purpose.innerText = x.purpose;
+ child.appendChild(purpose);
+ return child;
+ });
+ for (const child of children) {
+ this.instructionsEl.appendChild(child);
+ }
+ this.modalEl.className = "prompt";
+ this.modalEl.innerHTML = "";
+ this.modalEl.appendChild(this.inputEl);
+ this.modalEl.appendChild(this.instructionsEl);
+ this.inputListener = this.listenInput.bind(this);
+ }
+ setFolder(folder, newDirectoryPath) {
+ this.folder = folder;
+ this.newDirectoryPath = newDirectoryPath;
+ }
+ listenInput(evt) {
+ if (evt.key === "Enter") {
+ evt.preventDefault();
+ this.createNewNote(this.inputEl.value);
+ this.close();
+ }
+ }
+ onOpen() {
+ this.inputEl.focus();
+ this.inputEl.addEventListener("keydown", this.inputListener);
+ }
+ onClose() {
+ this.inputEl.removeEventListener("keydown", this.inputListener);
+ }
+ createDirectory(dir) {
+ return __async(this, null, function* () {
+ const { vault } = this.app;
+ const { adapter } = vault;
+ const root = vault.getRoot().path;
+ const directoryPath = path.join(this.folder.path, dir);
+ const directoryExists = yield adapter.exists(directoryPath);
+ if (!import_obsidian2.Platform.isIosApp) {
+ if (!directoryExists) {
+ return adapter.mkdir((0, import_obsidian2.normalizePath)(directoryPath));
+ }
+ }
+ const subPaths = (0, import_obsidian2.normalizePath)(directoryPath).split("/").filter((part) => part.trim() !== "").map((_, index, arr) => arr.slice(0, index + 1).join("/"));
+ for (const subPath of subPaths) {
+ const directoryExists2 = yield adapter.exists(path.join(root, subPath));
+ if (!directoryExists2) {
+ yield adapter.mkdir(path.join(root, subPath));
+ }
+ }
+ });
+ }
+ createNewNote(input) {
+ return __async(this, null, function* () {
+ const { vault } = this.app;
+ const { adapter } = vault;
+ const prependDirInput = path.join(this.newDirectoryPath, input);
+ const { dir, name } = path.parse(prependDirInput);
+ const directoryPath = path.join(this.folder.path, dir);
+ const filePath = path.join(directoryPath, `${name}.md`);
+ try {
+ const fileExists = yield adapter.exists(filePath);
+ if (fileExists) {
+ throw new Error(`${filePath} already exists`);
+ }
+ if (dir !== "") {
+ yield this.createDirectory(dir);
+ }
+ const File = yield vault.create(filePath, "");
+ let leaf = this.app.workspace.getLeaf(false);
+ if (this.mode === NewFileLocation.NewPane) {
+ leaf = this.app.workspace.splitLeafOrActive();
+ } else if (this.mode === NewFileLocation.NewTab) {
+ leaf = this.app.workspace.getLeaf(true);
+ } else if (!leaf) {
+ leaf = this.app.workspace.getLeaf(true);
+ }
+ yield leaf.openFile(File);
+ } catch (error) {
+ new import_obsidian2.Notice(error.toString());
+ }
+ });
+ }
+};
+
+// src/ChooseFolderModal.ts
+var EMPTY_TEXT = "No folder found. Press esc to dismiss.";
+var PLACEHOLDER_TEXT = "Type folder name to fuzzy find.";
+var instructions = [
+ { command: "\u2191\u2193", purpose: "to navigate" },
+ { command: "Tab \u21B9", purpose: "to autocomplete folder" },
+ { command: "\u21B5", purpose: "to choose folder" },
+ { command: "esc", purpose: "to dismiss" }
+];
+var ChooseFolderModal = class extends import_obsidian3.FuzzySuggestModal {
+ constructor(app, mode) {
+ super(app);
+ this.mode = mode;
+ this.init();
+ }
+ init() {
+ const folders = new Set();
+ const sortedFolders = [];
+ let leaf = this.app.workspace.getLeaf(false);
+ if (leaf && leaf.view instanceof import_obsidian3.MarkdownView && leaf.view.file instanceof import_obsidian3.TFile && leaf.view.file.parent instanceof import_obsidian3.TFolder) {
+ folders.add(leaf.view.file.parent);
+ sortedFolders.push(leaf.view.file.parent);
+ }
+ import_obsidian3.Vault.recurseChildren(this.app.vault.getRoot(), (file) => {
+ if (file instanceof import_obsidian3.TFolder && !folders.has(file)) {
+ folders.add(file);
+ sortedFolders.push(file);
+ }
+ });
+ this.folders = sortedFolders;
+ this.emptyStateText = EMPTY_TEXT;
+ this.setPlaceholder(PLACEHOLDER_TEXT);
+ this.setInstructions(instructions);
+ this.initChooseFolderItem();
+ this.createNoteModal = new CreateNoteModal(this.app, this.mode);
+ this.inputListener = this.listenInput.bind(this);
+ }
+ getItems() {
+ return this.folders;
+ }
+ getItemText(item) {
+ this.noSuggestion = false;
+ return item.path;
+ }
+ onNoSuggestion() {
+ this.noSuggestion = true;
+ this.newDirectoryPath = this.inputEl.value;
+ this.resultContainerEl.childNodes.forEach((c) => c.parentNode.removeChild(c));
+ this.chooseFolder.innerText = this.inputEl.value;
+ this.itemInstructionMessage(this.chooseFolder, "Press \u21B5 or append / to create folder.");
+ this.resultContainerEl.appendChild(this.chooseFolder);
+ this.resultContainerEl.appendChild(this.suggestionEmpty);
+ }
+ shouldCreateFolder(evt) {
+ if (this.newDirectoryPath.endsWith("/")) {
+ return true;
+ }
+ if (evt instanceof KeyboardEvent && evt.key == "Enter") {
+ return true;
+ }
+ return false;
+ }
+ findCurrentSelect() {
+ return document.querySelector(".suggestion-item.is-selected");
+ }
+ listenInput(evt) {
+ var _a;
+ if (evt.key == "Tab") {
+ this.inputEl.value = (_a = this.findCurrentSelect()) == null ? void 0 : _a.innerText;
+ evt.preventDefault();
+ }
+ }
+ onOpen() {
+ super.onOpen();
+ this.inputEl.addEventListener("keydown", this.inputListener);
+ }
+ onClose() {
+ this.inputEl.removeEventListener("keydown", this.inputListener);
+ super.onClose();
+ }
+ onChooseItem(item, evt) {
+ if (this.noSuggestion) {
+ if (!this.shouldCreateFolder(evt)) {
+ return;
+ }
+ this.createNoteModal.setFolder(this.app.vault.getRoot(), this.newDirectoryPath);
+ } else {
+ this.createNoteModal.setFolder(item, "");
+ }
+ this.createNoteModal.open();
+ }
+ initChooseFolderItem() {
+ this.chooseFolder = document.createElement("div");
+ this.chooseFolder.addClasses(["suggestion-item", "is-selected"]);
+ this.suggestionEmpty = document.createElement("div");
+ this.suggestionEmpty.addClass("suggestion-empty");
+ this.suggestionEmpty.innerText = EMPTY_TEXT;
+ }
+ itemInstructionMessage(resultEl, message) {
+ const el = document.createElement("kbd");
+ el.addClass("suggestion-hotkey");
+ el.innerText = message;
+ resultEl.appendChild(el);
+ }
+};
+
+// src/main.ts
+var AdvancedNewFilePlugin = class extends import_obsidian4.Plugin {
+ onload() {
+ return __async(this, null, function* () {
+ console.log("loading plugin");
+ this.addCommand({
+ id: "advanced-new-file",
+ name: "Create note in the current pane",
+ callback: () => {
+ new ChooseFolderModal(this.app, NewFileLocation.CurrentPane).open();
+ }
+ });
+ this.addCommand({
+ id: "advanced-new-file-new-pane",
+ name: "Create note in a new pane",
+ callback: () => {
+ new ChooseFolderModal(this.app, NewFileLocation.NewPane).open();
+ }
+ });
+ this.addCommand({
+ id: "advanced-new-file-new-tab",
+ name: "Create note in a new tab",
+ callback: () => {
+ new ChooseFolderModal(this.app, NewFileLocation.NewTab).open();
+ }
+ });
+ });
+ }
+ onunload() {
+ console.log("unloading plugin");
+ }
+};