67 lines
1.4 KiB
JavaScript
67 lines
1.4 KiB
JavaScript
var _ = require("./lodash");
|
|
var Graph = require("./graph");
|
|
|
|
module.exports = {
|
|
write: write,
|
|
read: read
|
|
};
|
|
|
|
function write(g) {
|
|
var json = {
|
|
options: {
|
|
directed: g.isDirected(),
|
|
multigraph: g.isMultigraph(),
|
|
compound: g.isCompound()
|
|
},
|
|
nodes: writeNodes(g),
|
|
edges: writeEdges(g)
|
|
};
|
|
if (!_.isUndefined(g.graph())) {
|
|
json.value = _.clone(g.graph());
|
|
}
|
|
return json;
|
|
}
|
|
|
|
function writeNodes(g) {
|
|
return _.map(g.nodes(), function(v) {
|
|
var nodeValue = g.node(v);
|
|
var parent = g.parent(v);
|
|
var node = { v: v };
|
|
if (!_.isUndefined(nodeValue)) {
|
|
node.value = nodeValue;
|
|
}
|
|
if (!_.isUndefined(parent)) {
|
|
node.parent = parent;
|
|
}
|
|
return node;
|
|
});
|
|
}
|
|
|
|
function writeEdges(g) {
|
|
return _.map(g.edges(), function(e) {
|
|
var edgeValue = g.edge(e);
|
|
var edge = { v: e.v, w: e.w };
|
|
if (!_.isUndefined(e.name)) {
|
|
edge.name = e.name;
|
|
}
|
|
if (!_.isUndefined(edgeValue)) {
|
|
edge.value = edgeValue;
|
|
}
|
|
return edge;
|
|
});
|
|
}
|
|
|
|
function read(json) {
|
|
var g = new Graph(json.options).setGraph(json.value);
|
|
_.each(json.nodes, function(entry) {
|
|
g.setNode(entry.v, entry.value);
|
|
if (entry.parent) {
|
|
g.setParent(entry.v, entry.parent);
|
|
}
|
|
});
|
|
_.each(json.edges, function(entry) {
|
|
g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);
|
|
});
|
|
return g;
|
|
}
|