pleroma-fe/instance/pleroma-mods/pleroma-mod-favicon/mod.js

68 lines
1.9 KiB
JavaScript

function PleromaModFavicon () {
this.instances = {};
this.config = {
favicon: "favicon.png",
fallback: "favicon.ico"
};
this.loadConfig();
}
[
function loadConfig () {
window.fetch(PleromaModLoader.getModDir() + "pleroma-mod-favicon/config.json").then((response) => {
if (response.ok) {
response.json().then((json) => {
// TODO (puniko): do config stuff
}).catch((error) => {
console.error("can't parse favicon config");
console.error(error);
});
}
}).catch((error) => {
console.error("can't load favicon config");
console.error(error);
});
},
function onMutation (mutation, observer) {
this.addFavicon();
},
function onReady () {
this.addFavicon();
},
function run () {
PleromaModLoader.includeModCss("pleroma-mod-favicon/style.css");
},
function addFavicon () {
const statusHeadingRights = document.querySelectorAll(".status>.status-body");
for (let statusHeadingRight of statusHeadingRights) {
this.addFaviconByStatus(statusHeadingRight);
}
},
function addFaviconByStatus (statusHeadingRight) {
if (statusHeadingRight.querySelector(".instance-favicon")) {
return;
}
const sourceElements = statusHeadingRight.querySelector(".source_url");
let instance = "default";
if (sourceElements) {
const urlMatches = sourceElements.href.match(/https?:\/\/[^/]*/);
if (urlMatches.length > 0) {
instance = urlMatches[0];
}
}
instance = instance.replace(/^https?:\/\//, "");
const faviconElement = document.createElement("img");
faviconElement.src = PleromaModLoader.getModDir() + "pleroma-mod-favicon/cache/" + instance + ".png";
faviconElement.className = "instance-favicon";
statusHeadingRight.appendChild(faviconElement);
}
].forEach((func) => { PleromaModFavicon.prototype[func.name] = func; });
PleromaModLoader.registerMod(PleromaModFavicon);