This repository has been archived on 2026-01-04. You can view files and clone it, but cannot push or open issues or pull requests.
polyplus/js/account/home.js
Index eeaafeb35a Updates and Bug Fixes
- Experimental Feature: Event Items Store Category

- Fixed "Try On" store items

- Deleted "Try On" store items code and moved it to the main item view page script

- Fixed Transactions page Bricks to IRL Price converter

- Transactions page bricks to IRL Price converter now doesn't say "$NaN" when the input is erased

- Deleted popup and installation HTML files as they aren't used and haven't been used for a while. I am thinking of adding a new popup when you click the extension icon in your browser toolbar but that will be different than the code that was there.

- New Feature: Show "Owners" instead of "Sales"

- Updated theme code to run on all pages, even when the "Theme Creator" feature is turned off so that CSS such as modal CSS can still apply without other scripts having to apply their own CSS blob to the page

- Updated context menu background code to remove all context menus created by the extension before creating the context menus so the error for duplicate context menu IDs won't keep appearing (hopefully, but I haven't gotten the error yet so...)

- Fixed "Trending Items" IRL Brick price breaking if any of the trending items are free

- Improved detection for the purchase button on item view pages

- Fixed the item view page not checking if the item isn't owned before trying to add the IRL Brick price

- Removed old setTimeout() code at the start of some files
2024-04-20 11:58:00 -05:00

192 lines
No EOL
6.9 KiB
JavaScript
Executable file

