1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-30 10:36:35 +02:00
joplin/packages/renderer
2024-11-10 12:04:28 +00:00
..
assets Chore: Update KaTeX asset files (#11172) 2024-10-11 22:08:07 +01:00
lib All: Use Lerna to manage monorepo 2020-11-05 16:58:23 +00:00
MdToHtml Desktop, Mobile: Fixed vertical alignment of checkboxes 2024-11-10 12:04:28 +00:00
tests Tools: Cleaned up tests and splitted sync tests into smaller parts 2020-12-01 18:05:24 +00:00
Tools All: Use Lerna to manage monorepo 2020-11-05 16:58:23 +00:00
vendor All: Use Lerna to manage monorepo 2020-11-05 16:58:23 +00:00
.gitignore All: Use Lerna to manage monorepo 2020-11-05 16:58:23 +00:00
assetsToHeaders.ts Chore: Refactor renderer package: Limit dependency on @joplin/lib and improve type safety (#9701) 2024-01-18 11:20:10 +00:00
defaultNoteStyle.js Desktop: Better handling of bold text to simplify customisation (#5732) 2021-12-28 09:57:34 +00:00
defaultResourceModel.ts Chore: Refactor renderer package: Limit dependency on @joplin/lib and improve type safety (#9701) 2024-01-18 11:20:10 +00:00
headerAnchor.ts Tools: Implement @typescript-eslint/no-explicit-any rule 2024-04-05 12:16:49 +01:00
highlight.ts Chore: Optimize highlight.js package size 2022-05-26 16:46:56 +01:00
HtmlToHtml.test.ts Desktop: Fixed an issue that could cause certain notes not to render when they contain an empty STYLE tag 2024-05-06 11:30:04 +01:00
HtmlToHtml.ts Desktop: Fix images fail to render in the preview pane for HTML notes (#10806) 2024-08-02 14:47:43 +01:00
htmlUtils.test.ts Desktop: Fixes #10061: Fix paste adds newlines in the Rich Text Editor when certain plugins are enabled (#10635) 2024-06-19 10:54:34 +01:00
htmlUtils.ts Desktop: Fix images fail to render in the preview pane for HTML notes (#10806) 2024-08-02 14:47:43 +01:00
index.ts Chore: Refactor renderer package: Limit dependency on @joplin/lib and improve type safety (#9701) 2024-01-18 11:20:10 +00:00
InMemoryCache.ts Tools: Implement @typescript-eslint/no-explicit-any rule 2024-04-05 12:16:49 +01:00
jest.config.js Chore: Renderer: Refactor and test long-press and click handlers (#7774) 2023-02-17 13:13:28 +00:00
MarkupToHtml.ts Tools: Implement @typescript-eslint/no-explicit-any rule 2024-04-05 12:16:49 +01:00
MdToHtml.ts Desktop: Fixes #11020: Fix clicking on most non-media resource links opens them inline (#11022) 2024-09-11 16:49:35 +01:00
noteStyle.ts Desktop: Fixes #10679: Fix incorrect text rendering on MacOS by changing the default font to Avenir Next (#10686) 2024-07-05 19:58:09 +02:00
package.json Update dependency highlight.js to v11.10.0 (#11343) 2024-11-08 15:31:34 +00:00
publish.sh Chore: Rename instances of yarn run to just yarn 2024-01-26 20:19:28 +00:00
README.md Server: Add support for sharing notes via a link 2021-01-29 18:45:11 +00:00
stringUtils.js Tools: Implement "prefer-object-spread" eslint rule 2023-06-01 12:02:36 +01:00
tsconfig.json Chore: Tests: Fix vscode doesn't recognize Jest types in some test files (#9337) 2023-11-17 16:04:36 +00:00
types.ts Windows: Fix PDF, video, and audio rendering (#10881) 2024-08-17 12:22:03 +01:00
urlUtils.js All: Use Lerna to manage monorepo 2020-11-05 16:58:23 +00:00
utils.ts Windows: Fix PDF, video, and audio rendering (#10881) 2024-08-17 12:22:03 +01:00

Joplin Renderer

This is the renderer used by Joplin to render notes in Markdown or HTML format.

Installation

npm i -s joplin-renderer

Certain plugins require additional assets like CSS, fonts, etc. These assets are in the /assets directory and should be copied to wherever the application can find them at runtime.

Usage

const { MarkupToHtml } = require('joplin-renderer');

const options = {};

// The notes are rendered using the provided theme. The supported theme properties are in `defaultNoteStyle.js`
// and this is what is used if no theme is provided. A `theme` object can be provided to override default theme
// properties.
const theme = {};

const markdown = "Testing `MarkupToHtml` renderer";

const markupToHtml = new MarkupToHtml(options);
const result = await markupToHtml.render(MarkupToHtml.MARKUP_LANGUAGE_MARKDOWN, markdown, theme, options);

console.info('HTML:', result.html);
console.info('Plugin assets:', result.pluginAssets);

When calling render(), an object with the following properties is returned:

  • html: The rendered HTML code
  • pluginAssets: The assets required by the plugins

The assets need to be loaded by the calling application. For example this is how they are loaded in the Joplin desktop application:

function loadPluginAssets(assets) {
	for (let i = 0; i < assets.length; i++) {
		const asset = assets[i];

		if (asset.mime === 'text/css') {
			const link = document.createElement('link');
			link.rel = 'stylesheet';
			link.href = 'pluginAssets/' + asset.name;
			document.getElementById('joplin-container-styleContainer').appendChild(link);
		}
	}
}

Development

Updating a markdown-it plugin

Whenever updating a Markdown-it plugin, such as Katex or Mermaid, make sure to run npm run buildAssets, which will compile the CSS and JS for use in the Joplin applications.

Adding asset files

A plugin (or rule) can have any number of assets, such as CSS or font files, associated with it. To add an asset to a plugin, follow these steps:

  • Add the file under /assets/PLUGIN_NAME/your-asset-file.css
  • Register this file within the plugin using context.pluginAssets[PLUGIN_NAME] = [{ name: 'your-asset-file.css' }]

See katex.js for an example of how this is done.

Adding inline CSS

A plugin can ask for some CSS to be included inline in the rendered HTML. This is convenient as it means no extra file needs to be packaged. Use this syntax to do this:

context.pluginAssets[PLUGIN_NAME] = [
	{
		inline: true,
		text: ".my-css { background-color: 'green' }",
		mime: 'text/css',
	},
];