mwoffliner 1.17.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/README.md +355 -62
  2. package/docs/functional_architecture.md +34 -38
  3. package/extensions/wiktionary_fr.js +18 -17
  4. package/jest.config.cjs +2 -2
  5. package/lib/DOMUtils.js +0 -1
  6. package/lib/DOMUtils.js.map +1 -1
  7. package/lib/Downloader.d.ts +39 -31
  8. package/lib/Downloader.js +418 -349
  9. package/lib/Downloader.js.map +1 -1
  10. package/lib/Dump.d.ts +24 -10
  11. package/lib/Dump.js +95 -50
  12. package/lib/Dump.js.map +1 -1
  13. package/lib/Gadgets.d.ts +2 -1
  14. package/lib/Gadgets.js +7 -5
  15. package/lib/Gadgets.js.map +1 -1
  16. package/lib/Logger.d.ts +6 -6
  17. package/lib/Logger.js +33 -33
  18. package/lib/Logger.js.map +1 -1
  19. package/lib/MediaWiki.d.ts +14 -31
  20. package/lib/MediaWiki.js +119 -172
  21. package/lib/MediaWiki.js.map +1 -1
  22. package/lib/RedisStore.d.ts +3 -3
  23. package/lib/RedisStore.js +21 -23
  24. package/lib/RedisStore.js.map +1 -1
  25. package/lib/S3.js +1 -1
  26. package/lib/S3.js.map +1 -1
  27. package/lib/Templates.d.ts +3 -10
  28. package/lib/Templates.js +5 -14
  29. package/lib/Templates.js.map +1 -1
  30. package/lib/cli.js +7 -6
  31. package/lib/cli.js.map +1 -1
  32. package/lib/config.d.ts +10 -16
  33. package/lib/config.js +33 -55
  34. package/lib/config.js.map +1 -1
  35. package/lib/error.manager.d.ts +2 -2
  36. package/lib/error.manager.js +42 -49
  37. package/lib/error.manager.js.map +1 -1
  38. package/lib/i18n.d.ts +2 -0
  39. package/lib/i18n.js +53 -0
  40. package/lib/i18n.js.map +1 -0
  41. package/lib/mutex.d.ts +2 -1
  42. package/lib/mutex.js +2 -1
  43. package/lib/mutex.js.map +1 -1
  44. package/lib/mwoffliner.lib.js +370 -222
  45. package/lib/mwoffliner.lib.js.map +1 -1
  46. package/lib/parameterList.d.ts +20 -8
  47. package/lib/parameterList.js +30 -18
  48. package/lib/parameterList.js.map +1 -1
  49. package/lib/renderers/abstract.renderer.d.ts +48 -55
  50. package/lib/renderers/abstract.renderer.js +377 -98
  51. package/lib/renderers/abstract.renderer.js.map +1 -1
  52. package/lib/renderers/action-parse.renderer.d.ts +22 -3
  53. package/lib/renderers/action-parse.renderer.js +123 -81
  54. package/lib/renderers/action-parse.renderer.js.map +1 -1
  55. package/lib/renderers/renderer.builder.js +6 -69
  56. package/lib/renderers/renderer.builder.js.map +1 -1
  57. package/lib/renderers/rendering.context.d.ts +2 -3
  58. package/lib/renderers/rendering.context.js +6 -14
  59. package/lib/renderers/rendering.context.js.map +1 -1
  60. package/lib/sanitize-argument.d.ts +7 -4
  61. package/lib/sanitize-argument.js +99 -41
  62. package/lib/sanitize-argument.js.map +1 -1
  63. package/lib/util/FileManager.d.ts +36 -0
  64. package/lib/util/FileManager.js +246 -0
  65. package/lib/util/FileManager.js.map +1 -0
  66. package/lib/util/RedisKvs.js +4 -4
  67. package/lib/util/RedisKvs.js.map +1 -1
  68. package/lib/util/RedisQueue.js +1 -1
  69. package/lib/util/RedisQueue.js.map +1 -1
  70. package/lib/util/builders/url/action-parse.director.d.ts +2 -2
  71. package/lib/util/builders/url/action-parse.director.js +7 -7
  72. package/lib/util/builders/url/action-parse.director.js.map +1 -1
  73. package/lib/util/builders/url/api.director.d.ts +2 -4
  74. package/lib/util/builders/url/api.director.js +10 -17
  75. package/lib/util/builders/url/api.director.js.map +1 -1
  76. package/lib/util/builders/url/base.director.d.ts +0 -4
  77. package/lib/util/builders/url/base.director.js +0 -25
  78. package/lib/util/builders/url/base.director.js.map +1 -1
  79. package/lib/util/builders/url/basic.director.d.ts +1 -1
  80. package/lib/util/builders/url/basic.director.js +1 -1
  81. package/lib/util/builders/url/web.director.d.ts +1 -1
  82. package/lib/util/builders/url/web.director.js +2 -2
  83. package/lib/util/builders/url/web.director.js.map +1 -1
  84. package/lib/util/categories.d.ts +5 -5
  85. package/lib/util/categories.js +175 -174
  86. package/lib/util/categories.js.map +1 -1
  87. package/lib/util/const.d.ts +4 -8
  88. package/lib/util/const.js +9 -17
  89. package/lib/util/const.js.map +1 -1
  90. package/lib/util/customCssJs.d.ts +6 -0
  91. package/lib/util/customCssJs.js +70 -0
  92. package/lib/util/customCssJs.js.map +1 -0
  93. package/lib/util/dump.d.ts +15 -4
  94. package/lib/util/dump.js +282 -86
  95. package/lib/util/dump.js.map +1 -1
  96. package/lib/util/index.d.ts +1 -1
  97. package/lib/util/index.js +1 -1
  98. package/lib/util/index.js.map +1 -1
  99. package/lib/util/metaData.js.map +1 -1
  100. package/lib/util/misc.d.ts +23 -13
  101. package/lib/util/misc.js +90 -59
  102. package/lib/util/misc.js.map +1 -1
  103. package/lib/util/mw-api.d.ts +7 -5
  104. package/lib/util/mw-api.js +167 -221
  105. package/lib/util/mw-api.js.map +1 -1
  106. package/lib/util/pageListMainPage.d.ts +3 -0
  107. package/lib/util/pageListMainPage.js +10 -0
  108. package/lib/util/pageListMainPage.js.map +1 -0
  109. package/lib/util/pages.d.ts +30 -0
  110. package/lib/util/pages.js +146 -0
  111. package/lib/util/pages.js.map +1 -0
  112. package/lib/util/rewriteUrls.d.ts +2 -2
  113. package/lib/util/rewriteUrls.js +33 -31
  114. package/lib/util/rewriteUrls.js.map +1 -1
  115. package/lib/util/savePages.d.ts +8 -0
  116. package/lib/util/savePages.js +182 -0
  117. package/lib/util/savePages.js.map +1 -0
  118. package/lib/version.d.ts +1 -1
  119. package/lib/version.js +1 -1
  120. package/lib/version.js.map +1 -1
  121. package/offliner-definition.json +178 -90
  122. package/package.json +50 -49
  123. package/res/page_list_home.js +20 -0
  124. package/res/{article_not_found.svg → page_not_found.svg} +1 -1
  125. package/res/script.js +30 -45
  126. package/res/style.css +52 -68
  127. package/res/templates/download_error_placeholder.html +7 -8
  128. package/res/templates/javaScript.html +19 -0
  129. package/res/templates/pageFallback.html +9 -7
  130. package/res/templates/pageVector2022.html +9 -7
  131. package/res/templates/pageVectorLegacy.html +9 -7
  132. package/res/templates/{article_list_home.html → page_list_home.html} +1 -2
  133. package/translation/ar.json +21 -21
  134. package/translation/bn.json +1 -1
  135. package/translation/de.json +46 -19
  136. package/translation/en.json +54 -21
  137. package/translation/es.json +17 -19
  138. package/translation/fi.json +23 -3
  139. package/translation/fr.json +57 -21
  140. package/translation/he.json +8 -6
  141. package/translation/ia.json +19 -19
  142. package/translation/id.json +13 -13
  143. package/translation/it.json +13 -8
  144. package/translation/ko.json +55 -3
  145. package/translation/lb.json +5 -2
  146. package/translation/mk.json +5 -5
  147. package/translation/nl.json +57 -22
  148. package/translation/or.json +2 -2
  149. package/translation/pt.json +2 -2
  150. package/translation/qqq.json +55 -22
  151. package/translation/ru.json +2 -2
  152. package/translation/sc.json +2 -2
  153. package/translation/sk.json +62 -0
  154. package/translation/sl.json +54 -21
  155. package/translation/sv.json +20 -19
  156. package/translation/sw.json +45 -2
  157. package/translation/zh-hans.json +56 -22
  158. package/translation/zh-hant.json +26 -19
  159. package/lib/renderers/abstractDesktop.render.d.ts +0 -12
  160. package/lib/renderers/abstractDesktop.render.js +0 -67
  161. package/lib/renderers/abstractDesktop.render.js.map +0 -1
  162. package/lib/renderers/abstractMobile.render.d.ts +0 -12
  163. package/lib/renderers/abstractMobile.render.js +0 -54
  164. package/lib/renderers/abstractMobile.render.js.map +0 -1
  165. package/lib/renderers/rest-api.renderer.d.ts +0 -7
  166. package/lib/renderers/rest-api.renderer.js +0 -68
  167. package/lib/renderers/rest-api.renderer.js.map +0 -1
  168. package/lib/renderers/visual-editor.renderer.d.ts +0 -7
  169. package/lib/renderers/visual-editor.renderer.js +0 -76
  170. package/lib/renderers/visual-editor.renderer.js.map +0 -1
  171. package/lib/renderers/wikimedia-desktop.renderer.d.ts +0 -4
  172. package/lib/renderers/wikimedia-desktop.renderer.js +0 -7
  173. package/lib/renderers/wikimedia-desktop.renderer.js.map +0 -1
  174. package/lib/renderers/wikimedia-mobile.renderer.d.ts +0 -19
  175. package/lib/renderers/wikimedia-mobile.renderer.js +0 -243
  176. package/lib/renderers/wikimedia-mobile.renderer.js.map +0 -1
  177. package/lib/util/articleListMainPage.d.ts +0 -3
  178. package/lib/util/articleListMainPage.js +0 -10
  179. package/lib/util/articleListMainPage.js.map +0 -1
  180. package/lib/util/articles.d.ts +0 -26
  181. package/lib/util/articles.js +0 -102
  182. package/lib/util/articles.js.map +0 -1
  183. package/lib/util/builders/url/desktop.director.d.ts +0 -8
  184. package/lib/util/builders/url/desktop.director.js +0 -15
  185. package/lib/util/builders/url/desktop.director.js.map +0 -1
  186. package/lib/util/builders/url/mobile.director.d.ts +0 -8
  187. package/lib/util/builders/url/mobile.director.js +0 -15
  188. package/lib/util/builders/url/mobile.director.js.map +0 -1
  189. package/lib/util/builders/url/rest-api.director.d.ts +0 -8
  190. package/lib/util/builders/url/rest-api.director.js +0 -18
  191. package/lib/util/builders/url/rest-api.director.js.map +0 -1
  192. package/lib/util/builders/url/visual-editor.director.d.ts +0 -9
  193. package/lib/util/builders/url/visual-editor.director.js +0 -18
  194. package/lib/util/builders/url/visual-editor.director.js.map +0 -1
  195. package/lib/util/saveArticles.d.ts +0 -8
  196. package/lib/util/saveArticles.js +0 -411
  197. package/lib/util/saveArticles.js.map +0 -1
  198. package/res/article_list_home.js +0 -24
  199. package/res/content.parsoid.css +0 -196
  200. package/res/inserted_style.css +0 -45
  201. package/res/templates/categories.html +0 -11
  202. package/res/templates/lead_section_wrapper.html +0 -6
  203. package/res/templates/pageWikimediaDesktop.html +0 -24
  204. package/res/templates/pageWikimediaMobile.html +0 -24
  205. package/res/templates/section_wrapper.html +0 -5
  206. package/res/templates/subcategories.html +0 -23
  207. package/res/templates/subpages.html +0 -17
  208. package/res/templates/subsection_wrapper.html +0 -5
  209. package/res/webpHandler.js +0 -165
  210. package/res/wm_mobile_override_script.js +0 -15
  211. package/res/wm_mobile_override_style.css +0 -20
  212. package/translation/br.json +0 -8
  213. package/translation/dag.json +0 -9
  214. package/translation/es-formal.json +0 -29
  215. package/translation/ha.json +0 -10
  216. package/translation/hi.json +0 -9
  217. package/translation/ig.json +0 -10
  218. package/translation/kaa.json +0 -9
  219. package/translation/nb.json +0 -9
  220. package/translation/nqo.json +0 -8
  221. package/translation/pt-br.json +0 -10
  222. package/translation/ro.json +0 -9
  223. package/translation/scn.json +0 -8
  224. package/translation/sq.json +0 -9
  225. package/translation/te.json +0 -9
  226. package/translation/tn.json +0 -9
  227. package/translation/tr.json +0 -10
