mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-18 09:35:20 +02:00
84c3ef144d
* Trying to get TuiEditor to work * Tests with TinyMCE * Fixed build * Improved asset loading * Added support for Joplin source blocks * Added support for Joplin source blocks * Better integration * Make sure noteDidUpdate event is always dispatched at the right time * Minor tweaks * Fixed tests * Add support for checkboxes * Minor refactoring * Added support for file attachments * Add support for fenced code blocks * Fix new line issue on code block * Added support for Fountain scripts * Refactoring * Better handling of saving and loading notes * Fix saving and loading ntoes * Handle multi-note selection and fixed new note creation issue * Fixed newline issue in test * Fixed newline issue in test * Improve saving and loading * Improve saving and loading note * Removed undeeded prop * Fixed issue when new note being saved is incorrectly reloaded * Refactoring and improve saving of note when unmounting component * Fixed TypeScript error * Small changes * Improved further handling of saving and loading notes * Handle provisional notes and fixed various saving and loading bugs * Adding back support for HTML notes * Added support for HTML notes * Better handling of editable nodes * Preserve image HTML tag when the size is set * Handle switching between editor when the note has note finished saving * Handle templates * Handle templates * Handle loading note that is being saved * Handle note being reloaded via sync * Clean up * Clean up and improved logging * Fixed TS error * Fixed a few issues * Fixed test * Logging * Various improvements * Add blockquote support * Moved CWD operation to shim * Removed deleted files * Added support for Joplin commands
69 lines
2.2 KiB
TypeScript
69 lines
2.2 KiB
TypeScript
// Note: this is copied from https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js
|
|
// Markdown-it assigns a special meaning to code returned from highlight() when it starts with PRE or not.
|
|
// If it starts with PRE, the highlited code is returned as-is. If it does not, it is wrapped in <PRE><CODE>
|
|
// This is a bit of a hack and magic behaviour, and it prevents us from returning a DIV from the highlight
|
|
// function.
|
|
// So we modify the code below to allow highlight() to return an object that tells how to render
|
|
// the code.
|
|
|
|
function installRule(markdownIt:any) {
|
|
// @ts-ignore: Keep the function signature as-is despite unusued arguments
|
|
markdownIt.renderer.rules.fence = function(tokens:any[], idx:number, options:any, env:any, slf:any) {
|
|
var token = tokens[idx],
|
|
info = token.info ? markdownIt.utils.unescapeAll(token.info).trim() : '',
|
|
langName = '',
|
|
highlighted, i, tmpAttrs, tmpToken;
|
|
|
|
if (info) {
|
|
langName = info.split(/\s+/g)[0];
|
|
}
|
|
|
|
if (options.highlight) {
|
|
highlighted = options.highlight(token.content, langName) || markdownIt.utils.escapeHtml(token.content);
|
|
} else {
|
|
highlighted = markdownIt.utils.escapeHtml(token.content);
|
|
}
|
|
|
|
const wrapCode = highlighted && highlighted.wrapCode !== false;
|
|
highlighted = typeof highlighted !== 'string' ? highlighted.html : highlighted;
|
|
|
|
if (highlighted.indexOf('<pre') === 0 || !wrapCode) {
|
|
return `${highlighted}\n`;
|
|
}
|
|
|
|
// If language exists, inject class gently, without modifying original token.
|
|
// May be, one day we will add .clone() for token and simplify this part, but
|
|
// now we prefer to keep things local.
|
|
if (info) {
|
|
i = token.attrIndex('class');
|
|
tmpAttrs = token.attrs ? token.attrs.slice() : [];
|
|
|
|
if (i < 0) {
|
|
tmpAttrs.push(['class', options.langPrefix + langName]);
|
|
} else {
|
|
tmpAttrs[i][1] += ` ${options.langPrefix}${langName}`;
|
|
}
|
|
|
|
// Fake token just to render attributes
|
|
tmpToken = {
|
|
attrs: tmpAttrs,
|
|
};
|
|
|
|
return `<pre><code${slf.renderAttrs(tmpToken)}>${
|
|
highlighted
|
|
}</code></pre>\n`;
|
|
}
|
|
|
|
|
|
return `<pre><code${slf.renderAttrs(token)}>${
|
|
highlighted
|
|
}</code></pre>\n`;
|
|
};
|
|
}
|
|
|
|
export default function() {
|
|
return function(md:any) {
|
|
installRule(md);
|
|
};
|
|
}
|