分享一下个人目前看帖的姿势 and 提供一个可以隐藏已读的脚本

1、前情回顾

紧接着前几天的帖子:想问一下L站看帖的正确姿势,很多大佬给予了很多宝贵的答复,再次感谢:tieba_001:

贴中提到的问题:对于浏览帖子过程总是会出现已经看过的帖子在别人回复后又被顶上来

经过一番折腾,终于是解决了这个问题,在这里分享一下我个人目前看帖的芝士。

2、献上芝士

先说下,我目前的看帖姿势:Do Scripts + 贴末油猴脚本

https://linux.do/t/topic/968380

2.1、Do scripts味芝士

Do Script提供了很多非常好的功能,我平时最常用的就是这四个:

当然还有很多很好的功能,我也只是刚用几天的新手,欢迎大家在贴中分享。

2.2、油猴味芝士

那我提供的油猴脚本有什么作用?请看下图

这是开启隐藏之后的效果:

可以看到非常amazing啊,已阅的帖子不见了,一下子突然清爽了很多,当然这里也继承了下方大佬脚本的最新创建功能,可以按照帖子创建时间排序。

3、脚本

另外还有一些:

私货

电脑端可以用中键打开新标签页浏览,这样不用老是刷新

如果对某个帖子比较感兴趣,可以直接收藏,说不定什么时候就有优质回答

贴中提到的问题 借鉴 大佬脚本 使用codex进行适当更改后得以解决

注意脚本并没有经过优化,完全由Codex编写,可能有卡顿延迟现象!!!

当然如果有大佬优化一下更好啦~~~

电脑端脚本
// ==UserScript==
// @name         Linux.do按帖子创建时间排序
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  在 Linux.do 网页上修改链接和增加新链接
// @author       马克思
// @match        https://linux.do/*
// @grant        none
// @icon         data:image/png;base64,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
// ==/UserScript==

