diff --git a/CSS/account.css b/CSS/account.css index 396ec81..ebe8e6a 100644 --- a/CSS/account.css +++ b/CSS/account.css @@ -2,6 +2,10 @@ html { background: linear-gradient(to right, #00FFFF, #dcdcdc, #dcdcdc, #dcdcdc, #dcdcdc, #dcdcdc, #00FFFF); } +h2 { + word-wrap: break-word; +} + .Button { margin-top: 30px; diff --git a/CSS/expanded.css b/CSS/expanded.css index 89534d2..a644b6b 100644 --- a/CSS/expanded.css +++ b/CSS/expanded.css @@ -23,6 +23,8 @@ body { /* Classes */ .Handle { background-color: white; + + word-wrap: break-word; } .Origin { diff --git a/CSS/index.css b/CSS/index.css index a64f9b5..b0cfb47 100644 --- a/CSS/index.css +++ b/CSS/index.css @@ -180,6 +180,13 @@ html { top: 35vh; } +audio { + position: absolute; + z-index=1; + + width: max(60px, 10%); +} + .PostContainer { position: absolute; display: flex; @@ -224,6 +231,8 @@ html { font-size: min(2vw, 2ch); margin-top: max(-5px, -0.5vw); + + word-wrap: break-word; } .PostContent { diff --git a/JS/BlueskyAPI.js b/JS/BlueskyAPI.js index d171abb..bf7048b 100644 --- a/JS/BlueskyAPI.js +++ b/JS/BlueskyAPI.js @@ -349,14 +349,17 @@ export function ApplyFacets(record, text) { SplitAreas.push(i.index.byteStart); SplitAreas.push(i.index.byteEnd); Hrefs.push(i.features[0].uri); - Hrefs.push(""); + } + if (i.features[0].$type == "app.bsky.richtext.facet#tag") { + SplitAreas.push(i.index.byteStart); + SplitAreas.push(i.index.byteEnd); + Hrefs.push("https://bsky.app/hashtag/" + i.features[0].tag); } } // Last minute append. SplitAreas.push(text.length); // Remove emoji regex - let EmojiRegex = /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu; - let EmojiObjects = text.match(EmojiRegex); + let EmojiObjects = text.match(/\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu); let SubtractNumber = 0; if (EmojiObjects != null) { SubtractNumber = EmojiObjects.length * 2; @@ -366,8 +369,12 @@ export function ApplyFacets(record, text) { StringArray.push(text.slice(SplitAreas[i - 1] - SubtractNumber, SplitAreas[i] - SubtractNumber)); } // Finally, we append the string with - for (let i = 1; i < StringArray.length; i += 2) { - TempText += StringArray[i - 1] + "" + StringArray[i] + ""; + for (let i = 0; i < StringArray.length; i += 2) { + if (Hrefs[(i / 2)] != undefined && Hrefs[(i / 2)].split("https://").length != 1) { + TempText += StringArray[i] + "" + StringArray[i + 1] + ""; + } else { + TempText += StringArray[i]; + } } } if (TempText == "") { diff --git a/JS/account.js b/JS/account.js index 30d9e84..cff9871 100644 --- a/JS/account.js +++ b/JS/account.js @@ -86,7 +86,7 @@ async function GetAccount() { Blocking = !(Relations[0].blocking); SetFollow(); SetBlock(); - AccountName.innerHTML = post.account.username; + AccountName.innerHTML = post.account.acct; AccountDescription.innerHTML = post.account.note; AccountImage.setAttribute("src", post.account.avatar); // Build the fields @@ -133,7 +133,7 @@ async function GetAccount() { } else { FollowButton.setAttribute("hidden", ""); BlockButton.setAttribute("hidden", ""); - AlternateAccountImage.setAttribute("hidden", false); + AlternateAccountImage.removeAttribute("hidden"); // This is meant for the regular account. A big ol' you :3 let Token = localStorage.getItem(Variables.MastodonAccessToken); if (Token != null) { diff --git a/JS/expanded.js b/JS/expanded.js index baf7aa4..86aa9db 100644 --- a/JS/expanded.js +++ b/JS/expanded.js @@ -10,6 +10,8 @@ let Reply = document.getElementsByClassName("Reply")[0]; let FavoriteFlipper = false; let BoostFlipper = false; +let Favoritable = false; +let Boostable = false; // Variables let website = document.location.href.split("website=")[1]; @@ -25,19 +27,35 @@ let EmbedCounter = 0; // Button stuff Favorite.onclick = (event) => { + if (Favoritable == false) { + return; + } + Favoritee(); +} + +async function Favoritee() { + Favoritable = false; if (website == "Mastodon") { - MastodonAPI.CreateFavorite(post.id, post.favourited); + await MastodonAPI.CreateFavorite(post.id, post.favourited); } else if (website == "Bluesky") { - BlueskyAPI.CreateLike(localStorage.getItem(Variables.BlueskyDID), post.post.uri, post.post.cid); + await BlueskyAPI.CreateLike(localStorage.getItem(Variables.BlueskyDID), post.post.uri, post.post.cid); } SetFavorite(); } Boost.onclick = (event) => { + if (Boostable == false) { + return; + } + Boostee(); +} + +async function Boostee() { + Boostable = false; if (website == "Mastodon") { - MastodonAPI.CreateReblog(post.id, post.reblogged); + await MastodonAPI.CreateReblog(post.id, post.reblogged); } else if (website == "Bluesky") { - BlueskyAPI.CreateRepost(localStorage.getItem(Variables.BlueskyDID), post.post.uri, post.post.cid); + await BlueskyAPI.CreateRepost(localStorage.getItem(Variables.BlueskyDID), post.post.uri, post.post.cid); } SetBoost(); } @@ -86,11 +104,10 @@ async function SetThreadPost(element, i) { // Functions and things. async function GetPost() { if (website == "Mastodon") { + document.getElementsByClassName("Handle Regular")[0].innerHTML = post.account.acct; // Check for a reblog. if (post.reblog != null) { - document.getElementsByClassName("Handle Regular")[0].innerHTML = post.account.username + " ( R: " + post.reblog + " )"; - } else { - document.getElementsByClassName("Handle Regular")[0].innerHTML = post.account.username; + document.getElementsByClassName("Handle Regular")[0].innerHTML += " ( R: " + post.reblog + " )"; } document.getElementsByClassName("PostText Regular")[0].innerHTML = post.content; // Set the texts. It's opposite because "setting" causes it to switch. @@ -158,15 +175,14 @@ async function GetPost() { async function MastodonReplylFunction(ClassName, post) { let OtherPost = await MastodonAPI.GetStatus(post); document.getElementsByClassName("Origin " + ClassName)[0].innerHTML = website; - document.getElementsByClassName("Handle " + ClassName)[0].innerHTML = OtherPost.account.username; + document.getElementsByClassName("Handle " + ClassName)[0].innerHTML = post.account.acct; if (OtherPost.spoiler_text != "") { document.getElementsByClassName("PostText " + ClassName)[0].innerHTML = "WARNING: " + OtherPost.spoiler_text; } else { document.getElementsByClassName("PostText " + ClassName)[0].innerHTML = OtherPost.content; - } - if (OtherPost.media_attachments.length != 0) { - for (let i of OtherPost.media_attachments) { - ApplyMedia(i, document.getElementsByClassName("Images " + ClassName)[0]); + if (OtherPost.media_attachments.length != 0) { + for (let i of OtherPost.media_attachments) { + ApplyMedia(i, document.getElementsByClassName("Images " + ClassName)[0]); } } return OtherPost; @@ -271,6 +287,7 @@ function SetFavorite() { } else { Favorite.innerHTML = "Unfavorite..."; } + Favoritable = true; } function SetBoost() { @@ -280,6 +297,7 @@ function SetBoost() { } else { Boost.innerHTML = "Unboost..."; } + Boostable = true; } // Functions stolen form elsewhere diff --git a/JS/index.js b/JS/index.js index ece0eab..6f8f158 100644 --- a/JS/index.js +++ b/JS/index.js @@ -24,7 +24,6 @@ let TimeAccountButton = document.getElementsByClassName("Time")[0]; // Sounds const ButtonSound = new Audio("Audio/button-305770.mp3"); const WarningClick = new Audio("Audio/button-pressed-38129.mp3"); -const BackgroundMusic = new Audio("Audio/soft-piano-music-312509.mp3"); // Discoverability let Discover = false; @@ -77,22 +76,17 @@ Warning.onclick = (event) => { setTimeout(() => { Main.classList.remove("MainFadeInAnimation"); Main.classList.add("MainAfter"); - Music(); }, 5000); Main = document.getElementsByClassName("MainFadeInAnimation")[0]; PosterContainerUpdate(); } -function Music() { - BackgroundMusic.play(); - setTimeout(() => { - Music(); - }, 180000); -} +let ArrowRunning = false; // Clicking the next button ArrowsButton[1].onclick = (event) => { - if (!ContainerContainer.classList.contains("NextAnimation")) { + if (!ContainerContainer.classList.contains("NextAnimation") && ArrowRunning == false) { + ArrowRunning = true; UpdateOtherContainers(1); ContainerContainer.classList.add("NextAnimation"); ButtonSound.play(); @@ -100,12 +94,14 @@ ArrowsButton[1].onclick = (event) => { ContainerContainer.classList.remove("NextAnimation"); }, 1000); PosterContainerUpdate("Forward"); + ArrowRunning = false; } } // Clicking the back button ArrowsButton[0].onclick = (event) => { - if (!ContainerContainer.classList.contains("BackAnimation")) { + if (!ContainerContainer.classList.contains("BackAnimation") && ArrowRunning == false) { + ArrowRunning = true; UpdateOtherContainers(3); ContainerContainer.classList.add("BackAnimation"); ButtonSound.play(); @@ -113,6 +109,7 @@ ArrowsButton[0].onclick = (event) => { ContainerContainer.classList.remove("BackAnimation"); }, 1000); PosterContainerUpdate("Backward"); + ArrowRunning = false; } } @@ -216,6 +213,8 @@ async function PosterContainerUpdate(Direction) { // Begin by having the website we are using get pushed to the expanded view array and clean out the HTML. WebsiteAPIType.push("Mastodon"); i.getElementsByClassName("PostContent")[0].innerHTML = ""; + i.getElementsByClassName("Username")[0].innerHTML = ""; + // Public stuff if (MastodonLoadedFeed[CurrentThing + counter + 1] == undefined) { let TempFeed; if (Discover == true) { @@ -230,15 +229,17 @@ async function PosterContainerUpdate(Direction) { MastodonLoadedFeed = await MastodonLoadedFeed.concat(TempFeed); } // put the reblog into the regular post; Make changes as necessary. - if (MastodonLoadedFeed[CurrentThing + counter].reblog != null) { - i.getElementsByClassName("Username")[0].innerHTML = MastodonLoadedFeed[CurrentThing + counter].reblog.account.username + " ( R: " + MastodonLoadedFeed[CurrentThing + counter].account.username + " )"; + if (MastodonLoadedFeed[CurrentThing + counter].reblog != null && typeof MastodonLoadedFeed[CurrentThing + counter].reblog != "string") { // Fix a reblog issue. - let ReblogFix = MastodonLoadedFeed[CurrentThing + counter].account.username; + let ReblogFix = MastodonLoadedFeed[CurrentThing + counter].account.acct; MastodonLoadedFeed[CurrentThing + counter] = MastodonLoadedFeed[CurrentThing + counter].reblog; MastodonLoadedFeed[CurrentThing + counter].reblog = ReblogFix; - } else { - i.getElementsByClassName("Username")[0].innerHTML = MastodonLoadedFeed[CurrentThing + counter].account.username + i.getElementsByClassName("Username")[0].innerHTML = " ( R: " + MastodonLoadedFeed[CurrentThing + counter].reblog + " )"; + } else if (MastodonLoadedFeed[CurrentThing + counter].reblog != null && typeof MastodonLoadedFeed[CurrentThing + counter].reblog == "string") { + // this function is if the changes are already made. + i.getElementsByClassName("Username")[0].innerHTML = " ( R: " + MastodonLoadedFeed[CurrentThing + counter].reblog + " )"; } + i.getElementsByClassName("Username")[0].innerHTML = MastodonLoadedFeed[CurrentThing + counter].account.acct + i.getElementsByClassName("Username")[0].innerHTML // Check for images. if (MastodonLoadedFeed[CurrentThing + counter].media_attachments.length != 0) { if (MastodonLoadedFeed[CurrentThing + counter].media_attachments[0].type == "image") { @@ -282,6 +283,10 @@ async function PosterContainerUpdate(Direction) { i.getElementsByClassName("PostContent")[0].innerHTML += "This post has an image!
"; } else if (BlueskyLoadedFeed[CurrentThing + counter].post.record.embed.$type == "app.bsky.embed.video") { i.getElementsByClassName("PostContent")[0].innerHTML += "This post has a video!
"; + } else if (BlueskyLoadedFeed[CurrentThing + counter].post.record.embed.$type == "app.bsky.embed.record") { + i.getElementsByClassName("PostContent")[0].innerHTML += "This post has an embeded record!
"; + } else if (BlueskyLoadedFeed[CurrentThing + counter].post.record.embed.$type == "app.bsky.embed.recordWithMedia") { + i.getElementsByClassName("PostContent")[0].innerHTML += "This post has an image and an embeded record!
"; } } // Check for a thread. diff --git a/index.html b/index.html index 993d7f1..ea47ce9 100644 --- a/index.html +++ b/index.html @@ -307,5 +307,7 @@

Posting

+ +