Wes Bos Courses Duration

Prints course duration on console

// ==UserScript==
// @name         Wes Bos Courses Duration
// @namespace    https://github.com/xaxim/
// @version      0.4
// @description  Prints course duration on console
// @author       xaxim
// @match        https://javascript30.com/account/access/*
// @match        https://es6.io/account/access/*
// @match        https://reactforbeginners.com/account/access/*
// @match        https://sublimetextbook.com/account/access/*
// @match        https://flexbox.io/account/access/*
// @match        https://commandlinepoweruser.com/account/access/*
// @match        https://learnredux.com/account/access/*
// @match        https://masteringmarkdown.com/account/access/*
// @match        https://*/account/access/*
// @grant        none
// ==/UserScript==

function getWesDuration(start = 0, end) {
  const timeNodes = Array.from(document.querySelectorAll('.duration'));
  const last = end || timeNodes.length;

  const seconds = timeNodes
    .filter((node) => {
      const videoNumber = parseFloat(node.parentNode.parentNode.parentNode.querySelector('.video-number').textContent);
      return videoNumber >= start && videoNumber <= last;
    })
    .map(node => node.textContent)
    .map((timeStr) => {
      const [mins, secs] = timeStr.split(':').map(parseFloat);
      return (mins * 60) + secs;
    })
    .reduce((total, current) => total + current);

  const minsPerHour = 60;
  const secsPerHour = minsPerHour * 60;

  let secondsLeft = seconds;

  const hours = Math.floor(secondsLeft / secsPerHour);
  secondsLeft %= secsPerHour;

  const minutes = Math.floor(secondsLeft / minsPerHour);
  secondsLeft %= minsPerHour;

  /* eslint-disable */
  console.log(`Duration of this course: ${hours} hours ${minutes} minutes and ${secondsLeft} seconds`);
  /* eslint-enable */
}

getWesDuration();