UNPKG

twig

Version:

JS port of the Twig templating language.

88 lines (78 loc) 2.37 kB
// ## twig.tests.js // // This file handles expression tests. (is empty, is not defined, etc...) module.exports = function (Twig) { 'use strict'; Twig.tests = { empty(value) { // Handle boolean true if (value === true) { return false; } // Handle null or undefined if (value === null || value === undefined) { return true; } // Handler numbers if (typeof value === 'number') { return false; } // Numbers are never "empty" // Handle strings and arrays if (value.length > 0) { return false; } // Handle objects for (const key in value) { if (Object.hasOwnProperty.call(value, key)) { return false; } } return true; }, odd(value) { return value % 2 === 1; }, even(value) { return value % 2 === 0; }, 'divisible by'(value, params) { return value % params[0] === 0; }, divisibleby(value, params) { console.warn('`divisibleby` is deprecated use `divisible by`'); return Twig.tests['divisible by'](value, params); }, defined(value) { return value !== undefined; }, none(value) { return value === null; }, null(value) { return this.none(value); // Alias of none }, 'same as'(value, params) { return value === params[0]; }, sameas(value, params) { console.warn('`sameas` is deprecated use `same as`'); return Twig.tests['same as'](value, params); }, iterable(value) { return value && (Twig.lib.is('Array', value) || Twig.lib.is('Object', value)); } /* Constant ? */ }; Twig.test = function (test, value, params) { if (!Twig.tests[test]) { throw Twig.Error('Test ' + test + ' is not defined.'); } return Twig.tests[test](value, params); }; Twig.test.extend = function (test, definition) { Twig.tests[test] = definition; }; return Twig; };