mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-24 06:35:49 +03:00
Added hasFeature
email template helper (#20271)
refs https://ghost.slack.com/archives/C06TQR9SHSM/p1716816764653789?thread_ts=1716795330.737919&cid=C06TQR9SHSM MOM-158 - adds a new `hasFeature` helper for adding content behind a flag within Email Templates. - Usage: `{{#hasFeature 'flagname'}} <p>html behind flag</p> {{/hasFeature}}` - Added additional testing for testing the helpers
This commit is contained in:
parent
7617759ae6
commit
fb465e4704
@ -10,6 +10,7 @@ const htmlToPlaintext = require('@tryghost/html-to-plaintext');
|
|||||||
const tpl = require('@tryghost/tpl');
|
const tpl = require('@tryghost/tpl');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const {EmailAddressParser} = require('@tryghost/email-addresses');
|
const {EmailAddressParser} = require('@tryghost/email-addresses');
|
||||||
|
const {registerHelpers} = require('./helpers/register-helpers');
|
||||||
|
|
||||||
const messages = {
|
const messages = {
|
||||||
subscriptionStatus: {
|
subscriptionStatus: {
|
||||||
@ -755,53 +756,16 @@ class EmailRenderer {
|
|||||||
return replacements;
|
return replacements;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getLabs() {
|
||||||
|
return this.#labs;
|
||||||
|
}
|
||||||
|
|
||||||
async renderTemplate(data) {
|
async renderTemplate(data) {
|
||||||
|
const labs = this.getLabs();
|
||||||
this.#handlebars = require('handlebars').create();
|
this.#handlebars = require('handlebars').create();
|
||||||
|
|
||||||
// Helpers
|
// Register helpers
|
||||||
this.#handlebars.registerHelper('if', function (conditional, options) {
|
registerHelpers(this.#handlebars, labs);
|
||||||
if (conditional) {
|
|
||||||
return options.fn(this);
|
|
||||||
} else {
|
|
||||||
return options.inverse(this);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.#handlebars.registerHelper('and', function () {
|
|
||||||
const len = arguments.length - 1;
|
|
||||||
|
|
||||||
for (let i = 0; i < len; i++) {
|
|
||||||
if (!arguments[i]) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
this.#handlebars.registerHelper('not', function () {
|
|
||||||
const len = arguments.length - 1;
|
|
||||||
|
|
||||||
for (let i = 0; i < len; i++) {
|
|
||||||
if (!arguments[i]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
this.#handlebars.registerHelper('or', function () {
|
|
||||||
const len = arguments.length - 1;
|
|
||||||
|
|
||||||
for (let i = 0; i < len; i++) {
|
|
||||||
if (arguments[i]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Partials
|
// Partials
|
||||||
if (this.#labs.isSet('emailCustomization')) {
|
if (this.#labs.isSet('emailCustomization')) {
|
||||||
|
55
ghost/email-service/lib/helpers/register-helpers.js
Normal file
55
ghost/email-service/lib/helpers/register-helpers.js
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
module.exports = {
|
||||||
|
registerHelpers(handlebars, labs) {
|
||||||
|
handlebars.registerHelper('if', function (conditional, options) {
|
||||||
|
if (conditional) {
|
||||||
|
return options.fn(this);
|
||||||
|
} else {
|
||||||
|
return options.inverse(this);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
handlebars.registerHelper('and', function () {
|
||||||
|
const len = arguments.length - 1;
|
||||||
|
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
if (!arguments[i]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
handlebars.registerHelper('not', function () {
|
||||||
|
const len = arguments.length - 1;
|
||||||
|
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
if (!arguments[i]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
handlebars.registerHelper('or', function () {
|
||||||
|
const len = arguments.length - 1;
|
||||||
|
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
if (arguments[i]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
handlebars.registerHelper('hasFeature', function (flag, options) {
|
||||||
|
if (labs.isSet(flag)) {
|
||||||
|
return options.fn(this);
|
||||||
|
} else {
|
||||||
|
return options.inverse(this);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
142
ghost/email-service/test/email-helpers.test.js
Normal file
142
ghost/email-service/test/email-helpers.test.js
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
const assert = require('assert/strict');
|
||||||
|
const {registerHelpers} = require('../lib/helpers/register-helpers');
|
||||||
|
|
||||||
|
describe('registerHelpers', function () {
|
||||||
|
it('registers helpers', function () {
|
||||||
|
const handlebars = {
|
||||||
|
registerHelper: function (name, fn) {
|
||||||
|
this[name] = fn;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const labs = {
|
||||||
|
isSet: function () {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
registerHelpers(handlebars, labs);
|
||||||
|
|
||||||
|
assert.ok(handlebars.if);
|
||||||
|
assert.ok(handlebars.and);
|
||||||
|
assert.ok(handlebars.not);
|
||||||
|
assert.ok(handlebars.or);
|
||||||
|
assert.ok(handlebars.hasFeature);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('if helper returns true', function () {
|
||||||
|
const handlebars = {
|
||||||
|
registerHelper: function (name, fn) {
|
||||||
|
this[name] = fn;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const labs = {
|
||||||
|
isSet: function () {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
registerHelpers(handlebars, labs);
|
||||||
|
|
||||||
|
const result = handlebars.if(true, {
|
||||||
|
fn: function () {
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
inverse: function () {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(result, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('if helper returns false', function () {
|
||||||
|
const handlebars = {
|
||||||
|
registerHelper: function (name, fn) {
|
||||||
|
this[name] = fn;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const labs = {
|
||||||
|
isSet: function () {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
registerHelpers(handlebars, labs);
|
||||||
|
|
||||||
|
const result = handlebars.if(false, {
|
||||||
|
fn: function () {
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
inverse: function () {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(result, false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('and helper returns true', function () {
|
||||||
|
const handlebars = {
|
||||||
|
registerHelper: function (name, fn) {
|
||||||
|
this[name] = fn;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const labs = {
|
||||||
|
isSet: function () {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
registerHelpers(handlebars, labs);
|
||||||
|
|
||||||
|
const result = handlebars.and(true, true);
|
||||||
|
|
||||||
|
assert.equal(result, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('usefeature helper returns true', function () {
|
||||||
|
const handlebars = {
|
||||||
|
registerHelper: function (name, fn) {
|
||||||
|
this[name] = fn;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const labs = {
|
||||||
|
isSet: function () {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
registerHelpers(handlebars, labs);
|
||||||
|
|
||||||
|
const result = handlebars.hasFeature('test', {
|
||||||
|
fn: function () {
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
inverse: function () {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(result, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('usefeature helper returns false', function () {
|
||||||
|
const handlebars = {
|
||||||
|
registerHelper: function (name, fn) {
|
||||||
|
this[name] = fn;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const labs = {
|
||||||
|
isSet: function () {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
registerHelpers(handlebars, labs);
|
||||||
|
|
||||||
|
const result = handlebars.hasFeature('test', {
|
||||||
|
fn: function () {
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
inverse: function () {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(result, false);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user