-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
124 lines (114 loc) · 4.86 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Anagrams</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<h1>Anagrams</h1>
<div>
<span id="status">Loading...</span>
</div>
<div>
<label for="letters">Enter letters, including
<b>?</b> for blanks:</label>
</div>
<div>
<input id="letters" type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
</div>
<div>
<button id="findAnagramsButton">Find anagrams</button>
</div>
<div>
<button id="findLongestWordsButton">Find longest words</button>
</div>
<div>
<button id="findCrosswordAnswersButton">Find crossword answers</button>
</div>
<p id="results"></p>
<script type="text/javascript" src="anagram-finder.js"></script>
<script type="text/javascript">
var anagramFinder = undefined;
/* UI */
UI = {
status: document.getElementById('status'),
findAnagramsButton: document.getElementById('findAnagramsButton'),
findLongestWordsButton: document.getElementById('findLongestWordsButton'),
findCrosswordAnswersButton: document.getElementById('findCrosswordAnswersButton'),
letters: document.getElementById('letters'),
results: document.getElementById('results')
};
function loadWords(onWordsLoaded) {
var request = new XMLHttpRequest();
request.open('GET', 'enable1.txt', true);
request.send(null);
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
var type = request.getResponseHeader('Content-Type');
if (type.indexOf('text') !== 1) {
var lines = request.responseText.split(/\r|\n/).filter(function (s) { return s != ''; });
onWordsLoaded(lines);
}
}
}
}
function highlightBold(s) {
return '<b>' + s + '</b>';
}
function highlightExtraLetters(word, originalLetters, highlight) {
var s = '';
for (var i = 0; i < word.length; i++) {
var letter = word[i];
var indexOfLetter = originalLetters.indexOf(letter);
if (indexOfLetter >= 0) {
s += letter;
originalLetters = originalLetters.removeCharAt(indexOfLetter);
} else {
s += highlight(letter);
}
}
return s;
}
/* wire up UI */
loadWords(function (w) {
anagramFinder = new AnagramFinder(w);
UI.status.innerText = w.length + ' words loaded.';
});
UI.letters.onkeyup = function () {
this.value = this.value.toLowerCase();
}
UI.findAnagramsButton.onclick = function () {
var lettersWithBlanks = UI.letters.value;
var letters = lettersWithBlanks.replace(/\?/g, '');
var numberOfBlanks = lettersWithBlanks.length - letters.length;
var anagrams = anagramFinder.findAnagrams(letters, numberOfBlanks);
var anagramsHighlighted = anagrams.map(
function (word) {
return highlightExtraLetters(word, letters, highlightBold);
});
UI.status.innerText = anagramsHighlighted.length + ' anagrams found';
UI.results.innerHTML = anagramsHighlighted.join('<br />');
};
UI.findLongestWordsButton.onclick = function () {
var lettersWithBlanks = UI.letters.value;
var letters = lettersWithBlanks.replace(/\?/g, '');
var numberOfBlanks = lettersWithBlanks.length - letters.length;
var longestWords = anagramFinder.findLongestWords(letters, numberOfBlanks);
var longestWordsHighlighted = longestWords.map(
function (word) {
return highlightExtraLetters(word, letters, highlightBold);
});
UI.status.innerText = longestWordsHighlighted.length + ' words found';
UI.results.innerHTML = longestWordsHighlighted.join('<br />');
};
UI.findCrosswordAnswersButton.onclick = function () {
var lettersWithBlanks = UI.letters.value;
var crosswordAnswers = anagramFinder.findCrosswordAnswers(lettersWithBlanks);
UI.status.innerText = crosswordAnswers.length + ' words found';
UI.results.innerHTML = crosswordAnswers.join('<br />');
};
</script>
</body>
</html>