From 4fc977268fb609f8d12e74bba098f8fee51f82cb Mon Sep 17 00:00:00 2001 From: ChenL Date: Thu, 16 Mar 2017 18:26:10 +0800 Subject: [PATCH] Support create variables on the filter line. --- src/filter.js | 4 +++- src/lexical.js | 2 +- test/filters.js | 5 +++++ test/lexical.js | 2 ++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/filter.js b/src/filter.js index c86f930c8..6644210f0 100644 --- a/src/filter.js +++ b/src/filter.js @@ -36,7 +36,9 @@ module.exports = function(options) { var args = []; while(match = valueRE.exec(argList.trim())){ - args.push(match[0]); + var v = match[0]; + var re = new RegExp(`${v}\\s*:`, 'g'); + re.test(match.input) ? args.push(`'${v}'`) : args.push(v); } this.name = name; diff --git a/src/lexical.js b/src/lexical.js index 8854688e6..9b85dbe43 100644 --- a/src/lexical.js +++ b/src/lexical.js @@ -37,7 +37,7 @@ var rangeLine = new RegExp(`^${rangeCapture.source}$`); var integerLine = new RegExp(`^${integer.source}$`); // filter related -var valueList = new RegExp(`${value.source}(\\s*,\\s*${value.source})*`); +var valueList = new RegExp(`${value.source}(\\s*,?:?\\s*${value.source})*`); var filter = new RegExp(`${identifier.source}(?:\\s*:\\s*${valueList.source})?`, 'g'); var filterCapture = new RegExp(`(${identifier.source})(?:\\s*:\\s*(${valueList.source}))?`); var filterLine = new RegExp(`^${filterCapture.source}$`); diff --git a/test/filters.js b/test/filters.js index 592988fbb..4568c9419 100644 --- a/test/filters.js +++ b/test/filters.js @@ -327,4 +327,9 @@ describe('filters', function() { it('should encode ', () => test('{{ "Tetsuro Takara" | url_encode }}', 'Tetsuro%20Takara')); }); + + describe('obj_test', function() { + liquid.registerFilter('obj_test', (...v) => v.join(',')); + it('should support object', () => test('{{ "a" | obj_test: k1: "v1", k2: "v2" }}', 'a,k1,v1,k2,v2')); + }); }); diff --git a/test/lexical.js b/test/lexical.js index 8dc40dda9..1e86670df 100644 --- a/test/lexical.js +++ b/test/lexical.js @@ -11,7 +11,9 @@ describe('lexical', function() { lexical.filterLine.test('foo: a, "b"').should.equal(true); lexical.filterLine.test('abs | another').should.equal(false); lexical.filterLine.test('join: "," | another').should.equal(false); + lexical.filterLine.test('obj_test: k1: "v1", k2: "v2"').should.equal(true); }); + it('should test boolean literal', function() { lexical.isLiteral('true').should.equal(true); lexical.isLiteral('TrUE').should.equal(true);