Skip to content

Latest commit

 

History

History
68 lines (55 loc) · 1.81 KB

make_markdown_table_from_dataview_table.md

File metadata and controls

68 lines (55 loc) · 1.81 KB
const pages = dv.pages().where(f => f.theme && f.readings);

const uniqueWeeks = new Set();
pages.forEach(p => uniqueWeeks.add(p.week));

let pWeeks = {};
uniqueWeeks.forEach(week => {
    pages.forEach(page => {
        if (page.week === week) {
            if (!pWeeks[week]) pWeeks[week] = [];
            pWeeks[week] = [...pWeeks[week], page];
        }
    })
})

let markdownTable = "";

uniqueWeeks.forEach(week => {
    dv.header(3, week);
    const tableTopRow = ["Day", "Theme", "Readings"];
    const tableRows = pWeeks[week].map(p => [p.day, p.theme, p.readings]);
    dv.table(tableTopRow, tableRows);
    
    // Add week header
    markdownTable += `### ${week}\n`;
    // Add row top
    markdownTable += `| ${tableTopRow.map(cell => cell + " |").join("")}\n`;
    markdownTable += "|" + " --- |".repeat(tableTopRow.length) + "\n";
    // Add body
    tableRows.map(p => {
        markdownTable += `| ${p.map(cell => {
            let cellContent;
            
            if (typeof cell !== 'string' && cell[Symbol.iterator]) {
                cellContent = cell.map(c => c.display ?? c).map(v => `- ${v}`).join("<br>");
            } else {
                cellContent = cell.display ?? cell;
            }
            
            return (cellContent + " |")
        
        }).join("")}\n`;
    });
});

const copyToClipboard = str => {
  const el = document.createElement('textarea');
  el.value = str;
  document.body.appendChild(el);
  el.select();
  document.execCommand('copy');
  document.body.removeChild(el);
};

const copyButtonMaker = () => {
    const btn = this.container.createEl('button', {"text": "Copy"});
    
    btn.addEventListener('click', async (evt) => {
        evt.preventDefault();
        copyToClipboard(markdownTable);
    });
    
    return btn;
}

dv.paragraph(copyButtonMaker());