summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/core/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/core/utils.js')
-rw-r--r--addons/web/static/src/js/core/utils.js27
1 files changed, 27 insertions, 0 deletions
diff --git a/addons/web/static/src/js/core/utils.js b/addons/web/static/src/js/core/utils.js
index 578eb3478f1..585be4d37b8 100644
--- a/addons/web/static/src/js/core/utils.js
+++ b/addons/web/static/src/js/core/utils.js
@@ -429,6 +429,33 @@ var utils = {
});
return str;
},
+ /**
+ * Visit a tree of objects, where each children are in an attribute 'children'.
+ * For each children, we call the callback function given in arguments.
+ *
+ * @param {Object} tree an object describing a tree structure
+ * @param {function} f a callback
+ */
+ traverse: function (tree, f) {
+ if (f(tree)) {
+ _.each(tree.children, function (c) { utils.traverse(c, f); });
+ }
+ },
+ /**
+ * Visit a tree of objects and freeze all
+ *
+ * @param {Object} obj
+ */
+ deepFreeze: function (obj) {
+ var propNames = Object.getOwnPropertyNames(obj);
+ propNames.forEach(function(name) {
+ var prop = obj[name];
+ if (typeof prop == 'object' && prop !== null)
+ utils.deepFreeze(prop);
+ });
+ return Object.freeze(obj);
+ },
+
};
return utils;