Skip to content

Instantly share code, notes, and snippets.

@lightsing
Last active October 20, 2018 03:31
Show Gist options
  • Save lightsing/8de5d130e964e28db109690f1c415131 to your computer and use it in GitHub Desktop.
Save lightsing/8de5d130e964e28db109690f1c415131 to your computer and use it in GitHub Desktop.
计算 bt.neu6.edu.cn 资源价值得分
// ==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