- fetchGame: function(game, callback) {
- const afterRetrieval = async (game) => {
- await import("@/variants/" + game.vname + ".js")
- .then((vModule) => {
- window.V = vModule[game.vname + "Rules"];
- this.loadGame(game, callback);
- });
- };
- if (!!game) {
- afterRetrieval(game);
- return;
- }
- if (this.gameRef.rid)
- // Remote live game: forgetting about callback func... (TODO: design)
- this.send("askfullgame", { target: this.gameRef.rid });
- else {
- // Local or corr game on server.
- // NOTE: afterRetrieval() is never called if game not found
- const gid = this.gameRef.id;
- if (Number.isInteger(gid) || !isNaN(parseInt(gid))) {
- // corr games identifiers are integers
- ajax(
- "/games",
- "GET",
- {
- data: { gid: gid },
- success: (res) => {
- res.game.moves.forEach(m => {
- m.squares = JSON.parse(m.squares);
- });
- afterRetrieval(res.game);
- }
+ loadVariantThenGame: async function(game, callback) {
+ await import("@/variants/" + game.vname + ".js")
+ .then((vModule) => {
+ window.V = vModule[game.vname + "Rules"];
+ this.loadGame(game, callback);
+ });
+ // (AJAX) Request to get rules content (plain text, HTML)
+ this.rulesContent =
+ require(
+ "raw-loader!@/translations/rules/" +
+ game.vname + "/" +
+ this.st.lang + ".pug"
+ )
+ // Next two lines fix a weird issue after last update (2019-11)
+ .replace(/\\n/g, " ")
+ .replace(/\\"/g, '"')
+ .replace('module.exports = "', "")
+ .replace(/"$/, "")
+ .replace(/(fen:)([^:]*):/g, replaceByDiag);
+ },
+ // 3 cases for loading a game:
+ // - from indexedDB (running or completed live game I play)
+ // - from server (one correspondance game I play[ed] or not)
+ // - from remote peer (one live game I don't play, finished or not)
+ fetchGame: function(callback) {
+ if (
+ Number.isInteger(this.gameRef) ||
+ !isNaN(parseInt(this.gameRef, 10))
+ ) {
+ // corr games identifiers are integers
+ ajax(
+ "/games",
+ "GET",
+ {
+ data: { gid: this.gameRef },
+ success: (res) => {
+ res.game.moves.forEach(m => {
+ m.squares = JSON.parse(m.squares);
+ });
+ callback(res.game);