// ==UserScript== // @name BDWM-Hide // @namespace http://tampermonkey.net/ // @version 0.3 // @description 北大未名根据版面名称,屏蔽版面 // @author lanvent // @match https://bbs.pku.edu.cn/v2/* // @icon https://www.google.com/s2/favicons?sz=64&domain=pku.edu.cn // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @license MIT // @downloadURL none // ==/UserScript== let blockWords = GM_getValue('BDWM_blockblocks', []); function setBlockWords(str){ blockWords = str.replace(',',',').split(',').map(word => word.trim()).filter(word => word.length > 0); GM_setValue('BDWM_blockblocks', blockWords); removeBoardBlocks(); removeTitles(); } function setBlockWordsPrompt() { const userInput = prompt('请输入要屏蔽的版面名称,用逗号分隔:', blockWords.join(', ')); if (userInput !== null) { setBlockWords(userInput); } } function addSettingsButton() { const container = document.querySelector('div.extend-menu.setting-extend-menu > div.content'); if(container == null || container.querySelector('a[name="block-keywords-button"]')){ return; } const settingsButton = document.createElement('a'); settingsButton.textContent = '屏蔽版面设置'; settingsButton.name = 'block-keywords-button'; settingsButton.addEventListener('click', function(event) { event.preventDefault(); setBlockWordsPrompt(); }); const logoutButton = container.querySelector('a.btn-logout'); container.insertBefore(settingsButton,logoutButton); } function addCustomSettingRow() { const form = document.getElementById('preference-form'); if(form==null || form.querySelector('input[name="block-keywords"]')){ return; } const settingRow = document.createElement('div'); settingRow.className = 'form-row'; settingRow.innerHTML = `
`; blockWords.join(', ') const submitButtonRow = form.querySelector('.extra-margin-top'); form.insertBefore(settingRow, submitButtonRow); const keywordsInput = settingRow.querySelector('input[name="block-keywords"]'); keywordsInput.value = blockWords.join(', '); const applyButton = form.querySelector('.orange-large-btn'); applyButton.addEventListener('click', function(event){ setBlockWords(keywordsInput.value); }); } function removeBoardBlocks() { //版面 let boardBlocks = document.querySelectorAll('.boards-wrapper.list > div.set'); if(boardBlocks!=null){ boardBlocks.forEach(block => { let content = block.querySelector('span.name').textContent; if (content && blockWords.some(word => word===content)){ console.log("remove",block); block.remove(); } }); } boardBlocks = document.querySelectorAll('.boards-wrapper.hots > div.board-block'); if(boardBlocks!=null){ boardBlocks.forEach(block => { let content = block.querySelector('span.name').textContent; if (content && blockWords.some(word => word===content)){ console.log("remove",block); block.remove(); } }); } } function removeTitles() { //主页榜单 let titles = document.querySelectorAll('li'); if(titles){ titles.forEach(title => { let content = title.querySelector('a.post-link')?.textContent; if (content && blockWords.some(word => content.startsWith(word+' '))){ console.log("remove",title); title.remove(); } content = title.querySelector('a.topic-link')?.textContent; if (content && blockWords.some(word => content.startsWith('['+word+']'))){ console.log("remove",title); title.remove(); } }); } titles = document.querySelectorAll('p > a.topic-link'); if(titles){ titles.forEach(title => { if (blockWords.some(word => title.textContent.startsWith('['+word+']'))){ console.log("remove",title); title.remove(); } }); } titles = document.querySelectorAll('a.inline-link'); if(titles){ titles.forEach(title => { if (blockWords.some(word => title.textContent.startsWith('['+word+']'))){ console.log("remove",title); title.remove(); } }); } } (function() { 'use strict'; const config = { childList: true, subtree: true }; const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { if (mutation.type === 'childList') { observer.disconnect(); addSettingsButton(); addCustomSettingRow(); observer.observe(document.body, config); removeBoardBlocks(); removeTitles(); } }); }); observer.observe(document.body, config); })();