Greasy Fork

Greasy Fork is available in English.

简单的青柠起始页优化

默认去掉青柠起始页的页脚,使用 alt + t 控制搜索框的显示隐藏 使用alt + g切换时钟显示隐藏,变量全局存储,不需要每次打开都关闭或者显示了 alt+b 显示隐藏 B站热搜

当前为 2024-03-04 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @license       MIT
// @name          简单的青柠起始页优化
// @namespace     https://bbs.tampermonkey.net.cn/
// @version       0.3.7
// @description   默认去掉青柠起始页的页脚,使用 alt + t 控制搜索框的显示隐藏 使用alt + g切换时钟显示隐藏,变量全局存储,不需要每次打开都关闭或者显示了 alt+b 显示隐藏 B站热搜 
// @author        Hei
// @match         *://limestart.cn/*
// @grant         GM_setClipboard
// @grant         unsafeWindow
// @grant         GM_xmlhttpRequest
// @grant         GM_addStyle
// @grant         GM_getResourceText
// @grant         GM_getResourceURL
// @connect       api.bilibili.com
// @connect       at.alicdn.com
// @connect       i0.hdslb.com
// @require       https://lib.baomitu.com/jquery/1.12.4/jquery.min.js
// @resource css https://at.alicdn.com/t/c/font_4423350_7t2u8i9k77r.css
// ==/UserScript==
(function () {
    'use strict';
    // 基础依赖
    const _mainKey = 'easy_limestart'
    const ls = {
        set(key, val) {
            let easy_limestart_obj = window.localStorage.getItem(_mainKey);
            if (!easy_limestart_obj) {
                easy_limestart_obj = {}
            } else {
                easy_limestart_obj = JSON.parse(easy_limestart_obj)
            }
            easy_limestart_obj[key] = val;
            window.localStorage.setItem(_mainKey, JSON.stringify(easy_limestart_obj))
        },
        get(key, defaultVal = null) {
            let easy_limestart_obj = window.localStorage.getItem(_mainKey);
            if (!easy_limestart_obj) {
                easy_limestart_obj = {}
                return defaultVal
            } else {
                easy_limestart_obj = JSON.parse(easy_limestart_obj)
            }
            const val = easy_limestart_obj[key];
            if (val !== undefined) {
                return JSON.parse(val)
            }
            return defaultVal
        }
    }
    //消息弹窗
    const Message = {
        info(msg) {
            const delay = 2000; //多少毫秒后隐藏
            const greetingContainer = document.createElement("div")
            greetingContainer.id = "greetingContainer"
            const greetingBox = document.createElement("div")
            greetingBox.id = "greetingBox"
            greetingBox.textContent = msg
            greetingContainer.append(greetingBox)
            document.body.append(greetingContainer)
            greetingContainer.offsetLeft; // reflow
            greetingBox.style.opacity = 1
            greetingBox.style.transform = `translateY(0)`
            setTimeout(() => {
                greetingBox.style.opacity = 0;
                greetingBox.style.transform = `translateY(-100%)`;
                greetingBox.addEventListener("transitionend", () => {
                    greetingContainer.remove();
                })
                greetingBox.addEventListener("webkitTransitionEnd", () => {
                    greetingContainer.remove();
                })
            }, delay)
        }
    }

    // 加载B站热搜


    // 去除脚标
    const timer = setInterval(() => {
        const footer = document.querySelector("footer");
        if (footer) {
            footer.style.display = 'none'
            clearInterval(timer)
        }
    }, 500);

    /**
     * 显示/隐藏搜索框
     */
    function showSearchCb() {
        const searchSuggestionContainer = document.getElementById("searchSuggestionContainer");
        const menuSearchEng = document.getElementById("menuSearchEng");
        const searchEl = document.getElementById("searchBar");
        if (searchEl) {
            searchEl.style.display = showSearch ? 'block' : 'none';
        }
        if (searchSuggestionContainer) {
            searchSuggestionContainer.style.display = showSearch ? 'block' : 'none';
        }

        if (menuSearchEng) {
            menuSearchEng.style.display = showSearch ? 'block' : 'none';
        }

    }

    let showSearch = ls.get("showSearch");
    showSearchCb();
    // 如果隐藏输入框,那就失去焦点 + 不要cover
    if (!showSearch) {
        document.getElementById("inputSearch").blur()
        document.getElementById("cover").click()
    }



    // 显示/隐藏时间框
    let showTimer = ls.get("showTimer", true)
    function showTimerCb() {
        const timeContainer = document.getElementById("timeContainer");
        if (timeContainer) {
            timeContainer.style.display = showTimer ? 'block' : 'none';
        }
    }
    showTimerCb()

    let showBilibili = false;
    let isBliLoading = false;
    //B站热搜请求
    function requestBiApi() {
        const getRow = async (show_name, keyword, icon) => {
            const src = await (new Promise((res) => {
                if (icon) {
                    GM_xmlhttpRequest({
                        url: icon,
                        method: 'get',
                        responseType: 'blob',
                        onload: (data) => {
                            var blob = new Blob([data.response], { type: 'image/png' });
                            const fileReader = new FileReader()
                            fileReader.onload = (e) => {
                                res(e.target.result)
                            }
                            // readAsDataURL
                            fileReader.readAsDataURL(blob)
                        }
                    })
                } else {
                    res(null)
                }
            }))
            const img_html = src ? `<img class="bilibili-trending-img" src="${src}" />` : ''
            return `<div class="setOptBox">
                    <span class="setOptCaption" style="margin-left: -6px;">
                        <a href="https://search.bilibili.com/all?keyword=${keyword}" class="link" target="_blank"><i class="icon iconfont icon-bilibili" style="padding-right: 5px;"></i>${show_name}${img_html}</a>
                    </span>
                </div>`
        }
        if (isBliLoading) return;
        isBliLoading = true;
        $(".cover2.easy-limestart .pContent").html(`<div class="setGroup">
                        <div class="setOptBox">
                            <span class="setOptCaption" style="margin-left: -6px;">
                                <a href="javascript:void(0)" class="link" target="_blank">加载中...</a>
                            </span>
                        </div>
                    </div>`)
        GM_xmlhttpRequest({
            url: "https://api.bilibili.com/x/web-interface/wbi/search/square?limit=15&platform=web",
            method: "get",
            onload: async (data) => {
                const { data: { trending: { list, title, top_list } }, code, message } = JSON.parse(data.response);
                // console.log(code, message)
                if (code != 0) {
                    Message.info(message)
                } else {
                    $(".cover2.easy-limestart .pCaptionBar").html(`<span class="btnRectangle3" style="left: 5px; right: auto; top: 6px;" id="btnRefreshBli" role="button" tabindex="0">刷新</span>${title}`)
                    // console.log(list, title, top_list)
                    $("#btnRefreshBli").click(() => {
                        requestBiApi()
                    })
                    const rowList = []
                    for (const idx in list) {
                        const { show_name, keyword, icon } = list[idx];
                        const row = await getRow(show_name, keyword, icon)
                        rowList.push(row)
                    }
                    $(".cover2.easy-limestart .pContent .setGroup").html(rowList.join(""))
                    isBliLoading = false;
                }
            },
            onabort: () => {
                isBliLoading = false;
            },
            onerror: () => {
                isBliLoading = false;
            }
        })
        $(".cover2.easy-limestart").css({
            display: "block",
            opacity: 1
        })
        $(".cover2.easy-limestart .popUp").css({
            display: "block",
            opacity: 0,
            transform: 'rotate3d(1, 1, 0, 50deg)'
        }).offset();
        $(".cover2.easy-limestart .popUp").css({
            display: "block",
            opacity: 1,
            transform: 'none'
        })
    }
    //B站热搜显示
    function showBlibiliTrending(init = false) {
        // style="display: block; opacity: 1;"
        // style="display: block; opacity: 1; transform: none;"
        const dialog = `<div class="cover2 easy-limestart">
            <div class="popUp" id="bilibiliTrending" style="display: block; opacity: 1; transform: none;">
                <span class="btnClose" role="button" tabindex="0" title="关闭"><span class="btnCloseInner"></span></span>
                <div class="pCaptionBar scrolled"></div>
                <div class="pContent" id="contentGSet">
                    <div class="setGroup">
                        <div class="setOptBox">
                            <span class="setOptCaption" style="margin-left: -6px;">
                                <a href="javascript:void(0)" class="link" target="_blank">加载中...</a>
                            </span>
                        </div>
                    </div>
                </div>
            </div>
        </div>`
        if (init) {
            GM_addStyle(`.cover2 {
                z-index: 100;
                position: fixed;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                background-color: rgba(0,0,0,.35);
                display: none;
                opacity: 0;
                transition: .25s;
                perspective: 1000px;
            } .icon-bilibili {
                color: #00AFE0; 
            } .bilibili-trending-img {
                height: 16px;
                margin-left: 5px;
                vertical-align: -2px;
            }
            #btnRefreshBli:hover {
                color: #fff;
                background-color: var(--err-color);
            }`)
            GM_addStyle(GM_getResourceText("css"))
            $(document.body).append(dialog);
            $(".cover2.easy-limestart .btnClose").hover(() => {
                $(".cover2.easy-limestart .popUp").css({
                    display: "block",
                    opacity: 1,
                    transform: 'rotate3d(1, 1, 0, 5deg)'
                })
            }, () => {
                $(".cover2.easy-limestart .popUp").css({
                    display: "block",
                    opacity: 1,
                    transform: 'none'
                })
            })
            $(".cover2.easy-limestart .btnClose").click(() => {
                showBilibili = false;
                $(".cover2.easy-limestart").fadeOut(100)
            })
        } else {
            showBilibili = !showBilibili;
            if (showBilibili) {
                requestBiApi()
            } else {
                $(".cover2.easy-limestart").fadeOut(100)
            }
        }
    }
    showBlibiliTrending(true);


    // 增加键盘事件
    document.body.addEventListener("keydown", (e) => {
        if (e.altKey && e.key.toLowerCase() === 't') {
            showSearch = !showSearch;
            showSearchCb()
            Message.info(showSearch ? "显示搜索框" : '隐藏搜索框')
            ls.set("showSearch", showSearch)
        }
        if (e.altKey && e.key.toLowerCase() === 'g') {
            showTimer = !showTimer;
            showTimerCb()
            Message.info(showTimer ? "显示时间" : '隐藏时间')
            ls.set("showTimer", showTimer)
        }

        if (e.altKey && e.key.toLowerCase() === 'b') {
            showBlibiliTrending()
        }
    });

    console.log('start')
})();