Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 16 additions & 7 deletions client/play/TossupBonusClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ import { BonusClientMixin } from './BonusClient.js';
import { TossupClientMixin } from './TossupClient.js';
import QuestionClient from './QuestionClient.js';

export default class TossupBonusClient extends BonusClientMixin(TossupClientMixin(QuestionClient)) {
export default class TossupBonusClient extends BonusClientMixin(
TossupClientMixin(QuestionClient)
) {
constructor (room, userId, socket) {
super(room, userId, socket);
attachEventListeners(room, socket);
Expand All @@ -11,8 +13,10 @@ export default class TossupBonusClient extends BonusClientMixin(TossupClientMixi
onmessage (message) {
const data = JSON.parse(message);
switch (data.type) {
case 'toggle-enable-bonuses': return this.toggleEnableBonuses(data);
default: return super.onmessage(message);
case 'toggle-enable-bonuses':
return this.toggleEnableBonuses(data);
default:
return super.onmessage(message);
}
}

Expand All @@ -27,8 +31,13 @@ export default class TossupBonusClient extends BonusClientMixin(TossupClientMixi
}

function attachEventListeners (room, socket) {
document.getElementById('toggle-enable-bonuses').addEventListener('click', function () {
this.blur();
socket.sendToServer({ type: 'toggle-enable-bonuses', enableBonuses: this.checked });
});
document
.getElementById('toggle-enable-bonuses')
.addEventListener('click', function () {
this.blur();
socket.sendToServer({
type: 'toggle-enable-bonuses',
enableBonuses: this.checked
});
});
}
265 changes: 160 additions & 105 deletions client/play/TossupClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,99 +3,125 @@ import QuestionClient from './QuestionClient.js';
import audio from '../audio/index.js';
import { MODE_ENUM } from '../../quizbowl/constants.js';

export const TossupClientMixin = (ClientClass) => class extends ClientClass {
constructor (room, userId, socket) {
super(room, userId, socket);
attachEventListeners(room, socket);
}

onmessage (message) {
const data = JSON.parse(message);
switch (data.type) {
case 'buzz': return this.buzz(data);
case 'end-current-tossup': return this.endCurrentTossup(data);
case 'give-tossup-answer': return this.giveTossupAnswer(data);
case 'pause': return this.pause(data);
case 'reveal-tossup-answer': return this.revealTossupAnswer(data);
case 'set-reading-speed': return this.setReadingSpeed(data);
case 'start-next-tossup': return this.startNextTossup(data);
case 'toggle-powermark-only': return this.togglePowermarkOnly(data);
case 'toggle-rebuzz': return this.toggleRebuzz(data);
case 'update-question': return this.updateQuestion(data);
default: return super.onmessage(message);
export const TossupClientMixin = (ClientClass) =>
class extends ClientClass {
constructor (room, userId, socket) {
super(room, userId, socket);
attachEventListeners(room, socket);
}
}

buzz ({ userId }) {
document.getElementById('buzz').disabled = true;
document.getElementById('next').disabled = true;
document.getElementById('pause').disabled = true;
if (userId === this.USER_ID && audio.soundEffects) { audio.buzz.play(); }
}
onmessage (message) {
const data = JSON.parse(message);
switch (data.type) {
case 'buzz':
return this.buzz(data);
case 'end-current-tossup':
return this.endCurrentTossup(data);
case 'give-tossup-answer':
return this.giveTossupAnswer(data);
case 'pause':
return this.pause(data);
case 'reveal-tossup-answer':
return this.revealTossupAnswer(data);
case 'set-reading-speed':
return this.setReadingSpeed(data);
case 'start-next-tossup':
return this.startNextTossup(data);
case 'toggle-powermark-only':
return this.togglePowermarkOnly(data);
case 'toggle-rebuzz':
return this.toggleRebuzz(data);
case 'toggle-stop-on-power':
return this.toggleStopOnPower(data);
case 'update-question':
return this.updateQuestion(data);
default:
return super.onmessage(message);
}
}

buzz ({ userId }) {
document.getElementById('buzz').disabled = true;
document.getElementById('next').disabled = true;
document.getElementById('pause').disabled = true;
if (userId === this.USER_ID && audio.soundEffects) {
audio.buzz.play();
}
}

endCurrentTossup ({ starred, tossup }) {
addTossupGameCard({ starred, tossup });
}

giveTossupAnswer ({ directive, directedPrompt, score, userId }) {
super.giveAnswer({ directive, directedPrompt, score, userId });

if (directive !== 'prompt') {
document.getElementById('next').disabled = false;
}
}

pause ({ paused }) {
document.getElementById('pause').textContent = paused
? 'Resume'
: 'Pause';
}

revealTossupAnswer ({ answer, question }) {
document.getElementById('question').innerHTML = question;
document.getElementById('answer').innerHTML = 'ANSWER: ' + answer;
document.getElementById('pause').disabled = true;
}

setMode ({ mode }) {
super.setMode({ mode });
switch (mode) {
case MODE_ENUM.SET_NAME:
document.getElementById('toggle-powermark-only').disabled = true;
document.getElementById('toggle-standard-only').disabled = true;
break;
case MODE_ENUM.RANDOM:
document.getElementById('toggle-powermark-only').disabled = false;
document.getElementById('toggle-standard-only').disabled = false;
break;
}
}

setReadingSpeed ({ readingSpeed }) {
document.getElementById('reading-speed').value = readingSpeed;
document.getElementById('reading-speed-display').textContent =
readingSpeed;
}

startNextTossup ({ tossup, packetLength }) {
this.startNextQuestion({ question: tossup, packetLength });
document.getElementById('buzz').textContent = 'Buzz';
document.getElementById('buzz').disabled = false;
document.getElementById('pause').textContent = 'Pause';
document.getElementById('pause').disabled = false;
this.room.tossup = tossup;
}

endCurrentTossup ({ starred, tossup }) {
addTossupGameCard({ starred, tossup });
}
togglePowermarkOnly ({ powermarkOnly }) {
document.getElementById('toggle-powermark-only').checked = powermarkOnly;
}

giveTossupAnswer ({ directive, directedPrompt, score, userId }) {
super.giveAnswer({ directive, directedPrompt, score, userId });
toggleRebuzz ({ rebuzz }) {
document.getElementById('toggle-rebuzz').checked = rebuzz;
}

if (directive !== 'prompt') {
document.getElementById('next').disabled = false;
toggleStopOnPower ({ stopOnPower }) {
console.log('TossupClient.toggleStopOnPower called');
document.getElementById('toggle-stop-on-power').checked = stopOnPower;
}
}

pause ({ paused }) {
document.getElementById('pause').textContent = paused ? 'Resume' : 'Pause';
}

revealTossupAnswer ({ answer, question }) {
document.getElementById('question').innerHTML = question;
document.getElementById('answer').innerHTML = 'ANSWER: ' + answer;
document.getElementById('pause').disabled = true;
}

setMode ({ mode }) {
super.setMode({ mode });
switch (mode) {
case MODE_ENUM.SET_NAME:
document.getElementById('toggle-powermark-only').disabled = true;
document.getElementById('toggle-standard-only').disabled = true;
break;
case MODE_ENUM.RANDOM:
document.getElementById('toggle-powermark-only').disabled = false;
document.getElementById('toggle-standard-only').disabled = false;
break;

updateQuestion ({ word }) {
if (word === '(*)' || word === '[*]') {
return;
}
document.getElementById('question').innerHTML += word + ' ';
}
}

setReadingSpeed ({ readingSpeed }) {
document.getElementById('reading-speed').value = readingSpeed;
document.getElementById('reading-speed-display').textContent = readingSpeed;
}

startNextTossup ({ tossup, packetLength }) {
this.startNextQuestion({ question: tossup, packetLength });
document.getElementById('buzz').textContent = 'Buzz';
document.getElementById('buzz').disabled = false;
document.getElementById('pause').textContent = 'Pause';
document.getElementById('pause').disabled = false;
this.room.tossup = tossup;
}

togglePowermarkOnly ({ powermarkOnly }) {
document.getElementById('toggle-powermark-only').checked = powermarkOnly;
}

toggleRebuzz ({ rebuzz }) {
document.getElementById('toggle-rebuzz').checked = rebuzz;
}

updateQuestion ({ word }) {
if (word === '(*)' || word === '[*]') { return; }
document.getElementById('question').innerHTML += word + ' ';
}
};
};

function attachEventListeners (room, socket) {
document.getElementById('buzz').addEventListener('click', function () {
Expand All @@ -106,29 +132,58 @@ function attachEventListeners (room, socket) {

document.getElementById('pause').addEventListener('click', function () {
this.blur();
const seconds = parseFloat(document.querySelector('.timer .face').textContent);
const tenths = parseFloat(document.querySelector('.timer .fraction').textContent);
const seconds = parseFloat(
document.querySelector('.timer .face').textContent
);
const tenths = parseFloat(
document.querySelector('.timer .fraction').textContent
);
const pausedTime = (seconds + tenths) * 10;
socket.sendToServer({ type: 'pause', pausedTime });
});

document.getElementById('reading-speed').addEventListener('change', function () {
socket.sendToServer({ type: 'set-reading-speed', readingSpeed: this.value });
});

document.getElementById('reading-speed').addEventListener('input', function () {
document.getElementById('reading-speed-display').textContent = this.value;
});

document.getElementById('toggle-powermark-only').addEventListener('click', function () {
this.blur();
socket.sendToServer({ type: 'toggle-powermark-only', powermarkOnly: this.checked });
});

document.getElementById('toggle-rebuzz').addEventListener('click', function () {
this.blur();
socket.sendToServer({ type: 'toggle-rebuzz', rebuzz: this.checked });
});
document
.getElementById('reading-speed')
.addEventListener('change', function () {
socket.sendToServer({
type: 'set-reading-speed',
readingSpeed: this.value
});
});

document
.getElementById('reading-speed')
.addEventListener('input', function () {
document.getElementById('reading-speed-display').textContent = this.value;
});

document
.getElementById('toggle-powermark-only')
.addEventListener('click', function () {
this.blur();
socket.sendToServer({
type: 'toggle-powermark-only',
powermarkOnly: this.checked
});
});

document
.getElementById('toggle-rebuzz')
.addEventListener('click', function () {
this.blur();
socket.sendToServer({ type: 'toggle-rebuzz', rebuzz: this.checked });
});

document
.getElementById('toggle-stop-on-power')
.addEventListener('click', function () {
console.log('stop-on-power checkbox has been checked');
this.blur();
socket.sendToServer({
type: 'toggle-stop-on-power',
stopOnPower: this.checked
});
});
}

const TossupClient = TossupClientMixin(QuestionClient);
Expand Down
Loading