Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@mikecat
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mikecat/272e333bd8ee0c73eac1 to your computer and use it in GitHub Desktop.
Save mikecat/272e333bd8ee0c73eac1 to your computer and use it in GitHub Desktop.
【Greasemonkey】デスマコロシアムの集計を最短でソート ACT.2
// ==UserScript==
// @name デスマコロシアムの集計を最短でソート ACT.2
// @description デスマコロシアムの言語別集計の表を最短文字数でソートします。
// @include http://tbpgr.hatenablog.com/entry/*
// @version 1.0.3
// @grant none
// ==/UserScript==
// ページがデスマコロシアムの集計報告っぽいかをチェックする
if (document.title.indexOf("デスマコロシアム") >= 0 &&
document.title.indexOf("集計報告") >= 0) {
// 全てのテーブルについて操作を行う
var tables = document.getElementsByTagName("table");
for (var i = 0; i < tables.length; i++) {
var t = tables[i];
// 言語別の集計っぽいかをチェックする
if (t.innerHTML.indexOf(">言語名</th>") >= 0 &&
(t.innerHTML.indexOf(">最短文字数</th>") >= 0 || t.innerHTML.indexOf(">最短Byte数</th>") >= 0)) {
var tableData = new Array();
var tableTitle = new Array();
var htmlData = t.innerHTML;
// 各要素を取得する
htmlData.replace(/<tr[^>]*?>([\s\S]*?)<\/tr>/g, function(all, rowData) {
// データ行
var row = new Array();
rowData.replace(/<td[^>]*?>([\s\S]*?)<\/td>/g, function(all, data) {
row.push(data);
return all;
});
if (row.length > 0) tableData.push(row);
// 見出し行
row = new Array();
rowData.replace(/<th[^>]*?>([\s\S]*?)<\/th>/g, function(all, data) {
row.push(data);
return all;
});
if (row.length > 0) tableTitle = row;
return all;
});
// ソートを実行する
for (var j = tableData.length - 1; j > 0; j--) {
for (var k = 0; k < j; k++) {
if (parseInt(tableData[k][3], 10) > parseInt(tableData[k + 1][3], 10)) {
var temp = tableData[k];
tableData[k] = tableData[k + 1];
tableData[k + 1] = temp;
}
}
}
// 情報を追加する
tableTitle.splice(2, 0, "累積人数");
tableTitle.splice(0, 0, "順位");
var ninsuSum = 0;
for (var j = 0; j < tableData.length; j++) {
var ninsu = parseInt(tableData[j][1], 10);
if (!isNaN(ninsu)) ninsuSum += ninsu;
tableData[j].splice(2, 0, "" + ninsuSum);
tableData[j].splice(0, 0, "" + (j + 1));
tableData[j][4] = tableData[j][4].replace(/ +point/, "");
}
// テーブルを構築する
var html = "<tr>";
for (var j = 0; j < tableTitle.length; j++) {
html += "<th>" + tableTitle[j] + "</th>";
}
html += "</tr>";
for (var j = 0; j < tableData.length; j++) {
html += "<tr>";
for (var k = 0; k < tableData[j].length; k++) {
html += "<td>" + tableData[j][k] + "</td>";
}
html += "</tr>";
}
t.innerHTML = html;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment