// ==UserScript==
// @name 哔哩哔哩 - 屏蔽指定内容
// @namespace http://greasyfork.icu/zh-CN/users/193133-pana
// @homepage https://www.sailboatweb.com
// @version 3.17.0
// @description 实现可分别按用户名、关键字或正则表达式对视频(或直播间/相薄)和评论(或回复)进行屏蔽; 将鼠标移至网页右下角弹出悬浮按钮
// @author pana
// @include http*://www.bilibili.com/*
// @include http*://search.bilibili.com/*
// @include http*://live.bilibili.com/*
// @include http*://space.bilibili.com/*
// @include http*://t.bilibili.com/*
// @include http*://h.bilibili.com/*
// @include http*://manga.bilibili.com/*
// @include http*://message.bilibili.com/*
// @require https://cdnjs.cloudflare.com/ajax/libs/arrive/2.4.1/arrive.min.js
// @license GNU General Public License v3.0 or later
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_setClipboard
// @grant GM_registerMenuCommand
// @grant GM_addValueChangeListener
// @run-at document-start
// @noframes
// @note ----------------------------------------------------------------
// @note 与"Bilibili 旧播放页"脚本(http://greasyfork.icu/zh-CN/scripts/394296)的兼容问题:
// @note 如果同时启用脚本后发现本脚本无法保存设置到存储中,请前往脚本管理器调整脚本执行顺序。
// @note 具体方法可参考: http://greasyfork.icu/zh-CN/scripts/397669
// @note ----------------------------------------------------------------
// @note 更新记录:
// @note ver.3.17.0 处理与"Bilibili 旧播放页"脚本不兼容的问题
// @note ver.3.16.4 补充之前忘记匹配消息中心页面的问题; 补充覆盖番剧区页内的评论区; 修复了其他已知的问题
// @note ver.3.16.0 增加 "消息中心 >> 回复我的" 的相关屏蔽,同时允许自动删除通知
// @note ver.3.14.4 补充覆盖漫画页内的评论区
// @note ver.3.14.3 增加相薄区的相关屏蔽; 完善部分未被覆盖的页面内容; 调整了使用关键字匹配表情的逻辑
// @note ver.3.13.2 补充覆盖动态首页内的评论区
// @note ver.3.13.1 修复可能无法匹配到用户动态页的问题
// @note ver.3.13.0 实现多标签页同步数据; 调整取消按钮的行为; 覆盖视频播放完毕后的推荐视频; 兼容"Bilibili 旧播放页"脚本; 依旧存在的兼容问题: 在主页和视频播放页等页面下同时开启脚本时,本脚本无法保存设置到存储中
// @note ver.3.11.0 增加直播区的相关屏蔽; 覆盖个人动态内的评论; 添加展开列表按钮
// @note ver.3.7.1 添加删除按钮; 完善部分未被覆盖的页面内容
// @note ver.3.5.3 修复部分页面下输入框内容看不清以及其他小问题
// @note ver.3.5.0 优化代码; 完善部分未被覆盖的页面内容; 悬浮图标自动隐藏等
// @note ver.2.2.0 添加允许将评论中的 b 站内置表情包转换成对应文字的功能
// @note ver.2.1.2 修复储存正则表达式出错的问题; 优化代码
// @note ver.2.1.0 添加允许按正则表达式进行屏蔽的功能
// @note ver.2.0.0 调整了添加与删除关键字的方式,方便操作; 将评论与视频标题的关键词分开作用
// @note ver.1.2.1 完善部分未被覆盖的页面内容
// @note ver.1.2.0 添加屏蔽评论的功能
// @note ver.1.1.2 调整屏蔽按钮的位置到右下角; 尝试处理脚本偶尔会失效的问题
// @note ver.1.1.1 修复搜索页面以关键字屏蔽无效的问题
// @note ver.1.1.0 匹配视频播放页面; 优化代码
// ==/UserScript==
(function() {
'use strict';
try {
GM_registerMenuCommand('bilibili_屏蔽设置', function () {
expand_Wrap('wrapDiv');
});
} catch (e) {
console.error(e);
}
const OLD_URL = location.href;
const CHECKBOX_VALUE = {
'START': {
'id': 'startCheckbox',
'label': '启用屏蔽功能',
'title': '总开关'
},
'VIDEO_USERNAME': {
'id': 'videoUsernameCheckbox',
'label': '按用户名',
'title': '屏蔽指定用户发布的视频(或直播间/相薄)'
},
'VIDEO_KEYWORD': {
'id': 'videoKeywordCheckbox',
'label': '按关键字',
'title': '屏蔽标题中包含指定关键字的视频(或直播间/相薄)'
},
'VIDEO_REG': {
'id': 'videoRegCheckbox',
'label': '按正则',
'title': '屏蔽标题匹配指定正则表达式的视频(或直播间/相薄)',
},
'COMMENT_USERNAME': {
'id': 'commentUsernameCheckbox',
'label': '按用户名',
'title': '屏蔽指定用户发布的评论(或回复)'
},
'COMMENT_KEYWORD': {
'id': 'commentKeywordCheckbox',
'label': '按关键字',
'title': '屏蔽内容中包含指定关键字的评论(或回复)'
},
'COMMENT_REG': {
'id': 'commentRegCheckbox',
'label': '按正则',
'title': '屏蔽内容匹配指定正则表达式的评论(或回复)'
},
'CONVERT_EMOJI': {
'id': 'convertEmojiCheckbox',
'label': '表情转成文字',
'title': '判定时将表情包转换成对应的标识文字,例:[鸡腿]、[tv_白眼]等\n注意:使用关键字来匹配表情时,必须包含完整的中括号对;\n如 "鸡腿" 是无法匹配表情 [鸡腿] 的,需使用 "[鸡腿]" 进行匹配'
},
'LIVE': {
'id': 'liveCheckbox',
'label': '直播间',
'title': '扩展作用范围以同时允许屏蔽直播间'
},
'PIC': {
'id': 'picCheckbox',
'label': '相薄',
'title': '扩展作用范围以同时允许屏蔽相薄'
},
'MESSAGE_REPLY': {
'id': 'messageReplyCheckbox',
'label': '消息中心里的回复',
'title': '扩展作用范围以同时允许屏蔽消息中心里的回复'
},
'MESSAGE_REPLY_DEL': {
'id': 'messageReplyDelCheckbox',
'label': '自动删除回复通知',
'title': '同时将屏蔽的回复通知自动删除\n删除的记录可在控制台中查看\n请谨慎启用该选项,因为删除操作是不可逆的!'
}
};
const INPUT_VALUE = {
'USERNAME': {
'id': 'usernameInput',
'label': '输入:',
'placeholder': ' 多个时以半角逗号分隔 '
},
'VIDEO_KEYWORD': {
'id': 'videoKeywordInput',
'label': '输入:',
'placeholder': ' 多个时以半角逗号分隔 '
},
'COMMENT_KEYWORD': {
'id': 'commentKeywordInput',
'label': '输入:',
'placeholder': ' 多个时以半角逗号分隔 '
},
'VIDEO_REG': {
'id': 'videoRegInput',
'label': '输入:',
'placeholder': ' / 建议写成 \\/ '
},
'VIDEO_MODIFIER': {
'id': 'videoModifierInput',
'label': '修饰符:',
'placeholder': '如:gim'
},
'COMMENT_REG': {
'id': 'commentRegInput',
'label': '输入:',
'placeholder': ' / 建议写成 \\/ '
},
'COMMENT_MODIFIER': {
'id': 'commentModifierInput',
'label': '修饰符:',
'placeholder': '如:gim'
}
};
const TEXTAREA_VALUE = {
'USERNAME': {
'id': 'usernameTextarea'
},
'VIDEO_KEYWORD': {
'id': 'videoKeywordTextarea'
},
'COMMENT_KEYWORD': {
'id': 'commentKeywordTextarea'
},
'VIDEO_REG': {
'id': 'videoRegTextarea'
},
'COMMENT_REG': {
'id': 'commentRegTextarea'
}
};
const BUTTON_VALUE = {
'ADD': {
'className': 'input_btn',
'label': '添加',
'title': '添加内容到列表中'
},
'DELETE': {
'className': 'input_btn',
'label': '删除',
'title': '从列表中删除符合的项目'
},
'CLEAR': {
'className': 'input_btn',
'label': '清空',
'title': '清空列表'
},
'COPY': {
'className': 'input_btn',
'label': '复制',
'title': '复制列表',
'clickLabel': '复制完成'
},
'EXPAND': {
'className': 'input_btn',
'label': '展开',
'title': '展开列表',
'clickLabel': '恢复',
'clickTitle': '收缩列表'
},
'CANCEL': {
'className': 'user_block_button cancel_button',
'label': '取消',
'title': '关闭设置窗口'
},
'SAVE': {
'className': 'user_block_button save_button',
'label': '保存并关闭',
'title': '保存设置并关闭设置窗口'
},
'ONLY_SAVE': {
'className': 'user_block_button save_button',
'label': '仅保存',
'title': '仅保存设置',
'clickLabel': '已保存'
}
};
const MODULE = {
'USERNAME': {
'className': 'li_username'
},
'VIDEO_KEYWORD': {
'className': 'li_video_keyword'
},
'COMMENT_KEYWORD': {
'className': 'li_comment_keyword'
},
'VIDEO_REG': {
'className': 'li_video_reg'
},
'COMMENT_REG': {
'className': 'li_comment_reg'
}
};
const STYLE_VALUE = `
.expand_box {
bottom: 0px;
height: 6vh;
position: fixed;
right: -6vw;
transition: 0.5s;
width: 12vw;
z-index: 99999;
}
.show_expand_box {
right: 0;
width: 6vw;
}
#expandSpan {
background-color: #00A1D6;
border-radius: 19px;
border: 1px solid #00A1D6;
bottom: 1vh;
color: #FFF;
cursor: pointer;
display: block;
font-size: 13px;
height: 38px;
line-height: 38px;
position: absolute;
right: 1vw;
text-align: center;
width: 38px;
z-index: 99999;
}
#expandSpan:hover {
box-shadow: 0 0 5px 1px green;
}
#wrapDiv {
background-color: #222222;
border-radius: 3px;
border: 1px solid #282A36;
bottom: 6vh;
box-shadow: 0 0 5px #282A36;
color: #D3D3D3;
font-size: 13px;
margin: 0px;
padding: 0px;
position: fixed;
text-align: left;
transition: 0.8s;
width: 480px;
z-index: 99999;
}
.show_wrap {
display: block;
right: 0;
}
.hide_wrap {
right: -490px;
}
#mainTag {
border-radius: 3px;
border: 3px groove #00A1D6;
height: auto;
margin: 8px;
min-width: 300px;
padding: 4px 9px 6px 9px;
width: auto;
}
.ul_tag {
list-style: none;
padding-left: 0;
}
.checkbox_li {
display: inline-block;
margin-top: 5px;
}
.move_right {
margin-left: 15px;
}
.checkbox_label {
cursor: pointer;
vertical-align: middle;
}
.checkbox_input {
clip: rect(0, 0, 0, 0);
position: absolute;
}
.checkbox_input + label::before {
background-color: silver;
border-radius: 0.1em;
color: #FFF;
content: "\\a0";
display: inline-block;
height: 1em;
line-height: 85%;
margin-right: 0.5em;
text-align: center;
vertical-align: 0.2em;
width: 1em;
}
.checkbox_input:checked + label::before {
background-color: #00A1D6;
content: "\\2713";
}
.separator_text {
color: #FFB86C;
margin-bottom: 2px;
margin-top: 2px;
}
.separator_symbol {
background-color: #303030;
height: 2px;
margin-bottom: 5px;
margin-top: 5px;
min-width: 400px;
}
.input_div {
margin-top: 5px;
}
.user_block_input {
background-color: #C0C0C0;
border: 1px solid #C0C0C0;
color: #000;
font-size: 13px;
min-height: 15px;
margin-left: 5px;
margin-right: 5px;
padding-left: 4px;
}
.input_btn {
background-color: #3da9cc;
border-radius: 3px;
border: 1px solid #73C9E5;
box-shadow: 0 0 4px #73C9E5;
color: #FFF;
cursor: pointer;
display: inline-block;
min-height: 15px;
line-height: normal;
margin-left: 5px;
text-align: center;
vertical-align: bottom;
white-space: nowrap;
width: 30px;
}
.textarea_div {
margin-top: 5px;
}
.textarea_list_div {
border: 1px dotted #00A1D6;
margin-top: 3px;
max-height: 60px;
min-height: 3px;
overflow: auto;
}
.textarea_list_div::-webkit-scrollbar {
background-color: #979797;
border-radius: 5px;
width: 10px;
}
.textarea_list_div::-webkit-scrollbar-thumb {
background-color: #404040;
border-radius: 5px;
}
.textarea_copied {
color: #000;
}
.keyword_input {
width: 150px;
}
.reg_input {
width: 100px;
}
.modifier_input {
width: 50px;
}
.child_span {
background-color: #3D3D3D;
border-radius: 5px;
border: 1px solid #3D3D3D;
display: inline-block;
margin: 3px;
padding: 2px;
min-height: 18px;
line-height: normal;
}
.child_text {
border-right: 1px solid #A9181C;
margin-right: 4px;
padding-right: 4px;
}
.child_del {
color: #A9181C;
cursor: pointer;
}
.user_block_button {
background-color: #FB7299;
border-radius: 4px;
border: 1px solid #FB7299;
color: #FFF;
cursor: pointer;
margin-top: 5px;
padding: 2px 4px;
position: relative;
min-height: 17px;
line-height: normal;
}
.save_button {
float: right;
margin-right: 5px;
}
.cancel_button {
float: left;
margin-left: 5px;
}
.block_none {
display: none !important;
}
.block_hidden {
visibility: hidden;
}
.li_hide {
display: none;
}
.textarea_expand {
max-height: 720px;
}
.separator_li {
margin-top: 5px;
}
`;
var bilibili_config = {
functionEnable: true,
usernameEnable: true,
keywordEnable: true,
commentEnable: false,
commentKeywordEnable: false,
regEnable: false,
commentRegEnable: false,
convertEmojiEnable: false,
liveEnable: false,
picEnable: false,
messageReplyEnable: false,
messageReplyDelEnable: false,
usernameArray: [],
keywordArray: [],
commentArray: [],
regArray: [],
commentRegArray: []
};
var reg_config = {
regArray: [],
commentRegArray: []
};
var del_num = 0;
var record_button = [];
function string_2_Array(text_string) {
let temp_array = text_string.split(',');
let return_array = [];
for (let i = 0, l = temp_array.length; i < l; i++) {
for (let j = i + 1; j < l; j++) {
if (temp_array[i] === temp_array[j]) {
++i;
j = i;
}
}
return_array.push(temp_array[i]);
}
return return_array;
}
function array_2_String(text_array) {
return text_array.join(',');
}
function compare_Reg(reg_array, reg_value) {
let string_array = [];
reg_array.forEach(function(item) {
string_array.push(item.toString());
});
let reg_string = reg_value;
return string_array.includes(reg_string);
}
function convert_Array(string_array) {
let re_arr = [];
for (let i = 0; i < string_array.length; i ++) {
if (string_array[i]) {
try {
let new_reg = new RegExp(string_array[i].replace(/^\/|\/[a-z]*$/gi, ''), string_array[i].replace(/^\/.*\/[^a-z]*/i, ''));
re_arr.push(new_reg);
} catch (e) {
console.error('bilibili_BLock Ver.2.1.2: The transformation contains invalid regular expressions.');
console.error(e);
}
}
}
return re_arr;
}
function extract_Array(list_id) {
let re_arr = [];
let list_dom = document.getElementById(list_id);
let list_arr = list_dom.getElementsByClassName('BilibiliTextSpan');
for (let i = list_arr.length - 1; i >= 0; i --) {
if (list_arr[i].title) {
re_arr.push(list_arr[i].title);
} else {
re_arr.push(list_arr[i].textContent);
}
}
return re_arr;
}
function del_Child(input_tag, list_id) {
let text_value = input_tag.value;
if (text_value) {
let del_status = false;
let text_arr = string_2_Array(text_value);
let save_arr = extract_Array(list_id);
text_arr.forEach(function(item) {
if (save_arr.includes(item)) {
let total_child = document.getElementById(list_id).getElementsByClassName('child_span');
try {
document.getElementById(list_id).removeChild(total_child[total_child.length - 1 - save_arr.indexOf(item)]);
del_status = true;
} catch (e) {
del_status = false;
console.error('bilibili_BLock Ver.3.6.0: Error deleting element.');
console.error(e);
}
}
});
if (del_status) {
input_tag.value = '';
}
}
}
function add_Child(input_tag, list_id) {
let text_value = input_tag.value;
if (text_value) {
let text_arr = string_2_Array(text_value);
let save_arr = extract_Array(list_id);
text_arr.forEach(function(item) {
if (! save_arr.includes(item)) {
document.getElementById(list_id).insertAdjacentElement('afterbegin', create_Child(item));
}
});
}
input_tag.value = '';
}
function del_Reg_Child(reg_input, modifier_input, list_id) {
let reg_value = reg_input.value;
let modifier_value = modifier_input.value;
if (reg_value) {
let del_status = false;
try {
let reg_str = new RegExp(reg_value, modifier_value);
let save_arr = extract_Array(list_id);
if (save_arr.includes(reg_str.toString())) {
let total_child = document.getElementById(list_id).getElementsByClassName('child_span');
document.getElementById(list_id).removeChild(total_child[total_child.length - 1 - save_arr.indexOf(reg_str.toString())]);
del_status = true;
}
} catch (e) {
del_status = false;
console.error('bilibili_BLock Ver.3.6.0: Invalid regular expression or error deleting element.');
console.error(e);
}
if (del_status) {
reg_input.value = '';
modifier_input.value = '';
}
}
}
function add_Reg_Child(reg_input, modifier_input, list_id) {
let reg_value = reg_input.value;
let modifier_value = modifier_input.value;
if (reg_value) {
try {
let reg_str = new RegExp(reg_value, modifier_value);
let save_arr = extract_Array(list_id);
if (! save_arr.includes(reg_str.toString())) {
document.getElementById(list_id).insertAdjacentElement('afterbegin', create_Child(reg_str.toString()));
}
reg_input.value = '';
modifier_input.value = '';
} catch (e) {
console.error('bilibili_Block Ver.2.1.0: Invalid regular expression.');
console.error(e);
}
}
}
function expand_Wrap(id_value) {
if (document.getElementById(id_value)) {
if (document.getElementById(id_value).className == 'show_wrap') {
document.getElementById(id_value).className = 'hide_wrap';
document.getElementById('expandSpan').title = '显示屏蔽设置';
} else {
document.getElementById(id_value).className = 'show_wrap';
document.getElementById('expandSpan').title = '隐藏屏蔽设置';
}
}
}
function insert_Separator(ul_node, text_value = '', li_class_name = '') {
let temp_li = document.createElement('li');
temp_li.className = 'separator_li';
if (li_class_name) {
temp_li.classList.add(li_class_name);
}
let temp_div = document.createElement('div');
if (text_value) {
temp_div.className = 'separator_text';
temp_div.textContent = text_value;
} else {
temp_div.className = 'separator_symbol';
}
temp_li.appendChild(temp_div);
ul_node.appendChild(temp_li);
}
function insert_Checkbox(ul_node, li_obj, check_enable_value, margin_status = true) {
let temp_li = document.createElement('li');
temp_li.className = 'checkbox_li';
if (margin_status) {
temp_li.classList.add('move_right');
}
let temp_input = document.createElement('input');
temp_input.type = 'checkbox';
temp_input.className = 'checkbox_input';
temp_input.id = li_obj.id;
if (check_enable_value) {
temp_input.checked = true;
} else {
temp_input.checked = false;
}
let temp_label = document.createElement('label');
temp_label.className = 'checkbox_label';
temp_label.setAttribute('for', li_obj.id);
temp_label.textContent = li_obj.label;
temp_label.title = li_obj.title;
temp_li.appendChild(temp_input);
temp_li.appendChild(temp_label);
ul_node.appendChild(temp_li);
}
function insert_Input(ul_node, li_obj, list_id, li_class_name) {
let temp_li = document.createElement('li');
temp_li.className = li_class_name;
let temp_div = document.createElement('div');
temp_div.className = 'input_div';
temp_div.textContent = li_obj.label;
let temp_input = document.createElement('input');
temp_input.id = li_obj.id;
temp_input.placeholder = li_obj.placeholder;
temp_input.type = 'text';
temp_input.className = 'user_block_input keyword_input';
temp_input.addEventListener('keyup', function(e) {
if (e.keyCode === 13) {
add_Child(temp_input, list_id);
}
});
let add_btn = create_Span_Btn(BUTTON_VALUE.ADD, function() {
add_Child(temp_input, list_id);
});
let delete_btn = create_Span_Btn(BUTTON_VALUE.DELETE, function() {
del_Child(temp_input, list_id);
});
let clear_btn = create_Span_Btn(BUTTON_VALUE.CLEAR, function() {
document.getElementById(list_id).innerHTML = '';
});
let copy_btn = create_Span_Btn(BUTTON_VALUE.COPY, function() {
GM_setClipboard(array_2_String(extract_Array(list_id)));
copy_btn.classList.add('textarea_copied');
copy_btn.title = BUTTON_VALUE.COPY.clickLabel;
});
let expand_btn = create_Span_Btn(BUTTON_VALUE.EXPAND, function() {
toggle_Li(li_class_name);
if (expand_btn.textContent == BUTTON_VALUE.EXPAND.label) {
expand_btn.textContent = BUTTON_VALUE.EXPAND.clickLabel;
expand_btn.title = BUTTON_VALUE.EXPAND.clickTitle;
} else {
expand_btn.textContent = BUTTON_VALUE.EXPAND.label;
expand_btn.title = BUTTON_VALUE.EXPAND.title;
}
});
temp_div.appendChild(temp_input);
temp_div.appendChild(add_btn);
temp_div.appendChild(delete_btn);
temp_div.appendChild(clear_btn);
temp_div.appendChild(copy_btn);
temp_div.appendChild(expand_btn);
temp_li.appendChild(temp_div);
ul_node.appendChild(temp_li);
}
function insert_Reg_Input(ul_node, reg_obj, modifier_obj, list_id, li_class_name) {
let temp_li = document.createElement('li');
temp_li.className = li_class_name;
let temp_div = document.createElement('div');
temp_div.className = 'input_div';
let reg_span = document.createElement('span');
reg_span.textContent = reg_obj.label;
let reg_input = document.createElement('input');
reg_input.id = reg_obj.id;
reg_input.placeholder = reg_obj.placeholder;
reg_input.type = 'text';
reg_input.className = 'user_block_input reg_input';
let modifier_span = document.createElement('span');
modifier_span.textContent = modifier_obj.label;
let modifier_input = document.createElement('input');
modifier_input.id = modifier_obj.id;
modifier_input.placeholder = modifier_obj.placeholder;
modifier_input.type = 'text';
modifier_input.className = 'user_block_input modifier_input';
let add_btn = create_Span_Btn(BUTTON_VALUE.ADD, function() {
add_Reg_Child(reg_input, modifier_input, list_id);
});
let delete_btn = create_Span_Btn(BUTTON_VALUE.DELETE, function() {
del_Reg_Child(reg_input, modifier_input, list_id);
});
let clear_btn = create_Span_Btn(BUTTON_VALUE.CLEAR, function() {
document.getElementById(list_id).innerHTML = '';
});
let copy_btn = create_Span_Btn(BUTTON_VALUE.COPY, function() {
GM_setClipboard(array_2_String(extract_Array(list_id)));
copy_btn.classList.add('textarea_copied');
copy_btn.title = BUTTON_VALUE.COPY.clickLabel;
});
let expand_btn = create_Span_Btn(BUTTON_VALUE.EXPAND, function() {
toggle_Li(li_class_name);
if (expand_btn.textContent == BUTTON_VALUE.EXPAND.label) {
expand_btn.textContent = BUTTON_VALUE.EXPAND.clickLabel;
expand_btn.title = BUTTON_VALUE.EXPAND.clickTitle;
} else {
expand_btn.textContent = BUTTON_VALUE.EXPAND.label;
expand_btn.title = BUTTON_VALUE.EXPAND.title;
}
});
modifier_span.appendChild(modifier_input);
reg_span.appendChild(reg_input);
temp_div.appendChild(reg_span);
temp_div.appendChild(modifier_span);
temp_div.appendChild(add_btn);
temp_div.appendChild(delete_btn);
temp_div.appendChild(clear_btn);
temp_div.appendChild(copy_btn);
temp_div.appendChild(expand_btn);
temp_li.appendChild(temp_div);
ul_node.appendChild(temp_li);
}
function insert_Textarea(ul_node, li_obj, save_array, li_class_name) {
let temp_li = document.createElement('li');
temp_li.className = li_class_name;
let temp_div = document.createElement('div');
temp_div.className = 'textarea_div';
let list_div = document.createElement('div');
list_div.className = 'BilibiliListDiv';
list_div.id = li_obj.id;
list_div.className = 'textarea_list_div';
for (let item of save_array) {
if (item) {
list_div.insertAdjacentElement('afterbegin', create_Child(item));
}
}
temp_div.appendChild(list_div);
temp_li.appendChild(temp_div);
ul_node.appendChild(temp_li);
}
function create_Span_Btn(value_obj, callback) {
let temp_span = document.createElement('span');
temp_span.className = value_obj.className;
temp_span.textContent = value_obj.label;
temp_span.title = value_obj.title;
temp_span.addEventListener('click', function(e) {
callback(e);
}, false);
return temp_span;
}
function create_Child(text_value) {
let temp_span = document.createElement('span');
temp_span.className = 'child_span';
let text_span = document.createElement('span');
text_span.className = 'BilibiliTextSpan child_text';
text_span.textContent = (text_value.length > 9 ? text_value.slice(0, 3) + '...' + text_value.slice(-3) : text_value);
if (text_value.length > 9) {
text_span.title = text_value;
}
let del_span = document.createElement('span');
del_span.textContent = 'X';
del_span.title = '移除';
del_span.className = 'child_del';
del_span.addEventListener('click', function() {
temp_span.parentNode.removeChild(temp_span);
});
temp_span.appendChild(text_span);
temp_span.appendChild(del_span);
return temp_span;
}
function toggle_Li(li_class_name) {
for (let li of document.querySelectorAll('ul.ul_tag li')) {
if (li.classList.contains(li_class_name)) {
if (li.querySelector('.textarea_list_div')) {
let textarea = li.querySelector('.textarea_list_div');
if (textarea.classList.contains('textarea_expand')) {
textarea.classList.remove('textarea_expand');
} else {
textarea.classList.add('textarea_expand');
}
}
} else {
if (li.classList.contains('li_hide')) {
li.classList.remove('li_hide');
} else {
li.classList.add('li_hide');
}
}
}
}
function display_Del(panel_id, num) {
if (document.getElementById(panel_id)) {
document.getElementById(panel_id).textContent = ' (自动删除了 ' + num + ' 条通知)';
} else {
let del_panel = document.createElement('span');
del_panel.id = panel_id;
del_panel.textContent = ' (自动删除了 ' + num + ' 条通知)';
document.querySelector('.space-right-top .title').appendChild(del_panel);
}
}
function decide_Text(text_value, is_comment = false, is_live = false, is_pic = false, source_text = null, is_message_reply = false) {
let is_decide = false;
let is_decide_comment = false;
if (bilibili_config.functionEnable && text_value) {
if (is_comment) {
if (is_message_reply) {
if (bilibili_config.messageReplyEnable) {
is_decide_comment = true;
}
} else {
is_decide_comment = true;
}
} else if (is_live) {
if (bilibili_config.liveEnable) {
is_decide = true;
}
} else if (is_pic) {
if (bilibili_config.picEnable) {
is_decide = true;
}
} else {
is_decide = true;
}
}
if (is_decide) {
if (bilibili_config.keywordEnable) {
for (let k of bilibili_config.keywordArray) {
if (k && text_value.indexOf(k) !== -1) {
return true;
}
}
}
if (bilibili_config.regEnable) {
try {
for (let l of reg_config.regArray) {
if (l.test(text_value)) {
return true;
}
}
} catch (e) {
console.error('bilibili_BLock Ver.2.1.0: Invalid regular expression for comparison.');
console.error(e);
return false;
}
}
} else if (is_decide_comment) {
if (bilibili_config.commentKeywordEnable) {
for (let i of bilibili_config.commentArray) {
if (i) {
if (text_value.indexOf(i) !== -1) {
if (source_text) {
if (source_text.indexOf(i) !== -1) {
return true;
} else if (/\[.*\]/i.test(i)) {
return true;
}
} else {
return true;
}
} else if (source_text && /\[.*\]/i.test(i)) {
if (source_text.indexOf(i) !== -1) {
return true;
}
}
}
}
}
if (bilibili_config.commentRegEnable) {
try {
for (let j of reg_config.commentRegArray) {
if (j.test(text_value)) {
return true;
} else if (source_text) {
if (j.test(source_text)) {
return true;
}
}
}
} catch (e) {
console.error('bilibili_BLock Ver.2.1.0: Invalid regular expression for comparison.');
console.error(e);
return false;
}
}
}
return false;
}
function decide_Username(username, is_comment = false, is_live = false, is_pic = false, is_message_reply = false) {
let is_decide = false;
if (bilibili_config.functionEnable && username) {
if (is_comment) {
if (bilibili_config.commentEnable) {
if (is_message_reply) {
if (bilibili_config.messageReplyEnable) {
is_decide = true;
}
} else {
is_decide = true;
}
}
} else if (is_live) {
if (bilibili_config.liveEnable) {
if (bilibili_config.usernameEnable) {
is_decide = true;
}
}
} else if (is_pic) {
if (bilibili_config.picEnable) {
if (bilibili_config.usernameEnable) {
is_decide = true;
}
}
} else {
if (bilibili_config.usernameEnable) {
is_decide = true;
}
}
}
if (is_decide) {
if (bilibili_config.usernameArray.includes(username)) {
return true;
}
}
return false;
}
function hide_Operation(node, hide_status, method = 0) {
if (hide_status) {
if (method === 0) {
node.classList.add('block_none');
} else if (method === 1) {
node.classList.add('block_hidden');
} else if (method === 2) {
node.style.display = 'none';
} else if (method === 3) {
node.style.visibility = 'hidden';
}
} else {
if (method === 0) {
node.classList.remove('block_none');
} else if (method === 1) {
node.classList.remove('block_hidden');
} else if (method === 2) {
node.style.display = '';
} else if (method === 3) {
node.style.visibility = '';
}
}
}
function hide_Handle(item_node, username, text_value, method = 0, type = {}) {
if (username) {
if (typeof(username) === 'object') {
username = username.textContent;
}
}
if (text_value) {
if (typeof(text_value) === 'object') {
text_value = text_value.textContent;
}
}
let is_comment = type.comment ? true : false;
let is_message_reply = type.messageReply ? true : false;
let del_button = type.delButton ? type.delButton : null;
let is_live = type.live ? true : false;
let is_pic =type.pic ? true :false;
let source_text = type.sourceText ? type.sourceText : null;
let hide_status = false;
if (decide_Username(username, is_comment, is_live, is_pic, is_message_reply)) {
hide_status = true;
} else if (decide_Text(text_value, is_comment, is_live, is_pic, source_text, is_message_reply)) {
hide_status = true;
} else {
hide_status = false;
}
if (item_node.constructor == Array) {
for (let ele_node of item_node) {
if (ele_node) {
hide_Operation(ele_node, hide_status, method);
}
}
} else {
hide_Operation(item_node, hide_status, method);
}
if (hide_status) {
if (del_button) {
if (bilibili_config.messageReplyDelEnable && (! record_button.includes(del_button))) {
record_button.push(del_button);
del_button.click();
console.info('%c自动删除通知:', 'color: purple;', '\n用户名:', username, '\n评论内容:', text_value);
del_num ++;
display_Del('messageDelPanel', del_num);
}
}
}
}
function hide_Event() {
if (OLD_URL.indexOf('www.bilibili.com') !== -1) {
let video_common_card = document.getElementsByClassName('video-card-common');
for (let video_common_card_item of video_common_card) {
let username = '';
if (video_common_card_item.querySelector('a.up')) {
username = video_common_card_item.querySelector('a.up').textContent.replace(/\s+$/i, '');
}
if (video_common_card_item.querySelector('a.ex-up')) {
username = video_common_card_item.querySelector('a.ex-up').textContent.replace(/\s+$/i, '');
}
let text_value = '';
if (video_common_card_item.querySelector('a.title')) {
text_value = video_common_card_item.querySelector('a.title');
}
if (video_common_card_item.querySelector('p.ex-title')) {
text_value = video_common_card_item.querySelector('p.ex-title');
}
hide_Handle(video_common_card_item, username, text_value, 1);
}
let video_card_reco = document.getElementsByClassName('video-card-reco');
for (let video_card_reco_item of video_card_reco) {
let username = '';
if (video_card_reco_item.querySelector('p.up')) {
username = video_card_reco_item.querySelector('p.up').textContent.replace(/\s+$/i, '');
}
hide_Handle(video_card_reco_item, username, video_card_reco_item.querySelector('p.title'));
}
let van_slide = document.querySelectorAll('.van-slide div.item');
for (let van_slide_item of van_slide) {
hide_Handle(van_slide_item, '', van_slide_item.querySelector('p.title'));
}
let rank_wrap = document.getElementsByClassName('rank-wrap');
for (let rank_wrap_item of rank_wrap) {
let text_value = '';
if (rank_wrap_item.querySelector('p.f-title')) {
text_value = rank_wrap_item.querySelector('p.f-title');
}
if (rank_wrap_item.querySelector('p.title')) {
text_value = rank_wrap_item.querySelector('p.title');
}
if (rank_wrap_item.querySelector('div.txt a.link p')) {
text_value = rank_wrap_item.querySelector('div.txt a.link p');
}
hide_Handle(rank_wrap_item, rank_wrap_item.querySelector('span.name'), text_value);
}
let article_card = document.getElementsByClassName('article-card');
for (let article_card_item of article_card) {
hide_Handle(article_card_item, article_card_item.querySelector('a.up'), article_card_item.querySelector('a.title'), 1);
}
let live_card = document.getElementsByClassName('live-card');
for (let live_card_item of live_card) {
hide_Handle(live_card_item, live_card_item.querySelector('p.name'), live_card_item.querySelector('p.desc'), 1, {'live': true});
}
let card_live_module = document.getElementsByClassName('card-live-module');
for (let card_live_module_item of card_live_module) {
hide_Handle(card_live_module_item, card_live_module_item.querySelector('.auther'), card_live_module_item.querySelector('p.t'), 1, {'live': true});
}
let live_rank = document.getElementsByClassName('live-rank-item');
for (let live_rank_item of live_rank) {
hide_Handle(live_rank_item, live_rank_item.querySelector('div.txt > p'), live_rank_item.querySelector('p.p2'), 0, {'live': true});
}
let manga_card = document.getElementsByClassName('manga-card');
for (let manga_card_item of manga_card) {
hide_Handle(manga_card_item, '', manga_card_item.querySelector('p.manga-title'), 1);
}
let manga_spread_module = document.getElementsByClassName('manga-spread-module');
for (let manga_spread_module_item of manga_spread_module) {
hide_Handle(manga_spread_module_item, null, manga_spread_module_item.querySelector('p.t'), 1);
}
let spread_module = document.getElementsByClassName('spread-module');
for (let spread_module_item of spread_module) {
hide_Handle(spread_module_item, '', spread_module_item.querySelector('p.t'));
}
let groom_module = document.getElementsByClassName('groom-module');
for (let groom_module_item of groom_module) {
let username = '';
if (groom_module_item.querySelector('p.author')) {
username = groom_module_item.querySelector('p.author').textContent.replace(/^up主:|\s+$/i, '');
}
hide_Handle(groom_module_item, username, groom_module_item.querySelector('p.title'));
}
try {
let carousel_module_panel = document.querySelector('.carousel-module .panel');
if (carousel_module_panel) {
let carousel_module_panel_title = carousel_module_panel.querySelectorAll('ul.title a');
let carousel_module_panel_pic = carousel_module_panel.querySelectorAll('ul.pic li');
let carousel_module_panel_trig = carousel_module_panel.querySelectorAll('ul.trig span');
for (let panel_index = 0; panel_index < carousel_module_panel_title.length; panel_index ++) {
hide_Handle([ carousel_module_panel_title[panel_index], carousel_module_panel_pic[panel_index], carousel_module_panel_trig[panel_index] ], '', carousel_module_panel_title[panel_index], 3);
}
}
} catch (e) {
console.error('bilibili_BLock Ver.3.7.0: Variable carousel_module_panel is error.');
console.error(e);
}
let rank_item = document.getElementsByClassName('rank-item');
for (let rank_item_ele of rank_item) {
let text_value = '';
if (rank_item_ele.querySelector('p.ri-title')) {
text_value = rank_item_ele.querySelector('p.ri-title');
}
if (rank_item_ele.querySelector('a.title')) {
text_value = rank_item_ele.querySelector('a.title');
}
hide_Handle(rank_item_ele, rank_item_ele.querySelector('.detail > a'), text_value);
}
let recent_hot = document.querySelectorAll('div#recent_hot li');
for (let recent_hot_item of recent_hot) {
hide_Handle(recent_hot_item, '', recent_hot_item.title);
}
let vd_list = document.querySelectorAll('ul.vd-list li');
for (let vd_list_item of vd_list) {
hide_Handle(vd_list_item, vd_list_item.querySelector('a.v-author'), vd_list_item.querySelector('a.title'));
}
let video_page_card = document.getElementsByClassName('video-page-card');
for (let video_page_card_item of video_page_card) {
hide_Handle(video_page_card_item, video_page_card_item.querySelector('div.up'), video_page_card_item.querySelector('a.title'));
}
let bilibili_player_recommend_video = document.getElementsByClassName('bilibili-player-recommend-video');
for (let bilibili_player_recommend_video_item of bilibili_player_recommend_video) {
hide_Handle(bilibili_player_recommend_video_item, null, bilibili_player_recommend_video_item.querySelector('.bilibili-player-recommend-title'));
}
let bilibili_player_ending_panel_box_recommend = document.querySelectorAll('a.bilibili-player-ending-panel-box-recommend');
for (let bilibili_player_ending_panel_box_recommend_item of bilibili_player_ending_panel_box_recommend) {
hide_Handle(bilibili_player_ending_panel_box_recommend_item, null, bilibili_player_ending_panel_box_recommend_item.querySelector('.bilibili-player-ending-panel-box-recommend-cover-title'));
}
let read_rank_list = document.querySelectorAll('.rank-list li.item');
for (let read_rank_list_item of read_rank_list) {
hide_Handle(read_rank_list_item, '', read_rank_list_item.querySelector('> a'));
}
if (OLD_URL.indexOf('www.bilibili.com/video/') !== -1 || OLD_URL.indexOf('www.bilibili.com/bangumi/') !== -1) {
hide_Comment();
}
if (OLD_URL.indexOf('www.bilibili.com/read/ranking')) {
let article_list = document.querySelectorAll('.article-list li');
for (let article_list_item of article_list) {
hide_Handle(article_list_item, article_list_item.querySelector('.nick-name'), article_list_item.querySelector('.article-title'));
}
}
} else if (OLD_URL.indexOf('search.bilibili.com') !== -1) {
let video_item = document.getElementsByClassName('video-item');
for (let video_item_ele of video_item) {
hide_Handle(video_item_ele, video_item_ele.querySelector('a.up-name'), video_item_ele.querySelector('a.title'));
}
let live_user_item = document.getElementsByClassName('live-user-item');
for (let live_card_item_ele of live_user_item) {
hide_Handle(live_card_item_ele, live_card_item_ele.querySelector('.uname'), null, 0, {'live': true});
}
let live_room_item = document.getElementsByClassName('live-room-item');
for (let live_room_item_ele of live_room_item) {
hide_Handle(live_room_item_ele, live_room_item_ele.querySelector('.uname span'), live_room_item_ele.querySelector('.item-title'), 0, {'live': true});
}
let photo_item = document.getElementsByClassName('photo-item');
for (let photo_item_ele of photo_item) {
hide_Handle(photo_item_ele, photo_item_ele.querySelector('.up-name'), photo_item_ele.querySelector('.title'), 0, {'pic': true});
}
} else if (OLD_URL.indexOf('live.bilibili.com') !== -1) {
let rank_item = document.getElementsByClassName('rank-item');
for (let rank_item_ele of rank_item) {
hide_Handle(rank_item_ele, rank_item_ele.querySelector('.room-anchor'), rank_item_ele.querySelector('.room-title'), 0, {'live': true});
}
let room_crad_wrapper= document.getElementsByClassName('room-card-wrapper');
for (let room_crad_wrapper_item of room_crad_wrapper) {
hide_Handle(room_crad_wrapper_item, room_crad_wrapper_item.querySelector('.room-anchor > span'), room_crad_wrapper_item.querySelector('.room-title'), 0, {'live': true});
}
let ysly_room_ctnr = document.querySelectorAll('.ysly-room-ctnr li');
for (let ysly_room_ctnr_item of ysly_room_ctnr) {
hide_Handle(ysly_room_ctnr_item, ysly_room_ctnr_item.querySelector('.uname'), ysly_room_ctnr_item.querySelector('.room-name'), 0, {'live': true});
}
let list = document.querySelectorAll('ul.list li');
for (let list_item of list) {
hide_Handle(list_item, list_item.querySelector('.room-anchor > span'), list_item.querySelector('.room-title'), 0, {'live': true});
}
let card_items = document.querySelectorAll('.card-items li');
for (let card_items_ele of card_items) {
hide_Handle(card_items_ele, card_items_ele.querySelector('.uname'), card_items_ele.querySelector('.room-name'), 0, {'live': true});
}
hide_Comment();
} else if (/(t|manga|space)\.bilibili\.com/.test(OLD_URL)) {
hide_Comment();
} else if (/h\.bilibili\.com/.test(OLD_URL)) {
let a_fade_in = document.querySelectorAll('.content li');
for (let a_fade_in_item of a_fade_in) {
hide_Handle(a_fade_in_item, a_fade_in_item.querySelector('.user-container a span'), a_fade_in_item.querySelector('.article-title a'), 0, {'pic': true});
}
let rank_list = document.querySelectorAll('.rank-list > div');
for (let rank_list_item of rank_list) {
let username = '';
if (rank_list_item.querySelector('.name')) {
username = rank_list_item.querySelector('.name');
}
if (rank_list_item.querySelector('.user-name')) {
username = rank_list_item.querySelector('.user-name');
}
let text_value = '';
if (rank_list_item.querySelector('.title')) {
text_value = rank_list_item.querySelector('.title');
}
if (rank_list_item.querySelector('.work-name')) {
text_value = rank_list_item.querySelector('.work-name');
}
hide_Handle(rank_list_item, username, text_value, 0, {'pic': true});
}
let canvas_card = document.querySelectorAll('.canvas-card');
for (let canvas_card_item of canvas_card) {
hide_Handle(canvas_card_item, canvas_card_item.querySelector('.user-container a span'), canvas_card_item.querySelector('.article-title a'), 1, {'pic': true});
}
hide_Comment();
} else if (/message\.bilibili\.com\/#\/reply/.test(OLD_URL)) {
let reply_item = document.getElementsByClassName('reply-item');
for (let reply_item_ele of reply_item) {
let next_node = null;
if (reply_item_ele.nextElementSibling) {
if (reply_item_ele.nextElementSibling.classList.contains('divider')) {
next_node = reply_item_ele.nextElementSibling;
}
}
let source_text = reply_item_ele.querySelector('.text').textContent;
if (bilibili_config.convertEmojiEnable) {
let convert_text = reply_item_ele.querySelector('.text span').innerHTML.replace(/<img.*alt="(.*)".*>/g, "$1");
hide_Handle([reply_item_ele, next_node], reply_item_ele.querySelector('.name-field a'), convert_text, 0, {'comment': true, 'messageReply': true, 'sourceText': source_text, 'delButton': reply_item_ele.querySelector('.bl-button--primary')});
} else {
hide_Handle([reply_item_ele, next_node], reply_item_ele.querySelector('.name-field a'), source_text, 0, {'comment': true, 'messageReply': true, 'delButton': reply_item_ele.querySelector('.bl-button--primary')});
}
}
}
}
function hide_Comment() {
let comment_list = document.querySelectorAll('.comment-list .list-item');
for (let comment_list_item of comment_list) {
let source_text = comment_list_item.querySelector('.con > p.text').textContent;
if (bilibili_config.convertEmojiEnable) {
let convert_text = comment_list_item.querySelector('.con > p.text').innerHTML.replace(/<img.*alt="(.*)".*>/g, "$1");
hide_Handle(comment_list_item, comment_list_item.querySelector('.con > .user a.name'), convert_text, 0, {'comment': true, 'sourceText': source_text});
} else {
hide_Handle(comment_list_item, comment_list_item.querySelector('.con > .user a.name'), source_text, 0, {'comment': true});
}
}
let reply_comment_list = document.querySelectorAll('.comment-list .reply-item');
for (let reply_comment_list_item of reply_comment_list) {
let reply_source_text = reply_comment_list_item.querySelector('.reply-con .text-con').textContent;
if (bilibili_config.convertEmojiEnable) {
let reply_convert_text = reply_comment_list_item.querySelector('.reply-con .text-con').innerHTML.replace(/<img.*alt="(.*)".*>/g, "$1");
hide_Handle(reply_comment_list_item, reply_comment_list_item.querySelector('.reply-con .user a.name'), reply_convert_text, 0, {'comment': true, 'sourceText': reply_source_text});
} else {
hide_Handle(reply_comment_list_item, reply_comment_list_item.querySelector('.reply-con .user a.name'), reply_source_text, 0, {'comment': true});
}
}
}
function init_Bilibili() {
let style_dom = document.createElement('style');
style_dom.type = 'text/css';
style_dom.innerHTML = STYLE_VALUE;
let expand_box = document.createElement('div');
expand_box.className = 'expand_box';
expand_box.onmouseenter = function() {
this.classList.add('show_expand_box');
};
expand_box.onmouseleave = function() {
this.classList.remove('show_expand_box');
};
let expand_span = document.createElement('span');
expand_span.id = 'expandSpan';
expand_span.title = '显示屏蔽设置';
expand_span.textContent = '屏蔽';
expand_span.addEventListener('click', function () {
expand_Wrap('wrapDiv');
}, false);
expand_box.appendChild(expand_span);
console.info('bilibili_Block Ver.1.1.2: Console debug test. If there is no print prompt later, there is a problem with the script. Please feedback to me.');
document.arrive('body', {fireOnAttributesModification: true, onceOnly: true, existing: true}, function() {
console.info('bilibili_Block Ver.1.1.2: Insert block icon. The script works fine.');
document.body.appendChild(expand_box);
document.body.appendChild(style_dom);
create_Settings();
});
}
function create_Settings(dispaly = false) {
let wrap_div = document.createElement('div');
wrap_div.id = 'wrapDiv';
if (dispaly) {
wrap_div.className = 'show_wrap';
} else {
wrap_div.className = 'hide_wrap';
}
let main_tag = document.createElement('fieldset');
main_tag.id = 'mainTag';
wrap_div.appendChild(main_tag);
let ul_tag = document.createElement('ul');
ul_tag.className = 'ul_tag';
main_tag.appendChild(ul_tag);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.START, bilibili_config.functionEnable, false);
insert_Separator(ul_tag, '屏蔽视频(或直播间/相薄):');
insert_Checkbox(ul_tag, CHECKBOX_VALUE.VIDEO_USERNAME, bilibili_config.usernameEnable, false);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.VIDEO_KEYWORD, bilibili_config.keywordEnable);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.VIDEO_REG, bilibili_config.regEnable);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.LIVE, bilibili_config.liveEnable);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.PIC, bilibili_config.picEnable);
insert_Separator(ul_tag, '屏蔽评论(或回复):');
insert_Checkbox(ul_tag, CHECKBOX_VALUE.COMMENT_USERNAME, bilibili_config.commentEnable, false);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.COMMENT_KEYWORD, bilibili_config.commentKeywordEnable);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.COMMENT_REG, bilibili_config.commentRegEnable);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.CONVERT_EMOJI, bilibili_config.convertEmojiEnable);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.MESSAGE_REPLY, bilibili_config.messageReplyEnable, false);
insert_Checkbox(ul_tag, CHECKBOX_VALUE.MESSAGE_REPLY_DEL, bilibili_config.messageReplyDelEnable);
insert_Separator(ul_tag);
insert_Separator(ul_tag, '用户名:', MODULE.USERNAME.className);
insert_Input(ul_tag, INPUT_VALUE.USERNAME, TEXTAREA_VALUE.USERNAME.id, MODULE.USERNAME.className);
insert_Textarea(ul_tag, TEXTAREA_VALUE.USERNAME, bilibili_config.usernameArray, MODULE.USERNAME.className);
insert_Separator(ul_tag);
insert_Separator(ul_tag, '视频(或直播间/相薄)关键字:', MODULE.VIDEO_KEYWORD.className);
insert_Input(ul_tag, INPUT_VALUE.VIDEO_KEYWORD, TEXTAREA_VALUE.VIDEO_KEYWORD.id, MODULE.VIDEO_KEYWORD.className);
insert_Textarea(ul_tag, TEXTAREA_VALUE.VIDEO_KEYWORD, bilibili_config.keywordArray, MODULE.VIDEO_KEYWORD.className);
insert_Separator(ul_tag);
insert_Separator(ul_tag, '视频(或直播间/相薄)正则表达式:', MODULE.VIDEO_REG.className);
insert_Reg_Input(ul_tag, INPUT_VALUE.VIDEO_REG, INPUT_VALUE.VIDEO_MODIFIER, TEXTAREA_VALUE.VIDEO_REG.id, MODULE.VIDEO_REG.className);
insert_Textarea(ul_tag, TEXTAREA_VALUE.VIDEO_REG, bilibili_config.regArray, MODULE.VIDEO_REG.className);
insert_Separator(ul_tag);
insert_Separator(ul_tag, '评论(或回复)关键字:', MODULE.COMMENT_KEYWORD.className);
insert_Input(ul_tag, INPUT_VALUE.COMMENT_KEYWORD, TEXTAREA_VALUE.COMMENT_KEYWORD.id, MODULE.COMMENT_KEYWORD.className);
insert_Textarea(ul_tag, TEXTAREA_VALUE.COMMENT_KEYWORD, bilibili_config.commentArray, MODULE.COMMENT_KEYWORD.className);
insert_Separator(ul_tag);
insert_Separator(ul_tag, '评论(或回复)正则表达式:', MODULE.COMMENT_REG.className);
insert_Reg_Input(ul_tag, INPUT_VALUE.COMMENT_REG, INPUT_VALUE.COMMENT_MODIFIER, TEXTAREA_VALUE.COMMENT_REG.id, MODULE.COMMENT_REG.className);
insert_Textarea(ul_tag, TEXTAREA_VALUE.COMMENT_REG, bilibili_config.commentRegArray, MODULE.COMMENT_REG.className);
insert_Separator(ul_tag);
let save_button = create_Span_Btn(BUTTON_VALUE.SAVE, function() {
save_Config();
});
let only_save_button = create_Span_Btn(BUTTON_VALUE.ONLY_SAVE, function() {
only_save_button.textContent = BUTTON_VALUE.ONLY_SAVE.clickLabel;
setTimeout(function() {
only_save_button.textContent = BUTTON_VALUE.ONLY_SAVE.label;
}, 1000);
save_Config(false);
});
let cancel_button = create_Span_Btn(BUTTON_VALUE.CANCEL, function(e) {
expand_Wrap('wrapDiv');
setTimeout(function() {
document.body.removeChild(wrap_div);
create_Settings();
}, 800);
e.stopPropagation();
});
ul_tag.appendChild(save_button);
ul_tag.appendChild(only_save_button);
ul_tag.appendChild(cancel_button);
document.body.appendChild(wrap_div);
}
function save_Config(close_status = true) {
bilibili_config.functionEnable = document.getElementById(CHECKBOX_VALUE.START.id).checked;
bilibili_config.usernameEnable = document.getElementById(CHECKBOX_VALUE.VIDEO_USERNAME.id).checked;
bilibili_config.keywordEnable = document.getElementById(CHECKBOX_VALUE.VIDEO_KEYWORD.id).checked;
bilibili_config.commentEnable = document.getElementById(CHECKBOX_VALUE.COMMENT_USERNAME.id).checked;
bilibili_config.commentKeywordEnable = document.getElementById(CHECKBOX_VALUE.COMMENT_KEYWORD.id).checked;
bilibili_config.regEnable = document.getElementById(CHECKBOX_VALUE.VIDEO_REG.id).checked;
bilibili_config.commentRegEnable = document.getElementById(CHECKBOX_VALUE.COMMENT_REG.id).checked;
bilibili_config.convertEmojiEnable = document.getElementById(CHECKBOX_VALUE.CONVERT_EMOJI.id).checked;
bilibili_config.liveEnable = document.getElementById(CHECKBOX_VALUE.LIVE.id).checked;
bilibili_config.picEnable = document.getElementById(CHECKBOX_VALUE.PIC.id).checked;
bilibili_config.messageReplyEnable = document.getElementById(CHECKBOX_VALUE.MESSAGE_REPLY.id).checked;
bilibili_config.messageReplyDelEnable = document.getElementById(CHECKBOX_VALUE.MESSAGE_REPLY_DEL.id).checked;
bilibili_config.usernameArray = extract_Array(TEXTAREA_VALUE.USERNAME.id);
bilibili_config.keywordArray = extract_Array(TEXTAREA_VALUE.VIDEO_KEYWORD.id);
bilibili_config.commentArray = extract_Array(TEXTAREA_VALUE.COMMENT_KEYWORD.id);
bilibili_config.regArray = extract_Array(TEXTAREA_VALUE.VIDEO_REG.id);
bilibili_config.commentRegArray = extract_Array(TEXTAREA_VALUE.COMMENT_REG.id);
reg_config.regArray = convert_Array(bilibili_config.regArray);
reg_config.commentRegArray = convert_Array(bilibili_config.commentRegArray);
GM_setValue('bilibili_config', bilibili_config);
hide_Event();
if (close_status) {
expand_Wrap('wrapDiv');
}
}
Promise.all([GM_getValue('bilibili_config')]).then(function (data) {
if (data[0] !== undefined) {
bilibili_config = data[0];
}
if (bilibili_config.commentArray === undefined) {
bilibili_config.commentArray = [];
}
if (bilibili_config.regArray === undefined) {
bilibili_config.regArray = [];
}
if (bilibili_config.commentRegArray === undefined) {
bilibili_config.commentRegArray = [];
}
if (bilibili_config.regArray.length > 0) {
reg_config.regArray = convert_Array(bilibili_config.regArray);
}
if (bilibili_config.commentRegArray.length > 0) {
reg_config.commentRegArray = convert_Array(bilibili_config.commentRegArray);
}
init_Bilibili();
hide_Event();
try {
GM_addValueChangeListener('bilibili_config', function(name, old_value, new_value, remote) {
if (remote) {
bilibili_config = new_value;
let wrap_div = document.getElementById('wrapDiv');
if (wrap_div.classList.contains('show_wrap')) {
document.body.removeChild(wrap_div);
create_Settings(true);
hide_Event();
} else {
document.body.removeChild(wrap_div);
create_Settings();
hide_Event();
}
}
});
} catch (e) {
console.error(e);
}
document.arrive('body', {fireOnAttributesModification: true, onceOnly: true, existing: true}, function() {
try {
let observer = new MutationObserver(function () {
hide_Event();
});
let listener_container = document.querySelector("body");
let option = {
'childList': true,
'subtree': true
};
observer.observe(listener_container, option);
} catch (e) {
console.error(e);
}
if (/www\.bilibili\.com\/?(\/\?spm_id_from=.*)?$/.test(OLD_URL)) {
if (document.querySelector('.btn.next')) {
document.querySelector('.btn.next').addEventListener('click', function() {
setTimeout(function() {
hide_Event();
}, 250);
});
}
if (document.querySelector('.btn.prev')) {
document.querySelector('.btn.prev').addEventListener('click', function() {
setTimeout(function() {
hide_Event();
}, 250);
});
}
document.body.arrive('.manga-panel .btn-change', {fireOnAttributesModification: true, onceOnly: true, existing: true}, function() {
this.addEventListener('click', function() {
setTimeout(function() {
hide_Event();
}, 1000);
});
});
document.body.arrive('.manga-panel .tab-switch-item', {fireOnAttributesModification: true, onceOnly: true, existing: true}, function() {
this.addEventListener('click', function() {
setTimeout(function() {
hide_Event();
}, 1000);
});
});
}
if (/live\.bilibili\.com\/all/.test(OLD_URL)) {
document.body.arrive('.content-panel h1.title > span', {fireOnAttributesModification: true, onceOnly: true, existing: true}, function() {
this.addEventListener('click', function() {
setTimeout(function() {
hide_Event();
}, 1000);
});
});
}
});
}).catch(function (except) {
console.error(except);
});
})();