diff --git a/cypress/e2e/plugins/0-mock-plugin-tests/single-plugin-test.cypress.js b/cypress/e2e/plugins/0-mock-plugin-tests/single-plugin-test.cypress.js index 1ace81b4be..66e714b941 100644 --- a/cypress/e2e/plugins/0-mock-plugin-tests/single-plugin-test.cypress.js +++ b/cypress/e2e/plugins/0-mock-plugin-tests/single-plugin-test.cypress.js @@ -18,7 +18,7 @@ const pluginFooViewMarkup = ` {% block content %} {% include "foo.njk" %}
{{ 'abc' | foo__strong }}
-
{{ fooEmphasize('def') }}
+
{{ foo.styles.emphasize('def') }}
{{ fooField('pass', value='ghi') }}
{% endblock %} diff --git a/cypress/fixtures/plugins/plugin-foo/functions.js b/cypress/fixtures/plugins/plugin-foo/functions.js index 1ba0031835..92f3ec6cd8 100644 --- a/cypress/fixtures/plugins/plugin-foo/functions.js +++ b/cypress/fixtures/plugins/plugin-foo/functions.js @@ -1,2 +1,2 @@ const { addFunction } = require('govuk-prototype-kit').views -addFunction('fooEmphasize', (content) => `${content}`, { renderAsHtml: true }) +addFunction('foo.styles.emphasize', (content) => `${content}`, { renderAsHtml: true }) diff --git a/lib/functions/api.js b/lib/functions/api.js index e38e1f6a24..f67e3b9868 100644 --- a/lib/functions/api.js +++ b/lib/functions/api.js @@ -20,7 +20,27 @@ function addGlobalToEnvironment (name, fn, config) { return new nunjucks.runtime.SafeString(html) } } - environment.addGlobal(name, fnToAdd) + + if (!name.includes('.')) { + environment.addGlobal(name, fnToAdd) + } else { + const [key, ...rest] = name.split('.') + try { + environment.getGlobal(key) + } catch (err) { + environment.addGlobal(key, {}) + } + rest.reduce((obj, next, index) => { + if (index < rest.length - 1) { + if (!obj[next]) { + obj[next] = {} + } + return obj[next] + } + obj[next] = fnToAdd + return null + }, environment.getGlobal(key)) + } } function addFunction (name, fn, config) {