(function() {
    'use strict';

    var HIDE_SEEN_STORAGE_KEY = 'linuxdo_hide_seen_topics';

    function isHideSeenEnabled() {
        try {
            return localStorage.getItem(HIDE_SEEN_STORAGE_KEY) === 'true';
        } catch (error) {
            return false;
        }
    }

    function setHideSeenEnabled(enabled) {
        try {
            if (enabled) {
                localStorage.setItem(HIDE_SEEN_STORAGE_KEY, 'true');
            } else {
                localStorage.removeItem(HIDE_SEEN_STORAGE_KEY);
            }
        } catch (error) {
            // 忽略localStorage异常
        }
    }

    var hideSeenToggleRefs = {
        breadcrumb: null,
        container: null,
        checkbox: null
    };

    function clearHideSeenToggleRefs() {
        hideSeenToggleRefs.breadcrumb = null;
        hideSeenToggleRefs.container = null;
        hideSeenToggleRefs.checkbox = null;
    }

    var navigationRefs = {
        bar: null,
        latestReplyItem: null,
        latestCreatedItem: null
    };

    function refreshNavigationRefs(navBar) {
        navigationRefs.bar = navBar || null;
        navigationRefs.latestReplyItem = null;
        navigationRefs.latestCreatedItem = null;

        if (!navBar) {
            return navigationRefs;
        }

        navigationRefs.latestCreatedItem = navBar.querySelector('li.nav-item_latest_created');

        var navItems = navBar.querySelectorAll('li');
        Array.prototype.forEach.call(navItems, function(item) {
            if (navigationRefs.latestReplyItem) {
                return;
            }
            var anchor = item.querySelector('a');
            if (anchor && anchor.textContent.trim() === "最新回复") {
                navigationRefs.latestReplyItem = item;
            }
        });

        return navigationRefs;
    }

    function ensureNavigationRefs() {
        var navBar = document.querySelector('ul#navigation-bar');
        if (!navBar) {
            return refreshNavigationRefs(null);
        }

        if (navigationRefs.bar !== navBar ||
            (navigationRefs.latestReplyItem && !navBar.contains(navigationRefs.latestReplyItem)) ||
            (navigationRefs.latestCreatedItem && !navBar.contains(navigationRefs.latestCreatedItem))) {
            return refreshNavigationRefs(navBar);
        }

        if (!navigationRefs.latestReplyItem || !navigationRefs.latestCreatedItem) {
            return refreshNavigationRefs(navBar);
        }

        return navigationRefs;
    }

    function ensureHideSeenStyles() {
        if (document.getElementById('userscript-hide-seen-style')) {
            return;
        }
        var style = document.createElement('style');
        style.id = 'userscript-hide-seen-style';
        style.textContent = 'tr.topic-list-item.hide-seen-hidden { display: none !important; }';
        document.head.appendChild(style);
    }

    function isTopicRowUnread(row) {
        if (!row || row.nodeType !== 1) {
            return false;
        }

        if (row.classList.contains('unseen-topic')) {
            return true;
        }

        var notificationBadges = row.querySelectorAll('.topic-post-badges a.badge.badge-notification');
        var hasNumericBadge = false;
        var hasNewTopicBadge = false;

        Array.prototype.forEach.call(notificationBadges, function(badge) {
            if (!hasNewTopicBadge && badge.classList.contains('new-topic')) {
                hasNewTopicBadge = true;
                return;
            }

            if (!hasNumericBadge) {
                var badgeText = (badge.textContent || '').trim();
                if (badgeText && /^\d+$/.test(badgeText)) {
                    hasNumericBadge = true;
                }
            }
        });

        if (hasNewTopicBadge) {
            return true;
        }

        if (hasNumericBadge) {
            return false;
        }

        if (row.classList.contains('visited') || row.classList.contains('read')) {
            return false;
        }

        return true;
    }

    function applyTopicVisibility() {
        ensureHideSeenStyles();
        var hideSeen = isHideSeenEnabled();
        var topicRows = document.querySelectorAll('tr.topic-list-item');
        var hasVisibleRow = false;
        var fallbackRow = null;

        topicRows.forEach(function(row) {
            var isUnread = isTopicRowUnread(row);
            if (hideSeen && !isUnread) {
                row.classList.add('hide-seen-hidden');
                fallbackRow = row;
            } else {
                row.classList.remove('hide-seen-hidden');
                hasVisibleRow = true;
            }
        });

        if (hideSeen && !hasVisibleRow && fallbackRow) {
            fallbackRow.classList.remove('hide-seen-hidden');
        }
    }

    var visibilityUpdateTimer = null;
    function scheduleApplyTopicVisibility(delay) {
        if (visibilityUpdateTimer !== null) {
            clearTimeout(visibilityUpdateTimer);
        }
        visibilityUpdateTimer = setTimeout(function() {
            visibilityUpdateTimer = null;
            applyTopicVisibility();
        }, typeof delay === 'number' ? delay : 0);
    }

    function ensureHideSeenToggle() {
        var breadcrumb = document.querySelector('ol.category-breadcrumb');
        if (!breadcrumb) {
            clearHideSeenToggleRefs();
            return;
        }

        var legacyNavItem = document.querySelector('ul#navigation-bar li.nav-item_hide_seen');
        if (legacyNavItem && legacyNavItem.parentNode) {
            legacyNavItem.parentNode.removeChild(legacyNavItem);
        }

        var hideSeenEnabled = isHideSeenEnabled();

        if (hideSeenToggleRefs.container && breadcrumb.contains(hideSeenToggleRefs.container)) {
            if (hideSeenToggleRefs.checkbox) {
                hideSeenToggleRefs.checkbox.checked = hideSeenEnabled;
            }
            hideSeenToggleRefs.breadcrumb = breadcrumb;
            return;
        }

        clearHideSeenToggleRefs();

        var existingItem = breadcrumb.querySelector('li.breadcrumb-hide-seen-toggle');
        if (existingItem) {
            var existingCheckbox = existingItem.querySelector('input[type="checkbox"]');
            if (existingCheckbox) {
                existingCheckbox.checked = hideSeenEnabled;
            }
            hideSeenToggleRefs.breadcrumb = breadcrumb;
            hideSeenToggleRefs.container = existingItem;
            hideSeenToggleRefs.checkbox = existingCheckbox;
            return;
        }

        var hideSeenItem = document.createElement('li');
        hideSeenItem.className = 'breadcrumb-hide-seen-toggle';
        hideSeenItem.style.display = 'inline-flex';
        hideSeenItem.style.alignItems = 'center';
        hideSeenItem.style.gap = '4px';
        hideSeenItem.style.marginLeft = '8px';

        var label = document.createElement('label');
        label.style.cursor = 'pointer';
        label.style.display = 'inline-flex';
        label.style.alignItems = 'center';
        label.style.gap = '4px';
        label.title = '隐藏已看过的帖子';

        var checkbox = document.createElement('input');
        checkbox.type = 'checkbox';
        checkbox.checked = hideSeenEnabled;

        var textSpan = document.createElement('span');
        textSpan.textContent = '隐藏已阅';

        label.appendChild(checkbox);
        label.appendChild(textSpan);
        hideSeenItem.appendChild(label);

        var tagDetails = breadcrumb.querySelector('details.tag-drop');
        var insertionTarget = tagDetails ? tagDetails.parentElement : null;
        if (insertionTarget && insertionTarget.parentNode === breadcrumb) {
            insertionTarget.insertAdjacentElement('afterend', hideSeenItem);
        } else {
            breadcrumb.appendChild(hideSeenItem);
        }

        hideSeenToggleRefs.breadcrumb = breadcrumb;
        hideSeenToggleRefs.container = hideSeenItem;
        hideSeenToggleRefs.checkbox = checkbox;

        checkbox.addEventListener('change', function() {
            setHideSeenEnabled(checkbox.checked);
            applyTopicVisibility();
        });
    }

    function updateActiveStates() {
        var currentPath = window.location.pathname + window.location.search;
        var refs = ensureNavigationRefs();
        var navigationBar = refs.bar;

        if (!navigationBar) {
            return;
        }

        var latestReplyItem = refs.latestReplyItem;
        var latestCreatedItem = refs.latestCreatedItem;

        function setNavItemActive(navItem, isActive) {
            if (!navItem) {
                return;
            }
            navItem.classList.toggle('active', isActive);
            var navAnchor = navItem.querySelector('a');
            if (navAnchor) {
                navAnchor.classList.toggle('active', isActive);
            }
        }

        var navigationItems = navigationBar.querySelectorAll('li');
        for (var i = 0; i < navigationItems.length; i++) {
            var item = navigationItems[i];
            var anchor = item.querySelector('a');
            if (anchor && anchor.textContent.trim() === "最新回复") {
                latestReplyItem = item;
                break;
            }
        }

        if (!latestCreatedItem) {
            latestCreatedItem = navigationBar.querySelector('li.nav-item_latest_created');
        }

        // 检查是否有其他导航项已经是active状态(排除我们自己添加的两个项)
        var hasOtherActiveItem = false;
        for (var j = 0; j < navigationItems.length; j++) {
            var navItem = navigationItems[j];
            if (navItem !== latestReplyItem && navItem !== latestCreatedItem) {
                if (navItem.classList.contains('active')) {
                    hasOtherActiveItem = true;
                    break;
                }
            }
        }

        // 如果有其他项是active状态,不要改变现有状态
        if (hasOtherActiveItem) {
            // 移除我们两个项的active状态
            setNavItemActive(latestReplyItem, false);
            setNavItemActive(latestCreatedItem, false);
            navigationRefs.latestReplyItem = latestReplyItem;
            navigationRefs.latestCreatedItem = latestCreatedItem;
            navigationRefs.bar = navigationBar;
            return;
        }

        // 没有其他active项时,根据路径设置我们的项
        // 先移除两个项的active状态
        setNavItemActive(latestReplyItem, false);
        setNavItemActive(latestCreatedItem, false);

        navigationRefs.latestReplyItem = latestReplyItem;
        navigationRefs.latestCreatedItem = latestCreatedItem;
        navigationRefs.bar = navigationBar;

        // 根据路径设置相应的active状态
        if (currentPath.includes('/latest?order=created')) {
            // 选中"最新创建"
            setNavItemActive(latestCreatedItem, true);
        } else {
            // 默认选中"最新回复"
            setNavItemActive(latestReplyItem, true);
        }
    }

    function modifyNavigationBar() {
        var navigationBar = document.querySelector('ul#navigation-bar');
        if (!navigationBar) return;

        var navigationItems = navigationBar.querySelectorAll('li');
        navigationItems.forEach(function(item) {
            var anchor = item.querySelector('a');
            if (anchor && anchor.textContent.trim() === "最新") {
                // 修改原有的"最新"为"最新回复"
                anchor.textContent = "最新回复";

                // 检查是否已经存在"最新创建"项,避免重复添加
                if (!navigationBar.querySelector('li.nav-item_latest_created')) {
                    var newestCreatedElement = document.createElement('li');
                    newestCreatedElement.title = "新发的帖子";
                    newestCreatedElement.id = "ember999";
                    newestCreatedElement.className = "latest_created ember-view nav-item_latest_created";
                    newestCreatedElement.innerHTML = '<a href="' + anchor.getAttribute('href') + '?order=created" pcked="1">最新创建</a>';
                    item.insertAdjacentElement('afterend', newestCreatedElement);
                }
            }
        });

        refreshNavigationRefs(navigationBar);
        ensureHideSeenToggle();

        // 短暂延迟后更新active状态,确保页面其他导航状态已经设置完毕
        setTimeout(function() {
            updateActiveStates();
            ensureHideSeenToggle();
            scheduleApplyTopicVisibility();
        }, 50);
    }

    function observeDocumentChanges() {
        var observer = new MutationObserver(function(mutations) {
            var needNavUpdate = false;
            var needVisibilityUpdate = false;
            var needBreadcrumbUpdate = false;

            mutations.forEach(function(mutation) {
                if (mutation.type === 'attributes') {
                    if (mutation.target && mutation.target.nodeType === 1) {
                        if (!needVisibilityUpdate && mutation.target.classList) {
                            if (mutation.target.classList.contains('topic-list-item') ||
                                mutation.target.classList.contains('topic-list') ||
                                mutation.target.classList.contains('topic-list-body')) {
                                needVisibilityUpdate = true;
                            }
                        }

                        if (!needBreadcrumbUpdate && mutation.target.classList) {
                            if (mutation.target.matches && mutation.target.matches('ol.category-breadcrumb')) {
                                needBreadcrumbUpdate = true;
                            }
                        }
                    }
                    return;
                }

                if (mutation.type === 'childList') {
                    if (mutation.target && mutation.target.id === 'navigation-bar') {
                        needNavUpdate = true;
                    }

                    if (!needBreadcrumbUpdate && mutation.target && mutation.target.nodeType === 1) {
                        var targetElement = mutation.target;
                        if ((targetElement.matches && targetElement.matches('ol.category-breadcrumb')) ||
                            (targetElement.closest && targetElement.closest('ol.category-breadcrumb'))) {
                            needBreadcrumbUpdate = true;
                        }
                    }

                    Array.prototype.forEach.call(mutation.addedNodes, function(node) {
                        if (node.nodeType === 1 && node.classList && node.classList.contains('topic-list-item')) {
                            needVisibilityUpdate = true;
                        }

                        if (!needBreadcrumbUpdate && node.nodeType === 1) {
                            var element = node;
                            if ((element.matches && element.matches('ol.category-breadcrumb')) ||
                                (element.querySelector && element.querySelector('ol.category-breadcrumb'))) {
                                needBreadcrumbUpdate = true;
                            }
                        }
                    });

                    Array.prototype.forEach.call(mutation.removedNodes, function(node) {
                        if (node.nodeType === 1 && node.classList && node.classList.contains('topic-list-item')) {
                            needVisibilityUpdate = true;
                        }

                        if (!needBreadcrumbUpdate && node.nodeType === 1) {
                            var removedElement = node;
                            if ((removedElement.matches && removedElement.matches('ol.category-breadcrumb')) ||
                                (removedElement.querySelector && removedElement.querySelector('ol.category-breadcrumb'))) {
                                needBreadcrumbUpdate = true;
                            }
                        }
                    });

                    if (!needVisibilityUpdate && mutation.target && mutation.target.classList) {
                        if (mutation.target.classList.contains('topic-list') || mutation.target.classList.contains('topic-list-body')) {
                            needVisibilityUpdate = true;
                        }
                    }

                    if (!needVisibilityUpdate && mutation.target && mutation.target.id === 'topic-list') {
                        needVisibilityUpdate = true;
                    }
                }
            });

            if (needNavUpdate) {
                modifyNavigationBar();
            }

            if (needBreadcrumbUpdate) {
                ensureHideSeenToggle();
            }

            if (needVisibilityUpdate) {
                scheduleApplyTopicVisibility();
            }
        });

        observer.observe(document.documentElement, {
            childList: true,
            attributes: true,
            attributeFilter: ['class'],
            subtree: true
        });
    }

    function observeURLChanges() {
        var currentURL = window.location.href;
        var delayedRouteUpdateTimer = null;

        function triggerRouteUpdates() {
            updateActiveStates();
            ensureHideSeenToggle();
            scheduleApplyTopicVisibility();

            if (delayedRouteUpdateTimer !== null) {
                clearTimeout(delayedRouteUpdateTimer);
            }

            delayedRouteUpdateTimer = setTimeout(function() {
                delayedRouteUpdateTimer = null;
                updateActiveStates();
                ensureHideSeenToggle();
                scheduleApplyTopicVisibility();
            }, 150);
        }

        var urlObserver = new MutationObserver(function() {
            if (window.location.href !== currentURL) {
                currentURL = window.location.href;
                triggerRouteUpdates();
            }
        });

        urlObserver.observe(document.documentElement, { childList: true, subtree: true });

        // 监听popstate事件(浏览器前进后退)
        window.addEventListener('popstate', function() {
            triggerRouteUpdates();
        });

        // 监听pushstate和replacestate(SPA路由变化)
        var originalPushState = history.pushState;
        var originalReplaceState = history.replaceState;

        history.pushState = function() {
            originalPushState.apply(history, arguments);
            triggerRouteUpdates();
        };

        history.replaceState = function() {
            originalReplaceState.apply(history, arguments);
            triggerRouteUpdates();
        };
    }

    function waitForLoad(callback) {
        if (document.readyState === 'complete') {
            callback();
            return;
        }

        var observer = new MutationObserver(function(mutations) {
            if (document.readyState === 'complete') {
                observer.disconnect();
                callback();
            }
        });

        observer.observe(document.documentElement, { childList: true, subtree: true });
    }

    waitForLoad(function() {
        modifyNavigationBar();
        observeDocumentChanges();
        observeURLChanges();
        window.addEventListener('focus', function() {
            scheduleApplyTopicVisibility(120);
        });

        document.addEventListener('visibilitychange', function() {
            if (document.visibilityState === 'visible') {
                scheduleApplyTopicVisibility(120);
            }
        });

        window.addEventListener('pageshow', function(event) {
            if (event.persisted || document.visibilityState === 'visible') {
                scheduleApplyTopicVisibility(120);
            }
        });
        applyTopicVisibility();
    });
})();

