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.
- package/README.md +355 -62
- package/docs/functional_architecture.md +34 -38
- package/extensions/wiktionary_fr.js +18 -17
- package/jest.config.cjs +2 -2
- package/lib/DOMUtils.js +0 -1
- package/lib/DOMUtils.js.map +1 -1
- package/lib/Downloader.d.ts +39 -31
- package/lib/Downloader.js +418 -349
- package/lib/Downloader.js.map +1 -1
- package/lib/Dump.d.ts +24 -10
- package/lib/Dump.js +95 -50
- package/lib/Dump.js.map +1 -1
- package/lib/Gadgets.d.ts +2 -1
- package/lib/Gadgets.js +7 -5
- package/lib/Gadgets.js.map +1 -1
- package/lib/Logger.d.ts +6 -6
- package/lib/Logger.js +33 -33
- package/lib/Logger.js.map +1 -1
- package/lib/MediaWiki.d.ts +14 -31
- package/lib/MediaWiki.js +119 -172
- package/lib/MediaWiki.js.map +1 -1
- package/lib/RedisStore.d.ts +3 -3
- package/lib/RedisStore.js +21 -23
- package/lib/RedisStore.js.map +1 -1
- package/lib/S3.js +1 -1
- package/lib/S3.js.map +1 -1
- package/lib/Templates.d.ts +3 -10
- package/lib/Templates.js +5 -14
- package/lib/Templates.js.map +1 -1
- package/lib/cli.js +7 -6
- package/lib/cli.js.map +1 -1
- package/lib/config.d.ts +10 -16
- package/lib/config.js +33 -55
- package/lib/config.js.map +1 -1
- package/lib/error.manager.d.ts +2 -2
- package/lib/error.manager.js +42 -49
- package/lib/error.manager.js.map +1 -1
- package/lib/i18n.d.ts +2 -0
- package/lib/i18n.js +53 -0
- package/lib/i18n.js.map +1 -0
- package/lib/mutex.d.ts +2 -1
- package/lib/mutex.js +2 -1
- package/lib/mutex.js.map +1 -1
- package/lib/mwoffliner.lib.js +370 -222
- package/lib/mwoffliner.lib.js.map +1 -1
- package/lib/parameterList.d.ts +20 -8
- package/lib/parameterList.js +30 -18
- package/lib/parameterList.js.map +1 -1
- package/lib/renderers/abstract.renderer.d.ts +48 -55
- package/lib/renderers/abstract.renderer.js +377 -98
- package/lib/renderers/abstract.renderer.js.map +1 -1
- package/lib/renderers/action-parse.renderer.d.ts +22 -3
- package/lib/renderers/action-parse.renderer.js +123 -81
- package/lib/renderers/action-parse.renderer.js.map +1 -1
- package/lib/renderers/renderer.builder.js +6 -69
- package/lib/renderers/renderer.builder.js.map +1 -1
- package/lib/renderers/rendering.context.d.ts +2 -3
- package/lib/renderers/rendering.context.js +6 -14
- package/lib/renderers/rendering.context.js.map +1 -1
- package/lib/sanitize-argument.d.ts +7 -4
- package/lib/sanitize-argument.js +99 -41
- package/lib/sanitize-argument.js.map +1 -1
- package/lib/util/FileManager.d.ts +36 -0
- package/lib/util/FileManager.js +246 -0
- package/lib/util/FileManager.js.map +1 -0
- package/lib/util/RedisKvs.js +4 -4
- package/lib/util/RedisKvs.js.map +1 -1
- package/lib/util/RedisQueue.js +1 -1
- package/lib/util/RedisQueue.js.map +1 -1
- package/lib/util/builders/url/action-parse.director.d.ts +2 -2
- package/lib/util/builders/url/action-parse.director.js +7 -7
- package/lib/util/builders/url/action-parse.director.js.map +1 -1
- package/lib/util/builders/url/api.director.d.ts +2 -4
- package/lib/util/builders/url/api.director.js +10 -17
- package/lib/util/builders/url/api.director.js.map +1 -1
- package/lib/util/builders/url/base.director.d.ts +0 -4
- package/lib/util/builders/url/base.director.js +0 -25
- package/lib/util/builders/url/base.director.js.map +1 -1
- package/lib/util/builders/url/basic.director.d.ts +1 -1
- package/lib/util/builders/url/basic.director.js +1 -1
- package/lib/util/builders/url/web.director.d.ts +1 -1
- package/lib/util/builders/url/web.director.js +2 -2
- package/lib/util/builders/url/web.director.js.map +1 -1
- package/lib/util/categories.d.ts +5 -5
- package/lib/util/categories.js +175 -174
- package/lib/util/categories.js.map +1 -1
- package/lib/util/const.d.ts +4 -8
- package/lib/util/const.js +9 -17
- package/lib/util/const.js.map +1 -1
- package/lib/util/customCssJs.d.ts +6 -0
- package/lib/util/customCssJs.js +70 -0
- package/lib/util/customCssJs.js.map +1 -0
- package/lib/util/dump.d.ts +15 -4
- package/lib/util/dump.js +282 -86
- package/lib/util/dump.js.map +1 -1
- package/lib/util/index.d.ts +1 -1
- package/lib/util/index.js +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/metaData.js.map +1 -1
- package/lib/util/misc.d.ts +23 -13
- package/lib/util/misc.js +90 -59
- package/lib/util/misc.js.map +1 -1
- package/lib/util/mw-api.d.ts +7 -5
- package/lib/util/mw-api.js +167 -221
- package/lib/util/mw-api.js.map +1 -1
- package/lib/util/pageListMainPage.d.ts +3 -0
- package/lib/util/pageListMainPage.js +10 -0
- package/lib/util/pageListMainPage.js.map +1 -0
- package/lib/util/pages.d.ts +30 -0
- package/lib/util/pages.js +146 -0
- package/lib/util/pages.js.map +1 -0
- package/lib/util/rewriteUrls.d.ts +2 -2
- package/lib/util/rewriteUrls.js +33 -31
- package/lib/util/rewriteUrls.js.map +1 -1
- package/lib/util/savePages.d.ts +8 -0
- package/lib/util/savePages.js +182 -0
- package/lib/util/savePages.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/offliner-definition.json +178 -90
- package/package.json +50 -49
- package/res/page_list_home.js +20 -0
- package/res/{article_not_found.svg → page_not_found.svg} +1 -1
- package/res/script.js +30 -45
- package/res/style.css +52 -68
- package/res/templates/download_error_placeholder.html +7 -8
- package/res/templates/javaScript.html +19 -0
- package/res/templates/pageFallback.html +9 -7
- package/res/templates/pageVector2022.html +9 -7
- package/res/templates/pageVectorLegacy.html +9 -7
- package/res/templates/{article_list_home.html → page_list_home.html} +1 -2
- package/translation/ar.json +21 -21
- package/translation/bn.json +1 -1
- package/translation/de.json +46 -19
- package/translation/en.json +54 -21
- package/translation/es.json +17 -19
- package/translation/fi.json +23 -3
- package/translation/fr.json +57 -21
- package/translation/he.json +8 -6
- package/translation/ia.json +19 -19
- package/translation/id.json +13 -13
- package/translation/it.json +13 -8
- package/translation/ko.json +55 -3
- package/translation/lb.json +5 -2
- package/translation/mk.json +5 -5
- package/translation/nl.json +57 -22
- package/translation/or.json +2 -2
- package/translation/pt.json +2 -2
- package/translation/qqq.json +55 -22
- package/translation/ru.json +2 -2
- package/translation/sc.json +2 -2
- package/translation/sk.json +62 -0
- package/translation/sl.json +54 -21
- package/translation/sv.json +20 -19
- package/translation/sw.json +45 -2
- package/translation/zh-hans.json +56 -22
- package/translation/zh-hant.json +26 -19
- package/lib/renderers/abstractDesktop.render.d.ts +0 -12
- package/lib/renderers/abstractDesktop.render.js +0 -67
- package/lib/renderers/abstractDesktop.render.js.map +0 -1
- package/lib/renderers/abstractMobile.render.d.ts +0 -12
- package/lib/renderers/abstractMobile.render.js +0 -54
- package/lib/renderers/abstractMobile.render.js.map +0 -1
- package/lib/renderers/rest-api.renderer.d.ts +0 -7
- package/lib/renderers/rest-api.renderer.js +0 -68
- package/lib/renderers/rest-api.renderer.js.map +0 -1
- package/lib/renderers/visual-editor.renderer.d.ts +0 -7
- package/lib/renderers/visual-editor.renderer.js +0 -76
- package/lib/renderers/visual-editor.renderer.js.map +0 -1
- package/lib/renderers/wikimedia-desktop.renderer.d.ts +0 -4
- package/lib/renderers/wikimedia-desktop.renderer.js +0 -7
- package/lib/renderers/wikimedia-desktop.renderer.js.map +0 -1
- package/lib/renderers/wikimedia-mobile.renderer.d.ts +0 -19
- package/lib/renderers/wikimedia-mobile.renderer.js +0 -243
- package/lib/renderers/wikimedia-mobile.renderer.js.map +0 -1
- package/lib/util/articleListMainPage.d.ts +0 -3
- package/lib/util/articleListMainPage.js +0 -10
- package/lib/util/articleListMainPage.js.map +0 -1
- package/lib/util/articles.d.ts +0 -26
- package/lib/util/articles.js +0 -102
- package/lib/util/articles.js.map +0 -1
- package/lib/util/builders/url/desktop.director.d.ts +0 -8
- package/lib/util/builders/url/desktop.director.js +0 -15
- package/lib/util/builders/url/desktop.director.js.map +0 -1
- package/lib/util/builders/url/mobile.director.d.ts +0 -8
- package/lib/util/builders/url/mobile.director.js +0 -15
- package/lib/util/builders/url/mobile.director.js.map +0 -1
- package/lib/util/builders/url/rest-api.director.d.ts +0 -8
- package/lib/util/builders/url/rest-api.director.js +0 -18
- package/lib/util/builders/url/rest-api.director.js.map +0 -1
- package/lib/util/builders/url/visual-editor.director.d.ts +0 -9
- package/lib/util/builders/url/visual-editor.director.js +0 -18
- package/lib/util/builders/url/visual-editor.director.js.map +0 -1
- package/lib/util/saveArticles.d.ts +0 -8
- package/lib/util/saveArticles.js +0 -411
- package/lib/util/saveArticles.js.map +0 -1
- package/res/article_list_home.js +0 -24
- package/res/content.parsoid.css +0 -196
- package/res/inserted_style.css +0 -45
- package/res/templates/categories.html +0 -11
- package/res/templates/lead_section_wrapper.html +0 -6
- package/res/templates/pageWikimediaDesktop.html +0 -24
- package/res/templates/pageWikimediaMobile.html +0 -24
- package/res/templates/section_wrapper.html +0 -5
- package/res/templates/subcategories.html +0 -23
- package/res/templates/subpages.html +0 -17
- package/res/templates/subsection_wrapper.html +0 -5
- package/res/webpHandler.js +0 -165
- package/res/wm_mobile_override_script.js +0 -15
- package/res/wm_mobile_override_style.css +0 -20
- package/translation/br.json +0 -8
- package/translation/dag.json +0 -9
- package/translation/es-formal.json +0 -29
- package/translation/ha.json +0 -10
- package/translation/hi.json +0 -9
- package/translation/ig.json +0 -10
- package/translation/kaa.json +0 -9
- package/translation/nb.json +0 -9
- package/translation/nqo.json +0 -8
- package/translation/pt-br.json +0 -10
- package/translation/ro.json +0 -9
- package/translation/scn.json +0 -8
- package/translation/sq.json +0 -9
- package/translation/te.json +0 -9
- package/translation/tn.json +0 -9
- 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,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"}
|
package/lib/util/articles.d.ts
DELETED
|
@@ -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>;
|
package/lib/util/articles.js
DELETED
|
@@ -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
|
package/lib/util/articles.js.map
DELETED
|
@@ -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,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,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
|
-
}>;
|