aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-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);
+ });
+ }
+}