下面是适配移动端的油猴脚本:

什么,你说安卓不能用油猴,可以去看看我之前的帖子…

移动端脚本
// ==UserScript==
// @name         Linux.do安卓端扩展
// @namespace    http://tampermonkey.net/
// @version      1.4
// @description  安卓端 Linux.do 增加“最新创建”视图、隐藏已阅话题,强制新标签页打开并立刻标记隐藏
// @author       Jood安卓版
// @match        https://linux.do/*
// @grant        none
// @icon         data:image/png;base64,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
// ==/UserScript==
(function() {
    'use strict';

    var HIDE_SEEN_STORAGE_KEY = 'linuxdo_hide_seen_topics';
    var HIDE_CLASS_NAME = 'hide-seen-hidden';
    var STYLE_ELEMENT_ID = 'userscript-hide-seen-style';

    var visibilityUpdateTimer = null;
    var delayedUIUpdateTimer = null;

    var hideSeenToggleRefs = {
        breadcrumb: {
            root: null,
            container: null,
            checkbox: null
        },
        controls: {
            root: null,
            container: null,
            checkbox: null
        }
    };

    function clearBreadcrumbToggleRefs() {
        hideSeenToggleRefs.breadcrumb.root = null;
        hideSeenToggleRefs.breadcrumb.container = null;
        hideSeenToggleRefs.breadcrumb.checkbox = null;
    }

    function clearControlsToggleRefs() {
        hideSeenToggleRefs.controls.root = null;
        hideSeenToggleRefs.controls.container = null;
        hideSeenToggleRefs.controls.checkbox = null;
    }

    function isHideSeenEnabled() {
        try {
            return localStorage.getItem(HIDE_SEEN_STORAGE_KEY) === 'true';
        } catch (error) {
            return false;
        }
    }

    function setHideSeenEnabled(enabled) {
        try {
            if (enabled) {
                localStorage.setItem(HIDE_SEEN_STORAGE_KEY, 'true');
            } else {
                localStorage.removeItem(HIDE_SEEN_STORAGE_KEY);
            }
        } catch (error) {
            // ignore storage errors
        }
    }

    function ensureHideSeenStyles() {
        if (document.getElementById(STYLE_ELEMENT_ID)) {
            return;
        }

        var style = document.createElement('style');
        style.id = STYLE_ELEMENT_ID;
        style.textContent = '.topic-list-body tr.' + HIDE_CLASS_NAME + ' { display: none !important; }';
        document.head.appendChild(style);
    }

    function getTopicItems() {
        return Array.prototype.slice.call(document.querySelectorAll('.topic-list-body tr'));
    }

    function isTopicItemUnread(item) {
        if (!item || item.nodeType !== 1) {
            return false;
        }

        if (item.classList.contains('unseen-topic')) {
            return true;
        }

        var notificationBadges = item.querySelectorAll('.topic-post-badges a.badge.badge-notification, .badge-notification');
        var hasNumericBadge = false;
        var hasNewTopicBadge = false;

        Array.prototype.forEach.call(notificationBadges, function(badge) {
            if (!badge) {
                return;
            }

            var badgeClassList = badge.classList || null;
            if (!hasNewTopicBadge && badgeClassList && badgeClassList.contains('new-topic')) {
                hasNewTopicBadge = true;
                return;
            }

            if (!hasNumericBadge) {
                var badgeText = (badge.textContent || '').trim();
                if (!badgeText) {
                    badgeText = badge.getAttribute('data-badge') || badge.getAttribute('data-count') || '';
                }
                if (badgeText && /^\d+$/.test(badgeText)) {
                    hasNumericBadge = true;
                }
            }
        });

        if (hasNewTopicBadge) {
            return true;
        }

        if (hasNumericBadge) {
            return false;
        }

        if (item.classList.contains('visited') || item.classList.contains('read')) {
            return false;
        }

        return true;
    }

    function applyTopicVisibility() {
        ensureHideSeenStyles();
        var hideSeen = isHideSeenEnabled();
        var topicItems = getTopicItems();
        var hasVisibleItem = false;
        var fallbackItem = null;

        topicItems.forEach(function(item) {
            var isUnread = isTopicItemUnread(item);
            if (hideSeen && !isUnread) {
                item.classList.add(HIDE_CLASS_NAME);
                fallbackItem = item;
            } else {
                item.classList.remove(HIDE_CLASS_NAME);
                hasVisibleItem = true;
            }
        });

        if (hideSeen && !hasVisibleItem && fallbackItem) {
            fallbackItem.classList.remove(HIDE_CLASS_NAME);
        }
    }

    function scheduleApplyTopicVisibility(delay) {
        if (visibilityUpdateTimer !== null) {
            clearTimeout(visibilityUpdateTimer);
        }
        visibilityUpdateTimer = setTimeout(function() {
            visibilityUpdateTimer = null;
            applyTopicVisibility();
        }, typeof delay === 'number' ? delay : 0);
    }

    function ensureHideSeenToggle() {
        ensureHideSeenToggleInBreadcrumb();
        ensureHideSeenToggleInControls();
    }

    function triggerUIUpdates(runNavigation) {
        if (typeof runNavigation !== 'boolean') {
            runNavigation = true;
        }

        if (runNavigation) {
            enhanceNavigation();
        }
        ensureHideSeenToggle();
        scheduleApplyTopicVisibility();

        if (delayedUIUpdateTimer !== null) {
            clearTimeout(delayedUIUpdateTimer);
        }

        delayedUIUpdateTimer = setTimeout(function() {
            delayedUIUpdateTimer = null;
            if (runNavigation) {
                enhanceNavigation();
            }
            ensureHideSeenToggle();
            scheduleApplyTopicVisibility();
        }, 150);
    }

    function ensureHideSeenToggleInBreadcrumb() {
        var breadcrumb = document.querySelector('ol.category-breadcrumb');
        if (!breadcrumb) {
            clearBreadcrumbToggleRefs();
            return;
        }

        var refs = hideSeenToggleRefs.breadcrumb;
        if (refs.container && !refs.container.isConnected) {
            clearBreadcrumbToggleRefs();
            refs = hideSeenToggleRefs.breadcrumb;
        }

        var hideSeenEnabled = isHideSeenEnabled();

        if (refs.container && breadcrumb.contains(refs.container)) {
            if (refs.checkbox) {
                refs.checkbox.checked = hideSeenEnabled;
            }
            refs.root = breadcrumb;
            return;
        }

        var existing = breadcrumb.querySelector('li.breadcrumb-hide-seen-toggle');
        if (existing) {
            var existingCheckbox = existing.querySelector('input[type="checkbox"]');
            if (existingCheckbox) {
                existingCheckbox.checked = hideSeenEnabled;
            }
            refs.root = breadcrumb;
            refs.container = existing;
            refs.checkbox = existingCheckbox;
            return;
        }

        var hideSeenItem = document.createElement('li');
        hideSeenItem.className = 'breadcrumb-hide-seen-toggle';
        hideSeenItem.style.display = 'inline-flex';
        hideSeenItem.style.alignItems = 'center';
        hideSeenItem.style.gap = '4px';
        hideSeenItem.style.marginLeft = '8px';

        var label = document.createElement('label');
        label.style.cursor = 'pointer';
        label.style.display = 'inline-flex';
        label.style.alignItems = 'center';
        label.style.gap = '4px';
        label.title = '隐藏已看过的帖子';

        var checkbox = document.createElement('input');
        checkbox.type = 'checkbox';
        checkbox.checked = hideSeenEnabled;

        var textSpan = document.createElement('span');
        textSpan.textContent = '隐藏已阅';

        label.appendChild(checkbox);
        label.appendChild(textSpan);
        hideSeenItem.appendChild(label);

        var tagDetails = breadcrumb.querySelector('details.tag-drop');
        var insertionTarget = tagDetails ? tagDetails.parentElement : null;
        if (insertionTarget && insertionTarget.parentNode === breadcrumb) {
            insertionTarget.insertAdjacentElement('afterend', hideSeenItem);
        } else {
            breadcrumb.appendChild(hideSeenItem);
        }

        refs.root = breadcrumb;
        refs.container = hideSeenItem;
        refs.checkbox = checkbox;

        checkbox.addEventListener('change', function() {
            setHideSeenEnabled(checkbox.checked);
            scheduleApplyTopicVisibility();
        });
    }

    function ensureHideSeenToggleInControls() {
        var controls = document.querySelector('.navigation-controls');
        if (!controls) {
            clearControlsToggleRefs();
            return;
        }

        var refs = hideSeenToggleRefs.controls;
        if (refs.container && !refs.container.isConnected) {
            clearControlsToggleRefs();
            refs = hideSeenToggleRefs.controls;
        }

        var createButton = controls.querySelector('#create-topic');
        var hideSeenEnabled = isHideSeenEnabled();

        if (refs.container && controls.contains(refs.container)) {
            if (refs.checkbox) {
                refs.checkbox.checked = hideSeenEnabled;
            }
            if (createButton && createButton.parentNode && refs.container.nextSibling !== createButton) {
                createButton.parentNode.insertBefore(refs.container, createButton);
            } else if (!createButton && refs.container.parentNode !== controls) {
                controls.appendChild(refs.container);
            }
            refs.root = controls;
            return;
        }

        var existing = controls.querySelector('.hide-seen-toggle-control');
        if (existing) {
            var existingCheckbox = existing.querySelector('input[type="checkbox"]');
            if (existingCheckbox) {
                existingCheckbox.checked = hideSeenEnabled;
            }
            if (createButton && createButton.parentNode && existing.nextSibling !== createButton) {
                createButton.parentNode.insertBefore(existing, createButton);
            } else if (!createButton && existing.parentNode !== controls) {
                controls.appendChild(existing);
            }
            refs.root = controls;
            refs.container = existing;
            refs.checkbox = existingCheckbox;
            return;
        }

        var container = document.createElement('label');
        container.className = 'hide-seen-toggle-control';
        container.style.display = 'inline-flex';
        container.style.alignItems = 'center';
        container.style.gap = '6px';
        container.style.marginRight = '8px';
        container.style.cursor = 'pointer';
        container.style.padding = '4px 10px';
        container.style.borderRadius = '16px';
        container.style.border = '1px solid rgba(0, 0, 0, 0.1)';
        container.style.background = 'var(--primary-very-low, rgba(0,0,0,0.03))';

        var checkbox = document.createElement('input');
        checkbox.type = 'checkbox';
        checkbox.checked = hideSeenEnabled;

        var textSpan = document.createElement('span');
        textSpan.textContent = '隐藏已阅';
        textSpan.style.fontSize = '14px';

        container.appendChild(checkbox);
        container.appendChild(textSpan);

        if (createButton && createButton.parentNode) {
            createButton.parentNode.insertBefore(container, createButton);
        } else {
            controls.appendChild(container);
        }

        refs.root = controls;
        refs.container = container;
        refs.checkbox = checkbox;

        checkbox.addEventListener('change', function() {
            setHideSeenEnabled(checkbox.checked);
            scheduleApplyTopicVisibility();
        });
    }

    function normalizeHref(href) {
        if (!href) {
            return '';
        }
        try {
            var link = document.createElement('a');
            link.href = href;
            return link.pathname + link.search;
        } catch (error) {
            return href;
        }
    }

    function currentPath() {
        return window.location.pathname + window.location.search;
    }

    function isLatestPath(path) {
        if (!path) {
            return false;
        }
        if (!path.startsWith('/latest')) {
            return false;
        }
        return !/[\?&]order=created\b/.test(path);
    }

    function isLatestCreatedPath(path) {
        if (!path) {
            return false;
        }
        if (!path.startsWith('/latest')) {
            return false;
        }
        return /[\?&]order=created\b/.test(path);
    }

    function isLatestHref(href) {
        return isLatestPath(normalizeHref(href));
    }

    function isLatestCreatedHref(href) {
        return isLatestCreatedPath(normalizeHref(href));
    }

    function setActiveState(item, active) {
        if (!item) {
            return;
        }

        if (active) {
            item.classList.add('active');
        } else {
            item.classList.remove('active');
        }

        var anchor = item.querySelector('a');
        if (!anchor) {
            return;
        }

        if (active) {
            anchor.classList.add('active');
            anchor.setAttribute('aria-current', 'page');
        } else {
            anchor.classList.remove('active');
            anchor.removeAttribute('aria-current');
        }
    }

    function locateNavigationLists() {
        var lists = [];
        var modalLists = document.querySelectorAll('.dropdown-menu');
        Array.prototype.forEach.call(modalLists, function(list) {
            lists.push(list);
        });
        return lists;
    }

    function computeCreatedHref(originalHref) {
        var href = originalHref || '/latest';
        if (/[\?&]order=created\b/.test(href)) {
            return href;
        }
        return href + (href.indexOf('?') === -1 ? '?' : '&') + 'order=created';
    }

    function ensureLatestCreatedOption(listElement) {
        if (!listElement) {
            return;
        }

        var latestItem = listElement.querySelector('li.nav-item_latest');
        if (!latestItem) {
            return;
        }

        var existingCreated = listElement.querySelector('li.nav-item_latest_created');
        var latestAnchor = latestItem.querySelector('a');
        if (!latestAnchor) {
            return;
        }

        var latestHref = latestAnchor.getAttribute('href') || '';
        var createdHref = computeCreatedHref(latestHref);
        var originalText = latestAnchor.textContent || '';
        var trimmed = originalText.trim();
        var replaced = trimmed.replace('最新', '最新创建');
        if (replaced === trimmed) {
            replaced = '最新创建';
        }

        if (existingCreated) {
            var createdAnchor = existingCreated.querySelector('a');
            if (createdAnchor) {
                createdAnchor.setAttribute('href', createdHref);
                createdAnchor.textContent = replaced;
            }
            return;
        }

        var clone = latestItem.cloneNode(true);
        clone.classList.remove('nav-item_latest');
        clone.classList.remove('latest');
        clone.classList.remove('active');
        clone.classList.add('latest_created');
        clone.classList.add('nav-item_latest_created');
        clone.title = '最近创建的话题';
        if (clone.id) {
            clone.id = clone.id + '_created';
        } else {
            clone.id = 'latest-created-item';
        }

        var cloneAnchor = clone.querySelector('a');
        if (cloneAnchor) {
            cloneAnchor.classList.remove('active');
            cloneAnchor.removeAttribute('aria-current');
            cloneAnchor.setAttribute('href', createdHref);
            cloneAnchor.textContent = replaced;
        }

        latestItem.insertAdjacentElement('afterend', clone);
    }

    function updateTriggerButtonLabel() {
        var triggerButton = document.querySelector('.linuxdoscripts-setting') || document.querySelector('button[data-identifier="list-control-toggle-link"]');
        if (!triggerButton) {
            return;
        }

        var textSpan = triggerButton.querySelector('.list-control-toggle-link__text, .name, span');
        if (!textSpan) {
            textSpan = triggerButton;
        }

        var path = currentPath();
        var newText = '';
        if (isLatestCreatedPath(path)) {
            newText = '最新创建';
        } else if (isLatestPath(path)) {
            newText = '最新';
        }

        if (newText) {
            if (textSpan.childNodes.length > 0) {
                Array.prototype.forEach.call(textSpan.childNodes, function(node) {
                    if (node.nodeType === 3 && node.textContent.trim().indexOf('最新') !== -1) {
                        node.textContent = newText;
                    }
                });
                if(textSpan.textContent.indexOf('最新') === -1 && textSpan.textContent.trim() !== newText){
                     textSpan.textContent = newText;
                }
            } else {
                textSpan.textContent = newText;
            }
        }
    }

    function updateActiveStates() {
        var path = currentPath();
        var lists = locateNavigationLists();

        lists.forEach(function(listElement) {
            var latestItem = null;
            var createdItem = null;

            var items = listElement.querySelectorAll('li');
            Array.prototype.forEach.call(items, function(item) {
                var anchor = item.querySelector('a');
                if (!anchor) {
                    return;
                }
                var href = anchor.getAttribute('href') || '';
                if (isLatestCreatedHref(href)) {
                    createdItem = item;
                } else if (isLatestHref(href)) {
                    latestItem = item;
                }
            });

            if (!latestItem && !createdItem) {
                return;
            }

            if (isLatestCreatedPath(path)) {
                setActiveState(latestItem, false);
                setActiveState(createdItem, true);
            } else if (isLatestPath(path)) {
                setActiveState(createdItem, false);
                setActiveState(latestItem, true);
            } else {
                setActiveState(createdItem, false);
                setActiveState(latestItem, false);
            }
        });

        updateTriggerButtonLabel();
    }

    function enhanceNavigation() {
        var lists = locateNavigationLists();
        lists.forEach(function(listElement) {
            ensureLatestCreatedOption(listElement);
        });
        updateActiveStates();
    }

    function nodeContainsSelector(node, selector) {
        if (!node || node.nodeType !== 1) {
            return false;
        }

        if (node.matches && node.matches(selector)) {
            return true;
        }

        if (node.querySelector) {
            return !!node.querySelector(selector);
        }

        return false;
    }

    function observeDocumentChanges() {
        var observer = new MutationObserver(function(mutations) {
            var navChanged = false;
            var breadcrumbChanged = false;
            var topicsChanged = false;

            mutations.forEach(function(mutation) {
                if (mutation.type === 'childList') {
                    Array.prototype.forEach.call(mutation.addedNodes, function(node) {
                        if (!navChanged && nodeContainsSelector(node, '.dropdown-menu')) {
                            navChanged = true;
                        }
                        if (!navChanged && nodeContainsSelector(node, '.navigation-controls')) {
                            navChanged = true;
                        }
                        if (!breadcrumbChanged && nodeContainsSelector(node, 'ol.category-breadcrumb')) {
                            breadcrumbChanged = true;
                        }
                        if (!topicsChanged && nodeContainsSelector(node, '.topic-list-body tr')) {
                            topicsChanged = true;
                        }
                    });

                    Array.prototype.forEach.call(mutation.removedNodes, function(node) {
                        if (!navChanged && nodeContainsSelector(node, '.dropdown-menu')) {
                            navChanged = true;
                        }
                        if (!navChanged && nodeContainsSelector(node, '.navigation-controls')) {
                            navChanged = true;
                        }
                        if (!breadcrumbChanged && nodeContainsSelector(node, 'ol.category-breadcrumb')) {
                            breadcrumbChanged = true;
                        }
                        if (!topicsChanged && nodeContainsSelector(node, '.topic-list-body tr')) {
                            topicsChanged = true;
                        }
                    });
                }

                if (!navChanged && mutation.target && mutation.target.nodeType === 1) {
                    if (mutation.target.matches && mutation.target.matches('.dropdown-menu')) {
                        navChanged = true;
                    }
                    if (mutation.target.matches && mutation.target.matches('.navigation-controls')) {
                        navChanged = true;
                    }
                }

                if (!breadcrumbChanged && mutation.target && mutation.target.nodeType === 1) {
                    if (mutation.target.matches && mutation.target.matches('ol.category-breadcrumb')) {
                        breadcrumbChanged = true;
                    }
                }

                if (!topicsChanged && mutation.target && mutation.target.nodeType === 1) {
                    if (mutation.target.matches && mutation.target.matches('.topic-list-body, .topic-list-body tr')) {
                        topicsChanged = true;
                    }
                }
            });

            if (navChanged) {
                triggerUIUpdates(true);
            }

            if (breadcrumbChanged && !navChanged) {
                triggerUIUpdates(false);
            }

            if (topicsChanged) {
                scheduleApplyTopicVisibility();
            }
        });

        observer.observe(document.documentElement, { childList: true, subtree: true });
    }

    function observeURLChanges() {
        var lastURL = window.location.href;

        var urlObserver = new MutationObserver(function() {
            if (window.location.href !== lastURL) {
                lastURL = window.location.href;
                triggerUIUpdates(true);
            }
        });

        urlObserver.observe(document.documentElement, { childList: true, subtree: true });

        window.addEventListener('popstate', function() {
            triggerUIUpdates(true);
        });

        var originalPushState = history.pushState;
        history.pushState = function() {
            originalPushState.apply(history, arguments);
            triggerUIUpdates(true);
        };

        var originalReplaceState = history.replaceState;
        history.replaceState = function() {
            originalReplaceState.apply(history, arguments);
            triggerUIUpdates(true);
        };
    }

    // 拦截点击事件,强制让帖子在新标签页打开,并在当前页将其标记为已阅
    function enableNewTabForTopics() {
        document.addEventListener('click', function(e) {
            var row = e.target.closest('.topic-list-body tr');
            if (!row) return;

            var clickedAnchor = e.target.closest('a');
            var targetHref = null;

            // 找出帖子链接
            if (clickedAnchor && clickedAnchor.href) {
                var url = new URL(clickedAnchor.href, window.location.origin);
                if (url.pathname.startsWith('/t/')) {
                    targetHref = clickedAnchor.href;
                } else {
                    return; // 如果点的是头像或标签等非帖子链接,则放弃拦截
                }
            } else {
                var mainLink = row.querySelector('a.title') || row.querySelector('a.raw-link') || row.querySelector('a');
                if (mainLink && mainLink.href) {
                    var fallbackUrl = new URL(mainLink.href, window.location.origin);
                    if (fallbackUrl.pathname.startsWith('/t/')) {
                        targetHref = mainLink.href;
                    }
                }
            }

            // 如果成功抓到了帖子链接
            if (targetHref) {
                e.preventDefault();
                e.stopPropagation();

                // 重点:在 DOM 里强行给这一行加上 'visited' 和 'read' 的状态,并剥除 'unseen-topic'
                row.classList.add('visited');
                row.classList.add('read');
                row.classList.remove('unseen-topic');

                // 触发隐藏判定:只要你开着“隐藏已阅”,这行帖子就会原地消失
                scheduleApplyTopicVisibility();

                // 弹出新页面
                window.open(targetHref, '_blank');
            }
        }, true);
    }

    function waitForLoad(callback) {
        if (document.readyState === 'complete' || document.readyState === 'interactive') {
            callback();
            return;
        }

        document.addEventListener('DOMContentLoaded', function onReady() {
            document.removeEventListener('DOMContentLoaded', onReady);
            callback();
        });
    }

    waitForLoad(function() {
        triggerUIUpdates(true);
        applyTopicVisibility();
        observeDocumentChanges();
        observeURLChanges();
        enableNewTabForTopics();

        window.addEventListener('focus', function() {
            scheduleApplyTopicVisibility(120);
        });
        document.addEventListener('visibilitychange', function() {
            if (document.visibilityState === 'visible') {
                scheduleApplyTopicVisibility(120);
            }
        });
        window.addEventListener('pageshow', function(event) {
            if (event.persisted || document.visibilityState === 'visible') {
                scheduleApplyTopicVisibility(120);
            }
        });
    });
})();

