()
| 178 | } |
| 179 | |
| 180 | function getValidationErrors() { |
| 181 | const results = {}; |
| 182 | let text, parsed; |
| 183 | |
| 184 | // keyMappings field. |
| 185 | text = getOptionEl("keyMappings").value.trim(); |
| 186 | parsed = KeyMappingsParser.parse(text); |
| 187 | if (parsed.validationErrors.length > 0) { |
| 188 | results["keyMappings"] = parsed.validationErrors.join("\n"); |
| 189 | } |
| 190 | |
| 191 | // searchEngines field. |
| 192 | text = getOptionEl("searchEngines").value.trim(); |
| 193 | parsed = userSearchEngines.parseConfig(text); |
| 194 | if (parsed.validationErrors.length > 0) { |
| 195 | results["searchEngines"] = parsed.validationErrors.join("\n"); |
| 196 | } |
| 197 | |
| 198 | // linkHintCharacters field. |
| 199 | text = getOptionEl("linkHintCharacters").value.trim(); |
| 200 | if (text != removeDuplicateChars(text)) { |
| 201 | results["linkHintCharacters"] = "This cannot contain duplicate characters."; |
| 202 | } else if (text.length <= 1) { |
| 203 | results["linkHintCharacters"] = "This must be at least two characters long."; |
| 204 | } |
| 205 | |
| 206 | // linkHintNumbers field. |
| 207 | text = getOptionEl("linkHintNumbers").value.trim(); |
| 208 | if (text != removeDuplicateChars(text)) { |
| 209 | results["linkHintNumbers"] = "This cannot contain duplicate characters."; |
| 210 | } else if (text.length <= 1) { |
| 211 | results["linkHintNumbers"] = "This must be at least two characters long."; |
| 212 | } |
| 213 | |
| 214 | return results; |
| 215 | } |
| 216 | |
| 217 | function addValidationMessage(el, message) { |
| 218 | el.classList.add("validation-error"); |
no test coverage detected