Edition de l'arbre profile basique
This commit is contained in:
53
js/util/tree.js
Normal file
53
js/util/tree.js
Normal file
@ -0,0 +1,53 @@
|
||||
var _ = require('lodash');
|
||||
|
||||
// Tree manipulation helpers
|
||||
|
||||
exports.walk = function(branch, func, parent) {
|
||||
|
||||
if(!branch) return;
|
||||
|
||||
var breakHere = func(branch, parent);
|
||||
|
||||
if(breakHere) return breakHere;
|
||||
|
||||
var items = branch.items;
|
||||
|
||||
if(!items) return;
|
||||
|
||||
for( var i = 0, item = items[i]; (item = items[i]); i++ ) {
|
||||
breakHere = exports.walk(item, func, branch);
|
||||
if(breakHere) return breakHere;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
exports.find = function(tree, obj) {
|
||||
|
||||
var result;
|
||||
|
||||
exports.walk(tree, function(item, parent) {
|
||||
if( _.isEqual(item, obj) ) {
|
||||
result = {item: item, parent: parent};
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
|
||||
};
|
||||
|
||||
exports.matches = function(tree, obj) {
|
||||
|
||||
var results = [];
|
||||
|
||||
var matches = _.matches(obj);
|
||||
|
||||
exports.walk(tree, function(item) {
|
||||
if( matches(item) ) {
|
||||
results.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
return results;
|
||||
|
||||
};
|
Reference in New Issue
Block a user