From 9263e238d8fe32db88e25e000902693907ed4921 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 13 Nov 2018 09:07:36 -0600 Subject: [PATCH] Add WhenIWork Total Worked --- wheniwork.hours.user.js | 63 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 wheniwork.hours.user.js diff --git a/wheniwork.hours.user.js b/wheniwork.hours.user.js new file mode 100644 index 0000000..45cae33 --- /dev/null +++ b/wheniwork.hours.user.js @@ -0,0 +1,63 @@ +// ==UserScript== +// @name WhenIWork True Total Worked +// @namespace danielrayjones +// @description Adds the Total hours worked, including today +// @include https://app.wheniwork.com/payroll/ +// @version 0.2 +// @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js +// ==/UserScript== + +/* global $ */ + +$(document).ready(function() { + 'use strict'; + + // Filter out this event from iframes + if (!this.body.classList.contains("controller-payroll")) { + return; + } + + let currentHourSum = 0; + + function updateHours(hours) { + currentHourSum = hours; + + let weekPlusDayTotal = $('#week-plus-day-total'); + let span = `Total with Today${hours}` + + if (weekPlusDayTotal.length === 0) { + $('#header-summary-container .stats').append( + `
${span}
` + ); + } else { + weekPlusDayTotal.html(span); + } + + // In case this ran while the page was loading, let's try again in two seconds. + setTimeout(addHours, 2000); + } + + function addHours() { + let hourSum = 0; + $('.times-list .col-worked .text-input[data-total]').each(function () { + hourSum += parseFloat($(this).text()) || 0; + }); + + // Adjust for floating point errors + hourSum = Math.round(hourSum*100)/100; + + console.log(`got ${hourSum} hours`); + + // AJAX request hasn't finished yet. Let's wait some more. + if (currentHourSum === 0 && hourSum === 0) return setTimeout(addHours, 2000); + + if (currentHourSum !== hourSum && hourSum > 0) { + updateHours(hourSum); + } + } + + // The hours don't show up until after an AJAX request completes. + // Let's wait two seconds for it to finish. + setTimeout(addHours, 2000); + +});