mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-04 05:28:59 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
#!/usr/bin/env node
 | 
						|
/**
 | 
						|
 * Post-process HTML files generated by MkDocs to remove .md extensions from links
 | 
						|
 */
 | 
						|
 | 
						|
import * as fs from 'fs';
 | 
						|
import * as path from 'path';
 | 
						|
 | 
						|
/**
 | 
						|
 * Process HTML content to remove .md extensions from links
 | 
						|
 */
 | 
						|
function fixHtmlLinks(content: string): string {
 | 
						|
    // Replace .md extensions in href attributes
 | 
						|
    // Handle both quoted and unquoted href attributes
 | 
						|
 | 
						|
    // First, handle quoted hrefs: href="...something.md" or href="...something.md#anchor"
 | 
						|
    content = content.replace(/href="([^"]*?)\.md(#[^"]*)?"/g, 'href="$1$2"');
 | 
						|
 | 
						|
    // Then, handle unquoted hrefs: href=...something.md or href=...something.md#anchor
 | 
						|
    // This matches href= followed by a non-whitespace URL ending in .md
 | 
						|
    content = content.replace(/href=([^\s>]*?)\.md(#[^\s>]*)?(?=[\s>])/g, 'href=$1$2');
 | 
						|
 | 
						|
    return content;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Recursively process all HTML files in a directory
 | 
						|
 */
 | 
						|
function processDirectory(dir: string): number {
 | 
						|
    let filesProcessed = 0;
 | 
						|
 | 
						|
    const entries = fs.readdirSync(dir, { withFileTypes: true });
 | 
						|
 | 
						|
    for (const entry of entries) {
 | 
						|
        const fullPath = path.join(dir, entry.name);
 | 
						|
 | 
						|
        if (entry.isDirectory()) {
 | 
						|
            // Recursively process subdirectories
 | 
						|
            filesProcessed += processDirectory(fullPath);
 | 
						|
        } else if (entry.isFile() && entry.name.endsWith('.html')) {
 | 
						|
            // Process HTML files
 | 
						|
            const content = fs.readFileSync(fullPath, 'utf-8');
 | 
						|
            const fixedContent = fixHtmlLinks(content);
 | 
						|
 | 
						|
            if (content !== fixedContent) {
 | 
						|
                fs.writeFileSync(fullPath, fixedContent, 'utf-8');
 | 
						|
                console.log(`Fixed: ${path.relative(process.cwd(), fullPath)}`);
 | 
						|
                filesProcessed++;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    return filesProcessed;
 | 
						|
}
 | 
						|
 | 
						|
function main(): number {
 | 
						|
    const args = process.argv.slice(2);
 | 
						|
    const siteDir = args[0] || 'site';
 | 
						|
 | 
						|
    const fullPath = path.resolve(siteDir);
 | 
						|
 | 
						|
    if (!fs.existsSync(fullPath)) {
 | 
						|
        console.error(`Error: Directory '${fullPath}' does not exist`);
 | 
						|
        return 1;
 | 
						|
    }
 | 
						|
 | 
						|
    console.log(`Processing HTML files in: ${fullPath}`);
 | 
						|
    console.log('-'.repeat(50));
 | 
						|
 | 
						|
    const filesProcessed = processDirectory(fullPath);
 | 
						|
 | 
						|
    console.log('-'.repeat(50));
 | 
						|
    console.log(`Processed ${filesProcessed} HTML files`);
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
// Run the main function
 | 
						|
process.exit(main()); |