Wayback Machine Timeline Compressor

Trims the capture graph timeline to only the earliest and latest years

  1. // ==UserScript==
  2. // @name Wayback Machine Timeline Compressor
  3. // @namespace DoomTay
  4. // @description Trims the capture graph timeline to only the earliest and latest years
  5. // @version 1.0.5
  6. // @include /https?:\/\/(web|wayback)\.archive\.org\/web\//
  7. // @grant none
  8.  
  9. // ==/UserScript==
  10.  
  11. var rangeOfYears = ((new Date()).getFullYear() - 1995);
  12.  
  13. var smallTimelineLength = 25 * rangeOfYears;
  14. var bigTimelineLength = 49 * rangeOfYears;
  15.  
  16. var smallTimeline = document.querySelector("#sparklineImgId[width = \"" + smallTimelineLength + "\"]");
  17. var bigTimeline = document.querySelector("#sparklineImgId[width = \"" + bigTimelineLength + "\"]");
  18.  
  19. if(smallTimeline)
  20. {
  21. smallTimeline.src = smallTimeline.src.replace(new RegExp("(/web/jsp/graph\\.jsp\\?graphdata=" + smallTimelineLength + "_27)(?:_\\d\\d\\d\\d:-1:000000000000)+|(?:_\\d\\d\\d\\d:-1:000000000000)+$","g"), "$1");
  22. var startYear = parseInt(smallTimeline.src.substr(smallTimeline.src.search(/\d\d\d\d:/),4));
  23. var lastYear = parseInt(smallTimeline.src.substr(smallTimeline.src.search(/\d\d\d\d(?!.*\d\d\d\d:)/),4));
  24. var yearRange = (lastYear - startYear) + 1;
  25. var timelineScript = Array.prototype.find.call(document.scripts,script => script.innerHTML.includes(smallTimelineLength + ", 27"));
  26. if(timelineScript)
  27. {
  28. var newScript = document.createElement("script");
  29. newScript.type = "text/javascript";
  30. newScript.innerHTML = timelineScript.innerHTML.replace("(" + smallTimelineLength + ", 27, 25, 2)","(" + smallTimelineLength + ", 27, " + (smallTimelineLength / yearRange) + ", " + (smallTimelineLength - yearRange)/(12 * yearRange) + ")").replace(/firstYear = \d\d\d\d/,"firstYear = " + startYear);
  31. timelineScript.parentNode.replaceChild(newScript,timelineScript);
  32. var yt = document.querySelector(".yt");
  33. if(yt) yt.parentNode.removeChild(yt);
  34. var mt = document.querySelector(".mt");
  35. if(mt) mt.parentNode.removeChild(mt);
  36. __wm.bt();
  37. }
  38. }
  39.  
  40. if(bigTimeline)
  41. {
  42. bigTimeline.src = bigTimeline.src.replace(/(\/web\/jsp\/graph.jsp\?nomonth=1&graphdata=1078_75)(?:_\d\d\d\d:-1:000000000000)+|(?:_\d\d\d\d:-1:000000000000)+$/g, "$1");
  43. var lastYear = parseInt(bigTimeline.src.substr(bigTimeline.src.search(/\d\d\d\d(?!.*\d\d\d\d:)/),4));
  44. window.firstYear = parseInt(bigTimeline.src.substr(bigTimeline.src.search(/\d\d\d\d:/),4));
  45. window.startYear = parseInt(window.location.href.substr(window.location.href.indexOf("archive.org/web/") + 16,4)) - firstYear;
  46. var yearRange = (lastYear - firstYear) + 1;
  47. window.yearImgWidth = (bigTimelineLength / yearRange);
  48. window.monthImgWidth = (bigTimelineLength - yearRange)/(12 * yearRange);
  49. document.getElementById("wbMouseTrackYearImg").style.width = (Math.round(10*yearImgWidth)/10) + "px";
  50. var yearLabels = document.getElementsByClassName("year-label");
  51. for(var y = yearLabels.length - 1; y >= 0; y--)
  52. {
  53. while(y > -1 && (yearLabels[y].dataset.year > lastYear || yearLabels[y].dataset.year < firstYear))
  54. {
  55. var oldY = yearLabels.length - 1;
  56. yearLabels[y].parentNode.removeChild(yearLabels[y]);
  57. if(y == oldY) y--;
  58. }
  59. }
  60. var newYearStyle = document.createElement("style");
  61. newYearStyle.type = "text/css";
  62. newYearStyle.innerHTML = "a.year-label {width: " + (Math.round(10*(bigTimelineLength /yearRange))/10) + "px}\
  63. \
  64. a.year-label:last-child {width: " + (bigTimelineLength - ((Math.round(10*(bigTimelineLength /yearRange))/10) * (yearRange - 1))) + "px}";
  65. document.head.appendChild(newYearStyle);
  66. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址