BoardLabel: "string",
Lang: "string",
PlayerName: "string",
+ CheckFirstWord: "number",
SpellCheckerEnabledOnce: "boolean",
TimerGameDate: "number",
TimerTurnDate: "number"
.map(function (x) {return parseInt(x);});
initBoard();
break;
+ case "checkFirstWord":
+ setSetting("CheckFirstWord", value);
+ break;
}
}
row.lastChild.lastChild.onclick = (
function (row) {
return function () {
+ if (getSetting("CheckFirstWord") === 1) {
+ const centerCell = document.getElementById("center-cell");
+ if (!centerCell.getElementsByClassName("tile")[0]) {
+ myAlert(_("First word must cover center box."));
+ return;
+ }
+ }
+
if (!pollingReady) {
showConnectionLost();
return;
row.lastChild.lastChild.onclick = (
function (row) {
return function () {
+ if (getSetting("CheckFirstWord") === 1) {
+ const centerCell = document.getElementById("center-cell");
+ if (!centerCell.getElementsByClassName("tile")[0]) {
+ myAlert(_("First word must cover center box."));
+ return;
+ }
+ }
+
if (!pollingReady) {
showConnectionLost();
return;
setCurrentPlayer(data.currentPlayer);
}
+ if (data.checkFirstWord) {
+ set("checkFirstWord", data.checkFirstWord);
+ document.getElementById("check-first-word").checked = (getSetting("CheckFirstWord") === 1);
+ }
+
if (data.players) {
setPlayers(data.players);
}
boardLang: getSetting("BoardLang"),
boardLabel: getSetting("BoardLabel"),
bagFactor: (typeof getSetting("BoardLabel") === "undefined") ? 1 : BoardList[getSetting("BoardLabel")].factor,
+ checkFirstWord: getSetting("CheckFirstWord"),
version: VERSION,
cmds: cmds
};
function scoreWords() {
let totalScore = 0;
+ if (getSetting("CheckFirstWord") === 1) {
+ const centerCell = document.getElementById("center-cell");
+ if (!centerCell.getElementsByClassName("tile")[0]) {
+ myAlert(_("First word must cover center box."));
+ return;
+ }
+ }
+
const newWords = searchNewWords();
for (const k of Object.keys(newWords)) {
let wordFactor = 1;
}
}
+ function initCheckFirstWord() {
+ document.getElementById("check-first-word").checked = (getSetting("CheckFirstWord") === 1);
+ document.getElementById("check-first-word").onclick = function () {
+ const checkFirstWord = (document.getElementById("check-first-word").checked) ? 1 : -1;
+ set("checkFirstCheck", checkFirstWord);
+ sendCmds([{cmd: "checkFirstWord", checkFirstWord: checkFirstWord}]);
+ };
+ }
+
function toggleSpellChecker(e) {
const disabled = document.getElementById("disable-spell-checker").checked;
checkDictionaryExistance();
initChat();
initGame();
initSound();
+ initCheckFirstWord();
initSpellChecker();
initFlashLight();
nextHelpMessage();
const DEFAULT_BOARD_LANG = process.env.TRIVABBLE_DEFAULT_BOARD_LANG || "fr";
const DEFAULT_BOARD_LABEL = process.env.TRIVABBLE_DEFAULT_BOARD_LABEL || "15x15-7";
const DEFAULT_BAG_FACTOR = 1;
+const CHECK_FIRST_WORD = 1; // 1: check, 0: not set, -1: no check
const VERSION = 202005070100;
return res;
}
-Game.prototype.init = function (lang, label, factor) {
+Game.prototype.init = function (lang, label, factor, checkFirstWord) {
this.label = label || DEFAULT_BOARD_LABEL;
this.factor = factor || DEFAULT_BAG_FACTOR;
this.board = newBoard(this.label);
this.letterValues = boardTilesPerLang[this.lang].letterValues;
this.racks = {};
this.scores = {};
+ this.checkFirstWord = checkFirstWord || CHECK_FIRST_WORD;
this.lastUpdated = new Date();
this.currentPlayer = "";
letterValues: this.letterValues,
racks: this.racks,
scores: this.scores,
+ checkFirstWord: this.checkFirstWord,
lastUpdated: this.lastUpdated.toISOString(),
currentPlayer: this.currentPlayer
};
game.letterValues = boardTilesPerLang[game.lang].letterValues;
game.racks = obj.racks || {};
game.scores = obj.scores || {};
+ game.checkFirstWord = obj.checkFirstWord || CHECK_FIRST_WORD;
game.lastUpdated = obj.lastUpdated ? new Date(obj.lastUpdated) : new Date();
game.currentPlayer = obj.currentPlayer || "";
return game;
this.pendingEvents.push({currentPlayer: player});
};
+Game.prototype.setCheckFirstWord = function (onOff) {
+ this.checkFirstWord = onOff;
+ this.pendingEvents.push({checkFirstWord: onOff});
+};
+
Game.prototype.playerJoined = function (playerName) {
if (playerName) {
this.getPlayerRack(playerName); // Create the player's rack
};
Game.prototype.reset = function (player) {
- this.init(this.lang, this.label, this.factor);
+ this.init(this.lang, this.label, this.factor, this.checkFirstWord);
this.pendingEvents.push({
player: player,
action: "reset",
availableBoardLangs: availableBoardLangs,
currentPlayer: game.currentPlayer,
rack: game.getPlayerRack(playerName),
+ checkFirstWord: game.checkFirstWord,
board: game.board,
remainingLetters: game.bag.length,
letterletterValues: game.letterValues,
break;
}
+ case "checkFirstWord": {
+ game.setCheckFirstWord(cmd.checkFirstWord);
+ reply(message, response, cmdNumber, {error: 0});
+ break;
+ }
+
case "currentPlayer": {
game.setCurrentPlayer(cmd.player);
reply(message, response, cmdNumber, {error: 0});
game.lang = cmd.lang || DEFAULT_BOARD_LANG;
game.label = cmd.label || DEFAULT_BOARD_LABEL;
game.factor = cmd.factor || DEFAULT_BAG_FACTOR;
+ game.checkFirstWord = cmd.checkFirstWord || CHECK_FIRST_WORD;
game.reset();
reply(message, response, cmdNumber, {
boardLang: game.lang,
boardLabel: game.label,
bagFactor: game.factor,
+ checkFirstWord: game.checkFirstWord,
letterValues: game.letterValues
});
rack: game.getPlayerRack(message.playerName),
board: game.board,
remainingLetters: game.bag.length,
+ checkFirstWord: game.checkFirstWord,
version: VERSION
})
);