@@ -1,243 +0,0 @@
1
- import * as domino from 'domino';
2
- import urlJoin from 'url-join';
3
- import * as logger from '../Logger.js';
4
- import { MobileRenderer } from './abstractMobile.render.js';
5
- import { getStrippedTitleFromHtml } from '../util/misc.js';
6
- import Downloader from '../Downloader.js';
7
- const THUMB_WIDTH_REGEX = /\/(\d+)px-[^/]+$/;
8
- const THUMB_MAX_DIMENSION = 320;
9
- // Represent 'https://{wikimedia-wiki}/api/rest_v1/page/mobile-html/'
10
- export class WikimediaMobileRenderer extends MobileRenderer {
11
- constructor() {
12
- super();
13
- }
14
- getStrippedTitle(renderOpts) {
15
- const { data, articleId } = renderOpts;
16
- const strippedTitle = getStrippedTitleFromHtml(data);
17
- return strippedTitle || articleId.replace('_', ' ');
18
- }
19
- async download(downloadOpts) {
20
- const { articleUrl, articleDetail } = downloadOpts;
21
- const moduleDependencies = super.filterWikimediaMobileModules(await Downloader.getModuleDependencies(articleDetail.title));
22
- const data = await Downloader.getJSON(articleUrl);
23
- return { data, moduleDependencies, redirects: [] };
24
- }
25
- async render(renderOpts) {
26
- try {
27
- const result = [];
28
- const { data, articleId, moduleDependencies, dump } = renderOpts;
29
- const articleDetail = await renderOpts.articleDetailXId.get(articleId);
30
- const displayTitle = this.getStrippedTitle(renderOpts);
31
- /* istanbul ignore else */
32
- if (data) {
33
- let mediaDependenciesVal;
34
- let videoDependenciesVal;
35
- let imageDependenciesVal;
36
- let subtitlesVal;
37
- const mobileHTML = domino.createDocument(data);
38
- const finalHTMLMobile = await this.pipeMobileTransformations(mobileHTML, this.INTERNAL.convertLazyLoadToImages, this.removeEditContainer, this.removeHiddenClass, this.INTERNAL.unhideSections, async (doc) => {
39
- const { finalHTML, subtitles, mediaDependencies, videoDependencies, imageDependencies } = await super.processHtml({
40
- html: doc.documentElement.outerHTML,
41
- dump,
42
- articleId,
43
- articleDetail,
44
- moduleDependencies,
45
- callback: super.templateMobileArticle.bind(this),
46
- });
47
- mediaDependenciesVal = mediaDependencies;
48
- imageDependenciesVal = imageDependencies;
49
- videoDependenciesVal = videoDependencies;
50
- subtitlesVal = subtitles;
51
- return domino.createDocument(finalHTML);
52
- }, this.restoreLinkDefaults);
53
- result.push({
54
- articleId,
55
- displayTitle,
56
- html: finalHTMLMobile.documentElement.outerHTML,
57
- mediaDependencies: mediaDependenciesVal,
58
- videoDependencies: videoDependenciesVal,
59
- imageDependencies: imageDependenciesVal,
60
- moduleDependencies,
61
- staticFiles: this.staticFilesListMobile,
62
- subtitles: subtitlesVal,
63
- });
64
- return result;
65
- }
66
- else {
67
- throw new Error(`Cannot render [${data}] into an article`);
68
- }
69
- }
70
- catch (err) {
71
- logger.error(err.message);
72
- throw err;
73
- }
74
- }
75
- async pipeMobileTransformations(value, ...fns) {
76
- let result = value;
77
- for (const fn of fns) {
78
- result = fn(await result);
79
- }
80
- return result;
81
- }
82
- removeEditContainer(doc) {
83
- const editContainers = doc.querySelectorAll('.pcs-edit-section-link-container');
84
- editContainers.forEach((elem) => {
85
- elem.remove();
86
- });
87
- return doc;
88
- }
89
- calculateImageDimensions(span) {
90
- // These are the attributes that were "prepared" for us by the mobile-html endpoint.
91
- const preparedData = {
92
- src: span.getAttribute('data-src'),
93
- width: parseInt(span.getAttribute('data-width') || '0', 10),
94
- height: parseInt(span.getAttribute('data-height') || '0', 10),
95
- };
96
- if (preparedData.width === 0 || preparedData.height === 0) {
97
- return { preparedData: null, originalData: null, maxData: null };
98
- }
99
- // Calculate the ratio so we know if we're scaling down in the width or height dimension.
100
- const widthHeightRatio = preparedData.width / preparedData.height;
101
- const scaleUsingHeight = widthHeightRatio > 1.0;
102
- // The data-data-file-original-src attribute is the URL of the image that was used in the original article.
103
- // It is preferred over the data-src attribute, which is a "mobile" image that may be scaled up in order to
104
- // be "full width" on mobile devices. However, if the mobile API didn't scale the image up, then the
105
- // data-data-file-original-src attribute will be missing, and we should use the data-src.
106
- // See https://github.com/openzim/mwoffliner/issues/1925.
107
- let originalData;
108
- const originalSrc = span.getAttribute('data-data-file-original-src');
109
- if (originalSrc) {
110
- // Try to match against an image URL with a width in it.
111
- const match = THUMB_WIDTH_REGEX.exec(originalSrc);
112
- if (match) {
113
- const originalWidth = parseInt(match[1], 10);
114
- originalData = {
115
- src: originalSrc,
116
- width: originalWidth,
117
- height: Math.round(originalWidth / widthHeightRatio),
118
- };
119
- }
120
- }
121
- let maxData;
122
- if (scaleUsingHeight) {
123
- maxData = {
124
- src: null,
125
- width: Math.round(THUMB_MAX_DIMENSION * widthHeightRatio),
126
- height: THUMB_MAX_DIMENSION,
127
- };
128
- }
129
- else {
130
- maxData = {
131
- src: null,
132
- width: THUMB_MAX_DIMENSION,
133
- height: Math.round(THUMB_MAX_DIMENSION / widthHeightRatio),
134
- };
135
- }
136
- return {
137
- preparedData,
138
- originalData,
139
- maxData,
140
- };
141
- }
142
- convertLazyLoadToImagesImpl(doc) {
143
- const protocol = 'https://';
144
- const spans = doc.querySelectorAll('.pcs-lazy-load-placeholder');
145
- spans.forEach((span) => {
146
- // Create a new img element that will replace the placeholder span.
147
- const img = doc.createElement('img');
148
- const { preparedData, originalData, maxData } = this.calculateImageDimensions(span);
149
- if (preparedData === null) {
150
- // The metadata for the lazy-loading span is something that we don't understand. Just copy the
151
- // data-src attribute to the img element and hope for the best.
152
- img.src = urlJoin(protocol, span.getAttribute('data-src'));
153
- img.setAttribute('decoding', 'async');
154
- img.className = span.getAttribute('data-class');
155
- }
156
- else {
157
- const widthToData = {
158
- [preparedData.width]: preparedData,
159
- [maxData.width]: maxData,
160
- [originalData?.width || 0]: originalData,
161
- };
162
- const minWidth = originalData ? Math.min(preparedData.width, maxData.width, originalData?.width) : Math.min(preparedData.width, maxData.width);
163
- let selectedData = widthToData[minWidth];
164
- if (selectedData === maxData) {
165
- // We've decided to scale down the image. Use URL hacking to create an image that scales to the size we want.
166
- if (originalData) {
167
- const match = THUMB_WIDTH_REGEX.exec(originalData.src);
168
- if (match) {
169
- selectedData.src = originalData.src.replace(`${match[1]}px`, `${selectedData.width}px`);
170
- }
171
- }
172
- else {
173
- // No original src, or original src cannot be URL hacked.
174
- const match = THUMB_WIDTH_REGEX.exec(preparedData.src);
175
- if (match) {
176
- selectedData.src = preparedData.src.replace(`${match[1]}px`, `${selectedData.width}px`);
177
- }
178
- }
179
- }
180
- if (selectedData.src === null) {
181
- // We couldn't find a URL to hack, so use the smaller of the original or prepared data.
182
- if (!originalData) {
183
- selectedData = preparedData;
184
- }
185
- else {
186
- const newMinWidth = Math.min(preparedData.width, originalData.width);
187
- selectedData = widthToData[newMinWidth];
188
- }
189
- }
190
- img.src = urlJoin(protocol, selectedData.src);
191
- img.setAttribute('decoding', 'async');
192
- img.width = selectedData.width;
193
- img.height = selectedData.height;
194
- img.className = span.getAttribute('data-class');
195
- }
196
- // Replace the span with the img element
197
- span.parentNode.replaceChild(img, span);
198
- });
199
- return doc;
200
- }
201
- removeHiddenClass(doc) {
202
- const pcsSectionHidden = 'pcs-section-hidden';
203
- const hiddenSections = doc.querySelectorAll(`.${pcsSectionHidden}`);
204
- hiddenSections.forEach((section) => {
205
- section.classList.remove(pcsSectionHidden);
206
- });
207
- return doc;
208
- }
209
- unhideSectionsImpl(doc) {
210
- const sections = doc.querySelectorAll('section');
211
- Array.from(sections).forEach((section) => {
212
- // Domino doesn't allow us to easily manipulate specific styles. Rather than trying to parse
213
- // the style attribute and remove display: none, we just clobber the whole thing.
214
- section.style = '';
215
- });
216
- return doc;
217
- }
218
- restoreLinkDefaults(doc) {
219
- const supElements = doc.querySelectorAll('sup');
220
- Array.from(supElements).forEach((sup) => {
221
- const anchor = doc.createElement('a');
222
- const mwRefLinkTextElement = sup.querySelector('.mw-reflink-text');
223
- let mwRefLinkText = '';
224
- if (mwRefLinkTextElement) {
225
- mwRefLinkText = mwRefLinkTextElement.textContent || '';
226
- }
227
- const existedAnchor = sup.querySelector('.reference-link');
228
- if (existedAnchor?.getAttribute('href')) {
229
- anchor.setAttribute('href', existedAnchor.getAttribute('href'));
230
- }
231
- anchor.className = 'reference-link';
232
- anchor.textContent = mwRefLinkText;
233
- sup.innerHTML = '';
234
- sup.appendChild(anchor);
235
- });
236
- return doc;
237
- }
238
- INTERNAL = {
239
- convertLazyLoadToImages: this.convertLazyLoadToImagesImpl.bind(this),
240
- unhideSections: this.unhideSectionsImpl.bind(this),
241
- };
242
- }
243
- //# sourceMappingURL=wikimedia-mobile.renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wikimedia-mobile.renderer.js","sourceRoot":"","sources":["../../src/renderers/wikimedia-mobile.renderer.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Dump } from '../Dump.js';
2
- export declare function makeArticleListItem(dump: Dump, articleEntry: ArticleDetail): string;
3
- export declare function makeArticleImageTile(dump: Dump, articleEntry: ArticleDetail): string;
@@ -1,10 +0,0 @@
1
- import { encodeArticleIdForZimHtmlUrl } from '../util/index.js';
2
- export function makeArticleListItem(dump, articleEntry) {
3
- return `<li><a href="${encodeArticleIdForZimHtmlUrl(articleEntry.title.replace(/ /g, '_'))}">${articleEntry.title.replace(/_/g, ' ') || ''}<a></li>\n`;
4
- }
5
- export function makeArticleImageTile(dump, articleEntry) {
6
- return `<a class="item" href="${encodeArticleIdForZimHtmlUrl(articleEntry.title.replace(/ /g, '_'))}">
7
- <figure><img loading="lazy" src="${articleEntry.internalThumbnailUrl}" />
8
- <figcaption>${(articleEntry.title || '').replace(/_/g, ' ')}</figcaption></figure></a>\n`;
9
- }
10
- //# sourceMappingURL=articleListMainPage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"articleListMainPage.js","sourceRoot":"","sources":["../../src/util/articleListMainPage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAA;AAE/D,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,YAA2B;IACzE,OAAO,gBAAgB,4BAA4B,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,CAAA;AACxJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAU,EAAE,YAA2B;IAC1E,OAAO,yBAAyB,4BAA4B,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;+CACtD,YAAY,CAAC,oBAAoB;0BACtD,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,8BAA8B,CAAA;AACrG,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Check if a given article title or id is main page of the target ZIM
3
- */
4
- export declare function isMainPage(articleTitleOrId: string): boolean;
5
- /**
6
- * Check if a given article title or id is a subpage or not
7
- *
8
- * A given is a subpage if subpages are activated on its namespace and it contains a / in its title/id
9
- */
10
- export declare function isSubpage(articleTitleOrId: string): boolean;
11
- /**
12
- * For a given namespace number, get the namespace name
13
- */
14
- export declare function getNamespaceName(namespace: number): string;
15
- /**
16
- * Extract the CSS class to apply on article <body> tag from its headHtml, typically returned by MW API call when fetching article content
17
- */
18
- export declare function extractBodyCssClass(headHtml: string): string;
19
- /**
20
- * Extract the CSS class to apply on article <html> tag from its headHtml, typically returned by MW API call when fetching article content
21
- */
22
- export declare function extractHtmlCssClass(headHtml: string): string;
23
- /**
24
- * Get the special display title for the main page
25
- */
26
- export declare function getMainpageTitle(): Promise<string>;
@@ -1,102 +0,0 @@
1
- import MediaWiki from '../MediaWiki.js';
2
- import Downloader from '../Downloader.js';
3
- import * as domino from 'domino';
4
- /**
5
- * Check if a given article title or id is main page of the target ZIM
6
- */
7
- export function isMainPage(articleTitleOrId) {
8
- return MediaWiki.metaData.mainPage === articleTitleOrId || MediaWiki.metaData.mainPage === articleTitleOrId.replace(/ /g, '_');
9
- }
10
- /**
11
- * Check if a given article title or id is a subpage or not
12
- *
13
- * A given is a subpage if subpages are activated on its namespace and it contains a / in its title/id
14
- */
15
- export function isSubpage(articleTitleOrId) {
16
- if (articleTitleOrId && articleTitleOrId.indexOf('/') >= 0) {
17
- if (articleTitleOrId.indexOf(':') < 0) {
18
- // namespace 0 never allows subpages
19
- return false;
20
- }
21
- const namespace = articleTitleOrId.substring(0, articleTitleOrId.indexOf(':'));
22
- const ns = MediaWiki.namespaces[namespace];
23
- if (ns !== undefined) {
24
- return ns.allowedSubpages;
25
- }
26
- }
27
- return false;
28
- }
29
- /**
30
- * For a given namespace number, get the namespace name
31
- */
32
- export function getNamespaceName(namespace) {
33
- return Object.entries(MediaWiki.namespaces).find(([, data]) => data.num === namespace)?.[0];
34
- }
35
- /**
36
- * Extract the CSS class to apply on article <body> tag from its headHtml, typically returned by MW API call when fetching article content
37
- */
38
- export function extractBodyCssClass(headHtml) {
39
- const document = domino.createDocument(headHtml);
40
- let cssClass = document.body.className;
41
- // drop some known classes which do not makes sense in a ZIM
42
- for (const blacklistedClass of ['mw-editable']) {
43
- cssClass = cssClass.replace(blacklistedClass, '');
44
- }
45
- // drop repetitions of two spaces
46
- return cssClass
47
- .split(' ')
48
- .filter((cssClass) => cssClass)
49
- .join(' ');
50
- }
51
- /**
52
- * Extract the CSS class to apply on article <html> tag from its headHtml, typically returned by MW API call when fetching article content
53
- */
54
- export function extractHtmlCssClass(headHtml) {
55
- const document = domino.createDocument(headHtml);
56
- let cssClass = document.documentElement.className;
57
- // replace some known classes which do not makes sense in a ZIM
58
- for (const [oldClass, newClass] of [
59
- // don't reserve space for elements that don't exist
60
- ['vector-toc-available', 'vector-toc-not-available'],
61
- ['vector-feature-toc-pinned-clientpref-1', 'vector-feature-toc-pinned-clientpref-0 vector-toc-not-available'],
62
- ['vector-feature-appearance-pinned-clientpref-1', 'vector-feature-appearance-pinned-clientpref-0'],
63
- ['vector-feature-page-tools-pinned-enabled', 'vector-feature-page-tools-pinned-disabled'],
64
- ['vector-feature-main-menu-pinned-enabled', 'vector-feature-main-menu-pinned-disabled'],
65
- // if vector2022 night mode is enabled, use the preferred color scheme
66
- ['vector-feature-night-mode-enabled skin-theme-clientpref-day', 'vector-feature-night-mode-enabled skin-theme-clientpref-os'],
67
- ['vector-feature-night-mode-enabled skin-theme-clientpref-night', 'vector-feature-night-mode-enabled skin-theme-clientpref-os'],
68
- ]) {
69
- cssClass = cssClass.replace(oldClass, newClass);
70
- }
71
- // drop repetitions of two spaces
72
- return cssClass
73
- .split(' ')
74
- .filter((cssClass) => cssClass)
75
- .join(' ');
76
- }
77
- /**
78
- * Get the special display title for the main page
79
- */
80
- export async function getMainpageTitle() {
81
- const checkUrl = Downloader.apiUrlDirector.buildQueryURL({
82
- action: 'query',
83
- meta: 'allmessages',
84
- ammessages: 'mainpage-title',
85
- amenableparser: '1',
86
- format: 'json',
87
- formatversion: '2',
88
- });
89
- let data;
90
- try {
91
- data = await Downloader.getJSON(checkUrl);
92
- const message = data.query.allmessages[0];
93
- if (!message || message.missing) {
94
- return '-';
95
- }
96
- return message.content;
97
- }
98
- catch {
99
- return '-';
100
- }
101
- }
102
- //# sourceMappingURL=articles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"articles.js","sourceRoot":"","sources":["../../src/util/articles.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Interface to build URLs based on Downloader desktop URL
3
- */
4
- export default class WikimediaDesktopURLDirector {
5
- baseDomain: string;
6
- constructor(baseDomain: string);
7
- buildArticleURL(articleId: string, articleUrlOpts?: RendererArticleOpts): string;
8
- }
@@ -1,15 +0,0 @@
1
- import urlBuilder from './url.builder.js';
2
- /**
3
- * Interface to build URLs based on Downloader desktop URL
4
- */
5
- export default class WikimediaDesktopURLDirector {
6
- baseDomain;
7
- constructor(baseDomain) {
8
- this.baseDomain = baseDomain;
9
- }
10
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
- buildArticleURL(articleId, articleUrlOpts) {
12
- return urlBuilder.setDomain(this.baseDomain).setPath(encodeURIComponent(articleId)).build();
13
- }
14
- }
15
- //# sourceMappingURL=desktop.director.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"desktop.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/desktop.director.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA2B;IAC9C,UAAU,CAAQ;IAElB,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,6DAA6D;IAC7D,eAAe,CAAC,SAAiB,EAAE,cAAoC;QACrE,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;IAC7F,CAAC;CACF"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Interface to build URLs based on MediaWiki mobile URL
3
- */
4
- export default class WikimediaMobileURLDirector {
5
- baseDomain: string;
6
- constructor(baseDomain: string);
7
- buildArticleURL(articleId: string, articleUrlOpts?: RendererArticleOpts): string;
8
- }
@@ -1,15 +0,0 @@
1
- import urlBuilder from './url.builder.js';
2
- /**
3
- * Interface to build URLs based on MediaWiki mobile URL
4
- */
5
- export default class WikimediaMobileURLDirector {
6
- baseDomain;
7
- constructor(baseDomain) {
8
- this.baseDomain = baseDomain;
9
- }
10
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
- buildArticleURL(articleId, articleUrlOpts) {
12
- return urlBuilder.setDomain(this.baseDomain).setPath(encodeURIComponent(articleId)).build();
13
- }
14
- }
15
- //# sourceMappingURL=mobile.director.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mobile.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/mobile.director.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAC7C,UAAU,CAAQ;IAElB,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,6DAA6D;IAC7D,eAAe,CAAC,SAAiB,EAAE,cAAoC;QACrE,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;IAC7F,CAAC;CACF"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Interface to build URLs based on MediaWiki REST API URL
3
- */
4
- export default class RestApiURLDirector {
5
- baseDomain: string;
6
- constructor(baseDomain: string);
7
- buildArticleURL(articleId: string, articleUrlOpts?: RendererArticleOpts): string;
8
- }
@@ -1,18 +0,0 @@
1
- import urlBuilder from './url.builder.js';
2
- /**
3
- * Interface to build URLs based on MediaWiki REST API URL
4
- */
5
- export default class RestApiURLDirector {
6
- baseDomain;
7
- constructor(baseDomain) {
8
- this.baseDomain = baseDomain;
9
- }
10
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
- buildArticleURL(articleId, articleUrlOpts) {
12
- return urlBuilder
13
- .setDomain(this.baseDomain)
14
- .setPath('v1/page/' + encodeURIComponent(articleId) + '/html')
15
- .build();
16
- }
17
- }
18
- //# sourceMappingURL=rest-api.director.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rest-api.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/rest-api.director.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACrC,UAAU,CAAQ;IAElB,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,6DAA6D;IAC7D,eAAe,CAAC,SAAiB,EAAE,cAAoC;QACrE,OAAO,UAAU;aACd,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC1B,OAAO,CAAC,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;aAC7D,KAAK,EAAE,CAAA;IACZ,CAAC;CACF"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Interface to build URLs based on MediaWiki visual editor URL
3
- */
4
- export default class VisualEditorURLDirector {
5
- baseDomain: string;
6
- constructor(baseDomain: string);
7
- buildArticleURL(articleId: string, articleUrlOpts?: RendererArticleOpts): string;
8
- get validMimeTypes(): string[];
9
- }
@@ -1,18 +0,0 @@
1
- import urlBuilder from './url.builder.js';
2
- /**
3
- * Interface to build URLs based on MediaWiki visual editor URL
4
- */
5
- export default class VisualEditorURLDirector {
6
- baseDomain;
7
- constructor(baseDomain) {
8
- this.baseDomain = baseDomain;
9
- }
10
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
- buildArticleURL(articleId, articleUrlOpts) {
12
- return urlBuilder.setDomain(this.baseDomain).setQueryParams({ page: articleId }, '&').build();
13
- }
14
- get validMimeTypes() {
15
- return ['application/json'];
16
- }
17
- }
18
- //# sourceMappingURL=visual-editor.director.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"visual-editor.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/visual-editor.director.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC1C,UAAU,CAAQ;IAElB,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,6DAA6D;IAC7D,eAAe,CAAC,SAAiB,EAAE,cAAoC;QACrE,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;IAC/F,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC7B,CAAC;CACF"}
@@ -1,8 +0,0 @@
1
- import { Creator } from '@openzim/libzim';
2
- import { Dump } from '../Dump.js';
3
- export declare function downloadFiles(fileStore: RKVS<FileDetail>, zimCreator: Creator, dump: Dump): Promise<void>;
4
- export declare function saveArticles(zimCreator: Creator, dump: Dump): Promise<{
5
- staticFilesList: Set<string>;
6
- jsModuleDependencies: Set<string>;
7
- cssModuleDependencies: Set<string>;
8
- }>;