Last active
August 29, 2015 14:13
-
-
Save mikecat/272e333bd8ee0c73eac1 to your computer and use it in GitHub Desktop.
【Greasemonkey】デスマコロシアムの集計を最短でソート ACT.2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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