Skip to content

Commit 61d7768

Browse files
Move static files list preparation into renders (partial impl)
1 parent dbc3116 commit 61d7768

11 files changed

+34
-62
lines changed
File renamed without changes.
File renamed without changes.

Diff for: src/mwoffliner.lib.ts

+4-7
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import {
3737
mkdirPromise,
3838
sanitizeString,
3939
saveStaticFiles,
40-
saveStaticWikimediaMobileFiles,
4140
importPolyfillModules,
4241
extractArticleList,
4342
getTmpDirectory,
@@ -400,11 +399,6 @@ async function execute(argv: any) {
400399
})
401400
zimCreator.addArticle(scraperArticle)
402401

403-
logger.info('Copying Static Wikimedia Mobile Override Files')
404-
await saveStaticWikimediaMobileFiles(config, zimCreator)
405-
logger.info('Copying Static Resource Files')
406-
await saveStaticFiles(config, zimCreator)
407-
408402
logger.info('Finding stylesheets to download')
409403
const stylesheetsToGet = await dump.getRelevantStylesheetUrls(downloader)
410404
logger.log(`Found [${stylesheetsToGet.length}] stylesheets to download`)
@@ -424,12 +418,15 @@ async function execute(argv: any) {
424418

425419
logger.log('Getting articles')
426420
stime = Date.now()
427-
const { jsModuleDependencies, cssModuleDependencies } = await saveArticles(zimCreator, downloader, dump, hasWikimediaMobileApi, forceRender)
421+
const { jsModuleDependencies, cssModuleDependencies, staticFilesList } = await saveArticles(zimCreator, downloader, dump, hasWikimediaMobileApi, forceRender)
428422
logger.log(`Fetching Articles finished in ${(Date.now() - stime) / 1000} seconds`)
429423

430424
logger.log(`Found [${jsModuleDependencies.size}] js module dependencies`)
431425
logger.log(`Found [${cssModuleDependencies.size}] style module dependencies`)
432426

427+
logger.info('Copying Static Resource Files')
428+
await saveStaticFiles(staticFilesList, zimCreator)
429+
433430
const allDependenciesWithType = [
434431
{ type: 'js', moduleList: Array.from(jsModuleDependencies) },
435432
{ type: 'css', moduleList: Array.from(cssModuleDependencies) },

Diff for: src/renderers/abstract.renderer.ts

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export interface RenderSingleOutput {
5656
html: string
5757
mediaDependencies: any
5858
moduleDependencies: any
59+
staticFiles: string[]
5960
subtitles: any
6061
}
6162

Diff for: src/renderers/abstractDesktop.render.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import * as domino from 'domino'
22
import { Renderer } from './abstract.renderer.js'
3+
import { getStaticFiles } from '../util/misc.js'
34
import { config } from '../config.js'
45
import MediaWiki from '../MediaWiki.js'
56

67
import { htmlWikimediaDesktopTemplateCode } from '../Templates.js'
78
import { genCanonicalLink, genHeaderScript, genHeaderCSSLink } from '../util/misc.js'
89

910
export abstract class DesktopRenderer extends Renderer {
11+
public staticFilesListDesktop: string[] = []
1012
constructor() {
1113
super()
14+
this.staticFilesListDesktop = getStaticFiles(config.output.jsResources, config.output.mainPageCssResources.concat(config.output.cssResources))
1215
}
1316

1417
public filterWikimediaDesktopModules(_moduleDependencies) {

Diff for: src/renderers/abstractMobile.render.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import * as domino from 'domino'
22
import { Renderer } from './abstract.renderer.js'
3+
import { getStaticFiles } from '../util/misc.js'
34
import { config } from '../config.js'
45
import MediaWiki from '../MediaWiki.js'
56

67
import { htmlWikimediaMobileTemplateCode } from '../Templates.js'
78
import { genCanonicalLink, genHeaderScript, genHeaderCSSLink } from '../util/misc.js'
89

910
export abstract class MobileRenderer extends Renderer {
11+
public staticFilesListMobile: string[] = []
1012
constructor() {
1113
super()
14+
this.staticFilesListMobile = getStaticFiles(config.output.mwMobileJsResources, config.output.wikimediaMobileCssResources)
1215
}
1316

1417
public filterWikimediaMobileModules(_moduleDependencies) {

Diff for: src/renderers/visual-editor.renderer.ts

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export class VisualEditorRenderer extends DesktopRenderer {
7171
html: finalHTML,
7272
mediaDependencies,
7373
moduleDependencies: moduleDependenciesFiltered,
74+
staticFiles: this.staticFilesListDesktop,
7475
subtitles,
7576
})
7677
return result

Diff for: src/renderers/wikimedia-desktop.renderer.ts

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export class WikimediaDesktopRenderer extends DesktopRenderer {
6969
html: finalHTML,
7070
mediaDependencies,
7171
moduleDependencies: moduleDependenciesFiltered,
72+
staticFiles: this.staticFilesListDesktop,
7273
subtitles,
7374
})
7475
}

Diff for: src/renderers/wikimedia-mobile.renderer.ts

+2-29
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export class WikimediaMobileRenderer extends MobileRenderer {
3333
const mobileHTML = domino.createDocument(data)
3434
const finalHTMLMobile = await this.pipeMobileTransformations(
3535
mobileHTML,
36-
this.convertLazyLoadToImages.bind(this),
36+
this.convertLazyLoadToImages,
3737
this.removeEditContainer,
3838
this.removeHiddenClass,
3939
async (doc) => {
@@ -60,6 +60,7 @@ export class WikimediaMobileRenderer extends MobileRenderer {
6060
html: finalHTMLMobile.documentElement.outerHTML,
6161
mediaDependencies: mediaDependenciesVal,
6262
moduleDependencies: moduleDependenciesFiltered,
63+
staticFiles: this.staticFilesListMobile,
6364
subtitles: subtitlesVal,
6465
})
6566
return result
@@ -109,34 +110,6 @@ export class WikimediaMobileRenderer extends MobileRenderer {
109110
span.parentNode.replaceChild(img, span)
110111
})
111112

112-
doc = this.resizeMobileImages(doc)
113-
114-
return doc
115-
}
116-
117-
private resizeMobileImages(doc: DominoElement) {
118-
const mobileImageWidth = 375
119-
const imageWidthPattern = /(\.jpg\/|\.png\/|\.svg\/|\.gif\/)(\d+)px/i
120-
121-
// Directly filter images hosted on Commons wiki
122-
const imgs: NodeList = doc.querySelectorAll('img[src*="/commons/"]')
123-
124-
imgs.forEach((img: DominoElement) => {
125-
const imgWidth = img.getAttribute('width')
126-
const imgHeight = img.getAttribute('height')
127-
const imgSrc = img.getAttribute('src')
128-
const imageWidthMatchSrc = imgSrc.match(imageWidthPattern)
129-
130-
if (imgWidth && imgWidth > mobileImageWidth && imageWidthMatchSrc) {
131-
const heightScaleFactor = Math.round((imgWidth / imgHeight) * 100) / 100
132-
const newImgSrc = imgSrc.replace(imageWidthMatchSrc[2], mobileImageWidth.toString())
133-
134-
img.setAttribute('src', newImgSrc)
135-
img.setAttribute('width', mobileImageWidth.toString())
136-
img.setAttribute('height', Math.round(mobileImageWidth / heightScaleFactor).toString())
137-
}
138-
})
139-
140113
return doc
141114
}
142115

Diff for: src/util/misc.ts

+12-25
Original file line numberDiff line numberDiff line change
@@ -162,35 +162,22 @@ export function interpolateTranslationString(str: string, parameters: { [key: st
162162
return newString
163163
}
164164

165-
function saveResourceFile(resource: string, type: 'css' | 'js', basePath: string, config: Config, zimCreator: ZimCreator) {
166-
return async () => {
167-
try {
168-
const content = await readFilePromise(pathParser.resolve(__dirname, `../../res/${basePath}${resource}.${type}`))
169-
const article = new ZimArticle({
170-
url: type === 'css' ? cssPath(resource) : jsPath(resource),
171-
data: content,
172-
ns: '-',
173-
})
165+
export async function saveStaticFiles(staticFiles: Set<string>, zimCreator: ZimCreator) {
166+
try {
167+
staticFiles.forEach(async (file) => {
168+
const staticFilesContent = await readFilePromise(pathParser.resolve(__dirname, `../../res/${file}`))
169+
const article = new ZimArticle({ url: file.endsWith('.css') ? cssPath(file) : jsPath(file), data: staticFilesContent, ns: '-' })
174170
zimCreator.addArticle(article)
175-
} catch (error) {
176-
const fileType = type === 'css' ? (basePath.includes('wm_mobile') ? 'style Wikimedia mobile override' : 'style') : 'script'
177-
logger.warn(`Could not create ${fileType} ${resource} file : ${error}`)
178-
}
171+
})
172+
} catch (err) {
173+
logger.error(err)
179174
}
180175
}
181176

182-
export function saveStaticFiles(config: Config, zimCreator: ZimCreator) {
183-
const cssPromises = config.output.cssResources.concat(config.output.mainPageCssResources).map((css) => saveResourceFile(css, 'css', '', config, zimCreator)())
184-
const jsPromises = config.output.jsResources.map((js) => saveResourceFile(js, 'js', '', config, zimCreator)())
185-
return Promise.all([...cssPromises, ...jsPromises])
186-
}
187-
188-
export function saveStaticWikimediaMobileFiles(config: Config, zimCreator: ZimCreator) {
189-
const wikimediaMobileCssPromises = config.output.wikimediaMobileCssResources.map((wikimediaMobileCss) =>
190-
saveResourceFile(wikimediaMobileCss, 'css', 'wm_mobile/', config, zimCreator)(),
191-
)
192-
const wikimediaMobileJsPromises = config.output.mwMobileJsResources.map((wikimediaMobileJs) => saveResourceFile(wikimediaMobileJs, 'js', 'wm_mobile/', config, zimCreator)())
193-
return Promise.all([...wikimediaMobileCssPromises, ...wikimediaMobileJsPromises])
177+
export function getStaticFiles(jsStaticFiles: string[], cssStaticFiles: string[]): string[] {
178+
jsStaticFiles = jsStaticFiles.map((jsFile) => jsFile.concat('.js'))
179+
cssStaticFiles = cssStaticFiles.map((cssFile) => cssFile.concat('.css'))
180+
return jsStaticFiles.concat(cssStaticFiles)
194181
}
195182

196183
export function cssPath(css: string, subDirectory = '') {

Diff for: src/util/saveArticles.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ export function getArticleUrl(downloader: Downloader, dump: Dump, articleId: str
234234
export async function saveArticles(zimCreator: ZimCreator, downloader: Downloader, dump: Dump, hasWikimediaMobileApi: boolean, forceRender = null) {
235235
const jsModuleDependencies = new Set<string>()
236236
const cssModuleDependencies = new Set<string>()
237+
const staticFilesList = new Set<string>()
237238
let jsConfigVars = ''
238239
let prevPercentProgress: string
239240
const { articleDetailXId } = RedisStore
@@ -298,7 +299,7 @@ export async function saveArticles(zimCreator: ZimCreator, downloader: Downloade
298299

299300
rets = await downloader.getArticle(downloader.webp, _moduleDependencies, articleId, articleDetailXId, renderer, articleUrl, dump, articleDetail, isMainPage)
300301

301-
for (const { articleId, displayTitle: articleTitle, html: finalHTML, mediaDependencies, moduleDependencies, subtitles } of rets) {
302+
for (const { articleId, displayTitle: articleTitle, html: finalHTML, mediaDependencies, moduleDependencies, staticFiles, subtitles } of rets) {
302303
if (!finalHTML) {
303304
logger.warn(`No HTML returned for article [${articleId}], skipping`)
304305
continue
@@ -312,6 +313,10 @@ export async function saveArticles(zimCreator: ZimCreator, downloader: Downloade
312313
cssModuleDependencies.add(dep)
313314
}
314315

316+
for (const file of staticFiles) {
317+
staticFilesList.add(file)
318+
}
319+
315320
jsConfigVars = moduleDependencies.jsConfigVars || ''
316321

317322
/*
@@ -393,6 +398,7 @@ export async function saveArticles(zimCreator: ZimCreator, downloader: Downloade
393398
}
394399

395400
return {
401+
staticFilesList,
396402
jsModuleDependencies,
397403
cssModuleDependencies,
398404
}

0 commit comments

Comments
 (0)