'use strict'; const util = require('util'); const GRAPH_NODE = ' "%s" [label="%s"]'; const GRAPH_NODE_URL = ' "%s" [label="%s", URL="%s", fontcolor=blue]'; const GRAPH_LINK = ' "%s" -> "%s"'; /** * Convertit un graphe en format DOT. * * @param graph Graphe à convertir. * @param [title=identity] Fonction donnant le titre de chaque nœud du graphe. * @param [url=none] Fonction donnant l’URL de chaque nœud du graphe, ou la * chaîne vide si un nœud n’a pas d’URL. * @return Représentation DOT du graphe. */ const graphToDOT = (graph, title = id => id, url = () => '') => { const ser = graph.serialize(); // Conversion des nœuds de vidéo const nodes = ser.nodes.map(({id}) => { const nodeTitle = title(id); const nodeUrl = url(id); if (url === '') { return util.format(GRAPH_NODE, id, nodeTitle); } else { return util.format(GRAPH_NODE_URL, id, nodeTitle, nodeUrl); } } ).join('\n'); // Conversion des liens de vidéo const links = ser.links.map(({source, target}) => util.format(GRAPH_LINK, source, target) ).join('\n'); return ( 'digraph epenser {\n' + nodes + '\n' + links + '\n}' ); }; exports.graphToDOT = graphToDOT;