diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-11-20 12:15:39 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-11-20 12:16:49 +0000 |
| commit | e09b1f797d646e240e405831a9ddccd21ca4b3f9 (patch) | |
| tree | 4f5fd0a872457d5aab7c6882e43485ac076d9d6e /lib/transforms.js | |
| parent | f4a6e9f3077e009ce36d03ff9fb704dc8bcff31b (diff) | |
Add getDescendants and getDescendantsOfType to tranforms
Diffstat (limited to 'lib/transforms.js')
| -rw-r--r-- | lib/transforms.js | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/lib/transforms.js b/lib/transforms.js index 5078387..22be1af 100644 --- a/lib/transforms.js +++ b/lib/transforms.js @@ -1,6 +1,10 @@ var _ = require("underscore"); -exports.paragraph = function(transform) { +exports.paragraph = paragraph; +exports.getDescendantsOfType = getDescendantsOfType; +exports.getDescendants = getDescendants; + +function paragraph(transform) { function transformElement(element) { if (element.children) { var children = _.map(element.children, transformElement); @@ -14,4 +18,30 @@ exports.paragraph = function(transform) { return element; } return transformElement; -}; +} + + +function getDescendantsOfType(element, type) { + return getDescendants(element).filter(function(descendant) { + return descendant.type === type; + }); +} + +function getDescendants(element) { + var descendants = []; + + visitDescendants(element, function(descendant) { + descendants.push(descendant); + }); + + return descendants; +} + +function visitDescendants(element, visit) { + if (element.children) { + element.children.forEach(function(child) { + visitDescendants(child, visit); + visit(child); + }); + } +} |
