mirror of
https://github.com/discourse/discourse.git
synced 2024-12-02 13:39:36 -06:00
DEV: introduces {{not}} helper (#12651)
Code is coming from https://github.com/jmurphyau/ember-truth-helpers, for now I only ported {{not}} which would have tons of use cases in our code base. We might want to use more helpers in the future, also Ember should have this kind of helpers natively in the future: - https://github.com/cibernox/rfcs/blob/add-logical-operators-to-templates/text/0000-add-logical-operators.md - https://github.com/cibernox/rfcs/blob/add-equality-operators-to-templates/text/0000-add-equality-operators.md - https://github.com/cibernox/rfcs/blob/add-numeric-comparison-operators-to-templates/text/0561-add-numeric-comparison-operators.md
This commit is contained in:
parent
4de2317800
commit
e463f5ce08
14
app/assets/javascripts/discourse/app/helpers/not.js
Normal file
14
app/assets/javascripts/discourse/app/helpers/not.js
Normal file
@ -0,0 +1,14 @@
|
||||
// https://github.com/jmurphyau/ember-truth-helpers/blob/master/addon/helpers/not.js
|
||||
import Helper from "@ember/component/helper";
|
||||
import truthConvert from "discourse/lib/truth-convert";
|
||||
|
||||
export function not(params) {
|
||||
for (let i = 0, len = params.length; i < len; i++) {
|
||||
if (truthConvert(params[i]) === true) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export default Helper.helper(not);
|
16
app/assets/javascripts/discourse/app/lib/truth-convert.js
Normal file
16
app/assets/javascripts/discourse/app/lib/truth-convert.js
Normal file
@ -0,0 +1,16 @@
|
||||
// https://github.com/jmurphyau/ember-truth-helpers/blob/master/addon/utils/truth-convert.js
|
||||
import { isArray } from "@ember/array";
|
||||
import { get } from "@ember/object";
|
||||
|
||||
export default function truthConvert(result) {
|
||||
const truthy = result && get(result, "isTruthy");
|
||||
if (typeof truthy === "boolean") {
|
||||
return truthy;
|
||||
}
|
||||
|
||||
if (isArray(result)) {
|
||||
return get(result, "length") !== 0;
|
||||
} else {
|
||||
return !!result;
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
// https://github.com/jmurphyau/ember-truth-helpers/blob/master/tests/unit/helpers/not-test.js
|
||||
import componentTest, {
|
||||
setupRenderingTest,
|
||||
} from "discourse/tests/helpers/component-test";
|
||||
import { discourseModule, query } from "discourse/tests/helpers/qunit-helpers";
|
||||
import hbs from "htmlbars-inline-precompile";
|
||||
|
||||
discourseModule("Unit | Helper | not", function (hooks) {
|
||||
setupRenderingTest(hooks);
|
||||
|
||||
componentTest("simple test 1", {
|
||||
template: hbs`<div id="not-test">[{{not true}}] [{{not false}}] [{{not null}}] [{{not undefined}}] [{{not ''}}] [{{not ' '}}]</div>`,
|
||||
|
||||
test(assert) {
|
||||
assert.equal(
|
||||
query("#not-test").textContent,
|
||||
"[false] [true] [true] [true] [true] [false]",
|
||||
'value should be "[false] [true] [true] [true] [true] [false]"'
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
componentTest("simple test 2", {
|
||||
template: hbs`<div id="not-test">[{{not true false}}] [{{not true false}}] [{{not null null false null}}] [{{not false null ' ' true}}]</div>`,
|
||||
|
||||
test(assert) {
|
||||
assert.equal(
|
||||
query("#not-test").textContent,
|
||||
"[false] [false] [true] [false]",
|
||||
'value should be "[false] [false] [true] [false]"'
|
||||
);
|
||||
},
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue
Block a user