Last active
October 20, 2018 03:31
-
-
Save lightsing/8de5d130e964e28db109690f1c415131 to your computer and use it in GitHub Desktop.
计算 bt.neu6.edu.cn 资源价值得分
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 计算资源价值 | |
// @namespace https://lightsing.me/ | |
// @version 0.1 | |
// @description 计算 bt.neu6.edu.cn 资源价值得分 | |
// @author lightsing | |
// @match http://bt.neu6.edu.cn/plugin.php?id=neubt_resourceindex* | |
// @grant none | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
var $ = document.querySelectorAll.bind(document); | |
Element.prototype.find = Element.prototype.querySelectorAll; | |
const get_signal = /signal_(\d)/; | |
const get_size = /(\d+\.?\d*)\s([GTMK])B/; | |
let table = $('.dt')[0]; | |
let tr = table.find('tr'); | |
let scores = [document.createElement('th')]; | |
scores[0].innerText = 'SCORE'; | |
let max_score = 0; | |
for (let i = 1; i < tr.length; i++) { | |
let tds = tr[i].find('td'); | |
let signal = get_signal.exec(tds[1].find('img')[0].src)[1]; | |
let sizes = get_size.exec(tds[2].innerText); | |
let size = sizes[1]; | |
switch (sizes[2]) { | |
case 'T': size *= 1024 * 1024 * 1024; break; | |
case 'G': size *= 1024 * 1024; break; | |
case 'M': size *= 1024; break; | |
} | |
var score = document.createElement('td'); | |
score.innerText = size * (6 - signal); | |
if (score.innerText > max_score) { | |
max_score = score.innerText; | |
} | |
scores.push(score); | |
} | |
for (let i = 1; i < tr.length; i++) { | |
scores[i].innerText = (scores[i].innerText / max_score).toFixed(2); | |
} | |
for (let i = 0; i < tr.length; i++) { | |
tr[i].prepend(scores[i]); | |
} | |
table.innerText = ""; | |
let result = Array.prototype.slice.call(tr, 0) | |
.sort((a, b) => { | |
try { | |
let x = parseFloat(a.find('td')[0].innerText); | |
let y = parseFloat(b.find('td')[0].innerText); | |
return x < y ? 1 : x > y ? -1 : 0; | |
} catch(_) { | |
return 1; | |
} | |
}); | |
for (let i = 0; i < tr.length; i++) { | |
table.append(result[i]); | |
} | |
table.prepend(tr[0]); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment