%% DATAVIEW_PUBLISHER: start ```dataviewjs const questTasks = dv.pages('"RPG/Spelare/Kingmaker"') .file.tasks .where(t => t.tags.includes("#quest")); // Group tasks by their source file const tasksByFile = {}; for (const task of questTasks) { if (!tasksByFile[task.path]) { tasksByFile[task.path] = []; } tasksByFile[task.path].push(task); } let output = ""; // Create output with file headers and task lists for (const filePath in tasksByFile) { const fileName = filePath.split("/").pop().replace(".md", ""); // Add file header (using ### for smaller heading) output += `[[${filePath}|${fileName}]]\n\n`; // Add tasks for this file const fileTasks = tasksByFile[filePath].map(task => ({ text: task.text.replace(/#\S+/g, "").trim(), checked: task.completed })); // Convert to markdown task list for (const task of fileTasks) { output += `- [${task.checked ? 'x' : ' '}] ${task.text}\n`; } output += "\n"; } output; ``` %% %% DATAVIEW_PUBLISHER: end %%