{"version":3,"sources":["components/NavMenu.js","components/Layout.js","components/EvalGauge.js","pages/Home.js","pages/Puzzles.js","pages/Viewer.js","pages/LoadPuzzle.js","App.js","registerServiceWorker.js","index.js"],"names":["NavMenu","props","toggleNavbar","bind","state","collapsed","this","setState","Navbar","className","light","Container","NavbarBrand","tag","Link","to","NavbarToggler","onClick","Collapse","isOpen","navbar","NavItem","NavLink","Component","displayName","name","Layout","children","EvalGauge","evalHeight","currentScore","nextProps","currentEval","evalScore","pct","style","height","Home","fen","fenInTextbox","squareSelected","squareClicked","squareStyles","defaultStyles","square","pieceSquare","history","pgn","test","analysisObj","depth","fetchInProgress","currentTurn","maxAnalysisInProgress","moveDisplays","pressedKeys","moveDisplaysO","arrowSquares","progress","retryMistakesBtnStyle","display","whiteMistakes","blackMistakes","onKeyDown","e","pressedKeysD","keyCode","onKeyUp","onDrop","sourceSquare","targetSquare","console","log","move","game","from","promotion","verbose","getAnalysisFromFen","finish","setCurrentTurn","onDropFinish","moveDisplaysD","turn","push","ply","length","whiteMove","whiteEval","engineEvalDisplay","whiteAnnotation","whiteColor","whiteFen","blackMove","blackEval","blackAnnotation","blackColor","blackFen","onSquareRightClick","squareStylesD","undefined","backgroundColor","onSquareClick","finalMoveFrom","finalMoveTo","testMoves","moves","i","onChangeFen","target","value","onChangePgn","onChangeDepth","handleSubmitFen","handleSubmitPgn","goMaxDepth","getDeepAnalysis","drawArrow","Chess","document","addEventListener","char","num","chars","substring","move1","move2","charToNum","tmpStyles","backgroundImage","backgroundRepeat","backgroundPosition","currSquare","numToChar","Math","abs","arrowSquaresD","event","preventDefault","loadFen","load","loadPgnIntoChessboard","load_pgn","newFen","getAnalysisFromPgn","alert","movesDisplays","previousEval","gamePos","reset","url","fetch","response","json","mistakesD","requestOptions","method","headers","body","JSON","stringify","currentFen","then","data","engineEvaluation","onDropData","nextBestMove","parseInt","Button","id","Card","CardBody","width","position","draggable","Form","FormGroup","Label","for","nextPonderMove","Input","type","onChange","color","Table","striped","hover","map","chessMove","key","wMistake","window","open","bMistake","onSubmit","rows","Puzzles","rpuzFen","rpuzCanMove","rpuzInfo","rpuzYourMove","rpuzTurn","rpuzEngineMoveDisplay","gameObj","boardOrientation","puzzleFen","searchLastName","tacticFen","origTacticFen","tacticBoardOrientation","tacticTurn","tacticPrevMove","currPuzzleObj","puzzleMovesIn","tacticCanMove","ChessboardBorder","border","searchOpeningMoves","tacticOpening","onChangeLastName","onChangeSearchOpeningMoves","onChangeTacticOpening","flipBoard","tacticFlipBoard","openAnalysisBoard","tacticOpenAnalysisBoard","tacticOnDrop","tacticGame","setTimeout","makeNextMove","resetChessboardBorder","showSolution","loadTactic","currPuzzleObjTest","pop","previousMove","loadRpuz","rpuzGame","currHistory","round","random","j","moveDesc","floor","engineMove","yourEvalDisplay","rpuzOnDrop","fen1","san","fen2","getRpuzAnalysis","getRpuz","getTactic","sloppy","pgnMoves","rpuzTestGame","rpuzTestMove","orientation","placeholder","marginBottom","padding","colSpan","whitePlayer","whiteElo","blackPlayer","blackElo","eventName","eventYear","result","Viewer","currPgn","gamePlayInProgress","transitionTime","currTimeouts","pgnObj","playGame","currTimeoutsD","makeMove","number","calculateEval","onChangeTransitionTime","handleImportPgn","endGame","clearTimeout","handleImportFile","file","getElementById","files","reader","FileReader","onload","finishImportFile","readAsText","fetchGameFromFolder","startGameAfterServerCall","catch","error","handleTalRequest","handleCapablancaRequest","handleFischerRequest","handleNezhmetdinovRequest","handleCarlsenRequest","handleGiriRequest","handleNimzoRequest","resultDisplay","class","href","LoadPuzzle","currFen","testFen","location","pathname","replace","App","Route","exact","path","component","isLocalhost","Boolean","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","baseUrl","getElementsByTagName","getAttribute","rootElement","ReactDOM","render","BrowserRouter","basename","URL","process","origin","status","get","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.3fe26536.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport './NavMenu.css';\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar() {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n //render() {\r\n // return (\r\n //
\r\n //
\r\n //
\r\n // );\r\n //}\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n ChessAnalysis\r\n \r\n \r\n
    \r\n \r\n Home\r\n \r\n \r\n Puzzles\r\n \r\n \r\n Game Viewer\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n \r\n {this.props.children}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\n\r\nclass EvalGauge extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n evalHeight: '50%',\r\n currentScore: 0\r\n };\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n var currentEval = nextProps.evalScore;\r\n if (currentEval === \"...\")\r\n return;\r\n\r\n if (this.state.currentScore !== currentEval) {\r\n var pct = \"50%\";\r\n if (currentEval >= -0.3 && currentEval <= 0.3)\r\n pct = \"50%\";\r\n else if (currentEval < 0 && currentEval > -1)\r\n pct = \"55%\";\r\n else if (currentEval > 0 && currentEval < 1)\r\n pct = \"45%\";\r\n else if (currentEval > 0)\r\n pct = \"25%\";\r\n else if (currentEval < 0)\r\n pct = \"75%\";\r\n else\r\n pct = \"0%\";\r\n\r\n this.setState({\r\n evalHeight: pct,\r\n currentScore: currentEval\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
;\r\n }\r\n}\r\n\r\nexport default EvalGauge;\r\n","import React, { Component } from 'react';\r\nimport Chessboard from 'chessboardjsx';\r\nimport Chess from \"chess.js\";\r\nimport { Form, Input, FormGroup, Button, Card, CardBody, Container, Label, Table } from 'reactstrap';\r\nimport EvalGauge from '../components/EvalGauge';\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n state = {\r\n fen: '',\r\n fenInTextbox: '',\r\n squareSelected: '',\r\n squareClicked: '',\r\n squareStyles: {},\r\n defaultStyles: {},\r\n square: '',\r\n pieceSquare: '',\r\n history: null,\r\n pgn: '',\r\n test: '',\r\n analysisObj: null,\r\n depth: 15,\r\n fetchInProgress: false,\r\n currentTurn: 'White',\r\n maxAnalysisInProgress: false,\r\n moveDisplays: [],\r\n pressedKeys: [],\r\n moveDisplaysO: {},\r\n arrowSquares: [],\r\n progress: 5,\r\n retryMistakesBtnStyle: {\r\n display: 'none'\r\n },\r\n whiteMistakes: [],\r\n blackMistakes: [],\r\n evalScore: 0\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.handleSubmitFen = this.handleSubmitFen.bind(this);\r\n this.handleSubmitPgn = this.handleSubmitPgn.bind(this);\r\n this.onChangeFen = this.onChangeFen.bind(this);\r\n this.onChangePgn = this.onChangePgn.bind(this);\r\n this.onChangeDepth = this.onChangeDepth.bind(this);\r\n this.goMaxDepth = this.goMaxDepth.bind(this);\r\n this.getDeepAnalysis = this.getDeepAnalysis.bind(this);\r\n this.onSquareRightClick = this.onSquareRightClick.bind(this);\r\n this.onKeyDown = this.onKeyDown.bind(this);\r\n this.onKeyUp = this.onKeyUp.bind(this);\r\n this.onSquareClick = this.onSquareClick.bind(this);\r\n this.drawArrow = this.drawArrow.bind(this);\r\n };\r\n\r\n\r\n componentDidMount() {\r\n this.game = new Chess();\r\n this.setState({\r\n fen: this.game.fen(),\r\n fenInTextbox: this.game.fen(),\r\n defaultStyles: this.state.squareStyles,\r\n });\r\n document.addEventListener('keydown', this.onKeyDown);\r\n document.addEventListener('keyup', this.onKeyUp);\r\n this.drawArrow('e2e4');\r\n\r\n //setInterval(() => {\r\n // this.setState(prevState => ({\r\n // progress:\r\n // (prevState.progress + Math.floor(Math.random() * 20) + 1) % 100\r\n // }));\r\n //}, 1000);\r\n }\r\n\r\n onKeyDown = function (e) {\r\n let pressedKeysD = this.state.pressedKeys;\r\n pressedKeysD[e.keyCode] = true;\r\n this.setState({ pressedKeys: pressedKeysD });\r\n }\r\n\r\n onKeyUp = function (e) {\r\n let pressedKeysD = this.state.pressedKeys;\r\n pressedKeysD[e.keyCode] = false;\r\n this.setState({ pressedKeys: pressedKeysD });\r\n\r\n }\r\n\r\n onDrop = ({ sourceSquare, targetSquare }) => {\r\n console.log(\"Source: \" + sourceSquare);\r\n console.log(\"Target: \" + targetSquare);\r\n if (this.state.fetchInProgress) { return; }\r\n\r\n let move = this.game.move({\r\n from: sourceSquare,\r\n to: targetSquare,\r\n promotion: \"q\",\r\n });\r\n if (move === null) { return; }\r\n this.setState(({ history, pieceSquare }) => ({\r\n fen: this.game.fen(),\r\n pgn: this.game.pgn(),\r\n fenInTextbox: this.game.fen(),\r\n history: this.game.history({ verbose: true })\r\n }));\r\n this.game.move(move);\r\n this.getAnalysisFromFen(this.game.fen(), {\r\n finish: true,\r\n sourceSquare: sourceSquare,\r\n targetSquare: targetSquare\r\n });\r\n this.setCurrentTurn();\r\n };\r\n\r\n onDropFinish = function (sourceSquare, targetSquare) {\r\n let moveDisplaysD = this.state.moveDisplays;\r\n if (this.game.turn() === 'b') {\r\n moveDisplaysD.push({\r\n ply: (this.state.history.length - 1) / 2,\r\n whiteMove: sourceSquare + targetSquare,\r\n whiteEval: this.state.analysisObj.engineEvalDisplay,\r\n whiteAnnotation: \"\",\r\n whiteColor: \"black\",\r\n whiteFen: this.game.fen(),\r\n });\r\n this.setState({ moveDisplays: moveDisplaysD });\r\n } else {\r\n\r\n moveDisplaysD[this.state.history.length / 2 - 1].blackMove = sourceSquare + targetSquare;\r\n moveDisplaysD[this.state.history.length / 2 - 1].blackEval = this.state.analysisObj.engineEvalDisplay;\r\n moveDisplaysD[this.state.history.length / 2 - 1].blackAnnotation = \"\";\r\n moveDisplaysD[this.state.history.length / 2 - 1].blackColor = \"black\";\r\n moveDisplaysD[this.state.history.length / 2 - 1].blackFen = this.game.fen();\r\n\r\n this.setState({ moveDisplays: moveDisplaysD });\r\n }\r\n }\r\n\r\n setCurrentTurn() {\r\n if (this.game.turn() === 'w') {\r\n this.setState({ currentTurn: 'White' });\r\n } else {\r\n this.setState({ currentTurn: 'Black' });\r\n }\r\n }\r\n\r\n onSquareRightClick = square => {\r\n console.log(square);\r\n let squareStylesD = this.state.squareStyles;\r\n if (squareStylesD[square] !== undefined) {\r\n if (squareStylesD[square].backgroundColor !== undefined) {\r\n squareStylesD[square].backgroundColor = undefined;\r\n } else if (this.state.pressedKeys[17]) {\r\n squareStylesD[square].backgroundColor = \"yellow\";\r\n } else if (this.state.pressedKeys[16] && this.state.pressedKeys[18]) {\r\n squareStylesD[square].backgroundColor = \"blue\";\r\n } else if (this.state.pressedKeys[16]) {\r\n squareStylesD[square].backgroundColor = \"#21C800\";\r\n\r\n } else if (this.state.pressedKeys[18]) {\r\n squareStylesD[square].backgroundColor = \"purple\";\r\n\r\n } else {\r\n squareStylesD[square].backgroundColor = \"red\";\r\n\r\n }\r\n } else {\r\n squareStylesD[square] = {};\r\n if (this.state.pressedKeys[17]) {\r\n squareStylesD[square].backgroundColor = \"yellow\";\r\n } else if (this.state.pressedKeys[16] && this.state.pressedKeys[18]) {\r\n squareStylesD[square].backgroundColor = \"blue\";\r\n } else if (this.state.pressedKeys[16]) {\r\n squareStylesD[square].backgroundColor = \"#21C800\";\r\n\r\n } else if (this.state.pressedKeys[18]) {\r\n squareStylesD[square].backgroundColor = \"purple\";\r\n\r\n } else {\r\n squareStylesD[square].backgroundColor = \"red\";\r\n\r\n }\r\n }\r\n this.setState({ squareStyles: squareStylesD });\r\n }\r\n\r\n charToNum(char) {\r\n if (char === 'a') { return 1; }\r\n else if (char === 'b') { return 2; }\r\n else if (char === 'c') { return 3; }\r\n else if (char === 'd') { return 4; }\r\n else if (char === 'e') { return 5; }\r\n else if (char === 'f') { return 6; }\r\n else if (char === 'g') { return 7; }\r\n else if (char === 'h') { return 8; }\r\n }\r\n\r\n numToChar(num) {\r\n if (num === 1) { return 'a'; }\r\n else if (num === 2) { return 'b'; }\r\n else if (num === 3) { return 'c'; }\r\n else if (num === 4) { return 'd'; }\r\n else if (num === 5) { return 'e'; }\r\n else if (num === 6) { return 'f'; }\r\n else if (num === 7) { return 'g'; }\r\n else if (num === 8) { return 'h'; }\r\n }\r\n\r\n\r\n drawArrow(move) {\r\n let chars = [move.substring(0, 1), move.substring(1, 2), move.substring(2, 3), move.substring(3, 4)];\r\n let move1 = move.substring(0, 2);\r\n let move2 = move.substring(2, 4);\r\n chars[0] = this.charToNum(chars[0]);\r\n chars[2] = this.charToNum(chars[2]);\r\n\r\n\r\n\r\n //ex: \"url('garrow-0.png')\"\r\n let tmpStyles = {};\r\n tmpStyles[move1] = {\r\n backgroundImage: \"\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"top\"\r\n };\r\n tmpStyles[move2] = {\r\n backgroundImage: \"\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"bottom\"\r\n };\r\n\r\n var i;\r\n\r\n //up, down, left, right\r\n if (chars[0] === chars[2]) {\r\n if (chars[3] > chars[1]) {\r\n for (i = chars[1]; i < chars[3]; i++) {\r\n let currSquare = this.numToChar(chars[0]) + i;\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowr-0.png')\";\r\n }\r\n tmpStyles[move1].backgroundImage = \"url('garrow-0.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-0.png')\";\r\n } else {\r\n for (i = chars[1]; i > chars[3]; i--) {\r\n let currSquare = this.numToChar(chars[0]) + i;\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowr-0.png')\";\r\n }\r\n tmpStyles[move1].backgroundImage = \"url('garrow-180.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-180.png')\";\r\n }\r\n }\r\n else if (chars[1] === chars[3]) {\r\n if (chars[2] > chars[0]) {\r\n for (i = chars[0]; i < chars[2]; i++) {\r\n let currSquare = this.numToChar(i) + chars[1];\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowr-90.png')\";\r\n }\r\n tmpStyles[move1].backgroundImage = \"url('garrow-90.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-90.png')\";\r\n } else {\r\n for (i = chars[0]; i > chars[2]; i--) {\r\n let currSquare = this.numToChar(i) + chars[1];\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowr-90.png')\";\r\n }\r\n tmpStyles[move1].backgroundImage = \"url('garrow-270.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-270.png')\";\r\n }\r\n }\r\n //diagonals\r\n else if (Math.abs(chars[3] - chars[1]) === Math.abs(chars[2] - chars[0])) {\r\n if (chars[3] > chars[1]) {\r\n if (chars[2] > chars[0]) {\r\n for (i = 0; i < chars[3] - chars[1]; i++) {\r\n let currSquare = this.numToChar(chars[0] + i) + (+ chars[1] + i);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowb-45.png')\";\r\n currSquare = this.numToChar(chars[0] + i + 1) + (+ chars[1] + i);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowbr-45.png')\";\r\n currSquare = this.numToChar(chars[0] + i) + (+ chars[1] + i + 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowbl-45.png')\";\r\n }\r\n tmpStyles[move1].backgroundImage = \"url('garrow-45.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-45.png')\";\r\n } else {\r\n for (i = 0; i < chars[3] - chars[1]; i++) {\r\n let currSquare = this.numToChar(chars[0] - i) + (+ chars[1] + i);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowb-135.png')\";\r\n currSquare = this.numToChar(chars[0] - i - 1) + (+ chars[1] + i);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowbl-135.png')\";\r\n currSquare = this.numToChar(chars[0] - i) + (+ chars[1] + i + 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowbr-135.png')\";\r\n }\r\n tmpStyles[move1].backgroundImage = \"url('garrow-315.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-315.png')\";\r\n }\r\n } else {\r\n if (chars[2] > chars[0]) {\r\n for (i = 0; i < chars[1] - chars[3]; i++) {\r\n let currSquare = this.numToChar(chars[0] + i) + (+ chars[1] - i);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowb-135.png')\";\r\n currSquare = this.numToChar(chars[0] + i + 1) + (+ chars[1] - i);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowbr-135.png')\";\r\n currSquare = this.numToChar(chars[0] + i) + (+ chars[1] + i - 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowbl-135.png')\";\r\n }\r\n tmpStyles[move1].backgroundImage = \"url('garrow-135.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-135.png')\";\r\n } else {\r\n for (i = 0; i < chars[1] - chars[3]; i++) {\r\n let currSquare = this.numToChar(chars[0] - i) + (+ chars[1] - i);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowb-45.png')\";\r\n currSquare = this.numToChar(chars[0] - i - 1) + (+ chars[1] - i);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowbl-45.png')\";\r\n currSquare = this.numToChar(chars[0] - i) + (+ chars[1] - i - 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowbr-45.png')\";\r\n }\r\n tmpStyles[move1].backgroundImage = \"url('garrow-225.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-225.png')\";\r\n }\r\n }\r\n }\r\n //knight moves\r\n else {\r\n if (chars[3] - chars[1] === 2) {\r\n if (chars[2] > chars[0]) {\r\n let currSquare = this.numToChar(chars[0]) + (+ chars[1] + 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkl-30.png')\";\r\n currSquare = this.numToChar(chars[0] + 1) + (+ chars[1] + 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkr-30.png')\";\r\n tmpStyles[move1].backgroundImage = \"url('garrow-30.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-30.png')\";\r\n } else {\r\n let currSquare = this.numToChar(chars[0]) + (+ chars[1] + 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkr-150.png')\";\r\n currSquare = this.numToChar(chars[0] - 1) + (+ chars[1] + 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkl-150.png')\";\r\n tmpStyles[move1].backgroundImage = \"url('garrow-330.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-330.png')\";\r\n }\r\n } else if (chars[3] - chars[1] === -2) {\r\n if (chars[2] > chars[0]) {\r\n let currSquare = this.numToChar(chars[0]) + (+ chars[1] - 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkl-150.png')\";\r\n currSquare = this.numToChar(chars[0] + 1) + (+ chars[1] - 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkr-150.png')\";\r\n tmpStyles[move1].backgroundImage = \"url('garrow-150.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-150.png')\";\r\n } else {\r\n let currSquare = this.numToChar(chars[0]) + (+ chars[1] - 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkr-30.png')\";\r\n currSquare = this.numToChar(chars[0] - 1) + (+ chars[1] - 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkl-30.png')\";\r\n tmpStyles[move1].backgroundImage = \"url('garrow-210.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-210.png')\";\r\n }\r\n } else if (chars[2] - chars[0] === 2) {\r\n if (chars[3] > chars[1]) {\r\n let currSquare = this.numToChar(chars[0] + 1) + chars[1];\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkr-60.png')\";\r\n currSquare = this.numToChar(chars[0] + 1) + (+ chars[1] + 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkl-60.png')\";\r\n tmpStyles[move1].backgroundImage = \"url('garrow-60.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-60.png')\";\r\n } else {\r\n let currSquare = this.numToChar(chars[0] + 1) + chars[1];\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkr-120.png')\";\r\n currSquare = this.numToChar(chars[0] + 1) + (+ chars[1] - 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkl-120.png')\";\r\n tmpStyles[move1].backgroundImage = \"url('garrow-120.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-120.png')\";\r\n }\r\n } else {\r\n if (chars[3] > chars[1]) {\r\n let currSquare = this.numToChar(chars[0] - 1) + chars[1];\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkl-120.png')\";\r\n currSquare = this.numToChar(chars[0] - 1) + (+ chars[1] + 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkr-120.png')\";\r\n tmpStyles[move1].backgroundImage = \"url('garrow-300.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-300.png')\";\r\n } else {\r\n let currSquare = this.numToChar(chars[0] - 1) + chars[1];\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkl-60.png')\";\r\n currSquare = this.numToChar(chars[0] - 1) + (+ chars[1] - 1);\r\n if (tmpStyles[currSquare] === undefined) { tmpStyles[currSquare] = {}; }\r\n tmpStyles[currSquare].backgroundImage = \"url('garrowkr-60.png')\";\r\n tmpStyles[move1].backgroundImage = \"url('garrow-240.png')\";\r\n tmpStyles[move2].backgroundImage = \"url('garrowe-240.png')\";\r\n }\r\n }\r\n }\r\n\r\n var arrowSquaresD = this.state.arrowSquares;\r\n arrowSquaresD.push(move1);\r\n arrowSquaresD.push(move2);\r\n this.setState({ arrowSquares: arrowSquaresD });\r\n this.setState({ squareStyles: tmpStyles });\r\n }\r\n\r\n onSquareClick = square => {\r\n let testMoves = this.game.moves({ verbose: true });\r\n var finalMoveFrom;\r\n var finalMoveTo\r\n for (var i = 0; i < testMoves.length; i++) {\r\n if (testMoves[i].to === square) {\r\n finalMoveFrom = testMoves[i].from;\r\n finalMoveTo = testMoves[i].to;\r\n }\r\n }\r\n //onDrop begin\r\n let move = this.game.move({\r\n from: finalMoveFrom,\r\n to: finalMoveTo,\r\n promotion: \"q\",\r\n });\r\n if (move === null) { return; }\r\n this.setState(({ history, pieceSquare }) => ({\r\n fen: this.game.fen(),\r\n pgn: this.game.pgn(),\r\n fenInTextbox: this.game.fen(),\r\n history: this.game.history({ verbose: true })\r\n }));\r\n this.game.move(move);\r\n this.getAnalysisFromFen(this.game.fen(), {\r\n finish: true,\r\n sourceSquare: finalMoveFrom,\r\n targetSquare: finalMoveTo\r\n });\r\n this.setCurrentTurn();\r\n //onDrop end\r\n }\r\n\r\n onChangeFen = e => {\r\n this.setState({ fenInTextbox: e.target.value });\r\n }\r\n\r\n onChangePgn = e => {\r\n this.setState({ pgn: e.target.value });\r\n }\r\n\r\n onChangeDepth = e => {\r\n this.setState({ maxAnalysisInProgress: false });\r\n this.setState({ depth: e.target.value });\r\n }\r\n\r\n handleSubmitFen(event) {\r\n event.preventDefault();\r\n this.loadFen(this.state.fenInTextbox);\r\n }\r\n\r\n loadFen(fen) {\r\n this.game.load(fen);\r\n this.setState({ fen: fen })\r\n this.setCurrentTurn();\r\n this.getAnalysisFromFen(fen);\r\n this.setState({ moveDisplays: [] });\r\n this.setState({\r\n squareStyles: {}\r\n });\r\n }\r\n\r\n handleSubmitPgn(event) {\r\n event.preventDefault();\r\n this.setState({\r\n squareStyles: {}\r\n });\r\n this.loadPgnIntoChessboard();\r\n }\r\n\r\n loadPgnIntoChessboard() {\r\n this.game.load_pgn(this.state.pgn);\r\n let newFen = this.game.fen();\r\n this.setState({\r\n fen: newFen,\r\n fenInTextbox: newFen\r\n });\r\n this.setCurrentTurn();\r\n this.getAnalysisFromPgn();\r\n }\r\n\r\n\r\n goMaxDepth(event) {\r\n event.preventDefault();\r\n if (this.state.maxAnalysisInProgress) {\r\n this.setState({ maxAnalysisInProgress: false });\r\n } else {\r\n this.setState({ maxAnalysisInProgress: true });\r\n this.getAnalysisFromFen(this.state.fen);\r\n }\r\n }\r\n\r\n async getDeepAnalysis() {\r\n if (this.state.pgn === '') {\r\n alert(\"You must enter a PGN first\");\r\n return;\r\n }\r\n this.loadPgnIntoChessboard();\r\n this.setState({\r\n squareStyles: {}\r\n });\r\n this.setState({\r\n retryMistakesBtnStyle: {\r\n display: 'none'\r\n },\r\n whiteMistakes: [],\r\n blackMistakes: [],\r\n moveDisplays: []\r\n })\r\n this.setState({ maxAnalysisInProgress: false });\r\n this.setState({ fetchInProgress: true });\r\n this.setState({ movesDisplays: [] });\r\n\r\n let history = this.game.history();\r\n let previousEval = 0.3;\r\n let currentEval = 0.3;\r\n let moves = [];\r\n let gamePos = 0;\r\n let mistakesD;\r\n this.game.reset();\r\n for (var i = 0; i < history.length; i++) {\r\n this.game.move(history[i]);\r\n var url = 'api/GetEvalFromFen?id=' + this.game.fen() + '&depth=' + this.state.depth + '&turn=' + this.game.turn();\r\n var response = await fetch(url);\r\n currentEval = await response.json();\r\n\r\n if (this.game.turn() === 'b') {\r\n moves.push({\r\n ply: gamePos,\r\n whiteMove: history[i],\r\n whiteEval: currentEval,\r\n whiteAnnotation: \"\",\r\n whiteColor: \"black\",\r\n whiteFen: this.game.fen(),\r\n blackMove: \"\",\r\n blackEval: \"\",\r\n blackAnnotation: \"\",\r\n blackColor: \"black\",\r\n blackFen: \"\",\r\n });\r\n if ((currentEval > 4 && previousEval > 4) || (currentEval < -4 && previousEval < -4)) { }\r\n else if (currentEval + 3 < previousEval) {\r\n moves[gamePos].whiteAnnotation = \"??\";\r\n moves[gamePos].whiteColor = \"red\";\r\n mistakesD = this.state.whiteMistakes;\r\n mistakesD.push(moves[gamePos - 1]);\r\n this.setState({ whiteMistakes: mistakesD });\r\n } else if (currentEval + 1.8 < previousEval) {\r\n moves[gamePos].whiteAnnotation = \"?\";\r\n moves[gamePos].whiteColor = \"orange\";\r\n mistakesD = this.state.whiteMistakes;\r\n mistakesD.push(moves[gamePos - 1]);\r\n this.setState({ whiteMistakes: mistakesD });\r\n } else if (currentEval + 0.8 < previousEval) {\r\n moves[gamePos].whiteAnnotation = \"?!\";\r\n moves[gamePos].whiteColor = \"#edd900\";\r\n }\r\n }\r\n else if (this.game.turn() === 'w') {\r\n console.log(\"Position: \" + gamePos);\r\n moves[gamePos].blackMove = history[i];\r\n moves[gamePos].blackEval = currentEval;\r\n moves[gamePos].blackFen = this.game.fen();\r\n if ((currentEval > 4 && previousEval > 4) || (currentEval < -4 && previousEval < -4)) { }\r\n else if (currentEval - 3 > previousEval) {\r\n moves[gamePos].blackAnnotation = \"??\";\r\n moves[gamePos].blackColor = \"red\";\r\n mistakesD = this.state.blackMistakes;\r\n mistakesD.push(moves[gamePos]);\r\n this.setState({ blackMistakes: mistakesD });\r\n } else if (currentEval - 2 > previousEval) {\r\n moves[gamePos].blackAnnotation = \"?\";\r\n moves[gamePos].blackColor = \"orange\";\r\n mistakesD = this.state.blackMistakes;\r\n mistakesD.push(moves[gamePos]);\r\n this.setState({ blackMistakes: mistakesD });\r\n } else if (currentEval - 0.8 > previousEval) {\r\n moves[gamePos].blackAnnotation = \"?!\";\r\n moves[gamePos].blackColor = \"#edd900\";\r\n }\r\n\r\n gamePos += 1;\r\n }\r\n previousEval = currentEval;\r\n }\r\n\r\n this.setState({\r\n moveDisplays: moves,\r\n fetchInProgress: false,\r\n retryMistakesBtnStyle: {\r\n display: 'block'\r\n }\r\n });\r\n }\r\n\r\n async getAnalysisFromPgn() {\r\n this.setState({ fetchInProgress: true });\r\n\r\n if (this.state.depth === '') {\r\n this.setState({ depth: 10 });\r\n }\r\n\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n pgn: this.state.pgn,\r\n currentFen: this.game.fen(),\r\n currentTurn: this.game.turn(),\r\n moves: this.game.history(),\r\n depth: this.state.depth\r\n })\r\n };\r\n\r\n fetch('api/GetAnalysisFromPgn', requestOptions)\r\n .then(response => response.json())\r\n .then(data => this.setState({\r\n analysisObj: data,\r\n evalScore: data.engineEvaluation,\r\n fetchInProgress: false\r\n }))\r\n }\r\n\r\n\r\n async getAnalysisFromFen(currentFen, onDropData) {\r\n this.setState({ fetchInProgress: true });\r\n if (this.state.depth === '') {\r\n this.setState({ depth: 10 });\r\n }\r\n\r\n const url = 'api/GetAnalysisFromFen?id=' + currentFen + '&depth=' + this.state.depth + '&turn=' + this.game.turn();\r\n //console.log(url);\r\n const response = await fetch(url);\r\n const data = await response.json();\r\n this.setState({\r\n analysisObj: data,\r\n evalScore: data.engineEvaluation,\r\n fetchInProgress: false\r\n });\r\n this.drawArrow(data.nextBestMove);\r\n\r\n if (this.state.maxAnalysisInProgress) {\r\n\r\n if (this.state.depth > 40) {\r\n this.setState({ maxAnalysisInProgress: false })\r\n } else {\r\n this.setState({ depth: parseInt(this.state.depth, 10) + 1 });\r\n this.getAnalysisFromFen(currentFen);\r\n }\r\n }\r\n if (onDropData !== undefined) {\r\n if (onDropData.finish) {\r\n this.onDropFinish(onDropData.sourceSquare, onDropData.targetSquare);\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n {\r\n (this.state.fetchInProgress && !this.state.maxAnalysisInProgress)\r\n ? loading...\r\n : \r\n }\r\n\r\n
\r\n {\r\n (this.state.fetchInProgress && !this.state.maxAnalysisInProgress)\r\n ? loading...\r\n : \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n \r\n\r\n {/* Table displaying all of the moves of the game/PGN */}\r\n
\r\n \r\n \r\n {this.state.moveDisplays.map(chessMove => (\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
{chessMove.ply + 1}.{chessMove.whiteMove}\r\n {chessMove.whiteAnnotation}\r\n {chessMove.whiteEval &&\r\n ({chessMove.whiteEval})\r\n }\r\n {chessMove.blackMove}\r\n {chessMove.blackAnnotation}\r\n {chessMove.blackEval &&\r\n ({chessMove.blackEval})\r\n }\r\n
\r\n
Retry White Mistakes
\r\n {this.state.whiteMistakes.map(wMistake => (\r\n \r\n ))}\r\n
Retry Black Mistakes
\r\n {this.state.blackMistakes.map(bMistake => (\r\n \r\n ))}\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport Chessboard from 'chessboardjsx';\r\nimport Chess from \"chess.js\";\r\nimport { Button, Card, CardBody, Container, Table, Input } from 'reactstrap';\r\n\r\nexport class Puzzles extends Component {\r\n static displayName = Puzzles.name;\r\n state = {\r\n pressedKeys: [],\r\n rpuzFen: '',\r\n rpuzCanMove: false,\r\n rpuzInfo: {},\r\n rpuzYourMove: '',\r\n rpuzTurn: '',\r\n rpuzEngineMoveDisplay: '',\r\n pgn: '',\r\n gameObj: {},\r\n boardOrientation: 'white',\r\n puzzleFen: '',\r\n searchLastName: '',\r\n tacticFen: '',\r\n origTacticFen: '',\r\n tacticBoardOrientation: 'white',\r\n tacticTurn: '',\r\n tacticPrevMove: '',\r\n currPuzzleObj: null,\r\n puzzleMovesIn: 0,\r\n tacticCanMove: false,\r\n ChessboardBorder: {\r\n border: \"10px solid black\"\r\n },\r\n searchOpeningMoves: '',\r\n tacticOpening: ''\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.onKeyDown = this.onKeyDown.bind(this);\r\n this.onKeyUp = this.onKeyUp.bind(this);\r\n this.getRpuz = this.getRpuz.bind(this);\r\n this.rpuzOnDrop = this.rpuzOnDrop.bind(this);\r\n this.flipBoard = this.flipBoard.bind(this);\r\n this.onChangeLastName = this.onChangeLastName.bind(this);\r\n this.openAnalysisBoard = this.openAnalysisBoard.bind(this);\r\n this.tacticFlipBoard = this.tacticFlipBoard.bind(this);\r\n this.tacticOpenAnalysisBoard = this.tacticOpenAnalysisBoard.bind(this);\r\n this.getTactic = this.getTactic.bind(this);\r\n this.loadTactic = this.loadTactic.bind(this);\r\n this.makeNextMove = this.makeNextMove.bind(this);\r\n this.resetChessboardBorder = this.resetChessboardBorder.bind(this);\r\n this.showSolution = this.showSolution.bind(this);\r\n this.onChangeSearchOpeningMoves = this.onChangeSearchOpeningMoves.bind(this);\r\n };\r\n\r\n componentDidMount() {\r\n this.rpuzGame = new Chess();\r\n this.tacticGame = new Chess();\r\n this.setState({\r\n defaultStyles: this.state.squareStyles,\r\n });\r\n document.addEventListener('keydown', this.onKeyDown);\r\n document.addEventListener('keyup', this.onKeyUp);\r\n }\r\n\r\n onChangeLastName = e => {\r\n this.setState({ searchLastName: e.target.value });\r\n }\r\n\r\n onChangeSearchOpeningMoves = e => {\r\n this.setState({ searchOpeningMoves: e.target.value });\r\n }\r\n\r\n onChangeTacticOpening = e => {\r\n this.setState({ tacticOpening: e.target.value });\r\n }\r\n\r\n onKeyDown = function (e) {\r\n let pressedKeysD = this.state.pressedKeys;\r\n pressedKeysD[e.keyCode] = true;\r\n this.setState({ pressedKeys: pressedKeysD });\r\n }\r\n\r\n onKeyUp = function (e) {\r\n let pressedKeysD = this.state.pressedKeys;\r\n pressedKeysD[e.keyCode] = false;\r\n this.setState({ pressedKeys: pressedKeysD });\r\n }\r\n\r\n flipBoard = function () {\r\n this.setState({ boardOrientation: this.state.boardOrientation === 'black' ? 'white' : 'black' });\r\n }\r\n\r\n tacticFlipBoard = function () {\r\n this.setState({ tacticBoardOrientation: this.state.tacticBoardOrientation === 'black' ? 'white' : 'black' });\r\n }\r\n\r\n openAnalysisBoard = function () {\r\n var url = \"https://lichess.org/analysis/\" + this.state.puzzleFen;\r\n window.open(url);\r\n }\r\n\r\n tacticOpenAnalysisBoard = function () {\r\n var url = \"https://lichess.org/analysis/\" + this.state.origTacticFen;\r\n window.open(url);\r\n }\r\n\r\n tacticOnDrop = ({ sourceSquare, targetSquare }) => {\r\n if (!this.state.tacticCanMove) { return;}\r\n if (this.state.currPuzzleObj.moves[this.state.puzzleMovesIn] === sourceSquare + targetSquare) {\r\n let move = this.tacticGame.move({\r\n from: sourceSquare,\r\n to: targetSquare,\r\n promotion: \"q\"\r\n });\r\n this.tacticGame.move(move);\r\n this.setState({ tacticFen: this.tacticGame.fen() });\r\n if (this.state.currPuzzleObj.moves.length - 1 === this.state.puzzleMovesIn) {\r\n this.setState({ tacticCanMove: false });\r\n this.setState({\r\n ChessboardBorder: {\r\n border: \"10px solid green\"\r\n }\r\n });\r\n } else {\r\n this.setState({ puzzleMovesIn: this.state.puzzleMovesIn + 2 });\r\n setTimeout(this.makeNextMove, 500);\r\n }\r\n } else {\r\n this.setState({\r\n ChessboardBorder: {\r\n border: \"10px solid red\"\r\n }\r\n });\r\n setTimeout(this.resetChessboardBorder, 500);\r\n }\r\n }\r\n\r\n resetChessboardBorder = function () {\r\n this.setState({\r\n ChessboardBorder: {\r\n border: \"10px solid black\"\r\n }\r\n });\r\n }\r\n\r\n showSolution = function () {\r\n if (!this.state.tacticCanMove) { return; }\r\n let move = {\r\n from: this.state.currPuzzleObj.moves[this.state.puzzleMovesIn].substring(0, 2),\r\n to: this.state.currPuzzleObj.moves[this.state.puzzleMovesIn].substring(2, 4),\r\n promotion: this.state.currPuzzleObj.moves[this.state.puzzleMovesIn].length === 5 ? this.state.currPuzzleObj.moves[this.state.puzzleMovesIn].substring(4, 5) : 'q'\r\n };\r\n this.tacticGame.move(move);\r\n this.setState({ tacticFen: this.tacticGame.fen() });\r\n if (this.state.currPuzzleObj.moves.length - 1 === this.state.puzzleMovesIn) {\r\n this.setState({ tacticCanMove: false });\r\n this.setState({\r\n ChessboardBorder: {\r\n border: \"10px solid green\"\r\n }\r\n });\r\n } else {\r\n this.setState({ puzzleMovesIn: this.state.puzzleMovesIn + 2 });\r\n setTimeout(this.makeNextMove, 1200);\r\n }\r\n \r\n }\r\n\r\n makeNextMove() {\r\n this.tacticGame.move(this.state.currPuzzleObj.moves[this.state.puzzleMovesIn - 1], { sloppy: true });\r\n this.setState({ tacticFen: this.tacticGame.fen() });\r\n }\r\n\r\n getTactic(event) {\r\n event.preventDefault();\r\n if (this.state.fetchInProgress) { return; }\r\n this.setState({\r\n currPuzzleObj: {}\r\n });\r\n fetch('api/GetTactic?Opening=' + this.state.tacticOpening)\r\n .then(response => response.json())\r\n .then(data => this.setState({\r\n currPuzzleObj: data\r\n }, this.loadTactic))\r\n\r\n }\r\n\r\n loadTactic = function () {\r\n this.setState({\r\n tacticFen: this.state.currPuzzleObj.fen,\r\n origTacticFen: this.state.currPuzzleObj.fen,\r\n puzzleMovesIn: 0,\r\n tacticCanMove: true,\r\n tacticPrevMove: \"\",\r\n ChessboardBorder: {\r\n border: \"10px solid black\"\r\n }\r\n });\r\n let currPuzzleObjTest = this.state.currPuzzleObj;\r\n if (currPuzzleObjTest.moves.length === 10) {\r\n currPuzzleObjTest.moves.pop();\r\n this.setState({ currPuzzleObj: currPuzzleObjTest });\r\n }\r\n this.tacticGame.load(this.state.currPuzzleObj.fen);\r\n this.setState({\r\n tacticTurn: this.tacticGame.turn(),\r\n tacticPrevMove: this.state.currPuzzleObj.previousMove\r\n });\r\n this.setState({ tacticBoardOrientation: this.tacticGame.turn() === 'w' ? 'white' : 'black' });\r\n }\r\n\r\n getRpuz(event) {\r\n event.preventDefault();\r\n if (this.state.fetchInProgress) { return; }\r\n this.setState({\r\n gameObj: {},\r\n rpuzYourMove: '',\r\n rpuzEngineMoveDisplay: ''\r\n })\r\n fetch('api/GetRandomPgn?PlayerName=' + this.state.searchLastName + '&Opening=' + this.state.searchOpeningMoves)\r\n .then(response => response.json())\r\n .then(data => this.setState({\r\n gameObj: data,\r\n pgn: data.pgnMoves,\r\n fetchInProgress: false\r\n }, this.loadRpuz))\r\n }\r\n\r\n loadRpuz = function () {\r\n this.rpuzGame.load_pgn(this.state.pgn);\r\n let currHistory = this.rpuzGame.history();\r\n var i = 1;\r\n if (currHistory.length > 80) { i = Math.round(Math.random() * 60) + 18; }\r\n else if (currHistory.length > 50) { i = Math.round(Math.random() * 30) + 18; }\r\n else if (currHistory.length > 20) { i = currHistory.length - (Math.round((Math.random() * 10) + 1)); }\r\n else if (currHistory.length > 2) { i = currHistory.length - 2; }\r\n this.rpuzGame.reset()\r\n for (var j = 0; j < i; j++) {\r\n this.rpuzGame.move(currHistory[j]);\r\n }\r\n\r\n let moveDesc = \"(move \" + Math.floor(i / 2) + \")\";\r\n this.setState({\r\n rpuzFen: this.rpuzGame.fen(),\r\n rpuzCanMove: true,\r\n rpuzTurn: this.rpuzGame.turn() === 'w' ? \"White \" + moveDesc : \"Black \" + moveDesc,\r\n boardOrientation: this.rpuzGame.turn() === 'w' ? \"White\" : \"Black\",\r\n puzzleFen: this.rpuzGame.fen(),\r\n rpuzInfo: {\r\n engineMove: '',\r\n engineEvalDisplay: '',\r\n yourEvalDisplay: ''\r\n },\r\n rpuzEngineMoveDisplay: ''\r\n });\r\n }\r\n\r\n rpuzOnDrop = ({ sourceSquare, targetSquare }) => {\r\n if (this.state.fetchInProgress) { return; }\r\n if (!this.state.rpuzCanMove) { return; }\r\n let fen1 = this.rpuzGame.fen();\r\n let move = this.rpuzGame.move({\r\n from: sourceSquare,\r\n to: targetSquare,\r\n promotion: \"q\"\r\n });\r\n if (move === null) { return; }\r\n this.rpuzGame.move(move);\r\n this.setState({\r\n rpuzYourMove: move.san,\r\n rpuzFen: this.rpuzGame.fen()\r\n });\r\n let fen2 = this.rpuzGame.fen();\r\n this.getRpuzAnalysis(fen1, fen2);\r\n }\r\n\r\n async getRpuzAnalysis(fen1, fen2) {\r\n this.setState({ fetchInProgress: true });\r\n this.setState({\r\n rpuzInfo: {\r\n engineMove: \"Calculating...\",\r\n engineEvalDisplay: \"Calculating...\",\r\n yourEvalDisplay: \"Calculating...\"\r\n },\r\n rpuzEngineMoveDisplay: \"Calculating...\"\r\n })\r\n\r\n const url = 'api/GetRpuzAnalysis?fen1=' + fen1 + '&fen2=' + fen2 + '&turn=' + this.rpuzGame.turn() + '&depth=26';\r\n //console.log(url);\r\n const response = await fetch(url);\r\n const data = await response.json();\r\n this.setState({\r\n rpuzInfo: data,\r\n fetchInProgress: false\r\n });\r\n var rpuzTestGame = new Chess(fen1);\r\n let rpuzTestMove = rpuzTestGame.move({\r\n from: data.engineMove.substring(0, 2),\r\n to: data.engineMove.substring(2, 4)\r\n });\r\n this.setState({ rpuzEngineMoveDisplay: rpuzTestMove.san });\r\n }\r\n\r\n goMaxDepth(event) {\r\n event.preventDefault();\r\n\r\n this.setState({ maxAnalysisInProgress: true });\r\n this.getAnalysisFromFen(this.state.fen);\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Your Choice:{this.state.rpuzYourMove}{this.state.rpuzInfo.yourEvalDisplay}
Engine's Choice:{this.state.rpuzEngineMoveDisplay}{this.state.rpuzInfo.engineEvalDisplay}
\r\n \r\n \r\n \r\n \r\n {this.state.rpuzTurn &&\r\n \r\n } : \r\n \r\n \r\n \r\n {this.state.gameObj.whitePlayer &&\r\n \r\n } : \r\n \r\n \r\n \r\n {this.state.gameObj.eventName &&\r\n \r\n } : \r\n \r\n \r\n \r\n {this.state.gameObj.result &&\r\n \r\n } : \r\n \r\n \r\n
Current Turn:{this.state.rpuzTurn}
Players:\r\n {this.state.gameObj.whitePlayer} ({this.state.gameObj.whiteElo})\r\n  vs. \r\n {this.state.gameObj.blackPlayer} ({this.state.gameObj.blackElo})\r\n
Event:{this.state.gameObj.eventName} ({this.state.gameObj.eventYear})
Result:{this.state.gameObj.result}
\r\n \r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {this.state.tacticTurn &&\r\n \r\n } : \r\n \r\n \r\n \r\n {this.state.tacticPrevMove &&\r\n \r\n } : \r\n \r\n \r\n \r\n {\r\n this.state.currPuzzleObj === null ? \"\" : this.state.currPuzzleObj.whitePlayer + \" - \" + this.state.currPuzzleObj.blackPlayer + \", \" + this.state.currPuzzleObj.eventName + \" \" + this.state.currPuzzleObj.eventYear\r\n } : \r\n \r\n \r\n
Current Turn:{this.state.tacticTurn === 'w' ? 'white' : 'black'}
Previous Move:\r\n {this.state.tacticPrevMove}\r\n
Game:
\r\n \r\n
\r\n \r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n }\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport Chessboard from 'chessboardjsx';\r\nimport Chess from \"chess.js\";\r\nimport { Button, Card, CardBody, Container, Label, Input } from 'reactstrap';\r\nimport EvalGauge from '../components/EvalGauge';\r\n\r\nexport class Viewer extends Component {\r\n static displayName = Viewer.name;\r\n state = {\r\n boardOrientation: 'white',\r\n fen: '',\r\n currPgn: '',\r\n gamePlayInProgress: false,\r\n transitionTime: 3,\r\n currTimeouts: [],\r\n pgnObj: [],\r\n evalScore: 0\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.playGame = this.playGame.bind(this);\r\n this.handleImportPgn = this.handleImportPgn.bind(this);\r\n this.makeMove = this.makeMove.bind(this);\r\n this.endGame = this.endGame.bind(this);\r\n this.flipBoard = this.flipBoard.bind(this);\r\n this.handleImportFile = this.handleImportFile.bind(this);\r\n this.finishImportFile = this.finishImportFile.bind(this);\r\n this.handleTalRequest = this.handleTalRequest.bind(this);\r\n this.handleCapablancaRequest = this.handleCapablancaRequest.bind(this);\r\n this.handleFischerRequest = this.handleFischerRequest.bind(this);\r\n this.handleNezhmetdinovRequest = this.handleNezhmetdinovRequest.bind(this);\r\n this.handleCarlsenRequest = this.handleCarlsenRequest.bind(this);\r\n this.handleGiriRequest = this.handleGiriRequest.bind(this);\r\n this.fetchGameFromFolder = this.fetchGameFromFolder.bind(this);\r\n this.handleNimzoRequest = this.handleNimzoRequest.bind(this);\r\n };\r\n\r\n componentDidMount() {\r\n this.game = new Chess();\r\n }\r\n\r\n playGame = function (pgn) {\r\n if (this.state.gamePlayInProgress) {\r\n return;\r\n }\r\n this.setState({ gamePlayInProgress: true });\r\n this.game.load_pgn(pgn);\r\n let currHistory = this.game.history();\r\n this.game.reset();\r\n this.setState({ fen: this.game.fen() });\r\n for (var i = 0; i < currHistory.length; i++) {\r\n let currTimeoutsD = this.state.currTimeouts;\r\n currTimeoutsD.push(setTimeout(this.makeMove, this.state.transitionTime * 1000 * (i + 1), currHistory[i], currHistory.length - i));\r\n this.setState({ currTimeouts: currTimeoutsD });\r\n }\r\n }\r\n\r\n makeMove = function (move, number) {\r\n this.game.move(move);\r\n this.setState({ fen: this.game.fen() });\r\n if (number === 1) {\r\n this.setState({ gamePlayInProgress: false })\r\n }\r\n this.calculateEval();\r\n }\r\n\r\n async calculateEval() {\r\n var url;\r\n if (this.state.transitionTime < 0.5) {\r\n url = 'api/GetEvalFromFen?id=' + this.game.fen() + '&depth=13&turn=' + this.game.turn();\r\n } else if (this.state.transitionTime < 3) {\r\n url = 'api/GetEvalFromFen?id=' + this.game.fen() + '&depth=17&turn=' + this.game.turn();\r\n } else if (this.state.transitionTime < 5) {\r\n url = 'api/GetEvalFromFen?id=' + this.game.fen() + '&depth=20&turn=' + this.game.turn();\r\n } else {\r\n url = 'api/GetEvalFromFen?id=' + this.game.fen() + '&depth=22&turn=' + this.game.turn();\r\n }\r\n var response = await fetch(url);\r\n var currentEval = await response.json();\r\n\r\n this.setState({\r\n evalScore: currentEval,\r\n fetchInProgress: false\r\n });\r\n }\r\n\r\n onChangePgn = e => {\r\n this.setState({ currPgn: e.target.value });\r\n }\r\n\r\n onChangeTransitionTime = e => {\r\n this.setState({ transitionTime: e.target.value });\r\n }\r\n\r\n handleImportPgn = function () {\r\n if (this.state.gamePlayInProgress) {\r\n return;\r\n }\r\n this.playGame(this.state.currPgn);\r\n }\r\n\r\n endGame = function () {\r\n this.setState({ gamePlayInProgress: false });\r\n for (var i = 0; i < this.state.currTimeouts.length; i++) {\r\n clearTimeout(this.state.currTimeouts[i]);\r\n }\r\n }\r\n\r\n handleImportFile = function () {\r\n let file = document.getElementById(\"fileToLoad\").files[0];\r\n const reader = new FileReader();\r\n reader.onload = event => this.finishImportFile(event.target.result);\r\n reader.readAsText(file);\r\n }\r\n\r\n handleTalRequest(event, ) {\r\n event.preventDefault();\r\n\r\n //This will grab a random PGN from our database\r\n // var urlToGetGame = \"api/GetRandomPgn?PlayerName=Tal\";\r\n\r\n //This will grab a random PGN from a folder of files on the server\r\n var urlToGetGame = \"api/GetGameFromFolder?lastName=Tal\";\r\n\r\n this.fetchGameFromFolder(urlToGetGame);\r\n }\r\n\r\n handleCapablancaRequest(event) {\r\n event.preventDefault();\r\n var urlToGetGame = \"api/GetGameFromFolder?lastName=Capablanca\";\r\n\r\n this.fetchGameFromFolder(urlToGetGame);\r\n }\r\n\r\n handleFischerRequest(event) {\r\n event.preventDefault();\r\n var urlToGetGame = \"api/GetGameFromFolder?lastName=Fischer\";\r\n\r\n this.fetchGameFromFolder(urlToGetGame);\r\n }\r\n\r\n handleNezhmetdinovRequest(event) {\r\n event.preventDefault();\r\n var urlToGetGame = \"api/GetGameFromFolder?lastName=Nezhmetdinov\";\r\n\r\n this.fetchGameFromFolder(urlToGetGame);\r\n }\r\n\r\n handleCarlsenRequest(event) {\r\n event.preventDefault();\r\n var urlToGetGame = \"api/GetGameFromFolder?lastName=Carlsen\";\r\n\r\n this.fetchGameFromFolder(urlToGetGame);\r\n }\r\n\r\n handleGiriRequest(event) {\r\n event.preventDefault();\r\n var urlToGetGame = \"api/GetGameFromFolder?lastName=Giri\";\r\n\r\n this.fetchGameFromFolder(urlToGetGame);\r\n }\r\n\r\n handleNimzoRequest(event) {\r\n event.preventDefault();\r\n var urlToGetGame = \"api/GetGameFromFolder?lastName=Nimzowitsch\";\r\n\r\n this.fetchGameFromFolder(urlToGetGame);\r\n }\r\n\r\n fetchGameFromFolder = function (url) {\r\n fetch(url, { method: 'GET' })\r\n .then(response => response.json())\r\n .then(data => this.startGameAfterServerCall(data))\r\n .catch((error) => { console.log(\"ERROR: \" + error); });\r\n }\r\n\r\n startGameAfterServerCall(pgn) {\r\n this.setState({ pgnObj: pgn })\r\n this.finishImportFile(pgn.pgnMoves);\r\n }\r\n\r\n finishImportFile = function (pgn) {\r\n if (this.state.gamePlayInProgress) {\r\n alert(\"Game is already in progress...\");\r\n return;\r\n }\r\n this.playGame(pgn);\r\n }\r\n\r\n flipBoard = function () {\r\n this.setState({ boardOrientation: this.state.boardOrientation === 'black' ? 'white' : 'black' });\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n\r\n {this.state.pgnObj.whitePlayer &&\r\n
\r\n
\r\n {this.state.pgnObj.whitePlayer} (W) vs. {this.state.pgnObj.blackPlayer} (B)\r\n {this.state.pgnObj.eventName &&\r\n @ {this.state.pgnObj.eventName}\r\n }\r\n {this.state.pgnObj.eventYear &&\r\n ({this.state.pgnObj.eventYear})\r\n }\r\n
\r\n {this.state.pgnObj.resultDisplay &&\r\n ... {this.state.pgnObj.resultDisplay}\r\n }\r\n
\r\n }\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
Transition Time (seconds):
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n }\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport Chessboard from 'chessboardjsx';\r\nimport Chess from \"chess.js\";\r\nimport { Button, Card, CardBody, Container, Table } from 'reactstrap';\r\n\r\nexport class LoadPuzzle extends Component {\r\n static displayName = LoadPuzzle.name;\r\n state = {\r\n pressedKeys: [],\r\n currFen: '',\r\n rpuzCanMove: true,\r\n rpuzInfo: {},\r\n rpuzYourMove: '',\r\n rpuzTurn: '',\r\n rpuzEngineMoveDisplay: '',\r\n pgn: '',\r\n gameObj: {},\r\n boardOrientation: 'white',\r\n puzzleFen: '',\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.flipBoard = this.flipBoard.bind(this);\r\n this.openAnalysisBoard = this.openAnalysisBoard.bind(this);\r\n this.onDrop = this.onDrop.bind(this);\r\n this.getRpuzAnalysis = this.getRpuzAnalysis.bind(this);\r\n };\r\n\r\n componentDidMount() {\r\n this.rpuzGame = new Chess();\r\n let param = window.location.pathname;\r\n let testFen = param.replace(/%20/g, ' ');\r\n this.rpuzGame.load(testFen.substring(12));\r\n this.setState({\r\n rpuzTurn: this.rpuzGame.turn(),\r\n currFen: testFen.substring(12),\r\n puzzleFen: testFen.substring(12)\r\n });\r\n if (this.rpuzGame.turn() === 'b') {\r\n this.flipBoard();\r\n }\r\n }\r\n\r\n\r\n flipBoard = function () {\r\n this.setState({ boardOrientation: this.state.boardOrientation === 'black' ? 'white' : 'black' });\r\n }\r\n\r\n openAnalysisBoard = function () {\r\n var url = \"https://lichess.org/analysis/\" + this.state.puzzleFen;\r\n window.open(url);\r\n }\r\n\r\n onDrop = ({ sourceSquare, targetSquare }) => {\r\n this.rpuzGame.load(this.state.currFen);\r\n if (this.state.fetchInProgress) { return; }\r\n if (!this.state.rpuzCanMove) { return; }\r\n let fen1 = this.rpuzGame.fen();\r\n let move = this.rpuzGame.move({\r\n from: sourceSquare,\r\n to: targetSquare,\r\n promotion: \"q\"\r\n });\r\n if (move === null) { return; }\r\n this.setState({ rpuzCanMove: false });\r\n this.rpuzGame.move(move);\r\n this.setState({\r\n rpuzYourMove: move.san,\r\n rpuzFen: this.rpuzGame.fen()\r\n });\r\n let fen2 = this.rpuzGame.fen();\r\n this.getRpuzAnalysis(fen1, fen2);\r\n }\r\n\r\n async getRpuzAnalysis(fen1, fen2) {\r\n this.setState({ fetchInProgress: true });\r\n this.setState({\r\n rpuzInfo: {\r\n engineMove: \"Calculating...\",\r\n engineEvalDisplay: \"Calculating...\",\r\n yourEvalDisplay: \"Calculating...\"\r\n },\r\n rpuzEngineMoveDisplay: \"Calculating...\"\r\n })\r\n\r\n const url = 'api/GetRpuzAnalysis?fen1=' + fen1 + '&fen2=' + fen2 + '&turn=' + this.rpuzGame.turn() + '&depth=25';\r\n const response = await fetch(url);\r\n const data = await response.json();\r\n this.setState({\r\n rpuzInfo: data,\r\n fetchInProgress: false\r\n });\r\n var rpuzTestGame = new Chess(fen1);\r\n let rpuzTestMove = rpuzTestGame.move({\r\n from: data.engineMove.substring(0, 2),\r\n to: data.engineMove.substring(2, 4)\r\n });\r\n this.setState({ rpuzEngineMoveDisplay: rpuzTestMove.san });\r\n this.setState({ rpuzCanMove: true });\r\n }\r\n\r\n\r\n\r\n render() {\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Your Choice:{this.state.rpuzYourMove}{this.state.rpuzInfo.yourEvalDisplay}
Engine's Choice:{this.state.rpuzEngineMoveDisplay}{this.state.rpuzInfo.engineEvalDisplay}
\r\n \r\n \r\n \r\n \r\n {this.state.rpuzTurn &&\r\n \r\n }\r\n \r\n \r\n
Current Turn:{this.state.rpuzTurn}
\r\n \r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n }\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './pages/Home';\r\nimport { Puzzles } from './pages/Puzzles';\r\nimport { Viewer } from './pages/Viewer';\r\nimport { LoadPuzzle } from './pages/LoadPuzzle';\r\n\r\nimport './custom.css'\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n render () {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.min.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n\r\n"],"sourceRoot":""}