@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
50 lines (45 loc) • 1.65 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var nunjucks = require('nunjucks');
var nunjucksDate = require('nunjucks-date');
var sanitizeHtml = require('./utils/sanitizeHtml.js');
const setUpNunjucksFilters = (env) => {
env.addFilter('addRequiredAttributeToAll', addRequiredAttributeToAll);
env.addFilter('json', stringifyJson);
env.addFilter('capitaliseSentence', capitaliseSentence);
// Namespace our own filters
env.addFilter('dpr.findError', findError);
env.addFilter('dpr.spacesToDash', spacesToDash);
env.addFilter('dpr.safe', safe);
nunjucksDate.setDefaultFormat('DD/MM/YYYY');
nunjucksDate.install(env, 'dprDate');
};
const findError = (errs, errToFind) => {
const error = errs?.find(err => err.href.slice(1) === errToFind)?.text;
return error ? { text: error } : null;
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const stringifyJson = (jsonObj) => {
return JSON.stringify(jsonObj, null, 2);
};
const capitaliseSentence = (text) => {
return text.charAt(0).toUpperCase() + text.substring(1).toLowerCase();
};
const addRequiredAttributeToAll = (items) => {
return items.map(i => ({
...i,
attributes: {
required: true,
},
}));
};
const spacesToDash = (text) => {
return text?.replace(/ /g, '-') ?? '';
};
const safe = (text) => {
const sanitized = sanitizeHtml.sanitiseHtml(text);
return new nunjucks.runtime.SafeString(sanitized);
};
exports.default = setUpNunjucksFilters;
exports.setUpNunjucksFilters = setUpNunjucksFilters;
//# sourceMappingURL=setUpNunjucksFilters.js.map