You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-06-15 23:00:36 +02:00
Desktop: Added support for templates (#1647)
* First pass of adding support for templates * remove default value from template prompt * Add template placeholder text * Add mustache templates with datetime support for new notes * Moved template code to utils, added separate prompt for templates * Add templates to menu and allow for keyboad only use * update template prompt for dark theme * update with laurents suggestions, add refresh button * revert template command, remove new note prompt
This commit is contained in:
committed by
Laurent Cozic
parent
e29fb3eb66
commit
cd5d412c69
59
ReactNativeClient/lib/TemplateUtils.js
Normal file
59
ReactNativeClient/lib/TemplateUtils.js
Normal file
@ -0,0 +1,59 @@
|
||||
const fs = require('fs-extra');
|
||||
const { shim } = require('lib/shim.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const Mustache = require('mustache');
|
||||
|
||||
const TemplateUtils = {};
|
||||
|
||||
// new template variables can be added here
|
||||
// If there are too many, this should be moved to a new file
|
||||
const view = {
|
||||
date: time.formatMsToLocal(new Date().getTime(), time.dateFormat()),
|
||||
time: time.formatMsToLocal(new Date().getTime(), time.timeFormat()),
|
||||
datetime: time.formatMsToLocal(new Date().getTime()),
|
||||
custom_datetime: () => { return (text, render) => {
|
||||
return render(time.formatMsToLocal(new Date().getTime(), text));
|
||||
}},
|
||||
}
|
||||
|
||||
// Mustache escapes strings (including /) with the html code by default
|
||||
// This isn't useful for markdown so it's disabled
|
||||
Mustache.escape = (text) => { return text; }
|
||||
|
||||
TemplateUtils.render = function(input) {
|
||||
return Mustache.render(input, view);
|
||||
}
|
||||
|
||||
TemplateUtils.loadTemplates = async function(filePath) {
|
||||
let templates = [];
|
||||
let files = [];
|
||||
|
||||
if (await shim.fsDriver().exists(filePath)) {
|
||||
try {
|
||||
files = await shim.fsDriver().readDirStats(filePath);
|
||||
} catch (error) {
|
||||
let msg = error.message ? error.message : '';
|
||||
msg = 'Could not read template names from ' + filePath + '\n' + msg;
|
||||
error.message = msg;
|
||||
throw error;
|
||||
}
|
||||
|
||||
files.forEach(async (file) => {
|
||||
if (file.path.endsWith('.md')) {
|
||||
try {
|
||||
let fileString = await shim.fsDriver().readFile(filePath + '/' + file.path, 'utf-8');
|
||||
templates.push({label: file.path, value: fileString});
|
||||
} catch (error) {
|
||||
let msg = error.message ? error.message : '';
|
||||
msg = 'Could not load template ' + file.path + '\n' + msg;
|
||||
error.message = msg;
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return templates;
|
||||
}
|
||||
|
||||
module.exports = TemplateUtils;
|
Reference in New Issue
Block a user