KAT: smart full date/time

Today: "1 hour ago", yesterday: "yesterday, 11:44", earlier: "12 days ago, 01 Oct 2015, 10:45"

  1. // ==UserScript==
  2. // @name KAT: smart full date/time
  3. // @description Today: "1 hour ago", yesterday: "yesterday, 11:44", earlier: "12 days ago, 01 Oct 2015, 10:45"
  4. // @include https://kat.cr/*
  5. // @version 1.0.3
  6. // @author wOxxOm
  7. // @namespace https://greatest.deepsurf.us/en/users/2159-woxxom
  8. // @license MIT License
  9. // @run-at document-start
  10. // @grant GM_addStyle
  11. // @require https://greatest.deepsurf.us/scripts/12228/code/setMutationHandler2.js
  12. // ==/UserScript==
  13.  
  14. var dateLocale = 'en-GB';
  15. //var dateLocale = navigator.language;
  16.  
  17. GM_addStyle('.wOxxOmified {opacity:0.7}');
  18.  
  19. var today = new Date();
  20. today.setHours(0, 0, 0, 0);
  21.  
  22. var yesterday = new Date();
  23. yesterday.setDate(today.getDate() - 1);
  24. yesterday.setHours(0, 0, 0, 0);
  25.  
  26. var year = new Date();
  27. year.setMonth(0, 1);
  28. year.setHours(0, 0, 0, 0);
  29.  
  30. var timestamps; // = [].slice.call(document.getElementsByTagName('time'));
  31. setMutationHandler(document, 'time', datify);
  32.  
  33. function datify(nodes) {
  34. nodes.forEach(function(n) {
  35. if (n.wOxxOm == n.textContent)
  36. return;
  37. var d = new Date(n.getAttribute('datetime') || n.title);
  38. if (d >= today) {
  39. // no change
  40. } else if (d >= yesterday) {
  41. setContent(n, 'yesterday, ', d, {hour:'2-digit', minute:'2-digit'});
  42. } else if (d >= year) {
  43. setContent(n, '', d, {day:'numeric', month:'short', hour:'2-digit', minute:'2-digit'});
  44. } else {
  45. setContent(n, '', d, {day:'numeric', month:'short', year:'2-digit', hour:'2-digit', minute:'2-digit'});
  46. }
  47. });
  48. return true;
  49.  
  50. function setContent(n, prefix, d, options) {
  51. var time = d.toLocaleTimeString(dateLocale, options);
  52. var text = prefix ? prefix + time : time + ', <span class="wOxxOmified">' + n.innerHTML + '</span>';
  53. if (n.innerHTML != text) {
  54. var pristine = !n.wOxxOm;
  55. n.innerHTML = text;
  56. n.wOxxOm = n.textContent;
  57. if (pristine)
  58. setMutationHandler(n, 'time', datify, {
  59. characterData: true,
  60. attributes: true, attributeFilter: ['title'],
  61. childList: true,
  62. subtree: true
  63. });
  64. }
  65. }
  66. }