一个L站帖子排序的插件

@pengzhile 原作者在这,有时候想看最新发布的帖子有哪些,没法按创建时间排序。找到这个油猴插件,使用了一下功能达到了,有一些细节没有处理好,作为一个强迫症患者,实在受不了,所以优化了一下。发这种插件应该不违规吧?

@NullUser 佬的思路。

此处是油猴插件代码
// ==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';

    function updateActiveStates() {
        var currentPath = window.location.pathname + window.location.search;
        var navigationBar = document.querySelector('ul#navigation-bar');

        if (!navigationBar) return;

        var latestReplyItem = null;
        var latestCreatedItem = navigationBar.querySelector('li.nav-item_latest_created');

        // 找到"最新回复"项
        var navigationItems = navigationBar.querySelectorAll('li');
        navigationItems.forEach(function(item) {
            var anchor = item.querySelector('a');
            if (anchor && anchor.textContent.trim() === "最新回复") {
                latestReplyItem = item;
            }
        });

        // 检查是否有其他导航项已经是active状态(排除我们自己添加的两个项)
        var hasOtherActiveItem = false;
        navigationItems.forEach(function(item) {
            if (item !== latestReplyItem && item !== latestCreatedItem) {
                if (item.classList.contains('active')) {
                    hasOtherActiveItem = true;
                }
            }
        });

        // 如果有其他项是active状态,不要改变现有状态
        if (hasOtherActiveItem) {
            // 移除我们两个项的active状态
            if (latestReplyItem) {
                latestReplyItem.classList.remove('active');
                var anchor = latestReplyItem.querySelector('a');
                if (anchor) anchor.classList.remove('active');
            }
            if (latestCreatedItem) {
                latestCreatedItem.classList.remove('active');
                var anchor = latestCreatedItem.querySelector('a');
                if (anchor) anchor.classList.remove('active');
            }
            return;
        }

        // 没有其他active项时,根据路径设置我们的项
        // 先移除两个项的active状态
        if (latestReplyItem) {
            latestReplyItem.classList.remove('active');
            var anchor = latestReplyItem.querySelector('a');
            if (anchor) anchor.classList.remove('active');
        }
        if (latestCreatedItem) {
            latestCreatedItem.classList.remove('active');
            var anchor = latestCreatedItem.querySelector('a');
            if (anchor) anchor.classList.remove('active');
        }

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

    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);
                }
            }
        });

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

    function observeDocumentChanges() {
        var observer = new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                if (mutation.type === 'childList' && mutation.target.id === 'navigation-bar') {
                    modifyNavigationBar();
                }
            });
        });

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

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

        var urlObserver = new MutationObserver(function() {
            if (window.location.href !== currentURL) {
                currentURL = window.location.href;
                setTimeout(updateActiveStates, 150);
            }
        });

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

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

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

        history.pushState = function() {
            originalPushState.apply(history, arguments);
            setTimeout(updateActiveStates, 150);
        };

        history.replaceState = function() {
            originalReplaceState.apply(history, arguments);
            setTimeout(updateActiveStates, 150);
        };
    }

    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();
    });
})();


2 个赞

佬真的太大太太太太厉害辣!

太强了,佬!

[!tip]感谢佬友,效果很棒

这个不违规哦

按创建时间排序看这个,建站模板上有,但是Linuxdo没用
https://linux.do/latest?order=created

w 感谢分享喵~ 猫喜欢(瘫

插件里面就是用的这个,用插件不用手敲了

太强了佬 谢谢佬友


可以在这里创建一个跳转,把
https://linux.do/latest?order=created
放进去

这样不能按类别分别查看。

刚好在找这种排序脚本,感谢佬友

此处应a秦始皇


你a吧,我不敢,这还有个bug,只要手速够快可以无限多

哈哈哈哈