2023-02-17 06:47:28 -05:00
// Get the clear storage button element
const clearStorageBtn = document . getElementById ( 'clear-storage-btn' ) ;
// Add a click event listener to the clear storage button
clearStorageBtn . addEventListener ( 'click' , ( ) => {
// Remove the cookies
function removeCookies ( ) {
// Set the expiration date to a date in the past
const expirationDate = new Date ( 0 ) . toUTCString ( ) ;
// Set the ext_id cookie to expire
document . cookie = ` ext_id=; expires= ${ expirationDate } ` ;
// Set the luid cookie to expire
document . cookie = ` luid=; expires= ${ expirationDate } ` ;
// Set the aime_card_id cookie to expire
document . cookie = ` aime_card_id=; expires= ${ expirationDate } ` ;
}
// Example usage
removeCookies ( ) ;
console . log ( 'Local storage cleared.' ) ;
window . location = "/" ;
} ) ;
// Get the cookie string
const cookieString = document . cookie ;
// Parse the cookie string and extract the values
const cookies = cookieString . split ( ';' ) ;
2023-02-18 05:19:30 -05:00
let ext _id , luid , aime _card _id ;
2023-02-17 06:47:28 -05:00
for ( let i = 0 ; i < cookies . length ; i ++ ) {
const cookie = cookies [ i ] . trim ( ) ;
const cookieParts = cookie . split ( '=' ) ;
if ( cookieParts [ 0 ] === 'ext_id' ) {
ext _id = cookieParts [ 1 ] ;
}
if ( cookieParts [ 0 ] === 'luid' ) {
luid = cookieParts [ 1 ] ;
}
2023-02-18 05:19:30 -05:00
if ( cookieParts [ 0 ] === 'aime_card_id' ) {
aime _card _id = cookieParts [ 1 ] ;
}
2023-02-17 06:47:28 -05:00
}
// Send the user to the sign in page if they aren't already signed in to the website.
if ( ext _id && luid ) {
console . log ( ` ext_id: ${ ext _id } , luid: ${ luid } ` ) ;
} else {
console . log ( 'User Data Not Detected! Please Sign In.' ) ;
window . location = "/" ;
}
const userdata = JSON . parse ( document . currentScript . getAttribute ( 'data-userdata' ) ) ;
2023-02-18 05:19:30 -05:00
//=====================================================================
// Now Exiting: Cookie Data ///////////////// Now Entering: User Data
//=====================================================================
// general functions
function padNumber ( num , size ) {
let s = num + "" ;
while ( s . length < size ) {
s = "0" + s ;
}
return s ;
}
async function getSongInformation ( id ) {
const musicData = await musicMetadata ( ) ;
const songMatch = musicData [ id ] ;
if ( ! songMatch ) {
return null ;
}
return songMatch ;
}
// Ban Check lmao
if ( userdata . ban _state !== 0 ) {
//nice
const parent = document . getElementById ( "User" ) ;
const wrapperDiv = document . createElement ( "div" ) ;
wrapperDiv . id = 'wrapper' ;
const newDiv = document . createElement ( "div" ) ;
newDiv . classList . add ( 'error' )
newDiv . innerHTML = ` <h3 style='
word - wrap : break - word ;
max - width : 800 px ; '>Heya! It looks like you' ve been banned from playing on this profile , but don 't worry - you can still enjoy the game in guest mode and view this profile. However, your account won' t be able to play on it anymore . If you have any questions about your ban , please contact your Network Administrator . < /h3>`; / / or set the HTML content with newDiv . innerHTML = " < p > This is some HTML content < / p > ;
parent . insertBefore ( wrapperDiv , parent . firstChild ) ;
wrapperDiv . appendChild ( newDiv ) ;
}
2023-02-17 06:47:28 -05:00
// Check if the user image element exists
2023-02-18 05:19:30 -05:00
if ( userdata . icon _id === 10 ) {
2023-02-17 06:47:28 -05:00
const userImage = document . getElementById ( 'user-image' ) ;
userImage . src = "images/" + ext _id + '-up.jpg' ;
} else if ( document . currentScript . getAttribute ( 'data-userdata' ) ) {
const userImage = document . getElementById ( 'user-image' ) ;
const UI _Icon = userdata . icon _id ;
// Pad the number because game weird
// Set the user image source
userImage . src = "assets/icon/UI_Icon_" + padNumber ( Number ( UI _Icon ) , 6 ) + '.png' ;
}
// title getting
const request = new XMLHttpRequest ( ) ;
request . open ( 'GET' , '/assets/metadata/titleMetadata.json' , true ) ;
2023-02-18 05:19:30 -05:00
request . onload = function ( ) {
if ( this . status >= 200 && this . status < 400 ) {
const data = JSON . parse ( this . response ) ;
const userTitle = document . getElementById ( 'user-title-text' ) ;
var userTitleText = ""
for ( title of data ) {
if ( userdata . title _id === title . titleId ) {
userTitleText = title . name
break
}
continue
2023-02-17 06:47:28 -05:00
}
2023-02-18 05:19:30 -05:00
userTitle . textContent = userTitleText
} else {
// handle the error
2023-02-17 06:47:28 -05:00
}
} ;
2023-02-18 05:19:30 -05:00
request . onerror = function ( ) {
// handle the error
2023-02-17 06:47:28 -05:00
} ;
request . send ( ) ;
2023-02-18 05:19:30 -05:00
// User Play Log
async function userPlayLogFormatter ( div ) {
const UserPlayLogData = await UserPlayLog ( aime _card _id ) ;
const musicIds = UserPlayLogData . map ( score => score . music _id ) ;
const songs = await Promise . all ( musicIds . map ( getSongInformation ) ) ;
let myDiv = document . getElementById ( "scoreWrapper" ) ;
if ( myDiv === null ) {
const scoresWrapperDiv = document . createElement ( 'div' ) ;
scoresWrapperDiv . id = "scoreWrapper" ;
for ( let i = UserPlayLogData . length - 1 ; i >= 0 ; i -- ) {
const newDiv = document . createElement ( 'div' ) ;
let score = JSON . parse ( JSON . stringify ( UserPlayLogData [ i ] ) ) ;
let song = JSON . parse ( JSON . stringify ( songs [ i ] ) ) ;
if ( ! song || ! song . name ) {
console . log ( song )
console . log ( score . music _id )
console . log ( "Song or title is undefined" ) ;
continue ;
}
newDiv . innerHTML = `
< h4 > $ { song . name . str || "" } || < / h 4 >
` ;
let jacket = document . createElement ( 'img' ) ;
jacket . addEventListener ( "error" , function ( ) {
this . src = "assets/icon/UI_Icon_000000.png" ;
} ) ;
jacket . classList . add ( 'score-jacket' ) ;
jacket . src = "assets/jacket/UI_Jacket_" + padNumber ( Number ( score . music _id ) , 6 ) + '.png' ;
newDiv . append ( jacket )
newDiv . setAttribute ( "id" , "score-grid" ) ;
newDiv . setAttribute ( "class" , "item" ) ;
scoresWrapperDiv . appendChild ( newDiv ) ;
}
div . appendChild ( scoresWrapperDiv ) ;
}
}
//=====================================================================
// Now Exiting: User Data ////////////// Now Entering: Nested Div Hell
//=====================================================================
const showContent = ( contentNumber ) => {
// Select the content div with the data-content attribute equal to the contentNumber
const contentDiv = document . querySelector ( ` [data-content="content- ${ contentNumber } "] ` ) ;
// Hide all content divs except the selected one
const contentDivs = document . querySelectorAll ( '[data-content]' ) ;
contentDivs . forEach ( ( div ) => {
if ( div === contentDiv ) {
if ( contentNumber === 2 ) { // If the ContentNumber is set to the PlayLog, Go to the userPlayLogFormatter Function
userPlayLogFormatter ( div )
}
div . classList . remove ( 'hidden' ) ;
} else {
div . classList . add ( 'hidden' ) ;
}
} ) ;
} ;
//=====================================================================
// Now Exiting: Nested Div Hell ///////////// Now Entering: Fetch Land
//=====================================================================
function UserPlayLog ( aime _card _id ) {
const input = aime _card _id ;
const url = "/api/getUserScores/" ;
// Return the fetch promise so that it can be handled within userPlayLogFormatter
return fetch ( url , {
method : "POST" ,
headers : {
"Content-Type" : "application/json"
} ,
body : JSON . stringify ( {
input : aime _card _id
} )
} )
. then ( response => response . json ( ) )
. then ( data => data . data )
. catch ( error => console . error ( error ) ) ;
}
async function musicMetadata ( ) {
const url = "/assets/metadata/musicMetadata.json" ;
try {
const response = await fetch ( url , {
method : "GET" ,
headers : {
"Content-Type" : "application/json" ,
} ,
} ) ;
const data = await response . json ( ) ;
const mapping = { } ;
data . forEach ( ( song ) => {
mapping [ song . name . id ] = song ;
} ) ;
return mapping ;
} catch ( error ) {
console . error ( error ) ;
}
}