v1.4 更新一下移动端脚本,现在默认打开新的页面,不会造成反复刷新卡顿

20 个赞

佬是用的vscode搭配codex吗?能否指路教程

是啊,你看看这个吧,这个提示词还可以

vscode有很多乱码问题,你可以搜索看,站内有解决方案,指令乱用powershell这些你也看看,站内都有,我就不一一列举了,遇到什么问题搜就行

https://linux.do/t/topic/952503

感谢 :+1:

感谢大佬!

谢佬又多了一个小功能有的时候回复还是挺有用的 比如添加ai筛选有用的回复显示(可自定义设置api 类似词隐藏

1 个赞

立志刷遍每个帖子。

:laughing:

1 个赞

怎么评价有用

比如 说的有道理 (等保留)或者使用ai排除如谢谢 感谢分享之类(就可以隐藏(可查看原始的可使用如打✓或x进行学习(喂模型表示这个没用 有用或者不清楚的标个颜色 让用户来选择 )的和一些比如歪楼的(与主题无关的剩下的就是有用的和排除重复的(基本上雷同的(参考通知滤盒 :face_without_mouth:

1 个赞

感谢大佬分享!

1 个赞

感谢大佬

脚本收下了,感谢分享!

1 个赞

感谢分享

1 个赞

哪个帖子?

音乐的那个

感谢,看到了
要用特定浏览器

感谢大佬:folded_hands: