@autocode-cli/autocode 0.2.1 → 0.3.1
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.
- package/dist/server/dashboard/pages/autocreate.js +3 -3
- package/dist/server/dashboard/pages/changelog.d.ts.map +1 -1
- package/dist/server/dashboard/pages/changelog.js +20 -11
- package/dist/server/dashboard/pages/changelog.js.map +1 -1
- package/dist/server/dashboard/pages/column-edit.js +2 -2
- package/dist/server/dashboard/pages/column-prompt.d.ts.map +1 -1
- package/dist/server/dashboard/pages/column-prompt.js +21 -0
- package/dist/server/dashboard/pages/column-prompt.js.map +1 -1
- package/dist/server/dashboard/pages/column-terminal.d.ts.map +1 -1
- package/dist/server/dashboard/pages/column-terminal.js +21 -0
- package/dist/server/dashboard/pages/column-terminal.js.map +1 -1
- package/dist/server/dashboard/pages/issue-graph.d.ts.map +1 -1
- package/dist/server/dashboard/pages/issue-graph.js +70 -22
- package/dist/server/dashboard/pages/issue-graph.js.map +1 -1
- package/dist/server/dashboard/pages/issue-shared.d.ts.map +1 -1
- package/dist/server/dashboard/pages/issue-shared.js +54 -122
- package/dist/server/dashboard/pages/issue-shared.js.map +1 -1
- package/dist/server/dashboard/pages/issue-view.js +1 -1
- package/dist/server/dashboard/pages/new-issue.d.ts.map +1 -1
- package/dist/server/dashboard/pages/new-issue.js +34 -128
- package/dist/server/dashboard/pages/new-issue.js.map +1 -1
- package/dist/server/dashboard/pages/pipeline-configurator.d.ts.map +1 -1
- package/dist/server/dashboard/pages/pipeline-configurator.js +39 -183
- package/dist/server/dashboard/pages/pipeline-configurator.js.map +1 -1
- package/dist/server/dashboard/pages/stats-page.d.ts.map +1 -1
- package/dist/server/dashboard/pages/stats-page.js +43 -109
- package/dist/server/dashboard/pages/stats-page.js.map +1 -1
- package/dist/server/dashboard/scripts/index.d.ts.map +1 -1
- package/dist/server/dashboard/scripts/index.js +48 -253
- package/dist/server/dashboard/scripts/index.js.map +1 -1
- package/dist/server/dashboard/shared/header.d.ts +88 -0
- package/dist/server/dashboard/shared/header.d.ts.map +1 -0
- package/dist/server/dashboard/shared/header.js +209 -0
- package/dist/server/dashboard/shared/header.js.map +1 -0
- package/dist/server/dashboard/shared/i18n-script.d.ts +45 -0
- package/dist/server/dashboard/shared/i18n-script.d.ts.map +1 -0
- package/dist/server/dashboard/shared/i18n-script.js +204 -0
- package/dist/server/dashboard/shared/i18n-script.js.map +1 -0
- package/dist/server/dashboard/shared/index.d.ts +19 -0
- package/dist/server/dashboard/shared/index.d.ts.map +1 -0
- package/dist/server/dashboard/shared/index.js +22 -0
- package/dist/server/dashboard/shared/index.js.map +1 -0
- package/dist/server/dashboard/shared/translations.d.ts +515 -0
- package/dist/server/dashboard/shared/translations.d.ts.map +1 -0
- package/dist/server/dashboard/shared/translations.js +591 -0
- package/dist/server/dashboard/shared/translations.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized header component generator
|
|
3
|
+
*
|
|
4
|
+
* This module generates the header HTML for all dashboard pages.
|
|
5
|
+
* It includes the language switcher and preserves all dashboard functionality.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Configuration for the header component
|
|
9
|
+
*/
|
|
10
|
+
export interface HeaderConfig {
|
|
11
|
+
/**
|
|
12
|
+
* Page type determines the header layout
|
|
13
|
+
*/
|
|
14
|
+
pageType: 'dashboard' | 'issue' | 'settings' | 'stats' | 'changelog' | 'graph' | 'terminal' | 'new-issue' | 'column';
|
|
15
|
+
/**
|
|
16
|
+
* Static title text
|
|
17
|
+
*/
|
|
18
|
+
title?: string;
|
|
19
|
+
/**
|
|
20
|
+
* i18n key for the title (uses data-i18n attribute)
|
|
21
|
+
*/
|
|
22
|
+
titleKey?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Back link configuration
|
|
25
|
+
*/
|
|
26
|
+
backLink?: {
|
|
27
|
+
href: string;
|
|
28
|
+
label?: string;
|
|
29
|
+
labelKey?: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Issue-specific header info (for issue pages)
|
|
33
|
+
*/
|
|
34
|
+
issueInfo?: {
|
|
35
|
+
issueKey: string;
|
|
36
|
+
title: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Column-specific header info (for column pages)
|
|
40
|
+
*/
|
|
41
|
+
columnInfo?: {
|
|
42
|
+
issueKey: string;
|
|
43
|
+
columnSlug: string;
|
|
44
|
+
pageTitle: string;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Show the logo and title section (dashboard only)
|
|
48
|
+
*/
|
|
49
|
+
showLogo?: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Show navigation icons (Graph, Configurator) (dashboard only)
|
|
52
|
+
*/
|
|
53
|
+
showNavIcons?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Show the stats bar (dashboard only)
|
|
56
|
+
*/
|
|
57
|
+
showStats?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Show filters (priority select, search) (dashboard only)
|
|
60
|
+
*/
|
|
61
|
+
showFilters?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Show the "New issue" button (dashboard only)
|
|
64
|
+
*/
|
|
65
|
+
showNewIssueButton?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Custom content to add at the right side of the header
|
|
68
|
+
*/
|
|
69
|
+
customRight?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generate the language switcher HTML
|
|
73
|
+
* This is included in ALL headers
|
|
74
|
+
*/
|
|
75
|
+
export declare function generateLangSwitcher(): string;
|
|
76
|
+
/**
|
|
77
|
+
* Generate the header HTML based on configuration
|
|
78
|
+
*/
|
|
79
|
+
export declare function generateHeader(config: HeaderConfig): string;
|
|
80
|
+
/**
|
|
81
|
+
* Generate the stats page header
|
|
82
|
+
*/
|
|
83
|
+
export declare function generateStatsHeader(): string;
|
|
84
|
+
/**
|
|
85
|
+
* Generate the changelog page header
|
|
86
|
+
*/
|
|
87
|
+
export declare function generateChangelogHeader(lang: 'en' | 'fr'): string;
|
|
88
|
+
//# sourceMappingURL=header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../src/server/dashboard/shared/header.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,EACJ,WAAW,GACX,OAAO,GACP,UAAU,GACV,OAAO,GACP,WAAW,GACX,OAAO,GACP,UAAU,GACV,WAAW,GACX,QAAQ,CAAC;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;OAEG;IACH,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAMF;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAuB3D;AAiJD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAU5C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAWjE"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized header component generator
|
|
3
|
+
*
|
|
4
|
+
* This module generates the header HTML for all dashboard pages.
|
|
5
|
+
* It includes the language switcher and preserves all dashboard functionality.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Escape HTML special characters
|
|
9
|
+
*/
|
|
10
|
+
function escapeHtml(text) {
|
|
11
|
+
if (!text)
|
|
12
|
+
return '';
|
|
13
|
+
return text
|
|
14
|
+
.replace(/&/g, '&')
|
|
15
|
+
.replace(/</g, '<')
|
|
16
|
+
.replace(/>/g, '>')
|
|
17
|
+
.replace(/"/g, '"')
|
|
18
|
+
.replace(/'/g, ''');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generate the language switcher HTML
|
|
22
|
+
* This is included in ALL headers
|
|
23
|
+
*/
|
|
24
|
+
export function generateLangSwitcher() {
|
|
25
|
+
return `
|
|
26
|
+
<div class="lang-switcher" id="lang-switcher">
|
|
27
|
+
<button class="lang-btn" data-lang="en">EN</button>
|
|
28
|
+
<button class="lang-btn" data-lang="fr">FR</button>
|
|
29
|
+
</div>
|
|
30
|
+
`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generate the header HTML based on configuration
|
|
34
|
+
*/
|
|
35
|
+
export function generateHeader(config) {
|
|
36
|
+
switch (config.pageType) {
|
|
37
|
+
case 'dashboard':
|
|
38
|
+
return generateDashboardHeader(config);
|
|
39
|
+
case 'issue':
|
|
40
|
+
return generateIssueHeader(config);
|
|
41
|
+
case 'stats':
|
|
42
|
+
return generateSimpleHeader(config);
|
|
43
|
+
case 'changelog':
|
|
44
|
+
return generateSimpleHeader(config);
|
|
45
|
+
case 'graph':
|
|
46
|
+
return generateGraphHeader(config);
|
|
47
|
+
case 'new-issue':
|
|
48
|
+
return generateSimpleHeader(config);
|
|
49
|
+
case 'settings':
|
|
50
|
+
return generateSimpleHeader(config);
|
|
51
|
+
case 'terminal':
|
|
52
|
+
return generateSimpleHeader(config);
|
|
53
|
+
case 'column':
|
|
54
|
+
return generateColumnHeader(config);
|
|
55
|
+
default:
|
|
56
|
+
return generateSimpleHeader(config);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Generate the main dashboard header with all features
|
|
61
|
+
*/
|
|
62
|
+
function generateDashboardHeader(config) {
|
|
63
|
+
const logoSection = `
|
|
64
|
+
<div class="header-logo">
|
|
65
|
+
<a href="/" class="logo-link"><span>⚡</span> AutoCode</a>
|
|
66
|
+
<span class="header-title">Dashboard</span>
|
|
67
|
+
<a href="/issues/graph" class="header-icon-link" title="Issues Graph">🔀</a>
|
|
68
|
+
<a href="/settings/pipeline/configurator" class="header-icon-link" title="Pipeline Configurator">⚙️</a>
|
|
69
|
+
</div>
|
|
70
|
+
`;
|
|
71
|
+
const statsSection = config.showStats !== false ? '<div class="stats" id="stats"></div>' : '';
|
|
72
|
+
const filtersSection = config.showFilters !== false
|
|
73
|
+
? `
|
|
74
|
+
<div class="filters">
|
|
75
|
+
<select id="filter-priority">
|
|
76
|
+
<option value="" data-i18n="filter.allPriorities">All priorities</option>
|
|
77
|
+
<option value="P0">P0</option>
|
|
78
|
+
<option value="P1">P1</option>
|
|
79
|
+
<option value="P2">P2</option>
|
|
80
|
+
<option value="P3">P3</option>
|
|
81
|
+
</select>
|
|
82
|
+
<input type="text" id="filter-search" placeholder="Search..." data-i18n-placeholder="filter.search">
|
|
83
|
+
${generateLangSwitcher()}
|
|
84
|
+
<a href="/issue/new" class="btn btn-primary" data-i18n="btn.newIssue">+ New issue</a>
|
|
85
|
+
</div>
|
|
86
|
+
`
|
|
87
|
+
: generateLangSwitcher();
|
|
88
|
+
return `
|
|
89
|
+
<header>
|
|
90
|
+
${logoSection}
|
|
91
|
+
${statsSection}
|
|
92
|
+
${filtersSection}
|
|
93
|
+
</header>
|
|
94
|
+
`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Generate the issue page header
|
|
98
|
+
*/
|
|
99
|
+
function generateIssueHeader(config) {
|
|
100
|
+
const backLink = config.backLink || { href: '/', label: 'Dashboard' };
|
|
101
|
+
const backLinkHtml = `<a href="${backLink.href}" class="back-btn">← ${escapeHtml(backLink.label || 'Dashboard')}</a>`;
|
|
102
|
+
const issueInfoHtml = config.issueInfo
|
|
103
|
+
? `
|
|
104
|
+
<div class="issue-header-info">
|
|
105
|
+
<span class="issue-key">${escapeHtml(config.issueInfo.issueKey)}</span>
|
|
106
|
+
<span class="issue-title">${escapeHtml(config.issueInfo.title)}</span>
|
|
107
|
+
</div>
|
|
108
|
+
`
|
|
109
|
+
: '';
|
|
110
|
+
return `
|
|
111
|
+
<header class="header">
|
|
112
|
+
${backLinkHtml}
|
|
113
|
+
${issueInfoHtml}
|
|
114
|
+
${generateLangSwitcher()}
|
|
115
|
+
</header>
|
|
116
|
+
`;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Generate a simple header with back link, title, and lang switcher
|
|
120
|
+
*/
|
|
121
|
+
function generateSimpleHeader(config) {
|
|
122
|
+
const backLinkHtml = config.backLink
|
|
123
|
+
? `<a href="${config.backLink.href}" class="back-btn"${config.backLink.labelKey ? ` data-i18n="${config.backLink.labelKey}"` : ''}>← ${escapeHtml(config.backLink.label || 'Back')}</a>`
|
|
124
|
+
: '';
|
|
125
|
+
const titleHtml = config.title
|
|
126
|
+
? `<h1 class="title"${config.titleKey ? ` data-i18n="${config.titleKey}"` : ''}>${escapeHtml(config.title)}</h1>`
|
|
127
|
+
: '';
|
|
128
|
+
const customRightHtml = config.customRight || '';
|
|
129
|
+
return `
|
|
130
|
+
<header class="header">
|
|
131
|
+
${backLinkHtml}
|
|
132
|
+
${titleHtml}
|
|
133
|
+
${generateLangSwitcher()}
|
|
134
|
+
${customRightHtml}
|
|
135
|
+
</header>
|
|
136
|
+
`;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Generate the issue graph header
|
|
140
|
+
*/
|
|
141
|
+
function generateGraphHeader(config) {
|
|
142
|
+
const backLink = config.backLink || { href: '/', label: 'Back to Dashboard' };
|
|
143
|
+
return `
|
|
144
|
+
<header class="graph-header">
|
|
145
|
+
<div class="header-left">
|
|
146
|
+
<a href="${backLink.href}" class="back-link"${config.backLink?.labelKey ? ` data-i18n="${config.backLink.labelKey}"` : ''}>← ${escapeHtml(backLink.label || 'Back to Dashboard')}</a>
|
|
147
|
+
<h1${config.titleKey ? ` data-i18n="${config.titleKey}"` : ''}>${escapeHtml(config.title || 'Issue Hierarchy')}</h1>
|
|
148
|
+
</div>
|
|
149
|
+
<div class="header-stats">
|
|
150
|
+
<span class="stat"><span class="stat-label" data-i18n="graph.rootIssues">Root issues</span>: <span id="root-count">-</span></span>
|
|
151
|
+
<span class="stat"><span class="stat-label" data-i18n="graph.totalIssues">Total issues</span>: <span id="total-count">-</span></span>
|
|
152
|
+
<span class="stat"><span class="stat-label" data-i18n="graph.maxDepth">Max depth</span>: <span id="max-depth">-</span></span>
|
|
153
|
+
</div>
|
|
154
|
+
${generateLangSwitcher()}
|
|
155
|
+
<div class="zoom-controls">
|
|
156
|
+
<button onclick="zoomIn()" title="Zoom in" data-i18n-title="graph.zoomIn">+</button>
|
|
157
|
+
<button onclick="resetZoom()" title="Reset" data-i18n-title="graph.resetZoom">100%</button>
|
|
158
|
+
<button onclick="zoomOut()" title="Zoom out" data-i18n-title="graph.zoomOut">-</button>
|
|
159
|
+
</div>
|
|
160
|
+
</header>
|
|
161
|
+
`;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Generate the column page header (terminal, prompt, edit)
|
|
165
|
+
*/
|
|
166
|
+
function generateColumnHeader(config) {
|
|
167
|
+
if (!config.columnInfo) {
|
|
168
|
+
return generateSimpleHeader(config);
|
|
169
|
+
}
|
|
170
|
+
const { issueKey, columnSlug, pageTitle } = config.columnInfo;
|
|
171
|
+
return `
|
|
172
|
+
<header class="header">
|
|
173
|
+
<a href="/issue/${escapeHtml(issueKey)}" class="back-btn">← Back to issue</a>
|
|
174
|
+
<span class="issue-key">${escapeHtml(issueKey)}</span>
|
|
175
|
+
<span class="column-slug">${escapeHtml(columnSlug)}</span>
|
|
176
|
+
<div class="page-title">${escapeHtml(pageTitle)}</div>
|
|
177
|
+
${generateLangSwitcher()}
|
|
178
|
+
</header>
|
|
179
|
+
`;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Generate the stats page header
|
|
183
|
+
*/
|
|
184
|
+
export function generateStatsHeader() {
|
|
185
|
+
return `
|
|
186
|
+
<div class="stats-header">
|
|
187
|
+
<h1><span data-i18n="stats.pageTitle">Claude Statistics</span> <span id="refresh-indicator" class="refresh-indicator"></span></h1>
|
|
188
|
+
<div class="header-actions">
|
|
189
|
+
${generateLangSwitcher()}
|
|
190
|
+
<a href="/" class="btn-back" data-i18n="btn.backToDashboard">Back to dashboard</a>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
`;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Generate the changelog page header
|
|
197
|
+
*/
|
|
198
|
+
export function generateChangelogHeader(lang) {
|
|
199
|
+
const title = lang === 'fr' ? 'Journal des modifications' : 'Changelog';
|
|
200
|
+
const backText = lang === 'fr' ? 'Retour au dashboard' : 'Back to dashboard';
|
|
201
|
+
return `
|
|
202
|
+
<header class="changelog-page-header">
|
|
203
|
+
<a href="/" class="back-link">← ${backText}</a>
|
|
204
|
+
<h1>${title}</h1>
|
|
205
|
+
${generateLangSwitcher()}
|
|
206
|
+
</header>
|
|
207
|
+
`;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../src/server/dashboard/shared/header.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized i18n JavaScript generator
|
|
3
|
+
*
|
|
4
|
+
* This module generates the client-side JavaScript for language switching.
|
|
5
|
+
* All pages should use this instead of defining their own switchLanguage function.
|
|
6
|
+
*/
|
|
7
|
+
import { type TranslationKey } from './translations.js';
|
|
8
|
+
export interface I18nScriptConfig {
|
|
9
|
+
/**
|
|
10
|
+
* If specified, only include these translation keys (smaller bundle).
|
|
11
|
+
* If not specified, includes all translations.
|
|
12
|
+
*/
|
|
13
|
+
keys?: TranslationKey[];
|
|
14
|
+
/**
|
|
15
|
+
* Optional callback function name to call after language change.
|
|
16
|
+
* The function must be defined in the page's script.
|
|
17
|
+
* Example: 'onLanguageChange' will call onLanguageChange() after switching.
|
|
18
|
+
*/
|
|
19
|
+
onLangChangeCallback?: string;
|
|
20
|
+
/**
|
|
21
|
+
* If true, also set a global variable for ACTION.md editor language.
|
|
22
|
+
* Used by the main dashboard.
|
|
23
|
+
*/
|
|
24
|
+
includeActionLang?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate the i18n JavaScript for a page.
|
|
28
|
+
*
|
|
29
|
+
* This returns a JavaScript string that can be embedded in a <script> tag.
|
|
30
|
+
* It provides:
|
|
31
|
+
* - STORAGE_KEY constant
|
|
32
|
+
* - currentLang variable (from localStorage, defaults to 'fr')
|
|
33
|
+
* - translations object (all or filtered)
|
|
34
|
+
* - t(key) function for getting translations
|
|
35
|
+
* - switchLanguage(lang) function (NO page reload)
|
|
36
|
+
* - updateLangUI() function for updating DOM
|
|
37
|
+
* - Auto-initialization on page load
|
|
38
|
+
*/
|
|
39
|
+
export declare function generateI18nScript(config?: I18nScriptConfig): string;
|
|
40
|
+
/**
|
|
41
|
+
* Generate a minimal i18n script for pages that only need language switching
|
|
42
|
+
* without the full translations object (translations are embedded in HTML).
|
|
43
|
+
*/
|
|
44
|
+
export declare function generateMinimalI18nScript(): string;
|
|
45
|
+
//# sourceMappingURL=i18n-script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-script.d.ts","sourceRoot":"","sources":["../../../../src/server/dashboard/shared/i18n-script.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;IAExB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,gBAAqB,GAAG,MAAM,CAoIxE;AA0BD;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CA6BlD"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized i18n JavaScript generator
|
|
3
|
+
*
|
|
4
|
+
* This module generates the client-side JavaScript for language switching.
|
|
5
|
+
* All pages should use this instead of defining their own switchLanguage function.
|
|
6
|
+
*/
|
|
7
|
+
import { translations } from './translations.js';
|
|
8
|
+
/**
|
|
9
|
+
* Generate the i18n JavaScript for a page.
|
|
10
|
+
*
|
|
11
|
+
* This returns a JavaScript string that can be embedded in a <script> tag.
|
|
12
|
+
* It provides:
|
|
13
|
+
* - STORAGE_KEY constant
|
|
14
|
+
* - currentLang variable (from localStorage, defaults to 'fr')
|
|
15
|
+
* - translations object (all or filtered)
|
|
16
|
+
* - t(key) function for getting translations
|
|
17
|
+
* - switchLanguage(lang) function (NO page reload)
|
|
18
|
+
* - updateLangUI() function for updating DOM
|
|
19
|
+
* - Auto-initialization on page load
|
|
20
|
+
*/
|
|
21
|
+
export function generateI18nScript(config = {}) {
|
|
22
|
+
// Filter translations if keys specified
|
|
23
|
+
const translationsToInclude = config.keys
|
|
24
|
+
? filterTranslations(config.keys)
|
|
25
|
+
: translations;
|
|
26
|
+
const actionLangCode = config.includeActionLang
|
|
27
|
+
? 'let currentActionLang = currentLang;'
|
|
28
|
+
: '';
|
|
29
|
+
const actionLangUpdate = config.includeActionLang
|
|
30
|
+
? 'currentActionLang = lang;'
|
|
31
|
+
: '';
|
|
32
|
+
const callbackCode = config.onLangChangeCallback
|
|
33
|
+
? `if (typeof ${config.onLangChangeCallback} === 'function') { ${config.onLangChangeCallback}(); }`
|
|
34
|
+
: '';
|
|
35
|
+
return `
|
|
36
|
+
// ========================================
|
|
37
|
+
// CENTRALIZED i18n SYSTEM
|
|
38
|
+
// ========================================
|
|
39
|
+
const STORAGE_KEY = 'autocode-lang';
|
|
40
|
+
let currentLang = localStorage.getItem(STORAGE_KEY) || 'fr';
|
|
41
|
+
${actionLangCode}
|
|
42
|
+
|
|
43
|
+
const translations = ${JSON.stringify(translationsToInclude, null, 2)};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Get translation for a key
|
|
47
|
+
*/
|
|
48
|
+
function t(key) {
|
|
49
|
+
return translations[currentLang]?.[key] || translations['en']?.[key] || key;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Switch language and update all UI elements
|
|
54
|
+
* NO page reload - updates DOM directly
|
|
55
|
+
*/
|
|
56
|
+
function switchLanguage(lang) {
|
|
57
|
+
if (lang === currentLang) return;
|
|
58
|
+
|
|
59
|
+
currentLang = lang;
|
|
60
|
+
${actionLangUpdate}
|
|
61
|
+
localStorage.setItem(STORAGE_KEY, lang);
|
|
62
|
+
document.documentElement.lang = lang;
|
|
63
|
+
|
|
64
|
+
updateLangUI();
|
|
65
|
+
${callbackCode}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Update all UI elements with translations
|
|
70
|
+
*/
|
|
71
|
+
function updateLangUI() {
|
|
72
|
+
// Update lang switcher buttons
|
|
73
|
+
document.querySelectorAll('.lang-switcher .lang-btn').forEach(btn => {
|
|
74
|
+
btn.classList.toggle('active', btn.dataset.lang === currentLang);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Update all elements with data-i18n (text content)
|
|
78
|
+
document.querySelectorAll('[data-i18n]').forEach(el => {
|
|
79
|
+
const key = el.getAttribute('data-i18n');
|
|
80
|
+
const translated = t(key);
|
|
81
|
+
if (translated && translated !== key) {
|
|
82
|
+
// Preserve child elements (like badges, icons)
|
|
83
|
+
const preservedChildren = [];
|
|
84
|
+
el.querySelectorAll('.tab-badge, .count-badge, .badge, .icon').forEach(child => {
|
|
85
|
+
preservedChildren.push(child.cloneNode(true));
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
el.textContent = translated;
|
|
89
|
+
|
|
90
|
+
// Re-append preserved children
|
|
91
|
+
preservedChildren.forEach(child => {
|
|
92
|
+
el.appendChild(document.createTextNode(' '));
|
|
93
|
+
el.appendChild(child);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Update placeholders
|
|
99
|
+
document.querySelectorAll('[data-i18n-placeholder]').forEach(el => {
|
|
100
|
+
const key = el.getAttribute('data-i18n-placeholder');
|
|
101
|
+
const translated = t(key);
|
|
102
|
+
if (translated && translated !== key) {
|
|
103
|
+
el.placeholder = translated;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Update select options
|
|
108
|
+
document.querySelectorAll('select option[data-i18n]').forEach(el => {
|
|
109
|
+
const key = el.getAttribute('data-i18n');
|
|
110
|
+
const translated = t(key);
|
|
111
|
+
if (translated && translated !== key) {
|
|
112
|
+
el.textContent = translated;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// Update title attributes
|
|
117
|
+
document.querySelectorAll('[data-i18n-title]').forEach(el => {
|
|
118
|
+
const key = el.getAttribute('data-i18n-title');
|
|
119
|
+
const translated = t(key);
|
|
120
|
+
if (translated && translated !== key) {
|
|
121
|
+
el.title = translated;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// Update page title if data-i18n-page-title exists
|
|
126
|
+
const pageTitleKey = document.body.getAttribute('data-i18n-page-title');
|
|
127
|
+
if (pageTitleKey) {
|
|
128
|
+
const translated = t(pageTitleKey);
|
|
129
|
+
if (translated && translated !== pageTitleKey) {
|
|
130
|
+
document.title = translated + ' - AutoCode';
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Initialize language switcher
|
|
136
|
+
(function initLangSwitcher() {
|
|
137
|
+
// Set initial language state
|
|
138
|
+
document.documentElement.lang = currentLang;
|
|
139
|
+
|
|
140
|
+
// Attach event listeners to lang buttons
|
|
141
|
+
document.querySelectorAll('.lang-switcher .lang-btn').forEach(btn => {
|
|
142
|
+
btn.addEventListener('click', () => switchLanguage(btn.dataset.lang));
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Update UI with current language
|
|
146
|
+
updateLangUI();
|
|
147
|
+
})();
|
|
148
|
+
`;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Filter translations to include only specified keys
|
|
152
|
+
*/
|
|
153
|
+
function filterTranslations(keys) {
|
|
154
|
+
const keySet = new Set(keys);
|
|
155
|
+
const filteredEn = {};
|
|
156
|
+
const filteredFr = {};
|
|
157
|
+
for (const key of keys) {
|
|
158
|
+
if (key in translations.en) {
|
|
159
|
+
filteredEn[key] = translations.en[key];
|
|
160
|
+
}
|
|
161
|
+
if (key in translations.fr) {
|
|
162
|
+
filteredFr[key] = translations.fr[key];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
en: filteredEn,
|
|
167
|
+
fr: filteredFr,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Generate a minimal i18n script for pages that only need language switching
|
|
172
|
+
* without the full translations object (translations are embedded in HTML).
|
|
173
|
+
*/
|
|
174
|
+
export function generateMinimalI18nScript() {
|
|
175
|
+
return `
|
|
176
|
+
// Minimal i18n - just language switching
|
|
177
|
+
const STORAGE_KEY = 'autocode-lang';
|
|
178
|
+
let currentLang = localStorage.getItem(STORAGE_KEY) || 'fr';
|
|
179
|
+
|
|
180
|
+
function switchLanguage(lang) {
|
|
181
|
+
if (lang === currentLang) return;
|
|
182
|
+
currentLang = lang;
|
|
183
|
+
localStorage.setItem(STORAGE_KEY, lang);
|
|
184
|
+
document.documentElement.lang = lang;
|
|
185
|
+
updateLangUI();
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function updateLangUI() {
|
|
189
|
+
document.querySelectorAll('.lang-switcher .lang-btn').forEach(btn => {
|
|
190
|
+
btn.classList.toggle('active', btn.dataset.lang === currentLang);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Initialize
|
|
195
|
+
(function() {
|
|
196
|
+
document.documentElement.lang = currentLang;
|
|
197
|
+
document.querySelectorAll('.lang-switcher .lang-btn').forEach(btn => {
|
|
198
|
+
btn.addEventListener('click', () => switchLanguage(btn.dataset.lang));
|
|
199
|
+
});
|
|
200
|
+
updateLangUI();
|
|
201
|
+
})();
|
|
202
|
+
`;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=i18n-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-script.js","sourceRoot":"","sources":["../../../../src/server/dashboard/shared/i18n-script.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AAuBtE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAA2B,EAAE;IAC9D,wCAAwC;IACxC,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI;QACvC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,CAAC,CAAC,YAAY,CAAC;IAEjB,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB;QAC7C,CAAC,CAAC,sCAAsC;QACxC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,gBAAgB,GAAG,MAAM,CAAC,iBAAiB;QAC/C,CAAC,CAAC,2BAA2B;QAC7B,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB;QAC9C,CAAC,CAAC,cAAc,MAAM,CAAC,oBAAoB,sBAAsB,MAAM,CAAC,oBAAoB,OAAO;QACnG,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;MAMH,cAAc;;2BAEO,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;QAiBjE,gBAAgB;;;;;QAKhB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAsB;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,UAAU;QACd,EAAE,EAAE,UAAU;KACQ,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared components for the AutoCode dashboard
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports all shared components for easy importing.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import {
|
|
9
|
+
* translations,
|
|
10
|
+
* generateI18nScript,
|
|
11
|
+
* generateHeader,
|
|
12
|
+
* generateLangSwitcher,
|
|
13
|
+
* } from '../shared/index.js';
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export { translations, getTranslator, type Language, type TranslationKey, } from './translations.js';
|
|
17
|
+
export { generateI18nScript, generateMinimalI18nScript, type I18nScriptConfig, } from './i18n-script.js';
|
|
18
|
+
export { generateHeader, generateLangSwitcher, generateStatsHeader, generateChangelogHeader, type HeaderConfig, } from './header.js';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/dashboard/shared/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared components for the AutoCode dashboard
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports all shared components for easy importing.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import {
|
|
9
|
+
* translations,
|
|
10
|
+
* generateI18nScript,
|
|
11
|
+
* generateHeader,
|
|
12
|
+
* generateLangSwitcher,
|
|
13
|
+
* } from '../shared/index.js';
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
// Translations
|
|
17
|
+
export { translations, getTranslator, } from './translations.js';
|
|
18
|
+
// i18n Script Generator
|
|
19
|
+
export { generateI18nScript, generateMinimalI18nScript, } from './i18n-script.js';
|
|
20
|
+
// Header Component
|
|
21
|
+
export { generateHeader, generateLangSwitcher, generateStatsHeader, generateChangelogHeader, } from './header.js';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/dashboard/shared/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAe;AACf,OAAO,EACL,YAAY,EACZ,aAAa,GAGd,MAAM,mBAAmB,CAAC;AAE3B,wBAAwB;AACxB,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAE1B,MAAM,kBAAkB,CAAC;AAE1B,mBAAmB;AACnB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,aAAa,CAAC"}
|