app/files/dependencies/dependencies.js
define(['app/shared/api/api', 'ko', 'sugar', 'css!./dependencies.css'], function (Api, ko) {
var allDependencies = ko.observable({});
var Dependencies = ko.observe({
init: function () {
Object.isEmpty(allDependencies()) && Api.call('file', 'dependencies', null, null, this._error,
this._loading).done(allDependencies);
},
dispose: function () {
return false; // return false to prevent public primitive/observable params to be reset when leaving the page
},
loading: false,
error: '',
selectedNode: ''
});
var computed = {
graph: function () {
var edges = [];
Object.each(allDependencies(), function (key, values) {
values.each(function (value) {
edges.push({ data: { source: value, target: key } });
});
});
return {
nodes: Object.keys(allDependencies()).union(Object.values(allDependencies())).flatten().unique()
.remove(function (node) {
return node.startsWith('.');
}).map(function (node) {
return { data: { id: node } };
}),
edges: edges
}
},
nodeGraph: function () {
var edges = this.graph.edges.findAll(function (edge) {
return (edge.data.source === this.selectedNode) || (edge.data.target == this.selectedNode);
}.bind(this));
var nodes = edges.map(function (edge) { return [edge.data.source, edge.data.target];}).flatten().unique().map(
function (node) { return { data: { id: node } }; }
);
return {
nodes: (nodes.length && nodes) || [{ data: { id: this.selectedNode } }],
edges: edges
};
}
};
Object.each(computed, function (key, value) {
ko.defineComputedProperty(Dependencies, key, value);
});
return Dependencies;
});