Bilibili Comment Spoiler Folder

折叠评论中包含"剧透"的楼层

// ==UserScript==
// @name               Bilibili Comment Spoiler Folder
// @name:zh-CN         B站评论区剧透折叠
// @name:zh-HK         B站評論區劇透摺疊
// @name:zh-TW         B站評論區劇透摺疊
// @namespace          https://github.com/ipcjs
// @version            1.0.3
// @description        折叠评论中包含"剧透"的楼层
// @description:zh-CN  折叠评论中包含"剧透"的楼层
// @description:zh-HK  摺疊評論中包含“劇透”的樓層
// @description:zh-TW  摺疊評論中包含“劇透”的樓層
// @author             ipcjs
// @include            *://www.bilibili.com/video/av*
// @include            *://bangumi.bilibili.com/anime/*
// @include            *://bangumi.bilibili.com/movie/*
// @include            *://www.bilibili.com/bangumi/play/ep*
// @require            https://code.jquery.com/jquery-2.2.4.min.js
// @require            https://cdnjs.cloudflare.com/ajax/libs/arrive/2.4.1/arrive.min.js
// @grant              GM_addStyle
// ==/UserScript==

'use strict'
GM_addStyle("a.ep_spoiler_fold_toggle {display:block;color:#bbb;margin-top:5px}")
const regex = /(剧透|劇透|R\.?I\.?P|走好)/i
const message = '可能有剧透!单击此处显示 / 隐藏'
$('.comm').arrive('.list-item.reply-wrap', ele => {
    // 处理剧透
    const processSpoiler = (replyCount) => {
        if ($('.ep_spoiler_fold_toggle', ele).length > 0) return // 已经添加了剧透警告, 着不需要再处理了

        const $content = $('.con', ele).find('>.text, >.reply-box, >.paging-box')
        $content.hide()
        $($content[0]).before(`<a class="ep_spoiler_fold_toggle" href="javascript:">(+${replyCount}) ${message}</a>`)
        $('.ep_spoiler_fold_toggle', ele).on('click', (event) => {
            $content.slideToggle()
        })
    }
    // 检测已有的文本
    $text = $('.text, .text-con', ele)
    if ($text.text().match(regex)) {
        processSpoiler($text.length - 1)
    }
    // 检测将来增加的文本
    ele.arrive('.text, .text-con', text => {
        if ($(text).text().match(regex)) {
            processSpoiler('x')
        }
    })

})