Best JavaScript code snippet using playwright-internal
game.js
Source:game.js
1'use strict';2let gPickedPos = null;3let whitePiecesCount = 124let blackPiecesCount = 125let gPossibleMoves = []6let gIsRecursiveEating = false7let isCurrentlyEating = false8let gIsDownRight = false;9let gIsDownLeft = false;10let gIsUpRight = false;11let gIsUpLeft = false;12//rules to end game:13let gOnlyKingsMoveCounter = 014const playTurn = (destinationRow, destinationCol) => {15 console.log(gPickedPos.row + "|" + gPickedPos.col, "==>", destinationRow + "|" + destinationCol);16 if (gBoard[gPickedPos.row][gPickedPos.col].rank === "king") {//if king17 if (isEnemyPieceInRoute(destinationRow - gPickedPos.row, destinationCol - gPickedPos.col)) {18 kingEat(destinationRow, destinationCol, gPickedPos.row, gPickedPos.col)19 eatingSound.play()20 gOnlyKingsMoveCounter = 0;21 }22 else {23 gOnlyKingsMoveCounter++;24 updateScore()25 if (gOnlyKingsMoveCounter === 15) {26 endTurn()27 return28 }29 move(destinationRow, destinationCol, gPickedPos.row, gPickedPos.col)30 }31 }32 else {//if soldier33 if (Math.abs(gPickedPos.row - destinationRow) === 2 || Math.abs(gPickedPos.col - destinationCol) === 2) {34 eat(destinationRow, destinationCol, gPickedPos.row, gPickedPos.col)35 eatingSound.play()36 gOnlyKingsMoveCounter = 0;37 } else {38 move(destinationRow, destinationCol, gPickedPos.row, gPickedPos.col)39 gOnlyKingsMoveCounter = 0;40 }41 }42}43const isEnemyPieceInRoute = (rowDiff, colDiff) => {44 const row = gPickedPos.row45 const col = gPickedPos.col46 if (rowDiff > 0) {47 if (colDiff > 0) {48 //down right49 for (let i = 1; i < Math.abs(rowDiff); i++) {50 if (gBoard[row + i][col + i].isOccupied && gBoard[row + i][col + i].isMarked) return true51 }52 } else {53 //down left54 for (let i = 1; i < Math.abs(rowDiff); i++) {55 if (gBoard[row + i][col - i].isOccupied && gBoard[row + i][col - i].isMarked) return true56 }57 }58 } else {59 if (colDiff > 0) {60 //up right61 for (let i = 1; i < Math.abs(rowDiff); i++) {62 if (gBoard[row - i][col + i].isOccupied && gBoard[row - i][col + i].isMarked) return true63 }64 } else {65 //up left66 for (let i = 1; i < Math.abs(rowDiff); i++) {67 if (gBoard[row - i][col - i].isOccupied && gBoard[row - i][col - i].isMarked) return true68 }69 }70 }71 return false72}73const endTurn = () => {74 cancelPick()75 updateScore()76 countPiecesAndRank()77 if (isGameOver()) return78 gTurnCount++79 gPossibleMoves = []80 gPickedPos = null81 isWhitesTurn = !isWhitesTurn82 gIsRecursiveEating = false83 isCurrentlyEating = false84 markTurn()85 isLegalMoveLeft()86}87const move = (destinationRow, destinationCol, row, col) => {88 if (isCurrentlyEating) return89 isAbleToEat()90 gBoard[destinationRow][destinationCol] = gBoard[row][col]91 gBoard[destinationRow][destinationCol].location = { row: destinationRow, col: destinationCol }92 gBoard[row][col] = { location: { row, col }, isOccupied: false }93 movingSound.play()94 if (95 gBoard[destinationRow][destinationCol].rank === "soldier" && (96 (gBoard[destinationRow][destinationCol].isWhitePiece && gBoard[destinationRow][destinationCol].location.row === 7)97 ||98 (!gBoard[destinationRow][destinationCol].isWhitePiece && gBoard[destinationRow][destinationCol].location.row === 0)99 )100 ) {101 crownSoldier(gBoard[destinationRow][destinationCol])102 setTimeout(() => {103 promotionSound.play()104 }, 200)105 }106 renderBoard(gBoard)107 cancelPick()108 endTurn()109}110const eat = (destinationRow, destinationCol, row, col) => {111 //find out direction:112 const rowDiff = row - destinationRow//if diff < 0 we are going down113 const colDiff = col - destinationCol// if diff <0 we are going left114 gBoard[destinationRow][destinationCol] = gBoard[row][col]115 gBoard[destinationRow][destinationCol].location = { row: destinationRow, col: destinationCol }116 if (rowDiff < 0) {//turn the enemy piece to an empty cell117 if (colDiff < 0) {118 //down right119 gBoard[row + 1][col + 1].isWhitePiece ? whitePiecesCount-- : blackPiecesCount--;120 gBoard[row + 1][col + 1] = { location: { row: row + 1, col: col + 1 }, isOccupied: false, isEatingPath: false }121 } else {122 //down left123 gBoard[row + 1][col - 1].isWhitePiece ? whitePiecesCount-- : blackPiecesCount--;124 gBoard[row + 1][col - 1] = { location: { row: row + 1, col: col - 1 }, isOccupied: false, isEatingPath: false }125 }126 } else {127 if (colDiff < 0) {128 //up right129 gBoard[row - 1][col + 1].isWhitePiece ? whitePiecesCount-- : blackPiecesCount--;130 gBoard[row - 1][col + 1] = { location: { row: row - 1, col: col + 1 }, isOccupied: false, isEatingPath: false }131 } else {132 //up left133 gBoard[row - 1][col - 1].isWhitePiece ? whitePiecesCount-- : blackPiecesCount--;134 gBoard[row - 1][col - 1] = { location: { row: row - 1, col: col - 1 }, isOccupied: false, isEatingPath: false }135 }136 }137 gBoard[row][col] = { location: { row, col }, isOccupied: false }//turn the former location to an empty cell138 renderBoard(gBoard)139 // console.log("number of black pieces:", blackPiecesCount, "|", "number of white pieces:", whitePiecesCount);140 // console.log(destinationRow + 1);141 // console.log(destinationCol - 1);142 if (//checking if can continue eating by checking if theres a possible targeted enemy piece around143 (destinationRow + 1 < 8 && destinationCol + 1 < 8 && gBoard[destinationRow + 1][destinationCol + 1].isMarked && gBoard[destinationRow + 1][destinationCol + 1].isOccupied)144 ||145 (destinationRow + 1 < 8 && destinationCol - 1 >= 0 && gBoard[destinationRow + 1][destinationCol - 1].isMarked && gBoard[destinationRow + 1][destinationCol - 1].isOccupied)146 ||147 (destinationRow - 1 >= 0 && destinationCol + 1 < 8 && gBoard[destinationRow - 1][destinationCol + 1].isMarked && gBoard[destinationRow - 1][destinationCol + 1].isOccupied)148 ||149 (destinationRow - 1 >= 0 && destinationCol - 1 >= 0 && gBoard[destinationRow - 1][destinationCol - 1].isMarked && gBoard[destinationRow - 1][destinationCol - 1].isOccupied)150 ) {151 gBoard[destinationRow][destinationCol].isMarked = false152 // gBoard[destinationRow][destinationCol].isEatingPath = false153 // console.log("keep eating")154 gPickedPos = { row: destinationRow, col: destinationCol }155 gIsRecursiveEating = true156 unMarkAll()157 checkAndMarkPossibleMoves(destinationRow, destinationCol, gBoard[destinationRow][destinationCol].isWhitePiece, "soldier", true)158 isCurrentlyEating = true159 renderBoard(gBoard)160 }161 else {162 console.log("end turn!");163 cancelPick()164 endTurn()165 gBoard[destinationRow][destinationCol].isSelected = false166 if ((gBoard[destinationRow][destinationCol].isWhitePiece && gBoard[destinationRow][destinationCol].location.row === 7)167 ||168 (!gBoard[destinationRow][destinationCol].isWhitePiece && gBoard[destinationRow][destinationCol].location.row === 0)) {169 crownSoldier(gBoard[destinationRow][destinationCol])170 setTimeout(() => {171 promotionSound.play()172 }, 200)173 }174 unMarkAll()175 updateScore()176 renderBoard(gBoard)177 }178}179const kingEat = (destinationRow, destinationCol, row, col) => {180 //loop by the difference between destination and gPickedPos and unmark all the cells181 const rowDiff = row - destinationRow182 const colDiff = col - destinationCol183 if (rowDiff < 0) {//turn the enemy piece to an empty cell184 if (colDiff < 0) {185 //down right186 for (let i = 1; i < Math.abs(rowDiff); i++) {187 if (gBoard[row + i][col + i].isOccupied && gBoard[row + i][col + i].isMarked) isWhitesTurn ? blackPiecesCount-- : whitePiecesCount--188 gBoard[row + i][col + i] = { location: { row: row + i, col: col + i }, isOccupied: false, isEatingPath: false }189 }190 } else {191 //down left192 for (let i = 1; i < Math.abs(rowDiff); i++) {193 if (gBoard[row + i][col - i].isOccupied && gBoard[row + i][col - i].isMarked) isWhitesTurn ? blackPiecesCount-- : whitePiecesCount--194 gBoard[row + i][col - i] = { location: { row: row + i, col: col - i }, isOccupied: false, isEatingPath: false }195 }196 }197 } else {198 if (colDiff < 0) {199 //up right200 for (let i = 1; i < Math.abs(rowDiff); i++) {201 if (gBoard[row - i][col + i].isOccupied && gBoard[row - i][col + i].isMarked) isWhitesTurn ? blackPiecesCount-- : whitePiecesCount--202 gBoard[row - i][col + i] = { location: { row: row - i, col: col + i }, isOccupied: false, isEatingPath: false }203 }204 } else {205 //up left206 for (let i = 1; i < Math.abs(rowDiff); i++) {207 if (gBoard[row - i][col - i].isOccupied && gBoard[row - i][col - i].isMarked) isWhitesTurn ? blackPiecesCount-- : whitePiecesCount--208 gBoard[row - i][col - i] = { location: { row: row - i, col: col - i }, isOccupied: false, isEatingPath: false }209 }210 }211 }212 gBoard[destinationRow][destinationCol] = gBoard[row][col]213 gBoard[destinationRow][destinationCol].location = { row: destinationRow, col: destinationCol }214 gBoard[row][col] = { location: { row, col }, isOccupied: false }215 //check is there are other possible cells to eat216 // gIsRecursiveEating = true217 // isCurrentlyEating = true218 unMarkAll()219 checkAndMarkPossibleMoves(destinationRow, destinationCol, gBoard[destinationRow][destinationCol].isWhitePiece, "king", true)220 gPickedPos = { row: destinationRow, col: destinationCol }221 // isCurrentlyEating = false222 let isMoreToEat = false223 gBoard.forEach(row => {224 row.forEach(cell => {225 if (cell.isOccupied && cell.isMarked) isMoreToEat = true226 })227 })228 if (isMoreToEat) {229 console.log("keep eating")230 isCurrentlyEating = true231 gIsRecursiveEating = true232 updateScore()233 }234 else {235 isCurrentlyEating = false236 gIsRecursiveEating = false237 console.log("end turn!");238 cancelPick()239 endTurn()240 unMarkAll()241 gBoard[destinationRow][destinationCol].isSelected = false242 renderBoard(gBoard)243 }244}245const cellClicked = (cell) => {246 let row = +cell.dataset.pos[0]247 let col = +cell.dataset.pos[2]248 if (!gBoard[row][col].isOccupied && !gBoard[row][col].isMarked) {249 const selectedCell = document.querySelector(".selected")250 if (!!selectedCell) {251 cancelPick()252 }253 }254 if (!!gPickedPos && isLegalMove(row, col)) playTurn(row, col)255}256const pieceClicked = (piece) => {257 if (isCurrentlyEating) return258 const selectedCell = document.querySelector(".selected")259 if (!!selectedCell) {260 cancelPick()261 gPickedPos = null262 }263 let elCell = piece.parentElement264 let row = +elCell.dataset.pos[0]265 let col = +elCell.dataset.pos[2]266 if (!gBoard[row][col].isOccupied || (gBoard[row][col].isOccupied && isWhitesTurn != gBoard[row][col].isWhitePiece)) return//checking to see i cant pick an empty cell267 const isWhite = gBoard[row][col].isWhitePiece268 const rank = gBoard[row][col].rank269 gPickedPos = { row, col }270 checkAndMarkPossibleMoves(row, col, isWhite, rank)271 //cheking possible moves..272 let markedCellExists = false273 gBoard.forEach(row => {274 row.forEach(cell => {275 if (cell.isMarked) markedCellExists = true276 })277 })278 if (!markedCellExists) {279 gPickedPos = null280 return281 }282 gBoard[row][col].isSelected = true283 renderBoard(gBoard)284}285const cancelPick = (ev) => {286 if (gPickedPos === null || isCurrentlyEating) return287 if (ev && (ev.target.classList[0] === "cell" || ev.target.parentElement.classList[0] === "cell")) return;288 const selectedCells = document.querySelector(".selected")289 if (!!selectedCells) {290 gBoard.forEach(row => {291 row.forEach(cell => {292 cell.isSelected = false293 cell.isMarked = false294 cell.isEatingPath = false295 })296 })297 // selectedCells.classList.remove("selected")298 gPickedPos = null299 }300 gIsRecursiveEating = false301 renderBoard(gBoard)302}303const isLegalMove = (row, col) => {304 if (gBoard[row][col].isOccupied || !gBoard[row][col].isMarked) return false305 const rowDiff = gPickedPos.row - row306 const colDiff = gPickedPos.col - col307 if (gBoard[gPickedPos.row][gPickedPos.col].rank === "soldier") {//soldier308 if (Math.abs(rowDiff) === 1 && Math.abs(colDiff) === 1) {309 return true310 } else if (Math.abs(rowDiff) === 2 && Math.abs(colDiff) === 2) {311 if (rowDiff < 0) {//turn the enemy piece to an empty cell312 if (colDiff < 0) {313 //down right314 if (gPickedPos.row + 1 < 8 && gPickedPos.col + 1 < 8 && gBoard[gPickedPos.row + 1][gPickedPos.col + 1].isOccupied315 &&316 gBoard[gPickedPos.row + 1][gPickedPos.col + 1].isWhitePiece === isWhitesTurn) return false317 } else {318 //down left319 if (gPickedPos.row + 1 < 8 && gPickedPos.col - 1 >= 0 && gBoard[gPickedPos.row + 1][gPickedPos.col - 1].isOccupied320 &&321 gBoard[gPickedPos.row + 1][gPickedPos.col - 1].isWhitePiece === isWhitesTurn) return false322 }323 } else {324 if (colDiff < 0) {325 //up right326 if (gPickedPos.row - 1 >= 0 && gPickedPos.col + 1 < 8 && gBoard[gPickedPos.row - 1][gPickedPos.col + 1].isOccupied327 &&328 gBoard[gPickedPos.row - 1][gPickedPos.col + 1].isWhitePiece === isWhitesTurn) return false329 } else {330 //up left331 if (gPickedPos.row - 1 >= 0 && gPickedPos.col - 1 >= 0 && gBoard[gPickedPos.row - 1][gPickedPos.col - 1].isOccupied332 &&333 gBoard[gPickedPos.row - 1][gPickedPos.col - 1].isWhitePiece === isWhitesTurn) return false334 }335 }336 //eating337 return true338 } else return false339 } else {//king340 //implement king legal moves logic341 if (Math.abs(rowDiff) != Math.abs(colDiff)) return false342 if (rowDiff < 0) {//turn the enemy piece to an empty cell343 if (colDiff < 0) {344 //down right345 for (let i = 1; i < Math.abs(rowDiff); i++) {346 if (gPickedPos.row + i > 7 || gPickedPos.col + i > 8) break347 if (gBoard[gPickedPos.row + i][gPickedPos.col + i].isOccupied && gBoard[gPickedPos.row + i][gPickedPos.col + i].isWhitePiece === isWhitesTurn) return false348 }349 } else {350 //down left351 for (let i = 1; i < Math.abs(rowDiff); i++) {352 if (gPickedPos.row + i > 7 || gPickedPos.col - i < 0) break353 if (gBoard[gPickedPos.row + i][gPickedPos.col - i].isOccupied && gBoard[gPickedPos.row + i][gPickedPos.col - i].isWhitePiece === isWhitesTurn) return false354 }355 }356 } else {357 if (colDiff < 0) {358 //up right359 for (let i = 1; i < Math.abs(rowDiff); i++) {360 if (gPickedPos.row - i < 0 || gPickedPos.col + i > 7) break361 if (gBoard[gPickedPos.row - i][gPickedPos.col + i].isOccupied && gBoard[gPickedPos.row - i][gPickedPos.col + i].isWhitePiece === isWhitesTurn) return false362 }363 } else {364 //up left365 for (let i = 1; i < Math.abs(rowDiff); i++) {366 if (gPickedPos.row - i < 0 || gPickedPos.col - i < 0) break367 if (gBoard[gPickedPos.row - i][gPickedPos.col - i].isOccupied && gBoard[gPickedPos.row - i][gPickedPos.col - i].isWhitePiece === isWhitesTurn) return false368 }369 }370 }371 return true372 }373}374const checkAndMarkPossibleMoves = (row, col, isWhite, rank, isUnmarked = false) => {375 gPossibleMoves = []376 let isCellEmpty = !gBoard[row][col].isOccupied377 let isEnemyPiece = gBoard[row][col].isOccupied && (gBoard[row][col].isWhitePiece != isWhite)378 let temp = []379 let shouldMark = false380 if (rank === "king") {381 if (gIsRecursiveEating) {382 console.log("isCurrentlyEating:", isCurrentlyEating);383 //down right384 for (let i = 1; i < (8 - row) && i < (8 - col); i++) {385 if (!(row + i + 1 < 8 && col + i + 1 < 8 && !gBoard[row + i][col + i].isMarked)) break386 // if unoccupied add to tempArray387 if (!gIsDownRight && !isCorrectDirection(row, col, row + i, col + i)) break388 if (!gBoard[row + i][col + i].isOccupied) temp.push({ row: row + i, col: col + i })389 else if (gBoard[row + i][col + i].isOccupied && gBoard[row + i][col + i].isWhitePiece === isWhitesTurn) break390 else if (gBoard[row + i][col + i].isOccupied && gBoard[row + i + 1][col + i + 1].isOccupied) break391 if (392 gBoard[row + i][col + i].isOccupied393 &&394 gBoard[row + i][col + i].isWhitePiece != isWhitesTurn395 &&396 !gBoard[row + i + 1][col + i + 1].isOccupied397 &&398 !gBoard[row + i + 1][col + i + 1].isMarked) {399 shouldMark = true400 gBoard[row + i][col + i].isMarked = true401 if (!isCurrentlyEating) gBoard[row][col].isMarked = true402 temp.push({ row: row + i + 1, col: col + i + 1 })403 }404 }405 temp = [...new Set(temp)]406 if (shouldMark) temp.forEach(cell => {407 gBoard[cell.row][cell.col].isMarked = true408 // gPossibleMoves.push(cell)409 })410 temp = []411 shouldMark = false412 //down left413 for (let i = 1; i < (8 - row) && i < col + 1; i++) {414 if (!(row + i + 1 < 8 && col - i - 1 >= 0 && !gBoard[row + i][col - i].isMarked)) break415 // if unoccupied add to tempArray416 if (!gIsDownLeft && !isCorrectDirection(row, col, row + i, col - i)) break417 if (!gBoard[row + i][col - i].isOccupied) temp.push({ row: row + i, col: col - i })418 else if (gBoard[row + i][col - i].isOccupied && gBoard[row + i][col - i].isWhitePiece === isWhitesTurn) break419 else if (gBoard[row + i][col - i].isOccupied && gBoard[row + i + 1][col - i - 1].isOccupied) break420 if (421 gBoard[row + i][col - i].isOccupied422 &&423 gBoard[row + i][col - i].isWhitePiece != isWhitesTurn424 &&425 !gBoard[row - i - 1][col - i - 1].isOccupied426 &&427 !gBoard[row - i - 1][col - i - 1].isMarked) {428 shouldMark = true429 Board[row + i][col - i].isMarked = true430 temp.push({ row: row + i + 1, col: col - i - 1 })431 }432 }433 temp = [...new Set(temp)]434 if (shouldMark) temp.forEach(cell => {435 gBoard[cell.row][cell.col].isMarked = true436 // gPossibleMoves.push(cell)437 })438 temp = []439 shouldMark = false440 //up left441 for (let i = 1; i < row + 1 && i < col + 1; i++) {442 if (!(row - i - 1 >= 0 && col - i - 1 >= 0 && !gBoard[row - i][col - i].isMarked)) break443 // if unoccupied add to tempArray444 if (!gIsUpLeft && !isCorrectDirection(row, col, row - i, col - i)) break445 if (!gBoard[row - i][col - i].isOccupied) temp.push({ row: row - i, col: col - i })446 else if (gBoard[row - i][col - i].isOccupied && gBoard[row - i][col - i].isWhitePiece === isWhitesTurn) break447 else if (gBoard[row - i][col - i].isOccupied && gBoard[row - i - 1][col - i - 1].isOccupied) break448 if (449 gBoard[row - i][col - i].isOccupied450 &&451 gBoard[row - i][col - i].isWhitePiece != isWhitesTurn452 &&453 !gBoard[row - i - 1][col - i - 1].isOccupied454 &&455 !gBoard[row - i - 1][col - i - 1].isMarked) {456 shouldMark = true457 gBoard[row - i][col - i].isMarked = true458 temp.push({ row: row - i - 1, col: col - i - 1 })459 }460 }461 temp = [...new Set(temp)]462 if (shouldMark) temp.forEach(cell => {463 gBoard[cell.row][cell.col].isMarked = true464 // gPossibleMoves.push(cell)465 })466 temp = []467 shouldMark = false468 //up right469 for (let i = 1; i < row + 1 && i < (8 - col); i++) {470 if (!(row - i - 1 >= 0 && col + i + 1 < 8 && !gBoard[row - i][col + i].isMarked)) break471 // if unoccupied add to tempArray472 if (!gIsUpRight && !isCorrectDirection(row, col, row - i, col + i)) break473 if (!gBoard[row - i][col + i].isOccupied) temp.push({ row: row - i, col: col + i })474 else if (gBoard[row - i][col + i].isOccupied && gBoard[row - i][col + i].isWhitePiece === isWhitesTurn) break475 else if (gBoard[row - i][col + i].isOccupied && gBoard[row - i - 1][col + i + 1].isOccupied) break476 if (477 gBoard[row - i][col + i].isOccupied478 &&479 gBoard[row - i][col + i].isWhitePiece != isWhitesTurn480 &&481 !gBoard[row - i - 1][col + i + 1].isOccupied482 &&483 !gBoard[row - i - 1][col + i + 1].isMarked484 ) {485 shouldMark = true486 gBoard[row - i][col + i].isMarked = true487 temp.push({ row: row - i - 1, col: col + i + 1 })488 }489 }490 temp = [...new Set(temp)]491 if (shouldMark) temp.forEach(cell => {492 gBoard[cell.row][cell.col].isMarked = true493 // gPossibleMoves.push(cell)494 })495 temp = []496 shouldMark = false497 gIsDownRight = false;498 gIsDownLeft = false;499 gIsUpRight = false;500 gIsUpLeft = false;501 }502 else {503 //down right504 for (let i = 1; i < (8 - row) && i < (8 - col); i++) {505 if (gBoard[row + i][col + i].isOccupied && gBoard[row + i][col + i].isWhitePiece === isWhite) break506 else if (!gBoard[row + i][col + i].isOccupied) {507 gBoard[row + i][col + i].isMarked = true508 gPossibleMoves.push({ row: row + i, col: col + i })509 }510 else if (row + i + 1 < 8 && col + i + 1 < 8 && (gBoard[row + i][col + i].isWhitePiece != isWhite) && !gBoard[row + i + 1][col + i + 1].isOccupied) {511 gBoard[row + i + 1][col + i + 1].isMarked = true512 gBoard[row + i + 1][col + i + 1].isEatingPath = true513 gBoard[row + i][col + i].isMarked = true514 gPossibleMoves.push({ row: row + i + 1, col: col + i + 1 })515 gIsRecursiveEating = true;516 gIsDownRight = true517 } else break;518 }519 //down left520 for (let i = 1; i < (8 - row) && i < col + 1; i++) {521 if (gBoard[row + i][col - i].isOccupied && gBoard[row + i][col - i].isWhitePiece === isWhite) break522 else if (!gBoard[row + i][col - i].isOccupied) {523 gBoard[row + i][col - i].isMarked = true524 gPossibleMoves.push({ row: row + i, col: col - i })525 }526 else if (row + i + 1 < 8 && col - i - 1 >= 0 && (gBoard[row + i][col - i].isWhitePiece != isWhite) && !gBoard[row + i + 1][col - i - 1].isOccupied) {527 gBoard[row + i + 1][col - i - 1].isMarked = true528 gBoard[row + i + 1][col - i - 1].isEatingPath = true529 gBoard[row + i][col - i].isMarked = true530 gPossibleMoves.push({ row: row + i + 1, col: col - i - 1 })531 gIsRecursiveEating = true;532 gIsDownLeft = true533 } else break534 }535 //up left536 for (let i = 1; i < row + 1 && i < col + 1; i++) {537 if (gBoard[row - i][col - i].isOccupied && gBoard[row - i][col - i].isWhitePiece === isWhite) break538 else if (!gBoard[row - i][col - i].isOccupied) {539 gBoard[row - i][col - i].isMarked = true540 gPossibleMoves.push({ row: row - i, col: col - i })541 }542 else if (row - i - 1 >= 0 && col - i - 1 >= 0 && (gBoard[row - i][col - i].isWhitePiece != isWhite) && !gBoard[row - i - 1][col - i - 1].isOccupied) {543 gBoard[row - i - 1][col - i - 1].isMarked = true544 gBoard[row - i - 1][col - i - 1].isEatingPath = true545 gBoard[row - i][col - i].isMarked = true546 gPossibleMoves.push({ row: row - i - 1, col: col - i - 1 })547 gIsRecursiveEating = true;548 gIsUpLeft = true549 } else break550 }551 //up right552 for (let i = 1; i < row + 1 && i < (8 - col); i++) {553 if (gBoard[row - i][col + i].isOccupied && gBoard[row - i][col + i].isWhitePiece === isWhite) break554 else if (!gBoard[row - i][col + i].isOccupied) {555 gBoard[row - i][col + i].isMarked = true556 gPossibleMoves.push({ row: row - i, col: col + i })557 }558 else if (row - i - 1 >= 0 && col + i + 1 < 8 && (gBoard[row - i][col + i].isWhitePiece != isWhite) && !gBoard[row - i - 1][col + i + 1].isOccupied) {559 gBoard[row - i - 1][col + i + 1].isMarked = true560 gBoard[row - i - 1][col + i + 1].isEatingPath = true561 gBoard[row - i][col + i].isMarked = true562 gPossibleMoves.push({ row: row - i - 1, col: col + i + 1 })563 gIsUpRight = true564 } else break565 }566 }567 }568 else {569 if (gIsRecursiveEating) {570 if (//checking if can continue eating by checking if theres a possible targeted enemy piece around571 isUnmarked ||572 ((row + 1 < 8 && col + 1 < 8 && gBoard[row + 1][col + 1].isMarked && gBoard[row + 1][col + 1].isOccupied)573 ||574 (row + 1 < 8 && col - 1 >= 0 && gBoard[row + 1][col - 1].isMarked && gBoard[row + 1][col - 1].isOccupied)575 ||576 (row - 1 >= 0 && col + 1 < 8 && gBoard[row - 1][col + 1].isMarked && gBoard[row - 1][col + 1].isOccupied)577 ||578 (row - 1 >= 0 && col - 1 >= 0 && gBoard[row - 1][col - 1].isMarked && gBoard[row - 1][col - 1].isOccupied)579 )) {580 if (!isEnemyPiece && row - 2 >= 0 && col + 2 < 8 && gBoard[row - 1][col + 1].isOccupied && (gBoard[row - 1][col + 1].isWhitePiece != isWhite) && !gBoard[row - 2][col + 2].isOccupied && !gBoard[row - 2][col + 2].isMarked) {581 gBoard[row - 1][col + 1].isMarked = true;582 gBoard[row - 2][col + 2].isMarked = true;583 gPossibleMoves.push({ row: row - 2, col: col + 2 });584 }585 if (!isEnemyPiece && row - 2 >= 0 && col - 2 >= 0 && gBoard[row - 1][col - 1].isOccupied && (gBoard[row - 1][col - 1].isWhitePiece != isWhite) && !gBoard[row - 2][col - 2].isOccupied && !gBoard[row - 2][col - 2].isMarked) {586 gBoard[row - 1][col - 1].isMarked = true;587 gBoard[row - 2][col - 2].isMarked = true;588 gPossibleMoves.push({ row: row - 2, col: col - 2 });589 }590 if (!isEnemyPiece && row + 2 < 8 && col + 2 < 8 && gBoard[row + 1][col + 1].isOccupied && (gBoard[row + 1][col + 1].isWhitePiece != isWhite) && !gBoard[row + 2][col + 2].isOccupied && !gBoard[row + 2][col + 2].isMarked) {591 gBoard[row + 1][col + 1].isMarked = true;592 gBoard[row + 2][col + 2].isMarked = true;593 gPossibleMoves.push({ row: row + 2, col: col + 2 });594 }595 if (!isEnemyPiece && row + 2 < 8 && col - 2 >= 0 && gBoard[row + 1][col - 1].isOccupied && (gBoard[row + 1][col - 1].isWhitePiece != isWhite) && !gBoard[row + 2][col - 2].isOccupied && !gBoard[row + 2][col - 2].isMarked) {596 gBoard[row + 1][col - 1].isMarked = true;597 gBoard[row + 2][col - 2].isMarked = true;598 gPossibleMoves.push({ row: row + 2, col: col - 2 });599 }600 }601 }602 if (!gIsRecursiveEating && isWhite) {//white603 if (isWhite && !isCellEmpty && !isEnemyPiece && row + 1 < 8 && col + 1 < 8 && !gBoard[row + 1][col + 1].isOccupied) {604 gPossibleMoves.push({ row: row + 1, col: col + 1 });605 gBoard[row + 1][col + 1].isMarked = true;606 }607 if (isWhite && !isCellEmpty && !isEnemyPiece && row + 1 < 8 && col - 1 >= 0 && !gBoard[row + 1][col - 1].isOccupied) {608 gPossibleMoves.push({ row: row + 1, col: col - 1 });609 gBoard[row + 1][col - 1].isMarked = true610 }611 if (!isEnemyPiece && row + 2 < 8 && col + 2 < 8 && gBoard[row + 1][col + 1].isOccupied && (gBoard[row + 1][col + 1].isWhitePiece != isWhite) && !gBoard[row + 2][col + 2].isOccupied) {612 gBoard[row + 1][col + 1].isMarked = true;613 gBoard[row + 2][col + 2].isMarked = true;614 gPossibleMoves.push({ row: row + 2, col: col + 2 });615 gIsRecursiveEating = true616 }617 if (!isEnemyPiece && row + 2 < 8 && col - 2 >= 0 && gBoard[row + 1][col - 1].isOccupied && (gBoard[row + 1][col - 1].isWhitePiece != isWhite) && !gBoard[row + 2][col - 2].isOccupied) {618 gBoard[row + 1][col - 1].isMarked = true;619 gBoard[row + 2][col - 2].isMarked = true;620 gPossibleMoves.push({ row: row + 2, col: col - 2 });621 gIsRecursiveEating = true622 }623 }624 else if (!gIsRecursiveEating && !isWhite) {//black625 if (!isWhite && !isCellEmpty && !isEnemyPiece && row - 1 >= 0 && col + 1 < 8 && !gBoard[row - 1][col + 1].isOccupied) {626 gPossibleMoves.push({ row: row - 1, col: col + 1 });627 gBoard[row - 1][col + 1].isMarked = true;628 }629 if (!isWhite && !isCellEmpty && !isEnemyPiece && row - 1 >= 0 && col - 1 >= 0 && !gBoard[row - 1][col - 1].isOccupied) {630 gPossibleMoves.push({ row: row - 1, col: col - 1 });631 gBoard[row - 1][col - 1].isMarked = true;632 }633 if (!isEnemyPiece && row - 2 >= 0 && col + 2 < 8 && gBoard[row - 1][col + 1].isOccupied && (gBoard[row - 1][col + 1].isWhitePiece != isWhite) && !gBoard[row - 2][col + 2].isOccupied) {634 gBoard[row - 1][col + 1].isMarked = true;635 gBoard[row - 2][col + 2].isMarked = true;636 gPossibleMoves.push({ row: row - 2, col: col + 2 });637 gIsRecursiveEating = true638 }639 if (!isEnemyPiece && row - 2 >= 0 && col - 2 >= 0 && gBoard[row - 1][col - 1].isOccupied && (gBoard[row - 1][col - 1].isWhitePiece != isWhite) && !gBoard[row - 2][col - 2].isOccupied) {640 gBoard[row - 1][col - 1].isMarked = true;641 gBoard[row - 2][col - 2].isMarked = true;642 gPossibleMoves.push({ row: row - 2, col: col - 2 });643 gIsRecursiveEating = true644 }645 }646 }647 renderBoard(gBoard)648 gPossibleMoves = [...new Set(gPossibleMoves)]649 if (gIsRecursiveEating) {650 if (gBoard[row][col].rank === "king") return651 gPossibleMoves.forEach(move => {652 // if (gBoard[row][col].rank === "king") isUnmarked = true653 checkAndMarkPossibleMoves(move.row, move.col, isWhite, rank, isUnmarked)654 })655 }656}657const unMarkAll = () => {658 gBoard.forEach(row => {659 row.forEach(cell => {660 cell.isMarked = false661 })662 })663 renderBoard(gBoard)664}665const checkEatenPiecesAround = (row, col) => {666 //gPickedPos.row- row ===> if smaller than 0 we check if if right down(one square) is not occupied, then if theres any occupied+marked cells 667 const rowDiff = gPickedPos.row - row668 const colDiff = gPickedPos.col - col669 if (rowDiff < 0) {670 if (colDiff < 0) {671 for (let i = 1; i < (8 - row) && i < (8 - col); i++) {672 if (i > 1 && !gBoard[gPickedPos.row + i][gPickedPos.col + i].isOccupied) return false673 if (gBoard[gPickedPos.row + i][gPickedPos.col + i].isOccupied && gBoard[gPickedPos.row + i][gPickedPos.col + i].isMarked) return true674 }675 } else {676 for (let i = 1; i < (8 - row) && i < col + 1; i++) {677 if (gBoard[gPickedPos.row + i][gPickedPos.col - i].isOccupied && gBoard[gPickedPos.row + i][gPickedPos.col - i]) return true678 }679 }680 } else {681 if (colDiff < 0) {682 for (let i = 1; i < row + 1 && i < col + 1; i++) {683 if (i > 1 && !gBoard[gPickedPos.row - i][gPickedPos.col - i].isOccupied) return false684 if (gBoard[gPickedPos.row - i][gPickedPos.col - i].isOccupied && gBoard[gPickedPos.row - i][gPickedPos.col - i].isMarked) return true685 }686 } else {687 for (let i = 1; i < row + 1 && i < (8 - col); i++) {688 if (i > 1 && !gBoard[gPickedPos.row - i][gPickedPos.col + i].isOccupied) return false689 if (gBoard[gPickedPos.row - i][gPickedPos.col + i].isOccupied && gBoard[gPickedPos.row - i][gPickedPos.col + i].isMarked) return true690 }691 }692 }693 // if (gBoard[row][col].rank === "king") {694 //down right695 // } else {696 // return (697 // row + 1 < 8 && col + 1 < 8 && gBoard[row + 1][col + 1].isOccupied && gBoard[row + 1][col + 1].isMarked698 // ||699 // row + 1 < 8 && col - 1 >= 0 && gBoard[row + 1][col - 1].isOccupied && gBoard[row + 1][col - 1].isMarked700 // ||701 // row - 1 >= 0 && col - 1 >= 0 && gBoard[row - 1][col - 1].isOccupied && gBoard[row - 1][col - 1].isMarked702 // ||703 // row - 1 >= 0 && col + 1 < 8 && gBoard[row - 1][col + 1].isOccupied && gBoard[row - 1][col + 1].isMarked704 // )705 // }706}707const crownSoldier = (cell) => {708 cell.rank = "king"709 //play promotion sound710}711const isAbleToEat = () => {712 const cellsToBurn = []713 gBoard.forEach(row => {714 row.forEach(cell => {715 const row = cell.location.row716 const col = cell.location.col717 const isWhite = cell.isWhitePiece718 if (isWhite != isWhitesTurn) return719 if (cell.rank === "soldier") {720 if (isWhite) {721 if (row + 2 < 8 && col + 2 < 8 && gBoard[row + 1][col + 1].isOccupied && (gBoard[row + 1][col + 1].isWhitePiece != isWhite) && !gBoard[row + 2][col + 2].isOccupied) {722 cellsToBurn.push(cell)723 }724 if (row + 2 < 8 && col - 2 >= 0 && gBoard[row + 1][col - 1].isOccupied && (gBoard[row + 1][col - 1].isWhitePiece != isWhite) && !gBoard[row + 2][col - 2].isOccupied) {725 cellsToBurn.push(cell)726 }727 } else {728 if (row - 2 >= 0 && col + 2 < 8 && gBoard[row - 1][col + 1].isOccupied && (gBoard[row - 1][col + 1].isWhitePiece != isWhite) && !gBoard[row - 2][col + 2].isOccupied) {729 cellsToBurn.push(cell)730 }731 if (row - 2 >= 0 && col - 2 >= 0 && gBoard[row - 1][col - 1].isOccupied && (gBoard[row - 1][col - 1].isWhitePiece != isWhite) && !gBoard[row - 2][col - 2].isOccupied) {732 cellsToBurn.push(cell)733 }734 }735 } else {736 //down right row+ col+737 for (let i = 1; i < (8 - row) && i < (8 - col); i++) {738 if (!gBoard[row + i][col + i].isOccupied) continue739 else if (gBoard[row + i][col + i].isWhitePiece === isWhitesTurn) break740 else if (row + i + 1 < 8 && col + i + 1 < 8 &&741 gBoard[row + i][col + i].isWhitePiece != isWhitesTurn742 &&743 gBoard[row + i][col + i].isOccupied744 &&745 !gBoard[row + i + 1][col + i + 1].isOccupied) cellsToBurn.push(cell)746 else if (row + i + 1 < 8 && col + i + 1 < 8 &&747 gBoard[row + i][col + i].isOccupied748 &&749 gBoard[row + i + 1][col + i + 1].isOccupied) break750 }751 //down left row+ col-752 for (let i = 1; i < (8 - row) && i < col + 1; i++) {753 if (!gBoard[row + i][col - i].isOccupied) continue754 else if (gBoard[row + i][col - i].isWhitePiece === isWhitesTurn) break755 else if (row + i + 1 < 8 && col - i - 1 >= 0756 &&757 gBoard[row + i][col - i].isOccupied758 &&759 gBoard[row + i][col - i].isWhitePiece != isWhitesTurn760 &&761 !gBoard[row + i + 1][col - i - 1].isOccupied) cellsToBurn.push(cell)762 else if (row + i + 1 < 8 && col - i - 1 >= 0763 &&764 gBoard[row + i][col - i].isOccupied765 &&766 gBoard[row + i + 1][col - i - 1].isOccupied) break767 }768 //up left row- col-769 for (let i = 1; i < row + 1 && i < col + 1; i++) {770 if (!gBoard[row - i][col - i].isOccupied) continue771 else if (gBoard[row - i][col - i].isWhitePiece === isWhitesTurn) break772 else if (row - i - 1 >= 0 && col - i - 1 >= 0773 &&774 gBoard[row - i][col - i].isOccupied775 &&776 gBoard[row - i][col - i].isWhitePiece != isWhitesTurn777 &&778 !gBoard[row - i - 1][col - i - 1].isOccupied) cellsToBurn.push(cell)779 else if (row - i - 1 >= 0 && col - i - 1 >= 0780 &&781 gBoard[row - i][col - i].isOccupied782 &&783 gBoard[row - i - 1][col - i - 1].isOccupied) break784 }785 //up right row- col +786 for (let i = 1; i < row + 1 && i < (8 - col); i++) {787 if (!gBoard[row - i][col + i].isOccupied) continue788 else if (gBoard[row - i][col + i].isWhitePiece === isWhitesTurn) break789 else if (row - i - 1 >= 0 && col + i + 1 < 8790 &&791 gBoard[row - i][col + i].isOccupied792 &&793 gBoard[row - i][col + i].isWhitePiece != isWhitesTurn794 &&795 !gBoard[row - i - 1][col + i + 1].isOccupied) cellsToBurn.push(cell)796 else if (row - i - 1 >= 0 && col + i + 1 < 8797 &&798 gBoard[row - i][col + i].isOccupied799 &&800 gBoard[row - i - 1][col + i + 1].isOccupied) break801 }802 }803 })804 })805 if (cellsToBurn.length > 0) {806 gOnlyKingsMoveCounter = 0807 badSound.play();808 }809 cellsToBurn.forEach(cell => {810 gBoard[cell.location.row][cell.location.col].isWhitePiece ? whitePiecesCount-- : blackPiecesCount--811 gBoard[cell.location.row][cell.location.col] = { location: { row: cell.location.row, col: cell.location.col }, isOccupied: false }812 })813 cancelPick()814}815const isLegalMoveLeft = () => {816 let movesLeft = false;817 gBoard.forEach(gameRow => {818 gameRow.forEach(cell => {819 const row = cell.location.row820 const col = cell.location.col821 if (!cell.isOccupied || cell.isWhitePiece != isWhitesTurn) return822 if (cell.rank === "king" || cell.isWhitePiece) {//white or king823 //down right824 if (row + 1 < 8 && col + 1 < 8 && !gBoard[row + 1][col + 1].isOccupied) {825 movesLeft = true826 return827 }828 else if (row + 2 < 8 && col + 2 < 8 && !gBoard[row + 2][col + 2].isOccupied) {829 movesLeft = true830 return831 }832 if (row + 1 < 8 && col - 1 >= 0 && !gBoard[row + 1][col - 1].isOccupied) {833 movesLeft = true834 return835 }836 else if (row + 2 < 8 && col - 2 >= 0 && !gBoard[row + 2][col - 2].isOccupied) {837 movesLeft = true838 return839 }840 }841 if (cell.rank === "king" || !cell.isWhitePiece) {//black or king842 if (row - 1 >= 0 && col + 1 < 8 && !gBoard[row - 1][col + 1].isOccupied) {843 movesLeft = true844 return845 }846 else if (row - 2 >= 0 && col + 2 < 8 && !gBoard[row - 2][col + 2].isOccupied) {847 movesLeft = true848 return849 }850 if (row - 1 >= 0 && col - 1 >= 0 && !gBoard[row - 1][col - 1].isOccupied) {851 movesLeft = true852 return853 }854 else if (row - 2 >= 0 && col - 2 >= 0 && !gBoard[row - 2][col - 2].isOccupied) {855 movesLeft = true856 return857 }858 }859 })860 if (movesLeft) return861 })862 if (!movesLeft) {863 gameOver()864 updateScore()865 }866}867const countPiecesAndRank = () => {868 let whiteSoldierCount = 0869 let blackSoldierCount = 0870 let whiteKingCount = 0871 let blackKingCount = 0872 gBoard.forEach(row => {873 row.forEach(cell => {874 if (cell.isOccupied && cell.isWhitePiece && cell.rank === "soldier") whiteSoldierCount++875 else if (cell.isOccupied && !cell.isWhitePiece && cell.rank === "soldier") blackSoldierCount++876 else if (cell.isOccupied && cell.isWhitePiece && cell.rank === "king") whiteKingCount++877 else if (cell.isOccupied && !cell.isWhitePiece && cell.rank === "king") blackKingCount++878 })879 })880 if ((whiteKingCount === 2 && blackKingCount === 1) || blackKingCount === 2 && whiteKingCount === 1) {881 isDraw = true882 gameOver()883 updateScore()884 }885}886const isCorrectDirection = (currentRow, currentCol, row, col) => {887 console.log("currentRow: ", currentRow);888 console.log("currentCol: ", currentCol);889 const rowDiff = currentRow - row890 const colDiff = currentCol - col891 if (rowDiff < 0) {892 if (colDiff < 0) {893 //down right894 for (let i = 1; i <= Math.abs(rowDiff) && i <= Math.abs(colDiff); i++) {895 if (row - i < 0 || col - i < 0) break896 if (row - i === currentRow && col - i === currentCol) return true897 // if (gBoard[row - i][col - i].isOccupied && gBoard[row - i][col - i].isMarked && gBoard[row - i][col - i].isWhitePiece != isWhitesTurn) return true898 }899 } else {900 //down left901 for (let i = 1; i <= Math.abs(rowDiff) && i <= Math.abs(colDiff); i++) {902 if (row - i < 0 || col + i > 7) break903 console.log("row - i:", row - i);904 console.log("col + i:", col + i);905 if (row - i === currentRow && col + i === currentCol) return true906 // if (gBoard[row - i][col + i].isOccupied && gBoard[row - i][col + i].isMarked && gBoard[row - i][col + i].isWhitePiece != isWhitesTurn) return true907 }908 }909 } else {910 if (colDiff < 0) {911 //up right912 for (let i = 1; i <= Math.abs(rowDiff) && i <= Math.abs(colDiff); i++) {913 if (row + i > 7 || col - i < 0) break914 console.log("row + i === currentRow && col - i === currentCol:", row + i === currentRow && col - i === currentCol);915 if (row + i === currentRow && col - i === currentCol) return true916 // if (gBoard[row + i][col - i].isOccupied && gBoard[row + i][col - i].isMarked && gBoard[row + i][col - i].isWhitePiece != isWhitesTurn) return true917 }918 } else {919 //up left920 for (let i = 1; i <= Math.abs(rowDiff) && i <= Math.abs(colDiff); i++) {921 if (row + i > 7 || col + i > 7) break922 console.log("row + i:", row + i);923 console.log("col + i:", col + i);924 if (row + i === currentRow && col + i === currentCol) return true925 // if (gBoard[row + i][col + i].isOccupied && gBoard[row + i][col + i].isMarked && gBoard[row + i][col + i].isWhitePiece != isWhitesTurn) return true926 }927 }928 }929 return false...
747110cb83c5d9948fa42e36cd4e7f19ad369eReactDebugTool.js
Source:747110cb83c5d9948fa42e36cd4e7f19ad369eReactDebugTool.js
...147 currentTimerType = timerType;148 };149 var lastMarkTimeStamp = 0;150 var canUsePerformanceMeasure = typeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function';151 var shouldMark = function shouldMark(debugID) {152 if (!_isProfiling || !canUsePerformanceMeasure) {153 return false;154 }155 var element = ReactComponentTreeHook.getElement(debugID);156 if (element == null || typeof element !== 'object') {157 return false;158 }159 var isHostElement = typeof element.type === 'string';160 if (isHostElement) {161 return false;162 }163 return true;164 };165 var markBegin = function markBegin(debugID, markType) {166 if (!shouldMark(debugID)) {167 return;168 }169 var markName = debugID + '::' + markType;170 lastMarkTimeStamp = performanceNow();171 performance.mark(markName);172 };173 var markEnd = function markEnd(debugID, markType) {174 if (!shouldMark(debugID)) {175 return;176 }177 var markName = debugID + '::' + markType;178 var displayName = ReactComponentTreeHook.getDisplayName(debugID) || 'Unknown';179 var timeStamp = performanceNow();180 if (timeStamp - lastMarkTimeStamp > 0.1) {181 var measurementName = displayName + ' [' + markType + ']';182 performance.measure(measurementName, markName);183 }184 performance.clearMarks(markName);185 performance.clearMeasures(measurementName);186 };187 ReactDebugTool = {188 addHook: function addHook(hook) {...
index.js
Source:index.js
...189 <input190 type="text"191 name="user"192 id="user-register"193 className={shouldMark('user') ? 'errInput' : ''}194 onChange={(e) => setUser(e.target.value)}195 onBlur={(e) => handleBlur(e.target.name)}196 />197 </div>198 {shouldMark('user') && (199 <div className="errors">200 {errors['user'].map((err, i) => (201 <p className="err-msg" key={i}>202 {err}203 </p>204 ))}205 </div>206 )}207 <div className="register-wrap">208 <label htmlFor="email">email:</label>209 <input210 type="text"211 name="email"212 id="email-register"213 className={shouldMark('email') ? 'errInput' : ''}214 onChange={(e) => setEmail(e.target.value)}215 onBlur={(e) => handleBlur(e.target.name)}216 />217 </div>218 {shouldMark('email') && (219 <div className="errors">220 {errors['email'].map((err, i) => (221 <p className="err-msg" key={i}>222 {err}223 </p>224 ))}225 </div>226 )}227 <div className="register-wrap">228 <label htmlFor="password">senha:</label>229 <input230 type="password"231 name="password"232 id="password-register"233 className={shouldMark('password') ? 'errInput' : ''}234 onChange={(e) => setPassword(e.target.value)}235 onBlur={(e) => handleBlur(e.target.name)}236 />237 </div>238 {shouldMark('password') && (239 <div className="errors">240 {errors['password'].map((err, i) => (241 <p className="err-msg" key={i}>242 {err}243 </p>244 ))}245 </div>246 )}247 <div className="register-wrap">248 <label htmlFor="confirm-pass">confirmar senha:</label>249 <input250 type="password"251 name="confirmPass"252 id="confirm-pass-register"253 className={shouldMark('confirmPass') ? 'errInput' : ''}254 onChange={(e) => setConfirmPass(e.target.value)}255 onBlur={(e) => handleBlur(e.target.name)}256 />257 </div>258 {shouldMark('confirmPass') && (259 <div className="errors">260 {errors['confirmPass'].map((err, i) => (261 <p className="err-msg" key={i}>262 {err}263 </p>264 ))}265 </div>266 )}267 <button type="submit">Confirmar</button>268 </div>269 </form>270 </div>271 </div>272 </div>...
ttAPIMarking.js
Source:ttAPIMarking.js
1"use strict";23(async () => {4 await loadDatabase();56 if (!settings.pages.api.marking) return;78 try {9 markSelections();10 markResponses();11 } catch (e) {12 console.error(e);13 }1415 function markSelections() {16 for (const field of document.findAll(".panel-body > p[class*='_fields']")) {17 const type = getSection(field.classList[0].substring(0, 1));1819 new MutationObserver((mutations, observer) => {20 observer.disconnect();2122 toSpan(field);2324 for (const selection of API_SELECTIONS[type]) {25 const span = field.find(`.selection[data-selection="${selection}"]`);26 if (!span) continue;2728 span.classList.add("used");29 }30 }).observe(field, { childList: true });31 }3233 function toSpan(field) {34 if (field.classList.contains("tt-modified")) return;3536 field.classList.add("tt-modified");3738 const selections = field.textContent39 .split(": ")40 .slice(1)41 .join(": ")42 .split(",")43 .map((selection) => selection.trim());4445 const small = field.firstElementChild;4647 small.innerHTML = "";48 small.appendChild(document.newElement({ type: "strong", text: "Available fields: " }));4950 for (const selection of selections) {51 small.appendChild(document.newElement({ type: "span", text: selection, class: "selection", dataset: { selection } }));5253 if (selections.indexOf(selection) !== selections.length - 1) {54 small.appendChild(document.createTextNode(", "));55 }56 }57 }58 }5960 function markResponses() {61 for (const result of document.findAll(".panel-body > div[class*='_result']")) {62 const type = getSection(result.classList[0].substring(0, 1));6364 new MutationObserver(() => {65 const responseElement = result.firstElementChild;6667 const originalPre = responseElement.find("pre");68 originalPre.classList.add("original");6970 const modifiedPre = document.newElement({ type: "pre", class: "modified active" });71 responseElement.insertBefore(modifiedPre, originalPre);7273 try {74 populateResponse();75 } catch (error) {76 modifiedPre.appendChild(document.createTextNode("ERROR occurred!"));77 console.error(error);78 }79 createTabs();8081 function populateResponse() {82 const response = JSON.parse(originalPre.textContent);8384 modifiedPre.appendChild(document.newElement({ type: "span", text: "{" }));85 modifiedPre.appendChild(document.newElement("br"));86 loadResponse(response, API_USAGE[type], 1);87 modifiedPre.appendChild(document.newElement({ type: "span", text: "}" }));8889 function loadResponse(response, marking, indent) {90 for (const [key, value] of Object.entries(response)) {91 if (typeof value === "object") {92 if (Array.isArray(value)) {93 modifiedPre.appendChild(94 document.newElement({ type: "span", class: key in marking ? "used" : "", text: `${getIndent(indent)}"${key}": [` })95 );96 modifiedPre.appendChild(document.newElement("br"));9798 for (const item of value) {99 if (typeof item === "object") {100 if (Array.isArray(item)) {101 continue;102 } else if (item === null) {103 displayValue(key, null, indent, marking);104 } else {105 const toMark = marking === true || marking[key] === true || (key in marking ? "*" in marking[key] : false);106 const _marking = marking === true || marking[key] === true || (key in marking ? marking[key]["*"] || {} : {});107108 modifiedPre.appendChild(109 document.newElement({ type: "span", class: toMark ? "used" : "", text: `${getIndent(indent + 1)}{` })110 );111 modifiedPre.appendChild(document.newElement("br"));112 loadResponse(item, _marking || {}, indent + 2);113 modifiedPre.appendChild(114 document.newElement({ type: "span", class: toMark ? "used" : "", text: `${getIndent(indent + 1)}},` })115 );116 }117 } else {118 displayValue(false, item, indent + 1, marking[key]);119 }120 modifiedPre.appendChild(document.newElement("br"));121 }122123 modifiedPre.appendChild(124 document.newElement({ type: "span", class: key in marking ? "used" : "", text: `${getIndent(indent)}],` })125 );126 } else if (value === null) {127 displayValue(key, null, indent, marking);128 } else {129 const toMark = marking === true || key in marking || "*" in marking;130131 modifiedPre.appendChild(132 document.newElement({ type: "span", class: toMark ? "used" : "", text: `${getIndent(indent)}"${key}": {` })133 );134 modifiedPre.appendChild(document.newElement("br"));135 loadResponse(value, marking[key] || marking["*"] || {}, indent + 1);136 modifiedPre.appendChild(document.newElement({ type: "span", class: toMark ? "used" : "", text: `${getIndent(indent)}},` }));137 }138 } else {139 displayValue(key, value, indent, marking);140 }141 modifiedPre.appendChild(document.newElement("br"));142 }143144 function displayValue(key, value, indent, marking) {145 const marks = typeof value === "string";146147 if (typeof value === "object") value = String(value);148149 let display, shouldMark;150 if (key) {151 display = document.newElement({ type: "span", text: `${getIndent(indent)}"${key}": ${marks ? `"${value}"` : value},` });152 shouldMark = marking === true || key in marking || "*" in marking;153 } else {154 display = document.newElement({ type: "span", text: `${getIndent(indent)}${marks ? `"${value}"` : value},` });155 shouldMark = marking;156 }157 if (shouldMark) display.classList.add("used");158 modifiedPre.appendChild(display);159 }160 }161 }162163 function createTabs() {164 const original = document.newElement({ type: "div", class: "response-tab", text: "Original" });165 const modified = document.newElement({ type: "div", class: "response-tab active", text: "Modified" });166167 original.addEventListener("click", () => {168 [original, originalPre].forEach((x) => x.classList.add("active"));169 [modified, modifiedPre].forEach((x) => x.classList.remove("active"));170 });171 modified.addEventListener("click", () => {172 [modified, modifiedPre].forEach((x) => x.classList.add("active"));173 [original, originalPre].forEach((x) => x.classList.remove("active"));174 });175176 responseElement.insertBefore(document.newElement({ type: "div", class: "response-tabs", children: [original, modified] }), modifiedPre);177 }178 }).observe(result, { childList: true });179 }180181 function getIndent(level) {182 let indent = "";183184 for (let i = 0; i < level; i++) {185 indent += " ";186 }187188 return indent;189 }190 }191192 function getSection(char) {193 switch (char) {194 case "u":195 return "user";196 case "p":197 return "properties";198 case "f":199 return "faction";200 case "c":201 return "company";202 case "i":203 return "item_market";204 case "t":205 return "torn";206 default:207 return "user";208 }209 }
...
tileService.js
Source:tileService.js
1import { Minesweeper, COORDS } from '../../../lib/minesweeper'2import { COLORS } from '../scenes/UI'3export class TileService {4 constructor(scene) {5 this.scene = scene6 this.uiScene = scene.scene.get('UI')7 if (window.room) {8 this.sweeper = new Minesweeper(window.room.state.toJSON().seed)9 } else {10 this.sweeper = new Minesweeper(Date.now().toString())11 }12 this.players = []13 }14 init = () => {15 this.lastCoords = {}16 this.textGroup = this.loadText()17 this.cursorGroup = this.loadCursors()18 this.chunks = this.loadChunks()19 this.tiles = this.chunks.map((c) => c.tiles.getChildren()).flat()20 this.update(true)21 }22 sync = (state) => {23 this.sweeper.state = state.tiles24 this.players = state.players25 this.update(true)26 this.scene.registry.set(27 'scores',28 this.players.map((p) => ({29 name: p.name,30 score: p.score,31 color: COLORS[p.index],32 })),33 )34 }35 loadChunks = () =>36 COORDS.map(([x, y]) => {37 const tiles = this.scene.add.group()38 for (let x = 0; x < CHUNK_SIZE; x++) {39 for (let y = 0; y < CHUNK_SIZE; y++) {40 const tile = this.scene.add.sprite(0, 0, 'tiles').setOrigin(0)41 tiles.add(tile)42 tile._cX = x43 tile._cY = y44 tile45 .setInteractive()46 .on('pointerover', (p) => {47 this.uiScene.cursorText.setText(`${tile._x},${tile._y}`)48 if (!this.isRevealable(tile)) return49 if (p.leftButtonDown()) {50 tile.setFrame(0)51 }52 })53 .on('pointerdown', (p) => {54 if (!this.isRevealable(tile) || p.rightButtonDown()) return55 tile.setFrame(0)56 this.scene.registry.set('face', 1)57 })58 .on('pointerout', (p) => {59 if (!this.isRevealable(tile)) return60 if (p.leftButtonDown()) {61 tile.setFrame(9)62 }63 })64 .on('pointerup', (p) => {65 if (!this.isRevealable(tile) && !p.rightButtonReleased()) return66 this.scene.registry.set('face', 0)67 this.onClickTile(tile, p.rightButtonReleased())68 })69 }70 }71 return { x, y, tiles }72 })73 update = (force) => {74 const { scrollX, scrollY } = this.scene.cameras.main75 const coords = getChunkCoords(scrollX, scrollY)76 if (77 !force &&78 this.lastCoords.x === coords.x &&79 this.lastCoords.y === coords.y80 )81 return82 this.lastCoords = coords83 this.chunks.forEach((chunk, i) => {84 chunk.x = COORDS[i][0] + coords.x85 chunk.y = COORDS[i][1] + coords.y86 const { width, height } = this.scene.cameras.main87 const yoffset = height / 2 - (TILE_SIZE * CHUNK_SIZE) / 288 const xoffset = width / 2 - (TILE_SIZE * CHUNK_SIZE) / 289 chunk.tiles.getChildren().forEach((tile) => {90 tile._x = tile._cX + chunk.x * CHUNK_SIZE91 tile._y = tile._cY + chunk.y * CHUNK_SIZE92 tile.x = tile._x * TILE_SIZE + xoffset93 tile.y = tile._y * TILE_SIZE + yoffset94 const frame = this.sweeper.getTileState(tile._x, tile._y)95 tile.setFrame(frame)96 if (frame === 10 || frame === 11) {97 const matchingPlayer = this.players.find((p) =>98 p.tiles.find(({ x, y }) => tile._x === x && tile._y === y),99 )100 tile.setTint(101 Phaser.Display.Color.HexStringToColor(102 COLORS[matchingPlayer?.index] || '#fff',103 ).color,104 )105 } else {106 tile.clearTint()107 }108 })109 })110 }111 loadText = () => {112 const group = this.scene.add.group({113 createCallback: (text) =>114 text115 .setFontFamily('Arial')116 .setFontSize(24)117 .setOrigin(0)118 .setStroke('#000', 4),119 })120 group.createMultiple({121 classType: Phaser.GameObjects.Text,122 key: ' ',123 visible: false,124 active: false,125 repeat: 20,126 max: 20,127 })128 return group129 }130 loadCursors = () => {131 this.cursors = {}132 this.cursorTweens = {}133 const group = this.scene.add.group()134 group.createMultiple({135 key: 'cursor',136 visible: false,137 active: false,138 repeat: 9,139 max: 9,140 })141 return group142 }143 updateCursor = (playerId, index, x, y) => {144 if (!this.uiScene.player?.id) return145 this.cursorGroup.getChildren().forEach((c) => c.setVisible(false))146 let cursor = this.cursors[playerId]147 if (!cursor) {148 cursor = this.cursorGroup.get()149 cursor150 .setVisible(true)151 .setActive(true)152 .setScale(2)153 .setOrigin(0, 0)154 .setDepth(11)155 cursor.setTint(156 Phaser.Display.Color.HexStringToColor(COLORS[index] || '#fff').color,157 )158 this.cursors[playerId] = cursor159 }160 cursor.setVisible(true)161 this.cursorTweens[playerId]?.remove()162 this.cursorTweens[playerId] = this.scene.tweens.add({163 targets: cursor,164 x: x,165 y: y,166 duration: 250,167 })168 }169 onClickTile = (tile, shouldMark) => {170 const frame = this.sweeper.getTileState(tile._x, tile._y)171 if (frame !== 9) return172 const isMine = this.sweeper.getIsMine(tile._x, tile._y)173 if ((isMine && !shouldMark) || (!isMine && shouldMark))174 this.scene.cameras.main.shake(250, 0.025)175 const { _x: x, _y: y } = tile176 const value = this.sweeper.getScore(x, y, shouldMark)177 this.scene.registry.set('face', value > 0 ? 2 : 3)178 if (window.room) {179 window.room.send('Move', { x, y, shouldMark })180 return181 }182 this.showScoreText(tile.x, tile.y, value)183 this.scene.registry.set('score', (s) => Math.max(0, s + value))184 if (shouldMark) {185 this.sweeper.markTile(x, y)186 } else {187 this.sweeper.revealTile(x, y)188 }189 this.tiles.forEach((sprite) =>190 sprite.setFrame(this.sweeper.getTileState(sprite._x, sprite._y)),191 )192 }193 onMove = (index, x, y, mark) => {194 const tile = this.tiles.find((t) => t._x === x && t._y === y)195 const value = this.sweeper.getScore(x, y, mark)196 this.showScoreText(tile.x, tile.y, value, COLORS[index])197 }198 showScoreText = (x, y, value, color = '#ffffff') => {199 const text = this.textGroup.get()200 text201 .setPosition(x, y)202 .setAlpha(1)203 .setActive(true)204 .setVisible(true)205 .setDepth(10)206 .setText(`${value > 0 ? '+' : '-'}${Math.abs(value)}`)207 .setColor(color)208 this.scene.tweens209 .createTimeline()210 .add({ targets: text, y: y - 10, duration: 800 })211 .add({212 targets: text,213 y: y - 15,214 alpha: 0,215 duration: 400,216 onComplete: () => text.setActive(false).setVisible(false),217 })218 .play()219 }220 isRevealable = (tile) => this.sweeper.getTileState(tile._x, tile._y) === 9221}222const TILE_SIZE = 32223const CHUNK_SIZE = 18224const getChunkCoords = (x, y) => ({ x: getChunkCoord(x), y: getChunkCoord(y) })225const getChunkCoord = (n) =>226 (CHUNK_SIZE * TILE_SIZE * Math.round(n / (CHUNK_SIZE * TILE_SIZE))) /227 CHUNK_SIZE /...
day14.js
Source:day14.js
...101 regionGrid[y][x] = name;102 neigbors(x, y)103 .filter(function (_a) {104 var newX = _a[0], newY = _a[1];105 return shouldMark(regionGrid[newY][newX]);106 })107 .forEach(function (_a) {108 var newX = _a[0], newY = _a[1];109 return markRegion(name, newX, newY);110 });111}112var region = 0;113for (var y = 0; y < regionGrid.length; y++) {114 for (var x = 0; x < regionGrid[y].length; x++) {115 if (shouldMark(regionGrid[y][x])) {116 region++;117 markRegion(region, x, y);118 }119 }120}...
player.js
Source:player.js
1import React, {useEffect, useState} from "react";2import {Button, Card, OverlayTrigger} from "react-bootstrap";3import {useStoreState} from "easy-peasy";4import {timeMin} from "../../utils/time";5import {useRegisterCmd} from "../ws/ws";6import Tooltip from "react-bootstrap/Tooltip";7export function Player(props) {8 const [time, setTime] = useState("00:00")9 // top or bottom10 const posish = props.posish;11 const {mode, browseIndex, gameTurn, browseTurn, lastMoveTimestamp, history, result,12 orientation, myColor, opponentOnline} = useStoreState(state => state.game)13 const {name, elo, serverTime} = useStoreState(state => state.game[posish])14 const currentBrowseMove = (mode === 'analysis') && ( posish === browseTurn ) && (browseIndex !== 0) && ((browseIndex !== history.length))15 const shouldTick = posish === gameTurn && !result16 const shouldMark = shouldTick || currentBrowseMove17 const isOpponent = orientation === myColor && posish === "top" || orientation !== myColor && posish === "bottom"18 const online = !isOpponent || opponentOnline19 //console.log("player " + posish + " opponent = " + isOpponent + " online = " + online)20 // timer21 useEffect(() => {22 if (shouldTick) {23 const interval = setInterval(() => {24 const elapsed = Date.now() - lastMoveTimestamp25 const clock = serverTime - elapsed26 setTime(timeMin(clock > 0 ? clock : 0))27 }, 100)28 return () => clearInterval(interval)29 } else {30 if (serverTime !== undefined)31 setTime(timeMin(serverTime))32 }33 }, [gameTurn, lastMoveTimestamp, serverTime, posish, result])34 return (35 <Card>36 <Card.Body>37 <div className="d-flex justify-content-between">38 <span className="mr-2" role="img">39 <OverlayTrigger placement="bottom" overlay={40 <Tooltip>41 {online ? "Online" : "Disconnected"}42 </Tooltip>43 }>44 <a className={"btn badge badge-pill " + (online ? "badge-success" : "badge-secondary")}> </a>45 </OverlayTrigger>46 <span className="ml-2" role="user">{name}</span>47 <span className="ml-2" role="img" aria-label="score">ð48 <span className="ml-2" role="value">{elo}</span>49 </span>50 </span>51 <span className={shouldMark ? "text-warning ml-2" : "ml-2" } role="img" aria-label="clock">{shouldMark ? 'â' : ''}52 <span className="ml-2 text-monospace" role="time">{time}</span>53 </span>54 </div>55 </Card.Body>56 </Card>57 )...
minesweeper.js
Source:minesweeper.js
1import md5 from 'md5'2const FLOOD_DIST = 203const MINE_RATE = 84export class Minesweeper {5 constructor(seed = 'seed') {6 this.seed = seed7 this.state = {}8 this.markTile = (x, y) => {9 const tileState = this.getTileState(x, y)10 if (![9, 11].includes(tileState)) return11 const markFrame = tileState === 9 ? 11 : 912 this.setTileState(x, y, markFrame)13 }14 this.revealTile = (x, y) => {15 const frame = this.getIsMine(x, y) ? 10 : this.getMineCount(x, y)16 this.setTileState(x, y, frame)17 if (frame === 0) this.floodFill(x, y)18 }19 this.getIsMine = (x, y) =>20 intHash(`${this.seed}-${x}-${y}`) % MINE_RATE === 021 this.getTileState = (x, y) =>22 typeof this.state[`${x}:${y}`] === 'number' ? this.state[`${x}:${y}`] : 923 // TODO: doesn't fill diagonally24 this.floodFill = (_x, _y) => {25 let stack = [[_x, _y]]26 while (stack.length) {27 let [x, y] = stack.pop()28 while (y >= _y - FLOOD_DIST && this.hasHiddenAdj(x, y)) {29 y -= 130 }31 y += 132 while (y <= _y + FLOOD_DIST && this.hasHiddenAdj(x, y)) {33 this.revealAdj(x, y)34 if (x > _x - FLOOD_DIST) stack.push([x - 1, y])35 if (x < _x + FLOOD_DIST) stack.push([x + 1, y])36 y += 137 }38 }39 }40 this.getScore = (x, y, shouldMark) => {41 const isMine = this.getIsMine(x, y)42 const mineCount = this.getMineCount(x, y)43 if (shouldMark) {44 return isMine ? 1 : -145 } else {46 return isMine ? -10 : mineCount === 0 ? 3 : 147 }48 }49 this.hasHiddenAdj = (x, y) =>50 this.getFrame(x, y) === 0 &&51 NCOORDS.some(([i, j]) =>52 [9, 11].includes(this.getTileState(x + i, y + j)),53 )54 this.revealAdj = (x, y) =>55 COORDS.forEach(([i, j]) =>56 this.setTileState(x + i, y + j, this.getFrame(x + i, y + j)),57 )58 this.getMineCount = (x, y) =>59 NCOORDS.reduce(60 (n, [i, j]) => (this.getIsMine(x + i, y + j) ? n + 1 : n),61 0,62 )63 this.setTileState = (x, y, frame) => {64 this.state[`${x}:${y}`] = frame65 }66 this.getFrame = (x, y) =>67 this.getIsMine(x, y) ? 10 : this.getMineCount(x, y)68 }69}70const intHash = (str) =>71 md5(str)72 .split('')73 .reduce((n, c) => (n * 31 * c.charCodeAt(0)) % 982451653, 7)74// prettier-ignore75export const NCOORDS = [[-1,-1],[0,-1],[1,-1],[-1,0],[1,0],[-1,1],[0,1],[1,1]]...
Using AI Code Generation
1const { chromium } = require('playwright');2const { shouldMark } = require('playwright/lib/server/supplements/recorder/recorderSupplement');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.click('text=Google apps');8 await page.click('text=Maps');9 console.log(shouldMark(page, 'text=Google apps'));10 console.log(shouldMark(page, 'text=Maps'));11 console.log(shouldMark(page, 'text=News'));12 await browser.close();13})();
Using AI Code Generation
1const { shouldMark } = require('playwright/lib/server/trace/recorder');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const shouldMarkResult = shouldMark(page, 'foo');8 console.log(shouldMarkResult);9 await browser.close();10})();11const { chromium } = require('playwright');12(async () => {13 const browser = await chromium.launch();14 const context = await browser.newContext();15 const page = await context.newPage();16 const shouldMarkResult = page.shouldMark('foo');17 console.log(shouldMarkResult);18 await browser.close();19})();20const { chromium } = require('playwright');21(async () => {22 const browser = await chromium.launch();23 const context = await browser.newContext();24 const page = await context.newPage();
Using AI Code Generation
1const { shouldMark } = require('playwright/lib/server/frames');2const { Page, Frame } = require('playwright/lib/server/chromium/crPage');3const { Page } = require('playwright/lib/server/chromium/crPage');4const { Frame } = require('playwright/lib/server/chromium/crPage');5const { Frame, Page } = require('playwright/lib/server/chromium/crPage');6const { Frame, Page } = require('playwright/lib/server/chromium/crPage');7const { Frame, Page } = require('playwright/lib/server/chromium/crPage');8const { Frame } = require('playwright/lib/server/chromium/crPage');9const { Page } = require('playwright/lib/server/chromium/crPage');10const { Frame } = require('playwright/lib/server/chromium/crPage');11const { Page } = require('playwright/lib/server/chromium/crPage');12const { Frame } = require('playwright/lib/server/chromium/crPage');13const { Page } = require('playwright/lib/server/chromium/crPage');14const { Frame, Page } = require('playwright/lib/server/chromium/crPage');15const { Frame, Page } = require('playwright/lib/server/chromium/crPage');16const { Frame } = require('playwright/lib/server/chromium/crPage');17const { Page } = require('playwright/lib/server/chromium/crPage');18const { Frame, Page } = require('playwright/lib/server/chromium/crPage');19const { Frame, Page } = require('playwright/lib/server/chromium/crPage');20const { Frame } = require('playwright/lib/server/chromium/crPage');21const { Page } = require('playwright/lib/server/chromium/crPage');22const { Frame, Page } = require('playwright/lib/server/chromium/crPage');23const { Frame, Page } = require('playwright/lib/server/chromium/crPage');24const { Frame } = require('playwright/lib/server/chromium/crPage');25const { Page } = require('playwright/lib/server/chromium/crPage');26const { Frame, Page } = require('playwright/lib/server/chromium/crPage');27const { Frame, Page } = require('playwright/lib/server/chromium/crPage');28const { Frame } = require('playwright/lib/server/chromium/crPage
Using AI Code Generation
1const { shouldMark } = require('playwright/lib/internal/trace/recorder');2const { Page } = require('playwright/lib/server/page');3const { Frame } = require('playwright/lib/server/frame');4const pageProto = Page.prototype;5const frameProto = Frame.prototype;6pageProto._addInitScript = function (source) {7 if (!shouldMark(this._page._browserContext._browser._options)) {8 return;9 }10 return this._page._addInitScript(source);11};12frameProto._addInitScript = function (source) {13 if (!shouldMark(this._page._browserContext._browser._options)) {14 return;15 }16 return this._frame._addInitScript(source);17};18pageProto._addInitScript = function (source) {19 if (!shouldMark(this._page._browserContext._browser._options)) {20 return;21 }22 return this._page._addInitScript(source);23};24frameProto._addInitScript = function (source) {25 if (!shouldMark(this._page._browserContext._browser._options)) {26 return;27 }28 return this._frame._addInitScript(source);29};30pageProto._addInitScript = function (source) {31 if (!shouldMark(this._page._browserContext._browser._options)) {32 return;33 }34 return this._page._addInitScript(source);35};36frameProto._addInitScript = function (source) {37 if (!shouldMark(this._page._browserContext._browser._options)) {38 return;39 }40 return this._frame._addInitScript(source);41};42pageProto._addInitScript = function (source) {43 if (!shouldMark(this._page._browserContext._browser._options)) {44 return;45 }46 return this._page._addInitScript(source);47};48frameProto._addInitScript = function (source) {49 if (!shouldMark(this._page._browserContext._browser._options)) {50 return;51 }
Using AI Code Generation
1const { shouldMark } = require('playwright/lib/trace/recorder/recorderApp');2const { Page } = require('playwright/lib/server/page');3const page = new Page();4const action = {5};6const result = shouldMark(page, action);
Using AI Code Generation
1const { shouldMark } = require('playwright/lib/server/trace/recorder');2const traceEvent = { name: 'Tracing.dataCollected', args: { name: 'EventName', cat: 'devtools.timeline' } };3console.log(shouldMark(traceEvent));4const { shouldMark } = require('playwright/lib/server/trace/recorder');5const traceEvent = { name: 'EventName', cat: 'devtools.timeline' };6console.log(shouldMark(traceEvent));
Using AI Code Generation
1const { shouldMark } = require('@playwright/test/lib/test/runner');2const { expect } = require('@playwright/test');3const test = it('should mark the test as failed', async ({ page }) => {4 expect(await page.title()).toBe('Example');5});6shouldMark(test, 'failed', 'Test failed');7const { test } = require('./test');8test('should mark the test as failed', async ({ page }) => {9 expect(await page.title()).toBe('Example');10});11const { test } = require('./test');12test('should mark the test as failed', async ({ page }) => {13 expect(await page.title()).toBe('Example');14});15 at Object.<anonymous> (/path/to/test.js:11:5)16 at Object.<anonymous> (/path/to/test.js:11:5)17 at Object.<anonymous> (/path/to/test.js:11:5)18 at Object.<anonymous> (/path/to/test.js:11:5)19 at Object.<anonymous> (/path/to/test.js:11:5)20 at Object.<anonymous> (/path/to/test.js:11:5)21 at Object.<anonymous> (/path/to/test.js:11:5)22 at Object.<anonymous> (/path/to/test.js:11:5)
Using AI Code Generation
1const { shouldMark } = require('playwright/lib/internal/inspectorInstrumentation');2const { shouldMark } = require('playwright/lib/internal/inspectorInstrumentation');3const { shouldMark } = require('playwright/lib/internal/inspectorInstrumentation');4const { shouldMark } = require('playwright/lib/internal/inspectorInstrumentation');5const { shouldMark } = require('playwright/lib/internal/inspectorInstrumentation');6const { shouldMark } = require('playwright/lib/internal/inspector
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!