// ==UserScript==
// @name NGA优化摸鱼体验
// @namespace https://github.com/kisshang1993/NGA-BBS-Script
// @version 3.1
// @author HLD
// @description NGA论坛显示优化,功能增强,防止突然蹦出一对??而导致的突然性的社会死亡
// @license GPL-3.0
// @require https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js
// @require https://cdn.staticfile.org/spectrum/1.8.0/spectrum.js
// @icon https://s1.ax1x.com/2020/06/28/N25WBF.png
// @match *://bbs.nga.cn/*
// @match *://ngabbs.com/*
// @match *://nga.178.com/*
// @inject-into content
// @downloadURL none
// ==/UserScript==
(function () {
'use strict';
const default_shortcut = [81, 87, 69, 37, 39, 82]
let setting = {
hideAvatar: true,
hideSmile: true,
hideImage: false,
imgEnhance: true,
hideSign: true,
hideHeader: true,
excelMode: false,
linkTargetBlank: false,
imgResize: true,
authorMark: true,
autoPage: true,
keywordsBlock: true,
markAndBan: true,
shortcutKeys: default_shortcut
}
let advanced_setting = {
dynamicEnable: true,
banStrictMode: false,
kwdWithoutTitle: false,
autoPageOffset: 5,
excelNoMode: true,
excelTitle: '工作簿1',
authorMarkColor: '#FF0000',
imgResizeWidth: 200,
classicRemark: false
}
let post_author = []
let ban_list = []
let mark_list = []
let keywords_list = []
let before_url = window.location.href
let $window = $(window)
const shortcut_name = ['隐藏头像', '隐藏表情', '隐藏图片', '楼内上一张图', '楼内下一张图', '切换Excel模式']
const shortcut_code = {
'A': 65, 'B': 66, 'C': 67, 'D': 68, 'E': 69, 'F': 70, 'G': 71,
'H': 72, 'I': 73, 'J': 74, 'K': 75, 'L': 76, 'M': 77, 'N': 78,
'O': 79, 'P': 80, 'Q': 81, 'R': 82, 'S': 83, 'T': 84,
'U': 85, 'V': 86, 'W': 87, 'X': 88, 'Y': 89, 'Z': 90,
'0': 48, '1': 49, '2': 50, '3': 51, '4': 52, '5': 53, '6': 54, '7': 55, '8': 56, '9': 57,
'LEFT': 37, 'RIGHT': 39, 'UP': 38, 'DOWN': 40, '': 0
}
const getCodeName = (code) => {
let keyname = ''
for (let [n, c] of Object.entries(shortcut_code)) {
c == code && (keyname = n)
}
return keyname
}
const color_picker_config = {
type: 'color',
preferredFormat: 'hex',
showPaletteOnly: 'true',
togglePaletteOnly: 'true',
hideAfterPaletteSelect: 'true',
showAlpha: 'false',
togglePaletteMoreText: '更多选项',
togglePaletteLessText: '隐藏',
palette: [
["#000000","#444444","#5b5b5b","#999999","#bcbcbc","#eeeeee","#f3f6f4","#ffffff"],
["#f44336","#744700","#ce7e00","#8fce00","#2986cc","#16537e","#6a329f","#c90076"],
["#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d0e0e3","#cfe2f3","#d9d2e9","#ead1dc"],
["#ea9999","#f9cb9c","#ffe599","#b6d7a8","#a2c4c9","#9fc5e8","#b4a7d6","#d5a6bd"],
["#e06666","#f6b26b","#ffd966","#93c47d","#76a5af","#6fa8dc","#8e7cc3","#c27ba0"],
["#cc0000","#e69138","#f1c232","#6aa84f","#45818e","#3d85c6","#674ea7","#a64d79"],
["#990000","#b45f06","#bf9000","#38761d","#134f5c","#0b5394","#351c75","#741b47"],
["#660000","#783f04","#7f6000","#274e13","#0c343d","#073763","#20124d","#4c1130"]
]
}
//检查更新
if (window.localStorage.getItem('hld__NGA_version')) {
const current_version = +window.localStorage.getItem('hld__NGA_version')
if (GM_info.script.version > current_version) {
const focus = ''
$('body').append(`
×NGA优化摸鱼插件已更新至v${GM_info.script.version}
${focus}
查看更新内容
`)
$('body').on('click', '#hld__updated a', function () {
$(this).parents('#hld__updated').remove()
window.localStorage.setItem('hld__NGA_version', GM_info.script.version)
})
}
} else window.localStorage.setItem('hld__NGA_version', GM_info.script.version)
//同步配置
//基础设置
if (window.localStorage.getItem('hld__NGA_setting')) {
let local_setting = JSON.parse(window.localStorage.getItem('hld__NGA_setting'))
for (let k in setting) {
!local_setting.hasOwnProperty(k) && (local_setting[k] = setting[k])
if (k == 'shortcutKeys') {
if (local_setting[k].length < setting[k].length) {
const offset_count = setting[k].length - local_setting[k].length
local_setting[k] = local_setting[k].concat(setting[k].slice(-offset_count))
}
}
}
for (let k in local_setting) {
!setting.hasOwnProperty(k) && delete local_setting[k]
}
setting = local_setting
}
//高级设置
if (window.localStorage.getItem('hld__NGA_advanced_setting')) {
let local_advanced_setting = JSON.parse(window.localStorage.getItem('hld__NGA_advanced_setting'))
for (let k in advanced_setting) {
!local_advanced_setting.hasOwnProperty(k) && (local_advanced_setting[k] = advanced_setting[k])
}
for (let k in local_advanced_setting) {
!advanced_setting.hasOwnProperty(k) && delete local_advanced_setting[k]
}
advanced_setting = local_advanced_setting
}
//同步列表
const local_keywords_list = window.localStorage.getItem('hld__NGA_keywords_list')
local_keywords_list && (keywords_list = local_keywords_list.split(','))
const local_ban_list = window.localStorage.getItem('hld__NGA_ban_list')
local_ban_list && (ban_list = local_ban_list.split(','))
const local_mark_list = window.localStorage.getItem('hld__NGA_mark_list')
local_mark_list && (mark_list = local_mark_list.split(','))
//注册按键
$('body').keyup(function (event) {
if (/textarea|select|input/i.test(event.target.nodeName)
|| /text|password|number|email|url|range|date|month/i.test(event.target.type)) {
return;
}
//切换显示头像
if ((setting.hideAvatar || advanced_setting.dynamicEnable) && event.keyCode == setting.shortcutKeys[0]) {
$('.avatar').toggle()
popNotification(`${$('.avatar:hidden').length == 0 ? '显示' : '隐藏'}头像`)
}
//切换显示表情
if ((setting.hideSmile || advanced_setting.dynamicEnable) && event.keyCode == setting.shortcutKeys[1]) {
$('img').each(function () {
const classs = $(this).attr('class');
if (classs && classs.includes('smile')) $(this).toggle()
})
$('.smile_alt_text').toggle()
popNotification(`${$('.smile_alt_text:hidden').length > 0 ? '显示' : '隐藏'}表情`)
}
//切换显示图片
if ((setting.hideImage || advanced_setting.dynamicEnable) && event.keyCode == setting.shortcutKeys[2]) {
if ($('.hld__img-resize:hidden').length < $('.switch-img').length) {
$('.hld__img-resize').hide()
$('.switch-img').text('图').show()
popNotification(`隐藏图片`)
return
}
$('.hld__img-resize').each(function () {
$(this).toggle()
$(this).is(':hidden') ? $(this).next('button.switch-img').show() : $(this).next('button.switch-img').hide()
})
popNotification(`${$('.switch-img:hidden').length > 0 ? '显示' : '隐藏'}图片`)
}
//关闭大图
if (event.keyCode == 27) {
if ($('#hld__img_full').length > 0) {
$('#hld__img_full').remove()
}
}
//上一张图片
if (event.keyCode == setting.shortcutKeys[3]) {
if ($('#hld__img_full').length > 0) {
$('#hld__img_full .prev-img').click()
}
}
//下一张图片
if (event.keyCode == setting.shortcutKeys[4]) {
if ($('#hld__img_full').length > 0) {
$('#hld__img_full .next-img').click()
}
}
//Excel模式
if ((setting.excelMode || advanced_setting.dynamicEnable) && event.keyCode == setting.shortcutKeys[5]) {
switchExcelMode()
popNotification($('.hld__excel-body').length > 0 ? 'Excel模式' : '普通模式')
}
})
setting.autoPage && $('body').addClass('hld__reply-fixed')
$('body').append('')
$('body').append('')
$('.hld__excel-header, .hld__excel-footer').append('【这里应该是一张仿造Excel的图片,如不显示,请刷新重试,如还不显示,请及时反馈!】')
$('body').append('')
$('#hld__excel_setting').click(()=>$('#hld__setting_cover').css('display', 'flex'))
//快捷键-列表维护
$('body').on('click', '#hld__shortcut_manage', function () {
if($('#hld__shortcut_panel').length > 0) return
let $shortcutPanel = $(`
×
编辑快捷键
支持的快捷键范围
键盘 A
~Z
左箭头 LEFT
右箭头 RIGHT
上箭头 UP
下箭头 DOWN
* 留空则取消快捷键
如按键异常请尝试重置按键
`)
for (let [index, sn] of shortcut_name.entries()) {
const keycode = setting.shortcutKeys[index]
$shortcutPanel.find('.hld__table tbody').append(`${sn} | |
`)
}
$('#hld__setting_cover').append($shortcutPanel)
})
//拉黑标签-列表维护
if (setting.markAndBan) {
//绑定事件
$('body').on('click', '.hld__extra-icon', function () {
const type = $(this).data('type')
const user = $(this).data('user')
$('.hld__dialog').length > 0 && $('.hld__dialog').remove()
if (type == 'ban') {
banlistPopup({
type: 'confirm',
user,
top: $(this).offset().top+20,
left: $(this).offset().left-10
})
}
if (type == 'mark') {
userMarkPopup({
user,
top: $(this).offset().top+20,
left: $(this).offset().left-10
})
}
})
}
//关键字管理
$('body').on('click', '#hld__keywords_manage', function () {
if($('#hld__keywords_panel').length > 0) return
$('#hld__setting_cover').append(``)
$('#hld__keywords_list_textarea').val(keywords_list.join('\n'))
})
//名单管理
$('body').on('click', '#hld__list_manage', function () {
if($('#hld__banlist_panel').length > 0) return
$('#hld__setting_cover').append(`
×
标签名单
一行一条,支持多个标签
格式为<用户名>:<标签>(<文字16进制色号>^<背景16进制色号>)&<标签(...)>&...
举例:abc123:菜鸡(#FFFFFF^#FF0000)&弟弟(#FFFFFF^#F0F0A1)
`)
//切换选项卡
$('body').on('click', '.hld__tab-header > span', function(){
$('.hld__tab-header > span, .hld__tab-content').removeClass('hld__table-active')
$(this).addClass('hld__table-active')
$('.hld__tab-content').eq($(this).index()).addClass('hld__table-active')
})
//删除黑名单
$('body').on('click', '.hld__bl-del', function(){
let user = $(this).data('user')
const check = ban_list.findIndex(v => v == user)
check > -1 && ban_list.splice(check, 1)
window.localStorage.setItem('hld__NGA_ban_list', ban_list.join(','))
reloadBanlist()
})
//添加黑名单
$('body').on('click', '#hld__banlist_add_btn', function(){
banlistPopup({
type: 'add',
user: $(this).data('user'),
top: $(this).offset().top + 30,
left: $(this).offset().left - 5,
callback: () => {reloadBanlist()}
})
})
//修改标记
$('body').on('click', '.hld__ml-edit', function(){
let user = $(this).data('user')
userMarkPopup({
user,
top: $(this).offset().top + 30,
left: $(this).offset().left - 5,
callback: () => {reloadMarklist()}
})
})
//删除标记
$('body').on('click', '.hld__ml-del', function(){
let user = $(this).data('user')
setUserMarks({user: user, marks: []})
reloadMarklist()
})
//添加标记
$('body').on('click', '#hld__marklist_add_btn', function(){
userMarkPopup({
type: 'add',
user: $(this).data('user'),
top: $(this).offset().top + 30,
left: $(this).offset().left - 5,
callback: () => {reloadMarklist()}
})
})
//重载名单
reloadBanlist()
reloadMarklist()
})
//集中面板按钮响应
$('body').on('click', '.hld__btn', function () {
const type = $(this).data('type')
if(!type) return
if (type == 'save_keywords') {
keywords_list = $('#hld__keywords_list_textarea').val().split('\n')
keywords_list = removeBlank(keywords_list)
keywords_list = uniq(keywords_list)
window.localStorage.setItem('hld__NGA_keywords_list', keywords_list.join(','))
}
if (type == 'save_banlist') {
ban_list = $('#hld__ban_list_textarea').val().split('\n')
ban_list = removeBlank(ban_list)
ban_list = uniq(ban_list)
mark_list = $('#hld__mark_list_textarea').val().split('\n')
mark_list = removeBlank(mark_list)
mark_list = uniq(mark_list)
window.localStorage.setItem('hld__NGA_ban_list', ban_list.join(','))
window.localStorage.setItem('hld__NGA_mark_list', mark_list.join(','))
}
if (type == 'reset_shortcut') {
setting.shortcutKeys = default_shortcut
window.localStorage.setItem('hld__NGA_setting', JSON.stringify(setting))
popMsg('重置成功,刷新页面生效')
}
if (type == 'save_shortcut') {
let shortcut_keys = []
$('.hld__table tbody>tr').each(function () {
const v = $(this).find('input').val().trim().toUpperCase()
if (Object.keys(shortcut_code).includes(v)) shortcut_keys.push(shortcut_code[v])
else popMsg(`${v}是个无效的快捷键`)
})
if (shortcut_keys.length != setting.shortcutKeys.length) return
setting.shortcutKeys = shortcut_keys
window.localStorage.setItem('hld__NGA_setting', JSON.stringify(setting))
popMsg('保存成功,刷新页面生效')
}
$('.hld__list-panel').remove()
})
$('body').on('click', '.hld__list-panel .hld__setting-close', function () {
$(this).parent().remove()
})
//动态检测
setInterval(() => {
alwaysDetect()
isThreads() && renderThreads()
isPosts() && renderPosts()
}, 100)
//持续监测
const alwaysDetect = () => {
//insert Menu
if($('.hld__setting-box').length == 0) {
$('#startmenu > tbody > tr > td.last').append('')
let $entry = $('NGA优化摸鱼插件设置')
$entry.click(()=>$('#hld__setting_cover').css('display', 'flex'))
$('#hld__setting_close').click(()=>$('#hld__setting_cover').fadeOut(200))
$('.hld__setting-box').append($entry)
}
if(setting.excelMode && window.location.href != before_url) {
before_url = window.location.href
if(before_url.includes('thread.php') || before_url.includes('read.php')) {
$('.hld__excel-body').length == 0 && $('body').addClass('hld__excel-body')
}else {
$('.hld__excel-body').length > 0 && $('body').removeClass('hld__excel-body')
}
}
if ($('.hld__excel-body').length > 0) {
$(document).attr('title') != advanced_setting.excelTitle && $(document).attr('title', advanced_setting.excelTitle);
$('#hld__excel_icon').length == 0 && $('head').append('')
}
//自动翻页
if(setting.autoPage) {
if($('#hld__next_page').length > 0) return
$('#pagebbtm>.stdbtn[hld-auto-page!=ok] td').each(function(){
if($(this).children('a').text() == '>') {
$(this).children('a').attr('id', 'hld__next_page')
$window.on('scroll.autoPage', function(){
const offset = +advanced_setting.autoPageOffset;
if ($(document).scrollTop() != 0 && ($(document).scrollTop() + $(window).height() >= $(document).height() * (1 - offset / 100))) {
if($('#hld__next_page').length > 0) {
console.warn('Auto Page')
document.getElementById('hld__next_page').click()
$('#hld__next_page').removeAttr('id')
$window.off('scroll.autoPage')
}
}
})
}
})
$('#pagebbtm>.stdbtn').attr('hld-auto-page', 'ok')
}
}
const isThreads = () => $('#m_threads').length > 0
const isPosts = () => $('#m_posts').length > 0
const switchExcelMode = () => {
$('body').toggleClass('hld__excel-body')
!advanced_setting.excelNoMode && $('body').addClass('hld__excel-original-no')
}
if(setting.excelMode) {
if(before_url.includes('thread.php') || before_url.includes('read.php')) switchExcelMode()
}
//论坛列表
const renderThreads = () => {
//隐藏版头
if (setting.hideHeader && $('#hld__switch_header').length == 0) {
$('#toppedtopic, #sub_forums').hide()
let $toggle_header_btn = $('')
$toggle_header_btn.click(() => $('#toppedtopic, #sub_forums').toggle())
$('#toptopics > div > h3').append($toggle_header_btn)
}
$('.topicrow[hld-render!=ok]').each(function () {
const title = $(this).find('.c2>a').text()
const author = $(this).find('.author').text()
if (setting.markAndBan) {
if (ban_list.length > 0 && ban_list.includes(author)) {
console.warn(`【NGA优化摸鱼体验脚本-黑名单屏蔽】标题:${title} 连接:${$(this).find('.c2>a').attr('href')}`)
$(this).parents('tbody').remove()
}
if (mark_list.length > 0) {
for (let m of mark_list) {
const t = m.split(':')
if (t[0] == author) {
let r = t[1].split('&'), f = []
r.forEach(e => f.push(e.split('(')[0]))
$(this).find('.author').append(``)
}
}
}
}
if (!advanced_setting.kwdWithoutTitle && setting.keywordsBlock && keywords_list.length > 0) {
for (let keyword of keywords_list) {
if (title.includes(keyword)) {
console.warn(`【NGA优化摸鱼体验脚本-关键字屏蔽】标题:${title} 连接:${$(this).find('.c2>a').attr('href')}`)
$(this).remove()
break
}
}
}
//新页面打开链接
if (setting.linkTargetBlank) {
let $link = $(this).find('.topic')
$link.data('href', $link.attr('href')).attr('href', 'javascript:void(0)')
$link.click(() => {
window.open($link.data('href'))
return false
})
}
//添加标志位
$(this).attr('hld-render', 'ok')
})
}
//论坛详情
const renderPosts = () => {
//标记楼主
if (setting.authorMark) {
const author = $('#postauthor0').text().replace('[楼主]', '')
if (author && $('#hld__post-author').val() != author) {
const local_post_author = window.localStorage.getItem('hld__NGA_post_author')
local_post_author && (post_author = local_post_author.split(','))
const tid = getQueryString('tid')
if (tid) {
const author_str = `${tid}:${author}`
if (!post_author.includes(author_str))
post_author.unshift(author_str) > 10 && post_author.pop()
window.localStorage.setItem('hld__NGA_post_author', post_author.join(','))
}
for (let pa of post_author) {
const t = pa.split(':')
if (t[0] == tid) {
if ($('#hld__post-author').length == 0) $('body').append(``)
else $('#hld__post-author').val(t[1])
break
}
}
}
}
//回复列表
$('.forumbox.postbox[hld-render!=ok]').each(function () {
if ($(this).find('.small_colored_text_btn.block_txt_c2.stxt').length == 0) return true
//excel 序号
$(this).find('.postrow>td:first-child').before(' | ')
//关键字屏蔽
if (setting.keywordsBlock && keywords_list.length > 0) {
const $postcontent = $(this).find('.postcontent')
const $postcontent_clone = $postcontent.clone()
const consoleLog = (text) => console.warn(`【NGA优化摸鱼体验脚本-关键字屏蔽】内容:${text}`)
let postcontent_quote = ''
let postcontent_text = ''
if ($postcontent.find('.quote').length > 0) {
$postcontent_clone.find('.quote').remove()
let postcontent_text = $postcontent.find('.quote').text()
const end_index = postcontent_text.indexOf(')')
postcontent_quote = postcontent_text.substring(end_index + 1)
}
postcontent_text = $postcontent_clone.text()
for (let keyword of keywords_list) {
if (postcontent_text && postcontent_text.includes(keyword)) {
consoleLog(postcontent_text)
$(this).remove()
break
}
if (postcontent_quote && postcontent_quote.includes(keyword)) {
consoleLog(postcontent_quote)
$postcontent.find('.quote').remove()
}
}
const $comment_c_list = $(this).find('.comment_c')
if ($comment_c_list.length > 0) {
let postcontent_reply = ''
$comment_c_list.each(function () {
let postcontent_reply_text = $(this).find('.ubbcode').text()
const end_index = postcontent_reply_text.indexOf(')')
postcontent_reply = postcontent_reply_text.substring(end_index + 1)
for (let keyword of keywords_list) {
if (postcontent_reply && postcontent_reply.includes(keyword)) {
consoleLog(postcontent_reply)
$(this).remove()
}
}
})
}
}
//隐藏头像
setting.hideAvatar && $(this).find('.avatar').css('display', 'none')
//隐藏表情
$(this).find('img').each(function () {
const classs = $(this).attr('class');
if (classs && classs.includes('smile')) {
const alt = $(this).attr('alt')
const $alt = $('[' + alt + ']')
setting.hideSmile ? $(this).hide() : $alt.hide()
$(this).after($alt)
} else if (!classs && $(this).attr('onload')) {
$(this).attr('hld__imglist', 'ready')
if (setting.imgResize) {
$(this).addClass('hld__img-resize').attr('title', '点击大图显示')
}
let $imgB = $('')
$imgB.on('click', function () {
$(this).prev('img').toggle()
$(this).text($(this).prev('img').is(':hidden') ? '图' : '隐藏')
})
$(this).removeAttr('onload')
if (setting.hideImage) {
$(this).hide();
$imgB.show()
}
$(this).after($imgB)
}
})
//图片增强
if (setting.imgEnhance) {
$('#mc').on('click', '.postcontent img[hld__imglist=ready]', function () {
resizeImg($(this))
e.stopPropagation()
return false
})
}
//隐藏签名
setting.hideSign && $(this).find('.sign, .sigline').css('display', 'none')
//添加拉黑标记菜单及功能
if (setting.markAndBan) {
$(this).find('.small_colored_text_btn.block_txt_c2.stxt').each(function () {
let current_user = ''
if ($(this).parents('td').prev('td').html() == '') {
current_user = $(this).parents('table').prev('.posterinfo').children('.author').text()
} else {
current_user = $(this).parents('td').prev('td').find('.author').text()
}
$(this).append(``)
})
}
//标记拉黑标签
markDom($(this))
//添加标志位
$(this).attr('hld-render', 'ok')
})
}
//大图
const resizeImg = (el) => {
if ($('#hld__img_full').length > 0) return
let url_list = []
let current_index = el.parent().find('[hld__imglist=ready]').index(el)
el.parent().find('[hld__imglist=ready]').each(function () {
url_list.push($(this).data('srcorg') || $(this).data('srclazy') || $(this).attr('src'))
})
let $imgBox = $('')
let $imgContainer = $('')
let $img = $('
')
const renderImg = (index) => {
let timer = null
$('#loader').show()
$imgContainer.css({
'top': $(window).height() * 0.03 + 'px',
'left': (($(window).width() - ($(window).height()) * 0.85) / 2) + 'px',
'width': $(window).height() * 0.85 + 'px',
'height': $(window).height() * 0.85 + 'px'
})
$img.css({ 'width': '', 'height': '' }).attr('src', url_list[index]).hide()
timer = setInterval(() => {
const w = $img.width()
const h = $img.height()
if (w > 0) {
w > h ? $img.css({ 'width': '100%', 'height': 'auto' }) : $img.css({ 'height': '100%', 'width': 'auto' })
$img.show()
$('#loader').hide()
clearInterval(timer)
}
}, 1)
}
//当前图片
renderImg(current_index)
$img.mousedown(function (e) {
let endx = 0;
let endy = 0;
let left = parseInt($imgContainer.css("left"))
let top = parseInt($imgContainer.css("top"))
let downx = e.pageX
let downy = e.pageY
e.preventDefault()
$(document).on("mousemove", function (es) {
let endx = es.pageX - downx + left
let endy = es.pageY - downy + top
$imgContainer.css("left", endx + "px").css("top", endy + "px")
return false
});
})
$img.mouseup(function () { $(document).unbind("mousemove") })
$imgContainer.append($img)
$imgBox.append($imgContainer)
$imgBox.click(function (e) { !$(e.target).hasClass('hld__img') && $(this).remove() })
$imgBox.append(``)
$imgBox.on('click', '.change', function () {
if ($(this).hasClass('prev-img') && current_index - 1 >= 0)
renderImg(--current_index)
if ($(this).hasClass('next-img') && current_index + 1 < url_list.length)
renderImg(++current_index)
if ($(this).hasClass('rotate-right') || $(this).hasClass('rotate-left')) {
let deg = ($img.data('rotate-deg') || 0) - ($(this).hasClass('rotate-right') ? 90 : -90)
if (deg >= 360 || deg <= -360) deg = 0
$img.css('transform', `rotate(${deg}deg)`)
$img.data('rotate-deg', deg)
} else {
$img.css('transform', '')
$img.data('rotate-deg', 0)
}
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty()
return false;
})
$imgBox.on("mousewheel DOMMouseScroll", function (e) {
const delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? 1 : -1)) ||
(e.originalEvent.detail && (e.originalEvent.detail > 0 ? -1 : 1));
if ($imgContainer.width() > 50 || delta > 0) {
const offset_y = $imgContainer.height() * 0.2
const offset_x = $imgContainer.width() * 0.2
let offset_top = offset_y / 2
let offset_left = offset_x / 2
if ($(e.target).hasClass('hld__zoom-target')) {
const target_offset_x = Math.round(e.clientX - $imgContainer.position().left)
const target_offset_y = Math.round(e.clientY - $imgContainer.position().top)
offset_left = (target_offset_x / ($imgContainer.height() / 2)) * offset_left
offset_top = (target_offset_y / ($imgContainer.height() / 2)) * offset_top
}
if (delta > 0) {
$imgContainer.css({
'width': ($imgContainer.height() + offset_y) + 'px',
'height': ($imgContainer.height() + offset_y) + 'px',
'top': ($imgContainer.position().top - offset_top) + 'px',
'left': ($imgContainer.position().left - offset_left) + 'px'
})
}
if (delta < 0) {
$imgContainer.css({
'width': ($imgContainer.height() - offset_y) + 'px',
'height': ($imgContainer.height() - offset_y) + 'px',
'top': ($imgContainer.position().top + offset_top) + 'px',
'left': ($imgContainer.position().left + offset_left) + 'px'
})
}
}
e.stopPropagation()
return false
})
$('body').append($imgBox)
}
//拉黑与标签
const markDom = $el => {
$el.find('.b').each(function () {
$(this).find('span.hld__post-author, span.hld__remark').remove()
let name = $(this).attr('hld-mark-before-name') || $(this).text().replace('[', '').replace(']', '')
if (setting.markAndBan) {
if (ban_list.includes(name)) {
if (advanced_setting.banStrictMode) {
if ($(this).parents('div.comment_c').length > 0) $(this).parents('div.comment_c').remove()
else $(this).parents('.forumbox.postbox').remove()
} else {
if ($(this).hasClass('author')) {
if ($(this).parents('div.comment_c').length > 0) $(this).parents('div.comment_c').remove()
else $(this).parents('.forumbox.postbox').remove()
} else {
$(this).parent().html('此用户在你的黑名单中,已屏蔽其言论')
}
}
console.warn(`【NGA优化摸鱼体验脚本-黑名单屏蔽】用户:${name}`)
}
if(advanced_setting.classicRemark) {
//经典备注风格
for (let m of mark_list) {
const t = m.split(':')
if (t[0] == name) {
let r = t[1].split('&'), f = []
r.forEach(e => f.push(e.split('(')[0]))
$(this).attr('hld-mark-before-name', name).append(``)
}
}
}else {
//新版标签风格
const user_marks = getUserMarks(name)
if(user_marks !== null) {
const $el = $(this).parent().next('.stat').find('.clickextend')
let marks_dom = ''
user_marks.marks.forEach(item => marks_dom += `${item.mark}`);
$el.before(`标签: ${marks_dom}
`)
}
}
if (setting.authorMark) {
if (name == $('#hld__post-author').val() && $(this).find('span.hld__post-author').length == 0)
$(this).append('[楼主]')
}
}
})
}
//设置面板
let $panel_dom = $(``)
$('body').append($panel_dom)
//本地恢复设置
//基础设置
for (let k in setting) {
if ($('#hld__cb_' + k).length > 0) {
$('#hld__cb_' + k)[0].checked = setting[k]
const enable_dom_id = $('#hld__cb_' + k).attr('enable')
if (enable_dom_id) {
setting[k] ? $('#' + enable_dom_id).show() : $('#' + enable_dom_id).hide()
$('#' + enable_dom_id).find('input').each(function () {
$(this).val() == setting[$(this).attr('name').substr(8)] && ($(this)[0].checked = true)
})
$('#hld__cb_' + k).on('click', function () {
$(this)[0].checked ? $('#' + enable_dom_id).slideDown() : $('#' + enable_dom_id).slideUp()
})
}
}
}
//高级设置
for (let k in advanced_setting) {
//hld__adv_autoPageOffset
if ($('#hld__adv_' + k).length > 0) {
const value_type = typeof advanced_setting[k]
if (value_type == 'boolean') {
$('#hld__adv_' + k)[0].checked = advanced_setting[k]
}
if (value_type == 'number' || value_type == 'string') {
$('#hld__adv_' + k).val(advanced_setting[k])
}
}
}
//高级设置-事件绑定
$('body').on('click', '#hld__advanced_button', function () {
$('.hld__advanced-setting-panel').toggle()
$(this).text($('.hld__advanced-setting-panel').is(':hidden') ? '+' : '-')
})
//调色板绑定
$('#hld__setting_cover').find('#hld__adv_authorMarkColor').spectrum(color_picker_config)
//导出设置
$('body').on('click', '#hld__backup_panel', function () {
if($('#hld__export_panel').length > 0) return
$('#hld__setting_cover').append(``)
//导出
$('#hld__export__data').click(function(){
let obj = {}
if ($('#hld__cb_export_setting').prop('checked')) {
obj['setting'] = setting
obj['advanced_setting'] = advanced_setting
}
$('#hld__cb_export_banlist').prop('checked') && (obj['ban_list'] = ban_list)
$('#hld__cb_export_marklist').prop('checked') && (obj['mark_list'] = mark_list)
$('#hld__cb_export_keywordlist').prop('checked') && (obj['keywords_list'] = keywords_list)
if (Object.keys(obj).length == 0) {
$('#hld__export_msg').html('没有选择任何项目可供导出!')
return
}
obj['name'] = 'HLD-NGA-BBS'
obj['ver'] = +GM_info.script.version
$('#hld__export_str').val(Base64.encode(JSON.stringify(obj)))
$('#hld__export_msg').html('导出成功,请复制右侧字符串以备份')
})
//导入
$('#hld__import__data').click(function(){
if ($('#hld__export_str').val()) {
try {
let obj = JSON.parse(Base64.decode($('#hld__export_str').val()))
let confirm = window.confirm('此操作会覆盖你的配配置,确认吗?')
if (!confirm) return
if (Object.keys(obj).includes('setting')) {
obj.setting && (setting = obj.setting)
obj.advanced_setting && (advanced_setting = obj.advanced_setting)
window.localStorage.setItem('hld__NGA_setting', JSON.stringify(setting))
window.localStorage.setItem('hld__NGA_advanced_setting', JSON.stringify(advanced_setting))
}
if (Object.keys(obj).includes('ban_list')) {
ban_list = obj.ban_list
window.localStorage.setItem('hld__NGA_ban_list', ban_list.join(','))
}
if (Object.keys(obj).includes('mark_list')) {
mark_list = obj.mark_list
window.localStorage.setItem('hld__NGA_mark_list', mark_list.join(','))
}
if (Object.keys(obj).includes('keywords_list')) {
keywords_list = obj.keywords_list
window.localStorage.setItem('hld__NGA_keywords_list', keywords_list.join(','))
}
$('#hld__export_msg').html('导入成功,刷新浏览器以生效')
} catch (err){
$('#hld__export_msg').html('字符串有误,解析失败!')
}
}
})
})
//保存
$('body').on('click', '#hld__save__data', function () {
for (let k in setting) {
$('input#hld__cb_' + k).length > 0 && (setting[k] = $('input#hld__cb_' + k)[0].checked)
}
window.localStorage.setItem('hld__NGA_setting', JSON.stringify(setting))
for (let k in advanced_setting) {
if ($('#hld__adv_' + k).length > 0) {
const value_type = typeof advanced_setting[k]
if (value_type == 'boolean') {
advanced_setting[k] = $('#hld__adv_' + k)[0].checked
}
if (value_type == 'number') {
advanced_setting[k] = +$('#hld__adv_' + k).val()
}
if (value_type == 'string') {
advanced_setting[k] = $('#hld__adv_' + k).val()
}
}
}
window.localStorage.setItem('hld__NGA_advanced_setting', JSON.stringify(advanced_setting))
$panel_dom.hide()
popMsg('保存成功,刷新页面生效')
})
//重置
$('body').on('click', '#hld__reset__data', function(){
if(confirm('若发生配置不生效的情况,或者插件失效,重置所有配置\n确认吗?')){
localStorage.removeItem("hld__NGA_setting")
localStorage.removeItem("hld__NGA_advanced_setting")
popMsg('重置成功,即将自动刷新')
window.location.reload()
}
})
//打赏
$('body').on('click', '#hld__reward', function () {
$('#hld__setting_cover').append(`
×
本脚本完全开源,并且长期维护
您若有好的功能需求或者建议,欢迎反馈
如果您觉得脚本好用帮助到更好的摸鱼,您也可以选择支持我~
`)
})
/**
* 消息弹框
* @param {String} msg 消息内容
* @param {String} type 消息类型
* @param {Boolean} refresh_enable 启用自动刷新
*/
function popMsg(msg, type='ok', refresh_enable=true) {
$('.hld__msg').length > 0 && $('.hld__msg').remove()
let $msg = $(`${msg}
`)
$('body').append($msg)
$msg.slideDown(200)
setTimeout(() => { $msg.fadeOut(500) }, type == 'ok' ? 2000 : 5000)
setTimeout(() => { $msg.remove() }, type == 'ok' ? 2500 : 5500)
}
/**
* 通知弹框
* @param {String} msg 消息内容
*/
function popNotification (msg) {
$('#hld__noti_container').length == 0 && $('body').append('')
let $msg_box = $(`${msg}
`)
$('#hld__noti_container').append($msg_box)
$msg_box.slideDown(100)
setTimeout(() => { $msg_box.fadeOut(500) }, 1000)
setTimeout(() => { $msg_box.remove() }, 1500)
}
/**
* 获取URL参数
* @param {String} name 参数
* @return {String|null} 参数的值
*/
function getQueryString(name) {
var url = decodeURI(window.location.search.replace(/&/g, "&"));
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = url.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
/**
* 列表去重
* @param {Array} array 列表
* @return {Array} 处理后的列表
*/
function uniq(array) {
return [...new Set(array)]
}
/**
* 列表去空
* @param {Array} array 列表
* @return {Array} 处理后的列表
*/
function removeBlank(array) {
let r = [];
array.map(function (val, index) {
if (val !== '' && val != undefined) {
r.push(val);
}
});
return r;
}
/**
* Base64互转
*/
const Base64 = {
encode: (str) => {
return window.btoa(unescape(encodeURIComponent(str)))
},
decode: (str) => {
return decodeURIComponent(escape(window.atob(str)))
}
}
/**
* 黑名单弹窗
* @param {Object} setting 设置项
* @param {String} setting.user 用户名
* @param {String} setting.type 模式
* @param {Number} setting.top pos.top位置
* @param {Number} setting.left pos.left 位置
* @param {Function} setting.callback 回调函数
*/
function banlistPopup (setting) {
$('.hld__dialog').length > 0 && $('.hld__dialog').remove()
const retain_word = [':', '(', ')', '&', '#', '^', ',']
let $ban_dialog = $(``)
if (setting.type == 'confirm') {
$ban_dialog.find('#container_dom').append(`您确定要拉黑用户${setting.user}吗?
`)
let $ok_btn = $('')
$ok_btn.click(function(){
!ban_list.includes(setting.user) && ban_list.push(setting.user)
window.localStorage.setItem('hld__NGA_ban_list', ban_list.join(','))
$('.hld__dialog').remove()
popMsg('拉黑成功,重载页面生效')
})
$ban_dialog.find('.hld__dialog-buttons').append($ok_btn)
}else if (setting.type == 'add') {
$ban_dialog.find('#container_dom').append(`添加用户:
`)
let $ok_btn = $('')
$ok_btn.click(function(){
let add_user = $ban_dialog.find('#hld__dialog_add_user').val().trim()
!ban_list.includes(add_user) && ban_list.push(add_user)
window.localStorage.setItem('hld__NGA_ban_list', ban_list.join(','))
$('.hld__dialog').remove()
setting.callback()
})
$ban_dialog.find('.hld__dialog-buttons').append($ok_btn)
}
$('body').append($ban_dialog)
}
function reloadBanlist() {
$('#hld__banlist').empty()
ban_list.forEach(item => $('#hld__banlist').append(`${item} | |
`))
$('#hld__ban_list_textarea').val(ban_list.join('\n'))
}
function reloadMarklist() {
$('#hld__marklist').empty()
mark_list.forEach(item => {
const user_mark = getUserMarks(item.split(':')[0])
$('#hld__marklist').append(`${user_mark.user} | ${user_mark.marks.length} | |
`)
})
$('#hld__mark_list_textarea').val(mark_list.join('\n'))
}
/**
* 标记弹窗
* @param {Object} setting 设置项
* @param {String} setting.user 用户名
* @param {String} setting.type 模式
* @param {Number} setting.top pos.top位置
* @param {Number} setting.left pos.left 位置
* @param {Function} setting.callback 回调函数
*/
function userMarkPopup(setting) {
$('.hld__dialog').length > 0 && $('.hld__dialog').remove()
const retain_word = [':', '(', ')', '&', '#', '^', ',']
let $mark_dialog = $(`
×
${setting.type == 'add' ? `
添加用户:
` : ''}
`)
const insertRemarkRow = (r='', t='#ffffff', b='#1f72f1', n=true) => {
let $tr = $(`
|
|
|
|
`)
$tr.find('.hld__mark-del').click(function(){$(this).parents('tr').remove()})
$tr.find('.hld__dialog-color-picker').spectrum(color_picker_config)
$mark_dialog.find('#hld__mark_body').append($tr)
n && $tr.find('.hld__mark-mark').focus()
}
//恢复标签
const exist_mark = getUserMarks(setting.user)
exist_mark !== null && exist_mark.marks.forEach(item => insertRemarkRow(item.mark, item.text_color, item.bg_color, false))
let $add_btn = $('')
$add_btn.click(() => insertRemarkRow())
$mark_dialog.find('.hld__dialog-buttons').append($add_btn)
let $ok_btn = $('')
$ok_btn.click(function(){
let user_marks = {user: setting.type == 'add' ? $mark_dialog.find('#hld__dialog_add_user').val().trim() : setting.user, marks: []}
if(!user_marks.user) {
popMsg('用户名不能为空!', 'err')
return
}
$('#hld__mark_body > tr').each(function(){
const mark = $(this).find('.hld__mark-mark').val().trim()
const text_color = $(this).find('.hld__mark-text-color').val()
const bg_color = $(this).find('.hld__mark-bg-color').val()
if(mark) {
if(retain_word.every(w => !mark.includes(w))) {
user_marks.marks.push({mark, text_color, bg_color})
}else {
popMsg(`${retain_word.join(' ')}为标签功能保留字符!`, 'err')
}
}
})
console.log(user_marks)
setUserMarks(user_marks)
popMsg('保存成功,重载页面生效')
$('.hld__dialog').remove()
setting.callback()
})
$mark_dialog.find('.hld__dialog-buttons').append($ok_btn)
$('body').append($mark_dialog)
$('.hld__dialog-color-picker').spectrum(color_picker_config)
}
/**
* 解析标签
* @param {String} user 用户名
* @return {Object|null} 解析后的对象
*/
function getUserMarks(user) {
const check = mark_list.findIndex(v => v.startsWith(user))
const exist_marks = check > -1 ? mark_list[check] : ''
if(check > -1 && exist_marks) {
let user_marks = {user: user, marks: []}
const r_l = exist_marks.split(':')[1].split('&')
r_l.forEach(item => {
let marks = {}
const f = item.split('(')
marks.mark = f[0]
if(f.length > 1) {
const g = f[1].substring(0, f[1].length - 1)
marks.text_color = g.split('^')[0]
marks.bg_color = g.split('^')[1]
}
user_marks.marks.push(marks)
});
return user_marks
}else {
return null
}
}
/**
* 保存标签
* @param {Object} user_marks 标签对象
*/
function setUserMarks(user_marks) {
let user_marks_string = `${user_marks.user}:`
let user_marks_list = []
user_marks.marks.forEach(item => user_marks_list.push(`${item.mark}(${item.text_color}^${item.bg_color})`))
user_marks_string += user_marks_list.join('&')
//检查是否已有标签
const check = mark_list.findIndex(v => v.startsWith(user_marks.user))
if(check > -1) {
user_marks_list.length > 0 ? mark_list.splice(check, 1, user_marks_string) : mark_list.splice(check, 1)
}else {
user_marks_list.length > 0 && mark_list.push(user_marks_string)
}
window.localStorage.setItem('hld__NGA_mark_list', mark_list.join(','))
}
/**
* 颜色RGB转HEX
* @param {String} rgb rgb颜色代码
* @return {String} 16进制颜色代码
*/
function rgb2hex(rgb) {
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
/**
* Style Sheet
*/
const style = document.createElement("style")
style.type = "text/css"
style.appendChild(document.createTextNode(`
.animated {animation-duration:.3s;animation-fill-mode:both;}
.animated-1s {animation-duration:1s;animation-fill-mode:both;}
.zoomIn {animation-name:zoomIn;}
.bounce {-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom;}
.fadeInUp {-webkit-animation-name:fadeInUp;animation-name:fadeInUp;}
#loader {display:none;position:absolute;top:50%;left:50%;margin-top:-10px;margin-left:-10px;width:20px;height:20px;border:6px dotted #FFF;border-radius:50%;-webkit-animation:1s loader linear infinite;animation:1s loader linear infinite;}
@keyframes loader {0% {-webkit-transform:rotate(0deg);transform:rotate(0deg);}100% {-webkit-transform:rotate(360deg);transform:rotate(360deg);}}
@keyframes zoomIn {from {opacity:0;-webkit-transform:scale3d(0.3,0.3,0.3);transform:scale3d(0.3,0.3,0.3);}50% {opacity:1;}}
@keyframes bounce {from,20%,53%,80%,to {-webkit-animation-timing-function:cubic-bezier(0.215,0.61,0.355,1);animation-timing-function:cubic-bezier(0.215,0.61,0.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);}40%,43% {-webkit-animation-timing-function:cubic-bezier(0.755,0.05,0.855,0.06);animation-timing-function:cubic-bezier(0.755,0.05,0.855,0.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0);}70% {-webkit-animation-timing-function:cubic-bezier(0.755,0.05,0.855,0.06);animation-timing-function:cubic-bezier(0.755,0.05,0.855,0.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);}90% {-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0);}}
@keyframes fadeInUp {from {opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);}to {opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);}}
.postcontent img {margin:0 5px 5px 0 !important;box-shadow:none !important;outline:none !important;}
.hld__img_container {position:absolute;display:flex;justify-content:center;align-items:center;}
.hld__if_control {position:absolute;display:flex;left:50%;bottom:15px;width:160px;margin-left:-80px;height:40px;background:rgba(0,0,0,0.6);z-index:9999999;}
#hld__setting_cover {display:none;justify-content:center;align-items:center;position:fixed;top:0;left:0;right:0;bottom:0;z-index:999;}
#hld__img_full {position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.6);z-index:99999;/*display:flex;*//*align-items:center;*//*justify-content:center;*/}
#hld__img_full img {cursor:move;transition:transform .2s ease;}
#hld__img_full .hld__imgcenter {top:50%;left:50%;transform:translate(-50%,-50%);}
#hld__img_full .change {width:40px;height:40px;cursor:pointer;}
#hld__img_full .rotate-right,#hld__img_full .rotate-left {background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAgCAYAAAB6kdqOAAADYElEQVRYR8WYS8hWVRSGn3cipg0qCExBKYxKQVJRIh1olF0GXpIIoVIUBZWahZeJOpDEQYMcWCBZQRFCZkpGJGgD0yJSwSyVIO0yMrpObPLK+tvnY3f8zu1Tfxfsydlrrf3uve5HXAPZfgR4HJiY1r3Av8BvwCXgOPChpCNtj1FbxoLPdhy+AHgaeLil/DngHWCHpL/qZDoBsj0P+LQliH5s3yVQO6t0dAW0GdhUUvYP8DXwc1q3AncBYb4pFQfvlrS8314nQKHA9n5gDnAKWCfpi6rbJvM+CSwFppf4jkiaW5btDGhQc9leBbwKjM50vC5pda5z2ACl170P+AS4OwOxRVK4whANK6AsUk8DkzNQiyXtvZmAJqVAuCWB6vnTTXmhZL5yxK6UtOsqQLaD8UdJbw3qwG3kbEdqiHQxNvHvlbT4f4Bsn08lIHg2SNrWRnm68e3APUBk4ouSLjfJ2n4DiOgLuiTpzh4g248Cn5WUrJFUmVUzJ80Vx+efgBeaapjtZ4A92ZnTckCvAOv73Oo5Se9W3db2i8BrFfuTJZ2peynbzvYX5IC+AaZWCM+XdKC8Z/s24PeaA49Kmt0A6JfMj1YMAbIdQAJQFf0JLCybwPaDwIkauSG/aAAUjl2UlXUFoJeB7Q1OeBFYJKkH3Hbkk29r5H6VNG4QQMeAh5qiAjgpqWdW2yOBePI7KmQPSJrfyWS2J0TeaQGmYJmbm64UumU1EyX90MmpG6KkrOsPYLykv/MN2wuBjcCM9D3q0kuS4vUqyfYyYHfGME22D6f+pk72SyD6nv11ucV2NGSRFAN4I9l+D1iSGP9LjLYPAtFEVdEhSY81au/IYPuB8ElgRPGqvdJhO7JlhOfnwAfAE6WoWyHpzY5n1rLb3prMXPD1L67Fru3IsHGLoJgaZkmK0eaayfZMINygoOb2w/azwPuZ0EfA82WHHgRdqVyEinYNmu2PgafymwDLJF0YEEj4avhsTu1bWNsxykRhLcI5FIUjhpJ9XUClJj+6gpy6N/mpkYqpM9qTnGI8fruukbthY5DtGP4C1KI+rxI5JzJ9rHD+UcM2KNpeC6wBoqgOQtd3lA4E6bUKYONbooqxJyL2+v5syA+3PSaVnPuBGACLFb9ivgfOAl9FyWkqsLneKyNmUcarECm7AAAAAElFTkSuQmCC) center no-repeat;background-size:25px;}
#hld__img_full .rotate-right {transform:rotateY(180deg);}
#hld__img_full .rotate-left:hover {transform:scale(1.2);}
#hld__img_full .rotate-right:hover {transform:scale(1.2) rotateY(180deg);}
#hld__img_full .next-img:hover {transform:scale(1.2) rotate(180deg);}
#hld__img_full .prev-img,#hld__img_full .next-img {background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABmUlEQVRYR+3WsUtWURjH8e8z+J/4J7QF4vL+C5ZBiAoh6lCDDQmBoIMOOiiIoBCBU+DiUENRQUWigiAuCjoo5JAmkQ41/OTCEzxEwznnvr4u750vfD/nOfdcjnHLj91ynzagqROQ1AC2zOxH6tY2DSBpAnju4Ttmtp2CaApA0hTwLAT7zexFSwCSZoCxENsDuszs/MYBkuaAxyG0A9wzs/2UePVO8RZIWgBGQmgTuG9mh6nxYoCkJeBRCH3x+HFOvAggaQUYCKGPQK+ZfcuNZwMkvQQehtA7X/n3kngWQNIn4G4IvfGVX5TGkwGSDoDOEFr3+GWdeA7gN9DhsV9Aw8y+1o3nAN4D3SF45BPYqItI/g9IGgcmQ7A6ctXX/7kOIhlQRSQ9BaZD8NQRH0oRWQBHPAFmQ/DMj+LbEkQ2wBGjwHwI/nTE61xEEcARQ8BiCF45ojqiyU8xwBGDwHKo/XHEWqqgFsARfcC/l4+W34geAKth1T1m9iplCrUn8DciqceP6C4wbGYnLQWkxP73TtMm0Aa0J1A6gWvfCH8hDgZXwQAAAABJRU5ErkJggg==) center no-repeat;}
#hld__img_full .next-img {transform:rotate(180deg);}
#hld__img_full .prev-img:hover {transform:scale(1.2);}
#hld__img_full .next-img:hover {transform:scale(1.2) rotate(180deg);}
.clearfix{clear:both;}
#hld__setting {color:#6666CC;cursor:pointer;}
.hld__list-panel {position:fixed;background:#fff8e7;padding:15px 20px;border-radius:10px;box-shadow:0 0 10px #666;border:1px solid #591804;z-index:9999;}
#hld__banlist_panel {width:500px;}
#hld__keywords_panel {width:182px;}
.hld__tab-content {display:flex;justify-content:space-between;flex-wrap: wrap;}
.hld__list-panel .hld__list-c {width:45%;}
#hld__keywords_panel .hld__list-c {width:100%;}
.hld__list-panel .hld__list-c textarea {box-sizing:border-box;padding:0;margin:0;height:200px;width:100%;resize:none;}
.hld__list-panel .hld__list-desc {margin-top:5px;font-size:9px;color:#666;}
.hld__list-panel .hld__list-c > p:first-child {font-weight:bold;font-size:14px;margin-bottom:10px;}
#hld__updated {position:fixed;top:20px;right:20px;width:200px;padding:10px;border-radius:5px;box-shadow:0 0 15px #666;border:1px solid #591804;background:#fff8e7;z-index: 9999;}
#hld__updated .hld__readme {text-decoration:underline;color:#591804;}
.hld__img-resize {outline:'';outline-offset:'';cursor:alias;min-width:auto !important;min-height:auto !important;max-width:${advanced_setting.imgResizeWidth || 200}px !important;margin:5px;}
#hld__setting_panel {position:relative;background:#fff8e7;width:526px;padding:15px 20px;border-radius:10px;box-shadow:0 0 10px #666;border:1px solid #591804;}
#hld__setting_panel > div.hld__field {float:left;width:50%;}
#hld__setting_panel p {margin-bottom:10px;}
#hld__setting_panel .hld__sp-title {font-size:15px;font-weight:bold;text-align:center;}
#hld__setting_panel .hld__sp-section {font-weight:bold;margin-top:20px;}
.hld__setting-close {position:absolute;top:5px;right:5px;padding:3px 6px;background:#fff0cd;color:#591804;transition:all .2s ease;cursor:pointer;border-radius:4px;text-decoration:none;}
.hld__setting-close:hover {background:#591804;color:#fff0cd;text-decoration:none;}
#hld__setting_panel button {transition:all .2s ease;cursor:pointer;}
button.hld__btn {padding:3px 8px;border:1px solid #591804;background:#fff8e7;color:#591804;}
button.hld__btn:hover {background:#591804;color:#fff0cd;}
.hld__btn-groups {display:flex;justify-content:center !important;margin-top:10px;}
.hld__post-author {color:${advanced_setting.authorMarkColor};font-weight:bold;}
.hld__extra-icon {position: relative;padding:0 2px;background-repeat:no-repeat;background-position:center;}
.hld__extra-icon svg {width:10px;height:10px;vertical-align:-0.15em;fill:currentColor;overflow:hidden;cursor:pointer;}
.hld__extra-icon:hover {text-decoration:none;}
span.hld__remark {color:#666;font-size:0.8em;}
span.hld__banned {color:#ba2026;}
.hld__sp-fold {padding-left:23px;}
.hld__sp-fold .hld__f-title {font-weight:bold;}
.hld__buttons {clear:both;display:flex;justify-content:space-between;padding-top:15px;}
code {padding:2px 4px;font-size:90%;font-weight:bold;color:#c7254e;background-color:#f9f2f4;border-radius:4px;}
.hld__float-left {float:left;}
.hld__shortcut-desc {width:120px;margin-left:20px;padding-top:6px}
.hld__shortcut-desc p {margin-bottom:5px;}
.hld__script-info {margin-left:4px;font-size:70%;color:#666;}
.hld__reward-panel {width:500px;}
.hld__reward-panel .hld__reward-info {display:block;font-size:15px;margin-bottom:20px;line-height:20px;}
.hld__delete-line {text-decoration:line-through;color:#666;}
.hld__reward-panel .hld__list-c {width:50%;}
.hld__reward-panel .hld__list-c:first-child {margin-right:15px;}
.hld__reward-panel .hld__list-c>img {width:100%;height:auto;}
.hld__excel-body {background:#fff !important;}
.hld__excel-header, .hld__excel-footer, .hld__excel-setting {display: none;}
.hld__excel-body #mainmenu,.hld__excel-body .catenew,.hld__excel-body #toptopics,.hld__excel-body #m_pbtntop,.hld__excel-body #m_fopts,.hld__excel-body #b_nav,.hld__excel-body #fast_post_c,.hld__excel-body #custombg,.hld__excel-body #m_threads th,.hld__excel-body #m_posts th,.hld__excel-body .r_container,.hld__excel-body #footer,.hld__excel-body .clickextend {display:none !important;}
.hld__excel-body #mmc {margin-top:195px;margin-bottom:35px;}
.hld__excel-body .postBtnPos > div, .hld__excel-body .postBtnPos .stdbtn a {background:#fff !important;border-color:#bbb;}
.hld__excel-body .hld__excel-div,.hld__excel-body .hld__excel-setting {display:block;}
.hld__excel-body .hld__excel-setting {position:fixed;width:60px;height:20px;top:5px;right:95px;background:#f2f4f7;z-index:999;}
.hld__excel-body .hld__excel-setting img {width:20px;height:auto;vertical-align:middle;}
.hld__excel-body .hld__excel-setting a {margin-left:5px;vertical-align:middle;}
.hld__excel-body .hld__excel-header {position:fixed;top:0;left:0;height:196px;}
.hld__excel-body .hld__excel-footer {position:fixed;bottom:0;left:0;height:50px;}
.hld__excel-body .hld__excel-header, .hld__excel-body .hld__excel-footer {width: 100%;text-align: center;font-size: 16px;font-weight: bold;background:#e8e8e8;color:#337ab7;line-height: 45px;}
.hld__excel-body .hld__excel-header>img, .hld__excel-body .hld__excel-footer>img{position:absolute;top:0;left:0}
.hld__excel-body #m_nav {position:fixed;top:136px;left:261px;margin:0;padding:0;z-index:99;}
.hld__excel-body #m_nav .nav_spr {display:block;border:0;border-radius:0;padding:0;box-shadow:none;background:none;}
.hld__excel-body #m_nav .nav_spr span {color:#000;font-size:16px;vertical-align:unset;font-weight:normal;}
.hld__excel-body #m_nav .nav_root,.hld__excel-body #m_nav .nav_link {background:none;border:none;box-shadow:none;padding:0;color:#000;border-radius:0;font-weight:normal;}
.hld__excel-body #m_threads {margin:0;}
.hld__excel-body #topicrows {border:none;box-shadow:none;border-radius:0;margin:0;background-color:#fff;counter-reset:num;border-spacing:0;}
.hld__excel-body #topicrows tbody {border-spacing:0;}
.hld__excel-body .topicrow {border-spacing:0;}
.hld__excel-body #topicrows td {background:#fff;padding:5px 0;margin:0;border:none;border-right:1px solid #bbbbbb;border-bottom:1px solid #bbbbbb;margin-right:-1px;}
.hld__excel-body .topicrow .c1 {width:33px;background:#e8e8e8 !important;}
.hld__excel-body .topicrow .c1 a {display:none;color: #777777 !important;font-size: 16px !important;font-family: auto;width: 30px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
.hld__excel-body.hld__excel-original-no .topicrow .c1:before {display:none;}
.hld__excel-body.hld__excel-original-no .topicrow .c1 a {display:inline-block;}
.hld__excel-body.hld__excel-original-no .topicrow .c1 img {width:20px;}
.hld__excel-body .topicrow .c1:before {content:counter(num);counter-increment:num;color:#777777;font-size:16px;}
.hld__excel-body .topicrow .c2 {padding-left:5px !important;}
.hld__excel-body .topicrow .c3 {color:#1a3959 !important;}
.hld__excel-body .block_txt {background:#fff !important;color:#1a3959 !important;border-radius:0;padding:0 !important;min-width:0 !important;font-weight:normal;}
.hld__excel-body .quote {background:#fff !important;}
.hld__excel-body #m_posts .block_txt {font-weight:bold;}
.hld__excel-body .topicrow .postdate,.hld__excel-body .topicrow .replydate {display:inline;margin:10px;}
.hld__excel-body #m_pbtnbtm {margin:0;border-bottom:1px solid #bbbbbb;}
.hld__excel-body #pagebbtm,.hld__excel-body #m_pbtnbtm .right_ {margin:0;}
.hld__excel-body #pagebbtm:before {display:block;line-height:35px;width:33px;float:left;content:"#";border-right:1px solid #bbbbbb;color:#777;font-size:16px;background:#e8e8e8;}
.hld__excel-body #m_pbtnbtm td {line-height:35px;padding:0 5px;}
.hld__excel-body #m_pbtnbtm .stdbtn {box-shadow:none;border:none;padding:0;padding-left:5px;background:#fff;border-radius:0;}
.hld__excel-body #m_pbtnbtm .stdbtn .invert {color:#591804;}
.hld__excel-body #m_pbtnbtm td a {background:#fff;padding:0;border:0;}
.hld__excel-body #m_posts .comment_c .comment_c_1 {border-top-color:#bbbbbb;}
.hld__excel-body #m_posts .comment_c .comment_c_2 {border-color:#bbbbbb;}
.hld__excel-body #m_posts {border:0;box-shadow:none;padding-bottom:0;margin:0;counter-reset:num;}
.hld__excel-body #m_posts td {background:#fff;border-right:1px solid #bbbbbb;border-bottom:1px solid #bbbbbb;}
.hld__excel-body #m_posts .c0 {width:32px;color:#777;font-size:16px;background:#e8e8e8;text-align:center;}
.hld__excel-body #m_posts .c0:before {content:counter(num);counter-increment:num;}
.hld__excel-body #m_posts .vertmod {background:#fff !important;color:#ccc;}
.hld__excel-body #m_posts a[name="uid"]:before {content:"UID:"}
.hld__excel-body #m_posts .white,.hld__excel-body #m_posts .block_txt_c2,.hld__excel-body #m_posts .block_txt_c0 {background:#fff !important;color:#777777;}
.hld__excel-body #m_posts .quote {background:#fff;border-color:#bbbbbb;}
.hld__excel-body #m_posts button {background:#eee;}
.hld__excel-body #m_posts .postbox {border:none !important;}
.hld__excel-body.hld__reply-fixed #postbbtm {position:fixed;right:30px;top:75px;z-index:999;border-radius: 10px;overflow: hidden;}
.hld__flex{display:flex;}
#hld__noti_container {position:fixed;top:10px;left:10px;}
.hld__noti-msg {display:none;padding:10px 20px;font-size:14px;font-weight:bold;color:#fff;margin-bottom:10px;background:rgba(0,0,0,0.6);border-radius:10px;cursor:pointer;}
.hld__advanced-setting {border-top: 1px solid #e0c19e;border-bottom: 1px solid #e0c19e;padding: 3px 0;margin-top:25px;}
.hld__advanced-setting >span {font-weight:bold}
.hld__advanced-setting >button {padding: 0px;margin-right:5px;width: 18px;text-align: center;}
.hld__advanced-setting-panel {display:none;padding:5px 0;}
.hld__advanced-setting-panel>p {margin: 7px 0 !important;font-weight:bold;}
.hld__advanced-setting-panel>p svg {height:16px;width:16px;vertical-align: top;margin-right:3px;}
.hld__advanced-setting-panel>table td {padding-right:10px}
.hld__advanced-setting-panel input[type=text],.hld__advanced-setting-panel input[type=number] {width:80px}
.hld__advanced-setting-panel .hld__adv-help {cursor:help;text-decoration: underline;}
.hld__ep-container{display:flex;width:300px;margin-bottom: 7px;}
.hld__ep-container p {margin-bottom:10px;}
.hld__ep-container >div{width:50%;}
.hld__ep-container textarea {width: 100%;padding:0;margin:0;resize:none;}
.hld__table-keyword {margin-top:10px;width:200px;}
.hld__table-keyword tr td:last-child {text-align:center;}
.hld__table-keyword input[type=text] {width:48px;text-transform:uppercase;text-align:center;}
.hld__tab-header{height:40px}
.hld__tab-header>span{margin-right:10px;padding:5px;cursor:pointer}
.hld__tab-header .hld__table-active,.hld__tab-header>span:hover{color:#591804;font-weight:700;border-bottom:3px solid #591804}
.hld__tab-content{display:none}
.hld__tab-content.hld__table-active{display:flex}
.hld__msg{display:none;position:fixed;top:10px;left:48%;color:#fff;text-align:center;z-index:99996;padding:10px 30px 10px 45px;font-size:16px;border-radius:10px;background-image:url("data:image/svg+xml,%3Csvg t='1595842925125' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2280' width='200' height='200'%3E%3Cpath d='M89.216226 575.029277c-6.501587-7.223986-10.47478-15.892769-12.641975-26.367549-1.805996-10.47478-0.722399-20.22716 3.973192-29.257143l4.695591-10.47478c5.05679-8.307584 11.558377-13.725573 19.865961-15.892769 7.946384-2.167196 15.892769-0.361199 23.477954 5.417989L323.995767 639.322751c8.307584 5.779189 17.698765 8.668783 27.812346 8.307584 10.11358-0.361199 18.782363-3.611993 26.006349-10.11358L898.302646 208.411993c7.585185-5.779189 16.253968-8.307584 26.006349-7.585185 9.752381 0.722399 18.059965 4.334392 24.922751 10.47478l-12.641975-12.641975c6.501587 7.223986 9.752381 15.17037 9.752381 24.561552 0 9.391182-3.250794 17.337566-9.752381 24.561552L376.008466 816.310406c-7.223986 7.223986-15.17037 10.47478-24.200353 10.47478-9.029982 0-16.976367-3.250794-24.200353-9.752381L89.216226 575.029277z' p-id='2281' fill='%23ffffff'%3E%3C/path%3E%3C/svg%3E");background-size:25px;background-repeat:no-repeat;background-position:15px}
.hld__msg-ok{background:#4bcc4b}
.hld__msg-err{background:#c33}
.hld__dialog{position:absolute;padding-right:35px}
.hld__dialog>div{line-height:30px}
.hld__dialog:before{position:absolute;content:' ';width:10px;height:10px;background-color:#fff6df;left:10px;transform:rotate(45deg)}
.hld__dialog-sub-top:before{top:-6px;border-top:1px solid #591804;border-left:1px solid #591804}
.hld__dialog-sub-bottom:before{bottom:-5px;border-bottom:1px solid #591804;border-right:1px solid #591804}
.hld__dialog-buttons{display:flex;justify-content:flex-end!important;margin-top:10px}
.hld__dialog-buttons>button{cursor:pointer}
.hld__dialog-user{font-size:1.5em;color:red;margin:0 5px}
.hld__dialog input[type=text]{width:100px;margin-right:15px}
.hld__dialog-mark-table td{padding-bottom:3px}
.hld__dialog-mark-table button{padding:0 6px;margin:0;height:20px;line-height:20px;width:20px;text-align:center;cursor:pointer}
.cp-color-picker{z-index:99997}
.sp-container{position:absolute;top:0;left:0;display:inline-block;z-index:9999994;overflow:hidden}
.sp-original-input-container{position:relative;display:inline-flex}
.sp-original-input-container input{margin:0!important}
.sp-original-input-container .sp-add-on{width:40px;border-top-right-radius:0!important;border-bottom-right-radius:0!important}
input.spectrum.with-add-on{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0}
.sp-original-input-container .sp-add-on .sp-colorize{height:100%;width:100%;border-radius:inherit}
.sp-colorize-container{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}
.sp-container.sp-flat{position:relative}
.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}
.sp-top{position:relative;width:100%;display:inline-block}
.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}
.sp-color{position:absolute;top:0;left:0;bottom:0;right:20px!important}
.sp-hue{position:absolute;top:0;right:0;bottom:0;width:12px;height:100%;left:initial!important}
.sp-clear-enabled .sp-hue{top:15%;height:85%}
.sp-fill{padding-top:80%}
.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}
.sp-alpha-enabled .sp-top{margin-bottom:28px!important}
.sp-alpha-enabled .sp-alpha{display:block}
.sp-alpha-handle{position:absolute;top:-3px;cursor:pointer;height:16px;border-radius:50%;width:16px;margin-right:5px;left:-2px;right:0;background:#f9f9f9;box-shadow:0 0 2px 0 #3a3a3a}
.sp-alpha{display:none;position:absolute;bottom:-18px;right:0;left:0;height:10px}
.sp-alpha-inner{border-radius:4px}
.sp-clear{display:none}
.sp-clear.sp-clear-display{background-position:center}
.sp-clear-enabled .sp-clear{display:block;position:absolute;top:3px;right:0;bottom:0;cursor:pointer;left:initial;height:12px;width:12px}
.sp-alpha,.sp-alpha-handle,.sp-clear,.sp-container,.sp-container button,.sp-container.sp-dragging .sp-input,.sp-dragger,.sp-preview,.sp-replacer,.sp-slider{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}
.sp-container.sp-input-disabled .sp-input-container{display:none}
.sp-container.sp-buttons-disabled .sp-button-container{display:none}
.sp-container.sp-palette-buttons-disabled .sp-palette-button-container{display:none}
.sp-palette-only .sp-picker-container{display:none}
.sp-palette-disabled .sp-palette-container{display:none}
.sp-initial-disabled .sp-initial{display:none}
.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#fff),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0))}
.sp-val{border-radius:4px;background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0))}
.sp-hue{background:-moz-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-ms-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-o-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(.17,#ff0),color-stop(.33,#0f0),color-stop(.5,#0ff),color-stop(.67,#00f),color-stop(.83,#f0f),to(red));background:-webkit-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}
.sp-1{height:17%}
.sp-2{height:16%}
.sp-3{height:17%}
.sp-4{height:17%}
.sp-5{height:16%}
.sp-6{height:17%}
.sp-hidden{display:none!important}
.sp-cf:after,.sp-cf:before{content:"";display:table}
.sp-cf:after{clear:both}
@media (max-device-width:480px){.sp-color{right:40%}
.sp-hue{left:63%}
.sp-fill{padding-top:60%}
}
.sp-dragger{border-radius:5px;height:10px;width:10px;border:1px solid #fff;cursor:pointer;position:absolute;top:0;left:0;margin-left:3px;margin-top:3px;box-shadow:0 0 2px 1px rgba(0,0,0,.2)}
.sp-slider{position:absolute;top:0;cursor:pointer;height:16px;border-radius:50%;width:16px;left:-2px;background:#f9f9f9;box-shadow:0 0 2px 0 #3a3a3a;margin-top:8px}
.sp-container{display:inline-flex;border-radius:0;background-color:#fff;padding:0;border-radius:4px;color:#000;box-shadow:0 0 0 1px rgba(99,114,130,.16),0 8px 16px rgba(27,39,51,.08)}
.sp-clear,.sp-color,.sp-container,.sp-container button,.sp-container input,.sp-hue{font-size:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}
.sp-top{margin-bottom:10px}
.sp-clear,.sp-color,.sp-hue,.sp-sat,.sp-val{border-radius:3px}
.sp-input-container{margin-top:-5px}
.sp-button-container.sp-cf,.sp-initial.sp-thumb.sp-cf,.sp-input-container.sp-cf{height:25px}
.sp-picker-container .sp-cf{margin-bottom:10px}
.sp-palette-row-initial>span:first-child{cursor:pointer}
.sp-initial-disabled .sp-input-container{width:100%}
.sp-input{padding:0 5px!important;margin:0;width:100%;box-shadow:none!important;height:100%!important;background:0 0;color:#3a3a3a;border-radius:2px!important;border:1px solid #e0e0e0!important;text-align:center;font-family:monospace;font-size:inherit!important}
.sp-input.sp-validation-error{border:1px solid red;background:#fdd}
.sp-palette-container,.sp-picker-container{position:relative;padding:10px}
.sp-picker-container{width:200px;padding-bottom:0}
.sp-palette-container{border-right:solid 1px #ccc}
.sp-palette-only .sp-palette-container{border:0}
.sp-palette .sp-thumb-el{display:block;position:relative;float:left;width:24px;height:15px;margin:3px;cursor:pointer;border:solid 2px transparent}
.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:orange}
.sp-thumb-el{position:relative}
.sp-initial{float:left}
.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}
.sp-initial .spe-thumb-el.sp-thumb-active{border-radius:0 5px 5px 0}
.sp-initial .spe-thumb-el{border-radius:5px 0 0 5px}
.sp-initial .sp-clear-display{background-position:center}
.sp-button-container{float:right;display:none;}
.sp-palette-button-container{margin-top:10px}
.sp-replacer{position:relative;overflow:hidden;cursor:pointer;display:inline-block;border-radius:3px;border:1px solid #aaa;color:#666;transition:border-color .3s;vertical-align:middle;width:40px;height:20px;margin: 1.5px 3px;}
.sp-replacer.sp-active,.sp-replacer:hover{border:1px solid #666;color:#000}
.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}
.sp-dd{position:absolute;font-size:10px;right:0;top:0;bottom:0;padding:0 1px;line-height:22px;background-color:#fff;border-left: 1px solid #aaa;}
.sp-preview{position:relative;width:100%;height:100%;float:left;z-index:0}
.sp-preview-inner{transition:background-color .2s}
.sp-preview-inner.sp-clear-display{display:none}
.sp-palette .sp-thumb-el{width:16px;height:16px;margin:3px;border:none;border-radius:3px}
.sp-container button{border-radius:3px;border:none;background:0 0;line-height:1;padding:0 8px;height:25px;text-transform:capitalize;text-align:center;vertical-align:middle;cursor:pointer;color:#606c72;font-weight:700}
.sp-container button.sp-choose{background-color:#3cab3b;color:#fff;margin-left:5px}
.sp-container button:hover{opacity:.8}
.sp-container button.sp-palette-toggle{width:100%;background-color:#f3f3f3;margin:0}
.sp-palette span.sp-thumb-active,.sp-palette span:hover{border-color:#000}
.sp-alpha,.sp-preview,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}
.sp-alpha-inner,.sp-preview-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}
.sp-palette .sp-thumb-inner{border-radius:3px;background-position:50% 50%;background-repeat:no-repeat}
.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}
.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}
.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAABe0lEQVQokYXSsUtcQRTF4d8Jj+VhHSxkEQuLsEUKK0nhTBFTmLSSUhBCMCAWsmgIwWrBLk0akfwLCaSQKBJmtrIIISwpRFKIhViETScphGMzysMtvOVwvpm5d0bGNCuGWAOPgYdl6S8wSDn9b+bUhDHEKWAdeAFMANg+l/TV9ofcz6cjMIbYBvaBMds7QCqZ58CmpBNgPuV0DvAAIMyFGugWtJr7eTv38xEwkPRPErY7QDeG2LqFkjrAgu0dSd/KDVqSNmxvAZ8lfbS9AHRuYemnLWkv5XRVBrQMbAI/gTXgEzAJtJuwBVS2L2OIle03QA/4Lmkl5XQBXEqqbFcAVYFDYChpFngiqWf7l6TXKaezMt2Zkhk24THwG+jZriX9AFZvUAyxLbRke2D75O5zPAO+ADXwEtizjaRHwDvbTyUtppwOmicCHAJvbXcl9YA1SQDjtseA97YPRz7ATcUQp2y/kjRdevsjaTfldNrMjcDGBjXA3T96L7yvrgFzP69+0Ao/HAAAAABJRU5ErkJggg==)}
.hld__marks-container>span{padding:1px 5px;border-radius:3px;margin-right:5px;color:#fff;background-color:#1f72f1}
.hld__table{table-layout:fixed;border-top:1px solid #ead5bc;border-left:1px solid #ead5bc}
.hld__table-banlist-buttons{margin-top:10px}
.hld__table thead{background:#591804;border:1px solid #591804;color:#fff}
.hld__scroll-area{position:relative;height:200px;overflow:auto;border:1px solid #ead5bc}
.hld__scroll-area::-webkit-scrollbar{width:5px;height:5px}
.hld__scroll-area::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px rgba(0,0,0,.2);background:#591804}
.hld__scroll-area::-webkit-scrollbar-track{box-shadow:inset 0 0 5px rgba(0,0,0,.2);border-radius:10px;background:#ededed}
.hld__table td,.hld__table th{padding:3px 5px;border-bottom:1px solid #ead5bc;border-right:1px solid #ead5bc;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hld__us-action{display: inline-block;width:18px;height:18px;margin:0 3px;}
.hld__us-action:hover{opacity:.8}
.hld__us-edit{background-size:20px;background-image:url("data:image/svg+xml,%3Csvg t='1595910222437' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3699'%3E%3Cpath d='M533.333333 106.666667v85.333333H213.333333v618.666667h618.666667V490.666667h85.333333v405.333333H128V106.666667h405.333333z m355.114667 97.237333L501.504 590.826667l-64.426667-64.426667L824.021333 139.498667l64.426667 64.426666z' p-id='3700'%3E%3C/path%3E%3C/svg%3E")}
.hld__us-del{background-image:url("data:image/svg+xml,%3Csvg t='1595910451854' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='4969'%3E%3Cpath d='M769.214785 190.785215V0h-511.488511v190.785215H2.365634v65.918082H1022.977023V190.785215h-253.762238zM320.959041 61.954046h384.383616v128.895105H320.959041V61.954046zM386.621379 382.593407h61.954046v446.593406h-61.954046V382.593407zM577.406593 382.593407H639.360639v446.593406h-61.954046V382.593407z' p-id='4970'%3E%3C/path%3E%3Cpath d='M832.191808 959.040959h-639.360639V318.657343h-63.936064v705.342657h767.616384V318.657343h-64.319681V959.040959z' p-id='4971'%3E%3C/path%3E%3C/svg%3E")}
`))
document.getElementsByTagName('head')[0].appendChild(style)
})();