1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-09 08:45:55 +02:00
joplin/packages/renderer/types.ts

96 lines
2.8 KiB
TypeScript

import { MarkupLanguage } from './MarkupToHtml';
import { Options as NoteStyleOptions } from './noteStyle';
export type ItemIdToUrlHandler = (resource: any)=> string;
interface ResourceEntity {
id: string;
title?: string;
mime?: string;
file_extension?: string;
}
export interface FsDriver {
writeFile: (path: string, content: string, encoding: string)=> Promise<void>;
exists: (path: string)=> Promise<boolean>;
cacheCssToFile: (cssStrings: string[])=> Promise<any>;
}
export interface RenderOptions {
contentMaxWidth?: number;
bodyOnly?: boolean;
splitted?: boolean;
enableLongPress?: boolean;
postMessageSyntax?: string;
externalAssetsOnly?: boolean;
highlightedKeywords?: string[];
codeTheme?: string;
theme?: any;
plugins?: Record<string, any>;
audioPlayerEnabled?: boolean;
videoPlayerEnabled?: boolean;
pdfViewerEnabled?: boolean;
codeHighlightCacheKey?: string;
plainResourceRendering?: boolean;
mapsToLine?: boolean;
useCustomPdfViewer?: boolean;
noteId?: string;
vendorDir?: string;
itemIdToUrl?: ItemIdToUrlHandler;
allowedFilePrefixes?: string[];
settingValue?: (pluginId: string, key: string)=> any;
resources?: Record<string, ResourceEntity>;
// HtmlToHtml only
whiteBackgroundNoteRendering?: boolean;
}
export interface RenderResultPluginAsset {
name: string;
mime: string;
path: string;
// For built-in Mardown-it plugins, the asset path is relative (and can be
// found inside the @joplin/renderer package), while for external plugins
// (content scripts), the path is absolute. We use this property to tell if
// it's relative or absolute, as that will inform how it's loaded in various
// places.
pathIsAbsolute: boolean;
}
export interface RenderResult {
html: string;
pluginAssets: RenderResultPluginAsset[];
cssStrings: string[];
}
export interface MarkupRenderer {
render(markup: string, theme: any, options: RenderOptions): Promise<RenderResult>;
clearCache(): void;
allAssets(theme: any, noteStyleOptions: NoteStyleOptions|null): Promise<RenderResultPluginAsset[]>;
}
interface StripMarkupOptions {
collapseWhiteSpaces: boolean;
}
export interface MarkupToHtmlConverter {
render(markupLanguage: MarkupLanguage, markup: string, theme: any, options: any): Promise<RenderResult>;
clearCache(markupLanguage: MarkupLanguage): void;
stripMarkup(markupLanguage: MarkupLanguage, markup: string, options: StripMarkupOptions): string;
allAssets(markupLanguage: MarkupLanguage, theme: any, noteStyleOptions: NoteStyleOptions|null): Promise<RenderResultPluginAsset[]>;
}
export interface OptionsResourceModel {
isResourceUrl: (url: string)=> boolean;
urlToId: (url: string)=> string;
filename: (resource: ResourceEntity, encryptedBlob?: boolean)=> string;
isSupportedImageMimeType: (type: string)=> boolean;
fullPath?: (resource: ResourceEntity, encryptedBlob?: boolean)=> string;
}