// ==UserScript==
// @name NarouRankingFilter
// @namespace drownia.narourankingfilter
// @version 1.3
// @description なろうのランキングにフィルター機能を追加
// @author Drownia
// @homepage https://twitter.com/Dr0wnia
// @match https://yomou.syosetu.com/rank/list/type/*
// @match https://yomou.syosetu.com/rank/isekailist/type/*
// @match https://yomou.syosetu.com/rank/genrelist/type/*
// @require https://openuserjs.org/src/libs/sizzle/GM_config.js
// @grant GM_getValue
// @grant GM_setValue
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
// @downloadURL https://update.greasyfork.icu/scripts/374247/NarouRankingFilter.user.js
// @updateURL https://update.greasyfork.icu/scripts/374247/NarouRankingFilter.meta.js
// ==/UserScript==
GM_config.init({
'id': 'NarouRankingFilter',
'title': '小説家になろう ランキングフィルター',
'fields': {
'whitelist_em': {
'label': 'ホワイトリスト(完全一致)',
'type': 'textarea',
'default': ''
},
'blacklist_em': {
'label': 'ブラックリスト(完全一致)',
'type': 'textarea',
'default': ''
},
'whitelist_pm': {
'label': 'ホワイトリスト(部分一致)',
'type': 'textarea',
'default': ''
},
'blacklist_pm': {
'label': 'ブラックリスト(部分一致)',
'type': 'textarea',
'default': ''
}
},
'events': {
'save': function(forgotten) {
location.reload();
}
}
});
$(function() {
$('#header').append('
⚙️ランキングのフィルター設定を開く')
jQuery(document).on('click', '#open_config', function(){
GM_config.open();
});
var blank_line_reg = /^\n$/gm
GM_config.set('whitelist_em', GM_config.get('whitelist_em').replace(blank_line_reg, ''));
GM_config.set('blacklist_em', GM_config.get('blacklist_em').replace(blank_line_reg, ''));
GM_config.set('whitelist_pm', GM_config.get('whitelist_pm').replace(blank_line_reg, ''));
GM_config.set('blacklist_pm', GM_config.get('blacklist_pm').replace(blank_line_reg, ''));
var white_tag_em = GM_config.get('whitelist_em').split('\n');
var black_tag_em = GM_config.get('blacklist_em').split('\n');
var white_tag_pm = GM_config.get('whitelist_pm').split('\n');
var black_tag_pm = GM_config.get('blacklist_pm').split('\n');
if (black_tag_em == '') {black_tag_em[0] = 'DUMMYTAG'}
if (black_tag_pm == '') {black_tag_pm[0] = 'DUMMYTAG'}
var reg_white_em, reg_black_em, reg_white_pm, reg_black_pm;
reg_white_em = [];
reg_black_em = [];
reg_white_pm = [];
reg_black_pm = [];
for (var i = 0; i <= white_tag_em.length - 1; i++){
reg_white_em.push(new RegExp('(?<=)'));
}
for (i = 0; i <= black_tag_em.length - 1; i++){
reg_black_em.push(new RegExp('(?<=)'));
}
for (i = 0; i <= white_tag_pm.length - 1; i++){
reg_white_pm.push(new RegExp('(?<=)'));
}
for (i = 0; i <= black_tag_pm.length - 1; i++){
reg_black_pm.push(new RegExp('(?<=)'));
}
var rank = $('div.rank_h').map(function(i, obj) {
return [[obj, $('table.rank_table')[i]]];
});
var utf8_uri = new RegExp(
"%[0-7][0-9A-F]|"+
"%C[2-9A-F]%[89AB][0-9A-F]|%D[0-9A-F]%[89AB][0-9A-F]|"+
"%E[0-F](?:%[89AB][0-9A-F]){2}|"+
"%F[0-7](?:%[89AB][0-9A-F]){3}|"+
"%F[89AB](?:%[89AB][0-9A-F]){4}|"+
"%F[CD](?:%[89AB][0-9A-F]){5}","ig");
var filtered_rank = rank.filter(function(i) {
var white_em_bool, black_em_bool, white_pm_bool, black_pm_bool;
white_em_bool = [];
black_em_bool = [];
white_pm_bool = [];
black_pm_bool = [];
var replaced_white_em = $($('tr:nth-child(4)')[i]).prop('outerHTML').replace(utf8_uri, function(whole){
return decodeURI(whole);
})
for (var i2 = 0; i2 <= white_tag_em.length - 1; i2++){
white_em_bool.push(reg_white_em[i2].test(replaced_white_em));
}
var white_em_equals = new Array(white_em_bool.length);
for (i2 = 0; i2 <= white_em_bool.length - 1; i2++){
white_em_equals[i2] = true;
}
var replaced_black_em = $($('tr:nth-child(4)')[i]).prop('outerHTML').replace(utf8_uri, function(whole){
return decodeURI(whole);
});
for (i2 = 0; i2 <= black_tag_em.length - 1; i2++){
black_em_bool.push(!reg_black_em[i2].test(replaced_black_em));
};
var black_em_equals = new Array(black_em_bool.length);
for (i2 = 0; i2 <= black_em_bool.length - 1; i2++){
black_em_equals[i2] = true;
};
var replaced_white_pm = $($('tr:nth-child(4)')[i]).prop('outerHTML').replace(utf8_uri, function(whole){
return decodeURI(whole);
})
for (i2 = 0; i2 <= white_tag_pm.length - 1; i2++){
white_pm_bool.push(reg_white_pm[i2].test(replaced_white_pm));
}
var white_pm_equals = new Array(white_pm_bool.length);
for (i2 = 0; i2 <= white_pm_bool.length - 1; i2++){
white_pm_equals[i2] = true;
}
var replaced_black_pm = $($('tr:nth-child(4)')[i]).prop('outerHTML').replace(utf8_uri, function(whole){
return decodeURI(whole);
})
for (i2 = 0; i2 <= black_tag_pm.length - 1; i2++){
black_pm_bool.push(!reg_black_pm[i2].test(replaced_black_pm));
}
var black_pm_equals = new Array(black_pm_bool.length);
for (i2 = 0; i2 <= black_pm_bool.length - 1; i2++){
black_pm_equals[i2] = true;
}
return JSON.stringify(white_em_bool) == JSON.stringify(white_em_equals) &&
JSON.stringify(black_em_bool) == JSON.stringify(black_em_equals) &&
JSON.stringify(white_pm_bool) == JSON.stringify(white_pm_equals) &&
JSON.stringify(black_pm_bool) == JSON.stringify(black_pm_equals);
}).map(
function(i, obj) {
return [[obj[0], obj[1]]];
}
);
var url_reg = /\/rank\/list\/type\/.*/;
var modify_num = 1;
if (url_reg.test(location.pathname)) {
modify_num = 2
}
for (i = 0; i <= 325; i++) {
$('.ranking_list:nth-child(' + (i+modify_num) + ')').html($(filtered_rank[i]));
}
})