Skip to content

Instantly share code, notes, and snippets.

@gbrlb
Created Feb 23, 2022
Embed
What would you like to do?
Weekly Review - Worked This Week : Obsidian dataview to md table + admonition + copy button

2022-W08

  • File name must be in kkkk-'W'WW format, for example 2022-W08
  • Uncomment last line dv.paragraph(mdv); if you like to see the result inside a collapse ad-note
  • You could copy the table and delete the dataview to maintain the work today table, and the links inside the table will update, but the table will remain for future review.
  • To exclude a folder modifly dailynotes in:
let pages = dv.pages('-"dailynotes"')

Sources:

Worked This Week

const format = 'HH:mm:ss';
const week = "kkkk-'W'WW"

let pages = dv.pages('-"dailynotes"')
	.where(p => p.file.mtime.toFormat(week) == dv.current().file.name)
  .sort(k => k.file.mtime);
  
let md = "\n"
let mdv = "````ad-summary\ntitle: Worked This Week\ncollapse: close\n";
let ModTable = "";
const ModTableTopRow = [ "Time", "Link"];
let last_row = "";

for (let group of pages.groupBy(p => p.file.mday)) {
  // add header 'cccc dd MMM. yyyy
  // dv.header(2, group.key.toFormat('DDDD'));
  
  // construct table dataview
  let ModTableRows = group.rows
    .map(p => [p.file.mtime.toFormat(format), p.file.name]);

  // show data view table
  //dv.table(ModTableTopRow, ModTableRows);
  
  // add header 'cccc dd MMM. yyyy
  md += "### [[" + group.key.toISODate() + "|"  + group.key.toFormat('DDDD') + "]] \n";
  
  // Add table heads
  ModTable += `| ${ModTableTopRow.map(cell => cell + " |").join("")}\n`;
  // Add ---
  ModTable += "|" + " --- |".repeat(ModTableTopRow.length) + "\n";
  
  // Add body
  for (let Row of ModTableRows) {
    if (Row[0] != last_row) {
      ModTable += "|" + Row[0]+"| [[" + Row[1] + "]]| \n";
    }
    last_row = Row[0];
  };

  //dv.paragraph(ModTable);
  md += ModTable + "\n";
  // clean mod table
  ModTable = "";
};

md += "\n"
mdv += md + "````"

// copy button
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(md);
    });
    return btn;
}

dv.paragraph(copyButtonMaker());
dv.paragraph(md)
//dv.paragraph(mdv)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment