mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-27 10:32:58 +02:00
139 lines
3.7 KiB
JavaScript
139 lines
3.7 KiB
JavaScript
const fs = require('fs-extra');
|
|
const { fileExtension, basename, dirname } = require('lib/path-utils.js');
|
|
const wrap_ = require('word-wrap');
|
|
const { _, setLocale, languageCode } = require('lib/locale.js');
|
|
|
|
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) {
|
|
let output = [];
|
|
const optionColWidth = getOptionColWidth(options);
|
|
|
|
for (let i = 0; i < options.length; i++) {
|
|
let option = options[i];
|
|
const flag = option[0];
|
|
const indent = INDENT + INDENT + ' '.repeat(optionColWidth + 2);
|
|
|
|
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");
|
|
}
|
|
|
|
function renderCommand(cmd) {
|
|
let output = [];
|
|
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");
|
|
}
|
|
|
|
function getCommands() {
|
|
let output = [];
|
|
fs.readdirSync(__dirname).forEach((path) => {
|
|
if (path.indexOf('command-') !== 0) return;
|
|
const ext = fileExtension(path)
|
|
if (ext != 'js') return;
|
|
|
|
let CommandClass = require('./' + path);
|
|
let cmd = new CommandClass();
|
|
if (!cmd.enabled()) return;
|
|
if (cmd.hidden()) return;
|
|
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() {
|
|
let output = [];
|
|
|
|
output.push('NAME');
|
|
output.push('');
|
|
output.push(wrap('joplin - a note taking and to-do app with synchronisation capabilities'), INDENT);
|
|
|
|
output.push('');
|
|
|
|
output.push('DESCRIPTION');
|
|
output.push('');
|
|
|
|
let description = [];
|
|
description.push('Joplin is a note taking and to-do application, which can handle a large number of notes organised into notebooks.');
|
|
description.push('The notes are searchable, can be copied, tagged and modified with your own text editor.');
|
|
description.push("\n\n");
|
|
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");
|
|
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.).');
|
|
|
|
output.push(wrap(description.join(''), INDENT));
|
|
|
|
return output.join("\n");
|
|
}
|
|
|
|
function getFooter() {
|
|
let output = [];
|
|
|
|
output.push('WEBSITE');
|
|
output.push('');
|
|
output.push(INDENT + 'http://joplin.cozic.net');
|
|
|
|
output.push('');
|
|
|
|
output.push('LICENSE');
|
|
output.push('');
|
|
let filePath = rootDir + '/LICENSE_' + languageCode();
|
|
if (!fs.existsSync(filePath)) filePath = rootDir + '/LICENSE';
|
|
const licenseText = fs.readFileSync(filePath, 'utf8');
|
|
output.push(wrap(licenseText, INDENT));
|
|
|
|
return output.join("\n");
|
|
}
|
|
|
|
async function main() {
|
|
// setLocale('fr_FR');
|
|
|
|
const commands = getCommands();
|
|
let commandBlocks = [];
|
|
|
|
for (let i = 0; i < commands.length; i++) {
|
|
let cmd = commands[i];
|
|
commandBlocks.push(renderCommand(cmd));
|
|
}
|
|
|
|
const headerText = getHeader();
|
|
const commandsText = commandBlocks.join("\n\n");
|
|
const footerText = getFooter();
|
|
|
|
console.info(headerText + "\n\n" + 'USAGE' + "\n\n" + commandsText + "\n\n" + footerText);
|
|
}
|
|
|
|
main().catch((error) => {
|
|
console.error(error);
|
|
}); |