mirror of
https://github.com/AlecM33/Werewolf.git
synced 2025-12-26 15:57:50 +01:00
78 lines
3.4 KiB
JavaScript
78 lines
3.4 KiB
JavaScript
import { injectNavbar } from '../modules/Navbar.js';
|
|
import { toast } from '../modules/Toast.js';
|
|
import { XHRUtility } from '../modules/XHRUtility.js';
|
|
import { UserUtility } from '../modules/UserUtility.js';
|
|
import { globals } from '../config/globals.js';
|
|
|
|
const join = () => {
|
|
injectNavbar();
|
|
const splitUrl = window.location.pathname.split('/join/');
|
|
const accessCode = splitUrl[1];
|
|
if (/^[a-zA-Z0-9]+$/.test(accessCode) && accessCode.length === globals.ACCESS_CODE_LENGTH) {
|
|
document.getElementById('game-code').innerText = accessCode;
|
|
document.getElementById('game-time').innerText =
|
|
decodeURIComponent((new URL(document.location)).searchParams.get('timer'));
|
|
document.getElementById('game-player-count').innerText =
|
|
decodeURIComponent((new URL(document.location)).searchParams.get('playerCount')) + ' Players';
|
|
const form = document.getElementById('join-game-form');
|
|
form.onsubmit = joinHandler;
|
|
} else {
|
|
window.location = '/not-found?reason=' + encodeURIComponent('invalid-access-code');
|
|
}
|
|
};
|
|
|
|
const joinHandler = (e) => {
|
|
const splitUrl = window.location.pathname.split('/join/');
|
|
const accessCode = splitUrl[1];
|
|
e.preventDefault();
|
|
const name = document.getElementById('player-new-name').value;
|
|
if (validateName(name)) {
|
|
document.getElementById('join-game-form').onsubmit = null;
|
|
document.getElementById('submit-new-name').classList.add('submitted');
|
|
document.getElementById('submit-new-name').setAttribute('value', 'Joining...');
|
|
XHRUtility.xhr(
|
|
'/api/games/' + accessCode + '/players',
|
|
'PATCH',
|
|
null,
|
|
JSON.stringify({
|
|
playerName: name,
|
|
accessCode: accessCode,
|
|
sessionCookie: UserUtility.validateAnonUserSignature(globals.ENVIRONMENT.LOCAL),
|
|
localCookie: UserUtility.validateAnonUserSignature(globals.ENVIRONMENT.PRODUCTION)
|
|
})
|
|
)
|
|
.then((res) => {
|
|
const json = JSON.parse(res.content);
|
|
UserUtility.setAnonymousUserId(json.cookie, json.environment);
|
|
window.location = '/game/' + accessCode;
|
|
}).catch((res) => {
|
|
document.getElementById('join-game-form').onsubmit = joinHandler;
|
|
document.getElementById('submit-new-name').classList.remove('submitted');
|
|
document.getElementById('submit-new-name').setAttribute('value', 'Join Game');
|
|
if (res.status === 404) {
|
|
toast('This game was not found.', 'error', true, true, 'long');
|
|
} else if (res.status === 400) {
|
|
toast('This name is already taken.', 'error', true, true, 'long');
|
|
} else if (res.status >= 500) {
|
|
toast(
|
|
'The server is experiencing problems. Please try again later',
|
|
'error',
|
|
true
|
|
);
|
|
}
|
|
});
|
|
} else {
|
|
toast('Name must be between 1 and 30 characters.', 'error', true, true, 'long');
|
|
}
|
|
};
|
|
|
|
function validateName (name) {
|
|
return typeof name === 'string' && name.length > 0 && name.length <= 30;
|
|
}
|
|
|
|
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
|
|
module.exports = join;
|
|
} else {
|
|
join();
|
|
}
|