let pages = [...dv.pages().where(p => p.file.path.includes('/'))];
pages.sort((a, b) => b.file.name.localeCompare(a.file.name));
let grouped = {};
function addToHierarchy(pathArray, obj) {
let part = pathArray[0];
if (!obj[part]) {
obj[part] = {};
}
if (pathArray.length > 1) {
addToHierarchy(pathArray.slice(1), obj[part]);
}
}
for (let page of pages) {
let date = page.file.name.split('-');
if (date.length < 2) continue;
let fullDate = `${date[0]}-${date[1]}-${date[2]}`;
let folderPath = page.file.folder.split('/');
if (!grouped[fullDate]) {
grouped[fullDate] = {};
}
addToHierarchy(folderPath, grouped[fullDate]);
}
let sortedDates = Object.keys(grouped).sort().reverse();
for (let fullDate of sortedDates) {
dv.header(2, `π― ${fullDate}`);
function displayHierarchy(obj) {
let html = '<ul>';
let keys = Object.keys(obj).sort();
for (let key of keys) {
html += `<li>π ${key}`;
html += displayHierarchy(obj[key]);
html += `</li>`;
}
html += '</ul>';
return html;
}
dv.el('div', displayHierarchy(grouped[fullDate]), {cls: 'dataview-table'});
}
Last active
February 24, 2025 17:15
-
-
Save marcelometal/27baae63cf226c285dfa8abd7b9fda2f to your computer and use it in GitHub Desktop.
Obisidian + DataView: Analytics Day
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment