From 3ed62725fe47e395793cf952403d61fc9f347eee Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Mon, 19 Nov 2018 16:28:40 +0100
Subject: [PATCH] Add expert mode

---
 TODO                                  |  1 -
 public/javascripts/components/game.js | 31 ++++++++++++++++++++++-----
 public/stylesheets/variant.sass       |  6 ++++++
 3 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/TODO b/TODO
index ebfc70e5..314c0c72 100644
--- a/TODO
+++ b/TODO
@@ -1,2 +1 @@
 PGN text is not selectable on desktop computer (understand why?!)
-Mode expert: game.js, button on top (with online indicator)
diff --git a/public/javascripts/components/game.js b/public/javascripts/components/game.js
index 829beaad..40035a5f 100644
--- a/public/javascripts/components/game.js
+++ b/public/javascripts/components/game.js
@@ -16,6 +16,7 @@ Vue.component('my-game', {
 			seek: false,
 			fenStart: "",
 			incheck: [],
+			expert: document.cookie.length>0 ? document.cookie.substr(-1)=="1" : false,
 		};
 	},
 	render(h) {
@@ -96,6 +97,22 @@ Vue.component('my-game', {
 				}
 			);
 			elementArray.push(turnIndic);
+			let expertSwitch = h(
+				'button',
+				{
+					on: { click: this.toggleExpertMode },
+					attrs: { "aria-label": 'Toggle expert mode' },
+					'class': {
+						"tooltip":true,
+						"topindicator": true,
+						"indic-right": true,
+						"expert-switch": true,
+						"expert-mode": this.expert,
+					},
+				},
+				[h('i', { 'class': { "material-icons": true } }, "remove_red_eye")]
+			);
+			elementArray.push(expertSwitch);
 			let choices = h('div',
 				{
 					attrs: { "id": "choices" },
@@ -161,7 +178,7 @@ Vue.component('my-game', {
 									)
 								);
 							}
-							if (hintSquares[ci][cj])
+							if (!this.expert && hintSquares[ci][cj])
 							{
 								elems.push(
 									h(
@@ -184,10 +201,10 @@ Vue.component('my-game', {
 								{
 									'class': {
 										'board': true,
-										'light-square': !highlight && (i+j)%2==0,
-										'dark-square': !highlight && (i+j)%2==1,
-										'highlight': highlight,
-										'incheck': incheckSq[ci][cj],
+										'light-square': (i+j)%2==0 && (this.expert || !highlight),
+										'dark-square': (i+j)%2==1 && (this.expert || !highlight),
+										'highlight': !this.expert && highlight,
+										'incheck': !this.expert && incheckSq[ci][cj],
 									},
 									attrs: {
 										id: this.getSquareId({x:ci,y:cj}),
@@ -479,6 +496,10 @@ Vue.component('my-game', {
 			}
 			return eogMessage;
 		},
+		toggleExpertMode: function() {
+			this.expert = !this.expert;
+			document.cookie = "expert=" + (this.expert ? "1" : "0");
+		},
 		resign: function() {
 			if (this.mode == "human" && this.oppConnected)
 			{
diff --git a/public/stylesheets/variant.sass b/public/stylesheets/variant.sass
index 495f4cab..39fb80bf 100644
--- a/public/stylesheets/variant.sass
+++ b/public/stylesheets/variant.sass
@@ -53,6 +53,12 @@ figure.diagram-container > .diagram
 .disconnected
   background-color: red
 
+.expert-switch
+  padding: 5px 10px
+
+.expert-mode, button.expert-mode:hover
+  background-color: #ffcc99
+
 .white-turn
   background-color: white
 
-- 
2.44.0