NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Bangumi Deleted Post Alpha // @version 0.0.5 // @description Why you delete it! // @updateURL https://openuserjs.org/meta/gyakkun/Bangumi_Deleted_Post_Alpha.meta.js // @downloadURL https://openuserjs.org/install/gyakkun/Bangumi_Deleted_Post_Alpha.user.js // @copyright gyakkun // @include /^https?:\/\/(((fast\.)?bgm\.tv)|chii\.in|bangumi\.tv)\/(group|subject)\/topic\/*/ // @include /^https?:\/\/(((fast\.)?bgm\.tv)|chii\.in|bangumi\.tv)\/(ep|character|person)\/*/ // @license MIT // ==/UserScript== (function () { const SPACE_TYPE = document.location.pathname.split("/")[1] const BA_DP_API_URL = "https://bgm.nyamori.moe/forum-enhance/deleted_post" const SPACE_ACTION_BUTTON_WORDING = "查看删除内容" attachActionButton() registerOnClickEvent() function getTopicId() { let pathSplitArr = document.location.pathname.split("/") let last = pathSplitArr[pathSplitArr.length - 1] last = last.split(/[^0-9]/)[0] return last } function getPostDivList() { return $("div[id^='post_'") } function getPostDiv(pid) { return $(`div[id^='post_${pid}'`).first() } function getUsernameAndPidOfPostDiv(postDiv) { return { username: postDiv.attr("data-item-user"), postId: parseInt(postDiv.attr("id").substring("post_".length)) } } function drawActionButton(username, postId) { return ` <div class="action"> <a href="javascript:void(0);" class="icon" title="${SPACE_ACTION_BUTTON_WORDING}"> <span data-dropped="false" class="ico" id="ba-deleted-post-action-btn-${postId}-${username}" style="text-indent: 0px">👁</span><span class="title">${SPACE_ACTION_BUTTON_WORDING}</span> </a> </div> ` } function attachActionButton() { getPostDivList().each(function () { let that = $(this) let { username, postId } = getUsernameAndPidOfPostDiv(that) console.debug(`${username} - ${postId}`) let contentDiv = getContentDivFromPostDiv(that) if (!!!contentDiv) return if (!judgeDelete(contentDiv.html())) return console.debug(`[ba_dp] html: ${contentDiv.html()}`) that.find("div.post_actions.re_info > div:nth-child(1)").first().after( drawActionButton(username, postId) ) }) } function getContentDivFromPostDiv(postDiv) { let inner = postDiv.find("div.inner") if (inner.length == 0) return null let reply = inner.first().find("div.reply_content > div.message") let subReply = inner.first().find("div.cmt_sub_content") if (reply.length == 0 && subReply.length == 0) return null if (reply.length > 0) { let theReply = reply.first() return theReply } else { let theSubReply = subReply.first() return theSubReply } } function judgeDelete(html) { if (!!!html.match(/<span class="tip/)) return false if (html.indexOf("内容已被用户删除") != -1) return true if (html.indexOf("删除了回复") != -1) return true if (html.indexOf("违反") != -1 && html.indexOf("被删除") != -1) return true return false } function registerOnClickEvent() { $("span[id^='ba-deleted-post-action-btn-'").each(function () { let that = $(this) let pid = that.attr("id").split("-")[5] let username = that.attr("id").split("-")[6] that.click(async () => { if (that.attr("data-dropped") === "false") { that.html("*") await getDeletedPost(pid) that.html("※") that.attr("data-dropped", "true") } }) }) } async function getDeletedPost(postId) { let type = SPACE_TYPE let topicId = getTopicId() let postDiv = getPostDiv(postId) let contentDiv = getContentDivFromPostDiv(postDiv) console.debug(`[ba_dp] contentDiv ${contentDiv.html()}`) console.log(`[ba_dp] ${type} - ${topicId} - ${postId}`) await fetch(`${BA_DP_API_URL}/${type}/${topicId}/${postId}`) .then(res => { if (res.status / 100 != 2) { console.warn(`[ba_dp] status ${res.status}`) return null } return res.text() }).then(t => { if(t == null) { contentDiv.html("(bgm-archive 未收录)") return } console.debug(`[ba_dp] ${t}`) postDiv.removeClass("reply_collapse") postDiv.removeClass("sub_reply_collapse") contentDiv.html(t) }).catch(err => { console.error(`[ba_dp] Exception ${err}`) contentDiv.html("(发生错误 请稍后再试)") }) } })();