1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-18 09:35:20 +02:00
joplin/ReactNativeClient/lib/joplin-renderer
Laurent Cozic b7f5f848f2 All: Refactored themes to allow using the same ones in both desktop and mobile version
Will also allow using them when exporting HTML or PDF from CLI.
2020-06-10 22:08:59 +01:00
..
assets Desktop, Mobile: Fixes #2638: Improved Mermaid rendering on small viewports 2020-03-04 01:55:48 +00:00
MdToHtml All: Refactored themes to allow using the same ones in both desktop and mobile version 2020-06-10 22:08:59 +01:00
tests Desktop: WYSIWYG: Preserve HTML code in Markdown when editing from wysiwyg editor 2020-04-10 17:12:41 +00:00
Tools Desktop, Mobile: Fixes #2477: Add new Katex fonts to improve rendering (#2478) 2020-02-11 22:53:12 +00:00
vendor
.gitignore
assetsToHeaders.js Tools: Enforce and apply eslint rules prefer-const and no-var 2020-03-13 23:46:14 +00:00
defaultNoteStyle.js All: Refactored themes to allow using the same ones in both desktop and mobile version 2020-06-10 22:08:59 +01:00
HtmlToHtml.js Revert "Tools: Added eslint rule arrow-parens" 2020-05-21 09:14:33 +01:00
htmlUtils.js All: Security: Fixes #3143: Filter SVG element event attributes to prevent XSS vulnerability 2020-05-10 16:51:15 +01:00
index.js Desktop: WYSIWYG: Getting links to work 2020-03-27 18:26:52 +00:00
MarkupToHtml.js Desktop: Added support for checkboxes and fixed various issues with WYSIWYG editor 2020-03-23 00:47:25 +00:00
MdToHtml.js Desktop: Fixes #3267: Fixed issue with invalid image paths when config path contains spaces 2020-05-25 09:52:10 +01:00
noteStyle.js All: Refactored themes to allow using the same ones in both desktop and mobile version 2020-06-10 22:08:59 +01:00
package-lock.json
package.json All: Fixes #2667: Fixed sanitize function so that it does not break HTML 2020-03-06 00:54:21 +00:00
pathUtils.js Tools: Enforce and apply eslint rules prefer-const and no-var 2020-03-13 23:46:14 +00:00
publish.sh
README.md
stringUtils.js Revert "Tools: Added eslint rule arrow-parens" 2020-05-21 09:14:33 +01:00
urlUtils.js
utils.js Add support for editable resources 2020-05-30 13:25:05 +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

### 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',
	},
];