Skip to content

Instantly share code, notes, and snippets.

@gbrlb
Last active January 24, 2024 14:19
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gbrlb/a7a1e6d3d81157ea3f31b0c7c1f9ff9f to your computer and use it in GitHub Desktop.
Save gbrlb/a7a1e6d3d81157ea3f31b0c7c1f9ff9f to your computer and use it in GitHub Desktop.
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

// define function to create tabe
function create_mdtable(HeadRow_dv, TableFormat, Rows_dv){
	let last_row = ""
	let table = `| ${HeadRow_dv.map(cell => cell + " |").join("")}\n`;
	table += TableFormat
	for (let Row of Rows_dv) {
	if (Row[0] != last_row) {
		table += `| ${Row[0]} | [[${Row[1]}]] | \n`;
	}
	last_row = Row[0];
	};
	return table
}

const format = 'HH:mm:ss';
const week = "kkkk-'W'WW"
	
// Create table
const HeadRow = [ "Time", "Link"];
const TableFormat = "|:---:|:---|\n"

let day_md_table= "";

// Construct dataview group
let dv_week_group = dv.pages('-"dailynotes"')
	.where(p => p.file.mtime.toFormat(week) == dv.current().file.name)
	.sort(k => k.file.mtime)
	.groupBy(p => p.file.mday);

for (let dv_day of dv_week_group) {
	// construct table dataview
	let ModTableRows = dv_day.rows
		.map(p => [p.file.mtime.toFormat(format), p.file.name]);

// create md table
day_md_table += `
#### [[${dv_day.key.toISODate()} | ${dv_day.key.toFormat('DDDD')}]]
${create_mdtable(HeadRow, TableFormat, ModTableRows)}`;
};


// Visualization table
let mdv = `
\`\`\`\`ad-summary
title: Worked This Week
collapse: close
${day_md_table}
\`\`\`\`
`;

// Copy table
let md = `### Worked This Week
\> [!Summary]- Worked This Week`;
for (let line of day_md_table.split(/\r\n|\r|\n/) ){
	md += `\n\> ${line}`
}
md += `\n`

// 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());
// Display preview
dv.paragraph(mdv)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment