Add a clear date to the relative time in Github
当前为
// ==UserScript==
// @name Github Clear Date
// @namespace https://github.com/wzshiming/userscripts
// @version 0.4.0
// @description Add a clear date to the relative time in Github
// @author wzshiming
// @match *://github.com/*
// @grant none
// @icon https://github.githubassets.com/pinned-octocat.svg
// @supportURL https://github.com/wzshiming/userscripts/issues
// @license MIT License
// ==/UserScript==
(function () {
'use strict';
let MutationObserver = window.MutationObserver ||
window.WebKitMutationObserver ||
window.MozMutationObserver;
let config = {
childList: true,
subtree: true,
attributes: true,
};
let observer = new MutationObserver(mutation);
observer.observe(document.body, config);
mutate(document.body);
})();
function mutate(elem) {
elem.querySelectorAll('relative-time').forEach(formatRelativeTime);
}
function mutation(mutationsList) {
for (let mutation of mutationsList) {
mutate(mutation.target.parentNode);
}
}
function formatRelativeTime(item) {
let text = item.shadowRoot.innerHTML;
if (text.length == 0 || text.indexOf("(") >= 0) {
return
}
let datetime = new Date(item.datetime);
let now = new Date();
let dateStr = formatTime(datetime, now)
if (dateStr.length == 0) {
return
}
item.shadowRoot.innerHTML += "(" + dateStr + ")";
return
}
function formatDate(datetime, now) {
let hour = datetime.getHours();
let minute = datetime.getMinutes();
let second = datetime.getSeconds();
let nowHour = now.getHours();
let nowMinute = now.getMinutes();
let nowSecond = now.getSeconds();
if (hour == nowHour &&
minute == nowMinute &&
second == nowSecond) {
return "";
}
return "" + hour + ":" + minute + ":" + second;
}
function formatTime(datetime, now) {
let year = datetime.getFullYear();
let month = datetime.getMonth();
let day = datetime.getDate();
let nowYear = now.getFullYear();
let nowMonth = now.getMonth();
let nowDay = now.getDate();
if (year == nowYear &&
month == nowMonth &&
day == nowDay) {
return formatDate(datetime, now);
}
// append date
if (year == nowYear) { // this year will be omitted
return "" + (month + 1) + "/" + day;
}
let century = Math.round(year / 100);
let nowCentury = Math.round(nowYear / 100);
if (century == nowCentury) { // this century will be omitted
return "" + (year - 2000) + "/" + (month + 1) + "/" + day;
}
return "" + year + "/" + (month + 1) + "/" + day;
}