Really ignore ignored users
当前为
// ==UserScript==
// @name Rllmukzen Threadshitter
// @description Really ignore ignored users
// @namespace https://github.com/insin/greasemonkey/
// @version 4
// @match https://www.rllmukforum.com/index.php*
// ==/UserScript==
function addStyle(css) {
let $style = document.createElement('style')
$style.appendChild(document.createTextNode(css))
document.querySelector('head').appendChild($style)
}
function TopicPage() {
let ignoredUserIds = JSON.parse(localStorage.ignoredUserIds || '[]')
// Hide "You've chosen to ignore content by <ignored user>"
addStyle(`
.ipsComment_ignored {
display: none;
}
`)
// Hide posts containing elements which have an ignored user id as a specified
// data attribute.
function hidePostsByDataAttribute(elements, dataAttribute) {
elements.forEach(el => {
if (!ignoredUserIds.includes(el.dataset[dataAttribute])) return
let post = el.closest('article.ipsComment')
if (post.style.display == 'none') return
post.style.display = 'none'
})
}
// Hide posts which quote ignored users
function processQuotes(context) {
hidePostsByDataAttribute(
context.querySelectorAll('[data-ipsquote-userid]'),
'ipsquoteUserid'
)
}
// Hide posts which @-mention ignored users
function processMentions(context) {
hidePostsByDataAttribute(
context.querySelectorAll('[data-mentionid]'),
'mentionid'
)
}
function processPosts(context = document) {
processQuotes(context)
processMentions(context)
}
// Process initial posts
processPosts()
// Watch for posts being replaced when paging
new MutationObserver(mutations =>
mutations.forEach(mutation => {
if (mutation.oldValue == 'true') {
processPosts()
}
})
).observe(document.querySelector('div.cTopic'), {
attributes: true,
attributeFilter: ['animating'],
attributeOldValue: true,
})
// Watch for new posts being loaded into the current page
new MutationObserver(mutations =>
mutations.forEach(mutation =>
mutation.addedNodes.forEach(processPosts)
)
).observe(document.querySelector('#elPostFeed > form'), {
childList: true,
})
}
function IgnoredUsersPage() {
// Sync ignored user ids
localStorage.ignoredUserIds = JSON.stringify(
Array.from(document.querySelectorAll('[data-ignoreuserid]')).map(el =>
el.dataset.ignoreuserid
)
)
}
let page
if (location.href.includes('index.php?/topic/')) {
page = TopicPage
} else if (location.href.includes('index.php?/ignore/')) {
page = IgnoredUsersPage
}
if (page) {
page()
}