Greasy Fork is available in English.

回到旧版B站主页

修改cookie回到旧版B站主页

"use strict";
// ==UserScript==
// @name         回到旧版B站主页
// @namespace    http://salt.is.lovely/
// @version      0.1.4
// @description  修改cookie回到旧版B站主页
// @author       salt
// @license      MulanPSL2
// @match        https://*.bilibili.com/*
// @icon         https://www.bilibili.com/favicon.ico
// @run-at       document-start
// @grant        none
// @noframes
// ==/UserScript==

// 开源在 github https://github.com/Salt-lovely/salt-bili-back
// 在 https://greasyfork.org/zh-CN/scripts/475203 安装

/*
Copyright (c) 2023 Salt_lovely
回到旧版B站主页 is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
          http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
(() => {
  // node_modules/salt-lib/lib/storage/localStorage.js
  function innerParse(str) {
    if (str) {
      try {
        return JSON.parse(str);
      } catch (e) {
      }
    }
    return null;
  }
  function write(key, value) {
    localStorage.setItem(key, JSON.stringify(value));
  }
  function unsafeRead(key) {
    const storage = localStorage.getItem(key);
    return innerParse(storage);
  }
  function listen(listener, options = { passive: true }) {
    window.addEventListener("storage", listener, options);
    return () => window.removeEventListener("storage", listener, options);
  }
  function readAndListen(props) {
    const { key, defaultValue, listener, callOnChange = true, options = { passive: true } } = props;
    let v = unsafeRead(key);
    if (defaultValue !== void 0 && v === null) {
      write(key, defaultValue);
      v = defaultValue;
    }
    const fn = (ev) => {
      if (ev.key !== key || ev.storageArea !== localStorage)
        return;
      const newValue = innerParse(ev.newValue);
      const oldValue = innerParse(ev.oldValue);
      if (callOnChange && newValue === oldValue)
        return;
      const encapsulatedEvent = {
        key,
        newValue,
        oldValue,
        storageArea: ev.storageArea,
        url: ev.url
      };
      listener(encapsulatedEvent);
    };
    const off = listen(fn, options);
    return [v, off];
  }

  // src/utils.ts
  var defaultExpires = new Date(3398759114e3);
  var defaultDomain = ".bilibili.com";
  var NEW_UI = 0;
  var OLD_UI = 1;
  var TRADITION_UI = 2;
  var STORAGE_KEY = "salt-lovely-bili-tool";
  function deleteCookie(name, domain = defaultDomain) {
    setCookie(name, "", defaultExpires, domain);
  }
  function setCookie(name, value = "", expires = defaultExpires, domain = defaultDomain) {
    document.cookie = `${name}=${value};expires=${expires};path=/;domain=${domain}`;
  }
  function genResetCookieFn({
    delMap,
    setMap
  }) {
    console.log(`设置成功`);
    if (delMap)
      console.log(`将强制清除这些cookie: ${delMap.join(", ")}`);
    if (setMap)
      console.log(`将强制接管这些cookie: ${Object.keys(setMap).join(", ")}`);
    return () => {
      if (delMap)
        delMap.forEach((c) => deleteCookie(c));
      if (setMap)
        Object.keys(setMap).forEach((c) => setCookie(c, setMap[c]));
    };
  }

  // src/index.tsx
  if (window.isSaltGoBackBilibiliInit) {
    console.log(
      `
检测到重复启用盐酱牌回到旧版B站主页脚本

请检查您的脚本安装是否正确
`
    );
  } else {
    window.isSaltGoBackBilibiliInit = true;
    let interval = 0;
    const setNewUI = () => {
      clearInterval(interval);
      setCookie("i-wanna-go-back", "0");
    };
    const setOldUI = () => {
      clearInterval(interval);
      const resetFn = genResetCookieFn({
        delMap: ["buvid3"],
        setMap: {
          "i-wanna-go-back": "1",
          "i-wanna-go-feeds": "-1",
          nostalgia_conf: "2"
        }
      });
      interval = setInterval(resetFn, 500);
    };
    const setTraditionalUI = () => {
      clearInterval(interval);
      const resetFn = genResetCookieFn({
        delMap: ["buvid3", "buvid4", "buvid_fp"],
        setMap: {
          "i-wanna-go-back": "1",
          "i-wanna-go-feeds": "1",
          nostalgia_conf: "2"
        }
      });
      interval = setInterval(resetFn, 500);
    };
    const setUICookie = (value2) => {
      switch (value2) {
        case NEW_UI:
          setNewUI();
          break;
        case OLD_UI:
          setOldUI();
          break;
        case TRADITION_UI:
          setTraditionalUI();
          break;
        case null:
          setNewUI();
          break;
        default:
          console.log("无法识别的UI模式", value2);
          setOldUI();
      }
    };
    const [value] = readAndListen({
      key: `${STORAGE_KEY}-ui-version`,
      defaultValue: OLD_UI,
      listener: (ev) => {
        const { newValue } = ev;
        setUICookie(newValue);
      }
    });
    setUICookie(value);
    console.log(
      `
欢迎使用盐酱牌回到旧版B站主页脚本!

下个版本将会在屏幕底部添加切换按钮
`
    );
  }
})();