|
| 1 | + |
| 2 | +// Loading screen |
| 3 | +let makeLoad = () => { |
| 4 | + |
| 5 | + let load = document.createElement('div') |
| 6 | + load.id = 'load' |
| 7 | + load.innerHTML = '<div class="shapes-5"></div>' |
| 8 | + document.body.appendChild(load) |
| 9 | + |
| 10 | +}; makeLoad() |
| 11 | + |
| 12 | + |
| 13 | +// Build scripts |
| 14 | + |
| 15 | +let makePopup = (x, y, letter) => { |
| 16 | + |
| 17 | + // Create the popup HTML |
| 18 | + |
| 19 | + const fidal = [ |
| 20 | + ['ሀ', 'ሁ', 'ሂ', 'ሃ', 'ሄ', 'ህ', 'ሆ'], |
| 21 | + ['ለ', 'ሉ', 'ሊ', 'ላ', 'ሌ', 'ል', 'ሎ', 'ሏ'], |
| 22 | + ['ሐ', 'ሑ', 'ሒ', 'ሓ', 'ሔ', 'ሕ', 'ሖ', 'ሗ'], |
| 23 | + ['መ', 'ሙ', 'ሚ', 'ማ', 'ሜ', 'ም', 'ሞ', 'ሟ'], |
| 24 | + ['ሠ', 'ሡ', 'ሢ', 'ሣ', 'ሤ', 'ሥ', 'ሦ', 'ሧ'], |
| 25 | + ['ረ', 'ሩ', 'ሪ', 'ራ', 'ሬ', 'ር', 'ሮ', 'ሯ'], |
| 26 | + ['ሰ', 'ሱ', 'ሲ', 'ሳ', 'ሴ', 'ስ', 'ሶ', 'ሷ'], |
| 27 | + ['ሸ', 'ሹ', 'ሺ', 'ሻ', 'ሼ', 'ሽ', 'ሾ', 'ሿ'], |
| 28 | + ['ቀ', 'ቁ', 'ቂ', 'ቃ', 'ቄ', 'ቅ', 'ቆ', 'ቋ'], |
| 29 | + ['በ', 'ቡ', 'ቢ', 'ባ', 'ቤ', 'ብ', 'ቦ', 'ቧ'], |
| 30 | + ['ተ', 'ቱ', 'ቲ', 'ታ', 'ቴ', 'ት', 'ቶ', 'ቷ'], |
| 31 | + ['ቸ', 'ቹ', 'ቺ', 'ቻ', 'ቼ', 'ች', 'ቾ', 'ቿ'], |
| 32 | + ['ኀ', 'ኁ', 'ኂ', 'ኃ', 'ኄ', 'ኅ', 'ኆ', 'ኋ'], |
| 33 | + ['ነ', 'ኑ', 'ኒ', 'ና', 'ኔ', 'ን', 'ኖ', 'ኗ'], |
| 34 | + ['ኘ', 'ኙ', 'ኚ', 'ኛ', 'ኜ', 'ኝ', 'ኞ', 'ኟ'], |
| 35 | + ['አ', 'ኡ', 'ኢ', 'ኣ', 'ኤ', 'እ', 'ኦ', 'ኧ'], |
| 36 | + ['ከ', 'ኩ', 'ኪ', 'ካ', 'ኬ', 'ክ', 'ኮ', 'ኳ'], |
| 37 | + ['ኸ', 'ኹ', 'ኺ', 'ኻ', 'ኼ', 'ኽ', 'ኾ'], |
| 38 | + ['ወ', 'ዉ', 'ዊ', 'ዋ', 'ዌ', 'ው', 'ዎ'], |
| 39 | + ['ዐ', 'ዑ', 'ዒ', 'ዓ', 'ዔ', 'ዕ', 'ዖ'], |
| 40 | + ['ዘ', 'ዙ', 'ዚ', 'ዛ', 'ዜ', 'ዝ', 'ዞ', 'ዟ'], |
| 41 | + ['ዠ', 'ዡ', 'ዢ', 'ዣ', 'ዤ', 'ዥ', 'ዦ', 'ዧ'], |
| 42 | + ['የ', 'ዩ', 'ዪ', 'ያ', 'ዬ', 'ይ', 'ዮ'], |
| 43 | + ['ደ', 'ዱ', 'ዲ', 'ዳ', 'ዴ', 'ድ', 'ዶ', 'ዷ'], |
| 44 | + ['ጀ', 'ጁ', 'ጂ', 'ጃ', 'ጄ', 'ጅ', 'ጆ', 'ጇ'], |
| 45 | + ['ገ', 'ጉ', 'ጊ', 'ጋ', 'ጌ', 'ግ', 'ጎ', 'ጓ'], |
| 46 | + ['ጠ', 'ጡ', 'ጢ', 'ጣ', 'ጤ', 'ጥ', 'ጦ', 'ጧ'], |
| 47 | + ['ጨ', 'ጩ', 'ጪ', 'ጫ', 'ጬ', 'ጭ', 'ጮ', 'ጯ'], |
| 48 | + ['ጰ', 'ጱ', 'ጲ', 'ጳ', 'ጴ', 'ጵ', 'ጶ', 'ጷ'], |
| 49 | + ['ጸ', 'ጹ', 'ጺ', 'ጻ', 'ጼ', 'ጽ', 'ጾ', 'ጿ'], |
| 50 | + ['ፀ', 'ፁ', 'ፂ', 'ፃ', 'ፄ', 'ፅ', 'ፆ'], |
| 51 | + ['ፈ', 'ፉ', 'ፊ', 'ፋ', 'ፌ', 'ፍ', 'ፎ', 'ፏ'], |
| 52 | + ['ፐ', 'ፑ', 'ፒ', 'ፓ', 'ፔ', 'ፕ', 'ፖ', 'ፗ'], |
| 53 | + ['ቨ', 'ቩ', 'ቪ', 'ቫ', 'ቬ', 'ቭ', 'ቮ', 'ቯ'] |
| 54 | + ] |
| 55 | + const keys = [ |
| 56 | + 'ሀ', 'ለ', 'ሐ', 'መ', 'ሠ', 'ረ', 'ሰ', 'ሸ', 'ቀ', 'በ', 'ተ', 'ቸ', |
| 57 | + 'ኀ', 'ነ', 'ኘ', 'አ', 'ከ', 'ኸ', 'ወ', 'ዐ', 'ዘ', 'ዠ', |
| 58 | + 'የ', 'ደ', 'ጀ', 'ገ', 'ጠ', 'ጨ', 'ጰ', 'ጸ', 'ፀ', 'ፈ', 'ፐ', 'ቨ' |
| 59 | + ] |
| 60 | + |
| 61 | + if ( !keys.includes(letter) ) return |
| 62 | + let index = keys.indexOf(letter) |
| 63 | + let letters = fidal[index] |
| 64 | + |
| 65 | + let carousel = document.createElement('div') |
| 66 | + carousel.id = 'c-' + x + '-' + y |
| 67 | + carousel.className = 'carousel carousel-' + letters.length |
| 68 | + |
| 69 | + for ( let i = 0; i < letters.length; i++ ) { |
| 70 | + |
| 71 | + let letter = letters[i] |
| 72 | + let letterDiv = document.createElement('div') |
| 73 | + letterDiv.id = 'l-' + x + '-' + y + '-' + (i + 1) |
| 74 | + letterDiv.className = 'carousel-letter' |
| 75 | + letterDiv.setAttribute('onclick', 'type(this.innerText)') |
| 76 | + |
| 77 | + if ( i == 0 ) letterDiv.classList.add('carousel-letter-first') |
| 78 | + |
| 79 | + letterDiv.innerHTML = letter |
| 80 | + carousel.appendChild(letterDiv) |
| 81 | + |
| 82 | + } |
| 83 | + |
| 84 | + return [carousel.outerHTML, 'popup-' + letters.length] |
| 85 | + |
| 86 | +} |
| 87 | + |
| 88 | +let makeHeader = () => { |
| 89 | + |
| 90 | + let header = document.createElement('div') |
| 91 | + header.id = 'bar' |
| 92 | + |
| 93 | + let title = document.createElement('h1') |
| 94 | + title.id = 'title' |
| 95 | + title.innerHTML = 'ቃልነት' |
| 96 | + |
| 97 | + let leftBar = document.createElement('div') |
| 98 | + leftBar.id = 'left-bar' |
| 99 | + |
| 100 | + let rightBar = document.createElement('div') |
| 101 | + rightBar.id = 'right-bar' |
| 102 | + |
| 103 | + let statsButton = document.createElement('button') |
| 104 | + statsButton.id = 'stats-button' |
| 105 | + statsButton.className = 'header-button' |
| 106 | + statsButton.setAttribute('onclick', 'toggleStats()') |
| 107 | + statsButton.innerHTML = |
| 108 | + '<img src="../Icons/stats.svg" class="header-icon" alt="stats">' |
| 109 | + |
| 110 | + let settingsButton = document.createElement('button') |
| 111 | + settingsButton.id = 'settings-button' |
| 112 | + settingsButton.className = 'header-button' |
| 113 | + settingsButton.setAttribute('onclick', 'toggleSettings()') |
| 114 | + settingsButton.innerHTML = |
| 115 | + '<img src="../Icons/menu.svg" class="header-icon" alt="menu">' |
| 116 | + |
| 117 | + let helpButton = document.createElement('a') |
| 118 | + helpButton.id = 'help-button' |
| 119 | + helpButton.className = 'header-button' |
| 120 | + helpButton.setAttribute('href', '../guide/') |
| 121 | + helpButton.innerHTML = |
| 122 | + '<img src="../Icons/help.svg" class="header-icon" alt="help">' |
| 123 | + |
| 124 | + let revealButton = document.createElement('button') |
| 125 | + revealButton.id = 'reveal-button' |
| 126 | + revealButton.className = 'header-button' |
| 127 | + revealButton.setAttribute('onclick', 'reveal()') |
| 128 | + revealButton.innerHTML = |
| 129 | + '<img src="../Icons/reveal.svg" class="header-icon" alt="reveal">' |
| 130 | + |
| 131 | + rightBar.appendChild(statsButton) |
| 132 | + rightBar.appendChild(settingsButton) |
| 133 | + |
| 134 | + leftBar.appendChild(helpButton) |
| 135 | + leftBar.appendChild(revealButton) |
| 136 | + |
| 137 | + header.appendChild(leftBar) |
| 138 | + header.appendChild(rightBar) |
| 139 | + header.appendChild(title) |
| 140 | + document.body.appendChild(header) |
| 141 | + |
| 142 | +} |
| 143 | + |
| 144 | +let makeGrid = () => { |
| 145 | + |
| 146 | + let content = document.createElement('div') |
| 147 | + content.id = 'content' |
| 148 | + |
| 149 | + for (let i = 0; i < 6; i++) { |
| 150 | + |
| 151 | + let word = document.createElement('div') |
| 152 | + for (let j = 0; j < 4; j++) { |
| 153 | + |
| 154 | + let box = document.createElement('div') |
| 155 | + box.className = 'box ' + (j + 1) |
| 156 | + box.id = (i + 1) + '-' + (j + 1) |
| 157 | + box.innerText = ' ' |
| 158 | + word.appendChild(box) |
| 159 | + |
| 160 | + } |
| 161 | + |
| 162 | + word.id = String(i + 1) |
| 163 | + word.className = 'word' |
| 164 | + |
| 165 | + if ( i == 5 ) word.className = 'word hide' |
| 166 | + |
| 167 | + content.appendChild(word) |
| 168 | + |
| 169 | + } |
| 170 | + |
| 171 | + document.body.appendChild(content) |
| 172 | + |
| 173 | +} |
| 174 | + |
| 175 | +let makeKeyboard = () => { |
| 176 | + |
| 177 | + let keyboard = document.createElement('div') |
| 178 | + keyboard.id = 'keyboard' |
| 179 | + |
| 180 | + let letters = [ |
| 181 | + 'ሀ', 'ለ', 'ሐ', 'መ', 'ሠ', 'ረ', 'ሰ', 'ሸ', 'ቀ', 'በ', 'ተ', 'ቸ', |
| 182 | + '<img src="../Icons/backspace.svg" class="inline-icon" alt="backspace" >', |
| 183 | + 'ኀ', 'ነ', 'ኘ', 'አ', 'ከ', 'ኸ', 'ወ', 'ዐ', 'ዘ', 'ዠ', |
| 184 | + '<img src="../Icons/enter.svg" class="inline-icon" alt="enter" >', |
| 185 | + 'የ', 'ደ', 'ጀ', 'ገ', 'ጠ', 'ጨ', 'ጰ', 'ጸ', 'ፀ', 'ፈ', 'ፐ', 'ቨ' |
| 186 | + ] |
| 187 | + |
| 188 | + let index = 0 |
| 189 | + |
| 190 | + for (let i = 0; i < 3; i++) { |
| 191 | + |
| 192 | + let row = document.createElement('div') |
| 193 | + row.className = 'row' |
| 194 | + row.id = 'r' + (i + 1) |
| 195 | + |
| 196 | + let limits = [12, 12, 12] |
| 197 | + |
| 198 | + for (let j = 0; j < limits[i]; j++) { |
| 199 | + |
| 200 | + let key = document.createElement('button') |
| 201 | + key.className = 'key' |
| 202 | + |
| 203 | + key.id = 'k-' + (i + 1) + '-' + (j + 1) |
| 204 | + key.setAttribute('onclick', 'keyClick(this)') |
| 205 | + |
| 206 | + if (index == 12 || index == 23 ) { |
| 207 | + |
| 208 | + key.className = 'key icon-container' |
| 209 | + key.innerHTML = '<span class="letter">'+letters[index]+'</span>' |
| 210 | + |
| 211 | + if ( index == 12 ) key.setAttribute('onclick', 'backspace()') |
| 212 | + else key.setAttribute('onclick', 'enter()') |
| 213 | + |
| 214 | + row.appendChild(key) |
| 215 | + index++ |
| 216 | + continue |
| 217 | + |
| 218 | + } |
| 219 | + |
| 220 | + let popup = document.createElement('span') |
| 221 | + popup.className = 'popup' |
| 222 | + popup.id = 'p-' + (i + 1) + '-' + (j + 1) |
| 223 | + popupCode = makePopup(i + 1, j + 1, letters[index]) |
| 224 | + popup.innerHTML = popupCode[0] |
| 225 | + popup.classList.add(popupCode[1]) |
| 226 | + |
| 227 | + key.innerHTML = '<span class="letter">'+letters[index]+'</span>' |
| 228 | + key.appendChild(popup) |
| 229 | + |
| 230 | + row.appendChild(key) |
| 231 | + index++ |
| 232 | + |
| 233 | + } |
| 234 | + |
| 235 | + keyboard.appendChild(row) |
| 236 | + |
| 237 | + } |
| 238 | + |
| 239 | + document.body.appendChild(keyboard) |
| 240 | + |
| 241 | +} |
| 242 | + |
| 243 | +let makeModal = () => { |
| 244 | + |
| 245 | + // Make score modal |
| 246 | + let modal = document.createElement('div') |
| 247 | + modal.id = 'modal' |
| 248 | + modal.innerHTML = |
| 249 | + '<div id="modal-content">0</div>' |
| 250 | + + '<div id="timer" ></div>' |
| 251 | + document.body.appendChild(modal) |
| 252 | + |
| 253 | + // Make fireworks container |
| 254 | + let fireworks = document.createElement('div') |
| 255 | + fireworks.id = 'fireworks' |
| 256 | + document.body.appendChild(fireworks) |
| 257 | + |
| 258 | + // Make statistics modal |
| 259 | + let statsModal = document.createElement('div') |
| 260 | + statsModal.id = 'stats-modal' |
| 261 | + statsModal.innerHTML = |
| 262 | + '<div id="stats-modal-content"><canvas id="stats-chartjs"></canvas>' |
| 263 | + + '</div>' |
| 264 | + document.body.appendChild(statsModal) |
| 265 | + |
| 266 | + // Make reveal modal |
| 267 | + let revealModal = document.createElement('div') |
| 268 | + revealModal.id = 'reveal-modal' |
| 269 | + revealModal.innerHTML = |
| 270 | + '<div id="reveal-modal-content">' |
| 271 | + + '<div id="reveal-modal-title">ቃል አሳይ?</div>' |
| 272 | + + '<button id="reveal-form" onclick="alertReveal()">አዎን</button>' |
| 273 | + + '</div>' |
| 274 | + document.body.appendChild(revealModal) |
| 275 | + |
| 276 | +} |
| 277 | + |
| 278 | +makeHeader() |
| 279 | +makeGrid() |
| 280 | +makeKeyboard() |
| 281 | +makeModal() |
0 commit comments