From 9d0b2c4c64379e936a416c7b3659c178bac37069 Mon Sep 17 00:00:00 2001 From: jhamed147 <60305219@udst.edu.qa> Date: Sun, 15 Feb 2026 18:12:09 +0300 Subject: [PATCH 1/5] Fix word bank persistence --- script.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/script.js b/script.js index 43cfa50..99b2022 100644 --- a/script.js +++ b/script.js @@ -57,7 +57,8 @@ function loadWordBank() { } function saveWordBank() { - localStorage.setItem('devopsWords', JSON.stringify(wordBank)); + // ✅ BUG #1 FIX: Use the SAME key for saving and loading + localStorage.setItem('wordBank', JSON.stringify(wordBank)); } function displayWordBank() { @@ -315,4 +316,4 @@ function gameLost() { statusDiv.classList.add('show', 'loser'); gameState.currentPlayer = gameState.currentPlayer === 1 ? 2 : 1; -} +} \ No newline at end of file From 8d5c4fbce2a37b0614235e772e436394b6431854 Mon Sep 17 00:00:00 2001 From: Your Full Name <60301807@udst.edu.qa> Date: Sun, 15 Feb 2026 18:24:17 +0300 Subject: [PATCH 2/5] Add validation for addWord (empty, letters only, duplicate) --- script.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/script.js b/script.js index 43cfa50..772f009 100644 --- a/script.js +++ b/script.js @@ -95,6 +95,22 @@ function addWord() { const input = document.getElementById('newWord'); const word = input.value.trim().toUpperCase(); + if (!word) { + alert("Word cannot be empty."); + return; + } + + const lettersOnly = /^[A-Z]+$/; + if (!lettersOnly.test(word)) { + alert("Word must contain only letters A-Z."); + return; + } + + if (wordBank.includes(word)) { + alert("Word already exists."); + return; + } + wordBank.push(word); input.value = ''; saveWordBank(); From 39e82942b43c89360903e393f886d0010ab0ab01 Mon Sep 17 00:00:00 2001 From: jhamed147 <60305219@udst.edu.qa> Date: Sun, 15 Feb 2026 18:47:36 +0300 Subject: [PATCH 3/5] Fix word bank persistence --- script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script.js b/script.js index 43cfa50..fc84a61 100644 --- a/script.js +++ b/script.js @@ -57,7 +57,7 @@ function loadWordBank() { } function saveWordBank() { - localStorage.setItem('devopsWords', JSON.stringify(wordBank)); + localStorage.setItem('wordBank', JSON.stringify(wordBank)); } function displayWordBank() { From a7ce7c2204690ff565eafa77238bed7209379cc1 Mon Sep 17 00:00:00 2001 From: jhamed147 <60305219@udst.edu.qa> Date: Sun, 15 Feb 2026 19:12:53 +0300 Subject: [PATCH 4/5] Fix word bank persistence (use correct localStorage key) --- script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script.js b/script.js index cbcd42a..b6e0554 100644 --- a/script.js +++ b/script.js @@ -57,7 +57,7 @@ function loadWordBank() { } function saveWordBank() { - localStorage.setItem('devopsWords', JSON.stringify(wordBank)); + localStorage.setItem('wordBank', JSON.stringify(wordBank)); } function displayWordBank() { From 06368336cade6a4584fd597aa04cf80b1ab6fea1 Mon Sep 17 00:00:00 2001 From: jhamed147 <60305219@udst.edu.qa> Date: Sun, 15 Feb 2026 19:18:52 +0300 Subject: [PATCH 5/5] Fix edit word to update instead of delete --- script.js | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/script.js b/script.js index b6e0554..1fed93f 100644 --- a/script.js +++ b/script.js @@ -118,12 +118,31 @@ function addWord() { } function editWord(index) { - const newWord = prompt('Edit word:', wordBank[index]); - if (newWord) { - wordBank.splice(index, 1); - saveWordBank(); - displayWordBank(); + const current = wordBank[index]; + const input = prompt('Edit word:', current); + if (input === null) return; + + const newWord = input.trim().toUpperCase(); + + if (!newWord) { + alert("Word cannot be empty."); + return; + } + + const lettersOnly = /^[A-Z]+$/; + if (!lettersOnly.test(newWord)) { + alert("Word must contain only letters A-Z."); + return; } + + if (newWord !== current && wordBank.includes(newWord)) { + alert("Word already exists."); + return; + } + + wordBank[index] = newWord; + saveWordBank(); + displayWordBank(); } function deleteWord(index) {