riksdagsmonitor 0.8.23 → 0.8.24

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 (546) hide show
  1. package/README.md +53 -1
  2. package/dist/lib/dashboards/party-dashboard.js +2 -1
  3. package/dist/lib/dashboards/party-dashboard.js.map +1 -1
  4. package/dist/lib/dashboards/risk-dashboard.js +2 -1
  5. package/dist/lib/dashboards/risk-dashboard.js.map +1 -1
  6. package/dist/lib/shared/index.d.ts +0 -1
  7. package/dist/lib/shared/index.d.ts.map +1 -1
  8. package/dist/lib/shared/index.js +3 -1
  9. package/dist/lib/shared/index.js.map +1 -1
  10. package/dist/lib/shared/register-globals.d.ts +1 -1
  11. package/dist/lib/shared/register-globals.d.ts.map +1 -1
  12. package/dist/lib/shared/register-globals.js +7 -1
  13. package/dist/lib/shared/register-globals.js.map +1 -1
  14. package/package.json +53 -21
  15. package/dist/scripts/analysis-reader.d.ts +0 -241
  16. package/dist/scripts/analysis-reader.d.ts.map +0 -1
  17. package/dist/scripts/analysis-reader.js +0 -531
  18. package/dist/scripts/analysis-reader.js.map +0 -1
  19. package/dist/scripts/article-quality-enhancer.d.ts +0 -148
  20. package/dist/scripts/article-quality-enhancer.d.ts.map +0 -1
  21. package/dist/scripts/article-quality-enhancer.js +0 -430
  22. package/dist/scripts/article-quality-enhancer.js.map +0 -1
  23. package/dist/scripts/article-template/constants.d.ts +0 -104
  24. package/dist/scripts/article-template/constants.d.ts.map +0 -1
  25. package/dist/scripts/article-template/constants.js +0 -225
  26. package/dist/scripts/article-template/constants.js.map +0 -1
  27. package/dist/scripts/article-template/helpers.d.ts +0 -83
  28. package/dist/scripts/article-template/helpers.d.ts.map +0 -1
  29. package/dist/scripts/article-template/helpers.js +0 -236
  30. package/dist/scripts/article-template/helpers.js.map +0 -1
  31. package/dist/scripts/article-template/index.d.ts +0 -39
  32. package/dist/scripts/article-template/index.d.ts.map +0 -1
  33. package/dist/scripts/article-template/index.js +0 -37
  34. package/dist/scripts/article-template/index.js.map +0 -1
  35. package/dist/scripts/article-template/registry.d.ts +0 -64
  36. package/dist/scripts/article-template/registry.d.ts.map +0 -1
  37. package/dist/scripts/article-template/registry.js +0 -405
  38. package/dist/scripts/article-template/registry.js.map +0 -1
  39. package/dist/scripts/article-template/template.d.ts +0 -18
  40. package/dist/scripts/article-template/template.d.ts.map +0 -1
  41. package/dist/scripts/article-template/template.js +0 -359
  42. package/dist/scripts/article-template/template.js.map +0 -1
  43. package/dist/scripts/article-template/types.d.ts +0 -90
  44. package/dist/scripts/article-template/types.d.ts.map +0 -1
  45. package/dist/scripts/article-template/types.js +0 -96
  46. package/dist/scripts/article-template/types.js.map +0 -1
  47. package/dist/scripts/article-template.d.ts +0 -18
  48. package/dist/scripts/article-template.d.ts.map +0 -1
  49. package/dist/scripts/article-template.js +0 -18
  50. package/dist/scripts/article-template.js.map +0 -1
  51. package/dist/scripts/catalog-downloaded-data.d.ts +0 -66
  52. package/dist/scripts/catalog-downloaded-data.d.ts.map +0 -1
  53. package/dist/scripts/catalog-downloaded-data.js +0 -239
  54. package/dist/scripts/catalog-downloaded-data.js.map +0 -1
  55. package/dist/scripts/check-cia-schema-updates.d.ts +0 -186
  56. package/dist/scripts/check-cia-schema-updates.d.ts.map +0 -1
  57. package/dist/scripts/check-cia-schema-updates.js +0 -363
  58. package/dist/scripts/check-cia-schema-updates.js.map +0 -1
  59. package/dist/scripts/data-transformers/calendar.d.ts +0 -16
  60. package/dist/scripts/data-transformers/calendar.d.ts.map +0 -1
  61. package/dist/scripts/data-transformers/calendar.js +0 -137
  62. package/dist/scripts/data-transformers/calendar.js.map +0 -1
  63. package/dist/scripts/data-transformers/constants/committee-names.d.ts +0 -15
  64. package/dist/scripts/data-transformers/constants/committee-names.d.ts.map +0 -1
  65. package/dist/scripts/data-transformers/constants/committee-names.js +0 -30
  66. package/dist/scripts/data-transformers/constants/committee-names.js.map +0 -1
  67. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts +0 -11
  68. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts.map +0 -1
  69. package/dist/scripts/data-transformers/constants/content-labels-part1.js +0 -900
  70. package/dist/scripts/data-transformers/constants/content-labels-part1.js.map +0 -1
  71. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts +0 -11
  72. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts.map +0 -1
  73. package/dist/scripts/data-transformers/constants/content-labels-part2.js +0 -900
  74. package/dist/scripts/data-transformers/constants/content-labels-part2.js.map +0 -1
  75. package/dist/scripts/data-transformers/constants/content-labels.d.ts +0 -13
  76. package/dist/scripts/data-transformers/constants/content-labels.d.ts.map +0 -1
  77. package/dist/scripts/data-transformers/constants/content-labels.js +0 -18
  78. package/dist/scripts/data-transformers/constants/content-labels.js.map +0 -1
  79. package/dist/scripts/data-transformers/constants/index.d.ts +0 -15
  80. package/dist/scripts/data-transformers/constants/index.d.ts.map +0 -1
  81. package/dist/scripts/data-transformers/constants/index.js +0 -15
  82. package/dist/scripts/data-transformers/constants/index.js.map +0 -1
  83. package/dist/scripts/data-transformers/constants/locale-map.d.ts +0 -13
  84. package/dist/scripts/data-transformers/constants/locale-map.d.ts.map +0 -1
  85. package/dist/scripts/data-transformers/constants/locale-map.js +0 -17
  86. package/dist/scripts/data-transformers/constants/locale-map.js.map +0 -1
  87. package/dist/scripts/data-transformers/constants.d.ts +0 -14
  88. package/dist/scripts/data-transformers/constants.d.ts.map +0 -1
  89. package/dist/scripts/data-transformers/constants.js +0 -14
  90. package/dist/scripts/data-transformers/constants.js.map +0 -1
  91. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts +0 -64
  92. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts.map +0 -1
  93. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js +0 -805
  94. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js.map +0 -1
  95. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts +0 -50
  96. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts.map +0 -1
  97. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js +0 -310
  98. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js.map +0 -1
  99. package/dist/scripts/data-transformers/content-generators/committee.d.ts +0 -12
  100. package/dist/scripts/data-transformers/content-generators/committee.d.ts.map +0 -1
  101. package/dist/scripts/data-transformers/content-generators/committee.js +0 -247
  102. package/dist/scripts/data-transformers/content-generators/committee.js.map +0 -1
  103. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts +0 -124
  104. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts.map +0 -1
  105. package/dist/scripts/data-transformers/content-generators/dashboard-section.js +0 -564
  106. package/dist/scripts/data-transformers/content-generators/dashboard-section.js.map +0 -1
  107. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts +0 -82
  108. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts.map +0 -1
  109. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js +0 -321
  110. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js.map +0 -1
  111. package/dist/scripts/data-transformers/content-generators/generic.d.ts +0 -12
  112. package/dist/scripts/data-transformers/content-generators/generic.d.ts.map +0 -1
  113. package/dist/scripts/data-transformers/content-generators/generic.js +0 -295
  114. package/dist/scripts/data-transformers/content-generators/generic.js.map +0 -1
  115. package/dist/scripts/data-transformers/content-generators/index.d.ts +0 -84
  116. package/dist/scripts/data-transformers/content-generators/index.d.ts.map +0 -1
  117. package/dist/scripts/data-transformers/content-generators/index.js +0 -47
  118. package/dist/scripts/data-transformers/content-generators/index.js.map +0 -1
  119. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts +0 -12
  120. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts.map +0 -1
  121. package/dist/scripts/data-transformers/content-generators/interpellations.js +0 -124
  122. package/dist/scripts/data-transformers/content-generators/interpellations.js.map +0 -1
  123. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts +0 -137
  124. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts.map +0 -1
  125. package/dist/scripts/data-transformers/content-generators/mindmap-section.js +0 -286
  126. package/dist/scripts/data-transformers/content-generators/mindmap-section.js.map +0 -1
  127. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts +0 -17
  128. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts.map +0 -1
  129. package/dist/scripts/data-transformers/content-generators/month-ahead.js +0 -212
  130. package/dist/scripts/data-transformers/content-generators/month-ahead.js.map +0 -1
  131. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts +0 -17
  132. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts.map +0 -1
  133. package/dist/scripts/data-transformers/content-generators/monthly-review.js +0 -173
  134. package/dist/scripts/data-transformers/content-generators/monthly-review.js.map +0 -1
  135. package/dist/scripts/data-transformers/content-generators/motions.d.ts +0 -12
  136. package/dist/scripts/data-transformers/content-generators/motions.d.ts.map +0 -1
  137. package/dist/scripts/data-transformers/content-generators/motions.js +0 -158
  138. package/dist/scripts/data-transformers/content-generators/motions.js.map +0 -1
  139. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts +0 -62
  140. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts.map +0 -1
  141. package/dist/scripts/data-transformers/content-generators/newsworthiness.js +0 -254
  142. package/dist/scripts/data-transformers/content-generators/newsworthiness.js.map +0 -1
  143. package/dist/scripts/data-transformers/content-generators/propositions.d.ts +0 -12
  144. package/dist/scripts/data-transformers/content-generators/propositions.d.ts.map +0 -1
  145. package/dist/scripts/data-transformers/content-generators/propositions.js +0 -263
  146. package/dist/scripts/data-transformers/content-generators/propositions.js.map +0 -1
  147. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts +0 -92
  148. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts.map +0 -1
  149. package/dist/scripts/data-transformers/content-generators/sankey-section.js +0 -257
  150. package/dist/scripts/data-transformers/content-generators/sankey-section.js.map +0 -1
  151. package/dist/scripts/data-transformers/content-generators/shared.d.ts +0 -139
  152. package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +0 -1
  153. package/dist/scripts/data-transformers/content-generators/shared.js +0 -935
  154. package/dist/scripts/data-transformers/content-generators/shared.js.map +0 -1
  155. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts +0 -50
  156. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts.map +0 -1
  157. package/dist/scripts/data-transformers/content-generators/swot-section.js +0 -177
  158. package/dist/scripts/data-transformers/content-generators/swot-section.js.map +0 -1
  159. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts +0 -12
  160. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts.map +0 -1
  161. package/dist/scripts/data-transformers/content-generators/week-ahead.js +0 -332
  162. package/dist/scripts/data-transformers/content-generators/week-ahead.js.map +0 -1
  163. package/dist/scripts/data-transformers/content-generators.d.ts +0 -15
  164. package/dist/scripts/data-transformers/content-generators.d.ts.map +0 -1
  165. package/dist/scripts/data-transformers/content-generators.js +0 -14
  166. package/dist/scripts/data-transformers/content-generators.js.map +0 -1
  167. package/dist/scripts/data-transformers/document-analysis.d.ts +0 -58
  168. package/dist/scripts/data-transformers/document-analysis.d.ts.map +0 -1
  169. package/dist/scripts/data-transformers/document-analysis.js +0 -396
  170. package/dist/scripts/data-transformers/document-analysis.js.map +0 -1
  171. package/dist/scripts/data-transformers/helpers.d.ts +0 -144
  172. package/dist/scripts/data-transformers/helpers.d.ts.map +0 -1
  173. package/dist/scripts/data-transformers/helpers.js +0 -408
  174. package/dist/scripts/data-transformers/helpers.js.map +0 -1
  175. package/dist/scripts/data-transformers/index.d.ts +0 -45
  176. package/dist/scripts/data-transformers/index.d.ts.map +0 -1
  177. package/dist/scripts/data-transformers/index.js +0 -66
  178. package/dist/scripts/data-transformers/index.js.map +0 -1
  179. package/dist/scripts/data-transformers/metadata.d.ts +0 -42
  180. package/dist/scripts/data-transformers/metadata.d.ts.map +0 -1
  181. package/dist/scripts/data-transformers/metadata.js +0 -385
  182. package/dist/scripts/data-transformers/metadata.js.map +0 -1
  183. package/dist/scripts/data-transformers/policy-analysis.d.ts +0 -105
  184. package/dist/scripts/data-transformers/policy-analysis.d.ts.map +0 -1
  185. package/dist/scripts/data-transformers/policy-analysis.js +0 -686
  186. package/dist/scripts/data-transformers/policy-analysis.js.map +0 -1
  187. package/dist/scripts/data-transformers/risk-analysis.d.ts +0 -104
  188. package/dist/scripts/data-transformers/risk-analysis.d.ts.map +0 -1
  189. package/dist/scripts/data-transformers/risk-analysis.js +0 -279
  190. package/dist/scripts/data-transformers/risk-analysis.js.map +0 -1
  191. package/dist/scripts/data-transformers/types.d.ts +0 -260
  192. package/dist/scripts/data-transformers/types.d.ts.map +0 -1
  193. package/dist/scripts/data-transformers/types.js +0 -11
  194. package/dist/scripts/data-transformers/types.js.map +0 -1
  195. package/dist/scripts/data-transformers.d.ts +0 -23
  196. package/dist/scripts/data-transformers.d.ts.map +0 -1
  197. package/dist/scripts/data-transformers.js +0 -35
  198. package/dist/scripts/data-transformers.js.map +0 -1
  199. package/dist/scripts/deep-inspection/index.d.ts +0 -55
  200. package/dist/scripts/deep-inspection/index.d.ts.map +0 -1
  201. package/dist/scripts/deep-inspection/index.js +0 -66
  202. package/dist/scripts/deep-inspection/index.js.map +0 -1
  203. package/dist/scripts/detect-swedish-leakage.d.ts +0 -69
  204. package/dist/scripts/detect-swedish-leakage.d.ts.map +0 -1
  205. package/dist/scripts/detect-swedish-leakage.js +0 -417
  206. package/dist/scripts/detect-swedish-leakage.js.map +0 -1
  207. package/dist/scripts/editorial-framework.d.ts +0 -121
  208. package/dist/scripts/editorial-framework.d.ts.map +0 -1
  209. package/dist/scripts/editorial-framework.js +0 -364
  210. package/dist/scripts/editorial-framework.js.map +0 -1
  211. package/dist/scripts/editorial-pillars.d.ts +0 -43
  212. package/dist/scripts/editorial-pillars.d.ts.map +0 -1
  213. package/dist/scripts/editorial-pillars.js +0 -215
  214. package/dist/scripts/editorial-pillars.js.map +0 -1
  215. package/dist/scripts/extract-news-metadata.d.ts +0 -12
  216. package/dist/scripts/extract-news-metadata.d.ts.map +0 -1
  217. package/dist/scripts/extract-news-metadata.js +0 -107
  218. package/dist/scripts/extract-news-metadata.js.map +0 -1
  219. package/dist/scripts/extract-vocabulary.d.ts +0 -15
  220. package/dist/scripts/extract-vocabulary.d.ts.map +0 -1
  221. package/dist/scripts/extract-vocabulary.js +0 -255
  222. package/dist/scripts/extract-vocabulary.js.map +0 -1
  223. package/dist/scripts/fix-article-navigation.d.ts +0 -37
  224. package/dist/scripts/fix-article-navigation.d.ts.map +0 -1
  225. package/dist/scripts/fix-article-navigation.js +0 -198
  226. package/dist/scripts/fix-article-navigation.js.map +0 -1
  227. package/dist/scripts/fix-keywords-localization.d.ts +0 -18
  228. package/dist/scripts/fix-keywords-localization.d.ts.map +0 -1
  229. package/dist/scripts/fix-keywords-localization.js +0 -270
  230. package/dist/scripts/fix-keywords-localization.js.map +0 -1
  231. package/dist/scripts/fix-old-articles-branding.d.ts +0 -17
  232. package/dist/scripts/fix-old-articles-branding.d.ts.map +0 -1
  233. package/dist/scripts/fix-old-articles-branding.js +0 -229
  234. package/dist/scripts/fix-old-articles-branding.js.map +0 -1
  235. package/dist/scripts/generate-news-backport.d.ts +0 -16
  236. package/dist/scripts/generate-news-backport.d.ts.map +0 -1
  237. package/dist/scripts/generate-news-backport.js +0 -379
  238. package/dist/scripts/generate-news-backport.js.map +0 -1
  239. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts +0 -141
  240. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts.map +0 -1
  241. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js +0 -546
  242. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js.map +0 -1
  243. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts +0 -59
  244. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts.map +0 -1
  245. package/dist/scripts/generate-news-enhanced/analysis-cache.js +0 -116
  246. package/dist/scripts/generate-news-enhanced/analysis-cache.js.map +0 -1
  247. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts +0 -58
  248. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts.map +0 -1
  249. package/dist/scripts/generate-news-enhanced/analysis-labels.js +0 -144
  250. package/dist/scripts/generate-news-enhanced/analysis-labels.js.map +0 -1
  251. package/dist/scripts/generate-news-enhanced/config.d.ts +0 -58
  252. package/dist/scripts/generate-news-enhanced/config.d.ts.map +0 -1
  253. package/dist/scripts/generate-news-enhanced/config.js +0 -286
  254. package/dist/scripts/generate-news-enhanced/config.js.map +0 -1
  255. package/dist/scripts/generate-news-enhanced/generators.d.ts +0 -119
  256. package/dist/scripts/generate-news-enhanced/generators.d.ts.map +0 -1
  257. package/dist/scripts/generate-news-enhanced/generators.js +0 -2131
  258. package/dist/scripts/generate-news-enhanced/generators.js.map +0 -1
  259. package/dist/scripts/generate-news-enhanced/helpers.d.ts +0 -122
  260. package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +0 -1
  261. package/dist/scripts/generate-news-enhanced/helpers.js +0 -468
  262. package/dist/scripts/generate-news-enhanced/helpers.js.map +0 -1
  263. package/dist/scripts/generate-news-enhanced/index.d.ts +0 -19
  264. package/dist/scripts/generate-news-enhanced/index.d.ts.map +0 -1
  265. package/dist/scripts/generate-news-enhanced/index.js +0 -221
  266. package/dist/scripts/generate-news-enhanced/index.js.map +0 -1
  267. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +0 -46
  268. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +0 -1
  269. package/dist/scripts/generate-news-enhanced/swot-analyzer.js +0 -1227
  270. package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +0 -1
  271. package/dist/scripts/generate-news-enhanced/types.d.ts +0 -34
  272. package/dist/scripts/generate-news-enhanced/types.d.ts.map +0 -1
  273. package/dist/scripts/generate-news-enhanced/types.js +0 -9
  274. package/dist/scripts/generate-news-enhanced/types.js.map +0 -1
  275. package/dist/scripts/generate-news-enhanced.d.ts +0 -25
  276. package/dist/scripts/generate-news-enhanced.d.ts.map +0 -1
  277. package/dist/scripts/generate-news-enhanced.js +0 -37
  278. package/dist/scripts/generate-news-enhanced.js.map +0 -1
  279. package/dist/scripts/generate-news-indexes/constants.d.ts +0 -20
  280. package/dist/scripts/generate-news-indexes/constants.d.ts.map +0 -1
  281. package/dist/scripts/generate-news-indexes/constants.js +0 -308
  282. package/dist/scripts/generate-news-indexes/constants.js.map +0 -1
  283. package/dist/scripts/generate-news-indexes/helpers.d.ts +0 -73
  284. package/dist/scripts/generate-news-indexes/helpers.d.ts.map +0 -1
  285. package/dist/scripts/generate-news-indexes/helpers.js +0 -352
  286. package/dist/scripts/generate-news-indexes/helpers.js.map +0 -1
  287. package/dist/scripts/generate-news-indexes/index.d.ts +0 -20
  288. package/dist/scripts/generate-news-indexes/index.d.ts.map +0 -1
  289. package/dist/scripts/generate-news-indexes/index.js +0 -75
  290. package/dist/scripts/generate-news-indexes/index.js.map +0 -1
  291. package/dist/scripts/generate-news-indexes/template.d.ts +0 -25
  292. package/dist/scripts/generate-news-indexes/template.d.ts.map +0 -1
  293. package/dist/scripts/generate-news-indexes/template.js +0 -644
  294. package/dist/scripts/generate-news-indexes/template.js.map +0 -1
  295. package/dist/scripts/generate-news-indexes/types.d.ts +0 -96
  296. package/dist/scripts/generate-news-indexes/types.d.ts.map +0 -1
  297. package/dist/scripts/generate-news-indexes/types.js +0 -9
  298. package/dist/scripts/generate-news-indexes/types.js.map +0 -1
  299. package/dist/scripts/generate-news-indexes.d.ts +0 -20
  300. package/dist/scripts/generate-news-indexes.d.ts.map +0 -1
  301. package/dist/scripts/generate-news-indexes.js +0 -19
  302. package/dist/scripts/generate-news-indexes.js.map +0 -1
  303. package/dist/scripts/generate-rss.d.ts +0 -48
  304. package/dist/scripts/generate-rss.d.ts.map +0 -1
  305. package/dist/scripts/generate-rss.js +0 -299
  306. package/dist/scripts/generate-rss.js.map +0 -1
  307. package/dist/scripts/generate-sitemap-html.d.ts +0 -79
  308. package/dist/scripts/generate-sitemap-html.d.ts.map +0 -1
  309. package/dist/scripts/generate-sitemap-html.js +0 -878
  310. package/dist/scripts/generate-sitemap-html.js.map +0 -1
  311. package/dist/scripts/generate-sitemap.d.ts +0 -23
  312. package/dist/scripts/generate-sitemap.d.ts.map +0 -1
  313. package/dist/scripts/generate-sitemap.js +0 -476
  314. package/dist/scripts/generate-sitemap.js.map +0 -1
  315. package/dist/scripts/generate-types-from-cia-schemas.d.ts +0 -176
  316. package/dist/scripts/generate-types-from-cia-schemas.d.ts.map +0 -1
  317. package/dist/scripts/generate-types-from-cia-schemas.js +0 -318
  318. package/dist/scripts/generate-types-from-cia-schemas.js.map +0 -1
  319. package/dist/scripts/government-role-validator.d.ts +0 -65
  320. package/dist/scripts/government-role-validator.d.ts.map +0 -1
  321. package/dist/scripts/government-role-validator.js +0 -217
  322. package/dist/scripts/government-role-validator.js.map +0 -1
  323. package/dist/scripts/html-utils.d.ts +0 -17
  324. package/dist/scripts/html-utils.d.ts.map +0 -1
  325. package/dist/scripts/html-utils.js +0 -29
  326. package/dist/scripts/html-utils.js.map +0 -1
  327. package/dist/scripts/load-cia-stats.d.ts +0 -89
  328. package/dist/scripts/load-cia-stats.d.ts.map +0 -1
  329. package/dist/scripts/load-cia-stats.js +0 -400
  330. package/dist/scripts/load-cia-stats.js.map +0 -1
  331. package/dist/scripts/mcp-client/client.d.ts +0 -73
  332. package/dist/scripts/mcp-client/client.d.ts.map +0 -1
  333. package/dist/scripts/mcp-client/client.js +0 -526
  334. package/dist/scripts/mcp-client/client.js.map +0 -1
  335. package/dist/scripts/mcp-client/document-types.d.ts +0 -23
  336. package/dist/scripts/mcp-client/document-types.d.ts.map +0 -1
  337. package/dist/scripts/mcp-client/document-types.js +0 -62
  338. package/dist/scripts/mcp-client/document-types.js.map +0 -1
  339. package/dist/scripts/mcp-client/index.d.ts +0 -34
  340. package/dist/scripts/mcp-client/index.d.ts.map +0 -1
  341. package/dist/scripts/mcp-client/index.js +0 -67
  342. package/dist/scripts/mcp-client/index.js.map +0 -1
  343. package/dist/scripts/mcp-client/transport.d.ts +0 -32
  344. package/dist/scripts/mcp-client/transport.d.ts.map +0 -1
  345. package/dist/scripts/mcp-client/transport.js +0 -102
  346. package/dist/scripts/mcp-client/transport.js.map +0 -1
  347. package/dist/scripts/mcp-client.d.ts +0 -18
  348. package/dist/scripts/mcp-client.d.ts.map +0 -1
  349. package/dist/scripts/mcp-client.js +0 -18
  350. package/dist/scripts/mcp-client.js.map +0 -1
  351. package/dist/scripts/mcp-query-cli.d.ts +0 -25
  352. package/dist/scripts/mcp-query-cli.d.ts.map +0 -1
  353. package/dist/scripts/mcp-query-cli.js +0 -66
  354. package/dist/scripts/mcp-query-cli.js.map +0 -1
  355. package/dist/scripts/news-types/breaking-news.d.ts +0 -178
  356. package/dist/scripts/news-types/breaking-news.d.ts.map +0 -1
  357. package/dist/scripts/news-types/breaking-news.js +0 -432
  358. package/dist/scripts/news-types/breaking-news.js.map +0 -1
  359. package/dist/scripts/news-types/committee-reports.d.ts +0 -212
  360. package/dist/scripts/news-types/committee-reports.d.ts.map +0 -1
  361. package/dist/scripts/news-types/committee-reports.js +0 -404
  362. package/dist/scripts/news-types/committee-reports.js.map +0 -1
  363. package/dist/scripts/news-types/month-ahead.d.ts +0 -71
  364. package/dist/scripts/news-types/month-ahead.d.ts.map +0 -1
  365. package/dist/scripts/news-types/month-ahead.js +0 -392
  366. package/dist/scripts/news-types/month-ahead.js.map +0 -1
  367. package/dist/scripts/news-types/monthly-review.d.ts +0 -61
  368. package/dist/scripts/news-types/monthly-review.d.ts.map +0 -1
  369. package/dist/scripts/news-types/monthly-review.js +0 -417
  370. package/dist/scripts/news-types/monthly-review.js.map +0 -1
  371. package/dist/scripts/news-types/motions.d.ts +0 -214
  372. package/dist/scripts/news-types/motions.d.ts.map +0 -1
  373. package/dist/scripts/news-types/motions.js +0 -447
  374. package/dist/scripts/news-types/motions.js.map +0 -1
  375. package/dist/scripts/news-types/propositions.d.ts +0 -204
  376. package/dist/scripts/news-types/propositions.d.ts.map +0 -1
  377. package/dist/scripts/news-types/propositions.js +0 -401
  378. package/dist/scripts/news-types/propositions.js.map +0 -1
  379. package/dist/scripts/news-types/week-ahead.d.ts +0 -231
  380. package/dist/scripts/news-types/week-ahead.d.ts.map +0 -1
  381. package/dist/scripts/news-types/week-ahead.js +0 -441
  382. package/dist/scripts/news-types/week-ahead.js.map +0 -1
  383. package/dist/scripts/news-types/weekly-review/analysis.d.ts +0 -47
  384. package/dist/scripts/news-types/weekly-review/analysis.d.ts.map +0 -1
  385. package/dist/scripts/news-types/weekly-review/analysis.js +0 -276
  386. package/dist/scripts/news-types/weekly-review/analysis.js.map +0 -1
  387. package/dist/scripts/news-types/weekly-review/data-loader.d.ts +0 -51
  388. package/dist/scripts/news-types/weekly-review/data-loader.d.ts.map +0 -1
  389. package/dist/scripts/news-types/weekly-review/data-loader.js +0 -298
  390. package/dist/scripts/news-types/weekly-review/data-loader.js.map +0 -1
  391. package/dist/scripts/news-types/weekly-review/generator.d.ts +0 -18
  392. package/dist/scripts/news-types/weekly-review/generator.d.ts.map +0 -1
  393. package/dist/scripts/news-types/weekly-review/generator.js +0 -284
  394. package/dist/scripts/news-types/weekly-review/generator.js.map +0 -1
  395. package/dist/scripts/news-types/weekly-review/index.d.ts +0 -20
  396. package/dist/scripts/news-types/weekly-review/index.d.ts.map +0 -1
  397. package/dist/scripts/news-types/weekly-review/index.js +0 -23
  398. package/dist/scripts/news-types/weekly-review/index.js.map +0 -1
  399. package/dist/scripts/news-types/weekly-review/types.d.ts +0 -72
  400. package/dist/scripts/news-types/weekly-review/types.d.ts.map +0 -1
  401. package/dist/scripts/news-types/weekly-review/types.js +0 -20
  402. package/dist/scripts/news-types/weekly-review/types.js.map +0 -1
  403. package/dist/scripts/news-types/weekly-review/validation.d.ts +0 -10
  404. package/dist/scripts/news-types/weekly-review/validation.d.ts.map +0 -1
  405. package/dist/scripts/news-types/weekly-review/validation.js +0 -95
  406. package/dist/scripts/news-types/weekly-review/validation.js.map +0 -1
  407. package/dist/scripts/news-types/weekly-review.d.ts +0 -15
  408. package/dist/scripts/news-types/weekly-review.d.ts.map +0 -1
  409. package/dist/scripts/news-types/weekly-review.js +0 -14
  410. package/dist/scripts/news-types/weekly-review.js.map +0 -1
  411. package/dist/scripts/party-variants.d.ts +0 -23
  412. package/dist/scripts/party-variants.d.ts.map +0 -1
  413. package/dist/scripts/party-variants.js +0 -50
  414. package/dist/scripts/party-variants.js.map +0 -1
  415. package/dist/scripts/pipeline/index.d.ts +0 -19
  416. package/dist/scripts/pipeline/index.d.ts.map +0 -1
  417. package/dist/scripts/pipeline/index.js +0 -17
  418. package/dist/scripts/pipeline/index.js.map +0 -1
  419. package/dist/scripts/pipeline/orchestrator.d.ts +0 -56
  420. package/dist/scripts/pipeline/orchestrator.d.ts.map +0 -1
  421. package/dist/scripts/pipeline/orchestrator.js +0 -147
  422. package/dist/scripts/pipeline/orchestrator.js.map +0 -1
  423. package/dist/scripts/pipeline/types.d.ts +0 -117
  424. package/dist/scripts/pipeline/types.d.ts.map +0 -1
  425. package/dist/scripts/pipeline/types.js +0 -13
  426. package/dist/scripts/pipeline/types.js.map +0 -1
  427. package/dist/scripts/pipeline/validation.d.ts +0 -66
  428. package/dist/scripts/pipeline/validation.d.ts.map +0 -1
  429. package/dist/scripts/pipeline/validation.js +0 -129
  430. package/dist/scripts/pipeline/validation.js.map +0 -1
  431. package/dist/scripts/populate-analysis-data.d.ts +0 -41
  432. package/dist/scripts/populate-analysis-data.d.ts.map +0 -1
  433. package/dist/scripts/populate-analysis-data.js +0 -255
  434. package/dist/scripts/populate-analysis-data.js.map +0 -1
  435. package/dist/scripts/pre-article-analysis/data-downloader.d.ts +0 -80
  436. package/dist/scripts/pre-article-analysis/data-downloader.d.ts.map +0 -1
  437. package/dist/scripts/pre-article-analysis/data-downloader.js +0 -230
  438. package/dist/scripts/pre-article-analysis/data-downloader.js.map +0 -1
  439. package/dist/scripts/pre-article-analysis/data-persistence.d.ts +0 -141
  440. package/dist/scripts/pre-article-analysis/data-persistence.d.ts.map +0 -1
  441. package/dist/scripts/pre-article-analysis/data-persistence.js +0 -345
  442. package/dist/scripts/pre-article-analysis/data-persistence.js.map +0 -1
  443. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +0 -158
  444. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +0 -1
  445. package/dist/scripts/pre-article-analysis/markdown-serializer.js +0 -648
  446. package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +0 -1
  447. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts +0 -58
  448. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts.map +0 -1
  449. package/dist/scripts/pre-article-analysis/pdf-converter.js +0 -142
  450. package/dist/scripts/pre-article-analysis/pdf-converter.js.map +0 -1
  451. package/dist/scripts/pre-article-analysis.d.ts +0 -42
  452. package/dist/scripts/pre-article-analysis.d.ts.map +0 -1
  453. package/dist/scripts/pre-article-analysis.js +0 -642
  454. package/dist/scripts/pre-article-analysis.js.map +0 -1
  455. package/dist/scripts/scb-client.d.ts +0 -104
  456. package/dist/scripts/scb-client.d.ts.map +0 -1
  457. package/dist/scripts/scb-client.js +0 -286
  458. package/dist/scripts/scb-client.js.map +0 -1
  459. package/dist/scripts/scb-context.d.ts +0 -88
  460. package/dist/scripts/scb-context.d.ts.map +0 -1
  461. package/dist/scripts/scb-context.js +0 -307
  462. package/dist/scripts/scb-context.js.map +0 -1
  463. package/dist/scripts/shared/version.d.ts +0 -9
  464. package/dist/scripts/shared/version.d.ts.map +0 -1
  465. package/dist/scripts/shared/version.js +0 -28
  466. package/dist/scripts/shared/version.js.map +0 -1
  467. package/dist/scripts/statistical-claims-detector.d.ts +0 -119
  468. package/dist/scripts/statistical-claims-detector.d.ts.map +0 -1
  469. package/dist/scripts/statistical-claims-detector.js +0 -391
  470. package/dist/scripts/statistical-claims-detector.js.map +0 -1
  471. package/dist/scripts/sync-cia-schemas.d.ts +0 -52
  472. package/dist/scripts/sync-cia-schemas.d.ts.map +0 -1
  473. package/dist/scripts/sync-cia-schemas.js +0 -195
  474. package/dist/scripts/sync-cia-schemas.js.map +0 -1
  475. package/dist/scripts/translation-dictionary.d.ts +0 -45
  476. package/dist/scripts/translation-dictionary.d.ts.map +0 -1
  477. package/dist/scripts/translation-dictionary.js +0 -3642
  478. package/dist/scripts/translation-dictionary.js.map +0 -1
  479. package/dist/scripts/types/article.d.ts +0 -392
  480. package/dist/scripts/types/article.d.ts.map +0 -1
  481. package/dist/scripts/types/article.js +0 -6
  482. package/dist/scripts/types/article.js.map +0 -1
  483. package/dist/scripts/types/content.d.ts +0 -167
  484. package/dist/scripts/types/content.d.ts.map +0 -1
  485. package/dist/scripts/types/content.js +0 -6
  486. package/dist/scripts/types/content.js.map +0 -1
  487. package/dist/scripts/types/editorial.d.ts +0 -17
  488. package/dist/scripts/types/editorial.d.ts.map +0 -1
  489. package/dist/scripts/types/editorial.js +0 -6
  490. package/dist/scripts/types/editorial.js.map +0 -1
  491. package/dist/scripts/types/language.d.ts +0 -7
  492. package/dist/scripts/types/language.d.ts.map +0 -1
  493. package/dist/scripts/types/language.js +0 -6
  494. package/dist/scripts/types/language.js.map +0 -1
  495. package/dist/scripts/types/mcp.d.ts +0 -117
  496. package/dist/scripts/types/mcp.d.ts.map +0 -1
  497. package/dist/scripts/types/mcp.js +0 -6
  498. package/dist/scripts/types/mcp.js.map +0 -1
  499. package/dist/scripts/types/party.d.ts +0 -9
  500. package/dist/scripts/types/party.d.ts.map +0 -1
  501. package/dist/scripts/types/party.js +0 -6
  502. package/dist/scripts/types/party.js.map +0 -1
  503. package/dist/scripts/types/validation.d.ts +0 -136
  504. package/dist/scripts/types/validation.d.ts.map +0 -1
  505. package/dist/scripts/types/validation.js +0 -6
  506. package/dist/scripts/types/validation.js.map +0 -1
  507. package/dist/scripts/types/workflow.d.ts +0 -78
  508. package/dist/scripts/types/workflow.d.ts.map +0 -1
  509. package/dist/scripts/types/workflow.js +0 -6
  510. package/dist/scripts/types/workflow.js.map +0 -1
  511. package/dist/scripts/update-stats-from-cia.d.ts +0 -44
  512. package/dist/scripts/update-stats-from-cia.d.ts.map +0 -1
  513. package/dist/scripts/update-stats-from-cia.js +0 -310
  514. package/dist/scripts/update-stats-from-cia.js.map +0 -1
  515. package/dist/scripts/validate-against-cia-schemas.d.ts +0 -126
  516. package/dist/scripts/validate-against-cia-schemas.d.ts.map +0 -1
  517. package/dist/scripts/validate-against-cia-schemas.js +0 -299
  518. package/dist/scripts/validate-against-cia-schemas.js.map +0 -1
  519. package/dist/scripts/validate-cross-references.d.ts +0 -49
  520. package/dist/scripts/validate-cross-references.d.ts.map +0 -1
  521. package/dist/scripts/validate-cross-references.js +0 -183
  522. package/dist/scripts/validate-cross-references.js.map +0 -1
  523. package/dist/scripts/validate-file-ownership.d.ts +0 -68
  524. package/dist/scripts/validate-file-ownership.d.ts.map +0 -1
  525. package/dist/scripts/validate-file-ownership.js +0 -135
  526. package/dist/scripts/validate-file-ownership.js.map +0 -1
  527. package/dist/scripts/validate-news-translations.d.ts +0 -27
  528. package/dist/scripts/validate-news-translations.d.ts.map +0 -1
  529. package/dist/scripts/validate-news-translations.js +0 -258
  530. package/dist/scripts/validate-news-translations.js.map +0 -1
  531. package/dist/scripts/validate-translations.d.ts +0 -162
  532. package/dist/scripts/validate-translations.d.ts.map +0 -1
  533. package/dist/scripts/validate-translations.js +0 -378
  534. package/dist/scripts/validate-translations.js.map +0 -1
  535. package/dist/scripts/workflow-state-coordinator.d.ts +0 -354
  536. package/dist/scripts/workflow-state-coordinator.d.ts.map +0 -1
  537. package/dist/scripts/workflow-state-coordinator.js +0 -876
  538. package/dist/scripts/workflow-state-coordinator.js.map +0 -1
  539. package/dist/scripts/world-bank-client.d.ts +0 -122
  540. package/dist/scripts/world-bank-client.d.ts.map +0 -1
  541. package/dist/scripts/world-bank-client.js +0 -192
  542. package/dist/scripts/world-bank-client.js.map +0 -1
  543. package/dist/scripts/world-bank-context.d.ts +0 -88
  544. package/dist/scripts/world-bank-context.d.ts.map +0 -1
  545. package/dist/scripts/world-bank-context.js +0 -331
  546. package/dist/scripts/world-bank-context.js.map +0 -1
