diff --git a/examples/sites/package.json b/examples/sites/package.json index 76d6f91a3a..2512878f2b 100644 --- a/examples/sites/package.json +++ b/examples/sites/package.json @@ -1,6 +1,6 @@ { "name": "@opentiny/vue-docs", - "version": "3.20.3", + "version": "3.20.5", "license": "MIT", "scripts": { "start": "vite", @@ -49,7 +49,8 @@ "vue-i18n": "^9.1.10", "vue-router": "4.1.5", "@docsearch/js": "^3.8.0", - "@docsearch/css": "^3.8.0" + "@docsearch/css": "^3.8.0", + "@docsearch/react": "npm:@docsearch/css" }, "devDependencies": { "@opentiny-internal/unplugin-virtual-template": "workspace:~", diff --git a/examples/sites/src/main.js b/examples/sites/src/main.js index 75b2342c0b..9f0672a1b8 100644 --- a/examples/sites/src/main.js +++ b/examples/sites/src/main.js @@ -33,6 +33,7 @@ import css from 'highlight.js/lib/languages/css' import html from 'highlight.js/lib/languages/xml' import docsearch from '@docsearch/js' import '@docsearch/css' +import { doSearchEverySite } from './tools/docsearch' const envTarget = import.meta.env.VITE_BUILD_TARGET || 'open' @@ -40,14 +41,17 @@ hljs.registerLanguage('javascript', javascript) hljs.registerLanguage('css', css) hljs.registerLanguage('html', html) -if (envTarget === 'open') { - docsearch({ - appId: 'AGPA5UXHMH', - apiKey: '5fa09fc20270efa61d68e2c2eb0f56df', - indexName: 'opentiny', - container: '.search-box', - debug: false - }) +docsearch({ + appId: 'AGPA5UXHMH', + apiKey: '5fa09fc20270efa61d68e2c2eb0f56df', + indexName: 'opentiny', + container: '.search-box', + debug: false +}) + +if (envTarget !== 'open') { + // 支持本地开发和内网使用全局搜索 + doSearchEverySite() } // 实验后发现,先调用一次预热一下,后续再调用会有速度的提示,因此在main中预热一下。 diff --git a/examples/sites/src/tools/docsearch.js b/examples/sites/src/tools/docsearch.js new file mode 100644 index 0000000000..d08bb4715e --- /dev/null +++ b/examples/sites/src/tools/docsearch.js @@ -0,0 +1,26 @@ +const HIT_CLASS = 'DocSearch-Hit' + +const findUrlLink = (target) => { + if (target?.nodeName?.toLocaleLowerCase?.() === 'a') { + return target.getAttribute('href') + } else if (target?.parentElement) { + return findUrlLink(target.parentElement) + } +} + +const isAlgoliaHitDom = (dom) => + dom?.className?.includes?.(HIT_CLASS) || dom?.parentElement?.className?.includes?.(HIT_CLASS) + +export const doSearchEverySite = () => { + window.addEventListener('click', (event) => { + const target = event.target + if (isAlgoliaHitDom(target)) { + const openUrl = findUrlLink(target) + if (openUrl) { + const urlObj = new URL(openUrl) + event.preventDefault() + window.location.href = openUrl.replace(urlObj.origin, window.location.origin) + } + } + }) +}