From a696f3b1bdc0e66ad075d3c48a88173155e166f8 Mon Sep 17 00:00:00 2001 From: Cell <1024@lruihao.cn> Date: Wed, 17 Jun 2026 01:45:50 +0800 Subject: [PATCH] refactor(search): refactor search module and upgrade autocomplete library (#787) --- .gitignore | 2 + CLAUDE.md | 1 + apps/demo/hugo.toml | 2 +- apps/test/content/posts/fontawesome-test.md | 3 + apps/test/hugo.toml | 2 +- assets/data/cdn/jsdelivr.yml | 5 +- assets/data/cdn/unpkg.yml | 5 +- assets/images/icons/arrow-down.svg | 1 + assets/images/icons/arrow-up.svg | 1 + assets/images/icons/enter-key.svg | 1 + assets/js/head/color-scheme.ts | 9 +- assets/js/head/index.ts | 10 + assets/js/head/platform.ts | 12 + assets/js/modules/search.ts | 344 ---------------- assets/js/modules/search/engines/algolia.ts | 87 ++++ assets/js/modules/search/engines/cse.ts | 30 ++ assets/js/modules/search/engines/fuse.ts | 67 ++++ .../modules/{ => search/engines}/pagefind.ts | 79 +--- assets/js/modules/search/index.ts | 262 ++++++++++++ assets/js/modules/search/types.ts | 17 + assets/js/types/config.ts | 2 + assets/js/types/ui.ts | 4 +- assets/js/utils/media.ts | 8 + .../lib/autocomplete-js/index.production.js | 2 + assets/lib/autocomplete/autocomplete.min.js | 7 - assets/lib/instant-page/instantpage.min.js | 1 - assets/scss/_variables.scss | 4 - assets/scss/core/_root.scss | 3 +- assets/scss/core/layouts/_footer.scss | 8 +- assets/scss/core/layouts/_header.scss | 267 +++---------- assets/scss/core/mixins/_compatibility.scss | 8 +- assets/scss/core/mixins/_theme-switch.scss | 9 +- assets/scss/pages/_404.scss | 2 +- assets/scss/pages/_home.scss | 12 +- assets/scss/pages/_offline.scss | 2 +- assets/scss/pages/_patch.scss | 6 +- assets/scss/pages/archives/_tags.scss | 2 +- assets/scss/pages/single/_base.scss | 4 +- assets/scss/pages/single/_code.scss | 15 +- assets/scss/pages/single/_collections.scss | 4 +- assets/scss/pages/single/_copy-icon-btn.scss | 8 +- assets/scss/pages/single/_footer.scss | 4 +- assets/scss/pages/single/_reward.scss | 2 +- assets/scss/pages/single/_toc.scss | 6 +- .../scss/pages/single/shortcodes/_tabs.scss | 4 +- .../pages/single/shortcodes/_timeline.scss | 10 +- assets/scss/pages/specials/_friends.scss | 2 +- assets/scss/widgets/_details.scss | 2 +- assets/scss/widgets/_fixed-button.scss | 2 +- assets/scss/widgets/_index.scss | 1 + assets/scss/widgets/_link-guard.scss | 12 +- assets/scss/widgets/_search-modal.scss | 376 ++++++++++++++++++ .../widgets/third-party/_github-corner.scss | 8 +- hugo.toml | 8 +- i18n/de.toml | 4 + i18n/en.toml | 4 + i18n/es.toml | 4 + i18n/fr.toml | 4 + i18n/hi.toml | 4 + i18n/it.toml | 4 + i18n/ja.toml | 4 + i18n/ko.toml | 4 + i18n/pl.toml | 4 + i18n/pt-BR.toml | 4 + i18n/ro.toml | 4 + i18n/ru.toml | 4 + i18n/sr.toml | 4 + i18n/vi.toml | 4 + i18n/zh-CN.toml | 4 + i18n/zh-TW.toml | 4 + layouts/_partials/base/assets.html | 10 +- layouts/_partials/base/head/index.html | 8 +- layouts/_partials/base/header.html | 48 +-- layouts/_partials/base/widgets.html | 47 ++- layouts/posts/single.html | 2 +- librarybot.yml | 6 + 76 files changed, 1172 insertions(+), 768 deletions(-) create mode 100644 assets/images/icons/arrow-down.svg create mode 100644 assets/images/icons/arrow-up.svg create mode 100644 assets/images/icons/enter-key.svg create mode 100644 assets/js/head/index.ts create mode 100644 assets/js/head/platform.ts delete mode 100644 assets/js/modules/search.ts create mode 100644 assets/js/modules/search/engines/algolia.ts create mode 100644 assets/js/modules/search/engines/cse.ts create mode 100644 assets/js/modules/search/engines/fuse.ts rename assets/js/modules/{ => search/engines}/pagefind.ts (60%) create mode 100644 assets/js/modules/search/index.ts create mode 100644 assets/js/modules/search/types.ts create mode 100644 assets/lib/autocomplete-js/index.production.js delete mode 100644 assets/lib/autocomplete/autocomplete.min.js create mode 100644 assets/scss/widgets/_search-modal.scss diff --git a/.gitignore b/.gitignore index db27d541..b85bd162 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,8 @@ node_modules/ # Claude .claude/ +CLAUDE.local.md +.codegraph/ # Vercel .vercel/ diff --git a/CLAUDE.md b/CLAUDE.md index 414d64d7..1281405c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -126,6 +126,7 @@ Hugo Pipes processes all assets. The key orchestration is in `_partials/base/ass - Use `partialCached` for expensive partials that don't change per page - Use `.Site.Store` for shared computed values (e.g. fingerprint) - Check `hugo.IsProduction` before adding analytics or minification +- Minimize `id` attribute usage — prefer class selectors for styling and JS queries. Reserve `id` for: `