Fedi.CrowdedGames.Group/JS/account.js
CatAClock 8c69eaa88a FinalReleaseChanges (#49)
- Loads of bug fixes.
- CSS improvements.
- Tags added.
- Optimized some things.
- Some other oddities? I don't know :3
- Happiness increased by 2%.
2025-06-05 00:25:39 +00:00

163 lines
5.7 KiB
JavaScript

import * as MastodonAPI from "./MastodonAPI.js";
import * as BlueskyAPI from "./BlueskyAPI.js";
import * as TumblrAPI from "./TumblrAPI.js";
import * as Variables from "./Variables.js";
let website = document.location.href.split("website=")[1];
let post = JSON.parse(localStorage.getItem("post"));
// HTML elements.
let AccountName = document.getElementsByClassName("Account")[0];
let AccountImage = document.getElementsByClassName("AccountImage")[0];
let AccountDescription = document.getElementsByClassName("AccountDescription")[0];
let AlternateAccountName = document.getElementsByClassName("Account")[1];
let AlternateAccountImage = document.getElementsByClassName("AccountImage")[1];
let AlternateAccountDescription = document.getElementsByClassName("AccountDescription")[1];
let FollowButton = document.getElementsByClassName("Follow")[0];
let BlockButton = document.getElementsByClassName("Block")[0];
let AccountPosts = document.getElementsByClassName("Posts")[0];
// Other vars.
let Following = false;
let Blocking = false;
// SPAWN
GetAccount();
// The interaction is given to another function for async.
FollowButton.onclick = (event) => {
FollowBoop();
}
async function FollowBoop() {
if (website == "Mastodon") {
let Relations = await MastodonAPI.GetRelationship(post.account.id);
await MastodonAPI.CreateFollow(post.account.id, Relations[0].following);
} else if (website == "Bluesky") {
await BlueskyAPI.CreateFollow(localStorage.getItem(Variables.BlueskyDID), post.post.author.did);
}
SetFollow();
}
// Extra thing for the frontend to say "hey I am the follow meister".
function SetFollow() {
Following = !(Following);
if (Following == true) {
FollowButton.innerHTML = "Unfollow...";
} else {
FollowButton.innerHTML = "Follow!";
}
}
// The interaction is given to another function for async.
BlockButton.onclick = (event) => {
BlockBoop();
}
async function BlockBoop() {
if (website == "Mastodon") {
let Relations = await MastodonAPI.GetRelationship(post.account.id);
await MastodonAPI.CreateBlock(post.account.id, Relations[0].blocking);
} else if (website == "Bluesky") {
await BlueskyAPI.CreateBlock(localStorage.getItem(Variables.BlueskyDID), post.post.author.did);
}
SetBlock();
}
// Extra thing for the frontend to say "hey I am the block meister".
function SetBlock() {
Blocking = !(Blocking);
if (Blocking == true) {
BlockButton.innerHTML = "Unblock...";
} else {
BlockButton.innerHTML = "Block!";
}
}
async function GetAccount() {
if (website == "Mastodon") {
// Get the relationshop.
let Relations = await MastodonAPI.GetRelationship(post.account.id);
// Set the buttons using the relationship.
Following = !(Relations[0].following);
Blocking = !(Relations[0].blocking);
SetFollow();
SetBlock();
AccountName.innerHTML = post.account.username;
AccountDescription.innerHTML = post.account.note;
AccountImage.setAttribute("src", post.account.avatar);
// Build the fields
let Field = "<aside class=\"Trees\">";
for (let i of post.account.fields) {
Field += "<b class=\"Entry\">" + i.name + "</b><em class=\"Exitry\">" + i.value + "</em>";
}
Field += "</aside>";
AccountDescription.innerHTML += Field;
// Get their recent posts. Determine if they are cewl or not.
let Posts = await MastodonAPI.GetAccountStatuses(post.account.id);
for (let i of Posts) {
if (i.reblog != null) {
i = i.reblog;
}
AccountPosts.innerHTML += i.content + "<br/><br/>";
}
} else if (website == "Bluesky") {
// Set the relationship follows
let thing = await BlueskyAPI.GetRecord(localStorage.getItem(Variables.BlueskyDID), "app.bsky.graph.follow", post.post.author.did);
let thing2 = await BlueskyAPI.GetRecord(localStorage.getItem(Variables.BlueskyDID), "app.bsky.graph.block", post.post.author.did);
if (thing.hasOwnProperty("error") && thing.error == "RecordNotFound") {
Following = true;
} else {
Following = false;
}
if (thing2.hasOwnProperty("error") && thing2.error == "RecordNotFound") {
Blocking = true;
} else {
Blocking = false;
}
SetFollow();
SetBlock();
let account = await BlueskyAPI.GetProfile(post.post.author.did);
AccountName.innerHTML = account.handle;
AccountDescription.innerHTML = account.description;
AccountImage.setAttribute("src", account.avatar);
// Get their recent posts. Determine if they are cewl or not.
let Posts = await BlueskyAPI.GetProfileFeed(account.did);
console.log(Posts);
for (let i of Posts.feed) {
AccountPosts.innerHTML += i.post.record.text + "<br/><br/>";
}
} else {
FollowButton.setAttribute("hidden", "");
BlockButton.setAttribute("hidden", "");
AlternateAccountImage.setAttribute("hidden", false);
// This is meant for the regular account. A big ol' you :3
let Token = localStorage.getItem(Variables.MastodonAccessToken);
if (Token != null) {
let MastoProfile = await MastodonAPI.GetOwnAccount();
AccountName.innerHTML = MastoProfile.username;
AccountDescription.innerHTML = MastoProfile.note;
AccountImage.setAttribute("src", MastoProfile.avatar);
// Build the fields
let Field = "<div style=\"display: flex; justify-content: center;\">";
for (let i of MastoProfile.fields) {
Field += "<b class=\"Entry\">" + i.name + "</b><em class=\"Exitry\">" + i.value + "</em>";
}
Field += "</div>";
AccountDescription.innerHTML += Field;
}
Token = localStorage.getItem(Variables.BlueskyAccessToken);
if (Token != null) {
let BlueProfile = await BlueskyAPI.GetProfile(localStorage.getItem(Variables.BlueskyDID));
AlternateAccountImage.setAttribute("width", "20%");
AlternateAccountImage.setAttribute("height", "20%");
AlternateAccountName.innerHTML = BlueProfile.handle;
AlternateAccountDescription.innerHTML = BlueProfile.description;
AlternateAccountImage.setAttribute("src", BlueProfile.avatar);
}
}
}