2018-05-30 20:32:51 -07:00
const settingsNavDone = document . getElementById ( 'settingsNavDone' )
2018-05-30 19:22:17 -07:00
const settingsAddAccount = document . getElementById ( 'settingsAddAccount' )
const settingsCurrentAccounts = document . getElementById ( 'settingsCurrentAccounts' )
/ * *
* General Settings Functions
* /
2018-05-30 13:00:07 -07:00
let selectedTab = 'settingsTabAccount'
2018-05-30 19:22:17 -07:00
/ * *
* Bind functionality for the settings navigation items .
* /
2018-05-30 13:00:07 -07:00
function setupSettingsTabs ( ) {
Array . from ( document . getElementsByClassName ( 'settingsNavItem' ) ) . map ( ( val ) => {
val . onclick = ( e ) => {
if ( val . hasAttribute ( 'selected' ) ) {
return
}
const navItems = document . getElementsByClassName ( 'settingsNavItem' )
for ( let i = 0 ; i < navItems . length ; i ++ ) {
if ( navItems [ i ] . hasAttribute ( 'selected' ) ) {
navItems [ i ] . removeAttribute ( 'selected' )
}
}
val . setAttribute ( 'selected' , '' )
let prevTab = selectedTab
selectedTab = val . getAttribute ( 'rSc' )
$ ( ` # ${ prevTab } ` ) . fadeOut ( 250 , ( ) => {
$ ( ` # ${ selectedTab } ` ) . fadeIn ( 250 )
} )
}
} )
}
2018-05-30 20:32:51 -07:00
/* Closes the settings view and saves all data. */
settingsNavDone . onclick = ( ) => {
switchView ( getCurrentView ( ) , VIEWS . landing )
}
2018-05-30 19:22:17 -07:00
/ * *
* Account Management Tab
* /
// Bind the add account button.
settingsAddAccount . onclick = ( e ) => {
switchView ( getCurrentView ( ) , VIEWS . login , 500 , 500 , ( ) => {
loginViewOnCancel = VIEWS . settings
loginViewOnSuccess = VIEWS . settings
loginCancelEnabled ( true )
} )
}
/ * *
* Bind functionality for the account selection buttons . If another account
* is selected , the UI of the previously selected account will be updated .
* /
function bindAuthAccountSelect ( ) {
Array . from ( document . getElementsByClassName ( 'settingsAuthAccountSelect' ) ) . map ( ( val ) => {
val . onclick = ( e ) => {
if ( val . hasAttribute ( 'selected' ) ) {
return
}
const selectBtns = document . getElementsByClassName ( 'settingsAuthAccountSelect' )
for ( let i = 0 ; i < selectBtns . length ; i ++ ) {
if ( selectBtns [ i ] . hasAttribute ( 'selected' ) ) {
selectBtns [ i ] . removeAttribute ( 'selected' )
selectBtns [ i ] . innerHTML = 'Select Account'
}
}
val . setAttribute ( 'selected' , '' )
val . innerHTML = 'Selected Account ✔'
2018-05-30 20:32:51 -07:00
setSelectedAccount ( val . closest ( '.settingsAuthAccount' ) . getAttribute ( 'uuid' ) )
2018-05-30 19:22:17 -07:00
}
} )
}
/ * *
* Bind functionality for the log out button . If the logged out account was
* the selected account , another account will be selected and the UI will
* be updated accordingly .
* /
function bindAuthAccountLogOut ( ) {
Array . from ( document . getElementsByClassName ( 'settingsAuthAccountLogOut' ) ) . map ( ( val ) => {
val . onclick = ( e ) => {
2018-05-30 20:32:51 -07:00
let isLastAccount = false
if ( Object . keys ( ConfigManager . getAuthAccounts ( ) ) . length === 1 ) {
isLastAccount = true
setOverlayContent (
'Warning<br>This is Your Last Account' ,
'In order to use the launcher you must be logged into at least one account. You will need to login again after.<br><br>Are you sure you want to log out?' ,
'I\'m Sure' ,
'Cancel'
)
setOverlayHandler ( ( ) => {
processLogOut ( val , isLastAccount )
switchView ( getCurrentView ( ) , VIEWS . login )
toggleOverlay ( false )
} )
setDismissHandler ( ( ) => {
toggleOverlay ( false )
} )
toggleOverlay ( true , true )
} else {
processLogOut ( val , isLastAccount )
}
}
} )
}
/ * *
* Process a log out .
*
* @ param { Element } val The log out button element .
* @ param { boolean } isLastAccount If this logout is on the last added account .
* /
function processLogOut ( val , isLastAccount ) {
const parent = val . closest ( '.settingsAuthAccount' )
const uuid = parent . getAttribute ( 'uuid' )
const prevSelAcc = ConfigManager . getSelectedAccount ( )
AuthManager . removeAccount ( uuid ) . then ( ( ) => {
if ( ! isLastAccount && uuid === prevSelAcc . uuid ) {
const selAcc = ConfigManager . getSelectedAccount ( )
refreshAuthAccountSelected ( selAcc . uuid )
updateSelectedAccount ( selAcc )
validateSelectedAccount ( )
2018-05-30 19:22:17 -07:00
}
} )
2018-05-30 20:32:51 -07:00
$ ( parent ) . fadeOut ( 250 , ( ) => {
parent . remove ( )
} )
2018-05-30 19:22:17 -07:00
}
/ * *
* Refreshes the status of the selected account on the auth account
* elements .
*
* @ param { string } uuid The UUID of the new selected account .
* /
function refreshAuthAccountSelected ( uuid ) {
Array . from ( document . getElementsByClassName ( 'settingsAuthAccount' ) ) . map ( ( val ) => {
const selBtn = val . getElementsByClassName ( 'settingsAuthAccountSelect' ) [ 0 ]
if ( uuid === val . getAttribute ( 'uuid' ) ) {
selBtn . setAttribute ( 'selected' , '' )
selBtn . innerHTML = 'Selected Account ✔'
} else {
if ( selBtn . hasAttribute ( 'selected' ) ) {
selBtn . removeAttribute ( 'selected' )
}
selBtn . innerHTML = 'Select Account'
}
} )
}
/ * *
* Add auth account elements for each one stored in the authentication database .
* /
function populateAuthAccounts ( ) {
const authAccounts = ConfigManager . getAuthAccounts ( )
const authKeys = Object . keys ( authAccounts )
const selectedUUID = ConfigManager . getSelectedAccount ( ) . uuid
let authAccountStr = ` `
authKeys . map ( ( val ) => {
const acc = authAccounts [ val ]
authAccountStr += ` <div class="settingsAuthAccount" uuid=" ${ acc . uuid } ">
< div class = "settingsAuthAccountLeft" >
< img class = "settingsAuthAccountImage" alt = "${acc.displayName}" src = "https://crafatar.com/renders/body/${acc.uuid}?scale=3&default=MHF_Steve&overlay" >
< / d i v >
< div class = "settingsAuthAccountRight" >
< div class = "settingsAuthAccountDetails" >
< div class = "settingsAuthAccountDetailPane" >
< div class = "settingsAuthAccountDetailTitle" > Username < / d i v >
< div class = "settingsAuthAccountDetailValue" > $ { acc . displayName } < / d i v >
< / d i v >
< div class = "settingsAuthAccountDetailPane" >
< div class = "settingsAuthAccountDetailTitle" > $ { acc . displayName === acc . username ? 'UUID' : 'Email' } < / d i v >
< div class = "settingsAuthAccountDetailValue" > $ { acc . displayName === acc . username ? acc . uuid : acc . username } < / d i v >
< / d i v >
< / d i v >
< div class = "settingsAuthAccountActions" >
< button class = "settingsAuthAccountSelect" $ { selectedUUID === acc . uuid ? 'selected>Selected Account ✔' : '>Select Account' } < / b u t t o n >
< div class = "settingsAuthAccountWrapper" >
< button class = "settingsAuthAccountLogOut" > Log Out < / b u t t o n >
< / d i v >
< / d i v >
< / d i v >
< / d i v > `
} )
settingsCurrentAccounts . innerHTML = authAccountStr
}
function prepareAccountsTab ( ) {
populateAuthAccounts ( )
bindAuthAccountSelect ( )
bindAuthAccountLogOut ( )
}
/ * *
* Settings preparation functions .
* /
/ * *
* Prepare the entire settings UI .
* /
function prepareSettings ( ) {
setupSettingsTabs ( )
prepareAccountsTab ( )
}
// Prepare the settings UI on startup.
prepareSettings ( )