diff --git a/README.md b/README.md index 4357fa0..9090136 100644 --- a/README.md +++ b/README.md @@ -114,8 +114,10 @@ defaultContentLanguageInSubdir = true # Note: Max latest posts shown on the homepage; shows “View more posts” when exceeded. recentPostsLimit = 4 [params.analytics] - # Note: Umami analytics; replace with your own script URL and site ID. Leave empty to skip loading. - [params.analytics.umami] + # Note: Analytics provider name (required unless only one provider exists under `providers`). + provider = 'umami' + # Note: Umami analytics provider config; replace with your own script URL and site ID. Leave empty to skip loading. + [params.analytics.providers.umami] scriptUrl = 'https://umami.example.com/script.js' websiteId = '5b14b1a3-b5c6-4961-b1a8-32c1819069f8' # dataHost = 'https://umami.example.com' # Optional: override data-host. @@ -207,5 +209,6 @@ hugo --minify - `params.theme.defaultMode`: `auto` / `light` / `dark`. - `params.theme.defaultGlassStrength`: `soft` / `balanced` / `bold`. - `params.theme.defaultReaderWidth` or `params.theme.defaultReaderWidthValue`: Width preset or custom rem value (custom overrides preset). -- `params.analytics.umami.scriptUrl` / `params.analytics.umami.websiteId`: Enable Umami tracking; optional `dataHost`/`dataDomains` to control reporting hosts/domains. -- `params.analytics.umami.blockNotice`: Detect blocked Umami requests and surface a dismissible edge banner. +- `params.analytics.provider`: Analytics provider name (e.g. `umami`). +- `params.analytics.providers.umami.scriptUrl` / `params.analytics.providers.umami.websiteId`: Enable Umami tracking; optional `dataHost`/`dataDomains` to control reporting hosts/domains. +- `params.analytics.providers.umami.blockNotice`: Detect blocked Umami requests and surface a dismissible edge banner. diff --git a/README.zh-Hans.md b/README.zh-Hans.md index 7da206b..b5e276d 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -106,8 +106,10 @@ defaultContentLanguageInSubdir = true [params.home] recentPostsLimit = 4 # 说明:主页展示的最新文章数量上限,超出时显示“查看更多文章”按钮。 [params.analytics] - # 说明:Umami 统计脚本配置,替换为自己的部署地址与 site id;留空则不输出脚本。 - [params.analytics.umami] + # 说明:统计 provider 名称(建议显式填写;若 providers 下仅配置 1 个 provider,可省略)。 + provider = 'umami' + # 说明:Umami 统计 provider 配置,替换为自己的部署地址与 site id;留空则不输出脚本。 + [params.analytics.providers.umami] scriptUrl = 'https://umami.example.com/script.js' websiteId = '5b14b1a3-b5c6-4961-b1a8-32c1819069f8' # dataHost = 'https://umami.example.com' # 可选:自定义 data-host。 @@ -197,5 +199,6 @@ hugo --minify - `params.theme.defaultMode`:`auto` / `light` / `dark`。 - `params.theme.defaultGlassStrength`:`soft` / `balanced` / `bold`。 - `params.theme.defaultReaderWidth` 或 `params.theme.defaultReaderWidthValue`:阅读区宽度预设或自定义 rem 值(自定义优先)。 -- `params.analytics.umami.scriptUrl` / `params.analytics.umami.websiteId`:Umami 统计脚本的地址与站点 ID,可选 `dataHost` / `dataDomains` 控制上报域名。 -- `params.analytics.umami.blockNotice`:检测统计脚本被拦截时显示贴边提示,可永久忽略。 +- `params.analytics.provider`:统计 provider 名称(例如 `umami`)。 +- `params.analytics.providers.umami.scriptUrl` / `params.analytics.providers.umami.websiteId`:Umami 统计脚本的地址与站点 ID,可选 `dataHost` / `dataDomains` 控制上报域名。 +- `params.analytics.providers.umami.blockNotice`:检测统计脚本被拦截时显示贴边提示,可永久忽略。 diff --git a/assets/js/analytics.js b/assets/js/analytics.js new file mode 100644 index 0000000..1795bc3 --- /dev/null +++ b/assets/js/analytics.js @@ -0,0 +1,8 @@ +import { setupUmamiBlockNotice } from './umami-block-notice.js'; + +// 说明:Analytics provider 初始化入口。 +// 用途:集中挂载各 provider 的前端增强逻辑;未启用的 provider 会在内部自行 no-op。 +export const setupAnalytics = () => { + setupUmamiBlockNotice(); +}; + diff --git a/assets/js/main.js b/assets/js/main.js index 764f067..6d386b8 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -2,7 +2,7 @@ import { setupAppNavigation } from './app-navigation.js'; import { setupSettingsPanel } from './settings-panel.js'; import { setupCodeBlocks } from './code-blocks.js'; import { setupArticleOutline } from './article-outline.js'; -import { setupUmamiBlockNotice } from './umami-block-notice.js'; +import { setupAnalytics } from './analytics.js'; import { setupPagesMenu } from './pages-menu.js'; // 说明:集中触发初始化逻辑,确保各个组件在 DOM 就绪后挂载事件。 @@ -12,7 +12,7 @@ const bootstrap = () => { setupSettingsPanel(); setupCodeBlocks(); setupArticleOutline(); - setupUmamiBlockNotice(); + setupAnalytics(); }; if (document.readyState === 'loading') { diff --git a/layouts/partials/analytics-block-notice.html b/layouts/partials/analytics-block-notice.html index 61d65b1..a43d4c9 100644 --- a/layouts/partials/analytics-block-notice.html +++ b/layouts/partials/analytics-block-notice.html @@ -1,95 +1,30 @@ -{{- with site.Params.analytics }} - {{- with .umami }} - {{- $src := or .scriptURL .scriptUrl -}} - {{- $websiteId := .websiteId -}} - {{- $blockNotice := default false .blockNotice -}} - {{- if and $src $websiteId $blockNotice }} - {{/* 说明:Umami 拦截检测提示条,占位元素默认隐藏,待 JS 判定后再显式展示。 */}} -
{{ i18n "umamiBlockedDialogGreeting" }}
-{{ i18n "umamiBlockedDialogIntro" }}
-{{ i18n "umamiBlockedDialogBlocked" }}
-{{ i18n "umamiBlockedDialogCauses" }}
-{{ i18n "umamiBlockedDialogRequest" }}
-{{ i18n "umamiBlockedDialogGuides" }}
-{{ i18n "umamiBlockedDialogFooter" }}
-{{ i18n "umamiBlockedDialogGreeting" }}
+{{ i18n "umamiBlockedDialogIntro" }}
+{{ i18n "umamiBlockedDialogBlocked" }}
+{{ i18n "umamiBlockedDialogCauses" }}
+{{ i18n "umamiBlockedDialogRequest" }}
+{{ i18n "umamiBlockedDialogGuides" }}
+{{ i18n "umamiBlockedDialogFooter" }}
+