Google Calendar Time Box Duration

Shows the duration of each event.

  1. // ==UserScript==
  2. // @name Google Calendar Time Box Duration
  3. // @namespace https://github.com/Row
  4. // @description Shows the duration of each event.
  5. // @include https://www.google.com/calendar*
  6. // @version 0.0.1.20141019134026
  7. // ==/UserScript==
  8.  
  9. var timer;
  10. document.querySelector('#gridcontainer').addEventListener("DOMSubtreeModified",
  11. function(e)
  12. {
  13. window.clearTimeout(timer);
  14. timer = window.setTimeout(addDuration,500);
  15. }, false);
  16.  
  17. function addDuration()
  18. {
  19. var timeElements = document.querySelectorAll('dl.cbrd dt');
  20. for (var i in timeElements) {
  21. var str = timeElements[i].innerHTML || '';
  22. str = str.replace(/^(\d{2}:\d{2}) – (\d{2}:\d{2}) (.*?)$/, callbackTimeISO);
  23. str = str.replace(/^(\d+)(\:?\d*?)(p?) – (\d+)(\:?\d*?)(p?) (.*?)$/, callbackTimeGoogleAMPM);
  24. timeElements[i].innerHTML = str;
  25. window.clearTimeout(timer);
  26. }
  27. }
  28.  
  29. function AMPMto24(hour, isPM)
  30. {
  31. hour = isPM && hour != '12' ? parseInt(hour) + 12 : hour;
  32. return pad(!isPM ? parseInt(hour) % 12 : hour, 2);
  33. }
  34.  
  35. function callbackTimeGoogleAMPM(match, startHour, startMinute, startP, endHour, endMinute, endP, extra)
  36. {
  37. var start = AMPMto24(startHour, startP == 'p');
  38. start += startMinute != '' ? startMinute : ':00';
  39. var end = AMPMto24(endHour, endP == 'p');
  40. end += endMinute != '' ? endMinute : ':00';
  41. return startHour + startMinute + startP + ' - ' + endHour + endMinute + endP +
  42. ' (' + calculateDuration(start, end) + ') ' + extra;
  43. }
  44.  
  45. function callbackTimeISO(match, start, end, extra)
  46. {
  47. return start + ' - ' + end + ' (' + calculateDuration(start, end) + ') ' + extra;
  48. }
  49.  
  50. function getTimeDifference(startDate,endDate)
  51. {
  52. var totalDifference = endDate.getTime() - startDate.getTime();
  53. var diff = new Object();
  54. diff.days = Math.floor(totalDifference/1000/60/60/24);
  55. totalDifference -= diff.days*1000*60*60*24;
  56. diff.hours = Math.floor(totalDifference/1000/60/60);
  57. totalDifference -= diff.hours*1000*60*60;
  58. diff.minutes = Math.floor(totalDifference/1000/60);
  59. totalDifference -= diff.minutes*1000*60;
  60. diff.seconds = Math.floor(totalDifference/1000);
  61. return diff;
  62. }
  63.  
  64. function pad(number, length)
  65. {
  66. var str = '' + number;
  67. while (str.length < length)
  68. str = '0' + str;
  69. return str;
  70. }
  71.  
  72. function calculateDuration(startTime,endTime)
  73. {
  74. var dateString = "2011-11-11T";
  75. var s = new Date(dateString+startTime);
  76. var e = new Date(dateString+endTime);
  77. var diff = getTimeDifference(s,e);
  78. return pad(diff.hours,2) + ":" + pad(diff.minutes,2);
  79. }