czon 0.7.2 → 0.7.3

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.
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ContentPage = void 0;
7
7
  const node_path_1 = require("node:path");
8
8
  const react_1 = __importDefault(require("react"));
9
+ const Analytics_1 = require("./components/Analytics");
9
10
  const ContentMeta_1 = require("./components/ContentMeta");
10
11
  const CZONFooter_1 = require("./components/CZONFooter");
11
12
  const CZONHeader_1 = require("./components/CZONHeader");
@@ -33,6 +34,7 @@ const ContentPage = props => {
33
34
  react_1.default.createElement("title", null, title),
34
35
  react_1.default.createElement("link", { rel: "icon", href: faviconUrl, type: "image/x-icon" }),
35
36
  react_1.default.createElement("meta", { name: "description", content: `tags: ${tags.join(', ')}` }),
37
+ react_1.default.createElement(Analytics_1.Analytics, { ctx: props.ctx }),
36
38
  react_1.default.createElement("script", { src: (0, resourceMap_1.getResourceUrlFrom)(props.ctx.path, 'tailwindcss.js') }),
37
39
  react_1.default.createElement("style", null, style_1.style),
38
40
  react_1.default.createElement("script", { dangerouslySetInnerHTML: {
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.IndexPage = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const sortBy_1 = require("../utils/sortBy");
9
+ const Analytics_1 = require("./components/Analytics");
9
10
  const ContentMeta_1 = require("./components/ContentMeta");
10
11
  const CZONFooter_1 = require("./components/CZONFooter");
11
12
  const CZONHeader_1 = require("./components/CZONHeader");
@@ -29,6 +30,7 @@ const IndexPage = props => {
29
30
  react_1.default.createElement("link", { rel: "icon", href: faviconUrl, type: "image/x-icon" }),
30
31
  react_1.default.createElement("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }),
31
32
  react_1.default.createElement("meta", { name: "description", content: `Index page for language ${props.lang}` }),
33
+ react_1.default.createElement(Analytics_1.Analytics, { ctx: props.ctx }),
32
34
  react_1.default.createElement("script", { src: (0, resourceMap_1.getResourceUrlFrom)(props.ctx.path, 'tailwindcss.js') }),
33
35
  react_1.default.createElement("style", null, style_1.style),
34
36
  react_1.default.createElement("script", { dangerouslySetInnerHTML: {
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.RootPage = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const languages_1 = require("../languages");
9
+ const Analytics_1 = require("./components/Analytics");
9
10
  const resourceMap_1 = require("./resourceMap");
10
11
  // /index.html 的根页面
11
12
  // 需要实现多语言选择,自动重定向到用户浏览器语言对应的首页
@@ -27,6 +28,7 @@ const RootPage = props => {
27
28
  react_1.default.createElement("title", null, "CZON Multilingual Site Navigator"),
28
29
  react_1.default.createElement("link", { rel: "icon", href: faviconUrl, type: "image/x-icon" }),
29
30
  react_1.default.createElement("meta", { name: "description", content: "Select your preferred language to explore our content." }),
31
+ react_1.default.createElement(Analytics_1.Analytics, { ctx: props.ctx }),
30
32
  props.ctx.site.options.langs.map(lang => (react_1.default.createElement("link", { key: lang, rel: "alternate", hrefLang: lang, href: `${lang}/index.html` }))),
31
33
  react_1.default.createElement("link", { rel: "alternate", hrefLang: "x-default", href: `${props.ctx.site.options.langs[0]}/index.html` }),
32
34
  react_1.default.createElement("script", { dangerouslySetInnerHTML: {
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Analytics = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ /**
9
+ * Google Analytics and Microsoft Clarity integration component.
10
+ * Renders tracking scripts in <head> when IDs are configured.
11
+ */
12
+ const Analytics = ({ ctx }) => {
13
+ const gaID = ctx.site.options.site?.gaID;
14
+ const clarityID = ctx.site.options.site?.clarityID;
15
+ if (!gaID && !clarityID) {
16
+ return null;
17
+ }
18
+ return (react_1.default.createElement(react_1.default.Fragment, null,
19
+ gaID && (react_1.default.createElement(react_1.default.Fragment, null,
20
+ react_1.default.createElement("script", { async: true, src: `https://www.googletagmanager.com/gtag/js?id=${gaID}` }),
21
+ react_1.default.createElement("script", { dangerouslySetInnerHTML: {
22
+ __html: `
23
+ window.dataLayer = window.dataLayer || [];
24
+ function gtag(){dataLayer.push(arguments);}
25
+ gtag('js', new Date());
26
+ gtag('config', '${gaID}');
27
+ `,
28
+ } }))),
29
+ clarityID && (react_1.default.createElement("script", { dangerouslySetInnerHTML: {
30
+ __html: `
31
+ (function(c,l,a,r,i,t,y){
32
+ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
33
+ t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
34
+ y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
35
+ })(window, document, "clarity", "script", "${clarityID}");
36
+ `,
37
+ } }))));
38
+ };
39
+ exports.Analytics = Analytics;
40
+ //# sourceMappingURL=Analytics.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "czon",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "CZON - AI enhanced Markdown content engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",