Overview

(General history and goals.)

 
let current = dv.current();
 
let title = current.name || current.file.name;
 
  
 
// --- CONFIGURATION ---
 
let imageFolders = ["Images/Locations", "Image/Locations", "Images/Buildings", "Image/Buildings"];
 
let fallbackImage = "";
 
// ---------------------
 
  
 
// 0. Suppress artwork search on template notes
 
if (title.toLowerCase().includes("template")) {
 
    dv.paragraph(`*(Location / Building Image Preview)*`);
 
} else {
 
    // 1. Gather all potential names (Title, quoted nicknames, and Obsidian Aliases)
 
    let rawNames = [title];
 
  
 
    // Extract quoted nickname if present in title
 
    let matchNick = title.match(/"([^"]+)"/);
 
    if (matchNick && matchNick) {
 
        rawNames.push(matchNick);
 
    }
 
  
 
    // Pull aliases from Obsidian Frontmatter/Properties
 
    let rawAliases = current.file?.aliases || current.aliases || [];
 
    if (typeof rawAliases === "string") {
 
        rawNames.push(rawAliases);
 
    } else if (rawAliases && typeof rawAliases[Symbol.iterator] === "function") {
 
        for (let a of rawAliases) {
 
            if (a && typeof a === "string") rawNames.push(a);
 
        }
 
    }
 
  
 
    // 2. Build sanitized search terms
 
    let searchTerms = new Set();
 
    for (let name of rawNames) {
 
        if (!name || typeof name !== "string") continue;
 
        let lower = name.toLowerCase().trim().replace(/["']/g, "");
 
        let slug = lower.replace(/[\s-]+/g, "_").replace(/^_+|_+\$/g, "");
 
        if (lower.length >= 2) searchTerms.add(lower);
 
        if (slug.length >= 2) searchTerms.add(slug);
 
    }
 
  
 
    // 3. Search target folders for matching image files (.png, .webp, .jpg, etc.)
 
    let matches = app.vault.getFiles().filter(f => {
 
        let pathLower = f.path.toLowerCase();
 
        let inTargetFolder = imageFolders.some(folder => pathLower.includes(folder.toLowerCase()));
 
        if (!inTargetFolder) return false;
 
        if (fallbackImage && pathLower.includes(fallbackImage.toLowerCase())) return false;
 
        let imgName = f.name.toLowerCase();
 
        return Array.from(searchTerms).some(term => term && imgName.includes(term));
 
    });
 
  
 
    // 4. Prioritize "overview", "cover", or "map", otherwise take the first match
 
    let match = matches.find(f => {
 
        let nameLower = f.name.toLowerCase();
 
        return nameLower.includes("overview") || nameLower.includes("cover") || nameLower.includes("map");
 
    }) || (matches.length > 0 ? matches : null);
 
  
 
    // 5. Render artwork, fallback image, or clean message
 
    if (match) {
 
        dv.paragraph(`![[${match.path}|cover]]`);
 
    } else {
 
        let fallbackFile = null;
 
        if (fallbackImage && fallbackImage.trim() !== "") {
 
            let cleanFB = fallbackImage.toLowerCase().trim();
 
            fallbackFile = app.vault.getFiles().find(f =>
 
                f.path.toLowerCase() === cleanFB ||
 
                f.path.toLowerCase().includes(cleanFB) ||
 
                f.name.toLowerCase().includes(cleanFB)
 
            );
 
        }
 
        if (fallbackFile) {
 
            dv.paragraph(`![[${fallbackFile.path}|cover]]`);
 
        } else {
 
            dv.paragraph(`*No map or illustration found for ${title}*`);
 
        }
 
    }
 
}
 

Political Landscape


Hierarchy & Agents