-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
70 lines (59 loc) · 1.88 KB
/
app.js
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
const RESULTS = document.querySelector('#output')
const INPUT = document.querySelector('#query')
const WIKI = MediaWikiJS('https://oldschool.runescape.wiki')
let allNPC = []
let options = {
action: 'query',
list: 'categorymembers',
cmtitle: 'Category:Non-player_characters',
cmlimit: 'max',
cmcontinue: ''
}
WIKI.send(options, continueQuery)
function continueQuery(data) {
options.cmcontinue = data.continue?.cmcontinue
for (let npc of data.query?.categorymembers) {
allNPC.push(npc.title)
}
if (options.cmcontinue == undefined) {
INPUT.value = 'Wise Old Man'
INPUT.focus();
renderField()
return
}
WIKI.send(options, continueQuery)
}
function populateField(regex) {
RESULTS.innerHTML = ''
let response = ''
allNPC.forEach(i => {
i = ('? ? ? ?'==i)?'? ? ? ?':i
if (i.search(regex) > -1) {
response +=`<a href="https://osrs.wiki/${('? ? ? ?'==i)?'%3f %3f %3f %3f':i}" target="_blank">${i}</a></br>`
}
})
RESULTS.innerHTML = (response == '' ? `\n No NPC found with "${INPUT.value}" in their name, try something different \n` : response)
}
function searchQuery(query) {
let temp = {}
let out = ''
query = query.split(' ').join('')
let regex = query.split('')
regex.forEach((element) => {
element = (element =='?')? '?':element
temp[element] = (temp[element] > 0) ? temp[element] + 1 : 1;
})
for (key in temp) {
let tempkey = key
tempkey = (tempkey.search(/[[\]\\\^\*\+\?\{\}\|\(\)\$\.]/) == 0) ? '\\' + tempkey : tempkey
out += `((?=.*${tempkey}){${temp[key]}})`
}
regex = `\\b${out}\\w+\\b`
return new RegExp(regex, 'i')
}
function renderField() {
populateField(searchQuery(INPUT.value));
}
INPUT.addEventListener('change', () => {
renderField()
})