From 9d88794fbc954e9014d2df69c3a2fb12529e0ba0 Mon Sep 17 00:00:00 2001 From: "Daniel Boelzle [:dbo]" Date: Thu, 15 May 2014 11:32:19 +0200 Subject: [PATCH 1/6] passing key and parent object --- src/jsonselect.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/jsonselect.js b/src/jsonselect.js index 2fbba51..a4278bf 100644 --- a/src/jsonselect.js +++ b/src/jsonselect.js @@ -492,7 +492,7 @@ return [m, sels]; } - function forEach(sel, obj, fun, id, num, tot) { + function forEach(sel, obj, fun, id, num, tot, parent) { var a = (sel[0] === ",") ? sel.slice(1) : [sel], a0 = [], call = false, @@ -512,18 +512,18 @@ } if (isArray(obj)) { for (i = 0; i < obj.length; i++) { - forEach(a0, obj[i], fun, undefined, i, obj.length); + forEach(a0, obj[i], fun, undefined, i, obj.length, obj); } } else { for (k in obj) { if (obj.hasOwnProperty(k)) { - forEach(a0, obj[k], fun, k); + forEach(a0, obj[k], fun, k, undefined, undefined, obj); } } } } if (call && fun) { - fun(obj); + fun(obj, id === undefined ? num : id, parent); } } From 1d1b62830c5b2606c6fa28ca81bdf6023ec3cd69 Mon Sep 17 00:00:00 2001 From: "Daniel Boelzle [:dbo]" Date: Mon, 26 May 2014 15:51:02 +0200 Subject: [PATCH 2/6] adding lookup object for properties to be ignored --- src/jsonselect.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/jsonselect.js b/src/jsonselect.js index a4278bf..122ac4b 100644 --- a/src/jsonselect.js +++ b/src/jsonselect.js @@ -516,7 +516,7 @@ } } else { for (k in obj) { - if (obj.hasOwnProperty(k)) { + if (!exports.ignore[k] && obj.hasOwnProperty(k)) { forEach(a0, obj[k], fun, k, undefined, undefined, obj); } } @@ -560,6 +560,7 @@ exports._lex = lex; exports._parse = parse; + exports.ignore = {}; exports.match = function (sel, arr, obj) { if (!obj) { obj = arr; arr = undefined; } return compile(sel, arr).match(obj); From f5d45ff23df621af3ac108a1d2af07a69e5cfa41 Mon Sep 17 00:00:00 2001 From: "Daniel Boelzle [:dbo]" Date: Mon, 26 May 2014 15:59:06 +0200 Subject: [PATCH 3/6] Revert "adding lookup object for properties to be ignored" This reverts commit 1d1b62830c5b2606c6fa28ca81bdf6023ec3cd69. --- src/jsonselect.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/jsonselect.js b/src/jsonselect.js index 122ac4b..a4278bf 100644 --- a/src/jsonselect.js +++ b/src/jsonselect.js @@ -516,7 +516,7 @@ } } else { for (k in obj) { - if (!exports.ignore[k] && obj.hasOwnProperty(k)) { + if (obj.hasOwnProperty(k)) { forEach(a0, obj[k], fun, k, undefined, undefined, obj); } } @@ -560,7 +560,6 @@ exports._lex = lex; exports._parse = parse; - exports.ignore = {}; exports.match = function (sel, arr, obj) { if (!obj) { obj = arr; arr = undefined; } return compile(sel, arr).match(obj); From be8f5b4a0c8d3fc2601c2177d82872736e242dd4 Mon Sep 17 00:00:00 2001 From: "Daniel Boelzle [:dbo]" Date: Mon, 26 May 2014 16:00:19 +0200 Subject: [PATCH 4/6] adding lookup object for properties to be ignored --- src/jsonselect.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/jsonselect.js b/src/jsonselect.js index a4278bf..122ac4b 100644 --- a/src/jsonselect.js +++ b/src/jsonselect.js @@ -516,7 +516,7 @@ } } else { for (k in obj) { - if (obj.hasOwnProperty(k)) { + if (!exports.ignore[k] && obj.hasOwnProperty(k)) { forEach(a0, obj[k], fun, k, undefined, undefined, obj); } } @@ -560,6 +560,7 @@ exports._lex = lex; exports._parse = parse; + exports.ignore = {}; exports.match = function (sel, arr, obj) { if (!obj) { obj = arr; arr = undefined; } return compile(sel, arr).match(obj); From 8974281b3ac0de574627f7d1c2d98cea95f4661e Mon Sep 17 00:00:00 2001 From: "Daniel Boelzle [:dbo]" Date: Fri, 14 Nov 2014 16:49:12 +0100 Subject: [PATCH 5/6] moving over to using a callback function due to flexibility --- src/jsonselect.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/jsonselect.js b/src/jsonselect.js index 122ac4b..3c4e4c8 100644 --- a/src/jsonselect.js +++ b/src/jsonselect.js @@ -516,7 +516,7 @@ } } else { for (k in obj) { - if (!exports.ignore[k] && obj.hasOwnProperty(k)) { + if ((!exports.ignoreKey || !exports.ignoreKey(k)) && obj.hasOwnProperty(k)) { forEach(a0, obj[k], fun, k, undefined, undefined, obj); } } @@ -560,7 +560,6 @@ exports._lex = lex; exports._parse = parse; - exports.ignore = {}; exports.match = function (sel, arr, obj) { if (!obj) { obj = arr; arr = undefined; } return compile(sel, arr).match(obj); From 7b29d5568ddba6b9815717fc15f2a83e91433e9c Mon Sep 17 00:00:00 2001 From: "Daniel Boelzle [:dbo]" Date: Wed, 2 Nov 2016 17:10:57 +0100 Subject: [PATCH 6/6] Expose setter function to be ES6 module compliant --- src/jsonselect.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/jsonselect.js b/src/jsonselect.js index 3c4e4c8..e07e033 100644 --- a/src/jsonselect.js +++ b/src/jsonselect.js @@ -76,6 +76,9 @@ "upc": "unrecognized pseudo class" }; + // Ignore keys to be traversed [function]. + var ignoreKey; + // throw an error message function te(ec, context) { throw new Error(errorCodes[ec] + ( context && " in '" + context + "'")); @@ -516,7 +519,7 @@ } } else { for (k in obj) { - if ((!exports.ignoreKey || !exports.ignoreKey(k)) && obj.hasOwnProperty(k)) { + if ((!ignoreKey || !ignoreKey(k)) && obj.hasOwnProperty(k)) { forEach(a0, obj[k], fun, k, undefined, undefined, obj); } } @@ -569,4 +572,7 @@ return compile(sel, arr).forEach(obj, fun); }; exports.compile = compile; + exports.setIgnoreKey = function(fn) { + ignoreKey = fn; + }; })(typeof exports === "undefined" ? (window.JSONSelect = {}) : exports);