@@ -1,878 +0,0 @@
1
- /**
2
- * @module Infrastructure/SEO
3
- * @category Intelligence Operations / Supporting Infrastructure
4
- * @name Sitemap HTML Generation - Multi-Language HTML Sitemap Pages
5
- *
6
- * @description
7
- * Generates localized sitemap HTML pages for all 14 language variants.
8
- * Extracts article titles and descriptions from news HTML files and
9
- * generates human-readable sitemap pages with proper localization.
10
- *
11
- * @author Hack23 AB (Infrastructure Team)
12
- * @license Apache-2.0
13
- * @version 1.0.0
14
- */
15
- import fs from 'fs';
16
- import path from 'path';
17
- import { fileURLToPath } from 'url';
18
- const __filename = fileURLToPath(import.meta.url);
19
- const __dirname = path.dirname(__filename);
20
- console.log('šŸ—ŗļø Sitemap HTML Generation Script');
21
- // ---------------------------------------------------------------------------
22
- // Configuration
23
- // ---------------------------------------------------------------------------
24
- const BASE_URL = 'https://riksdagsmonitor.com';
25
- const NEWS_DIR = path.join(__dirname, '..', 'news');
26
- const DOCS_DIR = path.join(__dirname, '..', 'docs');
27
- const ROOT_DIR = path.join(__dirname, '..');
28
- const LANGUAGES = ['en', 'sv', 'da', 'no', 'fi', 'de', 'fr', 'es', 'nl', 'ar', 'he', 'ja', 'ko', 'zh'];
29
- const LANGUAGE_META = {
30
- en: {
31
- name: 'English', nativeName: 'English', flag: 'šŸ‡¬šŸ‡§', dir: 'ltr', locale: 'en_US', hreflang: 'en',
32
- translations: {
33
- siteMap: 'Sitemap', completeNavigation: 'Complete navigation for Riksdagsmonitor platform',
34
- quickJumpTo: 'Quick Jump To', mainPlatform: 'Main Platform', dashboards: 'Interactive Dashboards',
35
- newsAnalysis: 'News & Analysis', multiLanguage: 'Multi-Language Platform Access',
36
- documentation: 'Documentation', resources: 'Additional Resources',
37
- sitemapLanguages: 'This Sitemap in Other Languages', home: 'Home',
38
- newsIndex: 'News Index', newsDesc: 'Latest political news, analysis, and updates from the Swedish Parliament and Government.',
39
- ciaDashboard: 'CIA Intelligence Dashboard', ciaDashboardDesc: 'Interactive visualization of CIA intelligence exports: Party performance, election predictions, MP rankings.',
40
- politicianDashboard: 'Politician Career & Productivity Analytics', politicianDashboardDesc: 'Comprehensive politician career and productivity dashboard for Sweden\'s 349 MPs.',
41
- mainPlatformDesc: 'Swedish Election 2026 live intelligence platform: Real-time monitoring, coalition predictions, comprehensive parliamentary analysis.',
42
- xmlSitemap: 'XML Sitemap', xmlSitemapDesc: 'Machine-readable sitemap for search engines (XML format).',
43
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'Search engine crawler instructions.',
44
- sitemapInOtherLanguages: 'This Sitemap in Other Languages', accessPlatform: 'Access the main platform in your preferred language.',
45
- apiDocs: 'API Documentation', apiDocsDesc: 'Generated API documentation for platform scripts and modules.',
46
- coverageReports: 'Code Coverage Reports', coverageReportsDesc: 'Test coverage reports for JavaScript and TypeScript code.',
47
- testResults: 'Test Results', testResultsDesc: 'Automated test results and reports.',
48
- recentArticles: 'Recent News Articles', newsIndexPages: 'News Index Pages',
49
- },
50
- },
51
- sv: {
52
- name: 'Swedish', nativeName: 'Svenska', flag: 'šŸ‡øšŸ‡Ŗ', dir: 'ltr', locale: 'sv_SE', hreflang: 'sv',
53
- translations: {
54
- siteMap: 'Webbplatskarta', completeNavigation: 'Komplett navigering fƶr Riksdagsmonitor-plattformen',
55
- quickJumpTo: 'Snabbnavigering', mainPlatform: 'Huvudplattform', dashboards: 'Interaktiva instrumentpaneler',
56
- newsAnalysis: 'Nyheter & Analys', multiLanguage: 'FlersprƄkig plattformsƄtkomst',
57
- documentation: 'Dokumentation', resources: 'Ytterligare resurser',
58
- sitemapLanguages: 'Denna webbplatskarta pƄ andra sprƄk', home: 'Hem',
59
- newsIndex: 'Nyhetsindex', newsDesc: 'Senaste politiska nyheter, analyser och uppdateringar frƄn Sveriges riksdag och regering.',
60
- ciaDashboard: 'CIA Intelligens-instrumentpanel', ciaDashboardDesc: 'Interaktiv visualisering av CIA intelligensexporter: Partiprestation, valprognoser, MP-rankningar.',
61
- politicianDashboard: 'Politiker karriƤr & produktivitetsanalys', politicianDashboardDesc: 'Omfattande politiker karriƤr- och produktivitetspanel fƶr Sveriges 349 riksdagsledamƶter.',
62
- mainPlatformDesc: 'Sveriges val 2026 live: Realtidsƶvervakning, koalitionsprognoser, omfattande parlamentarisk analys.',
63
- xmlSitemap: 'XML-webbplatskarta', xmlSitemapDesc: 'MaskinlƤsbar webbplatskarta fƶr sƶkmotorer (XML-format).',
64
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'Instruktioner fƶr sƶkmotorsƶkare.',
65
- sitemapInOtherLanguages: 'Denna webbplatskarta pĆ„ andra sprĆ„k', accessPlatform: 'Ɩppna huvudplattformen pĆ„ ditt fƶredragna sprĆ„k.',
66
- apiDocs: 'API-dokumentation', apiDocsDesc: 'Genererad API-dokumentation fƶr plattformens skript och moduler.',
67
- coverageReports: 'KodtƤckningsrapporter', coverageReportsDesc: 'TesttƤckningsrapporter fƶr JavaScript och TypeScript-kod.',
68
- testResults: 'Testresultat', testResultsDesc: 'Automatiserade testresultat och rapporter.',
69
- recentArticles: 'Senaste nyhetsartiklar', newsIndexPages: 'Nyhetsindexsidor',
70
- },
71
- },
72
- da: {
73
- name: 'Danish', nativeName: 'Dansk', flag: 'šŸ‡©šŸ‡°', dir: 'ltr', locale: 'da_DK', hreflang: 'da',
74
- translations: {
75
- siteMap: 'Sitemap', completeNavigation: 'Komplet navigation for Riksdagsmonitor-platformen',
76
- quickJumpTo: 'Hurtig navigation', mainPlatform: 'Hovedplatform', dashboards: 'Interaktive dashboards',
77
- newsAnalysis: 'Nyheder & Analyse', multiLanguage: 'Flersproget platformsadgang',
78
- documentation: 'Dokumentation', resources: 'Yderligere ressourcer',
79
- sitemapLanguages: 'Dette sitemap pƄ andre sprog', home: 'Hjem',
80
- newsIndex: 'Nyhedsindeks', newsDesc: 'Seneste politiske nyheder, analyser og opdateringer fra Sveriges Riksdag og regering.',
81
- ciaDashboard: 'CIA Efterretningspanel', ciaDashboardDesc: 'Interaktivt CIA efterretningspanel: Partiydelse, valgprognoser, folketingsmedlemmer.',
82
- politicianDashboard: 'Politiker karriere & produktivitetsanalyse', politicianDashboardDesc: 'Omfattende politiker karriere- og produktivitetspanel.',
83
- mainPlatformDesc: 'Sveriges valg 2026 live: RealtidsovervƄgning, koalitionsprognoser, parlamentarisk analyse.',
84
- xmlSitemap: 'XML Sitemap', xmlSitemapDesc: 'Maskinlæsbart sitemap til søgemaskiner (XML-format).',
85
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'SĆøgemaskine-crawler-instruktioner.',
86
- sitemapInOtherLanguages: 'Dette sitemap pƄ andre sprog', accessPlatform: 'Adgang til hovedplatformen pƄ dit foretrukne sprog.',
87
- apiDocs: 'API-dokumentation', apiDocsDesc: 'Genereret API-dokumentation for platformens scripts og moduler.',
88
- coverageReports: 'KodedƦkningsrapporter', coverageReportsDesc: 'TestdƦkningsrapporter for JavaScript og TypeScript-kode.',
89
- testResults: 'Testresultater', testResultsDesc: 'Automatiserede testresultater og rapporter.',
90
- recentArticles: 'Seneste nyheder', newsIndexPages: 'Nyhedsindekssider',
91
- },
92
- },
93
- no: {
94
- name: 'Norwegian', nativeName: 'Norsk', flag: 'šŸ‡³šŸ‡“', dir: 'ltr', locale: 'nb_NO', hreflang: 'nb',
95
- translations: {
96
- siteMap: 'Nettstedskart', completeNavigation: 'Komplett navigering for Riksdagsmonitor-plattformen',
97
- quickJumpTo: 'Hurtignavigering', mainPlatform: 'Hovedplattform', dashboards: 'Interaktive dashbord',
98
- newsAnalysis: 'Nyheter & Analyse', multiLanguage: 'FlersprƄklig plattformstilgang',
99
- documentation: 'Dokumentasjon', resources: 'Ytterligere ressurser',
100
- sitemapLanguages: 'Dette nettstedskartet pƄ andre sprƄk', home: 'Hjem',
101
- newsIndex: 'Nyhetsindeks', newsDesc: 'Siste politiske nyheter, analyser og oppdateringer fra Sveriges Riksdag og regjering.',
102
- ciaDashboard: 'CIA Etterretningspanel', ciaDashboardDesc: 'Interaktivt CIA etterretningspanel: Partiytelse, valgprognoser, stortingsrepresentanter.',
103
- politicianDashboard: 'Politiker karriere & produktivitetsanalyse', politicianDashboardDesc: 'Omfattende politiker karriere- og produktivitetspanel.',
104
- mainPlatformDesc: 'Sveriges valg 2026 live: SanntidsovervƄking, koalisjonsprognoser, parlamentarisk analyse.',
105
- xmlSitemap: 'XML Nettstedskart', xmlSitemapDesc: 'Maskinlesbart nettstedskart for sĆøkemotorer (XML-format).',
106
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'SĆøkemotor-crawler-instruksjoner.',
107
- sitemapInOtherLanguages: 'Dette nettstedskartet pƄ andre sprƄk', accessPlatform: 'Tilgang til hovedplattformen pƄ ditt foretrukne sprƄk.',
108
- apiDocs: 'API-dokumentasjon', apiDocsDesc: 'Generert API-dokumentasjon for plattformens skript og moduler.',
109
- coverageReports: 'Kodedekkningsrapporter', coverageReportsDesc: 'Testdekkningsrapporter for JavaScript og TypeScript-kode.',
110
- testResults: 'Testresultater', testResultsDesc: 'Automatiserte testresultater og rapporter.',
111
- recentArticles: 'Siste nyheter', newsIndexPages: 'Nyhetsindekssider',
112
- },
113
- },
114
- fi: {
115
- name: 'Finnish', nativeName: 'Suomi', flag: 'šŸ‡«šŸ‡®', dir: 'ltr', locale: 'fi_FI', hreflang: 'fi',
116
- translations: {
117
- siteMap: 'Sivukartta', completeNavigation: 'Riksdagsmonitor-alustan tƤydellinen navigointi',
118
- quickJumpTo: 'Pikanavigaatio', mainPlatform: 'PƤƤalusta', dashboards: 'Interaktiiviset kojetaulut',
119
- newsAnalysis: 'Uutiset & Analyysi', multiLanguage: 'Monikielinen alustapƤƤsy',
120
- documentation: 'Dokumentaatio', resources: 'LisƤresurssit',
121
- sitemapLanguages: 'TƤmƤ sivukartta muilla kielillƤ', home: 'Etusivu',
122
- newsIndex: 'Uutisindeksi', newsDesc: 'Uusimmat poliittiset uutiset, analyysit ja pƤivitykset Ruotsin parlamentista ja hallituksesta.',
123
- ciaDashboard: 'CIA Tiedustelupaneeli', ciaDashboardDesc: 'Interaktiivinen CIA tiedustelupaneeli: Puolueiden suorituskyky, vaaliennusteet, kansanedustajat.',
124
- politicianDashboard: 'Poliitikon ura & tuottavuusanalyysi', politicianDashboardDesc: 'Kattava poliitikon ura- ja tuottavuuspaneeli.',
125
- mainPlatformDesc: 'Ruotsin vaalit 2026 live: Reaaliaikainen seuranta, koalitioennusteet, parlamentaarinen analyysi.',
126
- xmlSitemap: 'XML-sivukartta', xmlSitemapDesc: 'Koneluettava sivukartta hakukoneille (XML-muoto).',
127
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'Hakukoneiden indeksointi-ohjeet.',
128
- sitemapInOtherLanguages: 'TƤmƤ sivukartta muilla kielillƤ', accessPlatform: 'Avaa pƤƤalusta haluamallasi kielellƤ.',
129
- apiDocs: 'API-dokumentaatio', apiDocsDesc: 'Generoitu API-dokumentaatio alustan skripteille ja moduuleille.',
130
- coverageReports: 'Koodikattavuusraportit', coverageReportsDesc: 'Testikattavuusraportit JavaScript- ja TypeScript-koodille.',
131
- testResults: 'Testitulokset', testResultsDesc: 'Automatisoidut testitulokset ja raportit.',
132
- recentArticles: 'ViimeisimmƤt uutiset', newsIndexPages: 'Uutisindeksisivut',
133
- },
134
- },
135
- de: {
136
- name: 'German', nativeName: 'Deutsch', flag: 'šŸ‡©šŸ‡Ŗ', dir: 'ltr', locale: 'de_DE', hreflang: 'de',
137
- translations: {
138
- siteMap: 'Sitemap', completeNavigation: 'Vollständige Navigation für die Riksdagsmonitor-Plattform',
139
- quickJumpTo: 'Schnellnavigation', mainPlatform: 'Hauptplattform', dashboards: 'Interaktive Dashboards',
140
- newsAnalysis: 'Nachrichten & Analyse', multiLanguage: 'Mehrsprachiger Plattformzugang',
141
- documentation: 'Dokumentation', resources: 'Weitere Ressourcen',
142
- sitemapLanguages: 'Diese Sitemap in anderen Sprachen', home: 'Startseite',
143
- newsIndex: 'Nachrichtenindex', newsDesc: 'Neueste politische Nachrichten, Analysen und Updates aus dem schwedischen Reichstag und der Regierung.',
144
- ciaDashboard: 'CIA Nachrichtendienst-Dashboard', ciaDashboardDesc: 'Interaktives CIA Dashboard: Parteileistung, Wahlprognosen, Abgeordnete und Analyse.',
145
- politicianDashboard: 'Politiker Karriere- & ProduktivitƤtsanalyse', politicianDashboardDesc: 'Umfassendes Politiker-Karriere- und ProduktivitƤts-Dashboard.',
146
- mainPlatformDesc: 'Schwedische Wahl 2026 live: Echtzeitüberwachung, Koalitionsprognosen, parlamentarische Analyse.',
147
- xmlSitemap: 'XML-Sitemap', xmlSitemapDesc: 'Maschinenlesbare Sitemap für Suchmaschinen (XML-Format).',
148
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'Suchmaschinen-Crawler-Anweisungen.',
149
- sitemapInOtherLanguages: 'Diese Sitemap in anderen Sprachen', accessPlatform: 'Zugriff auf die Hauptplattform in Ihrer bevorzugten Sprache.',
150
- apiDocs: 'API-Dokumentation', apiDocsDesc: 'Generierte API-Dokumentation für Plattform-Skripte und Module.',
151
- coverageReports: 'Code-Coverage-Berichte', coverageReportsDesc: 'Testabdeckungsberichte für JavaScript und TypeScript-Code.',
152
- testResults: 'Testergebnisse', testResultsDesc: 'Automatisierte Testergebnisse und Berichte.',
153
- recentArticles: 'Aktuelle Nachrichten', newsIndexPages: 'Nachrichtenindexseiten',
154
- },
155
- },
156
- fr: {
157
- name: 'French', nativeName: 'FranƧais', flag: 'šŸ‡«šŸ‡·', dir: 'ltr', locale: 'fr_FR', hreflang: 'fr',
158
- translations: {
159
- siteMap: 'Plan du site', completeNavigation: 'Navigation complĆØte pour la plateforme Riksdagsmonitor',
160
- quickJumpTo: 'Navigation rapide', mainPlatform: 'Plateforme principale', dashboards: 'Tableaux de bord interactifs',
161
- newsAnalysis: 'Actualités & Analyse', multiLanguage: 'Accès multilingue à la plateforme',
162
- documentation: 'Documentation', resources: 'Ressources supplƩmentaires',
163
- sitemapLanguages: 'Ce plan du site dans d\'autres langues', home: 'Accueil',
164
- newsIndex: 'Index des actualités', newsDesc: 'Dernières actualités politiques, analyses et mises à jour du Parlement et du gouvernement suédois.',
165
- ciaDashboard: 'Tableau de bord CIA', ciaDashboardDesc: 'Tableau de bord CIA interactif: Performance des partis, prƩvisions Ʃlectorales, dƩputƩs.',
166
- politicianDashboard: 'Carrière politique & analyse de productivité', politicianDashboardDesc: 'Tableau de bord complet de carrière et productivité des politiciens.',
167
- mainPlatformDesc: 'Ɖlections suĆ©doises 2026 en direct: Surveillance en temps rĆ©el, prĆ©visions de coalition, analyse parlementaire.',
168
- xmlSitemap: 'Plan du site XML', xmlSitemapDesc: 'Plan du site lisible par les machines pour les moteurs de recherche (format XML).',
169
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'Instructions pour les robots des moteurs de recherche.',
170
- sitemapInOtherLanguages: 'Ce plan du site dans d\'autres langues', accessPlatform: 'AccƩdez Ơ la plateforme principale dans votre langue prƩfƩrƩe.',
171
- apiDocs: 'Documentation API', apiDocsDesc: 'Documentation API gƩnƩrƩe pour les scripts et modules de la plateforme.',
172
- coverageReports: 'Rapports de couverture de code', coverageReportsDesc: 'Rapports de couverture de tests pour le code JavaScript et TypeScript.',
173
- testResults: 'RƩsultats des tests', testResultsDesc: 'RƩsultats de tests automatisƩs et rapports.',
174
- recentArticles: 'Articles rƩcents', newsIndexPages: 'Pages d\'index des actualitƩs',
175
- },
176
- },
177
- es: {
178
- name: 'Spanish', nativeName: 'EspaƱol', flag: 'šŸ‡ŖšŸ‡ø', dir: 'ltr', locale: 'es_ES', hreflang: 'es',
179
- translations: {
180
- siteMap: 'Mapa del sitio', completeNavigation: 'Navegación completa para la plataforma Riksdagsmonitor',
181
- quickJumpTo: 'Navegación rÔpida', mainPlatform: 'Plataforma principal', dashboards: 'Paneles interactivos',
182
- newsAnalysis: 'Noticias & AnÔlisis', multiLanguage: 'Acceso multilingüe a la plataforma',
183
- documentation: 'Documentación', resources: 'Recursos adicionales',
184
- sitemapLanguages: 'Este mapa del sitio en otros idiomas', home: 'Inicio',
185
- newsIndex: 'ƍndice de noticias', newsDesc: 'Últimas noticias polĆ­ticas, anĆ”lisis y actualizaciones del Parlamento y Gobierno de Suecia.',
186
- ciaDashboard: 'Panel de inteligencia CIA', ciaDashboardDesc: 'Panel interactivo CIA: Rendimiento de partidos, pronósticos electorales, diputados.',
187
- politicianDashboard: 'Carrera polƭtica & anƔlisis de productividad', politicianDashboardDesc: 'Panel completo de carrera y productividad de polƭticos.',
188
- mainPlatformDesc: 'Elecciones suecas 2026 en vivo: Monitoreo en tiempo real, pronósticos de coalición, anÔlisis parlamentario.',
189
- xmlSitemap: 'Mapa del sitio XML', xmlSitemapDesc: 'Mapa del sitio legible por mÔquinas para motores de búsqueda (formato XML).',
190
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'Instrucciones para rastreadores de motores de bĆŗsqueda.',
191
- sitemapInOtherLanguages: 'Este mapa del sitio en otros idiomas', accessPlatform: 'Acceda a la plataforma principal en su idioma preferido.',
192
- apiDocs: 'Documentación API', apiDocsDesc: 'Documentación API generada para scripts y módulos de la plataforma.',
193
- coverageReports: 'Informes de cobertura de código', coverageReportsDesc: 'Informes de cobertura de pruebas para código JavaScript y TypeScript.',
194
- testResults: 'Resultados de pruebas', testResultsDesc: 'Resultados de pruebas automatizadas e informes.',
195
- recentArticles: 'Artƭculos recientes', newsIndexPages: 'PƔginas de ƭndice de noticias',
196
- },
197
- },
198
- nl: {
199
- name: 'Dutch', nativeName: 'Nederlands', flag: 'šŸ‡³šŸ‡±', dir: 'ltr', locale: 'nl_NL', hreflang: 'nl',
200
- translations: {
201
- siteMap: 'Sitemap', completeNavigation: 'Volledige navigatie voor het Riksdagsmonitor-platform',
202
- quickJumpTo: 'Snelnavigatie', mainPlatform: 'Hoofdplatform', dashboards: 'Interactieve dashboards',
203
- newsAnalysis: 'Nieuws & Analyse', multiLanguage: 'Meertalige platformtoegang',
204
- documentation: 'Documentatie', resources: 'Aanvullende bronnen',
205
- sitemapLanguages: 'Deze sitemap in andere talen', home: 'Home',
206
- newsIndex: 'Nieuwsindex', newsDesc: 'Laatste politieke nieuws, analyses en updates van het Zweedse Parlement en de regering.',
207
- ciaDashboard: 'CIA Inlichtingendashboard', ciaDashboardDesc: 'Interactief CIA inlichtingendashboard: Partijprestaties, verkiezingsprognoses, parlementariƫrs.',
208
- politicianDashboard: 'Politicus carriĆØre & productiviteitsanalyse', politicianDashboardDesc: 'Uitgebreid politicus carriĆØre- en productiviteitsdashboard.',
209
- mainPlatformDesc: 'Zweedse verkiezingen 2026 live: Realtime monitoring, coalitieprognoses, parlementaire analyse.',
210
- xmlSitemap: 'XML Sitemap', xmlSitemapDesc: 'Machineleesbare sitemap voor zoekmachines (XML-formaat).',
211
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'Zoekmachine-crawler-instructies.',
212
- sitemapInOtherLanguages: 'Deze sitemap in andere talen', accessPlatform: 'Toegang tot het hoofdplatform in uw voorkeurstaal.',
213
- apiDocs: 'API-documentatie', apiDocsDesc: 'Gegenereerde API-documentatie voor platformscripts en modules.',
214
- coverageReports: 'Codedekkingsrapporten', coverageReportsDesc: 'Testdekkingsrapporten voor JavaScript en TypeScript-code.',
215
- testResults: 'Testresultaten', testResultsDesc: 'Geautomatiseerde testresultaten en rapporten.',
216
- recentArticles: 'Recente artikelen', newsIndexPages: 'Nieuwsindexpagina\'s',
217
- },
218
- },
219
- ar: {
220
- name: 'Arabic', nativeName: 'Ų§Ł„Ų¹Ų±ŲØŁŠŲ©', flag: 'šŸ‡øšŸ‡¦', dir: 'rtl', locale: 'ar_SA', hreflang: 'ar',
221
- translations: {
222
- siteMap: 'خريطة Ų§Ł„Ł…ŁˆŁ‚Ų¹', completeNavigation: 'التنقل Ų§Ł„ŁƒŲ§Ł…Ł„ لمنصة Riksdagsmonitor',
223
- quickJumpTo: 'انتقال سريع', mainPlatform: 'المنصة Ų§Ł„Ų±Ų¦ŁŠŲ³ŁŠŲ©', dashboards: 'Ł„ŁˆŲ­Ų§ŲŖ Ų§Ł„Ł…Ų¹Ł„ŁˆŁ…Ų§ŲŖ Ų§Ł„ŲŖŁŲ§Ų¹Ł„ŁŠŲ©',
224
- newsAnalysis: 'الأخبار ŁˆŲ§Ł„ŲŖŲ­Ł„ŁŠŁ„', multiLanguage: 'ŁˆŲµŁˆŁ„ Ł…ŲŖŲ¹ŲÆŲÆ اللغات للمنصة',
225
- documentation: 'Ų§Ł„ŲŖŁˆŲ«ŁŠŁ‚', resources: 'Ł…ŁˆŲ§Ų±ŲÆ ؄ضافية',
226
- sitemapLanguages: 'خريطة Ų§Ł„Ł…ŁˆŁ‚Ų¹ هذه بلغات أخرى', home: 'Ų§Ł„Ų±Ų¦ŁŠŲ³ŁŠŲ©',
227
- newsIndex: 'فهرس الأخبار', newsDesc: 'Ų¢Ų®Ų± الأخبار Ų§Ł„Ų³ŁŠŲ§Ų³ŁŠŲ© ŁˆŲ§Ł„ŲŖŲ­Ł„ŁŠŁ„Ų§ŲŖ ŁˆŲ§Ł„ŲŖŲ­ŲÆŁŠŲ«Ų§ŲŖ من البرلمان ŁˆŲ§Ł„Ų­ŁƒŁˆŁ…Ų© Ų§Ł„Ų³ŁˆŁŠŲÆŁŠŲ©.',
228
- ciaDashboard: 'Ł„ŁˆŲ­Ų© Ł…Ų¹Ł„ŁˆŁ…Ų§ŲŖ استخباراتية', ciaDashboardDesc: 'Ł„ŁˆŲ­Ų© Ł…Ų¹Ł„ŁˆŁ…Ų§ŲŖ استخباراتية ŲŖŁŲ§Ų¹Ł„ŁŠŲ©: Ų£ŲÆŲ§Ų” Ų§Ł„Ų£Ų­Ų²Ų§ŲØŲŒ ŲŖŁˆŁ‚Ų¹Ų§ŲŖ Ų§Ł„Ų§Ł†ŲŖŲ®Ų§ŲØŲ§ŲŖŲŒ Ų£Ų¹Ų¶Ų§Ų” البرلمان.',
229
- politicianDashboard: 'ŲŖŲ­Ł„ŁŠŁ„ Ł…Ų³ŁŠŲ±Ų© Ų§Ł„Ų³ŁŠŲ§Ų³ŁŠŁŠŁ† ŁˆŲ§Ł„Ų„Ł†ŲŖŲ§Ų¬ŁŠŲ©', politicianDashboardDesc: 'Ł„ŁˆŲ­Ų© ؓاملة Ł„Ł…Ų³ŁŠŲ±Ų© Ų§Ł„Ų³ŁŠŲ§Ų³ŁŠŁŠŁ† ŁˆŲ§Ł„Ų„Ł†ŲŖŲ§Ų¬ŁŠŲ©.',
230
- mainPlatformDesc: 'الانتخابات Ų§Ł„Ų³ŁˆŁŠŲÆŁŠŲ© 2026 Ł…ŲØŲ§Ų“Ų±: مراقبة في Ų§Ł„ŁˆŁ‚ŲŖ Ų§Ł„ŁŲ¹Ł„ŁŠŲŒ ŲŖŁˆŁ‚Ų¹Ų§ŲŖ Ų§Ł„Ų§Ų¦ŲŖŁ„Ų§ŁŲŒ ŲŖŲ­Ł„ŁŠŁ„ ŲØŲ±Ł„Ł…Ų§Ł†ŁŠ.',
231
- xmlSitemap: 'خريطة Ł…ŁˆŁ‚Ų¹ XML', xmlSitemapDesc: 'خريطة Ł…ŁˆŁ‚Ų¹ قابلة للقراؔة Ų¢Ł„ŁŠŁ‹Ų§ Ł„Ł…Ų­Ų±ŁƒŲ§ŲŖ البحث (ŲŖŁ†Ų³ŁŠŁ‚ XML).',
232
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'ŲŖŲ¹Ł„ŁŠŁ…Ų§ŲŖ زاحف Ł…Ų­Ų±Łƒ البحث.',
233
- sitemapInOtherLanguages: 'خريطة Ų§Ł„Ł…ŁˆŁ‚Ų¹ هذه بلغات أخرى', accessPlatform: 'Ų§Ł„ŁˆŲµŁˆŁ„ ؄لى المنصة Ų§Ł„Ų±Ų¦ŁŠŲ³ŁŠŲ© ŲØŁ„ŲŗŲŖŁƒ المفضلة.',
234
- apiDocs: 'ŲŖŁˆŲ«ŁŠŁ‚ API', apiDocsDesc: 'ŲŖŁˆŲ«ŁŠŁ‚ API Ų§Ł„Ł…ŁŁ†Ų“Ų£ Ł„Ł†ŲµŁˆŲµ ووحدات المنصة.',
235
- coverageReports: 'ŲŖŁ‚Ų§Ų±ŁŠŲ± تغطية Ų§Ł„ŁƒŁˆŲÆ', coverageReportsDesc: 'ŲŖŁ‚Ų§Ų±ŁŠŲ± تغطية الاختبارات Ł„ŁƒŁˆŲÆ JavaScript و TypeScript.',
236
- testResults: 'نتائج الاختبارات', testResultsDesc: 'نتائج الاختبارات Ų§Ł„Ų¢Ł„ŁŠŲ© ŁˆŲ§Ł„ŲŖŁ‚Ų§Ų±ŁŠŲ±.',
237
- recentArticles: 'Ų£Ų­ŲÆŲ« المقالات', newsIndexPages: 'صفحات فهرس الأخبار',
238
- },
239
- },
240
- he: {
241
- name: 'Hebrew', nativeName: 'עברית', flag: 'šŸ‡®šŸ‡±', dir: 'rtl', locale: 'he_IL', hreflang: 'he',
242
- translations: {
243
- siteMap: '×ž×¤×Ŗ האתר', completeNavigation: 'ניווט מלא ×œ×¤×œ×˜×¤×•×Ø×ž×Ŗ Riksdagsmonitor',
244
- quickJumpTo: 'ניווט ×ž×”×™×Ø', mainPlatform: '×¤×œ×˜×¤×•×Ø×ž×” ראשית', dashboards: '×œ×•×—×•×Ŗ מחוונים ××™× ×˜×Ø××§×˜×™×‘×™×™×',
245
- newsAnalysis: 'חדשות וניתוח', multiLanguage: 'גישה רב-×œ×©×•× ×™×Ŗ ×œ×¤×œ×˜×¤×•×Ø×ž×”',
246
- documentation: 'תיעוד', resources: 'משאבים נוהפים',
247
- sitemapLanguages: '×ž×¤×Ŗ אתר זו בשפות אחרות', home: 'דף הבית',
248
- newsIndex: 'אינדקה חדשות', newsDesc: 'החדשות ×”×¤×•×œ×™×˜×™×•×Ŗ, ×”× ×™×Ŗ×•×—×™× והעדכונים ×”××—×Ø×•× ×™× ×ž×”×¤×Ø×œ×ž× ×˜ והממשלה השוודיים.',
249
- ciaDashboard: 'לוח מחוונים מודיעיני', ciaDashboardDesc: 'לוח מחוונים מודיעיני ××™× ×˜×Ø××§×˜×™×‘×™: ביצועי ×ž×¤×œ×’×•×Ŗ, תחזיות בחירות, חברי ×›× ×”×Ŗ.',
250
- politicianDashboard: 'קריירה ×¤×•×œ×™×˜×™×Ŗ וניתוח ×¤×Ø×•×“×•×§×˜×™×‘×™×•×Ŗ', politicianDashboardDesc: 'לוח מחוונים מקיף ×œ×§×Ø×™×™×Ø×” ×•×¤×Ø×•×“×•×§×˜×™×‘×™×•×Ŗ של פוליטיקאים.',
251
- mainPlatformDesc: 'בחירות שוודיה 2026 בשידור חי: × ×™×˜×•×Ø בזמן ××ž×Ŗ, תחזיות קואליציה, ניתוח ×¤×Ø×œ×ž× ×˜×Ø×™.',
252
- xmlSitemap: '×ž×¤×Ŗ אתר XML', xmlSitemapDesc: '×ž×¤×Ŗ אתר קריאה ×œ×ž×›×•× ×•×Ŗ עבור מנועי חיפוש (×¤×•×Ø×ž×˜ XML).',
253
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'הוראות ×œ×”×•×Ø×§×™ מנועי חיפוש.',
254
- sitemapInOtherLanguages: '×ž×¤×Ŗ אתר זו בשפות אחרות', accessPlatform: 'גישה ×œ×¤×œ×˜×¤×•×Ø×ž×” הראשית בשפה ×”×ž×•×¢×“×¤×Ŗ עליך.',
255
- apiDocs: 'תיעוד API', apiDocsDesc: 'תיעוד API שנוצר עבור ×”×§×Ø×™×¤×˜×™× ומודולים של ×”×¤×œ×˜×¤×•×Ø×ž×”.',
256
- coverageReports: 'דוחות כיהוי קוד', coverageReportsDesc: 'דוחות כיהוי בדיקות עבור קוד JavaScript ו-TypeScript.',
257
- testResults: 'תוצאות בדיקות', testResultsDesc: 'תוצאות בדיקות ××•×˜×•×ž×˜×™×•×Ŗ ודוחות.',
258
- recentArticles: 'כתבות אחרונות', newsIndexPages: 'דפי אינדקה חדשות',
259
- },
260
- },
261
- ja: {
262
- name: 'Japanese', nativeName: 'ę—„ęœ¬čŖž', flag: 'šŸ‡ÆšŸ‡µ', dir: 'ltr', locale: 'ja_JP', hreflang: 'ja',
263
- translations: {
264
- siteMap: 'ć‚µć‚¤ćƒˆćƒžćƒƒćƒ—', completeNavigation: 'Riksdagsmonitorćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć®å®Œå…ØćŖćƒŠćƒ“ć‚²ćƒ¼ć‚·ćƒ§ćƒ³',
265
- quickJumpTo: 'ć‚Æć‚¤ćƒƒć‚ÆćƒŠćƒ“ć‚²ćƒ¼ć‚·ćƒ§ćƒ³', mainPlatform: 'ćƒ”ć‚¤ćƒ³ćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ', dashboards: 'ć‚¤ćƒ³ć‚æćƒ©ć‚Æćƒ†ć‚£ćƒ–ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰',
266
- newsAnalysis: 'ćƒ‹ćƒ„ćƒ¼ć‚¹ļ¼†åˆ†ęž', multiLanguage: 'å¤ščØ€čŖžćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć‚¢ć‚Æć‚»ć‚¹',
267
- documentation: 'ćƒ‰ć‚­ćƒ„ćƒ”ćƒ³ćƒˆ', resources: 'čæ½åŠ ćƒŖć‚½ćƒ¼ć‚¹',
268
- sitemapLanguages: 'ć“ć®ć‚µć‚¤ćƒˆćƒžćƒƒćƒ—ć®ä»–čØ€čŖžē‰ˆ', home: 'ćƒ›ćƒ¼ćƒ ',
269
- newsIndex: 'ćƒ‹ćƒ„ćƒ¼ć‚¹ć‚¤ćƒ³ćƒ‡ćƒƒć‚Æć‚¹', newsDesc: 'ć‚¹ć‚¦ć‚§ćƒ¼ćƒ‡ćƒ³č­°ä¼šćØę”æåŗœć‹ć‚‰ć®ęœ€ę–°ć®ę”æę²»ćƒ‹ćƒ„ćƒ¼ć‚¹ć€åˆ†ęžć€ć‚¢ćƒƒćƒ—ćƒ‡ćƒ¼ćƒˆć€‚',
270
- ciaDashboard: 'CIAęƒ…å ±ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰', ciaDashboardDesc: 'ć‚¤ćƒ³ć‚æćƒ©ć‚Æćƒ†ć‚£ćƒ–CIAęƒ…å ±ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰: ę”æå…šćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć€éøęŒ™äŗˆęø¬ć€å›½ä¼šč­°å“”ćƒ©ćƒ³ć‚­ćƒ³ć‚°ć€‚',
271
- politicianDashboard: 'ę”æę²»å®¶ć®ć‚­ćƒ£ćƒŖć‚¢ćØē”Ÿē”£ę€§åˆ†ęž', politicianDashboardDesc: 'åŒ…ę‹¬ēš„ćŖę”æę²»å®¶ć®ć‚­ćƒ£ćƒŖć‚¢ćØē”Ÿē”£ę€§ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć€‚',
272
- mainPlatformDesc: 'ć‚¹ć‚¦ć‚§ćƒ¼ćƒ‡ćƒ³éøęŒ™2026ćƒ©ć‚¤ćƒ–: ćƒŖć‚¢ćƒ«ć‚æć‚¤ćƒ ē›£č¦–ć€é€£ē«‹äŗˆęø¬ć€č­°ä¼šåˆ†ęžć€‚',
273
- xmlSitemap: 'XMLć‚µć‚¤ćƒˆćƒžćƒƒćƒ—', xmlSitemapDesc: 'ę¤œē“¢ć‚Øćƒ³ć‚øćƒ³å‘ć‘ę©Ÿę¢°åÆčŖ­ć‚µć‚¤ćƒˆćƒžćƒƒćƒ—ļ¼ˆXMLå½¢å¼ļ¼‰ć€‚',
274
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'ę¤œē“¢ć‚Øćƒ³ć‚øćƒ³ć‚Æćƒ­ćƒ¼ćƒ©ćƒ¼ć®ęŒ‡ē¤ŗć€‚',
275
- sitemapInOtherLanguages: 'ć“ć®ć‚µć‚¤ćƒˆćƒžćƒƒćƒ—ć®ä»–čØ€čŖžē‰ˆ', accessPlatform: 'ćŠå„½ćæć®čØ€čŖžć§ćƒ”ć‚¤ćƒ³ćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć«ć‚¢ć‚Æć‚»ć‚¹ć—ć¦ćć ć•ć„ć€‚',
276
- apiDocs: 'APIćƒ‰ć‚­ćƒ„ćƒ”ćƒ³ćƒˆ', apiDocsDesc: 'ćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć®ć‚¹ć‚ÆćƒŖćƒ—ćƒˆćØćƒ¢ć‚øćƒ„ćƒ¼ćƒ«ć®ē”Ÿęˆć•ć‚ŒćŸAPIćƒ‰ć‚­ćƒ„ćƒ”ćƒ³ćƒˆć€‚',
277
- coverageReports: 'ć‚³ćƒ¼ćƒ‰ć‚«ćƒćƒ¬ćƒƒć‚øćƒ¬ćƒćƒ¼ćƒˆ', coverageReportsDesc: 'JavaScript/TypeScriptć‚³ćƒ¼ćƒ‰ć®ćƒ†ć‚¹ćƒˆć‚«ćƒćƒ¬ćƒƒć‚øćƒ¬ćƒćƒ¼ćƒˆć€‚',
278
- testResults: 'ćƒ†ć‚¹ćƒˆēµęžœ', testResultsDesc: 'č‡Ŗå‹•ćƒ†ć‚¹ćƒˆēµęžœćØćƒ¬ćƒćƒ¼ćƒˆć€‚',
279
- recentArticles: 'ęœ€ę–°čØ˜äŗ‹', newsIndexPages: 'ćƒ‹ćƒ„ćƒ¼ć‚¹ć‚¤ćƒ³ćƒ‡ćƒƒć‚Æć‚¹ćƒšćƒ¼ć‚ø',
280
- },
281
- },
282
- ko: {
283
- name: 'Korean', nativeName: 'ķ•œźµ­ģ–“', flag: 'šŸ‡°šŸ‡·', dir: 'ltr', locale: 'ko_KR', hreflang: 'ko',
284
- translations: {
285
- siteMap: 'ģ‚¬ģ“ķŠøė§µ', completeNavigation: 'Riksdagsmonitor ķ”Œėž«ķ¼ģ˜ ģ™„ģ „ķ•œ ķƒģƒ‰',
286
- quickJumpTo: '빠넸 ķƒģƒ‰', mainPlatform: 'ė©”ģø ķ”Œėž«ķ¼', dashboards: 'ģøķ„°ėž™ķ‹°ėøŒ ėŒ€ģ‹œė³“ė“œ',
287
- newsAnalysis: 'ė‰“ģŠ¤ & ė¶„ģ„', multiLanguage: '다국얓 ķ”Œėž«ķ¼ ģ ‘ź·¼',
288
- documentation: 'ė¬øģ„œ', resources: '추가 ė¦¬ģ†ŒģŠ¤',
289
- sitemapLanguages: '다넸 ģ–øģ–“ģ˜ ģ‚¬ģ“ķŠøė§µ', home: 'ķ™ˆ',
290
- newsIndex: 'ė‰“ģŠ¤ ģøė±ģŠ¤', newsDesc: 'ģŠ¤ģ›Øė“ ģ˜ķšŒģ™€ ģ •ė¶€ģ˜ ģµœģ‹  ģ •ģ¹˜ ė‰“ģŠ¤, ė¶„ģ„ ė° ģ—…ė°ģ“ķŠø.',
291
- ciaDashboard: 'CIA 정볓 ėŒ€ģ‹œė³“ė“œ', ciaDashboardDesc: 'CIA 정볓 ėŒ€ģ‹œė³“ė“œ: 정당 성과, ģ„ ź±° 예츔, źµ­ķšŒģ˜ģ› ģˆœģœ„.',
292
- politicianDashboard: 'ģ •ģ¹˜ģø 경렄 & ģƒģ‚°ģ„± ė¶„ģ„', politicianDashboardDesc: 'ķ¬ź“„ģ ģø ģ •ģ¹˜ģø 경렄 ė° ģƒģ‚°ģ„± ėŒ€ģ‹œė³“ė“œ.',
293
- mainPlatformDesc: 'ģŠ¤ģ›Øė“ ģ„ ź±° 2026 ė¼ģ“ėøŒ: ģ‹¤ģ‹œź°„ ėŖØė‹ˆķ„°ė§, ģ—°ķ•© 예츔, ģ˜ķšŒ ė¶„ģ„.',
294
- xmlSitemap: 'XML ģ‚¬ģ“ķŠøė§µ', xmlSitemapDesc: 'ź²€ģƒ‰ ģ—”ģ§„ģš© 기계 ķŒė… ź°€ėŠ„ ģ‚¬ģ“ķŠøė§µ (XML ķ˜•ģ‹).',
295
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'ź²€ģƒ‰ 엔진 크딤러 지침.',
296
- sitemapInOtherLanguages: '다넸 ģ–øģ–“ģ˜ ģ‚¬ģ“ķŠøė§µ', accessPlatform: 'ģ„ ķ˜øķ•˜ėŠ” ģ–øģ–“ė”œ ė©”ģø ķ”Œėž«ķ¼ģ— ģ ‘ź·¼ķ•˜ģ„øģš”.',
297
- apiDocs: 'API ė¬øģ„œ', apiDocsDesc: 'ķ”Œėž«ķ¼ 스크립트 ė° ėŖØė“ˆģ˜ ģƒģ„±ėœ API ė¬øģ„œ.',
298
- coverageReports: 'ģ½”ė“œ 커버리지 ė³“ź³ ģ„œ', coverageReportsDesc: 'JavaScript ė° TypeScript ģ½”ė“œģ˜ ķ…ŒģŠ¤ķŠø 커버리지 ė³“ź³ ģ„œ.',
299
- testResults: 'ķ…ŒģŠ¤ķŠø ź²°ź³¼', testResultsDesc: 'ģžė™ķ™”ėœ ķ…ŒģŠ¤ķŠø ź²°ź³¼ ė° ė³“ź³ ģ„œ.',
300
- recentArticles: 'ģµœģ‹  기사', newsIndexPages: 'ė‰“ģŠ¤ ģøė±ģŠ¤ ķŽ˜ģ“ģ§€',
301
- },
302
- },
303
- zh: {
304
- name: 'Chinese', nativeName: 'äø­ę–‡', flag: 'šŸ‡ØšŸ‡³', dir: 'ltr', locale: 'zh_CN', hreflang: 'zh',
305
- translations: {
306
- siteMap: 'ē½‘ē«™åœ°å›¾', completeNavigation: 'Riksdagsmonitorå¹³å°å®Œę•“åÆ¼čˆŖ',
307
- quickJumpTo: 'åæ«é€ŸåÆ¼čˆŖ', mainPlatform: 'äø»å¹³å°', dashboards: 'äŗ¤äŗ’å¼ä»Ŗč”Øęæ',
308
- newsAnalysis: 'ę–°é—»äøŽåˆ†ęž', multiLanguage: 'å¤ščÆ­čØ€å¹³å°č®æé—®',
309
- documentation: '文攣', resources: 'é™„åŠ čµ„ęŗ',
310
- sitemapLanguages: 'ęœ¬ē«™ē‚¹åœ°å›¾ēš„å…¶ä»–čÆ­čØ€ē‰ˆęœ¬', home: '首锵',
311
- newsIndex: '新闻瓢引', newsDesc: 'ę„č‡Ŗē‘žå…øč®®ä¼šå’Œę”æåŗœēš„ęœ€ę–°ę”æę²»ę–°é—»ć€åˆ†ęžå’Œę›“ę–°ć€‚',
312
- ciaDashboard: 'CIAęƒ…ęŠ„ä»Ŗč”Øęæ', ciaDashboardDesc: 'CIAęƒ…ęŠ„ä»Ŗč”Øęæļ¼šę”æå…šč”ØēŽ°ć€é€‰äø¾é¢„ęµ‹ć€å›½ä¼šč®®å‘˜ęŽ’åć€‚',
313
- politicianDashboard: 'ę”æę²»å®¶čŒäøšäøŽē”Ÿäŗ§åŠ›åˆ†ęž', politicianDashboardDesc: 'å…Øé¢ēš„ę”æę²»å®¶čŒäøšå’Œē”Ÿäŗ§åŠ›ä»Ŗč”Øęæć€‚',
314
- mainPlatformDesc: 'ē‘žå…ø2026å¹“é€‰äø¾ē›“ę’­ļ¼šå®žę—¶ē›‘ęŽ§ć€č”ē›Ÿé¢„ęµ‹ć€č®®ä¼šåˆ†ęžć€‚',
315
- xmlSitemap: 'XMLē«™ē‚¹åœ°å›¾', xmlSitemapDesc: 'ä¾›ęœē“¢å¼•ę“Žä½æē”Øēš„ęœŗå™ØåÆčÆ»ē«™ē‚¹åœ°å›¾ļ¼ˆXMLę ¼å¼ļ¼‰ć€‚',
316
- robotsTxt: 'Robots.txt', robotsTxtDesc: 'ęœē“¢å¼•ę“Žēˆ¬č™«ęŒ‡ä»¤ć€‚',
317
- sitemapInOtherLanguages: 'ęœ¬ē«™ē‚¹åœ°å›¾ēš„å…¶ä»–čÆ­čØ€ē‰ˆęœ¬', accessPlatform: 'ä»„ę‚Øåå„½ēš„čÆ­čØ€č®æé—®äø»å¹³å°ć€‚',
318
- apiDocs: 'API文攣', apiDocsDesc: 'äøŗå¹³å°č„šęœ¬å’ŒęØ”å—ē”Ÿęˆēš„API文攣。',
319
- coverageReports: 'ä»£ē č¦†ē›–ēŽ‡ęŠ„å‘Š', coverageReportsDesc: 'JavaScript和TypeScriptä»£ē ēš„ęµ‹čÆ•č¦†ē›–ēŽ‡ęŠ„å‘Šć€‚',
320
- testResults: 'ęµ‹čÆ•ē»“ęžœ', testResultsDesc: 'č‡ŖåŠØåŒ–ęµ‹čÆ•ē»“ęžœå’ŒęŠ„å‘Šć€‚',
321
- recentArticles: 'ęœ€ę–°ę–‡ē« ', newsIndexPages: 'ę–°é—»ē“¢å¼•é”µé¢',
322
- },
323
- },
324
- };
325
- // ---------------------------------------------------------------------------
326
- // Functions
327
- // ---------------------------------------------------------------------------
328
- /**
329
- * Extract title and description from an HTML file.
330
- */
331
- function extractArticleMeta(filePath) {
332
- try {
333
- const content = fs.readFileSync(filePath, 'utf8');
334
- const titleMatch = content.match(/<title>([^<]+)<\/title>/i);
335
- const descMatch = content.match(/<meta\s+name="description"\s+content="([^"]+)"/i);
336
- return {
337
- title: titleMatch ? titleMatch[1].trim() : path.basename(filePath, '.html'),
338
- description: descMatch ? descMatch[1].trim() : '',
339
- };
340
- }
341
- catch (_error) {
342
- return { title: path.basename(filePath, '.html'), description: '' };
343
- }
344
- }
345
- /**
346
- * Scan news articles and group by language.
347
- */
348
- function getArticlesByLanguage() {
349
- const articlesByLang = new Map();
350
- if (!fs.existsSync(NEWS_DIR))
351
- return articlesByLang;
352
- const files = fs
353
- .readdirSync(NEWS_DIR)
354
- .filter((file) => file.endsWith('.html') && file !== 'index.html' && !file.startsWith('index_'))
355
- .sort()
356
- .reverse(); // Most recent first
357
- for (const file of files) {
358
- const match = file.match(/^(.+?)-(en|sv|da|no|fi|de|fr|es|nl|ar|he|ja|ko|zh)\.html$/);
359
- if (match) {
360
- const baseSlug = match[1];
361
- const lang = match[2];
362
- const filePath = path.join(NEWS_DIR, file);
363
- const meta = extractArticleMeta(filePath);
364
- if (!articlesByLang.has(lang)) {
365
- articlesByLang.set(lang, []);
366
- }
367
- articlesByLang.get(lang).push({
368
- file,
369
- title: meta.title,
370
- description: meta.description,
371
- lang,
372
- baseSlug,
373
- });
374
- }
375
- }
376
- return articlesByLang;
377
- }
378
- /**
379
- * Check which docs sections exist.
380
- */
381
- function getDocsSections() {
382
- return {
383
- index: fs.existsSync(path.join(DOCS_DIR, 'index.html')),
384
- api: fs.existsSync(path.join(DOCS_DIR, 'api', 'index.html')),
385
- coverage: fs.existsSync(path.join(DOCS_DIR, 'coverage', 'index.html')),
386
- testResults: fs.existsSync(path.join(DOCS_DIR, 'test-results', 'index.html')),
387
- cypress: fs.existsSync(path.join(DOCS_DIR, 'cypress', 'index.html')),
388
- };
389
- }
390
- /**
391
- * Escape HTML special characters to prevent XSS.
392
- */
393
- function escapeHtml(text) {
394
- return text
395
- // Escape & only when it is NOT already part of a valid HTML entity
396
- .replace(/&(?!(?:#\d+|#x[0-9a-fA-F]+|[a-zA-Z]+);)/g, '&amp;')
397
- .replace(/</g, '&lt;')
398
- .replace(/>/g, '&gt;')
399
- .replace(/"/g, '&quot;')
400
- .replace(/'/g, '&#039;');
401
- }
402
- /**
403
- * Generate a sitemap HTML page for a specific language.
404
- */
405
- function generateSitemapHtml(lang, articlesByLang) {
406
- const meta = LANGUAGE_META[lang];
407
- const t = meta.translations;
408
- const isEnglish = lang === 'en';
409
- const sitemapFile = isEnglish ? 'sitemap.html' : `sitemap_${lang}.html`;
410
- const indexFile = isEnglish ? 'index.html' : `index_${lang}.html`;
411
- const newsIndexFile = isEnglish ? 'news/index.html' : `news/index_${lang}.html`;
412
- const articles = articlesByLang.get(lang) || [];
413
- // Limit to 50 most recent articles for readability
414
- const recentArticles = articles.slice(0, 50);
415
- const docsSections = getDocsSections();
416
- // Build hreflang tags
417
- const hreflangTags = LANGUAGES.map((l) => {
418
- const hreflangCode = LANGUAGE_META[l].hreflang;
419
- const href = l === 'en' ? 'sitemap.html' : `sitemap_${l}.html`;
420
- return ` <link rel="alternate" hreflang="${hreflangCode}" href="${BASE_URL}/${href}">`;
421
- }).join('\n');
422
- // Build other language links section
423
- const otherLanguageLinks = LANGUAGES
424
- .filter((l) => l !== lang)
425
- .map((l) => {
426
- const lm = LANGUAGE_META[l];
427
- const href = l === 'en' ? 'sitemap.html' : `sitemap_${l}.html`;
428
- return ` <li>
429
- <a href="${href}">${lm.flag} ${lm.nativeName} (${lm.name})</a>
430
- </li>`;
431
- })
432
- .join('\n');
433
- // Build multi-language platform links
434
- const multiLangLinks = LANGUAGES.map((l) => {
435
- const lm = LANGUAGE_META[l];
436
- const href = l === 'en' ? 'index.html' : `index_${l}.html`;
437
- return ` <li>
438
- <a href="${href}">${lm.flag} ${lm.nativeName} (${lm.name})</a>
439
- </li>`;
440
- }).join('\n');
441
- // Build dashboard links
442
- const dashboardLinks = LANGUAGES.map((l) => {
443
- const lm = LANGUAGE_META[l];
444
- const dFile = l === 'en' ? 'dashboard/index.html' : `dashboard/index_${l}.html`;
445
- const dashPath = path.join(ROOT_DIR, dFile);
446
- if (!fs.existsSync(dashPath))
447
- return '';
448
- return ` <li>
449
- <a href="${dFile}">${escapeHtml(t.ciaDashboard)} - ${lm.nativeName}</a>
450
- </li>`;
451
- }).filter(Boolean).join('\n');
452
- // Build news article list
453
- const articleListHtml = recentArticles.map((article) => {
454
- const escapedTitle = escapeHtml(article.title);
455
- const escapedDesc = escapeHtml(article.description);
456
- return ` <li>
457
- <a href="news/${escapeHtml(article.file)}">${escapedTitle}</a>
458
- ${escapedDesc ? `<p class="sitemap-description">${escapedDesc}</p>` : ''}
459
- </li>`;
460
- }).join('\n');
461
- // Build docs section
462
- let docsHtml = '';
463
- if (docsSections.index || docsSections.api || docsSections.coverage || docsSections.testResults || docsSections.cypress) {
464
- docsHtml = `
465
- <section class="sitemap-section" id="documentation">
466
- <h2>${escapeHtml(t.documentation)}</h2>
467
- <ul class="sitemap-list">`;
468
- if (docsSections.index) {
469
- docsHtml += `
470
- <li>
471
- <a href="docs/index.html">${escapeHtml(t.documentation)}</a>
472
- <p class="sitemap-description">${escapeHtml(t.apiDocsDesc)}</p>
473
- </li>`;
474
- }
475
- if (docsSections.api) {
476
- docsHtml += `
477
- <li>
478
- <a href="docs/api/index.html">${escapeHtml(t.apiDocs)}</a>
479
- <p class="sitemap-description">${escapeHtml(t.apiDocsDesc)}</p>
480
- </li>`;
481
- }
482
- if (docsSections.coverage) {
483
- docsHtml += `
484
- <li>
485
- <a href="docs/coverage/index.html">${escapeHtml(t.coverageReports)}</a>
486
- <p class="sitemap-description">${escapeHtml(t.coverageReportsDesc)}</p>
487
- </li>`;
488
- }
489
- if (docsSections.testResults) {
490
- docsHtml += `
491
- <li>
492
- <a href="docs/test-results/index.html">${escapeHtml(t.testResults)}</a>
493
- <p class="sitemap-description">${escapeHtml(t.testResultsDesc)}</p>
494
- </li>`;
495
- }
496
- if (docsSections.cypress) {
497
- docsHtml += `
498
- <li>
499
- <a href="docs/cypress/index.html">${escapeHtml(t.testResults)} (Cypress)</a>
500
- <p class="sitemap-description">${escapeHtml(t.testResultsDesc)}</p>
501
- </li>`;
502
- }
503
- docsHtml += `
504
- </ul>
505
- </section>`;
506
- }
507
- return `<!DOCTYPE html>
508
- <html lang="${lang}" dir="${meta.dir}">
509
- <head>
510
- <title>${escapeHtml(t.siteMap)} | Riksdagsmonitor</title>
511
- <meta charset="UTF-8">
512
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
513
- <link rel="stylesheet" type="text/css" href="styles.css">
514
- <link rel="canonical" href="${BASE_URL}/${sitemapFile}">
515
- <meta name="description" content="${escapeHtml(t.completeNavigation)}">
516
- <meta name="keywords" content="sitemap, site navigation, riksdagsmonitor pages, Swedish parliament monitoring">
517
- <meta name="robots" content="index, follow">
518
- <meta name="author" content="James Pether Sƶrling, CISSP, CISM">
519
-
520
- <!-- Open Graph -->
521
- <meta property="og:title" content="${escapeHtml(t.siteMap)} | Riksdagsmonitor">
522
- <meta property="og:description" content="${escapeHtml(t.completeNavigation)}">
523
- <meta property="og:type" content="website">
524
- <meta property="og:url" content="${BASE_URL}/${sitemapFile}">
525
- <meta property="og:image" content="https://riksdagsmonitor.com/images/og-image.webp">
526
- <meta property="og:image:width" content="1200">
527
- <meta property="og:image:height" content="630">
528
- <meta property="og:image:alt" content="Riksdagsmonitor ${escapeHtml(t.siteMap)}">
529
- <meta property="og:locale" content="${meta.locale}">
530
- <meta property="og:site_name" content="Riksdagsmonitor">
531
-
532
- <!-- Twitter Card -->
533
- <meta name="twitter:card" content="summary">
534
- <meta name="twitter:title" content="${escapeHtml(t.siteMap)} | Riksdagsmonitor">
535
- <meta name="twitter:description" content="${escapeHtml(t.completeNavigation)}">
536
- <meta name="twitter:image" content="https://riksdagsmonitor.com/images/og-image.webp">
537
- <meta name="twitter:site" content="@riksdagsmonitor">
538
-
539
- <!-- Additional Meta Tags -->
540
- <meta name="theme-color" content="#0a0e27">
541
- <meta name="color-scheme" content="dark light">
542
- <!-- Favicons -->
543
- <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
544
- <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
545
- <link rel="icon" type="image/png" sizes="96x96" href="/images/favicon-96x96.png">
546
- <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
547
- <link rel="icon" href="/favicon.ico" sizes="48x48">
548
- <link rel="manifest" href="/site.webmanifest">
549
-
550
- <!-- Hreflang tags for all language versions -->
551
- ${hreflangTags}
552
- <link rel="alternate" hreflang="x-default" href="${BASE_URL}/sitemap.html">
553
-
554
- <style>
555
- .sitemap-container {
556
- max-width: 1200px;
557
- margin: 0 auto;
558
- padding: 2rem 1rem;
559
- }
560
-
561
- .sitemap-header {
562
- text-align: center;
563
- margin-bottom: 3rem;
564
- padding-bottom: 2rem;
565
- border-bottom: 2px solid var(--primary-cyan);
566
- }
567
-
568
- .sitemap-header h1 {
569
- font-family: var(--font-heading);
570
- color: var(--primary-cyan);
571
- font-size: clamp(2rem, 4vw, 3rem);
572
- margin-bottom: 1rem;
573
- }
574
-
575
- .sitemap-header p {
576
- color: var(--light-text);
577
- font-size: 1.125rem;
578
- }
579
-
580
- .sitemap-section {
581
- margin-bottom: 3rem;
582
- }
583
-
584
- .sitemap-section h2 {
585
- font-family: var(--font-heading);
586
- color: var(--primary-magenta);
587
- font-size: clamp(1.5rem, 3vw, 2rem);
588
- margin-bottom: 1.5rem;
589
- padding-bottom: 0.5rem;
590
- border-bottom: 1px solid var(--primary-magenta);
591
- }
592
-
593
- .sitemap-section h3 {
594
- font-family: var(--font-heading);
595
- color: var(--primary-yellow);
596
- font-size: 1.25rem;
597
- margin-top: 2rem;
598
- margin-bottom: 1rem;
599
- }
600
-
601
- .sitemap-list {
602
- list-style: none;
603
- padding: 0;
604
- }
605
-
606
- .sitemap-list li {
607
- margin-bottom: 1.5rem;
608
- padding: 1rem;
609
- background: var(--card-bg);
610
- border-radius: 8px;
611
- transition: transform 0.2s ease, box-shadow 0.2s ease;
612
- }
613
-
614
- .sitemap-list li:hover {
615
- transform: translateX(5px);
616
- box-shadow: 0 4px 12px rgba(0, 217, 255, 0.2);
617
- }
618
-
619
- .sitemap-list a {
620
- color: var(--primary-cyan);
621
- text-decoration: none;
622
- font-weight: 600;
623
- font-size: 1.125rem;
624
- display: block;
625
- margin-bottom: 0.5rem;
626
- }
627
-
628
- .sitemap-list a:hover {
629
- text-decoration: underline;
630
- }
631
-
632
- .sitemap-list a:focus {
633
- outline: 2px solid var(--primary-cyan);
634
- outline-offset: 2px;
635
- }
636
-
637
- .sitemap-description {
638
- color: var(--muted-text);
639
- font-size: 0.9375rem;
640
- line-height: 1.6;
641
- }
642
-
643
- .language-grid {
644
- display: grid;
645
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
646
- gap: 1rem;
647
- }
648
-
649
- .language-grid li {
650
- margin-bottom: 0;
651
- }
652
-
653
- @media (max-width: 768px) {
654
- .sitemap-container {
655
- padding: 1rem 0.5rem;
656
- }
657
-
658
- .language-grid {
659
- grid-template-columns: 1fr;
660
- }
661
- }
662
-
663
- /* Table of Contents */
664
- .toc-nav {
665
- background: var(--mid-bg);
666
- border-radius: 8px;
667
- padding: 1.5rem;
668
- margin-bottom: 2rem;
669
- border-left: 4px solid var(--primary-cyan);
670
- }
671
-
672
- .toc-nav h2 {
673
- font-family: var(--font-heading);
674
- color: var(--primary-cyan);
675
- font-size: 1.25rem;
676
- margin-bottom: 1rem;
677
- border: none;
678
- padding: 0;
679
- }
680
-
681
- .toc-list {
682
- list-style: none;
683
- padding: 0;
684
- display: grid;
685
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
686
- gap: 0.5rem;
687
- }
688
-
689
- .toc-list li {
690
- margin: 0;
691
- padding: 0;
692
- }
693
-
694
- .toc-list a {
695
- color: var(--primary-cyan);
696
- text-decoration: none;
697
- display: inline-block;
698
- padding: 0.5rem 0;
699
- transition: transform 0.2s ease;
700
- }
701
-
702
- .toc-list a:hover {
703
- transform: translateX(5px);
704
- text-decoration: underline;
705
- }
706
-
707
- .toc-list a:focus {
708
- outline: 2px solid var(--primary-cyan);
709
- outline-offset: 2px;
710
- }
711
- </style>
712
-
713
- <!-- JSON-LD Structured Data -->
714
- <script type="application/ld+json">
715
- {
716
- "@context": "https://schema.org",
717
- "@type": "WebSite",
718
- "name": "Riksdagsmonitor",
719
- "url": "${BASE_URL}",
720
- "description": "Swedish Parliament Intelligence Platform - Real-time monitoring, coalition predictions, and comprehensive political analysis",
721
- "inLanguage": ["en", "sv", "da", "nb", "fi", "de", "fr", "es", "nl", "ar", "he", "ja", "ko", "zh"],
722
- "publisher": {
723
- "@type": "Organization",
724
- "name": "Hack23 AB",
725
- "url": "https://www.hack23.com"
726
- }
727
- }
728
- </script>
729
- <script type="application/ld+json">
730
- {
731
- "@context": "https://schema.org",
732
- "@type": "SiteNavigationElement",
733
- "name": "${escapeHtml(t.siteMap)}",
734
- "url": "${BASE_URL}/${sitemapFile}",
735
- "inLanguage": "${lang}"
736
- }
737
- </script>
738
- </head>
739
- <body>
740
- <a href="#main-content" class="skip-link">Skip to main content</a>
741
-
742
- <div class="sitemap-container">
743
- <header class="sitemap-header">
744
- <a href="/${indexFile}" aria-label="Riksdagsmonitor Home">
745
- <img src="/images/riksdagsmonitor-logo.webp" alt="Riksdagsmonitor" style="display:block;max-width:100px;height:auto;margin:0 auto 0.75rem" width="100" height="100" loading="eager">
746
- </a>
747
- <h1>${escapeHtml(t.siteMap)}</h1>
748
- <p>${escapeHtml(t.completeNavigation)}</p>
749
- </header>
750
-
751
- <!-- Quick Navigation -->
752
- <nav class="toc-nav" aria-label="${escapeHtml(t.quickJumpTo)}">
753
- <h2>${escapeHtml(t.quickJumpTo)}</h2>
754
- <ul class="toc-list">
755
- <li><a href="#main-platform">${escapeHtml(t.mainPlatform)}</a></li>
756
- <li><a href="#dashboards">${escapeHtml(t.dashboards)}</a></li>
757
- <li><a href="#news">${escapeHtml(t.newsAnalysis)}</a></li>
758
- <li><a href="#languages">${escapeHtml(t.multiLanguage)}</a></li>${docsHtml ? `
759
- <li><a href="#documentation">${escapeHtml(t.documentation)}</a></li>` : ''}
760
- <li><a href="#resources">${escapeHtml(t.resources)}</a></li>
761
- <li><a href="#sitemap-languages">${escapeHtml(t.sitemapLanguages)}</a></li>
762
- </ul>
763
- </nav>
764
-
765
- <main id="main-content">
766
- <!-- Main Platform Section -->
767
- <section class="sitemap-section" id="main-platform">
768
- <h2>${escapeHtml(t.mainPlatform)}</h2>
769
- <ul class="sitemap-list">
770
- <li>
771
- <a href="${indexFile}">${escapeHtml(t.home)} - ${escapeHtml(meta.nativeName)}</a>
772
- <p class="sitemap-description">${escapeHtml(t.mainPlatformDesc)}</p>
773
- </li>
774
- </ul>
775
- </section>
776
-
777
- <!-- Dashboards Section -->
778
- <section class="sitemap-section" id="dashboards">
779
- <h2>${escapeHtml(t.dashboards)}</h2>
780
- <ul class="sitemap-list">
781
- ${dashboardLinks}
782
- <li>
783
- <a href="politician-dashboard.html">${escapeHtml(t.politicianDashboard)}</a>
784
- <p class="sitemap-description">${escapeHtml(t.politicianDashboardDesc)}</p>
785
- </li>
786
- </ul>
787
- </section>
788
-
789
- <!-- News Section -->
790
- <section class="sitemap-section" id="news">
791
- <h2>${escapeHtml(t.newsAnalysis)}</h2>
792
- <h3>${escapeHtml(t.newsIndexPages)}</h3>
793
- <ul class="sitemap-list">
794
- <li>
795
- <a href="${newsIndexFile}">${escapeHtml(t.newsIndex)} - ${escapeHtml(meta.nativeName)}</a>
796
- <p class="sitemap-description">${escapeHtml(t.newsDesc)}</p>
797
- </li>
798
- </ul>
799
- ${recentArticles.length > 0 ? `
800
- <h3>${escapeHtml(t.recentArticles)}</h3>
801
- <ul class="sitemap-list">
802
- ${articleListHtml}
803
- </ul>` : ''}
804
- </section>
805
-
806
- <!-- Multi-Language Section -->
807
- <section class="sitemap-section" id="languages">
808
- <h2>${escapeHtml(t.multiLanguage)}</h2>
809
- <p class="sitemap-description" style="margin-bottom: 1.5rem;">${escapeHtml(t.accessPlatform)}</p>
810
- <ul class="sitemap-list language-grid">
811
- ${multiLangLinks}
812
- </ul>
813
- </section>
814
- ${docsHtml}
815
- <!-- Additional Resources -->
816
- <section class="sitemap-section" id="resources">
817
- <h2>${escapeHtml(t.resources)}</h2>
818
- <ul class="sitemap-list">
819
- <li>
820
- <a href="sitemap.xml">${escapeHtml(t.xmlSitemap)}</a>
821
- <p class="sitemap-description">${escapeHtml(t.xmlSitemapDesc)}</p>
822
- </li>
823
- <li>
824
- <a href="robots.txt">${escapeHtml(t.robotsTxt)}</a>
825
- <p class="sitemap-description">${escapeHtml(t.robotsTxtDesc)}</p>
826
- </li>
827
- </ul>
828
- </section>
829
-
830
- <!-- Other Sitemap Languages -->
831
- <section class="sitemap-section" id="sitemap-languages">
832
- <h2>${escapeHtml(t.sitemapInOtherLanguages)}</h2>
833
- <ul class="sitemap-list language-grid">
834
- ${otherLanguageLinks}
835
- </ul>
836
- </section>
837
- </main>
838
-
839
- <footer style="text-align: center; margin-top: 4rem; padding-top: 2rem; border-top: 1px solid var(--primary-cyan); color: var(--muted-text);">
840
- <p>&copy; 2026 Riksdagsmonitor | <a href="${indexFile}" style="color: var(--primary-cyan);">${escapeHtml(t.home)}</a></p>
841
- </footer>
842
- </div>
843
- </body>
844
- </html>`;
845
- }
846
- /**
847
- * Main function.
848
- */
849
- function main() {
850
- try {
851
- console.log('šŸš€ Starting sitemap HTML generation...\n');
852
- const articlesByLang = getArticlesByLanguage();
853
- console.log(`šŸ“° Found articles in ${articlesByLang.size} languages`);
854
- let generated = 0;
855
- for (const lang of LANGUAGES) {
856
- const html = generateSitemapHtml(lang, articlesByLang);
857
- const fileName = lang === 'en' ? 'sitemap.html' : `sitemap_${lang}.html`;
858
- const filePath = path.join(ROOT_DIR, fileName);
859
- fs.writeFileSync(filePath, html, 'utf8');
860
- const articleCount = (articlesByLang.get(lang) || []).length;
861
- console.log(` āœ… Generated ${fileName} (${articleCount} articles)`);
862
- generated++;
863
- }
864
- console.log(`\nāœ… Generated ${generated} sitemap HTML files`);
865
- return 0;
866
- }
867
- catch (error) {
868
- console.error('āŒ Error generating sitemap HTML:', error.message);
869
- return 1;
870
- }
871
- }
872
- // Run if called directly
873
- if (import.meta.url === `file://${process.argv[1]}`) {
874
- const exitCode = main();
875
- process.exit(exitCode);
876
- }
877
- export { generateSitemapHtml, getArticlesByLanguage, escapeHtml, LANGUAGE_META };
878
- //# sourceMappingURL=generate-sitemap-html.js.map