Oliverb has uploaded a new change for review.
https://gerrit.wikimedia.org/r/159309
Change subject: Added helper for document pre-order traversal.
......................................................................
Added helper for document pre-order traversal.
Change-Id: I134db5c93f99edde7bbcabbb7fde81de839e7d2b
---
M src/ve.Node.js
1 file changed, 29 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor
refs/changes/09/159309/1
diff --git a/src/ve.Node.js b/src/ve.Node.js
index 7692045..b756f44 100644
--- a/src/ve.Node.js
+++ b/src/ve.Node.js
@@ -237,3 +237,32 @@
node = node.getParent();
}
};
+
+/**
+ * Traverse tree of nodes (model or view) in pre-order.
+ *
+ * For each traversed node, the callback function will be passed the traversed
node as a parameter.
+ * The callback can stop descending in branch node by returning `{ descend:
false }`
+ * and stop the iteration by returning `{ stop: true }`
+ *
+ * @param {Function} callback Callback method to be called for every traversed
node
+ * @method
+ */
+ve.Node.prototype.traversePreOrder = function( callback ) {
+ var stack = [], node, result, i;
+ stack.push(this);
+ while (stack.length > 0) {
+ node = stack.pop();
+ result = callback(node);
+ // react on control requests from the callback
+ if (result) {
+ if (result.stop === true) return;
+ if (result.descend === false) continue;
+ }
+ if (node.canHaveChildren()) {
+ for (i = node.children.length - 1; i >= 0; i--) {
+ stack.push(node.children[i]);
+ }
+ }
+ }
+};
--
To view, visit https://gerrit.wikimedia.org/r/159309
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I134db5c93f99edde7bbcabbb7fde81de839e7d2b
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Oliverb <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits