@mdn/fred 1.6.2 → 1.8.0

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.
Files changed (149) hide show
  1. package/.env-dist +4 -0
  2. package/CHANGELOG.md +66 -0
  3. package/CONTRIBUTING.md +2 -2
  4. package/README.md +31 -2
  5. package/build/eslint-fred.js +6 -4
  6. package/build/plugins/generate-element-map.js +3 -2
  7. package/build/utils.js +0 -23
  8. package/components/breadcrumbs-bar/server.css +12 -0
  9. package/components/color-theme/element.js +1 -0
  10. package/components/content-feedback/element.js +58 -22
  11. package/components/content-section/server.css +15 -2
  12. package/components/curriculum/module.css +1 -0
  13. package/components/curriculum-module/server.css +1 -0
  14. package/components/env/index.js +6 -0
  15. package/components/footer/server.js +1 -1
  16. package/components/heading-anchor/server.js +0 -2
  17. package/components/issues-table/element.js +6 -4
  18. package/components/language-switcher/element.js +1 -0
  19. package/components/live-sample-result/element.js +1 -0
  20. package/components/menu/base.css +2 -1
  21. package/components/menu/constants.js +438 -147
  22. package/components/menu/missing-docs.json +133 -0
  23. package/components/menu/server.js +78 -657
  24. package/components/menu/types.d.ts +50 -0
  25. package/components/menu/update-missing-docs.js +66 -0
  26. package/components/modal/element.js +3 -2
  27. package/components/navigation/server.js +1 -1
  28. package/components/observatory-tests-and-scores/element.js +13 -7
  29. package/components/outer-layout/utils.js +2 -2
  30. package/components/play-runner/element.js +14 -6
  31. package/components/playground/element.js +11 -5
  32. package/components/recently-visited/element.js +4 -2
  33. package/components/scrim-inline/element.js +11 -5
  34. package/components/search-modal/element.js +1 -0
  35. package/components/writer-reload/element.js +10 -2
  36. package/entry.client.js +1 -0
  37. package/hooks/ga-init.js +31 -0
  38. package/hooks/glean-init.js +2 -6
  39. package/l10n/en-US.ftl +6 -0
  40. package/l10n/fr.ftl +145 -1
  41. package/out/service-worker.js +1 -1
  42. package/out/service-worker.js.map +1 -1
  43. package/out/static/client/{1231.84c230e0fa92f2d4.js → 1231.6a66b96b566b2cca.js} +14 -10
  44. package/out/static/client/1231.6a66b96b566b2cca.js.map +1 -0
  45. package/out/static/client/{2190.7995f19655987265.js → 2190.a21d8b0d7b75a20d.js} +5 -5
  46. package/out/static/client/2190.a21d8b0d7b75a20d.js.map +1 -0
  47. package/out/static/client/{2319.2034183eaacce69a.js → 2319.a419f6d93c814f50.js} +12 -8
  48. package/out/static/client/2319.a419f6d93c814f50.js.map +1 -0
  49. package/out/static/client/{3092.94a3edc866458ab7.js → 3092.54b703ff89ccdaf7.js} +6 -6
  50. package/out/static/client/3092.54b703ff89ccdaf7.js.map +1 -0
  51. package/out/static/client/{3200.024a6b1d06d80026.js → 3200.dc89d9709a81e853.js} +2 -1
  52. package/out/static/client/{3200.024a6b1d06d80026.js.map → 3200.dc89d9709a81e853.js.map} +1 -1
  53. package/out/static/client/{486.bb14d2f437221509.js → 486.b6950b0a4cfb9116.js} +2 -2
  54. package/out/static/client/{486.bb14d2f437221509.js.map → 486.b6950b0a4cfb9116.js.map} +1 -1
  55. package/out/static/client/{5446.3e0ac5aa93616c6f.js → 5446.2e663885069b1680.js} +4 -2
  56. package/out/static/client/5446.2e663885069b1680.js.map +1 -0
  57. package/out/static/client/{603.775311ee1356e86f.js → 603.45bf3e185d1b890d.js} +7 -7
  58. package/out/static/client/603.45bf3e185d1b890d.js.map +1 -0
  59. package/out/static/client/{6465.08012ddcd4597c76.js → 6465.2dc41017ae6abc34.js} +2 -1
  60. package/out/static/client/6465.2dc41017ae6abc34.js.map +1 -0
  61. package/out/static/client/{6480.09f744cd2fb69ed8.js → 6480.c839ead24f125a7e.js} +3 -2
  62. package/out/static/client/{6480.09f744cd2fb69ed8.js.map → 6480.c839ead24f125a7e.js.map} +1 -1
  63. package/out/static/client/7185.278701dcd05fcd30.js +2 -0
  64. package/out/static/client/7185.278701dcd05fcd30.js.map +1 -0
  65. package/out/static/client/9379.edc05ee9f550804e.js +2 -0
  66. package/out/static/client/9379.edc05ee9f550804e.js.map +1 -0
  67. package/out/static/client/{9784.3c73a0debfcca553.js → 9784.1c8d6e465137fd58.js} +13 -9
  68. package/out/static/client/{9784.3c73a0debfcca553.js.map → 9784.1c8d6e465137fd58.js.map} +1 -1
  69. package/out/static/client/{9804.d9ffbe6b7c44eab3.js → 9804.ba52ea55253eca7b.js} +2 -2
  70. package/out/static/client/{9804.d9ffbe6b7c44eab3.js.map → 9804.ba52ea55253eca7b.js.map} +1 -1
  71. package/out/static/client/9914.021220acc0d3e777.js +11 -0
  72. package/out/static/client/9914.021220acc0d3e777.js.map +1 -0
  73. package/out/static/client/index.0f05d4ac6b3b88a1.js +419 -0
  74. package/out/static/client/index.0f05d4ac6b3b88a1.js.map +1 -0
  75. package/out/static/client/{runtime.b178b9749f31202a.js → runtime.c323b9d2153b4ebf.js} +2 -2
  76. package/out/static/client/{runtime.b178b9749f31202a.js.map → runtime.c323b9d2153b4ebf.js.map} +1 -1
  77. package/out/static/client/stats.json +200 -200
  78. package/out/static/client/styles-breadcrumbs-bar.02910e49bb8b2372.css +2 -0
  79. package/out/static/client/styles-breadcrumbs-bar.02910e49bb8b2372.css.map +1 -0
  80. package/out/static/client/{styles-content-section.d18f07ab3d79a1d2.css → styles-content-section.6dc04fb9b3f3d595.css} +2 -2
  81. package/out/static/client/{styles-content-section.d18f07ab3d79a1d2.css.map → styles-content-section.6dc04fb9b3f3d595.css.map} +1 -1
  82. package/out/static/client/styles-curriculum-landing.cbaf6ff367369a26.css.map +1 -1
  83. package/out/static/client/styles-curriculum-module.c7ec78d3e724cf64.css.map +1 -1
  84. package/out/static/client/{styles-global.fb7afecd89ca2dff.js → styles-global.01d60465c4584631.js} +1 -1
  85. package/out/static/client/styles-global.4031cdde644ed6ce.css +2 -0
  86. package/out/static/client/{styles-global.684fd2c5254c94b8.css.map → styles-global.4031cdde644ed6ce.css.map} +1 -1
  87. package/out/static/client/styles-menu.c41c14be9597dcd9.css +2 -0
  88. package/out/static/client/styles-menu.c41c14be9597dcd9.css.map +1 -0
  89. package/out/static/client/watify_bg.c5a182c47876cd2b.wasm +0 -0
  90. package/out/static/legacy/{1539.ad5e9bc68ca36ebd.js → 1539.f16c6732d55f64b7.js} +3 -3
  91. package/out/static/legacy/{1539.ad5e9bc68ca36ebd.js.map → 1539.f16c6732d55f64b7.js.map} +1 -1
  92. package/out/static/legacy/7185.278701dcd05fcd30.js +2 -0
  93. package/out/static/legacy/7185.278701dcd05fcd30.js.map +1 -0
  94. package/out/static/legacy/asset-manifest.json +9 -9
  95. package/out/static/legacy/{index.ad3600b01e18974e.html → index.19cded28f6c1e506.html} +1 -1
  96. package/out/static/legacy/{index.5592b02d966df8ba.js → index.e979e65eb8758f6f.js} +3 -3
  97. package/out/static/legacy/{index.5592b02d966df8ba.js.map → index.e979e65eb8758f6f.js.map} +1 -1
  98. package/out/static/legacy/stats.json +13 -13
  99. package/out/static/legacy/watify_bg.c5a182c47876cd2b.wasm +0 -0
  100. package/out/static/legacy/{yari.8ce0be252d1ae155.js → yari.7f26dc58679ef833.js} +3 -3
  101. package/out/static/legacy/{yari.8ce0be252d1ae155.js.map → yari.7f26dc58679ef833.js.map} +1 -1
  102. package/out/static/ssr/7185.js +1 -1
  103. package/out/static/ssr/7185.js.map +1 -1
  104. package/out/static/ssr/index.js +369 -620
  105. package/out/static/ssr/index.js.map +1 -1
  106. package/out/static/ssr/stats.json +4 -4
  107. package/out/static/ssr/watify_bg.c5a182c47876cd2b.wasm +0 -0
  108. package/package.json +20 -20
  109. package/scripts/npm-test.js +22 -0
  110. package/server.js +22 -4
  111. package/utils/dnt-helper.js +59 -0
  112. package/utils/name-transformation.js +40 -0
  113. package/utils/telemetry-opt-out.js +12 -0
  114. package/wdio.conf.js +4 -2
  115. package/components/menu/check-missing-docs.js +0 -44
  116. package/out/static/client/1231.84c230e0fa92f2d4.js.map +0 -1
  117. package/out/static/client/2190.7995f19655987265.js.map +0 -1
  118. package/out/static/client/2319.2034183eaacce69a.js.map +0 -1
  119. package/out/static/client/3092.94a3edc866458ab7.js.map +0 -1
  120. package/out/static/client/5446.3e0ac5aa93616c6f.js.map +0 -1
  121. package/out/static/client/603.775311ee1356e86f.js.map +0 -1
  122. package/out/static/client/6465.08012ddcd4597c76.js.map +0 -1
  123. package/out/static/client/7185.a014a928e9a39779.js +0 -2
  124. package/out/static/client/7185.a014a928e9a39779.js.map +0 -1
  125. package/out/static/client/9379.7cdf58b4fb5efa66.js +0 -2
  126. package/out/static/client/9379.7cdf58b4fb5efa66.js.map +0 -1
  127. package/out/static/client/9914.251fe19f0038e97b.js +0 -11
  128. package/out/static/client/9914.251fe19f0038e97b.js.map +0 -1
  129. package/out/static/client/index.26176fe4ab13dce5.js +0 -268
  130. package/out/static/client/index.26176fe4ab13dce5.js.map +0 -1
  131. package/out/static/client/styles-breadcrumbs-bar.e2fa6dfb04a38166.css +0 -2
  132. package/out/static/client/styles-breadcrumbs-bar.e2fa6dfb04a38166.css.map +0 -1
  133. package/out/static/client/styles-global.684fd2c5254c94b8.css +0 -2
  134. package/out/static/client/styles-menu.5193bf2642ae7d64.css +0 -2
  135. package/out/static/client/styles-menu.5193bf2642ae7d64.css.map +0 -1
  136. package/out/static/client/watify_bg.9877982a693ec402.wasm +0 -0
  137. package/out/static/legacy/7185.a014a928e9a39779.js +0 -2
  138. package/out/static/legacy/7185.a014a928e9a39779.js.map +0 -1
  139. package/out/static/legacy/watify_bg.9877982a693ec402.wasm +0 -0
  140. package/out/static/ssr/watify_bg.9877982a693ec402.wasm +0 -0
  141. /package/out/static/client/{2190.7995f19655987265.js.LICENSE.txt → 2190.a21d8b0d7b75a20d.js.LICENSE.txt} +0 -0
  142. /package/out/static/client/{2319.2034183eaacce69a.js.LICENSE.txt → 2319.a419f6d93c814f50.js.LICENSE.txt} +0 -0
  143. /package/out/static/client/{603.775311ee1356e86f.js.LICENSE.txt → 603.45bf3e185d1b890d.js.LICENSE.txt} +0 -0
  144. /package/out/static/client/{6480.09f744cd2fb69ed8.js.LICENSE.txt → 6480.c839ead24f125a7e.js.LICENSE.txt} +0 -0
  145. /package/out/static/client/{9784.3c73a0debfcca553.js.LICENSE.txt → 9784.1c8d6e465137fd58.js.LICENSE.txt} +0 -0
  146. /package/out/static/client/{index.26176fe4ab13dce5.js.LICENSE.txt → index.0f05d4ac6b3b88a1.js.LICENSE.txt} +0 -0
  147. /package/out/static/legacy/{1539.ad5e9bc68ca36ebd.js.LICENSE.txt → 1539.f16c6732d55f64b7.js.LICENSE.txt} +0 -0
  148. /package/out/static/legacy/{index.5592b02d966df8ba.js.LICENSE.txt → index.e979e65eb8758f6f.js.LICENSE.txt} +0 -0
  149. /package/out/static/legacy/{yari.8ce0be252d1ae155.js.LICENSE.txt → yari.7f26dc58679ef833.js.LICENSE.txt} +0 -0
@@ -1,151 +1,442 @@
1
+ import missingDocs from "./missing-docs.json" with { type: "json" };
2
+
3
+ /** @type {import("./types.js").MenuTab[]}*/
4
+ export const TABS = [
5
+ {
6
+ id: "html",
7
+ buttonText: "HTML",
8
+ panelTitle: {
9
+ slug: "Web/HTML",
10
+ text: "HTML: Markup language",
11
+ },
12
+ panelGroups: [
13
+ {
14
+ title: "HTML reference",
15
+ items: [
16
+ { slug: "Web/HTML/Reference/Elements", text: "Elements" },
17
+ {
18
+ slug: "Web/HTML/Reference/Global_attributes",
19
+ text: "Global attributes",
20
+ },
21
+ { slug: "Web/HTML/Reference/Attributes", text: "Attributes" },
22
+ {
23
+ slug: "Web/HTML/Reference",
24
+ text: "See all…",
25
+ label: "See all HTML references",
26
+ },
27
+ ],
28
+ },
29
+ {
30
+ title: "HTML guides",
31
+ items: [
32
+ {
33
+ slug: "Web/HTML/Guides/Responsive_images",
34
+ text: "Responsive images",
35
+ },
36
+ { slug: "Web/HTML/Guides/Cheatsheet", text: "HTML cheatsheet" },
37
+ {
38
+ slug: "Web/HTML/Guides/Date_and_time_formats",
39
+ text: "Date & time formats",
40
+ },
41
+ {
42
+ slug: "Web/HTML/Guides",
43
+ text: "See all…",
44
+ label: "See all HTML guides",
45
+ },
46
+ ],
47
+ },
48
+ {
49
+ title: "Markup languages",
50
+ items: [
51
+ { slug: "Web/SVG", text: "SVG" },
52
+ { slug: "Web/MathML", text: "MathML" },
53
+ { slug: "Web/XML", text: "XML" },
54
+ ],
55
+ },
56
+ ],
57
+ },
58
+ {
59
+ id: "css",
60
+ buttonText: "CSS",
61
+ panelTitle: {
62
+ slug: "Web/CSS",
63
+ text: "CSS: Styling language",
64
+ },
65
+ panelGroups: [
66
+ {
67
+ title: "CSS reference",
68
+ items: [
69
+ { slug: "Web/CSS/Properties", text: "Properties" },
70
+ { slug: "Web/CSS/CSS_selectors", text: "Selectors" },
71
+ { slug: "Web/CSS/CSS_syntax/At-rule", text: "At-rules" },
72
+ { slug: "Web/CSS/CSS_values_and_units", text: "Values & units" },
73
+ {
74
+ slug: "Web/CSS/Reference",
75
+ text: "See all…",
76
+ label: "See all CSS references",
77
+ },
78
+ ],
79
+ },
80
+ {
81
+ title: "CSS guides",
82
+ items: [
83
+ {
84
+ slug: "Web/CSS/CSS_box_model/Introduction_to_the_CSS_box_model",
85
+ text: "Box model",
86
+ },
87
+ {
88
+ slug: "Web/CSS/CSS_animations/Using_CSS_animations",
89
+ text: "Animations",
90
+ },
91
+ {
92
+ slug: "Web/CSS/CSS_flexible_box_layout/Basic_concepts_of_flexbox",
93
+ text: "Flexbox",
94
+ },
95
+ { slug: "Web/CSS/CSS_colors", text: "Colors" },
96
+ {
97
+ slug: "Web/CSS/Guides",
98
+ text: "See all…",
99
+ label: "See all CSS guides",
100
+ },
101
+ ],
102
+ },
103
+ {
104
+ title: "Layout cookbook",
105
+ items: [
106
+ {
107
+ slug: "Web/CSS/How_to/Layout_cookbook/Column_layouts",
108
+ text: "Column layouts",
109
+ },
110
+ {
111
+ slug: "Web/CSS/How_to/Layout_cookbook/Center_an_element",
112
+ text: "Centering an element",
113
+ },
114
+ {
115
+ slug: "Web/CSS/How_to/Layout_cookbook/Card",
116
+ text: "Card component",
117
+ },
118
+ { slug: "Web/CSS/How_to/Layout_cookbook", text: "See all…" },
119
+ ],
120
+ },
121
+ ],
122
+ },
123
+ {
124
+ id: "javascript",
125
+ buttonText: {
126
+ long: "JavaScript",
127
+ short: "JS",
128
+ },
129
+ panelTitle: {
130
+ slug: "Web/JavaScript",
131
+ text: "JavaScript: Scripting language",
132
+ },
133
+ panelGroups: [
134
+ {
135
+ title: "JS reference",
136
+ items: [
137
+ {
138
+ slug: "Web/JavaScript/Reference/Global_Objects",
139
+ text: "Standard built-in objects",
140
+ },
141
+ {
142
+ slug: "Web/JavaScript/Reference/Operators",
143
+ text: "Expressions & operators",
144
+ },
145
+ {
146
+ slug: "Web/JavaScript/Reference/Statements",
147
+ text: "Statements & declarations",
148
+ },
149
+ { slug: "Web/JavaScript/Reference/Functions", text: "Functions" },
150
+ {
151
+ slug: "Web/JavaScript/Reference",
152
+ text: "See all…",
153
+ label: "See all JavaScript references",
154
+ },
155
+ ],
156
+ },
157
+ {
158
+ title: "JS guides",
159
+ items: [
160
+ {
161
+ slug: "Web/JavaScript/Guide/Control_flow_and_error_handling",
162
+ text: "Control flow & error handing",
163
+ },
164
+ {
165
+ slug: "Web/JavaScript/Guide/Loops_and_iteration",
166
+ text: "Loops and iteration",
167
+ },
168
+ {
169
+ slug: "Web/JavaScript/Guide/Working_with_objects",
170
+ text: "Working with objects",
171
+ },
172
+ {
173
+ slug: "Web/JavaScript/Guide/Using_classes",
174
+ text: "Using classes",
175
+ },
176
+ {
177
+ slug: "Web/JavaScript/Guide",
178
+ text: "See all…",
179
+ label: "See all JavaScript guides",
180
+ },
181
+ ],
182
+ },
183
+ ],
184
+ },
185
+ {
186
+ id: "webapis",
187
+ buttonText: "Web APIs",
188
+ panelTitle: {
189
+ slug: "Web/API",
190
+ text: "Web APIs: Programming interfaces",
191
+ },
192
+ panelGroups: [
193
+ {
194
+ title: "Web API reference",
195
+ items: [
196
+ { slug: "Web/API/File_System_API", text: "File system API" },
197
+ { slug: "Web/API/Fetch_API", text: "Fetch API" },
198
+ { slug: "Web/API/Geolocation_API", text: "Geolocation API" },
199
+ { slug: "Web/API/HTML_DOM_API", text: "HTML DOM API" },
200
+ { slug: "Web/API/Push_API", text: "Push API" },
201
+ {
202
+ slug: "Web/API/Service_Worker_API",
203
+ text: "Service worker API",
204
+ },
205
+ {
206
+ slug: "Web/API",
207
+ text: "See all…",
208
+ label: "See all Web API guides",
209
+ },
210
+ ],
211
+ },
212
+ {
213
+ title: "Web API guides",
214
+ items: [
215
+ {
216
+ slug: "Web/API/Web_Animations_API/Using_the_Web_Animations_API",
217
+ text: "Using the Web animation API",
218
+ },
219
+ {
220
+ slug: "Web/API/Fetch_API/Using_Fetch",
221
+ text: "Using the Fetch API",
222
+ },
223
+ {
224
+ slug: "Web/API/History_API/Working_with_the_History_API",
225
+ text: "Working with the History API",
226
+ },
227
+ {
228
+ slug: "Web/API/Web_Speech_API/Using_the_Web_Speech_API",
229
+ text: "Using the Web speech API",
230
+ },
231
+ {
232
+ slug: "Web/API/Web_Workers_API/Using_web_workers",
233
+ text: "Using web workers",
234
+ },
235
+ ],
236
+ },
237
+ ],
238
+ },
239
+ {
240
+ id: "all",
241
+ buttonText: "All",
242
+ panelTitle: {
243
+ slug: "Web",
244
+ text: "All web technology",
245
+ },
246
+ panelGroups: [
247
+ {
248
+ title: "Technologies",
249
+ items: [
250
+ { slug: "Web/Accessibility", text: "Accessibility" },
251
+ { slug: "Web/HTTP", text: "HTTP" },
252
+ { slug: "Web/URI", text: "URI" },
253
+ { slug: "Mozilla/Add-ons/WebExtensions", text: "Web extensions" },
254
+ { slug: "WebAssembly", text: "WebAssembly" },
255
+ { slug: "Web/WebDriver", text: "WebDriver" },
256
+ {
257
+ slug: "Web",
258
+ text: "See all…",
259
+ label: "See all web technology references",
260
+ },
261
+ ],
262
+ },
263
+ {
264
+ title: "Topics",
265
+ items: [
266
+ { slug: "Web/Media", text: "Media" },
267
+ { slug: "Web/API/Performance", text: "Performance" },
268
+ { slug: "Web/Privacy", text: "Privacy" },
269
+ { slug: "Web/Security", text: "Security" },
270
+ {
271
+ slug: "Web/Progressive_web_apps",
272
+ text: "Progressive web apps",
273
+ },
274
+ ],
275
+ },
276
+ ],
277
+ },
278
+ {
279
+ id: "learn",
280
+ buttonText: "Learn",
281
+ panelTitle: {
282
+ slug: "Learn_web_development",
283
+ text: "Learn web development",
284
+ },
285
+ panelGroups: [
286
+ {
287
+ title: "Frontend developer course",
288
+ items: [
289
+ {
290
+ slug: "Learn_web_development/Getting_started",
291
+ text: "Getting started modules",
292
+ },
293
+ { slug: "Learn_web_development/Core", text: "Core modules" },
294
+ {
295
+ href: "/en-US/curriculum/",
296
+ text: "MDN Curriculum",
297
+ },
298
+ ],
299
+ },
300
+ {
301
+ title: "Learn HTML",
302
+ items: [
303
+ {
304
+ slug: "Learn_web_development/Core/Structuring_content",
305
+ text: "Structuring content with HTML module",
306
+ },
307
+ ],
308
+ },
309
+ {
310
+ title: "Learn CSS",
311
+ items: [
312
+ {
313
+ slug: "Learn_web_development/Core/Styling_basics",
314
+ text: "CSS styling basics module",
315
+ },
316
+ {
317
+ slug: "Learn_web_development/Core/CSS_layout",
318
+ text: "CSS layout module",
319
+ },
320
+ ],
321
+ },
322
+ {
323
+ title: "Learn JavaScript",
324
+ items: [
325
+ {
326
+ slug: "Learn_web_development/Core/Scripting",
327
+ text: "Dynamic scripting with JavaScript module",
328
+ },
329
+ ],
330
+ },
331
+ ],
332
+ },
333
+ {
334
+ id: "tools",
335
+ buttonText: "Tools",
336
+ panelTitle: {
337
+ text: "Discover our tools",
338
+ },
339
+ panelGroups: [
340
+ {
341
+ items: [
342
+ {
343
+ href: "/en-US/play",
344
+ text: "Playground",
345
+ icon: "circle-play",
346
+ },
347
+ {
348
+ href: "/en-US/observatory",
349
+ text: "HTTP Observatory",
350
+ icon: "shield-check",
351
+ },
352
+ ],
353
+ },
354
+ {
355
+ items: [
356
+ {
357
+ slug: "Web/CSS/CSS_backgrounds_and_borders/Border-image_generator",
358
+ text: "Border-image generator",
359
+ },
360
+ {
361
+ slug: "Web/CSS/CSS_backgrounds_and_borders/Border-radius_generator",
362
+ text: "Border-radius generator",
363
+ },
364
+ {
365
+ slug: "Web/CSS/CSS_backgrounds_and_borders/Box-shadow_generator",
366
+ text: "Box-shadow generator",
367
+ },
368
+ {
369
+ slug: "Web/CSS/CSS_colors/Color_format_converter",
370
+ text: "Color format converter",
371
+ },
372
+ { slug: "Web/CSS/CSS_colors/Color_mixer", text: "Color mixer" },
373
+ {
374
+ slug: "Web/CSS/CSS_shapes/Shape_generator",
375
+ text: "Shape generator",
376
+ },
377
+ ],
378
+ },
379
+ ],
380
+ },
381
+ {
382
+ id: "about",
383
+ buttonText: "About",
384
+ panelTitle: {
385
+ text: "Get to know MDN better",
386
+ },
387
+ panelGroups: [
388
+ {
389
+ items: [
390
+ {
391
+ href: "/en-US/about",
392
+ text: "About MDN",
393
+ icon: "mdn-m",
394
+ },
395
+ {
396
+ href: "/en-US/advertising",
397
+ text: "Advertise with us",
398
+ icon: "chart-no-axes-combined",
399
+ },
400
+ ],
401
+ },
402
+ {
403
+ items: [
404
+ {
405
+ href: "/en-US/community",
406
+ text: "Community",
407
+ icon: "users",
408
+ },
409
+ {
410
+ href: "https://github.com/mdn",
411
+ text: "MDN on GitHub",
412
+ icon: "github",
413
+ },
414
+ ],
415
+ },
416
+ ],
417
+ },
418
+ {
419
+ id: "blog",
420
+ buttonText: "Blog",
421
+ href: "/en-US/blog/",
422
+ },
423
+ ];
424
+
1
425
  /**
2
426
  * Lists untranslated menu pages per locale.
3
427
  *
4
- * Tip: Run `node check-missing-docs.js` to check.
5
- *
6
- * @type {Record<string, string[]>}
428
+ * Tip: Run `node update-missing-docs.js` to update.
7
429
  */
