Plato on Github
Report Home
lib/functions.js
Maintainability
74.49
Lines of code
76
Difficulty
26.00
Estimated Errors
0.26
Function weight
By Complexity
By SLOC
"use strict"; import dateformat from 'dateformat'; /** * Pre-defined functions which can be used as template functions. * When these functions are applied to the current page, it uses page + templates + params as its context. * * @param {String} page: current page which these functions will be applied to * @param {Object} templates: compiled jazz templates * @param {Object} params: template parameters (including user-defined parameters and custom functions) */ function funcs(page, templates, params) { /** * Display the current date in specified format. * Default to ISO date when format is not specified. * * @param {String} format: date format (felixge/node-dateformat) * @param {Function} cb: jazz cb(data) callback */ function date(format, cb) { cb(dateformat(new Date(), format || 'isoDateTime')); } /** * Include a partial template in the current page. * An error message will be included when partial does not exist. * * @param {String} partial: partial template file to include * @param {Function} cb: jazz cb(data) callback */ function include(partial, cb) { cb((params.partials && params.partials[partial]) ? params.partials[partial] : '[error] partial ' + partial + ' does not exist'); } /** * Prefix path with one ../ for each parent directory of the page. * This is used to construct static links from various directory level in the website. * * @param {String} path: a URL path in the site navigation * @param {Function} cb: jazz cb(data) callback */ function relative(path, cb) { let value = path; for (let i = 0, ln = page.length; i < ln; i += 1) { if (page.charAt(i) === '/') { value = '../' + value; } } cb(value); } /** * Display current page's sitemap title. * * @param {Function} cb: jazz cb(data) callback */ function title(cb) { cb((params.sitemap && params.sitemap[page]) ? params.sitemap[page].title : '[error] page ' + page + ' does not have any sitemap title'); } return { date: date, include: include, relative: relative, title: title }; } export { funcs as default };