GTA 差事过滤 简单增强
// ==UserScript==
// @name gta jobs filter
// @namespace http://tampermonkey.net/
// @version 0.1
// @description GTA 差事过滤 简单增强
// @author alvin
// @match https://*.socialclub.rockstargames.com/jobs*
// @grant none
// @require http://code.jquery.com/jquery-2.1.1.min.js
// ==/UserScript==
(function() {
'use strict';
let timer;
// 把格式化的数字字符串逆转为数值
function unitFormat(input) {
let unit = input.substr(input.length-1, 1);
if (unit == 'k' || unit == 'K') {
return parseFloat(input.substr(0, input.length-1)) * 1000;
} else if (unit == 'm' || unit == 'M') {
return parseFloat(input.substr(0, input.length-1)) * 1000000;
} else if (unit == 'g' || unit == 'G') {
return parseFloat(input.substr(0, input.length-1)) * 1000000000;
}
return parseFloat(input);
}
// 自定义保留几位小数
function number(data, val) {
let factor = 1;
for (let i = 0; i < val; i++) {
factor = factor * 10;
}
return Math.floor(data * factor) / factor;
}
// 过滤毛子语
function russianFilter(content) {
if(/[а-яА-ЯЁё]/.test(content)){
return true;
}
return false;
}
// 定时修改隐藏已经修改的
function updateJobsList(FILTER_MIN, FILTER_MAX, FILTER_PLAY, FILTER_COLLECTED, FILTER_PLAYED, FILTER_RUSSIA)
{
// 执行过滤
$.each($('.UI__Card__card'), function(i,value){
// 点赞数
let liked = $(value).find('span')[1].innerHTML;
liked = unitFormat(liked);
// 点踩数
let unliked = $(value).find('span')[3].innerHTML;
unliked = unitFormat(unliked);
// 总评价数
let all = liked + unliked;
// 好评率
let rate = all != 0 ? (liked / all).toFixed(2) : 0;
let mark = false;
if (FILTER_MIN != 0 && rate < FILTER_MIN) { // 好评率最小值过滤
mark = true;
}
if (FILTER_MAX != 0 && rate > FILTER_MAX) { // 好评率最大值过滤
mark = true;
}
if (FILTER_PLAY != 0 && all <= FILTER_PLAY) { // 过滤至少游玩人数
mark = true;
}
if (FILTER_COLLECTED) { // 过滤已收藏
if ($(value).find('a.Social__liked__HZDh7').length > 0) {
mark = true;
}
}
if (FILTER_PLAYED) { // 过滤已经玩过
if ($(value).find('span.UgcCard__playedLabel__3rgOv').length > 0) {
mark = true;
}
}
if (FILTER_RUSSIA) { // 过滤毛子图
let name = $(value).find('h2.UgcCard__name__3asOk').html();
let description = $(value).find('div.UgcCard__description__2nOkP').html();
if (russianFilter(name) || russianFilter(description)) {
mark = true;
}
}
// 对标记过的差事进行清理,其他差事显示好评率
if (mark == true) {
$(value).remove();
} else {
$(value).find('span')[5].innerHTML = '' + number((rate*100), 2) + '%';
}
});
}
// 执行过滤
function execFilter() {
// 获取设置值
let FILTER_MAX = $('#gta_filter_rating_max').val(); // 好评率接受的最大值
let FILTER_MIN = $('#gta_filter_rating_min').val(); // 好评率接受的最小值
let FILTER_PLAY = $('#gta_filter_play').val(); // 最少游玩人数 0:禁用该过滤
let FILTER_COLLECTED = $('#gta_filter_collected')[0].checked; // 是否过滤已经收藏过的
let FILTER_PLAYED = $('#gta_filter_played')[0].checked; // 是否过滤已经玩过的
let FILTER_RUSSIA = $('#gta_filter_russian')[0].checked; // 毛子过滤器
updateJobsList(FILTER_MIN, FILTER_MAX, FILTER_PLAY, FILTER_COLLECTED, FILTER_PLAYED, FILTER_RUSSIA);
}
// 模拟下拉到最下方并过滤当前的数据
function scollWindow(status) {
if (status) {
timer = setInterval(function() {
scroll(0, document.body.scrollHeight); // 先下拉到当前位置,
execFilter(); // 然后对数据进行过滤
}, 500);
} else {
clearInterval(timer); // 停止定时器
execFilter();
}
}
// 插入输入框,按钮到页面中
function insertPageDiv() {
let div = document.createElement("div");
let divStr = '<div id="gta_jobs_filter_container" style="right:10px;bottom:20px;z-index: 9999;position: fixed;width: 200px;height: 200px;border:4px; background:#aaaaaa;color:red;">' +
'gta jobs fliter<br>' +
'过滤好评率:<input id="gta_filter_rating_min" value="0" style="width: 40px"/> - <input id="gta_filter_rating_max" value="0" style="width: 40px"/><br>' +
'过滤游玩数:<input id="gta_filter_play" value="0" style="width: 80px"/> <br>' +
'过滤已收藏:<input type="checkbox" id="gta_filter_collected"/> <br>' +
'过滤已玩过:<input type="checkbox" id="gta_filter_played"/> <br>' +
'过滤毛子图:<input type="checkbox" id="gta_filter_russian"/> <br>' +
'当前状态:<button id="gta_filter_button" style="border: none;color:white;background-color: #f44336;padding: 6px 14px;border-radius: 4px;text-align: center;text-decoration: none;display: inline-block;" id="gta_filter_button">关</button>'
'</div>';
div.innerHTML = divStr;
$('body').append(div);
}
function run() {
insertPageDiv();
$('html').css('overflow', 'scroll'); // 强制显示滚动条,否则无法滚动
// 绑定按钮事件
$('#gta_filter_button').click(function(){
if ($(this).html() == '关') {
$(this).html('开');
$('#gta_filter_button').css('background-color', '#4CAF50');
$('#gta_filter_rating_min').attr('readonly', true);
$('#gta_filter_rating_max').attr('readonly', true);
scollWindow(true); // 开始拉数据并过滤
} else {
scollWindow(false); // 停止拉数据
$(this).html('关');
$('#gta_filter_button').css('background-color', '#f44336');
$('#gta_filter_rating_min').attr('readonly', false);
$('#gta_filter_rating_max').attr('readonly', false);
}
});
}
run();
})();