+ getRandomnessClass: function(pc) {
+ return {
+ ["random-" + pc.randomness]: true
+ };
+ },
+ visibilityChange: function() {
+ // TODO: Use document.hidden? https://webplatform.news/issues/2019-03-27
+ this.send(
+ document.visibilityState == "visible"
+ ? "getfocus"
+ : "losefocus"
+ );
+ },
+ partialResetNewchallenge: function() {
+ // Reset potential target and custom FEN:
+ this.newchallenge.to = "";
+ this.newchallenge.fen = "";
+ this.newchallenge.diag = "";
+ this.newchallenge.memorize = false;
+ },
+ showNewchallengeForm: function() {
+ this.partialResetNewchallenge();
+ window.doClick("modalNewgame");
+ },
+ addPresetChall: function(chall) {
+ // Add only if not already existing:
+ if (this.presetChalls.some(c =>
+ c.vid == chall.vid &&
+ c.cadence == chall.cadence &&
+ c.randomness == chall.randomness
+ )) {
+ return;
+ }
+ const L = this.presetChalls.length;
+ this.presetChalls.push({
+ index: L,
+ vid: chall.vid,
+ vname: chall.vname, //redundant, but easier
+ cadence: chall.cadence,
+ randomness: chall.randomness
+ });
+ localStorage.setItem("presetChalls", JSON.stringify(this.presetChalls));
+ },
+ removePresetChall: function(e, pchall) {
+ e.stopPropagation();
+ const pchallIdx = this.presetChalls.findIndex(pc => pc.index == pchall.index);
+ this.presetChalls.splice(pchallIdx, 1);
+ localStorage.setItem("presetChalls", JSON.stringify(this.presetChalls));
+ },
+ tchallButtonsMargin: function() {
+ if (!!this.curChallToAccept.fen) return { "margin-top": "10px" };
+ return {};
+ },