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

Reply via email to