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
144 lines
2.7 KiB
JavaScript
144 lines
2.7 KiB
JavaScript
const fountain = require('../../vendor/fountain.min.js');
|
|
|
|
const fountainCss = `
|
|
.fountain {
|
|
font-family: monospace;
|
|
line-height: 107%;
|
|
max-width: 1000px;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
}
|
|
|
|
.fountain .title-page,
|
|
.fountain .page {
|
|
box-shadow: 0 0 5px rgba(0,0,0,0.1);
|
|
border: 1px solid #d2d2d2;
|
|
padding: 10%;
|
|
margin-bottom: 2em;
|
|
}
|
|
|
|
.fountain h1,
|
|
.fountain h2,
|
|
.fountain h3,
|
|
.fountain h4,
|
|
.fountain p {
|
|
font-weight: normal;
|
|
line-height: 107%;
|
|
margin: 1em 0;
|
|
border: none;
|
|
font-size: 1em;
|
|
}
|
|
|
|
.fountain .bold {
|
|
font-weight: bold;
|
|
}
|
|
|
|
.fountain .underline {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.fountain .centered {
|
|
text-align: center;
|
|
}
|
|
|
|
.fountain h2 {
|
|
text-align: right;
|
|
}
|
|
|
|
.fountain .dialogue p.parenthetical {
|
|
margin-left: 11%;
|
|
}
|
|
|
|
.fountain .title-page .credit,
|
|
.fountain .title-page .authors,
|
|
.fountain .title-page .source {
|
|
text-align: center;
|
|
}
|
|
|
|
.fountain .title-page h1 {
|
|
margin-bottom: 1.5em;
|
|
text-align: center;
|
|
}
|
|
|
|
.fountain .title-page .source {
|
|
margin-top: 1.5em;
|
|
}
|
|
|
|
.fountain .title-page .notes {
|
|
text-align: right;
|
|
margin: 3em 0;
|
|
}
|
|
|
|
.fountain .title-page h1 {
|
|
margin-bottom: 1.5em;
|
|
text-align: center;
|
|
}
|
|
|
|
.fountain .dialogue {
|
|
margin-left: 3em;
|
|
margin-right: 3em;
|
|
}
|
|
|
|
.fountain .dialogue p,
|
|
.fountain .dialogue h1,
|
|
.fountain .dialogue h2,
|
|
.fountain .dialogue h3,
|
|
.fountain .dialogue h4 {
|
|
margin: 0;
|
|
}
|
|
|
|
.fountain .dialogue h1,
|
|
.fountain .dialogue h2,
|
|
.fountain .dialogue h3,
|
|
.fountain .dialogue h4 {
|
|
text-align: center;
|
|
}
|
|
`;
|
|
|
|
function renderFountainScript(markdownIt, content) {
|
|
const result = fountain.parse(content);
|
|
|
|
return `
|
|
<div class="fountain joplin-editable">
|
|
<pre class="joplin-source" data-joplin-source-open="\`\`\`fountain " data-joplin-source-close=" \`\`\` ">${markdownIt.utils.escapeHtml(content)}</pre>
|
|
<div class="title-page">
|
|
${result.html.title_page}
|
|
</div>
|
|
<div class="page">
|
|
${result.html.script}
|
|
</div>
|
|
</div>
|
|
`;
|
|
}
|
|
|
|
function addContextAssets(context) {
|
|
if ('fountain' in context.pluginAssets) return;
|
|
|
|
context.pluginAssets['fountain'] = [
|
|
{
|
|
inline: true,
|
|
text: fountainCss,
|
|
mime: 'text/css',
|
|
},
|
|
];
|
|
}
|
|
|
|
function installRule(markdownIt, mdOptions, ruleOptions, context) {
|
|
const defaultRender = markdownIt.renderer.rules.fence || function(tokens, idx, options, env, self) {
|
|
return self.renderToken(tokens, idx, options);
|
|
};
|
|
|
|
markdownIt.renderer.rules.fence = function(tokens, idx, options, env, self) {
|
|
const token = tokens[idx];
|
|
if (token.info !== 'fountain') return defaultRender(tokens, idx, options, env, self);
|
|
addContextAssets(context);
|
|
return renderFountainScript(markdownIt, token.content);
|
|
};
|
|
}
|
|
|
|
module.exports = function(context, ruleOptions) {
|
|
return function(md, mdOptions) {
|
|
installRule(md, mdOptions, ruleOptions, context);
|
|
};
|
|
};
|