Skip to content

Instantly share code, notes, and snippets.

@evantravers
Last active October 13, 2023 12:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save evantravers/448be97bde47e71f341da1e1d4fe5021 to your computer and use it in GitHub Desktop.
Save evantravers/448be97bde47e71f341da1e1d4fe5021 to your computer and use it in GitHub Desktop.
roles
Follower
Husband
Father
Friends
Work
Hobbies
Emotions
Mental
Health
Rest
Finances

{{date:YYYY}}-Q{{date:Q}}

Plan

Goals

Goal 1: Goal

Goal 2: Goal

Review

How do you rate your intentions in each area of life?

// we have to sort somehow, so we convert the names to numbers and sort
const s = function(i) {
  return Number(i.replace('-Q', ''));
}

const allQuarters =
  dv.pages('"journal/quarterly"')
    .array()
    .sort(function(a, b) {
      return s(a.file.name) - s(b.file.name);
    })

let currentIndex = allQuarters.findIndex((q) => q.file.name == dv.current().file.name);

const quarters = allQuarters.slice(currentIndex - 3, currentIndex+1);

let datasets = [];

let trans = function(color) {
  return color.replace(', 1)', ', 0.5)');
}

let colors = [
  'rgba(105,105,105, 1)',
  'rgba(169,169,169, 1)',
  'rgba(211,211,211, 1)',
]

const purple = 'rgba(139,108,239, 1)';
let highlight = '#fff';

if (document.body.classList.contains('theme-light')) {
  colors.reverse();
  highlight = '#000';
}

colors.push(purple);

for (let i in quarters) {
  let quarter = quarters[i];
  if (quarter.hasOwnProperty('roles')) {
    let values = quarter.roles.map(o => Object.values(o)).flat()

    datasets.unshift({
      label: quarter.file.name,
      data: values,
      fill: true,
      backgroundColor: trans(colors[i]),
      borderColor: colors[i],
      pointBackgroundColor: colors[i],
      pointBorderColor: highlight,
      pointHoverBackgroundColor: highlight,
      pointHoverBorderColor: colors[i]
    })
  }
}

let data   = dv.current().roles
let keys   = data.map(o => Object.keys(o)).flat()

const chartData = {
  type: 'radar',
  data: {
    labels: keys,
    datasets: datasets
  },
  options: {
    scales: {
      r: {
        suggestedMin: 0,
        suggestedMax: 5
      }
    }
  }
}

window.renderChart(chartData, this.container);

Scoreboard

let check = function(bool) {
  if (bool) { return "✅" };
  return "⛔";
}

let quarter = parseInt(dv.current().file.name.match(/Q\d/)[0].replace('Q', ''));
let year = dv.current().file.name.match(/\d{4}/)[0];
let start = (quarter-1)*13+1

dv.table(
  ["", "Week", "Goal 1", "Goal 2"], dv.pages('"journal/weekly"')
    .filter(function(f) {
      let num = f.file.name.match(new RegExp(`${year}-W(\\d+)`));

      if (!num) { return false; }
      num = parseInt(num[1]);
      return num >= start && num < start + 12;
    })
    .sort(w => w.file.name, 'asc')
    .map(w => [(parseInt(w.file.name.match(new RegExp(`${year}-W(\\d+)`))[1]) - start)+1, w.file.link, check(w["Goal1"]), check(w["Goal2"])])
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment