1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-18 09:35:20 +02:00
joplin/CliClient/app/build-doc.js

140 lines
3.6 KiB
JavaScript
Raw Normal View History

const fs = require('fs-extra');
Plugins: Added support for content scripts - For now, supports Markdown-it plugins - Also fixed slow rendering of notes in some cases - Simplified how Markdown-It plugins are created and cleaned MdToHtml code commit 89576de2896c99134f25f2a2db25008514cb1315 Merge: c75aa21f 5292fc14 Author: Laurent Cozic <laurent@cozic.net> Date: Wed Oct 21 00:23:00 2020 +0100 Merge branch 'release-1.3' into plugin_content_scripts commit c75aa21ffdc42764d71dc9deadba7a7ef4233995 Author: Laurent Cozic <laurent@cozic.net> Date: Wed Oct 21 00:19:52 2020 +0100 Fixed tests commit 075187729d11a16d385b651cbf1ebb89f14935e0 Author: Laurent Cozic <laurent@cozic.net> Date: Wed Oct 21 00:11:53 2020 +0100 Fixed tests commit 14696b8c651e7afdaf71269bcdbadf0d58d3ef8a Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 23:27:58 2020 +0100 Fixed slow rendering of note commit 61c09f5bf856481f91b00cfe87ff05596c63d4bc Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 22:35:21 2020 +0100 Clean up commit 9f7ea7d865a990b3a21cc8c59093390d9db61653 Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 20:05:31 2020 +0100 Updated doc commit 98bf3bde8d6663f2f91ff965304b4aac00bdd98b Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 19:56:34 2020 +0100 Finished converting plugins commit fe90d92e01427bd2b38200393713ea28763507a9 Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 17:52:02 2020 +0100 Simplified how Markdown-It plugins are created commit 47c7b864cbb864d5df79849f27625aecf312df4b Author: Laurent Cozic <laurent@cozic.net> Date: Mon Oct 19 16:40:11 2020 +0100 Clean up rules commit d927a238bb635a4be45f9216d776f7d07cb0a584 Author: Laurent Cozic <laurent@cozic.net> Date: Mon Oct 19 14:29:40 2020 +0100 Fixed tests commit 388a56c5dde4c382e3ee0035791137150adaba1b Author: Laurent Cozic <laurent@cozic.net> Date: Mon Oct 19 14:00:47 2020 +0100 Add support for content scripts
2020-10-21 01:23:55 +02:00
const { fileExtension, dirname } = require('lib/path-utils');
const wrap_ = require('word-wrap');
const { languageCode } = require('lib/locale');
2017-07-28 00:59:34 +02:00
const rootDir = dirname(dirname(__dirname));
const MAX_WIDTH = 78;
const INDENT = ' ';
function wrap(text, indent) {
return wrap_(text, {
width: MAX_WIDTH - indent.length,
indent: indent,
});
}
function renderOptions(options) {
const output = [];
2017-07-28 00:59:34 +02:00
const optionColWidth = getOptionColWidth(options);
for (let i = 0; i < options.length; i++) {
const option = options[i];
2017-07-28 00:59:34 +02:00
const flag = option[0];
const indent = INDENT + INDENT + ' '.repeat(optionColWidth + 2);
2017-07-28 00:59:34 +02:00
let r = wrap(option[1], indent);
r = r.substr(flag.length + (INDENT + INDENT).length);
r = INDENT + INDENT + flag + r;
output.push(r);
}
return output.join('\n');
2017-07-28 00:59:34 +02:00
}
function renderCommand(cmd) {
const output = [];
2017-07-28 00:59:34 +02:00
output.push(INDENT + cmd.usage());
output.push('');
output.push(wrap(cmd.description(), INDENT + INDENT));
const optionString = renderOptions(cmd.options());
if (optionString) {
output.push('');
output.push(optionString);
}
return output.join('\n');
2017-07-28 00:59:34 +02:00
}
function getCommands() {
const output = [];
fs.readdirSync(__dirname).forEach(path => {
2017-07-28 00:59:34 +02:00
if (path.indexOf('command-') !== 0) return;
const ext = fileExtension(path);
2017-07-28 00:59:34 +02:00
if (ext != 'js') return;
const CommandClass = require(`./${path}`);
const cmd = new CommandClass();
2017-07-28 00:59:34 +02:00
if (!cmd.enabled()) return;
2017-07-28 19:57:01 +02:00
if (cmd.hidden()) return;
2017-07-28 00:59:34 +02:00
output.push(cmd);
});
return output;
}
function getOptionColWidth(options) {
let output = 0;
for (let j = 0; j < options.length; j++) {
const option = options[j];
if (option[0].length > output) output = option[0].length;
}
return output;
}
function getHeader() {
const output = [];
2017-07-28 00:59:34 +02:00
2017-08-01 20:53:50 +02:00
output.push('NAME');
2017-07-28 00:59:34 +02:00
output.push('');
2017-10-30 02:37:34 +02:00
output.push(wrap('joplin - a note taking and to-do app with synchronisation capabilities'), INDENT);
2017-07-28 00:59:34 +02:00
output.push('');
2017-08-01 20:53:50 +02:00
output.push('DESCRIPTION');
2017-07-28 00:59:34 +02:00
output.push('');
const description = [];
2017-10-30 02:37:34 +02:00
description.push('Joplin is a note taking and to-do application, which can handle a large number of notes organised into notebooks.');
2017-08-01 20:53:50 +02:00
description.push('The notes are searchable, can be copied, tagged and modified with your own text editor.');
description.push('\n\n');
2017-08-01 20:53:50 +02:00
description.push('The notes can be synchronised with various target including the file system (for example with a network directory) or with Microsoft OneDrive.');
description.push('\n\n');
2017-08-01 20:53:50 +02:00
description.push('Notes exported from Evenotes via .enex files can be imported into Joplin, including the formatted content, resources (images, attachments, etc.) and complete metadata (geolocation, updated time, created time, etc.).');
2017-07-28 00:59:34 +02:00
output.push(wrap(description.join(''), INDENT));
return output.join('\n');
2017-07-28 00:59:34 +02:00
}
function getFooter() {
const output = [];
2017-07-28 00:59:34 +02:00
2017-08-01 20:53:50 +02:00
output.push('WEBSITE');
2017-07-28 00:59:34 +02:00
output.push('');
2019-09-19 23:51:18 +02:00
output.push(`${INDENT}https://joplinapp.org`);
2017-07-28 00:59:34 +02:00
output.push('');
2017-08-01 20:53:50 +02:00
output.push('LICENSE');
2017-07-28 00:59:34 +02:00
output.push('');
2019-09-19 23:51:18 +02:00
let filePath = `${rootDir}/LICENSE_${languageCode()}`;
if (!fs.existsSync(filePath)) filePath = `${rootDir}/LICENSE`;
2017-07-28 00:59:34 +02:00
const licenseText = fs.readFileSync(filePath, 'utf8');
output.push(wrap(licenseText, INDENT));
return output.join('\n');
2017-07-28 00:59:34 +02:00
}
async function main() {
// setLocale('fr_FR');
const commands = getCommands();
const commandBlocks = [];
2017-07-28 00:59:34 +02:00
for (let i = 0; i < commands.length; i++) {
const cmd = commands[i];
2017-07-28 00:59:34 +02:00
commandBlocks.push(renderCommand(cmd));
}
const headerText = getHeader();
const commandsText = commandBlocks.join('\n\n');
2017-07-28 00:59:34 +02:00
const footerText = getFooter();
2019-09-19 23:51:18 +02:00
console.info(`${headerText}\n\n` + 'USAGE' + `\n\n${commandsText}\n\n${footerText}`);
2017-07-28 00:59:34 +02:00
}
main().catch(error => {
2017-07-28 00:59:34 +02:00
console.error(error);
});