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
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import MediaWiki from '../MediaWiki.js';
|
|
2
|
+
import Downloader from '../Downloader.js';
|
|
3
|
+
import * as logger from '../Logger.js';
|
|
4
|
+
import * as domino from 'domino';
|
|
5
|
+
/**
|
|
6
|
+
* Check if a given page title is main page of the target ZIM
|
|
7
|
+
*/
|
|
8
|
+
export function isMainPage(pageTitle) {
|
|
9
|
+
return MediaWiki.metaData.mainPage === pageTitle;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Check if a given page title or id is a subpage or not
|
|
13
|
+
*
|
|
14
|
+
* A given is a subpage if subpages are activated on its namespace and it contains a / in its title/id
|
|
15
|
+
*/
|
|
16
|
+
export function isSubpage(pageTitleOrId) {
|
|
17
|
+
if (pageTitleOrId && pageTitleOrId.indexOf('/') >= 0) {
|
|
18
|
+
if (pageTitleOrId.indexOf(':') < 0) {
|
|
19
|
+
// namespace 0 never allows subpages
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
const namespace = pageTitleOrId.substring(0, pageTitleOrId.indexOf(':'));
|
|
23
|
+
const ns = MediaWiki.namespaces[namespace];
|
|
24
|
+
if (ns !== undefined) {
|
|
25
|
+
return ns.allowedSubpages;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* For a given namespace number, get the namespace name
|
|
32
|
+
*/
|
|
33
|
+
export function getNamespaceName(namespace) {
|
|
34
|
+
return Object.entries(MediaWiki.namespaces).find(([, data]) => data.num === namespace)?.[0];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Extract the JS config variables from its headHtml, typically returned by MW API call when fetching page content
|
|
38
|
+
*/
|
|
39
|
+
export function extractJsConfigVars(headHtml, extraJsConfigVars = {}) {
|
|
40
|
+
const match = headHtml.match(/;RLCONF=({".*?});\s?RLSTATE=/s) || headHtml.match(/{mw\.config\.set\(({".*?})\);mw\.loader\.state\(/s);
|
|
41
|
+
let jsConfigVars = {};
|
|
42
|
+
if (match) {
|
|
43
|
+
try {
|
|
44
|
+
let jsonString = match[1];
|
|
45
|
+
if (jsonString.includes('"wgBreakFrames":!')) {
|
|
46
|
+
jsonString = jsonString.replace(/":\s*!0([,}])/g, '":true$1').replace(/":\s*!1([,}])/g, '":false$1');
|
|
47
|
+
}
|
|
48
|
+
jsConfigVars = JSON.parse(jsonString);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
logger.warn('Unable to parse jsConfigVars', e);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
logger.warn('Unable to get jsConfigVars');
|
|
56
|
+
}
|
|
57
|
+
delete jsConfigVars.wgRequestId;
|
|
58
|
+
delete jsConfigVars.wgTempUserName;
|
|
59
|
+
delete jsConfigVars.wgUserId;
|
|
60
|
+
delete jsConfigVars.wgUserIsTemp;
|
|
61
|
+
delete jsConfigVars.wgUserEditCount;
|
|
62
|
+
delete jsConfigVars.wgUserRegistration;
|
|
63
|
+
delete jsConfigVars.wgUserFirstRegistration;
|
|
64
|
+
if (jsConfigVars.wgAction === 'nosuchaction')
|
|
65
|
+
jsConfigVars.wgAction = 'view';
|
|
66
|
+
return Object.assign(jsConfigVars, extraJsConfigVars, {
|
|
67
|
+
wgBreakFrames: false,
|
|
68
|
+
wgUserName: null,
|
|
69
|
+
wgUserGroups: ['*'],
|
|
70
|
+
wgIsProbablyEditable: false,
|
|
71
|
+
wgRelevantPageIsProbablyEditable: false,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extract the CSS class to apply on page <body> tag from its headHtml, typically returned by MW API call when fetching page content
|
|
76
|
+
*/
|
|
77
|
+
export function extractBodyCssClass(headHtml) {
|
|
78
|
+
const document = domino.createDocument(headHtml);
|
|
79
|
+
let cssClass = document.body.className;
|
|
80
|
+
// replace some known classes which do not makes sense in a ZIM
|
|
81
|
+
for (const [oldClass, newClass] of [
|
|
82
|
+
// fix action class from API output in older MW versions
|
|
83
|
+
['action-nosuchaction', 'action-view'],
|
|
84
|
+
// drop some known classes which do not makes sense in a ZIM
|
|
85
|
+
['mw-editable', ''],
|
|
86
|
+
]) {
|
|
87
|
+
cssClass = cssClass.replace(oldClass, newClass);
|
|
88
|
+
}
|
|
89
|
+
// drop repetitions of two spaces
|
|
90
|
+
return cssClass
|
|
91
|
+
.split(' ')
|
|
92
|
+
.filter((cssClass) => cssClass)
|
|
93
|
+
.join(' ');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Extract the CSS class to apply on page <html> tag from its headHtml, typically returned by MW API call when fetching page content
|
|
97
|
+
*/
|
|
98
|
+
export function extractHtmlCssClass(headHtml) {
|
|
99
|
+
const document = domino.createDocument(headHtml);
|
|
100
|
+
let cssClass = document.documentElement.className;
|
|
101
|
+
// replace some known classes which do not makes sense in a ZIM
|
|
102
|
+
for (const [oldClass, newClass] of [
|
|
103
|
+
// don't reserve space for elements that don't exist
|
|
104
|
+
['vector-toc-available', 'vector-toc-not-available'],
|
|
105
|
+
['vector-feature-toc-pinned-clientpref-1', 'vector-feature-toc-pinned-clientpref-0 vector-toc-not-available'],
|
|
106
|
+
['vector-feature-appearance-pinned-clientpref-1', 'vector-feature-appearance-pinned-clientpref-0'],
|
|
107
|
+
['vector-feature-page-tools-pinned-enabled', 'vector-feature-page-tools-pinned-disabled'],
|
|
108
|
+
['vector-feature-main-menu-pinned-enabled', 'vector-feature-main-menu-pinned-disabled'],
|
|
109
|
+
// if vector2022 night mode is enabled, use the preferred color scheme
|
|
110
|
+
['skin-theme-clientpref-day', 'skin-theme-clientpref-os'],
|
|
111
|
+
['skin-theme-clientpref-night', 'skin-theme-clientpref-os'],
|
|
112
|
+
]) {
|
|
113
|
+
cssClass = cssClass.replace(oldClass, newClass);
|
|
114
|
+
}
|
|
115
|
+
// drop repetitions of two spaces
|
|
116
|
+
return cssClass
|
|
117
|
+
.split(' ')
|
|
118
|
+
.filter((cssClass) => cssClass)
|
|
119
|
+
.join(' ');
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the special display title for the main page
|
|
123
|
+
*/
|
|
124
|
+
export async function getMainpageTitle() {
|
|
125
|
+
const checkUrl = Downloader.apiUrlDirector.buildQueryURL({
|
|
126
|
+
action: 'query',
|
|
127
|
+
meta: 'allmessages',
|
|
128
|
+
ammessages: 'mainpage-title',
|
|
129
|
+
amenableparser: '1',
|
|
130
|
+
format: 'json',
|
|
131
|
+
formatversion: '2',
|
|
132
|
+
});
|
|
133
|
+
let data;
|
|
134
|
+
try {
|
|
135
|
+
data = await Downloader.getJSON(checkUrl);
|
|
136
|
+
const message = data.query.allmessages[0];
|
|
137
|
+
if (!message || message.missing) {
|
|
138
|
+
return '-';
|
|
139
|
+
}
|
|
140
|
+
return message.content;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return '-';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/util/pages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Dump } from '../Dump.js';
|
|
2
|
-
export declare function rewriteUrls(
|
|
2
|
+
export declare function rewriteUrls(pagePath: ZimPath, dump: Dump, linkNodes: DominoElement[]): Promise<{
|
|
3
3
|
mediaDependencies: string[];
|
|
4
4
|
}>;
|
|
5
|
-
export declare function rewriteUrlsOfDoc(parsoidDoc: DominoElement,
|
|
5
|
+
export declare function rewriteUrlsOfDoc(parsoidDoc: DominoElement, pagePath: ZimPath, dump: Dump): Promise<{
|
|
6
6
|
mediaDependencies: string[];
|
|
7
7
|
doc: DominoElement;
|
|
8
8
|
}>;
|
package/lib/util/rewriteUrls.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import { migrateChildren, getMediaBase, getFullUrl, getRelativeFilePath,
|
|
1
|
+
import { migrateChildren, getMediaBase, getFullUrl, getRelativeFilePath, encodePageTitleForZimHtmlUrl } from './misc.js';
|
|
2
2
|
import MediaWiki from '../MediaWiki.js';
|
|
3
3
|
import RedisStore from '../RedisStore.js';
|
|
4
4
|
import DU from '../DOMUtils.js';
|
|
5
5
|
import * as logger from '../Logger.js';
|
|
6
|
-
function
|
|
6
|
+
function rewriteUrlNoContentCheck(pagePath, dump, linkNode, mediaDependencies) {
|
|
7
7
|
const classList = (linkNode.getAttribute('class') || '').split(' ').filter((cssClass) => cssClass);
|
|
8
8
|
const rel = (linkNode.getAttribute('rel') || '').split(' ').filter((rel) => rel);
|
|
9
9
|
let href = linkNode.getAttribute('href') || '';
|
|
10
10
|
let hrefProtocol;
|
|
11
|
+
// Exclude links already written appropriately
|
|
12
|
+
if (classList.includes('mwo-norewrite')) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
11
15
|
// Always keep selflinks
|
|
12
16
|
if (classList.includes('mw-selflink') && !href) {
|
|
13
17
|
return null;
|
|
@@ -107,7 +111,7 @@ function rewriteUrlNoArticleCheck(articleId, dump, linkNode, mediaDependencies)
|
|
|
107
111
|
if (shouldScrape) {
|
|
108
112
|
try {
|
|
109
113
|
const mediaUrl = getFullUrl(href, MediaWiki.baseUrl);
|
|
110
|
-
const newHref = getRelativeFilePath(
|
|
114
|
+
const newHref = getRelativeFilePath(pagePath, getMediaBase(mediaUrl, true));
|
|
111
115
|
linkNode.setAttribute('href', newHref);
|
|
112
116
|
if (mediaDependencies) {
|
|
113
117
|
mediaDependencies.push(mediaUrl);
|
|
@@ -153,7 +157,7 @@ function rewriteUrlNoArticleCheck(articleId, dump, linkNode, mediaDependencies)
|
|
|
153
157
|
const title = MediaWiki.extractPageTitleFromHref(href);
|
|
154
158
|
if (title) {
|
|
155
159
|
const localAnchor = href.lastIndexOf('#') === -1 ? '' : href.substr(href.lastIndexOf('#'));
|
|
156
|
-
linkNode.setAttribute('href',
|
|
160
|
+
linkNode.setAttribute('href', encodePageTitleForZimHtmlUrl(title) + localAnchor);
|
|
157
161
|
return title;
|
|
158
162
|
}
|
|
159
163
|
// Rewrite any urls still remaining
|
|
@@ -161,73 +165,71 @@ function rewriteUrlNoArticleCheck(articleId, dump, linkNode, mediaDependencies)
|
|
|
161
165
|
linkNode.setAttribute('href', getFullUrl(href, MediaWiki.baseUrl));
|
|
162
166
|
return null;
|
|
163
167
|
}
|
|
164
|
-
async function
|
|
168
|
+
async function checkIfPagesMirrored(pageTitles) {
|
|
165
169
|
const mirrored = [];
|
|
166
170
|
const unmirrored = [];
|
|
167
|
-
if (!
|
|
171
|
+
if (!pageTitles.length) {
|
|
168
172
|
return [mirrored, unmirrored];
|
|
169
173
|
}
|
|
170
|
-
const
|
|
171
|
-
for (const
|
|
172
|
-
if (
|
|
173
|
-
mirrored.push(
|
|
174
|
+
const pagesMirrored = await RedisStore.pagesStore.existsMany(pageTitles);
|
|
175
|
+
for (const pageTitle of pageTitles) {
|
|
176
|
+
if (pagesMirrored[pageTitle]) {
|
|
177
|
+
mirrored.push(pageTitle);
|
|
174
178
|
}
|
|
175
179
|
else {
|
|
176
|
-
unmirrored.push(
|
|
180
|
+
unmirrored.push(pageTitle);
|
|
177
181
|
}
|
|
178
182
|
}
|
|
179
183
|
return [mirrored, unmirrored];
|
|
180
184
|
}
|
|
181
|
-
export async function rewriteUrls(
|
|
185
|
+
export async function rewriteUrls(pagePath, dump, linkNodes) {
|
|
182
186
|
const mediaDependencies = [];
|
|
183
187
|
/*
|
|
184
|
-
* key:
|
|
185
|
-
* value: Array of linkNodes linking to
|
|
188
|
+
* key: page title
|
|
189
|
+
* value: Array of linkNodes linking to page
|
|
186
190
|
*/
|
|
187
191
|
const wikilinkMappings = {};
|
|
188
192
|
for (const linkNode of linkNodes) {
|
|
189
|
-
const
|
|
190
|
-
if (
|
|
191
|
-
if (Array.isArray(wikilinkMappings[
|
|
192
|
-
wikilinkMappings[
|
|
193
|
+
const pageLink = rewriteUrlNoContentCheck(pagePath, dump, linkNode, mediaDependencies);
|
|
194
|
+
if (pageLink) {
|
|
195
|
+
if (Array.isArray(wikilinkMappings[pageLink])) {
|
|
196
|
+
wikilinkMappings[pageLink].push(linkNode);
|
|
193
197
|
}
|
|
194
198
|
else {
|
|
195
|
-
wikilinkMappings[
|
|
199
|
+
wikilinkMappings[pageLink] = [linkNode];
|
|
196
200
|
}
|
|
197
201
|
}
|
|
198
202
|
}
|
|
199
|
-
const [, unmirroredTitles] = await
|
|
203
|
+
const [, unmirroredTitles] = await checkIfPagesMirrored(Object.keys(wikilinkMappings).map((l) => l));
|
|
200
204
|
if (unmirroredTitles.length) {
|
|
201
|
-
const
|
|
202
|
-
for (const
|
|
203
|
-
const redirect =
|
|
205
|
+
const pagesRedirected = await RedisStore.redirectsStore.existsMany(unmirroredTitles);
|
|
206
|
+
for (const pageTitle of unmirroredTitles) {
|
|
207
|
+
const redirect = pagesRedirected[pageTitle];
|
|
204
208
|
if (!redirect) {
|
|
205
|
-
wikilinkMappings[
|
|
209
|
+
wikilinkMappings[pageTitle].forEach((linkNode) => {
|
|
206
210
|
migrateChildren(linkNode, linkNode.parentNode, linkNode);
|
|
207
211
|
linkNode.parentNode.removeChild(linkNode);
|
|
208
212
|
});
|
|
209
|
-
delete wikilinkMappings[
|
|
213
|
+
delete wikilinkMappings[pageTitle];
|
|
210
214
|
}
|
|
211
215
|
}
|
|
212
216
|
}
|
|
213
|
-
if (
|
|
214
|
-
const slashesInUrl = articleId.split('/').length - 1;
|
|
215
|
-
const upStr = slashesInUrl ? '../'.repeat(slashesInUrl) : './';
|
|
217
|
+
if (pagePath.includes('/')) {
|
|
216
218
|
Object.values(wikilinkMappings).forEach((linkNodes) => {
|
|
217
219
|
for (const linkNode of linkNodes) {
|
|
218
220
|
const href = linkNode.getAttribute('href');
|
|
219
|
-
linkNode.setAttribute('href',
|
|
221
|
+
linkNode.setAttribute('href', getRelativeFilePath(pagePath, href));
|
|
220
222
|
}
|
|
221
223
|
});
|
|
222
224
|
}
|
|
223
225
|
return { mediaDependencies };
|
|
224
226
|
}
|
|
225
|
-
export async function rewriteUrlsOfDoc(parsoidDoc,
|
|
227
|
+
export async function rewriteUrlsOfDoc(parsoidDoc, pagePath, dump) {
|
|
226
228
|
/* Go through all links */
|
|
227
229
|
const as = parsoidDoc.getElementsByTagName('a');
|
|
228
230
|
const areas = parsoidDoc.getElementsByTagName('area');
|
|
229
231
|
const linkNodes = Array.prototype.slice.call(as).concat(Array.prototype.slice.call(areas));
|
|
230
|
-
const ret = await rewriteUrls(
|
|
232
|
+
const ret = await rewriteUrls(pagePath, dump, linkNodes);
|
|
231
233
|
return {
|
|
232
234
|
...ret,
|
|
233
235
|
doc: parsoidDoc,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewriteUrls.js","sourceRoot":"","sources":["../../src/util/rewriteUrls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAA;AAExH,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,UAAU,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAEtC,SAAS,wBAAwB,CAAC,
|
|
1
|
+
{"version":3,"file":"rewriteUrls.js","sourceRoot":"","sources":["../../src/util/rewriteUrls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Creator } from '@openzim/libzim';
|
|
2
|
+
import { Dump } from '../Dump.js';
|
|
3
|
+
export declare function savePage(zimCreator: Creator, htmlContent: string, zimPath: string, zimTitle: string): Promise<Error>;
|
|
4
|
+
export declare function savePages(zimCreator: Creator, dump: Dump): Promise<{
|
|
5
|
+
staticFilesList: Set<string>;
|
|
6
|
+
jsModuleDependencies: Set<string>;
|
|
7
|
+
cssModuleDependencies: Set<string>;
|
|
8
|
+
}>;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import * as logger from '../Logger.js';
|
|
2
|
+
import Downloader from '../Downloader.js';
|
|
3
|
+
import RedisStore from '../RedisStore.js';
|
|
4
|
+
import { StringItem } from '@openzim/libzim';
|
|
5
|
+
import * as domino from 'domino';
|
|
6
|
+
import Timer from './Timer.js';
|
|
7
|
+
import { config } from '../config.js';
|
|
8
|
+
import { getSizeFromUrl } from './misc.js';
|
|
9
|
+
import urlHelper from './url.helper.js';
|
|
10
|
+
import RenderingContext from '../renderers/rendering.context.js';
|
|
11
|
+
import { zimCreatorMutex } from '../mutex.js';
|
|
12
|
+
import FileManager from './FileManager.js';
|
|
13
|
+
import { truncateZimEntryTitleWords } from './misc.js';
|
|
14
|
+
import { isMainPage } from './pages.js';
|
|
15
|
+
function getPageRenderUrl(pageDetail, dump) {
|
|
16
|
+
const leadSectionId = dump.nodet && !pageDetail.contentmodel && !pageDetail.missing ? config.filters.leadSectionId : '';
|
|
17
|
+
const oldid = dump.opts.stableRevision && pageDetail.stableRevisionId !== undefined ? pageDetail.stableRevisionId : undefined;
|
|
18
|
+
return Downloader.getPageUrl(pageDetail.title, { sectionId: leadSectionId, oldid, langVar: dump.langVar });
|
|
19
|
+
}
|
|
20
|
+
async function getAllPagesToKeep(dump, pagesRenderer) {
|
|
21
|
+
await RedisStore.pagesStore.iterateItems(Downloader.workers, async (pageKeyValuePairs) => {
|
|
22
|
+
for (const pageDetail of Object.values(pageKeyValuePairs)) {
|
|
23
|
+
const pageTitle = pageDetail.title;
|
|
24
|
+
try {
|
|
25
|
+
const mainPage = isMainPage(pageTitle);
|
|
26
|
+
const pageUrl = getPageRenderUrl(pageDetail, dump);
|
|
27
|
+
const rendererOutput = await Downloader.getPage(pageTitle, pagesRenderer, pageUrl, dump, pageDetail);
|
|
28
|
+
await new Promise((resolve) => setTimeout(resolve, Downloader.pageRequestInterval));
|
|
29
|
+
for (const { pageTitle, htmlContent } of rendererOutput.items) {
|
|
30
|
+
if (!htmlContent) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const doc = domino.createDocument(htmlContent);
|
|
34
|
+
if (!mainPage && !(await dump.customProcessor.shouldKeepPage(pageTitle, doc))) {
|
|
35
|
+
RedisStore.pagesStore.delete(pageTitle);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
logger.warn(`Error downloading page [${pageTitle}], skipping`, err);
|
|
41
|
+
RedisStore.pagesStore.delete(pageTitle);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/*
|
|
47
|
+
* Parse fetched page HTML, store files
|
|
48
|
+
* and dependencies and save in Zim
|
|
49
|
+
*/
|
|
50
|
+
export async function savePage(zimCreator, htmlContent, zimPath, zimTitle) {
|
|
51
|
+
try {
|
|
52
|
+
const zimPage = zimTitle
|
|
53
|
+
? new StringItem(zimPath, 'text/html', truncateZimEntryTitleWords(zimTitle), { FRONT_ARTICLE: 1 }, htmlContent)
|
|
54
|
+
: new StringItem(zimPath, 'text/html', '', {}, htmlContent);
|
|
55
|
+
await zimCreatorMutex.runExclusive(() => zimCreator.addItem(zimPage));
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
return err;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function savePageFiles(mediaDependencies, imageDependencies, videoDependencies, subtitles) {
|
|
63
|
+
try {
|
|
64
|
+
const pageFiles = {};
|
|
65
|
+
if (subtitles?.length > 0) {
|
|
66
|
+
subtitles.forEach((s) => {
|
|
67
|
+
pageFiles[s.path] = { url: s.url, kind: 'subtitle' };
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (mediaDependencies && mediaDependencies.length) {
|
|
71
|
+
for (const dep of mediaDependencies) {
|
|
72
|
+
const { mult, width } = getSizeFromUrl(dep.url);
|
|
73
|
+
pageFiles[dep.path] = { url: urlHelper.serializeUrl(dep.url), kind: 'media', mult, width };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (imageDependencies && imageDependencies.length) {
|
|
77
|
+
for (const dep of imageDependencies) {
|
|
78
|
+
const urlSize = getSizeFromUrl(dep.url);
|
|
79
|
+
const width = dep.width || urlSize.width;
|
|
80
|
+
const mult = urlSize.mult;
|
|
81
|
+
pageFiles[dep.path] = { url: urlHelper.serializeUrl(dep.url), kind: 'image', mult, width };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (videoDependencies && videoDependencies.length) {
|
|
85
|
+
for (const dep of videoDependencies) {
|
|
86
|
+
const { mult, width } = getSizeFromUrl(dep.url);
|
|
87
|
+
pageFiles[dep.path] = { url: urlHelper.serializeUrl(dep.url), kind: 'video', mult, width };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
await FileManager.addManyFilesToProcess(pageFiles);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
return err;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/*
|
|
98
|
+
* Fetch Pages content, rewrite and save in ZIM
|
|
99
|
+
*/
|
|
100
|
+
export async function savePages(zimCreator, dump) {
|
|
101
|
+
const jsModuleDependencies = new Set();
|
|
102
|
+
const cssModuleDependencies = new Set();
|
|
103
|
+
let prevPercentProgress;
|
|
104
|
+
const pagesTotal = await RedisStore.pagesStore.len();
|
|
105
|
+
// number of pages allowed to fail is the greater of 5 or 0.001% (1 per 100k) pages
|
|
106
|
+
dump.maxHardFailedPages = Math.max(5, Math.floor(pagesTotal / 100000));
|
|
107
|
+
if (dump.customProcessor?.shouldKeepPage) {
|
|
108
|
+
await getAllPagesToKeep(dump, RenderingContext.pagesRenderer);
|
|
109
|
+
}
|
|
110
|
+
// depending on which renderer we use, we can have up to 2 requests to make to download page details
|
|
111
|
+
// each request we need to make can be retried 10 times. Each retry attempttakes at most requestTimeout + retry interval
|
|
112
|
+
// retry interval is an exponentional value from 1 to 60s
|
|
113
|
+
// we assume rest of processing is "fast" and takes at most 1 minute
|
|
114
|
+
const timeout = 2 * (Downloader.requestTimeout * 10 + (1 + 2 + 4 + 8 + 16 + 32 + 60 * 4) * 1000) + 60000;
|
|
115
|
+
await RedisStore.pagesStore.iterateItems(Downloader.workers, (pageKeyValuePairs, runningWorkers) => {
|
|
116
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
117
|
+
return new Promise(async (resolve, reject) => {
|
|
118
|
+
/*
|
|
119
|
+
* timer to detect freezes
|
|
120
|
+
*/
|
|
121
|
+
let curPage = '';
|
|
122
|
+
const timer = new Timer(() => {
|
|
123
|
+
const errorMessage = `Worker timed out after ${timeout} ms at ${curPage}`;
|
|
124
|
+
logger.error(errorMessage);
|
|
125
|
+
reject(new Error(errorMessage));
|
|
126
|
+
}, timeout);
|
|
127
|
+
logger.debug(`Worker processing batch of page ids [${logger.logifyArray(Object.keys(pageKeyValuePairs))}] - ${runningWorkers} worker(s) running`);
|
|
128
|
+
for (const pageDetail of Object.values(pageKeyValuePairs)) {
|
|
129
|
+
timer.reset();
|
|
130
|
+
curPage = pageDetail.title;
|
|
131
|
+
if (dump.status.pages.success > 0 && (dump.status.pages.success + dump.status.pages.hardFail + dump.status.pages.softFail) % 10 === 0) {
|
|
132
|
+
const percentProgress = (((dump.status.pages.success + dump.status.pages.hardFail + dump.status.pages.softFail) / pagesTotal) * 100).toFixed(1);
|
|
133
|
+
if (percentProgress !== prevPercentProgress) {
|
|
134
|
+
prevPercentProgress = percentProgress;
|
|
135
|
+
logger.info(`Progress downloading pages [${dump.status.pages.success + dump.status.pages.hardFail + dump.status.pages.softFail}/${pagesTotal}] [${percentProgress}%]`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
const pageUrl = getPageRenderUrl(pageDetail, dump);
|
|
140
|
+
const { items, moduleDependencies, mediaDependencies, imageDependencies, videoDependencies, subtitles, needsDownloadErrorStaticFiles } = await Downloader.getPage(pageDetail.title, RenderingContext.pagesRenderer, pageUrl, dump, pageDetail);
|
|
141
|
+
await new Promise((resolve) => setTimeout(resolve, Downloader.pageRequestInterval));
|
|
142
|
+
if (items.length == 0) {
|
|
143
|
+
logger.warn(`No HTML items returned for page [${pageDetail.title}], skipping`);
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (needsDownloadErrorStaticFiles) {
|
|
147
|
+
RenderingContext.pagesRenderer.addDownloadErrorStaticFiles();
|
|
148
|
+
}
|
|
149
|
+
for (const dep of moduleDependencies.jsDependenciesList || []) {
|
|
150
|
+
jsModuleDependencies.add(dep);
|
|
151
|
+
}
|
|
152
|
+
for (const dep of moduleDependencies.styleDependenciesList || []) {
|
|
153
|
+
cssModuleDependencies.add(dep);
|
|
154
|
+
}
|
|
155
|
+
savePageFiles(mediaDependencies, imageDependencies, videoDependencies, subtitles);
|
|
156
|
+
for (const { pageTitle, htmlContent, zimPath, zimTitle } of items) {
|
|
157
|
+
if (!htmlContent) {
|
|
158
|
+
logger.warn(`No HTML content returned for page [${pageTitle}] path [${zimPath}], skipping`);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
savePage(zimCreator, htmlContent, zimPath, zimTitle);
|
|
162
|
+
}
|
|
163
|
+
dump.status.pages.success += 1;
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
logger.error(`Error downloading/rendering page ${curPage}`);
|
|
167
|
+
reject(err);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
timer.clear();
|
|
172
|
+
resolve();
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
logger.info(`Done with downloading a total of [${pagesTotal}] pages`);
|
|
176
|
+
return {
|
|
177
|
+
staticFilesList: RenderingContext.pagesRenderer.getStaticFilesList(),
|
|
178
|
+
jsModuleDependencies,
|
|
179
|
+
cssModuleDependencies,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=savePages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"savePages.js","sourceRoot":"","sources":["../../src/util/savePages.ts"],"names":[],"mappings":"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"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "
|
|
1
|
+
export declare const LIB_VERSION = "2.0.0";
|
package/lib/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const LIB_VERSION = '
|
|
1
|
+
export const LIB_VERSION = '2.0.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/lib/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAA"}
|