mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-18 09:35:20 +02:00
Desktop: Added support for rendered note metadata, in particular the joplin-metadata-print-title tag
This commit is contained in:
parent
d1fc69ffbe
commit
5d84f80ad1
@ -1195,6 +1195,8 @@ packages/lib/services/interop/InteropService_Importer_Raw.js
|
|||||||
packages/lib/services/interop/Module.test.js
|
packages/lib/services/interop/Module.test.js
|
||||||
packages/lib/services/interop/Module.js
|
packages/lib/services/interop/Module.js
|
||||||
packages/lib/services/interop/types.js
|
packages/lib/services/interop/types.js
|
||||||
|
packages/lib/services/interop/utils.test.js
|
||||||
|
packages/lib/services/interop/utils.js
|
||||||
packages/lib/services/joplinCloudUtils.js
|
packages/lib/services/joplinCloudUtils.js
|
||||||
packages/lib/services/joplinServer/personalizedUserContentBaseUrl.js
|
packages/lib/services/joplinServer/personalizedUserContentBaseUrl.js
|
||||||
packages/lib/services/keychain/KeychainService.test.js
|
packages/lib/services/keychain/KeychainService.test.js
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1171,6 +1171,8 @@ packages/lib/services/interop/InteropService_Importer_Raw.js
|
|||||||
packages/lib/services/interop/Module.test.js
|
packages/lib/services/interop/Module.test.js
|
||||||
packages/lib/services/interop/Module.js
|
packages/lib/services/interop/Module.js
|
||||||
packages/lib/services/interop/types.js
|
packages/lib/services/interop/types.js
|
||||||
|
packages/lib/services/interop/utils.test.js
|
||||||
|
packages/lib/services/interop/utils.js
|
||||||
packages/lib/services/joplinCloudUtils.js
|
packages/lib/services/joplinCloudUtils.js
|
||||||
packages/lib/services/joplinServer/personalizedUserContentBaseUrl.js
|
packages/lib/services/joplinServer/personalizedUserContentBaseUrl.js
|
||||||
packages/lib/services/keychain/KeychainService.test.js
|
packages/lib/services/keychain/KeychainService.test.js
|
||||||
|
@ -16,6 +16,7 @@ import { assetsToHeaders } from '@joplin/renderer';
|
|||||||
import getPluginSettingValue from '../plugins/utils/getPluginSettingValue';
|
import getPluginSettingValue from '../plugins/utils/getPluginSettingValue';
|
||||||
import { LinkRenderingType } from '@joplin/renderer/MdToHtml';
|
import { LinkRenderingType } from '@joplin/renderer/MdToHtml';
|
||||||
import Logger from '@joplin/utils/Logger';
|
import Logger from '@joplin/utils/Logger';
|
||||||
|
import { parseRenderedNoteMetadata } from './utils';
|
||||||
|
|
||||||
const logger = Logger.create('InteropService_Exporter_Html');
|
const logger = Logger.create('InteropService_Exporter_Html');
|
||||||
|
|
||||||
@ -128,8 +129,11 @@ export default class InteropService_Exporter_Html extends InteropService_Exporte
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const noteContent = [];
|
const noteContent = [];
|
||||||
if (item.title) noteContent.push(`<div class="exported-note-title">${escapeHtml(item.title)}</div>`);
|
const metadata = parseRenderedNoteMetadata(result.html ? result.html : '');
|
||||||
|
if (!metadata.printTitle) logger.info('Not printing title because joplin-metadata-print-title tag is set to false');
|
||||||
|
if (metadata.printTitle && item.title) noteContent.push(`<div class="exported-note-title">${escapeHtml(item.title)}</div>`);
|
||||||
if (result.html) noteContent.push(result.html);
|
if (result.html) noteContent.push(result.html);
|
||||||
|
|
||||||
const libRootPath = dirname(dirname(__dirname));
|
const libRootPath = dirname(dirname(__dirname));
|
||||||
|
35
packages/lib/services/interop/utils.test.ts
Normal file
35
packages/lib/services/interop/utils.test.ts
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import { RenderedNoteMetadata, parseRenderedNoteMetadata } from './utils';
|
||||||
|
|
||||||
|
describe('interop/utils', () => {
|
||||||
|
|
||||||
|
test.each<[string, RenderedNoteMetadata]>([
|
||||||
|
[
|
||||||
|
'',
|
||||||
|
{ printTitle: true },
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'<!-- joplin-metadata-print-title = false -->',
|
||||||
|
{ printTitle: false },
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'<!-- joplin-metadata-print-title = true -->',
|
||||||
|
{ printTitle: true },
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'<!-- joplin-metadata-print-title = 0 -->',
|
||||||
|
{ printTitle: false },
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'<!-- joplin-metadata-print-title = 1 -->',
|
||||||
|
{ printTitle: true },
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'<!-- joplin-metadata-print-title = 0 -->',
|
||||||
|
{ printTitle: false },
|
||||||
|
],
|
||||||
|
])('should parse metadata from the note HTML body', async (bodyHtml, expected) => {
|
||||||
|
const actual = parseRenderedNoteMetadata(bodyHtml);
|
||||||
|
expect(actual).toEqual(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
25
packages/lib/services/interop/utils.ts
Normal file
25
packages/lib/services/interop/utils.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/* eslint-disable import/prefer-default-export */
|
||||||
|
|
||||||
|
export interface RenderedNoteMetadata {
|
||||||
|
printTitle: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const parseRenderedNoteMetadata = (noteHtml: string) => {
|
||||||
|
const output: RenderedNoteMetadata = {
|
||||||
|
printTitle: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
// <!-- joplin-metadata-print-title = false -->
|
||||||
|
const match = noteHtml.match(/<!--[\s]+joplin-metadata-(.*?)[\s]+=[\s]+(.*?)[\s]+-->/);
|
||||||
|
if (match) {
|
||||||
|
const [, propName, propValue] = match;
|
||||||
|
|
||||||
|
if (propName === 'print-title') {
|
||||||
|
output.printTitle = propValue.toLowerCase() === 'true' || propValue === '1';
|
||||||
|
} else {
|
||||||
|
throw new Error(`Unknown view metadata: ${propName}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
};
|
11
readme/api/references/plugin_rendered_note_metadata.md
Normal file
11
readme/api/references/plugin_rendered_note_metadata.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Rendered note metadata
|
||||||
|
|
||||||
|
Joplin allows the use of certain metadata tags within the rendered (HTML) version of a note.
|
||||||
|
|
||||||
|
At present, the "print-title" metadata tag is the only one supported. By default, the title of a note is displayed at the top when the note is printed or exported. However, this behavior may not always be desired, such as when a plugin needs to produce a document with a specific custom header. In such cases, you can disable the default behavior by including this tag and setting its value to `false`.
|
||||||
|
|
||||||
|
You can add this tag either directly in the Markdown document or through a Markdown-it content script in the rendered note.
|
||||||
|
|
||||||
|
To prevent the note title from being printed, include the following line in the document:
|
||||||
|
|
||||||
|
`<!-- joplin-metadata-print-title = false -->`
|
Loading…
Reference in New Issue
Block a user