first commit

This commit is contained in:
2025-09-25 20:00:00 -04:00
commit 7697252ba3
4071 changed files with 1606306 additions and 0 deletions

88
main.ts Normal file
View File

@@ -0,0 +1,88 @@
import { Plugin } from 'obsidian';
import { fileURLToPath } from 'url';
const { shell } = require('electron');
export default class MenuPlugin extends Plugin {
async onload() {
this.registerMarkdownCodeBlockProcessor('menu', (source, el, ctx) => {
// Parse the source
const lines = source.trim().split('\n');
let cssClass = '';
const links: string[] = [];
for (const line of lines) {
const trimmed = line.trim();
if (trimmed.startsWith('class:')) {
cssClass = trimmed.substring(6).trim().replace(/[{}]/g, '');
} else if (trimmed) {
links.push(trimmed);
}
}
// Create the container - if no class specified, use 'default'
const finalClass = cssClass || 'default';
const container = el.createEl('div', { cls: `menu-container ${finalClass}` });
// Process each link
for (const link of links) {
if (link.startsWith('[[') && link.endsWith(']]')) {
// Internal link
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: text,
attr: { 'data-href': href }
});
a.addClass('menu-internal-link');
} else if (link.match(/^\[.*\]\(.*\)$/)) {
// External link
const match = link.match(/^\[(.*)\]\((.*)\)$/);
if (match) {
const text = match[1];
const url = match[2];
const a = container.createEl('a', {
text: text,
attr: url.startsWith('file://') ? {} : { href: url, target: '_blank', rel: 'noopener noreferrer' }
});
a.style.cursor = 'pointer';
// Add appropriate class based on link type
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 {
// Convert file URL to path and handle Windows paths
let filePath = decodeURIComponent(url.substring(7)); // Remove 'file://'
// Handle Windows paths that start with /C:
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() {
// Cleanup if needed
}
}