Fediverse@Home

Open Fediverse remote profiles on your local instance. Currently supports Misskey & Mastodon.

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        Fediverse@Home
// @namespace   https://github.com/noccu
// @match       *://*/*
// @run-at      document-start
// @grant       GM_registerMenuCommand
// @grant       GM_setValue
// @grant       GM_getValue
// @version     1.1.0
// @author      noccu
// @description Open Fediverse remote profiles on your local instance. Currently supports Misskey & Mastodon.
// ==/UserScript==

// const SUPPORTED_PLAFORMS = ["misskey_app", "mastodon"]
var HOME

function check() {
    // Are we on a fedi instance? (Slightly less dumb ver.)
    switch (true) {
        case document.querySelector("meta[name^=app]")?.content == "Misskey":
        case document.getElementById("mastodon") !== undefined:
            break
        default:
            return
    }

    // We are
    HOME = GM_getValue("fediHome")
    if (HOME && HOME == location.origin) {
        return
    }
    GM_registerMenuCommand("Set as home instance", setHome)
    GM_registerMenuCommand("Open on home instance", takeHome)
}

function setHome() {
    if (HOME) {
        var newHome = confirm(`Replace ${HOME} as home instance?`)
    }
    if (!newHome) { return }
    GM_setValue("fediHome", location.origin)
    console.log(`Home instance set to: ${location.origin}`)
}

function takeHome() {
    if (!location.pathname.startsWith("/@")) return
    if (!HOME) {
        alert("No home instance set.")
        return
    }
    let user = location.pathname.substring(1)
    window.location = `${HOME}/${user}@${location.host}`
}

window.addEventListener("DOMContentLoaded", check)