112 lines
3.7 KiB
JavaScript
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);
|