Greasy Fork

Ye Olde Lemmy

A quick toggle for a familiar desktop experience for lemmy.

当前为 2023-08-11 提交的版本,查看 最新版本

// ==UserScript==
// @name         Ye Olde Lemmy
// @namespace    https://github.com/appel/userscripts
// @version      0.0.1
// @description  A quick toggle for a familiar desktop experience for lemmy.
// @author       appel
// @match        *://*.lemmy.ml/*
// @match        *://*.lemmy.world/*
// @match        *://*.lemm.ee/*
// @match        *://*.sh.itjust.works/*
// @match        *://*.beehaw.org/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    "use strict";

    // Check if the script is running in an iframe or not
    if (window.self !== window.top) {
        return; // Return if inside an iframe
    }

    // MutationObserver watches for changes in the document
    let observer = new MutationObserver(function () {
        if (document.querySelector(".mlmym-switch")) {
            return;
        }

        const url = window.location.href;
        const domainMatch = url.match(/https?:\/\/([^\/]+)\//);
        const currentDomain = domainMatch ? domainMatch[1] : null;
        let btnColor, btnText, btnTitle, newUrl;

        // Set button color, text, title, and new URL based on the current domain
        if (currentDomain) {
            btnColor = "#ff6c60";
            btnText = "M";
            btnTitle = "Switch to MLMYM";
            newUrl = `https://mlmym.org/${currentDomain}/`;
        }

        if (!newUrl) {
            return;
        }

        // Create button
        let btn = document.createElement("button");
        btn.classList.add("mlmym-switch");
        btn.textContent = btnText;
        btn.title = btnTitle;
        btn.style.position = "fixed";
        btn.style.top = "10px";
        btn.style.right = "10px";
        btn.style.zIndex = "9999";
        btn.style.backgroundColor = btnColor;
        btn.style.color = "white";
        btn.style.borderRadius = "50%";
        btn.style.width = "24px";
        btn.style.height = "24px";
        btn.style.border = "none";
        btn.style.cursor = "pointer";
        btn.style.fontFamily = "-apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif";
        btn.style.fontSize = "14px";
        btn.style.fontWeight = "700";
        btn.style.textAlign = "center";
        btn.style.padding = "0";
        btn.style.lineHeight = "24px";
        btn.style.transition = "transform .15s ease";

        // Add button to page
        document.body.appendChild(btn);

        btn.addEventListener("click", function () {
            // Add "pop" animation
            this.style.transform = "scale(1.2)";
            setTimeout(() => (this.style.transform = "scale(1)"), 150);

            window.location.href = newUrl;
        });
    });

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