
Campaign Journal
// Set path and class
const vault = this.app.vault.adapter.getResourcePath("").split("?")[0];
dv.container.className += ' hideSort cards cards-cover cards-1-1';
// Display PC card table
dv.table(["cover", "name", "details"],
dv.pages(`"Compendium/Party/Player Characters"`)
.sort(page => page.file.name, "asc")
.map(p => [
``, // For image link use: [](<${p.file.name}#${p.file.name}>)
p.headerLink,
obsidian.Platform.isMobile ? `:FasCrown: Level ${p.level}<br>:FasUserGroup: ${p.race}<br>:RiSwordFill: ${p.class}` : `:FasCrown: Level ${p.level} / :FasUserGroup: ${p.race} / :RiSwordFill: ${p.class}`
])
);NPC's
Non-Player Characterdv.container.className += ' listMe'; let pages = dv.pages('"Compendium/NPC\'s"').sort(p => p.file.name, "asc"); dv.table(["Name"], pages.map(page => [`- ${page.headerLink}`]));
BUTTON[npc]
Agenda
Objectives, Pursuits, & Questsdv.container.className += ' listMe'; let tags = []; let pages = dv.pages('"Compendium/Party/Quests"').sort(p => p.file.name, "asc"); dv.table(["Name", "Status"], pages.map(page => { const questStatusTerms = ["quest/completed", "quest/abandoned", "quest/failed", "quest/ongoing", "quest/pending"]; let status = questStatusTerms.find(term => page.tags && page.tags.includes(term)); status = status ? `(${status.replace("quest/", "")})` : ""; return [`- ${page.headerLink} ${status}`, status]; }));
BUTTON[quest]
Locations
Countries, Settlements, & Topographydv.container.className += ' listMe'; let pages = dv.pages('"Compendium/Atlas"').sort(p => p.file.name, "asc"); dv.table(["Name", "Type"], pages.map(page => [`- ${page.headerLink} (${page.type})`, page.type]));
BUTTON[plane, realm, continent, region, locale, landmark]
Lore & Mythos
Factions, Gods, Relics, & Moredv.container.className += ' listMe'; let pages = dv.pages('"Compendium/Lore"').sort(p => p.file.name, "asc"); dv.table(["Name", "Type"], pages.map(page => [`- ${page.headerLink} (${page.type})`, page.type]));
BUTTON[deity, event, object, org]
Session Notes
Summaries, Transcripts, & Notesdv.container.className += ' listMe'; let pages = dv.pages('"Session Notes"').sort(p => p.file.name, "desc"); dv.table(["Date"], pages.map(page => [`- ${page.headerLink}`]));
BUTTON[note]
PCs
Player Charactersdv.container.className += ' listMe'; let pages = dv.pages('"Compendium/Party/Player Characters"').sort(p => p.file.name, "asc"); dv.table(["Name"], pages.map(page => [`- ${page.headerLink}`]));
BUTTON[PC]
Maps
Mapsdv.container.className += ' listMe'; let pages = dv.pages('"Maps"').sort(p => p.file.name, "asc"); dv.table(["Name", "Type"], pages.map(page => [`- ${page.headerLink} (${page.type})`, page.type]));