sessions-ext/src/content.ts
2022-11-16 06:39:33 +01:00

53 lines
1.2 KiB
TypeScript

import { LoginMessage, MessageType } from './message';
const renderUI = () => {
document
.querySelectorAll('.worlds-container:first-of-type .world-select')
.forEach((el) => {
const cloned = el.cloneNode(true);
if (!(cloned instanceof HTMLAnchorElement)) {
return;
}
cloned.addEventListener('click', handleClick);
const span = cloned.childNodes.item(1);
if (!span) {
return;
}
span.textContent += ' (SS)';
el.parentNode?.insertBefore(cloned, el.nextSibling);
});
};
const handleClick = (e: MouseEvent) => {
if (!(e.currentTarget instanceof HTMLAnchorElement)) {
return;
}
e.preventDefault();
const url = new URL(e.currentTarget.href);
const server = extractServerFromURL(url);
chrome.runtime.sendMessage({
type: MessageType.LOGIN,
server,
url: url.protocol + '//' + url.host.replace('www', server),
} as LoginMessage);
};
const extractServerFromURL = (url: URL): string => {
const split = url.pathname.split('/');
if (split.length <= 0) {
throw new Error(`invalid path: ${url.pathname}`);
}
return split[split.length - 1];
};
const init = () => {
renderUI();
};
init();