Skip to content

Instantly share code, notes, and snippets.

@Sheile
Created July 13, 2010 08:23
Show Gist options
  • Save Sheile/473626 to your computer and use it in GitHub Desktop.
Save Sheile/473626 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name EntryDiff
// @namespace http://d.hatena.ne.jp/sheile/
// @description 前回閲覧時からの差分に着色を行います
// @include http://*?entry_id=*
// ==/UserScript==
var entryId = location.href.match(/entry_id=([0-9]+)/)[1];
var prevVisit = parseInt(GM_getValue(entryId)) || new Date().getTime() - 365 * 24 * 3600 * 1000;
var targets = new Array();
var list = document.getElementsByClassName("date")
for(var i = 0; i < list.length; i++) {
var dateString = list[i].textContent.replace("年", "/").replace("月", "/").replace("日", "")
var date = new Date(dateString.match(/[0-9]{4}\/[0-9]{2}\/[0-9]{2} [0-9]{2}:[0-9]{2}/) + ":00").getTime()
if(isNaN(date)) {
var date = new Date(dateString.split('\n')[2].match(/(.*) by /)[1] + ":00").getTime()
}
if(date > prevVisit) {
var target = {element: list[i], isComment: null};
target.isComment = (target.element.tagName == "SPAN");
targets.push(target);
}
}
GM_setValue(entryId, new Date().getTime().toString());
var boxElement = document.createElement("DIV");
boxElement.innerHTML = getBoxHTML();
boxElement.id = "historyBox";
for(var i = 0; i < targets.length; i++) {
var linkText = "";
// 着色, タイトル取得
if(targets[i].isComment) {
targets[i].element.parentNode.parentNode.parentNode.style.backgroundColor = "#FFBBBB";
linkText = targets[i].element.parentNode.textContent.match(/ *(.*?)\s*\[/)[1];
} else {
targets[i].element.parentNode.style.backgroundColor = "#FFBBBB";
targets[i].element.parentNode.parentNode.style.backgroundColor = "#FFBBBB";
linkText = targets[i].element.textContent.match(/ by (.*?)\s*\[/)[1];
}
// ラベルの作成
var labelNode = document.createElement("A");
labelNode.name = "history" + i;
targets[i].element.parentNode.insertBefore(labelNode, targets[i].element);
// 一覧リストの作成
var liNode = document.createElement("LI");
var aNode = document.createElement("A");
aNode.textContent = linkText;
aNode.href = "#history" + i;
liNode.appendChild(aNode);
boxElement.getElementsByTagName("ul")[0].appendChild(liNode);
}
document.getElementById("contents_left").getElementsByTagName("form")[0].insertBefore(boxElement, document.getElementsByClassName("box_space")[0]);
function getBoxHTML() {
var html = "";
html += '<div class="box_space">\n';
html += ' <div class="box_space_title">変更点の一覧</div>\n';
html += ' <div style="font-size: 10px;" class="box_space_body">\n';
html += ' <ul style="list-style-position: inside; list-style-type: disc;">\n';
html += ' </ul>\n';
html += ' <br style="display: none; clear: left;"/>\n';
html += ' </div>\n';
html += '</div>\n';
return html;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment