diff --git a/Changelog.md b/Changelog.md index 51485326..0787178a 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,13 @@ +## 0.4.0 +* layout engines are proper objects. all layout parameters are moved to the layout objects and + deprecated on the diagram object +* `cola`, `dagre`, `tree` `_layout` are the current layout engines, and it should be possible to + plug in others without modifying dc.graph.js +* using a webworker is optional for layout engines - wrap an engine in `webworker_layout` to use it + with a webworker. the only restriction is that all layout parameters must be serializable - so for + example the tree layout is not currently webworkable because it takes a bunch of functions. +* [HTML documentation](http://dc-js.github.io/dc.graph.js/docs/html/) + ## 0.3.16 * line breaking `dc.line_breaks` function, for `nodeLabel` (which has supported returning an array of lines for some time). diff --git a/Gruntfile.js b/Gruntfile.js index c0ee1bb1..d4b1c6fd 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -14,12 +14,18 @@ module.exports = function (grunt) { banner: grunt.file.read('./LICENSE_BANNER'), jsFiles: module.exports.jsFiles, colaWorkerFiles: [ + 'src/core.js', 'src/generate_objects.js', - 'src/cola.worker.js' + 'src/graphviz_attrs.js', + 'src/cola_layout.js', + 'src/webworker_message.js' ], dagreWorkerFiles: [ + 'src/core.js', 'src/generate_objects.js', - 'src/dagre.worker.js' + 'src/graphviz_attrs.js', + 'src/dagre_layout.js', + 'src/webworker_message.js' ] }; @@ -260,19 +266,26 @@ module.exports = function (grunt) { grunt.registerTask('server', ['docs', 'connect:server', 'watch:scripts']); grunt.registerTask('lint', ['build', 'jshint', 'jscs']); grunt.registerTask('default', ['build', 'shell:hooks']); + grunt.registerTask('doc-debug', ['build', 'jsdoc', 'jsdoc2md', 'connect:server', 'watch:docs']); }; module.exports.jsFiles = [ 'src/banner.js', // NOTE: keep this first 'src/core.js', + 'src/utils.js', 'src/depth_first_traversal.js', 'src/generate_objects.js', 'src/shape.js', 'src/diagram.js', + 'src/webworker_layout.js', + 'src/graphviz_attrs.js', + 'src/cola_layout.js', + 'src/dagre_layout.js', + 'src/tree_layout.js', 'src/legend.js', 'src/constraint_pattern.js', - 'src/tree_constraints.js', 'src/tree_positions.js', + 'src/tree_constraints.js', 'src/behavior.js', 'src/tip.js', 'src/select_nodes.js', diff --git a/dc.graph.cola.worker.js b/dc.graph.cola.worker.js index 6f211546..d9eb3ff2 100644 --- a/dc.graph.cola.worker.js +++ b/dc.graph.cola.worker.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.3.16 + * dc.graph 0.4.0 * http://dc-js.github.io/dc.graph.js/ * Copyright 2015-2016 AT&T Intellectual Property & the dc.graph.js Developers * https://github.com/dc-js/dc.graph.js/blob/master/AUTHORS @@ -17,6 +17,116 @@ * limitations under the License. * */ +/** + * The entire dc.graph.js library is scoped under the **dc_graph** name space. It does not introduce + * anything else into the global name space. + * + * Like in dc.js and most libraries built on d3, most `dc_graph` functions are designed to allow function chaining, meaning they return the current chart + * instance whenever it is appropriate. The getter forms of functions do not participate in function + * chaining because they return values that are not the chart. + * @namespace dc_graph + * @version 0.4.0 + * @example + * // Example chaining + * chart.width(600) + * .height(400) + * .nodeDimension(nodeDim) + * .nodeGroup(nodeGroup); + */ + +var dc_graph = { + version: '0.4.0', + constants: { + CHART_CLASS: 'dc-graph' + } +}; + +function get_original(x) { + return x.orig; +} + +function identity(x) { + return x; +}; + +var property = function (defaultValue, unwrap) { + if(unwrap === undefined) + unwrap = get_original; + else if(unwrap === false) + unwrap = identity; + var value = defaultValue, react = null; + var cascade = []; + var ret = function (_) { + if (!arguments.length) { + return value; + } + if(react) + react(_); + value = _; + return this; + }; + ret.cascade = function (n, f) { + for(var i = 0; i n) { + cascade.splice(i, 0, {n: n, f: f}); + return ret; + } + } + cascade.push({n: n, f: f}); + return ret; + }; + ret._eval = function(o, n) { + if(n===0 || !cascade.length) + return dc_graph.functor_wrap(ret(), unwrap)(o); + else { + var last = cascade[n-1]; + return last.f(o, function() { + return ret._eval(o, n-1); + }); + } + }; + ret.eval = function(o) { + return ret._eval(o, cascade.length); + }; + ret.react = function(_) { + if (!arguments.length) { + return react; + } + react = _; + return this; + }; + return ret; +}; + +function deprecated_property(message, defaultValue) { + var prop = property(defaultValue); + var ret = function() { + if(arguments.length) { + console.warn(message); + prop.apply(property, arguments); + return this; + } + return prop(); + }; + ['cascade', '_eval', 'eval', 'react'].forEach(function(method) { + ret[method] = prop[method]; + }); + return ret; +} + +// http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript +function uuid() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); + return v.toString(16); + }); +} + // create or re-use objects in a map, delete the ones that were not reused function regenerate_objects(preserved, list, key, assign, create, destroy) { if(!create) create = function(k, o) { }; @@ -41,152 +151,323 @@ function regenerate_objects(preserved, list, key, assign, create, destroy) { return wlist; } -importScripts('cola.js'); -importScripts('d3.js'); +/** + * `dc_graph.graphviz_attrs defines a basic set of attributes which layout engines should + * implement - although these are not // required, they make it easier for clients and + * behaviors (like expand_collapse) to work with // multiple layout engines // these + * attributes are {@link http://www.graphviz.org/doc/info/attrs.html from graphviz} + * @class graphviz_attrs + * @memberof dc_graph + * @return {Object} + **/ +dc_graph.graphviz_attrs = function() { + return { + /** + * Direction to draw ranks. + * @method rankdir + * @memberof dc_graph.graphviz_attrs + * @instance + * @param {String} [rankdir='TB'] 'TB', 'LR', 'BT', or 'RL' + **/ + rankdir: property('TB'), + /** + * Spacing in between ranks. + * @method ranksep + * @memberof dc_graph.graphviz_attrs + * @instnace + * @param {String} [ranksep=40] + **/ + ranksep: property(40) + }; +}; -var _d3cola = null, _tick, _stop; +/** + * `dc_graph.cola_layout` is an adaptor for cola.js layouts in dc.graph.js + * @class cola_layout + * @memberof dc_graph + * @param {String} [id=uuid()] - Unique identifier + * @return {dc_graph.cola_layout} + **/ +dc_graph.cola_layout = function(id) { + var _layoutId = id || uuid(); + var _d3cola = null; + var _dispatch = d3.dispatch('tick', 'start', 'end'); + var _flowLayout; + // node and edge objects shared with cola.js, preserved from one iteration + // to the next (as long as the object is still in the layout) + var _nodes = {}, _edges = {}; -function init_d3cola(width, height, handleDisconnected, lengthStrategy, baseLength, flowLayout, tickSize) { - _d3cola = cola.d3adaptor() - .avoidOverlaps(true) - .size([width, height]) - .handleDisconnected(handleDisconnected); - if(_d3cola.tickSize) // non-standard - _d3cola.tickSize(tickSize); + function init(options) { + // width, height, handleDisconnected, lengthStrategy, baseLength, flowLayout, tickSize + _d3cola = cola.d3adaptor() + .avoidOverlaps(true) + .size([options.width, options.height]) + .handleDisconnected(options.handleDisconnected); + if(_d3cola.tickSize) // non-standard + _d3cola.tickSize(options.tickSize); - switch(lengthStrategy) { + switch(options.lengthStrategy) { case 'symmetric': - _d3cola.symmetricDiffLinkLengths(baseLength); + _d3cola.symmetricDiffLinkLengths(options.baseLength); break; case 'jaccard': - _d3cola.jaccardLinkLengths(baseLength); + _d3cola.jaccardLinkLengths(options.baseLength); break; case 'individual': _d3cola.linkDistance(function(e) { - return e.dcg_edgeLength || baseLength; + return e.dcg_edgeLength || options.baseLength; }); break; case 'none': default: - } - if(flowLayout) { - _d3cola.flowLayout(flowLayout.axis, flowLayout.minSeparation); - } - -} - -// node and edge objects shared with cola.js, preserved from one iteration -// to the next (as long as the object is still in the layout) -var _nodes = {}, _edges = {}; - -function data_d3cola(nodes, edges, constraints, opts) { - var wnodes = regenerate_objects(_nodes, nodes, function(v) { - return v.dcg_nodeKey; - }, function(v1, v) { - v1.dcg_nodeKey = v.dcg_nodeKey; - v1.width = v.width; - v1.height = v.height; - v1.fixed = !!v.dgc_nodeFixed; - - if(typeof v.dgc_nodeFixed === 'object') { - v1.x = v.dgc_nodeFixed.x; - v1.y = v.dgc_nodeFixed.y; } - else { - // should we support e.g. null to unset x,y? - if(v.x !== undefined) - v1.x = v.x; - if(v.y !== undefined) - v1.y = v.y; + if(options.flowLayout) { + _d3cola.flowLayout(options.flowLayout.axis, options.flowLayout.minSeparation); } - }); - var wedges = regenerate_objects(_edges, edges, function(e) { - return e.dcg_edgeKey; - }, function(e1, e) { - e1.dcg_edgeKey = e.dcg_edgeKey; - // cola edges can work with indices or with object references - // but it will replace indices with object references - e1.source = _nodes[e.dcg_edgeSource]; - e1.target = _nodes[e.dcg_edgeTarget]; - e1.dcg_edgeLength = e.dcg_edgeLength; - }); + } - // cola needs each node object to have an index property - wnodes.forEach(function(v, i) { - v.index = i; - }); + function data(nodes, edges, constraints, options) { + var wnodes = regenerate_objects(_nodes, nodes, function(v) { + return v.dcg_nodeKey; + }, function(v1, v) { + v1.dcg_nodeKey = v.dcg_nodeKey; + v1.width = v.width; + v1.height = v.height; + v1.fixed = !!v.dgc_nodeFixed; - var groups = null; - if(opts.groupConnected) { - var components = cola.separateGraphs(wnodes, wedges); - groups = components.map(function(g) { - return {leaves: g.array.map(function(n) { return n.index; })}; + if(typeof v.dgc_nodeFixed === 'object') { + v1.x = v.dgc_nodeFixed.x; + v1.y = v.dgc_nodeFixed.y; + } + else { + // should we support e.g. null to unset x,y? + if(v.x !== undefined) + v1.x = v.x; + if(v.y !== undefined) + v1.y = v.y; + } }); - } + var wedges = regenerate_objects(_edges, edges, function(e) { + return e.dcg_edgeKey; + }, function(e1, e) { + e1.dcg_edgeKey = e.dcg_edgeKey; + // cola edges can work with indices or with object references + // but it will replace indices with object references + e1.source = _nodes[e.dcg_edgeSource]; + e1.target = _nodes[e.dcg_edgeTarget]; + e1.dcg_edgeLength = e.dcg_edgeLength; + }); + + // cola needs each node object to have an index property + wnodes.forEach(function(v, i) { + v.index = i; + }); + + var groups = null; + if(options.groupConnected) { + var components = cola.separateGraphs(wnodes, wedges); + groups = components.map(function(g) { + return {leaves: g.array.map(function(n) { return n.index; })}; + }); + } - function postResponseState(response) { - postMessage({ - response: response, - args: { - nodes: wnodes, - edges: wedges.map(function(e) { + function dispatchState(event) { + _dispatch[event]( + wnodes, + wedges.map(function(e) { return {dcg_edgeKey: e.dcg_edgeKey}; }) - } + ); + } + _d3cola.on('tick', /* _tick = */ function() { + dispatchState('tick'); + }).on('start', function() { + _dispatch.start(); + }).on('end', /* _done = */ function() { + dispatchState('end'); }); + _d3cola.nodes(wnodes) + .links(wedges) + .constraints(constraints) + .groups(groups); } - _d3cola.on('tick', _tick = function() { - postResponseState('tick'); - }).on('start', function() { - postMessage({response: 'start'}); - }).on('end', _stop = function() { - postResponseState('end'); + + function start(options) { + _d3cola.start(options.initialUnconstrainedIterations, + options.initialUserConstraintIterations, + options.initialAllConstraintsIterations, + options.gridSnapIterations); + } + + function stop() { + _d3cola.stop(); + } + + var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz); + graphviz.rankdir(null); + + var engine = Object.assign(graphviz, { + layoutAlgorithm: function() { + return 'cola'; + }, + layoutId: function() { + return _layoutId; + }, + parent: property(null), + on: function(event, f) { + _dispatch.on(event, f); + return this; + }, + init: function(options) { + this.optionNames().forEach(function(option) { + options[option] = options[option] || this[option](); + }.bind(this)); + init(options); + return this; + }, + data: function(nodes, edges, constraints, options) { + data(nodes, edges, constraints, options); + }, + start: function(options) { + start(options); + }, + stop: function() { + stop(); + }, + optionNames: function() { + return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize'] + .concat(graphviz_keys); + }, + populateLayoutNode: function() {}, + populateLayoutEdge: function() {}, + /** + * Instructs cola.js to fit the connected components. + * @method handleDisconnected + * @memberof dc_graph.cola_layout + * @instance + * @param {Boolean} [handleDisconnected=true] + * @return {Boolean} + * @return {dc_graph.cola_layout} + **/ + handleDisconnected: property(true), + /** + * Currently, three strategies are supported for specifying the lengths of edges: + * * 'individual' - uses the `edgeLength` for each edge. If it returns falsy, uses the + * `baseLength` + * * 'symmetric', 'jaccard' - compute the edge length based on the graph structure around + * the edge. See + * {@link https://github.com/tgdwyer/WebCola/wiki/link-lengths the cola.js wiki} + * for more details. + * 'none' - no edge lengths will be specified + * @method lengthStrategy + * @memberof dc_graph.cola_layout + * @instance + * @param {Function|String} [lengthStrategy='symmetric'] + * @return {Function|String} + * @return {dc_graph.cola_layout} + **/ + lengthStrategy: property('symmetric'), + /** + * Gets or sets the default edge length (in pixels) when the `.lengthStrategy` is + * 'individual', and the base value to be multiplied for 'symmetric' and 'jaccard' edge + * lengths. + * @method baseLength + * @memberof dc_graph.cola_layout + * @instance + * @param {Number} [baseLength=30] + * @return {Number} + * @return {dc_graph.cola_layout} + **/ + baseLength: property(30), + /** + * If `flowLayout` is set, it determines the axis and separation for + * {@link http://marvl.infotech.monash.edu/webcola/doc/classes/cola.layout.html#flowlayout cola flow layout}. + * If it is not set, `flowLayout` will be calculated from the {@link dc_graph.graphviz_attrs#rankdir rankdir} + * and {@link dc_graph.graphviz_attrs#ranksep ranksep}; if `rankdir` is also null (the + * default for cola layout), then there will be no flow. + * @method flowLayout + * @memberof dc_graph.cola_layout + * @instance + * @param {Object} [flowLayout=null] + * @example + * // No flow (default) + * chart.flowLayout(null) + * // flow in x with min separation 200 + * chart.flowLayout({axis: 'x', minSeparation: 200}) + **/ + flowLayout: function(flow) { + if(!arguments.length) { + if(_flowLayout) + return _flowLayout; + var dir = engine.rankdir(); + if(!dir) + return null; + var axis = (dir === 'LR' || dir === 'RL') ? 'x' : 'y'; + return { + axis: axis, + minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2 + }; + } + _flowLayout = flow; + return this; + }, + tickSize: property(1) }); - _d3cola.nodes(wnodes) - .links(wedges) - .constraints(constraints) - .groups(groups); -} + return engine; +}; -function start_d3cola(initialUnconstrainedIterations, - initialUserConstraintIterations, - initialAllConstraintsIterations, - gridSnapIterations) { - _d3cola.start(initialUnconstrainedIterations, - initialUserConstraintIterations, - initialAllConstraintsIterations, - gridSnapIterations); -} +dc_graph.cola_layout.scripts = ['d3.js', 'cola.js']; -function stop_d3cola() { - _d3cola.stop(); +var _layouts; + +function postResponse(event, layoutId) { + return function() { + var message = { + response: event, + layoutId: layoutId + }; + message.args = Array.prototype.slice.call(arguments); + postMessage(message); + }; } onmessage = function(e) { var args = e.data.args; switch(e.data.command) { case 'init': - init_d3cola(args.width, args.height, args.handleDisconnected, - args.lengthStrategy, args.baseLength, args.flowLayout, - args.tickSize); + // find a function under dc_graph that has `scripts` + var layout_name; + for(var name in dc_graph) { + if(typeof dc_graph[name] === 'function' && dc_graph[name].scripts) + layout_name = name; + } + if(!_layouts) { + _layouts = {}; + importScripts.apply(null, dc_graph[layout_name].scripts); + } + + _layouts[args.layoutId] = dc_graph[layout_name]() + .on('tick', postResponse('tick', args.layoutId)) + .on('start', postResponse('start', args.layoutId)) + .on('end', postResponse('end', args.layoutId)) + .init(args.options); break; case 'data': - data_d3cola(args.nodes, args.edges, args.constraints, args.opts); + if(_layouts) + _layouts[args.layoutId].data(args.nodes, args.edges, args.constraints, args.options); break; case 'start': - if(args.initialOnly) { - if(args.showLayoutSteps) - _tick(); - _stop(); - } - else - start_d3cola(args.initialUnconstrainedIterations, - args.initialUserConstraintIterations, - args.initialAllConstraintsIterations, - args.gridSnapIterationse); + // if(args.initialOnly) { + // if(args.showLayoutSteps) + // _tick(); + // _done(); + // } + // else + _layouts[args.layoutId].start(args.options); break; case 'stop': - stop_d3cola(); + if(_layouts) + _layouts[args.layoutId].stop(); break; } }; diff --git a/dc.graph.cola.worker.js.map b/dc.graph.cola.worker.js.map index f6d22721..c5774710 100644 --- a/dc.graph.cola.worker.js.map +++ b/dc.graph.cola.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/generate_objects.js","src/cola.worker.js"],"names":[],"mappings":"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","file":"dc.graph.cola.worker.js","sourcesContent":["// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, key, assign, create, destroy) {\n if(!create) create = function(k, o) { };\n if(!destroy) destroy = function(k) { };\n var keep = {};\n function wrap(o) {\n var k = key(o);\n if(!preserved[k])\n create(k, preserved[k] = {}, o);\n var o1 = preserved[k];\n assign(o1, o);\n keep[k] = true;\n return o1;\n }\n var wlist = list.map(wrap);\n // delete any objects from last round that are no longer used\n for(var k in preserved)\n if(!keep[k]) {\n destroy(k, preserved[k]);\n delete preserved[k];\n }\n return wlist;\n}\n","importScripts('cola.js');\nimportScripts('d3.js');\n\nvar _d3cola = null, _tick, _stop;\n\nfunction init_d3cola(width, height, handleDisconnected, lengthStrategy, baseLength, flowLayout, tickSize) {\n _d3cola = cola.d3adaptor()\n .avoidOverlaps(true)\n .size([width, height])\n .handleDisconnected(handleDisconnected);\n if(_d3cola.tickSize) // non-standard\n _d3cola.tickSize(tickSize);\n\n switch(lengthStrategy) {\n case 'symmetric':\n _d3cola.symmetricDiffLinkLengths(baseLength);\n break;\n case 'jaccard':\n _d3cola.jaccardLinkLengths(baseLength);\n break;\n case 'individual':\n _d3cola.linkDistance(function(e) {\n return e.dcg_edgeLength || baseLength;\n });\n break;\n case 'none':\n default:\n }\n if(flowLayout) {\n _d3cola.flowLayout(flowLayout.axis, flowLayout.minSeparation);\n }\n\n}\n\n// node and edge objects shared with cola.js, preserved from one iteration\n// to the next (as long as the object is still in the layout)\nvar _nodes = {}, _edges = {};\n\nfunction data_d3cola(nodes, edges, constraints, opts) {\n var wnodes = regenerate_objects(_nodes, nodes, function(v) {\n return v.dcg_nodeKey;\n }, function(v1, v) {\n v1.dcg_nodeKey = v.dcg_nodeKey;\n v1.width = v.width;\n v1.height = v.height;\n v1.fixed = !!v.dgc_nodeFixed;\n\n if(typeof v.dgc_nodeFixed === 'object') {\n v1.x = v.dgc_nodeFixed.x;\n v1.y = v.dgc_nodeFixed.y;\n }\n else {\n // should we support e.g. null to unset x,y?\n if(v.x !== undefined)\n v1.x = v.x;\n if(v.y !== undefined)\n v1.y = v.y;\n }\n });\n var wedges = regenerate_objects(_edges, edges, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n // cola edges can work with indices or with object references\n // but it will replace indices with object references\n e1.source = _nodes[e.dcg_edgeSource];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n // cola needs each node object to have an index property\n wnodes.forEach(function(v, i) {\n v.index = i;\n });\n\n var groups = null;\n if(opts.groupConnected) {\n var components = cola.separateGraphs(wnodes, wedges);\n groups = components.map(function(g) {\n return {leaves: g.array.map(function(n) { return n.index; })};\n });\n }\n\n function postResponseState(response) {\n postMessage({\n response: response,\n args: {\n nodes: wnodes,\n edges: wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n }\n });\n }\n _d3cola.on('tick', _tick = function() {\n postResponseState('tick');\n }).on('start', function() {\n postMessage({response: 'start'});\n }).on('end', _stop = function() {\n postResponseState('end');\n });\n _d3cola.nodes(wnodes)\n .links(wedges)\n .constraints(constraints)\n .groups(groups);\n}\n\nfunction start_d3cola(initialUnconstrainedIterations,\n initialUserConstraintIterations,\n initialAllConstraintsIterations,\n gridSnapIterations) {\n _d3cola.start(initialUnconstrainedIterations,\n initialUserConstraintIterations,\n initialAllConstraintsIterations,\n gridSnapIterations);\n}\n\nfunction stop_d3cola() {\n _d3cola.stop();\n}\n\nonmessage = function(e) {\n var args = e.data.args;\n switch(e.data.command) {\n case 'init':\n init_d3cola(args.width, args.height, args.handleDisconnected,\n args.lengthStrategy, args.baseLength, args.flowLayout,\n args.tickSize);\n break;\n case 'data':\n data_d3cola(args.nodes, args.edges, args.constraints, args.opts);\n break;\n case 'start':\n if(args.initialOnly) {\n if(args.showLayoutSteps)\n _tick();\n _stop();\n }\n else\n start_d3cola(args.initialUnconstrainedIterations,\n args.initialUserConstraintIterations,\n args.initialAllConstraintsIterations,\n args.gridSnapIterationse);\n break;\n case 'stop':\n stop_d3cola();\n break;\n }\n};\n\n"]} \ No newline at end of file +{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/cola_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.cola.worker.js","sourcesContent":["/**\n * The entire dc.graph.js library is scoped under the **dc_graph** name space. It does not introduce\n * anything else into the global name space.\n *\n * Like in dc.js and most libraries built on d3, most `dc_graph` functions are designed to allow function chaining, meaning they return the current chart\n * instance whenever it is appropriate. The getter forms of functions do not participate in function\n * chaining because they return values that are not the chart.\n * @namespace dc_graph\n * @version 0.4.0\n * @example\n * // Example chaining\n * chart.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.4.0',\n constants: {\n CHART_CLASS: 'dc-graph'\n }\n};\n\nfunction get_original(x) {\n return x.orig;\n}\n\nfunction identity(x) {\n return x;\n};\n\nvar property = function (defaultValue, unwrap) {\n if(unwrap === undefined)\n unwrap = get_original;\n else if(unwrap === false)\n unwrap = identity;\n var value = defaultValue, react = null;\n var cascade = [];\n var ret = function (_) {\n if (!arguments.length) {\n return value;\n }\n if(react)\n react(_);\n value = _;\n return this;\n };\n ret.cascade = function (n, f) {\n for(var i = 0; i n) {\n cascade.splice(i, 0, {n: n, f: f});\n return ret;\n }\n }\n cascade.push({n: n, f: f});\n return ret;\n };\n ret._eval = function(o, n) {\n if(n===0 || !cascade.length)\n return dc_graph.functor_wrap(ret(), unwrap)(o);\n else {\n var last = cascade[n-1];\n return last.f(o, function() {\n return ret._eval(o, n-1);\n });\n }\n };\n ret.eval = function(o) {\n return ret._eval(o, cascade.length);\n };\n ret.react = function(_) {\n if (!arguments.length) {\n return react;\n }\n react = _;\n return this;\n };\n return ret;\n};\n\nfunction deprecated_property(message, defaultValue) {\n var prop = property(defaultValue);\n var ret = function() {\n if(arguments.length) {\n console.warn(message);\n prop.apply(property, arguments);\n return this;\n }\n return prop();\n };\n ['cascade', '_eval', 'eval', 'react'].forEach(function(method) {\n ret[method] = prop[method];\n });\n return ret;\n}\n\n// http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\nfunction uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, key, assign, create, destroy) {\n if(!create) create = function(k, o) { };\n if(!destroy) destroy = function(k) { };\n var keep = {};\n function wrap(o) {\n var k = key(o);\n if(!preserved[k])\n create(k, preserved[k] = {}, o);\n var o1 = preserved[k];\n assign(o1, o);\n keep[k] = true;\n return o1;\n }\n var wlist = list.map(wrap);\n // delete any objects from last round that are no longer used\n for(var k in preserved)\n if(!keep[k]) {\n destroy(k, preserved[k]);\n delete preserved[k];\n }\n return wlist;\n}\n","/**\n * `dc_graph.graphviz_attrs defines a basic set of attributes which layout engines should\n * implement - although these are not // required, they make it easier for clients and\n * behaviors (like expand_collapse) to work with // multiple layout engines // these\n * attributes are {@link http://www.graphviz.org/doc/info/attrs.html from graphviz}\n * @class graphviz_attrs\n * @memberof dc_graph\n * @return {Object}\n **/\ndc_graph.graphviz_attrs = function() {\n return {\n /**\n * Direction to draw ranks.\n * @method rankdir\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [rankdir='TB'] 'TB', 'LR', 'BT', or 'RL'\n **/\n rankdir: property('TB'),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instnace\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.cola_layout` is an adaptor for cola.js layouts in dc.graph.js\n * @class cola_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.cola_layout}\n **/\ndc_graph.cola_layout = function(id) {\n var _layoutId = id || uuid();\n var _d3cola = null;\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n var _flowLayout;\n // node and edge objects shared with cola.js, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n\n function init(options) {\n // width, height, handleDisconnected, lengthStrategy, baseLength, flowLayout, tickSize\n _d3cola = cola.d3adaptor()\n .avoidOverlaps(true)\n .size([options.width, options.height])\n .handleDisconnected(options.handleDisconnected);\n if(_d3cola.tickSize) // non-standard\n _d3cola.tickSize(options.tickSize);\n\n switch(options.lengthStrategy) {\n case 'symmetric':\n _d3cola.symmetricDiffLinkLengths(options.baseLength);\n break;\n case 'jaccard':\n _d3cola.jaccardLinkLengths(options.baseLength);\n break;\n case 'individual':\n _d3cola.linkDistance(function(e) {\n return e.dcg_edgeLength || options.baseLength;\n });\n break;\n case 'none':\n default:\n }\n if(options.flowLayout) {\n _d3cola.flowLayout(options.flowLayout.axis, options.flowLayout.minSeparation);\n }\n }\n\n function data(nodes, edges, constraints, options) {\n var wnodes = regenerate_objects(_nodes, nodes, function(v) {\n return v.dcg_nodeKey;\n }, function(v1, v) {\n v1.dcg_nodeKey = v.dcg_nodeKey;\n v1.width = v.width;\n v1.height = v.height;\n v1.fixed = !!v.dgc_nodeFixed;\n\n if(typeof v.dgc_nodeFixed === 'object') {\n v1.x = v.dgc_nodeFixed.x;\n v1.y = v.dgc_nodeFixed.y;\n }\n else {\n // should we support e.g. null to unset x,y?\n if(v.x !== undefined)\n v1.x = v.x;\n if(v.y !== undefined)\n v1.y = v.y;\n }\n });\n var wedges = regenerate_objects(_edges, edges, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n // cola edges can work with indices or with object references\n // but it will replace indices with object references\n e1.source = _nodes[e.dcg_edgeSource];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n // cola needs each node object to have an index property\n wnodes.forEach(function(v, i) {\n v.index = i;\n });\n\n var groups = null;\n if(options.groupConnected) {\n var components = cola.separateGraphs(wnodes, wedges);\n groups = components.map(function(g) {\n return {leaves: g.array.map(function(n) { return n.index; })};\n });\n }\n\n function dispatchState(event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n _d3cola.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\n });\n _d3cola.nodes(wnodes)\n .links(wedges)\n .constraints(constraints)\n .groups(groups);\n }\n\n function start(options) {\n _d3cola.start(options.initialUnconstrainedIterations,\n options.initialUserConstraintIterations,\n options.initialAllConstraintsIterations,\n options.gridSnapIterations);\n }\n\n function stop() {\n _d3cola.stop();\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n graphviz.rankdir(null);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n parent: property(null),\n on: function(event, f) {\n _dispatch.on(event, f);\n return this;\n },\n init: function(options) {\n this.optionNames().forEach(function(option) {\n options[option] = options[option] || this[option]();\n }.bind(this));\n init(options);\n return this;\n },\n data: function(nodes, edges, constraints, options) {\n data(nodes, edges, constraints, options);\n },\n start: function(options) {\n start(options);\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize']\n .concat(graphviz_keys);\n },\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {},\n /**\n * Instructs cola.js to fit the connected components.\n * @method handleDisconnected\n * @memberof dc_graph.cola_layout\n * @instance\n * @param {Boolean} [handleDisconnected=true]\n * @return {Boolean}\n * @return {dc_graph.cola_layout}\n **/\n handleDisconnected: property(true),\n /**\n * Currently, three strategies are supported for specifying the lengths of edges:\n * * 'individual' - uses the `edgeLength` for each edge. If it returns falsy, uses the\n * `baseLength`\n * * 'symmetric', 'jaccard' - compute the edge length based on the graph structure around\n * the edge. See\n * {@link https://github.com/tgdwyer/WebCola/wiki/link-lengths the cola.js wiki}\n * for more details.\n * 'none' - no edge lengths will be specified\n * @method lengthStrategy\n * @memberof dc_graph.cola_layout\n * @instance\n * @param {Function|String} [lengthStrategy='symmetric']\n * @return {Function|String}\n * @return {dc_graph.cola_layout}\n **/\n lengthStrategy: property('symmetric'),\n /**\n * Gets or sets the default edge length (in pixels) when the `.lengthStrategy` is\n * 'individual', and the base value to be multiplied for 'symmetric' and 'jaccard' edge\n * lengths.\n * @method baseLength\n * @memberof dc_graph.cola_layout\n * @instance\n * @param {Number} [baseLength=30]\n * @return {Number}\n * @return {dc_graph.cola_layout}\n **/\n baseLength: property(30),\n /**\n * If `flowLayout` is set, it determines the axis and separation for\n * {@link http://marvl.infotech.monash.edu/webcola/doc/classes/cola.layout.html#flowlayout cola flow layout}.\n * If it is not set, `flowLayout` will be calculated from the {@link dc_graph.graphviz_attrs#rankdir rankdir}\n * and {@link dc_graph.graphviz_attrs#ranksep ranksep}; if `rankdir` is also null (the\n * default for cola layout), then there will be no flow.\n * @method flowLayout\n * @memberof dc_graph.cola_layout\n * @instance\n * @param {Object} [flowLayout=null]\n * @example\n * // No flow (default)\n * chart.flowLayout(null)\n * // flow in x with min separation 200\n * chart.flowLayout({axis: 'x', minSeparation: 200})\n **/\n flowLayout: function(flow) {\n if(!arguments.length) {\n if(_flowLayout)\n return _flowLayout;\n var dir = engine.rankdir();\n if(!dir)\n return null;\n var axis = (dir === 'LR' || dir === 'RL') ? 'x' : 'y';\n return {\n axis: axis,\n minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2\n };\n }\n _flowLayout = flow;\n return this;\n },\n tickSize: property(1)\n });\n return engine;\n};\n\ndc_graph.cola_layout.scripts = ['d3.js', 'cola.js'];\n","var _layouts;\n\nfunction postResponse(event, layoutId) {\n return function() {\n var message = {\n response: event,\n layoutId: layoutId\n };\n message.args = Array.prototype.slice.call(arguments);\n postMessage(message);\n };\n}\n\nonmessage = function(e) {\n var args = e.data.args;\n switch(e.data.command) {\n case 'init':\n // find a function under dc_graph that has `scripts`\n var layout_name;\n for(var name in dc_graph) {\n if(typeof dc_graph[name] === 'function' && dc_graph[name].scripts)\n layout_name = name;\n }\n if(!_layouts) {\n _layouts = {};\n importScripts.apply(null, dc_graph[layout_name].scripts);\n }\n\n _layouts[args.layoutId] = dc_graph[layout_name]()\n .on('tick', postResponse('tick', args.layoutId))\n .on('start', postResponse('start', args.layoutId))\n .on('end', postResponse('end', args.layoutId))\n .init(args.options);\n break;\n case 'data':\n if(_layouts)\n _layouts[args.layoutId].data(args.nodes, args.edges, args.constraints, args.options);\n break;\n case 'start':\n // if(args.initialOnly) {\n // if(args.showLayoutSteps)\n // _tick();\n // _done();\n // }\n // else\n _layouts[args.layoutId].start(args.options);\n break;\n case 'stop':\n if(_layouts)\n _layouts[args.layoutId].stop();\n break;\n }\n};\n\n"]} \ No newline at end of file diff --git a/dc.graph.dagre.worker.js b/dc.graph.dagre.worker.js index f79e1759..7bf9a6a1 100644 --- a/dc.graph.dagre.worker.js +++ b/dc.graph.dagre.worker.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.3.16 + * dc.graph 0.4.0 * http://dc-js.github.io/dc.graph.js/ * Copyright 2015-2016 AT&T Intellectual Property & the dc.graph.js Developers * https://github.com/dc-js/dc.graph.js/blob/master/AUTHORS @@ -17,6 +17,116 @@ * limitations under the License. * */ +/** + * The entire dc.graph.js library is scoped under the **dc_graph** name space. It does not introduce + * anything else into the global name space. + * + * Like in dc.js and most libraries built on d3, most `dc_graph` functions are designed to allow function chaining, meaning they return the current chart + * instance whenever it is appropriate. The getter forms of functions do not participate in function + * chaining because they return values that are not the chart. + * @namespace dc_graph + * @version 0.4.0 + * @example + * // Example chaining + * chart.width(600) + * .height(400) + * .nodeDimension(nodeDim) + * .nodeGroup(nodeGroup); + */ + +var dc_graph = { + version: '0.4.0', + constants: { + CHART_CLASS: 'dc-graph' + } +}; + +function get_original(x) { + return x.orig; +} + +function identity(x) { + return x; +}; + +var property = function (defaultValue, unwrap) { + if(unwrap === undefined) + unwrap = get_original; + else if(unwrap === false) + unwrap = identity; + var value = defaultValue, react = null; + var cascade = []; + var ret = function (_) { + if (!arguments.length) { + return value; + } + if(react) + react(_); + value = _; + return this; + }; + ret.cascade = function (n, f) { + for(var i = 0; i n) { + cascade.splice(i, 0, {n: n, f: f}); + return ret; + } + } + cascade.push({n: n, f: f}); + return ret; + }; + ret._eval = function(o, n) { + if(n===0 || !cascade.length) + return dc_graph.functor_wrap(ret(), unwrap)(o); + else { + var last = cascade[n-1]; + return last.f(o, function() { + return ret._eval(o, n-1); + }); + } + }; + ret.eval = function(o) { + return ret._eval(o, cascade.length); + }; + ret.react = function(_) { + if (!arguments.length) { + return react; + } + react = _; + return this; + }; + return ret; +}; + +function deprecated_property(message, defaultValue) { + var prop = property(defaultValue); + var ret = function() { + if(arguments.length) { + console.warn(message); + prop.apply(property, arguments); + return this; + } + return prop(); + }; + ['cascade', '_eval', 'eval', 'react'].forEach(function(method) { + ret[method] = prop[method]; + }); + return ret; +} + +// http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript +function uuid() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); + return v.toString(16); + }); +} + // create or re-use objects in a map, delete the ones that were not reused function regenerate_objects(preserved, list, key, assign, create, destroy) { if(!create) create = function(k, o) { }; @@ -41,103 +151,202 @@ function regenerate_objects(preserved, list, key, assign, create, destroy) { return wlist; } -importScripts('dagre.js'); +/** + * `dc_graph.graphviz_attrs defines a basic set of attributes which layout engines should + * implement - although these are not // required, they make it easier for clients and + * behaviors (like expand_collapse) to work with // multiple layout engines // these + * attributes are {@link http://www.graphviz.org/doc/info/attrs.html from graphviz} + * @class graphviz_attrs + * @memberof dc_graph + * @return {Object} + **/ +dc_graph.graphviz_attrs = function() { + return { + /** + * Direction to draw ranks. + * @method rankdir + * @memberof dc_graph.graphviz_attrs + * @instance + * @param {String} [rankdir='TB'] 'TB', 'LR', 'BT', or 'RL' + **/ + rankdir: property('TB'), + /** + * Spacing in between ranks. + * @method ranksep + * @memberof dc_graph.graphviz_attrs + * @instnace + * @param {String} [ranksep=40] + **/ + ranksep: property(40) + }; +}; -var _dagreGraph = null, _tick, _done; +/** + * `dc_graph.dagre_layout` is an adaptor for dagre.js layouts in dc.graph.js + * + * In addition to the below layout attributes, `dagre_layout` also implements the attributes from + * {@link dc_graph.graphviz_attrs graphviz_attrs} + * @class dagre_layout + * @memberof dc_graph + * @param {String} [id=uuid()] - Unique identifier + * @return {dc_graph.dagre_layout} + **/ +dc_graph.dagre_layout = function(id) { + var _layoutId = id || uuid(); + var _dagreGraph = null, _tick, _done; + var _dispatch = d3.dispatch('tick', 'start', 'end'); + // node and edge objects preserved from one iteration + // to the next (as long as the object is still in the layout) + var _nodes = {}, _edges = {}; -function init_dagre(width, height, rankdir) { - // Create a new directed graph - _dagreGraph = new dagre.graphlib.Graph({multigraph: true}); + function init(options) { + // Create a new directed graph + _dagreGraph = new dagre.graphlib.Graph({multigraph: true}); - // Set an object for the graph label - _dagreGraph.setGraph({rankdir: rankdir}); + // Set an object for the graph label + _dagreGraph.setGraph({rankdir: options.rankdir}); - // Default to assigning a new object as a label for each new edge. - _dagreGraph.setDefaultEdgeLabel(function() { return {}; }); -} + // Default to assigning a new object as a label for each new edge. + _dagreGraph.setDefaultEdgeLabel(function() { return {}; }); + } -// node and edge objects shared with cola.js, preserved from one iteration -// to the next (as long as the object is still in the layout) -var _nodes = {}, _edges = {}; - -function data_dagre(nodes, edges, constraints, opts) { - var wnodes = regenerate_objects(_nodes, nodes, function(v) { - return v.dcg_nodeKey; - }, function(v1, v) { - v1.dcg_nodeKey = v.dcg_nodeKey; - v1.width = v.width; - v1.height = v.height; - }, function(k, o) { - _dagreGraph.setNode(k, o); - }, function(k) { - _dagreGraph.removeNode(k); - }); - var wedges = regenerate_objects(_edges, edges, function(e) { - return e.dcg_edgeKey; - }, function(e1, e) { - e1.dcg_edgeKey = e.dcg_edgeKey; - e1.dcg_edgeSource = e.dcg_edgeSource; - e1.dcg_edgeTarget = e.dcg_edgeTarget; - }, function(k, o, e) { - _dagreGraph.setEdge(e.dcg_edgeSource, e.dcg_edgeTarget, o); - }, function(k, e) { - _dagreGraph.removeEdge(e.dcg_edgeSource, e.dcg_edgeTarget, e.dcg_edgeKey); - }); + function data(nodes, edges, constraints, options) { + var wnodes = regenerate_objects(_nodes, nodes, function(v) { + return v.dcg_nodeKey; + }, function(v1, v) { + v1.dcg_nodeKey = v.dcg_nodeKey; + v1.width = v.width; + v1.height = v.height; + }, function(k, o) { + _dagreGraph.setNode(k, o); + }, function(k) { + _dagreGraph.removeNode(k); + }); + var wedges = regenerate_objects(_edges, edges, function(e) { + return e.dcg_edgeKey; + }, function(e1, e) { + e1.dcg_edgeKey = e.dcg_edgeKey; + e1.dcg_edgeSource = e.dcg_edgeSource; + e1.dcg_edgeTarget = e.dcg_edgeTarget; + }, function(k, o, e) { + _dagreGraph.setEdge(e.dcg_edgeSource, e.dcg_edgeTarget, o); + }, function(k, e) { + _dagreGraph.removeEdge(e.dcg_edgeSource, e.dcg_edgeTarget, e.dcg_edgeKey); + }); - function postResponseState(response) { - postMessage({ - response: response, - args: { - nodes: wnodes, - edges: wedges.map(function(e) { + function dispatchState(event) { + _dispatch[event]( + wnodes, + wedges.map(function(e) { return {dcg_edgeKey: e.dcg_edgeKey}; }) - } - }); + ); + } + _tick = function() { + dispatchState('tick'); + }; + _done = function() { + dispatchState('end'); + }; + } + + function start(options) { + _dispatch.start(); + dagre.layout(_dagreGraph); + _done(); } - _tick = function() { - postResponseState('tick'); - }; - _done = function() { - postResponseState('end'); - }; -} -function start_dagre(initialUnconstrainedIterations, - initialUserConstraintIterations, - initialAllConstraintsIterations, - gridSnapIterations) { - postMessage({response: 'start'}); - dagre.layout(_dagreGraph); - _done(); + function stop() { + } + + var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz); + return Object.assign(graphviz, { + layoutAlgorithm: function() { + return 'dagre'; + }, + layoutId: function() { + return _layoutId; + }, + on: function(event, f) { + _dispatch.on(event, f); + return this; + }, + init: function(options) { + this.optionNames().forEach(function(option) { + options[option] = options[option] || this[option](); + }.bind(this)); + init(options); + return this; + }, + data: function(nodes, edges, constraints, options) { + data(nodes, edges, constraints, options); + }, + start: function(options) { + start(options); + }, + stop: function() { + stop(); + }, + optionNames: function() { + return graphviz_keys; + }, + populateLayoutNode: function() {}, + populateLayoutEdge: function() {} + }); } -function stop_dagre() { +dc_graph.dagre_layout.scripts = ['d3.js', 'dagre.js']; + +var _layouts; + +function postResponse(event, layoutId) { + return function() { + var message = { + response: event, + layoutId: layoutId + }; + message.args = Array.prototype.slice.call(arguments); + postMessage(message); + }; } onmessage = function(e) { var args = e.data.args; switch(e.data.command) { case 'init': - init_dagre(args.width, args.height, args.rankdir); + // find a function under dc_graph that has `scripts` + var layout_name; + for(var name in dc_graph) { + if(typeof dc_graph[name] === 'function' && dc_graph[name].scripts) + layout_name = name; + } + if(!_layouts) { + _layouts = {}; + importScripts.apply(null, dc_graph[layout_name].scripts); + } + + _layouts[args.layoutId] = dc_graph[layout_name]() + .on('tick', postResponse('tick', args.layoutId)) + .on('start', postResponse('start', args.layoutId)) + .on('end', postResponse('end', args.layoutId)) + .init(args.options); break; case 'data': - data_dagre(args.nodes, args.edges, args.constraints, args.opts); + if(_layouts) + _layouts[args.layoutId].data(args.nodes, args.edges, args.constraints, args.options); break; case 'start': - if(args.initialOnly) { - if(args.showLayoutSteps) - _tick(); - _done(); - } - else - start_dagre(args.initialUnconstrainedIterations, - args.initialUserConstraintIterations, - args.initialAllConstraintsIterations, - args.gridSnapIterationse); + // if(args.initialOnly) { + // if(args.showLayoutSteps) + // _tick(); + // _done(); + // } + // else + _layouts[args.layoutId].start(args.options); break; case 'stop': - stop_dagre(); + if(_layouts) + _layouts[args.layoutId].stop(); break; } }; diff --git a/dc.graph.dagre.worker.js.map b/dc.graph.dagre.worker.js.map index e5e7fcc9..da232670 100644 --- a/dc.graph.dagre.worker.js.map +++ b/dc.graph.dagre.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/generate_objects.js","src/dagre.worker.js"],"names":[],"mappings":"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","file":"dc.graph.dagre.worker.js","sourcesContent":["// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, key, assign, create, destroy) {\n if(!create) create = function(k, o) { };\n if(!destroy) destroy = function(k) { };\n var keep = {};\n function wrap(o) {\n var k = key(o);\n if(!preserved[k])\n create(k, preserved[k] = {}, o);\n var o1 = preserved[k];\n assign(o1, o);\n keep[k] = true;\n return o1;\n }\n var wlist = list.map(wrap);\n // delete any objects from last round that are no longer used\n for(var k in preserved)\n if(!keep[k]) {\n destroy(k, preserved[k]);\n delete preserved[k];\n }\n return wlist;\n}\n","importScripts('dagre.js');\n\nvar _dagreGraph = null, _tick, _done;\n\nfunction init_dagre(width, height, rankdir) {\n // Create a new directed graph\n _dagreGraph = new dagre.graphlib.Graph({multigraph: true});\n\n // Set an object for the graph label\n _dagreGraph.setGraph({rankdir: rankdir});\n\n // Default to assigning a new object as a label for each new edge.\n _dagreGraph.setDefaultEdgeLabel(function() { return {}; });\n}\n\n// node and edge objects shared with cola.js, preserved from one iteration\n// to the next (as long as the object is still in the layout)\nvar _nodes = {}, _edges = {};\n\nfunction data_dagre(nodes, edges, constraints, opts) {\n var wnodes = regenerate_objects(_nodes, nodes, function(v) {\n return v.dcg_nodeKey;\n }, function(v1, v) {\n v1.dcg_nodeKey = v.dcg_nodeKey;\n v1.width = v.width;\n v1.height = v.height;\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.dcg_edgeSource = e.dcg_edgeSource;\n e1.dcg_edgeTarget = e.dcg_edgeTarget;\n }, function(k, o, e) {\n _dagreGraph.setEdge(e.dcg_edgeSource, e.dcg_edgeTarget, o);\n }, function(k, e) {\n _dagreGraph.removeEdge(e.dcg_edgeSource, e.dcg_edgeTarget, e.dcg_edgeKey);\n });\n\n function postResponseState(response) {\n postMessage({\n response: response,\n args: {\n nodes: wnodes,\n edges: wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n }\n });\n }\n _tick = function() {\n postResponseState('tick');\n };\n _done = function() {\n postResponseState('end');\n };\n}\n\nfunction start_dagre(initialUnconstrainedIterations,\n initialUserConstraintIterations,\n initialAllConstraintsIterations,\n gridSnapIterations) {\n postMessage({response: 'start'});\n dagre.layout(_dagreGraph);\n _done();\n}\n\nfunction stop_dagre() {\n}\n\nonmessage = function(e) {\n var args = e.data.args;\n switch(e.data.command) {\n case 'init':\n init_dagre(args.width, args.height, args.rankdir);\n break;\n case 'data':\n data_dagre(args.nodes, args.edges, args.constraints, args.opts);\n break;\n case 'start':\n if(args.initialOnly) {\n if(args.showLayoutSteps)\n _tick();\n _done();\n }\n else\n start_dagre(args.initialUnconstrainedIterations,\n args.initialUserConstraintIterations,\n args.initialAllConstraintsIterations,\n args.gridSnapIterationse);\n break;\n case 'stop':\n stop_dagre();\n break;\n }\n};\n\n"]} \ No newline at end of file +{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/dagre_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.dagre.worker.js","sourcesContent":["/**\n * The entire dc.graph.js library is scoped under the **dc_graph** name space. It does not introduce\n * anything else into the global name space.\n *\n * Like in dc.js and most libraries built on d3, most `dc_graph` functions are designed to allow function chaining, meaning they return the current chart\n * instance whenever it is appropriate. The getter forms of functions do not participate in function\n * chaining because they return values that are not the chart.\n * @namespace dc_graph\n * @version 0.4.0\n * @example\n * // Example chaining\n * chart.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.4.0',\n constants: {\n CHART_CLASS: 'dc-graph'\n }\n};\n\nfunction get_original(x) {\n return x.orig;\n}\n\nfunction identity(x) {\n return x;\n};\n\nvar property = function (defaultValue, unwrap) {\n if(unwrap === undefined)\n unwrap = get_original;\n else if(unwrap === false)\n unwrap = identity;\n var value = defaultValue, react = null;\n var cascade = [];\n var ret = function (_) {\n if (!arguments.length) {\n return value;\n }\n if(react)\n react(_);\n value = _;\n return this;\n };\n ret.cascade = function (n, f) {\n for(var i = 0; i n) {\n cascade.splice(i, 0, {n: n, f: f});\n return ret;\n }\n }\n cascade.push({n: n, f: f});\n return ret;\n };\n ret._eval = function(o, n) {\n if(n===0 || !cascade.length)\n return dc_graph.functor_wrap(ret(), unwrap)(o);\n else {\n var last = cascade[n-1];\n return last.f(o, function() {\n return ret._eval(o, n-1);\n });\n }\n };\n ret.eval = function(o) {\n return ret._eval(o, cascade.length);\n };\n ret.react = function(_) {\n if (!arguments.length) {\n return react;\n }\n react = _;\n return this;\n };\n return ret;\n};\n\nfunction deprecated_property(message, defaultValue) {\n var prop = property(defaultValue);\n var ret = function() {\n if(arguments.length) {\n console.warn(message);\n prop.apply(property, arguments);\n return this;\n }\n return prop();\n };\n ['cascade', '_eval', 'eval', 'react'].forEach(function(method) {\n ret[method] = prop[method];\n });\n return ret;\n}\n\n// http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\nfunction uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, key, assign, create, destroy) {\n if(!create) create = function(k, o) { };\n if(!destroy) destroy = function(k) { };\n var keep = {};\n function wrap(o) {\n var k = key(o);\n if(!preserved[k])\n create(k, preserved[k] = {}, o);\n var o1 = preserved[k];\n assign(o1, o);\n keep[k] = true;\n return o1;\n }\n var wlist = list.map(wrap);\n // delete any objects from last round that are no longer used\n for(var k in preserved)\n if(!keep[k]) {\n destroy(k, preserved[k]);\n delete preserved[k];\n }\n return wlist;\n}\n","/**\n * `dc_graph.graphviz_attrs defines a basic set of attributes which layout engines should\n * implement - although these are not // required, they make it easier for clients and\n * behaviors (like expand_collapse) to work with // multiple layout engines // these\n * attributes are {@link http://www.graphviz.org/doc/info/attrs.html from graphviz}\n * @class graphviz_attrs\n * @memberof dc_graph\n * @return {Object}\n **/\ndc_graph.graphviz_attrs = function() {\n return {\n /**\n * Direction to draw ranks.\n * @method rankdir\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [rankdir='TB'] 'TB', 'LR', 'BT', or 'RL'\n **/\n rankdir: property('TB'),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instnace\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.dagre_layout` is an adaptor for dagre.js layouts in dc.graph.js\n *\n * In addition to the below layout attributes, `dagre_layout` also implements the attributes from\n * {@link dc_graph.graphviz_attrs graphviz_attrs}\n * @class dagre_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.dagre_layout}\n **/\ndc_graph.dagre_layout = function(id) {\n var _layoutId = id || uuid();\n var _dagreGraph = null, _tick, _done;\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n\n function init(options) {\n // Create a new directed graph\n _dagreGraph = new dagre.graphlib.Graph({multigraph: true});\n\n // Set an object for the graph label\n _dagreGraph.setGraph({rankdir: options.rankdir});\n\n // Default to assigning a new object as a label for each new edge.\n _dagreGraph.setDefaultEdgeLabel(function() { return {}; });\n }\n\n function data(nodes, edges, constraints, options) {\n var wnodes = regenerate_objects(_nodes, nodes, function(v) {\n return v.dcg_nodeKey;\n }, function(v1, v) {\n v1.dcg_nodeKey = v.dcg_nodeKey;\n v1.width = v.width;\n v1.height = v.height;\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.dcg_edgeSource = e.dcg_edgeSource;\n e1.dcg_edgeTarget = e.dcg_edgeTarget;\n }, function(k, o, e) {\n _dagreGraph.setEdge(e.dcg_edgeSource, e.dcg_edgeTarget, o);\n }, function(k, e) {\n _dagreGraph.removeEdge(e.dcg_edgeSource, e.dcg_edgeTarget, e.dcg_edgeKey);\n });\n\n function dispatchState(event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n _tick = function() {\n dispatchState('tick');\n };\n _done = function() {\n dispatchState('end');\n };\n }\n\n function start(options) {\n _dispatch.start();\n dagre.layout(_dagreGraph);\n _done();\n }\n\n function stop() {\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n return Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'dagre';\n },\n layoutId: function() {\n return _layoutId;\n },\n on: function(event, f) {\n _dispatch.on(event, f);\n return this;\n },\n init: function(options) {\n this.optionNames().forEach(function(option) {\n options[option] = options[option] || this[option]();\n }.bind(this));\n init(options);\n return this;\n },\n data: function(nodes, edges, constraints, options) {\n data(nodes, edges, constraints, options);\n },\n start: function(options) {\n start(options);\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return graphviz_keys;\n },\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n}\n\ndc_graph.dagre_layout.scripts = ['d3.js', 'dagre.js'];\n","var _layouts;\n\nfunction postResponse(event, layoutId) {\n return function() {\n var message = {\n response: event,\n layoutId: layoutId\n };\n message.args = Array.prototype.slice.call(arguments);\n postMessage(message);\n };\n}\n\nonmessage = function(e) {\n var args = e.data.args;\n switch(e.data.command) {\n case 'init':\n // find a function under dc_graph that has `scripts`\n var layout_name;\n for(var name in dc_graph) {\n if(typeof dc_graph[name] === 'function' && dc_graph[name].scripts)\n layout_name = name;\n }\n if(!_layouts) {\n _layouts = {};\n importScripts.apply(null, dc_graph[layout_name].scripts);\n }\n\n _layouts[args.layoutId] = dc_graph[layout_name]()\n .on('tick', postResponse('tick', args.layoutId))\n .on('start', postResponse('start', args.layoutId))\n .on('end', postResponse('end', args.layoutId))\n .init(args.options);\n break;\n case 'data':\n if(_layouts)\n _layouts[args.layoutId].data(args.nodes, args.edges, args.constraints, args.options);\n break;\n case 'start':\n // if(args.initialOnly) {\n // if(args.showLayoutSteps)\n // _tick();\n // _done();\n // }\n // else\n _layouts[args.layoutId].start(args.options);\n break;\n case 'stop':\n if(_layouts)\n _layouts[args.layoutId].stop();\n break;\n }\n};\n\n"]} \ No newline at end of file diff --git a/dc.graph.js b/dc.graph.js index 641a3b41..42713e50 100644 --- a/dc.graph.js +++ b/dc.graph.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.3.16 + * dc.graph 0.4.0 * http://dc-js.github.io/dc.graph.js/ * Copyright 2015-2016 AT&T Intellectual Property & the dc.graph.js Developers * https://github.com/dc-js/dc.graph.js/blob/master/AUTHORS @@ -28,7 +28,7 @@ * instance whenever it is appropriate. The getter forms of functions do not participate in function * chaining because they return values that are not the chart. * @namespace dc_graph - * @version 0.3.16 + * @version 0.4.0 * @example * // Example chaining * chart.width(600) @@ -38,12 +38,20 @@ */ var dc_graph = { - version: '0.3.16', + version: '0.4.0', constants: { CHART_CLASS: 'dc-graph' } }; +function get_original(x) { + return x.orig; +} + +function identity(x) { + return x; +}; + var property = function (defaultValue, unwrap) { if(unwrap === undefined) unwrap = get_original; @@ -98,6 +106,30 @@ var property = function (defaultValue, unwrap) { return ret; }; +function deprecated_property(message, defaultValue) { + var prop = property(defaultValue); + var ret = function() { + if(arguments.length) { + console.warn(message); + prop.apply(property, arguments); + return this; + } + return prop(); + }; + ['cascade', '_eval', 'eval', 'react'].forEach(function(method) { + ret[method] = prop[method]; + }); + return ret; +} + +// http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript +function uuid() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); + return v.toString(16); + }); +} + // i'm sure there's a word for this in haskell function conditional_properties(npred, epred, props) { function _if(pred, curr) { @@ -120,7 +152,6 @@ function conditional_properties(npred, epred, props) { return props2; } -var identity = function(x) { return x; }; function compose(f, g) { return function() { return f(g.apply(null, arguments)); @@ -140,10 +171,6 @@ dc_graph.functor_wrap = function (v, wrap) { }; }; -function get_original(x) { - return x.orig; -} - // we want to allow either values or functions to be passed to specify parameters. // if a function, the function needs a preprocessor to extract the original key/value // pair from the wrapper object we put it in. @@ -162,14 +189,6 @@ function clone(obj) { return target; } -// http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript -function uuid() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); - return v.toString(16); - }); -} - // because i don't think we need to bind edge point data (yet!) var bez_cmds = { 1: 'L', 2: 'Q', 3: 'C' @@ -206,31 +225,57 @@ Math.hypot = Math.hypot || function() { return Math.sqrt(y); }; +var script_path = function() { + var _path; + return function() { + if(_path === undefined) { + // adapted from http://stackoverflow.com/a/18283141/676195 + _path = null; // only try once + var filename = 'dc.graph.js'; + var scripts = document.getElementsByTagName('script'); + if (scripts && scripts.length > 0) { + for (var i in scripts) { + if (scripts[i].src && scripts[i].src.match(new RegExp(filename+'$'))) { + _path = scripts[i].src.replace(new RegExp('(.*)'+filename+'$'), '$1'); + break; + } + } + } + } + return _path; + }; +}(); + // arguably depth first search is a stupid algorithm to modularize - // there are many, many interesting moments to insert a behavior // and those end up being almost bigger than the function itself // this is an argument for providing a graph API which could make it // easy to just write a recursive function instead of using this -dc_graph.depth_first_traversal = function(callbacks) { // {init, root, row, tree, place, sib, push, pop, skip, finish} - return function(diagram, nodes, edges) { +dc_graph.depth_first_traversal = function(callbacks) { // {init, root, row, tree, place, sib, push, pop, skip, finish, nodeid, sourceid, targetid} + return function(nodes, edges) { callbacks.init && callbacks.init(); if(callbacks.tree) - edges = edges.filter(function(e) { return callbacks.tree(e.orig); }); + edges = edges.filter(function(e) { return callbacks.tree(e); }); var indegree = {}; var outmap = edges.reduce(function(m, e) { - var tail = diagram.edgeSource.eval(e), - head = diagram.edgeTarget.eval(e); + var tail = callbacks.sourceid(e), + head = callbacks.targetid(e); if(!m[tail]) m[tail] = []; m[tail].push(e); indegree[head] = (indegree[head] || 0) + 1; return m; }, {}); + var nmap = nodes.reduce(function(m, n) { + var key = callbacks.nodeid(n); + m[key] = n; + return m; + }, {}); var rows = []; var placed = {}; function place_tree(n, r) { - var key = diagram.nodeKey.eval(n); + var key = callbacks.nodeid(n); if(placed[key]) { callbacks.skip && callbacks.skip(n, indegree[key]); return; @@ -242,25 +287,28 @@ dc_graph.depth_first_traversal = function(callbacks) { // {init, root, row, tree placed[key] = true; if(outmap[key]) outmap[key].forEach(function(e, ei) { + var target = nmap[callbacks.targetid(e)]; if(ei && callbacks.sib) - callbacks.sib(false, outmap[key][ei-1].target, e.target); + callbacks.sib(false, nmap[callbacks.targetid(outmap[key][ei-1])], target); callbacks.push && callbacks.push(); - place_tree(e.target, r+1); + place_tree(target, r+1); }); callbacks.pop && callbacks.pop(n); } var roots; if(callbacks.root) - roots = nodes.filter(function(n) { return callbacks.root(n.orig); }); + roots = nodes.filter(function(n) { return callbacks.root(n); }); else { - roots = nodes.filter(function(n) { return !indegree[diagram.nodeKey.eval(n)]; }); + roots = nodes.filter(function(n) { return !indegree[callbacks.nodeid(n)]; }); + if(nodes.length && !roots.length) // all nodes are in a cycle + roots = [nodes[0]]; } roots.forEach(function(n, ni) { if(ni && callbacks.sib) callbacks.sib(true, roots[ni-1], n); callbacks.push && callbacks.push(); - place_tree(n, callbacks.row ? callbacks.row(n.orig) : 0); + place_tree(n, callbacks.row ? callbacks.row(n) : 0); }); callbacks.finish(rows); }; @@ -700,7 +748,7 @@ function bezier_point(points, t_) { * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}, * but it does not physically derive from it since so much is different about network * visualization versus conventional charts. - * @name diagram + * @class diagram * @memberof dc_graph * @param {String|node} parent - Any valid * {@link https://github.com/mbostock/d3/wiki/Selections#selecting-elements d3 single selector} @@ -714,7 +762,6 @@ dc_graph.diagram = function (parent, chartGroup) { // different enough from regular dc charts that we don't use bases var _chart = dc.marginMixin({}); var _svg = null, _defs = null, _g = null, _nodeLayer = null, _edgeLayer = null; - var _worker = null; var _dispatch = d3.dispatch('end', 'start', 'drawn'); var _nodes = {}, _edges = {}; // hold state between runs var _stats = {}; @@ -725,9 +772,22 @@ dc_graph.diagram = function (parent, chartGroup) { var _zoom, _xScale, _yScale; var _anchor, _chartGroup; + function deprecate_layout_algo_parameter(name) { + return function(value) { + if(!_chart.layoutEngine()) + _chart.layoutAlgorithm('cola', true); + console.warn('Warning: dc_graph.diagram."' + name + '"is deprecated. Call the corresponding method on the layout engine instead.'); + var engine = _chart.layoutEngine(); + if(engine.getEngine) + engine = engine.getEngine(); + engine[name](value); + return this; + }; + } + /** * Set or get the width attribute of the diagram. See `.height` below. - * @name width + * @method width * @memberof dc_graph.diagram * @instance * @param {Number} [width=200] @@ -743,7 +803,7 @@ dc_graph.diagram = function (parent, chartGroup) { * SVG element generated by the diagram when rendered. If a value is given, then the * diagram is returned for method chaining. If no value is given, then the current value of * the height attribute will be returned. Default: 200 - * @name height + * @method height * @memberof dc_graph.diagram * @instance * @param {Number} [height=200] @@ -757,10 +817,10 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Get or set the root element, which is usually the parent div. Normally the root is set * when the diagram is constructed; setting it later may have unexpected consequences. - * @name root + * @method root * @memberof dc_graph.diagram * @instance - * @param {node} [root] + * @param {node} [root=null] * @return {node} * @return {dc_graph.diagram} **/ @@ -772,7 +832,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Get or set whether mouse wheel rotation or touchpad gestures will zoom the diagram, and * whether dragging on the background pans the diagram. - * @name mouseZoomable + * @method mouseZoomable * @memberof dc_graph.diagram * @instance * @param {Boolean} [mouseZoomable=true] @@ -803,7 +863,7 @@ dc_graph.diagram = function (parent, chartGroup) { * * another string - sets the `viewBox` and uses the string for `preserveAspectRatio`. * * function - will be called with (viewport width, viewport height, canvas width, canvas * height) and result will be used to set `preserveAspectRatio`. - * @name fitStrategy + * @method fitStrategy * @memberof dc_graph.diagram * @instance * @param {String} [fitStrategy='default'] @@ -822,7 +882,7 @@ dc_graph.diagram = function (parent, chartGroup) { * * `'always'` - zoom every time layout happens * * `'once'` - zoom the first time layout happens * * `null` - manual, call `zoomToFit` to fit - * @name autoZoom + * @method autoZoom * @memberof dc_graph.diagram * @instance * @param {String} [autoZoom=null] @@ -846,7 +906,7 @@ dc_graph.diagram = function (parent, chartGroup) { * *The node dimension currently does nothing, but once selection is supported, it will be * used for filtering other charts on the same crossfilter instance based on the nodes * selected.* - * @name nodeDimension + * @method nodeDimension * @memberof dc_graph.diagram * @instance * @param {crossfilter.dimension} [nodeDimension] @@ -866,7 +926,7 @@ dc_graph.diagram = function (parent, chartGroup) { * It is possible to pass another object with the same `.all()` interface instead of a * crossfilter group. - * @name nodeGroup + * @method nodeGroup * @memberof dc_graph.diagram * @instance * @param {crossfilter.group} [nodeGroup] @@ -884,7 +944,7 @@ dc_graph.diagram = function (parent, chartGroup) { * used for filtering other charts on the same crossfilter instance based on the edges * selected.* - * @name edgeDimension + * @method edgeDimension * @memberof dc_graph.diagram * @instance * @param {crossfilter.dimension} [edgeDimension] @@ -898,10 +958,11 @@ dc_graph.diagram = function (parent, chartGroup) { * diagram. See `.nodeGroup` above for the way data is loaded from a crossfilter group. * The values in the key/value pairs returned by `diagram.edgeGroup().all()` need to - * support, at a minimum, the `nodeSource` and `nodeTarget`, which should return the same - * keys as the `nodeKey` + * support, at a minimum, the {@link dc_graph.diagram#nodeSource nodeSource} and + * {@link dc_graph.diagram#nodeTarget nodeTarget}, which should return the same + * keys as the {@link dc_graph.diagram#nodeKey nodeKey} - * @name edgeGroup + * @method edgeGroup * @memberof dc_graph.diagram * @instance * @param {crossfilter.group} [edgeGroup] @@ -913,12 +974,13 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the unique key for each node. By * default, this accesses the `key` field of the object passed to it. The keys should match - * the keys returned by the `.edgeSource` and `.edgeTarget`. + * the keys returned by the {@link dc_graph.diagram#edgeSource edgeSource} and + * {@link dc_graph.diagram#edgeTarget edgeTarget}. - * @name nodeKey + * @method nodeKey * @memberof dc_graph.diagram * @instance - * @param {Function} [nodeKey] + * @param {Function} [nodeKey=function(kv) { return kv.key }] * @return {Function} * @return {dc_graph.diagram} **/ @@ -930,10 +992,10 @@ dc_graph.diagram = function (parent, chartGroup) { * Set or get the function which will be used to retrieve the unique key for each edge. By * default, this accesses the `key` field of the object passed to it. - * @name edgeKey + * @method edgeKey * @memberof dc_graph.diagram * @instance - * @param {Function} [edgeKey] + * @param {Function} [edgeKey=function(kv) { return kv.key }] * @return {Function} * @return {dc_graph.diagram} **/ @@ -947,10 +1009,10 @@ dc_graph.diagram = function (parent, chartGroup) { * nodes; if it does not, or if the node is currently filtered out, the edge will not be * displayed. By default, looks for `.value.sourcename`. - * @name edgeSource + * @method edgeSource * @memberof dc_graph.diagram * @instance - * @param {Function} [edgeSource] + * @param {Function} [edgeSource=function(kv) { return kv.value.sourcename; }] * @return {Function} * @return {dc_graph.diagram} **/ @@ -960,13 +1022,14 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the target (destination/head) key - * of the edge objects. The key must equal the key returned by the `.nodeKey` for one of - * the nodes; if it does not, or if the node is currently filtered out, the edge will not - * be displayed. By default, looks for `.value.targetname`. - * @name edgeTarget + * of the edge objects. The key must equal the key returned by the + * {@link dc_graph.diagram#nodeKey nodeKey} for one of the nodes; if it does not, or if the node + * is currently filtered out, the edge will not be displayed. By default, looks for + * `.value.targetname`. + * @method edgeTarget * @memberof dc_graph.diagram * @instance - * @param {Function} [edgeTarget] + * @param {Function} [edgeTarget=function(kv) { return kv.value.targetname; }] * @return {Function} * @return {dc_graph.diagram} **/ @@ -977,7 +1040,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the radius, in pixels, for each * node. This determines the height of nodes,and if `nodeFitLabel` is false, the width too. - * @name nodeRadius + * @method nodeRadius * @memberof dc_graph.diagram * @instance * @param {Function|Number} [nodeRadius=25] @@ -990,7 +1053,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Set or get the function which will be used to retrieve the stroke width, in pixels, for * drawing the outline of each node. According to the SVG specification, the outline will * be drawn half on top of the fill, and half outside. Default: 1 - * @name nodeStrokeWidth + * @method nodeStrokeWidth * @memberof dc_graph.diagram * @instance * @param {Function|Number} [nodeStrokeWidth=1] @@ -1002,7 +1065,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the stroke color for the outline * of each node. - * @name nodeStroke + * @method nodeStroke * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeStroke='black'] @@ -1015,7 +1078,7 @@ dc_graph.diagram = function (parent, chartGroup) { * If set, the value returned from `nodeFill` will be processed through this * {@link https://github.com/mbostock/d3/wiki/Scales d3.scale} * to return the fill color. If falsy, uses the identity function (no scale). - * @name nodeFillScale + * @method nodeFillScale * @memberof dc_graph.diagram * @instance * @param {Function|d3.scale} [nodeFillScale] @@ -1027,7 +1090,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the fill color for the body of each * node. - * @name nodeFill + * @method nodeFill * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeFill='white'] @@ -1038,7 +1101,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the opacity of each node. - * @name nodeOpacity + * @method nodeOpacity * @memberof dc_graph.diagram * @instance * @param {Function|Number} [nodeOpacity=1] @@ -1050,7 +1113,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the padding or minimum distance, in pixels, for a node. (Will be distributed * to both sides of the node.) - * @name nodePadding + * @method nodePadding * @memberof dc_graph.diagram * @instance * @param {Function|Number} [nodePadding=6] @@ -1062,7 +1125,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the label text to display in each * node. By default, looks for a field `label` or `name` inside the `value` field. - * @name nodeLabel + * @method nodeLabel * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeLabel] @@ -1080,7 +1143,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the label fill color. Default: null - * @name nodeLabelFill + * @method nodeLabelFill * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeLabelFill=null] @@ -1091,7 +1154,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Whether to fit the node shape around the label - * @name nodeFitLabel + * @method nodeFitLabel * @memberof dc_graph.diagram * @instance * @param {Function|Boolean} [nodeFitLabel=true] @@ -1109,7 +1172,7 @@ dc_graph.diagram = function (parent, chartGroup) { * * If `shape = polygon`: * * `sides`: number of sides for a polygon - * @name nodeShape + * @method nodeShape * @memberof dc_graph.diagram * @instance * @param {Function|Object} [nodeShape={shape: 'ellipse'}] @@ -1126,7 +1189,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the node title, usually rendered * as a tooltip. By default, uses the key of the node. - * @name nodeTitle + * @method nodeTitle * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeTitle] @@ -1147,10 +1210,10 @@ dc_graph.diagram = function (parent, chartGroup) { * them. If specified, `.nodeOrdering` provides an accessor that returns a key to sort the * nodes on. *It would be better not to rely on ordering to affect layout, but it may * affect the layout in some cases.* - * @name nodeOrdering + * @method nodeOrdering * @memberof dc_graph.diagram * @instance - * @param {Function} [nodeOrdering] + * @param {Function} [nodeOrdering=null] * @return {Function} * @return {dc_graph.diagram} **/ @@ -1160,10 +1223,10 @@ dc_graph.diagram = function (parent, chartGroup) { * Specify an accessor that returns an {x,y} coordinate for a node that should be * {@link https://github.com/tgdwyer/WebCola/wiki/Fixed-Node-Positions fixed in place}, * and returns falsy for other nodes. - * @name nodeFixed + * @method nodeFixed * @memberof dc_graph.diagram * @instance - * @param {Function|Object} [nodeFixed] + * @param {Function|Object} [nodeFixed=null] * @return {Function|Object} * @return {dc_graph.diagram} **/ @@ -1172,7 +1235,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the stroke color for the edges. - * @name edgeStroke + * @method edgeStroke * @memberof dc_graph.diagram * @instance * @param {Function|String} [edgeStroke='black'] @@ -1183,7 +1246,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the stroke width for the edges. - * @name edgeStrokeWidth + * @method edgeStrokeWidth * @memberof dc_graph.diagram * @instance * @param {Function|Number} [edgeStrokeWidth=1] @@ -1195,7 +1258,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the edge opacity, a number from 0 * to 1. - * @name edgeOpacity + * @method edgeOpacity * @memberof dc_graph.diagram * @instance * @param {Function|Number} [edgeOpacity=1] @@ -1207,7 +1270,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the edge label text. The label is * displayed when an edge is hovered over. By default, uses the `edgeKey`. - * @name edgeLabel + * @method edgeLabel * @memberof dc_graph.diagram * @instance * @param {Function|String} [edgeLabel] @@ -1227,7 +1290,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Set or get the function which will be used to retrieve the name of the arrowhead to use * for the target/ head/destination of the edge. Arrow symbols can be specified with * `.defineArrow()`. Return null to display no arrowhead. - * @name edgeArrowhead + * @method edgeArrowhead * @memberof dc_graph.diagram * @instance * @param {Function|String} [edgeArrowhead='vee'] @@ -1240,7 +1303,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Set or get the function which will be used to retrieve the name of the arrow tail to use * for the tail/source of the edge. Arrow symbols can be specified with * `.defineArrow()`. Return null to display no arrowtail. - * @name edgeArrowtail + * @method edgeArrowtail * @memberof dc_graph.diagram * @instance * @param {Function|String} [edgeArrowtail=null] @@ -1251,7 +1314,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Multiplier for arrow size. - * @name edgeArrowSize + * @method edgeArrowSize * @memberof dc_graph.diagram * @instance * @param {Function|Number} [edgeArrowSize=1] @@ -1264,7 +1327,7 @@ dc_graph.diagram = function (parent, chartGroup) { * To draw an edge but not have it affect the layout, specify a function which returns * false for that edge. By default, will return false if the `notLayout` field of the edge * value is truthy, true otherwise. - * @name edgeIsLayout + * @method edgeIsLayout * @memberof dc_graph.diagram * @instance * @param {Function|Boolean} [edgeIsLayout] @@ -1293,20 +1356,22 @@ dc_graph.diagram = function (parent, chartGroup) { * {@link https://github.com/tgdwyer/WebCola/wiki/link-lengths the cola.js wiki} * for more details. * 'none' - no edge lengths will be specified - * @name lengthStrategy + * + * **Deprecated**: Use {@link dc_graph.cola_layout#lengthStrategy cola_layout.lengthStrategy} instead. + * @method lengthStrategy * @memberof dc_graph.diagram * @instance * @param {Function|String} [lengthStrategy='symmetric'] * @return {Function|String} * @return {dc_graph.diagram} **/ - _chart.lengthStrategy = property('symmetric'); + _chart.lengthStrategy = deprecate_layout_algo_parameter('lengthStrategy'); /** * When the `.lengthStrategy` is 'individual', this accessor will be used to read the * length of each edge. By default, reads the `distance` field of the edge. If the * distance is falsy, uses the `baseLength`. - * @name edgeLength + * @method edgeLength * @memberof dc_graph.diagram * @instance * @param {Function|Number} [edgeLength] @@ -1325,7 +1390,9 @@ dc_graph.diagram = function (parent, chartGroup) { /** * This should be equivalent to rankdir and ranksep in the dagre/graphviz nomenclature, but for * now it is separate. - * @name flowLayout + * + * **Deprecated**: use {@link dc_graph.cola_layout#flowLayout cola_layout.flowLayout} instead. + * @method flowLayout * @memberof dc_graph.diagram * @instance * @param {Object} [flowLayout] @@ -1335,38 +1402,42 @@ dc_graph.diagram = function (parent, chartGroup) { * // flow in x with min separation 200 * chart.flowLayout({axis: 'x', minSeparation: 200}) **/ - _chart.flowLayout = property(null); + _chart.flowLayout = deprecate_layout_algo_parameter('flowLayout'); /** * Direction to draw ranks. Currently for dagre and expand_collapse, but I think cola could be * generated from graphviz-style since it is more general. - * @name rankdir + * + * **Deprecated**: use {@link dc_graph.dagre_layout#rankdir dagre_layout.rankdir} instead. + * @method rankdir * @memberof dc_graph.diagram * @instance * @param {String} [rankdir] **/ - _chart.rankdir = property('TB'); + _chart.rankdir = deprecate_layout_algo_parameter('rankdir'); /** * Gets or sets the default edge length (in pixels) when the `.lengthStrategy` is * 'individual', and the base value to be multiplied for 'symmetric' and 'jaccard' edge * lengths. - * @name baseLength + * + * **Deprecated**: use {@link dc_graph.cola_layout#baseLength cola_layout.baseLength} instead. + * @method baseLength * @memberof dc_graph.diagram * @instance * @param {Number} [baseLength] * @return {Number} * @return {dc_graph.diagram} **/ - _chart.baseLength = property(30); + _chart.baseLength = deprecate_layout_algo_parameter('baseLength'); /** * Gets or sets the transition duration, the length of time each change to the diagram will * be animated. - * @name transitionDuration + * @method transitionDuration * @memberof dc_graph.diagram * @instance - * @param {Number} [transitionDuration] + * @param {Number} [transitionDuration=500] * @return {Number} * @return {dc_graph.diagram} **/ @@ -1380,10 +1451,10 @@ dc_graph.diagram = function (parent, chartGroup) { * * `insmod`: insert operations happen before modifies * * Deletions always happen before/during layout computation. - * @name stageTransitions + * @method stageTransitions * @memberof dc_graph.diagram * @instance - * @param {String} [stageTransitions] + * @param {String} [stageTransitions='none'] * @return {String} * @return {dc_graph.diagram} **/ @@ -1393,10 +1464,10 @@ dc_graph.diagram = function (parent, chartGroup) { * The delete transition happens simultaneously with layout, which can take longer * than the transition duration. Delaying it can bring it closer to the other * staged transitions. - * @name deleteDelay + * @method deleteDelay * @memberof dc_graph.diagram * @instance - * @param {Number} [deleteDelay] + * @param {Number} [deleteDelay=0] * @return {Number} * @return {dc_graph.diagram} **/ @@ -1404,10 +1475,10 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Whether to put connected components each in their own group, to stabilize layout. - * @name groupConnected + * @method groupConnected * @memberof dc_graph.diagram * @instance - * @param {String} [stageTransitions] + * @param {String} [stageTransitions=false] * @return {String} * @return {dc_graph.diagram} **/ @@ -1416,7 +1487,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Gets or sets the maximum time spent doing layout for a render or redraw. Set to 0 for no * limit. - * @name timeLimit + * @method timeLimit * @memberof dc_graph.diagram * @instance * @param {Function|Number} [timeLimit=0] @@ -1451,7 +1522,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Because it is tedious to write code to generate constraints for a graph, **dc.graph.js** * also includes a {@link #dc_graph+constraint_pattern constraint generator} to produce * this constrain function, specifying the constraints themselves in a graph. - * @name constrain + * @method constrain * @memberof dc_graph.diagram * @instance * @param {Function} [constrain] @@ -1465,7 +1536,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * If there are multiple edges between the same two nodes, start them this many pixels away * from the original so they don't overlap. - * @name parallelEdgeOffset + * @method parallelEdgeOffset * @memberof dc_graph.diagram * @instance * @param {Number} [parallelEdgeOffset=10] @@ -1482,10 +1553,10 @@ dc_graph.diagram = function (parent, chartGroup) { * *It would be better not to rely on ordering to affect layout, but it may affect the * layout in some cases. (Probably less than node ordering, but it does affect which * parallel edge is which.)* - * @name edgeOrdering + * @method edgeOrdering * @memberof dc_graph.diagram * @instance - * @param {Function} [edgeOrdering] + * @param {Function} [edgeOrdering=null] * @return {Function} * @return {dc_graph.diagram} **/ @@ -1507,7 +1578,7 @@ dc_graph.diagram = function (parent, chartGroup) { * This flag can be set true to construct a new cola layout object on each redraw. However, * layout seems to be more stable if this is set false, so hopefully this will be fixed * soon. - * @name initLayoutOnRedraw + * @method initLayoutOnRedraw * @memberof dc_graph.diagram * @instance * @param {Boolean} [initLayoutOnRedraw=false] @@ -1518,7 +1589,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Whether to perform layout when the data is unchanged from the last redraw. - * @name layoutUnchanged + * @method layoutUnchanged * @memberof dc_graph.diagram * @instance * @param {Boolean} [layoutUnchanged=false] @@ -1531,7 +1602,7 @@ dc_graph.diagram = function (parent, chartGroup) { * When `layoutUnchanged` is false, this will force layout to happen again. This may be needed * when changing a parameter but not changing the topology of the graph. (Yes, probably should * not be necessary.) - * @name relayout + * @method relayout * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -1543,22 +1614,29 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Function to call to generate an initial layout. Takes (diagram, nodes, edges) - * @name initialLayout + * + * **Deprecated**: The only layout that was using this was `tree_positions` and it never + * worked as an initialization step for cola, as was originally intended. Now that + * `tree_layout` is a layout algorithm, this should go away. + * + * In the future, there will be support for chaining layout algorithms. But that will be a + * matter of composing them into a super-algorithm, not a special step like this was. + * @method initialLayout * @memberof dc_graph.diagram * @instance * @param {Function} [initialLayout=null] * @return {Function} * @return {dc_graph.diagram} **/ - _chart.initialLayout = property(null); + _chart.initialLayout = deprecated_property('initialLayout is deprecated - use layout algorithms instead', null); - _chart.initialOnly = property(false); + _chart.initialOnly = deprecated_property('initialOnly is deprecated - see the initialLayout deprecation notice in the documentation', false); /** * By default, all nodes are included, and edges are only included if both end-nodes are * visible. If `.induceNodes` is set, then only nodes which have at least one edge will be * shown. - * @name induceNodes + * @method induceNodes * @memberof dc_graph.diagram * @instance * @param {Boolean} [induceNodes=false] @@ -1571,7 +1649,7 @@ dc_graph.diagram = function (parent, chartGroup) { * If this flag is true, the positions of nodes and will be updated while layout is * iterating. If false, the positions will only be updated once layout has * stabilized. Note: this may not be compatible with transitionDuration. - * @name showLayoutSteps + * @method showLayoutSteps * @memberof dc_graph.diagram * @instance * @param {Boolean} [showLayoutSteps=false] @@ -1583,10 +1661,10 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Assigns a legend object which will be displayed within the same SVG element and * according to the visual encoding of this diagram. - * @name legend + * @method legend * @memberof dc_graph.diagram * @instance - * @param {Object} [legend] + * @param {Object} [legend=null] * @return {Object} * @return {dc_graph.diagram} **/ @@ -1599,7 +1677,7 @@ dc_graph.diagram = function (parent, chartGroup) { * be used to display tooltips on nodes using `dc_graph.tip`. * The child needs to support a `parent` method, the diagram to modify. - * @name child + * @method child * @memberof dc_graph.diagram * @instance * @param {String} [id] - the name of the child to modify or add @@ -1630,22 +1708,57 @@ dc_graph.diagram = function (parent, chartGroup) { }; /** - * Currently, you can specify 'cola' (the default) or 'dagre' as the Layout Algorithm and it - * will replace the back-end. In the future, there will be subclasses like colaDiagram and - * dagreDiagram with appropriate interfaces for each, but it is not yet clear which features are - * common between them. - * @name layoutAlgorithm + * Specify 'cola' (the default) or 'dagre' as the Layout Algorithm and it will replace the + * back-end. + * + * **Deprecated**: use {@link dc_graph.diagram#layoutEngine diagram.layoutEngine} with the engine + * object instead + * @method layoutAlgorithm * @memberof dc_graph.diagram * @instance - * @param {String} [algo] - the name of the layout algorithm to use + * @param {String} [algo='cola'] - the name of the layout algorithm to use * @example * // use dagre for layout * diagram.layoutAlgorithm('dagre'); * @return {dc_graph.diagram} **/ - _chart.layoutAlgorithm = property('cola'); + _chart.layoutAlgorithm = function(value, skipWarning) { + if(!arguments.length) + return _chart.layoutEngine() ? _chart.layoutEngine().layoutAlgorithm() : 'cola'; + if(!skipWarning) + console.warn('dc.graph.diagram.layoutAlgorithm is depecrated - pass the layout engine object to dc_graph.diagram.layoutEngine instead'); + + var engine; + switch(value) { + case 'cola': + engine = dc_graph.cola_layout(); + break; + case 'dagre': + engine = dc_graph.dagre_layout(); + } + engine = dc_graph.webworker_layout(engine); + _chart.layoutEngine(engine); + return this; + }; + + /** + * The layout engine determines how to draw things! + * @method layoutEngine + * @memberof dc_graph.diagram + * @instance + * @param {Object} [engine=null] - the layout engine to use + * @example + * // use cola with no webworker + * diagram.layoutEngine(dc_graph.cola_layout()); + * // use dagre with a webworker + * diagram.layoutEngine(dc_graph.webworker_layout(dc_graph.dagre_layout())); + **/ + _chart.layoutEngine = property(null).react(function(val) { + if(val && val.parent) + val.parent(_chart); + }); - _chart.tickSize = property(1); + _chart.tickSize = deprecate_layout_algo_parameter('tickSize'); _chart.edgeId = function(d) { @@ -1667,42 +1780,25 @@ dc_graph.diagram = function (parent, chartGroup) { }; /** - * Instructs cola.js to fit the connected components. Default: true - * @name handleDisconnected + * Instructs cola.js to fit the connected components. + * + * **Deprecated**: Use + * {@link dc_graph.cola_layout#handleDisconnected cola_layout.handleDisconnected} instead. + * @method handleDisconnected * @memberof dc_graph.diagram * @instance * @param {Boolean} [handleDisconnected=true] * @return {Boolean} * @return {dc_graph.diagram} **/ - _chart.handleDisconnected = property(true); + _chart.handleDisconnected = deprecate_layout_algo_parameter('handleDisconnected'); function initLayout() { - if(!_worker) - _worker = new Worker('js/dc.graph.' + _chart.layoutAlgorithm() + '.worker.js'); - var args = { + if(!_chart.layoutEngine()) + _chart.layoutAlgorithm('cola', true); + _chart.layoutEngine().init({ width: _chart.width(), height: _chart.height() - }; - // generalize this? class hierarchy, what? - switch(_chart.layoutAlgorithm()) { - case 'cola': - Object.assign(args, { - handleDisconnected: _chart.handleDisconnected(), - lengthStrategy: _chart.lengthStrategy(), - baseLength: _chart.baseLength(), - flowLayout: _chart.flowLayout(), - tickSize: _chart.tickSize() - }); - break; - case 'dagre': - Object.assign(args, { - rankdir: _chart.rankdir() - }); - } - _worker.postMessage({ - command: 'init', - args: args }); } @@ -1812,8 +1908,7 @@ dc_graph.diagram = function (parent, chartGroup) { } _running = true; - if(_worker) - _worker.postMessage({command: 'stop'}); + _chart.layoutEngine().stop(); if(_chart.initLayoutOnRedraw()) initLayout(); @@ -1834,6 +1929,7 @@ dc_graph.diagram = function (parent, chartGroup) { v1.cola.dcg_nodeKey = _chart.nodeKey.eval(v1); if(_chart.nodeFixed()) v1.cola.dcg_nodeFixed = _chart.nodeFixed.eval(v1); + _chart.layoutEngine().populateLayoutNode(v1.cola, v1); }); var wedges = regenerate_objects(_edges, edges, function(e) { return _chart.edgeKey()(e); @@ -1846,6 +1942,7 @@ dc_graph.diagram = function (parent, chartGroup) { e1.source = _nodes[e1.cola.dcg_edgeSource]; e1.target = _nodes[e1.cola.dcg_edgeTarget]; e1.cola.dcg_edgeLength = _chart.edgeLength.eval(e1); + _chart.layoutEngine().populateLayoutEdge(e1.cola, e1); }); // remove edges that don't have both end nodes @@ -2115,24 +2212,22 @@ dc_graph.diagram = function (parent, chartGroup) { var e = _edges[re.dcg_edgeKey]; }); } - _worker.onmessage = function(e) { - var args = e.data.args; - switch(e.data.response) { - case 'tick': + _chart.layoutEngine() + .on('tick', function(nodes, edges) { var elapsed = Date.now() - startTime; - populate_cola(args.nodes, args.edges); + if(!_chart.initialOnly()) + populate_cola(nodes, edges); if(_chart.showLayoutSteps()) draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter); if(_needsRedraw || _chart.timeLimit() && elapsed > _chart.timeLimit()) { console.log('cancelled'); - _worker.postMessage({ - command: 'stop' - }); + _chart.layoutEngine().stop(); } - break; - case 'end': + }) + .on('end', function(nodes, edges) { if(!_chart.showLayoutSteps()) { - populate_cola(args.nodes, args.edges); + if(!_chart.initialOnly()) + populate_cola(nodes, edges); draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter); } else layout_done(true); @@ -2151,32 +2246,28 @@ dc_graph.diagram = function (parent, chartGroup) { calc_bounds(node, edge); if(do_zoom) auto_zoom(); - break; - case 'start': - console.log('algo ' + _chart.layoutAlgorithm() + ' started.'); + }) + .on('start', function() { + console.log('algo ' + _chart.layoutEngine().layoutAlgorithm() + ' started.'); _dispatch.start(); - } - }; - _dispatch.start(); // cola doesn't seem to fire this itself? - _worker.postMessage({ - command: 'data', - args: { - nodes: wnodes.map(function(v) { return v.cola; }), - edges: layout_edges.map(function(v) { return v.cola; }), - constraints: constraints, - opts: {groupConnected: _chart.groupConnected()} - } - }); - _worker.postMessage({ - command: 'start', - args: { + }); + + if(_chart.initialOnly()) + _chart.layoutEngine().dispatch().end(wnodes, wedges); + else { + _dispatch.start(); // cola doesn't seem to fire this itself? + _chart.layoutEngine().data( + wnodes.map(function(v) { return v.cola; }), + layout_edges.map(function(v) { return v.cola; }), + constraints, + {groupConnected: _chart.groupConnected()} + ); + _chart.layoutEngine().start({ initialUnconstrainedIterations: 10, initialUserConstraintIterations: 20, - initialAllConstraintsIterations: 20, - initialOnly: _chart.initialOnly(), - showLayoutSteps: _chart.showLayoutSteps() - } - }); + initialAllConstraintsIterations: 20 + }); + } return this; }; @@ -2555,7 +2646,7 @@ dc_graph.diagram = function (parent, chartGroup) { * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Erases any existing SVG elements and draws the diagram from scratch. `.render()` * must be called the first time, and `.redraw()` can be called after that. - * @name render + * @method render * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -2581,7 +2672,7 @@ dc_graph.diagram = function (parent, chartGroup) { * * `drawn(nodes, edges)` - the node and edge elements have been rendered to the screen * and can be modified through the passed d3 selections. * * `end()` - diagram layout has completed. - * @name on + * @method on * @memberof dc_graph.diagram * @instance * @param {String} [event] - the event to subscribe to @@ -2597,7 +2688,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Returns an object with current statistics on graph layout. * * `nnodes` - number of nodes displayed * * `nedges` - number of edges displayed - * @name getStats + * @method getStats * @memberof dc_graph.diagram * @instance * @return {} @@ -2618,7 +2709,7 @@ dc_graph.diagram = function (parent, chartGroup) { * ``` * Since this function returns a d3 selection, it is not chainable. (However, d3 selection * calls can be chained after it.) - * @name select + * @method select * @memberof dc_graph.diagram * @instance * @param {String} [selector] @@ -2641,7 +2732,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Since this function returns a d3 selection, it is not chainable. (However, d3 selection * calls can be chained after it.) - * @name selectAll + * @method selectAll * @memberof dc_graph.diagram * @instance * @param {String} [selector] @@ -2657,7 +2748,7 @@ dc_graph.diagram = function (parent, chartGroup) { * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Returns the top svg element for this specific chart. You can also pass in a new * svg element, but setting the svg element on a diagram may have unexpected consequences. - * @name svg + * @method svg * @memberof dc_graph.diagram * @instance * @param {d3.selection} [selection] @@ -2678,7 +2769,7 @@ dc_graph.diagram = function (parent, chartGroup) { * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Remove the diagram's SVG elements from the dom and recreate the container SVG * element. - * @name resetSvg + * @method resetSvg * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -2692,7 +2783,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Standard dc.js * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Causes all charts in the chart group to be redrawn. - * @name redrawGroup + * @method redrawGroup * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -2705,7 +2796,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Standard dc.js * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Causes all charts in the chart group to be rendered. - * @name renderGroup + * @method renderGroup * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -2722,7 +2813,7 @@ dc_graph.diagram = function (parent, chartGroup) { * (If further customization is required, it is possible to append other `svg:defs` to * `chart.svg()` and use refer to them by `id`.) - * @name defineArrow + * @method defineArrow * @memberof dc_graph.diagram * @instance * @param {Number} name - the identifier to give the marker, to be used with @@ -2978,6 +3069,646 @@ dc_graph.diagram = function (parent, chartGroup) { return _chart.anchor(parent, chartGroup); }; +var _workers = {}; +function create_worker(layoutAlgorithm) { + if(!_workers[layoutAlgorithm]) { + var worker = _workers[layoutAlgorithm] = { + worker: new Worker(script_path() + 'dc.graph.' + layoutAlgorithm + '.worker.js'), + layouts: {} + }; + worker.worker.onmessage = function(e) { + var layoutId = e.data.layoutId; + if(!worker.layouts[layoutId]) + throw new Error('layoutId "' + layoutId + '" unknown!'); + worker.layouts[layoutId].dispatch()[e.data.response].apply(null, e.data.args); + }; + } + return _workers[layoutAlgorithm]; +} + +dc_graph.webworker_layout = function(layoutEngine) { + var _tick, _done, _dispatch = d3.dispatch('init', 'start', 'tick', 'end'); + var _worker = create_worker(layoutEngine.layoutAlgorithm()); + var engine = {}; + _worker.layouts[layoutEngine.layoutId()] = engine; + + engine.parent = function(parent) { + if(layoutEngine.parent) + layoutEngine.parent(parent); + }; + engine.init = function(options) { + options = layoutEngine.optionNames().reduce( + function(options, option) { + options[option] = layoutEngine[option](); + return options; + }, options); + _worker.worker.postMessage({ + command: 'init', + args: { + layoutId: layoutEngine.layoutId(), + options: options + } + }); + return this; + }; + engine.data = function(nodes, edges, constraints, options) { + _worker.worker.postMessage({ + command: 'data', + args: { + layoutId: layoutEngine.layoutId(), + nodes: nodes, + edges: edges, + constraints: constraints, + options: options + } + }); + }; + engine.start = function(options) { + _worker.worker.postMessage({ + command: 'start', + args: { + layoutId: layoutEngine.layoutId(), + options: options + } + }); + }; + engine.stop = function() { + _worker.worker.postMessage({ + command: 'stop', + args: { + layoutId: layoutEngine.layoutId() + } + }); + return this; + }; + // stopgap while layout options are still on diagram + engine.getEngine = function() { + return layoutEngine; + }; + // somewhat sketchy - do we want this object to be transparent or not? + var passthroughs = ['layoutAlgorithm', 'populateLayoutNode', 'populateLayoutEdge', 'rankdir', 'ranksep']; + passthroughs.forEach(function(name) { + engine[name] = function() { + var ret = layoutEngine[name].apply(layoutEngine, arguments); + return arguments.length ? this : ret; + }; + }); + engine.on = function(event, f) { + _dispatch.on(event, f); + return this; + }; + engine.dispatch = function() { + return _dispatch; + }; + return engine; +}; + +/** + * `dc_graph.graphviz_attrs defines a basic set of attributes which layout engines should + * implement - although these are not // required, they make it easier for clients and + * behaviors (like expand_collapse) to work with // multiple layout engines // these + * attributes are {@link http://www.graphviz.org/doc/info/attrs.html from graphviz} + * @class graphviz_attrs + * @memberof dc_graph + * @return {Object} + **/ +dc_graph.graphviz_attrs = function() { + return { + /** + * Direction to draw ranks. + * @method rankdir + * @memberof dc_graph.graphviz_attrs + * @instance + * @param {String} [rankdir='TB'] 'TB', 'LR', 'BT', or 'RL' + **/ + rankdir: property('TB'), + /** + * Spacing in between ranks. + * @method ranksep + * @memberof dc_graph.graphviz_attrs + * @instnace + * @param {String} [ranksep=40] + **/ + ranksep: property(40) + }; +}; + +/** + * `dc_graph.cola_layout` is an adaptor for cola.js layouts in dc.graph.js + * @class cola_layout + * @memberof dc_graph + * @param {String} [id=uuid()] - Unique identifier + * @return {dc_graph.cola_layout} + **/ +dc_graph.cola_layout = function(id) { + var _layoutId = id || uuid(); + var _d3cola = null; + var _dispatch = d3.dispatch('tick', 'start', 'end'); + var _flowLayout; + // node and edge objects shared with cola.js, preserved from one iteration + // to the next (as long as the object is still in the layout) + var _nodes = {}, _edges = {}; + + function init(options) { + // width, height, handleDisconnected, lengthStrategy, baseLength, flowLayout, tickSize + _d3cola = cola.d3adaptor() + .avoidOverlaps(true) + .size([options.width, options.height]) + .handleDisconnected(options.handleDisconnected); + if(_d3cola.tickSize) // non-standard + _d3cola.tickSize(options.tickSize); + + switch(options.lengthStrategy) { + case 'symmetric': + _d3cola.symmetricDiffLinkLengths(options.baseLength); + break; + case 'jaccard': + _d3cola.jaccardLinkLengths(options.baseLength); + break; + case 'individual': + _d3cola.linkDistance(function(e) { + return e.dcg_edgeLength || options.baseLength; + }); + break; + case 'none': + default: + } + if(options.flowLayout) { + _d3cola.flowLayout(options.flowLayout.axis, options.flowLayout.minSeparation); + } + } + + function data(nodes, edges, constraints, options) { + var wnodes = regenerate_objects(_nodes, nodes, function(v) { + return v.dcg_nodeKey; + }, function(v1, v) { + v1.dcg_nodeKey = v.dcg_nodeKey; + v1.width = v.width; + v1.height = v.height; + v1.fixed = !!v.dgc_nodeFixed; + + if(typeof v.dgc_nodeFixed === 'object') { + v1.x = v.dgc_nodeFixed.x; + v1.y = v.dgc_nodeFixed.y; + } + else { + // should we support e.g. null to unset x,y? + if(v.x !== undefined) + v1.x = v.x; + if(v.y !== undefined) + v1.y = v.y; + } + }); + var wedges = regenerate_objects(_edges, edges, function(e) { + return e.dcg_edgeKey; + }, function(e1, e) { + e1.dcg_edgeKey = e.dcg_edgeKey; + // cola edges can work with indices or with object references + // but it will replace indices with object references + e1.source = _nodes[e.dcg_edgeSource]; + e1.target = _nodes[e.dcg_edgeTarget]; + e1.dcg_edgeLength = e.dcg_edgeLength; + }); + + // cola needs each node object to have an index property + wnodes.forEach(function(v, i) { + v.index = i; + }); + + var groups = null; + if(options.groupConnected) { + var components = cola.separateGraphs(wnodes, wedges); + groups = components.map(function(g) { + return {leaves: g.array.map(function(n) { return n.index; })}; + }); + } + + function dispatchState(event) { + _dispatch[event]( + wnodes, + wedges.map(function(e) { + return {dcg_edgeKey: e.dcg_edgeKey}; + }) + ); + } + _d3cola.on('tick', /* _tick = */ function() { + dispatchState('tick'); + }).on('start', function() { + _dispatch.start(); + }).on('end', /* _done = */ function() { + dispatchState('end'); + }); + _d3cola.nodes(wnodes) + .links(wedges) + .constraints(constraints) + .groups(groups); + } + + function start(options) { + _d3cola.start(options.initialUnconstrainedIterations, + options.initialUserConstraintIterations, + options.initialAllConstraintsIterations, + options.gridSnapIterations); + } + + function stop() { + _d3cola.stop(); + } + + var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz); + graphviz.rankdir(null); + + var engine = Object.assign(graphviz, { + layoutAlgorithm: function() { + return 'cola'; + }, + layoutId: function() { + return _layoutId; + }, + parent: property(null), + on: function(event, f) { + _dispatch.on(event, f); + return this; + }, + init: function(options) { + this.optionNames().forEach(function(option) { + options[option] = options[option] || this[option](); + }.bind(this)); + init(options); + return this; + }, + data: function(nodes, edges, constraints, options) { + data(nodes, edges, constraints, options); + }, + start: function(options) { + start(options); + }, + stop: function() { + stop(); + }, + optionNames: function() { + return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize'] + .concat(graphviz_keys); + }, + populateLayoutNode: function() {}, + populateLayoutEdge: function() {}, + /** + * Instructs cola.js to fit the connected components. + * @method handleDisconnected + * @memberof dc_graph.cola_layout + * @instance + * @param {Boolean} [handleDisconnected=true] + * @return {Boolean} + * @return {dc_graph.cola_layout} + **/ + handleDisconnected: property(true), + /** + * Currently, three strategies are supported for specifying the lengths of edges: + * * 'individual' - uses the `edgeLength` for each edge. If it returns falsy, uses the + * `baseLength` + * * 'symmetric', 'jaccard' - compute the edge length based on the graph structure around + * the edge. See + * {@link https://github.com/tgdwyer/WebCola/wiki/link-lengths the cola.js wiki} + * for more details. + * 'none' - no edge lengths will be specified + * @method lengthStrategy + * @memberof dc_graph.cola_layout + * @instance + * @param {Function|String} [lengthStrategy='symmetric'] + * @return {Function|String} + * @return {dc_graph.cola_layout} + **/ + lengthStrategy: property('symmetric'), + /** + * Gets or sets the default edge length (in pixels) when the `.lengthStrategy` is + * 'individual', and the base value to be multiplied for 'symmetric' and 'jaccard' edge + * lengths. + * @method baseLength + * @memberof dc_graph.cola_layout + * @instance + * @param {Number} [baseLength=30] + * @return {Number} + * @return {dc_graph.cola_layout} + **/ + baseLength: property(30), + /** + * If `flowLayout` is set, it determines the axis and separation for + * {@link http://marvl.infotech.monash.edu/webcola/doc/classes/cola.layout.html#flowlayout cola flow layout}. + * If it is not set, `flowLayout` will be calculated from the {@link dc_graph.graphviz_attrs#rankdir rankdir} + * and {@link dc_graph.graphviz_attrs#ranksep ranksep}; if `rankdir` is also null (the + * default for cola layout), then there will be no flow. + * @method flowLayout + * @memberof dc_graph.cola_layout + * @instance + * @param {Object} [flowLayout=null] + * @example + * // No flow (default) + * chart.flowLayout(null) + * // flow in x with min separation 200 + * chart.flowLayout({axis: 'x', minSeparation: 200}) + **/ + flowLayout: function(flow) { + if(!arguments.length) { + if(_flowLayout) + return _flowLayout; + var dir = engine.rankdir(); + if(!dir) + return null; + var axis = (dir === 'LR' || dir === 'RL') ? 'x' : 'y'; + return { + axis: axis, + minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2 + }; + } + _flowLayout = flow; + return this; + }, + tickSize: property(1) + }); + return engine; +}; + +dc_graph.cola_layout.scripts = ['d3.js', 'cola.js']; + +/** + * `dc_graph.dagre_layout` is an adaptor for dagre.js layouts in dc.graph.js + * + * In addition to the below layout attributes, `dagre_layout` also implements the attributes from + * {@link dc_graph.graphviz_attrs graphviz_attrs} + * @class dagre_layout + * @memberof dc_graph + * @param {String} [id=uuid()] - Unique identifier + * @return {dc_graph.dagre_layout} + **/ +dc_graph.dagre_layout = function(id) { + var _layoutId = id || uuid(); + var _dagreGraph = null, _tick, _done; + var _dispatch = d3.dispatch('tick', 'start', 'end'); + // node and edge objects preserved from one iteration + // to the next (as long as the object is still in the layout) + var _nodes = {}, _edges = {}; + + function init(options) { + // Create a new directed graph + _dagreGraph = new dagre.graphlib.Graph({multigraph: true}); + + // Set an object for the graph label + _dagreGraph.setGraph({rankdir: options.rankdir}); + + // Default to assigning a new object as a label for each new edge. + _dagreGraph.setDefaultEdgeLabel(function() { return {}; }); + } + + function data(nodes, edges, constraints, options) { + var wnodes = regenerate_objects(_nodes, nodes, function(v) { + return v.dcg_nodeKey; + }, function(v1, v) { + v1.dcg_nodeKey = v.dcg_nodeKey; + v1.width = v.width; + v1.height = v.height; + }, function(k, o) { + _dagreGraph.setNode(k, o); + }, function(k) { + _dagreGraph.removeNode(k); + }); + var wedges = regenerate_objects(_edges, edges, function(e) { + return e.dcg_edgeKey; + }, function(e1, e) { + e1.dcg_edgeKey = e.dcg_edgeKey; + e1.dcg_edgeSource = e.dcg_edgeSource; + e1.dcg_edgeTarget = e.dcg_edgeTarget; + }, function(k, o, e) { + _dagreGraph.setEdge(e.dcg_edgeSource, e.dcg_edgeTarget, o); + }, function(k, e) { + _dagreGraph.removeEdge(e.dcg_edgeSource, e.dcg_edgeTarget, e.dcg_edgeKey); + }); + + function dispatchState(event) { + _dispatch[event]( + wnodes, + wedges.map(function(e) { + return {dcg_edgeKey: e.dcg_edgeKey}; + }) + ); + } + _tick = function() { + dispatchState('tick'); + }; + _done = function() { + dispatchState('end'); + }; + } + + function start(options) { + _dispatch.start(); + dagre.layout(_dagreGraph); + _done(); + } + + function stop() { + } + + var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz); + return Object.assign(graphviz, { + layoutAlgorithm: function() { + return 'dagre'; + }, + layoutId: function() { + return _layoutId; + }, + on: function(event, f) { + _dispatch.on(event, f); + return this; + }, + init: function(options) { + this.optionNames().forEach(function(option) { + options[option] = options[option] || this[option](); + }.bind(this)); + init(options); + return this; + }, + data: function(nodes, edges, constraints, options) { + data(nodes, edges, constraints, options); + }, + start: function(options) { + start(options); + }, + stop: function() { + stop(); + }, + optionNames: function() { + return graphviz_keys; + }, + populateLayoutNode: function() {}, + populateLayoutEdge: function() {} + }); +} + +dc_graph.dagre_layout.scripts = ['d3.js', 'dagre.js']; + +/** + * `dc_graph.tree_layout` is a very simple and not very bright tree layout. It can draw any DAG, but + * tries to position the nodes as a tree. + * @class tree_layout + * @memberof dc_graph + * @param {String} [id=uuid()] - Unique identifier + * @return {dc_graph.tree_layout} + **/ +dc_graph.tree_layout = function(id) { + var _layoutId = id || uuid(); + var _dispatch = d3.dispatch('tick', 'start', 'end'); + var _dfs; + + function init(options) { + var x; + var nodeWidth = d3.functor(options.nodeWidth); + function best_dist(left, right) { + return (nodeWidth(left) + nodeWidth(right)) / 2; + } + _dfs = dc_graph.depth_first_traversal({ + nodeid: function(n) { + return n.dcg_nodeKey; + }, + sourceid: function(n) { + return n.dcg_edgeSource; + }, + targetid: function(n) { + return n.dcg_edgeTarget; + }, + init: function() { + x = options.offsetX; + }, + row: function(n) { + return n.dcg_rank; + }, + place: function(n, r, row) { + if(row.length) { + var left = row[row.length-1]; + var g = (nodeWidth(left) + nodeWidth(n)) / 2; + x = Math.max(x, left.left_x + g); + } + n.left_x = x; + n.hit_ins = 1; + n.y = r*options.gapY + options.offsetY; + }, + sib: function(isroot, left, right) { + var g = best_dist(left, right); + if(isroot) g = g*1.5; + x += g; + }, + pop: function(n) { + n.x = (n.left_x + x)/2; + }, + skip: function(n, indegree) { + // rolling average of in-neighbor x positions + n.x = (n.hit_ins*n.x + x)/++n.hit_ins; + if(n.hit_ins === indegree) + delete n.hit_ins; + }, + finish: function(rows) { + // this is disgusting. patch up any places where nodes overlap by scanning + // right far enough to find the space, then fill from left to right at the + // minimum gap + rows.forEach(function(row) { + var sort = row.sort(function(a, b) { return a.x - b.x; }); + var badi = null, badl = null, want; + for(var i=0; i0) + --badi; // might want to use more left + var l, limit; + if(i < sort.length - 2) { // found space before right + var extra = right.x - (badl + want); + l = sort[badi].x + extra/2; + limit = i+1; + } else { + l = Math.max(sort[badi].x, badl - best_dist(sort[badi], sort[badi+1]) - (want - right.x + badl)/2); + limit = sort.length; + } + for(var j = badi+1; j d.cola.y ? 'out' : 'in'; case 'BT': @@ -3980,7 +4727,7 @@ dc_graph.expand_collapse = function(get_degree, expand, collapse, dirs) { case 'RL': return x < d.cola.x ? 'out' : 'in'; } - throw new Error('unknown rankdir ' + chart.rankdir()); + throw new Error('unknown rankdir ' + chart.layoutEngine().rankdir()); } @@ -4231,10 +4978,38 @@ dc_graph.munge_graph = function(data, nodekeyattr, sourceattr, targetattr) { }; } -/* for the special case where there will be exactly one or zero items in a group, - a reasonable reduction is just to use the row or null. - this could be useful outside dc.graph (esp e.g bubble charts, scatter plots where each - observation is either shown or not) but it would have to be cleaned up a bit */ +/** + * `dc_graph.flat_group` implements a special ["fake group"](https://github.com/dc-js/dc.js/wiki/FAQ#fake-groups) + * for the special case where you want a group that represents the filtered rows of the crossfilter. + * + * Although `dc_graph` can be used with reduced data, typically the nodes and edges are just rows of + * the corresponding data arrays, and each array has a column which contains the unique identifier + * for the node or edge. In this setup, there are other dimensions and groups which are aggregated + * for the use of dc.js charts, but the graph just shows or does not show the nodes and edges from + * the rows. + * + * This simple class supports that use case in three steps: + * 1. It creates a dimension keyed on the unique identifier (specified to `flat_group.make`) + * 2. It creates a group from the dimension with a reduction function that returns the row when the + * row is filtered in, and `null` when the row is filtered out. + * 3. It wraps the group in a fake group which filters out the resulting nulls. + * + * The result is a fake group whose `.all()` method returns an array of the currently filtered-in + * `{key, value}` pairs, where the key is that returned by the ID accessor, and the value is the raw + * row object from the data. + * + * This could be a useful crossfilter utility outside of dc.graph. For example, bubble charts and + * scatter plots often use similar functionality because each observation is either shown or not, + * and it is helpful to have the entire row available as reduced data. + * + * But it would need to be generalized and cleaned up. (For example, the way it has to create the + * crossfilter and dimension is kinda dumb.) And there is currently no such crossfilter utility + * library to put it in. + * + * @namespace flat_group + * @memberof dc_graph + * @type {{}} +**/ dc_graph.flat_group = (function() { var reduce_01 = { @@ -4265,11 +5040,34 @@ dc_graph.flat_group = (function() { } return { + /** + * Create a crossfilter, dimension, and flat group, as described in {@link dc_graph.flat_group flat_group}. + * Returns an object containing all three. + + * @method make + * @memberof dc_graph.flat_group + * @param {Array} vec - the data array for crossfilter + * @param {Function} id_accessor - accessor function taking a row object and returning its + * unique identifier + * @return {Object} `{crossfilter, dimension, group}` + **/ make: function(vec, id_accessor) { var ndx = crossfilter(vec); return dim_group(ndx, id_accessor); }, - another: function(ndx, id_accessor) { // wretched name + /** + * Create a flat dimension and group from an existing crossfilter. + * + * This is a wretched name for this function. + + * @method another + * @memberof dc_graph.flat_group + * @param {Object} ndx - crossfilter instance + * @param {Function} id_accessor - accessor function taking a row object and returning its + * unique identifier + * @return {Object} `{crossfilter, dimension, group}` + **/ + another: function(ndx, id_accessor) { return dim_group(ndx, id_accessor); } }; @@ -4277,44 +5075,86 @@ dc_graph.flat_group = (function() { -// make crossfilter-suitable data from d3.nest {key, values} format -dc_graph.convert_nest = function(nest, attrs, nodeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) { - inherit = inherit || {}; - var level = Object.keys(inherit).length; - if(attrs.length) { +var convert_tree_helper = function(data, attrs, options, parent, level, inherit) { + level = level || 0; + if(attrs.length > (options.valuesByAttr ? 1 : 0)) { var attr = attrs.shift(); var nodes = [], edges = []; - var children = nest.map(function(v) { - inherit[attr] = v.key; - var child = uuid(); - var node = clone(inherit); - node[nodeKeyAttr] = child; - node.name = attr + ':' + v.key; - node._level = level+1; - nodes.push(node); - if(parent) { - var edge = {}; - edge[edgeSourceAttr] = parent; - edge[edgeTargetAttr] = child; - edges.push(edge); + var children = data.map(function(v) { + var key = v[options.nestKey]; + var childKey = options.nestKeysUnique ? key : uuid(); + if(childKey) { + var node; + if(options.ancestorKeys) { + inherit = inherit || {}; + if(attr) + inherit[attr] = key; + node = Object.assign({}, inherit); + } else node = {}; + node[options.nodeKey] = childKey; + if(options.label && options.labelFun) + node[options.label] = options.labelFun(key, attr, v); + if(options.level) + node[options.level] = level+1; + nodes.push(node); + if(parent) { + var edge = {}; + edge[options.edgeSource] = parent; + edge[options.edgeTarget] = childKey; + edges.push(edge); + } } - var recurse = dc_graph.convert_nest(v.values, attrs.slice(0), nodeKeyAttr, edgeSourceAttr, edgeTargetAttr, child, clone(inherit)); + var children = options.valuesByAttr ? v[attrs[0]] : v.values; + var recurse = convert_tree_helper(children, attrs.slice(0), options, + childKey, level+1, Object.assign({}, inherit)); return recurse; }); return {nodes: Array.prototype.concat.apply(nodes, children.map(dc.pluck('nodes'))), edges: Array.prototype.concat.apply(edges, children.map(dc.pluck('edges')))}; } - else return {nodes: nest.map(function(v) { - v._level = level+1; + else return {nodes: data.map(function(v) { + v = Object.assign({}, v); + if(options.level) + v[options.level] = level+1; return v; - }), edges: nest.map(function(v) { + }), edges: data.map(function(v) { var edge = {}; - edge[edgeSourceAttr] = parent; - edge[edgeTargetAttr] = v[nodeKeyAttr]; + edge[options.edgeSource] = parent; + edge[options.edgeTarget] = v[options.nodeKey]; return edge; })}; }; +dc_graph.convert_tree = function(data, attrs, options) { + options = Object.assign({ + nodeKey: 'key', + edgeKey: 'key', + edgeSource: 'sourcename', + edgeTarget: 'targetname', + nestKey: 'key' + }, options); + if(Array.isArray(data)) + return convert_tree_helper(data, attrs, options, options.root, 0, options.inherit); + else { + attrs = [''].concat(attrs); + return convert_tree_helper([data], attrs, options, options.root, 0, options.inherit); + } +}; + +dc_graph.convert_nest = function(nest, attrs, nodeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) { + return dc_graph.convert_tree(nest, attrs, { + nodeKey: nodeKeyAttr, + edgeSource: edgeSourceAttr, + edgeTarget: edgeTargetAttr, + root: parent, + inherit: inherit, + ancestorKeys: true, + label: 'name', + labelFun: function(key, attr, v) { return attr + ':' + key; }, + level: '_level' + }); +}; + dc_graph.convert_adjacency_list = function(nodes, namesIn, namesOut) { // adjacenciesAttr, edgeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) { var edges = Array.prototype.concat.apply([], nodes.map(function(n) { diff --git a/dc.graph.js.map b/dc.graph.js.map index 0f98e489..04caa9ad 100644 --- a/dc.graph.js.map +++ b/dc.graph.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/banner.js","src/core.js","src/depth_first_traversal.js","src/generate_objects.js","src/shape.js","src/diagram.js","src/legend.js","src/constraint_pattern.js","src/tree_constraints.js","src/tree_positions.js","src/behavior.js","src/tip.js","src/select_nodes.js","src/highlight_neighbors.js","src/highlight_paths_group.js","src/highlight_paths.js","src/expand_collapse.js","src/load_graph.js","src/munge_graph.js","src/flat_group.js","src/convert.js","src/path_reader.js","src/path_selector.js","src/generate.js","src/line_breaks.js","src/type_graph.js","src/footer.js"],"names":[],"mappings":"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","file":"dc.graph.js","sourcesContent":["(function() { function _dc_graph(d3, crossfilter, dc) {\n'use strict';\n","/**\n * The entire dc.graph.js library is scoped under the **dc_graph** name space. It does not introduce\n * anything else into the global name space.\n *\n * Like in dc.js and most libraries built on d3, most `dc_graph` functions are designed to allow function chaining, meaning they return the current chart\n * instance whenever it is appropriate. The getter forms of functions do not participate in function\n * chaining because they return values that are not the chart.\n * @namespace dc_graph\n * @version 0.3.16\n * @example\n * // Example chaining\n * chart.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.3.16',\n constants: {\n CHART_CLASS: 'dc-graph'\n }\n};\n\nvar property = function (defaultValue, unwrap) {\n if(unwrap === undefined)\n unwrap = get_original;\n else if(unwrap === false)\n unwrap = identity;\n var value = defaultValue, react = null;\n var cascade = [];\n var ret = function (_) {\n if (!arguments.length) {\n return value;\n }\n if(react)\n react(_);\n value = _;\n return this;\n };\n ret.cascade = function (n, f) {\n for(var i = 0; i n) {\n cascade.splice(i, 0, {n: n, f: f});\n return ret;\n }\n }\n cascade.push({n: n, f: f});\n return ret;\n };\n ret._eval = function(o, n) {\n if(n===0 || !cascade.length)\n return dc_graph.functor_wrap(ret(), unwrap)(o);\n else {\n var last = cascade[n-1];\n return last.f(o, function() {\n return ret._eval(o, n-1);\n });\n }\n };\n ret.eval = function(o) {\n return ret._eval(o, cascade.length);\n };\n ret.react = function(_) {\n if (!arguments.length) {\n return react;\n }\n react = _;\n return this;\n };\n return ret;\n};\n\n// i'm sure there's a word for this in haskell\nfunction conditional_properties(npred, epred, props) {\n function _if(pred, curr) {\n return function(o, last) {\n return pred(o) ? curr(o) : last();\n };\n }\n var props2 = {};\n for(var p in props) {\n if(/^node/.test(p)) {\n if(npred)\n props2[p] = _if(npred, param(props[p]));\n }\n else if(/^edge/.test(p)) {\n if(epred)\n props2[p] = _if(epred, param(props[p]));\n }\n else console.error('only know how to deal with properties that start with \"node\" or \"edge\"');\n }\n return props2;\n}\n\nvar identity = function(x) { return x; };\nfunction compose(f, g) {\n return function() {\n return f(g.apply(null, arguments));\n };\n}\n\n// version of d3.functor that optionally wraps the function with another\n// one, if the parameter is a function\ndc_graph.functor_wrap = function (v, wrap) {\n if(typeof v === \"function\") {\n return wrap ? function(x) {\n return v(wrap(x));\n } : v;\n }\n else return function() {\n return v;\n };\n};\n\nfunction get_original(x) {\n return x.orig;\n}\n\n// we want to allow either values or functions to be passed to specify parameters.\n// if a function, the function needs a preprocessor to extract the original key/value\n// pair from the wrapper object we put it in.\nfunction param(v) {\n return dc_graph.functor_wrap(v, get_original);\n}\n\n// http://jsperf.com/cloning-an-object/101\nfunction clone(obj) {\n var target = {};\n for(var i in obj) {\n if(obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n}\n\n// http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\nfunction uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n\n// because i don't think we need to bind edge point data (yet!)\nvar bez_cmds = {\n 1: 'L', 2: 'Q', 3: 'C'\n};\n\nfunction generate_path(pts, bezDegree, close) {\n var cats = ['M', pts[0].x, ',', pts[0].y], remain = bezDegree;\n var hasNaN = false;\n for(var i = 1; i < pts.length; ++i) {\n if(isNaN(pts[i].x) || isNaN(pts[i].y))\n hasNaN = true;\n cats.push(remain===bezDegree ? bez_cmds[bezDegree] : ' ', pts[i].x, ',', pts[i].y);\n if(--remain===0)\n remain = bezDegree;\n }\n if(remain!=bezDegree)\n console.log(\"warning: pts.length didn't match bezian degree\", pts, bezDegree);\n if(close)\n cats.push('Z');\n return cats.join('');\n}\n\n// for IE (do we care really?)\nMath.hypot = Math.hypot || function() {\n var y = 0;\n var length = arguments.length;\n\n for (var i = 0; i < length; i++) {\n if (arguments[i] === Infinity || arguments[i] === -Infinity) {\n return Infinity;\n }\n y += arguments[i] * arguments[i];\n }\n return Math.sqrt(y);\n};\n","// arguably depth first search is a stupid algorithm to modularize -\n// there are many, many interesting moments to insert a behavior\n// and those end up being almost bigger than the function itself\n\n// this is an argument for providing a graph API which could make it\n// easy to just write a recursive function instead of using this\ndc_graph.depth_first_traversal = function(callbacks) { // {init, root, row, tree, place, sib, push, pop, skip, finish}\n return function(diagram, nodes, edges) {\n callbacks.init && callbacks.init();\n if(callbacks.tree)\n edges = edges.filter(function(e) { return callbacks.tree(e.orig); });\n var indegree = {};\n var outmap = edges.reduce(function(m, e) {\n var tail = diagram.edgeSource.eval(e),\n head = diagram.edgeTarget.eval(e);\n if(!m[tail]) m[tail] = [];\n m[tail].push(e);\n indegree[head] = (indegree[head] || 0) + 1;\n return m;\n }, {});\n\n var rows = [];\n var placed = {};\n function place_tree(n, r) {\n var key = diagram.nodeKey.eval(n);\n if(placed[key]) {\n callbacks.skip && callbacks.skip(n, indegree[key]);\n return;\n }\n if(!rows[r])\n rows[r] = [];\n callbacks.place && callbacks.place(n, r, rows[r]);\n rows[r].push(n);\n placed[key] = true;\n if(outmap[key])\n outmap[key].forEach(function(e, ei) {\n if(ei && callbacks.sib)\n callbacks.sib(false, outmap[key][ei-1].target, e.target);\n callbacks.push && callbacks.push();\n place_tree(e.target, r+1);\n });\n callbacks.pop && callbacks.pop(n);\n }\n\n var roots;\n if(callbacks.root)\n roots = nodes.filter(function(n) { return callbacks.root(n.orig); });\n else {\n roots = nodes.filter(function(n) { return !indegree[diagram.nodeKey.eval(n)]; });\n }\n roots.forEach(function(n, ni) {\n if(ni && callbacks.sib)\n callbacks.sib(true, roots[ni-1], n);\n callbacks.push && callbacks.push();\n place_tree(n, callbacks.row ? callbacks.row(n.orig) : 0);\n });\n callbacks.finish(rows);\n };\n};\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, key, assign, create, destroy) {\n if(!create) create = function(k, o) { };\n if(!destroy) destroy = function(k) { };\n var keep = {};\n function wrap(o) {\n var k = key(o);\n if(!preserved[k])\n create(k, preserved[k] = {}, o);\n var o1 = preserved[k];\n assign(o1, o);\n keep[k] = true;\n return o1;\n }\n var wlist = list.map(wrap);\n // delete any objects from last round that are no longer used\n for(var k in preserved)\n if(!keep[k]) {\n destroy(k, preserved[k]);\n delete preserved[k];\n }\n return wlist;\n}\n","function point_on_ellipse(A, B, dx, dy) {\n var tansq = Math.tan(Math.atan2(dy, dx));\n tansq = tansq*tansq; // why is this not just dy*dy/dx*dx ? ?\n var ret = {x: A*B/Math.sqrt(B*B + A*A*tansq), y: A*B/Math.sqrt(A*A + B*B/tansq)};\n if(dx<0)\n ret.x = -ret.x;\n if(dy<0)\n ret.y = -ret.y;\n return ret;\n}\n\nvar eps = 0.0000001;\nfunction between(a, b, c) {\n return a-eps <= b && b <= c+eps;\n}\n\n// Adapted from http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/1968345#1968345\nfunction segment_intersection(x1,y1,x2,y2, x3,y3,x4,y4) {\n var x=((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4)) /\n ((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));\n var y=((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4)) /\n ((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));\n if (isNaN(x)||isNaN(y)) {\n return false;\n } else {\n if (x1>=x2) {\n if (!between(x2, x, x1)) {return false;}\n } else {\n if (!between(x1, x, x2)) {return false;}\n }\n if (y1>=y2) {\n if (!between(y2, y, y1)) {return false;}\n } else {\n if (!between(y1, y, y2)) {return false;}\n }\n if (x3>=x4) {\n if (!between(x4, x, x3)) {return false;}\n } else {\n if (!between(x3, x, x4)) {return false;}\n }\n if (y3>=y4) {\n if (!between(y4, y, y3)) {return false;}\n } else {\n if (!between(y3, y, y4)) {return false;}\n }\n }\n return {x: x, y: y};\n}\n\n\nfunction point_on_polygon(points, x0, y0, x1, y1) {\n for(var i = 0; i < points.length; ++i) {\n var next = i===points.length-1 ? 0 : i+1;\n var isect = segment_intersection(points[i].x, points[i].y, points[next].x, points[next].y,\n x0, y0, x1, y1);\n if(isect)\n return isect;\n }\n return null;\n}\n\nfunction point_on_shape(chart, d, deltaX, deltaY) {\n switch(d.dcg_shape.shape) {\n case 'ellipse':\n return point_on_ellipse(d.dcg_rx, d.dcg_ry, deltaX, deltaY);\n case 'polygon':\n return point_on_polygon(d.dcg_points, 0, 0, deltaX, deltaY);\n }\n}\n\n// as many as we can get from\n// http://www.graphviz.org/doc/info/shapes.html\nvar dc_graph_shapes_ = {\n ellipse: function() {\n return {shape: 'ellipse'};\n },\n egg: function() {\n return {shape: 'polygon', sides: 100, distortion: -0.25};\n },\n triangle: function() {\n return {shape: 'polygon', sides: 3};\n },\n rectangle: function() {\n return {shape: 'polygon', sides: 4};\n },\n diamond: function() {\n return {shape: 'polygon', sides: 4, rotation: 45};\n },\n trapezium: function() {\n return {shape: 'polygon', sides: 4, distortion: -0.5};\n },\n parallelogram: function() {\n return {shape: 'polygon', sides: 4, skew: 0.5};\n },\n pentagon: function() {\n return {shape: 'polygon', sides: 5};\n },\n hexagon: function() {\n return {shape: 'polygon', sides: 6};\n },\n septagon: function() {\n return {shape: 'polygon', sides: 7};\n },\n octagon: function() {\n return {shape: 'polygon', sides: 8};\n },\n invtriangle: function() {\n return {shape: 'polygon', sides: 3, rotation: 180};\n },\n invtrapezium: function() {\n return {shape: 'polygon', sides: 4, distortion: 0.5};\n },\n square: function() {\n return {shape: 'polygon', sides: 4};\n },\n polygon: function(def) {\n return {\n shape: 'polygon',\n sides: def.sides,\n skew: def.skew,\n distortion: def.distortion,\n rotation: def.rotation\n };\n }\n};\n\ndc_graph.available_shapes = function() {\n var shapes = Object.keys(dc_graph_shapes_);\n return shapes.slice(0, shapes.length-1);\n};\n\nvar default_shape = {shape: 'ellipse'};\n\nfunction elaborate_shape(def) {\n var shape = def.shape;\n if(def.shape === 'random') {\n var keys = Object.keys(dc_graph_shapes_);\n shape = def._shape = keys[Math.floor(Math.random()*keys.length)];\n }\n return (dc_graph_shapes_[shape] || function() {\n throw new Error('unknown shape ' + def.shape);\n })(def);\n}\n\nfunction infer_shape(chart) {\n return function(d) {\n var def = chart.nodeShape.eval(d) || default_shape;\n d.dcg_shape = elaborate_shape(def);\n d.dcg_shape.abstract = def;\n };\n}\n\nfunction shape_changed(chart) {\n return function(d) {\n var def = chart.nodeShape.eval(d) || default_shape;\n var old = d.dcg_shape.abstract;\n if(def.shape !== old.shape)\n return true;\n else if(def.shape === 'polygon') {\n return def.shape.sides !== old.sides || def.shape.skew !== old.skew ||\n def.shape.distortion !== old.distortion || def.shape.rotation !== old.rotation;\n }\n else return false;\n };\n}\n\nfunction shape_element(chart) {\n return function(d) {\n var shape = d.dcg_shape.shape, elem;\n switch(shape) {\n case 'ellipse':\n elem = 'ellipse';\n break;\n case 'polygon':\n elem = 'path';\n break;\n default:\n throw new Error('unknown shape ' + shape);\n }\n return document.createElementNS(\"http://www.w3.org/2000/svg\", elem);\n };\n}\n\nfunction fit_shape(chart) {\n return function(d) {\n var r = chart.nodeRadius.eval(d);\n var bbox;\n if(chart.nodeFitLabel.eval(d))\n bbox = this.getBBox();\n var fitx = 0;\n if(bbox && bbox.width && bbox.height) {\n // make sure we can fit height in r\n r = Math.max(r, bbox.height/2 + 5);\n var rx;\n if(d.dcg_shape.shape === 'ellipse') {\n // solve (x/A)^2 + (y/B)^2) = 1 for A, with B=r, to fit text in ellipse\n // http://stackoverflow.com/a/433438/676195\n var y_over_B = bbox.height/2/r;\n rx = bbox.width/2/Math.sqrt(1 - y_over_B*y_over_B);\n d.dcg_rx = Math.max(rx, r);\n d.dcg_ry = r;\n } else {\n rx = bbox.width/2;\n // this is cribbed from graphviz but there is much i don't understand\n // and any errors are mine\n // https://github.com/ellson/graphviz/blob/6acd566eab716c899ef3c4ddc87eceb9b428b627/lib/common/shapes.c#L1996\n d.dcg_rx = rx*Math.sqrt(2)/Math.cos(Math.PI/(d.dcg_shape.sides||4));\n d.dcg_ry = r;\n }\n fitx = rx*2 + chart.nodePadding.eval(d) + chart.nodeStrokeWidth.eval(d);\n }\n else d.dcg_rx = d.dcg_ry = r;\n var rplus = r*2 + chart.nodePadding.eval(d) + chart.nodeStrokeWidth.eval(d);\n d.cola.width = Math.max(fitx, rplus);\n d.cola.height = rplus;\n };\n}\n\nfunction ellipse_attrs(chart, d) {\n return {\n rx: function(d) { return d.dcg_rx; },\n ry: function(d) { return d.dcg_ry; }\n };\n}\n\nfunction polygon_attrs(chart, d) {\n return {\n d: function(d) {\n var def = d.dcg_shape,\n sides = def.sides || 4,\n skew = def.skew || 0,\n distortion = def.distortion || 0,\n rotation = def.rotation || 0,\n align = (sides%2 ? 0 : 0.5), // even-sided horizontal top, odd pointy top\n angles = [];\n rotation = rotation/360 + 0.25; // start at y axis not x\n for(var i = 0; i= 0)\n throw new Error(\"f(a) must be less than 0\");\n if(f(b).val <= 0)\n throw new Error(\"f(b) must be greater than 0\");\n while(true) {\n if(!--patience)\n throw new Error(\"patience ran out\");\n var c = (a+b)/2,\n f_c = f(c), fv = f_c.val;\n if(Math.abs(fv) < 0.5)\n return f_c;\n if(fv > 0)\n b = c;\n else\n a = c;\n }\n}\n\nfunction draw_edge_to_shapes(chart, source, target, sx, sy, tx, ty,\n neighbor, dir, offset, source_padding, target_padding) {\n var deltaX, deltaY,\n sp, tp, points, bezDegree,\n headAng, retPath;\n if(!neighbor) {\n deltaX = tx - sx;\n deltaY = ty - sy;\n sp = point_on_shape(chart, source, deltaX, deltaY);\n tp = point_on_shape(chart, target, -deltaX, -deltaY);\n if(!sp) sp = {x: 0, y: 0};\n if(!tp) tp = {x: 0, y: 0};\n points = [{\n x: sx + sp.x,\n y: sy + sp.y\n }, {\n x: tx + tp.x,\n y: ty + tp.y\n }];\n bezDegree = 1;\n }\n else {\n var p_on_s = function(node, ang) {\n return point_on_shape(chart, node, Math.cos(ang)*1000, Math.sin(ang)*1000);\n };\n var compare_dist = function(node, port0, goal) {\n return function(ang) {\n var port = p_on_s(node, ang);\n if(!port)\n return {\n port: {x: 0, y: 0},\n val: 0,\n ang: ang\n };\n else\n return {\n port: port,\n val: Math.hypot(port.x - port0.x, port.y - port0.y) - goal,\n ang: ang\n };\n };\n };\n var srcang = Math.atan2(neighbor.sourcePort.y, neighbor.sourcePort.x),\n tarang = Math.atan2(neighbor.targetPort.y, neighbor.targetPort.x);\n var bss, bst;\n\n // don't like this but throwing is unacceptable\n try {\n bss = binary_search(compare_dist(source, neighbor.sourcePort, offset),\n srcang, srcang + 2 * dir * offset / source_padding);\n }\n catch(x) {\n bss = {ang: srcang, port: neighbor.sourcePort};\n }\n try {\n bst = binary_search(compare_dist(target, neighbor.targetPort, offset),\n tarang, tarang - 2 * dir * offset / source_padding);\n }\n catch(x) {\n bst = {ang: tarang, port: neighbor.targetPort};\n }\n\n sp = bss.port;\n tp = bst.port;\n var sdist = Math.hypot(sp.x, sp.y),\n tdist = Math.hypot(tp.x, tp.y),\n c1dist = sdist+source_padding/2,\n c2dist = tdist+target_padding/2;\n var c1X = sx + c1dist * Math.cos(bss.ang),\n c1Y = sy + c1dist * Math.sin(bss.ang),\n c2X = tx + c2dist * Math.cos(bst.ang),\n c2Y = ty + c2dist * Math.sin(bst.ang);\n points = [\n {x: sx + sp.x, y: sy + sp.y},\n {x: c1X, y: c1Y},\n {x: c2X, y: c2Y},\n {x: tx + tp.x, y: ty + tp.y}\n ];\n bezDegree = 3;\n }\n return {\n sourcePort: sp,\n targetPort: tp,\n points: points,\n bezDegree: bezDegree\n };\n}\n\n\n// from https://www.jasondavies.com/animated-bezier/\nfunction interpolate(d, p) {\n var r = [];\n for (var i=1; i\" + d.orig.value.name + \"\");\n * });\n * diagram.child('tip', tip);\n * @return {dc_graph.diagram}\n **/\n _chart.child = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return _chart;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(_chart);\n return _chart;\n };\n\n /**\n * Currently, you can specify 'cola' (the default) or 'dagre' as the Layout Algorithm and it\n * will replace the back-end. In the future, there will be subclasses like colaDiagram and\n * dagreDiagram with appropriate interfaces for each, but it is not yet clear which features are\n * common between them.\n * @name layoutAlgorithm\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [algo] - the name of the layout algorithm to use\n * @example\n * // use dagre for layout\n * diagram.layoutAlgorithm('dagre');\n * @return {dc_graph.diagram}\n **/\n _chart.layoutAlgorithm = property('cola');\n\n _chart.tickSize = property(1);\n\n\n _chart.edgeId = function(d) {\n return 'edge-' + _chart.edgeKey.eval(d).replace(/[^\\w-_]/g, '-');\n };\n\n _chart.arrowId = function(d, kind) {\n return 'arrow-' + kind + '-' + _chart.edgeId(d);\n };\n\n _chart.textpathId = function(d) {\n return 'textpath-' + _chart.edgeId(d);\n };\n\n // this kind of begs a (meta)graph ADT\n // instead of munging this into the diagram\n _chart.getNode = function(id) {\n return _nodes[id] ? _nodes[id].orig : null;\n };\n\n /**\n * Instructs cola.js to fit the connected components. Default: true\n * @name handleDisconnected\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [handleDisconnected=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _chart.handleDisconnected = property(true);\n\n function initLayout() {\n if(!_worker)\n _worker = new Worker('js/dc.graph.' + _chart.layoutAlgorithm() + '.worker.js');\n var args = {\n width: _chart.width(),\n height: _chart.height()\n };\n // generalize this? class hierarchy, what?\n switch(_chart.layoutAlgorithm()) {\n case 'cola':\n Object.assign(args, {\n handleDisconnected: _chart.handleDisconnected(),\n lengthStrategy: _chart.lengthStrategy(),\n baseLength: _chart.baseLength(),\n flowLayout: _chart.flowLayout(),\n tickSize: _chart.tickSize()\n });\n break;\n case 'dagre':\n Object.assign(args, {\n rankdir: _chart.rankdir()\n });\n }\n _worker.postMessage({\n command: 'init',\n args: args\n });\n }\n\n _chart._enterNode = function(nodeEnter) {\n if(_chart.nodeTitle())\n nodeEnter.append('title');\n nodeEnter.each(infer_shape(_chart));\n nodeEnter.append(shape_element(_chart))\n .attr('class', 'node-shape');\n nodeEnter.append('text')\n .attr('class', 'node-label');\n return _chart;\n };\n\n _chart._updateNode = function(node) {\n var changedShape = node.filter(shape_changed(_chart));\n changedShape.select('.node-shape').remove();\n changedShape.each(infer_shape(_chart));\n changedShape.insert(shape_element(_chart), ':first-child')\n .attr('class', 'node-shape');\n node.select('title')\n .text(_chart.nodeTitle.eval);\n var text = node.select('text.node-label');\n var tspan = text.selectAll('tspan').data(function(n) {\n var lines = _chart.nodeLabel.eval(n);\n if(!lines)\n return [];\n else if(typeof lines === 'string')\n lines = [lines];\n var first = lines.length%2 ? 0.3 - (lines.length-1)/2 : 1-lines.length/2;\n return lines.map(function(line, i) { return {line: line, ofs: (i==0 ? first : 1) + 'em'}; });\n });\n tspan.enter().append('tspan')\n .attr('x', 0)\n .attr('dy', function(d) { return d.ofs; });\n tspan.text(function(d) { return d.line; });\n tspan.exit().remove();\n text\n .attr('fill', _chart.nodeLabelFill.eval)\n .each(fit_shape(_chart));\n node.select('.node-shape')\n .each(shape_attrs(_chart))\n .attr({\n stroke: _chart.nodeStroke.eval,\n 'stroke-width': _chart.nodeStrokeWidth.eval,\n fill: compose(_chart.nodeFillScale() || identity, _chart.nodeFill.eval)\n });\n return _chart;\n };\n\n function has_source_and_target(e) {\n return !!e.source && !!e.target;\n }\n\n // three stages: delete before layout, and modify & insert split the transitionDuration\n function transition_duration() {\n return (_chart.stageTransitions() !== 'none') ?\n _chart.transitionDuration() / 2 :\n _chart.transitionDuration();\n }\n\n function transition_delay(is_enter) {\n return _chart.stageTransitions() === 'none' ||\n _chart.stageTransitions() === 'modins' === !is_enter ?\n 0 :\n _chart.transitionDuration() / 2;\n }\n\n _chart.isRunning = function() {\n return _running;\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Computes a new layout based on the nodes and edges in the edge groups, and\n * displays the diagram. To the extent possible, the diagram will minimize changes in\n * positions from the previous layout. `.render()` must be called the first time, and\n * `.redraw()` can be called after that.\n\n * `.redraw()` will be triggered by changes to the filters in any other charts in the same\n * dc.js chart group.\n\n * Unlike in dc.js, `redraw` executes asynchronously, because drawing can be computationally\n * intensive, and the diagram will be drawn multiple times if\n * {@link #dc_graph.diagram+showLayoutSteps showLayoutSteps}\n * is enabled. Watch the {@link #dc_graph.diagram+on 'end'} event to know when layout is\n * complete.\n **/\n var _needsRedraw = false;\n _chart.redraw = function () {\n // since dc.js can receive UI events and trigger redraws whenever it wants,\n // and cola absolutely will not tolerate being poked while it's doing layout,\n // we need to guard the startLayout call.\n if(_running) {\n _needsRedraw = true;\n return this;\n }\n else return _chart.startLayout();\n };\n\n _chart.startLayout = function () {\n var nodes = _chart.nodeGroup().all();\n var edges = _chart.edgeGroup().all();\n if(_running) {\n throw new Error('dc_graph.diagram.redraw already running!');\n }\n _running = true;\n\n if(_worker)\n _worker.postMessage({command: 'stop'});\n\n if(_chart.initLayoutOnRedraw())\n initLayout();\n\n // ordering shouldn't matter, but we support ordering in case it does\n if(_chart.nodeOrdering()) {\n nodes = crossfilter.quicksort.by(_chart.nodeOrdering())(nodes.slice(0), 0, nodes.length);\n }\n if(_chart.edgeOrdering()) {\n edges = crossfilter.quicksort.by(_chart.edgeOrdering())(edges.slice(0), 0, edges.length);\n }\n\n var wnodes = regenerate_objects(_nodes, nodes, function(v) {\n return _chart.nodeKey()(v);\n }, function(v1, v) {\n v1.orig = v;\n v1.cola = v1.cola || {};\n v1.cola.dcg_nodeKey = _chart.nodeKey.eval(v1);\n if(_chart.nodeFixed())\n v1.cola.dcg_nodeFixed = _chart.nodeFixed.eval(v1);\n });\n var wedges = regenerate_objects(_edges, edges, function(e) {\n return _chart.edgeKey()(e);\n }, function(e1, e) {\n e1.orig = e;\n e1.cola = e1.cola || {};\n e1.cola.dcg_edgeKey = _chart.edgeKey.eval(e1);\n e1.cola.dcg_edgeSource = _chart.edgeSource.eval(e1);\n e1.cola.dcg_edgeTarget = _chart.edgeTarget.eval(e1);\n e1.source = _nodes[e1.cola.dcg_edgeSource];\n e1.target = _nodes[e1.cola.dcg_edgeTarget];\n e1.cola.dcg_edgeLength = _chart.edgeLength.eval(e1);\n });\n\n // remove edges that don't have both end nodes\n wedges = wedges.filter(has_source_and_target);\n\n // remove self-edges (since we can't draw them - will be option later)\n wedges = wedges.filter(function(e) { return e.source !== e.target; });\n\n wedges = wedges.filter(_chart.edgeIsShown.eval);\n\n // and optionally, nodes that have no edges\n if(_chart.induceNodes()) {\n var keeps = {};\n wedges.forEach(function(e) {\n keeps[e.cola.dcg_edgeSource] = true;\n keeps[e.cola.dcg_edgeTarget] = true;\n });\n wnodes = wnodes.filter(function(n) { return keeps[n.cola.dcg_nodeKey]; });\n for(var k in _nodes)\n if(!keeps[k])\n delete _nodes[k];\n }\n\n wnodes.forEach(function(v, i) {\n v.index = i;\n });\n\n _stats = {nnodes: wnodes.length, nedges: wedges.length};\n\n // annotate parallel edges so we can draw them specially\n if(_chart.parallelEdgeOffset()) {\n var em = new Array(wnodes.length);\n for(var i = 0; i < em.length; ++i) {\n em[i] = new Array(em.length); // technically could be diagonal array\n for(var j = 0; j < em.length; ++j)\n em[i][j] = {\n n: 0,\n ports: {\n rev: []\n }\n };\n }\n wedges.forEach(function(e) {\n var min = Math.min(e.source.index, e.target.index),\n max = Math.max(e.source.index, e.target.index);\n e.parallel = em[min][max].n++;\n e.ports = em[min][max].ports;\n e.ports.rev.push(min !== e.source.index);\n });\n for(i = 0; i < em.length; ++i)\n for(j = 0; j < em.length; ++j)\n if(em[i][j].n)\n em[i][j].ports.n = em[i][j].n;\n }\n\n // create edge SVG elements\n var edge = _edgeLayer.selectAll('.edge')\n .data(wedges, _chart.edgeKey.eval);\n var edgeEnter = edge.enter().append('svg:path')\n .attr({\n class: 'edge',\n id: _chart.edgeId,\n opacity: 0\n });\n\n edge.exit().transition()\n .duration(transition_duration())\n .delay(_chart.deleteDelay())\n .attr('opacity', 0)\n .each(function(d) {\n edgeArrow(d, 'head', null);\n edgeArrow(d, 'head', null);\n })\n .remove();\n\n // another wider copy of the edge just for hover events\n var edgeHover = _edgeLayer.selectAll('.edge-hover')\n .data(wedges, _chart.edgeKey.eval);\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'edge-hover')\n .attr('opacity', 0)\n .attr('stroke', 'green')\n .attr('stroke-width', 10)\n .on('mouseover', function(d) {\n d3.select('#' + _chart.edgeId(d) + '-label')\n .attr('visibility', 'visible');\n })\n .on('mouseout', function(d) {\n d3.select('#' + _chart.edgeId(d) + '-label')\n .attr('visibility', 'hidden');\n });\n edgeHover.exit().remove();\n\n var edgeLabels = _edgeLayer.selectAll('.edge-label')\n .data(wedges, _chart.edgeKey.eval);\n var edgeLabelsEnter = edgeLabels.enter()\n .append('text')\n .attr('id', function(d) {\n return _chart.edgeId(d) + '-label';\n })\n .attr('visibility', 'hidden')\n .attr({'class':'edge-label',\n 'text-anchor': 'middle',\n dy:-2})\n .append('textPath')\n .attr('startOffset', '50%')\n .attr('xlink:href', function(d) {\n var id = _chart.textpathId(d);\n return '#' + id;\n });\n var textPaths = _defs.selectAll('path.edge-label-path')\n .data(wedges, _chart.textpathId);\n var textPathsEnter = textPaths.enter()\n .append('svg:path').attr({\n class: 'edge-label-path',\n id: _chart.textpathId\n });\n edgeLabels.each(function(d) {\n d.dcg_bbox = null;\n })\n .selectAll('textPath')\n .text(function(d){\n return _chart.edgeLabel.eval(d);\n });\n edgeLabels.exit().transition()\n .duration(transition_duration())\n .delay(_chart.deleteDelay())\n .attr('opacity', 0).remove();\n\n // create node SVG elements\n var node = _nodeLayer.selectAll('.node')\n .data(wnodes, _chart.nodeKey.eval);\n var nodeEnter = node.enter().append('g')\n .attr('class', 'node')\n .attr('opacity', '0'); // don't show until has layout\n // .call(_d3cola.drag);\n\n _chart._enterNode(nodeEnter);\n\n node.exit().transition()\n .duration(transition_duration())\n .delay(_chart.deleteDelay())\n .attr('opacity', 0)\n .remove();\n\n _dispatch.drawn(node, edge, edgeHover);\n\n _refresh(node, edge);\n\n // really we should have layout chaining like in the good old Dynagraph days\n // the ordering of this and the previous 4 statements is somewhat questionable\n if(_chart.initialLayout())\n _chart.initialLayout()(_chart, wnodes, wedges);\n\n // no layout if the topology hasn't changed\n var skip_layout = false;\n if(!_chart.layoutUnchanged()) {\n var nodes_snapshot = JSON.stringify(wnodes.map(get_original)),\n edges_snapshot = JSON.stringify(wedges.map(get_original));\n if(nodes_snapshot === _nodes_snapshot && edges_snapshot === _edges_snapshot)\n skip_layout = true;\n _nodes_snapshot = nodes_snapshot;\n _edges_snapshot = edges_snapshot;\n }\n\n // cola constraints always use indices, but node references\n // are more friendly, so translate those\n\n // i am not satisfied with this constraint generation api...\n // https://github.com/dc-js/dc.graph.js/issues/10\n var constraints = _chart.constrain()(_chart, wnodes, wedges);\n // translate references from names to indices (ugly)\n constraints.forEach(function(c) {\n if(c.type) {\n switch(c.type) {\n case 'alignment':\n c.offsets.forEach(function(o) {\n o.node = _nodes[o.node].index;\n });\n break;\n case 'circle':\n c.nodes.forEach(function(n) {\n n.node = _nodes[n.node].index;\n });\n break;\n }\n } else if(c.axis) {\n c.left = _nodes[c.left].index;\n c.right = _nodes[c.right].index;\n }\n });\n\n // pseudo-cola.js features\n\n // 1. non-layout edges are drawn but not told to cola.js\n var layout_edges = wedges.filter(_chart.edgeIsLayout.eval);\n var nonlayout_edges = wedges.filter(function(x) {\n return !_chart.edgeIsLayout.eval(x);\n });\n\n // 2. type=circle constraints\n var circle_constraints = constraints.filter(function(c) {\n return c.type === 'circle';\n });\n constraints = constraints.filter(function(c) {\n return c.type !== 'circle';\n });\n circle_constraints.forEach(function(c) {\n var R = (c.distance || _chart.baseLength()*4) / (2*Math.sin(Math.PI/c.nodes.length));\n var nindices = c.nodes.map(function(x) { return x.node; });\n var namef = function(i) {\n return _chart.nodeKey.eval(wnodes[i]);\n };\n var wheel = dc_graph.wheel_edges(namef, nindices, R)\n .map(function(e) {\n var e1 = {internal: e};\n e1.source = _nodes[e.sourcename];\n e1.target = _nodes[e.targetname];\n return e1;\n });\n layout_edges = layout_edges.concat(wheel);\n });\n\n // 3. ordered alignment\n var ordered_constraints = constraints.filter(function(c) {\n return c.type === 'ordering';\n });\n constraints = constraints.filter(function(c) {\n return c.type !== 'ordering';\n });\n ordered_constraints.forEach(function(c) {\n var sorted = c.nodes.map(function(n) { return _nodes[n]; });\n if(c.ordering) {\n var sort = crossfilter.quicksort.by(param(c.ordering));\n sorted = sort(sorted, 0, sorted.length);\n }\n var left;\n sorted.forEach(function(n, i) {\n if(i===0)\n left = n;\n else {\n constraints.push({\n left: left.index,\n right: (left = n).index,\n axis: c.axis,\n gap: c.gap\n });\n }\n });\n });\n if(_chart.legend())\n _chart.legend().redraw();\n if(skip_layout) {\n _running = false;\n _dispatch.end(false);\n return this;\n }\n var startTime = Date.now();\n\n function populate_cola(rnodes, redges) {\n rnodes.forEach(function(rn) {\n var n = _nodes[rn.dcg_nodeKey];\n n.cola.x = rn.x;\n n.cola.y = rn.y;\n });\n redges.forEach(function(re) {\n var e = _edges[re.dcg_edgeKey];\n });\n }\n _worker.onmessage = function(e) {\n var args = e.data.args;\n switch(e.data.response) {\n case 'tick':\n var elapsed = Date.now() - startTime;\n populate_cola(args.nodes, args.edges);\n if(_chart.showLayoutSteps())\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter);\n if(_needsRedraw || _chart.timeLimit() && elapsed > _chart.timeLimit()) {\n console.log('cancelled');\n _worker.postMessage({\n command: 'stop'\n });\n }\n break;\n case 'end':\n if(!_chart.showLayoutSteps()) {\n populate_cola(args.nodes, args.edges);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter);\n }\n else layout_done(true);\n var do_zoom;\n switch(_chart.autoZoom()) {\n case 'always':\n do_zoom = true;\n break;\n case 'once':\n do_zoom = true;\n _chart.autoZoom(null);\n break;\n default:\n do_zoom = false;\n }\n calc_bounds(node, edge);\n if(do_zoom)\n auto_zoom();\n break;\n case 'start':\n console.log('algo ' + _chart.layoutAlgorithm() + ' started.');\n _dispatch.start();\n }\n };\n _dispatch.start(); // cola doesn't seem to fire this itself?\n _worker.postMessage({\n command: 'data',\n args: {\n nodes: wnodes.map(function(v) { return v.cola; }),\n edges: layout_edges.map(function(v) { return v.cola; }),\n constraints: constraints,\n opts: {groupConnected: _chart.groupConnected()}\n }\n });\n _worker.postMessage({\n command: 'start',\n args: {\n initialUnconstrainedIterations: 10,\n initialUserConstraintIterations: 20,\n initialAllConstraintsIterations: 20,\n initialOnly: _chart.initialOnly(),\n showLayoutSteps: _chart.showLayoutSteps()\n }\n });\n return this;\n };\n\n function _refresh(node, edge) {\n edge\n .attr('stroke', _chart.edgeStroke.eval)\n .attr('stroke-width', _chart.edgeStrokeWidth.eval)\n .attr('marker-end', function(d) {\n var name = _chart.edgeArrowhead.eval(d),\n id = edgeArrow(d, 'head', name);\n return id ? 'url(#' + id + ')' : null;\n })\n .attr('marker-start', function(d) {\n var name = _chart.edgeArrowtail.eval(d),\n arrow_id = edgeArrow(d, 'tail', name);\n return name ? 'url(#' + arrow_id + ')' : null;\n })\n .each(function(e) {\n d3.selectAll('#' + _chart.arrowId(e, 'head') + ',#' + _chart.arrowId(e, 'tail'))\n .attr('fill', _chart.edgeStroke.eval(e));\n });\n\n _chart._updateNode(node);\n }\n\n _chart.refresh = function(node, edge, edgeHover, edgeLabels, textPaths) {\n node = node || _nodeLayer.selectAll('.node');\n edge = edge || _edgeLayer.selectAll('.edge');\n _refresh(node, edge);\n\n edgeHover = edgeHover || _edgeLayer.selectAll('.edge-hover');\n edgeLabels = edgeLabels || _edgeLayer.selectAll('.edge-label');\n textPaths = textPaths || _defs.selectAll('path.edge-label-path');\n var nullSel = d3.select(null); // no enters\n draw(node, nullSel, edge, nullSel, edgeHover, nullSel, edgeLabels, nullSel, textPaths, nullSel);\n };\n\n\n function layout_done(happens) {\n _dispatch.end(happens);\n _running = false;\n if(_needsRedraw) {\n _needsRedraw = false;\n window.setTimeout(function() {\n if(!_chart.isRunning()) // someone else may already have started\n _chart.redraw();\n }, 0);\n }\n }\n\n function calc_edge_path(d, age, sx, sy, tx, ty) {\n if(!d.ports[age]) {\n var source_padding = d.source.dcg_ry +\n _chart.nodeStrokeWidth.eval(d.source) / 2,\n target_padding = d.target.dcg_ry +\n _chart.nodeStrokeWidth.eval(d.target) / 2;\n d.ports[age] = new Array(d.ports.n);\n var reversedness = d.ports.rev[d.parallel];\n for(var p = 0; p < d.ports.n; ++p) {\n // alternate parallel edges over, then under\n var dir = (!!(p%2) === (sx < tx)) ? -1 : 1,\n port = Math.floor((p+1)/2),\n last = port ? d.ports[age][p > 2 ? p - 2 : 0].path : null;\n var path = draw_edge_to_shapes(_chart, d.source, d.target, sx, sy, tx, ty,\n last, dir, _chart.parallelEdgeOffset(),\n source_padding, target_padding\n );\n if(d.ports.rev[p] !== reversedness)\n path.points.reverse();\n var spos = path.points[0], tpos = path.points[path.points.length-1];\n var near = bezier_point(path.points, 0.75);\n d.ports[age][p] = {\n path: path,\n orient: Math.atan2(tpos.y - near.y, tpos.x - near.x) + 'rad'\n };\n }\n }\n return d.ports[age][d.parallel].path;\n }\n\n function calc_old_edge_path(d) {\n calc_edge_path(d, 'old', d.source.prevX || d.source.cola.x, d.source.prevY || d.source.cola.y,\n d.target.prevX || d.target.cola.x, d.target.prevY || d.target.cola.y);\n }\n\n function calc_new_edge_path(d) {\n var path = calc_edge_path(d, 'new', d.source.cola.x, d.source.cola.y, d.target.cola.x, d.target.cola.y);\n var spos = path.points[0], tpos = path.points[path.points.length-1];\n d.length = Math.hypot(tpos.x-spos.x, tpos.y-spos.y);\n }\n\n function render_edge_path(age) {\n return function(d) {\n var path = d.ports[age][d.parallel].path;\n return generate_path(path.points, path.bezDegree);\n };\n }\n\n function render_edge_label_path(age) {\n return function(d) {\n var path = d.ports[age][d.parallel].path;\n var points = d.target.cola.x < d.source.cola.x ?\n path.points.slice(0).reverse() : path.points;\n return generate_path(points, path.bezDegree);\n };\n }\n\n // wait on multiple transitions, adapted from\n // http://stackoverflow.com/questions/10692100/invoke-a-callback-at-the-end-of-a-transition\n function endall(transitions, callback) {\n if (transitions.every(function(transition) { return transition.size() === 0; }))\n callback();\n var n = 0;\n transitions.forEach(function(transition) {\n transition\n .each(function() { ++n; })\n .each('end.all', function() { if (!--n) callback(); });\n });\n }\n\n function node_bounds(n) {\n return {left: n.cola.x - n.dcg_rx, top: n.cola.y - n.dcg_ry,\n right: n.cola.x + n.dcg_rx, bottom: n.cola.y + n.dcg_ry};\n }\n\n function union_bounds(b1, b2) {\n return {\n left: Math.min(b1.left, b2.left),\n top: Math.min(b1.top, b2.top),\n right: Math.max(b1.right, b2.right),\n bottom: Math.max(b1.bottom, b2.bottom)\n };\n }\n\n function point_to_bounds(p) {\n return {\n left: p.x,\n top: p.y,\n right: p.x,\n bottom: p.y\n };\n }\n\n function edge_bounds(e) {\n // assumption: edge must have some points\n var points = e.ports.new[e.parallel].path.points;\n return points.map(point_to_bounds).reduce(union_bounds);\n }\n\n function debug_bounds(bounds) {\n var brect = _g.selectAll('rect.bounds').data([0]);\n brect.enter()\n .insert('rect', ':first-child').attr({\n class: 'bounds',\n fill: 'rgba(128,255,128,0.1)',\n stroke: '#000'\n });\n brect\n .attr({\n x: bounds.left,\n y: bounds.top,\n width: bounds.right - bounds.left,\n height: bounds.bottom - bounds.top\n });\n }\n\n var _bounds;\n function calc_bounds(node, edge) {\n if((_chart.fitStrategy() || _chart.restrictPan()) && node.size()) {\n // assumption: there can be no edges without nodes\n _bounds = node.data().map(node_bounds).reduce(union_bounds);\n _bounds = edge.data().map(edge_bounds).reduce(union_bounds, _bounds);\n }\n }\n\n function auto_zoom() {\n if(_chart.fitStrategy()) {\n if(!_bounds)\n return;\n var vwidth = _bounds.right - _bounds.left, vheight = _bounds.bottom - _bounds.top,\n swidth = _chart.width(), sheight = _chart.height(), viewBox;\n if(_chart.DEBUG_BOUNDS)\n debug_bounds(_bounds);\n var fitS = _chart.fitStrategy(), pAR, translate = [0,0], scale = 1,\n amv; // align margins vertically\n if(['default', 'vertical', 'horizontal'].indexOf(fitS) >= 0) {\n var sAR = sheight / swidth, vAR = vheight / vwidth,\n vrl = vAR 2)\n throw new Error(\"align_ expecting 0-2 sides, not \" + sides.length);\n var bounds = margined_bounds();\n translate = _zoom.translate();\n scale = _zoom.scale();\n sides.forEach(function(s) {\n switch(s) {\n case 'l':\n translate[0] = align_left(translate, bounds.left);\n break;\n case 't':\n translate[1] = align_top(translate, bounds.top);\n break;\n case 'r':\n translate[0] = align_right(translate, bounds.right);\n break;\n case 'b':\n translate[1] = align_bottom(translate, bounds.bottom);\n break;\n default:\n throw new Error(\"align_ expecting l t r or b, not '\" + s + \"'\");\n }\n });\n }\n else if(typeof fitS === 'function') {\n var fit = fitS(vwidth, vheight, swidth, sheight);\n pAR = fit.pAR;\n translate = fit.translate;\n scale = fit.scale;\n viewBox = fit.viewBox;\n }\n else if(typeof fitS === 'string')\n pAR = _chart.fitStrategy();\n else\n throw new Error('unknown fitStrategy type ' + typeof fitS);\n\n if(pAR !== undefined) {\n if(!viewBox)\n viewBox = [_bounds.left, _bounds.top, vwidth, vheight].join(' ');\n _svg.attr({\n viewBox: viewBox,\n preserveAspectRatio: pAR\n });\n }\n _zoom.translate(translate).scale(scale).event(_svg);\n }\n }\n\n function draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter) {\n console.assert(edge.data().every(has_source_and_target));\n\n var nodeEntered = {};\n nodeEnter\n .each(function(n) {\n nodeEntered[_chart.nodeKey.eval(n)] = true;\n })\n .attr('transform', function (d) {\n // start new nodes at their final position\n return 'translate(' + d.cola.x + ',' + d.cola.y + ')';\n });\n var ntrans = node\n .transition()\n .duration(transition_duration())\n .delay(function(n) {\n return transition_delay(nodeEntered[_chart.nodeKey.eval(n)]);\n })\n .attr('opacity', _chart.nodeOpacity.eval)\n .attr('transform', function (d) {\n return 'translate(' + d.cola.x + ',' + d.cola.y + ')';\n })\n .each('end.record', function(d) {\n d.prevX = d.cola.x;\n d.prevY = d.cola.y;\n });\n\n // reset edge ports\n edge.each(function(d) {\n d.ports.new = null;\n d.ports.old = null;\n });\n\n var edgeEntered = {};\n edgeEnter\n .each(function(e) {\n edgeEntered[_chart.edgeKey.eval(e)] = true;\n })\n .each(function(e) {\n // if staging transitions, just fade new edges in at new position\n // else start new edges at old positions of nodes, if any, else new positions\n var age;\n if(_chart.stageTransitions() === 'modins') {\n calc_new_edge_path(e);\n age = 'new';\n }\n else {\n calc_old_edge_path(e);\n age = 'old';\n }\n if(_chart.edgeArrowhead.eval(e))\n d3.select('#' + _chart.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.ports[age][e.parallel].orient;\n });\n })\n .attr('d', render_edge_path(_chart.stageTransitions() === 'modins' ? 'new' : 'old'));\n\n var etrans = edge.each(calc_new_edge_path)\n .each(function(e) {\n if(_chart.edgeArrowhead.eval(e)) {\n d3.select('#' + _chart.arrowId(e, 'head'))\n .transition().duration(transition_duration())\n .delay(transition_delay(false))\n .attr('orient', function() {\n return e.ports.new[e.parallel].orient;\n });\n }\n })\n .transition()\n .duration(transition_duration())\n .delay(function(e) {\n return transition_delay(edgeEntered[_chart.edgeKey.eval(e)]);\n })\n .attr('opacity', _chart.edgeOpacity.eval)\n .attr('d', function(e) {\n var when = _chart.stageTransitions() === 'insmod' &&\n edgeEntered[_chart.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_path(when)(e);\n });\n textPathsEnter\n .attr('d', render_edge_label_path(_chart.stageTransitions() === 'modins' ? 'new' : 'old'));\n var textTrans = textPaths.transition()\n .duration(transition_duration())\n .delay(function(e) {\n return transition_delay(edgeEntered[_chart.edgeKey.eval(e)]);\n })\n .attr('opacity', _chart.edgeOpacity.eval)\n .attr('d', function(e) {\n var when = _chart.stageTransitions() === 'insmod' &&\n edgeEntered[_chart.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_label_path(when)(e);\n });\n if(_chart.stageTransitions() === 'insmod') {\n // inserted edges transition twice in insmod mode\n if(transition_duration() >= 50) {\n etrans = etrans.transition()\n .duration(transition_duration())\n .attr('d', render_edge_path('new'));\n textTrans = textTrans.transition()\n .duration(transition_duration())\n .attr('d', render_edge_label_path('new'));\n } else {\n // if transitions are too short, we run into various problems,\n // from transitions not completing to objects not found\n // so don't try to chain in that case\n // this also helped once: d3.timer.flush();\n etrans\n .attr('d', render_edge_path('new'));\n textTrans\n .attr('d', render_edge_path('new'));\n }\n }\n\n // signal layout done when all transitions complete\n // because otherwise client might start another layout and lock the processor\n if(!_chart.showLayoutSteps())\n endall([ntrans, etrans, textTrans], function() { layout_done(true); });\n\n edgeHover.attr('d', render_edge_path('new'));\n }\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Erases any existing SVG elements and draws the diagram from scratch. `.render()`\n * must be called the first time, and `.redraw()` can be called after that.\n * @name render\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _chart.render = function () {\n if(!_chart.initLayoutOnRedraw())\n initLayout();\n _chart.resetSvg();\n _g = _svg.append('g');\n _edgeLayer = _g.append('g');\n _nodeLayer = _g.append('g');\n\n if(_chart.legend())\n _chart.legend().render();\n return _chart.redraw();\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Attaches an event handler to the diagram. The currently supported events are\n * * `start()` - layout is starting\n * * `drawn(nodes, edges)` - the node and edge elements have been rendered to the screen\n * and can be modified through the passed d3 selections.\n * * `end()` - diagram layout has completed.\n * @name on\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [event] - the event to subscribe to\n * @param {Function} [f] - the event handler\n * @return {dc_graph.diagram}\n **/\n _chart.on = function(event, f) {\n _dispatch.on(event, f);\n return this;\n };\n\n /**\n * Returns an object with current statistics on graph layout.\n * * `nnodes` - number of nodes displayed\n * * `nedges` - number of edges displayed\n * @name getStats\n * @memberof dc_graph.diagram\n * @instance\n * @return {}\n * @return {dc_graph.diagram}\n **/\n _chart.getStats = function() {\n return _stats;\n };\n\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Execute a d3 single selection in the diagram's scope using the given selector\n * and return the d3 selection. Roughly the same as\n * ```js\n * d3.select('#diagram-id').select(selector)\n * ```\n * Since this function returns a d3 selection, it is not chainable. (However, d3 selection\n * calls can be chained after it.)\n * @name select\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [selector]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n **/\n _chart.select = function (s) {\n return _chart.root().select(s);\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Selects all elements that match the d3 single selector in the diagram's scope,\n * and return the d3 selection. Roughly the same as\n\n * ```js\n * d3.select('#diagram-id').selectAll(selector)\n * ```\n\n * Since this function returns a d3 selection, it is not chainable. (However, d3 selection\n * calls can be chained after it.)\n * @name selectAll\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [selector]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n **/\n _chart.selectAll = function (s) {\n return _chart.root() ? _chart.root().selectAll(s) : null;\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Returns the top svg element for this specific chart. You can also pass in a new\n * svg element, but setting the svg element on a diagram may have unexpected consequences.\n * @name svg\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.selection} [selection]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n\n **/\n _chart.svg = function (_) {\n if (!arguments.length) {\n return _svg;\n }\n _svg = _;\n return _chart;\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Remove the diagram's SVG elements from the dom and recreate the container SVG\n * element.\n * @name resetSvg\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _chart.resetSvg = function () {\n _chart.select('svg').remove();\n return generateSvg();\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Causes all charts in the chart group to be redrawn.\n * @name redrawGroup\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _chart.redrawGroup = function () {\n dc.redrawAll(chartGroup);\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Causes all charts in the chart group to be rendered.\n * @name renderGroup\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _chart.renderGroup = function () {\n dc.renderAll(chartGroup);\n };\n\n /**\n * Creates an svg marker definition for drawing edge arrow tails or heads. The `viewBox` of\n * the marker is `0 -5 10 10`, so the arrow should be drawn from (0, -5) to (10, 5); it\n * will be moved and sized based on the other parameters, and rotated based on the\n * orientation of the edge.\n\n * (If further customization is required, it is possible to append other `svg:defs` to\n * `chart.svg()` and use refer to them by `id`.)\n * @name defineArrow\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} name - the identifier to give the marker, to be used with\n * {@link #dc_graph.diagram+edgeArrowhead edgeArrowhead} or\n * {@link #dc_graph.diagram+edgeArrowtail edgeArrowtail}\n * @param {Number} width - the width, in pixels, to draw the marker\n * @param {Number} height - the height, in pixels, to draw the marker\n * @param {Number} refX - the X reference position, in marker coordinates, which will be\n * aligned to the endpoint of the edge\n * @param {Number} refY - the Y reference position\n * @param {Function} drawf - a function to draw the marker using d3 SVG primitives, which\n * takes the marker object as its parameter.\n * @example\n * // the built-in `vee` arrow is defined like so:\n * _chart.defineArrow('vee', 12, 12, 10, 0, function(marker) {\n * marker.append('svg:path')\n * .attr('d', 'M0,-5 L10,0 L0,5 L3,0')\n * .attr('stroke-width', '0px');\n * });\n * @return {dc_graph.diagram}\n **/\n _chart.defineArrow = function(name, width, height, refX, refY, drawf) {\n _arrows[name] = {\n name: name,\n width: width,\n height: height,\n refX: refX,\n refY: refY,\n drawFunction: drawf\n };\n return _chart;\n };\n\n _chart.addOrRemoveDef = function(id, whether, tag) {\n var data = whether ? [0] : [];\n var sel = _defs.selectAll('#' + id).data(data);\n\n var selEnter = sel\n .enter().append(tag)\n .attr('id', id);\n sel.exit().remove();\n return selEnter;\n };\n\n function edgeArrow(d, kind, name) {\n var id = _chart.arrowId(d, kind),\n markerEnter = _chart.addOrRemoveDef(id, !!name, 'svg:marker');\n\n if(name) {\n markerEnter\n .attr('viewBox', '0 -5 10 10')\n .attr('refX', _arrows[name].refX)\n .attr('refY', _arrows[name].refY)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', _arrows[name].width*_chart.edgeArrowSize.eval(d))\n .attr('markerHeight', _arrows[name].height*_chart.edgeArrowSize.eval(d))\n .attr('stroke', _chart.edgeStroke.eval(d))\n .attr('fill', _chart.edgeStroke.eval(d))\n .call(_arrows[name].drawFunction);\n }\n return name ? id : null;\n }\n\n function globalTransform(pos, scale) {\n _translate = pos;\n _scale = scale;\n _g.attr('transform', 'translate(' + pos + ')' + ' scale(' + scale + ')');\n }\n\n function margined_bounds() {\n return {\n left: _bounds.left - _chart.margins().left,\n top: _bounds.top - _chart.margins().top,\n right: _bounds.right + _chart.margins().right,\n bottom: _bounds.bottom + _chart.margins().bottom\n };\n }\n\n // with thanks to comments in https://github.com/d3/d3/issues/1084\n function align_left(translate, x) {\n return translate[0] - _xScale(x) + _xScale.range()[0];\n }\n function align_top(translate, y) {\n return translate[1] - _yScale(y) + _yScale.range()[0];\n }\n function align_right(translate, x) {\n return translate[0] - _xScale(x) + _xScale.range()[1];\n }\n function align_bottom(translate, y) {\n return translate[1] - _yScale(y) + _yScale.range()[1];;\n }\n\n function doZoom() {\n var translate = d3.event.translate;\n if(_chart.restrictPan()) {\n var xDomain = _xScale.domain(), yDomain = _yScale.domain();\n var bounds = margined_bounds();\n var less1 = bounds.left < xDomain[0], less2 = bounds.right < xDomain[1],\n lessExt = (bounds.right - bounds.left) < (xDomain[1] - xDomain[0]);\n var align, nothing = 0;\n if(less1 && less2)\n if(lessExt)\n align = 'left';\n else\n align = 'right';\n else if(!less1 && !less2)\n if(lessExt)\n align = 'right';\n else\n align = 'left';\n switch(align) {\n case 'left':\n translate[0] = align_left(translate, bounds.left);\n break;\n case 'right':\n translate[0] = align_right(translate, bounds.right);\n break;\n default:\n ++nothing;\n }\n less1 = bounds.top < yDomain[0]; less2 = bounds.bottom < yDomain[1];\n lessExt = (bounds.bottom - bounds.top) < (yDomain[1] - yDomain[0]);\n if(less1 && less2)\n if(lessExt)\n align = 'top';\n else\n align = 'bottom';\n else if(!less1 && !less2)\n if(lessExt)\n align = 'bottom';\n else\n align = 'top';\n switch(align) {\n case 'top':\n translate[1] = align_top(translate, bounds.top);\n break;\n case 'bottom':\n translate[1] = align_bottom(translate, bounds.bottom);\n break;\n default:\n ++nothing;\n }\n\n if(nothing<2)\n _zoom.translate(translate);\n }\n globalTransform(translate, d3.event.scale);\n }\n\n function resizeSvg(w, h) {\n if(_svg) {\n _svg.attr('width', w || _chart.width())\n .attr('height', h || _chart.height());\n }\n }\n\n function generateSvg() {\n _svg = _chart.root().append('svg');\n resizeSvg();\n\n _defs = _svg.append('svg:defs');\n\n if(_chart.mouseZoomable()) {\n // start out with 1:1 zoom\n _xScale = d3.scale.linear()\n .domain([0, _chart.width()])\n .range([0, _chart.width()]);\n _yScale = d3.scale.linear()\n .domain([0, _chart.height()])\n .range([0, _chart.height()]);\n _zoom = d3.behavior.zoom()\n .on('zoom', doZoom)\n .x(_xScale).y(_yScale);\n _svg.call(_zoom);\n _svg.on('dblclick.zoom', null);\n }\n\n return _svg;\n }\n\n _chart.invertCoord = function(clientCoord) {\n return [\n _xScale.invert(clientCoord[0]),\n _yScale.invert(clientCoord[1])\n ];\n };\n\n _chart.defineArrow('vee', 12, 12, 10, 0, function(marker) {\n marker.append('svg:path')\n .attr('d', 'M0,-5 L10,0 L0,5 L3,0')\n .attr('stroke-width', '0px');\n });\n _chart.defineArrow('dot', 7, 7, 0, 0, function(marker) {\n marker.append('svg:circle')\n .attr('r', 5)\n .attr('cx', 5)\n .attr('cy', 0)\n .attr('stroke-width', '0px');\n });\n\n /**\n * Set the root SVGElement to either be any valid [d3 single\n * selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying a dom\n * block element such as a div; or a dom element or d3 selection. This class is called\n * internally on chart initialization, but be called again to relocate the chart. However, it\n * will orphan any previously created SVGElements.\n * @method anchor\n * @memberof dc_graph.diagram\n * @instance\n * @param {anchorSelector|anchorNode|d3.selection} [parent]\n * @param {String} [chartGroup]\n * @return {String|node|d3.selection}\n * @return {dc_graph.diagram}\n */\n _chart.anchor = function(parent, chartGroup) {\n if (!arguments.length) {\n return _anchor;\n }\n if (parent) {\n if (parent.select && parent.classed) { // detect d3 selection\n _anchor = parent.node();\n } else {\n _anchor = parent;\n }\n _chart.root(d3.select(_anchor));\n _chart.root().classed(dc_graph.constants.CHART_CLASS, true);\n dc.registerChart(_chart, chartGroup);\n } else {\n throw new dc.errors.BadArgumentException('parent must be defined');\n }\n _chartGroup = chartGroup;\n return _chart;\n };\n\n /**\n * Returns the DOM id for the chart's anchored location.\n * @method anchorName\n * @memberof dc_graph.diagram\n * @instance\n * @return {String}\n */\n _chart.anchorName = function () {\n var a = _chart.anchor();\n if (a && a.id) {\n return a.id;\n }\n if (a && a.replace) {\n return a.replace('#', '');\n }\n return 'dc-graph' + _chart.chartID();\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n## Legend\n\nThe dc_graph.legend will show labeled examples of nodes (and someday edges), within the frame of a dc_graph.diagram.\n**/\ndc_graph.legend = function() {\n var _legend = {}, _items;\n\n /**\n #### .x([value])\n Set or get x coordinate for legend widget. Default: 0.\n **/\n _legend.x = property(0);\n\n /**\n #### .y([value])\n Set or get y coordinate for legend widget. Default: 0.\n **/\n _legend.y = property(0);\n\n /**\n #### .gap([value])\n Set or get gap between legend items. Default: 5.\n **/\n _legend.gap = property(5);\n\n /**\n #### .nodeWidth([value])\n Set or get legend node width. Default: 30.\n **/\n _legend.nodeWidth = property(40);\n\n /**\n #### .nodeHeight([value])\n Set or get legend node height. Default: 30.\n **/\n _legend.nodeHeight = property(40);\n\n\n /**\n #### .exemplars([object])\n Specifies an object where the keys are the names of items to add to the legend, and the values are\n objects which will be passed to the accessors of the attached diagram in order to determine the\n drawing attributes. Alternately, if the key needs to be specified separately from the name, the\n function can take an array of {name, key, value} objects.\n **/\n _legend.exemplars = property({});\n\n _legend.parent = property(null);\n\n _legend.redraw = function() {\n var legend = _legend.parent().svg()\n .selectAll('g.dc-graph-legend')\n .data([0]);\n legend.enter().append('g')\n .attr('class', 'dc-graph-legend')\n .attr('transform', 'translate(' + _legend.x() + ',' + _legend.y() + ')');\n\n var node = legend.selectAll('.node')\n .data(_items, function(d) { return d.name; });\n var nodeEnter = node.enter().append('g')\n .attr('class', 'node');\n nodeEnter.append('text')\n .attr('dy', '0.3em')\n .attr('class', 'legend-label');\n node\n .attr('transform', function(d, i) {\n return 'translate(' + _legend.nodeWidth()/2 + ',' + (_legend.nodeHeight() + _legend.gap())*(i+0.5) + ')';\n });\n node.select('text.legend-label')\n .attr('transform', 'translate(' + (_legend.nodeWidth()/2+_legend.gap()) + ',0)')\n .text(function(d) {\n return d.name;\n });\n _legend.parent()\n ._enterNode(nodeEnter)\n ._updateNode(node);\n };\n\n _legend.render = function() {\n var exemplars = _legend.exemplars();\n if(exemplars instanceof Array) {\n _items = exemplars.map(function(v) { return {name: v.name, orig: {key: v.key, value: v.value}, cola: {}}; });\n }\n else {\n _items = [];\n for(var item in exemplars)\n _items.push({name: item, orig: {key: item, value: exemplars[item]}, cola: {}});\n }\n _legend.redraw();\n };\n\n return _legend;\n};\n","/**\n * In cola.js there are three factors which influence the positions of nodes:\n * * *edge length* suggestions, controlled by the\n * {@link #dc_graph.diagram+lengthStrategy lengthStrategy},\n * {@link #dc_graph.diagram+baseLength baseLength}, and\n * {@link #dc_graph.diagram+edgeLength edgeLength} parameters in dc.graph.js\n * * *automatic constraints* based on the global edge flow direction (`cola.flowLayout`) and overlap\n * avoidance parameters (`cola.avoidOverlaps`)\n * * *manual constraints* such as alignment, inequality and equality constraints in a dimension/axis.\n *\n * Generally when the\n * {@link https://github.com/tgdwyer/WebCola/wiki/Constraints cola.js documentation mentions constraints},\n * it means the manual constraints.\n *\n * dc.graph.js allows generation of manual constraints using\n * {@link #dc_graph.diagram+constrain diagram.constrain} but it can be tedious to write these\n * functions because it usually means looping over the nodes and edges multiple times to\n * determine what classes or types of nodes to apply constraints to, and which edges should\n * take additional constraints.\n *\n * This utility creates a constraint generator function from a *pattern*, a graph where:\n * 1. Nodes represent *types* or classes of layout nodes, annotated with a specification\n * of how to match the nodes belonging each type.\n * 2. Edges represent *rules* to generate constraints. There are two kinds of rules:\n *
    \n *
  1. To generate additional constraints on edges besides the built-in ones, create a rules\n * between two different types. The rule will apply to any edges in the layout which match the\n * source and target types, and generate simple \"left/right\" constraints. (Note that \"left\" and\n * \"right\" in this context refer to sides of an inequality constraint `left + gap <= right`)\n *
  2. To generate constraints on a set of nodes, such as alignment, ordering, or circle\n * constraints, create a rule from a type to itself, a self edge.\n *
\n * (It is also conceivable to want constraints between individual nodes which don't\n * have edges between them. This is not directly supported at this time; right now the workaround\n * is to create the edge but not draw it, e.g. by setting its {@link #dc_graph.diagram+edgeOpacity}\n * to zero. If you have a use-case for this, please\n * {@link https://github.com/dc-js/dc.graph.js/issues/new file an issue}.\n *\n * The pattern syntax is an embedded domain specific language designed to be terse without\n * restricting its power. As such, there are complicated rules for defaulting and inferring\n * parameters from other parameters. Since most users will want the simplest form, this document\n * will start from the highest level and then show how to use more complicated forms in order to\n * gain more control.\n *\n * Then we'll build back up from the ground up and show how inference works.\n * @name constraint_pattern\n * @memberof dc_graph\n * @param {dc_graph.diagram} diagram - the diagram to pull attributes from, mostly to determine\n * the keys of nodes and edge sources and targets\n * @param {Object} pattern - a graph which defines the constraints to be generated\n * @return {Function}\n */\ndc_graph.constraint_pattern = function(pattern) {\n var types = {}, rules = [];\n\n pattern.nodes.forEach(function(n) {\n var id = n.id;\n var type = types[id] || (types[id] = {});\n // partitions could be done more efficiently; this is POC\n if(n.partition) {\n var partition = n.partition;\n var value = n.value || n.id;\n if(n.all || n.typename) {\n type.match = n.extract ?\n function(n2) { return n.extract(n2.value[partition]); } :\n function(n2) { return n2.value[partition]; };\n type.typename = n.typename || function(n2) { return partition + '=' + n2.value[partition]; };\n }\n else\n type.match = function(n2) { return n2.value[partition] === value; };\n }\n else if(n.match)\n type.match = n.match;\n else throw new Error(\"couldn't determine matcher for type \" + JSON.stringify(n));\n });\n pattern.edges.forEach(function(e) {\n if(e.disable)\n return;\n var rule = {source: e.source, target: e.target};\n rule.produce = typeof e.produce === 'function' ? e.produce : function() {\n return clone(e.produce);\n };\n ['listname', 'wrap', 'reverse'].forEach(function(k) {\n if(e[k] !== undefined) rule[k] = e[k];\n });\n rules.push(rule);\n });\n\n return function(diagram, nodes, edges) {\n var constraints = [];\n var members = {};\n nodes.forEach(function(n) {\n var key = diagram.nodeKey.eval(n);\n for(var t in types) {\n var type = types[t], value = type.match(n.orig);\n if(value) {\n var tname = type.typename ? type.typename(t, value) : t;\n if(!members[tname])\n members[tname] = {\n nodes: [], // original ordering\n whether: {} // boolean\n };\n members[tname].nodes.push(key);\n members[tname].whether[key] = true;\n }\n }\n });\n // traversal of rules could be more efficient, again POC\n var edge_rules = rules.filter(function(r) {\n return r.source !== r.target;\n });\n var type_rules = rules.filter(function(r) {\n return r.source === r.target;\n });\n edges.forEach(function(e) {\n var source = diagram.edgeSource.eval(e),\n target = diagram.edgeTarget.eval(e);\n edge_rules.forEach(function(r) {\n if(members[r.source] && members[r.source].whether[source] &&\n members[r.target] && members[r.target].whether[target]) {\n var constraint = r.produce(members, nodes, edges);\n if(r.reverse) {\n constraint.left = target;\n constraint.right = source;\n }\n else {\n constraint.left = source;\n constraint.right = target;\n }\n constraints.push(constraint);\n }\n });\n });\n type_rules.forEach(function(r) {\n if(!members[r.source])\n return;\n var constraint = r.produce(),\n listname = r.listname || r.produce.listname || 'nodes',\n wrap = r.wrap || r.produce.wrap || function(x) { return x; };\n constraint[listname] = members[r.source].nodes.map(wrap);\n constraints.push(constraint);\n });\n return constraints;\n };\n};\n\n// constraint generation convenience functions\ndc_graph.gap_y = function(gap, equality) {\n return {\n axis: 'y',\n gap: gap,\n equality: !!equality\n };\n};\ndc_graph.gap_x = function(gap, equality) {\n return {\n axis: 'x',\n gap: gap,\n equality: !!equality\n };\n};\n\nfunction align_f(axis) {\n var ret = function() {\n return {\n type: 'alignment',\n axis: axis\n };\n };\n ret.listname = 'offsets';\n ret.wrap = function(x) { return {node: x, offset: 0}; };\n return ret;\n}\n\ndc_graph.align_y = function() {\n return align_f('y');\n};\ndc_graph.align_x = function() {\n return align_f('x');\n};\n\ndc_graph.order_x = function(gap, ordering) {\n return {\n type: 'ordering',\n axis: 'x',\n gap: 60,\n ordering: ordering\n };\n};\ndc_graph.order_y = function(gap, ordering) {\n return {\n type: 'ordering',\n axis: 'y',\n gap: 60,\n ordering: ordering\n };\n};\n","// this naive tree-drawer is paraphrased from memory from dot\ndc_graph.tree_constraints = function(rootf, treef, xgap, ygap) {\n return function(diagram, nodes, edges) {\n var constraints = [];\n var x = 0;\n var dfs = dc_graph.depth_first_traversal({\n root: rootf,\n tree: treef,\n place: function(n, r, row) {\n if(row.length) {\n var last = row[row.length-1];\n constraints.push({\n left: diagram.nodeKey.eval(last),\n right: diagram.nodeKey.eval(n),\n axis: 'x',\n gap: x-last.foo_x,\n equality: true\n });\n }\n n.foo_x = x;\n // n.cola.x = x;\n // n.cola.y = r*ygap;\n },\n sib: function() {\n x += xgap;\n }\n });\n dfs(diagram, nodes, edges);\n return constraints;\n };\n};\n","// this naive tree-drawer is paraphrased from memory from dot\ndc_graph.tree_positions = function(rootf, rowf, treef, ofsx, ofsy, nwidth, ygap) {\n var x;\n nwidth = d3.functor(nwidth);\n function best_dist(left, right) {\n return (nwidth(left) + nwidth(right)) / 2;\n }\n var dfs = dc_graph.depth_first_traversal({\n init: function() {\n x = ofsx;\n },\n root: rootf,\n row: rowf,\n tree: treef,\n place: function(n, r, row) {\n if(row.length) {\n var left = row[row.length-1];\n var g = (nwidth(left) + nwidth(n)) / 2;\n x = Math.max(x, left.left_x + g);\n }\n n.left_x = x;\n n.hit_ins = 1;\n n.cola.y = r*ygap + ofsy;\n },\n sib: function(isroot, left, right) {\n var g = best_dist(left, right);\n if(isroot) g = g*1.5;\n x += g;\n },\n pop: function(n) {\n n.cola.x = (n.left_x + x)/2;\n },\n skip: function(n, indegree) {\n // rolling average of in-neighbor x positions\n n.cola.x = (n.hit_ins*n.cola.x + x)/++n.hit_ins;\n if(n.hit_ins === indegree)\n delete n.hit_ins;\n },\n finish: function(rows) {\n // this is disgusting. patch up any places where nodes overlap by scanning\n // right far enough to find the space, then fill from left to right at the\n // minimum gap\n rows.forEach(function(row) {\n var sort = row.sort(function(a, b) { return a.cola.x - b.cola.x; });\n var badi = null, badl = null, want;\n for(var i=0; i0)\n --badi; // might want to use more left\n var l, limit;\n if(i < sort.length - 2) { // found space before right\n var extra = right.cola.x - (badl + want);\n l = sort[badi].cola.x + extra/2;\n limit = i+1;\n } else {\n l = Math.max(sort[badi].cola.x, badl - best_dist(sort[badi], sort[badi+1]) - (want - right.cola.x + badl)/2);\n limit = sort.length;\n }\n for(var j = badi+1; j\" + d + \"\"; })\n .direction(_tip.direction());\n _tip.parent().svg().call(_d3tip);\n }\n node\n .on('mouseover.tip', fetch_and_show_content('content'))\n .on('mouseout.tip', hide_tip);\n ehover\n .on('mouseover.tip', fetch_and_show_content('content'))\n .on('mouseout.tip', hide_tip);\n }\n\n /**\n * Specify the direction for tooltips. Currently supports the\n * [cardinal and intercardinaldirections](https://en.wikipedia.org/wiki/Points_of_the_compass) supported by\n * [d3.tip.direction](https://github.com/Caged/d3-tip/blob/master/docs/positioning-tooltips.md#tipdirection):\n * `'n'`, `'ne'`, `'e'`, etc.\n * @name direction\n * @memberof dc_graph.tip\n * @instance\n * @param {String} [direction='n']\n * @return {String}\n * @return {dc_graph.tip}\n * @example\n * // show all the attributes and values in the node and edge objects\n * var tip = dc_graph.tip();\n * tip.content(tip.table());\n **/\n _tip.direction = property('n');\n\n /**\n * Specifies the function to generate content for the tooltip. This function has the\n * signature `function(d, k)`, where `d` is the datum of the node being hovered over,\n * and `k` is a continuation. The function should fetch the content, asynchronously if\n * needed, and then pass html forward to `k`.\n * @name content\n * @memberof dc_graph.tip\n * @instance\n * @param {Function} [content]\n * @return {Function}\n * @example\n * // Default behavior: show title\n * var tip = dc_graph.tip().content(function(d, k) {\n * k(_tip.parent() ? _tip.parent().nodeTitle.eval(d) : '');\n * });\n **/\n _tip.content = property(function(d, k) {\n k(_tip.parent() ? _tip.parent().nodeTitle.eval(d) : '');\n });\n\n _tip.delay = property(0);\n\n return _tip;\n};\n\n/**\n * Generates a handler which can be passed to `tip.content` to produce a table of the\n * attributes and values of the hovered object.\n *\n * Note: this interface is not great and is subject to change in the near term.\n * @name table\n * @memberof dc_graph.tip\n * @instance\n * @return {Function}\n * @example\n * // show all the attributes and values in the node and edge objects\n * var tip = dc_graph.tip();\n * tip.content(tip.table());\n **/\ndc_graph.tip.table = function() {\n var gen = function(d, k) {\n d = d.orig.value;\n var keys = Object.keys(d).filter(d3.functor(gen.filter()))\n .filter(function(k) {\n return d[k];\n });\n var table = d3.select(document.createElement('table'));\n var rows = table.selectAll('tr').data(keys);\n var rowsEnter = rows.enter().append('tr');\n rowsEnter.append('td').text(function(k) { return k; });\n rowsEnter.append('td').text(function(k) { return d[k]; });\n k(table.node().outerHTML); // optimizing for clarity over speed (?)\n };\n gen.filter = property(true);\n return gen;\n};\n","// this currently only supports single selection with a click\n// but it can be expanded with modifier-key clicks and rectangular selection etc.\ndc_graph.select_nodes = function(props) {\n var select_nodes_group = dc_graph.select_nodes_group('select-nodes-group');\n var _selected = [];\n\n function add_behavior(chart, node, edge) {\n chart.cascade(50, true, conditional_properties(function(n) {\n return _selected.indexOf(n.orig.key) >= 0;\n }, null, props));\n node.on('click.select-nodes', function(d) {\n _selected = [chart.nodeKey.eval(d)];\n chart.refresh(node, edge);\n select_nodes_group.node_set_changed(_selected);\n d3.event.stopPropagation();\n });\n chart.svg().on('click.select-nodes', function(d) {\n _selected = [];\n chart.refresh(node, edge);\n select_nodes_group.node_set_changed(_selected);\n });\n // drop any selected which no longer exist in the diagram\n var present = node.data().map(function(d) { return d.orig.key; });\n var nselect = _selected.length;\n _selected = _selected.filter(function(k) { return present.indexOf(k) >= 0; });\n if(_selected.length !== nselect)\n select_nodes_group.node_set_changed(_selected);\n }\n\n function remove_behavior(chart, node, edge) {\n node.on('click.select-nodes', null);\n chart.svg().on('click.select-nodes', null);\n chart.cascade(50, false, props);\n }\n\n return dc_graph.behavior('select-nodes', {\n add_behavior: add_behavior,\n remove_behavior: function(chart, node, edge) {\n remove_behavior(chart, node, edge);\n }\n });\n};\n\ndc_graph.select_nodes_group = function(brushgroup) {\n window.chart_registry.create_type('select-nodes', function() {\n return d3.dispatch('node_set_changed');\n });\n\n return window.chart_registry.create_group('select-nodes', brushgroup);\n};\n","dc_graph.highlight_neighbors = function(props) {\n function clear_all_highlights(edge) {\n edge.each(function(e) {\n e.dcg_highlighted = false;\n });\n }\n\n function add_behavior(chart, node, edge) {\n chart.cascade(100, true, conditional_properties(null, function(e) {\n return e.dcg_highlighted;\n }, props));\n node\n .on('mouseover.highlight-neighbors', function(d) {\n edge.each(function(e) {\n e.dcg_highlighted = e.source === d || e.target === d;\n });\n chart.refresh(node, edge);\n })\n .on('mouseout.highlight-neighbors', function(d) {\n clear_all_highlights(edge);\n chart.refresh(node, edge);\n });\n }\n\n function remove_behavior(chart, node, edge) {\n node\n .on('mouseover.highlight-neighbors', null)\n .on('mouseout.highlight-neighbors', null);\n clear_all_highlights(edge);\n chart.cascade(100, false, props);\n }\n\n return dc_graph.behavior('highlight-neighbors', {\n add_behavior: add_behavior,\n remove_behavior: function(chart, node, edge) {\n remove_behavior(chart, node, edge);\n }\n });\n};\n\n","dc_graph.register_highlight_paths_group = function(pathsgroup) {\n window.chart_registry.create_type('highlight-paths', function() {\n return d3.dispatch('paths_changed', 'hover_changed', 'select_changed');\n });\n\n return window.chart_registry.create_group('highlight-paths', pathsgroup);\n};\n","dc_graph.highlight_paths = function(pathprops, hoverprops, selectprops, pathsgroup) {\n var highlight_paths_group = dc_graph.register_highlight_paths_group(pathsgroup || 'highlight-paths-group');\n pathprops = pathprops || {};\n hoverprops = hoverprops || {};\n selectprops = selectprops || {};\n var node_on_paths = {}, edge_on_paths = {}, selected = null, hoverpaths = null;\n\n function refresh() {\n if(_behavior.doRedraw())\n _behavior.parent().relayout().redraw();\n else\n _behavior.parent().refresh();\n }\n\n function paths_changed(nop, eop) {\n node_on_paths = nop;\n edge_on_paths = eop;\n selected = hoverpaths = null;\n refresh();\n }\n\n function hover_changed(hp) {\n if(hp !== hoverpaths) {\n hoverpaths = hp;\n refresh();\n }\n }\n\n function select_changed(sp) {\n if(sp !== selected) {\n selected = sp;\n refresh();\n }\n }\n\n function clear_all_highlights() {\n node_on_paths = {};\n edge_on_paths = {};\n }\n\n function contains_path(paths) {\n return function(path) {\n return paths.indexOf(path)>=0;\n };\n }\n\n // sigh\n function doesnt_contain_path(paths) {\n var cp = contains_path(paths);\n return function(path) {\n return !cp(path);\n };\n }\n\n function intersect_paths(pathsA, pathsB) {\n if(!pathsA || !pathsB)\n return false;\n return pathsA.some(contains_path(pathsB));\n }\n\n function toggle_paths(pathsA, pathsB) {\n if(!pathsA)\n return pathsB;\n else if(!pathsB)\n return pathsA;\n if(pathsB.every(contains_path(pathsA)))\n return pathsA.filter(doesnt_contain_path(pathsB));\n else return pathsA.concat(pathsB.filter(doesnt_contain_path(pathsA)));\n }\n\n function add_behavior(chart, node, edge, ehover) {\n chart\n .cascade(200, true, conditional_properties(function(n) {\n return !!node_on_paths[chart.nodeKey.eval(n)];\n }, function(e) {\n return !!edge_on_paths[chart.edgeKey.eval(e)];\n }, pathprops))\n .cascade(300, true, conditional_properties(function(n) {\n return intersect_paths(node_on_paths[chart.nodeKey.eval(n)], selected);\n }, function(e) {\n return intersect_paths(edge_on_paths[chart.edgeKey.eval(e)], selected);\n }, selectprops))\n .cascade(400, true, conditional_properties(function(n) {\n return intersect_paths(node_on_paths[chart.nodeKey.eval(n)], hoverpaths);\n }, function(e) {\n return intersect_paths(edge_on_paths[chart.edgeKey.eval(e)], hoverpaths);\n }, hoverprops));\n\n node\n .on('mouseover.highlight-paths', function(n) {\n highlight_paths_group.hover_changed(node_on_paths[chart.nodeKey.eval(n)] || null);\n })\n .on('mouseout.highlight-paths', function(n) {\n highlight_paths_group.hover_changed(null);\n })\n .on('click.highlight-paths', function(n) {\n highlight_paths_group.select_changed(toggle_paths(selected, node_on_paths[chart.nodeKey.eval(n)]));\n });\n\n\n ehover\n .on('mouseover.highlight-paths', function(e) {\n highlight_paths_group.hover_changed(edge_on_paths[chart.edgeKey.eval(e)] || null);\n })\n .on('mouseout.highlight-paths', function(e) {\n highlight_paths_group.hover_changed(null);\n })\n .on('click.highlight-paths', function(n) {\n highlight_paths_group.select_changed(toggle_paths(selected, edge_on_paths[chart.nodeKey.eval(n)]));\n });\n }\n\n function remove_behavior(chart, node, edge, ehover) {\n node\n .on('mouseover.highlight-paths', null)\n .on('mouseout.highlight-paths', null)\n .on('click.highlight-paths', null);\n ehover\n .on('mouseover.highlight-paths', null)\n .on('mouseout.highlight-paths', null)\n .on('click.highlight-paths', null);\n clear_all_highlights();\n chart\n .cascade(200, false, pathprops)\n .cascade(300, false, selectprops)\n .cascade(400, false, hoverprops);\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n add_behavior: add_behavior,\n remove_behavior: function(chart, node, edge, ehover) {\n remove_behavior(chart, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n var anchor = p.anchorName();\n highlight_paths_group.on('paths_changed.' + anchor, p ? paths_changed : null);\n highlight_paths_group.on('hover_changed.' + anchor, p ? hover_changed : null);\n highlight_paths_group.on('select_changed.' + anchor, p ? select_changed : null);\n }\n });\n\n // whether to do relayout & redraw (true) or just refresh (false)\n _behavior.doRedraw = property(false);\n\n return _behavior;\n};\n\n","dc_graph.expand_collapse = function(get_degree, expand, collapse, dirs) {\n dirs = dirs || ['both'];\n if(dirs.length > 2)\n throw new Error('there are only two directions to expand in');\n\n function add_gradient_def(chart) {\n var gradient = chart.addOrRemoveDef('spike-gradient', true, 'linearGradient');\n gradient.attr({\n x1: '0%',\n y1: '0%',\n x2: '100%',\n y2: '0%',\n spreadMethod: 'pad'\n });\n gradient.selectAll('stop').data([[0,'black',1], [100, 'black', '0']])\n .enter().append('stop').attr({\n offset: function(d) {\n return d[0] + '%';\n },\n 'stop-color': function(d) {\n return d[1];\n },\n 'stop-opacity': function(d) {\n return d[2];\n }\n });\n }\n\n function view_degree(chart, edge, dir, key) {\n var fil;\n switch(dir) {\n case 'out':\n fil = function(e) {\n return chart.edgeSource.eval(e) === key;\n };\n break;\n case 'in':\n fil = function(e) {\n return chart.edgeTarget.eval(e) === key;\n };\n break;\n case 'both':\n fil = function(e) {\n return chart.edgeSource.eval(e) === key || chart.edgeTarget.eval(e) === key;\n };\n break;\n }\n return edge.filter(fil).size();\n }\n\n function spike_directioner(rankdir, dir, n) {\n if(dir==='both')\n return function(i) {\n return Math.PI * (2 * i / n - 0.5);\n };\n else {\n var sweep = (n-1)*Math.PI/n, ofs;\n switch(rankdir) {\n case 'LR':\n ofs = 0;\n break;\n case 'TB':\n ofs = Math.PI/2;\n break;\n case 'RL':\n ofs = Math.PI;\n break;\n case 'BT':\n ofs = -Math.PI/2;\n break;\n }\n if(dir === 'in')\n ofs += Math.PI;\n return function(i) {\n return ofs + sweep * (-.5 + (n > 1 ? i / (n-1) : 0)); // avoid 0/0\n };\n }\n }\n\n function draw_selected(chart, node, edge) {\n var spike = node\n .selectAll('g.spikes')\n .data(function(d) {\n return (d.dcg_expand_selected &&\n (!d.dcg_expanded || !d.dcg_expanded[d.dcg_expand_selected.dir])) ?\n [d] : [];\n });\n spike.exit().remove();\n spike\n .enter().insert('g', ':first-child')\n .classed('spikes', true);\n var rect = spike\n .selectAll('rect.spike')\n .data(function(d) {\n var key = chart.nodeKey.eval(d);\n var dir = d.dcg_expand_selected.dir,\n n = d.dcg_expand_selected.n,\n af = spike_directioner(chart.rankdir(), dir, n),\n ret = Array(n);\n for(var i = 0; i d.cola.y ? 'out' : 'in';\n case 'BT':\n return y < d.cola.y ? 'out' : 'in';\n case 'LR':\n return x > d.cola.x ? 'out' : 'in';\n case 'RL':\n return x < d.cola.x ? 'out' : 'in';\n }\n throw new Error('unknown rankdir ' + chart.rankdir());\n }\n\n\n function add_behavior(chart, node, edge) {\n function mousemove(d) {\n var dir = zonedir(chart, d3.event, dirs, d);\n var nk = chart.nodeKey.eval(d);\n Promise.resolve(get_degree(nk, dir)).then(function(degree) {\n var spikes = {\n dir: dir,\n n: Math.max(0, degree - view_degree(chart, edge, dir, nk)) // be tolerant of inconsistencies\n };\n node.each(function(n) {\n n.dcg_expand_selected = n === d ? spikes : null;\n });\n draw_selected(chart, node, edge);\n });\n }\n\n function click(d) {\n var event = d3.event;\n console.log(event.type);\n function action() {\n var dir = zonedir(chart, event, dirs, d);\n d.dcg_expanded = d.dcg_expanded || {};\n if(!d.dcg_expanded[dir]) {\n expand(chart.nodeKey.eval(d), dir, event.type === 'dblclick');\n d.dcg_expanded[dir] = true;\n }\n else {\n collapse(chart.nodeKey.eval(d), collapsible.bind(null, chart, edge, dir), dir);\n d.dcg_expanded[dir] = false;\n }\n draw_selected(chart, node, edge);\n d.dcg_dblclk_timeout = null;\n }\n return action();\n // distinguish click and double click - kind of fishy but seems to work\n // basically, wait to see if a click becomes a dblclick - but it's even worse\n // because you'll receive a second click before the dblclick on most browsers\n if(d.dcg_dblclk_timeout) {\n window.clearTimeout(d.dcg_dblclk_timeout);\n if(event.type === 'dblclick')\n action();\n d.dcg_dblclk_timeout = null;\n }\n else d.dcg_dblclk_timeout = window.setTimeout(action, 200);\n }\n\n node\n .on('mouseover.expand-collapse', mousemove)\n .on('mousemove.expand-collapse', mousemove)\n .on('mouseout.expand-collapse', function(d) {\n clear_selected(chart, node, edge);\n })\n .on('click', click)\n .on('dblclick', click);\n }\n\n function remove_behavior(chart, node, edge) {\n node\n .on('mouseover.expand-collapse', null)\n .on('mouseout.expand-collapse', null);\n clear_selected(chart, node);\n }\n\n return dc_graph.behavior('expand-collapse', {\n add_behavior: add_behavior,\n first: add_gradient_def,\n remove_behavior: remove_behavior\n });\n};\n","// load a graph from various formats and return the data in consistent {nodes, links} format\ndc_graph.load_graph = function() {\n // ignore any query parameters for checking extension\n function ignore_query(file) {\n if(!file)\n return null;\n return file.replace(/\\?.*/, '');\n }\n var file1, file2, callback;\n file1 = arguments[0];\n if(arguments.length===3) {\n file2 = arguments[1];\n callback = arguments[2];\n }\n else if(arguments.length===2) {\n callback = arguments[1];\n }\n else throw new Error('need two or three arguments');\n\n if(file2) {\n // this is not general - really titan-specific\n queue()\n .defer(d3.json, file1)\n .defer(d3.json, file2)\n .await(function(error, nodes, edges) {\n if(error)\n callback(error, null);\n else\n callback(null, {nodes: nodes.results, edges: edges.results});\n });\n }\n else if(/\\.json$/.test(ignore_query(file1)))\n d3.json(file1, callback);\n else if(/\\.gv|\\.dot$/.test(ignore_query(file1)))\n d3.text(file1, function (error, f) {\n if(error) {\n callback(error, null);\n return;\n }\n var digraph = graphlibDot.parse(f);\n\n var nodeNames = digraph.nodes();\n var nodes = new Array(nodeNames.length);\n nodeNames.forEach(function (name, i) {\n var node = nodes[i] = digraph._nodes[nodeNames[i]];\n node.id = i;\n node.name = name;\n });\n\n var edgeNames = digraph.edges();\n var edges = [];\n edgeNames.forEach(function(e) {\n var edge = digraph._edges[e];\n edges.push({\n source: digraph._nodes[edge.u].id,\n target: digraph._nodes[edge.v].id,\n sourcename: edge.u,\n targetname: edge.v\n });\n });\n var graph = {nodes: nodes, links: edges};\n callback(null, graph);\n });\n};\n","function can_get_graph_from_this(data) {\n return (data.nodes || data.vertices) && (data.edges || data.links);\n}\n\n// general-purpose reader of various json-based graph formats\n// (esp but not limited to titan graph database-like formats)\n// this could be generalized a lot\ndc_graph.munge_graph = function(data, nodekeyattr, sourceattr, targetattr) {\n // we want data = {nodes, edges} and the field names for keys; find those in common json formats\n var nodes, edges, nka = nodekeyattr || \"name\",\n sa = sourceattr || \"sourcename\", ta = targetattr || \"targetname\";\n\n if(!can_get_graph_from_this(data)) {\n var wrappers = ['database', 'response'];\n var wi = wrappers.findIndex(function(f) { return data[f] && can_get_graph_from_this(data[f]); });\n if(wi<0)\n throw new Error(\"couldn't find the data!\");\n data = data[wrappers[wi]];\n }\n edges = data.edges || data.links;\n nodes = data.nodes || data.vertices;\n\n function find_attr(o, attrs) {\n return attrs.filter(function(a) { return !!o[a]; });\n }\n\n //var edgekeyattr = \"id\";\n var edge0 = edges[0];\n if(edge0[sa] === undefined) {\n var sourceattrs = sourceattr ? [sourceattr] : ['source_ecomp_uid', \"node1\", \"source\", \"tail\"],\n targetattrs = targetattr ? [targetattr] : ['target_ecomp_uid', \"node2\", \"target\", \"head\"];\n //var edgekeyattrs = ['id', '_id', 'ecomp_uid'];\n var edgewrappers = ['edge'];\n if(edge0.node0 && edge0.node1) { // specific conflict here\n sa = 'node0';\n ta = 'node1';\n }\n else {\n var candidates = find_attr(edge0, sourceattrs);\n if(!candidates.length) {\n wi = edgewrappers.findIndex(function(w) {\n return edge0[w] && find_attr(edge0[w], sourceattrs).length;\n });\n if(wi<0) {\n if(sourceattr)\n throw new Error('sourceattr ' + sa + \" didn't work\");\n else\n throw new Error(\"didn't find any source attr\");\n }\n edges = edges.map(function(e) { return e[edgewrappers[wi]]; });\n edge0 = edges[0];\n candidates = find_attr(edge0, sourceattrs);\n }\n if(candidates.length > 1)\n console.warn('found more than one possible source attr', candidates);\n sa = candidates[0];\n\n candidates = find_attr(edge0, targetattrs);\n if(!candidates.length) {\n if(targetattr && !edge0[targetattr])\n throw new Error('targetattr ' + ta + \" didn't work\");\n else\n throw new Error(\"didn't find any target attr\");\n }\n if(candidates.length > 1)\n console.warn('found more than one possible target attr', candidates);\n ta = candidates[0];\n\n /*\n // we're currently assembling our own edgeid\n candidates = find_attr(edge0, edgekeyattrs);\n if(!candidates.length)\n throw new Error(\"didn't find any edge key\");\n if(candidates.length > 1)\n console.warn('found more than one edge key attr', candidates);\n edgekeyattr = candidates[0];\n */\n }\n }\n var node0 = nodes[0];\n if(node0[nka] === undefined) {\n var nodekeyattrs = nodekeyattr ? [nodekeyattr] : ['ecomp_uid', 'id', '_id'];\n var nodewrappers = ['vertex'];\n candidates = find_attr(node0, nodekeyattrs);\n if(!candidates.length) {\n wi = nodewrappers.findIndex(function(w) {\n return node0[w] && find_attr(node0[w], nodekeyattrs).length;\n });\n if(wi<0) {\n if(nodekeyattr)\n throw new Error('nodekeyattr ' + nka + \" didn't work\");\n else\n throw new Error(\"couldn't find the node data\");\n }\n nodes = nodes.map(function(n) { return n[nodewrappers[wi]]; });\n node0 = nodes[0];\n candidates = find_attr(node0, nodekeyattrs);\n }\n if(candidates.length > 1)\n console.warn('found more than one possible node key attr', candidates);\n nka = candidates[0];\n }\n\n return {\n nodes: nodes,\n edges: edges,\n nodekeyattr: nka,\n sourceattr: sa,\n targetattr: ta\n };\n}\n","/* for the special case where there will be exactly one or zero items in a group,\n a reasonable reduction is just to use the row or null.\n this could be useful outside dc.graph (esp e.g bubble charts, scatter plots where each\n observation is either shown or not) but it would have to be cleaned up a bit */\n\ndc_graph.flat_group = (function() {\n var reduce_01 = {\n add: function(p, v) { return v; },\n remove: function() { return null; },\n init: function() { return null; }\n };\n // now we only really want to see the non-null values, so make a fake group\n function non_null(group) {\n return {\n all: function() {\n return group.all().filter(function(kv) {\n return kv.value !== null;\n });\n }\n };\n }\n\n function dim_group(ndx, id_accessor) {\n var dimension = ndx.dimension(id_accessor);\n return {\n crossfilter: ndx,\n dimension: dimension,\n group: non_null(dimension.group().reduce(reduce_01.add,\n reduce_01.remove,\n reduce_01.init))\n };\n }\n\n return {\n make: function(vec, id_accessor) {\n var ndx = crossfilter(vec);\n return dim_group(ndx, id_accessor);\n },\n another: function(ndx, id_accessor) { // wretched name\n return dim_group(ndx, id_accessor);\n }\n };\n})();\n\n\n","// make crossfilter-suitable data from d3.nest {key, values} format\ndc_graph.convert_nest = function(nest, attrs, nodeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) {\n inherit = inherit || {};\n var level = Object.keys(inherit).length;\n if(attrs.length) {\n var attr = attrs.shift();\n var nodes = [], edges = [];\n var children = nest.map(function(v) {\n inherit[attr] = v.key;\n var child = uuid();\n var node = clone(inherit);\n node[nodeKeyAttr] = child;\n node.name = attr + ':' + v.key;\n node._level = level+1;\n nodes.push(node);\n if(parent) {\n var edge = {};\n edge[edgeSourceAttr] = parent;\n edge[edgeTargetAttr] = child;\n edges.push(edge);\n }\n var recurse = dc_graph.convert_nest(v.values, attrs.slice(0), nodeKeyAttr, edgeSourceAttr, edgeTargetAttr, child, clone(inherit));\n return recurse;\n });\n return {nodes: Array.prototype.concat.apply(nodes, children.map(dc.pluck('nodes'))),\n edges: Array.prototype.concat.apply(edges, children.map(dc.pluck('edges')))};\n }\n else return {nodes: nest.map(function(v) {\n v._level = level+1;\n return v;\n }), edges: nest.map(function(v) {\n var edge = {};\n edge[edgeSourceAttr] = parent;\n edge[edgeTargetAttr] = v[nodeKeyAttr];\n return edge;\n })};\n};\n\ndc_graph.convert_adjacency_list = function(nodes, namesIn, namesOut) {\n // adjacenciesAttr, edgeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) {\n var edges = Array.prototype.concat.apply([], nodes.map(function(n) {\n return n[namesIn.adjacencies].map(function(adj) {\n var e = {};\n if(namesOut.edgeKey)\n e[namesOut.edgeKey] = uuid();\n e[namesOut.edgeSource] = n[namesIn.nodeKey];\n e[namesOut.edgeTarget] = namesIn.targetKey ? adj[namesIn.targetKey] : adj;\n if(namesOut.adjacency)\n e[namesOut.adjacency] = adj;\n return e;\n });\n }));\n return {\n nodes: nodes,\n edges: edges\n };\n};\n\n","dc_graph.path_reader = function(pathsgroup) {\n var highlight_paths_group = dc_graph.register_highlight_paths_group(pathsgroup || 'highlight-paths-group');\n var _intervals, _intervalTree, _time;\n\n function register_path_objs(path, nop, eop) {\n reader.elementList.eval(path).forEach(function(element) {\n var key, paths;\n switch(reader.elementType.eval(element)) {\n case 'node':\n key = reader.nodeKey.eval(element);\n paths = nop[key] = nop[key] || [];\n break;\n case 'edge':\n key = reader.edgeSource.eval(element) + '-' + reader.edgeTarget.eval(element);\n paths = eop[key] = eop[key] || [];\n break;\n }\n paths.push(path);\n });\n }\n\n var reader = {\n pathList: property(identity, false),\n timeRange: property(null, false),\n elementList: property(identity, false),\n elementType: property(null, false),\n nodeKey: property(null, false),\n edgeSource: property(null, false),\n edgeTarget: property(null, false),\n clear: function() {\n highlight_paths_group.paths_changed({}, {}, []);\n },\n data: function(data) {\n var nop = {}, eop = {}, allpaths = [], has_ranges;\n reader.pathList.eval(data).forEach(function(path) {\n if((path._range = reader.timeRange.eval(path))) { // ugh modifying user data\n if(has_ranges===false)\n throw new Error(\"can't have a mix of ranged and non-ranged paths\");\n has_ranges = true;\n } else {\n if(has_ranges===true)\n throw new Error(\"can't have a mix of ranged and non-ranged paths\");\n has_ranges = false;\n register_path_objs(path, nop, eop);\n }\n allpaths.push(path);\n });\n if(has_ranges) {\n _intervals = allpaths.map(function(path) {\n var interval = [path._range[0].getTime(), path._range[1].getTime()];\n interval.path = path;\n return interval;\n });\n // currently must include lysenko-interval-tree separately\n _intervalTree = lysenkoIntervalTree(_intervals);\n if(_time)\n this.setTime(_time);\n } else {\n _intervals = null;\n _intervalTree = null;\n highlight_paths_group.paths_changed(nop, eop, allpaths);\n }\n },\n getIntervals: function() {\n return _intervals;\n },\n setTime: function(t) {\n if(t && _intervalTree) {\n var paths = [], nop = {}, eop = {};\n _intervalTree.queryPoint(t.getTime(), function(interval) {\n paths.push(interval.path);\n register_path_objs(interval.path, nop, eop);\n });\n highlight_paths_group.paths_changed(nop, eop, paths);\n }\n _time = t;\n }\n };\n\n return reader;\n};\n\n","dc_graph.path_selector = function(parent, reader, pathsgroup, chartgroup) {\n var highlight_paths_group = dc_graph.register_highlight_paths_group(pathsgroup || 'highlight-paths-group');\n var root = d3.select(parent);\n var paths_ = [];\n var hovered = null, selected = null;\n\n // unfortunately these functions are copied from dc_graph.highlight_paths\n function contains_path(paths) {\n return function(path) {\n return paths ? paths.indexOf(path)>=0 : false;\n };\n }\n\n function doesnt_contain_path(paths) {\n var cp = contains_path(paths);\n return function(path) {\n return !cp(path);\n };\n }\n\n function toggle_paths(pathsA, pathsB) {\n if(!pathsA)\n return pathsB;\n else if(!pathsB)\n return pathsA;\n if(pathsB.every(contains_path(pathsA)))\n return pathsA.filter(doesnt_contain_path(pathsB));\n else return pathsA.concat(pathsB.filter(doesnt_contain_path(pathsA)));\n }\n\n // this should use the whole cascading architecture\n // and allow customization rather than hardcoding everything\n // in fact, you can't even reliably overlap attributes without that (so we don't)\n\n function draw_paths(paths) {\n var p2 = root.selectAll('span.path-selector').data(paths);\n p2.enter()\n .append('span')\n .attr('class', 'path-selector')\n .style({\n 'border-width': '1px',\n 'border-style': 'solid',\n 'border-color': 'grey',\n 'border-radius': '4px',\n 'display': 'inline-block',\n padding: '4px',\n cursor: 'pointer',\n margin: '5px'\n });\n p2.exit().transition(1000).attr('opacity', 0).remove();\n p2.text(function(d, i) {\n return 'path ' + (i+1) + ' (' + reader.elementList.eval(d).length + ')';\n })\n .on('mouseover', function(d) {\n highlight_paths_group.hover_changed([d]);\n })\n .on('mouseout', function(d) {\n highlight_paths_group.hover_changed(null);\n })\n .on('click', function(d) {\n highlight_paths_group.select_changed(toggle_paths(selected, [d]));\n });\n var no_paths = root.selectAll('span.no-paths').data(paths.length === 0 ? [0] : []);\n no_paths.exit().remove();\n no_paths.enter()\n .append('span')\n .attr('class', 'no-paths');\n no_paths\n .classed('error', !!selector.error_text())\n .text(selector.error_text() || (selector.queried() ? selector.zero_text() : selector.default_text()));\n }\n\n function draw_hovered() {\n var is_hovered = contains_path(hovered);\n root.selectAll('span.path-selector')\n .style({\n 'border-color': function(d, i) { return is_hovered(d) ? '#e41a1c' : 'grey'; },\n 'border-width': function(d, i) { return (is_hovered(d) ? 2 : 1) + 'px'; },\n padding: function(d, i) { return (is_hovered(d) ? 3 : 4) + 'px'; }\n });\n }\n\n function draw_selected() {\n var is_selected = contains_path(selected);\n root.selectAll('span.path-selector')\n .style({\n 'background-color': function(d, i) { return is_selected(d) ? '#1c1ae6' : 'white'; },\n 'color': function(d, i) { return is_selected(d) ? 'white' : 'black'; }\n });\n }\n\n highlight_paths_group\n .on('paths_changed.selector', function(nop, eop, paths) {\n hovered = selected = null;\n paths_ = paths;\n selector.redraw();\n })\n .on('hover_changed.selector', function(hpaths) {\n hovered = hpaths;\n draw_hovered();\n })\n .on('select_changed.selector', function(spaths) {\n selected = spaths;\n draw_selected();\n });\n var selector = {\n default_text: property('Nothing here'),\n zero_text: property('No paths'),\n error_text: property(null),\n queried: property(false),\n redraw: function() {\n draw_paths(paths_);\n draw_hovered();\n draw_selected();\n },\n render: function() {\n this.redraw();\n return this;\n }\n };\n dc.registerChart(selector, chartgroup);\n return selector;\n}\n","dc_graph.node_name = function(i) {\n // a-z, A-Z, aa-Zz, then quit\n if(i<26)\n return String.fromCharCode(97+i);\n else if(i<52)\n return String.fromCharCode(65+i-26);\n else if(i<52*52)\n return dc_graph.node_name(Math.floor(i/52)) + dc_graph.node_name(i%52);\n else throw new Error(\"no, that's too large\");\n};\ndc_graph.node_object = function(i, attrs) {\n attrs = attrs || {};\n return _.extend({\n id: i,\n name: dc_graph.node_name(i)\n }, attrs);\n};\n\ndc_graph.edge_object = function(namef, i, j, attrs) {\n attrs = attrs || {};\n return _.extend({\n source: i,\n target: j,\n sourcename: namef(i),\n targetname: namef(j)\n }, attrs);\n};\n\ndc_graph.generate = function(type, args, env, callback) {\n var nodes, edges, i, j;\n var nodePrefix = env.nodePrefix || '';\n var namef = function(i) {\n return nodes[i].name;\n };\n var N = args[0];\n var linkLength = env.linkLength || 30;\n switch(type) {\n case 'clique':\n case 'cliquestf':\n nodes = new Array(N);\n edges = [];\n for(i = 0; i max_line_length && line.length > 0) {\n lines.push(line);\n line = '';\n }\n line += part;\n i = regexp.lastIndex;\n }\n while(result !== null);\n lines.push(line);\n return lines;\n };\n};\n","dc_graph.build_type_graph = function(nodes, edges, nkey, ntype, esource, etarget) {\n var nmap = {}, tnodes = {}, tedges = {};\n nodes.forEach(function(n) {\n nmap[nkey(n)] = n;\n var t = ntype(n);\n if(!tnodes[t])\n tnodes[t] = {type: t};\n });\n edges.forEach(function(e) {\n var source = esource(e), target = etarget(e), sn, tn;\n if(!(sn = nmap[source]))\n throw new Error('source key ' + source + ' not found!');\n if(!(tn = nmap[target]))\n throw new Error('target key ' + target + ' not found!');\n var etype = ntype(sn) + '/' + ntype(tn);\n if(!tedges[etype])\n tedges[etype] = {\n type: etype,\n source: ntype(sn),\n target: ntype(tn)\n };\n });\n return {\n nodes: Object.keys(tnodes).map(function(k) { return tnodes[k]; }),\n edges: Object.keys(tedges).map(function(k) { return tedges[k]; })\n };\n}\n","dc_graph.d3 = d3;\ndc_graph.crossfilter = crossfilter;\ndc_graph.dc = dc;\n\nreturn dc_graph;\n}\n if (typeof define === 'function' && define.amd) {\n define([\"d3\", \"crossfilter\", \"dc\"], _dc_graph);\n } else if (typeof module == \"object\" && module.exports) {\n var _d3 = require('d3');\n var _crossfilter = require('crossfilter');\n if (typeof _crossfilter !== \"function\") {\n _crossfilter = _crossfilter.crossfilter;\n }\n var _dc = require('dc');\n module.exports = _dc_graph(_d3, _crossfilter, _dc);\n } else {\n this.dc_graph = _dc_graph(d3, crossfilter, dc);\n }\n}\n)();\n"]} \ No newline at end of file +{"version":3,"sources":["src/banner.js","src/core.js","src/utils.js","src/depth_first_traversal.js","src/generate_objects.js","src/shape.js","src/diagram.js","src/webworker_layout.js","src/graphviz_attrs.js","src/cola_layout.js","src/dagre_layout.js","src/tree_layout.js","src/legend.js","src/constraint_pattern.js","src/tree_positions.js","src/tree_constraints.js","src/behavior.js","src/tip.js","src/select_nodes.js","src/highlight_neighbors.js","src/highlight_paths_group.js","src/highlight_paths.js","src/expand_collapse.js","src/load_graph.js","src/munge_graph.js","src/flat_group.js","src/convert.js","src/path_reader.js","src/path_selector.js","src/generate.js","src/line_breaks.js","src/type_graph.js","src/footer.js"],"names":[],"mappings":"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","file":"dc.graph.js","sourcesContent":["(function() { function _dc_graph(d3, crossfilter, dc) {\n'use strict';\n","/**\n * The entire dc.graph.js library is scoped under the **dc_graph** name space. It does not introduce\n * anything else into the global name space.\n *\n * Like in dc.js and most libraries built on d3, most `dc_graph` functions are designed to allow function chaining, meaning they return the current chart\n * instance whenever it is appropriate. The getter forms of functions do not participate in function\n * chaining because they return values that are not the chart.\n * @namespace dc_graph\n * @version 0.4.0\n * @example\n * // Example chaining\n * chart.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.4.0',\n constants: {\n CHART_CLASS: 'dc-graph'\n }\n};\n\nfunction get_original(x) {\n return x.orig;\n}\n\nfunction identity(x) {\n return x;\n};\n\nvar property = function (defaultValue, unwrap) {\n if(unwrap === undefined)\n unwrap = get_original;\n else if(unwrap === false)\n unwrap = identity;\n var value = defaultValue, react = null;\n var cascade = [];\n var ret = function (_) {\n if (!arguments.length) {\n return value;\n }\n if(react)\n react(_);\n value = _;\n return this;\n };\n ret.cascade = function (n, f) {\n for(var i = 0; i n) {\n cascade.splice(i, 0, {n: n, f: f});\n return ret;\n }\n }\n cascade.push({n: n, f: f});\n return ret;\n };\n ret._eval = function(o, n) {\n if(n===0 || !cascade.length)\n return dc_graph.functor_wrap(ret(), unwrap)(o);\n else {\n var last = cascade[n-1];\n return last.f(o, function() {\n return ret._eval(o, n-1);\n });\n }\n };\n ret.eval = function(o) {\n return ret._eval(o, cascade.length);\n };\n ret.react = function(_) {\n if (!arguments.length) {\n return react;\n }\n react = _;\n return this;\n };\n return ret;\n};\n\nfunction deprecated_property(message, defaultValue) {\n var prop = property(defaultValue);\n var ret = function() {\n if(arguments.length) {\n console.warn(message);\n prop.apply(property, arguments);\n return this;\n }\n return prop();\n };\n ['cascade', '_eval', 'eval', 'react'].forEach(function(method) {\n ret[method] = prop[method];\n });\n return ret;\n}\n\n// http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\nfunction uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n","// i'm sure there's a word for this in haskell\nfunction conditional_properties(npred, epred, props) {\n function _if(pred, curr) {\n return function(o, last) {\n return pred(o) ? curr(o) : last();\n };\n }\n var props2 = {};\n for(var p in props) {\n if(/^node/.test(p)) {\n if(npred)\n props2[p] = _if(npred, param(props[p]));\n }\n else if(/^edge/.test(p)) {\n if(epred)\n props2[p] = _if(epred, param(props[p]));\n }\n else console.error('only know how to deal with properties that start with \"node\" or \"edge\"');\n }\n return props2;\n}\n\nfunction compose(f, g) {\n return function() {\n return f(g.apply(null, arguments));\n };\n}\n\n// version of d3.functor that optionally wraps the function with another\n// one, if the parameter is a function\ndc_graph.functor_wrap = function (v, wrap) {\n if(typeof v === \"function\") {\n return wrap ? function(x) {\n return v(wrap(x));\n } : v;\n }\n else return function() {\n return v;\n };\n};\n\n// we want to allow either values or functions to be passed to specify parameters.\n// if a function, the function needs a preprocessor to extract the original key/value\n// pair from the wrapper object we put it in.\nfunction param(v) {\n return dc_graph.functor_wrap(v, get_original);\n}\n\n// http://jsperf.com/cloning-an-object/101\nfunction clone(obj) {\n var target = {};\n for(var i in obj) {\n if(obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n}\n\n// because i don't think we need to bind edge point data (yet!)\nvar bez_cmds = {\n 1: 'L', 2: 'Q', 3: 'C'\n};\n\nfunction generate_path(pts, bezDegree, close) {\n var cats = ['M', pts[0].x, ',', pts[0].y], remain = bezDegree;\n var hasNaN = false;\n for(var i = 1; i < pts.length; ++i) {\n if(isNaN(pts[i].x) || isNaN(pts[i].y))\n hasNaN = true;\n cats.push(remain===bezDegree ? bez_cmds[bezDegree] : ' ', pts[i].x, ',', pts[i].y);\n if(--remain===0)\n remain = bezDegree;\n }\n if(remain!=bezDegree)\n console.log(\"warning: pts.length didn't match bezian degree\", pts, bezDegree);\n if(close)\n cats.push('Z');\n return cats.join('');\n}\n\n// for IE (do we care really?)\nMath.hypot = Math.hypot || function() {\n var y = 0;\n var length = arguments.length;\n\n for (var i = 0; i < length; i++) {\n if (arguments[i] === Infinity || arguments[i] === -Infinity) {\n return Infinity;\n }\n y += arguments[i] * arguments[i];\n }\n return Math.sqrt(y);\n};\n\nvar script_path = function() {\n var _path;\n return function() {\n if(_path === undefined) {\n // adapted from http://stackoverflow.com/a/18283141/676195\n _path = null; // only try once\n var filename = 'dc.graph.js';\n var scripts = document.getElementsByTagName('script');\n if (scripts && scripts.length > 0) {\n for (var i in scripts) {\n if (scripts[i].src && scripts[i].src.match(new RegExp(filename+'$'))) {\n _path = scripts[i].src.replace(new RegExp('(.*)'+filename+'$'), '$1');\n break;\n }\n }\n }\n }\n return _path;\n };\n}();\n","// arguably depth first search is a stupid algorithm to modularize -\n// there are many, many interesting moments to insert a behavior\n// and those end up being almost bigger than the function itself\n\n// this is an argument for providing a graph API which could make it\n// easy to just write a recursive function instead of using this\ndc_graph.depth_first_traversal = function(callbacks) { // {init, root, row, tree, place, sib, push, pop, skip, finish, nodeid, sourceid, targetid}\n return function(nodes, edges) {\n callbacks.init && callbacks.init();\n if(callbacks.tree)\n edges = edges.filter(function(e) { return callbacks.tree(e); });\n var indegree = {};\n var outmap = edges.reduce(function(m, e) {\n var tail = callbacks.sourceid(e),\n head = callbacks.targetid(e);\n if(!m[tail]) m[tail] = [];\n m[tail].push(e);\n indegree[head] = (indegree[head] || 0) + 1;\n return m;\n }, {});\n var nmap = nodes.reduce(function(m, n) {\n var key = callbacks.nodeid(n);\n m[key] = n;\n return m;\n }, {});\n\n var rows = [];\n var placed = {};\n function place_tree(n, r) {\n var key = callbacks.nodeid(n);\n if(placed[key]) {\n callbacks.skip && callbacks.skip(n, indegree[key]);\n return;\n }\n if(!rows[r])\n rows[r] = [];\n callbacks.place && callbacks.place(n, r, rows[r]);\n rows[r].push(n);\n placed[key] = true;\n if(outmap[key])\n outmap[key].forEach(function(e, ei) {\n var target = nmap[callbacks.targetid(e)];\n if(ei && callbacks.sib)\n callbacks.sib(false, nmap[callbacks.targetid(outmap[key][ei-1])], target);\n callbacks.push && callbacks.push();\n place_tree(target, r+1);\n });\n callbacks.pop && callbacks.pop(n);\n }\n\n var roots;\n if(callbacks.root)\n roots = nodes.filter(function(n) { return callbacks.root(n); });\n else {\n roots = nodes.filter(function(n) { return !indegree[callbacks.nodeid(n)]; });\n if(nodes.length && !roots.length) // all nodes are in a cycle\n roots = [nodes[0]];\n }\n roots.forEach(function(n, ni) {\n if(ni && callbacks.sib)\n callbacks.sib(true, roots[ni-1], n);\n callbacks.push && callbacks.push();\n place_tree(n, callbacks.row ? callbacks.row(n) : 0);\n });\n callbacks.finish(rows);\n };\n};\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, key, assign, create, destroy) {\n if(!create) create = function(k, o) { };\n if(!destroy) destroy = function(k) { };\n var keep = {};\n function wrap(o) {\n var k = key(o);\n if(!preserved[k])\n create(k, preserved[k] = {}, o);\n var o1 = preserved[k];\n assign(o1, o);\n keep[k] = true;\n return o1;\n }\n var wlist = list.map(wrap);\n // delete any objects from last round that are no longer used\n for(var k in preserved)\n if(!keep[k]) {\n destroy(k, preserved[k]);\n delete preserved[k];\n }\n return wlist;\n}\n","function point_on_ellipse(A, B, dx, dy) {\n var tansq = Math.tan(Math.atan2(dy, dx));\n tansq = tansq*tansq; // why is this not just dy*dy/dx*dx ? ?\n var ret = {x: A*B/Math.sqrt(B*B + A*A*tansq), y: A*B/Math.sqrt(A*A + B*B/tansq)};\n if(dx<0)\n ret.x = -ret.x;\n if(dy<0)\n ret.y = -ret.y;\n return ret;\n}\n\nvar eps = 0.0000001;\nfunction between(a, b, c) {\n return a-eps <= b && b <= c+eps;\n}\n\n// Adapted from http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/1968345#1968345\nfunction segment_intersection(x1,y1,x2,y2, x3,y3,x4,y4) {\n var x=((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4)) /\n ((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));\n var y=((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4)) /\n ((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));\n if (isNaN(x)||isNaN(y)) {\n return false;\n } else {\n if (x1>=x2) {\n if (!between(x2, x, x1)) {return false;}\n } else {\n if (!between(x1, x, x2)) {return false;}\n }\n if (y1>=y2) {\n if (!between(y2, y, y1)) {return false;}\n } else {\n if (!between(y1, y, y2)) {return false;}\n }\n if (x3>=x4) {\n if (!between(x4, x, x3)) {return false;}\n } else {\n if (!between(x3, x, x4)) {return false;}\n }\n if (y3>=y4) {\n if (!between(y4, y, y3)) {return false;}\n } else {\n if (!between(y3, y, y4)) {return false;}\n }\n }\n return {x: x, y: y};\n}\n\n\nfunction point_on_polygon(points, x0, y0, x1, y1) {\n for(var i = 0; i < points.length; ++i) {\n var next = i===points.length-1 ? 0 : i+1;\n var isect = segment_intersection(points[i].x, points[i].y, points[next].x, points[next].y,\n x0, y0, x1, y1);\n if(isect)\n return isect;\n }\n return null;\n}\n\nfunction point_on_shape(chart, d, deltaX, deltaY) {\n switch(d.dcg_shape.shape) {\n case 'ellipse':\n return point_on_ellipse(d.dcg_rx, d.dcg_ry, deltaX, deltaY);\n case 'polygon':\n return point_on_polygon(d.dcg_points, 0, 0, deltaX, deltaY);\n }\n}\n\n// as many as we can get from\n// http://www.graphviz.org/doc/info/shapes.html\nvar dc_graph_shapes_ = {\n ellipse: function() {\n return {shape: 'ellipse'};\n },\n egg: function() {\n return {shape: 'polygon', sides: 100, distortion: -0.25};\n },\n triangle: function() {\n return {shape: 'polygon', sides: 3};\n },\n rectangle: function() {\n return {shape: 'polygon', sides: 4};\n },\n diamond: function() {\n return {shape: 'polygon', sides: 4, rotation: 45};\n },\n trapezium: function() {\n return {shape: 'polygon', sides: 4, distortion: -0.5};\n },\n parallelogram: function() {\n return {shape: 'polygon', sides: 4, skew: 0.5};\n },\n pentagon: function() {\n return {shape: 'polygon', sides: 5};\n },\n hexagon: function() {\n return {shape: 'polygon', sides: 6};\n },\n septagon: function() {\n return {shape: 'polygon', sides: 7};\n },\n octagon: function() {\n return {shape: 'polygon', sides: 8};\n },\n invtriangle: function() {\n return {shape: 'polygon', sides: 3, rotation: 180};\n },\n invtrapezium: function() {\n return {shape: 'polygon', sides: 4, distortion: 0.5};\n },\n square: function() {\n return {shape: 'polygon', sides: 4};\n },\n polygon: function(def) {\n return {\n shape: 'polygon',\n sides: def.sides,\n skew: def.skew,\n distortion: def.distortion,\n rotation: def.rotation\n };\n }\n};\n\ndc_graph.available_shapes = function() {\n var shapes = Object.keys(dc_graph_shapes_);\n return shapes.slice(0, shapes.length-1);\n};\n\nvar default_shape = {shape: 'ellipse'};\n\nfunction elaborate_shape(def) {\n var shape = def.shape;\n if(def.shape === 'random') {\n var keys = Object.keys(dc_graph_shapes_);\n shape = def._shape = keys[Math.floor(Math.random()*keys.length)];\n }\n return (dc_graph_shapes_[shape] || function() {\n throw new Error('unknown shape ' + def.shape);\n })(def);\n}\n\nfunction infer_shape(chart) {\n return function(d) {\n var def = chart.nodeShape.eval(d) || default_shape;\n d.dcg_shape = elaborate_shape(def);\n d.dcg_shape.abstract = def;\n };\n}\n\nfunction shape_changed(chart) {\n return function(d) {\n var def = chart.nodeShape.eval(d) || default_shape;\n var old = d.dcg_shape.abstract;\n if(def.shape !== old.shape)\n return true;\n else if(def.shape === 'polygon') {\n return def.shape.sides !== old.sides || def.shape.skew !== old.skew ||\n def.shape.distortion !== old.distortion || def.shape.rotation !== old.rotation;\n }\n else return false;\n };\n}\n\nfunction shape_element(chart) {\n return function(d) {\n var shape = d.dcg_shape.shape, elem;\n switch(shape) {\n case 'ellipse':\n elem = 'ellipse';\n break;\n case 'polygon':\n elem = 'path';\n break;\n default:\n throw new Error('unknown shape ' + shape);\n }\n return document.createElementNS(\"http://www.w3.org/2000/svg\", elem);\n };\n}\n\nfunction fit_shape(chart) {\n return function(d) {\n var r = chart.nodeRadius.eval(d);\n var bbox;\n if(chart.nodeFitLabel.eval(d))\n bbox = this.getBBox();\n var fitx = 0;\n if(bbox && bbox.width && bbox.height) {\n // make sure we can fit height in r\n r = Math.max(r, bbox.height/2 + 5);\n var rx;\n if(d.dcg_shape.shape === 'ellipse') {\n // solve (x/A)^2 + (y/B)^2) = 1 for A, with B=r, to fit text in ellipse\n // http://stackoverflow.com/a/433438/676195\n var y_over_B = bbox.height/2/r;\n rx = bbox.width/2/Math.sqrt(1 - y_over_B*y_over_B);\n d.dcg_rx = Math.max(rx, r);\n d.dcg_ry = r;\n } else {\n rx = bbox.width/2;\n // this is cribbed from graphviz but there is much i don't understand\n // and any errors are mine\n // https://github.com/ellson/graphviz/blob/6acd566eab716c899ef3c4ddc87eceb9b428b627/lib/common/shapes.c#L1996\n d.dcg_rx = rx*Math.sqrt(2)/Math.cos(Math.PI/(d.dcg_shape.sides||4));\n d.dcg_ry = r;\n }\n fitx = rx*2 + chart.nodePadding.eval(d) + chart.nodeStrokeWidth.eval(d);\n }\n else d.dcg_rx = d.dcg_ry = r;\n var rplus = r*2 + chart.nodePadding.eval(d) + chart.nodeStrokeWidth.eval(d);\n d.cola.width = Math.max(fitx, rplus);\n d.cola.height = rplus;\n };\n}\n\nfunction ellipse_attrs(chart, d) {\n return {\n rx: function(d) { return d.dcg_rx; },\n ry: function(d) { return d.dcg_ry; }\n };\n}\n\nfunction polygon_attrs(chart, d) {\n return {\n d: function(d) {\n var def = d.dcg_shape,\n sides = def.sides || 4,\n skew = def.skew || 0,\n distortion = def.distortion || 0,\n rotation = def.rotation || 0,\n align = (sides%2 ? 0 : 0.5), // even-sided horizontal top, odd pointy top\n angles = [];\n rotation = rotation/360 + 0.25; // start at y axis not x\n for(var i = 0; i= 0)\n throw new Error(\"f(a) must be less than 0\");\n if(f(b).val <= 0)\n throw new Error(\"f(b) must be greater than 0\");\n while(true) {\n if(!--patience)\n throw new Error(\"patience ran out\");\n var c = (a+b)/2,\n f_c = f(c), fv = f_c.val;\n if(Math.abs(fv) < 0.5)\n return f_c;\n if(fv > 0)\n b = c;\n else\n a = c;\n }\n}\n\nfunction draw_edge_to_shapes(chart, source, target, sx, sy, tx, ty,\n neighbor, dir, offset, source_padding, target_padding) {\n var deltaX, deltaY,\n sp, tp, points, bezDegree,\n headAng, retPath;\n if(!neighbor) {\n deltaX = tx - sx;\n deltaY = ty - sy;\n sp = point_on_shape(chart, source, deltaX, deltaY);\n tp = point_on_shape(chart, target, -deltaX, -deltaY);\n if(!sp) sp = {x: 0, y: 0};\n if(!tp) tp = {x: 0, y: 0};\n points = [{\n x: sx + sp.x,\n y: sy + sp.y\n }, {\n x: tx + tp.x,\n y: ty + tp.y\n }];\n bezDegree = 1;\n }\n else {\n var p_on_s = function(node, ang) {\n return point_on_shape(chart, node, Math.cos(ang)*1000, Math.sin(ang)*1000);\n };\n var compare_dist = function(node, port0, goal) {\n return function(ang) {\n var port = p_on_s(node, ang);\n if(!port)\n return {\n port: {x: 0, y: 0},\n val: 0,\n ang: ang\n };\n else\n return {\n port: port,\n val: Math.hypot(port.x - port0.x, port.y - port0.y) - goal,\n ang: ang\n };\n };\n };\n var srcang = Math.atan2(neighbor.sourcePort.y, neighbor.sourcePort.x),\n tarang = Math.atan2(neighbor.targetPort.y, neighbor.targetPort.x);\n var bss, bst;\n\n // don't like this but throwing is unacceptable\n try {\n bss = binary_search(compare_dist(source, neighbor.sourcePort, offset),\n srcang, srcang + 2 * dir * offset / source_padding);\n }\n catch(x) {\n bss = {ang: srcang, port: neighbor.sourcePort};\n }\n try {\n bst = binary_search(compare_dist(target, neighbor.targetPort, offset),\n tarang, tarang - 2 * dir * offset / source_padding);\n }\n catch(x) {\n bst = {ang: tarang, port: neighbor.targetPort};\n }\n\n sp = bss.port;\n tp = bst.port;\n var sdist = Math.hypot(sp.x, sp.y),\n tdist = Math.hypot(tp.x, tp.y),\n c1dist = sdist+source_padding/2,\n c2dist = tdist+target_padding/2;\n var c1X = sx + c1dist * Math.cos(bss.ang),\n c1Y = sy + c1dist * Math.sin(bss.ang),\n c2X = tx + c2dist * Math.cos(bst.ang),\n c2Y = ty + c2dist * Math.sin(bst.ang);\n points = [\n {x: sx + sp.x, y: sy + sp.y},\n {x: c1X, y: c1Y},\n {x: c2X, y: c2Y},\n {x: tx + tp.x, y: ty + tp.y}\n ];\n bezDegree = 3;\n }\n return {\n sourcePort: sp,\n targetPort: tp,\n points: points,\n bezDegree: bezDegree\n };\n}\n\n\n// from https://www.jasondavies.com/animated-bezier/\nfunction interpolate(d, p) {\n var r = [];\n for (var i=1; i\" + d.orig.value.name + \"\");\n * });\n * diagram.child('tip', tip);\n * @return {dc_graph.diagram}\n **/\n _chart.child = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return _chart;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(_chart);\n return _chart;\n };\n\n /**\n * Specify 'cola' (the default) or 'dagre' as the Layout Algorithm and it will replace the\n * back-end.\n *\n * **Deprecated**: use {@link dc_graph.diagram#layoutEngine diagram.layoutEngine} with the engine\n * object instead\n * @method layoutAlgorithm\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [algo='cola'] - the name of the layout algorithm to use\n * @example\n * // use dagre for layout\n * diagram.layoutAlgorithm('dagre');\n * @return {dc_graph.diagram}\n **/\n _chart.layoutAlgorithm = function(value, skipWarning) {\n if(!arguments.length)\n return _chart.layoutEngine() ? _chart.layoutEngine().layoutAlgorithm() : 'cola';\n if(!skipWarning)\n console.warn('dc.graph.diagram.layoutAlgorithm is depecrated - pass the layout engine object to dc_graph.diagram.layoutEngine instead');\n\n var engine;\n switch(value) {\n case 'cola':\n engine = dc_graph.cola_layout();\n break;\n case 'dagre':\n engine = dc_graph.dagre_layout();\n }\n engine = dc_graph.webworker_layout(engine);\n _chart.layoutEngine(engine);\n return this;\n };\n\n /**\n * The layout engine determines how to draw things!\n * @method layoutEngine\n * @memberof dc_graph.diagram\n * @instance\n * @param {Object} [engine=null] - the layout engine to use\n * @example\n * // use cola with no webworker\n * diagram.layoutEngine(dc_graph.cola_layout());\n * // use dagre with a webworker\n * diagram.layoutEngine(dc_graph.webworker_layout(dc_graph.dagre_layout()));\n **/\n _chart.layoutEngine = property(null).react(function(val) {\n if(val && val.parent)\n val.parent(_chart);\n });\n\n _chart.tickSize = deprecate_layout_algo_parameter('tickSize');\n\n\n _chart.edgeId = function(d) {\n return 'edge-' + _chart.edgeKey.eval(d).replace(/[^\\w-_]/g, '-');\n };\n\n _chart.arrowId = function(d, kind) {\n return 'arrow-' + kind + '-' + _chart.edgeId(d);\n };\n\n _chart.textpathId = function(d) {\n return 'textpath-' + _chart.edgeId(d);\n };\n\n // this kind of begs a (meta)graph ADT\n // instead of munging this into the diagram\n _chart.getNode = function(id) {\n return _nodes[id] ? _nodes[id].orig : null;\n };\n\n /**\n * Instructs cola.js to fit the connected components.\n *\n * **Deprecated**: Use\n * {@link dc_graph.cola_layout#handleDisconnected cola_layout.handleDisconnected} instead.\n * @method handleDisconnected\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [handleDisconnected=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _chart.handleDisconnected = deprecate_layout_algo_parameter('handleDisconnected');\n\n function initLayout() {\n if(!_chart.layoutEngine())\n _chart.layoutAlgorithm('cola', true);\n _chart.layoutEngine().init({\n width: _chart.width(),\n height: _chart.height()\n });\n }\n\n _chart._enterNode = function(nodeEnter) {\n if(_chart.nodeTitle())\n nodeEnter.append('title');\n nodeEnter.each(infer_shape(_chart));\n nodeEnter.append(shape_element(_chart))\n .attr('class', 'node-shape');\n nodeEnter.append('text')\n .attr('class', 'node-label');\n return _chart;\n };\n\n _chart._updateNode = function(node) {\n var changedShape = node.filter(shape_changed(_chart));\n changedShape.select('.node-shape').remove();\n changedShape.each(infer_shape(_chart));\n changedShape.insert(shape_element(_chart), ':first-child')\n .attr('class', 'node-shape');\n node.select('title')\n .text(_chart.nodeTitle.eval);\n var text = node.select('text.node-label');\n var tspan = text.selectAll('tspan').data(function(n) {\n var lines = _chart.nodeLabel.eval(n);\n if(!lines)\n return [];\n else if(typeof lines === 'string')\n lines = [lines];\n var first = lines.length%2 ? 0.3 - (lines.length-1)/2 : 1-lines.length/2;\n return lines.map(function(line, i) { return {line: line, ofs: (i==0 ? first : 1) + 'em'}; });\n });\n tspan.enter().append('tspan')\n .attr('x', 0)\n .attr('dy', function(d) { return d.ofs; });\n tspan.text(function(d) { return d.line; });\n tspan.exit().remove();\n text\n .attr('fill', _chart.nodeLabelFill.eval)\n .each(fit_shape(_chart));\n node.select('.node-shape')\n .each(shape_attrs(_chart))\n .attr({\n stroke: _chart.nodeStroke.eval,\n 'stroke-width': _chart.nodeStrokeWidth.eval,\n fill: compose(_chart.nodeFillScale() || identity, _chart.nodeFill.eval)\n });\n return _chart;\n };\n\n function has_source_and_target(e) {\n return !!e.source && !!e.target;\n }\n\n // three stages: delete before layout, and modify & insert split the transitionDuration\n function transition_duration() {\n return (_chart.stageTransitions() !== 'none') ?\n _chart.transitionDuration() / 2 :\n _chart.transitionDuration();\n }\n\n function transition_delay(is_enter) {\n return _chart.stageTransitions() === 'none' ||\n _chart.stageTransitions() === 'modins' === !is_enter ?\n 0 :\n _chart.transitionDuration() / 2;\n }\n\n _chart.isRunning = function() {\n return _running;\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Computes a new layout based on the nodes and edges in the edge groups, and\n * displays the diagram. To the extent possible, the diagram will minimize changes in\n * positions from the previous layout. `.render()` must be called the first time, and\n * `.redraw()` can be called after that.\n\n * `.redraw()` will be triggered by changes to the filters in any other charts in the same\n * dc.js chart group.\n\n * Unlike in dc.js, `redraw` executes asynchronously, because drawing can be computationally\n * intensive, and the diagram will be drawn multiple times if\n * {@link #dc_graph.diagram+showLayoutSteps showLayoutSteps}\n * is enabled. Watch the {@link #dc_graph.diagram+on 'end'} event to know when layout is\n * complete.\n **/\n var _needsRedraw = false;\n _chart.redraw = function () {\n // since dc.js can receive UI events and trigger redraws whenever it wants,\n // and cola absolutely will not tolerate being poked while it's doing layout,\n // we need to guard the startLayout call.\n if(_running) {\n _needsRedraw = true;\n return this;\n }\n else return _chart.startLayout();\n };\n\n _chart.startLayout = function () {\n var nodes = _chart.nodeGroup().all();\n var edges = _chart.edgeGroup().all();\n if(_running) {\n throw new Error('dc_graph.diagram.redraw already running!');\n }\n _running = true;\n\n _chart.layoutEngine().stop();\n\n if(_chart.initLayoutOnRedraw())\n initLayout();\n\n // ordering shouldn't matter, but we support ordering in case it does\n if(_chart.nodeOrdering()) {\n nodes = crossfilter.quicksort.by(_chart.nodeOrdering())(nodes.slice(0), 0, nodes.length);\n }\n if(_chart.edgeOrdering()) {\n edges = crossfilter.quicksort.by(_chart.edgeOrdering())(edges.slice(0), 0, edges.length);\n }\n\n var wnodes = regenerate_objects(_nodes, nodes, function(v) {\n return _chart.nodeKey()(v);\n }, function(v1, v) {\n v1.orig = v;\n v1.cola = v1.cola || {};\n v1.cola.dcg_nodeKey = _chart.nodeKey.eval(v1);\n if(_chart.nodeFixed())\n v1.cola.dcg_nodeFixed = _chart.nodeFixed.eval(v1);\n _chart.layoutEngine().populateLayoutNode(v1.cola, v1);\n });\n var wedges = regenerate_objects(_edges, edges, function(e) {\n return _chart.edgeKey()(e);\n }, function(e1, e) {\n e1.orig = e;\n e1.cola = e1.cola || {};\n e1.cola.dcg_edgeKey = _chart.edgeKey.eval(e1);\n e1.cola.dcg_edgeSource = _chart.edgeSource.eval(e1);\n e1.cola.dcg_edgeTarget = _chart.edgeTarget.eval(e1);\n e1.source = _nodes[e1.cola.dcg_edgeSource];\n e1.target = _nodes[e1.cola.dcg_edgeTarget];\n e1.cola.dcg_edgeLength = _chart.edgeLength.eval(e1);\n _chart.layoutEngine().populateLayoutEdge(e1.cola, e1);\n });\n\n // remove edges that don't have both end nodes\n wedges = wedges.filter(has_source_and_target);\n\n // remove self-edges (since we can't draw them - will be option later)\n wedges = wedges.filter(function(e) { return e.source !== e.target; });\n\n wedges = wedges.filter(_chart.edgeIsShown.eval);\n\n // and optionally, nodes that have no edges\n if(_chart.induceNodes()) {\n var keeps = {};\n wedges.forEach(function(e) {\n keeps[e.cola.dcg_edgeSource] = true;\n keeps[e.cola.dcg_edgeTarget] = true;\n });\n wnodes = wnodes.filter(function(n) { return keeps[n.cola.dcg_nodeKey]; });\n for(var k in _nodes)\n if(!keeps[k])\n delete _nodes[k];\n }\n\n wnodes.forEach(function(v, i) {\n v.index = i;\n });\n\n _stats = {nnodes: wnodes.length, nedges: wedges.length};\n\n // annotate parallel edges so we can draw them specially\n if(_chart.parallelEdgeOffset()) {\n var em = new Array(wnodes.length);\n for(var i = 0; i < em.length; ++i) {\n em[i] = new Array(em.length); // technically could be diagonal array\n for(var j = 0; j < em.length; ++j)\n em[i][j] = {\n n: 0,\n ports: {\n rev: []\n }\n };\n }\n wedges.forEach(function(e) {\n var min = Math.min(e.source.index, e.target.index),\n max = Math.max(e.source.index, e.target.index);\n e.parallel = em[min][max].n++;\n e.ports = em[min][max].ports;\n e.ports.rev.push(min !== e.source.index);\n });\n for(i = 0; i < em.length; ++i)\n for(j = 0; j < em.length; ++j)\n if(em[i][j].n)\n em[i][j].ports.n = em[i][j].n;\n }\n\n // create edge SVG elements\n var edge = _edgeLayer.selectAll('.edge')\n .data(wedges, _chart.edgeKey.eval);\n var edgeEnter = edge.enter().append('svg:path')\n .attr({\n class: 'edge',\n id: _chart.edgeId,\n opacity: 0\n });\n\n edge.exit().transition()\n .duration(transition_duration())\n .delay(_chart.deleteDelay())\n .attr('opacity', 0)\n .each(function(d) {\n edgeArrow(d, 'head', null);\n edgeArrow(d, 'head', null);\n })\n .remove();\n\n // another wider copy of the edge just for hover events\n var edgeHover = _edgeLayer.selectAll('.edge-hover')\n .data(wedges, _chart.edgeKey.eval);\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'edge-hover')\n .attr('opacity', 0)\n .attr('stroke', 'green')\n .attr('stroke-width', 10)\n .on('mouseover', function(d) {\n d3.select('#' + _chart.edgeId(d) + '-label')\n .attr('visibility', 'visible');\n })\n .on('mouseout', function(d) {\n d3.select('#' + _chart.edgeId(d) + '-label')\n .attr('visibility', 'hidden');\n });\n edgeHover.exit().remove();\n\n var edgeLabels = _edgeLayer.selectAll('.edge-label')\n .data(wedges, _chart.edgeKey.eval);\n var edgeLabelsEnter = edgeLabels.enter()\n .append('text')\n .attr('id', function(d) {\n return _chart.edgeId(d) + '-label';\n })\n .attr('visibility', 'hidden')\n .attr({'class':'edge-label',\n 'text-anchor': 'middle',\n dy:-2})\n .append('textPath')\n .attr('startOffset', '50%')\n .attr('xlink:href', function(d) {\n var id = _chart.textpathId(d);\n return '#' + id;\n });\n var textPaths = _defs.selectAll('path.edge-label-path')\n .data(wedges, _chart.textpathId);\n var textPathsEnter = textPaths.enter()\n .append('svg:path').attr({\n class: 'edge-label-path',\n id: _chart.textpathId\n });\n edgeLabels.each(function(d) {\n d.dcg_bbox = null;\n })\n .selectAll('textPath')\n .text(function(d){\n return _chart.edgeLabel.eval(d);\n });\n edgeLabels.exit().transition()\n .duration(transition_duration())\n .delay(_chart.deleteDelay())\n .attr('opacity', 0).remove();\n\n // create node SVG elements\n var node = _nodeLayer.selectAll('.node')\n .data(wnodes, _chart.nodeKey.eval);\n var nodeEnter = node.enter().append('g')\n .attr('class', 'node')\n .attr('opacity', '0'); // don't show until has layout\n // .call(_d3cola.drag);\n\n _chart._enterNode(nodeEnter);\n\n node.exit().transition()\n .duration(transition_duration())\n .delay(_chart.deleteDelay())\n .attr('opacity', 0)\n .remove();\n\n _dispatch.drawn(node, edge, edgeHover);\n\n _refresh(node, edge);\n\n // really we should have layout chaining like in the good old Dynagraph days\n // the ordering of this and the previous 4 statements is somewhat questionable\n if(_chart.initialLayout())\n _chart.initialLayout()(_chart, wnodes, wedges);\n\n // no layout if the topology hasn't changed\n var skip_layout = false;\n if(!_chart.layoutUnchanged()) {\n var nodes_snapshot = JSON.stringify(wnodes.map(get_original)),\n edges_snapshot = JSON.stringify(wedges.map(get_original));\n if(nodes_snapshot === _nodes_snapshot && edges_snapshot === _edges_snapshot)\n skip_layout = true;\n _nodes_snapshot = nodes_snapshot;\n _edges_snapshot = edges_snapshot;\n }\n\n // cola constraints always use indices, but node references\n // are more friendly, so translate those\n\n // i am not satisfied with this constraint generation api...\n // https://github.com/dc-js/dc.graph.js/issues/10\n var constraints = _chart.constrain()(_chart, wnodes, wedges);\n // translate references from names to indices (ugly)\n constraints.forEach(function(c) {\n if(c.type) {\n switch(c.type) {\n case 'alignment':\n c.offsets.forEach(function(o) {\n o.node = _nodes[o.node].index;\n });\n break;\n case 'circle':\n c.nodes.forEach(function(n) {\n n.node = _nodes[n.node].index;\n });\n break;\n }\n } else if(c.axis) {\n c.left = _nodes[c.left].index;\n c.right = _nodes[c.right].index;\n }\n });\n\n // pseudo-cola.js features\n\n // 1. non-layout edges are drawn but not told to cola.js\n var layout_edges = wedges.filter(_chart.edgeIsLayout.eval);\n var nonlayout_edges = wedges.filter(function(x) {\n return !_chart.edgeIsLayout.eval(x);\n });\n\n // 2. type=circle constraints\n var circle_constraints = constraints.filter(function(c) {\n return c.type === 'circle';\n });\n constraints = constraints.filter(function(c) {\n return c.type !== 'circle';\n });\n circle_constraints.forEach(function(c) {\n var R = (c.distance || _chart.baseLength()*4) / (2*Math.sin(Math.PI/c.nodes.length));\n var nindices = c.nodes.map(function(x) { return x.node; });\n var namef = function(i) {\n return _chart.nodeKey.eval(wnodes[i]);\n };\n var wheel = dc_graph.wheel_edges(namef, nindices, R)\n .map(function(e) {\n var e1 = {internal: e};\n e1.source = _nodes[e.sourcename];\n e1.target = _nodes[e.targetname];\n return e1;\n });\n layout_edges = layout_edges.concat(wheel);\n });\n\n // 3. ordered alignment\n var ordered_constraints = constraints.filter(function(c) {\n return c.type === 'ordering';\n });\n constraints = constraints.filter(function(c) {\n return c.type !== 'ordering';\n });\n ordered_constraints.forEach(function(c) {\n var sorted = c.nodes.map(function(n) { return _nodes[n]; });\n if(c.ordering) {\n var sort = crossfilter.quicksort.by(param(c.ordering));\n sorted = sort(sorted, 0, sorted.length);\n }\n var left;\n sorted.forEach(function(n, i) {\n if(i===0)\n left = n;\n else {\n constraints.push({\n left: left.index,\n right: (left = n).index,\n axis: c.axis,\n gap: c.gap\n });\n }\n });\n });\n if(_chart.legend())\n _chart.legend().redraw();\n if(skip_layout) {\n _running = false;\n _dispatch.end(false);\n return this;\n }\n var startTime = Date.now();\n\n function populate_cola(rnodes, redges) {\n rnodes.forEach(function(rn) {\n var n = _nodes[rn.dcg_nodeKey];\n n.cola.x = rn.x;\n n.cola.y = rn.y;\n });\n redges.forEach(function(re) {\n var e = _edges[re.dcg_edgeKey];\n });\n }\n _chart.layoutEngine()\n .on('tick', function(nodes, edges) {\n var elapsed = Date.now() - startTime;\n if(!_chart.initialOnly())\n populate_cola(nodes, edges);\n if(_chart.showLayoutSteps())\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter);\n if(_needsRedraw || _chart.timeLimit() && elapsed > _chart.timeLimit()) {\n console.log('cancelled');\n _chart.layoutEngine().stop();\n }\n })\n .on('end', function(nodes, edges) {\n if(!_chart.showLayoutSteps()) {\n if(!_chart.initialOnly())\n populate_cola(nodes, edges);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter);\n }\n else layout_done(true);\n var do_zoom;\n switch(_chart.autoZoom()) {\n case 'always':\n do_zoom = true;\n break;\n case 'once':\n do_zoom = true;\n _chart.autoZoom(null);\n break;\n default:\n do_zoom = false;\n }\n calc_bounds(node, edge);\n if(do_zoom)\n auto_zoom();\n })\n .on('start', function() {\n console.log('algo ' + _chart.layoutEngine().layoutAlgorithm() + ' started.');\n _dispatch.start();\n });\n\n if(_chart.initialOnly())\n _chart.layoutEngine().dispatch().end(wnodes, wedges);\n else {\n _dispatch.start(); // cola doesn't seem to fire this itself?\n _chart.layoutEngine().data(\n wnodes.map(function(v) { return v.cola; }),\n layout_edges.map(function(v) { return v.cola; }),\n constraints,\n {groupConnected: _chart.groupConnected()}\n );\n _chart.layoutEngine().start({\n initialUnconstrainedIterations: 10,\n initialUserConstraintIterations: 20,\n initialAllConstraintsIterations: 20\n });\n }\n return this;\n };\n\n function _refresh(node, edge) {\n edge\n .attr('stroke', _chart.edgeStroke.eval)\n .attr('stroke-width', _chart.edgeStrokeWidth.eval)\n .attr('marker-end', function(d) {\n var name = _chart.edgeArrowhead.eval(d),\n id = edgeArrow(d, 'head', name);\n return id ? 'url(#' + id + ')' : null;\n })\n .attr('marker-start', function(d) {\n var name = _chart.edgeArrowtail.eval(d),\n arrow_id = edgeArrow(d, 'tail', name);\n return name ? 'url(#' + arrow_id + ')' : null;\n })\n .each(function(e) {\n d3.selectAll('#' + _chart.arrowId(e, 'head') + ',#' + _chart.arrowId(e, 'tail'))\n .attr('fill', _chart.edgeStroke.eval(e));\n });\n\n _chart._updateNode(node);\n }\n\n _chart.refresh = function(node, edge, edgeHover, edgeLabels, textPaths) {\n node = node || _nodeLayer.selectAll('.node');\n edge = edge || _edgeLayer.selectAll('.edge');\n _refresh(node, edge);\n\n edgeHover = edgeHover || _edgeLayer.selectAll('.edge-hover');\n edgeLabels = edgeLabels || _edgeLayer.selectAll('.edge-label');\n textPaths = textPaths || _defs.selectAll('path.edge-label-path');\n var nullSel = d3.select(null); // no enters\n draw(node, nullSel, edge, nullSel, edgeHover, nullSel, edgeLabels, nullSel, textPaths, nullSel);\n };\n\n\n function layout_done(happens) {\n _dispatch.end(happens);\n _running = false;\n if(_needsRedraw) {\n _needsRedraw = false;\n window.setTimeout(function() {\n if(!_chart.isRunning()) // someone else may already have started\n _chart.redraw();\n }, 0);\n }\n }\n\n function calc_edge_path(d, age, sx, sy, tx, ty) {\n if(!d.ports[age]) {\n var source_padding = d.source.dcg_ry +\n _chart.nodeStrokeWidth.eval(d.source) / 2,\n target_padding = d.target.dcg_ry +\n _chart.nodeStrokeWidth.eval(d.target) / 2;\n d.ports[age] = new Array(d.ports.n);\n var reversedness = d.ports.rev[d.parallel];\n for(var p = 0; p < d.ports.n; ++p) {\n // alternate parallel edges over, then under\n var dir = (!!(p%2) === (sx < tx)) ? -1 : 1,\n port = Math.floor((p+1)/2),\n last = port ? d.ports[age][p > 2 ? p - 2 : 0].path : null;\n var path = draw_edge_to_shapes(_chart, d.source, d.target, sx, sy, tx, ty,\n last, dir, _chart.parallelEdgeOffset(),\n source_padding, target_padding\n );\n if(d.ports.rev[p] !== reversedness)\n path.points.reverse();\n var spos = path.points[0], tpos = path.points[path.points.length-1];\n var near = bezier_point(path.points, 0.75);\n d.ports[age][p] = {\n path: path,\n orient: Math.atan2(tpos.y - near.y, tpos.x - near.x) + 'rad'\n };\n }\n }\n return d.ports[age][d.parallel].path;\n }\n\n function calc_old_edge_path(d) {\n calc_edge_path(d, 'old', d.source.prevX || d.source.cola.x, d.source.prevY || d.source.cola.y,\n d.target.prevX || d.target.cola.x, d.target.prevY || d.target.cola.y);\n }\n\n function calc_new_edge_path(d) {\n var path = calc_edge_path(d, 'new', d.source.cola.x, d.source.cola.y, d.target.cola.x, d.target.cola.y);\n var spos = path.points[0], tpos = path.points[path.points.length-1];\n d.length = Math.hypot(tpos.x-spos.x, tpos.y-spos.y);\n }\n\n function render_edge_path(age) {\n return function(d) {\n var path = d.ports[age][d.parallel].path;\n return generate_path(path.points, path.bezDegree);\n };\n }\n\n function render_edge_label_path(age) {\n return function(d) {\n var path = d.ports[age][d.parallel].path;\n var points = d.target.cola.x < d.source.cola.x ?\n path.points.slice(0).reverse() : path.points;\n return generate_path(points, path.bezDegree);\n };\n }\n\n // wait on multiple transitions, adapted from\n // http://stackoverflow.com/questions/10692100/invoke-a-callback-at-the-end-of-a-transition\n function endall(transitions, callback) {\n if (transitions.every(function(transition) { return transition.size() === 0; }))\n callback();\n var n = 0;\n transitions.forEach(function(transition) {\n transition\n .each(function() { ++n; })\n .each('end.all', function() { if (!--n) callback(); });\n });\n }\n\n function node_bounds(n) {\n return {left: n.cola.x - n.dcg_rx, top: n.cola.y - n.dcg_ry,\n right: n.cola.x + n.dcg_rx, bottom: n.cola.y + n.dcg_ry};\n }\n\n function union_bounds(b1, b2) {\n return {\n left: Math.min(b1.left, b2.left),\n top: Math.min(b1.top, b2.top),\n right: Math.max(b1.right, b2.right),\n bottom: Math.max(b1.bottom, b2.bottom)\n };\n }\n\n function point_to_bounds(p) {\n return {\n left: p.x,\n top: p.y,\n right: p.x,\n bottom: p.y\n };\n }\n\n function edge_bounds(e) {\n // assumption: edge must have some points\n var points = e.ports.new[e.parallel].path.points;\n return points.map(point_to_bounds).reduce(union_bounds);\n }\n\n function debug_bounds(bounds) {\n var brect = _g.selectAll('rect.bounds').data([0]);\n brect.enter()\n .insert('rect', ':first-child').attr({\n class: 'bounds',\n fill: 'rgba(128,255,128,0.1)',\n stroke: '#000'\n });\n brect\n .attr({\n x: bounds.left,\n y: bounds.top,\n width: bounds.right - bounds.left,\n height: bounds.bottom - bounds.top\n });\n }\n\n var _bounds;\n function calc_bounds(node, edge) {\n if((_chart.fitStrategy() || _chart.restrictPan()) && node.size()) {\n // assumption: there can be no edges without nodes\n _bounds = node.data().map(node_bounds).reduce(union_bounds);\n _bounds = edge.data().map(edge_bounds).reduce(union_bounds, _bounds);\n }\n }\n\n function auto_zoom() {\n if(_chart.fitStrategy()) {\n if(!_bounds)\n return;\n var vwidth = _bounds.right - _bounds.left, vheight = _bounds.bottom - _bounds.top,\n swidth = _chart.width(), sheight = _chart.height(), viewBox;\n if(_chart.DEBUG_BOUNDS)\n debug_bounds(_bounds);\n var fitS = _chart.fitStrategy(), pAR, translate = [0,0], scale = 1,\n amv; // align margins vertically\n if(['default', 'vertical', 'horizontal'].indexOf(fitS) >= 0) {\n var sAR = sheight / swidth, vAR = vheight / vwidth,\n vrl = vAR 2)\n throw new Error(\"align_ expecting 0-2 sides, not \" + sides.length);\n var bounds = margined_bounds();\n translate = _zoom.translate();\n scale = _zoom.scale();\n sides.forEach(function(s) {\n switch(s) {\n case 'l':\n translate[0] = align_left(translate, bounds.left);\n break;\n case 't':\n translate[1] = align_top(translate, bounds.top);\n break;\n case 'r':\n translate[0] = align_right(translate, bounds.right);\n break;\n case 'b':\n translate[1] = align_bottom(translate, bounds.bottom);\n break;\n default:\n throw new Error(\"align_ expecting l t r or b, not '\" + s + \"'\");\n }\n });\n }\n else if(typeof fitS === 'function') {\n var fit = fitS(vwidth, vheight, swidth, sheight);\n pAR = fit.pAR;\n translate = fit.translate;\n scale = fit.scale;\n viewBox = fit.viewBox;\n }\n else if(typeof fitS === 'string')\n pAR = _chart.fitStrategy();\n else\n throw new Error('unknown fitStrategy type ' + typeof fitS);\n\n if(pAR !== undefined) {\n if(!viewBox)\n viewBox = [_bounds.left, _bounds.top, vwidth, vheight].join(' ');\n _svg.attr({\n viewBox: viewBox,\n preserveAspectRatio: pAR\n });\n }\n _zoom.translate(translate).scale(scale).event(_svg);\n }\n }\n\n function draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter) {\n console.assert(edge.data().every(has_source_and_target));\n\n var nodeEntered = {};\n nodeEnter\n .each(function(n) {\n nodeEntered[_chart.nodeKey.eval(n)] = true;\n })\n .attr('transform', function (d) {\n // start new nodes at their final position\n return 'translate(' + d.cola.x + ',' + d.cola.y + ')';\n });\n var ntrans = node\n .transition()\n .duration(transition_duration())\n .delay(function(n) {\n return transition_delay(nodeEntered[_chart.nodeKey.eval(n)]);\n })\n .attr('opacity', _chart.nodeOpacity.eval)\n .attr('transform', function (d) {\n return 'translate(' + d.cola.x + ',' + d.cola.y + ')';\n })\n .each('end.record', function(d) {\n d.prevX = d.cola.x;\n d.prevY = d.cola.y;\n });\n\n // reset edge ports\n edge.each(function(d) {\n d.ports.new = null;\n d.ports.old = null;\n });\n\n var edgeEntered = {};\n edgeEnter\n .each(function(e) {\n edgeEntered[_chart.edgeKey.eval(e)] = true;\n })\n .each(function(e) {\n // if staging transitions, just fade new edges in at new position\n // else start new edges at old positions of nodes, if any, else new positions\n var age;\n if(_chart.stageTransitions() === 'modins') {\n calc_new_edge_path(e);\n age = 'new';\n }\n else {\n calc_old_edge_path(e);\n age = 'old';\n }\n if(_chart.edgeArrowhead.eval(e))\n d3.select('#' + _chart.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.ports[age][e.parallel].orient;\n });\n })\n .attr('d', render_edge_path(_chart.stageTransitions() === 'modins' ? 'new' : 'old'));\n\n var etrans = edge.each(calc_new_edge_path)\n .each(function(e) {\n if(_chart.edgeArrowhead.eval(e)) {\n d3.select('#' + _chart.arrowId(e, 'head'))\n .transition().duration(transition_duration())\n .delay(transition_delay(false))\n .attr('orient', function() {\n return e.ports.new[e.parallel].orient;\n });\n }\n })\n .transition()\n .duration(transition_duration())\n .delay(function(e) {\n return transition_delay(edgeEntered[_chart.edgeKey.eval(e)]);\n })\n .attr('opacity', _chart.edgeOpacity.eval)\n .attr('d', function(e) {\n var when = _chart.stageTransitions() === 'insmod' &&\n edgeEntered[_chart.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_path(when)(e);\n });\n textPathsEnter\n .attr('d', render_edge_label_path(_chart.stageTransitions() === 'modins' ? 'new' : 'old'));\n var textTrans = textPaths.transition()\n .duration(transition_duration())\n .delay(function(e) {\n return transition_delay(edgeEntered[_chart.edgeKey.eval(e)]);\n })\n .attr('opacity', _chart.edgeOpacity.eval)\n .attr('d', function(e) {\n var when = _chart.stageTransitions() === 'insmod' &&\n edgeEntered[_chart.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_label_path(when)(e);\n });\n if(_chart.stageTransitions() === 'insmod') {\n // inserted edges transition twice in insmod mode\n if(transition_duration() >= 50) {\n etrans = etrans.transition()\n .duration(transition_duration())\n .attr('d', render_edge_path('new'));\n textTrans = textTrans.transition()\n .duration(transition_duration())\n .attr('d', render_edge_label_path('new'));\n } else {\n // if transitions are too short, we run into various problems,\n // from transitions not completing to objects not found\n // so don't try to chain in that case\n // this also helped once: d3.timer.flush();\n etrans\n .attr('d', render_edge_path('new'));\n textTrans\n .attr('d', render_edge_path('new'));\n }\n }\n\n // signal layout done when all transitions complete\n // because otherwise client might start another layout and lock the processor\n if(!_chart.showLayoutSteps())\n endall([ntrans, etrans, textTrans], function() { layout_done(true); });\n\n edgeHover.attr('d', render_edge_path('new'));\n }\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Erases any existing SVG elements and draws the diagram from scratch. `.render()`\n * must be called the first time, and `.redraw()` can be called after that.\n * @method render\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _chart.render = function () {\n if(!_chart.initLayoutOnRedraw())\n initLayout();\n _chart.resetSvg();\n _g = _svg.append('g');\n _edgeLayer = _g.append('g');\n _nodeLayer = _g.append('g');\n\n if(_chart.legend())\n _chart.legend().render();\n return _chart.redraw();\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Attaches an event handler to the diagram. The currently supported events are\n * * `start()` - layout is starting\n * * `drawn(nodes, edges)` - the node and edge elements have been rendered to the screen\n * and can be modified through the passed d3 selections.\n * * `end()` - diagram layout has completed.\n * @method on\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [event] - the event to subscribe to\n * @param {Function} [f] - the event handler\n * @return {dc_graph.diagram}\n **/\n _chart.on = function(event, f) {\n _dispatch.on(event, f);\n return this;\n };\n\n /**\n * Returns an object with current statistics on graph layout.\n * * `nnodes` - number of nodes displayed\n * * `nedges` - number of edges displayed\n * @method getStats\n * @memberof dc_graph.diagram\n * @instance\n * @return {}\n * @return {dc_graph.diagram}\n **/\n _chart.getStats = function() {\n return _stats;\n };\n\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Execute a d3 single selection in the diagram's scope using the given selector\n * and return the d3 selection. Roughly the same as\n * ```js\n * d3.select('#diagram-id').select(selector)\n * ```\n * Since this function returns a d3 selection, it is not chainable. (However, d3 selection\n * calls can be chained after it.)\n * @method select\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [selector]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n **/\n _chart.select = function (s) {\n return _chart.root().select(s);\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Selects all elements that match the d3 single selector in the diagram's scope,\n * and return the d3 selection. Roughly the same as\n\n * ```js\n * d3.select('#diagram-id').selectAll(selector)\n * ```\n\n * Since this function returns a d3 selection, it is not chainable. (However, d3 selection\n * calls can be chained after it.)\n * @method selectAll\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [selector]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n **/\n _chart.selectAll = function (s) {\n return _chart.root() ? _chart.root().selectAll(s) : null;\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Returns the top svg element for this specific chart. You can also pass in a new\n * svg element, but setting the svg element on a diagram may have unexpected consequences.\n * @method svg\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.selection} [selection]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n\n **/\n _chart.svg = function (_) {\n if (!arguments.length) {\n return _svg;\n }\n _svg = _;\n return _chart;\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Remove the diagram's SVG elements from the dom and recreate the container SVG\n * element.\n * @method resetSvg\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _chart.resetSvg = function () {\n _chart.select('svg').remove();\n return generateSvg();\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Causes all charts in the chart group to be redrawn.\n * @method redrawGroup\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _chart.redrawGroup = function () {\n dc.redrawAll(chartGroup);\n };\n\n /**\n * Standard dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n * method. Causes all charts in the chart group to be rendered.\n * @method renderGroup\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _chart.renderGroup = function () {\n dc.renderAll(chartGroup);\n };\n\n /**\n * Creates an svg marker definition for drawing edge arrow tails or heads. The `viewBox` of\n * the marker is `0 -5 10 10`, so the arrow should be drawn from (0, -5) to (10, 5); it\n * will be moved and sized based on the other parameters, and rotated based on the\n * orientation of the edge.\n\n * (If further customization is required, it is possible to append other `svg:defs` to\n * `chart.svg()` and use refer to them by `id`.)\n * @method defineArrow\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} name - the identifier to give the marker, to be used with\n * {@link #dc_graph.diagram+edgeArrowhead edgeArrowhead} or\n * {@link #dc_graph.diagram+edgeArrowtail edgeArrowtail}\n * @param {Number} width - the width, in pixels, to draw the marker\n * @param {Number} height - the height, in pixels, to draw the marker\n * @param {Number} refX - the X reference position, in marker coordinates, which will be\n * aligned to the endpoint of the edge\n * @param {Number} refY - the Y reference position\n * @param {Function} drawf - a function to draw the marker using d3 SVG primitives, which\n * takes the marker object as its parameter.\n * @example\n * // the built-in `vee` arrow is defined like so:\n * _chart.defineArrow('vee', 12, 12, 10, 0, function(marker) {\n * marker.append('svg:path')\n * .attr('d', 'M0,-5 L10,0 L0,5 L3,0')\n * .attr('stroke-width', '0px');\n * });\n * @return {dc_graph.diagram}\n **/\n _chart.defineArrow = function(name, width, height, refX, refY, drawf) {\n _arrows[name] = {\n name: name,\n width: width,\n height: height,\n refX: refX,\n refY: refY,\n drawFunction: drawf\n };\n return _chart;\n };\n\n _chart.addOrRemoveDef = function(id, whether, tag) {\n var data = whether ? [0] : [];\n var sel = _defs.selectAll('#' + id).data(data);\n\n var selEnter = sel\n .enter().append(tag)\n .attr('id', id);\n sel.exit().remove();\n return selEnter;\n };\n\n function edgeArrow(d, kind, name) {\n var id = _chart.arrowId(d, kind),\n markerEnter = _chart.addOrRemoveDef(id, !!name, 'svg:marker');\n\n if(name) {\n markerEnter\n .attr('viewBox', '0 -5 10 10')\n .attr('refX', _arrows[name].refX)\n .attr('refY', _arrows[name].refY)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', _arrows[name].width*_chart.edgeArrowSize.eval(d))\n .attr('markerHeight', _arrows[name].height*_chart.edgeArrowSize.eval(d))\n .attr('stroke', _chart.edgeStroke.eval(d))\n .attr('fill', _chart.edgeStroke.eval(d))\n .call(_arrows[name].drawFunction);\n }\n return name ? id : null;\n }\n\n function globalTransform(pos, scale) {\n _translate = pos;\n _scale = scale;\n _g.attr('transform', 'translate(' + pos + ')' + ' scale(' + scale + ')');\n }\n\n function margined_bounds() {\n return {\n left: _bounds.left - _chart.margins().left,\n top: _bounds.top - _chart.margins().top,\n right: _bounds.right + _chart.margins().right,\n bottom: _bounds.bottom + _chart.margins().bottom\n };\n }\n\n // with thanks to comments in https://github.com/d3/d3/issues/1084\n function align_left(translate, x) {\n return translate[0] - _xScale(x) + _xScale.range()[0];\n }\n function align_top(translate, y) {\n return translate[1] - _yScale(y) + _yScale.range()[0];\n }\n function align_right(translate, x) {\n return translate[0] - _xScale(x) + _xScale.range()[1];\n }\n function align_bottom(translate, y) {\n return translate[1] - _yScale(y) + _yScale.range()[1];;\n }\n\n function doZoom() {\n var translate = d3.event.translate;\n if(_chart.restrictPan()) {\n var xDomain = _xScale.domain(), yDomain = _yScale.domain();\n var bounds = margined_bounds();\n var less1 = bounds.left < xDomain[0], less2 = bounds.right < xDomain[1],\n lessExt = (bounds.right - bounds.left) < (xDomain[1] - xDomain[0]);\n var align, nothing = 0;\n if(less1 && less2)\n if(lessExt)\n align = 'left';\n else\n align = 'right';\n else if(!less1 && !less2)\n if(lessExt)\n align = 'right';\n else\n align = 'left';\n switch(align) {\n case 'left':\n translate[0] = align_left(translate, bounds.left);\n break;\n case 'right':\n translate[0] = align_right(translate, bounds.right);\n break;\n default:\n ++nothing;\n }\n less1 = bounds.top < yDomain[0]; less2 = bounds.bottom < yDomain[1];\n lessExt = (bounds.bottom - bounds.top) < (yDomain[1] - yDomain[0]);\n if(less1 && less2)\n if(lessExt)\n align = 'top';\n else\n align = 'bottom';\n else if(!less1 && !less2)\n if(lessExt)\n align = 'bottom';\n else\n align = 'top';\n switch(align) {\n case 'top':\n translate[1] = align_top(translate, bounds.top);\n break;\n case 'bottom':\n translate[1] = align_bottom(translate, bounds.bottom);\n break;\n default:\n ++nothing;\n }\n\n if(nothing<2)\n _zoom.translate(translate);\n }\n globalTransform(translate, d3.event.scale);\n }\n\n function resizeSvg(w, h) {\n if(_svg) {\n _svg.attr('width', w || _chart.width())\n .attr('height', h || _chart.height());\n }\n }\n\n function generateSvg() {\n _svg = _chart.root().append('svg');\n resizeSvg();\n\n _defs = _svg.append('svg:defs');\n\n if(_chart.mouseZoomable()) {\n // start out with 1:1 zoom\n _xScale = d3.scale.linear()\n .domain([0, _chart.width()])\n .range([0, _chart.width()]);\n _yScale = d3.scale.linear()\n .domain([0, _chart.height()])\n .range([0, _chart.height()]);\n _zoom = d3.behavior.zoom()\n .on('zoom', doZoom)\n .x(_xScale).y(_yScale);\n _svg.call(_zoom);\n _svg.on('dblclick.zoom', null);\n }\n\n return _svg;\n }\n\n _chart.invertCoord = function(clientCoord) {\n return [\n _xScale.invert(clientCoord[0]),\n _yScale.invert(clientCoord[1])\n ];\n };\n\n _chart.defineArrow('vee', 12, 12, 10, 0, function(marker) {\n marker.append('svg:path')\n .attr('d', 'M0,-5 L10,0 L0,5 L3,0')\n .attr('stroke-width', '0px');\n });\n _chart.defineArrow('dot', 7, 7, 0, 0, function(marker) {\n marker.append('svg:circle')\n .attr('r', 5)\n .attr('cx', 5)\n .attr('cy', 0)\n .attr('stroke-width', '0px');\n });\n\n /**\n * Set the root SVGElement to either be any valid [d3 single\n * selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying a dom\n * block element such as a div; or a dom element or d3 selection. This class is called\n * internally on chart initialization, but be called again to relocate the chart. However, it\n * will orphan any previously created SVGElements.\n * @method anchor\n * @memberof dc_graph.diagram\n * @instance\n * @param {anchorSelector|anchorNode|d3.selection} [parent]\n * @param {String} [chartGroup]\n * @return {String|node|d3.selection}\n * @return {dc_graph.diagram}\n */\n _chart.anchor = function(parent, chartGroup) {\n if (!arguments.length) {\n return _anchor;\n }\n if (parent) {\n if (parent.select && parent.classed) { // detect d3 selection\n _anchor = parent.node();\n } else {\n _anchor = parent;\n }\n _chart.root(d3.select(_anchor));\n _chart.root().classed(dc_graph.constants.CHART_CLASS, true);\n dc.registerChart(_chart, chartGroup);\n } else {\n throw new dc.errors.BadArgumentException('parent must be defined');\n }\n _chartGroup = chartGroup;\n return _chart;\n };\n\n /**\n * Returns the DOM id for the chart's anchored location.\n * @method anchorName\n * @memberof dc_graph.diagram\n * @instance\n * @return {String}\n */\n _chart.anchorName = function () {\n var a = _chart.anchor();\n if (a && a.id) {\n return a.id;\n }\n if (a && a.replace) {\n return a.replace('#', '');\n }\n return 'dc-graph' + _chart.chartID();\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","var _workers = {};\nfunction create_worker(layoutAlgorithm) {\n if(!_workers[layoutAlgorithm]) {\n var worker = _workers[layoutAlgorithm] = {\n worker: new Worker(script_path() + 'dc.graph.' + layoutAlgorithm + '.worker.js'),\n layouts: {}\n };\n worker.worker.onmessage = function(e) {\n var layoutId = e.data.layoutId;\n if(!worker.layouts[layoutId])\n throw new Error('layoutId \"' + layoutId + '\" unknown!');\n worker.layouts[layoutId].dispatch()[e.data.response].apply(null, e.data.args);\n };\n }\n return _workers[layoutAlgorithm];\n}\n\ndc_graph.webworker_layout = function(layoutEngine) {\n var _tick, _done, _dispatch = d3.dispatch('init', 'start', 'tick', 'end');\n var _worker = create_worker(layoutEngine.layoutAlgorithm());\n var engine = {};\n _worker.layouts[layoutEngine.layoutId()] = engine;\n\n engine.parent = function(parent) {\n if(layoutEngine.parent)\n layoutEngine.parent(parent);\n };\n engine.init = function(options) {\n options = layoutEngine.optionNames().reduce(\n function(options, option) {\n options[option] = layoutEngine[option]();\n return options;\n }, options);\n _worker.worker.postMessage({\n command: 'init',\n args: {\n layoutId: layoutEngine.layoutId(),\n options: options\n }\n });\n return this;\n };\n engine.data = function(nodes, edges, constraints, options) {\n _worker.worker.postMessage({\n command: 'data',\n args: {\n layoutId: layoutEngine.layoutId(),\n nodes: nodes,\n edges: edges,\n constraints: constraints,\n options: options\n }\n });\n };\n engine.start = function(options) {\n _worker.worker.postMessage({\n command: 'start',\n args: {\n layoutId: layoutEngine.layoutId(),\n options: options\n }\n });\n };\n engine.stop = function() {\n _worker.worker.postMessage({\n command: 'stop',\n args: {\n layoutId: layoutEngine.layoutId()\n }\n });\n return this;\n };\n // stopgap while layout options are still on diagram\n engine.getEngine = function() {\n return layoutEngine;\n };\n // somewhat sketchy - do we want this object to be transparent or not?\n var passthroughs = ['layoutAlgorithm', 'populateLayoutNode', 'populateLayoutEdge', 'rankdir', 'ranksep'];\n passthroughs.forEach(function(name) {\n engine[name] = function() {\n var ret = layoutEngine[name].apply(layoutEngine, arguments);\n return arguments.length ? this : ret;\n };\n });\n engine.on = function(event, f) {\n _dispatch.on(event, f);\n return this;\n };\n engine.dispatch = function() {\n return _dispatch;\n };\n return engine;\n};\n","/**\n * `dc_graph.graphviz_attrs defines a basic set of attributes which layout engines should\n * implement - although these are not // required, they make it easier for clients and\n * behaviors (like expand_collapse) to work with // multiple layout engines // these\n * attributes are {@link http://www.graphviz.org/doc/info/attrs.html from graphviz}\n * @class graphviz_attrs\n * @memberof dc_graph\n * @return {Object}\n **/\ndc_graph.graphviz_attrs = function() {\n return {\n /**\n * Direction to draw ranks.\n * @method rankdir\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [rankdir='TB'] 'TB', 'LR', 'BT', or 'RL'\n **/\n rankdir: property('TB'),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instnace\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.cola_layout` is an adaptor for cola.js layouts in dc.graph.js\n * @class cola_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.cola_layout}\n **/\ndc_graph.cola_layout = function(id) {\n var _layoutId = id || uuid();\n var _d3cola = null;\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n var _flowLayout;\n // node and edge objects shared with cola.js, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n\n function init(options) {\n // width, height, handleDisconnected, lengthStrategy, baseLength, flowLayout, tickSize\n _d3cola = cola.d3adaptor()\n .avoidOverlaps(true)\n .size([options.width, options.height])\n .handleDisconnected(options.handleDisconnected);\n if(_d3cola.tickSize) // non-standard\n _d3cola.tickSize(options.tickSize);\n\n switch(options.lengthStrategy) {\n case 'symmetric':\n _d3cola.symmetricDiffLinkLengths(options.baseLength);\n break;\n case 'jaccard':\n _d3cola.jaccardLinkLengths(options.baseLength);\n break;\n case 'individual':\n _d3cola.linkDistance(function(e) {\n return e.dcg_edgeLength || options.baseLength;\n });\n break;\n case 'none':\n default:\n }\n if(options.flowLayout) {\n _d3cola.flowLayout(options.flowLayout.axis, options.flowLayout.minSeparation);\n }\n }\n\n function data(nodes, edges, constraints, options) {\n var wnodes = regenerate_objects(_nodes, nodes, function(v) {\n return v.dcg_nodeKey;\n }, function(v1, v) {\n v1.dcg_nodeKey = v.dcg_nodeKey;\n v1.width = v.width;\n v1.height = v.height;\n v1.fixed = !!v.dgc_nodeFixed;\n\n if(typeof v.dgc_nodeFixed === 'object') {\n v1.x = v.dgc_nodeFixed.x;\n v1.y = v.dgc_nodeFixed.y;\n }\n else {\n // should we support e.g. null to unset x,y?\n if(v.x !== undefined)\n v1.x = v.x;\n if(v.y !== undefined)\n v1.y = v.y;\n }\n });\n var wedges = regenerate_objects(_edges, edges, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n // cola edges can work with indices or with object references\n // but it will replace indices with object references\n e1.source = _nodes[e.dcg_edgeSource];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n // cola needs each node object to have an index property\n wnodes.forEach(function(v, i) {\n v.index = i;\n });\n\n var groups = null;\n if(options.groupConnected) {\n var components = cola.separateGraphs(wnodes, wedges);\n groups = components.map(function(g) {\n return {leaves: g.array.map(function(n) { return n.index; })};\n });\n }\n\n function dispatchState(event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n _d3cola.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\n });\n _d3cola.nodes(wnodes)\n .links(wedges)\n .constraints(constraints)\n .groups(groups);\n }\n\n function start(options) {\n _d3cola.start(options.initialUnconstrainedIterations,\n options.initialUserConstraintIterations,\n options.initialAllConstraintsIterations,\n options.gridSnapIterations);\n }\n\n function stop() {\n _d3cola.stop();\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n graphviz.rankdir(null);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n parent: property(null),\n on: function(event, f) {\n _dispatch.on(event, f);\n return this;\n },\n init: function(options) {\n this.optionNames().forEach(function(option) {\n options[option] = options[option] || this[option]();\n }.bind(this));\n init(options);\n return this;\n },\n data: function(nodes, edges, constraints, options) {\n data(nodes, edges, constraints, options);\n },\n start: function(options) {\n start(options);\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize']\n .concat(graphviz_keys);\n },\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {},\n /**\n * Instructs cola.js to fit the connected components.\n * @method handleDisconnected\n * @memberof dc_graph.cola_layout\n * @instance\n * @param {Boolean} [handleDisconnected=true]\n * @return {Boolean}\n * @return {dc_graph.cola_layout}\n **/\n handleDisconnected: property(true),\n /**\n * Currently, three strategies are supported for specifying the lengths of edges:\n * * 'individual' - uses the `edgeLength` for each edge. If it returns falsy, uses the\n * `baseLength`\n * * 'symmetric', 'jaccard' - compute the edge length based on the graph structure around\n * the edge. See\n * {@link https://github.com/tgdwyer/WebCola/wiki/link-lengths the cola.js wiki}\n * for more details.\n * 'none' - no edge lengths will be specified\n * @method lengthStrategy\n * @memberof dc_graph.cola_layout\n * @instance\n * @param {Function|String} [lengthStrategy='symmetric']\n * @return {Function|String}\n * @return {dc_graph.cola_layout}\n **/\n lengthStrategy: property('symmetric'),\n /**\n * Gets or sets the default edge length (in pixels) when the `.lengthStrategy` is\n * 'individual', and the base value to be multiplied for 'symmetric' and 'jaccard' edge\n * lengths.\n * @method baseLength\n * @memberof dc_graph.cola_layout\n * @instance\n * @param {Number} [baseLength=30]\n * @return {Number}\n * @return {dc_graph.cola_layout}\n **/\n baseLength: property(30),\n /**\n * If `flowLayout` is set, it determines the axis and separation for\n * {@link http://marvl.infotech.monash.edu/webcola/doc/classes/cola.layout.html#flowlayout cola flow layout}.\n * If it is not set, `flowLayout` will be calculated from the {@link dc_graph.graphviz_attrs#rankdir rankdir}\n * and {@link dc_graph.graphviz_attrs#ranksep ranksep}; if `rankdir` is also null (the\n * default for cola layout), then there will be no flow.\n * @method flowLayout\n * @memberof dc_graph.cola_layout\n * @instance\n * @param {Object} [flowLayout=null]\n * @example\n * // No flow (default)\n * chart.flowLayout(null)\n * // flow in x with min separation 200\n * chart.flowLayout({axis: 'x', minSeparation: 200})\n **/\n flowLayout: function(flow) {\n if(!arguments.length) {\n if(_flowLayout)\n return _flowLayout;\n var dir = engine.rankdir();\n if(!dir)\n return null;\n var axis = (dir === 'LR' || dir === 'RL') ? 'x' : 'y';\n return {\n axis: axis,\n minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2\n };\n }\n _flowLayout = flow;\n return this;\n },\n tickSize: property(1)\n });\n return engine;\n};\n\ndc_graph.cola_layout.scripts = ['d3.js', 'cola.js'];\n","/**\n * `dc_graph.dagre_layout` is an adaptor for dagre.js layouts in dc.graph.js\n *\n * In addition to the below layout attributes, `dagre_layout` also implements the attributes from\n * {@link dc_graph.graphviz_attrs graphviz_attrs}\n * @class dagre_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.dagre_layout}\n **/\ndc_graph.dagre_layout = function(id) {\n var _layoutId = id || uuid();\n var _dagreGraph = null, _tick, _done;\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n\n function init(options) {\n // Create a new directed graph\n _dagreGraph = new dagre.graphlib.Graph({multigraph: true});\n\n // Set an object for the graph label\n _dagreGraph.setGraph({rankdir: options.rankdir});\n\n // Default to assigning a new object as a label for each new edge.\n _dagreGraph.setDefaultEdgeLabel(function() { return {}; });\n }\n\n function data(nodes, edges, constraints, options) {\n var wnodes = regenerate_objects(_nodes, nodes, function(v) {\n return v.dcg_nodeKey;\n }, function(v1, v) {\n v1.dcg_nodeKey = v.dcg_nodeKey;\n v1.width = v.width;\n v1.height = v.height;\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.dcg_edgeSource = e.dcg_edgeSource;\n e1.dcg_edgeTarget = e.dcg_edgeTarget;\n }, function(k, o, e) {\n _dagreGraph.setEdge(e.dcg_edgeSource, e.dcg_edgeTarget, o);\n }, function(k, e) {\n _dagreGraph.removeEdge(e.dcg_edgeSource, e.dcg_edgeTarget, e.dcg_edgeKey);\n });\n\n function dispatchState(event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n _tick = function() {\n dispatchState('tick');\n };\n _done = function() {\n dispatchState('end');\n };\n }\n\n function start(options) {\n _dispatch.start();\n dagre.layout(_dagreGraph);\n _done();\n }\n\n function stop() {\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n return Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'dagre';\n },\n layoutId: function() {\n return _layoutId;\n },\n on: function(event, f) {\n _dispatch.on(event, f);\n return this;\n },\n init: function(options) {\n this.optionNames().forEach(function(option) {\n options[option] = options[option] || this[option]();\n }.bind(this));\n init(options);\n return this;\n },\n data: function(nodes, edges, constraints, options) {\n data(nodes, edges, constraints, options);\n },\n start: function(options) {\n start(options);\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return graphviz_keys;\n },\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n}\n\ndc_graph.dagre_layout.scripts = ['d3.js', 'dagre.js'];\n","/**\n * `dc_graph.tree_layout` is a very simple and not very bright tree layout. It can draw any DAG, but\n * tries to position the nodes as a tree.\n * @class tree_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.tree_layout}\n **/\ndc_graph.tree_layout = function(id) {\n var _layoutId = id || uuid();\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n var _dfs;\n\n function init(options) {\n var x;\n var nodeWidth = d3.functor(options.nodeWidth);\n function best_dist(left, right) {\n return (nodeWidth(left) + nodeWidth(right)) / 2;\n }\n _dfs = dc_graph.depth_first_traversal({\n nodeid: function(n) {\n return n.dcg_nodeKey;\n },\n sourceid: function(n) {\n return n.dcg_edgeSource;\n },\n targetid: function(n) {\n return n.dcg_edgeTarget;\n },\n init: function() {\n x = options.offsetX;\n },\n row: function(n) {\n return n.dcg_rank;\n },\n place: function(n, r, row) {\n if(row.length) {\n var left = row[row.length-1];\n var g = (nodeWidth(left) + nodeWidth(n)) / 2;\n x = Math.max(x, left.left_x + g);\n }\n n.left_x = x;\n n.hit_ins = 1;\n n.y = r*options.gapY + options.offsetY;\n },\n sib: function(isroot, left, right) {\n var g = best_dist(left, right);\n if(isroot) g = g*1.5;\n x += g;\n },\n pop: function(n) {\n n.x = (n.left_x + x)/2;\n },\n skip: function(n, indegree) {\n // rolling average of in-neighbor x positions\n n.x = (n.hit_ins*n.x + x)/++n.hit_ins;\n if(n.hit_ins === indegree)\n delete n.hit_ins;\n },\n finish: function(rows) {\n // this is disgusting. patch up any places where nodes overlap by scanning\n // right far enough to find the space, then fill from left to right at the\n // minimum gap\n rows.forEach(function(row) {\n var sort = row.sort(function(a, b) { return a.x - b.x; });\n var badi = null, badl = null, want;\n for(var i=0; i0)\n --badi; // might want to use more left\n var l, limit;\n if(i < sort.length - 2) { // found space before right\n var extra = right.x - (badl + want);\n l = sort[badi].x + extra/2;\n limit = i+1;\n } else {\n l = Math.max(sort[badi].x, badl - best_dist(sort[badi], sort[badi+1]) - (want - right.x + badl)/2);\n limit = sort.length;\n }\n for(var j = badi+1; j\n *
  • To generate additional constraints on edges besides the built-in ones, create a rules\n * between two different types. The rule will apply to any edges in the layout which match the\n * source and target types, and generate simple \"left/right\" constraints. (Note that \"left\" and\n * \"right\" in this context refer to sides of an inequality constraint `left + gap <= right`)\n *
  • To generate constraints on a set of nodes, such as alignment, ordering, or circle\n * constraints, create a rule from a type to itself, a self edge.\n * \n * (It is also conceivable to want constraints between individual nodes which don't\n * have edges between them. This is not directly supported at this time; right now the workaround\n * is to create the edge but not draw it, e.g. by setting its {@link #dc_graph.diagram+edgeOpacity}\n * to zero. If you have a use-case for this, please\n * {@link https://github.com/dc-js/dc.graph.js/issues/new file an issue}.\n *\n * The pattern syntax is an embedded domain specific language designed to be terse without\n * restricting its power. As such, there are complicated rules for defaulting and inferring\n * parameters from other parameters. Since most users will want the simplest form, this document\n * will start from the highest level and then show how to use more complicated forms in order to\n * gain more control.\n *\n * Then we'll build back up from the ground up and show how inference works.\n * @class constraint_pattern\n * @memberof dc_graph\n * @param {dc_graph.diagram} diagram - the diagram to pull attributes from, mostly to determine\n * the keys of nodes and edge sources and targets\n * @param {Object} pattern - a graph which defines the constraints to be generated\n * @return {Function}\n */\ndc_graph.constraint_pattern = function(pattern) {\n var types = {}, rules = [];\n\n pattern.nodes.forEach(function(n) {\n var id = n.id;\n var type = types[id] || (types[id] = {});\n // partitions could be done more efficiently; this is POC\n if(n.partition) {\n var partition = n.partition;\n var value = n.value || n.id;\n if(n.all || n.typename) {\n type.match = n.extract ?\n function(n2) { return n.extract(n2.value[partition]); } :\n function(n2) { return n2.value[partition]; };\n type.typename = n.typename || function(n2) { return partition + '=' + n2.value[partition]; };\n }\n else\n type.match = function(n2) { return n2.value[partition] === value; };\n }\n else if(n.match)\n type.match = n.match;\n else throw new Error(\"couldn't determine matcher for type \" + JSON.stringify(n));\n });\n pattern.edges.forEach(function(e) {\n if(e.disable)\n return;\n var rule = {source: e.source, target: e.target};\n rule.produce = typeof e.produce === 'function' ? e.produce : function() {\n return clone(e.produce);\n };\n ['listname', 'wrap', 'reverse'].forEach(function(k) {\n if(e[k] !== undefined) rule[k] = e[k];\n });\n rules.push(rule);\n });\n\n return function(diagram, nodes, edges) {\n var constraints = [];\n var members = {};\n nodes.forEach(function(n) {\n var key = diagram.nodeKey.eval(n);\n for(var t in types) {\n var type = types[t], value = type.match(n.orig);\n if(value) {\n var tname = type.typename ? type.typename(t, value) : t;\n if(!members[tname])\n members[tname] = {\n nodes: [], // original ordering\n whether: {} // boolean\n };\n members[tname].nodes.push(key);\n members[tname].whether[key] = true;\n }\n }\n });\n // traversal of rules could be more efficient, again POC\n var edge_rules = rules.filter(function(r) {\n return r.source !== r.target;\n });\n var type_rules = rules.filter(function(r) {\n return r.source === r.target;\n });\n edges.forEach(function(e) {\n var source = diagram.edgeSource.eval(e),\n target = diagram.edgeTarget.eval(e);\n edge_rules.forEach(function(r) {\n if(members[r.source] && members[r.source].whether[source] &&\n members[r.target] && members[r.target].whether[target]) {\n var constraint = r.produce(members, nodes, edges);\n if(r.reverse) {\n constraint.left = target;\n constraint.right = source;\n }\n else {\n constraint.left = source;\n constraint.right = target;\n }\n constraints.push(constraint);\n }\n });\n });\n type_rules.forEach(function(r) {\n if(!members[r.source])\n return;\n var constraint = r.produce(),\n listname = r.listname || r.produce.listname || 'nodes',\n wrap = r.wrap || r.produce.wrap || function(x) { return x; };\n constraint[listname] = members[r.source].nodes.map(wrap);\n constraints.push(constraint);\n });\n return constraints;\n };\n};\n\n// constraint generation convenience functions\ndc_graph.gap_y = function(gap, equality) {\n return {\n axis: 'y',\n gap: gap,\n equality: !!equality\n };\n};\ndc_graph.gap_x = function(gap, equality) {\n return {\n axis: 'x',\n gap: gap,\n equality: !!equality\n };\n};\n\nfunction align_f(axis) {\n var ret = function() {\n return {\n type: 'alignment',\n axis: axis\n };\n };\n ret.listname = 'offsets';\n ret.wrap = function(x) { return {node: x, offset: 0}; };\n return ret;\n}\n\ndc_graph.align_y = function() {\n return align_f('y');\n};\ndc_graph.align_x = function() {\n return align_f('x');\n};\n\ndc_graph.order_x = function(gap, ordering) {\n return {\n type: 'ordering',\n axis: 'x',\n gap: 60,\n ordering: ordering\n };\n};\ndc_graph.order_y = function(gap, ordering) {\n return {\n type: 'ordering',\n axis: 'y',\n gap: 60,\n ordering: ordering\n };\n};\n","// this naive tree-drawer is paraphrased from memory from dot\ndc_graph.tree_positions = function(rootf, rowf, treef, ofsx, ofsy, nwidth, ygap) {\n console.warn('dc_graph.tree_positions is deprecated; use the layout engine tree_layout instead');\n if(rootf || treef) {\n console.warn('dc_graph.tree_positions: rootf and treef are ignored');\n }\n var x;\n nwidth = d3.functor(nwidth);\n function best_dist(left, right) {\n return (nwidth(left) + nwidth(right)) / 2;\n }\n var dfs = dc_graph.depth_first_traversal({\n nodeid: function(n) {\n return n.cola.dcg_nodeKey;\n },\n sourceid: function(n) {\n return n.cola.dcg_edgeSource;\n },\n targetid: function(n) {\n return n.cola.dcg_edgeTarget;\n },\n init: function() {\n x = ofsx;\n },\n row: function(n) {\n return rowf(n.orig);\n },\n place: function(n, r, row) {\n if(row.length) {\n var left = row[row.length-1];\n var g = (nwidth(left) + nwidth(n)) / 2;\n x = Math.max(x, left.left_x + g);\n }\n n.left_x = x;\n n.hit_ins = 1;\n n.cola.y = r*ygap + ofsy;\n },\n sib: function(isroot, left, right) {\n var g = best_dist(left, right);\n if(isroot) g = g*1.5;\n x += g;\n },\n pop: function(n) {\n n.cola.x = (n.left_x + x)/2;\n },\n skip: function(n, indegree) {\n // rolling average of in-neighbor x positions\n n.cola.x = (n.hit_ins*n.cola.x + x)/++n.hit_ins;\n if(n.hit_ins === indegree)\n delete n.hit_ins;\n },\n finish: function(rows) {\n // this is disgusting. patch up any places where nodes overlap by scanning\n // right far enough to find the space, then fill from left to right at the\n // minimum gap\n rows.forEach(function(row) {\n var sort = row.sort(function(a, b) { return a.cola.x - b.cola.x; });\n var badi = null, badl = null, want;\n for(var i=0; i0)\n --badi; // might want to use more left\n var l, limit;\n if(i < sort.length - 2) { // found space before right\n var extra = right.cola.x - (badl + want);\n l = sort[badi].cola.x + extra/2;\n limit = i+1;\n } else {\n l = Math.max(sort[badi].cola.x, badl - best_dist(sort[badi], sort[badi+1]) - (want - right.cola.x + badl)/2);\n limit = sort.length;\n }\n for(var j = badi+1; j\" + d + \"\"; })\n .direction(_tip.direction());\n _tip.parent().svg().call(_d3tip);\n }\n node\n .on('mouseover.tip', fetch_and_show_content('content'))\n .on('mouseout.tip', hide_tip);\n ehover\n .on('mouseover.tip', fetch_and_show_content('content'))\n .on('mouseout.tip', hide_tip);\n }\n\n /**\n * Specify the direction for tooltips. Currently supports the\n * [cardinal and intercardinaldirections](https://en.wikipedia.org/wiki/Points_of_the_compass) supported by\n * [d3.tip.direction](https://github.com/Caged/d3-tip/blob/master/docs/positioning-tooltips.md#tipdirection):\n * `'n'`, `'ne'`, `'e'`, etc.\n * @name direction\n * @memberof dc_graph.tip\n * @instance\n * @param {String} [direction='n']\n * @return {String}\n * @return {dc_graph.tip}\n * @example\n * // show all the attributes and values in the node and edge objects\n * var tip = dc_graph.tip();\n * tip.content(tip.table());\n **/\n _tip.direction = property('n');\n\n /**\n * Specifies the function to generate content for the tooltip. This function has the\n * signature `function(d, k)`, where `d` is the datum of the node being hovered over,\n * and `k` is a continuation. The function should fetch the content, asynchronously if\n * needed, and then pass html forward to `k`.\n * @name content\n * @memberof dc_graph.tip\n * @instance\n * @param {Function} [content]\n * @return {Function}\n * @example\n * // Default behavior: show title\n * var tip = dc_graph.tip().content(function(d, k) {\n * k(_tip.parent() ? _tip.parent().nodeTitle.eval(d) : '');\n * });\n **/\n _tip.content = property(function(d, k) {\n k(_tip.parent() ? _tip.parent().nodeTitle.eval(d) : '');\n });\n\n _tip.delay = property(0);\n\n return _tip;\n};\n\n/**\n * Generates a handler which can be passed to `tip.content` to produce a table of the\n * attributes and values of the hovered object.\n *\n * Note: this interface is not great and is subject to change in the near term.\n * @name table\n * @memberof dc_graph.tip\n * @instance\n * @return {Function}\n * @example\n * // show all the attributes and values in the node and edge objects\n * var tip = dc_graph.tip();\n * tip.content(tip.table());\n **/\ndc_graph.tip.table = function() {\n var gen = function(d, k) {\n d = d.orig.value;\n var keys = Object.keys(d).filter(d3.functor(gen.filter()))\n .filter(function(k) {\n return d[k];\n });\n var table = d3.select(document.createElement('table'));\n var rows = table.selectAll('tr').data(keys);\n var rowsEnter = rows.enter().append('tr');\n rowsEnter.append('td').text(function(k) { return k; });\n rowsEnter.append('td').text(function(k) { return d[k]; });\n k(table.node().outerHTML); // optimizing for clarity over speed (?)\n };\n gen.filter = property(true);\n return gen;\n};\n","// this currently only supports single selection with a click\n// but it can be expanded with modifier-key clicks and rectangular selection etc.\ndc_graph.select_nodes = function(props) {\n var select_nodes_group = dc_graph.select_nodes_group('select-nodes-group');\n var _selected = [];\n\n function add_behavior(chart, node, edge) {\n chart.cascade(50, true, conditional_properties(function(n) {\n return _selected.indexOf(n.orig.key) >= 0;\n }, null, props));\n node.on('click.select-nodes', function(d) {\n _selected = [chart.nodeKey.eval(d)];\n chart.refresh(node, edge);\n select_nodes_group.node_set_changed(_selected);\n d3.event.stopPropagation();\n });\n chart.svg().on('click.select-nodes', function(d) {\n _selected = [];\n chart.refresh(node, edge);\n select_nodes_group.node_set_changed(_selected);\n });\n // drop any selected which no longer exist in the diagram\n var present = node.data().map(function(d) { return d.orig.key; });\n var nselect = _selected.length;\n _selected = _selected.filter(function(k) { return present.indexOf(k) >= 0; });\n if(_selected.length !== nselect)\n select_nodes_group.node_set_changed(_selected);\n }\n\n function remove_behavior(chart, node, edge) {\n node.on('click.select-nodes', null);\n chart.svg().on('click.select-nodes', null);\n chart.cascade(50, false, props);\n }\n\n return dc_graph.behavior('select-nodes', {\n add_behavior: add_behavior,\n remove_behavior: function(chart, node, edge) {\n remove_behavior(chart, node, edge);\n }\n });\n};\n\ndc_graph.select_nodes_group = function(brushgroup) {\n window.chart_registry.create_type('select-nodes', function() {\n return d3.dispatch('node_set_changed');\n });\n\n return window.chart_registry.create_group('select-nodes', brushgroup);\n};\n","dc_graph.highlight_neighbors = function(props) {\n function clear_all_highlights(edge) {\n edge.each(function(e) {\n e.dcg_highlighted = false;\n });\n }\n\n function add_behavior(chart, node, edge) {\n chart.cascade(100, true, conditional_properties(null, function(e) {\n return e.dcg_highlighted;\n }, props));\n node\n .on('mouseover.highlight-neighbors', function(d) {\n edge.each(function(e) {\n e.dcg_highlighted = e.source === d || e.target === d;\n });\n chart.refresh(node, edge);\n })\n .on('mouseout.highlight-neighbors', function(d) {\n clear_all_highlights(edge);\n chart.refresh(node, edge);\n });\n }\n\n function remove_behavior(chart, node, edge) {\n node\n .on('mouseover.highlight-neighbors', null)\n .on('mouseout.highlight-neighbors', null);\n clear_all_highlights(edge);\n chart.cascade(100, false, props);\n }\n\n return dc_graph.behavior('highlight-neighbors', {\n add_behavior: add_behavior,\n remove_behavior: function(chart, node, edge) {\n remove_behavior(chart, node, edge);\n }\n });\n};\n\n","dc_graph.register_highlight_paths_group = function(pathsgroup) {\n window.chart_registry.create_type('highlight-paths', function() {\n return d3.dispatch('paths_changed', 'hover_changed', 'select_changed');\n });\n\n return window.chart_registry.create_group('highlight-paths', pathsgroup);\n};\n","dc_graph.highlight_paths = function(pathprops, hoverprops, selectprops, pathsgroup) {\n var highlight_paths_group = dc_graph.register_highlight_paths_group(pathsgroup || 'highlight-paths-group');\n pathprops = pathprops || {};\n hoverprops = hoverprops || {};\n selectprops = selectprops || {};\n var node_on_paths = {}, edge_on_paths = {}, selected = null, hoverpaths = null;\n\n function refresh() {\n if(_behavior.doRedraw())\n _behavior.parent().relayout().redraw();\n else\n _behavior.parent().refresh();\n }\n\n function paths_changed(nop, eop) {\n node_on_paths = nop;\n edge_on_paths = eop;\n selected = hoverpaths = null;\n refresh();\n }\n\n function hover_changed(hp) {\n if(hp !== hoverpaths) {\n hoverpaths = hp;\n refresh();\n }\n }\n\n function select_changed(sp) {\n if(sp !== selected) {\n selected = sp;\n refresh();\n }\n }\n\n function clear_all_highlights() {\n node_on_paths = {};\n edge_on_paths = {};\n }\n\n function contains_path(paths) {\n return function(path) {\n return paths.indexOf(path)>=0;\n };\n }\n\n // sigh\n function doesnt_contain_path(paths) {\n var cp = contains_path(paths);\n return function(path) {\n return !cp(path);\n };\n }\n\n function intersect_paths(pathsA, pathsB) {\n if(!pathsA || !pathsB)\n return false;\n return pathsA.some(contains_path(pathsB));\n }\n\n function toggle_paths(pathsA, pathsB) {\n if(!pathsA)\n return pathsB;\n else if(!pathsB)\n return pathsA;\n if(pathsB.every(contains_path(pathsA)))\n return pathsA.filter(doesnt_contain_path(pathsB));\n else return pathsA.concat(pathsB.filter(doesnt_contain_path(pathsA)));\n }\n\n function add_behavior(chart, node, edge, ehover) {\n chart\n .cascade(200, true, conditional_properties(function(n) {\n return !!node_on_paths[chart.nodeKey.eval(n)];\n }, function(e) {\n return !!edge_on_paths[chart.edgeKey.eval(e)];\n }, pathprops))\n .cascade(300, true, conditional_properties(function(n) {\n return intersect_paths(node_on_paths[chart.nodeKey.eval(n)], selected);\n }, function(e) {\n return intersect_paths(edge_on_paths[chart.edgeKey.eval(e)], selected);\n }, selectprops))\n .cascade(400, true, conditional_properties(function(n) {\n return intersect_paths(node_on_paths[chart.nodeKey.eval(n)], hoverpaths);\n }, function(e) {\n return intersect_paths(edge_on_paths[chart.edgeKey.eval(e)], hoverpaths);\n }, hoverprops));\n\n node\n .on('mouseover.highlight-paths', function(n) {\n highlight_paths_group.hover_changed(node_on_paths[chart.nodeKey.eval(n)] || null);\n })\n .on('mouseout.highlight-paths', function(n) {\n highlight_paths_group.hover_changed(null);\n })\n .on('click.highlight-paths', function(n) {\n highlight_paths_group.select_changed(toggle_paths(selected, node_on_paths[chart.nodeKey.eval(n)]));\n });\n\n\n ehover\n .on('mouseover.highlight-paths', function(e) {\n highlight_paths_group.hover_changed(edge_on_paths[chart.edgeKey.eval(e)] || null);\n })\n .on('mouseout.highlight-paths', function(e) {\n highlight_paths_group.hover_changed(null);\n })\n .on('click.highlight-paths', function(n) {\n highlight_paths_group.select_changed(toggle_paths(selected, edge_on_paths[chart.nodeKey.eval(n)]));\n });\n }\n\n function remove_behavior(chart, node, edge, ehover) {\n node\n .on('mouseover.highlight-paths', null)\n .on('mouseout.highlight-paths', null)\n .on('click.highlight-paths', null);\n ehover\n .on('mouseover.highlight-paths', null)\n .on('mouseout.highlight-paths', null)\n .on('click.highlight-paths', null);\n clear_all_highlights();\n chart\n .cascade(200, false, pathprops)\n .cascade(300, false, selectprops)\n .cascade(400, false, hoverprops);\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n add_behavior: add_behavior,\n remove_behavior: function(chart, node, edge, ehover) {\n remove_behavior(chart, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n var anchor = p.anchorName();\n highlight_paths_group.on('paths_changed.' + anchor, p ? paths_changed : null);\n highlight_paths_group.on('hover_changed.' + anchor, p ? hover_changed : null);\n highlight_paths_group.on('select_changed.' + anchor, p ? select_changed : null);\n }\n });\n\n // whether to do relayout & redraw (true) or just refresh (false)\n _behavior.doRedraw = property(false);\n\n return _behavior;\n};\n\n","dc_graph.expand_collapse = function(get_degree, expand, collapse, dirs) {\n dirs = dirs || ['both'];\n if(dirs.length > 2)\n throw new Error('there are only two directions to expand in');\n\n function add_gradient_def(chart) {\n var gradient = chart.addOrRemoveDef('spike-gradient', true, 'linearGradient');\n gradient.attr({\n x1: '0%',\n y1: '0%',\n x2: '100%',\n y2: '0%',\n spreadMethod: 'pad'\n });\n gradient.selectAll('stop').data([[0,'black',1], [100, 'black', '0']])\n .enter().append('stop').attr({\n offset: function(d) {\n return d[0] + '%';\n },\n 'stop-color': function(d) {\n return d[1];\n },\n 'stop-opacity': function(d) {\n return d[2];\n }\n });\n }\n\n function view_degree(chart, edge, dir, key) {\n var fil;\n switch(dir) {\n case 'out':\n fil = function(e) {\n return chart.edgeSource.eval(e) === key;\n };\n break;\n case 'in':\n fil = function(e) {\n return chart.edgeTarget.eval(e) === key;\n };\n break;\n case 'both':\n fil = function(e) {\n return chart.edgeSource.eval(e) === key || chart.edgeTarget.eval(e) === key;\n };\n break;\n }\n return edge.filter(fil).size();\n }\n\n function spike_directioner(rankdir, dir, n) {\n if(dir==='both')\n return function(i) {\n return Math.PI * (2 * i / n - 0.5);\n };\n else {\n var sweep = (n-1)*Math.PI/n, ofs;\n switch(rankdir) {\n case 'LR':\n ofs = 0;\n break;\n case 'TB':\n ofs = Math.PI/2;\n break;\n case 'RL':\n ofs = Math.PI;\n break;\n case 'BT':\n ofs = -Math.PI/2;\n break;\n }\n if(dir === 'in')\n ofs += Math.PI;\n return function(i) {\n return ofs + sweep * (-.5 + (n > 1 ? i / (n-1) : 0)); // avoid 0/0\n };\n }\n }\n\n function draw_selected(chart, node, edge) {\n var spike = node\n .selectAll('g.spikes')\n .data(function(d) {\n return (d.dcg_expand_selected &&\n (!d.dcg_expanded || !d.dcg_expanded[d.dcg_expand_selected.dir])) ?\n [d] : [];\n });\n spike.exit().remove();\n spike\n .enter().insert('g', ':first-child')\n .classed('spikes', true);\n var rect = spike\n .selectAll('rect.spike')\n .data(function(d) {\n var key = chart.nodeKey.eval(d);\n var dir = d.dcg_expand_selected.dir,\n n = d.dcg_expand_selected.n,\n af = spike_directioner(chart.layoutEngine().rankdir(), dir, n),\n ret = Array(n);\n for(var i = 0; i d.cola.y ? 'out' : 'in';\n case 'BT':\n return y < d.cola.y ? 'out' : 'in';\n case 'LR':\n return x > d.cola.x ? 'out' : 'in';\n case 'RL':\n return x < d.cola.x ? 'out' : 'in';\n }\n throw new Error('unknown rankdir ' + chart.layoutEngine().rankdir());\n }\n\n\n function add_behavior(chart, node, edge) {\n function mousemove(d) {\n var dir = zonedir(chart, d3.event, dirs, d);\n var nk = chart.nodeKey.eval(d);\n Promise.resolve(get_degree(nk, dir)).then(function(degree) {\n var spikes = {\n dir: dir,\n n: Math.max(0, degree - view_degree(chart, edge, dir, nk)) // be tolerant of inconsistencies\n };\n node.each(function(n) {\n n.dcg_expand_selected = n === d ? spikes : null;\n });\n draw_selected(chart, node, edge);\n });\n }\n\n function click(d) {\n var event = d3.event;\n console.log(event.type);\n function action() {\n var dir = zonedir(chart, event, dirs, d);\n d.dcg_expanded = d.dcg_expanded || {};\n if(!d.dcg_expanded[dir]) {\n expand(chart.nodeKey.eval(d), dir, event.type === 'dblclick');\n d.dcg_expanded[dir] = true;\n }\n else {\n collapse(chart.nodeKey.eval(d), collapsible.bind(null, chart, edge, dir), dir);\n d.dcg_expanded[dir] = false;\n }\n draw_selected(chart, node, edge);\n d.dcg_dblclk_timeout = null;\n }\n return action();\n // distinguish click and double click - kind of fishy but seems to work\n // basically, wait to see if a click becomes a dblclick - but it's even worse\n // because you'll receive a second click before the dblclick on most browsers\n if(d.dcg_dblclk_timeout) {\n window.clearTimeout(d.dcg_dblclk_timeout);\n if(event.type === 'dblclick')\n action();\n d.dcg_dblclk_timeout = null;\n }\n else d.dcg_dblclk_timeout = window.setTimeout(action, 200);\n }\n\n node\n .on('mouseover.expand-collapse', mousemove)\n .on('mousemove.expand-collapse', mousemove)\n .on('mouseout.expand-collapse', function(d) {\n clear_selected(chart, node, edge);\n })\n .on('click', click)\n .on('dblclick', click);\n }\n\n function remove_behavior(chart, node, edge) {\n node\n .on('mouseover.expand-collapse', null)\n .on('mouseout.expand-collapse', null);\n clear_selected(chart, node);\n }\n\n return dc_graph.behavior('expand-collapse', {\n add_behavior: add_behavior,\n first: add_gradient_def,\n remove_behavior: remove_behavior\n });\n};\n","// load a graph from various formats and return the data in consistent {nodes, links} format\ndc_graph.load_graph = function() {\n // ignore any query parameters for checking extension\n function ignore_query(file) {\n if(!file)\n return null;\n return file.replace(/\\?.*/, '');\n }\n var file1, file2, callback;\n file1 = arguments[0];\n if(arguments.length===3) {\n file2 = arguments[1];\n callback = arguments[2];\n }\n else if(arguments.length===2) {\n callback = arguments[1];\n }\n else throw new Error('need two or three arguments');\n\n if(file2) {\n // this is not general - really titan-specific\n queue()\n .defer(d3.json, file1)\n .defer(d3.json, file2)\n .await(function(error, nodes, edges) {\n if(error)\n callback(error, null);\n else\n callback(null, {nodes: nodes.results, edges: edges.results});\n });\n }\n else if(/\\.json$/.test(ignore_query(file1)))\n d3.json(file1, callback);\n else if(/\\.gv|\\.dot$/.test(ignore_query(file1)))\n d3.text(file1, function (error, f) {\n if(error) {\n callback(error, null);\n return;\n }\n var digraph = graphlibDot.parse(f);\n\n var nodeNames = digraph.nodes();\n var nodes = new Array(nodeNames.length);\n nodeNames.forEach(function (name, i) {\n var node = nodes[i] = digraph._nodes[nodeNames[i]];\n node.id = i;\n node.name = name;\n });\n\n var edgeNames = digraph.edges();\n var edges = [];\n edgeNames.forEach(function(e) {\n var edge = digraph._edges[e];\n edges.push({\n source: digraph._nodes[edge.u].id,\n target: digraph._nodes[edge.v].id,\n sourcename: edge.u,\n targetname: edge.v\n });\n });\n var graph = {nodes: nodes, links: edges};\n callback(null, graph);\n });\n};\n","function can_get_graph_from_this(data) {\n return (data.nodes || data.vertices) && (data.edges || data.links);\n}\n\n// general-purpose reader of various json-based graph formats\n// (esp but not limited to titan graph database-like formats)\n// this could be generalized a lot\ndc_graph.munge_graph = function(data, nodekeyattr, sourceattr, targetattr) {\n // we want data = {nodes, edges} and the field names for keys; find those in common json formats\n var nodes, edges, nka = nodekeyattr || \"name\",\n sa = sourceattr || \"sourcename\", ta = targetattr || \"targetname\";\n\n if(!can_get_graph_from_this(data)) {\n var wrappers = ['database', 'response'];\n var wi = wrappers.findIndex(function(f) { return data[f] && can_get_graph_from_this(data[f]); });\n if(wi<0)\n throw new Error(\"couldn't find the data!\");\n data = data[wrappers[wi]];\n }\n edges = data.edges || data.links;\n nodes = data.nodes || data.vertices;\n\n function find_attr(o, attrs) {\n return attrs.filter(function(a) { return !!o[a]; });\n }\n\n //var edgekeyattr = \"id\";\n var edge0 = edges[0];\n if(edge0[sa] === undefined) {\n var sourceattrs = sourceattr ? [sourceattr] : ['source_ecomp_uid', \"node1\", \"source\", \"tail\"],\n targetattrs = targetattr ? [targetattr] : ['target_ecomp_uid', \"node2\", \"target\", \"head\"];\n //var edgekeyattrs = ['id', '_id', 'ecomp_uid'];\n var edgewrappers = ['edge'];\n if(edge0.node0 && edge0.node1) { // specific conflict here\n sa = 'node0';\n ta = 'node1';\n }\n else {\n var candidates = find_attr(edge0, sourceattrs);\n if(!candidates.length) {\n wi = edgewrappers.findIndex(function(w) {\n return edge0[w] && find_attr(edge0[w], sourceattrs).length;\n });\n if(wi<0) {\n if(sourceattr)\n throw new Error('sourceattr ' + sa + \" didn't work\");\n else\n throw new Error(\"didn't find any source attr\");\n }\n edges = edges.map(function(e) { return e[edgewrappers[wi]]; });\n edge0 = edges[0];\n candidates = find_attr(edge0, sourceattrs);\n }\n if(candidates.length > 1)\n console.warn('found more than one possible source attr', candidates);\n sa = candidates[0];\n\n candidates = find_attr(edge0, targetattrs);\n if(!candidates.length) {\n if(targetattr && !edge0[targetattr])\n throw new Error('targetattr ' + ta + \" didn't work\");\n else\n throw new Error(\"didn't find any target attr\");\n }\n if(candidates.length > 1)\n console.warn('found more than one possible target attr', candidates);\n ta = candidates[0];\n\n /*\n // we're currently assembling our own edgeid\n candidates = find_attr(edge0, edgekeyattrs);\n if(!candidates.length)\n throw new Error(\"didn't find any edge key\");\n if(candidates.length > 1)\n console.warn('found more than one edge key attr', candidates);\n edgekeyattr = candidates[0];\n */\n }\n }\n var node0 = nodes[0];\n if(node0[nka] === undefined) {\n var nodekeyattrs = nodekeyattr ? [nodekeyattr] : ['ecomp_uid', 'id', '_id'];\n var nodewrappers = ['vertex'];\n candidates = find_attr(node0, nodekeyattrs);\n if(!candidates.length) {\n wi = nodewrappers.findIndex(function(w) {\n return node0[w] && find_attr(node0[w], nodekeyattrs).length;\n });\n if(wi<0) {\n if(nodekeyattr)\n throw new Error('nodekeyattr ' + nka + \" didn't work\");\n else\n throw new Error(\"couldn't find the node data\");\n }\n nodes = nodes.map(function(n) { return n[nodewrappers[wi]]; });\n node0 = nodes[0];\n candidates = find_attr(node0, nodekeyattrs);\n }\n if(candidates.length > 1)\n console.warn('found more than one possible node key attr', candidates);\n nka = candidates[0];\n }\n\n return {\n nodes: nodes,\n edges: edges,\n nodekeyattr: nka,\n sourceattr: sa,\n targetattr: ta\n };\n}\n","/**\n * `dc_graph.flat_group` implements a special [\"fake group\"](https://github.com/dc-js/dc.js/wiki/FAQ#fake-groups)\n * for the special case where you want a group that represents the filtered rows of the crossfilter.\n *\n * Although `dc_graph` can be used with reduced data, typically the nodes and edges are just rows of\n * the corresponding data arrays, and each array has a column which contains the unique identifier\n * for the node or edge. In this setup, there are other dimensions and groups which are aggregated\n * for the use of dc.js charts, but the graph just shows or does not show the nodes and edges from\n * the rows.\n *\n * This simple class supports that use case in three steps:\n * 1. It creates a dimension keyed on the unique identifier (specified to `flat_group.make`)\n * 2. It creates a group from the dimension with a reduction function that returns the row when the\n * row is filtered in, and `null` when the row is filtered out.\n * 3. It wraps the group in a fake group which filters out the resulting nulls.\n *\n * The result is a fake group whose `.all()` method returns an array of the currently filtered-in\n * `{key, value}` pairs, where the key is that returned by the ID accessor, and the value is the raw\n * row object from the data.\n *\n * This could be a useful crossfilter utility outside of dc.graph. For example, bubble charts and\n * scatter plots often use similar functionality because each observation is either shown or not,\n * and it is helpful to have the entire row available as reduced data.\n *\n * But it would need to be generalized and cleaned up. (For example, the way it has to create the\n * crossfilter and dimension is kinda dumb.) And there is currently no such crossfilter utility\n * library to put it in.\n *\n * @namespace flat_group\n * @memberof dc_graph\n * @type {{}}\n**/\n\ndc_graph.flat_group = (function() {\n var reduce_01 = {\n add: function(p, v) { return v; },\n remove: function() { return null; },\n init: function() { return null; }\n };\n // now we only really want to see the non-null values, so make a fake group\n function non_null(group) {\n return {\n all: function() {\n return group.all().filter(function(kv) {\n return kv.value !== null;\n });\n }\n };\n }\n\n function dim_group(ndx, id_accessor) {\n var dimension = ndx.dimension(id_accessor);\n return {\n crossfilter: ndx,\n dimension: dimension,\n group: non_null(dimension.group().reduce(reduce_01.add,\n reduce_01.remove,\n reduce_01.init))\n };\n }\n\n return {\n /**\n * Create a crossfilter, dimension, and flat group, as described in {@link dc_graph.flat_group flat_group}.\n * Returns an object containing all three.\n\n * @method make\n * @memberof dc_graph.flat_group\n * @param {Array} vec - the data array for crossfilter\n * @param {Function} id_accessor - accessor function taking a row object and returning its\n * unique identifier\n * @return {Object} `{crossfilter, dimension, group}`\n **/\n make: function(vec, id_accessor) {\n var ndx = crossfilter(vec);\n return dim_group(ndx, id_accessor);\n },\n /**\n * Create a flat dimension and group from an existing crossfilter.\n *\n * This is a wretched name for this function.\n\n * @method another\n * @memberof dc_graph.flat_group\n * @param {Object} ndx - crossfilter instance\n * @param {Function} id_accessor - accessor function taking a row object and returning its\n * unique identifier\n * @return {Object} `{crossfilter, dimension, group}`\n **/\n another: function(ndx, id_accessor) {\n return dim_group(ndx, id_accessor);\n }\n };\n})();\n\n\n","var convert_tree_helper = function(data, attrs, options, parent, level, inherit) {\n level = level || 0;\n if(attrs.length > (options.valuesByAttr ? 1 : 0)) {\n var attr = attrs.shift();\n var nodes = [], edges = [];\n var children = data.map(function(v) {\n var key = v[options.nestKey];\n var childKey = options.nestKeysUnique ? key : uuid();\n if(childKey) {\n var node;\n if(options.ancestorKeys) {\n inherit = inherit || {};\n if(attr)\n inherit[attr] = key;\n node = Object.assign({}, inherit);\n } else node = {};\n node[options.nodeKey] = childKey;\n if(options.label && options.labelFun)\n node[options.label] = options.labelFun(key, attr, v);\n if(options.level)\n node[options.level] = level+1;\n nodes.push(node);\n if(parent) {\n var edge = {};\n edge[options.edgeSource] = parent;\n edge[options.edgeTarget] = childKey;\n edges.push(edge);\n }\n }\n var children = options.valuesByAttr ? v[attrs[0]] : v.values;\n var recurse = convert_tree_helper(children, attrs.slice(0), options,\n childKey, level+1, Object.assign({}, inherit));\n return recurse;\n });\n return {nodes: Array.prototype.concat.apply(nodes, children.map(dc.pluck('nodes'))),\n edges: Array.prototype.concat.apply(edges, children.map(dc.pluck('edges')))};\n }\n else return {nodes: data.map(function(v) {\n v = Object.assign({}, v);\n if(options.level)\n v[options.level] = level+1;\n return v;\n }), edges: data.map(function(v) {\n var edge = {};\n edge[options.edgeSource] = parent;\n edge[options.edgeTarget] = v[options.nodeKey];\n return edge;\n })};\n};\n\ndc_graph.convert_tree = function(data, attrs, options) {\n options = Object.assign({\n nodeKey: 'key',\n edgeKey: 'key',\n edgeSource: 'sourcename',\n edgeTarget: 'targetname',\n nestKey: 'key'\n }, options);\n if(Array.isArray(data))\n return convert_tree_helper(data, attrs, options, options.root, 0, options.inherit);\n else {\n attrs = [''].concat(attrs);\n return convert_tree_helper([data], attrs, options, options.root, 0, options.inherit);\n }\n};\n\ndc_graph.convert_nest = function(nest, attrs, nodeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) {\n return dc_graph.convert_tree(nest, attrs, {\n nodeKey: nodeKeyAttr,\n edgeSource: edgeSourceAttr,\n edgeTarget: edgeTargetAttr,\n root: parent,\n inherit: inherit,\n ancestorKeys: true,\n label: 'name',\n labelFun: function(key, attr, v) { return attr + ':' + key; },\n level: '_level'\n });\n};\n\ndc_graph.convert_adjacency_list = function(nodes, namesIn, namesOut) {\n // adjacenciesAttr, edgeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) {\n var edges = Array.prototype.concat.apply([], nodes.map(function(n) {\n return n[namesIn.adjacencies].map(function(adj) {\n var e = {};\n if(namesOut.edgeKey)\n e[namesOut.edgeKey] = uuid();\n e[namesOut.edgeSource] = n[namesIn.nodeKey];\n e[namesOut.edgeTarget] = namesIn.targetKey ? adj[namesIn.targetKey] : adj;\n if(namesOut.adjacency)\n e[namesOut.adjacency] = adj;\n return e;\n });\n }));\n return {\n nodes: nodes,\n edges: edges\n };\n};\n\n","dc_graph.path_reader = function(pathsgroup) {\n var highlight_paths_group = dc_graph.register_highlight_paths_group(pathsgroup || 'highlight-paths-group');\n var _intervals, _intervalTree, _time;\n\n function register_path_objs(path, nop, eop) {\n reader.elementList.eval(path).forEach(function(element) {\n var key, paths;\n switch(reader.elementType.eval(element)) {\n case 'node':\n key = reader.nodeKey.eval(element);\n paths = nop[key] = nop[key] || [];\n break;\n case 'edge':\n key = reader.edgeSource.eval(element) + '-' + reader.edgeTarget.eval(element);\n paths = eop[key] = eop[key] || [];\n break;\n }\n paths.push(path);\n });\n }\n\n var reader = {\n pathList: property(identity, false),\n timeRange: property(null, false),\n elementList: property(identity, false),\n elementType: property(null, false),\n nodeKey: property(null, false),\n edgeSource: property(null, false),\n edgeTarget: property(null, false),\n clear: function() {\n highlight_paths_group.paths_changed({}, {}, []);\n },\n data: function(data) {\n var nop = {}, eop = {}, allpaths = [], has_ranges;\n reader.pathList.eval(data).forEach(function(path) {\n if((path._range = reader.timeRange.eval(path))) { // ugh modifying user data\n if(has_ranges===false)\n throw new Error(\"can't have a mix of ranged and non-ranged paths\");\n has_ranges = true;\n } else {\n if(has_ranges===true)\n throw new Error(\"can't have a mix of ranged and non-ranged paths\");\n has_ranges = false;\n register_path_objs(path, nop, eop);\n }\n allpaths.push(path);\n });\n if(has_ranges) {\n _intervals = allpaths.map(function(path) {\n var interval = [path._range[0].getTime(), path._range[1].getTime()];\n interval.path = path;\n return interval;\n });\n // currently must include lysenko-interval-tree separately\n _intervalTree = lysenkoIntervalTree(_intervals);\n if(_time)\n this.setTime(_time);\n } else {\n _intervals = null;\n _intervalTree = null;\n highlight_paths_group.paths_changed(nop, eop, allpaths);\n }\n },\n getIntervals: function() {\n return _intervals;\n },\n setTime: function(t) {\n if(t && _intervalTree) {\n var paths = [], nop = {}, eop = {};\n _intervalTree.queryPoint(t.getTime(), function(interval) {\n paths.push(interval.path);\n register_path_objs(interval.path, nop, eop);\n });\n highlight_paths_group.paths_changed(nop, eop, paths);\n }\n _time = t;\n }\n };\n\n return reader;\n};\n\n","dc_graph.path_selector = function(parent, reader, pathsgroup, chartgroup) {\n var highlight_paths_group = dc_graph.register_highlight_paths_group(pathsgroup || 'highlight-paths-group');\n var root = d3.select(parent);\n var paths_ = [];\n var hovered = null, selected = null;\n\n // unfortunately these functions are copied from dc_graph.highlight_paths\n function contains_path(paths) {\n return function(path) {\n return paths ? paths.indexOf(path)>=0 : false;\n };\n }\n\n function doesnt_contain_path(paths) {\n var cp = contains_path(paths);\n return function(path) {\n return !cp(path);\n };\n }\n\n function toggle_paths(pathsA, pathsB) {\n if(!pathsA)\n return pathsB;\n else if(!pathsB)\n return pathsA;\n if(pathsB.every(contains_path(pathsA)))\n return pathsA.filter(doesnt_contain_path(pathsB));\n else return pathsA.concat(pathsB.filter(doesnt_contain_path(pathsA)));\n }\n\n // this should use the whole cascading architecture\n // and allow customization rather than hardcoding everything\n // in fact, you can't even reliably overlap attributes without that (so we don't)\n\n function draw_paths(paths) {\n var p2 = root.selectAll('span.path-selector').data(paths);\n p2.enter()\n .append('span')\n .attr('class', 'path-selector')\n .style({\n 'border-width': '1px',\n 'border-style': 'solid',\n 'border-color': 'grey',\n 'border-radius': '4px',\n 'display': 'inline-block',\n padding: '4px',\n cursor: 'pointer',\n margin: '5px'\n });\n p2.exit().transition(1000).attr('opacity', 0).remove();\n p2.text(function(d, i) {\n return 'path ' + (i+1) + ' (' + reader.elementList.eval(d).length + ')';\n })\n .on('mouseover', function(d) {\n highlight_paths_group.hover_changed([d]);\n })\n .on('mouseout', function(d) {\n highlight_paths_group.hover_changed(null);\n })\n .on('click', function(d) {\n highlight_paths_group.select_changed(toggle_paths(selected, [d]));\n });\n var no_paths = root.selectAll('span.no-paths').data(paths.length === 0 ? [0] : []);\n no_paths.exit().remove();\n no_paths.enter()\n .append('span')\n .attr('class', 'no-paths');\n no_paths\n .classed('error', !!selector.error_text())\n .text(selector.error_text() || (selector.queried() ? selector.zero_text() : selector.default_text()));\n }\n\n function draw_hovered() {\n var is_hovered = contains_path(hovered);\n root.selectAll('span.path-selector')\n .style({\n 'border-color': function(d, i) { return is_hovered(d) ? '#e41a1c' : 'grey'; },\n 'border-width': function(d, i) { return (is_hovered(d) ? 2 : 1) + 'px'; },\n padding: function(d, i) { return (is_hovered(d) ? 3 : 4) + 'px'; }\n });\n }\n\n function draw_selected() {\n var is_selected = contains_path(selected);\n root.selectAll('span.path-selector')\n .style({\n 'background-color': function(d, i) { return is_selected(d) ? '#1c1ae6' : 'white'; },\n 'color': function(d, i) { return is_selected(d) ? 'white' : 'black'; }\n });\n }\n\n highlight_paths_group\n .on('paths_changed.selector', function(nop, eop, paths) {\n hovered = selected = null;\n paths_ = paths;\n selector.redraw();\n })\n .on('hover_changed.selector', function(hpaths) {\n hovered = hpaths;\n draw_hovered();\n })\n .on('select_changed.selector', function(spaths) {\n selected = spaths;\n draw_selected();\n });\n var selector = {\n default_text: property('Nothing here'),\n zero_text: property('No paths'),\n error_text: property(null),\n queried: property(false),\n redraw: function() {\n draw_paths(paths_);\n draw_hovered();\n draw_selected();\n },\n render: function() {\n this.redraw();\n return this;\n }\n };\n dc.registerChart(selector, chartgroup);\n return selector;\n}\n","dc_graph.node_name = function(i) {\n // a-z, A-Z, aa-Zz, then quit\n if(i<26)\n return String.fromCharCode(97+i);\n else if(i<52)\n return String.fromCharCode(65+i-26);\n else if(i<52*52)\n return dc_graph.node_name(Math.floor(i/52)) + dc_graph.node_name(i%52);\n else throw new Error(\"no, that's too large\");\n};\ndc_graph.node_object = function(i, attrs) {\n attrs = attrs || {};\n return _.extend({\n id: i,\n name: dc_graph.node_name(i)\n }, attrs);\n};\n\ndc_graph.edge_object = function(namef, i, j, attrs) {\n attrs = attrs || {};\n return _.extend({\n source: i,\n target: j,\n sourcename: namef(i),\n targetname: namef(j)\n }, attrs);\n};\n\ndc_graph.generate = function(type, args, env, callback) {\n var nodes, edges, i, j;\n var nodePrefix = env.nodePrefix || '';\n var namef = function(i) {\n return nodes[i].name;\n };\n var N = args[0];\n var linkLength = env.linkLength || 30;\n switch(type) {\n case 'clique':\n case 'cliquestf':\n nodes = new Array(N);\n edges = [];\n for(i = 0; i max_line_length && line.length > 0) {\n lines.push(line);\n line = '';\n }\n line += part;\n i = regexp.lastIndex;\n }\n while(result !== null);\n lines.push(line);\n return lines;\n };\n};\n","dc_graph.build_type_graph = function(nodes, edges, nkey, ntype, esource, etarget) {\n var nmap = {}, tnodes = {}, tedges = {};\n nodes.forEach(function(n) {\n nmap[nkey(n)] = n;\n var t = ntype(n);\n if(!tnodes[t])\n tnodes[t] = {type: t};\n });\n edges.forEach(function(e) {\n var source = esource(e), target = etarget(e), sn, tn;\n if(!(sn = nmap[source]))\n throw new Error('source key ' + source + ' not found!');\n if(!(tn = nmap[target]))\n throw new Error('target key ' + target + ' not found!');\n var etype = ntype(sn) + '/' + ntype(tn);\n if(!tedges[etype])\n tedges[etype] = {\n type: etype,\n source: ntype(sn),\n target: ntype(tn)\n };\n });\n return {\n nodes: Object.keys(tnodes).map(function(k) { return tnodes[k]; }),\n edges: Object.keys(tedges).map(function(k) { return tedges[k]; })\n };\n}\n","dc_graph.d3 = d3;\ndc_graph.crossfilter = crossfilter;\ndc_graph.dc = dc;\n\nreturn dc_graph;\n}\n if (typeof define === 'function' && define.amd) {\n define([\"d3\", \"crossfilter\", \"dc\"], _dc_graph);\n } else if (typeof module == \"object\" && module.exports) {\n var _d3 = require('d3');\n var _crossfilter = require('crossfilter');\n if (typeof _crossfilter !== \"function\") {\n _crossfilter = _crossfilter.crossfilter;\n }\n var _dc = require('dc');\n module.exports = _dc_graph(_d3, _crossfilter, _dc);\n } else {\n this.dc_graph = _dc_graph(d3, crossfilter, dc);\n }\n}\n)();\n"]} \ No newline at end of file diff --git a/dc.graph.min.js b/dc.graph.min.js index f42691b0..8cf10dad 100644 --- a/dc.graph.min.js +++ b/dc.graph.min.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.3.16 + * dc.graph 0.4.0 * http://dc-js.github.io/dc.graph.js/ * Copyright 2015-2016 AT&T Intellectual Property & the dc.graph.js Developers * https://github.com/dc-js/dc.graph.js/blob/master/AUTHORS @@ -18,6 +18,6 @@ * */ -!function(){function a(a,b,c){"use strict";function d(a,b,c){function d(a,b){return function(c,d){return a(c)?b(c):d()}}var e={};for(var f in c)/^node/.test(f)?a&&(e[f]=d(a,g(c[f]))):/^edge/.test(f)?b&&(e[f]=d(b,g(c[f]))):console.error('only know how to deal with properties that start with "node" or "edge"');return e}function e(a,b){return function(){return a(b.apply(null,arguments))}}function f(a){return a.orig}function g(a){return F.functor_wrap(a,f)}function h(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function i(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})}function j(a,b,c){for(var d=["M",a[0].x,",",a[0].y],e=b,f=!1,g=1;g=c){if(!m(c,i,a))return!1}else if(!m(a,i,c))return!1;if(b>=d){if(!m(d,j,b))return!1}else if(!m(b,j,d))return!1;if(e>=g){if(!m(g,i,e))return!1}else if(!m(e,i,g))return!1;if(f>=h){if(!m(h,j,f))return!1}else if(!m(f,j,h))return!1;return{x:i,y:j}}function o(a,b,c,d,e){for(var f=0;f=0)throw new Error("f(a) must be less than 0");if(a(c).val<=0)throw new Error("f(b) must be greater than 0");for(;;){if(!--d)throw new Error("patience ran out");var e=(b+c)/2,f=a(e),g=f.val;if(Math.abs(g)<.5)return f;g>0?c=e:b=e}}function z(a,b,c,d,e,f,g,h,i,j,k,l){var m,n,o,q,r,s;if(h){var t,u,v=function(b,c){return p(a,b,1e3*Math.cos(c),1e3*Math.sin(c))},w=function(a,b,c){return function(d){var e=v(a,d);return e?{port:e,val:Math.hypot(e.x-b.x,e.y-b.y)-c,ang:d}:{port:{x:0,y:0},val:0,ang:d}}},x=Math.atan2(h.sourcePort.y,h.sourcePort.x),z=Math.atan2(h.targetPort.y,h.targetPort.x);try{t=y(w(b,h.sourcePort,j),x,x+2*i*j/k)}catch(a){t={ang:x,port:h.sourcePort}}try{u=y(w(c,h.targetPort,j),z,z-2*i*j/k)}catch(a){u={ang:z,port:h.targetPort}}o=t.port,q=u.port;var A=Math.hypot(o.x,o.y),B=Math.hypot(q.x,q.y),C=A+k/2,D=B+l/2,E=d+C*Math.cos(t.ang),F=e+C*Math.sin(t.ang),G=f+D*Math.cos(u.ang),H=g+D*Math.sin(u.ang);r=[{x:d+o.x,y:e+o.y},{x:E,y:F},{x:G,y:H},{x:f+q.x,y:g+q.y}],s=3}else m=f-d,n=g-e,o=p(a,b,m,n),q=p(a,c,-m,-n),o||(o={x:0,y:0}),q||(q={x:0,y:0}),r=[{x:d+o.x,y:e+o.y},{x:f+q.x,y:g+q.y}],s=1;return{sourcePort:o,targetPort:q,points:r,bezDegree:s}}function A(a,b){for(var c=[],d=1;da)return e.splice(c,0,{n:a,f:b}),g}return e.push({n:a,f:b}),g},g._eval=function(a,c){if(0!==c&&e.length){var d=e[c-1];return d.f(a,function(){return g._eval(a,c-1)})}return F.functor_wrap(g(),b)(a)},g.eval=function(a){return g._eval(a,e.length)},g.react=function(a){return arguments.length?(d=a,this):d},g},H=function(a){return a};F.functor_wrap=function(a,b){return"function"==typeof a?b?function(c){return a(b(c))}:a:function(){return a}};var I={1:"L",2:"Q",3:"C"};Math.hypot=Math.hypot||function(){for(var a=0,b=arguments.length,c=0;c2?j-2:0].path:null,n=z(ea,a.source,a.target,c,d,e,f,m,k,ea.parallelEdgeOffset(),g,h);a.ports.rev[j]!==i&&n.points.reverse();var o=(n.points[0],n.points[n.points.length-1]),p=C(n.points,.75);a.ports[b][j]={path:n,orient:Math.atan2(o.y-p.y,o.x-p.x)+"rad"}}}return a.ports[b][a.parallel].path}function v(a){q(a,"old",a.source.prevX||a.source.cola.x,a.source.prevY||a.source.cola.y,a.target.prevX||a.target.cola.x,a.target.prevY||a.target.cola.y)}function w(a){var b=q(a,"new",a.source.cola.x,a.source.cola.y,a.target.cola.x,a.target.cola.y),c=b.points[0],d=b.points[b.points.length-1];a.length=Math.hypot(d.x-c.x,d.y-c.y)}function y(a){return function(b){var c=b.ports[a][b.parallel].path;return j(c.points,c.bezDegree)}}function A(a){return function(b){var c=b.ports[a][b.parallel].path,d=b.target.cola.x=0){var k=e/d,l=c/b,m=l2)throw new Error("align_ expecting 0-2 sides, not "+n.length);var o=R();i=_.translate(),j=_.scale(),n.forEach(function(a){switch(a){case"l":i[0]=S(i,o.left);break;case"t":i[1]=T(i,o.top);break;case"r":i[0]=U(i,o.right);break;case"b":i[1]=V(i,o.bottom);break;default:throw new Error("align_ expecting l t r or b, not '"+a+"'")}})}else if("function"==typeof h){var p=h(b,c,d,e);f=p.pAR,i=p.translate,j=p.scale,a=p.viewBox}else{if("string"!=typeof h)throw new Error("unknown fitStrategy type "+typeof h);f=ea.fitStrategy()}void 0!==f&&(a||(a=[va.left,va.top,b,c].join(" ")),fa.attr({viewBox:a,preserveAspectRatio:f})),_.translate(i).scale(j).event(fa)}}function O(b,c,d,e,f,g,h,i,j,k){console.assert(d.data().every(l));var o={};c.each(function(a){o[ea.nodeKey.eval(a)]=!0}).attr("transform",function(a){return"translate("+a.cola.x+","+a.cola.y+")"});var q=b.transition().duration(m()).delay(function(a){return n(o[ea.nodeKey.eval(a)])}).attr("opacity",ea.nodeOpacity.eval).attr("transform",function(a){return"translate("+a.cola.x+","+a.cola.y+")"}).each("end.record",function(a){a.prevX=a.cola.x,a.prevY=a.cola.y});d.each(function(a){a.ports.new=null,a.ports.old=null});var r={};e.each(function(a){r[ea.edgeKey.eval(a)]=!0}).each(function(b){var c;"modins"===ea.stageTransitions()?(w(b),c="new"):(v(b),c="old"),ea.edgeArrowhead.eval(b)&&a.select("#"+ea.arrowId(b,"head")).attr("orient",function(){return b.ports[c][b.parallel].orient})}).attr("d",y("modins"===ea.stageTransitions()?"new":"old"));var s=d.each(w).each(function(b){ea.edgeArrowhead.eval(b)&&a.select("#"+ea.arrowId(b,"head")).transition().duration(m()).delay(n(!1)).attr("orient",function(){return b.ports.new[b.parallel].orient})}).transition().duration(m()).delay(function(a){return n(r[ea.edgeKey.eval(a)])}).attr("opacity",ea.edgeOpacity.eval).attr("d",function(a){var b="insmod"===ea.stageTransitions()&&r[ea.edgeKey.eval(a)]?"old":"new";return y(b)(a)});k.attr("d",A("modins"===ea.stageTransitions()?"new":"old"));var t=j.transition().duration(m()).delay(function(a){return n(r[ea.edgeKey.eval(a)])}).attr("opacity",ea.edgeOpacity.eval).attr("d",function(a){var b="insmod"===ea.stageTransitions()&&r[ea.edgeKey.eval(a)]?"old":"new";return A(b)(a)});"insmod"===ea.stageTransitions()&&(m()>=50?(s=s.transition().duration(m()).attr("d",y("new")),t=t.transition().duration(m()).attr("d",A("new"))):(s.attr("d",y("new")),t.attr("d",y("new")))),ea.showLayoutSteps()||B([q,s,t],function(){p(!0)}),f.attr("d",y("new"))}function P(a,b,c){var d=ea.arrowId(a,b),e=ea.addOrRemoveDef(d,!!c,"svg:marker");return c&&e.attr("viewBox","0 -5 10 10").attr("refX",qa[c].refX).attr("refY",qa[c].refY).attr("markerUnits","userSpaceOnUse").attr("markerWidth",qa[c].width*ea.edgeArrowSize.eval(a)).attr("markerHeight",qa[c].height*ea.edgeArrowSize.eval(a)).attr("stroke",ea.edgeStroke.eval(a)).attr("fill",ea.edgeStroke.eval(a)).call(qa[c].drawFunction),c?d:null}function Q(a,b){sa=a,ta=b,ha.attr("transform","translate("+a+") scale("+b+")")}function R(){return{left:va.left-ea.margins().left,top:va.top-ea.margins().top,right:va.right+ea.margins().right,bottom:va.bottom+ea.margins().bottom}}function S(a,b){return a[0]-aa(b)+aa.range()[0]}function T(a,b){return a[1]-ba(b)+ba.range()[0]}function U(a,b){return a[0]-aa(b)+aa.range()[1]}function V(a,b){return a[1]-ba(b)+ba.range()[1]}function W(){var b=a.event.translate;if(ea.restrictPan()){var c,d=aa.domain(),e=ba.domain(),f=R(),g=f.leftea.timeLimit())&&(console.log("cancelled"),ka.postMessage({command:"stop"}));break;case"end":ea.showLayoutSteps()?p(!0):(c(b.nodes,b.edges),O(C,D,u,v,w,x,y,z,A,B));var e;switch(ea.autoZoom()){case"always":e=!0;break;case"once":e=!0,ea.autoZoom(null);break;default:e=!1}M(C,u),e&&N();break;case"start":console.log("algo "+ea.layoutAlgorithm()+" started."),la.start()}},la.start(),ka.postMessage({command:"data",args:{nodes:h.map(function(a){return a.cola}),edges:J.map(function(a){return a.cola}),constraints:I,opts:{groupConnected:ea.groupConnected()}}}),ka.postMessage({command:"start",args:{initialUnconstrainedIterations:10,initialUserConstraintIterations:20,initialAllConstraintsIterations:20,initialOnly:ea.initialOnly(),showLayoutSteps:ea.showLayoutSteps()}}),this},ea.refresh=function(b,c,d,e,f){b=b||ia.selectAll(".node"),c=c||ja.selectAll(".edge"),o(b,c),d=d||ja.selectAll(".edge-hover"),e=e||ja.selectAll(".edge-label"),f=f||ga.selectAll("path.edge-label-path");var g=a.select(null);O(b,g,c,g,d,g,e,g,f,g)};var va;return ea.render=function(){return ea.initLayoutOnRedraw()||i(),ea.resetSvg(),ha=fa.append("g"),ja=ha.append("g"),ia=ha.append("g"),ea.legend()&&ea.legend().render(),ea.redraw()},ea.on=function(a,b){return la.on(a,b),this},ea.getStats=function(){return oa},ea.select=function(a){return ea.root().select(a)},ea.selectAll=function(a){return ea.root()?ea.root().selectAll(a):null},ea.svg=function(a){return arguments.length?(fa=a,ea):fa},ea.resetSvg=function(){return ea.select("svg").remove(),Y()},ea.redrawGroup=function(){c.redrawAll(h)},ea.renderGroup=function(){c.renderAll(h)},ea.defineArrow=function(a,b,c,d,e,f){return qa[a]={name:a,width:b,height:c,refX:d,refY:e,drawFunction:f},ea},ea.addOrRemoveDef=function(a,b,c){var d=b?[0]:[],e=ga.selectAll("#"+a).data(d),f=e.enter().append(c).attr("id",a);return e.exit().remove(),f},ea.invertCoord=function(a){return[aa.invert(a[0]),ba.invert(a[1])]},ea.defineArrow("vee",12,12,10,0,function(a){a.append("svg:path").attr("d","M0,-5 L10,0 L0,5 L3,0").attr("stroke-width","0px")}),ea.defineArrow("dot",7,7,0,0,function(a){a.append("svg:circle").attr("r",5).attr("cx",5).attr("cy",0).attr("stroke-width","0px")}),ea.anchor=function(b,d){if(!arguments.length)return ca;if(!b)throw new c.errors.BadArgumentException("parent must be defined");return ca=b.select&&b.classed?b.node():b,ea.root(a.select(ca)),ea.root().classed(F.constants.CHART_CLASS,!0),c.registerChart(ea,d),da=d,ea},ea.anchorName=function(){var a=ea.anchor();return a&&a.id?a.id:a&&a.replace?a.replace("#",""):"dc-graph"+ea.chartID()},ea.anchor(d,h)},F.legend=function(){var a,b={};return b.x=G(0),b.y=G(0),b.gap=G(5),b.nodeWidth=G(40),b.nodeHeight=G(40),b.exemplars=G({}),b.parent=G(null),b.redraw=function(){var c=b.parent().svg().selectAll("g.dc-graph-legend").data([0]);c.enter().append("g").attr("class","dc-graph-legend").attr("transform","translate("+b.x()+","+b.y()+")");var d=c.selectAll(".node").data(a,function(a){return a.name}),e=d.enter().append("g").attr("class","node");e.append("text").attr("dy","0.3em").attr("class","legend-label"),d.attr("transform",function(a,c){return"translate("+b.nodeWidth()/2+","+(b.nodeHeight()+b.gap())*(c+.5)+")"}),d.select("text.legend-label").attr("transform","translate("+(b.nodeWidth()/2+b.gap())+",0)").text(function(a){return a.name}),b.parent()._enterNode(e)._updateNode(d)},b.render=function(){var c=b.exemplars();if(c instanceof Array)a=c.map(function(a){return{name:a.name,orig:{key:a.key,value:a.value},cola:{}}});else{a=[];for(var d in c)a.push({name:d,orig:{key:d,value:c[d]},cola:{}})}b.redraw()},b},F.constraint_pattern=function(a){var b={},c=[];return a.nodes.forEach(function(a){var c=a.id,d=b[c]||(b[c]={});if(a.partition){var e=a.partition,f=a.value||a.id;a.all||a.typename?(d.match=a.extract?function(b){return a.extract(b.value[e])}:function(a){return a.value[e]},d.typename=a.typename||function(a){return e+"="+a.value[e]}):d.match=function(a){return a.value[e]===f}}else{if(!a.match)throw new Error("couldn't determine matcher for type "+JSON.stringify(a));d.match=a.match}}),a.edges.forEach(function(a){if(!a.disable){var b={source:a.source,target:a.target};b.produce="function"==typeof a.produce?a.produce:function(){return h(a.produce)},["listname","wrap","reverse"].forEach(function(c){void 0!==a[c]&&(b[c]=a[c])}),c.push(b)}}),function(a,d,e){var f=[],g={};d.forEach(function(c){var d=a.nodeKey.eval(c);for(var e in b){var f=b[e],h=f.match(c.orig);if(h){var i=f.typename?f.typename(e,h):e;g[i]||(g[i]={nodes:[],whether:{}}),g[i].nodes.push(d),g[i].whether[d]=!0}}});var h=c.filter(function(a){return a.source!==a.target}),i=c.filter(function(a){return a.source===a.target});return e.forEach(function(b){var c=a.edgeSource.eval(b),i=a.edgeTarget.eval(b);h.forEach(function(a){if(g[a.source]&&g[a.source].whether[c]&&g[a.target]&&g[a.target].whether[i]){var b=a.produce(g,d,e);a.reverse?(b.left=i,b.right=c):(b.left=c,b.right=i),f.push(b)}})}),i.forEach(function(a){if(g[a.source]){var b=a.produce(),c=a.listname||a.produce.listname||"nodes",d=a.wrap||a.produce.wrap||function(a){return a};b[c]=g[a.source].nodes.map(d),f.push(b)}}),f}},F.gap_y=function(a,b){return{axis:"y",gap:a,equality:!!b}},F.gap_x=function(a,b){return{axis:"x",gap:a,equality:!!b}},F.align_y=function(){return D("y")},F.align_x=function(){return D("x")},F.order_x=function(a,b){return{type:"ordering",axis:"x",gap:60,ordering:b}},F.order_y=function(a,b){return{type:"ordering",axis:"y",gap:60,ordering:b}},F.tree_constraints=function(a,b,c,d){return function(d,e,f){var g=[],h=0,i=F.depth_first_traversal({root:a,tree:b,place:function(a,b,c){if(c.length){var e=c[c.length-1];g.push({left:d.nodeKey.eval(e),right:d.nodeKey.eval(a),axis:"x",gap:h-e.foo_x,equality:!0})}a.foo_x=h},sib:function(){h+=c}});return i(d,e,f),g}},F.tree_positions=function(b,c,d,e,f,g,h){function i(a,b){return(g(a)+g(b))/2; -}var j;g=a.functor(g);var k=F.depth_first_traversal({init:function(){j=e},root:b,row:c,tree:d,place:function(a,b,c){if(c.length){var d=c[c.length-1],e=(g(d)+g(a))/2;j=Math.max(j,d.left_x+e)}a.left_x=j,a.hit_ins=1,a.cola.y=b*h+f},sib:function(a,b,c){var d=i(b,c);a&&(d*=1.5),j+=d},pop:function(a){a.cola.x=(a.left_x+j)/2},skip:function(a,b){a.cola.x=(a.hit_ins*a.cola.x+j)/++a.hit_ins,a.hit_ins===b&&delete a.hit_ins},finish:function(a){a.forEach(function(a){for(var b,c=a.sort(function(a,b){return a.cola.x-b.cola.x}),d=null,e=null,f=0;f0&&--d;var j,k;if(f"+a+""}).direction(f.direction()),f.parent().svg().call(g)),d.on("mouseover.tip",b("content")).on("mouseout.tip",c),e.on("mouseover.tip",b("content")).on("mouseout.tip",c)}var e,f={},g=null;return f.parent=G(null).react(function(a){a?a.on("drawn.tip",function(a,b,c){d(a,c)}):f.parent()&&f.parent().on("drawn.tip",null)}),f.direction=G("n"),f.content=G(function(a,b){b(f.parent()?f.parent().nodeTitle.eval(a):"")}),f.delay=G(0),f},F.tip.table=function(){var b=function(c,d){c=c.orig.value;var e=Object.keys(c).filter(a.functor(b.filter())).filter(function(a){return c[a]}),f=a.select(document.createElement("table")),g=f.selectAll("tr").data(e),h=g.enter().append("tr");h.append("td").text(function(a){return a}),h.append("td").text(function(a){return c[a]}),d(f.node().outerHTML)};return b.filter=G(!0),b},F.select_nodes=function(b){function c(c,e,h){c.cascade(50,!0,d(function(a){return g.indexOf(a.orig.key)>=0},null,b)),e.on("click.select-nodes",function(b){g=[c.nodeKey.eval(b)],c.refresh(e,h),f.node_set_changed(g),a.event.stopPropagation()}),c.svg().on("click.select-nodes",function(a){g=[],c.refresh(e,h),f.node_set_changed(g)});var i=e.data().map(function(a){return a.orig.key}),j=g.length;g=g.filter(function(a){return i.indexOf(a)>=0}),g.length!==j&&f.node_set_changed(g)}function e(a,c,d){c.on("click.select-nodes",null),a.svg().on("click.select-nodes",null),a.cascade(50,!1,b)}var f=F.select_nodes_group("select-nodes-group"),g=[];return F.behavior("select-nodes",{add_behavior:c,remove_behavior:function(a,b,c){e(a,b,c)}})},F.select_nodes_group=function(b){return window.chart_registry.create_type("select-nodes",function(){return a.dispatch("node_set_changed")}),window.chart_registry.create_group("select-nodes",b)},F.highlight_neighbors=function(a){function b(a){a.each(function(a){a.dcg_highlighted=!1})}function c(c,e,f){c.cascade(100,!0,d(null,function(a){return a.dcg_highlighted},a)),e.on("mouseover.highlight-neighbors",function(a){f.each(function(b){b.dcg_highlighted=b.source===a||b.target===a}),c.refresh(e,f)}).on("mouseout.highlight-neighbors",function(a){b(f),c.refresh(e,f)})}function e(c,d,e){d.on("mouseover.highlight-neighbors",null).on("mouseout.highlight-neighbors",null),b(e),c.cascade(100,!1,a)}return F.behavior("highlight-neighbors",{add_behavior:c,remove_behavior:function(a,b,c){e(a,b,c)}})},F.register_highlight_paths_group=function(b){return window.chart_registry.create_type("highlight-paths",function(){return a.dispatch("paths_changed","hover_changed","select_changed")}),window.chart_registry.create_group("highlight-paths",b)},F.highlight_paths=function(a,b,c,e){function f(){v.doRedraw()?v.parent().relayout().redraw():v.parent().refresh()}function g(a,b){r=a,s=b,t=u=null,f()}function h(a){a!==u&&(u=a,f())}function i(a){a!==t&&(t=a,f())}function j(){r={},s={}}function k(a){return function(b){return a.indexOf(b)>=0}}function l(a){var b=k(a);return function(a){return!b(a)}}function m(a,b){return!(!a||!b)&&a.some(k(b))}function n(a,b){return a?b?b.every(k(a))?a.filter(l(b)):a.concat(b.filter(l(a))):a:b}function o(e,f,g,h){e.cascade(200,!0,d(function(a){return!!r[e.nodeKey.eval(a)]},function(a){return!!s[e.edgeKey.eval(a)]},a)).cascade(300,!0,d(function(a){return m(r[e.nodeKey.eval(a)],t)},function(a){return m(s[e.edgeKey.eval(a)],t)},c)).cascade(400,!0,d(function(a){return m(r[e.nodeKey.eval(a)],u)},function(a){return m(s[e.edgeKey.eval(a)],u)},b)),f.on("mouseover.highlight-paths",function(a){q.hover_changed(r[e.nodeKey.eval(a)]||null)}).on("mouseout.highlight-paths",function(a){q.hover_changed(null)}).on("click.highlight-paths",function(a){q.select_changed(n(t,r[e.nodeKey.eval(a)]))}),h.on("mouseover.highlight-paths",function(a){q.hover_changed(s[e.edgeKey.eval(a)]||null)}).on("mouseout.highlight-paths",function(a){q.hover_changed(null)}).on("click.highlight-paths",function(a){q.select_changed(n(t,s[e.nodeKey.eval(a)]))})}function p(d,e,f,g){e.on("mouseover.highlight-paths",null).on("mouseout.highlight-paths",null).on("click.highlight-paths",null),g.on("mouseover.highlight-paths",null).on("mouseout.highlight-paths",null).on("click.highlight-paths",null),j(),d.cascade(200,!1,a).cascade(300,!1,c).cascade(400,!1,b)}var q=F.register_highlight_paths_group(e||"highlight-paths-group");a=a||{},b=b||{},c=c||{};var r={},s={},t=null,u=null,v=F.behavior("highlight-paths",{add_behavior:o,remove_behavior:function(a,b,c,d){return p(a,b,c,d),this},parent:function(a){var b=a.anchorName();q.on("paths_changed."+b,a?g:null),q.on("hover_changed."+b,a?h:null),q.on("select_changed."+b,a?i:null)}});return v.doRedraw=G(!1),v},F.expand_collapse=function(b,c,d,e){function f(a){var b=a.addOrRemoveDef("spike-gradient",!0,"linearGradient");b.attr({x1:"0%",y1:"0%",x2:"100%",y2:"0%",spreadMethod:"pad"}),b.selectAll("stop").data([[0,"black",1],[100,"black","0"]]).enter().append("stop").attr({offset:function(a){return a[0]+"%"},"stop-color":function(a){return a[1]},"stop-opacity":function(a){return a[2]}})}function g(a,b,c,d){var e;switch(c){case"out":e=function(b){return a.edgeSource.eval(b)===d};break;case"in":e=function(b){return a.edgeTarget.eval(b)===d};break;case"both":e=function(b){return a.edgeSource.eval(b)===d||a.edgeTarget.eval(b)===d}}return b.filter(e).size()}function h(a,b,c){if("both"===b)return function(a){return Math.PI*(2*a/c-.5)};var d,e=(c-1)*Math.PI/c;switch(a){case"LR":d=0;break;case"TB":d=Math.PI/2;break;case"RL":d=Math.PI;break;case"BT":d=-Math.PI/2}return"in"===b&&(d+=Math.PI),function(a){return d+e*(-.5+(c>1?a/(c-1):0))}}function i(a,b,c){var d=b.selectAll("g.spikes").data(function(a){return!a.dcg_expand_selected||a.dcg_expanded&&a.dcg_expanded[a.dcg_expand_selected.dir]?[]:[a]});d.exit().remove(),d.enter().insert("g",":first-child").classed("spikes",!0);var e=d.selectAll("rect.spike").data(function(b){for(var c=(a.nodeKey.eval(b),b.dcg_expand_selected.dir),d=b.dcg_expand_selected.n,e=h(a.rankdir(),c,d),f=Array(d),g=0;gd.cola.y?"out":"in";case"BT":return hd.cola.x?"out":"in";case"RL":return g2)throw new Error("there are only two directions to expand in");return F.behavior("expand-collapse",{add_behavior:m,first:f,remove_behavior:n})},F.load_graph=function(){function b(a){return a?a.replace(/\?.*/,""):null}var c,d,e;if(c=arguments[0],3===arguments.length)d=arguments[1],e=arguments[2];else{if(2!==arguments.length)throw new Error("need two or three arguments");e=arguments[1]}d?queue().defer(a.json,c).defer(a.json,d).await(function(a,b,c){a?e(a,null):e(null,{nodes:b.results,edges:c.results})}):/\.json$/.test(b(c))?a.json(c,e):/\.gv|\.dot$/.test(b(c))&&a.text(c,function(a,b){if(a)return void e(a,null);var c=graphlibDot.parse(b),d=c.nodes(),f=new Array(d.length);d.forEach(function(a,b){var e=f[b]=c._nodes[d[b]];e.id=b,e.name=a});var g=c.edges(),h=[];g.forEach(function(a){var b=c._edges[a];h.push({source:c._nodes[b.u].id,target:c._nodes[b.v].id,sourcename:b.u,targetname:b.v})});var i={nodes:f,links:h};e(null,i)})},F.munge_graph=function(a,b,c,d){function e(a,b){return b.filter(function(b){return!!a[b]})}var f,g,h=b||"name",i=c||"sourcename",j=d||"targetname";if(!E(a)){var k=["database","response"],l=k.findIndex(function(b){return a[b]&&E(a[b])});if(l<0)throw new Error("couldn't find the data!");a=a[k[l]]}g=a.edges||a.links,f=a.nodes||a.vertices;var m=g[0];if(void 0===m[i]){var n=c?[c]:["source_ecomp_uid","node1","source","tail"],o=d?[d]:["target_ecomp_uid","node2","target","head"],p=["edge"];if(m.node0&&m.node1)i="node0",j="node1";else{var q=e(m,n);if(!q.length){if(l=p.findIndex(function(a){return m[a]&&e(m[a],n).length}),l<0)throw c?new Error("sourceattr "+i+" didn't work"):new Error("didn't find any source attr");g=g.map(function(a){return a[p[l]]}),m=g[0],q=e(m,n)}if(q.length>1&&console.warn("found more than one possible source attr",q),i=q[0],q=e(m,o),!q.length)throw d&&!m[d]?new Error("targetattr "+j+" didn't work"):new Error("didn't find any target attr");q.length>1&&console.warn("found more than one possible target attr",q),j=q[0]}}var r=f[0];if(void 0===r[h]){var s=b?[b]:["ecomp_uid","id","_id"],t=["vertex"];if(q=e(r,s),!q.length){if(l=t.findIndex(function(a){return r[a]&&e(r[a],s).length}),l<0)throw b?new Error("nodekeyattr "+h+" didn't work"):new Error("couldn't find the node data");f=f.map(function(a){return a[t[l]]}),r=f[0],q=e(r,s)}q.length>1&&console.warn("found more than one possible node key attr",q),h=q[0]}return{nodes:f,edges:g,nodekeyattr:h,sourceattr:i,targetattr:j}},F.flat_group=function(){function a(a){return{all:function(){return a.all().filter(function(a){return null!==a.value})}}}function c(b,c){var e=b.dimension(c);return{crossfilter:b,dimension:e,group:a(e.group().reduce(d.add,d.remove,d.init))}}var d={add:function(a,b){return b},remove:function(){return null},init:function(){return null}};return{make:function(a,d){var e=b(a);return c(e,d)},another:function(a,b){return c(a,b)}}}(),F.convert_nest=function(a,b,d,e,f,g,j){j=j||{};var k=Object.keys(j).length;if(b.length){var l=b.shift(),m=[],n=[],o=a.map(function(a){j[l]=a.key;var c=i(),o=h(j);if(o[d]=c,o.name=l+":"+a.key,o._level=k+1,m.push(o),g){var p={};p[e]=g,p[f]=c,n.push(p)}var q=F.convert_nest(a.values,b.slice(0),d,e,f,c,h(j));return q});return{nodes:Array.prototype.concat.apply(m,o.map(c.pluck("nodes"))),edges:Array.prototype.concat.apply(n,o.map(c.pluck("edges")))}}return{nodes:a.map(function(a){return a._level=k+1,a}),edges:a.map(function(a){var b={};return b[e]=g,b[f]=a[d],b})}},F.convert_adjacency_list=function(a,b,c){var d=Array.prototype.concat.apply([],a.map(function(a){return a[b.adjacencies].map(function(d){var e={};return c.edgeKey&&(e[c.edgeKey]=i()),e[c.edgeSource]=a[b.nodeKey],e[c.edgeTarget]=b.targetKey?d[b.targetKey]:d,c.adjacency&&(e[c.adjacency]=d),e})}));return{nodes:a,edges:d}},F.path_reader=function(a){function b(a,b,c){g.elementList.eval(a).forEach(function(d){var e,f;switch(g.elementType.eval(d)){case"node":e=g.nodeKey.eval(d),f=b[e]=b[e]||[];break;case"edge":e=g.edgeSource.eval(d)+"-"+g.edgeTarget.eval(d),f=c[e]=c[e]||[]}f.push(a)})}var c,d,e,f=F.register_highlight_paths_group(a||"highlight-paths-group"),g={pathList:G(H,!1),timeRange:G(null,!1),elementList:G(H,!1),elementType:G(null,!1),nodeKey:G(null,!1),edgeSource:G(null,!1),edgeTarget:G(null,!1),clear:function(){f.paths_changed({},{},[])},data:function(a){var h,i={},j={},k=[];g.pathList.eval(a).forEach(function(a){if(a._range=g.timeRange.eval(a)){if(h===!1)throw new Error("can't have a mix of ranged and non-ranged paths");h=!0}else{if(h===!0)throw new Error("can't have a mix of ranged and non-ranged paths");h=!1,b(a,i,j)}k.push(a)}),h?(c=k.map(function(a){var b=[a._range[0].getTime(),a._range[1].getTime()];return b.path=a,b}),d=lysenkoIntervalTree(c),e&&this.setTime(e)):(c=null,d=null,f.paths_changed(i,j,k))},getIntervals:function(){return c},setTime:function(a){if(a&&d){var c=[],g={},h={};d.queryPoint(a.getTime(),function(a){c.push(a.path),b(a.path,g,h)}),f.paths_changed(g,h,c)}e=a}};return g},F.path_selector=function(b,d,e,f){function g(a){return function(b){return!!a&&a.indexOf(b)>=0}}function h(a){var b=g(a);return function(a){return!b(a)}}function i(a,b){return a?b?b.every(g(a))?a.filter(h(b)):a.concat(b.filter(h(a))):a:b}function j(a){var b=n.selectAll("span.path-selector").data(a);b.enter().append("span").attr("class","path-selector").style({"border-width":"1px","border-style":"solid","border-color":"grey","border-radius":"4px",display:"inline-block",padding:"4px",cursor:"pointer",margin:"5px"}),b.exit().transition(1e3).attr("opacity",0).remove(),b.text(function(a,b){return"path "+(b+1)+" ("+d.elementList.eval(a).length+")"}).on("mouseover",function(a){m.hover_changed([a])}).on("mouseout",function(a){m.hover_changed(null)}).on("click",function(a){m.select_changed(i(q,[a]))});var c=n.selectAll("span.no-paths").data(0===a.length?[0]:[]);c.exit().remove(),c.enter().append("span").attr("class","no-paths"),c.classed("error",!!r.error_text()).text(r.error_text()||(r.queried()?r.zero_text():r.default_text()))}function k(){var a=g(p);n.selectAll("span.path-selector").style({"border-color":function(b,c){return a(b)?"#e41a1c":"grey"},"border-width":function(b,c){return(a(b)?2:1)+"px"},padding:function(b,c){return(a(b)?3:4)+"px"}})}function l(){var a=g(q);n.selectAll("span.path-selector").style({"background-color":function(b,c){return a(b)?"#1c1ae6":"white"},color:function(b,c){return a(b)?"white":"black"}})}var m=F.register_highlight_paths_group(e||"highlight-paths-group"),n=a.select(b),o=[],p=null,q=null;m.on("paths_changed.selector",function(a,b,c){p=q=null,o=c,r.redraw()}).on("hover_changed.selector",function(a){p=a,k()}).on("select_changed.selector",function(a){q=a,l()});var r={default_text:G("Nothing here"),zero_text:G("No paths"),error_text:G(null),queried:G(!1),redraw:function(){j(o),k(),l()},render:function(){return this.redraw(),this}};return c.registerChart(r,f),r},F.node_name=function(a){if(a<26)return String.fromCharCode(97+a);if(a<52)return String.fromCharCode(65+a-26);if(a<2704)return F.node_name(Math.floor(a/52))+F.node_name(a%52);throw new Error("no, that's too large")},F.node_object=function(a,b){return b=b||{},_.extend({id:a,name:F.node_name(a)},b)},F.edge_object=function(a,b,c,d){return d=d||{},_.extend({source:b,target:c,sourcename:a(b),targetname:a(c)},d)},F.generate=function(a,b,c,d){var e,f,g,h,i=c.nodePrefix||"",j=function(a){return e[a].name},k=b[0],l=c.linkLength||30;switch(a){case"clique":case"cliquestf":for(e=new Array(k),f=[],g=0;gb&&g.length>0&&(h.push(g),g=""),g+=e,i=c.lastIndex;while(null!==d);return h.push(g),h}},F.build_type_graph=function(a,b,c,d,e,f){var g={},h={},i={};return a.forEach(function(a){g[c(a)]=a;var b=d(a);h[b]||(h[b]={type:b})}),b.forEach(function(a){var b,c,h=e(a),j=f(a);if(!(b=g[h]))throw new Error("source key "+h+" not found!");if(!(c=g[j]))throw new Error("target key "+j+" not found!");var k=d(b)+"/"+d(c);i[k]||(i[k]={type:k,source:d(b),target:d(c)})}),{nodes:Object.keys(h).map(function(a){return h[a]}),edges:Object.keys(i).map(function(a){return i[a]})}},F.d3=a,F.crossfilter=b,F.dc=c,F}if("function"==typeof define&&define.amd)define(["d3","crossfilter","dc"],a);else if("object"==typeof module&&module.exports){var b=require("d3"),c=require("crossfilter");"function"!=typeof c&&(c=c.crossfilter);var d=require("dc");module.exports=a(b,c,d)}else this.dc_graph=a(d3,crossfilter,dc)}(); +!function(){function a(a,b,c){"use strict";function d(a){return a.orig}function e(a){return a}function f(a,b){var c=J(b),d=function(){return arguments.length?(console.warn(a),c.apply(J,arguments),this):c()};return["cascade","_eval","eval","react"].forEach(function(a){d[a]=c[a]}),d}function g(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})}function h(a,b,c){function d(a,b){return function(c,d){return a(c)?b(c):d()}}var e={};for(var f in c)/^node/.test(f)?a&&(e[f]=d(a,j(c[f]))):/^edge/.test(f)?b&&(e[f]=d(b,j(c[f]))):console.error('only know how to deal with properties that start with "node" or "edge"');return e}function i(a,b){return function(){return a(b.apply(null,arguments))}}function j(a){return I.functor_wrap(a,d)}function k(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function l(a,b,c){for(var d=["M",a[0].x,",",a[0].y],e=b,f=!1,g=1;g=c){if(!o(c,i,a))return!1}else if(!o(a,i,c))return!1;if(b>=d){if(!o(d,j,b))return!1}else if(!o(b,j,d))return!1;if(e>=g){if(!o(g,i,e))return!1}else if(!o(e,i,g))return!1;if(f>=h){if(!o(h,j,f))return!1}else if(!o(f,j,h))return!1;return{x:i,y:j}}function q(a,b,c,d,e){for(var f=0;f=0)throw new Error("f(a) must be less than 0");if(a(c).val<=0)throw new Error("f(b) must be greater than 0");for(;;){if(!--d)throw new Error("patience ran out");var e=(b+c)/2,f=a(e),g=f.val;if(Math.abs(g)<.5)return f;g>0?c=e:b=e}}function B(a,b,c,d,e,f,g,h,i,j,k,l){var m,n,o,p,q,s;if(h){var t,u,v=function(b,c){return r(a,b,1e3*Math.cos(c),1e3*Math.sin(c))},w=function(a,b,c){return function(d){var e=v(a,d);return e?{port:e,val:Math.hypot(e.x-b.x,e.y-b.y)-c,ang:d}:{port:{x:0,y:0},val:0,ang:d}}},x=Math.atan2(h.sourcePort.y,h.sourcePort.x),y=Math.atan2(h.targetPort.y,h.targetPort.x);try{t=A(w(b,h.sourcePort,j),x,x+2*i*j/k)}catch(a){t={ang:x,port:h.sourcePort}}try{u=A(w(c,h.targetPort,j),y,y-2*i*j/k)}catch(a){u={ang:y,port:h.targetPort}}o=t.port,p=u.port;var z=Math.hypot(o.x,o.y),B=Math.hypot(p.x,p.y),C=z+k/2,D=B+l/2,E=d+C*Math.cos(t.ang),F=e+C*Math.sin(t.ang),G=f+D*Math.cos(u.ang),H=g+D*Math.sin(u.ang);q=[{x:d+o.x,y:e+o.y},{x:E,y:F},{x:G,y:H},{x:f+p.x,y:g+p.y}],s=3}else m=f-d,n=g-e,o=r(a,b,m,n),p=r(a,c,-m,-n),o||(o={x:0,y:0}),p||(p={x:0,y:0}),q=[{x:d+o.x,y:e+o.y},{x:f+p.x,y:g+p.y}],s=1;return{sourcePort:o,targetPort:p,points:q,bezDegree:s}}function C(a,b){for(var c=[],d=1;da)return g.splice(c,0,{n:a,f:b}),h}return g.push({n:a,f:b}),h},h._eval=function(a,c){if(0!==c&&g.length){var d=g[c-1];return d.f(a,function(){return h._eval(a,c-1)})}return I.functor_wrap(h(),b)(a)},h.eval=function(a){return h._eval(a,g.length)},h.react=function(a){return arguments.length?(f=a,this):f},h};I.functor_wrap=function(a,b){return"function"==typeof a?b?function(c){return a(b(c))}:a:function(){return a}};var K={1:"L",2:"Q",3:"C"};Math.hypot=Math.hypot||function(){for(var a=0,b=arguments.length,c=0;c0)for(var d in c)if(c[d].src&&c[d].src.match(new RegExp(b+"$"))){a=c[d].src.replace(new RegExp("(.*)"+b+"$"),"$1");break}}return a}}();I.depth_first_traversal=function(a){return function(b,c){function d(b,c){var e=a.nodeid(b);return j[e]?void(a.skip&&a.skip(b,f[e])):(i[c]||(i[c]=[]),a.place&&a.place(b,c,i[c]),i[c].push(b),j[e]=!0,g[e]&&g[e].forEach(function(b,f){var i=h[a.targetid(b)];f&&a.sib&&a.sib(!1,h[a.targetid(g[e][f-1])],i),a.push&&a.push(),d(i,c+1)}),void(a.pop&&a.pop(b)))}a.init&&a.init(),a.tree&&(c=c.filter(function(b){return a.tree(b)}));var e,f={},g=c.reduce(function(b,c){var d=a.sourceid(c),e=a.targetid(c);return b[d]||(b[d]=[]),b[d].push(c),f[e]=(f[e]||0)+1,b},{}),h=b.reduce(function(b,c){var d=a.nodeid(c);return b[d]=c,b},{}),i=[],j={};a.root?e=b.filter(function(b){return a.root(b)}):(e=b.filter(function(b){return!f[a.nodeid(b)]}),b.length&&!e.length&&(e=[b[0]])),e.forEach(function(b,c){c&&a.sib&&a.sib(!0,e[c-1],b),a.push&&a.push(),d(b,a.row?a.row(b):0)}),a.finish(i)}};var M=1e-7,N={ellipse:function(){return{shape:"ellipse"}},egg:function(){return{shape:"polygon",sides:100,distortion:-.25}},triangle:function(){return{shape:"polygon",sides:3}},rectangle:function(){return{shape:"polygon",sides:4}},diamond:function(){return{shape:"polygon",sides:4,rotation:45}},trapezium:function(){return{shape:"polygon",sides:4,distortion:-.5}},parallelogram:function(){return{shape:"polygon",sides:4,skew:.5}},pentagon:function(){return{shape:"polygon",sides:5}},hexagon:function(){return{shape:"polygon",sides:6}},septagon:function(){return{shape:"polygon",sides:7}},octagon:function(){return{shape:"polygon",sides:8}},invtriangle:function(){return{shape:"polygon",sides:3,rotation:180}},invtrapezium:function(){return{shape:"polygon",sides:4,distortion:.5}},square:function(){return{shape:"polygon",sides:4}},polygon:function(a){return{shape:"polygon",sides:a.sides,skew:a.skew,distortion:a.distortion,rotation:a.rotation}}};I.available_shapes=function(){var a=Object.keys(N);return a.slice(0,a.length-1)};var O={shape:"ellipse"};I.diagram=function(g,h){function k(a){return function(b){ga.layoutEngine()||ga.layoutAlgorithm("cola",!0),console.warn('Warning: dc_graph.diagram."'+a+'"is deprecated. Call the corresponding method on the layout engine instead.');var c=ga.layoutEngine();return c.getEngine&&(c=c.getEngine()),c[a](b),this}}function n(){ga.layoutEngine()||ga.layoutAlgorithm("cola",!0),ga.layoutEngine().init({width:ga.width(),height:ga.height()})}function o(a){return!!a.source&&!!a.target}function p(){return"none"!==ga.stageTransitions()?ga.transitionDuration()/2:ga.transitionDuration()}function q(a){return"none"===ga.stageTransitions()||"modins"===ga.stageTransitions()==!a?0:ga.transitionDuration()/2}function r(b,c){c.attr("stroke",ga.edgeStroke.eval).attr("stroke-width",ga.edgeStrokeWidth.eval).attr("marker-end",function(a){var b=ga.edgeArrowhead.eval(a),c=R(a,"head",b);return c?"url(#"+c+")":null}).attr("marker-start",function(a){var b=ga.edgeArrowtail.eval(a),c=R(a,"tail",b);return b?"url(#"+c+")":null}).each(function(b){a.selectAll("#"+ga.arrowId(b,"head")+",#"+ga.arrowId(b,"tail")).attr("fill",ga.edgeStroke.eval(b))}),ga._updateNode(b)}function s(a){ma.end(a),sa=!1,va&&(va=!1,window.setTimeout(function(){ga.isRunning()||ga.redraw()},0))}function x(a,b,c,d,e,f){if(!a.ports[b]){var g=a.source.dcg_ry+ga.nodeStrokeWidth.eval(a.source)/2,h=a.target.dcg_ry+ga.nodeStrokeWidth.eval(a.target)/2;a.ports[b]=new Array(a.ports.n);for(var i=a.ports.rev[a.parallel],j=0;j2?j-2:0].path:null,n=B(ga,a.source,a.target,c,d,e,f,m,k,ga.parallelEdgeOffset(),g,h);a.ports.rev[j]!==i&&n.points.reverse();var o=(n.points[0],n.points[n.points.length-1]),p=E(n.points,.75);a.ports[b][j]={path:n,orient:Math.atan2(o.y-p.y,o.x-p.x)+"rad"}}}return a.ports[b][a.parallel].path}function y(a){x(a,"old",a.source.prevX||a.source.cola.x,a.source.prevY||a.source.cola.y,a.target.prevX||a.target.cola.x,a.target.prevY||a.target.cola.y)}function A(a){var b=x(a,"new",a.source.cola.x,a.source.cola.y,a.target.cola.x,a.target.cola.y),c=b.points[0],d=b.points[b.points.length-1];a.length=Math.hypot(d.x-c.x,d.y-c.y)}function C(a){return function(b){var c=b.ports[a][b.parallel].path;return l(c.points,c.bezDegree)}}function D(a){return function(b){var c=b.ports[a][b.parallel].path,d=b.target.cola.x=0){var k=e/d,l=c/b,m=l2)throw new Error("align_ expecting 0-2 sides, not "+n.length);var o=T();i=ba.translate(),j=ba.scale(),n.forEach(function(a){switch(a){case"l":i[0]=U(i,o.left);break;case"t":i[1]=V(i,o.top);break;case"r":i[0]=W(i,o.right);break;case"b":i[1]=X(i,o.bottom);break;default:throw new Error("align_ expecting l t r or b, not '"+a+"'")}})}else if("function"==typeof h){var p=h(b,c,d,e);f=p.pAR,i=p.translate,j=p.scale,a=p.viewBox}else{if("string"!=typeof h)throw new Error("unknown fitStrategy type "+typeof h);f=ga.fitStrategy()}void 0!==f&&(a||(a=[wa.left,wa.top,b,c].join(" ")),ha.attr({viewBox:a,preserveAspectRatio:f})),ba.translate(i).scale(j).event(ha)}}function Q(b,c,d,e,f,g,h,i,j,k){console.assert(d.data().every(o));var l={};c.each(function(a){l[ga.nodeKey.eval(a)]=!0}).attr("transform",function(a){return"translate("+a.cola.x+","+a.cola.y+")"});var m=b.transition().duration(p()).delay(function(a){return q(l[ga.nodeKey.eval(a)])}).attr("opacity",ga.nodeOpacity.eval).attr("transform",function(a){return"translate("+a.cola.x+","+a.cola.y+")"}).each("end.record",function(a){a.prevX=a.cola.x,a.prevY=a.cola.y});d.each(function(a){a.ports.new=null,a.ports.old=null});var n={};e.each(function(a){n[ga.edgeKey.eval(a)]=!0}).each(function(b){var c;"modins"===ga.stageTransitions()?(A(b),c="new"):(y(b),c="old"),ga.edgeArrowhead.eval(b)&&a.select("#"+ga.arrowId(b,"head")).attr("orient",function(){return b.ports[c][b.parallel].orient})}).attr("d",C("modins"===ga.stageTransitions()?"new":"old"));var r=d.each(A).each(function(b){ga.edgeArrowhead.eval(b)&&a.select("#"+ga.arrowId(b,"head")).transition().duration(p()).delay(q(!1)).attr("orient",function(){return b.ports.new[b.parallel].orient})}).transition().duration(p()).delay(function(a){return q(n[ga.edgeKey.eval(a)])}).attr("opacity",ga.edgeOpacity.eval).attr("d",function(a){var b="insmod"===ga.stageTransitions()&&n[ga.edgeKey.eval(a)]?"old":"new";return C(b)(a)});k.attr("d",D("modins"===ga.stageTransitions()?"new":"old"));var t=j.transition().duration(p()).delay(function(a){return q(n[ga.edgeKey.eval(a)])}).attr("opacity",ga.edgeOpacity.eval).attr("d",function(a){var b="insmod"===ga.stageTransitions()&&n[ga.edgeKey.eval(a)]?"old":"new";return D(b)(a)});"insmod"===ga.stageTransitions()&&(p()>=50?(r=r.transition().duration(p()).attr("d",C("new")),t=t.transition().duration(p()).attr("d",D("new"))):(r.attr("d",C("new")),t.attr("d",C("new")))),ga.showLayoutSteps()||F([m,r,t],function(){s(!0)}),f.attr("d",C("new"))}function R(a,b,c){var d=ga.arrowId(a,b),e=ga.addOrRemoveDef(d,!!c,"svg:marker");return c&&e.attr("viewBox","0 -5 10 10").attr("refX",ra[c].refX).attr("refY",ra[c].refY).attr("markerUnits","userSpaceOnUse").attr("markerWidth",ra[c].width*ga.edgeArrowSize.eval(a)).attr("markerHeight",ra[c].height*ga.edgeArrowSize.eval(a)).attr("stroke",ga.edgeStroke.eval(a)).attr("fill",ga.edgeStroke.eval(a)).call(ra[c].drawFunction),c?d:null}function S(a,b){ta=a,ua=b,ja.attr("transform","translate("+a+") scale("+b+")")}function T(){return{left:wa.left-ga.margins().left,top:wa.top-ga.margins().top,right:wa.right+ga.margins().right,bottom:wa.bottom+ga.margins().bottom}}function U(a,b){return a[0]-ca(b)+ca.range()[0]}function V(a,b){return a[1]-da(b)+da.range()[0]}function W(a,b){return a[0]-ca(b)+ca.range()[1]}function X(a,b){return a[1]-da(b)+da.range()[1]}function Y(){var b=a.event.translate;if(ga.restrictPan()){var c,d=ca.domain(),e=da.domain(),f=T(),g=f.leftga.timeLimit())&&(console.log("cancelled"),ga.layoutEngine().stop())}).on("end",function(a,b){ga.showLayoutSteps()?s(!0):(ga.initialOnly()||c(a,b),Q(C,D,u,v,w,x,y,z,A,B));var d;switch(ga.autoZoom()){case"always":d=!0;break;case"once":d=!0,ga.autoZoom(null);break;default:d=!1}N(C,u),d&&P()}).on("start",function(){console.log("algo "+ga.layoutEngine().layoutAlgorithm()+" started."),ma.start()}),ga.initialOnly()?ga.layoutEngine().dispatch().end(g,h):(ma.start(),ga.layoutEngine().data(g.map(function(a){return a.cola}),J.map(function(a){return a.cola}),H,{groupConnected:ga.groupConnected()}),ga.layoutEngine().start({initialUnconstrainedIterations:10,initialUserConstraintIterations:20,initialAllConstraintsIterations:20})),this},ga.refresh=function(b,c,d,e,f){b=b||ka.selectAll(".node"),c=c||la.selectAll(".edge"),r(b,c),d=d||la.selectAll(".edge-hover"),e=e||la.selectAll(".edge-label"),f=f||ia.selectAll("path.edge-label-path");var g=a.select(null);Q(b,g,c,g,d,g,e,g,f,g)};var wa;return ga.render=function(){return ga.initLayoutOnRedraw()||n(),ga.resetSvg(),ja=ha.append("g"),la=ja.append("g"),ka=ja.append("g"),ga.legend()&&ga.legend().render(),ga.redraw()},ga.on=function(a,b){return ma.on(a,b),this},ga.getStats=function(){return pa},ga.select=function(a){return ga.root().select(a)},ga.selectAll=function(a){return ga.root()?ga.root().selectAll(a):null},ga.svg=function(a){return arguments.length?(ha=a,ga):ha},ga.resetSvg=function(){return ga.select("svg").remove(),$()},ga.redrawGroup=function(){c.redrawAll(h)},ga.renderGroup=function(){c.renderAll(h)},ga.defineArrow=function(a,b,c,d,e,f){return ra[a]={name:a,width:b,height:c,refX:d,refY:e,drawFunction:f},ga},ga.addOrRemoveDef=function(a,b,c){var d=b?[0]:[],e=ia.selectAll("#"+a).data(d),f=e.enter().append(c).attr("id",a);return e.exit().remove(),f},ga.invertCoord=function(a){return[ca.invert(a[0]),da.invert(a[1])]},ga.defineArrow("vee",12,12,10,0,function(a){a.append("svg:path").attr("d","M0,-5 L10,0 L0,5 L3,0").attr("stroke-width","0px")}),ga.defineArrow("dot",7,7,0,0,function(a){a.append("svg:circle").attr("r",5).attr("cx",5).attr("cy",0).attr("stroke-width","0px")}),ga.anchor=function(b,d){if(!arguments.length)return ea;if(!b)throw new c.errors.BadArgumentException("parent must be defined");return ea=b.select&&b.classed?b.node():b,ga.root(a.select(ea)),ga.root().classed(I.constants.CHART_CLASS,!0),c.registerChart(ga,d),fa=d,ga},ga.anchorName=function(){var a=ga.anchor();return a&&a.id?a.id:a&&a.replace?a.replace("#",""):"dc-graph"+ga.chartID()},ga.anchor(g,h)};var P={};I.webworker_layout=function(b){var c=a.dispatch("init","start","tick","end"),d=F(b.layoutAlgorithm()),e={};d.layouts[b.layoutId()]=e,e.parent=function(a){b.parent&&b.parent(a)},e.init=function(a){return a=b.optionNames().reduce(function(a,c){return a[c]=b[c](),a},a),d.worker.postMessage({command:"init",args:{layoutId:b.layoutId(),options:a}}),this},e.data=function(a,c,e,f){d.worker.postMessage({command:"data",args:{layoutId:b.layoutId(),nodes:a,edges:c,constraints:e,options:f}})},e.start=function(a){d.worker.postMessage({command:"start",args:{layoutId:b.layoutId(),options:a}})},e.stop=function(){return d.worker.postMessage({command:"stop",args:{layoutId:b.layoutId()}}),this},e.getEngine=function(){return b};var f=["layoutAlgorithm","populateLayoutNode","populateLayoutEdge","rankdir","ranksep"];return f.forEach(function(a){e[a]=function(){var c=b[a].apply(b,arguments);return arguments.length?this:c}}),e.on=function(a,b){return c.on(a,b),this},e.dispatch=function(){return c},e},I.graphviz_attrs=function(){return{rankdir:J("TB"),ranksep:J(40)}},I.cola_layout=function(b){function c(a){switch(j=cola.d3adaptor().avoidOverlaps(!0).size([a.width,a.height]).handleDisconnected(a.handleDisconnected),j.tickSize&&j.tickSize(a.tickSize),a.lengthStrategy){case"symmetric":j.symmetricDiffLinkLengths(a.baseLength);break;case"jaccard":j.jaccardLinkLengths(a.baseLength);break;case"individual":j.linkDistance(function(b){return b.dcg_edgeLength||a.baseLength});break;case"none":}a.flowLayout&&j.flowLayout(a.flowLayout.axis,a.flowLayout.minSeparation)}function d(a,b,c,d){function e(a){k[a](f,g.map(function(a){return{dcg_edgeKey:a.dcg_edgeKey}}))}var f=m(l,a,function(a){return a.dcg_nodeKey},function(a,b){a.dcg_nodeKey=b.dcg_nodeKey,a.width=b.width,a.height=b.height,a.fixed=!!b.dgc_nodeFixed,"object"==typeof b.dgc_nodeFixed?(a.x=b.dgc_nodeFixed.x, +a.y=b.dgc_nodeFixed.y):(void 0!==b.x&&(a.x=b.x),void 0!==b.y&&(a.y=b.y))}),g=m(n,b,function(a){return a.dcg_edgeKey},function(a,b){a.dcg_edgeKey=b.dcg_edgeKey,a.source=l[b.dcg_edgeSource],a.target=l[b.dcg_edgeTarget],a.dcg_edgeLength=b.dcg_edgeLength});f.forEach(function(a,b){a.index=b});var h=null;if(d.groupConnected){var i=cola.separateGraphs(f,g);h=i.map(function(a){return{leaves:a.array.map(function(a){return a.index})}})}j.on("tick",function(){e("tick")}).on("start",function(){k.start()}).on("end",function(){e("end")}),j.nodes(f).links(g).constraints(c).groups(h)}function e(a){j.start(a.initialUnconstrainedIterations,a.initialUserConstraintIterations,a.initialAllConstraintsIterations,a.gridSnapIterations)}function f(){j.stop()}var h,i=b||g(),j=null,k=a.dispatch("tick","start","end"),l={},n={},o=I.graphviz_attrs(),p=Object.keys(o);o.rankdir(null);var q=Object.assign(o,{layoutAlgorithm:function(){return"cola"},layoutId:function(){return i},parent:J(null),on:function(a,b){return k.on(a,b),this},init:function(a){return this.optionNames().forEach(function(b){a[b]=a[b]||this[b]()}.bind(this)),c(a),this},data:function(a,b,c,e){d(a,b,c,e)},start:function(a){e(a)},stop:function(){f()},optionNames:function(){return["handleDisconnected","lengthStrategy","baseLength","flowLayout","tickSize"].concat(p)},populateLayoutNode:function(){},populateLayoutEdge:function(){},handleDisconnected:J(!0),lengthStrategy:J("symmetric"),baseLength:J(30),flowLayout:function(a){if(!arguments.length){if(h)return h;var b=q.rankdir();if(!b)return null;var c="LR"===b||"RL"===b?"x":"y";return{axis:c,minSeparation:q.ranksep()+2*q.parent().nodeRadius()}}return h=a,this},tickSize:J(1)});return q},I.cola_layout.scripts=["d3.js","cola.js"],I.dagre_layout=function(b){function c(a){k=new dagre.graphlib.Graph({multigraph:!0}),k.setGraph({rankdir:a.rankdir}),k.setDefaultEdgeLabel(function(){return{}})}function d(a,b,c,d){function e(a){l[a](f,g.map(function(a){return{dcg_edgeKey:a.dcg_edgeKey}}))}var f=m(n,a,function(a){return a.dcg_nodeKey},function(a,b){a.dcg_nodeKey=b.dcg_nodeKey,a.width=b.width,a.height=b.height},function(a,b){k.setNode(a,b)},function(a){k.removeNode(a)}),g=m(o,b,function(a){return a.dcg_edgeKey},function(a,b){a.dcg_edgeKey=b.dcg_edgeKey,a.dcg_edgeSource=b.dcg_edgeSource,a.dcg_edgeTarget=b.dcg_edgeTarget},function(a,b,c){k.setEdge(c.dcg_edgeSource,c.dcg_edgeTarget,b)},function(a,b){k.removeEdge(b.dcg_edgeSource,b.dcg_edgeTarget,b.dcg_edgeKey)});h=function(){e("tick")},i=function(){e("end")}}function e(a){l.start(),dagre.layout(k),i()}function f(){}var h,i,j=b||g(),k=null,l=a.dispatch("tick","start","end"),n={},o={},p=I.graphviz_attrs(),q=Object.keys(p);return Object.assign(p,{layoutAlgorithm:function(){return"dagre"},layoutId:function(){return j},on:function(a,b){return l.on(a,b),this},init:function(a){return this.optionNames().forEach(function(b){a[b]=a[b]||this[b]()}.bind(this)),c(a),this},data:function(a,b,c,e){d(a,b,c,e)},start:function(a){e(a)},stop:function(){f()},optionNames:function(){return q},populateLayoutNode:function(){},populateLayoutEdge:function(){}})},I.dagre_layout.scripts=["d3.js","dagre.js"],I.tree_layout=function(b){function c(b){function c(a,b){return(e(a)+e(b))/2}var d,e=a.functor(b.nodeWidth);h=I.depth_first_traversal({nodeid:function(a){return a.dcg_nodeKey},sourceid:function(a){return a.dcg_edgeSource},targetid:function(a){return a.dcg_edgeTarget},init:function(){d=b.offsetX},row:function(a){return a.dcg_rank},place:function(a,c,f){if(f.length){var g=f[f.length-1],h=(e(g)+e(a))/2;d=Math.max(d,g.left_x+h)}a.left_x=d,a.hit_ins=1,a.y=c*b.gapY+b.offsetY},sib:function(a,b,e){var f=c(b,e);a&&(f*=1.5),d+=f},pop:function(a){a.x=(a.left_x+d)/2},skip:function(a,b){a.x=(a.hit_ins*a.x+d)/++a.hit_ins,a.hit_ins===b&&delete a.hit_ins},finish:function(a){a.forEach(function(a){for(var b,d=a.sort(function(a,b){return a.x-b.x}),e=null,f=null,g=0;g0&&--e;var j,k;if(g0&&--d;var j,k;if(f"+a+""}).direction(f.direction()),f.parent().svg().call(g)),d.on("mouseover.tip",b("content")).on("mouseout.tip",c),e.on("mouseover.tip",b("content")).on("mouseout.tip",c)}var e,f={},g=null;return f.parent=J(null).react(function(a){a?a.on("drawn.tip",function(a,b,c){d(a,c)}):f.parent()&&f.parent().on("drawn.tip",null)}),f.direction=J("n"),f.content=J(function(a,b){b(f.parent()?f.parent().nodeTitle.eval(a):"")}),f.delay=J(0),f},I.tip.table=function(){var b=function(c,d){c=c.orig.value;var e=Object.keys(c).filter(a.functor(b.filter())).filter(function(a){return c[a]}),f=a.select(document.createElement("table")),g=f.selectAll("tr").data(e),h=g.enter().append("tr");h.append("td").text(function(a){return a}),h.append("td").text(function(a){return c[a]}),d(f.node().outerHTML)};return b.filter=J(!0),b},I.select_nodes=function(b){function c(c,d,g){c.cascade(50,!0,h(function(a){return f.indexOf(a.orig.key)>=0},null,b)),d.on("click.select-nodes",function(b){f=[c.nodeKey.eval(b)],c.refresh(d,g),e.node_set_changed(f),a.event.stopPropagation()}),c.svg().on("click.select-nodes",function(a){f=[],c.refresh(d,g),e.node_set_changed(f)});var i=d.data().map(function(a){return a.orig.key}),j=f.length;f=f.filter(function(a){return i.indexOf(a)>=0}),f.length!==j&&e.node_set_changed(f)}function d(a,c,d){c.on("click.select-nodes",null),a.svg().on("click.select-nodes",null),a.cascade(50,!1,b)}var e=I.select_nodes_group("select-nodes-group"),f=[];return I.behavior("select-nodes",{add_behavior:c,remove_behavior:function(a,b,c){d(a,b,c)}})},I.select_nodes_group=function(b){return window.chart_registry.create_type("select-nodes",function(){return a.dispatch("node_set_changed")}),window.chart_registry.create_group("select-nodes",b)},I.highlight_neighbors=function(a){function b(a){a.each(function(a){a.dcg_highlighted=!1})}function c(c,d,e){c.cascade(100,!0,h(null,function(a){return a.dcg_highlighted},a)),d.on("mouseover.highlight-neighbors",function(a){e.each(function(b){b.dcg_highlighted=b.source===a||b.target===a}),c.refresh(d,e)}).on("mouseout.highlight-neighbors",function(a){b(e),c.refresh(d,e)})}function d(c,d,e){d.on("mouseover.highlight-neighbors",null).on("mouseout.highlight-neighbors",null),b(e),c.cascade(100,!1,a)}return I.behavior("highlight-neighbors",{add_behavior:c,remove_behavior:function(a,b,c){d(a,b,c)}})},I.register_highlight_paths_group=function(b){return window.chart_registry.create_type("highlight-paths",function(){return a.dispatch("paths_changed","hover_changed","select_changed")}),window.chart_registry.create_group("highlight-paths",b)},I.highlight_paths=function(a,b,c,d){function e(){v.doRedraw()?v.parent().relayout().redraw():v.parent().refresh()}function f(a,b){r=a,s=b,t=u=null,e()}function g(a){a!==u&&(u=a,e())}function i(a){a!==t&&(t=a,e())}function j(){r={},s={}}function k(a){return function(b){return a.indexOf(b)>=0}}function l(a){var b=k(a);return function(a){return!b(a)}}function m(a,b){return!(!a||!b)&&a.some(k(b))}function n(a,b){return a?b?b.every(k(a))?a.filter(l(b)):a.concat(b.filter(l(a))):a:b}function o(d,e,f,g){d.cascade(200,!0,h(function(a){return!!r[d.nodeKey.eval(a)]},function(a){return!!s[d.edgeKey.eval(a)]},a)).cascade(300,!0,h(function(a){return m(r[d.nodeKey.eval(a)],t)},function(a){return m(s[d.edgeKey.eval(a)],t)},c)).cascade(400,!0,h(function(a){return m(r[d.nodeKey.eval(a)],u)},function(a){return m(s[d.edgeKey.eval(a)],u)},b)),e.on("mouseover.highlight-paths",function(a){q.hover_changed(r[d.nodeKey.eval(a)]||null)}).on("mouseout.highlight-paths",function(a){q.hover_changed(null)}).on("click.highlight-paths",function(a){q.select_changed(n(t,r[d.nodeKey.eval(a)]))}),g.on("mouseover.highlight-paths",function(a){q.hover_changed(s[d.edgeKey.eval(a)]||null)}).on("mouseout.highlight-paths",function(a){q.hover_changed(null)}).on("click.highlight-paths",function(a){q.select_changed(n(t,s[d.nodeKey.eval(a)]))})}function p(d,e,f,g){e.on("mouseover.highlight-paths",null).on("mouseout.highlight-paths",null).on("click.highlight-paths",null),g.on("mouseover.highlight-paths",null).on("mouseout.highlight-paths",null).on("click.highlight-paths",null),j(),d.cascade(200,!1,a).cascade(300,!1,c).cascade(400,!1,b)}var q=I.register_highlight_paths_group(d||"highlight-paths-group");a=a||{},b=b||{},c=c||{};var r={},s={},t=null,u=null,v=I.behavior("highlight-paths",{add_behavior:o,remove_behavior:function(a,b,c,d){return p(a,b,c,d),this},parent:function(a){var b=a.anchorName();q.on("paths_changed."+b,a?f:null),q.on("hover_changed."+b,a?g:null),q.on("select_changed."+b,a?i:null)}});return v.doRedraw=J(!1),v},I.expand_collapse=function(b,c,d,e){function f(a){var b=a.addOrRemoveDef("spike-gradient",!0,"linearGradient");b.attr({x1:"0%",y1:"0%",x2:"100%",y2:"0%",spreadMethod:"pad"}),b.selectAll("stop").data([[0,"black",1],[100,"black","0"]]).enter().append("stop").attr({offset:function(a){return a[0]+"%"},"stop-color":function(a){return a[1]},"stop-opacity":function(a){return a[2]}})}function g(a,b,c,d){var e;switch(c){case"out":e=function(b){return a.edgeSource.eval(b)===d};break;case"in":e=function(b){return a.edgeTarget.eval(b)===d};break;case"both":e=function(b){return a.edgeSource.eval(b)===d||a.edgeTarget.eval(b)===d}}return b.filter(e).size()}function h(a,b,c){if("both"===b)return function(a){return Math.PI*(2*a/c-.5)};var d,e=(c-1)*Math.PI/c;switch(a){case"LR":d=0;break;case"TB":d=Math.PI/2;break;case"RL":d=Math.PI;break;case"BT":d=-Math.PI/2}return"in"===b&&(d+=Math.PI),function(a){return d+e*(-.5+(c>1?a/(c-1):0))}}function i(a,b,c){var d=b.selectAll("g.spikes").data(function(a){return!a.dcg_expand_selected||a.dcg_expanded&&a.dcg_expanded[a.dcg_expand_selected.dir]?[]:[a]});d.exit().remove(),d.enter().insert("g",":first-child").classed("spikes",!0);var e=d.selectAll("rect.spike").data(function(b){for(var c=(a.nodeKey.eval(b),b.dcg_expand_selected.dir),d=b.dcg_expand_selected.n,e=h(a.layoutEngine().rankdir(),c,d),f=Array(d),g=0;gd.cola.y?"out":"in";case"BT":return hd.cola.x?"out":"in";case"RL":return g2)throw new Error("there are only two directions to expand in");return I.behavior("expand-collapse",{add_behavior:m,first:f,remove_behavior:n})},I.load_graph=function(){function b(a){return a?a.replace(/\?.*/,""):null}var c,d,e;if(c=arguments[0],3===arguments.length)d=arguments[1],e=arguments[2];else{if(2!==arguments.length)throw new Error("need two or three arguments");e=arguments[1]}d?queue().defer(a.json,c).defer(a.json,d).await(function(a,b,c){a?e(a,null):e(null,{nodes:b.results,edges:c.results})}):/\.json$/.test(b(c))?a.json(c,e):/\.gv|\.dot$/.test(b(c))&&a.text(c,function(a,b){if(a)return void e(a,null);var c=graphlibDot.parse(b),d=c.nodes(),f=new Array(d.length);d.forEach(function(a,b){var e=f[b]=c._nodes[d[b]];e.id=b,e.name=a});var g=c.edges(),h=[];g.forEach(function(a){var b=c._edges[a];h.push({source:c._nodes[b.u].id,target:c._nodes[b.v].id,sourcename:b.u,targetname:b.v})});var i={nodes:f,links:h};e(null,i)})},I.munge_graph=function(a,b,c,d){function e(a,b){return b.filter(function(b){return!!a[b]})}var f,g,h=b||"name",i=c||"sourcename",j=d||"targetname";if(!H(a)){var k=["database","response"],l=k.findIndex(function(b){return a[b]&&H(a[b])});if(l<0)throw new Error("couldn't find the data!");a=a[k[l]]}g=a.edges||a.links,f=a.nodes||a.vertices;var m=g[0];if(void 0===m[i]){var n=c?[c]:["source_ecomp_uid","node1","source","tail"],o=d?[d]:["target_ecomp_uid","node2","target","head"],p=["edge"];if(m.node0&&m.node1)i="node0",j="node1";else{var q=e(m,n);if(!q.length){if(l=p.findIndex(function(a){return m[a]&&e(m[a],n).length}),l<0)throw c?new Error("sourceattr "+i+" didn't work"):new Error("didn't find any source attr");g=g.map(function(a){return a[p[l]]}),m=g[0],q=e(m,n)}if(q.length>1&&console.warn("found more than one possible source attr",q),i=q[0],q=e(m,o),!q.length)throw d&&!m[d]?new Error("targetattr "+j+" didn't work"):new Error("didn't find any target attr");q.length>1&&console.warn("found more than one possible target attr",q),j=q[0]}}var r=f[0];if(void 0===r[h]){var s=b?[b]:["ecomp_uid","id","_id"],t=["vertex"];if(q=e(r,s),!q.length){if(l=t.findIndex(function(a){return r[a]&&e(r[a],s).length}),l<0)throw b?new Error("nodekeyattr "+h+" didn't work"):new Error("couldn't find the node data");f=f.map(function(a){return a[t[l]]}),r=f[0],q=e(r,s)}q.length>1&&console.warn("found more than one possible node key attr",q),h=q[0]}return{nodes:f,edges:g,nodekeyattr:h,sourceattr:i,targetattr:j}},I.flat_group=function(){function a(a){return{all:function(){return a.all().filter(function(a){return null!==a.value})}}}function c(b,c){var e=b.dimension(c);return{crossfilter:b,dimension:e,group:a(e.group().reduce(d.add,d.remove,d.init))}}var d={add:function(a,b){return b},remove:function(){return null},init:function(){return null}};return{make:function(a,d){var e=b(a);return c(e,d)},another:function(a,b){return c(a,b)}}}();var Q=function(a,b,d,e,f,h){if(f=f||0,b.length>(d.valuesByAttr?1:0)){var i=b.shift(),j=[],k=[],l=a.map(function(a){var c=a[d.nestKey],l=d.nestKeysUnique?c:g();if(l){var m;if(d.ancestorKeys?(h=h||{},i&&(h[i]=c),m=Object.assign({},h)):m={},m[d.nodeKey]=l,d.label&&d.labelFun&&(m[d.label]=d.labelFun(c,i,a)),d.level&&(m[d.level]=f+1),j.push(m),e){var n={};n[d.edgeSource]=e,n[d.edgeTarget]=l,k.push(n)}}var o=d.valuesByAttr?a[b[0]]:a.values,p=Q(o,b.slice(0),d,l,f+1,Object.assign({},h));return p});return{nodes:Array.prototype.concat.apply(j,l.map(c.pluck("nodes"))),edges:Array.prototype.concat.apply(k,l.map(c.pluck("edges")))}}return{nodes:a.map(function(a){return a=Object.assign({},a),d.level&&(a[d.level]=f+1),a}),edges:a.map(function(a){var b={};return b[d.edgeSource]=e,b[d.edgeTarget]=a[d.nodeKey],b})}};return I.convert_tree=function(a,b,c){return c=Object.assign({nodeKey:"key",edgeKey:"key",edgeSource:"sourcename",edgeTarget:"targetname",nestKey:"key"},c),Array.isArray(a)?Q(a,b,c,c.root,0,c.inherit):(b=[""].concat(b),Q([a],b,c,c.root,0,c.inherit))},I.convert_nest=function(a,b,c,d,e,f,g){return I.convert_tree(a,b,{nodeKey:c,edgeSource:d,edgeTarget:e,root:f,inherit:g,ancestorKeys:!0,label:"name",labelFun:function(a,b,c){return b+":"+a},level:"_level"})},I.convert_adjacency_list=function(a,b,c){var d=Array.prototype.concat.apply([],a.map(function(a){return a[b.adjacencies].map(function(d){var e={};return c.edgeKey&&(e[c.edgeKey]=g()),e[c.edgeSource]=a[b.nodeKey],e[c.edgeTarget]=b.targetKey?d[b.targetKey]:d,c.adjacency&&(e[c.adjacency]=d),e})}));return{nodes:a,edges:d}},I.path_reader=function(a){function b(a,b,c){h.elementList.eval(a).forEach(function(d){var e,f;switch(h.elementType.eval(d)){case"node":e=h.nodeKey.eval(d),f=b[e]=b[e]||[];break;case"edge":e=h.edgeSource.eval(d)+"-"+h.edgeTarget.eval(d),f=c[e]=c[e]||[]}f.push(a)})}var c,d,f,g=I.register_highlight_paths_group(a||"highlight-paths-group"),h={pathList:J(e,!1),timeRange:J(null,!1),elementList:J(e,!1),elementType:J(null,!1),nodeKey:J(null,!1),edgeSource:J(null,!1),edgeTarget:J(null,!1),clear:function(){g.paths_changed({},{},[])},data:function(a){var e,i={},j={},k=[];h.pathList.eval(a).forEach(function(a){if(a._range=h.timeRange.eval(a)){if(e===!1)throw new Error("can't have a mix of ranged and non-ranged paths");e=!0}else{if(e===!0)throw new Error("can't have a mix of ranged and non-ranged paths");e=!1,b(a,i,j)}k.push(a)}),e?(c=k.map(function(a){var b=[a._range[0].getTime(),a._range[1].getTime()];return b.path=a,b}),d=lysenkoIntervalTree(c),f&&this.setTime(f)):(c=null,d=null,g.paths_changed(i,j,k))},getIntervals:function(){return c},setTime:function(a){if(a&&d){var c=[],e={},h={};d.queryPoint(a.getTime(),function(a){c.push(a.path),b(a.path,e,h)}),g.paths_changed(e,h,c)}f=a}};return h},I.path_selector=function(b,d,e,f){function g(a){return function(b){return!!a&&a.indexOf(b)>=0}}function h(a){var b=g(a);return function(a){return!b(a)}}function i(a,b){return a?b?b.every(g(a))?a.filter(h(b)):a.concat(b.filter(h(a))):a:b}function j(a){var b=n.selectAll("span.path-selector").data(a);b.enter().append("span").attr("class","path-selector").style({"border-width":"1px","border-style":"solid","border-color":"grey","border-radius":"4px",display:"inline-block",padding:"4px",cursor:"pointer",margin:"5px"}),b.exit().transition(1e3).attr("opacity",0).remove(),b.text(function(a,b){return"path "+(b+1)+" ("+d.elementList.eval(a).length+")"}).on("mouseover",function(a){m.hover_changed([a])}).on("mouseout",function(a){m.hover_changed(null)}).on("click",function(a){m.select_changed(i(q,[a]))});var c=n.selectAll("span.no-paths").data(0===a.length?[0]:[]);c.exit().remove(),c.enter().append("span").attr("class","no-paths"),c.classed("error",!!r.error_text()).text(r.error_text()||(r.queried()?r.zero_text():r.default_text()))}function k(){var a=g(p);n.selectAll("span.path-selector").style({"border-color":function(b,c){return a(b)?"#e41a1c":"grey"},"border-width":function(b,c){return(a(b)?2:1)+"px"},padding:function(b,c){return(a(b)?3:4)+"px"}})}function l(){var a=g(q);n.selectAll("span.path-selector").style({"background-color":function(b,c){return a(b)?"#1c1ae6":"white"},color:function(b,c){return a(b)?"white":"black"}})}var m=I.register_highlight_paths_group(e||"highlight-paths-group"),n=a.select(b),o=[],p=null,q=null;m.on("paths_changed.selector",function(a,b,c){p=q=null,o=c,r.redraw()}).on("hover_changed.selector",function(a){p=a,k()}).on("select_changed.selector",function(a){q=a,l()});var r={default_text:J("Nothing here"),zero_text:J("No paths"),error_text:J(null),queried:J(!1),redraw:function(){j(o),k(),l()},render:function(){return this.redraw(),this}};return c.registerChart(r,f),r},I.node_name=function(a){if(a<26)return String.fromCharCode(97+a);if(a<52)return String.fromCharCode(65+a-26);if(a<2704)return I.node_name(Math.floor(a/52))+I.node_name(a%52);throw new Error("no, that's too large")},I.node_object=function(a,b){return b=b||{},_.extend({id:a,name:I.node_name(a)},b)},I.edge_object=function(a,b,c,d){return d=d||{},_.extend({source:b,target:c,sourcename:a(b),targetname:a(c)},d)},I.generate=function(a,b,c,d){var e,f,g,h,i=c.nodePrefix||"",j=function(a){return e[a].name},k=b[0],l=c.linkLength||30;switch(a){case"clique":case"cliquestf":for(e=new Array(k),f=[],g=0;gb&&g.length>0&&(h.push(g),g=""),g+=e,i=c.lastIndex;while(null!==d);return h.push(g),h}},I.build_type_graph=function(a,b,c,d,e,f){var g={},h={},i={};return a.forEach(function(a){g[c(a)]=a;var b=d(a);h[b]||(h[b]={type:b})}),b.forEach(function(a){var b,c,h=e(a),j=f(a);if(!(b=g[h]))throw new Error("source key "+h+" not found!");if(!(c=g[j]))throw new Error("target key "+j+" not found!");var k=d(b)+"/"+d(c);i[k]||(i[k]={type:k,source:d(b),target:d(c)})}),{nodes:Object.keys(h).map(function(a){return h[a]}),edges:Object.keys(i).map(function(a){return i[a]})}},I.d3=a,I.crossfilter=b,I.dc=c,I}if("function"==typeof define&&define.amd)define(["d3","crossfilter","dc"],a);else if("object"==typeof module&&module.exports){var b=require("d3"),c=require("crossfilter");"function"!=typeof c&&(c=c.crossfilter);var d=require("dc");module.exports=a(b,c,d)}else this.dc_graph=a(d3,crossfilter,dc)}(); //# sourceMappingURL=dc.graph.min.js.map \ No newline at end of file diff --git a/dc.graph.min.js.map b/dc.graph.min.js.map index ff6d8262..9fa8d683 100644 --- a/dc.graph.min.js.map +++ b/dc.graph.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["dc.graph.js"],"names":["_dc_graph","d3","crossfilter","dc","conditional_properties","npred","epred","props","_if","pred","curr","o","last","props2","p","test","param","console","error","compose","f","g","apply","arguments","get_original","x","orig","v","dc_graph","functor_wrap","clone","obj","target","i","hasOwnProperty","uuid","replace","c","r","Math","random","toString","generate_path","pts","bezDegree","close","cats","y","remain","hasNaN","length","isNaN","push","bez_cmds","log","join","regenerate_objects","preserved","list","key","assign","create","destroy","wrap","k","o1","keep","wlist","map","point_on_ellipse","A","B","dx","dy","tansq","tan","atan2","ret","sqrt","between","a","b","eps","segment_intersection","x1","y1","x2","y2","x3","y3","x4","y4","point_on_polygon","points","x0","y0","next","isect","point_on_shape","chart","d","deltaX","deltaY","dcg_shape","shape","dcg_rx","dcg_ry","dcg_points","elaborate_shape","def","keys","Object","dc_graph_shapes_","_shape","floor","Error","infer_shape","nodeShape","eval","default_shape","abstract","shape_changed","old","sides","skew","distortion","rotation","shape_element","elem","document","createElementNS","fit_shape","bbox","nodeRadius","nodeFitLabel","this","getBBox","fitx","width","height","max","rx","y_over_B","cos","PI","nodePadding","nodeStrokeWidth","rplus","cola","ellipse_attrs","ry","polygon_attrs","align","angles","theta","sin","yext","extent","min","shape_attrs","sel","select","attr","binary_search","patience","val","f_c","fv","abs","draw_edge_to_shapes","source","sx","sy","tx","ty","neighbor","dir","offset","source_padding","target_padding","sp","tp","bss","bst","p_on_s","node","ang","compare_dist","port0","goal","port","hypot","srcang","sourcePort","tarang","targetPort","sdist","tdist","c1dist","c2dist","c1X","c1Y","c2X","c2Y","interpolate","d0","d1","getLevels","t_","bezier_point","q","align_f","axis","type","listname","can_get_graph_from_this","data","nodes","vertices","edges","links","version","constants","CHART_CLASS","property","defaultValue","unwrap","undefined","identity","value","react","cascade","_","n","splice","_eval","1","2","3","Infinity","depth_first_traversal","callbacks","diagram","place_tree","nodeKey","placed","skip","indegree","rows","place","outmap","forEach","e","ei","sib","pop","init","tree","filter","roots","reduce","m","tail","edgeSource","head","edgeTarget","root","ni","row","finish","ellipse","egg","triangle","rectangle","diamond","trapezium","parallelogram","pentagon","hexagon","septagon","octagon","invtriangle","invtrapezium","square","polygon","available_shapes","shapes","slice","parent","chartGroup","initLayout","_worker","Worker","_chart","layoutAlgorithm","args","handleDisconnected","lengthStrategy","baseLength","flowLayout","tickSize","rankdir","postMessage","command","has_source_and_target","transition_duration","stageTransitions","transitionDuration","transition_delay","is_enter","_refresh","edge","edgeStroke","edgeStrokeWidth","name","edgeArrowhead","id","edgeArrow","edgeArrowtail","arrow_id","each","selectAll","arrowId","_updateNode","layout_done","happens","_dispatch","end","_running","_needsRedraw","window","setTimeout","isRunning","redraw","calc_edge_path","age","ports","Array","reversedness","rev","parallel","path","parallelEdgeOffset","reverse","tpos","near","orient","calc_old_edge_path","prevX","prevY","calc_new_edge_path","spos","render_edge_path","render_edge_label_path","endall","transitions","callback","every","transition","size","node_bounds","left","top","right","bottom","union_bounds","b1","b2","point_to_bounds","edge_bounds","new","debug_bounds","bounds","brect","_g","enter","insert","class","fill","stroke","calc_bounds","fitStrategy","restrictPan","_bounds","auto_zoom","viewBox","vwidth","vheight","swidth","sheight","DEBUG_BOUNDS","pAR","amv","fitS","translate","scale","indexOf","sAR","vAR","vrl","margins","match","split","toLowerCase","margined_bounds","_zoom","s","align_left","align_top","align_right","align_bottom","fit","_svg","preserveAspectRatio","event","draw","nodeEnter","edgeEnter","edgeHover","edgeHoverEnter","edgeLabels","edgeLabelsEnter","textPaths","textPathsEnter","assert","nodeEntered","ntrans","duration","delay","nodeOpacity","edgeEntered","edgeKey","etrans","edgeOpacity","when","textTrans","showLayoutSteps","kind","markerEnter","addOrRemoveDef","_arrows","refX","refY","edgeArrowSize","call","drawFunction","globalTransform","pos","_translate","_scale","_xScale","range","_yScale","doZoom","xDomain","domain","yDomain","less1","less2","lessExt","nothing","resizeSvg","w","h","generateSvg","append","_defs","mouseZoomable","linear","behavior","zoom","on","_nodes_snapshot","_edges_snapshot","_anchor","_chartGroup","marginMixin","_nodeLayer","_edgeLayer","dispatch","_nodes","_edges","_stats","_children","empty","autoZoom","zoomToFit","nodeDimension","nodeGroup","edgeDimension","edgeGroup","nodeKeyAccessor","kv","edgeKeyAccessor","sourceAccessor","sourcename","targetAccessor","targetname","nodeRadiusAccessor","nodeStrokeWidthAccessor","nodeStroke","nodeStrokeAccessor","nodeFillScale","nodeFill","nodeFillAccessor","nodeLabel","nodeLabelAccessor","label","nodeLabelFill","nodeLabelFillAccessor","nodeFitLabelAccessor","nodeTitle","nodeTitleAccessor","nodeOrdering","nodeFixed","nodeFixedAccessor","edgeStrokeAccessor","edgeStrokeWidthAccessor","edgeOpacityAccessor","edgeLabel","edgeLabelAccessor","edgeArrowheadAccessor","edgeArrowtailAccessor","edgeIsLayout","edgeIsLayoutAccessor","notLayout","edgeIsShown","edgeLength","edgeDistanceAccessor","distance","deleteDelay","groupConnected","timeLimit","constrain","edgeOrdering","level","add","initLayoutOnRedraw","layoutUnchanged","relayout","initialLayout","initialOnly","induceNodes","legend","l","child","object","edgeId","textpathId","getNode","_enterNode","changedShape","remove","text","tspan","lines","first","line","ofs","exit","stroke-width","startLayout","populate_cola","rnodes","redges","rn","dcg_nodeKey","re","dcg_edgeKey","all","quicksort","by","wnodes","v1","dcg_nodeFixed","wedges","e1","dcg_edgeSource","dcg_edgeTarget","dcg_edgeLength","keeps","index","nnodes","nedges","em","j","opacity","text-anchor","dcg_bbox","drawn","skip_layout","nodes_snapshot","JSON","stringify","edges_snapshot","constraints","offsets","layout_edges","circle_constraints","R","nindices","namef","wheel","wheel_edges","internal","concat","ordered_constraints","sorted","ordering","sort","gap","startTime","Date","now","onmessage","response","elapsed","do_zoom","start","opts","initialUnconstrainedIterations","initialUserConstraintIterations","initialAllConstraintsIterations","refresh","nullSel","render","resetSvg","getStats","svg","redrawGroup","redrawAll","renderGroup","renderAll","defineArrow","drawf","whether","tag","selEnter","invertCoord","clientCoord","invert","marker","anchor","errors","BadArgumentException","classed","registerChart","anchorName","chartID","_items","_legend","nodeWidth","nodeHeight","exemplars","item","constraint_pattern","pattern","types","rules","partition","typename","extract","n2","disable","rule","produce","members","t","tname","edge_rules","type_rules","constraint","gap_y","equality","gap_x","align_y","align_x","order_x","order_y","tree_constraints","rootf","treef","xgap","ygap","dfs","foo_x","tree_positions","rowf","ofsx","ofsy","nwidth","best_dist","functor","left_x","hit_ins","isroot","want","badi","badl","limit","extra","event_namespace","handlers","_behavior","ehover","add_behavior","rest","remove_behavior","tip","fetch_and_show_content","fetcher","_tip","content","_d3tip","show","clearTimeout","_timeout","hide_tip","hide","annotate","html","direction","table","gen","createElement","rowsEnter","outerHTML","select_nodes","_selected","select_nodes_group","node_set_changed","stopPropagation","present","nselect","brushgroup","chart_registry","create_type","create_group","highlight_neighbors","clear_all_highlights","dcg_highlighted","register_highlight_paths_group","pathsgroup","highlight_paths","pathprops","hoverprops","selectprops","doRedraw","paths_changed","nop","eop","node_on_paths","edge_on_paths","selected","hoverpaths","hover_changed","hp","select_changed","contains_path","paths","doesnt_contain_path","cp","intersect_paths","pathsA","pathsB","some","toggle_paths","highlight_paths_group","expand_collapse","get_degree","expand","collapse","dirs","add_gradient_def","gradient","spreadMethod","stop-color","stop-opacity","view_degree","fil","spike_directioner","sweep","draw_selected","spike","dcg_expand_selected","dcg_expanded","rect","af","clear_selected","collapsible","zonedir","bound","getBoundingClientRect","clientX","clientY","mousemove","nk","Promise","resolve","then","degree","spikes","click","action","bind","dcg_dblclk_timeout","load_graph","ignore_query","file","file1","file2","queue","defer","json","await","results","digraph","graphlibDot","parse","nodeNames","edgeNames","u","graph","munge_graph","nodekeyattr","sourceattr","targetattr","find_attr","attrs","nka","sa","ta","wrappers","wi","findIndex","edge0","sourceattrs","targetattrs","edgewrappers","node0","node1","candidates","warn","nodekeyattrs","nodewrappers","flat_group","non_null","group","dim_group","ndx","id_accessor","dimension","reduce_01","make","vec","another","convert_nest","nest","nodeKeyAttr","edgeSourceAttr","edgeTargetAttr","inherit","shift","children","_level","recurse","values","prototype","pluck","convert_adjacency_list","namesIn","namesOut","adjacencies","adj","targetKey","adjacency","path_reader","register_path_objs","reader","elementList","element","elementType","_intervals","_intervalTree","_time","pathList","timeRange","clear","has_ranges","allpaths","_range","interval","getTime","lysenkoIntervalTree","setTime","getIntervals","queryPoint","path_selector","chartgroup","draw_paths","p2","style","border-width","border-style","border-color","border-radius","display","padding","cursor","margin","no_paths","selector","error_text","queried","zero_text","default_text","draw_hovered","is_hovered","hovered","is_selected","background-color","color","paths_","hpaths","spaths","node_name","String","fromCharCode","node_object","extend","edge_object","generate","env","nodePrefix","N","linkLength","circle","undirected","rimLength","par","strutSkip","strutLength","line_breaks","charexp","max_line_length","regexp","RegExp","result","part","exec","lastIndex","build_type_graph","nkey","ntype","esource","etarget","nmap","tnodes","tedges","sn","tn","etype","define","amd","module","exports","_d3","require","_crossfilter","_dc"],"mappings":"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","file":"dc.graph.min.js"} \ No newline at end of file +{"version":3,"sources":["dc.graph.js"],"names":["_dc_graph","d3","crossfilter","dc","get_original","x","orig","identity","deprecated_property","message","defaultValue","prop","property","ret","arguments","length","console","warn","apply","this","forEach","method","uuid","replace","c","r","Math","random","v","toString","conditional_properties","npred","epred","props","_if","pred","curr","o","last","props2","p","test","param","error","compose","f","g","dc_graph","functor_wrap","clone","obj","target","i","hasOwnProperty","generate_path","pts","bezDegree","close","cats","y","remain","hasNaN","isNaN","push","bez_cmds","log","join","regenerate_objects","preserved","list","key","assign","create","destroy","wrap","k","o1","keep","wlist","map","point_on_ellipse","A","B","dx","dy","tansq","tan","atan2","sqrt","between","a","b","eps","segment_intersection","x1","y1","x2","y2","x3","y3","x4","y4","point_on_polygon","points","x0","y0","next","isect","point_on_shape","chart","d","deltaX","deltaY","dcg_shape","shape","dcg_rx","dcg_ry","dcg_points","elaborate_shape","def","keys","Object","dc_graph_shapes_","_shape","floor","Error","infer_shape","nodeShape","eval","default_shape","abstract","shape_changed","old","sides","skew","distortion","rotation","shape_element","elem","document","createElementNS","fit_shape","bbox","nodeRadius","nodeFitLabel","getBBox","fitx","width","height","max","rx","y_over_B","cos","PI","nodePadding","nodeStrokeWidth","rplus","cola","ellipse_attrs","ry","polygon_attrs","align","angles","theta","sin","yext","extent","min","shape_attrs","sel","select","attr","binary_search","patience","val","f_c","fv","abs","draw_edge_to_shapes","source","sx","sy","tx","ty","neighbor","dir","offset","source_padding","target_padding","sp","tp","bss","bst","p_on_s","node","ang","compare_dist","port0","goal","port","hypot","srcang","sourcePort","tarang","targetPort","sdist","tdist","c1dist","c2dist","c1X","c1Y","c2X","c2Y","interpolate","d0","d1","getLevels","t_","bezier_point","q","create_worker","layoutAlgorithm","_workers","worker","Worker","script_path","layouts","onmessage","e","layoutId","data","dispatch","response","args","align_f","axis","type","listname","can_get_graph_from_this","nodes","vertices","edges","links","version","constants","CHART_CLASS","unwrap","undefined","value","react","cascade","_","n","splice","_eval","1","2","3","Infinity","_path","filename","scripts","getElementsByTagName","src","match","RegExp","depth_first_traversal","callbacks","place_tree","nodeid","placed","skip","indegree","rows","place","outmap","ei","nmap","targetid","sib","pop","init","tree","filter","roots","reduce","m","tail","sourceid","head","root","ni","row","finish","ellipse","egg","triangle","rectangle","diamond","trapezium","parallelogram","pentagon","hexagon","septagon","octagon","invtriangle","invtrapezium","square","polygon","available_shapes","shapes","slice","diagram","parent","chartGroup","deprecate_layout_algo_parameter","name","_chart","layoutEngine","engine","getEngine","initLayout","has_source_and_target","transition_duration","stageTransitions","transitionDuration","transition_delay","is_enter","_refresh","edge","edgeStroke","edgeStrokeWidth","edgeArrowhead","id","edgeArrow","edgeArrowtail","arrow_id","each","selectAll","arrowId","_updateNode","layout_done","happens","_dispatch","end","_running","_needsRedraw","window","setTimeout","isRunning","redraw","calc_edge_path","age","ports","Array","reversedness","rev","parallel","path","parallelEdgeOffset","reverse","tpos","near","orient","calc_old_edge_path","prevX","prevY","calc_new_edge_path","spos","render_edge_path","render_edge_label_path","endall","transitions","callback","every","transition","size","node_bounds","left","top","right","bottom","union_bounds","b1","b2","point_to_bounds","edge_bounds","new","debug_bounds","bounds","brect","_g","enter","insert","class","fill","stroke","calc_bounds","fitStrategy","restrictPan","_bounds","auto_zoom","viewBox","vwidth","vheight","swidth","sheight","DEBUG_BOUNDS","pAR","amv","fitS","translate","scale","indexOf","sAR","vAR","vrl","margins","split","toLowerCase","margined_bounds","_zoom","s","align_left","align_top","align_right","align_bottom","fit","_svg","preserveAspectRatio","event","draw","nodeEnter","edgeEnter","edgeHover","edgeHoverEnter","edgeLabels","edgeLabelsEnter","textPaths","textPathsEnter","assert","nodeEntered","nodeKey","ntrans","duration","delay","nodeOpacity","edgeEntered","edgeKey","etrans","edgeOpacity","when","textTrans","showLayoutSteps","kind","markerEnter","addOrRemoveDef","_arrows","refX","refY","edgeArrowSize","call","drawFunction","globalTransform","pos","_translate","_scale","_xScale","range","_yScale","doZoom","xDomain","domain","yDomain","less1","less2","lessExt","nothing","resizeSvg","w","h","generateSvg","append","_defs","mouseZoomable","linear","behavior","zoom","on","_nodes_snapshot","_edges_snapshot","_anchor","_chartGroup","marginMixin","_nodeLayer","_edgeLayer","_nodes","_edges","_stats","_children","empty","autoZoom","zoomToFit","nodeDimension","nodeGroup","edgeDimension","edgeGroup","nodeKeyAccessor","kv","edgeKeyAccessor","edgeSource","sourceAccessor","sourcename","edgeTarget","targetAccessor","targetname","nodeRadiusAccessor","nodeStrokeWidthAccessor","nodeStroke","nodeStrokeAccessor","nodeFillScale","nodeFill","nodeFillAccessor","nodeLabel","nodeLabelAccessor","label","nodeLabelFill","nodeLabelFillAccessor","nodeFitLabelAccessor","nodeTitle","nodeTitleAccessor","nodeOrdering","nodeFixed","nodeFixedAccessor","edgeStrokeAccessor","edgeStrokeWidthAccessor","edgeOpacityAccessor","edgeLabel","edgeLabelAccessor","edgeArrowheadAccessor","edgeArrowtailAccessor","edgeIsLayout","edgeIsLayoutAccessor","notLayout","edgeIsShown","lengthStrategy","edgeLength","edgeDistanceAccessor","distance","flowLayout","rankdir","baseLength","deleteDelay","groupConnected","timeLimit","constrain","edgeOrdering","level","add","initLayoutOnRedraw","layoutUnchanged","relayout","initialLayout","initialOnly","induceNodes","legend","l","child","object","skipWarning","cola_layout","dagre_layout","webworker_layout","tickSize","edgeId","textpathId","getNode","handleDisconnected","_enterNode","changedShape","remove","text","tspan","lines","first","line","ofs","exit","stroke-width","startLayout","populate_cola","rnodes","redges","rn","dcg_nodeKey","re","dcg_edgeKey","all","stop","quicksort","by","wnodes","v1","dcg_nodeFixed","populateLayoutNode","wedges","e1","dcg_edgeSource","dcg_edgeTarget","dcg_edgeLength","populateLayoutEdge","keeps","index","nnodes","nedges","em","j","opacity","text-anchor","dcg_bbox","drawn","skip_layout","nodes_snapshot","JSON","stringify","edges_snapshot","constraints","offsets","layout_edges","circle_constraints","R","nindices","namef","wheel","wheel_edges","internal","concat","ordered_constraints","sorted","ordering","sort","gap","startTime","Date","now","elapsed","do_zoom","start","initialUnconstrainedIterations","initialUserConstraintIterations","initialAllConstraintsIterations","refresh","nullSel","render","resetSvg","getStats","svg","redrawGroup","redrawAll","renderGroup","renderAll","defineArrow","drawf","whether","tag","selEnter","invertCoord","clientCoord","invert","marker","anchor","errors","BadArgumentException","classed","registerChart","anchorName","chartID","_worker","options","optionNames","option","postMessage","command","passthroughs","graphviz_attrs","ranksep","_d3cola","d3adaptor","avoidOverlaps","symmetricDiffLinkLengths","jaccardLinkLengths","linkDistance","minSeparation","dispatchState","fixed","dgc_nodeFixed","groups","components","separateGraphs","leaves","array","gridSnapIterations","_flowLayout","_layoutId","graphviz","graphviz_keys","bind","flow","_dagreGraph","dagre","graphlib","Graph","multigraph","setGraph","setDefaultEdgeLabel","setNode","removeNode","setEdge","removeEdge","_tick","_done","layout","tree_layout","best_dist","nodeWidth","functor","_dfs","offsetX","dcg_rank","left_x","hit_ins","gapY","offsetY","isroot","want","badi","badl","limit","extra","opts","rowFunction","_items","_legend","nodeHeight","exemplars","item","constraint_pattern","pattern","types","rules","partition","typename","extract","n2","disable","rule","produce","members","t","tname","edge_rules","type_rules","constraint","gap_y","equality","gap_x","align_y","align_x","order_x","order_y","tree_positions","rootf","rowf","treef","ofsx","ofsy","nwidth","ygap","dfs","tree_constraints","xgap","foo_x","event_namespace","handlers","_behavior","ehover","add_behavior","rest","remove_behavior","tip","fetch_and_show_content","fetcher","_tip","content","_d3tip","show","clearTimeout","_timeout","hide_tip","hide","annotate","html","direction","table","gen","createElement","rowsEnter","outerHTML","select_nodes","_selected","select_nodes_group","node_set_changed","stopPropagation","present","nselect","brushgroup","chart_registry","create_type","create_group","highlight_neighbors","clear_all_highlights","dcg_highlighted","register_highlight_paths_group","pathsgroup","highlight_paths","pathprops","hoverprops","selectprops","doRedraw","paths_changed","nop","eop","node_on_paths","edge_on_paths","selected","hoverpaths","hover_changed","hp","select_changed","contains_path","paths","doesnt_contain_path","cp","intersect_paths","pathsA","pathsB","some","toggle_paths","highlight_paths_group","expand_collapse","get_degree","expand","collapse","dirs","add_gradient_def","gradient","spreadMethod","stop-color","stop-opacity","view_degree","fil","spike_directioner","sweep","draw_selected","spike","dcg_expand_selected","dcg_expanded","rect","af","clear_selected","collapsible","zonedir","bound","getBoundingClientRect","clientX","clientY","mousemove","nk","Promise","resolve","then","degree","spikes","click","action","dcg_dblclk_timeout","load_graph","ignore_query","file","file1","file2","queue","defer","json","await","results","digraph","graphlibDot","parse","nodeNames","edgeNames","u","graph","munge_graph","nodekeyattr","sourceattr","targetattr","find_attr","attrs","nka","sa","ta","wrappers","wi","findIndex","edge0","sourceattrs","targetattrs","edgewrappers","node0","node1","candidates","nodekeyattrs","nodewrappers","flat_group","non_null","group","dim_group","ndx","id_accessor","dimension","reduce_01","make","vec","another","convert_tree_helper","inherit","valuesByAttr","shift","children","nestKey","childKey","nestKeysUnique","ancestorKeys","labelFun","values","recurse","prototype","pluck","convert_tree","isArray","convert_nest","nest","nodeKeyAttr","edgeSourceAttr","edgeTargetAttr","convert_adjacency_list","namesIn","namesOut","adjacencies","adj","targetKey","adjacency","path_reader","register_path_objs","reader","elementList","element","elementType","_intervals","_intervalTree","_time","pathList","timeRange","clear","has_ranges","allpaths","_range","interval","getTime","lysenkoIntervalTree","setTime","getIntervals","queryPoint","path_selector","chartgroup","draw_paths","p2","style","border-width","border-style","border-color","border-radius","display","padding","cursor","margin","no_paths","selector","error_text","queried","zero_text","default_text","draw_hovered","is_hovered","hovered","is_selected","background-color","color","paths_","hpaths","spaths","node_name","String","fromCharCode","node_object","extend","edge_object","generate","env","nodePrefix","N","linkLength","circle","undirected","rimLength","par","strutSkip","strutLength","line_breaks","charexp","max_line_length","regexp","result","part","exec","lastIndex","build_type_graph","nkey","ntype","esource","etarget","tnodes","tedges","sn","tn","etype","define","amd","module","exports","_d3","require","_crossfilter","_dc"],"mappings":"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","file":"dc.graph.min.js"} \ No newline at end of file diff --git a/jsdoc.conf.json b/jsdoc.conf.json index 0f6e1910..af91fc30 100644 --- a/jsdoc.conf.json +++ b/jsdoc.conf.json @@ -14,7 +14,7 @@ "footer": "", "copyright": "dc.graph.js Copyright 2015-2016 AT&T Intellectual Property & the dc.graph.js Developers", "navType": "vertical", - "theme": "cosmo", + "theme": "flatly", "linenums": true, "collapseSymbols": false, "inverseNav": true, diff --git a/package.json b/package.json index 88f4cfbc..31e892e6 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "dc.graph", - "version": "0.3.16", + "version": "0.4.0", "license": "Apache-2.0", - "copyright": "2016", + "copyright": "2017", "description": "Graph visualizations integrated with crossfilter and dc.js", "keywords": [ "visualization", diff --git a/scripts/find-dcg.sh b/scripts/find-dcg.sh new file mode 100755 index 00000000..2d91002d --- /dev/null +++ b/scripts/find-dcg.sh @@ -0,0 +1,8 @@ +unq="sort -k 2" +unq2=uniq +if [ $1 == -u ]; then + unq="sort -u -k 2" + unq2=cat +fi +grep dcg_ src/* | sed 's/:.*dcg/ dcg/' | sed 's/\(dcg_[a-zA-Z_]*\).*/\1/' | $unq | $unq2 | awk '{printf("%s\t%s\n", $2, $1)}' + diff --git a/src/cola.worker.js b/src/cola.worker.js deleted file mode 100644 index 084cc9c5..00000000 --- a/src/cola.worker.js +++ /dev/null @@ -1,150 +0,0 @@ -importScripts('cola.js'); -importScripts('d3.js'); - -var _d3cola = null, _tick, _stop; - -function init_d3cola(width, height, handleDisconnected, lengthStrategy, baseLength, flowLayout, tickSize) { - _d3cola = cola.d3adaptor() - .avoidOverlaps(true) - .size([width, height]) - .handleDisconnected(handleDisconnected); - if(_d3cola.tickSize) // non-standard - _d3cola.tickSize(tickSize); - - switch(lengthStrategy) { - case 'symmetric': - _d3cola.symmetricDiffLinkLengths(baseLength); - break; - case 'jaccard': - _d3cola.jaccardLinkLengths(baseLength); - break; - case 'individual': - _d3cola.linkDistance(function(e) { - return e.dcg_edgeLength || baseLength; - }); - break; - case 'none': - default: - } - if(flowLayout) { - _d3cola.flowLayout(flowLayout.axis, flowLayout.minSeparation); - } - -} - -// node and edge objects shared with cola.js, preserved from one iteration -// to the next (as long as the object is still in the layout) -var _nodes = {}, _edges = {}; - -function data_d3cola(nodes, edges, constraints, opts) { - var wnodes = regenerate_objects(_nodes, nodes, function(v) { - return v.dcg_nodeKey; - }, function(v1, v) { - v1.dcg_nodeKey = v.dcg_nodeKey; - v1.width = v.width; - v1.height = v.height; - v1.fixed = !!v.dgc_nodeFixed; - - if(typeof v.dgc_nodeFixed === 'object') { - v1.x = v.dgc_nodeFixed.x; - v1.y = v.dgc_nodeFixed.y; - } - else { - // should we support e.g. null to unset x,y? - if(v.x !== undefined) - v1.x = v.x; - if(v.y !== undefined) - v1.y = v.y; - } - }); - var wedges = regenerate_objects(_edges, edges, function(e) { - return e.dcg_edgeKey; - }, function(e1, e) { - e1.dcg_edgeKey = e.dcg_edgeKey; - // cola edges can work with indices or with object references - // but it will replace indices with object references - e1.source = _nodes[e.dcg_edgeSource]; - e1.target = _nodes[e.dcg_edgeTarget]; - e1.dcg_edgeLength = e.dcg_edgeLength; - }); - - // cola needs each node object to have an index property - wnodes.forEach(function(v, i) { - v.index = i; - }); - - var groups = null; - if(opts.groupConnected) { - var components = cola.separateGraphs(wnodes, wedges); - groups = components.map(function(g) { - return {leaves: g.array.map(function(n) { return n.index; })}; - }); - } - - function postResponseState(response) { - postMessage({ - response: response, - args: { - nodes: wnodes, - edges: wedges.map(function(e) { - return {dcg_edgeKey: e.dcg_edgeKey}; - }) - } - }); - } - _d3cola.on('tick', _tick = function() { - postResponseState('tick'); - }).on('start', function() { - postMessage({response: 'start'}); - }).on('end', _stop = function() { - postResponseState('end'); - }); - _d3cola.nodes(wnodes) - .links(wedges) - .constraints(constraints) - .groups(groups); -} - -function start_d3cola(initialUnconstrainedIterations, - initialUserConstraintIterations, - initialAllConstraintsIterations, - gridSnapIterations) { - _d3cola.start(initialUnconstrainedIterations, - initialUserConstraintIterations, - initialAllConstraintsIterations, - gridSnapIterations); -} - -function stop_d3cola() { - _d3cola.stop(); -} - -onmessage = function(e) { - var args = e.data.args; - switch(e.data.command) { - case 'init': - init_d3cola(args.width, args.height, args.handleDisconnected, - args.lengthStrategy, args.baseLength, args.flowLayout, - args.tickSize); - break; - case 'data': - data_d3cola(args.nodes, args.edges, args.constraints, args.opts); - break; - case 'start': - if(args.initialOnly) { - if(args.showLayoutSteps) - _tick(); - _stop(); - } - else - start_d3cola(args.initialUnconstrainedIterations, - args.initialUserConstraintIterations, - args.initialAllConstraintsIterations, - args.gridSnapIterationse); - break; - case 'stop': - stop_d3cola(); - break; - } -}; - diff --git a/src/cola_layout.js b/src/cola_layout.js new file mode 100644 index 00000000..c08028bd --- /dev/null +++ b/src/cola_layout.js @@ -0,0 +1,236 @@ +/** + * `dc_graph.cola_layout` is an adaptor for cola.js layouts in dc.graph.js + * @class cola_layout + * @memberof dc_graph + * @param {String} [id=uuid()] - Unique identifier + * @return {dc_graph.cola_layout} + **/ +dc_graph.cola_layout = function(id) { + var _layoutId = id || uuid(); + var _d3cola = null; + var _dispatch = d3.dispatch('tick', 'start', 'end'); + var _flowLayout; + // node and edge objects shared with cola.js, preserved from one iteration + // to the next (as long as the object is still in the layout) + var _nodes = {}, _edges = {}; + + function init(options) { + // width, height, handleDisconnected, lengthStrategy, baseLength, flowLayout, tickSize + _d3cola = cola.d3adaptor() + .avoidOverlaps(true) + .size([options.width, options.height]) + .handleDisconnected(options.handleDisconnected); + if(_d3cola.tickSize) // non-standard + _d3cola.tickSize(options.tickSize); + + switch(options.lengthStrategy) { + case 'symmetric': + _d3cola.symmetricDiffLinkLengths(options.baseLength); + break; + case 'jaccard': + _d3cola.jaccardLinkLengths(options.baseLength); + break; + case 'individual': + _d3cola.linkDistance(function(e) { + return e.dcg_edgeLength || options.baseLength; + }); + break; + case 'none': + default: + } + if(options.flowLayout) { + _d3cola.flowLayout(options.flowLayout.axis, options.flowLayout.minSeparation); + } + } + + function data(nodes, edges, constraints, options) { + var wnodes = regenerate_objects(_nodes, nodes, function(v) { + return v.dcg_nodeKey; + }, function(v1, v) { + v1.dcg_nodeKey = v.dcg_nodeKey; + v1.width = v.width; + v1.height = v.height; + v1.fixed = !!v.dgc_nodeFixed; + + if(typeof v.dgc_nodeFixed === 'object') { + v1.x = v.dgc_nodeFixed.x; + v1.y = v.dgc_nodeFixed.y; + } + else { + // should we support e.g. null to unset x,y? + if(v.x !== undefined) + v1.x = v.x; + if(v.y !== undefined) + v1.y = v.y; + } + }); + var wedges = regenerate_objects(_edges, edges, function(e) { + return e.dcg_edgeKey; + }, function(e1, e) { + e1.dcg_edgeKey = e.dcg_edgeKey; + // cola edges can work with indices or with object references + // but it will replace indices with object references + e1.source = _nodes[e.dcg_edgeSource]; + e1.target = _nodes[e.dcg_edgeTarget]; + e1.dcg_edgeLength = e.dcg_edgeLength; + }); + + // cola needs each node object to have an index property + wnodes.forEach(function(v, i) { + v.index = i; + }); + + var groups = null; + if(options.groupConnected) { + var components = cola.separateGraphs(wnodes, wedges); + groups = components.map(function(g) { + return {leaves: g.array.map(function(n) { return n.index; })}; + }); + } + + function dispatchState(event) { + _dispatch[event]( + wnodes, + wedges.map(function(e) { + return {dcg_edgeKey: e.dcg_edgeKey}; + }) + ); + } + _d3cola.on('tick', /* _tick = */ function() { + dispatchState('tick'); + }).on('start', function() { + _dispatch.start(); + }).on('end', /* _done = */ function() { + dispatchState('end'); + }); + _d3cola.nodes(wnodes) + .links(wedges) + .constraints(constraints) + .groups(groups); + } + + function start(options) { + _d3cola.start(options.initialUnconstrainedIterations, + options.initialUserConstraintIterations, + options.initialAllConstraintsIterations, + options.gridSnapIterations); + } + + function stop() { + _d3cola.stop(); + } + + var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz); + graphviz.rankdir(null); + + var engine = Object.assign(graphviz, { + layoutAlgorithm: function() { + return 'cola'; + }, + layoutId: function() { + return _layoutId; + }, + parent: property(null), + on: function(event, f) { + _dispatch.on(event, f); + return this; + }, + init: function(options) { + this.optionNames().forEach(function(option) { + options[option] = options[option] || this[option](); + }.bind(this)); + init(options); + return this; + }, + data: function(nodes, edges, constraints, options) { + data(nodes, edges, constraints, options); + }, + start: function(options) { + start(options); + }, + stop: function() { + stop(); + }, + optionNames: function() { + return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize'] + .concat(graphviz_keys); + }, + populateLayoutNode: function() {}, + populateLayoutEdge: function() {}, + /** + * Instructs cola.js to fit the connected components. + * @method handleDisconnected + * @memberof dc_graph.cola_layout + * @instance + * @param {Boolean} [handleDisconnected=true] + * @return {Boolean} + * @return {dc_graph.cola_layout} + **/ + handleDisconnected: property(true), + /** + * Currently, three strategies are supported for specifying the lengths of edges: + * * 'individual' - uses the `edgeLength` for each edge. If it returns falsy, uses the + * `baseLength` + * * 'symmetric', 'jaccard' - compute the edge length based on the graph structure around + * the edge. See + * {@link https://github.com/tgdwyer/WebCola/wiki/link-lengths the cola.js wiki} + * for more details. + * 'none' - no edge lengths will be specified + * @method lengthStrategy + * @memberof dc_graph.cola_layout + * @instance + * @param {Function|String} [lengthStrategy='symmetric'] + * @return {Function|String} + * @return {dc_graph.cola_layout} + **/ + lengthStrategy: property('symmetric'), + /** + * Gets or sets the default edge length (in pixels) when the `.lengthStrategy` is + * 'individual', and the base value to be multiplied for 'symmetric' and 'jaccard' edge + * lengths. + * @method baseLength + * @memberof dc_graph.cola_layout + * @instance + * @param {Number} [baseLength=30] + * @return {Number} + * @return {dc_graph.cola_layout} + **/ + baseLength: property(30), + /** + * If `flowLayout` is set, it determines the axis and separation for + * {@link http://marvl.infotech.monash.edu/webcola/doc/classes/cola.layout.html#flowlayout cola flow layout}. + * If it is not set, `flowLayout` will be calculated from the {@link dc_graph.graphviz_attrs#rankdir rankdir} + * and {@link dc_graph.graphviz_attrs#ranksep ranksep}; if `rankdir` is also null (the + * default for cola layout), then there will be no flow. + * @method flowLayout + * @memberof dc_graph.cola_layout + * @instance + * @param {Object} [flowLayout=null] + * @example + * // No flow (default) + * chart.flowLayout(null) + * // flow in x with min separation 200 + * chart.flowLayout({axis: 'x', minSeparation: 200}) + **/ + flowLayout: function(flow) { + if(!arguments.length) { + if(_flowLayout) + return _flowLayout; + var dir = engine.rankdir(); + if(!dir) + return null; + var axis = (dir === 'LR' || dir === 'RL') ? 'x' : 'y'; + return { + axis: axis, + minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2 + }; + } + _flowLayout = flow; + return this; + }, + tickSize: property(1) + }); + return engine; +}; + +dc_graph.cola_layout.scripts = ['d3.js', 'cola.js']; diff --git a/src/convert.js b/src/convert.js index 5bcd6bc1..99eca296 100644 --- a/src/convert.js +++ b/src/convert.js @@ -1,41 +1,83 @@ -// make crossfilter-suitable data from d3.nest {key, values} format -dc_graph.convert_nest = function(nest, attrs, nodeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) { - inherit = inherit || {}; - var level = Object.keys(inherit).length; - if(attrs.length) { +var convert_tree_helper = function(data, attrs, options, parent, level, inherit) { + level = level || 0; + if(attrs.length > (options.valuesByAttr ? 1 : 0)) { var attr = attrs.shift(); var nodes = [], edges = []; - var children = nest.map(function(v) { - inherit[attr] = v.key; - var child = uuid(); - var node = clone(inherit); - node[nodeKeyAttr] = child; - node.name = attr + ':' + v.key; - node._level = level+1; - nodes.push(node); - if(parent) { - var edge = {}; - edge[edgeSourceAttr] = parent; - edge[edgeTargetAttr] = child; - edges.push(edge); + var children = data.map(function(v) { + var key = v[options.nestKey]; + var childKey = options.nestKeysUnique ? key : uuid(); + if(childKey) { + var node; + if(options.ancestorKeys) { + inherit = inherit || {}; + if(attr) + inherit[attr] = key; + node = Object.assign({}, inherit); + } else node = {}; + node[options.nodeKey] = childKey; + if(options.label && options.labelFun) + node[options.label] = options.labelFun(key, attr, v); + if(options.level) + node[options.level] = level+1; + nodes.push(node); + if(parent) { + var edge = {}; + edge[options.edgeSource] = parent; + edge[options.edgeTarget] = childKey; + edges.push(edge); + } } - var recurse = dc_graph.convert_nest(v.values, attrs.slice(0), nodeKeyAttr, edgeSourceAttr, edgeTargetAttr, child, clone(inherit)); + var children = options.valuesByAttr ? v[attrs[0]] : v.values; + var recurse = convert_tree_helper(children, attrs.slice(0), options, + childKey, level+1, Object.assign({}, inherit)); return recurse; }); return {nodes: Array.prototype.concat.apply(nodes, children.map(dc.pluck('nodes'))), edges: Array.prototype.concat.apply(edges, children.map(dc.pluck('edges')))}; } - else return {nodes: nest.map(function(v) { - v._level = level+1; + else return {nodes: data.map(function(v) { + v = Object.assign({}, v); + if(options.level) + v[options.level] = level+1; return v; - }), edges: nest.map(function(v) { + }), edges: data.map(function(v) { var edge = {}; - edge[edgeSourceAttr] = parent; - edge[edgeTargetAttr] = v[nodeKeyAttr]; + edge[options.edgeSource] = parent; + edge[options.edgeTarget] = v[options.nodeKey]; return edge; })}; }; +dc_graph.convert_tree = function(data, attrs, options) { + options = Object.assign({ + nodeKey: 'key', + edgeKey: 'key', + edgeSource: 'sourcename', + edgeTarget: 'targetname', + nestKey: 'key' + }, options); + if(Array.isArray(data)) + return convert_tree_helper(data, attrs, options, options.root, 0, options.inherit); + else { + attrs = [''].concat(attrs); + return convert_tree_helper([data], attrs, options, options.root, 0, options.inherit); + } +}; + +dc_graph.convert_nest = function(nest, attrs, nodeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) { + return dc_graph.convert_tree(nest, attrs, { + nodeKey: nodeKeyAttr, + edgeSource: edgeSourceAttr, + edgeTarget: edgeTargetAttr, + root: parent, + inherit: inherit, + ancestorKeys: true, + label: 'name', + labelFun: function(key, attr, v) { return attr + ':' + key; }, + level: '_level' + }); +}; + dc_graph.convert_adjacency_list = function(nodes, namesIn, namesOut) { // adjacenciesAttr, edgeKeyAttr, edgeSourceAttr, edgeTargetAttr, parent, inherit) { var edges = Array.prototype.concat.apply([], nodes.map(function(n) { diff --git a/src/core.js b/src/core.js index 060955a2..34fe1472 100644 --- a/src/core.js +++ b/src/core.js @@ -22,6 +22,14 @@ var dc_graph = { } }; +function get_original(x) { + return x.orig; +} + +function identity(x) { + return x; +}; + var property = function (defaultValue, unwrap) { if(unwrap === undefined) unwrap = get_original; @@ -76,68 +84,20 @@ var property = function (defaultValue, unwrap) { return ret; }; -// i'm sure there's a word for this in haskell -function conditional_properties(npred, epred, props) { - function _if(pred, curr) { - return function(o, last) { - return pred(o) ? curr(o) : last(); - }; - } - var props2 = {}; - for(var p in props) { - if(/^node/.test(p)) { - if(npred) - props2[p] = _if(npred, param(props[p])); - } - else if(/^edge/.test(p)) { - if(epred) - props2[p] = _if(epred, param(props[p])); +function deprecated_property(message, defaultValue) { + var prop = property(defaultValue); + var ret = function() { + if(arguments.length) { + console.warn(message); + prop.apply(property, arguments); + return this; } - else console.error('only know how to deal with properties that start with "node" or "edge"'); - } - return props2; -} - -var identity = function(x) { return x; }; -function compose(f, g) { - return function() { - return f(g.apply(null, arguments)); - }; -} - -// version of d3.functor that optionally wraps the function with another -// one, if the parameter is a function -dc_graph.functor_wrap = function (v, wrap) { - if(typeof v === "function") { - return wrap ? function(x) { - return v(wrap(x)); - } : v; - } - else return function() { - return v; + return prop(); }; -}; - -function get_original(x) { - return x.orig; -} - -// we want to allow either values or functions to be passed to specify parameters. -// if a function, the function needs a preprocessor to extract the original key/value -// pair from the wrapper object we put it in. -function param(v) { - return dc_graph.functor_wrap(v, get_original); -} - -// http://jsperf.com/cloning-an-object/101 -function clone(obj) { - var target = {}; - for(var i in obj) { - if(obj.hasOwnProperty(i)) { - target[i] = obj[i]; - } - } - return target; + ['cascade', '_eval', 'eval', 'react'].forEach(function(method) { + ret[method] = prop[method]; + }); + return ret; } // http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript @@ -147,60 +107,3 @@ function uuid() { return v.toString(16); }); } - -// because i don't think we need to bind edge point data (yet!) -var bez_cmds = { - 1: 'L', 2: 'Q', 3: 'C' -}; - -function generate_path(pts, bezDegree, close) { - var cats = ['M', pts[0].x, ',', pts[0].y], remain = bezDegree; - var hasNaN = false; - for(var i = 1; i < pts.length; ++i) { - if(isNaN(pts[i].x) || isNaN(pts[i].y)) - hasNaN = true; - cats.push(remain===bezDegree ? bez_cmds[bezDegree] : ' ', pts[i].x, ',', pts[i].y); - if(--remain===0) - remain = bezDegree; - } - if(remain!=bezDegree) - console.log("warning: pts.length didn't match bezian degree", pts, bezDegree); - if(close) - cats.push('Z'); - return cats.join(''); -} - -// for IE (do we care really?) -Math.hypot = Math.hypot || function() { - var y = 0; - var length = arguments.length; - - for (var i = 0; i < length; i++) { - if (arguments[i] === Infinity || arguments[i] === -Infinity) { - return Infinity; - } - y += arguments[i] * arguments[i]; - } - return Math.sqrt(y); -}; - -var script_path = function() { - var _path; - return function() { - if(_path === undefined) { - // adapted from http://stackoverflow.com/a/18283141/676195 - _path = null; // only try once - var filename = 'dc.graph.js'; - var scripts = document.getElementsByTagName('script'); - if (scripts && scripts.length > 0) { - for (var i in scripts) { - if (scripts[i].src && scripts[i].src.match(new RegExp(filename+'$'))) { - _path = scripts[i].src.replace(new RegExp('(.*)'+filename+'$'), '$1'); - break; - } - } - } - } - return _path; - }; -}(); diff --git a/src/dagre.worker.js b/src/dagre.worker.js deleted file mode 100644 index f3787301..00000000 --- a/src/dagre.worker.js +++ /dev/null @@ -1,101 +0,0 @@ -importScripts('dagre.js'); - -var _dagreGraph = null, _tick, _done; - -function init_dagre(width, height, rankdir) { - // Create a new directed graph - _dagreGraph = new dagre.graphlib.Graph({multigraph: true}); - - // Set an object for the graph label - _dagreGraph.setGraph({rankdir: rankdir}); - - // Default to assigning a new object as a label for each new edge. - _dagreGraph.setDefaultEdgeLabel(function() { return {}; }); -} - -// node and edge objects shared with cola.js, preserved from one iteration -// to the next (as long as the object is still in the layout) -var _nodes = {}, _edges = {}; - -function data_dagre(nodes, edges, constraints, opts) { - var wnodes = regenerate_objects(_nodes, nodes, function(v) { - return v.dcg_nodeKey; - }, function(v1, v) { - v1.dcg_nodeKey = v.dcg_nodeKey; - v1.width = v.width; - v1.height = v.height; - }, function(k, o) { - _dagreGraph.setNode(k, o); - }, function(k) { - _dagreGraph.removeNode(k); - }); - var wedges = regenerate_objects(_edges, edges, function(e) { - return e.dcg_edgeKey; - }, function(e1, e) { - e1.dcg_edgeKey = e.dcg_edgeKey; - e1.dcg_edgeSource = e.dcg_edgeSource; - e1.dcg_edgeTarget = e.dcg_edgeTarget; - }, function(k, o, e) { - _dagreGraph.setEdge(e.dcg_edgeSource, e.dcg_edgeTarget, o); - }, function(k, e) { - _dagreGraph.removeEdge(e.dcg_edgeSource, e.dcg_edgeTarget, e.dcg_edgeKey); - }); - - function postResponseState(response) { - postMessage({ - response: response, - args: { - nodes: wnodes, - edges: wedges.map(function(e) { - return {dcg_edgeKey: e.dcg_edgeKey}; - }) - } - }); - } - _tick = function() { - postResponseState('tick'); - }; - _done = function() { - postResponseState('end'); - }; -} - -function start_dagre(initialUnconstrainedIterations, - initialUserConstraintIterations, - initialAllConstraintsIterations, - gridSnapIterations) { - postMessage({response: 'start'}); - dagre.layout(_dagreGraph); - _done(); -} - -function stop_dagre() { -} - -onmessage = function(e) { - var args = e.data.args; - switch(e.data.command) { - case 'init': - init_dagre(args.width, args.height, args.rankdir); - break; - case 'data': - data_dagre(args.nodes, args.edges, args.constraints, args.opts); - break; - case 'start': - if(args.initialOnly) { - if(args.showLayoutSteps) - _tick(); - _done(); - } - else - start_dagre(args.initialUnconstrainedIterations, - args.initialUserConstraintIterations, - args.initialAllConstraintsIterations, - args.gridSnapIterationse); - break; - case 'stop': - stop_dagre(); - break; - } -}; - diff --git a/src/dagre_layout.js b/src/dagre_layout.js new file mode 100644 index 00000000..61954db4 --- /dev/null +++ b/src/dagre_layout.js @@ -0,0 +1,115 @@ +/** + * `dc_graph.dagre_layout` is an adaptor for dagre.js layouts in dc.graph.js + * + * In addition to the below layout attributes, `dagre_layout` also implements the attributes from + * {@link dc_graph.graphviz_attrs graphviz_attrs} + * @class dagre_layout + * @memberof dc_graph + * @param {String} [id=uuid()] - Unique identifier + * @return {dc_graph.dagre_layout} + **/ +dc_graph.dagre_layout = function(id) { + var _layoutId = id || uuid(); + var _dagreGraph = null, _tick, _done; + var _dispatch = d3.dispatch('tick', 'start', 'end'); + // node and edge objects preserved from one iteration + // to the next (as long as the object is still in the layout) + var _nodes = {}, _edges = {}; + + function init(options) { + // Create a new directed graph + _dagreGraph = new dagre.graphlib.Graph({multigraph: true}); + + // Set an object for the graph label + _dagreGraph.setGraph({rankdir: options.rankdir}); + + // Default to assigning a new object as a label for each new edge. + _dagreGraph.setDefaultEdgeLabel(function() { return {}; }); + } + + function data(nodes, edges, constraints, options) { + var wnodes = regenerate_objects(_nodes, nodes, function(v) { + return v.dcg_nodeKey; + }, function(v1, v) { + v1.dcg_nodeKey = v.dcg_nodeKey; + v1.width = v.width; + v1.height = v.height; + }, function(k, o) { + _dagreGraph.setNode(k, o); + }, function(k) { + _dagreGraph.removeNode(k); + }); + var wedges = regenerate_objects(_edges, edges, function(e) { + return e.dcg_edgeKey; + }, function(e1, e) { + e1.dcg_edgeKey = e.dcg_edgeKey; + e1.dcg_edgeSource = e.dcg_edgeSource; + e1.dcg_edgeTarget = e.dcg_edgeTarget; + }, function(k, o, e) { + _dagreGraph.setEdge(e.dcg_edgeSource, e.dcg_edgeTarget, o); + }, function(k, e) { + _dagreGraph.removeEdge(e.dcg_edgeSource, e.dcg_edgeTarget, e.dcg_edgeKey); + }); + + function dispatchState(event) { + _dispatch[event]( + wnodes, + wedges.map(function(e) { + return {dcg_edgeKey: e.dcg_edgeKey}; + }) + ); + } + _tick = function() { + dispatchState('tick'); + }; + _done = function() { + dispatchState('end'); + }; + } + + function start(options) { + _dispatch.start(); + dagre.layout(_dagreGraph); + _done(); + } + + function stop() { + } + + var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz); + return Object.assign(graphviz, { + layoutAlgorithm: function() { + return 'dagre'; + }, + layoutId: function() { + return _layoutId; + }, + on: function(event, f) { + _dispatch.on(event, f); + return this; + }, + init: function(options) { + this.optionNames().forEach(function(option) { + options[option] = options[option] || this[option](); + }.bind(this)); + init(options); + return this; + }, + data: function(nodes, edges, constraints, options) { + data(nodes, edges, constraints, options); + }, + start: function(options) { + start(options); + }, + stop: function() { + stop(); + }, + optionNames: function() { + return graphviz_keys; + }, + populateLayoutNode: function() {}, + populateLayoutEdge: function() {} + }); +} + +dc_graph.dagre_layout.scripts = ['d3.js', 'dagre.js']; diff --git a/src/depth_first_traversal.js b/src/depth_first_traversal.js index d8052906..56151325 100644 --- a/src/depth_first_traversal.js +++ b/src/depth_first_traversal.js @@ -4,25 +4,30 @@ // this is an argument for providing a graph API which could make it // easy to just write a recursive function instead of using this -dc_graph.depth_first_traversal = function(callbacks) { // {init, root, row, tree, place, sib, push, pop, skip, finish} - return function(diagram, nodes, edges) { +dc_graph.depth_first_traversal = function(callbacks) { // {init, root, row, tree, place, sib, push, pop, skip, finish, nodeid, sourceid, targetid} + return function(nodes, edges) { callbacks.init && callbacks.init(); if(callbacks.tree) - edges = edges.filter(function(e) { return callbacks.tree(e.orig); }); + edges = edges.filter(function(e) { return callbacks.tree(e); }); var indegree = {}; var outmap = edges.reduce(function(m, e) { - var tail = diagram.edgeSource.eval(e), - head = diagram.edgeTarget.eval(e); + var tail = callbacks.sourceid(e), + head = callbacks.targetid(e); if(!m[tail]) m[tail] = []; m[tail].push(e); indegree[head] = (indegree[head] || 0) + 1; return m; }, {}); + var nmap = nodes.reduce(function(m, n) { + var key = callbacks.nodeid(n); + m[key] = n; + return m; + }, {}); var rows = []; var placed = {}; function place_tree(n, r) { - var key = diagram.nodeKey.eval(n); + var key = callbacks.nodeid(n); if(placed[key]) { callbacks.skip && callbacks.skip(n, indegree[key]); return; @@ -34,25 +39,28 @@ dc_graph.depth_first_traversal = function(callbacks) { // {init, root, row, tree placed[key] = true; if(outmap[key]) outmap[key].forEach(function(e, ei) { + var target = nmap[callbacks.targetid(e)]; if(ei && callbacks.sib) - callbacks.sib(false, outmap[key][ei-1].target, e.target); + callbacks.sib(false, nmap[callbacks.targetid(outmap[key][ei-1])], target); callbacks.push && callbacks.push(); - place_tree(e.target, r+1); + place_tree(target, r+1); }); callbacks.pop && callbacks.pop(n); } var roots; if(callbacks.root) - roots = nodes.filter(function(n) { return callbacks.root(n.orig); }); + roots = nodes.filter(function(n) { return callbacks.root(n); }); else { - roots = nodes.filter(function(n) { return !indegree[diagram.nodeKey.eval(n)]; }); + roots = nodes.filter(function(n) { return !indegree[callbacks.nodeid(n)]; }); + if(nodes.length && !roots.length) // all nodes are in a cycle + roots = [nodes[0]]; } roots.forEach(function(n, ni) { if(ni && callbacks.sib) callbacks.sib(true, roots[ni-1], n); callbacks.push && callbacks.push(); - place_tree(n, callbacks.row ? callbacks.row(n.orig) : 0); + place_tree(n, callbacks.row ? callbacks.row(n) : 0); }); callbacks.finish(rows); }; diff --git a/src/diagram.js b/src/diagram.js index bb5fca9e..fe38d839 100644 --- a/src/diagram.js +++ b/src/diagram.js @@ -19,7 +19,6 @@ dc_graph.diagram = function (parent, chartGroup) { // different enough from regular dc charts that we don't use bases var _chart = dc.marginMixin({}); var _svg = null, _defs = null, _g = null, _nodeLayer = null, _edgeLayer = null; - var _worker = null; var _dispatch = d3.dispatch('end', 'start', 'drawn'); var _nodes = {}, _edges = {}; // hold state between runs var _stats = {}; @@ -30,9 +29,22 @@ dc_graph.diagram = function (parent, chartGroup) { var _zoom, _xScale, _yScale; var _anchor, _chartGroup; + function deprecate_layout_algo_parameter(name) { + return function(value) { + if(!_chart.layoutEngine()) + _chart.layoutAlgorithm('cola', true); + console.warn('Warning: dc_graph.diagram."' + name + '"is deprecated. Call the corresponding method on the layout engine instead.'); + var engine = _chart.layoutEngine(); + if(engine.getEngine) + engine = engine.getEngine(); + engine[name](value); + return this; + }; + } + /** * Set or get the width attribute of the diagram. See `.height` below. - * @name width + * @method width * @memberof dc_graph.diagram * @instance * @param {Number} [width=200] @@ -48,7 +60,7 @@ dc_graph.diagram = function (parent, chartGroup) { * SVG element generated by the diagram when rendered. If a value is given, then the * diagram is returned for method chaining. If no value is given, then the current value of * the height attribute will be returned. Default: 200 - * @name height + * @method height * @memberof dc_graph.diagram * @instance * @param {Number} [height=200] @@ -62,10 +74,10 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Get or set the root element, which is usually the parent div. Normally the root is set * when the diagram is constructed; setting it later may have unexpected consequences. - * @name root + * @method root * @memberof dc_graph.diagram * @instance - * @param {node} [root] + * @param {node} [root=null] * @return {node} * @return {dc_graph.diagram} **/ @@ -77,7 +89,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Get or set whether mouse wheel rotation or touchpad gestures will zoom the diagram, and * whether dragging on the background pans the diagram. - * @name mouseZoomable + * @method mouseZoomable * @memberof dc_graph.diagram * @instance * @param {Boolean} [mouseZoomable=true] @@ -108,7 +120,7 @@ dc_graph.diagram = function (parent, chartGroup) { * * another string - sets the `viewBox` and uses the string for `preserveAspectRatio`. * * function - will be called with (viewport width, viewport height, canvas width, canvas * height) and result will be used to set `preserveAspectRatio`. - * @name fitStrategy + * @method fitStrategy * @memberof dc_graph.diagram * @instance * @param {String} [fitStrategy='default'] @@ -127,7 +139,7 @@ dc_graph.diagram = function (parent, chartGroup) { * * `'always'` - zoom every time layout happens * * `'once'` - zoom the first time layout happens * * `null` - manual, call `zoomToFit` to fit - * @name autoZoom + * @method autoZoom * @memberof dc_graph.diagram * @instance * @param {String} [autoZoom=null] @@ -151,7 +163,7 @@ dc_graph.diagram = function (parent, chartGroup) { * *The node dimension currently does nothing, but once selection is supported, it will be * used for filtering other charts on the same crossfilter instance based on the nodes * selected.* - * @name nodeDimension + * @method nodeDimension * @memberof dc_graph.diagram * @instance * @param {crossfilter.dimension} [nodeDimension] @@ -171,7 +183,7 @@ dc_graph.diagram = function (parent, chartGroup) { * It is possible to pass another object with the same `.all()` interface instead of a * crossfilter group. - * @name nodeGroup + * @method nodeGroup * @memberof dc_graph.diagram * @instance * @param {crossfilter.group} [nodeGroup] @@ -189,7 +201,7 @@ dc_graph.diagram = function (parent, chartGroup) { * used for filtering other charts on the same crossfilter instance based on the edges * selected.* - * @name edgeDimension + * @method edgeDimension * @memberof dc_graph.diagram * @instance * @param {crossfilter.dimension} [edgeDimension] @@ -203,10 +215,11 @@ dc_graph.diagram = function (parent, chartGroup) { * diagram. See `.nodeGroup` above for the way data is loaded from a crossfilter group. * The values in the key/value pairs returned by `diagram.edgeGroup().all()` need to - * support, at a minimum, the `nodeSource` and `nodeTarget`, which should return the same - * keys as the `nodeKey` + * support, at a minimum, the {@link dc_graph.diagram#nodeSource nodeSource} and + * {@link dc_graph.diagram#nodeTarget nodeTarget}, which should return the same + * keys as the {@link dc_graph.diagram#nodeKey nodeKey} - * @name edgeGroup + * @method edgeGroup * @memberof dc_graph.diagram * @instance * @param {crossfilter.group} [edgeGroup] @@ -218,12 +231,13 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the unique key for each node. By * default, this accesses the `key` field of the object passed to it. The keys should match - * the keys returned by the `.edgeSource` and `.edgeTarget`. + * the keys returned by the {@link dc_graph.diagram#edgeSource edgeSource} and + * {@link dc_graph.diagram#edgeTarget edgeTarget}. - * @name nodeKey + * @method nodeKey * @memberof dc_graph.diagram * @instance - * @param {Function} [nodeKey] + * @param {Function} [nodeKey=function(kv) { return kv.key }] * @return {Function} * @return {dc_graph.diagram} **/ @@ -235,10 +249,10 @@ dc_graph.diagram = function (parent, chartGroup) { * Set or get the function which will be used to retrieve the unique key for each edge. By * default, this accesses the `key` field of the object passed to it. - * @name edgeKey + * @method edgeKey * @memberof dc_graph.diagram * @instance - * @param {Function} [edgeKey] + * @param {Function} [edgeKey=function(kv) { return kv.key }] * @return {Function} * @return {dc_graph.diagram} **/ @@ -252,10 +266,10 @@ dc_graph.diagram = function (parent, chartGroup) { * nodes; if it does not, or if the node is currently filtered out, the edge will not be * displayed. By default, looks for `.value.sourcename`. - * @name edgeSource + * @method edgeSource * @memberof dc_graph.diagram * @instance - * @param {Function} [edgeSource] + * @param {Function} [edgeSource=function(kv) { return kv.value.sourcename; }] * @return {Function} * @return {dc_graph.diagram} **/ @@ -265,13 +279,14 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the target (destination/head) key - * of the edge objects. The key must equal the key returned by the `.nodeKey` for one of - * the nodes; if it does not, or if the node is currently filtered out, the edge will not - * be displayed. By default, looks for `.value.targetname`. - * @name edgeTarget + * of the edge objects. The key must equal the key returned by the + * {@link dc_graph.diagram#nodeKey nodeKey} for one of the nodes; if it does not, or if the node + * is currently filtered out, the edge will not be displayed. By default, looks for + * `.value.targetname`. + * @method edgeTarget * @memberof dc_graph.diagram * @instance - * @param {Function} [edgeTarget] + * @param {Function} [edgeTarget=function(kv) { return kv.value.targetname; }] * @return {Function} * @return {dc_graph.diagram} **/ @@ -282,7 +297,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the radius, in pixels, for each * node. This determines the height of nodes,and if `nodeFitLabel` is false, the width too. - * @name nodeRadius + * @method nodeRadius * @memberof dc_graph.diagram * @instance * @param {Function|Number} [nodeRadius=25] @@ -295,7 +310,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Set or get the function which will be used to retrieve the stroke width, in pixels, for * drawing the outline of each node. According to the SVG specification, the outline will * be drawn half on top of the fill, and half outside. Default: 1 - * @name nodeStrokeWidth + * @method nodeStrokeWidth * @memberof dc_graph.diagram * @instance * @param {Function|Number} [nodeStrokeWidth=1] @@ -307,7 +322,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the stroke color for the outline * of each node. - * @name nodeStroke + * @method nodeStroke * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeStroke='black'] @@ -320,7 +335,7 @@ dc_graph.diagram = function (parent, chartGroup) { * If set, the value returned from `nodeFill` will be processed through this * {@link https://github.com/mbostock/d3/wiki/Scales d3.scale} * to return the fill color. If falsy, uses the identity function (no scale). - * @name nodeFillScale + * @method nodeFillScale * @memberof dc_graph.diagram * @instance * @param {Function|d3.scale} [nodeFillScale] @@ -332,7 +347,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the fill color for the body of each * node. - * @name nodeFill + * @method nodeFill * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeFill='white'] @@ -343,7 +358,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the opacity of each node. - * @name nodeOpacity + * @method nodeOpacity * @memberof dc_graph.diagram * @instance * @param {Function|Number} [nodeOpacity=1] @@ -355,7 +370,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the padding or minimum distance, in pixels, for a node. (Will be distributed * to both sides of the node.) - * @name nodePadding + * @method nodePadding * @memberof dc_graph.diagram * @instance * @param {Function|Number} [nodePadding=6] @@ -367,7 +382,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the label text to display in each * node. By default, looks for a field `label` or `name` inside the `value` field. - * @name nodeLabel + * @method nodeLabel * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeLabel] @@ -385,7 +400,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the label fill color. Default: null - * @name nodeLabelFill + * @method nodeLabelFill * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeLabelFill=null] @@ -396,7 +411,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Whether to fit the node shape around the label - * @name nodeFitLabel + * @method nodeFitLabel * @memberof dc_graph.diagram * @instance * @param {Function|Boolean} [nodeFitLabel=true] @@ -414,7 +429,7 @@ dc_graph.diagram = function (parent, chartGroup) { * * If `shape = polygon`: * * `sides`: number of sides for a polygon - * @name nodeShape + * @method nodeShape * @memberof dc_graph.diagram * @instance * @param {Function|Object} [nodeShape={shape: 'ellipse'}] @@ -431,7 +446,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the node title, usually rendered * as a tooltip. By default, uses the key of the node. - * @name nodeTitle + * @method nodeTitle * @memberof dc_graph.diagram * @instance * @param {Function|String} [nodeTitle] @@ -452,10 +467,10 @@ dc_graph.diagram = function (parent, chartGroup) { * them. If specified, `.nodeOrdering` provides an accessor that returns a key to sort the * nodes on. *It would be better not to rely on ordering to affect layout, but it may * affect the layout in some cases.* - * @name nodeOrdering + * @method nodeOrdering * @memberof dc_graph.diagram * @instance - * @param {Function} [nodeOrdering] + * @param {Function} [nodeOrdering=null] * @return {Function} * @return {dc_graph.diagram} **/ @@ -465,10 +480,10 @@ dc_graph.diagram = function (parent, chartGroup) { * Specify an accessor that returns an {x,y} coordinate for a node that should be * {@link https://github.com/tgdwyer/WebCola/wiki/Fixed-Node-Positions fixed in place}, * and returns falsy for other nodes. - * @name nodeFixed + * @method nodeFixed * @memberof dc_graph.diagram * @instance - * @param {Function|Object} [nodeFixed] + * @param {Function|Object} [nodeFixed=null] * @return {Function|Object} * @return {dc_graph.diagram} **/ @@ -477,7 +492,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the stroke color for the edges. - * @name edgeStroke + * @method edgeStroke * @memberof dc_graph.diagram * @instance * @param {Function|String} [edgeStroke='black'] @@ -488,7 +503,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the stroke width for the edges. - * @name edgeStrokeWidth + * @method edgeStrokeWidth * @memberof dc_graph.diagram * @instance * @param {Function|Number} [edgeStrokeWidth=1] @@ -500,7 +515,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the edge opacity, a number from 0 * to 1. - * @name edgeOpacity + * @method edgeOpacity * @memberof dc_graph.diagram * @instance * @param {Function|Number} [edgeOpacity=1] @@ -512,7 +527,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Set or get the function which will be used to retrieve the edge label text. The label is * displayed when an edge is hovered over. By default, uses the `edgeKey`. - * @name edgeLabel + * @method edgeLabel * @memberof dc_graph.diagram * @instance * @param {Function|String} [edgeLabel] @@ -532,7 +547,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Set or get the function which will be used to retrieve the name of the arrowhead to use * for the target/ head/destination of the edge. Arrow symbols can be specified with * `.defineArrow()`. Return null to display no arrowhead. - * @name edgeArrowhead + * @method edgeArrowhead * @memberof dc_graph.diagram * @instance * @param {Function|String} [edgeArrowhead='vee'] @@ -545,7 +560,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Set or get the function which will be used to retrieve the name of the arrow tail to use * for the tail/source of the edge. Arrow symbols can be specified with * `.defineArrow()`. Return null to display no arrowtail. - * @name edgeArrowtail + * @method edgeArrowtail * @memberof dc_graph.diagram * @instance * @param {Function|String} [edgeArrowtail=null] @@ -556,7 +571,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Multiplier for arrow size. - * @name edgeArrowSize + * @method edgeArrowSize * @memberof dc_graph.diagram * @instance * @param {Function|Number} [edgeArrowSize=1] @@ -569,7 +584,7 @@ dc_graph.diagram = function (parent, chartGroup) { * To draw an edge but not have it affect the layout, specify a function which returns * false for that edge. By default, will return false if the `notLayout` field of the edge * value is truthy, true otherwise. - * @name edgeIsLayout + * @method edgeIsLayout * @memberof dc_graph.diagram * @instance * @param {Function|Boolean} [edgeIsLayout] @@ -598,20 +613,22 @@ dc_graph.diagram = function (parent, chartGroup) { * {@link https://github.com/tgdwyer/WebCola/wiki/link-lengths the cola.js wiki} * for more details. * 'none' - no edge lengths will be specified - * @name lengthStrategy + * + * **Deprecated**: Use {@link dc_graph.cola_layout#lengthStrategy cola_layout.lengthStrategy} instead. + * @method lengthStrategy * @memberof dc_graph.diagram * @instance * @param {Function|String} [lengthStrategy='symmetric'] * @return {Function|String} * @return {dc_graph.diagram} **/ - _chart.lengthStrategy = property('symmetric'); + _chart.lengthStrategy = deprecate_layout_algo_parameter('lengthStrategy'); /** * When the `.lengthStrategy` is 'individual', this accessor will be used to read the * length of each edge. By default, reads the `distance` field of the edge. If the * distance is falsy, uses the `baseLength`. - * @name edgeLength + * @method edgeLength * @memberof dc_graph.diagram * @instance * @param {Function|Number} [edgeLength] @@ -630,7 +647,9 @@ dc_graph.diagram = function (parent, chartGroup) { /** * This should be equivalent to rankdir and ranksep in the dagre/graphviz nomenclature, but for * now it is separate. - * @name flowLayout + * + * **Deprecated**: use {@link dc_graph.cola_layout#flowLayout cola_layout.flowLayout} instead. + * @method flowLayout * @memberof dc_graph.diagram * @instance * @param {Object} [flowLayout] @@ -640,38 +659,42 @@ dc_graph.diagram = function (parent, chartGroup) { * // flow in x with min separation 200 * chart.flowLayout({axis: 'x', minSeparation: 200}) **/ - _chart.flowLayout = property(null); + _chart.flowLayout = deprecate_layout_algo_parameter('flowLayout'); /** * Direction to draw ranks. Currently for dagre and expand_collapse, but I think cola could be * generated from graphviz-style since it is more general. - * @name rankdir + * + * **Deprecated**: use {@link dc_graph.dagre_layout#rankdir dagre_layout.rankdir} instead. + * @method rankdir * @memberof dc_graph.diagram * @instance * @param {String} [rankdir] **/ - _chart.rankdir = property('TB'); + _chart.rankdir = deprecate_layout_algo_parameter('rankdir'); /** * Gets or sets the default edge length (in pixels) when the `.lengthStrategy` is * 'individual', and the base value to be multiplied for 'symmetric' and 'jaccard' edge * lengths. - * @name baseLength + * + * **Deprecated**: use {@link dc_graph.cola_layout#baseLength cola_layout.baseLength} instead. + * @method baseLength * @memberof dc_graph.diagram * @instance * @param {Number} [baseLength] * @return {Number} * @return {dc_graph.diagram} **/ - _chart.baseLength = property(30); + _chart.baseLength = deprecate_layout_algo_parameter('baseLength'); /** * Gets or sets the transition duration, the length of time each change to the diagram will * be animated. - * @name transitionDuration + * @method transitionDuration * @memberof dc_graph.diagram * @instance - * @param {Number} [transitionDuration] + * @param {Number} [transitionDuration=500] * @return {Number} * @return {dc_graph.diagram} **/ @@ -685,10 +708,10 @@ dc_graph.diagram = function (parent, chartGroup) { * * `insmod`: insert operations happen before modifies * * Deletions always happen before/during layout computation. - * @name stageTransitions + * @method stageTransitions * @memberof dc_graph.diagram * @instance - * @param {String} [stageTransitions] + * @param {String} [stageTransitions='none'] * @return {String} * @return {dc_graph.diagram} **/ @@ -698,10 +721,10 @@ dc_graph.diagram = function (parent, chartGroup) { * The delete transition happens simultaneously with layout, which can take longer * than the transition duration. Delaying it can bring it closer to the other * staged transitions. - * @name deleteDelay + * @method deleteDelay * @memberof dc_graph.diagram * @instance - * @param {Number} [deleteDelay] + * @param {Number} [deleteDelay=0] * @return {Number} * @return {dc_graph.diagram} **/ @@ -709,10 +732,10 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Whether to put connected components each in their own group, to stabilize layout. - * @name groupConnected + * @method groupConnected * @memberof dc_graph.diagram * @instance - * @param {String} [stageTransitions] + * @param {String} [stageTransitions=false] * @return {String} * @return {dc_graph.diagram} **/ @@ -721,7 +744,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Gets or sets the maximum time spent doing layout for a render or redraw. Set to 0 for no * limit. - * @name timeLimit + * @method timeLimit * @memberof dc_graph.diagram * @instance * @param {Function|Number} [timeLimit=0] @@ -756,7 +779,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Because it is tedious to write code to generate constraints for a graph, **dc.graph.js** * also includes a {@link #dc_graph+constraint_pattern constraint generator} to produce * this constrain function, specifying the constraints themselves in a graph. - * @name constrain + * @method constrain * @memberof dc_graph.diagram * @instance * @param {Function} [constrain] @@ -770,7 +793,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * If there are multiple edges between the same two nodes, start them this many pixels away * from the original so they don't overlap. - * @name parallelEdgeOffset + * @method parallelEdgeOffset * @memberof dc_graph.diagram * @instance * @param {Number} [parallelEdgeOffset=10] @@ -787,10 +810,10 @@ dc_graph.diagram = function (parent, chartGroup) { * *It would be better not to rely on ordering to affect layout, but it may affect the * layout in some cases. (Probably less than node ordering, but it does affect which * parallel edge is which.)* - * @name edgeOrdering + * @method edgeOrdering * @memberof dc_graph.diagram * @instance - * @param {Function} [edgeOrdering] + * @param {Function} [edgeOrdering=null] * @return {Function} * @return {dc_graph.diagram} **/ @@ -812,7 +835,7 @@ dc_graph.diagram = function (parent, chartGroup) { * This flag can be set true to construct a new cola layout object on each redraw. However, * layout seems to be more stable if this is set false, so hopefully this will be fixed * soon. - * @name initLayoutOnRedraw + * @method initLayoutOnRedraw * @memberof dc_graph.diagram * @instance * @param {Boolean} [initLayoutOnRedraw=false] @@ -823,7 +846,7 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Whether to perform layout when the data is unchanged from the last redraw. - * @name layoutUnchanged + * @method layoutUnchanged * @memberof dc_graph.diagram * @instance * @param {Boolean} [layoutUnchanged=false] @@ -836,7 +859,7 @@ dc_graph.diagram = function (parent, chartGroup) { * When `layoutUnchanged` is false, this will force layout to happen again. This may be needed * when changing a parameter but not changing the topology of the graph. (Yes, probably should * not be necessary.) - * @name relayout + * @method relayout * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -848,22 +871,29 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Function to call to generate an initial layout. Takes (diagram, nodes, edges) - * @name initialLayout + * + * **Deprecated**: The only layout that was using this was `tree_positions` and it never + * worked as an initialization step for cola, as was originally intended. Now that + * `tree_layout` is a layout algorithm, this should go away. + * + * In the future, there will be support for chaining layout algorithms. But that will be a + * matter of composing them into a super-algorithm, not a special step like this was. + * @method initialLayout * @memberof dc_graph.diagram * @instance * @param {Function} [initialLayout=null] * @return {Function} * @return {dc_graph.diagram} **/ - _chart.initialLayout = property(null); + _chart.initialLayout = deprecated_property('initialLayout is deprecated - use layout algorithms instead', null); - _chart.initialOnly = property(false); + _chart.initialOnly = deprecated_property('initialOnly is deprecated - see the initialLayout deprecation notice in the documentation', false); /** * By default, all nodes are included, and edges are only included if both end-nodes are * visible. If `.induceNodes` is set, then only nodes which have at least one edge will be * shown. - * @name induceNodes + * @method induceNodes * @memberof dc_graph.diagram * @instance * @param {Boolean} [induceNodes=false] @@ -876,7 +906,7 @@ dc_graph.diagram = function (parent, chartGroup) { * If this flag is true, the positions of nodes and will be updated while layout is * iterating. If false, the positions will only be updated once layout has * stabilized. Note: this may not be compatible with transitionDuration. - * @name showLayoutSteps + * @method showLayoutSteps * @memberof dc_graph.diagram * @instance * @param {Boolean} [showLayoutSteps=false] @@ -888,10 +918,10 @@ dc_graph.diagram = function (parent, chartGroup) { /** * Assigns a legend object which will be displayed within the same SVG element and * according to the visual encoding of this diagram. - * @name legend + * @method legend * @memberof dc_graph.diagram * @instance - * @param {Object} [legend] + * @param {Object} [legend=null] * @return {Object} * @return {dc_graph.diagram} **/ @@ -904,7 +934,7 @@ dc_graph.diagram = function (parent, chartGroup) { * be used to display tooltips on nodes using `dc_graph.tip`. * The child needs to support a `parent` method, the diagram to modify. - * @name child + * @method child * @memberof dc_graph.diagram * @instance * @param {String} [id] - the name of the child to modify or add @@ -935,22 +965,57 @@ dc_graph.diagram = function (parent, chartGroup) { }; /** - * Currently, you can specify 'cola' (the default) or 'dagre' as the Layout Algorithm and it - * will replace the back-end. In the future, there will be subclasses like colaDiagram and - * dagreDiagram with appropriate interfaces for each, but it is not yet clear which features are - * common between them. - * @name layoutAlgorithm + * Specify 'cola' (the default) or 'dagre' as the Layout Algorithm and it will replace the + * back-end. + * + * **Deprecated**: use {@link dc_graph.diagram#layoutEngine diagram.layoutEngine} with the engine + * object instead + * @method layoutAlgorithm * @memberof dc_graph.diagram * @instance - * @param {String} [algo] - the name of the layout algorithm to use + * @param {String} [algo='cola'] - the name of the layout algorithm to use * @example * // use dagre for layout * diagram.layoutAlgorithm('dagre'); * @return {dc_graph.diagram} **/ - _chart.layoutAlgorithm = property('cola'); + _chart.layoutAlgorithm = function(value, skipWarning) { + if(!arguments.length) + return _chart.layoutEngine() ? _chart.layoutEngine().layoutAlgorithm() : 'cola'; + if(!skipWarning) + console.warn('dc.graph.diagram.layoutAlgorithm is depecrated - pass the layout engine object to dc_graph.diagram.layoutEngine instead'); + + var engine; + switch(value) { + case 'cola': + engine = dc_graph.cola_layout(); + break; + case 'dagre': + engine = dc_graph.dagre_layout(); + } + engine = dc_graph.webworker_layout(engine); + _chart.layoutEngine(engine); + return this; + }; + + /** + * The layout engine determines how to draw things! + * @method layoutEngine + * @memberof dc_graph.diagram + * @instance + * @param {Object} [engine=null] - the layout engine to use + * @example + * // use cola with no webworker + * diagram.layoutEngine(dc_graph.cola_layout()); + * // use dagre with a webworker + * diagram.layoutEngine(dc_graph.webworker_layout(dc_graph.dagre_layout())); + **/ + _chart.layoutEngine = property(null).react(function(val) { + if(val && val.parent) + val.parent(_chart); + }); - _chart.tickSize = property(1); + _chart.tickSize = deprecate_layout_algo_parameter('tickSize'); _chart.edgeId = function(d) { @@ -972,42 +1037,25 @@ dc_graph.diagram = function (parent, chartGroup) { }; /** - * Instructs cola.js to fit the connected components. Default: true - * @name handleDisconnected + * Instructs cola.js to fit the connected components. + * + * **Deprecated**: Use + * {@link dc_graph.cola_layout#handleDisconnected cola_layout.handleDisconnected} instead. + * @method handleDisconnected * @memberof dc_graph.diagram * @instance * @param {Boolean} [handleDisconnected=true] * @return {Boolean} * @return {dc_graph.diagram} **/ - _chart.handleDisconnected = property(true); + _chart.handleDisconnected = deprecate_layout_algo_parameter('handleDisconnected'); function initLayout() { - if(!_worker) - _worker = new Worker(script_path() + 'dc.graph.' + _chart.layoutAlgorithm() + '.worker.js'); - var args = { + if(!_chart.layoutEngine()) + _chart.layoutAlgorithm('cola', true); + _chart.layoutEngine().init({ width: _chart.width(), height: _chart.height() - }; - // generalize this? class hierarchy, what? - switch(_chart.layoutAlgorithm()) { - case 'cola': - Object.assign(args, { - handleDisconnected: _chart.handleDisconnected(), - lengthStrategy: _chart.lengthStrategy(), - baseLength: _chart.baseLength(), - flowLayout: _chart.flowLayout(), - tickSize: _chart.tickSize() - }); - break; - case 'dagre': - Object.assign(args, { - rankdir: _chart.rankdir() - }); - } - _worker.postMessage({ - command: 'init', - args: args }); } @@ -1117,8 +1165,7 @@ dc_graph.diagram = function (parent, chartGroup) { } _running = true; - if(_worker) - _worker.postMessage({command: 'stop'}); + _chart.layoutEngine().stop(); if(_chart.initLayoutOnRedraw()) initLayout(); @@ -1139,6 +1186,7 @@ dc_graph.diagram = function (parent, chartGroup) { v1.cola.dcg_nodeKey = _chart.nodeKey.eval(v1); if(_chart.nodeFixed()) v1.cola.dcg_nodeFixed = _chart.nodeFixed.eval(v1); + _chart.layoutEngine().populateLayoutNode(v1.cola, v1); }); var wedges = regenerate_objects(_edges, edges, function(e) { return _chart.edgeKey()(e); @@ -1151,6 +1199,7 @@ dc_graph.diagram = function (parent, chartGroup) { e1.source = _nodes[e1.cola.dcg_edgeSource]; e1.target = _nodes[e1.cola.dcg_edgeTarget]; e1.cola.dcg_edgeLength = _chart.edgeLength.eval(e1); + _chart.layoutEngine().populateLayoutEdge(e1.cola, e1); }); // remove edges that don't have both end nodes @@ -1420,24 +1469,22 @@ dc_graph.diagram = function (parent, chartGroup) { var e = _edges[re.dcg_edgeKey]; }); } - _worker.onmessage = function(e) { - var args = e.data.args; - switch(e.data.response) { - case 'tick': + _chart.layoutEngine() + .on('tick', function(nodes, edges) { var elapsed = Date.now() - startTime; - populate_cola(args.nodes, args.edges); + if(!_chart.initialOnly()) + populate_cola(nodes, edges); if(_chart.showLayoutSteps()) draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter); if(_needsRedraw || _chart.timeLimit() && elapsed > _chart.timeLimit()) { console.log('cancelled'); - _worker.postMessage({ - command: 'stop' - }); + _chart.layoutEngine().stop(); } - break; - case 'end': + }) + .on('end', function(nodes, edges) { if(!_chart.showLayoutSteps()) { - populate_cola(args.nodes, args.edges); + if(!_chart.initialOnly()) + populate_cola(nodes, edges); draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter); } else layout_done(true); @@ -1456,32 +1503,28 @@ dc_graph.diagram = function (parent, chartGroup) { calc_bounds(node, edge); if(do_zoom) auto_zoom(); - break; - case 'start': - console.log('algo ' + _chart.layoutAlgorithm() + ' started.'); + }) + .on('start', function() { + console.log('algo ' + _chart.layoutEngine().layoutAlgorithm() + ' started.'); _dispatch.start(); - } - }; - _dispatch.start(); // cola doesn't seem to fire this itself? - _worker.postMessage({ - command: 'data', - args: { - nodes: wnodes.map(function(v) { return v.cola; }), - edges: layout_edges.map(function(v) { return v.cola; }), - constraints: constraints, - opts: {groupConnected: _chart.groupConnected()} - } - }); - _worker.postMessage({ - command: 'start', - args: { + }); + + if(_chart.initialOnly()) + _chart.layoutEngine().dispatch().end(wnodes, wedges); + else { + _dispatch.start(); // cola doesn't seem to fire this itself? + _chart.layoutEngine().data( + wnodes.map(function(v) { return v.cola; }), + layout_edges.map(function(v) { return v.cola; }), + constraints, + {groupConnected: _chart.groupConnected()} + ); + _chart.layoutEngine().start({ initialUnconstrainedIterations: 10, initialUserConstraintIterations: 20, - initialAllConstraintsIterations: 20, - initialOnly: _chart.initialOnly(), - showLayoutSteps: _chart.showLayoutSteps() - } - }); + initialAllConstraintsIterations: 20 + }); + } return this; }; @@ -1860,7 +1903,7 @@ dc_graph.diagram = function (parent, chartGroup) { * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Erases any existing SVG elements and draws the diagram from scratch. `.render()` * must be called the first time, and `.redraw()` can be called after that. - * @name render + * @method render * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -1886,7 +1929,7 @@ dc_graph.diagram = function (parent, chartGroup) { * * `drawn(nodes, edges)` - the node and edge elements have been rendered to the screen * and can be modified through the passed d3 selections. * * `end()` - diagram layout has completed. - * @name on + * @method on * @memberof dc_graph.diagram * @instance * @param {String} [event] - the event to subscribe to @@ -1902,7 +1945,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Returns an object with current statistics on graph layout. * * `nnodes` - number of nodes displayed * * `nedges` - number of edges displayed - * @name getStats + * @method getStats * @memberof dc_graph.diagram * @instance * @return {} @@ -1923,7 +1966,7 @@ dc_graph.diagram = function (parent, chartGroup) { * ``` * Since this function returns a d3 selection, it is not chainable. (However, d3 selection * calls can be chained after it.) - * @name select + * @method select * @memberof dc_graph.diagram * @instance * @param {String} [selector] @@ -1946,7 +1989,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Since this function returns a d3 selection, it is not chainable. (However, d3 selection * calls can be chained after it.) - * @name selectAll + * @method selectAll * @memberof dc_graph.diagram * @instance * @param {String} [selector] @@ -1962,7 +2005,7 @@ dc_graph.diagram = function (parent, chartGroup) { * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Returns the top svg element for this specific chart. You can also pass in a new * svg element, but setting the svg element on a diagram may have unexpected consequences. - * @name svg + * @method svg * @memberof dc_graph.diagram * @instance * @param {d3.selection} [selection] @@ -1983,7 +2026,7 @@ dc_graph.diagram = function (parent, chartGroup) { * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Remove the diagram's SVG elements from the dom and recreate the container SVG * element. - * @name resetSvg + * @method resetSvg * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -1997,7 +2040,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Standard dc.js * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Causes all charts in the chart group to be redrawn. - * @name redrawGroup + * @method redrawGroup * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -2010,7 +2053,7 @@ dc_graph.diagram = function (parent, chartGroup) { * Standard dc.js * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin} * method. Causes all charts in the chart group to be rendered. - * @name renderGroup + * @method renderGroup * @memberof dc_graph.diagram * @instance * @return {dc_graph.diagram} @@ -2027,7 +2070,7 @@ dc_graph.diagram = function (parent, chartGroup) { * (If further customization is required, it is possible to append other `svg:defs` to * `chart.svg()` and use refer to them by `id`.) - * @name defineArrow + * @method defineArrow * @memberof dc_graph.diagram * @instance * @param {Number} name - the identifier to give the marker, to be used with diff --git a/src/expand_collapse.js b/src/expand_collapse.js index 63ba8abb..9e86c0b8 100644 --- a/src/expand_collapse.js +++ b/src/expand_collapse.js @@ -95,7 +95,7 @@ dc_graph.expand_collapse = function(get_degree, expand, collapse, dirs) { var key = chart.nodeKey.eval(d); var dir = d.dcg_expand_selected.dir, n = d.dcg_expand_selected.n, - af = spike_directioner(chart.rankdir(), dir, n), + af = spike_directioner(chart.layoutEngine().rankdir(), dir, n), ret = Array(n); for(var i = 0; i d.cola.y ? 'out' : 'in'; case 'BT': @@ -153,7 +153,7 @@ dc_graph.expand_collapse = function(get_degree, expand, collapse, dirs) { case 'RL': return x < d.cola.x ? 'out' : 'in'; } - throw new Error('unknown rankdir ' + chart.rankdir()); + throw new Error('unknown rankdir ' + chart.layoutEngine().rankdir()); } diff --git a/src/graphviz_attrs.js b/src/graphviz_attrs.js new file mode 100644 index 00000000..5a72bfd2 --- /dev/null +++ b/src/graphviz_attrs.js @@ -0,0 +1,29 @@ +/** + * `dc_graph.graphviz_attrs defines a basic set of attributes which layout engines should + * implement - although these are not // required, they make it easier for clients and + * behaviors (like expand_collapse) to work with // multiple layout engines // these + * attributes are {@link http://www.graphviz.org/doc/info/attrs.html from graphviz} + * @class graphviz_attrs + * @memberof dc_graph + * @return {Object} + **/ +dc_graph.graphviz_attrs = function() { + return { + /** + * Direction to draw ranks. + * @method rankdir + * @memberof dc_graph.graphviz_attrs + * @instance + * @param {String} [rankdir='TB'] 'TB', 'LR', 'BT', or 'RL' + **/ + rankdir: property('TB'), + /** + * Spacing in between ranks. + * @method ranksep + * @memberof dc_graph.graphviz_attrs + * @instnace + * @param {String} [ranksep=40] + **/ + ranksep: property(40) + }; +}; diff --git a/src/tree_constraints.js b/src/tree_constraints.js index df8ec878..de2551f4 100644 --- a/src/tree_constraints.js +++ b/src/tree_constraints.js @@ -1,5 +1,6 @@ // this naive tree-drawer is paraphrased from memory from dot dc_graph.tree_constraints = function(rootf, treef, xgap, ygap) { + console.warn('dc_graph.tree_constraints is deprecated - it never worked right and may not be a good idea'); return function(diagram, nodes, edges) { var constraints = []; var x = 0; diff --git a/src/tree_layout.js b/src/tree_layout.js new file mode 100644 index 00000000..f9e3335a --- /dev/null +++ b/src/tree_layout.js @@ -0,0 +1,162 @@ +/** + * `dc_graph.tree_layout` is a very simple and not very bright tree layout. It can draw any DAG, but + * tries to position the nodes as a tree. + * @class tree_layout + * @memberof dc_graph + * @param {String} [id=uuid()] - Unique identifier + * @return {dc_graph.tree_layout} + **/ +dc_graph.tree_layout = function(id) { + var _layoutId = id || uuid(); + var _dispatch = d3.dispatch('tick', 'start', 'end'); + var _dfs; + + function init(options) { + var x; + var nodeWidth = d3.functor(options.nodeWidth); + function best_dist(left, right) { + return (nodeWidth(left) + nodeWidth(right)) / 2; + } + _dfs = dc_graph.depth_first_traversal({ + nodeid: function(n) { + return n.dcg_nodeKey; + }, + sourceid: function(n) { + return n.dcg_edgeSource; + }, + targetid: function(n) { + return n.dcg_edgeTarget; + }, + init: function() { + x = options.offsetX; + }, + row: function(n) { + return n.dcg_rank; + }, + place: function(n, r, row) { + if(row.length) { + var left = row[row.length-1]; + var g = (nodeWidth(left) + nodeWidth(n)) / 2; + x = Math.max(x, left.left_x + g); + } + n.left_x = x; + n.hit_ins = 1; + n.y = r*options.gapY + options.offsetY; + }, + sib: function(isroot, left, right) { + var g = best_dist(left, right); + if(isroot) g = g*1.5; + x += g; + }, + pop: function(n) { + n.x = (n.left_x + x)/2; + }, + skip: function(n, indegree) { + // rolling average of in-neighbor x positions + n.x = (n.hit_ins*n.x + x)/++n.hit_ins; + if(n.hit_ins === indegree) + delete n.hit_ins; + }, + finish: function(rows) { + // this is disgusting. patch up any places where nodes overlap by scanning + // right far enough to find the space, then fill from left to right at the + // minimum gap + rows.forEach(function(row) { + var sort = row.sort(function(a, b) { return a.x - b.x; }); + var badi = null, badl = null, want; + for(var i=0; i0) + --badi; // might want to use more left + var l, limit; + if(i < sort.length - 2) { // found space before right + var extra = right.x - (badl + want); + l = sort[badi].x + extra/2; + limit = i+1; + } else { + l = Math.max(sort[badi].x, badl - best_dist(sort[badi], sort[badi+1]) - (want - right.x + badl)/2); + limit = sort.length; + } + for(var j = badi+1; j 0) { + for (var i in scripts) { + if (scripts[i].src && scripts[i].src.match(new RegExp(filename+'$'))) { + _path = scripts[i].src.replace(new RegExp('(.*)'+filename+'$'), '$1'); + break; + } + } + } + } + return _path; + }; +}(); diff --git a/src/webworker_layout.js b/src/webworker_layout.js new file mode 100644 index 00000000..654c8400 --- /dev/null +++ b/src/webworker_layout.js @@ -0,0 +1,93 @@ +var _workers = {}; +function create_worker(layoutAlgorithm) { + if(!_workers[layoutAlgorithm]) { + var worker = _workers[layoutAlgorithm] = { + worker: new Worker(script_path() + 'dc.graph.' + layoutAlgorithm + '.worker.js'), + layouts: {} + }; + worker.worker.onmessage = function(e) { + var layoutId = e.data.layoutId; + if(!worker.layouts[layoutId]) + throw new Error('layoutId "' + layoutId + '" unknown!'); + worker.layouts[layoutId].dispatch()[e.data.response].apply(null, e.data.args); + }; + } + return _workers[layoutAlgorithm]; +} + +dc_graph.webworker_layout = function(layoutEngine) { + var _tick, _done, _dispatch = d3.dispatch('init', 'start', 'tick', 'end'); + var _worker = create_worker(layoutEngine.layoutAlgorithm()); + var engine = {}; + _worker.layouts[layoutEngine.layoutId()] = engine; + + engine.parent = function(parent) { + if(layoutEngine.parent) + layoutEngine.parent(parent); + }; + engine.init = function(options) { + options = layoutEngine.optionNames().reduce( + function(options, option) { + options[option] = layoutEngine[option](); + return options; + }, options); + _worker.worker.postMessage({ + command: 'init', + args: { + layoutId: layoutEngine.layoutId(), + options: options + } + }); + return this; + }; + engine.data = function(nodes, edges, constraints, options) { + _worker.worker.postMessage({ + command: 'data', + args: { + layoutId: layoutEngine.layoutId(), + nodes: nodes, + edges: edges, + constraints: constraints, + options: options + } + }); + }; + engine.start = function(options) { + _worker.worker.postMessage({ + command: 'start', + args: { + layoutId: layoutEngine.layoutId(), + options: options + } + }); + }; + engine.stop = function() { + _worker.worker.postMessage({ + command: 'stop', + args: { + layoutId: layoutEngine.layoutId() + } + }); + return this; + }; + // stopgap while layout options are still on diagram + engine.getEngine = function() { + return layoutEngine; + }; + // somewhat sketchy - do we want this object to be transparent or not? + var passthroughs = ['layoutAlgorithm', 'populateLayoutNode', 'populateLayoutEdge', 'rankdir', 'ranksep']; + passthroughs.forEach(function(name) { + engine[name] = function() { + var ret = layoutEngine[name].apply(layoutEngine, arguments); + return arguments.length ? this : ret; + }; + }); + engine.on = function(event, f) { + _dispatch.on(event, f); + return this; + }; + engine.dispatch = function() { + return _dispatch; + }; + return engine; +}; diff --git a/src/webworker_message.js b/src/webworker_message.js new file mode 100644 index 00000000..a16a3b0f --- /dev/null +++ b/src/webworker_message.js @@ -0,0 +1,54 @@ +var _layouts; + +function postResponse(event, layoutId) { + return function() { + var message = { + response: event, + layoutId: layoutId + }; + message.args = Array.prototype.slice.call(arguments); + postMessage(message); + }; +} + +onmessage = function(e) { + var args = e.data.args; + switch(e.data.command) { + case 'init': + // find a function under dc_graph that has `scripts` + var layout_name; + for(var name in dc_graph) { + if(typeof dc_graph[name] === 'function' && dc_graph[name].scripts) + layout_name = name; + } + if(!_layouts) { + _layouts = {}; + importScripts.apply(null, dc_graph[layout_name].scripts); + } + + _layouts[args.layoutId] = dc_graph[layout_name]() + .on('tick', postResponse('tick', args.layoutId)) + .on('start', postResponse('start', args.layoutId)) + .on('end', postResponse('end', args.layoutId)) + .init(args.options); + break; + case 'data': + if(_layouts) + _layouts[args.layoutId].data(args.nodes, args.edges, args.constraints, args.options); + break; + case 'start': + // if(args.initialOnly) { + // if(args.showLayoutSteps) + // _tick(); + // _done(); + // } + // else + _layouts[args.layoutId].start(args.options); + break; + case 'stop': + if(_layouts) + _layouts[args.layoutId].stop(); + break; + } +}; + diff --git a/web/css/dc.css b/web/css/dc.css index f172c1c9..284fbb89 100644 --- a/web/css/dc.css +++ b/web/css/dc.css @@ -46,7 +46,7 @@ div.dc-chart { shape-rendering: crispEdges; } .dc-chart .axis text { - font: 10px "sans-serif"; } + font: 10px sans-serif; } .dc-chart .grid-line, .dc-chart .axis .grid-line, .dc-chart .grid-line line, .dc-chart .axis .grid-line line { fill: none; @@ -143,7 +143,7 @@ div.dc-chart { stroke-opacity: 0.2; } .dc-chart .box text { - font: 10px "sans-serif"; + font: 10px sans-serif; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; diff --git a/web/css/font-awesome.css b/web/css/font-awesome.css index b2a5fe2f..ee906a81 100644 --- a/web/css/font-awesome.css +++ b/web/css/font-awesome.css @@ -1,13 +1,13 @@ /*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.5.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg'); + src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; } @@ -118,31 +118,31 @@ } } .fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } .fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } .fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1); } .fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); @@ -1383,7 +1383,7 @@ .fa-digg:before { content: "\f1a6"; } -.fa-pied-piper:before { +.fa-pied-piper-pp:before { content: "\f1a7"; } .fa-pied-piper-alt:before { @@ -1509,6 +1509,7 @@ content: "\f1ce"; } .fa-ra:before, +.fa-resistance:before, .fa-rebel:before { content: "\f1d0"; } @@ -1831,6 +1832,7 @@ content: "\f23e"; } .fa-battery-4:before, +.fa-battery:before, .fa-battery-full:before { content: "\f240"; } @@ -2084,3 +2086,252 @@ .fa-percent:before { content: "\f295"; } +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/web/css/jquery-ui.css b/web/css/jquery-ui.css index 3efdd64d..93707f4c 100644 --- a/web/css/jquery-ui.css +++ b/web/css/jquery-ui.css @@ -1,8 +1,8 @@ -/*! jQuery UI - v1.10.4 - 2014-01-17 +/*! jQuery UI - v1.12.1 - 2016-09-14 * http://jqueryui.com -* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6 +* Copyright jQuery Foundation and other contributors; Licensed MIT */ /* Layout helpers ----------------------------------*/ @@ -38,9 +38,6 @@ .ui-helper-clearfix:after { clear: both; } -.ui-helper-clearfix { - min-height: 0; /* support: IE7 */ -} .ui-helper-zfix { width: 100%; height: 100%; @@ -48,7 +45,7 @@ left: 0; position: absolute; opacity: 0; - filter:Alpha(Opacity=0); + filter:Alpha(Opacity=0); /* support: IE8 */ } .ui-front { @@ -60,20 +57,27 @@ ----------------------------------*/ .ui-state-disabled { cursor: default !important; + pointer-events: none; } /* Icons ----------------------------------*/ - -/* states and images */ .ui-icon { - display: block; + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} /* Misc visuals ----------------------------------*/ @@ -90,24 +94,9 @@ display: block; cursor: pointer; position: relative; - margin-top: 2px; + margin: 2px 0 0 0; padding: .5em .5em .5em .7em; - min-height: 0; /* support: IE7 */ -} -.ui-accordion .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-noicons { - padding-left: .7em; -} -.ui-accordion .ui-accordion-icons .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-header .ui-accordion-header-icon { - position: absolute; - left: .5em; - top: 50%; - margin-top: -8px; + font-size: 100%; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; @@ -120,17 +109,78 @@ left: 0; cursor: default; } +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} .ui-button { + padding: .4em 1em; display: inline-block; position: relative; - padding: 0; line-height: normal; margin-right: .1em; cursor: pointer; vertical-align: middle; text-align: center; - overflow: visible; /* removes extra width in IE */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; } + .ui-button, .ui-button:link, .ui-button:visited, @@ -138,91 +188,129 @@ .ui-button:active { text-decoration: none; } + /* to make room for the icon, a width needs to be set here */ .ui-button-icon-only { - width: 2.2em; -} -/* button elements seem to need a little more width */ -button.ui-button-icon-only { - width: 2.4em; + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; } -.ui-button-icons-only { - width: 3.4em; + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; } -button.ui-button-icons-only { - width: 3.7em; + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; } -/* button text element */ -.ui-button .ui-button-text { - display: block; - line-height: normal; +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + } -.ui-button-text-only .ui-button-text { + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, -.ui-button-icons-only .ui-button-text { - padding: .4em; - text-indent: -9999999px; + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; } -.ui-button-text-icon-primary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 1em .4em 2.1em; +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; } -.ui-button-text-icon-secondary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 2.1em .4em 1em; +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; } -.ui-button-text-icons .ui-button-text { - padding-left: 2.1em; - padding-right: 2.1em; +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { +.ui-controlgroup .ui-controlgroup-label { padding: .4em 1em; } - -/* button icon element(s) */ -.ui-button-icon-only .ui-icon, -.ui-button-text-icon-primary .ui-icon, -.ui-button-text-icon-secondary .ui-icon, -.ui-button-text-icons .ui-icon, -.ui-button-icons-only .ui-icon { - position: absolute; - top: 50%; - margin-top: -8px; +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; } -.ui-button-icon-only .ui-icon { - left: 50%; - margin-left: -8px; +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; } -.ui-button-text-icon-primary .ui-button-icon-primary, -.ui-button-text-icons .ui-button-icon-primary, -.ui-button-icons-only .ui-button-icon-primary { - left: .5em; +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; } -.ui-button-text-icon-secondary .ui-button-icon-secondary, -.ui-button-text-icons .ui-button-icon-secondary, -.ui-button-icons-only .ui-button-icon-secondary { - right: .5em; +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; } -/* button sets */ -.ui-buttonset { - margin-right: 7px; +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); } -.ui-buttonset .ui-button { - margin-left: 0; - margin-right: -.3em; +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; } -/* workarounds */ -/* reset extra padding in Firefox, see h5bp.com/l */ -input.ui-button::-moz-focus-inner, -button.ui-button::-moz-focus-inner { - border: 0; - padding: 0; +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; } .ui-datepicker { width: 17em; @@ -276,7 +364,7 @@ button.ui-button::-moz-focus-inner { } .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { - width: 49%; + width: 45%; } .ui-datepicker table { width: 100%; @@ -389,8 +477,17 @@ button.ui-button::-moz-focus-inner { border-right-width: 0; border-left-width: 1px; } -.ui-dialog { + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { position: absolute; top: 0; left: 0; @@ -439,102 +536,51 @@ button.ui-button::-moz-focus-inner { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { - width: 12px; - height: 12px; - right: -5px; - bottom: -5px; - background-position: 16px 16px; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-menu { - list-style: none; - padding: 2px; - margin: 0; - display: block; - outline: none; -} -.ui-menu .ui-menu { - margin-top: -3px; - position: absolute; -} -.ui-menu .ui-menu-item { - margin: 0; - padding: 0; - width: 100%; - /* support: IE10, see #8844 */ - list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); -} -.ui-menu .ui-menu-divider { - margin: 5px -2px 5px -2px; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; -} -.ui-menu .ui-menu-item a { - text-decoration: none; - display: block; - padding: 2px .4em; - line-height: 1.5; - min-height: 0; /* support: IE7 */ - font-weight: normal; -} -.ui-menu .ui-menu-item a.ui-state-focus, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; } - -.ui-menu .ui-state-disabled { - font-weight: normal; - margin: .4em 0 .2em; - line-height: 1.5; +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; } -.ui-menu .ui-state-disabled a { - cursor: default; +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; } - -/* icon support */ -.ui-menu-icons { - position: relative; +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; } -.ui-menu-icons .ui-menu-item a { - position: relative; - padding-left: 2em; +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; } - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: .2em; - left: .2em; +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; } - -/* right-aligned */ -.ui-menu .ui-menu-icon { - position: static; - float: right; +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; } -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; } -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; } -.ui-progressbar .ui-progressbar-overlay { - background: url("images/animated-overlay.gif"); - height: 100%; - filter: alpha(opacity=25); - opacity: 0.25; +.ui-draggable .ui-dialog-titlebar { + cursor: move; } -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; } .ui-resizable { position: relative; @@ -543,6 +589,8 @@ button.ui-button::-moz-focus-inner { position: absolute; font-size: 0.1px; display: block; + -ms-touch-action: none; + touch-action: none; } .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { @@ -604,11 +652,73 @@ button.ui-button::-moz-focus-inner { right: -5px; top: -5px; } +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} .ui-selectable-helper { position: absolute; z-index: 100; border: 1px dotted black; } +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} .ui-slider { position: relative; text-align: left; @@ -619,6 +729,8 @@ button.ui-button::-moz-focus-inner { width: 1.2em; height: 1.2em; cursor: default; + -ms-touch-action: none; + touch-action: none; } .ui-slider .ui-slider-range { position: absolute; @@ -629,7 +741,7 @@ button.ui-button::-moz-focus-inner { background-position: 0 0; } -/* For IE8 - See #6727 */ +/* support: IE8 - See #6727 */ .ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range { filter: inherit; @@ -672,6 +784,10 @@ button.ui-button::-moz-focus-inner { .ui-slider-vertical .ui-slider-range-max { top: 0; } +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} .ui-spinner { position: relative; display: inline-block; @@ -683,14 +799,14 @@ button.ui-button::-moz-focus-inner { border: none; background: none; color: inherit; - padding: 0; + padding: .222em 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; - margin-right: 22px; + margin-right: 2em; } .ui-spinner-button { - width: 16px; + width: 1.6em; height: 50%; font-size: .5em; padding: 0; @@ -704,16 +820,9 @@ button.ui-button::-moz-focus-inner { } /* more specificity required here to override default borders */ .ui-spinner a.ui-spinner-button { - border-top: none; - border-bottom: none; - border-right: none; -} -/* vertically center icon */ -.ui-spinner .ui-icon { - position: absolute; - margin-top: -8px; - top: 50%; - left: 0; + border-top-style: none; + border-bottom-style: none; + border-right-style: none; } .ui-spinner-up { top: 0; @@ -721,12 +830,6 @@ button.ui-button::-moz-focus-inner { .ui-spinner-down { bottom: 0; } - -/* TR overrides */ -.ui-spinner .ui-icon-triangle-1-s { - /* need to fix icons sprite */ - background-position: -65px -16px; -} .ui-tabs { position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ padding: .2em; @@ -773,8 +876,6 @@ button.ui-button::-moz-focus-inner { position: absolute; z-index: 9999; max-width: 300px; - -webkit-box-shadow: 0 0 5px #aaa; - box-shadow: 0 0 5px #aaa; } body .ui-tooltip { border-width: 2px; @@ -783,8 +884,8 @@ body .ui-tooltip { /* Component containers ----------------------------------*/ .ui-widget { - font-family: Verdana,Arial,sans-serif; - font-size: 1.1em; + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; } .ui-widget .ui-widget { font-size: 1em; @@ -793,41 +894,54 @@ body .ui-tooltip { .ui-widget select, .ui-widget textarea, .ui-widget button { - font-family: Verdana,Arial,sans-serif; + font-family: Arial,Helvetica,sans-serif; font-size: 1em; } +.ui-widget.ui-widget-content { + border: 1px solid #c5c5c5; +} .ui-widget-content { - border: 1px solid #aaaaaa; - background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; - color: #222222; + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; } .ui-widget-content a { - color: #222222; + color: #333333; } .ui-widget-header { - border: 1px solid #aaaaaa; - background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; - color: #222222; + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; font-weight: bold; } .ui-widget-header a { - color: #222222; + color: #333333; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default { - border: 1px solid #d3d3d3; - background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #c5c5c5; + background: #f6f6f6; font-weight: normal; - color: #555555; + color: #454545; } .ui-state-default a, .ui-state-default a:link, -.ui-state-default a:visited { - color: #555555; +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #454545; text-decoration: none; } .ui-state-hover, @@ -835,11 +949,13 @@ body .ui-tooltip { .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus { - border: 1px solid #999999; - background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #cccccc; + background: #ededed; font-weight: normal; - color: #212121; + color: #2b2b2b; } .ui-state-hover a, .ui-state-hover a:hover, @@ -848,22 +964,36 @@ body .ui-tooltip { .ui-state-focus a, .ui-state-focus a:hover, .ui-state-focus a:link, -.ui-state-focus a:visited { - color: #212121; +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #2b2b2b; text-decoration: none; } + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} .ui-state-active, .ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active { - border: 1px solid #aaaaaa; - background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #003eff; + background: #007fff; font-weight: normal; - color: #212121; + color: #ffffff; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #003eff; + background-color: #ffffff; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { - color: #212121; + color: #ffffff; text-decoration: none; } @@ -872,31 +1002,35 @@ body .ui-tooltip { .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; - color: #363636; + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} +.ui-state-checked { + border: 1px solid #dad55e; + background: #fffa90; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { - color: #363636; + color: #777620; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { - border: 1px solid #cd0a0a; - background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; - color: #cd0a0a; + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { - color: #cd0a0a; + color: #5f3f3f; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { - color: #cd0a0a; + color: #5f3f3f; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, @@ -907,18 +1041,18 @@ body .ui-tooltip { .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; - filter:Alpha(Opacity=70); + filter:Alpha(Opacity=70); /* support: IE8 */ font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; - filter:Alpha(Opacity=35); + filter:Alpha(Opacity=35); /* support: IE8 */ background-image: none; } .ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ } /* Icons @@ -931,46 +1065,50 @@ body .ui-tooltip { } .ui-icon, .ui-widget-content .ui-icon { - background-image: url(images/ui-icons_222222_256x240.png); + background-image: url("images/ui-icons_444444_256x240.png"); } .ui-widget-header .ui-icon { - background-image: url(images/ui-icons_222222_256x240.png); -} -.ui-state-default .ui-icon { - background-image: url(images/ui-icons_888888_256x240.png); + background-image: url("images/ui-icons_444444_256x240.png"); } .ui-state-hover .ui-icon, -.ui-state-focus .ui-icon { - background-image: url(images/ui-icons_454545_256x240.png); +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); } -.ui-state-active .ui-icon { - background-image: url(images/ui-icons_454545_256x240.png); +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); } -.ui-state-highlight .ui-icon { - background-image: url(images/ui-icons_2e83ff_256x240.png); +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon { - background-image: url(images/ui-icons_cd0a0a_256x240.png); + background-image: url("images/ui-icons_cc0000_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); } /* positioning */ .ui-icon-blank { background-position: 16px 16px; } -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } @@ -980,7 +1118,7 @@ body .ui-tooltip { .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } @@ -992,7 +1130,7 @@ body .ui-tooltip { .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } @@ -1141,38 +1279,34 @@ body .ui-tooltip { .ui-corner-top, .ui-corner-left, .ui-corner-tl { - border-top-left-radius: 4px; + border-top-left-radius: 3px; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { - border-top-right-radius: 4px; + border-top-right-radius: 3px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { - border-bottom-left-radius: 4px; + border-bottom-left-radius: 3px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { - border-bottom-right-radius: 4px; + border-bottom-right-radius: 3px; } /* Overlays */ .ui-widget-overlay { - background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; - opacity: .3; - filter: Alpha(Opacity=30); + background: #aaaaaa; + opacity: .003; + filter: Alpha(Opacity=.3); /* support: IE8 */ } .ui-widget-shadow { - margin: -8px 0 0 -8px; - padding: 8px; - background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; - opacity: .3; - filter: Alpha(Opacity=30); - border-radius: 8px; + -webkit-box-shadow: 0px 0px 5px #666666; + box-shadow: 0px 0px 5px #666666; } diff --git a/web/docs/api-latest.md b/web/docs/api-latest.md index a881b714..d531b9f4 100644 --- a/web/docs/api-latest.md +++ b/web/docs/api-latest.md @@ -9,7 +9,7 @@ instance whenever it is appropriate. The getter forms of functions do not parti chaining because they return values that are not the chart. **Kind**: global namespace -**Version**: 0.3.12 +**Version**: 0.3.16 **Example** ```js // Example chaining @@ -20,7 +20,8 @@ chart.width(600) ``` * [dc_graph](#dc_graph) : object - * [.diagram](#dc_graph.diagram) ⇒ [diagram](#dc_graph.diagram) + * [.diagram](#dc_graph.diagram) + * [new diagram(parent, [chartGroup])](#new_dc_graph.diagram_new) * [.width](#dc_graph.diagram+width) ⇒ Number | [diagram](#dc_graph.diagram) * [.height](#dc_graph.diagram+height) ⇒ Number | [diagram](#dc_graph.diagram) * [.root](#dc_graph.diagram+root) ⇒ node | [diagram](#dc_graph.diagram) @@ -92,32 +93,25 @@ chart.width(600) * [.defineArrow](#dc_graph.diagram+defineArrow) ⇒ [diagram](#dc_graph.diagram) * [.anchor([parent], [chartGroup])](#dc_graph.diagram+anchor) ⇒ String | node | d3.selection | [diagram](#dc_graph.diagram) * [.anchorName()](#dc_graph.diagram+anchorName) ⇒ String - * [.constraint_pattern](#dc_graph.constraint_pattern) ⇒ function - * [.tip](#dc_graph.tip) ⇒ Object + * [.constraint_pattern](#dc_graph.constraint_pattern) + * [new constraint_pattern(diagram, pattern)](#new_dc_graph.constraint_pattern_new) + * [.tip](#dc_graph.tip) + * [new tip()](#new_dc_graph.tip_new) * [.parent](#dc_graph.tip+parent) ⇒ [diagram](#dc_graph.diagram) * [.direction](#dc_graph.tip+direction) ⇒ String | [tip](#dc_graph.tip) * [.content](#dc_graph.tip+content) ⇒ function * [.table](#dc_graph.tip+table) ⇒ function + * [.flat_group](#dc_graph.flat_group) : object + * [.make(vec, id_accessor)](#dc_graph.flat_group.make) ⇒ Object + * [.another(ndx, id_accessor)](#dc_graph.flat_group.another) ⇒ Object -### dc_graph.diagram ⇒ [diagram](#dc_graph.diagram) -`dc_graph.diagram` is a dc.js-compatible network visualization component. It registers in -the dc.js chart registry and its nodes and edges are generated from crossfilter groups. It -logically derives from the dc.js -[baseMixin](https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin), -but it does not physically derive from it since so much is different about network -visualization versus conventional charts. - -**Kind**: static property of [dc_graph](#dc_graph) - -| Param | Type | Description | -| --- | --- | --- | -| parent | String | node | Any valid [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying a dom block element such as a div; or a dom element. | -| [chartGroup] | String | The name of the chart group this chart instance should be placed in. Filter interaction with a chart will only trigger events and redraws within the chart's group. | +### dc_graph.diagram +**Kind**: static class of [dc_graph](#dc_graph) - -* [.diagram](#dc_graph.diagram) ⇒ [diagram](#dc_graph.diagram) +* [.diagram](#dc_graph.diagram) + * [new diagram(parent, [chartGroup])](#new_dc_graph.diagram_new) * [.width](#dc_graph.diagram+width) ⇒ Number | [diagram](#dc_graph.diagram) * [.height](#dc_graph.diagram+height) ⇒ Number | [diagram](#dc_graph.diagram) * [.root](#dc_graph.diagram+root) ⇒ node | [diagram](#dc_graph.diagram) @@ -190,6 +184,22 @@ visualization versus conventional charts. * [.anchor([parent], [chartGroup])](#dc_graph.diagram+anchor) ⇒ String | node | d3.selection | [diagram](#dc_graph.diagram) * [.anchorName()](#dc_graph.diagram+anchorName) ⇒ String + + +#### new diagram(parent, [chartGroup]) +`dc_graph.diagram` is a dc.js-compatible network visualization component. It registers in +the dc.js chart registry and its nodes and edges are generated from crossfilter groups. It +logically derives from the dc.js +[baseMixin](https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin), +but it does not physically derive from it since so much is different about network +visualization versus conventional charts. + + +| Param | Type | Description | +| --- | --- | --- | +| parent | String | node | Any valid [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying a dom block element such as a div; or a dom element. | +| [chartGroup] | String | The name of the chart group this chart instance should be placed in. Filter interaction with a chart will only trigger events and redraws within the chart's group. | + #### diagram.width ⇒ Number | [diagram](#dc_graph.diagram) @@ -268,7 +278,7 @@ height) and result will be used to set `preserveAspectRatio`. | Param | Type | Default | | --- | --- | --- | -| [fitStrategy] | String | | +| [fitStrategy] | String | 'default' | @@ -1222,7 +1232,11 @@ Returns the DOM id for the chart's anchored location. **Kind**: instance method of [diagram](#dc_graph.diagram) -### dc_graph.constraint_pattern ⇒ function +### dc_graph.constraint_pattern +**Kind**: static class of [dc_graph](#dc_graph) + + +#### new constraint_pattern(diagram, pattern) In cola.js there are three factors which influence the positions of nodes: * *edge length* suggestions, controlled by the [lengthStrategy](#dc_graph.diagram+lengthStrategy), @@ -1268,7 +1282,6 @@ gain more control. Then we'll build back up from the ground up and show how inference works. -**Kind**: static property of [dc_graph](#dc_graph) | Param | Type | Description | | --- | --- | --- | @@ -1277,7 +1290,19 @@ Then we'll build back up from the ground up and show how inference works. -### dc_graph.tip ⇒ Object +### dc_graph.tip +**Kind**: static class of [dc_graph](#dc_graph) + +* [.tip](#dc_graph.tip) + * [new tip()](#new_dc_graph.tip_new) + * [.parent](#dc_graph.tip+parent) ⇒ [diagram](#dc_graph.diagram) + * [.direction](#dc_graph.tip+direction) ⇒ String | [tip](#dc_graph.tip) + * [.content](#dc_graph.tip+content) ⇒ function + * [.table](#dc_graph.tip+table) ⇒ function + + + +#### new tip() Asynchronous [d3.tip](https://github.com/Caged/d3-tip) support for dc.graph.js Add tooltips to the nodes and edges of a graph using an asynchronous callback to get @@ -1286,14 +1311,6 @@ the html to show. Optional - requires separately loading the d3.tip script and CSS (which are included in dc.graph.js in `web/js/d3-tip/index.js` and `web/css/d3-tip/example-styles.css`) -**Kind**: static property of [dc_graph](#dc_graph) - -* [.tip](#dc_graph.tip) ⇒ Object - * [.parent](#dc_graph.tip+parent) ⇒ [diagram](#dc_graph.diagram) - * [.direction](#dc_graph.tip+direction) ⇒ String | [tip](#dc_graph.tip) - * [.content](#dc_graph.tip+content) ⇒ function - * [.table](#dc_graph.tip+table) ⇒ function - #### tip.parent ⇒ [diagram](#dc_graph.diagram) @@ -1363,3 +1380,68 @@ Note: this interface is not great and is subject to change in the near term. var tip = dc_graph.tip(); tip.content(tip.table()); ``` + + +### dc_graph.flat_group : object +`dc_graph.flat_group` implements a special ["fake group"](https://github.com/dc-js/dc.js/wiki/FAQ#fake-groups) +for the special case where you want a group that represents the filtered rows of the crossfilter. + +Although `dc_graph` can be used with reduced data, typically the nodes and edges are just rows of +the corresponding data arrays, and each array has a column which contains the unique identifier +for the node or edge. In this setup, there are other dimensions and groups which are aggregated +for the use of dc.js charts, but the graph just shows or does not show the nodes and edges from +the rows. + +This simple class supports that use case in three steps: + 1. It creates a dimension keyed on the unique identifier (specified to `flat_group.make`) + 2. It creates a group from the dimension with a reduction function that returns the row when the + row is filtered in, and `null` when the row is filtered out. + 3. It wraps the group in a fake group which filters out the resulting nulls. + +The result is a fake group whose `.all()` method returns an array of the currently filtered-in +`{key, value}` pairs, where the key is that returned by the ID accessor, and the value is the raw +row object from the data. + +This could be a useful crossfilter utility outside of dc.graph. For example, bubble charts and +scatter plots often use similar functionality because each observation is either shown or not, +and it is helpful to have the entire row available as reduced data. + +But it would need to be generalized and cleaned up. (For example, the way it has to create the +crossfilter and dimension is kinda dumb.) And there is currently no such crossfilter utility +library to put it in. + +**Kind**: static namespace of [dc_graph](#dc_graph) + +* [.flat_group](#dc_graph.flat_group) : object + * [.make(vec, id_accessor)](#dc_graph.flat_group.make) ⇒ Object + * [.another(ndx, id_accessor)](#dc_graph.flat_group.another) ⇒ Object + + + +#### flat_group.make(vec, id_accessor) ⇒ Object +Create a crossfilter, dimension, and flat group, as described in [flat_group](#dc_graph.flat_group). +Returns an object containing all three. + +**Kind**: static method of [flat_group](#dc_graph.flat_group) +**Returns**: Object - `{crossfilter, dimension, group}` + +| Param | Type | Description | +| --- | --- | --- | +| vec | Array | the data array for crossfilter | +| id_accessor | function | accessor function taking a row object and returning its unique identifier | + + + +#### flat_group.another(ndx, id_accessor) ⇒ Object +Create a flat dimension and group from an existing crossfilter. + +This is a wretched name for this function. + +**Kind**: static method of [flat_group](#dc_graph.flat_group) +**Returns**: Object - `{crossfilter, dimension, group}` + +| Param | Type | Description | +| --- | --- | --- | +| ndx | Object | crossfilter instance | +| id_accessor | function | accessor function taking a row object and returning its unique identifier | + diff --git a/web/examples/random.html b/web/examples/random.html new file mode 100644 index 00000000..8f596ba1 --- /dev/null +++ b/web/examples/random.html @@ -0,0 +1,125 @@ + + + + Randomly build a graph + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + diff --git a/web/examples/single-file.html b/web/examples/single-file.html index 98df8327..ec8a6a4c 100644 --- a/web/examples/single-file.html +++ b/web/examples/single-file.html @@ -16,6 +16,7 @@ + @@ -35,13 +36,11 @@