8
- export const MISSING_DOCS = {
9
- es: [
10
- "Web/API/HTML_DOM_API",
11
- "Web/API/History_API/Working_with_the_History_API",
12
- "Web/API/Web_Animations_API/Using_the_Web_Animations_API",
13
- "Web/CSS/CSS_values_and_units",
14
- "Web/CSS/CSS_backgrounds_and_borders/Box-shadow_generator",
15
- "Web/CSS/CSS_colors/Color_mixer",
16
- "Web/CSS/CSS_shapes/Shape_generator",
17
- "Web/CSS/Guides",
18
- "Web/CSS/Layout_cookbook/Card",
19
- "Web/CSS/Layout_cookbook/Center_an_element",
20
- "Web/CSS/Layout_cookbook/Column_layouts",
21
- "Web/CSS/Properties",
22
- "Web/HTML/Guides",
23
- "Web/HTML/Guides/Cheatsheet",
24
- "Web/HTML/Guides/Date_and_time_formats",
25
- "Web/HTML/How_to/Add_JavaScript_to_your_web_page",
26
- "Web/JavaScript/Guide/Using_classes",
27
- "Web/Privacy",
28
- "Web/URI",
29
- "Web/WebDriver",
30
- ],
31
- fr: [
32
- "Web/CSS/CSS_box_model/Introduction_to_the_CSS_box_model",
33
- "Web/CSS/CSS_shapes/Shape_generator",
34
- ],
35
- ja: ["Web/CSS/CSS_colors/Color_mixer", "Web/CSS/CSS_shapes/Shape_generator"],
36
- ko: [
37
- "Web/API/Performance",
38
- "Web/API/Web_Animations_API/Using_the_Web_Animations_API",
39
- "Web/API/Web_Speech_API/Using_the_Web_Speech_API",
40
- "Web/API/Web_Workers_API/Using_web_workers",
41
- "Web/CSS/CSS_colors/Color_mixer",
42
- "Web/CSS/CSS_shapes/Shape_generator",
43
- "Web/CSS/Guides",
44
- "Web/CSS/Layout_cookbook",
45
- "Web/CSS/Layout_cookbook/Card",
46
- "Web/CSS/Layout_cookbook/Column_layouts",
47
- "Web/CSS/Properties",
48
- "Web/HTML/Guides",
49
- "Web/HTML/Guides/Cheatsheet",
50
- "Web/HTML/How_to/Add_JavaScript_to_your_web_page",
51
- "Web/JavaScript/Guide/Using_classes",
52
- "Web/URI",
53
- "Web/WebDriver",
54
- ],
55
- "pt-BR": [
56
- "Learn_web_development/Getting_started",
57
- "Web/API/File_System_API",
58
- "Web/API/HTML_DOM_API",
59
- "Web/API/Performance",
60
- "Web/API/Web_Speech_API/Using_the_Web_Speech_API",
61
- "Web/API/Web_Workers_API/Using_web_workers",
62
- "Web/CSS/CSS_values_and_units",
63
- "Web/CSS/CSS_backgrounds_and_borders/Box-shadow_generator",
64
- "Web/CSS/CSS_colors",
65
- "Web/CSS/CSS_colors/Color_mixer",
66
- "Web/CSS/CSS_shapes/Shape_generator",
67
- "Web/CSS/Guides",
68
- "Web/CSS/Layout_cookbook/Card",
69
- "Web/CSS/Layout_cookbook/Center_an_element",
70
- "Web/CSS/Layout_cookbook/Column_layouts",
71
- "Web/CSS/Properties",
72
- "Web/HTML/Guides",
73
- "Web/HTML/Guides/Cheatsheet",
74
- "Web/HTML/Guides/Date_and_time_formats",
75
- "Web/HTML/How_to/Add_JavaScript_to_your_web_page",
76
- "Web/JavaScript/Guide/Using_classes",
77
- "Web/Media",
78
- "Web/Privacy",
79
- "Web/URI",
80
- "Web/WebDriver",
81
- "Web/XML",
82
- ],
83
- ru: [
84
- "Learn_web_development/Getting_started",
85
- "Web/API/HTML_DOM_API",
86
- "Web/CSS/CSS_values_and_units",
87
- "Web/CSS/CSS_colors/Color_mixer",
88
- "Web/CSS/CSS_shapes/Shape_generator",
89
- "Web/CSS/Guides",
90
- "Web/CSS/Layout_cookbook/Card",
91
- "Web/CSS/Layout_cookbook/Center_an_element",
92
- "Web/CSS/Layout_cookbook/Column_layouts",
93
- "Web/CSS/Properties",
94
- "Web/HTML/Guides",
95
- "Web/HTML/Guides/Cheatsheet",
96
- "Web/HTML/Guides/Date_and_time_formats",
97
- "Web/HTML/How_to/Add_JavaScript_to_your_web_page",
98
- "Web/JavaScript/Guide/Using_classes",
99
- "Web/Media",
100
- "Web/Privacy",
101
- "Web/WebDriver",
102
- ],
103
- "zh-CN": [
104
- "Web/CSS/CSS_colors/Color_mixer",
105
- "Web/CSS/CSS_shapes/Shape_generator",
106
- "Web/CSS/Properties",
107
- ],
108
- "zh-TW": [
109
- "Learn_web_development/Getting_started",
110
- "Web/API/File_System_API",
111
- "Web/API/HTML_DOM_API",
112
- "Web/API/History_API/Working_with_the_History_API",
113
- "Web/API/Performance",
114
- "Web/API/Push_API",
115
- "Web/API/Service_Worker_API",
116
- "Web/API/Web_Animations_API/Using_the_Web_Animations_API",
117
- "Web/API/Web_Speech_API/Using_the_Web_Speech_API",
118
- "Web/CSS/CSS_values_and_units",
119
- "Web/CSS/CSS_backgrounds_and_borders/Border-image_generator",
120
- "Web/CSS/CSS_backgrounds_and_borders/Border-radius_generator",
121
- "Web/CSS/CSS_backgrounds_and_borders/Box-shadow_generator",
122
- "Web/CSS/CSS_box_model/Introduction_to_the_CSS_box_model",
123
- "Web/CSS/CSS_colors",
124
- "Web/CSS/CSS_colors/Color_mixer",
125
- "Web/CSS/CSS_shapes/Shape_generator",
126
- "Web/CSS/CSS_syntax/At-rule",
127
- "Web/CSS/Guides",
128
- "Web/CSS/Layout_cookbook",
129
- "Web/CSS/Layout_cookbook/Card",
130
- "Web/CSS/Layout_cookbook/Center_an_element",
131
- "Web/CSS/Layout_cookbook/Column_layouts",
132
- "Web/CSS/Properties",
133
- "Web/CSS/Reference",
134
- "Web/HTML/Guides",
135
- "Web/HTML/Guides/Cheatsheet",
136
- "Web/HTML/Guides/Date_and_time_formats",
137
- "Web/HTML/Guides/Responsive_images",
138
- "Web/HTML/How_to/Add_JavaScript_to_your_web_page",
139
- "Web/HTML/How_to/Use_data_attributes",
140
- "Web/HTML/Reference/Elements",
141
- "Web/HTML/Reference/Global_attributes",
142
- "Web/JavaScript/Guide/Using_classes",
143
- "Web/JavaScript/Guide/Working_with_objects",
144
- "Web/JavaScript/Reference/Functions",
145
- "Web/JavaScript/Reference/Statements",
146
- "Web/Privacy",
147
- "Web/URI",
148
- "Web/WebDriver",
149
- "Web/XML",
150
- ],
151
- };
430
+ /** @type {Record<string, string[]>} */
431
+ export const MISSING_DOCS = Object.freeze(missingDocs);
432
+
433
+ export const TRANSLATED_LOCALES = [
434
+ "es",
435
+ "fr",
436
+ "ja",
437
+ "ko",
438
+ "pt-BR",
439
+ "ru",
440
+ "zh-CN",
441
+ "zh-TW",
442
+ ];