@@ -34,17 +34,20 @@ if (typeof window !== 'undefined') {
3434function parsePath ( pathname ) {
3535 const path = pathname . startsWith ( BASE_PATH ) ? pathname . slice ( BASE_PATH . length ) . replace ( / \/ $ / , '' ) : pathname . replace ( / ^ \/ / , '' ) . replace ( / \/ $ / , '' ) ;
3636
37- // Home page
37+ // Site-wide pages — all dimensions carry the page name
3838 if ( ! path ) {
39- return { page_type : 'home' } ;
39+ return { page_type : 'home' , doc_category : 'home' , doc_product : 'home' , doc_type : 'home' , doc_version : 'home' , doc_page : 'home' , doc_path : 'home' } ;
4040 }
4141
42- // Changelog
4342 if ( path === 'changelog' ) {
44- return { page_type : 'changelog' } ;
43+ return { page_type : 'changelog' , doc_category : 'changelog' , doc_product : 'changelog' , doc_type : 'changelog' , doc_version : 'changelog' , doc_page : 'changelog' , doc_path : 'changelog' } ;
4544 }
4645
47- // Documentation pages: docs/{category}/{product}/{doc_type}/v{X}.{Y}/{page}
46+ if ( path === 'feedback' ) {
47+ return { page_type : 'feedback' , doc_category : 'feedback' , doc_product : 'feedback' , doc_type : 'feedback' , doc_version : 'feedback' , doc_page : 'feedback' , doc_path : 'feedback' } ;
48+ }
49+
50+ // Versioned documentation pages: docs/{category}/{product}/{doc_type}/v{X}.{Y}/{page}
4851 if ( path . startsWith ( 'docs/' ) ) {
4952 const segments = path . replace ( / ^ d o c s \/ / , '' ) . split ( '/' ) ;
5053 const versionIdx = segments . findIndex ( ( s ) => / ^ v \d + \. \d + / . test ( s ) ) ;
@@ -57,18 +60,43 @@ function parsePath(pathname) {
5760 const doc_page = segments . slice ( versionIdx + 1 ) . join ( '/' ) || '(index)' ;
5861 const doc_path = segments . slice ( 0 , versionIdx + 1 ) . join ( '/' ) ;
5962
60- // Lookup key for latestVersions.json: everything before the version
6163 const lookupKey = segments . slice ( 0 , versionIdx ) . join ( '/' ) ;
6264 const latest = latestVersions ?. [ lookupKey ] ;
6365 const is_latest_version = latest ? ( latest === doc_version ? 'true' : 'false' ) : 'unknown' ;
6466
6567 return { page_type : 'doc_page' , doc_category : category , doc_product : product , doc_type, doc_version, doc_page, doc_path, is_latest_version } ;
6668 }
6769
68- return { page_type : 'docs_index' } ;
70+ // Dev docs: docs/dev/{product...}/{page} — no version segment
71+ if ( segments [ 0 ] === 'dev' && segments . length >= 2 ) {
72+ const product = segments . slice ( 1 , - 1 ) . join ( '/' ) || segments [ 1 ] ;
73+ const doc_page = segments [ segments . length - 1 ] ;
74+ const doc_path = 'dev/' + segments . slice ( 1 , - 1 ) . join ( '/' ) ;
75+
76+ return { page_type : 'dev-page' , doc_category : 'dev' , doc_product : product , doc_type : product , doc_version : product , doc_page, doc_path } ;
77+ }
78+
79+ // Fallback for any other docs/ path
80+ const doc_path = segments . join ( '/' ) ;
81+ return { page_type : 'docs-other' , doc_category : segments [ 0 ] , doc_product : doc_path , doc_type : doc_path , doc_version : doc_path , doc_page : doc_path , doc_path } ;
82+ }
83+
84+ // Category hub pages: /desktop-applications, /web-applications, /toolboxes, /dev
85+ const hubSegments = path . split ( '/' ) ;
86+ if ( hubSegments . length === 1 ) {
87+ const name = hubSegments [ 0 ] ;
88+ return { page_type : 'hub' , doc_category : name , doc_product : name , doc_type : name , doc_version : name , doc_page : name , doc_path : name } ;
89+ }
90+
91+ // Product hub pages: /desktop-applications/lifesim, /toolboxes/internal-erosion-suite, etc.
92+ if ( hubSegments . length === 2 ) {
93+ const category = hubSegments [ 0 ] ;
94+ const product = hubSegments [ 1 ] ;
95+ return { page_type : 'product-hub' , doc_category : category , doc_product : product , doc_type : product , doc_version : product , doc_page : product , doc_path : category + '/' + product } ;
6996 }
7097
71- return { page_type : 'other' } ;
98+ // Catch-all for any other page
99+ return { page_type : 'other' , doc_category : path , doc_product : path , doc_type : path , doc_version : path , doc_page : path , doc_path : path } ;
72100}
73101
74102// ── Page view tracking (Docusaurus onRouteDidUpdate hook) ───────────
@@ -81,13 +109,13 @@ export function onRouteDidUpdate({ location }) {
81109
82110 window . gtag ( 'event' , 'doc_page_view' , {
83111 page_type : dims . page_type ,
84- doc_category : dims . doc_category || undefined ,
85- doc_product : dims . doc_product || undefined ,
86- doc_type : dims . doc_type || undefined ,
87- doc_version : dims . doc_version || undefined ,
88- doc_page : dims . doc_page || undefined ,
89- doc_path : dims . doc_path || undefined ,
90- is_latest_version : dims . is_latest_version || undefined ,
112+ doc_category : dims . doc_category ,
113+ doc_product : dims . doc_product ,
114+ doc_type : dims . doc_type ,
115+ doc_version : dims . doc_version ,
116+ doc_page : dims . doc_page ,
117+ doc_path : dims . doc_path ,
118+ is_latest_version : dims . is_latest_version || 'n/a' ,
91119 page_title : document . title ,
92120 } ) ;
93121 } ) ;
0 commit comments