@apify/docs-theme 1.0.74 → 1.0.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
import React, { useEffect, useReducer, useRef, useState } from 'react';
|
|
3
|
+
import clsx from 'clsx';
|
|
4
|
+
import algoliaSearchHelper from 'algoliasearch-helper';
|
|
5
|
+
import algoliaSearch from 'algoliasearch/lite';
|
|
6
|
+
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
|
7
|
+
import Head from '@docusaurus/Head';
|
|
8
|
+
import Link from '@docusaurus/Link';
|
|
9
|
+
import { useAllDocsData } from '@docusaurus/plugin-content-docs/client';
|
|
10
|
+
import {
|
|
11
|
+
HtmlClassNameProvider,
|
|
12
|
+
useEvent,
|
|
13
|
+
usePluralForm,
|
|
14
|
+
} from '@docusaurus/theme-common';
|
|
15
|
+
import {
|
|
16
|
+
useSearchPage,
|
|
17
|
+
useTitleFormatter,
|
|
18
|
+
} from '@docusaurus/theme-common/internal';
|
|
19
|
+
import Translate, { translate } from '@docusaurus/Translate';
|
|
20
|
+
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
21
|
+
import {
|
|
22
|
+
useAlgoliaThemeConfig,
|
|
23
|
+
useSearchResultUrlProcessor,
|
|
24
|
+
} from '@docusaurus/theme-search-algolia/client';
|
|
25
|
+
import Layout from '@theme/Layout';
|
|
26
|
+
import styles from './styles.module.css';
|
|
27
|
+
|
|
28
|
+
// Very simple pluralization: probably good enough for now
|
|
29
|
+
function useDocumentsFoundPlural() {
|
|
30
|
+
const { selectMessage } = usePluralForm();
|
|
31
|
+
return (count) => selectMessage(
|
|
32
|
+
count,
|
|
33
|
+
translate(
|
|
34
|
+
{
|
|
35
|
+
id: 'theme.SearchPage.documentsFound.plurals',
|
|
36
|
+
description:
|
|
37
|
+
'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',
|
|
38
|
+
message: 'One document found|{count} documents found',
|
|
39
|
+
},
|
|
40
|
+
{ count },
|
|
41
|
+
),
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function useDocsSearchVersionsHelpers() {
|
|
46
|
+
const allDocsData = useAllDocsData();
|
|
47
|
+
// State of the version select menus / algolia facet filters
|
|
48
|
+
// docsPluginId -> versionName map
|
|
49
|
+
const [searchVersions, setSearchVersions] = useState(() => Object.entries(allDocsData).reduce(
|
|
50
|
+
(acc, [pluginId, pluginData]) => ({
|
|
51
|
+
...acc,
|
|
52
|
+
[pluginId]: pluginData.versions[0].name,
|
|
53
|
+
}),
|
|
54
|
+
{},
|
|
55
|
+
),
|
|
56
|
+
);
|
|
57
|
+
// Set the value of a single select menu
|
|
58
|
+
const setSearchVersion = (pluginId, searchVersion) => setSearchVersions((s) => ({ ...s, [pluginId]: searchVersion }));
|
|
59
|
+
const versioningEnabled = Object.values(allDocsData).some(
|
|
60
|
+
(docsData) => docsData.versions.length > 1,
|
|
61
|
+
);
|
|
62
|
+
return {
|
|
63
|
+
allDocsData,
|
|
64
|
+
versioningEnabled,
|
|
65
|
+
searchVersions,
|
|
66
|
+
setSearchVersion,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// We want to display one select per versioned docs plugin instance
|
|
71
|
+
function SearchVersionSelectList({ docsSearchVersionsHelpers }) {
|
|
72
|
+
const versionedPluginEntries = Object.entries(
|
|
73
|
+
docsSearchVersionsHelpers.allDocsData,
|
|
74
|
+
)
|
|
75
|
+
// Do not show a version select for unversioned docs plugin instances
|
|
76
|
+
.filter(([, docsData]) => docsData.versions.length > 1);
|
|
77
|
+
return (
|
|
78
|
+
<div
|
|
79
|
+
className={clsx(
|
|
80
|
+
'col',
|
|
81
|
+
'col--3',
|
|
82
|
+
'padding-left--none',
|
|
83
|
+
styles.searchVersionColumn,
|
|
84
|
+
)}>
|
|
85
|
+
{versionedPluginEntries.map(([pluginId, docsData]) => {
|
|
86
|
+
const labelPrefix = versionedPluginEntries.length > 1 ? `${pluginId}: ` : '';
|
|
87
|
+
return (
|
|
88
|
+
<select
|
|
89
|
+
key={pluginId}
|
|
90
|
+
onChange={(e) => docsSearchVersionsHelpers.setSearchVersion(
|
|
91
|
+
pluginId,
|
|
92
|
+
e.target.value,
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
defaultValue={docsSearchVersionsHelpers.searchVersions[pluginId]}
|
|
96
|
+
className={styles.searchVersionInput}>
|
|
97
|
+
{docsData.versions.map((version, i) => (
|
|
98
|
+
<option
|
|
99
|
+
key={i}
|
|
100
|
+
label={`${labelPrefix}${version.label}`}
|
|
101
|
+
value={version.name}
|
|
102
|
+
/>
|
|
103
|
+
))}
|
|
104
|
+
</select>
|
|
105
|
+
);
|
|
106
|
+
})}
|
|
107
|
+
</div>
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function SearchPageContent() {
|
|
112
|
+
const {
|
|
113
|
+
i18n: { currentLocale },
|
|
114
|
+
} = useDocusaurusContext();
|
|
115
|
+
const {
|
|
116
|
+
algolia: { appId, apiKey, indexName },
|
|
117
|
+
} = useAlgoliaThemeConfig();
|
|
118
|
+
const processSearchResultUrl = useSearchResultUrlProcessor();
|
|
119
|
+
const documentsFoundPlural = useDocumentsFoundPlural();
|
|
120
|
+
const docsSearchVersionsHelpers = useDocsSearchVersionsHelpers();
|
|
121
|
+
const { searchQuery, setSearchQuery } = useSearchPage();
|
|
122
|
+
const initialSearchResultState = {
|
|
123
|
+
items: [],
|
|
124
|
+
query: null,
|
|
125
|
+
totalResults: null,
|
|
126
|
+
totalPages: null,
|
|
127
|
+
lastPage: null,
|
|
128
|
+
hasMore: null,
|
|
129
|
+
loading: null,
|
|
130
|
+
};
|
|
131
|
+
const [searchResultState, searchResultStateDispatcher] = useReducer(
|
|
132
|
+
(prevState, data) => {
|
|
133
|
+
switch (data.type) {
|
|
134
|
+
case 'reset': {
|
|
135
|
+
return initialSearchResultState;
|
|
136
|
+
}
|
|
137
|
+
case 'loading': {
|
|
138
|
+
return { ...prevState, loading: true };
|
|
139
|
+
}
|
|
140
|
+
case 'update': {
|
|
141
|
+
if (searchQuery !== data.value.query) {
|
|
142
|
+
return prevState;
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
...data.value,
|
|
146
|
+
items:
|
|
147
|
+
data.value.lastPage === 0
|
|
148
|
+
? data.value.items
|
|
149
|
+
: prevState.items.concat(data.value.items),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
case 'advance': {
|
|
153
|
+
const hasMore = prevState.totalPages > prevState.lastPage + 1;
|
|
154
|
+
return {
|
|
155
|
+
...prevState,
|
|
156
|
+
lastPage: hasMore ? prevState.lastPage + 1 : prevState.lastPage,
|
|
157
|
+
hasMore,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
default:
|
|
161
|
+
return prevState;
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
initialSearchResultState,
|
|
165
|
+
);
|
|
166
|
+
const algoliaClient = algoliaSearch(appId, apiKey);
|
|
167
|
+
const algoliaHelper = algoliaSearchHelper(algoliaClient, indexName, {
|
|
168
|
+
hitsPerPage: 15,
|
|
169
|
+
advancedSyntax: true,
|
|
170
|
+
disjunctiveFacets: ['language', 'docusaurus_tag'],
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
algoliaHelper.on(
|
|
174
|
+
'result',
|
|
175
|
+
({ results: { query, hits, page, nbHits, nbPages } }) => {
|
|
176
|
+
if (query === '' || !Array.isArray(hits)) {
|
|
177
|
+
searchResultStateDispatcher({ type: 'reset' });
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const sanitizeValue = (value) => value.replace(
|
|
181
|
+
/algolia-docsearch-suggestion--highlight/g,
|
|
182
|
+
'search-result-match',
|
|
183
|
+
);
|
|
184
|
+
const items = hits.map(
|
|
185
|
+
({
|
|
186
|
+
url,
|
|
187
|
+
_highlightResult: { hierarchy },
|
|
188
|
+
_snippetResult: snippet = {},
|
|
189
|
+
}) => {
|
|
190
|
+
const titles = Object.keys(hierarchy).map((key) => sanitizeValue(hierarchy[key].value),
|
|
191
|
+
);
|
|
192
|
+
return {
|
|
193
|
+
title: titles.pop(),
|
|
194
|
+
url: processSearchResultUrl(url),
|
|
195
|
+
summary: snippet.content
|
|
196
|
+
? `${sanitizeValue(snippet.content.value)}...`
|
|
197
|
+
: '',
|
|
198
|
+
breadcrumbs: titles,
|
|
199
|
+
};
|
|
200
|
+
},
|
|
201
|
+
);
|
|
202
|
+
searchResultStateDispatcher({
|
|
203
|
+
type: 'update',
|
|
204
|
+
value: {
|
|
205
|
+
items,
|
|
206
|
+
query,
|
|
207
|
+
totalResults: nbHits,
|
|
208
|
+
totalPages: nbPages,
|
|
209
|
+
lastPage: page,
|
|
210
|
+
hasMore: nbPages > page + 1,
|
|
211
|
+
loading: false,
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
},
|
|
215
|
+
);
|
|
216
|
+
const [loaderRef, setLoaderRef] = useState(null);
|
|
217
|
+
const prevY = useRef(0);
|
|
218
|
+
const observer = useRef(
|
|
219
|
+
ExecutionEnvironment.canUseIntersectionObserver
|
|
220
|
+
&& new IntersectionObserver(
|
|
221
|
+
(entries) => {
|
|
222
|
+
const {
|
|
223
|
+
isIntersecting,
|
|
224
|
+
boundingClientRect: { y: currentY },
|
|
225
|
+
} = entries[0];
|
|
226
|
+
if (isIntersecting && prevY.current > currentY) {
|
|
227
|
+
searchResultStateDispatcher({ type: 'advance' });
|
|
228
|
+
}
|
|
229
|
+
prevY.current = currentY;
|
|
230
|
+
},
|
|
231
|
+
{ threshold: 1 },
|
|
232
|
+
),
|
|
233
|
+
);
|
|
234
|
+
const getTitle = () => (searchQuery
|
|
235
|
+
? translate(
|
|
236
|
+
{
|
|
237
|
+
id: 'theme.SearchPage.existingResultsTitle',
|
|
238
|
+
message: 'Search results for "{query}"',
|
|
239
|
+
description: 'The search page title for non-empty query',
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
query: searchQuery,
|
|
243
|
+
},
|
|
244
|
+
)
|
|
245
|
+
: translate({
|
|
246
|
+
id: 'theme.SearchPage.emptyResultsTitle',
|
|
247
|
+
message: 'Search the documentation',
|
|
248
|
+
description: 'The search page title for empty query',
|
|
249
|
+
}));
|
|
250
|
+
const makeSearch = useEvent((page = 0) => {
|
|
251
|
+
algoliaHelper.addDisjunctiveFacetRefinement('docusaurus_tag', 'default-latest');
|
|
252
|
+
algoliaHelper.addDisjunctiveFacetRefinement('language', currentLocale);
|
|
253
|
+
Object.entries(docsSearchVersionsHelpers.searchVersions).forEach(
|
|
254
|
+
([pluginId, searchVersion]) => {
|
|
255
|
+
algoliaHelper.addDisjunctiveFacetRefinement(
|
|
256
|
+
'docusaurus_tag',
|
|
257
|
+
`docs-${pluginId}-${searchVersion}`,
|
|
258
|
+
);
|
|
259
|
+
},
|
|
260
|
+
);
|
|
261
|
+
algoliaHelper.setQuery(searchQuery).setPage(page).search();
|
|
262
|
+
});
|
|
263
|
+
useEffect(() => {
|
|
264
|
+
if (!loaderRef) {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
const currentObserver = observer.current;
|
|
268
|
+
if (currentObserver) {
|
|
269
|
+
currentObserver.observe(loaderRef);
|
|
270
|
+
return () => currentObserver.unobserve(loaderRef);
|
|
271
|
+
}
|
|
272
|
+
return () => true;
|
|
273
|
+
}, [loaderRef]);
|
|
274
|
+
useEffect(() => {
|
|
275
|
+
searchResultStateDispatcher({ type: 'reset' });
|
|
276
|
+
if (searchQuery) {
|
|
277
|
+
searchResultStateDispatcher({ type: 'loading' });
|
|
278
|
+
setTimeout(() => {
|
|
279
|
+
makeSearch();
|
|
280
|
+
}, 300);
|
|
281
|
+
}
|
|
282
|
+
}, [searchQuery, docsSearchVersionsHelpers.searchVersions, makeSearch]);
|
|
283
|
+
useEffect(() => {
|
|
284
|
+
if (!searchResultState.lastPage || searchResultState.lastPage === 0) {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
makeSearch(searchResultState.lastPage);
|
|
288
|
+
}, [makeSearch, searchResultState.lastPage]);
|
|
289
|
+
return (
|
|
290
|
+
<Layout>
|
|
291
|
+
<Head>
|
|
292
|
+
<title>{useTitleFormatter(getTitle())}</title>
|
|
293
|
+
{/*
|
|
294
|
+
We should not index search pages
|
|
295
|
+
See https://github.com/facebook/docusaurus/pull/3233
|
|
296
|
+
*/}
|
|
297
|
+
<meta property="robots" content="noindex, follow"/>
|
|
298
|
+
</Head>
|
|
299
|
+
|
|
300
|
+
<div className="container margin-vert--lg">
|
|
301
|
+
<h1>{getTitle()}</h1>
|
|
302
|
+
|
|
303
|
+
<form className="row" onSubmit={(e) => e.preventDefault()}>
|
|
304
|
+
<div
|
|
305
|
+
className={clsx('col', styles.searchQueryColumn, {
|
|
306
|
+
'col--9': docsSearchVersionsHelpers.versioningEnabled,
|
|
307
|
+
'col--12': !docsSearchVersionsHelpers.versioningEnabled,
|
|
308
|
+
})}>
|
|
309
|
+
<input
|
|
310
|
+
type="search"
|
|
311
|
+
name="q"
|
|
312
|
+
className={styles.searchQueryInput}
|
|
313
|
+
placeholder={translate({
|
|
314
|
+
id: 'theme.SearchPage.inputPlaceholder',
|
|
315
|
+
message: 'Type your search here',
|
|
316
|
+
description: 'The placeholder for search page input',
|
|
317
|
+
})}
|
|
318
|
+
aria-label={translate({
|
|
319
|
+
id: 'theme.SearchPage.inputLabel',
|
|
320
|
+
message: 'Search',
|
|
321
|
+
description: 'The ARIA label for search page input',
|
|
322
|
+
})}
|
|
323
|
+
onChange={(e) => setSearchQuery(e.target.value)}
|
|
324
|
+
value={searchQuery}
|
|
325
|
+
autoComplete="off"
|
|
326
|
+
autoFocus
|
|
327
|
+
/>
|
|
328
|
+
</div>
|
|
329
|
+
|
|
330
|
+
{docsSearchVersionsHelpers.versioningEnabled && (
|
|
331
|
+
<SearchVersionSelectList
|
|
332
|
+
docsSearchVersionsHelpers={docsSearchVersionsHelpers}
|
|
333
|
+
/>
|
|
334
|
+
)}
|
|
335
|
+
</form>
|
|
336
|
+
|
|
337
|
+
<div className="row">
|
|
338
|
+
<div className={clsx('col', 'col--8', styles.searchResultsColumn)}>
|
|
339
|
+
{!!searchResultState.totalResults
|
|
340
|
+
&& documentsFoundPlural(searchResultState.totalResults)}
|
|
341
|
+
</div>
|
|
342
|
+
|
|
343
|
+
<div
|
|
344
|
+
className={clsx(
|
|
345
|
+
'col',
|
|
346
|
+
'col--4',
|
|
347
|
+
'text--right',
|
|
348
|
+
styles.searchLogoColumn,
|
|
349
|
+
)}>
|
|
350
|
+
<a
|
|
351
|
+
target="_blank"
|
|
352
|
+
rel="noopener noreferrer"
|
|
353
|
+
href="https://www.algolia.com/"
|
|
354
|
+
aria-label={translate({
|
|
355
|
+
id: 'theme.SearchPage.algoliaLabel',
|
|
356
|
+
message: 'Search by Algolia',
|
|
357
|
+
description: 'The ARIA label for Algolia mention',
|
|
358
|
+
})}>
|
|
359
|
+
<svg viewBox="0 0 168 24" className={styles.algoliaLogo}>
|
|
360
|
+
<g fill="none">
|
|
361
|
+
<path
|
|
362
|
+
className={styles.algoliaLogoPathFill}
|
|
363
|
+
d="M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"
|
|
364
|
+
/>
|
|
365
|
+
<path
|
|
366
|
+
fill="#5468FF"
|
|
367
|
+
d="M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"
|
|
368
|
+
/>
|
|
369
|
+
<path
|
|
370
|
+
fill="white"
|
|
371
|
+
d="M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"
|
|
372
|
+
/>
|
|
373
|
+
</g>
|
|
374
|
+
</svg>
|
|
375
|
+
</a>
|
|
376
|
+
</div>
|
|
377
|
+
</div>
|
|
378
|
+
|
|
379
|
+
{searchResultState.items.length > 0 ? (
|
|
380
|
+
<main>
|
|
381
|
+
{searchResultState.items.map(
|
|
382
|
+
({ title, url, summary, breadcrumbs }, i) => (
|
|
383
|
+
<article key={i} className={styles.searchResultItem}>
|
|
384
|
+
<h2 className={styles.searchResultItemHeading}>
|
|
385
|
+
<Link to={url} dangerouslySetInnerHTML={{ __html: title }}/>
|
|
386
|
+
</h2>
|
|
387
|
+
|
|
388
|
+
{breadcrumbs.length > 0 && (
|
|
389
|
+
<nav aria-label="breadcrumbs">
|
|
390
|
+
<ul
|
|
391
|
+
className={clsx(
|
|
392
|
+
'breadcrumbs',
|
|
393
|
+
styles.searchResultItemPath,
|
|
394
|
+
)}>
|
|
395
|
+
{breadcrumbs.map((html, index) => (
|
|
396
|
+
<li
|
|
397
|
+
key={index}
|
|
398
|
+
className="breadcrumbs__item"
|
|
399
|
+
// Developer provided the HTML, so assume it's safe.
|
|
400
|
+
// eslint-disable-next-line react/no-danger
|
|
401
|
+
dangerouslySetInnerHTML={{ __html: html }}
|
|
402
|
+
/>
|
|
403
|
+
))}
|
|
404
|
+
</ul>
|
|
405
|
+
</nav>
|
|
406
|
+
)}
|
|
407
|
+
|
|
408
|
+
{summary && (
|
|
409
|
+
<p
|
|
410
|
+
className={styles.searchResultItemSummary}
|
|
411
|
+
// Developer provided the HTML, so assume it's safe.
|
|
412
|
+
// eslint-disable-next-line react/no-danger
|
|
413
|
+
dangerouslySetInnerHTML={{ __html: summary }}
|
|
414
|
+
/>
|
|
415
|
+
)}
|
|
416
|
+
</article>
|
|
417
|
+
),
|
|
418
|
+
)}
|
|
419
|
+
</main>
|
|
420
|
+
) : (
|
|
421
|
+
[
|
|
422
|
+
searchQuery && !searchResultState.loading && (
|
|
423
|
+
<p key="no-results">
|
|
424
|
+
<Translate
|
|
425
|
+
id="theme.SearchPage.noResultsText"
|
|
426
|
+
description="The paragraph for empty search result">
|
|
427
|
+
No results were found
|
|
428
|
+
</Translate>
|
|
429
|
+
</p>
|
|
430
|
+
),
|
|
431
|
+
!!searchResultState.loading && (
|
|
432
|
+
<div key="spinner" className={styles.loadingSpinner}/>
|
|
433
|
+
),
|
|
434
|
+
]
|
|
435
|
+
)}
|
|
436
|
+
|
|
437
|
+
{searchResultState.hasMore && (
|
|
438
|
+
<div className={styles.loader} ref={setLoaderRef}>
|
|
439
|
+
<Translate
|
|
440
|
+
id="theme.SearchPage.fetchingNewResults"
|
|
441
|
+
description="The paragraph for fetching new search results">
|
|
442
|
+
Fetching new results...
|
|
443
|
+
</Translate>
|
|
444
|
+
</div>
|
|
445
|
+
)}
|
|
446
|
+
</div>
|
|
447
|
+
</Layout>
|
|
448
|
+
);
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
export default function SearchPage() {
|
|
452
|
+
return (
|
|
453
|
+
<HtmlClassNameProvider className="search-page-wrapper">
|
|
454
|
+
<SearchPageContent/>
|
|
455
|
+
</HtmlClassNameProvider>
|
|
456
|
+
);
|
|
457
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
.searchQueryInput,
|
|
2
|
+
.searchVersionInput {
|
|
3
|
+
border-radius: var(--ifm-global-radius);
|
|
4
|
+
border: 2px solid var(--ifm-toc-border-color);
|
|
5
|
+
font: var(--ifm-font-size-base) var(--ifm-font-family-base);
|
|
6
|
+
padding: 0.8rem;
|
|
7
|
+
width: 100%;
|
|
8
|
+
background: var(--docsearch-searchbox-focus-background);
|
|
9
|
+
color: var(--docsearch-text-color);
|
|
10
|
+
margin-bottom: 0.5rem;
|
|
11
|
+
transition: border var(--ifm-transition-fast) ease;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.searchQueryInput:focus,
|
|
15
|
+
.searchVersionInput:focus {
|
|
16
|
+
border-color: var(--docsearch-primary-color);
|
|
17
|
+
outline: none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.searchQueryInput::placeholder {
|
|
21
|
+
color: var(--docsearch-muted-color);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.searchResultsColumn {
|
|
25
|
+
font-size: 0.9rem;
|
|
26
|
+
font-weight: bold;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.algoliaLogo {
|
|
30
|
+
max-width: 150px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.algoliaLogoPathFill {
|
|
34
|
+
fill: var(--ifm-font-color-base);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.searchResultItem {
|
|
38
|
+
padding: 1rem 0;
|
|
39
|
+
border-bottom: 1px solid var(--ifm-toc-border-color);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.searchResultItemHeading {
|
|
43
|
+
font-weight: 400;
|
|
44
|
+
margin-bottom: 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.searchResultItemPath {
|
|
48
|
+
font-size: 0.8rem;
|
|
49
|
+
color: var(--ifm-color-content-secondary);
|
|
50
|
+
--ifm-breadcrumb-separator-size-multiplier: 1;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.searchResultItemSummary {
|
|
54
|
+
margin: 0.5rem 0 0;
|
|
55
|
+
font-style: italic;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@media only screen and (max-width: 996px) {
|
|
59
|
+
.searchQueryColumn {
|
|
60
|
+
max-width: 60% !important;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.searchVersionColumn {
|
|
64
|
+
max-width: 40% !important;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.searchResultsColumn {
|
|
68
|
+
max-width: 60% !important;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.searchLogoColumn {
|
|
72
|
+
max-width: 40% !important;
|
|
73
|
+
padding-left: 0 !important;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@media screen and (max-width: 576px) {
|
|
78
|
+
.searchQueryColumn {
|
|
79
|
+
max-width: 100% !important;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.searchVersionColumn {
|
|
83
|
+
max-width: 100% !important;
|
|
84
|
+
padding-left: var(--ifm-spacing-horizontal) !important;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.loadingSpinner {
|
|
89
|
+
width: 3rem;
|
|
90
|
+
height: 3rem;
|
|
91
|
+
border: 0.4em solid #eee;
|
|
92
|
+
border-top-color: var(--ifm-color-primary);
|
|
93
|
+
border-radius: 50%;
|
|
94
|
+
animation: loading-spin 1s linear infinite;
|
|
95
|
+
margin: 0 auto;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@keyframes loading-spin {
|
|
99
|
+
100% {
|
|
100
|
+
transform: rotate(360deg);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.loader {
|
|
105
|
+
margin-top: 2rem;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
:global(.search-result-match) {
|
|
109
|
+
color: var(--docsearch-hit-color);
|
|
110
|
+
background: rgb(255 215 142 / 25%);
|
|
111
|
+
padding: 0.09em 0;
|
|
112
|
+
}
|