Files
monster-menus/main.js

131 lines
16 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 __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);
// main.ts
var main_exports = {};
__export(main_exports, {
default: () => MenuPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var { shell } = require("electron");
var MenuPlugin = class extends import_obsidian.Plugin {
async onload() {
this.registerMarkdownCodeBlockProcessor("menu", (source, el, ctx) => {
const lines = source.trim().split("\n");
let layout = "";
let colors = {};
const links = [];
for (const line of lines) {
const trimmed = line.trim();
if (trimmed.startsWith("layout:") || trimmed.startsWith("class:")) {
const colonIndex = trimmed.indexOf(":");
layout = trimmed.substring(colonIndex + 1).trim();
} else if (trimmed.includes(":") && !trimmed.startsWith("[") && !trimmed.startsWith("[[")) {
const [key, ...valueParts] = trimmed.split(":");
const value = valueParts.join(":").trim();
if (key && value && !key.includes("//") && !key.includes("http")) {
colors[key.trim()] = value;
}
} else if (trimmed && !trimmed.includes(":")) {
links.push(trimmed);
} else if (trimmed.startsWith("[")) {
links.push(trimmed);
}
}
const finalLayout = layout || "default";
const container = el.createEl("div", { cls: `menu-container ${finalLayout}` });
if (Object.keys(colors).length > 0) {
for (const [key, value] of Object.entries(colors)) {
let cssKey = key.replace(/accent/g, "hover-text");
container.style.setProperty(`--${cssKey}`, value);
}
if (colors["hover-text"]) {
container.style.setProperty("--hover-text", colors["hover-text"]);
}
}
for (const link of links) {
if (link.startsWith("[[") && link.endsWith("]]")) {
const linkContent = link.slice(2, -2);
let href = linkContent;
let text = linkContent;
if (linkContent.includes("|")) {
[href, text] = linkContent.split("|");
}
const a = container.createEl("a", {
text,
attr: { "data-href": href }
});
a.addClass("menu-internal-link");
a.style.cursor = "pointer";
a.addEventListener("click", (e) => {
e.preventDefault();
const vaultName = this.app.vault.getName();
const encodedFile = encodeURIComponent(href);
const uri = `obsidian://open?vault=${encodeURIComponent(vaultName)}&file=${encodedFile}`;
window.open(uri);
});
} else if (link.match(/^\[.*\]\(.*\)$/)) {
const match = link.match(/^\[(.*)\]\((.*)\)$/);
if (match) {
const text = match[1];
const url = match[2];
const a = container.createEl("a", {
text,
attr: url.startsWith("file://") ? {} : { href: url, target: "_blank", rel: "noopener noreferrer" }
});
a.style.cursor = "pointer";
if (url.startsWith("file://")) {
a.addClass("menu-file-link");
} else {
a.addClass("menu-external-link");
}
a.addEventListener("click", (e) => {
e.preventDefault();
if (url.startsWith("file://")) {
try {
let filePath = decodeURIComponent(url.substring(7));
if (filePath.startsWith("/") && filePath.charAt(2) === ":") {
filePath = filePath.substring(1);
}
console.log("Opening file path:", filePath);
shell.openPath(filePath);
} catch (error) {
console.error("Failed to open file:", error);
}
} else {
window.open(url, "_blank", "noopener,noreferrer");
}
});
}
}
}
});
}
onunload() {
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {});
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcclxuXHJcbmNvbnN0IHsgc2hlbGwgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XHJcblxyXG4vLyBTaW1wbGUgWUFNTCBwYXJzZXIgZm9yIGNvbG9yIHByb3BlcnRpZXNcclxuZnVuY3Rpb24gcGFyc2VZQU1MKHRleHQ6IHN0cmluZykge1xyXG5cdGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG5cdGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XHJcblx0Zm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XHJcblx0XHRjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XHJcblx0XHRpZiAodHJpbW1lZCAmJiB0cmltbWVkLmluY2x1ZGVzKCc6JykpIHtcclxuXHRcdFx0Y29uc3QgW2tleSwgLi4udmFsdWVQYXJ0c10gPSB0cmltbWVkLnNwbGl0KCc6Jyk7XHJcblx0XHRcdGNvbnN0IHZhbHVlID0gdmFsdWVQYXJ0cy5qb2luKCc6JykudHJpbSgpO1xyXG5cdFx0XHRpZiAoa2V5ICYmIHZhbHVlKSB7XHJcblx0XHRcdFx0cmVzdWx0W2tleS50cmltKCldID0gdmFsdWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVudVBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0dGhpcy5yZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yKCdtZW51JywgKHNvdXJjZSwgZWwsIGN0eCkgPT4ge1xyXG5cdFx0XHRjb25zdCBsaW5lcyA9IHNvdXJjZS50cmltKCkuc3BsaXQoJ1xcbicpO1xyXG5cdFx0XHRsZXQgbGF5b3V0ID0gJyc7XHJcblx0XHRcdGxldCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuXHRcdFx0Y29uc3QgbGlua3M6IHN0cmluZ1tdID0gW107XHJcblx0XHRcdFxyXG5cdFx0XHQvLyBQYXJzZSBZQU1MLWxpa2UgcHJvcGVydGllcyBhbmQgbGlua3NcclxuXHRcdFx0Zm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XHJcblx0XHRcdFx0Y29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpO1xyXG5cdFx0XHRcdGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoJ2xheW91dDonKSB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJ2NsYXNzOicpKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2xvbkluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCc6Jyk7XHJcblx0XHRcdFx0XHRsYXlvdXQgPSB0cmltbWVkLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSkudHJpbSgpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAodHJpbW1lZC5pbmNsdWRlcygnOicpICYmICF0cmltbWVkLnN0YXJ0c1dpdGgoJ1snKSAmJiAhdHJpbW1lZC5zdGFydHNXaXRoKCdbWycpKSB7XHJcblx0XHRcdFx0XHQvLyBQYXJzZSBjb2xvciBwcm9wZXJ0aWVzXHJcblx0XHRcdFx0XHRjb25zdCBba2V5LCAuLi52YWx1ZVBhcnRzXSA9IHRyaW1tZWQuc3BsaXQoJzonKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gdmFsdWVQYXJ0cy5qb2luKCc6JykudHJpbSgpO1xyXG5cdFx0XHRcdFx0aWYgKGtleSAmJiB2YWx1ZSAmJiAha2V5LmluY2x1ZGVzKCcvLycpICYmICFrZXkuaW5jbHVkZXMoJ2h0dHAnKSkge1xyXG5cdFx0XHRcdFx0XHRjb2xvcnNba2V5LnRyaW0oKV0gPSB2YWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2UgaWYgKHRyaW1tZWQgJiYgIXRyaW1tZWQuaW5jbHVkZXMoJzonKSkge1xyXG5cdFx0XHRcdFx0bGlua3MucHVzaCh0cmltbWVkKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHRyaW1tZWQuc3RhcnRzV2l0aCgnWycpKSB7XHJcblx0XHRcdFx0XHRsaW5rcy5wdXNoKHRyaW1tZWQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRcclxuXHRcdFx0Y29uc3QgZmluYWxMYXlvdXQgPSBsYXlvdXQgfHwgJ2RlZmF1bHQnO1xyXG5cdFx0XHRjb25zdCBjb250YWluZXIgPSBlbC5jcmVhdGVFbCgnZGl2JywgeyBjbHM6IGBtZW51LWNvbnRhaW5lciAke2ZpbmFsTGF5b3V0fWAgfSk7XHJcblx0XHRcdFxyXG5cdFx0XHQvLyBBcHBseSBjdXN0b20gY29sb3JzIGFzIENTUyB2YXJpYWJsZXNcclxuXHRcdFx0aWYgKE9iamVjdC5rZXlzKGNvbG9ycykubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbG9ycykpIHtcclxuXHRcdFx0XHRcdC8vIFJlcGxhY2UgJ2FjY2VudCcgd2l0aCAnaG92ZXItdGV4dCcgZm9yIGNvbnNpc3RlbmN5XHJcblx0XHRcdFx0XHRsZXQgY3NzS2V5ID0ga2V5LnJlcGxhY2UoL2FjY2VudC9nLCAnaG92ZXItdGV4dCcpO1xyXG5cdFx0XHRcdFx0Y29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KGAtLSR7Y3NzS2V5fWAsIHZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gRXhhbXBsZTogZW5zdXJlIGhvdmVyLXRleHQgaXMgc2V0IGFuZCBhZGQgYSBjb21tZW50IGZvciB1c2FnZVxyXG5cdFx0XHRcdGlmIChjb2xvcnNbJ2hvdmVyLXRleHQnXSkge1xyXG5cdFx0XHRcdFx0Y29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KCctLWhvdmVyLXRleHQnLCBjb2xvcnNbJ2hvdmVyLXRleHQnXSk7XHJcblx0XHRcdFx0XHQvLyBUbyB1c2UgaW4gQ1NTOiBhOmhvdmVyIHsgY29sb3I6IHZhcigtLWhvdmVyLXRleHQpOyB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcbiBcclxuXHRcdFx0Ly8gUHJvY2VzcyBlYWNoIGxpbmtcclxuXHRcdFx0Zm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XHJcblx0XHRcdFx0aWYgKGxpbmsuc3RhcnRzV2l0aCgnW1snKSAmJiBsaW5rLmVuZHNXaXRoKCddXScpKSB7XHJcblx0XHRcdFx0XHQvLyBJbnRlcm5hbCBsaW5rXHJcblx0XHRcdFx0XHRjb25zdCBsaW5rQ29udGVudCA9IGxpbmsuc2xpY2UoMiwgLTIpO1xyXG5cdFx0XHRcdFx0bGV0IGhyZWYgPSBsaW5rQ29udGVudDtcclxuXHRcdFx0XHRcdGxldCB0ZXh0ID0gbGlua0NvbnRlbnQ7XHJcblx0XHRcdFx0XHRpZiAobGlua0NvbnRlbnQuaW5jbHVkZXMoJ3wnKSkge1xyXG5cdFx0XHRcdFx0XHRbaHJlZiwgdGV4dF0gPSBsaW5rQ29udGVudC5zcGxpdCgnfCcpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc3QgYSA9IGNvbnRhaW5lci5jcmVhdGVFbCgnYScsIHtcclxuXHRcdFx0XHRcdFx0dGV4dDogdGV4dCxcclxuXHRcdFx0XHRcdFx0YXR0cjogeyAnZGF0YS1ocmVmJzogaHJlZiB9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGEuYWRkQ2xhc3MoJ21lbnUtaW50ZXJuYWwtbGluaycpO1xyXG5cdFx0XHRcdFx0YS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcblx0XHRcdFx0XHRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB2YXVsdE5hbWUgPSB0aGlzLmFwcC52YXVsdC5nZXROYW1lKCk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGVuY29kZWRGaWxlID0gZW5jb2RlVVJJQ29tcG9uZW50KGhyZWYpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB1cmkgPSBgb2JzaWRpYW46Ly9vcGVuP3ZhdWx0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhdWx0TmFtZSl9JmZpbGU9JHtlbmNvZGVkRmlsZX1gO1xyXG5cdFx0XHRcdFx0XHR3aW5kb3cub3Blbih1cmkpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChsaW5rLm1hdGNoKC9eXFxbLipcXF1cXCguKlxcKSQvKSkge1xyXG5cdFx0XHRcdFx0Ly8gRXh0ZXJuYWwgbGlua1xyXG5cdFx0XHRcdFx0Y29uc3QgbWF0Y2ggPSBsaW5rLm1hdGNoKC9eXFxbKC4qKVxcXVxcKCguKilcXCkkLyk7XHJcblx0XHRcdFx0XHRpZiAobWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdGV4dCA9IG1hdGNoWzFdO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB1cmwgPSBtYXRjaFsyXTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYSA9IGNvbnRhaW5lci5jcmVhdGVFbCgnYScsIHtcclxuXHRcdFx0XHRcdFx0XHR0ZXh0OiB0ZXh0LFxyXG5cdFx0XHRcdFx0XHRcdGF0dHI6IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykgPyB7fSA6IHsgaHJlZjogdXJsLCB0YXJnZXQ6ICdfYmxhbmsnLCByZWw6ICdub29wZW5lciBub3JlZmVycmVyJyB9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRhLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdC8vIEFkZCBhcHByb3ByaWF0ZSBjbGFzcyBiYXNlZCBvbiBsaW5rIHR5cGVcclxuXHRcdFx0XHRcdFx0aWYgKHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcclxuXHRcdFx0XHRcdFx0XHRhLmFkZENsYXNzKCdtZW51LWZpbGUtbGluaycpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGEuYWRkQ2xhc3MoJ21lbnUtZXh0ZXJuYWwtbGluaycpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAodXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ29udmVydCBmaWxlIFVSTCB0byBwYXRoIGFuZCBoYW5kbGUgV2luZG93cyBwYXRoc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgZmlsZVBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodXJsLnN1YnN0cmluZyg3KSk7IC8vIFJlbW92ZSAnZmlsZTovLydcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIFdpbmRvd3MgcGF0aHMgdGhhdCBzdGFydCB3aXRoIC9DOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZmlsZVBhdGguc3RhcnRzV2l0aCgnLycpICYmIGZpbGVQYXRoLmNoYXJBdCgyKSA9PT0gJzonKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmlsZVBhdGggPSBmaWxlUGF0aC5zdWJzdHJpbmcoMSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ09wZW5pbmcgZmlsZSBwYXRoOicsIGZpbGVQYXRoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hlbGwub3BlblBhdGgoZmlsZVBhdGgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRmFpbGVkIHRvIG9wZW4gZmlsZTonLCBlcnJvcik7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0b251bmxvYWQoKSB7XHJcblx0XHQvLyBDbGVhbnVwIGlmIG5lZWRlZFxyXG5cdH1cclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsc0JBQXVCO0FBR3ZCLElBQU0sRUFBRSxNQUFNLElBQUksUUFBUSxVQUFVO0FBbUJwQyxJQUFxQixhQUFyQixjQUF3Qyx1QkFBTztBQUFBLEVBQzlDLE1BQU0sU0FBUztBQUNkLFNBQUssbUNBQW1DLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUTtBQUNwRSxZQUFNLFFBQVEsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJO0FBQ3RDLFVBQUksU0FBUztBQUNiLFVBQUksU0FBaUMsQ0FBQztBQUN0QyxZQUFNLFFBQWtCLENBQUM7QUFHekIsaUJBQVcsUUFBUSxPQUFPO0FBQ3pCLGNBQU0sVUFBVSxLQUFLLEtBQUs7QUFDMUIsWUFBSSxRQUFRLFdBQVcsU0FBUyxLQUFLLFFBQVEsV0FBVyxRQUFRLEdBQUc7QUFDbEUsZ0JBQU0sYUFBYSxRQUFRLFFBQVEsR0FBRztBQUN0QyxtQkFBUyxRQUFRLFVBQVUsYUFBYSxDQUFDLEVBQUUsS0FBSztBQUFBLFFBQ2pELFdBQVcsUUFBUSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLFdBQVcsSUFBSSxHQUFHO0FBRTFGLGdCQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsSUFBSSxRQUFRLE1BQU0sR0FBRztBQUM5QyxnQkFBTSxRQUFRLFdBQVcsS0FBSyxHQUFHLEVBQUUsS0FBSztBQUN4QyxjQUFJLE9BQU8sU0FBUyxDQUFDLElBQUksU0FBUyxJQUFJLEtB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