aboutsummaryrefslogtreecommitdiff
path: root/lib/transforms.js
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-11-20 12:15:39 +0000
committerMichael Williamson <mike@zwobble.org>2016-11-20 12:16:49 +0000
commite09b1f797d646e240e405831a9ddccd21ca4b3f9 (patch)
tree4f5fd0a872457d5aab7c6882e43485ac076d9d6e /lib/transforms.js
parentf4a6e9f3077e009ce36d03ff9fb704dc8bcff31b (diff)
Add getDescendants and getDescendantsOfType to tranforms
Diffstat (limited to 'lib/transforms.js')
-rw-r--r--lib/transforms.js34
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);
+ });
+ }
+}