aapssfc/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.js
2015-03-03 15:56:44 +01:00

112 lines
3.7 KiB
JavaScript

/* http://keith-wood.name/gChart.html
Google Chart GraphViz extension for jQuery v1.4.3.
See API details at http://code.google.com/apis/chart/.
Written by Keith Wood (kbwood{at}iinet.com.au) September 2008.
Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
Please attribute the author if you use it. */
(function($) { // Hide scope, no $ conflict
// New chart types: graphviz
$.extend($.gchart._chartTypes, {graphviz: 'gv', gv: 'gv'});
$.extend($.gchart._typeOptions, {gv: 'no'});
$.extend($.gchart._prototype.prototype, {
/* Prepare options for a GraphViz chart.
@param engine (string, optional) the graphing engine to use:
dot (default), neato, twopi, circo, fdp
@param options (object, optional) other options for the chart
@param directed (boolean, optional) true for directed graph, false for normal
@param nodes (string) the DOT representation of the nodes to graph or
(object) the graph nodes and their settings
@param edges (object, optional) the graph edges keyed from, with array of to
@param attrs (object, optional) other settings for the graph
@return (object) the configured options object */
graphviz: function(engine, options, directed, nodes, edges, attrs) {
if (arguments.length == 1) {
nodes = engine;
engine = 'dot';
}
var hadEngine = typeof engine == 'string';
if (!hadEngine) {
attrs = edges;
edges = nodes;
nodes = directed;
directed = options;
options = engine;
engine = 'dot';
}
if ((options && typeof options != 'object') || arguments.length == 2 ||
(arguments.length == 3 && hadEngine)) {
attrs = edges;
edges = nodes;
nodes = directed;
directed = options;
options = {};
}
if (typeof directed != 'boolean' && arguments.length > 1) {
attrs = edges;
edges = nodes;
nodes = directed;
directed = false;
}
options = options || {};
options.type = 'gv' + (engine != 'dot' ? ':' + engine : '');
options.dataLabels = [typeof nodes == 'string' ? nodes :
this._genGraph(directed, nodes, edges, attrs)];
return options;
},
/* Generate a graph definition.
@param directed (boolean, optional) true for directed graph, false for normal
@param nodes (object) the graph nodes and their settings
@param edges (object) the graph edges keyed from, with array of to
@param attrs (object, optional) other settings for the graph
@return (string) the graph definition */
_genGraph: function(directed, nodes, edges, attrs) {
attrs = attrs || {};
var gdef = (directed ? 'digraph' : 'graph') + '{';
var sep = '';
for (var n in attrs) {
gdef += sep + n;
var sep2 = '[';
for (var n2 in attrs[n]) {
gdef += sep2 + n2 + '=' + attrs[n][n2];
sep2 = ','
}
gdef += (sep2 != '[' ? ']' : '');
sep = ';';
}
for (var node in nodes || {}) {
gdef += sep + node;
var sep2 = '[';
for (var n in nodes[node]) {
gdef += sep2 + n + '=' + nodes[node][n];
sep2 = ','
}
gdef += (sep2 != '[' ? ']' : '');
sep = ';';
}
for (var edge in edges || {}) {
for (var n in edges[edge]) {
gdef += sep + edge + (directed ? '->' : '--') + edges[edge][n];
}
sep = ';';
}
gdef += '}';
return gdef;
},
/* Generate standard options for charts that aren't really charts.
@param options (object) the chart settings
@param labels (string) the concatenated labels for the chart
@return (string) the standard non-chart options */
noOptions: function(options, labels) {
return '&chl=' + labels.substr(1);
}
});
})(jQuery);