lazo-next
Version:
A client-server web framework built on Node.js that allows front-end developers to easily create a 100% SEO compliant, component MVC structured web application with an optimized first page load.
74 lines (58 loc) • 1.96 kB
JavaScript
define(['underscore'], function (_, $) {
'use strict';
return {
getList: function (nodeType, rootNode) {
var self = this;
return (function flatten(nodeType, node, nodes) {
var children;
if (nodeType === 'view' && node.currentView) {
nodes.push(node.currentView);
} else if (nodeType === 'component') {
nodes.push(node);
}
if ((children = self.getNodeChildren(node)).length) {
_.each(children, function (child) {
nodes = flatten(nodeType, child, nodes);
});
}
return nodes;
})(nodeType, rootNode, []);
},
getNodeType: function (node) {
var ret;
if (!node) {
ret = null;
} else if (node.currentView) {
ret = 'component';
} else if (node.setElement) {
ret = 'view';
}
return ret;
},
getNodeChildren: function (node) {
var nodeType = this.getNodeType(node);
if (nodeType !== 'component') {
return [];
}
var children = node.children;
var child;
var nodes = [];
node.currentView.parent = node;
// nodes.push(node.currentView);
for (var k in children) {
for (var i = 0; i < children[k].length; i++) {
child = children[k][i];
child.parent = node;
nodes.push(child);
}
}
return nodes;
},
_attrs: {
cmpName: 'lazo-cmp-name',
cmpId: 'lazo-cmp-id',
compContainerName: 'lazo-cmp-container',
viewId: 'lazo-view-id'
}
};
});