mirror of
https://github.com/bramses/bramses-highly-opinionated-vault-2023.git
synced 2025-02-26 07:53:55 +00:00
638 lines
51 KiB
JavaScript
638 lines
51 KiB
JavaScript
/*
|
|
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
|
|
if you want to view the source visit the plugins github repository
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var obsidian = require('obsidian');
|
|
|
|
/*! *****************************************************************************
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
***************************************************************************** */
|
|
|
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
}
|
|
|
|
const idOnlyRegex = /([0-9]+|[a-z]+)/g;
|
|
const checkSettingsMessage = "Try checking the settings if this seems wrong.";
|
|
const lettersIDComponentSuccessors = {
|
|
a: "b",
|
|
b: "c",
|
|
c: "d",
|
|
d: "e",
|
|
e: "f",
|
|
f: "g",
|
|
g: "h",
|
|
h: "i",
|
|
i: "j",
|
|
j: "k",
|
|
k: "l",
|
|
l: "m",
|
|
m: "n",
|
|
n: "o",
|
|
o: "p",
|
|
p: "q",
|
|
q: "r",
|
|
r: "s",
|
|
s: "t",
|
|
t: "u",
|
|
u: "v",
|
|
v: "w",
|
|
w: "x",
|
|
x: "y",
|
|
y: "z",
|
|
z: "aa",
|
|
};
|
|
const DEFAULT_SETTINGS = {
|
|
matchRule: "strict",
|
|
addTitle: false,
|
|
separator: "⁝ ",
|
|
};
|
|
class LuhmanSettingTab extends obsidian.PluginSettingTab {
|
|
constructor(app, plugin) {
|
|
super(app, plugin);
|
|
this.plugin = plugin;
|
|
}
|
|
display() {
|
|
const { containerEl } = this;
|
|
const { matchRule, separator, addTitle } = this.plugin.settings;
|
|
containerEl.empty();
|
|
containerEl.createEl("p", {
|
|
text: "The ID is a block of letters and numbers at the beginning of the filename",
|
|
});
|
|
new obsidian.Setting(containerEl)
|
|
.setName("ID matching rule")
|
|
.setDesc("Strict means filenames consist of only an ID. " +
|
|
"Separator means the ID must be followed by the separator. " +
|
|
"Fuzzy treats the first non-alphanumeric character as the end of the ID.")
|
|
.addDropdown((setting) => setting
|
|
.addOption("strict", "Strict")
|
|
.addOption("separator", "Separator")
|
|
.addOption("fuzzy", "Fuzzy")
|
|
.setValue(matchRule)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.matchRule = value;
|
|
yield this.plugin.saveSettings();
|
|
this.display();
|
|
})));
|
|
if (matchRule !== "strict") {
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Add titles automatically")
|
|
.setDesc("Add the separator and the title of the note when creating filenames")
|
|
.setDisabled(matchRule !== "strict")
|
|
.addToggle((setting) => setting.setValue(addTitle).onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.addTitle = value;
|
|
yield this.plugin.saveSettings();
|
|
this.display();
|
|
})));
|
|
}
|
|
const useSeparator = matchRule !== "strict" && (addTitle || matchRule === "separator");
|
|
if (useSeparator) {
|
|
new obsidian.Setting(containerEl)
|
|
.setName("ID Separator")
|
|
.setDesc("Used between id and title, include whitespace padding if needed")
|
|
.setDisabled(useSeparator)
|
|
.addText((text) => text
|
|
.setPlaceholder("Enter your separator")
|
|
.setValue(separator)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.separator = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
}
|
|
}
|
|
}
|
|
class NewZettel extends obsidian.Plugin {
|
|
constructor() {
|
|
super(...arguments);
|
|
this.settings = DEFAULT_SETTINGS;
|
|
}
|
|
loadSettings() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
|
});
|
|
}
|
|
saveSettings() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
yield this.saveData(this.settings);
|
|
});
|
|
}
|
|
incrementStringIDComponent(id) {
|
|
const comps = id.split("");
|
|
const last = comps.pop();
|
|
return comps.concat([lettersIDComponentSuccessors[last]]).join("");
|
|
}
|
|
incrementNumberIDComponent(id) {
|
|
return (parseInt(id) + 1).toString();
|
|
}
|
|
isNumber(string) {
|
|
return /^\d+$/.test(string);
|
|
}
|
|
incrementIDComponent(id) {
|
|
if (this.isNumber(id)) {
|
|
return this.incrementNumberIDComponent(id);
|
|
}
|
|
else {
|
|
return this.incrementStringIDComponent(id);
|
|
}
|
|
}
|
|
incrementID(id) {
|
|
const parts = id.match(idOnlyRegex);
|
|
const lastPart = parts.pop();
|
|
return parts.concat([this.incrementIDComponent(lastPart)]).join("");
|
|
}
|
|
parentID(id) {
|
|
const parts = id.match(idOnlyRegex);
|
|
if (parts) {
|
|
parts.pop();
|
|
return parts.join("");
|
|
}
|
|
else {
|
|
return "";
|
|
}
|
|
}
|
|
nextComponentOf(id) {
|
|
const parts = id.match(idOnlyRegex);
|
|
const lastPart = parts.pop();
|
|
if (this.isNumber(lastPart)) {
|
|
return "a";
|
|
}
|
|
else {
|
|
return "1";
|
|
}
|
|
}
|
|
firstChildOf(parentID) {
|
|
return parentID + this.nextComponentOf(parentID);
|
|
}
|
|
fileToId(filename) {
|
|
const ruleRegexes = {
|
|
strict: /^((?:[0-9]+|[a-z]+)+)$/,
|
|
separator: new RegExp(`^((?:[0-9]+|[a-z]+)+)${this.settings.separator}.*`),
|
|
fuzzy: /^((?:[0-9]+|[a-z]+)+).*/,
|
|
};
|
|
const match = filename.match(ruleRegexes[this.settings.matchRule]);
|
|
if (match) {
|
|
return match[1];
|
|
}
|
|
return "";
|
|
}
|
|
idExists(id) {
|
|
const fileMatcher = (file) => this.fileToId(file.basename) === id;
|
|
return this.app.vault.getMarkdownFiles().filter(fileMatcher).length != 0;
|
|
}
|
|
firstAvailableID(startingID) {
|
|
let nextID = startingID;
|
|
while (this.idExists(nextID)) {
|
|
nextID = this.incrementID(nextID);
|
|
}
|
|
return nextID;
|
|
}
|
|
makeNoteForNextSiblingOf(sibling) {
|
|
const nextID = this.firstAvailableID(this.incrementID(this.fileToId(sibling.basename)));
|
|
return nextID;
|
|
}
|
|
makeNoteForNextChildOf(parent) {
|
|
const childID = this.firstAvailableID(this.firstChildOf(this.fileToId(parent.basename)));
|
|
return childID;
|
|
}
|
|
makeNote(path, title, content, placeCursorAtStartOfContent, openZettel = false) {
|
|
var _a;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const app = this.app;
|
|
let titleContent = null;
|
|
if (title && title.length > 0) {
|
|
titleContent = "# " + title + "\n\n";
|
|
}
|
|
else {
|
|
titleContent = "";
|
|
}
|
|
const fullContent = titleContent + content;
|
|
const file = yield this.app.vault.create(path, fullContent);
|
|
const active = app.workspace.getLeaf();
|
|
if (active == null) {
|
|
return;
|
|
}
|
|
if (openZettel == false)
|
|
return;
|
|
yield active.openFile(file);
|
|
const editor = (_a = app.workspace.getActiveViewOfType(obsidian.MarkdownView)) === null || _a === void 0 ? void 0 : _a.editor;
|
|
if (editor == null) {
|
|
return;
|
|
}
|
|
if (placeCursorAtStartOfContent) {
|
|
const position = { line: 2, ch: 0 };
|
|
editor.setCursor(position);
|
|
}
|
|
else {
|
|
editor.exec("goEnd");
|
|
}
|
|
});
|
|
}
|
|
isZettelFile(name) {
|
|
const mdRegex = /.*\.md$/;
|
|
return mdRegex.exec(name) != null && this.fileToId(name) !== "";
|
|
}
|
|
makeNoteFunction(idGenerator, openNewFile = true) {
|
|
var _a;
|
|
const file = this.app.workspace.getActiveFile();
|
|
if (file == null) {
|
|
return;
|
|
}
|
|
if (this.isZettelFile(file.name)) {
|
|
this.fileToId(file.basename);
|
|
const fileLink = "[[" + file.basename + "]]";
|
|
const editor = (_a = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView)) === null || _a === void 0 ? void 0 : _a.editor;
|
|
if (editor == null) {
|
|
return;
|
|
}
|
|
const selection = editor.getSelection();
|
|
const nextID = idGenerator.bind(this, file)();
|
|
const nextPath = (title) => (file === null || file === void 0 ? void 0 : file.path)
|
|
? this.app.fileManager.getNewFileParent(file.path).path +
|
|
"/" +
|
|
nextID +
|
|
(this.settings.addTitle ? this.settings.separator + title : "") +
|
|
".md"
|
|
: "";
|
|
const newLink = (title) => `[[${nextID}${(this.settings.addTitle ? this.settings.separator + title : "")}]]`;
|
|
// const newLink = "[[" + nextID + "]]";
|
|
if (selection) {
|
|
// This current solution eats line returns spaces but thats
|
|
// fine as it is turning the selection into a title so it makes sense
|
|
const selectionTrimStart = selection.trimStart();
|
|
const selectionTrimEnd = selectionTrimStart.trimEnd();
|
|
const spaceBefore = selection.length - selectionTrimStart.length;
|
|
const spaceAfter = selectionTrimStart.length - selectionTrimEnd.length;
|
|
const title = selectionTrimEnd
|
|
.split(/\s+/)
|
|
.map((w) => w[0].toUpperCase() + w.slice(1))
|
|
.join(" ");
|
|
const selectionPos = editor.listSelections()[0];
|
|
/* By default the anchor is what ever position the selection started
|
|
how ever replaceRange does not accept it both ways and
|
|
gets weird if we just pass in the anchor then the head
|
|
so here we create a vertual anchor and head position to pass in */
|
|
const anchorCorrect = selectionPos.anchor.line == selectionPos.head.line ? // If the anchor and head are on the same line
|
|
selectionPos.anchor.ch <= selectionPos.head.ch : // Then if anchor is before the head
|
|
selectionPos.anchor.line < selectionPos.head.line; // else they are not on the same line and just check if anchor is before head
|
|
// if anchorCorrect use as is, else switch
|
|
const virtualAnchor = anchorCorrect ? selectionPos.anchor : selectionPos.head;
|
|
const virtualHead = anchorCorrect ? selectionPos.head : selectionPos.anchor;
|
|
editor.replaceRange(' '.repeat(spaceBefore) + newLink(title) + ' '.repeat(spaceAfter), virtualAnchor, virtualHead);
|
|
this.makeNote(nextPath(title), title, fileLink, true, openNewFile);
|
|
}
|
|
else {
|
|
new NewZettelModal(this.app, (title, options) => {
|
|
this.insertTextIntoCurrentNote(newLink(title));
|
|
this.makeNote(nextPath(title), title, fileLink, true, options.openNewZettel);
|
|
}, {
|
|
openNewZettel: openNewFile
|
|
}).open();
|
|
}
|
|
}
|
|
else {
|
|
new obsidian.Notice(`Couldn't find ID in "${file.basename}". ${checkSettingsMessage}`);
|
|
}
|
|
}
|
|
renameZettel(id, toId) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
this.settings.separator;
|
|
const zettel = this.app.vault
|
|
.getMarkdownFiles()
|
|
.filter((file) => this.fileToId(file.basename) === id)
|
|
.first();
|
|
if (zettel) {
|
|
const id = this.fileToId(zettel.basename);
|
|
const rest = zettel.basename.split(id)[1];
|
|
this.app.fileManager.renameFile(zettel, zettel.parent.path + toId + rest + "." + zettel.extension);
|
|
}
|
|
else {
|
|
new obsidian.Notice(`Couldn't find file for ID ${id}. ${checkSettingsMessage}`);
|
|
}
|
|
});
|
|
}
|
|
moveChildrenDown(id) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const children = this.getDirectChildZettels(id);
|
|
for (const child of children) {
|
|
yield this.moveZettelDown(this.fileToId(child.basename));
|
|
}
|
|
});
|
|
}
|
|
moveZettelDown(id) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
this.moveChildrenDown(id);
|
|
yield this.renameZettel(id, this.firstAvailableID(id));
|
|
});
|
|
}
|
|
outdentZettel(id) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const newID = this.incrementID(this.parentID(id));
|
|
if (this.idExists(newID)) {
|
|
yield this.moveZettelDown(newID);
|
|
}
|
|
for (const child of this.getDirectChildZettels(id)) {
|
|
const newChildID = this.firstAvailableID(this.firstChildOf(newID));
|
|
yield this.renameZettel(this.fileToId(child.basename), newChildID);
|
|
}
|
|
yield this.renameZettel(id, newID);
|
|
});
|
|
}
|
|
onload() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
console.log("loading New Zettel");
|
|
this.loadSettings();
|
|
this.addSettingTab(new LuhmanSettingTab(this.app, this));
|
|
// this.app.workspace.onLayoutReady(this.initialize);
|
|
this.addCommand({
|
|
id: "new-sibling-note",
|
|
name: "New Sibling Zettel Note",
|
|
callback: () => {
|
|
this.makeNoteFunction(this.makeNoteForNextSiblingOf);
|
|
},
|
|
});
|
|
this.addCommand({
|
|
id: "new-child-note",
|
|
name: "New Child Zettel Note",
|
|
callback: () => {
|
|
this.makeNoteFunction(this.makeNoteForNextChildOf);
|
|
},
|
|
});
|
|
this.addCommand({
|
|
id: "new-sibling-note-dont-open",
|
|
name: "New Sibling Zettel Note (Don't Open)",
|
|
callback: () => {
|
|
this.makeNoteFunction(this.makeNoteForNextSiblingOf, false);
|
|
},
|
|
});
|
|
this.addCommand({
|
|
id: "new-child-note-dont-open",
|
|
name: "New Child Zettel Note (Don't Open)",
|
|
callback: () => {
|
|
this.makeNoteFunction(this.makeNoteForNextChildOf, false);
|
|
},
|
|
});
|
|
this.addCommand({
|
|
id: "insert-zettel-link",
|
|
name: "Insert Zettel Link",
|
|
callback: () => __awaiter(this, void 0, void 0, function* () {
|
|
// let completion = (te)
|
|
const titles = yield this.getAllNoteTitles();
|
|
new ZettelSuggester(this.app, titles, this.currentlySelectedText(), (file) => {
|
|
this.insertTextIntoCurrentNote("[[" + file.basename + "]]");
|
|
}).open();
|
|
}),
|
|
});
|
|
this.addCommand({
|
|
id: "open-zettel",
|
|
name: "Open Zettel",
|
|
callback: () => __awaiter(this, void 0, void 0, function* () {
|
|
const titles = yield this.getAllNoteTitles();
|
|
new ZettelSuggester(this.app, titles, this.currentlySelectedText(), (file) => {
|
|
this.app.workspace.getLeaf().openFile(file);
|
|
}).open();
|
|
}),
|
|
});
|
|
this.addCommand({
|
|
id: "open-parent-zettel",
|
|
name: "Open Parent Zettel",
|
|
callback: () => {
|
|
const file = this.currentFile();
|
|
if (file) {
|
|
const id = this.fileToId(file.basename);
|
|
const parentId = this.parentID(id);
|
|
if (parentId === "") {
|
|
new obsidian.Notice(`No parent found for "${file.basename}". ${checkSettingsMessage}`);
|
|
return;
|
|
}
|
|
this.openZettel(parentId);
|
|
}
|
|
else {
|
|
new obsidian.Notice("No file open");
|
|
}
|
|
},
|
|
});
|
|
this.addCommand({
|
|
id: "outdent-zettel",
|
|
name: "Outdent Zettel",
|
|
callback: () => {
|
|
const file = this.currentFile();
|
|
if (file) {
|
|
this.outdentZettel(this.fileToId(file.basename));
|
|
}
|
|
},
|
|
});
|
|
});
|
|
}
|
|
onunload() {
|
|
console.log("unloading New Zettel");
|
|
// this.initialize(true);
|
|
}
|
|
currentFile() {
|
|
var _a;
|
|
return (_a = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView)) === null || _a === void 0 ? void 0 : _a.file;
|
|
}
|
|
openZettel(id) {
|
|
const file = this.app.vault
|
|
.getMarkdownFiles()
|
|
.filter((file) => this.fileToId(file.basename) == id)
|
|
.first();
|
|
if (file) {
|
|
this.app.workspace.getLeaf().openFile(file);
|
|
}
|
|
}
|
|
currentlySelectedText() {
|
|
var _a;
|
|
return (_a = this.app.workspace
|
|
.getActiveViewOfType(obsidian.MarkdownView)) === null || _a === void 0 ? void 0 : _a.editor.getSelection();
|
|
}
|
|
insertTextIntoCurrentNote(text) {
|
|
const view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView);
|
|
if (view) {
|
|
const editor = view.editor;
|
|
let position;
|
|
let prefix = "";
|
|
if (editor.getSelection()) {
|
|
const selectionPos = editor.listSelections()[0];
|
|
const positionCH = Math.max(selectionPos.head.ch, selectionPos.anchor.ch);
|
|
position = { line: selectionPos.anchor.line, ch: positionCH + 1 };
|
|
prefix = " ";
|
|
}
|
|
else {
|
|
position = editor.getCursor();
|
|
}
|
|
editor.replaceRange(prefix + text, position, position);
|
|
}
|
|
}
|
|
getZettels() {
|
|
const fileToId = (file) => this.fileToId(file.basename);
|
|
return this.app.vault.getMarkdownFiles().filter((file) => {
|
|
const ignore = !file.path.match(/^(_layouts|templates|scripts)/);
|
|
return ignore && fileToId(file) !== "";
|
|
});
|
|
}
|
|
getDirectChildZettels(ofParent) {
|
|
return this.getZettels().filter((file) => {
|
|
return this.parentID(this.fileToId(file.basename)) == ofParent;
|
|
});
|
|
}
|
|
getAllNoteTitles() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const regex = /# (.+)\s*/;
|
|
const titles = new Map();
|
|
for (const file of this.getZettels()) {
|
|
const text = yield this.app.vault.cachedRead(file);
|
|
const match = text.match(regex);
|
|
if (match) {
|
|
titles.set(match[1], file);
|
|
}
|
|
}
|
|
return titles;
|
|
});
|
|
}
|
|
}
|
|
const MakeZettelModelOptionDefault = () => ({
|
|
openNewZettel: true
|
|
});
|
|
class NewZettelModal extends obsidian.Modal {
|
|
constructor(app, completion, options = MakeZettelModelOptionDefault()) {
|
|
super(app);
|
|
this.completion = completion;
|
|
/***********************************
|
|
** Model Title **
|
|
***********************************/
|
|
const { contentEl } = this;
|
|
contentEl.parentElement.addClass("zettel-modal");
|
|
this.titleEl.setText("New zettel title...");
|
|
/***********************************
|
|
** Name and GO area **
|
|
***********************************/
|
|
// Setup the container
|
|
const main_container = contentEl.createEl("div", {
|
|
cls: "zettel-modal-container",
|
|
});
|
|
// Add the textBox
|
|
this.textBox = contentEl.createEl("input", {
|
|
type: "text",
|
|
cls: "zettel-modal-textbox",
|
|
});
|
|
this.textBox.id = "zettel-modal-textbox";
|
|
this.textBox.addEventListener("keydown", (event) => {
|
|
if (event.key == "Enter") {
|
|
event.preventDefault();
|
|
this.goTapped();
|
|
}
|
|
});
|
|
main_container.append(this.textBox);
|
|
// Add the go button
|
|
const button = contentEl.createEl("input", {
|
|
type: "button",
|
|
value: "GO",
|
|
cls: "zettel-modal-button",
|
|
});
|
|
button.addEventListener("click", (e) => this.goTapped());
|
|
main_container.append(button);
|
|
contentEl.append(main_container);
|
|
/***********************************
|
|
** New Zettel Options **
|
|
***********************************/
|
|
// Setup the container
|
|
const options_container = contentEl.appendChild(contentEl.createEl("div", {
|
|
cls: ["zettel-modal-container", "zettel-options-container"],
|
|
}));
|
|
// Create label inside the container
|
|
const label = options_container.appendChild(contentEl.createEl("label", {
|
|
cls: ["label", "zettel-label"]
|
|
}));
|
|
// Create label
|
|
const openNewZettelCheckboxLabel = label.appendChild(contentEl.createEl("div", { cls: ["labelText"] }));
|
|
openNewZettelCheckboxLabel.innerText = "Open New Zettel on Creation";
|
|
// Create checkbox inside the container
|
|
this.openNewZettelCheckbox = label.appendChild(contentEl.createEl("input", {
|
|
type: "checkbox",
|
|
cls: ["zettel-modal-checkbox"],
|
|
value: options.openNewZettel.toString()
|
|
}));
|
|
this.openNewZettelCheckbox.id = "zettel-modal-option-openZettel";
|
|
this.openNewZettelCheckbox.checked = options.openNewZettel;
|
|
}
|
|
onOpen() {
|
|
window.setTimeout(() => {
|
|
this.textBox.focus();
|
|
}, 0);
|
|
}
|
|
goTapped() {
|
|
const title = this.textBox.value;
|
|
const openNewZettel = this.openNewZettelCheckbox.checked;
|
|
this.completion(title, {
|
|
openNewZettel
|
|
});
|
|
this.close();
|
|
}
|
|
}
|
|
class ZettelSuggester extends obsidian.FuzzySuggestModal {
|
|
constructor(app, titles, search, completion) {
|
|
super(app);
|
|
this.initialQuery = search !== null && search !== void 0 ? search : "";
|
|
this.titles = titles;
|
|
this.completion = completion;
|
|
this.emptyStateText = "No zettels found";
|
|
this.setPlaceholder("Search for a zettel...");
|
|
console.log(this.initialQuery);
|
|
}
|
|
onOpen() {
|
|
super.onOpen();
|
|
this.inputEl.value = this.initialQuery;
|
|
const event = new Event("input");
|
|
this.inputEl.dispatchEvent(event);
|
|
}
|
|
getItems() {
|
|
return Array.from(this.titles.keys()).sort();
|
|
}
|
|
getItemText(item) {
|
|
return item;
|
|
}
|
|
renderSuggestion(value, el) {
|
|
el.setText(value.item);
|
|
const matches = value.match.matches;
|
|
if (matches == null || matches.length == 0) {
|
|
return;
|
|
}
|
|
const start = matches[0][0];
|
|
const end = matches[0][1];
|
|
const range = new Range();
|
|
const text = el.firstChild;
|
|
if (text == null) {
|
|
return;
|
|
}
|
|
range.setStart(text, start);
|
|
range.setEnd(text, end);
|
|
range.surroundContents(document.createElement("b"));
|
|
}
|
|
onChooseItem(item, evt) {
|
|
this.completion(this.titles.get(item));
|
|
}
|
|
}
|
|
|
|
module.exports = NewZettel;
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9zcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6bnVsbCwibmFtZXMiOlsiUGx1Z2luU2V0dGluZ1RhYiIsIlNldHRpbmciLCJQbHVnaW4iLCJNYXJrZG93blZpZXciLCJOb3RpY2UiLCJNb2RhbCIsIkZ1enp5U3VnZ2VzdE1vZGFsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdURBO0FBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FB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
|