mirror of
https://github.com/abhijithvijayan/web-extension-starter.git
synced 2025-10-07 07:22:37 +02:00
80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
import OwnsBadge from "../element-factories/owns-badge";
|
|
import Star from "../element-factories/star";
|
|
import WantsBadge from "../element-factories/wants-badge";
|
|
import Trader from "../trader";
|
|
import TraderRepository from "../trader-repository";
|
|
|
|
export default class ProfileLink {
|
|
constructor(
|
|
public element: HTMLAnchorElement,
|
|
public traderRepository: TraderRepository
|
|
) {}
|
|
|
|
get username(): string {
|
|
return this.element.innerText.trim();
|
|
}
|
|
|
|
get profile(): string {
|
|
return this.element.href;
|
|
}
|
|
|
|
get trader(): Trader | null {
|
|
return this.traderRepository.find(this.username);
|
|
}
|
|
|
|
get lastElement(): Element {
|
|
return this.element.nextElementSibling?.tagName === "SPAN"
|
|
? this.element.nextElementSibling!
|
|
: this.element;
|
|
}
|
|
|
|
addOwnsBadge() {
|
|
let trader = this.trader;
|
|
|
|
if (trader === null) {
|
|
throw new Error(
|
|
"Cannot add owns badge to a profile link that has no trader data"
|
|
);
|
|
}
|
|
|
|
let badge = OwnsBadge.create(this.trader!);
|
|
|
|
this.lastElement.insertAdjacentElement("afterend", badge);
|
|
}
|
|
|
|
addWantsBadge() {
|
|
let trader = this.trader;
|
|
|
|
if (trader === null) {
|
|
throw new Error(
|
|
"Cannot add wants badge to a profile link that has no trader data"
|
|
);
|
|
}
|
|
|
|
let badge = WantsBadge.create(this.trader!);
|
|
|
|
this.lastElement.insertAdjacentElement("afterend", badge);
|
|
}
|
|
|
|
addStar() {
|
|
let star = Star.create();
|
|
|
|
this.element.style.position = "relative";
|
|
this.element.style.fontWeight = "bold";
|
|
|
|
this.element.appendChild(star);
|
|
}
|
|
|
|
static getAll(page: Document, traderRepository: TraderRepository) {
|
|
return Array.from(
|
|
page.querySelectorAll('a[href*="/profile/view-profile.php?id="]')
|
|
).map(
|
|
(profileLink) =>
|
|
new ProfileLink(
|
|
profileLink as HTMLAnchorElement,
|
|
traderRepository
|
|
)
|
|
);
|
|
}
|
|
}
|