fix: formatting and address other review comments

This commit is contained in:
Huey 2022-11-18 12:38:33 +08:00
parent e9c16cad10
commit 4d5c4a5904
No known key found for this signature in database
GPG key ID: 54C82E718C137231
2 changed files with 31 additions and 22 deletions

View file

@ -149,7 +149,7 @@ function getInteractionType(url) {
* @returns {void} * @returns {void}
*/ */
function onTabUpdate() { function onTabUpdate() {
browser.tabs.executeScript(null, { browser.tabs.executeScript({
file: "/content_script/mastodonInject.js" file: "/content_script/mastodonInject.js"
}); });
} }

View file

@ -1,38 +1,44 @@
"use strict"; "use strict";
/** /**
* Replacement onClick handler for Follow button * Replacement onClick handler for Follow button.
* @param {Event} event * @param {Event} event
* @returns {void}
*/ */
function onClickFollow(event) { function onClickFollow(event) {
event.stopPropagation(); event.stopPropagation();
event.preventDefault(); event.preventDefault();
const username = window.location.pathname.split(`/`).slice(-1)[0]; const username = window.location.pathname.split("/").slice(-1)[0];
// activate AutoRemoteFollow // activate AutoRemoteFollow
window.open(`/users/${username}/remote_follow`, `_blank`); window.open(`/users/${username}/remote_follow`, "_blank");
} }
/** /**
* wait for element to appear * wait for element to appear.
* @param {string} selector * @param {string} selector
* @param {number} timeout * @param {number} timeoutDuration
* @see {@link https://github.com/storybookjs/test-runner/blob/6d41927154e8dd1e4c9e7493122e24e2739a7a0f/src/setup-page.ts#L134} * @see {@link https://github.com/storybookjs/test-runner/blob/6d41927154e8dd1e4c9e7493122e24e2739a7a0f/src/setup-page.ts#L134}
* from which this was adapted * from which this was adapted
* @returns {Promise}
*/ */
function waitForElement(selector, timeout) { function waitForElement(selector, timeoutDuration) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
function getElement() { const getElement = () => document.querySelector(selector);
return document.querySelector(selector);
} const timeout = window.setTimeout(() => {
reject(new Error("waitForElement timed out"));
}, timeoutDuration);
const element = getElement(); const element = getElement();
if(element){ if(element){
window.clearTimeout(timeout);
return resolve(element); return resolve(element);
} }
const observer = new MutationObserver(() => { const observer = new MutationObserver(() => {
const element = getElement(); const element = getElement();
if(element){ if(element){
window.clearTimeout(timeout);
resolve(element); resolve(element);
observer.disconnect(); observer.disconnect();
} }
@ -43,24 +49,27 @@ function waitForElement(selector, timeout) {
subtree: true subtree: true
}); });
window.setTimeout(() => { return null;
reject();
}, timeout);
}); });
} }
/** /**
* Inject replacement onClick handler for Follow button * Inject replacement onClick handler for Follow button.
* @returns {void}
*/ */
async function injectFollowButton() { async function injectFollowButton() {
try { try {
const followButton = await waitForElement(`.account__header__tabs__buttons button.button`, 20000); const followButton = await waitForElement(".account__header__tabs__buttons button:first-of-type", 20000);
followButton.addEventListener(`click`, onClickFollow); followButton.addEventListener("click", onClickFollow);
} catch { } catch (error) {
// Follow button failed to appear // Follow button failed to appear
} }
} }
/**
* Initialise injection for Mastodon Follow button.
* @returns {void}
*/
async function init() { async function init() {
await injectFollowButton(); await injectFollowButton();
} }