Repository navigation
Expand file tree
/
Copy pathCustomQuery.js
More file actions
67 lines (63 loc) · 2.56 KB
/
Copy pathCustomQuery.js
File metadata and controls
67 lines (63 loc) · 2.56 KB
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
import { tokenize } from './queryutils.js'
export class CustomQuery {
queryString = ""
isCatalogLink = false
indexes = {}
relators = {}
constructor(queryString,config) {
var queryTokens = tokenize(queryString)
if(config.indexes) {
config.indexes.forEach(entry => {
if(Object.hasOwn(entry,"code") && Object.hasOwn(entry, "paramName")) {
this.indexes[entry.code] = entry.paramName
}
})
}
if(config.relators) {
this.relators = config.relators
}
for(var i = 0; i < queryTokens.length; i += 4) {
var index = queryTokens[i]
var relator = queryTokens[i+1]
var searchTerm = queryTokens[i+2]
if(this.queryString != "") {
this.queryString += " "
}
if(index == 'link') {
if(searchTerm.match(/^".*"$/)) {
searchTerm = searchTerm.replace(/^"/,"").replace(/"$/,"")
}
searchTerm = searchTerm.replaceAll("\"\"","\"")
searchTerm = searchTerm.replace(/^http[^?]*\?/,'')
searchTerm = searchTerm.replace(/${config.pageParam}=[^=]*/,'')
searchTerm = searchTerm.replace(/${config.maxRecsParam}=[^=]*/,'')
if(Object.hasOwn(config,"catalogLinkParams")) {
searchTerm += "&" + config.catalogLinkParams
}
this.queryString = searchTerm
this.isCatalogLink = true
return
}
else if(index == "raw") {
if(searchTerm.match(/^".*"$/)) {
searchTerm = searchTerm.replace(/^"/,"").replace(/"$/,"")
}
searchTerm = searchTerm.replaceAll("\"\"","\"")
}
else if(!relator.includes('=')) {
if(searchTerm.match(/^".*"$/)) {
searchTerm = searchTerm.replace(/^"/,"").replace(/"$/,"")
}
}
const mappedRelator = Object.hasOwn(this.relators,relator) ? this.relators[relator] : this.relators['default']
if(Object.hasOwn(this.indexes,index)) {
this.queryString += this.indexes[index] + mappedRelator + searchTerm
} else {
this.queryString += searchTerm
}
if(i+3 < queryTokens.length) {
this.queryString += " " + queryTokens[i+3]
}
}
}
}