Skip to content

Commit 5b755e7

Browse files
committed
make it work properly with versions
1 parent aecfe6c commit 5b755e7

File tree

2 files changed

+34
-23
lines changed

2 files changed

+34
-23
lines changed

assets/js/offline-search.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232

3333
worker.postMessage({
3434
type: 'init',
35-
currentPath: window.location.pathname,
3635
lunrIndexUrl: url,
3736
rawIndexUrl: $searchInput.data('offline-search-index-json-src')
3837
});
@@ -79,9 +78,9 @@
7978
});
8079
$html.append($searchResultBody);
8180

82-
if (docs.size === 0) {
83-
currentTarget.append(
84-
$('<p>').text(`No results found for query "${searchQuery}"`)
81+
if (docs === undefined || docs.size === 0) {
82+
$searchResultBody.append(
83+
$('<p>').text(`No results found for query "${event.data.query}"`)
8584
);
8685
} else {
8786
docs.forEach((doc, key) => {
@@ -145,6 +144,7 @@
145144

146145
worker.postMessage({
147146
type: 'search',
147+
currentPath: window.location.pathname,
148148
query: searchQuery,
149149
maxResults: $targetSearchInput.data('offline-search-max-results')
150150
});

assets/js/worker.js

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,16 @@ let indexReadyPromise;
1010
// Initialize the index
1111
self.onmessage = async function (event) {
1212
if (event.data.type === 'init') {
13-
const regexResults = versionRegex.exec(event.data.currentPath);
14-
const version = regexResults
15-
? regexResults[1]
16-
: undefined;
1713
indexReadyPromise = new Promise(async (resolve, reject) => {
1814
try {
1915
const rawIndex = await fetch(event.data.rawIndexUrl);
2016
let json = await rawIndex.json();
2117
json.forEach((doc) => {
22-
if (version === undefined || doc.ref.startsWith(version)) {
23-
resultDetails.set(doc.ref, {
24-
version: doc.version,
25-
title: doc.title,
26-
excerpt: doc.excerpt,
27-
});
28-
}
18+
resultDetails.set(doc.ref, {
19+
version: doc.version,
20+
title: doc.title,
21+
excerpt: doc.excerpt,
22+
});
2923
});
3024

3125
const lunrIndex = await fetch(event.data.lunrIndexUrl);
@@ -41,6 +35,11 @@ self.onmessage = async function (event) {
4135
} else if (event.data.type === 'search') {
4236
try {
4337
await indexReadyPromise;
38+
const regexResults = versionRegex.exec(event.data.currentPath);
39+
const version = regexResults
40+
? regexResults[0]
41+
: undefined;
42+
4443
const results = idx
4544
.query((q) => {
4645
const tokens = lunr.tokenizer(event.data.query.toLowerCase());
@@ -57,20 +56,32 @@ self.onmessage = async function (event) {
5756
editDistance: 2,
5857
});
5958
});
60-
})
61-
.filter((result) => resultDetails.has(result.ref))
62-
.slice(0, event.data.maxResults);
59+
});
6360

6461
const docs = new Map();
65-
results.forEach((result) => {
62+
let count = 0;
63+
64+
for (const result of results) {
65+
if (count >= event.data.maxResults) {
66+
break;
67+
}
68+
6669
if (resultDetails.get(result.ref) === undefined) {
67-
return;
70+
continue;
6871
}
6972

70-
docs.set(result.ref, resultDetails.get(result.ref));
71-
});
73+
if (version === undefined) {
74+
docs.set(result.ref, resultDetails.get(result.ref));
75+
} else if (result.ref.startsWith(version)) {
76+
docs.set(result.ref, resultDetails.get(result.ref));
77+
} else {
78+
continue;
79+
}
80+
81+
count++;
82+
}
7283

73-
self.postMessage({ type: 'search', status: 'success', docs: docs });
84+
self.postMessage({ type: 'search', status: 'success', query: event.data.query , docs: docs });
7485
} catch (error) {
7586
self.postMessage({ type: 'search', status: 'error', message: 'Index not ready' });
7687
}

0 commit comments

Comments
 (0)