mwoffliner
Version:
MediaWiki ZIM scraper
67 lines • 4.1 kB
JavaScript
import * as domino from 'domino';
import { Renderer } from './abstract.renderer.js';
import { getStaticFiles, genCanonicalLink, genHeaderScript, genHeaderCSSLink, getRelativeFilePath } from '../util/misc.js';
import { config } from '../config.js';
import MediaWiki from '../MediaWiki.js';
import { htmlWikimediaDesktopTemplateCode } from '../Templates.js';
import Downloader from '../Downloader.js';
export class DesktopRenderer extends Renderer {
staticFilesListDesktop = [];
constructor() {
super();
this.staticFilesListDesktop = this.staticFilesListCommon.concat(getStaticFiles(config.output.jsResources, config.output.cssResources));
}
async download(downloadOpts) {
const { articleUrl, articleDetail } = downloadOpts;
const moduleDependencies = this.filterWikimediaDesktopModules(await Downloader.getModuleDependencies(articleDetail.title));
const data = await Downloader.getJSON(articleUrl);
if (data.error) {
throw new Error(data.error);
}
return { data, moduleDependencies, redirects: [] };
}
filterWikimediaDesktopModules(_moduleDependencies) {
const { jsConfigVars, jsDependenciesList, styleDependenciesList } = _moduleDependencies;
const wikimediaDesktopJsModuleDependencies = jsDependenciesList.filter((item) => !item.includes('javascript/mobile'));
const wikimediaDesktopCssModuleDependencies = styleDependenciesList.filter((item) => !item.includes('css/mobile'));
const wikimediaDesktopModuleDependencies = {
jsConfigVars,
jsDependenciesList: wikimediaDesktopJsModuleDependencies,
styleDependenciesList: wikimediaDesktopCssModuleDependencies,
};
return wikimediaDesktopModuleDependencies;
}
templateDesktopArticle(moduleDependencies, articleId) {
const { jsConfigVars, jsDependenciesList, styleDependenciesList } = moduleDependencies;
const cssLinks = config.output.cssResources.reduce((buf, css) => {
return buf + genHeaderCSSLink(config, css, articleId, config.output.dirs.res);
}, '');
let jsScripts = config.output.jsResources.reduce((buf, js) => {
return (buf +
(js === 'script'
? genHeaderScript(config, js, articleId, config.output.dirs.res, `data-article-id="${articleId.replace(/"/g, '\\\\"')}" id="script-js"`)
: genHeaderScript(config, js, articleId, config.output.dirs.res)));
}, '');
if (Downloader.webp) {
jsScripts += genHeaderScript(config, 'webpHandler', articleId, config.output.dirs.webp);
}
const articleConfigVarsList = jsConfigVars === '' ? '' : genHeaderScript(config, 'jsConfigVars', articleId, config.output.dirs.mediawiki);
const articleJsList = jsDependenciesList.length === 0 ? '' : jsDependenciesList.map((oneJsDep) => genHeaderScript(config, oneJsDep, articleId, config.output.dirs.mediawiki)).join('\n');
const articleCssList = styleDependenciesList.length === 0
? ''
: styleDependenciesList.map((oneCssDep) => genHeaderCSSLink(config, oneCssDep, articleId, config.output.dirs.mediawiki)).join('\n');
const htmlTemplateString = htmlWikimediaDesktopTemplateCode()
.replace('__CSS_LINKS__', cssLinks)
.replace('__JS_SCRIPTS__', jsScripts)
.replace('__ARTICLE_CANONICAL_LINK__', genCanonicalLink(config, MediaWiki.webUrl.href, articleId))
.replace('__ARTICLE_CONFIGVARS_LIST__', articleConfigVarsList)
.replace('__ARTICLE_JS_LIST__', articleJsList)
.replace('__ARTICLE_CSS_LIST__', articleCssList)
.replace(/__ASSETS_DIR__/g, config.output.dirs.assets)
.replace(/__RES_DIR__/g, config.output.dirs.res)
.replace(/__MW_DIR__/g, config.output.dirs.mediawiki)
.replace(/__RELATIVE_FILE_PATH__/g, getRelativeFilePath(articleId, ''));
return domino.createDocument(htmlTemplateString);
}
}
//# sourceMappingURL=abstractDesktop.render.js.map