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,644 +0,0 @@
1
- /**
2
- * @module generate-news-indexes/template
3
- * @description HTML template generation for news index pages.
4
- * Produces complete HTML5 documents with Schema.org structured data,
5
- * filtering UI, and responsive card-based article listings.
6
- *
7
- * @author Hack23 AB
8
- * @license Apache-2.0
9
- */
10
- import { escapeHtml } from '../html-utils.js';
11
- import { LANGUAGES, AVAILABLE_IN_TRANSLATIONS, LANGUAGE_FLAGS } from './constants.js';
12
- import { generateLanguageSwitcherNav, } from './helpers.js';
13
- import { PKG_VERSION } from '../shared/version.js';
14
- export function generateIndexHTML(langKey, languageArticles, _allArticlesByLang) {
15
- const lang = LANGUAGES[langKey];
16
- const f = lang.filters;
17
- const filename = langKey === 'en' ? 'index.html' : `index_${langKey === 'no' ? 'no' : langKey}.html`;
18
- const mainIndex = langKey === 'en' ? 'index.html' : `index_${langKey === 'no' ? 'no' : langKey}.html`;
19
- const isRTL = ['ar', 'he'].includes(langKey);
20
- // Display only articles in this language
21
- const displayArticles = languageArticles;
22
- const needsLanguageNotice = languageArticles.length === 0;
23
- const escapedSubtitle = escapeHtml(lang.subtitle);
24
- const displayData = displayArticles.map((a) => ({
25
- title: a.title,
26
- date: a.date,
27
- type: a.type,
28
- slug: a.slug,
29
- lang: a.lang,
30
- availableLanguages: a.availableLanguages || [a.lang],
31
- excerpt: a.description.length > 200 ? a.description.substring(0, 200).replace(/\s+\S*$/, '') + '...' : a.description,
32
- topics: a.topics,
33
- tags: a.tags,
34
- }));
35
- const html = `<!DOCTYPE html>
36
- <html lang="${lang.code}"${lang.rtl ? ' dir="rtl"' : ''}>
37
- <head>
38
- <meta charset="UTF-8">
39
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
40
- <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self' https:; base-uri 'self'; form-action 'self'">
41
- <title>${escapeHtml(lang.title)} - Riksdagsmonitor</title>
42
- <meta name="description" content="${escapedSubtitle}">
43
- <meta name="keywords" content="${escapeHtml(lang.keywords)}">
44
- <meta name="author" content="James Pether Sörling, CISSP, CISM">
45
- <link rel="canonical" href="https://riksdagsmonitor.com/news/${filename}">
46
-
47
- <!-- Open Graph -->
48
- <meta property="og:title" content="${escapeHtml(lang.title)} - Riksdagsmonitor">
49
- <meta property="og:description" content="${escapedSubtitle}">
50
- <meta property="og:type" content="website">
51
- <meta property="og:url" content="https://riksdagsmonitor.com/news/${filename}">
52
- <meta property="og:image" content="https://riksdagsmonitor.com/images/og-image-news.webp">
53
- <meta property="og:image:width" content="1200">
54
- <meta property="og:image:height" content="630">
55
- <meta property="og:site_name" content="Riksdagsmonitor">
56
- <meta property="og:locale" content="${lang.locale}">
57
-
58
- <!-- Twitter Card -->
59
- <meta name="twitter:card" content="summary">
60
- <meta name="twitter:title" content="${escapeHtml(lang.title)} - Riksdagsmonitor">
61
- <meta name="twitter:description" content="${escapedSubtitle}">
62
- <meta name="twitter:image" content="https://riksdagsmonitor.com/images/og-image-news.webp">
63
-
64
- <!-- Hreflang -->
65
- ${generateHreflangTags()}
66
-
67
- <!-- Schema.org ItemList structured data for article aggregation -->
68
- <script type="application/ld+json">
69
- {
70
- "@context": "https://schema.org",
71
- "@type": "ItemList",
72
- "name": "${escapeHtml(lang.title)}",
73
- "description": "${escapedSubtitle}",
74
- "numberOfItems": ${displayArticles.length},
75
- "itemListElement": [${displayArticles.slice(0, 10).map((article, index) => `
76
- {
77
- "@type": "ListItem",
78
- "position": ${index + 1},
79
- "item": {
80
- "@type": "NewsArticle",
81
- "headline": "${escapeHtml(article.title)}",
82
- "url": "https://riksdagsmonitor.com/news/${article.slug}",
83
- "datePublished": "${article.date}",
84
- "description": "${(d => d.length > 150 ? d.substring(0, 150).replace(/\s+\S*$/, '') + '...' : d)(escapeHtml(article.description))}",
85
- "inLanguage": "${article.lang || lang.code}",
86
- "author": {
87
- "@type": "Organization",
88
- "name": "Riksdagsmonitor"
89
- },
90
- "publisher": {
91
- "@type": "Organization",
92
- "name": "Hack23 AB",
93
- "logo": {
94
- "@type": "ImageObject",
95
- "url": "https://riksdagsmonitor.com/images/android-chrome-512x512.png"
96
- }
97
- },
98
- "articleSection": "${escapeHtml(lang.breadcrumbs.news)}",
99
- "about": {
100
- "@type": "GovernmentOrganization",
101
- "name": "Riksdag",
102
- "alternateName": "Swedish Parliament",
103
- "url": "https://www.riksdagen.se/"
104
- }
105
- }
106
- }`).join(',')}
107
- ]
108
- }
109
- </script>
110
-
111
- <!-- BreadcrumbList structured data -->
112
- <script type="application/ld+json">
113
- {
114
- "@context": "https://schema.org",
115
- "@type": "BreadcrumbList",
116
- "itemListElement": [
117
- {
118
- "@type": "ListItem",
119
- "position": 1,
120
- "name": "${escapeHtml(lang.breadcrumbs.home)}",
121
- "item": "https://riksdagsmonitor.com/"
122
- },
123
- {
124
- "@type": "ListItem",
125
- "position": 2,
126
- "name": "${escapeHtml(lang.breadcrumbs.news)}",
127
- "item": "https://riksdagsmonitor.com/news/${filename}"
128
- }
129
- ]
130
- }
131
- </script>
132
-
133
- <!-- WebSite structured data -->
134
- <script type="application/ld+json">
135
- {
136
- "@context": "https://schema.org",
137
- "@type": "WebSite",
138
- "name": "Riksdagsmonitor",
139
- "url": "https://riksdagsmonitor.com",
140
- "description": "${escapeHtml(lang.schemaDescription || 'Swedish Parliament Intelligence Platform - Monitor political activity with systematic transparency')}",
141
- "inLanguage": "${lang.code}",
142
- "publisher": {
143
- "@type": "Organization",
144
- "name": "Hack23 AB",
145
- "logo": {
146
- "@type": "ImageObject",
147
- "url": "https://riksdagsmonitor.com/images/android-chrome-512x512.png"
148
- }
149
- },
150
- "potentialAction": {
151
- "@type": "SearchAction",
152
- "target": "https://riksdagsmonitor.com/news/${filename}?q={search_term_string}",
153
- "query-input": "required name=search_term_string"
154
- }
155
- }
156
- </script>
157
-
158
- <!-- Fonts -->
159
- <link rel="preconnect" href="https://fonts.googleapis.com">
160
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
161
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
162
- <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Orbitron:wght@500;600;700&display=swap" media="print" onload="this.media='all'">
163
- <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Orbitron:wght@500;600;700&display=swap"></noscript>
164
-
165
- <!-- Favicons -->
166
- <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
167
- <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
168
- <link rel="icon" type="image/png" sizes="96x96" href="/images/favicon-96x96.png">
169
- <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
170
- <link rel="icon" href="/favicon.ico" sizes="48x48">
171
- <link rel="manifest" href="/site.webmanifest">
172
- <meta name="theme-color" content="#0a0e27">
173
-
174
- <link rel="stylesheet" href="../styles.css">
175
- ${generateRTLStyles(lang.rtl)}
176
-
177
- <!-- Anti-flash: apply saved theme before first paint -->
178
- <script>(function(){var key='riksdagsmonitor-theme';var t=null;try{t=localStorage.getItem(key);}catch(e){}if(t!=='dark'&&t!=='light'){if(t!==null){try{localStorage.removeItem(key);}catch(e){}}t=(window.matchMedia&&window.matchMedia('(prefers-color-scheme: dark)').matches)?'dark':'light';}document.documentElement.setAttribute('data-theme',t);}());</script>
179
- </head>
180
- <body class="news-page">
181
- <header class="header-section">
182
- <div class="header-content">
183
- <button id="theme-toggle" class="theme-toggle-btn" type="button"
184
- aria-pressed="false"
185
- aria-label="Switch to dark theme"
186
- title="Switch to dark theme"
187
- data-label-dark="Switch to light theme"
188
- data-label-light="Switch to dark theme">
189
- <span class="theme-icon" aria-hidden="true">🌙</span>
190
- </button>
191
- <!-- Hero Banner -->
192
- <div class="hero-banner">
193
- <img src="../images/riksdagsmonitornews-banner.webp" alt="" class="hero-banner-bg" width="1536" height="1024" loading="eager" aria-hidden="true">
194
- </div>
195
- <!-- Hero Title -->
196
- <div class="hero-header-text">
197
- <h1>${escapeHtml(lang.title)}</h1>
198
- <p class="subtitle">${lang.subtitle}</p>
199
- </div>
200
- <a href="../${mainIndex}" class="back-link">\u2190 ${escapeHtml(lang.backLink)}</a>
201
- </div>
202
- </header>
203
- ${generateLanguageSwitcherNav(langKey)}
204
- <main role="main">
205
- <div class="container">
206
- ${needsLanguageNotice ? generateLanguageNotice(langKey) : ''}
207
-
208
- <!-- Filter Bar -->
209
- <div class="filter-bar">
210
- <div class="filter-group">
211
- <label for="filter-type">${f.type}</label>
212
- <select id="filter-type">
213
- <option value="all">${escapeHtml(f.allTypes)}</option>
214
- <option value="prospective">${escapeHtml(f.prospective)}</option>
215
- <option value="retrospective">${escapeHtml(f.retrospective)}</option>
216
- <option value="analysis">${escapeHtml(f.analysis)}</option>
217
- <option value="breaking">${escapeHtml(f.breaking)}</option>
218
- </select>
219
- </div>
220
-
221
- <div class="filter-group">
222
- <label for="filter-topic">${f.topic}</label>
223
- <select id="filter-topic">
224
- <option value="all">${escapeHtml(f.allTopics)}</option>
225
- <option value="parliament">${escapeHtml(f.parliament)}</option>
226
- <option value="government">${escapeHtml(f.government)}</option>
227
- <option value="eu">EU</option>
228
- <option value="defense">${escapeHtml(f.defense)}</option>
229
- <option value="environment">${escapeHtml(f.environment)}</option>
230
- <option value="committees">${escapeHtml(f.committees)}</option>
231
- <option value="legislation">${escapeHtml(f.legislation)}</option>
232
- </select>
233
- </div>
234
-
235
- <div class="filter-group">
236
- <label for="filter-sort">${f.sort}</label>
237
- <select id="filter-sort">
238
- <option value="date-desc">${escapeHtml(f.newest)}</option>
239
- <option value="date-asc">${escapeHtml(f.oldest)}</option>
240
- <option value="title">${escapeHtml(f.titleSort)}</option>
241
- </select>
242
- </div>
243
-
244
- <div class="filter-group search-group">
245
- <label for="search-input">${escapeHtml(lang.i18n.search)}</label>
246
- <input type="search" id="search-input" placeholder="${escapeHtml(lang.i18n.searchPlaceholder)}" aria-label="${escapeHtml(lang.i18n.search)}" autocomplete="off">
247
- </div>
248
- </div>
249
-
250
- <!-- Articles Grid -->
251
- <div class="articles-grid" id="articles-grid"></div>
252
-
253
- <div id="no-articles" style="text-align: center; padding: 3rem; color: #888;" hidden>
254
- ${escapeHtml(lang.i18n.noArticles)}
255
- </div>
256
-
257
- <div id="no-results" style="text-align: center; padding: 3rem; color: #888;" hidden>
258
- ${escapeHtml(lang.noResults)}
259
- </div>
260
-
261
- <!-- Pagination controls -->
262
- <div class="pagination-controls" role="navigation" aria-label="${escapeHtml(lang.i18n.loadMore)}">
263
- <p id="article-counter" class="article-counter" aria-live="polite" aria-atomic="true"></p>
264
- <button id="load-more-btn" class="load-more-btn btn" hidden aria-label="${escapeHtml(lang.i18n.loadMore)}">${escapeHtml(lang.i18n.loadMore)}</button>
265
- </div>
266
- </div>
267
-
268
- <script>
269
- // Language flags mapping (shared with server-side)
270
- const LANGUAGE_FLAGS = ${JSON.stringify(LANGUAGE_FLAGS)};
271
-
272
- // RTL page flag (used to set dir="ltr" on language badges)
273
- const IS_RTL = ${isRTL};
274
-
275
- // Available in translation (for current language)
276
- const AVAILABLE_IN_TEXT = '${escapeHtml(AVAILABLE_IN_TRANSLATIONS[langKey] || 'Available in')}';
277
-
278
- // HTML-escape helper to prevent XSS when interpolating article fields into innerHTML
279
- function esc(str) {
280
- return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;');
281
- }
282
-
283
- function safeHref(slug) {
284
- var s = String(slug);
285
- // Only allow simple relative HTML filenames to avoid URL parsing/normalization issues.
286
- // Reject empty strings, backslashes, and control characters outright.
287
- if (!s || /[\\\\\\x00-\\x1F\\x7F]/.test(s)) {
288
- return '#';
289
- }
290
- // Allow only [A-Za-z0-9._-] characters with a required ".html" suffix.
291
- if (!/^[A-Za-z0-9._-]+\\.html$/.test(s)) {
292
- return '#';
293
- }
294
- return esc(s);
295
- }
296
-
297
- // Pagination i18n strings
298
- const i18nLoadMore = ${JSON.stringify(lang.i18n.loadMore)};
299
- const i18nShowingConfig = ${JSON.stringify(lang.i18n.showing)};
300
- function i18nShowing(shown, total) {
301
- var template;
302
- // Support both simple string templates and pluralization objects
303
- if (i18nShowingConfig && typeof i18nShowingConfig === 'object') {
304
- // Prefer explicit pluralization keys if provided
305
- if (shown === 1 && Object.prototype.hasOwnProperty.call(i18nShowingConfig, 'one')) {
306
- template = i18nShowingConfig.one;
307
- } else if (Object.prototype.hasOwnProperty.call(i18nShowingConfig, 'other')) {
308
- template = i18nShowingConfig.other;
309
- } else {
310
- // Fallback: best-effort stringification of config object
311
- template = String(i18nShowingConfig);
312
- }
313
- } else {
314
- template = i18nShowingConfig || '';
315
- }
316
- if (typeof template !== 'string') {
317
- template = String(template);
318
- }
319
- return template
320
- .replace('{shown}', String(shown))
321
- .replace('{total}', String(total));
322
- }
323
-
324
- // Pagination state
325
- const PAGE_SIZE = 20;
326
- let visibleCount = PAGE_SIZE;
327
- let restoringFromURL = false;
328
-
329
- // Dynamic articles array - generated from news/ directory
330
- const articles = ${JSON.stringify(displayData, null, 2).replace(/<\//g, '<\\/')};
331
-
332
- let filteredArticles = [...articles];
333
-
334
- function buildArticleCard(article) {
335
- // Generate language badge for the article using shared LANGUAGE_FLAGS
336
- const flag = LANGUAGE_FLAGS[article.lang] || '🌐';
337
- const dirAttr = IS_RTL ? ' dir="ltr"' : '';
338
- const langBadge = \`<span class="language-badge"\${dirAttr} aria-label="\${esc(article.lang)} language"><span aria-hidden="true">\${flag}</span> \${esc(article.lang.toUpperCase())}</span>\`;
339
-
340
- // Generate available languages display if multiple languages exist
341
- const availableLangs = article.availableLanguages || [article.lang];
342
- let availableDisplay = '';
343
- if (availableLangs.length > 1) {
344
- const availableBadges = availableLangs.map(l => {
345
- const lf = LANGUAGE_FLAGS[l] || '🌐';
346
- return \`<span class="lang-badge-sm"\${dirAttr}><span aria-hidden="true">\${lf}</span> \${esc(l.toUpperCase())}</span>\`;
347
- }).join(' ');
348
- availableDisplay = \`<p class="available-languages"><strong>\${AVAILABLE_IN_TEXT}:</strong> \${availableBadges}</p>\`;
349
- }
350
-
351
- return \`
352
- <article class="article-card">
353
- <div class="article-meta">
354
- <time class="article-date" datetime="\${esc(article.date)}">\${formatDate(article.date)}</time>
355
- <span class="article-type">\${localizeType(article.type)}</span>
356
- \${langBadge}
357
- </div>
358
- <h2 class="article-title">
359
- <a href="\${safeHref(article.slug)}">\${esc(article.title)}</a>
360
- </h2>
361
- <p class="article-excerpt">\${esc(article.excerpt)}</p>
362
- \${availableDisplay}
363
- <div class="article-tags">
364
- \${article.tags.map(tag => \`<span class="tag">\${esc(tag)}</span>\`).join('')}
365
- </div>
366
- </article>
367
- \`;
368
- }
369
-
370
- function renderPage() {
371
- const grid = document.getElementById('articles-grid');
372
- const noArticles = document.getElementById('no-articles');
373
- const noResults = document.getElementById('no-results');
374
- const counter = document.getElementById('article-counter');
375
- const btn = document.getElementById('load-more-btn');
376
-
377
- if (articles.length === 0) {
378
- grid.innerHTML = '';
379
- if (noArticles) noArticles.hidden = false;
380
- noResults.hidden = true;
381
- if (counter) counter.textContent = '';
382
- if (btn) btn.hidden = true;
383
- return;
384
- }
385
-
386
- if (filteredArticles.length === 0) {
387
- grid.innerHTML = '';
388
- noResults.hidden = false;
389
- if (noArticles) noArticles.hidden = true;
390
- if (counter) counter.textContent = '';
391
- if (btn) btn.hidden = true;
392
- return;
393
- }
394
-
395
- if (noArticles) noArticles.hidden = true;
396
- noResults.hidden = true;
397
-
398
- const visible = filteredArticles.slice(0, visibleCount);
399
- grid.innerHTML = visible.map(buildArticleCard).join('');
400
-
401
- // Update counter
402
- const shown = visible.length;
403
- const total = filteredArticles.length;
404
- if (counter) counter.textContent = i18nShowing(shown, total);
405
-
406
- // Update load more button
407
- if (btn) {
408
- if (total > visibleCount) {
409
- btn.hidden = false;
410
- btn.setAttribute('aria-label', i18nLoadMore);
411
- } else {
412
- btn.hidden = true;
413
- }
414
- }
415
- }
416
-
417
- function loadMore() {
418
- const prevCount = visibleCount;
419
- visibleCount += PAGE_SIZE;
420
- updateURL();
421
- renderPage();
422
- // Focus management: move focus to first newly visible article link
423
- const cards = document.querySelectorAll('.article-card');
424
- if (cards[prevCount]) {
425
- const link = cards[prevCount].querySelector('a');
426
- if (link) link.focus();
427
- }
428
- }
429
-
430
- function updateURL() {
431
- const typeFilter = document.getElementById('filter-type').value;
432
- const topicFilter = document.getElementById('filter-topic').value;
433
- const sortFilter = document.getElementById('filter-sort').value;
434
- const searchInput = document.getElementById('search-input').value.trim();
435
- const params = new URLSearchParams();
436
- if (typeFilter !== 'all') params.set('type', typeFilter);
437
- if (topicFilter !== 'all') params.set('topic', topicFilter);
438
- if (sortFilter !== 'date-desc') params.set('sort', sortFilter);
439
- if (searchInput) params.set('q', searchInput);
440
- const effectiveVisible = Math.min(visibleCount, filteredArticles.length);
441
- const page = Math.ceil(effectiveVisible / PAGE_SIZE);
442
- if (page > 1 && filteredArticles.length > PAGE_SIZE) {
443
- params.set('page', String(page));
444
- }
445
- const newURL = params.toString() ? '?' + params.toString() : window.location.pathname;
446
- if (window.history && window.history.replaceState) {
447
- window.history.replaceState(null, '', newURL);
448
- }
449
- }
450
-
451
- const typeLabels = ${JSON.stringify({
452
- prospective: f.prospective,
453
- retrospective: f.retrospective,
454
- analysis: f.analysis,
455
- breaking: f.breaking,
456
- })};
457
-
458
- function localizeType(type) {
459
- return typeLabels[type] || type;
460
- }
461
-
462
- function formatDate(dateStr) {
463
- const date = new Date(dateStr);
464
- return date.toLocaleDateString('${lang.code}', { year: 'numeric', month: 'long', day: 'numeric' });
465
- }
466
-
467
- function filterArticles() {
468
- const typeFilter = document.getElementById('filter-type').value;
469
- const topicFilter = document.getElementById('filter-topic').value;
470
- const sortFilter = document.getElementById('filter-sort').value;
471
- const searchQuery = document.getElementById('search-input').value.toLowerCase().trim();
472
-
473
- let filtered = [...articles];
474
-
475
- // Apply type filter
476
- if (typeFilter !== 'all') {
477
- filtered = filtered.filter(article => article.type === typeFilter);
478
- }
479
-
480
- // Apply topic filter
481
- if (topicFilter !== 'all') {
482
- filtered = filtered.filter(article => article.topics.includes(topicFilter));
483
- }
484
-
485
- // Apply search filter
486
- if (searchQuery) {
487
- filtered = filtered.filter(article => article.title.toLowerCase().includes(searchQuery));
488
- }
489
-
490
- // Apply sorting
491
- switch(sortFilter) {
492
- case 'date-desc':
493
- filtered.sort((a, b) => new Date(b.date) - new Date(a.date));
494
- break;
495
- case 'date-asc':
496
- filtered.sort((a, b) => new Date(a.date) - new Date(b.date));
497
- break;
498
- case 'title':
499
- filtered.sort((a, b) => a.title.localeCompare(b.title));
500
- break;
501
- }
502
-
503
- filteredArticles = filtered;
504
- // Reset visibleCount on user-initiated filter changes, but preserve it
505
- // for the initial render when restoring from URL "page" parameter.
506
- if (restoringFromURL) {
507
- restoringFromURL = false;
508
- } else {
509
- visibleCount = PAGE_SIZE;
510
- }
511
- updateURL();
512
- renderPage();
513
- }
514
-
515
- function readURLParams() {
516
- const params = new URLSearchParams(window.location.search);
517
-
518
- function safeSetSelect(id, value) {
519
- const el = document.getElementById(id);
520
- if (!el) return;
521
- const opts = Array.from(el.options);
522
- if (opts.some(o => o.value === value)) {
523
- el.value = value;
524
- }
525
- }
526
-
527
- if (params.has('type')) safeSetSelect('filter-type', params.get('type'));
528
- if (params.has('topic')) safeSetSelect('filter-topic', params.get('topic'));
529
- if (params.has('sort')) safeSetSelect('filter-sort', params.get('sort'));
530
- const searchInput = document.getElementById('search-input');
531
- if (searchInput && params.has('q')) searchInput.value = params.get('q');
532
- if (params.has('page')) {
533
- const page = parseInt(params.get('page'), 10);
534
- if (!isNaN(page) && page > 1) {
535
- visibleCount = page * PAGE_SIZE;
536
- restoringFromURL = true;
537
- }
538
- }
539
- }
540
-
541
- // Event listeners
542
- document.getElementById('filter-type').addEventListener('change', filterArticles);
543
- document.getElementById('filter-topic').addEventListener('change', filterArticles);
544
- document.getElementById('filter-sort').addEventListener('change', filterArticles);
545
- document.getElementById('load-more-btn').addEventListener('click', loadMore);
546
-
547
- // Debounced search input listener
548
- let searchTimer;
549
- document.getElementById('search-input').addEventListener('input', function() {
550
- clearTimeout(searchTimer);
551
- searchTimer = setTimeout(filterArticles, 300);
552
- });
553
-
554
- // Read URL state and render
555
- readURLParams();
556
- filterArticles();
557
- </script>
558
-
559
- <section class="ai-newsroom-section" aria-labelledby="ai-newsroom-heading">
560
- <div class="container">
561
- <h2 id="ai-newsroom-heading"><span aria-hidden="true">🤖</span> ${escapeHtml(lang.aiNewsroomTitle)}</h2>
562
- <p>${escapeHtml(lang.aiNewsroomText)}</p>
563
- </div>
564
- </section>
565
- </main>
566
- <footer class="news-footer">
567
- <a href="../${mainIndex}" aria-label="Riksdagsmonitor Home">
568
- <img src="../images/riksdagsmonitor-logo.webp" alt="Riksdagsmonitor" class="footer-logo" width="80" height="80" loading="lazy">
569
- </a>
570
- <p>&copy; 2026 Riksdagsmonitor - Swedish Parliament Intelligence | v${escapeHtml(String(PKG_VERSION))}</p>
571
- <p class="footer-disclaimer">⚠️ ${escapeHtml(lang.disclaimer)} <a href="https://github.com/Hack23/riksdagsmonitor/issues" target="_blank" rel="noopener noreferrer">${escapeHtml(lang.disclaimerLink)}</a>.</p>
572
- </footer>
573
- <script src="../js/theme-toggle.js"></script>
574
- </body>
575
- </html>`;
576
- return html;
577
- }
578
- /**
579
- * Generate hreflang tags for all languages.
580
- */
581
- export function generateHreflangTags() {
582
- const tags = [];
583
- Object.keys(LANGUAGES).forEach((langKey) => {
584
- const filename = langKey === 'en' ? 'index.html' : `index_${langKey === 'no' ? 'no' : langKey}.html`;
585
- const hrefLang = LANGUAGES[langKey].code;
586
- tags.push(` <link rel="alternate" hreflang="${hrefLang}" href="https://riksdagsmonitor.com/news/${filename}">`);
587
- });
588
- tags.push(` <link rel="alternate" hreflang="x-default" href="https://riksdagsmonitor.com/news/index.html">`);
589
- return tags.join('\n');
590
- }
591
- /**
592
- * Generate minimal RTL-specific styles.
593
- * All other styles are now in styles.css under .news-page scope.
594
- */
595
- export function generateRTLStyles(isRTL) {
596
- if (!isRTL)
597
- return '';
598
- return `
599
- <style>
600
- /* RTL-specific overrides for Arabic and Hebrew */
601
- .news-page .language-notice {
602
- border-left: none;
603
- border-right: 4px solid var(--primary-yellow, #ffbe0b);
604
- }
605
-
606
- .news-page .language-badge {
607
- margin-left: 0;
608
- margin-right: 0.5rem;
609
- }
610
-
611
- .news-page .back-link:hover {
612
- transform: translateX(5px); /* Reverse direction for RTL */
613
- }
614
- </style>`;
615
- }
616
- /**
617
- * Generate language availability notice for non-EN/SV indexes.
618
- */
619
- export function generateLanguageNotice(langKey) {
620
- const messages = {
621
- da: { title: 'Artikler tilgængelige på engelsk', text: 'Artikler er i øjeblikket kun tilgængelige på engelsk og svensk. Automatisk oversættelse til dansk kommer snart.' },
622
- no: { title: 'Artikler tilgjengelige på engelsk', text: 'Artikler er for tiden kun tilgjengelige på engelsk og svensk. Automatisk oversettelse til norsk kommer snart.' },
623
- fi: { title: 'Artikkelit saatavilla englanniksi', text: 'Artikkelit ovat tällä hetkellä saatavilla vain englanniksi ja ruotsiksi. Automaattinen käännös suomeksi tulossa pian.' },
624
- de: { title: 'Artikel auf Englisch verfügbar', text: 'Artikel sind derzeit nur auf Englisch und Schwedisch verfügbar. Automatische Übersetzung ins Deutsche folgt in Kürze.' },
625
- fr: { title: 'Articles disponibles en anglais', text: 'Les articles ne sont actuellement disponibles qu\'en anglais et en suédois. La traduction automatique en français arrive bientôt.' },
626
- es: { title: 'Artículos disponibles en inglés', text: 'Los artículos actualmente solo están disponibles en inglés y sueco. La traducción automática al español estará disponible pronto.' },
627
- nl: { title: 'Artikelen beschikbaar in het Engels', text: 'Artikelen zijn momenteel alleen beschikbaar in het Engels en Zweeds. Automatische vertaling naar het Nederlands komt binnenkort.' },
628
- ar: { title: 'المقالات متاحة بالإنجليزية', text: 'المقالات متاحة حالياً باللغتين الإنجليزية والسويدية فقط. الترجمة الآلية إلى العربية قريباً.' },
629
- he: { title: 'מאמרים זמינים באנגלית', text: 'מאמרים זמינים כעת רק באנגלית ובשוודית. תרגום אוטומטי לעברית בקרוב.' },
630
- ja: { title: '英語で利用可能な記事', text: '記事は現在、英語とスウェーデン語のみで利用可能です。日本語への自動翻訳は近日公開予定です。' },
631
- ko: { title: '영어로 제공되는 기사', text: '기사는 현재 영어와 스웨덴어로만 제공됩니다. 한국어 자동 번역이 곧 제공될 예정입니다.' },
632
- zh: { title: '文章以英文提供', text: '文章目前仅提供英文和瑞典文版本。中文自动翻译即将推出。' },
633
- };
634
- const msg = messages[langKey];
635
- if (!msg)
636
- return '';
637
- const isRTL = ['ar', 'he'].includes(langKey);
638
- return ` <div class="language-notice">
639
- <h2>${msg.title}</h2>
640
- <p>${msg.text} <span class="language-badge"${isRTL ? ' dir="ltr"' : ''} aria-label="English language"><span aria-hidden="true">🇬🇧</span> EN</span></p>
641
- </div>
642
- `;
643
- }
644
- //# sourceMappingURL=template.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../scripts/generate-news-indexes/template.ts"],"names":[],"mappings":"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"}