/*
this file needs a rewrite by me lol
*/
var Settings;
var PinnedGamesData
var BestFriendsData
let Utilities;
chrome.storage.sync.get(['PolyPlus_Settings'], async function(result) {
Settings = result.PolyPlus_Settings || {}
if (Settings.IRLPriceWithCurrencyOn === true) {
IRLPrice()
}
if (Settings.PinnedGamesOn === true || Settings.BestFriendsOn === true) {
Update()
}
});
let ContainerElement = `
<div class="card-body p-0 m-1 scrollFadeContainer d-flex"></div>`;
let GameContainerElement = `
<div class="scrollFade card me-2 place-card force-desktop text-center mb-2" style="opacity: 1;">
<div class="card-body">
<div class="ratings-header">
<img src=":Thumbnail" class="place-card-image" style="position: relative;">
<div style="position: absolute;background: linear-gradient(to bottom, black, transparent, transparent, transparent);width: 100%;height: 100%;top: 0;left: 0;border-radius: 10px;padding-top: 5px;color: gray;font-size: 0.8rem;">
<span>
<i id="thumbup-icn" class="thumb-icon far fa-thumbs-up"></i>
:Likes
</span>
|
<span>
<i id="thumbdown-icn" class="thumb-icon far fa-thumbs-down"></i>
:Dislikes
</span>
</div>
</div>
<div>
<div class="mt-2 mb-1 place-card-title">
:GameName
</div>
</div>
</div>
</div>
`;
let TitleElement = `
<div class="col">
<h6 class="dash-ctitle2">Jump right back into your favorite games</h6>
<h5 class="dash-ctitle">Pinned Games</h5>
</div>`;
var FriendContainer = document.querySelector('.card:has(.friendsPopup) .card-body')
let NewContainer = document.createElement('div');
NewContainer.style.display = 'none'
NewContainer.classList = 'card card-dash mcard';
NewContainer.style.animationDelay = '0.18s';
NewContainer.innerHTML = ContainerElement;
let NewTitle = document.createElement('div');
NewTitle.style.display = 'none'
NewTitle.classList = 'row reqFadeAnim px-2 px-lg-0';
NewTitle.innerHTML = TitleElement;
let BestFriendsContainer = document.createElement('div')
BestFriendsContainer.classList = 'd-flex'
BestFriendsContainer.style = 'display: none; border-bottom: 1px solid #000; padding-bottom: 10px; margin-bottom: 10px; width: 100%;'
let Spacer = document.createElement('div')
Spacer.innerHTML = ' '
Spacer.style.width = '50px'
Spacer.prepend(BestFriendsContainer)
FriendContainer.prepend(BestFriendsContainer)
async function Update() {
chrome.storage.sync.get(['PolyPlus_PinnedGames'], function(result) {
PinnedGamesData = result.PolyPlus_PinnedGames || [];
if (Settings.PinnedGamesOn === true) {
PinnedGames()
} else {
NewContainer.style.display = 'none'
NewTitle.style.display = 'none'
}
});
chrome.storage.sync.get(['PolyPlus_BestFriends'], function(result) {
BestFriendsData = result.PolyPlus_BestFriends || [];
if (Settings.BestFriendsOn === true) {
BestFriends();
} else {
BestFriendsContainer.style.display = 'none'
Spacer.style.display = 'none'
}
});
}
function PinnedGames() {
var Existing = NewContainer.children[0].children
Array.from(Existing).forEach(element => {
element.remove();
});
if (PinnedGamesData.length === 0) {
NewContainer.style.display = 'none'
NewTitle.style.display = 'none'
} else {
NewContainer.style.display = ''
NewTitle.style.display = ''
}
PinnedGamesData.forEach(element => {
fetch('https://api.polytoria.com/v1/places/' + element)
.then(response => response.json())
.then(data => {
let GameName = data.name;
let GameThumbnail = data.thumbnail;
var NewGameContainer = document.createElement('a');
NewGameContainer.innerHTML = GameContainerElement.replace(':GameName',GameName).replace(':Thumbnail',GameThumbnail).replace(':Likes', data.rating.likes).replace(':Dislikes', data.rating.dislikes);
NewGameContainer.href = '/places/' + element
/*
if (new Date().getDate() >= new Date(data.updatedAt).getDate()) {
console.log('Game has updated')
}
*/
NewContainer.children[0].appendChild(NewGameContainer);
})
.catch(error => {
console.error('Error:', error);
});
});
}
function BestFriends() {
Array.from(document.querySelectorAll('[bestFriend]')).forEach(element => {
element.removeAttribute('bestFriend')
element.getElementsByClassName('friend-name')[0].style.color = 'initial';
FriendContainer.appendChild(element)
});
if (BestFriendsData.length === 0) {
BestFriendsContainer.style.visibility = 'hidden'
BestFriendsContainer.style.padding = '0px !important'
BestFriendsContainer.style.margin = '0px !important'
} else {
BestFriendsContainer.style.visibility = 'visible'
BestFriendsContainer.style.padding = ''
BestFriendsContainer.style.margin = ''
}
BestFriendsData.forEach(element => {
let ExistingFriend = document.getElementById('friend-' + element)
if (ExistingFriend) {
ExistingFriend.setAttribute('bestFriend', 'true')
ExistingFriend.getElementsByClassName('friend-name')[0].style.color = 'yellow';
BestFriendsContainer.prepend(ExistingFriend)
}
});
}
var SecondaryColumn = document.getElementsByClassName('col-lg-8')[0]
SecondaryColumn.insertBefore(NewContainer, SecondaryColumn.children[0]);
SecondaryColumn.insertBefore(NewTitle, SecondaryColumn.children[0]);
async function IRLPrice() {
(async () => {
Utilities = await import(chrome.runtime.getURL('/js/resources/utils.js'));
Utilities = Utilities.default
const TrendingItems = document.getElementById('home-trendingItems')
for (let item of TrendingItems.children[1].getElementsByClassName('d-flex')[0].children) {
const Price = item.getElementsByClassName('text-success')[0]
if (Price !== undefined) {
const IRLResult = await Utilities.CalculateIRL(Price.innerText, Settings.IRLPriceWithCurrencyCurrency)
let Span = document.createElement('span')
Span.classList = 'text-muted polyplus-price-tag'
Span.style = 'font-size: 0.7rem; font-weight: lighter;'
Span.innerText = "($" + IRLResult.result + " " + IRLResult.display + ")"
Price.appendChild(Span)
}
}
})();
}