diff --git a/client/js/libs/handlebars/equal.js b/client/js/libs/handlebars/equal.js index 6a8033ca..2d25ea9d 100644 --- a/client/js/libs/handlebars/equal.js +++ b/client/js/libs/handlebars/equal.js @@ -1,8 +1,13 @@ "use strict"; module.exports = function(a, b, opt) { + if (arguments.length !== 3) { + throw new Error("Handlebars helper `equal` expects 3 arguments"); + } + a = a.toString(); b = b.toString(); + if (a === b) { return opt.fn(this); } diff --git a/client/js/libs/handlebars/notEqual.js b/client/js/libs/handlebars/notEqual.js new file mode 100644 index 00000000..dfd06d44 --- /dev/null +++ b/client/js/libs/handlebars/notEqual.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = function(a, b, opt) { + if (arguments.length !== 3) { + throw new Error("Handlebars helper `notEqual` expects 3 arguments"); + } + + a = a.toString(); + b = b.toString(); + + if (a !== b) { + return opt.fn(this); + } + + if (opt.inverse(this) !== "") { + throw new Error("Handlebars helper `notEqual` does not take an `else` block"); + } +}; diff --git a/client/views/actions/whois.tpl b/client/views/actions/whois.tpl index 40c66977..f1e15881 100644 --- a/client/views/actions/whois.tpl +++ b/client/views/actions/whois.tpl @@ -10,7 +10,7 @@ {{#if whois.actualhost}}
Actual host:
-
{{whois.actualip}}{{#equal whois.actualhost whois.actualip}}{{else}} ({{whois.actualhost}}){{/equal}}
+
{{whois.actualip}}{{#notEqual whois.actualhost whois.actualip}} ({{whois.actualhost}}){{/notEqual}}
{{/if}} {{#if whois.real_name}} diff --git a/test/client/js/libs/handlebars/equalTest.js b/test/client/js/libs/handlebars/equalTest.js new file mode 100644 index 00000000..c386fbd5 --- /dev/null +++ b/test/client/js/libs/handlebars/equalTest.js @@ -0,0 +1,26 @@ +"use strict"; + +const expect = require("chai").expect; +const equal = require("../../../../../client/js/libs/handlebars/equal"); + +describe("equal Handlebars helper", function() { + const block = { + fn: () => "fn", + inverse: () => "inverse", + }; + + it("should render the first block if both values are equal", function() { + expect(equal("foo", "foo", block)).to.equal("fn"); + }); + + it("should render the inverse block if values are not equal", function() { + expect(equal("foo", "bar", block)).to.equal("inverse"); + }); + + it("should throw if too few or too many arguments are given", function() { + expect(() => equal("foo", block)).to.throw(Error, /expects 3 arguments/); + + expect(() => equal("foo", "bar", "baz", block)) + .to.throw(Error, /expects 3 arguments/); + }); +}); diff --git a/test/client/js/libs/handlebars/notEqualTest.js b/test/client/js/libs/handlebars/notEqualTest.js new file mode 100644 index 00000000..40a37230 --- /dev/null +++ b/test/client/js/libs/handlebars/notEqualTest.js @@ -0,0 +1,30 @@ +"use strict"; + +const expect = require("chai").expect; +const notEqual = require("../../../../../client/js/libs/handlebars/notEqual"); + +describe("notEqual Handlebars helper", function() { + const block = { + fn: () => "fn", + }; + + it("should render the block if both values are equal", function() { + expect(notEqual("foo", "bar", block)).to.equal("fn"); + }); + + it("should throw if too few or too many arguments are given", function() { + expect(() => notEqual("foo", block)).to.throw(Error, /expects 3 arguments/); + + expect(() => notEqual("foo", "bar", "baz", block)) + .to.throw(Error, /expects 3 arguments/); + }); + + it("should throw if too few or too many arguments are given", function() { + const blockWithElse = { + fn: () => "fn", + inverse: () => "inverse", + }; + + expect(() => notEqual("foo", "foo", blockWithElse)).to.throw(Error, /else/); + }); +});