mwoffliner
Version:
MediaWiki ZIM scraper
94 lines (93 loc) • 3.02 kB
TypeScript
import { Dump } from '../Dump.js';
type renderType = 'auto' | 'desktop' | 'mobile' | 'specific';
type renderName = 'VisualEditor' | 'WikimediaDesktop' | 'WikimediaMobile' | 'RestApi';
interface RendererBuilderOptionsBase {
renderType: renderType;
}
interface RendererBuilderOptionsCommon {
renderType: renderType;
renderName?: never;
}
interface RendererBuilderOptionsSpecific extends RendererBuilderOptionsBase {
renderType: 'specific';
renderName: renderName;
}
export type RendererBuilderOptions = RendererBuilderOptionsCommon | RendererBuilderOptionsSpecific;
export interface RenderOpts {
data?: any;
_moduleDependencies: any;
articleId?: string;
articleDetailXId?: RKVS<ArticleDetail>;
articleDetail?: ArticleDetail;
isMainPage?: boolean;
dump: Dump;
}
export interface RenderSingleOutput {
articleId: string;
displayTitle: string;
html: string;
imageDependencies: any;
videoDependencies: any;
mediaDependencies: any;
moduleDependencies: any;
staticFiles: string[];
subtitles: any;
}
export type RenderOutput = RenderSingleOutput[];
export declare abstract class Renderer {
staticFilesListCommon: string[];
constructor();
protected treatVideo(dump: Dump, srcCache: KVS<boolean>, articleId: string, videoEl: DominoElement): Promise<{
imageDependencies: string[];
videoDependencies: string[];
subtitles: string[];
}>;
private adjustVideoElementAttributes;
private chooseBestVideoSource;
private handleVideoPoster;
private updateVideoSrc;
protected treatSubtitle(trackEle: DominoElement, articleId: string): Promise<string>;
private treatImageFrames;
private treatImage;
private shouldKeepImage;
protected treatMedias(parsoidDoc: DominoElement, dump: Dump, articleId: string): Promise<{
doc: any;
imageDependencies: string[];
videoDependencies: string[];
subtitles: string[];
}>;
private isStillLinked;
private shouldKeepNode;
private makeThumbDiv;
processHtml(html: string, dump: Dump, articleId: string, articleDetail: any, _moduleDependencies: any, callback: any): Promise<{
finalHTML: string;
mediaDependencies: {
url: string;
path: string;
}[];
imageDependencies: {
url: string;
path: string;
}[];
videoDependencies: {
url: string;
path: string;
}[];
subtitles: {
url: string;
path: string;
}[];
}>;
private mergeTemplateDoc;
private addNoIndexCommentToElement;
private isSubpage;
private clearLinkAndInputTags;
private clearNodes;
private applyOtherTreatments;
/**
* Add an H1 tag with page title on top of article except main page
*/
protected injectH1TitleToHtml(content: string, articleDetail: any): string;
abstract render(renderOpts: RenderOpts): Promise<any>;
}
export {};