X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;ds=sidebyside;f=lib%2Ftemplate-helper.js;h=e48cdb4fc5e59e17e5179b35a0339f357ba657be;hb=858b76483eabfc25b60f7bdf7ef4be97b61b5b41;hp=c983e80acd44329fc6c516ee874198fc2d2e6e58;hpb=826ef55e1f8506012d627294c8225cf8b01a5a69;p=squeep-html-template-helper
diff --git a/lib/template-helper.js b/lib/template-helper.js
index c983e80..e48cdb4 100644
--- a/lib/template-helper.js
+++ b/lib/template-helper.js
@@ -6,6 +6,17 @@
const { lazy } = require('@squeep/lazy-property');
+
+/**
+ * Set up expected fields for how we handle error reporting
+ * and whatnot.
+ * @param {Object} ctx
+ */
+const initContext = (ctx) => {
+ ctx.errors = [];
+ ctx.notifications = [];
+};
+
/**
* Some fields may have values outside normal dates, handle them here.
* @param {Date} date
@@ -89,7 +100,7 @@ const timeElement = (date, options = {}) => {
dateFormat(date, pInf, nInf, otherwise),
'',
].join('');
-}
+};
/**
@@ -107,7 +118,7 @@ const secondsToPeriod = (seconds) => {
result.push(`${r} ${label}${r != 1 ? 's' : ''}`);
}
value = factor ? Math.floor(value / factor) : value;
- }
+ };
nextResult(60, 'second');
nextResult(60, 'minute');
@@ -149,8 +160,8 @@ function htmlHead(pagePathLevel, ctx, options) {
return `\t
\t\t
\t\t
-\t\t
-\t\t
+\t\t
+\t\t
${headElements.map((e) => '\t\t' + e).join('\n')}
\t\t${pageTitle}
\t`;
@@ -221,6 +232,7 @@ ${spacer}` : '';
* @param {Object} ctx
* @param {Object} options
* @param {String[]=} options.logoUrl
+ * @param {String[]=} options.logoAlt
* @param {String[]=} options.pageTitle
* @returns {String}
*/
@@ -228,9 +240,10 @@ function htmlHeader(pagePathLevel, ctx, options) {
const rootPathPfx = '../'.repeat(pagePathLevel);
const {
logoUrl = '',
+ logoAlt = 'logo',
pageTitle = '',
} = options;
- const logoImg = logoUrl ? `` : '';
+ const logoImg = logoUrl ? `` : '';
return `\t\t
\t\t\t${logoImg}${pageTitle}
${htmlNav(ctx, options)}
@@ -327,16 +340,16 @@ ${spacer}`;
* @param {String[]=} options.notificationContent
*/
function htmlMessages(ctx, options) {
- const errorHeading = options && options.errorHeading ? `
+ const errorHeading = options?.errorHeading ? `
\t${options.errorHeading}
` : '';
- const errorContent = options && options.errorContent && options.errorContent.length ? '\n' + options.errorContent.map(((content) => `\t${content}`)).join('\n') : '';
- const notificationHeading = options && options.notificationHeading ? `\n\t${options.notificationHeading}
` : '';
- const notificationContent = options && options.notificationContent && options.notificationContent.length ? '\n' + options.notificationContent.map(((content) => `\t${content}`)).join('\n') : '';
- const errors = ctx && ctx.errors && ctx.errors.length ? `
+ const errorContent = options?.errorContent?.length ? '\n' + options.errorContent.map(((content) => `\t${content}`)).join('\n') : '';
+ const notificationHeading = options?.notificationHeading ? `\n\t${options.notificationHeading}
` : '';
+ const notificationContent = options?.notificationContent?.length ? '\n' + options.notificationContent.map(((content) => `\t${content}`)).join('\n') : '';
+ const errors = ctx?.errors?.length ? `
${errorHeading}${errorContent}
${UL(ctx.errors, 1)}
` : '';
- const notifications = ctx && ctx.notifications && ctx.notifications.length ? `
+ const notifications = ctx?.notifications?.length ? `
${notificationHeading}${notificationContent}
${UL(ctx.notifications, 1)}
` : '';
@@ -356,6 +369,7 @@ ${UL(ctx.notifications, 1)}
* @param {Object} options
* @param {String=} options.pageTitle
* @param {String=} options.logoUrl
+ * @param {String=} options.logoAlt
* @param {Object[]=} options.bodyAttributes
* @param {String[]=} options.headElements
* @param {Object[]=} options.navLinks
@@ -368,16 +382,19 @@ ${UL(ctx.notifications, 1)}
* @returns {String}
*/
function htmlPage(pagePathLevel, ctx, options, main = []) {
- const user = (ctx && ctx.session && ctx.session.authenticatedProfile) || (ctx && ctx.session && ctx.session.authenticatedIdentifier);
+ const user = ctx?.session?.authenticatedProfile || ctx?.session?.authenticatedIdentifier;
if (user) {
if (!options.navLinks) {
options.navLinks = [];
}
- const logoutRedirect = ctx && ctx.url ? `?r=${encodeURIComponent(ctx.url)}` : '';
- const logoutPath = (pagePathLevel > 0) ? `${'../'.repeat(pagePathLevel - 1)}` : 'admin/';
+ const logoutRedirect = ctx?.url ? `?r=${encodeURIComponent(ctx.url)}` : '';
+ const adminPath = (pagePathLevel > 0) ? `${'../'.repeat(pagePathLevel - 1)}` : 'admin/';
options.navLinks.push({
+ text: 'Account',
+ href: `${adminPath}settings`,
+ }, {
text: `Logout (${user})`,
- href: `${logoutPath}logout${logoutRedirect}`,
+ href: `${adminPath}logout${logoutRedirect}`,
});
}
@@ -392,6 +409,7 @@ function htmlPage(pagePathLevel, ctx, options, main = []) {
module.exports = {
+ initContext,
dateOrNot,
dateFormat,
timeElement,