X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Ftemplate-helper.js;h=c983e80acd44329fc6c516ee874198fc2d2e6e58;hb=826ef55e1f8506012d627294c8225cf8b01a5a69;hp=7e1693c857758c127d1063d30804c6c5fab9b2e6;hpb=2a4abfad091846a4fa528b44a31962c5150e6b0a;p=squeep-html-template-helper diff --git a/lib/template-helper.js b/lib/template-helper.js index 7e1693c..c983e80 100644 --- a/lib/template-helper.js +++ b/lib/template-helper.js @@ -4,7 +4,7 @@ * A bunch of shorthand to put together common parts of an HTML page. */ -const { lazy } = require('@squeep/lazy'); +const { lazy } = require('@squeep/lazy-property'); /** * Some fields may have values outside normal dates, handle them here. @@ -29,7 +29,9 @@ const dateOrNot = (date, otherwise) => { /** * Why is rendering a Date as a string this complicated? - * @param {Date|Number} date + * We handle the infinities because pg-promise might provide those in + * lieu of a Date object from timestamp fields. + * @param {Date|Number|String} date * @param {String=} pInf * @param {String=} nInf * @param {String=} otherwise @@ -43,6 +45,7 @@ const dateFormat = (date, pInf = 'Never', nInf = 'Forever', otherwise = '') => { return nInf; default: if (!date + || Number.isNaN(date.valueOf()) || (!(date instanceof Date) && !isDatableType)) { return otherwise; } @@ -62,6 +65,33 @@ lazy(dateFormat, '_dtf', () => { }); +/** + * Wrap a Date in a ', + ].join(''); +} + + /** * Render a duration. * @param {Number} seconds @@ -90,6 +120,17 @@ const secondsToPeriod = (seconds) => { }; +/** + * Return array of strings prefixed with tabs. + * @param {Number} indent + * @param {String[]} list + */ +const indented = (indent, list) => { + const spacer = '\t'.repeat(indent); + return list.map((l) => `${spacer}${l}`); +}; + + /** * Render the preamble for an HTML page. * @param {Number} pagePathLevel number of paths below root this page is @@ -353,6 +394,7 @@ function htmlPage(pagePathLevel, ctx, options, main = []) { module.exports = { dateOrNot, dateFormat, + timeElement, secondsToPeriod, htmlHead, htmlBody, @@ -360,6 +402,7 @@ module.exports = { htmlHeader, htmlFooter, htmlMessages, + indented, renderNavLink, LI, UL,