diff --git a/Changelog.md b/Changelog.md index ef829967..f9658c51 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,8 @@ +## 0.6.1 +* expand/collapse now has different "strategies" for dealing with in-memory graphs - the (poorly named) `dc_graph.expand_collapse.shown_hidden` statefully expands and collapses (and hides) with the old behavior, while the (also poorly named) `dc_graph.expand_collapse.expanded_hidden` declaratively defines expansion as "one hop from a selected set of nodes". +* in addition to the prior `expand_collapse` highlight groups "collapse-highlight-group" and "hide-highlight-group", it also supports "expanded-highlight-group" showing the expanded/selected nodes +* `expand_collapse` no longer annotates nodes to keep track of its state; it politely uses a key->boolean mapping object + ## 0.6.0 * new "explore" demo which refines a feature previously hidden in "main" demo * various improvements to "main" demo (index.html) diff --git a/dc.graph.cola.worker.js b/dc.graph.cola.worker.js index 42e2fa76..64127958 100644 --- a/dc.graph.cola.worker.js +++ b/dc.graph.cola.worker.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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 @@ -25,7 +25,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 diagram. * @namespace dc_graph - * @version 0.6.0 + * @version 0.6.1 * @example * // Example chaining * diagram.width(600) @@ -35,7 +35,7 @@ */ var dc_graph = { - version: '0.6.0', + version: '0.6.1', constants: { CHART_CLASS: 'dc-graph' } diff --git a/dc.graph.cola.worker.js.map b/dc.graph.cola.worker.js.map index 39e9843d..d3f415e7 100644 --- a/dc.graph.cola.worker.js.map +++ b/dc.graph.cola.worker.js.map @@ -1 +1 @@ -{"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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.0\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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.dcg_nodeFixed;\n\n if(v1.fixed && typeof v.dcg_nodeFixed === 'object') {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_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, null, 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(engine.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() {\n _d3cola.start(engine.unconstrainedIterations(),\n engine.userConstraintIterations(),\n engine.allConstraintsIterations(),\n engine.gridSnapIterations());\n }\n\n function stop() {\n if(_d3cola)\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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize', 'groupConnected']\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 * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.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 switch(dir) {\n case 'LR': return {axis: 'x', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n case 'TB': return {axis: 'y', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n default: return null; // RL, BT do not appear to be possible (negative separation) (?)\n }\n }\n _flowLayout = flow;\n return this;\n },\n unconstrainedIterations: property(10),\n userConstraintIterations: property(20),\n allConstraintsIterations: property(20),\n gridSnapIterations: property(0),\n tickSize: property(1),\n groupConnected: property(false)\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.graph, args.nodes, args.edges, args.constraints);\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();\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 +{"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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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.dcg_nodeFixed;\n\n if(v1.fixed && typeof v.dcg_nodeFixed === 'object') {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_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, null, 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(engine.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() {\n _d3cola.start(engine.unconstrainedIterations(),\n engine.userConstraintIterations(),\n engine.allConstraintsIterations(),\n engine.gridSnapIterations());\n }\n\n function stop() {\n if(_d3cola)\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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize', 'groupConnected']\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 * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.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 switch(dir) {\n case 'LR': return {axis: 'x', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n case 'TB': return {axis: 'y', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n default: return null; // RL, BT do not appear to be possible (negative separation) (?)\n }\n }\n _flowLayout = flow;\n return this;\n },\n unconstrainedIterations: property(10),\n userConstraintIterations: property(20),\n allConstraintsIterations: property(20),\n gridSnapIterations: property(0),\n tickSize: property(1),\n groupConnected: property(false)\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.graph, args.nodes, args.edges, args.constraints);\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();\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.d3-force.worker.js b/dc.graph.d3-force.worker.js index acf875fd..03474046 100644 --- a/dc.graph.d3-force.worker.js +++ b/dc.graph.d3-force.worker.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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 @@ -25,7 +25,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 diagram. * @namespace dc_graph - * @version 0.6.0 + * @version 0.6.1 * @example * // Example chaining * diagram.width(600) @@ -35,7 +35,7 @@ */ var dc_graph = { - version: '0.6.0', + version: '0.6.1', constants: { CHART_CLASS: 'dc-graph' } diff --git a/dc.graph.d3-force.worker.js.map b/dc.graph.d3-force.worker.js.map index dfe48dd4..b6cc5fe7 100644 --- a/dc.graph.d3-force.worker.js.map +++ b/dc.graph.d3-force.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/d3_force_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.d3-force.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.0\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.d3_force_layout` is an adaptor for d3-force layouts in dc.graph.js\n * @class d3_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3_force_layout}\n **/\ndc_graph.d3_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3.layout.force()\n .size([options.width, options.height]);\n\n _simulation.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fixed = true;\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n } else v1.fixed = false;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, 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.source.id = nodeIDs[e1.source.dcg_nodeKey];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.target.id = nodeIDs[e1.target.dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.nodes(_wnodes);\n _simulation.links(_wedges);\n }\n\n function start() {\n installForces();\n runSimulation(_options.iterations);\n }\n\n function stop() {\n if(_simulation)\n _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fixed = false;\n _nodes[key].x = data[key].x;\n _nodes[key].y = data[key].y;\n }\n });\n }\n\n function installForces() {\n if(_paths === null)\n _simulation.gravity(_options.gravityStrength)\n .charge(_options.initialCharge);\n else {\n if(_options.fixOffPathNodes) {\n var nodesOnPath = d3.set(); // nodes on path\n _paths.forEach(function(path) {\n path.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(!nodesOnPath.has(key)) {\n _nodes[key].fixed = true;\n } else {\n _nodes[key].fixed = false;\n }\n });\n }\n\n // enlarge charge force to separate nodes on paths\n _simulation.charge(_options.chargeForce);\n }\n };\n\n function runSimulation(iterations) {\n if(!iterations) {\n dispatchState('end');\n return;\n }\n _simulation.start();\n for (var i = 0; i < 300; ++i) {\n _simulation.tick();\n if(_paths)\n applyPathAngleForces();\n }\n _simulation.stop();\n }\n\n function applyPathAngleForces() {\n function _dot(v1, v2) { return v1.x*v2.x + v1.y*v2.y; };\n function _len(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n function _angle(v1, v2) {\n var a = _dot(v1, v2) / (_len(v1)*_len(v2));\n a = Math.min(a, 1);\n a = Math.max(a, -1);\n return Math.acos(a);\n };\n // perpendicular unit length vector\n function _pVec(v) {\n var xx = -v.y/v.x, yy = 1;\n var length = _len({x: xx, y: yy});\n return {x: xx/length, y: yy/length};\n };\n\n function updateNode(node, angle, pVec, alpha) {\n node.x += pVec.x*(Math.PI-angle)*alpha;\n node.y += pVec.y*(Math.PI-angle)*alpha;\n }\n\n _paths.forEach(function(path) {\n if(path.length < 3) return; // at least 3 nodes (and 2 edges): A->B->C\n for(var i = 1; i < path.length-1; ++i) {\n var current = _nodes[path[i]];\n var prev = _nodes[path[i-1]];\n var next = _nodes[path[i+1]];\n\n // calculate the angle\n var vPrev = {x: prev.x - current.x, y: prev.y - current.y};\n var vNext = {x: next.x - current.x, y: next.y - current.y};\n\n var angle = _angle(vPrev, vNext); // angle in [0, PI]\n\n var pvecPrev = _pVec(vPrev);\n var pvecNext = _pVec(vNext);\n\n // make sure the perpendicular vector is in the\n // direction that makes the angle more towards 180 degree\n // 1. calculate the middle point of node 'prev' and 'next'\n var mid = {x: (prev.x+next.x)/2.0, y: (prev.y+next.y)/2.0};\n // 2. calculate the vectors: 'prev' pointing to 'mid', 'next' pointing to 'mid'\n var prev_mid = {x: mid.x-prev.x, y: mid.y-prev.y};\n var next_mid = {x: mid.x-next.x, y: mid.y-next.y};\n // 3. the 'correct' vector: the angle between pvec and prev_mid(next_mid) should\n // be an obtuse angle\n pvecPrev = _angle(prev_mid, pvecPrev) >= Math.PI/2.0 ? pvecPrev : {x: -pvecPrev.x, y: -pvecPrev.y};\n pvecNext = _angle(next_mid, pvecNext) >= Math.PI/2.0 ? pvecNext : {x: -pvecNext.x, y: -pvecNext.y};\n\n // modify positions of prev and next\n updateNode(prev, angle, pvecPrev, _options.angleForce);\n updateNode(next, angle, pvecNext, _options.angleForce);\n }\n\n });\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.02),\n chargeForce: property(-500),\n gravityStrength: property(1.0),\n initialCharge: property(-400),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n return engine;\n};\n\ndc_graph.d3_force_layout.scripts = ['d3.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.graph, args.nodes, args.edges, args.constraints);\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();\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 +{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/d3_force_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.d3-force.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.d3_force_layout` is an adaptor for d3-force layouts in dc.graph.js\n * @class d3_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3_force_layout}\n **/\ndc_graph.d3_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3.layout.force()\n .size([options.width, options.height]);\n\n _simulation.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fixed = true;\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n } else v1.fixed = false;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, 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.source.id = nodeIDs[e1.source.dcg_nodeKey];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.target.id = nodeIDs[e1.target.dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.nodes(_wnodes);\n _simulation.links(_wedges);\n }\n\n function start() {\n installForces();\n runSimulation(_options.iterations);\n }\n\n function stop() {\n if(_simulation)\n _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fixed = false;\n _nodes[key].x = data[key].x;\n _nodes[key].y = data[key].y;\n }\n });\n }\n\n function installForces() {\n if(_paths === null)\n _simulation.gravity(_options.gravityStrength)\n .charge(_options.initialCharge);\n else {\n if(_options.fixOffPathNodes) {\n var nodesOnPath = d3.set(); // nodes on path\n _paths.forEach(function(path) {\n path.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(!nodesOnPath.has(key)) {\n _nodes[key].fixed = true;\n } else {\n _nodes[key].fixed = false;\n }\n });\n }\n\n // enlarge charge force to separate nodes on paths\n _simulation.charge(_options.chargeForce);\n }\n };\n\n function runSimulation(iterations) {\n if(!iterations) {\n dispatchState('end');\n return;\n }\n _simulation.start();\n for (var i = 0; i < 300; ++i) {\n _simulation.tick();\n if(_paths)\n applyPathAngleForces();\n }\n _simulation.stop();\n }\n\n function applyPathAngleForces() {\n function _dot(v1, v2) { return v1.x*v2.x + v1.y*v2.y; };\n function _len(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n function _angle(v1, v2) {\n var a = _dot(v1, v2) / (_len(v1)*_len(v2));\n a = Math.min(a, 1);\n a = Math.max(a, -1);\n return Math.acos(a);\n };\n // perpendicular unit length vector\n function _pVec(v) {\n var xx = -v.y/v.x, yy = 1;\n var length = _len({x: xx, y: yy});\n return {x: xx/length, y: yy/length};\n };\n\n function updateNode(node, angle, pVec, alpha) {\n node.x += pVec.x*(Math.PI-angle)*alpha;\n node.y += pVec.y*(Math.PI-angle)*alpha;\n }\n\n _paths.forEach(function(path) {\n if(path.length < 3) return; // at least 3 nodes (and 2 edges): A->B->C\n for(var i = 1; i < path.length-1; ++i) {\n var current = _nodes[path[i]];\n var prev = _nodes[path[i-1]];\n var next = _nodes[path[i+1]];\n\n // calculate the angle\n var vPrev = {x: prev.x - current.x, y: prev.y - current.y};\n var vNext = {x: next.x - current.x, y: next.y - current.y};\n\n var angle = _angle(vPrev, vNext); // angle in [0, PI]\n\n var pvecPrev = _pVec(vPrev);\n var pvecNext = _pVec(vNext);\n\n // make sure the perpendicular vector is in the\n // direction that makes the angle more towards 180 degree\n // 1. calculate the middle point of node 'prev' and 'next'\n var mid = {x: (prev.x+next.x)/2.0, y: (prev.y+next.y)/2.0};\n // 2. calculate the vectors: 'prev' pointing to 'mid', 'next' pointing to 'mid'\n var prev_mid = {x: mid.x-prev.x, y: mid.y-prev.y};\n var next_mid = {x: mid.x-next.x, y: mid.y-next.y};\n // 3. the 'correct' vector: the angle between pvec and prev_mid(next_mid) should\n // be an obtuse angle\n pvecPrev = _angle(prev_mid, pvecPrev) >= Math.PI/2.0 ? pvecPrev : {x: -pvecPrev.x, y: -pvecPrev.y};\n pvecNext = _angle(next_mid, pvecNext) >= Math.PI/2.0 ? pvecNext : {x: -pvecNext.x, y: -pvecNext.y};\n\n // modify positions of prev and next\n updateNode(prev, angle, pvecPrev, _options.angleForce);\n updateNode(next, angle, pvecNext, _options.angleForce);\n }\n\n });\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.02),\n chargeForce: property(-500),\n gravityStrength: property(1.0),\n initialCharge: property(-400),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n return engine;\n};\n\ndc_graph.d3_force_layout.scripts = ['d3.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.graph, args.nodes, args.edges, args.constraints);\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();\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.d3v4-force.worker.js b/dc.graph.d3v4-force.worker.js index 3c376ec4..c86c93b2 100644 --- a/dc.graph.d3v4-force.worker.js +++ b/dc.graph.d3v4-force.worker.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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 @@ -25,7 +25,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 diagram. * @namespace dc_graph - * @version 0.6.0 + * @version 0.6.1 * @example * // Example chaining * diagram.width(600) @@ -35,7 +35,7 @@ */ var dc_graph = { - version: '0.6.0', + version: '0.6.1', constants: { CHART_CLASS: 'dc-graph' } diff --git a/dc.graph.d3v4-force.worker.js.map b/dc.graph.d3v4-force.worker.js.map index 912a40a5..1bf1d41d 100644 --- a/dc.graph.d3v4-force.worker.js.map +++ b/dc.graph.d3v4-force.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/d3v4_force_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.d3v4-force.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.0\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.d3v4_force_layout` is an adaptor for d3-force version 4 layouts in dc.graph.js\n * @class d3v4_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3v4_force_layout}\n **/\ndc_graph.d3v4_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3v4.forceSimulation()\n .force('link', d3v4.forceLink())\n .force('center', d3v4.forceCenter(options.width / 2, options.height / 2))\n .force('gravityX', d3v4.forceX(options.width / 2).strength(_options.gravityStrength))\n .force('gravityY', d3v4.forceY(options.height / 2).strength(_options.gravityStrength))\n .force('collision', d3v4.forceCollide(_options.collisionRadius))\n .force('charge', d3v4.forceManyBody())\n .stop();\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fx = v.dcg_nodeFixed.x;\n v1.fy = v.dcg_nodeFixed.y;\n } else v1.fx = v1.fy = null;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.source = nodeIDs[_nodes[e.dcg_edgeSource].dcg_nodeKey];\n e1.target = nodeIDs[_nodes[e.dcg_edgeTarget].dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.force('straighten', null);\n _simulation.nodes(_wnodes);\n _simulation.force('link').links(_wedges);\n }\n\n function start() {\n _dispatch.start();\n installForces(_paths);\n runSimulation(_options.iterations);\n }\n\n function stop() {\n // not running asynchronously, no _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fx = data[key].x;\n _nodes[key].fy = data[key].y;\n }\n });\n }\n function installForces(paths) {\n if(paths)\n paths = paths.filter(function(path) {\n return path.nodes.every(function(nk) { return _nodes[nk]; });\n });\n if(paths === null || !paths.length) {\n _simulation.force('charge').strength(_options.initialCharge);\n } else {\n var nodesOnPath;\n if(_options.fixOffPathNodes) {\n nodesOnPath = d3.set();\n paths.forEach(function(path) {\n path.nodes.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n }\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(_options.fixOffPathNodes && !nodesOnPath.has(key)) {\n _nodes[key].fx = _nodes[key].x;\n _nodes[key].fy = _nodes[key].y;\n } else {\n _nodes[key].fx = null;\n _nodes[key].fy = null;\n }\n });\n\n _simulation.force('charge').strength(_options.chargeForce);\n _simulation.force('straighten', d3v4.forceStraightenPaths()\n .id(function(n) { return n.dcg_nodeKey; })\n .angleForce(_options.angleForce)\n .pathNodes(function(p) { return p.nodes; })\n .pathStrength(function(p) { return p.strength; })\n .paths(paths));\n }\n };\n\n function runSimulation(iterations) {\n _simulation.alpha(1);\n for (var i = 0; i < iterations; ++i) {\n _simulation.tick();\n dispatchState('tick');\n }\n dispatchState('end');\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3v4-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength', 'collisionRadius',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.01),\n chargeForce: property(-600),\n gravityStrength: property(0.3),\n collisionRadius: property(8),\n initialCharge: property(-100),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n engine.pathStraightenForce = engine.angleForce;\n return engine;\n};\n\ndc_graph.d3v4_force_layout.scripts = ['d3.js', 'd3v4-force.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.graph, args.nodes, args.edges, args.constraints);\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();\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 +{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/d3v4_force_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.d3v4-force.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.d3v4_force_layout` is an adaptor for d3-force version 4 layouts in dc.graph.js\n * @class d3v4_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3v4_force_layout}\n **/\ndc_graph.d3v4_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3v4.forceSimulation()\n .force('link', d3v4.forceLink())\n .force('center', d3v4.forceCenter(options.width / 2, options.height / 2))\n .force('gravityX', d3v4.forceX(options.width / 2).strength(_options.gravityStrength))\n .force('gravityY', d3v4.forceY(options.height / 2).strength(_options.gravityStrength))\n .force('collision', d3v4.forceCollide(_options.collisionRadius))\n .force('charge', d3v4.forceManyBody())\n .stop();\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fx = v.dcg_nodeFixed.x;\n v1.fy = v.dcg_nodeFixed.y;\n } else v1.fx = v1.fy = null;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.source = nodeIDs[_nodes[e.dcg_edgeSource].dcg_nodeKey];\n e1.target = nodeIDs[_nodes[e.dcg_edgeTarget].dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.force('straighten', null);\n _simulation.nodes(_wnodes);\n _simulation.force('link').links(_wedges);\n }\n\n function start() {\n _dispatch.start();\n installForces(_paths);\n runSimulation(_options.iterations);\n }\n\n function stop() {\n // not running asynchronously, no _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fx = data[key].x;\n _nodes[key].fy = data[key].y;\n }\n });\n }\n function installForces(paths) {\n if(paths)\n paths = paths.filter(function(path) {\n return path.nodes.every(function(nk) { return _nodes[nk]; });\n });\n if(paths === null || !paths.length) {\n _simulation.force('charge').strength(_options.initialCharge);\n } else {\n var nodesOnPath;\n if(_options.fixOffPathNodes) {\n nodesOnPath = d3.set();\n paths.forEach(function(path) {\n path.nodes.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n }\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(_options.fixOffPathNodes && !nodesOnPath.has(key)) {\n _nodes[key].fx = _nodes[key].x;\n _nodes[key].fy = _nodes[key].y;\n } else {\n _nodes[key].fx = null;\n _nodes[key].fy = null;\n }\n });\n\n _simulation.force('charge').strength(_options.chargeForce);\n _simulation.force('straighten', d3v4.forceStraightenPaths()\n .id(function(n) { return n.dcg_nodeKey; })\n .angleForce(_options.angleForce)\n .pathNodes(function(p) { return p.nodes; })\n .pathStrength(function(p) { return p.strength; })\n .paths(paths));\n }\n };\n\n function runSimulation(iterations) {\n _simulation.alpha(1);\n for (var i = 0; i < iterations; ++i) {\n _simulation.tick();\n dispatchState('tick');\n }\n dispatchState('end');\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3v4-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength', 'collisionRadius',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.01),\n chargeForce: property(-600),\n gravityStrength: property(0.3),\n collisionRadius: property(8),\n initialCharge: property(-100),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n engine.pathStraightenForce = engine.angleForce;\n return engine;\n};\n\ndc_graph.d3v4_force_layout.scripts = ['d3.js', 'd3v4-force.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.graph, args.nodes, args.edges, args.constraints);\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();\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 dcb633d8..6c8fa3c4 100644 --- a/dc.graph.dagre.worker.js +++ b/dc.graph.dagre.worker.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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 @@ -25,7 +25,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 diagram. * @namespace dc_graph - * @version 0.6.0 + * @version 0.6.1 * @example * // Example chaining * diagram.width(600) @@ -35,7 +35,7 @@ */ var dc_graph = { - version: '0.6.0', + version: '0.6.1', constants: { CHART_CLASS: 'dc-graph' } diff --git a/dc.graph.dagre.worker.js.map b/dc.graph.dagre.worker.js.map index 7b33529e..0bc5fc5f 100644 --- a/dc.graph.dagre.worker.js.map +++ b/dc.graph.dagre.worker.js.map @@ -1 +1 @@ -{"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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.0\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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, nodesep: options.nodesep, ranksep: options.ranksep});\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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 /*\n dagre does not seem to accept input positions\n if(v.dcg_nodeFixed) {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n }\n */\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, null, 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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n start: function() {\n start();\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.graph, args.nodes, args.edges, args.constraints);\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();\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 +{"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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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, nodesep: options.nodesep, ranksep: options.ranksep});\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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 /*\n dagre does not seem to accept input positions\n if(v.dcg_nodeFixed) {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n }\n */\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, null, 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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n start: function() {\n start();\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.graph, args.nodes, args.edges, args.constraints);\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();\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 51fbbed2..fb157887 100644 --- a/dc.graph.js +++ b/dc.graph.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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 diagram. * @namespace dc_graph - * @version 0.6.0 + * @version 0.6.1 * @example * // Example chaining * diagram.width(600) @@ -38,7 +38,7 @@ */ var dc_graph = { - version: '0.6.0', + version: '0.6.1', constants: { CHART_CLASS: 'dc-graph' } @@ -9605,10 +9605,14 @@ dc_graph.expand_collapse = function(options) { dirs: arguments[3] }; } - var _keyboard, _overNode, _overDir; + var _keyboard, _overNode, _overDir, _expanded = {}; + var expanded_highlight_group = dc_graph.register_highlight_things_group(options.expanded_highlight_group || 'expanded-highlight-group'); var collapse_highlight_group = dc_graph.register_highlight_things_group(options.collapse_highlight_group || 'collapse-highlight-group'); var hide_highlight_group = dc_graph.register_highlight_things_group(options.hide_highlight_group || 'hide-highlight-group'); options.dirs = options.dirs || ['both']; + options.dirs.forEach(function(dir) { + _expanded[dir] = {}; + }); options.hideKey = options.hideKey || 'Alt'; if(options.dirs.length > 2) throw new Error('there are only two directions to expand in'); @@ -9687,13 +9691,14 @@ dc_graph.expand_collapse = function(options) { } } - function draw_stubs(diagram, node, edge) { + function draw_stubs(diagram, node, edge, n, spikes) { + if(n && _expanded[spikes.dir][diagram.nodeKey.eval(n)]) + spikes = null; var spike = node .selectAll('g.spikes') - .data(function(n) { - return (n.dcg_expand_selected && - (!n.dcg_expanded || !n.dcg_expanded[n.dcg_expand_selected.dir])) ? - [n] : []; + .data(function(n2) { + return spikes && n === n2 ? + [n2] : []; }); spike.exit().remove(); spike @@ -9703,8 +9708,8 @@ dc_graph.expand_collapse = function(options) { .selectAll('rect.spike') .data(function(n) { var key = diagram.nodeKey.eval(n); - var dir = n.dcg_expand_selected.dir, - N = n.dcg_expand_selected.n, + var dir = spikes.dir, + N = spikes.n, af = spike_directioner(diagram.layoutEngine().rankdir(), dir, N), ret = Array(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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","function property_if(pred, curr) {\n return function(o, last) {\n return pred(o) ? curr(o) : last();\n };\n}\n\nfunction property_interpolate(value, curr) {\n return function(o, last) {\n return d3.interpolate(last(o), curr(o))(value(o));\n };\n}\n\nfunction multiply_properties(pred, props, blend) {\n var props2 = {};\n for(var p in props)\n props2[p] = blend(pred, param(props[p]));\n return props2;\n}\n\nfunction conditional_properties(pred, props) {\n return multiply_properties(pred, props, property_if);\n}\n\nfunction node_edge_conditions(npred, epred, props) {\n var nprops = {}, eprops = {}, badprops = [];\n for(var p in props) {\n if(/^node/.test(p))\n nprops[p] = props[p];\n else if(/^edge/.test(p))\n eprops[p] = props[p];\n else badprops.push(p);\n }\n if(badprops.length)\n console.error('only know how to deal with properties that start with \"node\" or \"edge\"', badprops);\n var props2 = npred ? conditional_properties(npred, nprops) : {};\n if(epred)\n Object.assign(props2, conditional_properties(epred, eprops));\n return props2;\n}\n\nfunction cascade(parent) {\n return function(level, add, props) {\n for(var p in props) {\n if(!parent[p])\n throw new Error('unknown attribute ' + p);\n parent[p].cascade(level, add ? props[p] : null);\n }\n return parent;\n };\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\n// outputs the array with adjacent identical lines collapsed to one\nfunction uniq(a) {\n var ret = [];\n a.forEach(function(x, i) {\n if(i === 0 || x !== a[i-1])\n ret.push(x);\n });\n return ret;\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\nif (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n value: function(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n\n // 5. Let k be 0.\n var k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, � kValue, k, O �)).\n // d. If testResult is true, return kValue.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return kValue;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return undefined.\n return undefined;\n }\n });\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\ndc_graph.event_coords = function(diagram) {\n var bound = diagram.root().node().getBoundingClientRect();\n return diagram.invertCoord([d3.event.clientX - bound.left,\n d3.event.clientY - bound.top]);\n};\n\nfunction promise_identity(x) {\n return Promise.resolve(x);\n}\n\n// http://stackoverflow.com/questions/7044944/jquery-javascript-to-detect-os-without-a-plugin\nvar is_a_mac = navigator.platform.toUpperCase().indexOf('MAC')!==-1;\n\n// https://stackoverflow.com/questions/16863917/check-if-class-exists-somewhere-in-parent-vanilla-js\nfunction ancestor_has_class(element, classname) {\n if(d3.select(element).classed(classname))\n return true;\n return element.parentElement && ancestor_has_class(element.parentElement, classname);\n}\n\nif (typeof SVGElement.prototype.contains == 'undefined') {\n SVGElement.prototype.contains = HTMLDivElement.prototype.contains;\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\n// basically, see if it's any simpler if we start from scratch\n// (well, of course it's simpler because we have less callbacks)\n// same caveats as above\ndc_graph.undirected_dfs = function(callbacks) { // {[comp, node], nodeid, sourceid, targetid}\n return function(nodes, edges) {\n var adjacencies = edges.reduce(function(m, e) {\n var tail = callbacks.sourceid(e),\n head = callbacks.targetid(e);\n if(!m[tail]) m[tail] = [];\n if(!m[head]) m[head] = [];\n m[tail].push(head);\n m[head].push(tail);\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 var found = {};\n function recurse(n) {\n var nid = callbacks.nodeid(n);\n callbacks.node(compid, n);\n found[nid] = true;\n if(adjacencies[nid])\n adjacencies[nid].forEach(function(adj) {\n if(!found[adj])\n recurse(nmap[adj]);\n });\n }\n var compid = 0;\n nodes.forEach(function(n) {\n if(!found[callbacks.nodeid(n)]) {\n callbacks.comp && callbacks.comp(compid);\n recurse(n);\n ++compid;\n }\n });\n };\n};\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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\n// as many as we can get from\n// http://www.graphviz.org/doc/info/shapes.html\ndc_graph.shape_presets = {\n egg: {\n // not really: an ovoid should be two half-ellipses stuck together\n // https://en.wikipedia.org/wiki/Oval\n generator: 'polygon',\n preset: function() {\n return {sides: 100, distortion: -0.25};\n }\n },\n triangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 3};\n }\n },\n rectangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4};\n }\n },\n diamond: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, rotation: 45};\n }\n },\n trapezium: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, distortion: -0.5};\n }\n },\n parallelogram: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, skew: 0.5};\n }\n },\n pentagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 5};\n }\n },\n hexagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 6};\n }\n },\n septagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 7};\n }\n },\n octagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 8};\n }\n },\n invtriangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 3, rotation: 180};\n }\n },\n invtrapezium: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, distortion: 0.5};\n }\n },\n square: {\n generator: 'polygon',\n preset: function() {\n return {\n sides: 4,\n regular: true\n };\n }\n },\n plain: {\n generator: 'rounded-rect',\n preset: function() {\n return {\n noshape: true\n };\n }\n }\n};\n\ndc_graph.shape_presets.box = dc_graph.shape_presets.rect = dc_graph.shape_presets.rectangle;\n\ndc_graph.available_shapes = function() {\n var shapes = Object.keys(dc_graph.shape_presets);\n return shapes.slice(0, shapes.length-1); // not including polygon\n};\n\nvar default_shape = {shape: 'ellipse'};\n\nfunction elaborate_shape(diagram, def) {\n if(typeof def === 'string') def = {shape: def};\n var shape = def.shape, def2 = Object.assign({}, def);\n delete def2.shape;\n if(shape === 'random') {\n var available = dc_graph.available_shapes(); // could include diagram.shape !== ellipse, polygon\n shape = available[Math.floor(Math.random()*available.length)];\n }\n else if(diagram.shape.enum().indexOf(shape) !== -1)\n return diagram.shape(shape).elaborate({shape: shape}, def2);\n if(!dc_graph.shape_presets[shape]) {\n console.warn('unknown shape ', shape);\n return default_shape;\n }\n var preset = dc_graph.shape_presets[shape].preset(def2);\n preset.shape = dc_graph.shape_presets[shape].generator;\n return diagram.shape(preset.shape).elaborate(preset, def2);\n}\n\nfunction infer_shape(diagram) {\n return function(n) {\n var def = diagram.nodeShape.eval(n) || default_shape;\n n.dcg_shape = elaborate_shape(diagram, def);\n n.dcg_shape.abstract = def;\n };\n}\n\nfunction shape_changed(diagram) {\n return function(n) {\n var def = diagram.nodeShape.eval(n) || default_shape;\n var old = n.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 node_label_padding(diagram, n) {\n var nlp = diagram.nodeLabelPadding.eval(n);\n if(typeof nlp === 'number' || typeof nlp === 'string')\n return {x: +nlp, y: +nlp};\n else return nlp;\n}\n\nfunction fit_shape(shape, diagram) {\n return function(content) {\n content.each(function(n) {\n var bbox = null;\n if((!shape.useTextSize || shape.useTextSize(n.dcg_shape)) && diagram.nodeFitLabel.eval(n)) {\n bbox = getBBoxNoThrow(this);\n bbox = {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n var padding;\n var content = diagram.nodeContent.eval(n);\n if(content && diagram.content(content).padding)\n padding = diagram.content(content).padding(n);\n else {\n var padding2 = node_label_padding(diagram, n);\n padding = {\n x: padding2.x*2,\n y: padding2.y*2\n };\n }\n bbox.width += padding.x;\n bbox.height += padding.y;\n n.bbox = bbox;\n }\n var r = 0, radii;\n if(!shape.useRadius || shape.useRadius(n.dcg_shape))\n r = diagram.nodeRadius.eval(n);\n if(bbox && bbox.width && bbox.height || shape.useTextSize && !shape.useTextSize(n.dcg_shape))\n radii = shape.calc_radii(n, r, bbox);\n else\n radii = {rx: r, ry: r};\n n.dcg_rx = radii.rx;\n n.dcg_ry = radii.ry;\n\n var w = radii.rx*2, h = radii.ry*2;\n // fixme: this is only consistent if regular || !squeeze\n // but we'd need to calculate polygon first in order to find out\n // (not a bad idea, just no time right now)\n if(w= 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(diagram, e, 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 sp = e.sourcePort.pos;\n tp = e.targetPort.pos;\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 diagram.shape(node.dcg_shape.shape).intersect_vec(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(e.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(e.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\nfunction is_one_segment(path) {\n return path.bezDegree === 1 && path.points.length === 2 ||\n path.bezDegree === 3 && path.points.length === 4;\n}\n\nfunction as_bezier3(path) {\n var p = path.points;\n if(path.bezDegree === 3) return p;\n else if(path.bezDegree === 1)\n return [\n {\n x: p[0].x,\n y: p[0].y\n },\n {\n x: p[0].x + (p[1].x - p[0].x)/3,\n y: p[0].y + (p[1].y - p[0].y)/3\n },\n {\n x: p[0].x + 2*(p[1].x - p[0].x)/3,\n y: p[0].y + 2*(p[1].y - p[0].y)/3\n },\n {\n x: p[1].x,\n y: p[1].y\n }\n ];\n else throw new Error('unknown bezDegree ' + path.bezDegree);\n}\n\n// from https://www.jasondavies.com/animated-bezier/\nfunction interpolate(d, p) {\n var r = [];\n for (var i=1; i 1) {\n var parts = split_bezier(p, 1/n);\n ret.push(parts[0][0], parts[0][1], parts[0][2]);\n p = parts[1];\n --n;\n }\n ret.push.apply(ret, p);\n return ret;\n}\n\ndc_graph.no_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n useTextSize: function() { return false; },\n useRadius: function() { return false; },\n usePaddingAndStroke: function() { return false; },\n intersect_vec: function(n, deltaX, deltaY) {\n return {x: 0, y: 0};\n },\n calc_radii: function(n, ry, bbox) {\n return {rx: 0, ry: 0};\n },\n create: function(nodeEnter) {\n },\n replace: function(nodeChanged) {\n },\n update: function(node) {\n }\n };\n return _shape;\n};\n\ndc_graph.ellipse_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n return point_on_ellipse(n.dcg_rx, n.dcg_ry, deltaX, deltaY);\n },\n calc_radii: function(n, ry, bbox) {\n // make sure we can fit height in r\n ry = Math.max(ry, bbox.height/2 + 5);\n var rx = bbox.width/2;\n\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/ry;\n rx = rx/Math.sqrt(1 - y_over_B*y_over_B);\n rx = Math.max(rx, ry);\n\n return {rx: rx, ry: ry};\n },\n create: function(nodeEnter) {\n nodeEnter.insert('ellipse', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('ellipse.node-shape')\n .attr(ellipse_attrs(_shape.parent()));\n }\n };\n return _shape;\n};\n\ndc_graph.polygon_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n return point_on_polygon(n.dcg_points, 0, 0, deltaX, deltaY);\n },\n calc_radii: function(n, ry, bbox) {\n // make sure we can fit height in r\n ry = Math.max(ry, bbox.height/2 + 5);\n var rx = bbox.width/2;\n\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 rx = rx*Math.sqrt(2)/Math.cos(Math.PI/(n.dcg_shape.sides||4));\n\n return {rx: rx, ry: ry};\n },\n create: function(nodeEnter) {\n nodeEnter.insert('path', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('path.node-shape')\n .attr(polygon_attrs(_shape.parent()));\n }\n };\n return _shape;\n};\n\ndc_graph.rounded_rectangle_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n preset = Object.assign({rx: 10, ry: 10}, preset);\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n var points = [\n {x: n.dcg_rx, y: n.dcg_ry},\n {x: n.dcg_rx, y: -n.dcg_ry},\n {x: -n.dcg_rx, y: -n.dcg_ry},\n {x: -n.dcg_rx, y: n.dcg_ry}\n ];\n return point_on_polygon(points, 0, 0, deltaX, deltaY); // not rounded\n },\n useRadius: function(shape) {\n return !shape.noshape;\n },\n calc_radii: function(n, ry, bbox) {\n var fity = bbox.height/2;\n // fixme: fudge to make sure text is not too tall for node\n if(!n.dcg_shape.noshape)\n fity += 5;\n return {\n rx: bbox.width / 2,\n ry: Math.max(ry, fity)\n };\n },\n create: function(nodeEnter) {\n nodeEnter.filter(function(n) {\n return !n.dcg_shape.noshape;\n }).insert('rect', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('rect.node-shape')\n .attr({\n x: function(n) {\n return -n.dcg_rx;\n },\n y: function(n) {\n return -n.dcg_ry;\n },\n width: function(n) {\n return 2*n.dcg_rx;\n },\n height: function(n) {\n return 2*n.dcg_ry;\n },\n rx: function(n) {\n return n.dcg_shape.rx + 'px';\n },\n ry: function(n) {\n return n.dcg_shape.ry + 'px';\n }\n });\n }\n };\n return _shape;\n};\n\n","dc_graph.text_contents = function() {\n var _contents = {\n parent: property(null),\n update: function(container) {\n var text = container.selectAll('text.node-label')\n .data(function(n) { return [n]; });\n text.enter().append('text')\n .attr('class', 'node-label');\n var tspan = text.selectAll('tspan').data(function(n) {\n var lines = _contents.parent().nodeLabel.eval(n);\n if(!lines)\n return [];\n else if(typeof lines === 'string')\n lines = [lines];\n var lineHeight = _contents.parent().nodeLineHeight();\n var first = 1 - ((lines.length - 1) * lineHeight + 1)/2;\n return lines.map(function(line, i) { return {node: n, line: line, yofs: (i==0 ? first : lineHeight) + 'em'}; });\n });\n tspan.enter().append('tspan');\n tspan.attr({\n 'text-anchor': 'start',\n x: 0\n }).text(function(s) { return s.line; });\n text\n .each(function(n) {\n n.xofs = 0;\n })\n .filter(function(n) {\n return _contents.parent().nodeLabelAlignment.eval(n) !== 'center';\n })\n .each(function(n) {\n var bbox = getBBoxNoThrow(this);\n n.bbox = {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n switch(_contents.parent().nodeLabelAlignment.eval(n)) {\n case 'left': n.xofs = -n.bbox.width/2;\n break;\n case 'right': n.xofs = n.bbox.width/2;\n break;\n }\n })\n .selectAll('tspan');\n tspan.attr({\n 'text-anchor': function(s) {\n switch(_contents.parent().nodeLabelAlignment.eval(s.node)) {\n case 'left': return 'start';\n case 'center': return 'middle';\n case 'right': return 'end';\n }\n return null;\n },\n x: function(s) {\n return s.node.xofs;\n },\n dy: function(d) { return d.yofs; }\n });\n\n tspan.exit().remove();\n text\n .attr('fill', _contents.parent().nodeLabelFill.eval);\n },\n textbox: function(container) {\n var bbox = getBBoxNoThrow(this.selectContent(container).node());\n return {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n },\n selectContent: function(container) {\n return container.select('text.node-label');\n }\n };\n return _contents;\n};\n\ndc_graph.with_icon_contents = function(contents, width, height) {\n var _contents = {\n parent: property(null).react(function(parent) {\n contents.parent(parent);\n }),\n padding: function(n) {\n var padding = node_label_padding(_contents.parent(), n);\n return {\n x: padding.x * 3,\n y: padding.y * 3\n };\n },\n update: function(container) {\n var g = container.selectAll('g.with-icon')\n .data(function(n) { return [n]; });\n var gEnter = g.enter();\n gEnter.append('g')\n .attr('class', 'with-icon')\n .append('image').attr({\n class: 'icon',\n width: width + 'px',\n height: height + 'px'\n });\n g.call(contents.update);\n contents.selectContent(g)\n .attr('transform', 'translate(' + width/2 + ')');\n g.selectAll('image.icon').attr({\n href: _contents.parent().nodeIcon.eval,\n x: function(n) {\n var totwid = width + contents.textbox(d3.select(this.parentNode)).width;\n return -totwid/2 - node_label_padding(_contents.parent(), n).x;\n },\n y: -height/2\n });\n },\n textbox: function(container) {\n var box = contents.textbox(container);\n box.x += width/2;\n return box;\n },\n selectContent: function(container) {\n return container.select('g.with-icon');\n }\n };\n return _contents;\n};\n\n","/**\n * `dc_graph.diagram` is a dc.js-compatible network visualization component. It registers in\n * the dc.js chart registry and its nodes and edges are generated from crossfilter groups. It\n * logically derives from the dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin},\n * but it does not physically derive from it since so much is different about network\n * visualization versus conventional charts.\n * @class diagram\n * @memberof dc_graph\n * @param {String|node} parent - Any valid\n * {@link https://github.com/mbostock/d3/wiki/Selections#selecting-elements d3 single selector}\n * specifying a dom block element such as a div; or a dom element.\n * @param {String} [chartGroup] - The name of the dc.js chart group this diagram instance\n * should be placed in. Filter interaction with a diagram will only trigger events and redraws\n * within the diagram's group.\n * @return {dc_graph.diagram}\n **/\ndc_graph.diagram = function (parent, chartGroup) {\n // different enough from regular dc charts that we don't use dc.baseMixin\n // but attempt to implement most of that interface, copying some of the most basic stuff\n var _diagram = dc.marginMixin({});\n _diagram.__dcFlag__ = dc.utils.uniqueId();\n _diagram.margins({left: 10, top: 10, right: 10, bottom: 10});\n var _svg = null, _defs = null, _g = null, _nodeLayer = null, _edgeLayer = null;\n var _dispatch = d3.dispatch('preDraw', 'data', 'end', 'start', 'render', 'drawn', 'receivedLayout', 'transitionsStarted', 'zoomed', 'reset');\n var _nodes = {}, _edges = {}; // hold state between runs\n var _ports = {}; // id = node|edge/id/name\n var _nodePorts; // ports sorted by node id\n var _stats = {};\n var _nodes_snapshot, _edges_snapshot;\n var _arrows = {};\n var _running = false; // for detecting concurrency issues\n var _translate = [0,0], _scale = 1;\n var _zoom, _animateZoom;\n var _anchor, _chartGroup;\n var _animating = false; // do not refresh during animations\n\n var _minWidth = 200;\n var _defaultWidthCalc = function (element) {\n var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n return (width && width > _minWidth) ? width : _minWidth;\n };\n var _widthCalc = _defaultWidthCalc;\n\n var _minHeight = 200;\n var _defaultHeightCalc = function (element) {\n var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n return (height && height > _minHeight) ? height : _minHeight;\n };\n var _heightCalc = _defaultHeightCalc;\n var _width, _height, _lastWidth, _lastHeight;\n\n function deprecate_layout_algo_parameter(name) {\n return function(value) {\n if(!_diagram.layoutEngine())\n _diagram.layoutAlgorithm('cola', true);\n var engine = _diagram.layoutEngine();\n if(engine.getEngine)\n engine = engine.getEngine();\n if(engine[name]) {\n console.warn('property is deprecated, call on layout engine instead: dc_graph.diagram.%c' + name,\n 'font-weight: bold');\n if(!arguments.length)\n return engine[name]();\n engine[name](value);\n } else {\n console.warn('property is deprecated, and is not supported for Warning: dc_graph.diagram.' + name + ' is deprecated, and it is not supported for the \"' + engine.layoutAlgorithm() + '\" layout algorithm: ignored.');\n if(!arguments.length)\n return null;\n }\n return this;\n };\n }\n\n /**\n * Set or get the height attribute of the diagram. If a value is given, then the diagram is\n * returned for method chaining. If no value is given, then the current value of the height\n * attribute will be returned.\n *\n * The width and height are applied to the SVG element generated by the diagram on render, or\n * when `resizeSvg` is called.\n *\n * If the value is falsy or a function, the height will be calculated the first time it is\n * needed, using the provided function or default height calculator, and then cached. The\n * default calculator uses the client rect of the element specified when constructing the chart,\n * with a minimum of `minHeight`. A custom calculator will be passed the element.\n *\n * If the value is `'auto'`, the height will be calculated every time the diagram is drawn, and\n * it will not be set on the `` element. Instead, the element will be pinned to the same\n * rectangle as its containing div using CSS.\n *\n * @method height\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [height=200]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.height = function (height) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_height)) {\n _lastHeight = _heightCalc(_diagram.root().node());\n if(_height === 'auto') // 'auto' => calculate every time\n return _lastHeight;\n // null/undefined => calculate once only\n _height = _lastHeight;\n }\n return _height;\n }\n if(dc.utils.isNumber(height) || !height || height === 'auto')\n _height = height;\n else if(typeof height === 'function') {\n _heightCalc = height;\n _height = undefined;\n }\n else throw new Error(\"don't know what to do with height type \" + typeof height + \" value \" + height);\n return _diagram;\n };\n _diagram.minHeight = function(height) {\n if(!arguments.length)\n return _minHeight;\n _minHeight = height;\n return _diagram;\n };\n /**\n * Set or get the width attribute of the diagram. If a value is given, then the diagram is\n * returned for method chaining. If no value is given, then the current value of the width\n * attribute will be returned.\n *\n * The width and height are applied to the SVG element generated by the diagram on render, or\n * when `resizeSvg` is called.\n *\n * If the value is falsy or a function, the width will be calculated the first time it is\n * needed, using the provided function or default width calculator, and then cached. The default\n * calculator uses the client rect of the element specified when constructing the chart, with a\n * minimum of `minWidth`. A custom calculator will be passed the element.\n *\n * If the value is `'auto'`, the width will be calculated every time the diagram is drawn, and\n * it will not be set on the `` element. Instead, the element will be pinned to the same\n * rectangle as its containing div using CSS.\n *\n * @method width\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [width=200]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.width = function (width) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_width)) {\n _lastWidth = _widthCalc(_diagram.root().node());\n if(_width === 'auto') // 'auto' => calculate every time\n return _lastWidth;\n // null/undefined => calculate once only\n _width = _lastWidth;\n }\n return _width;\n }\n if(dc.utils.isNumber(width) || !width || width === 'auto')\n _width = width;\n else if(typeof width === 'function') {\n _widthCalc = width;\n _width = undefined;\n }\n else throw new Error(\"don't know what to do with width type \" + typeof width + \" value \" + width);\n return _diagram;\n };\n _diagram.minWidth = function(width) {\n if(!arguments.length)\n return _minWidth;\n _minWidth = width;\n return _diagram;\n };\n\n /**\n * Get or set the root element, which is usually the parent div. Normally the root is set\n * when the diagram is constructed; setting it later may have unexpected consequences.\n * @method root\n * @memberof dc_graph.diagram\n * @instance\n * @param {node} [root=null]\n * @return {node}\n * @return {dc_graph.diagram}\n **/\n _diagram.root = property(null).react(function(e) {\n if(e.empty())\n console.log('Warning: parent selector ' + parent + \" doesn't seem to exist\");\n });\n\n /**\n * Get or set whether mouse wheel rotation or touchpad gestures will zoom the diagram, and\n * whether dragging on the background pans the diagram.\n * @method mouseZoomable\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [mouseZoomable=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.mouseZoomable = property(true);\n\n _diagram.zoomExtent = property([.1, 2]);\n\n /**\n * Whether zooming should only be enabled when the alt key is pressed.\n * @method altKeyZoom\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [altKeyZoom=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.modKeyZoom = _diagram.altKeyZoom = property(false);\n\n /**\n * Set or get the fitting strategy for the canvas, which affects how the\n * [viewBox](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox) and\n * [preserveAspectRatio](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio)\n * attributes get set. All options except `null` set the `viewBox` attribute.\n *\n * These options set the `viewBox` and adjust the scale and translate to implement the margins.\n * * `'default'` - uses the default behavior of `xMidYMid meet` (but with margins)\n * * `'vertical'` - fits the canvas vertically (with vertical margins) and centers it\n * horizontally. If the canvas is taller than the viewport, it will meet vertically and\n * there will be blank areas to the left and right. If the canvas is wider than the\n * viewport, it will be sliced.\n * * `'horizontal'` - fitst the canvas horizontally (with horizontal margins) and centers\n * it vertically. If the canvas is wider than the viewport, it will meet horizontally and\n * there will be blank areas above and below. If the canvas is taller than the viewport, it\n * will be sliced.\n *\n * Other options\n * * `null` - no attempt is made to fit the canvas to the svg element, `viewBox` is unset.\n * * another string - sets the `viewBox` and uses the string for `preserveAspectRatio`.\n * * function - will be called with (viewport width, viewport height, canvas width, canvas\n * height) and result will be used to set `preserveAspectRatio`.\n * @method fitStrategy\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [fitStrategy='default']\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.fitStrategy = property('default');\n\n /**\n * Do not allow panning (scrolling) to push the diagram out of the viewable area, if there\n * is space for it to be shown. */\n _diagram.restrictPan = property(false);\n\n /**\n * Auto-zoom behavior.\n * * `'always'` - zoom every time layout happens\n * * `'once'` - zoom the next time layout happens\n * * `null` - manual, call `zoomToFit` to fit\n * @method autoZoom\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [autoZoom=null]\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.autoZoom = property(null);\n _diagram.zoomToFit = function(animate) {\n if(!(_nodeLayer && _edgeLayer))\n return;\n var node = _diagram.selectAllNodes(),\n edge = _diagram.selectAllEdges();\n auto_zoom(node, edge, animate);\n };\n _diagram.zoomDuration = property(500);\n\n /**\n * Set or get the crossfilter dimension which represents the nodes (vertices) in the\n * diagram. Typically there will be a crossfilter instance for the nodes, and another for\n * the edges.\n *\n * *Dimensions are included on the diagram for similarity to dc.js, however the diagram\n * itself does not use them - but {@link dc_graph.filter_selection filter_selection} will.*\n * @method nodeDimension\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.dimension} [nodeDimension]\n * @return {crossfilter.dimension}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeDimension = property();\n\n /**\n * Set or get the crossfilter group which is the data source for the nodes in the\n * diagram. The diagram will use the group's `.all()` method to get an array of `{key,\n * value}` pairs, where the key is a unique identifier, and the value is usually an object\n * containing the node's attributes. All accessors work with these key/value pairs.\n *\n * If the group is changed or returns different values, the next call to `.redraw()` will\n * reflect the changes incrementally.\n *\n * It is possible to pass another object with the same `.all()` interface instead of a\n * crossfilter group.\n * @method nodeGroup\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.group} [nodeGroup]\n * @return {crossfilter.group}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeGroup = property();\n\n /**\n * Set or get the crossfilter dimension which represents the edges in the\n * diagram. Typically there will be a crossfilter instance for the nodes, and another for\n * the edges.\n *\n * *Dimensions are included on the diagram for similarity to dc.js, however the diagram\n * itself does not use them - but {@link dc_graph.filter_selection filter_selection} will.*\n * @method edgeDimension\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.dimension} [edgeDimension]\n * @return {crossfilter.dimension}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeDimension = property();\n\n /**\n * Set or get the crossfilter group which is the data source for the edges in the\n * diagram. See `.nodeGroup` above for the way data is loaded from a crossfilter group.\n *\n * The values in the key/value pairs returned by `diagram.edgeGroup().all()` need to\n * support, at a minimum, the {@link dc_graph.diagram#nodeSource nodeSource} and\n * {@link dc_graph.diagram#nodeTarget nodeTarget}, which should return the same\n * keys as the {@link dc_graph.diagram#nodeKey nodeKey}\n *\n * @method edgeGroup\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.group} [edgeGroup]\n * @return {crossfilter.group}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeGroup = property();\n\n _diagram.edgesInFront = property(false);\n\n /**\n * Set or get the function which will be used to retrieve the unique key for each node. By\n * default, this accesses the `key` field of the object passed to it. The keys should match\n * the keys returned by the {@link dc_graph.diagram#edgeSource edgeSource} and\n * {@link dc_graph.diagram#edgeTarget edgeTarget}.\n *\n * @method nodeKey\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [nodeKey=function(kv) { return kv.key }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeKey = _diagram.nodeKeyAccessor = property(function(kv) {\n return kv.key;\n });\n\n /**\n * Set or get the function which will be used to retrieve the unique key for each edge. By\n * default, this accesses the `key` field of the object passed to it.\n *\n * @method edgeKey\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeKey=function(kv) { return kv.key }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeKey = _diagram.edgeKeyAccessor = property(function(kv) {\n return kv.key;\n });\n\n /**\n * Set or get the function which will be used to retrieve the source (origin/tail) key of\n * the edge objects. The key must equal the key returned by the `.nodeKey` for one of the\n * nodes; if it does not, or if the node is currently filtered out, the edge will not be\n * displayed. By default, looks for `.value.sourcename`.\n *\n * @method edgeSource\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeSource=function(kv) { return kv.value.sourcename; }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeSource = _diagram.sourceAccessor = property(function(kv) {\n return kv.value.sourcename;\n });\n\n /**\n * Set or get the function which will be used to retrieve the target (destination/head) key\n * of the edge objects. The key must equal the key returned by the\n * {@link dc_graph.diagram#nodeKey nodeKey} for one of the nodes; if it does not, or if the node\n * is currently filtered out, the edge will not be displayed. By default, looks for\n * `.value.targetname`.\n * @method edgeTarget\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeTarget=function(kv) { return kv.value.targetname; }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeTarget = _diagram.targetAccessor = property(function(kv) {\n return kv.value.targetname;\n });\n\n _diagram.portDimension = property(null);\n _diagram.portGroup = property(null);\n _diagram.portNodeKey = property(null);\n _diagram.portEdgeKey = property(null);\n _diagram.portName = property(null);\n _diagram.portStyleName = property(null);\n _diagram.portElastic = property(true);\n\n _diagram.portStyle = named_children();\n\n _diagram.portBounds = property(null); // position limits, in radians\n\n _diagram.edgeSourcePortName = property(null);\n _diagram.edgeTargetPortName = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the radius, in pixels, for each\n * node. This determines the height of nodes,and if `nodeFitLabel` is false, the width too.\n * @method nodeRadius\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeRadius=25]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeRadius = _diagram.nodeRadiusAccessor = property(25);\n\n /**\n * Set or get the function which will be used to retrieve the stroke width, in pixels, for\n * drawing the outline of each node. According to the SVG specification, the outline will\n * be drawn half on top of the fill, and half outside. Default: 1\n * @method nodeStrokeWidth\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeStrokeWidth=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeStrokeWidth = _diagram.nodeStrokeWidthAccessor = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the stroke color for the outline\n * of each node.\n * @method nodeStroke\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeStroke='black']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeStroke = _diagram.nodeStrokeAccessor = property('black');\n\n _diagram.nodeStrokeDashArray = property(null);\n\n /**\n * If set, the value returned from `nodeFill` will be processed through this\n * {@link https://github.com/mbostock/d3/wiki/Scales d3.scale}\n * to return the fill color. If falsy, uses the identity function (no scale).\n * @method nodeFillScale\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|d3.scale} [nodeFillScale]\n * @return {Function|d3.scale}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFillScale = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the fill color for the body of each\n * node.\n * @method nodeFill\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeFill='white']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFill = _diagram.nodeFillAccessor = property('white');\n\n /**\n * Set or get the function which will be used to retrieve the opacity of each node.\n * @method nodeOpacity\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeOpacity=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeOpacity = property(1);\n\n /**\n * Set or get the padding or minimum distance, in pixels, for a node. (Will be distributed\n * to both sides of the node.)\n * @method nodePadding\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodePadding=6]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodePadding = property(6);\n\n\n /**\n * Set or get the padding, in pixels, for a node's label. If an object, should contain fields\n * `x` and `y`. If a number, will be applied to both x and y.\n * @method nodeLabelPadding\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number|Object} [nodeLabelPadding=0]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabelPadding = property(0);\n\n /**\n * Set or get the line height for nodes with multiple lines of text, in ems.\n * @method nodeLineHeight\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeLineHeight=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLineHeight = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the label text to display in each\n * node. By default, looks for a field `label` or `name` inside the `value` field.\n * @method nodeLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeLabel]\n * @return {Function|String}\n * @example\n * // Default behavior\n * diagram.nodeLabel(function(kv) {\n * return kv.value.label || kv.value.name;\n * });\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabel = _diagram.nodeLabelAccessor = property(function(kv) {\n return kv.value.label || kv.value.name;\n });\n\n _diagram.nodeLabelAlignment = property('center');\n\n /**\n * Set or get the function which will be used to retrieve the label fill color. Default: null\n * @method nodeLabelFill\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeLabelFill=null]\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabelFill = _diagram.nodeLabelFillAccessor = property(null);\n\n /**\n * Whether to fit the node shape around the label\n * @method nodeFitLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Boolean} [nodeFitLabel=true]\n * @return {Function|Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFitLabel = _diagram.nodeFitLabelAccessor = property(true);\n\n /**\n * The shape to use for drawing each node, specified as an object with at least the field\n * `shape`. The names of shapes are mostly taken\n * [from graphviz](http://www.graphviz.org/doc/info/shapes.html); currently ellipse, egg,\n * triangle, rectangle, diamond, trapezium, parallelogram, pentagon, hexagon, septagon, octagon,\n * invtriangle, invtrapezium, square, polygon are supported.\n *\n * If `shape = polygon`:\n * * `sides`: number of sides for a polygon\n * @method nodeShape\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Object} [nodeShape={shape: 'ellipse'}]\n * @return {Function|Object}\n * @return {dc_graph.diagram}\n * @example\n * // set shape to diamond or parallelogram based on flag\n * diagram.nodeShape(function(kv) {\n * return {shape: kv.value.flag ? 'diamond' : 'parallelogram'};\n * });\n **/\n _diagram.nodeShape = property(default_shape);\n\n // for defining custom (and standard) shapes\n _diagram.shape = named_children();\n\n _diagram.shape('nothing', dc_graph.no_shape());\n _diagram.shape('ellipse', dc_graph.ellipse_shape());\n _diagram.shape('polygon', dc_graph.polygon_shape());\n _diagram.shape('rounded-rect', dc_graph.rounded_rectangle_shape());\n\n _diagram.nodeContent = property('text');\n _diagram.content = named_children();\n _diagram.content('text', dc_graph.text_contents());\n\n // really looks like these should reside in an open namespace - this used only by an extension\n // but it's no less real than any other computed property\n _diagram.nodeIcon = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the node title, usually rendered\n * as a tooltip. By default, uses the key of the node.\n * @method nodeTitle\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeTitle]\n * @return {Function|String}\n * @example\n * // Default behavior\n * diagram.nodeTitle(function(kv) {\n * return _diagram.nodeKey()(kv);\n * });\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeTitle = _diagram.nodeTitleAccessor = property(function(kv) {\n return _diagram.nodeKey()(kv);\n });\n\n /**\n * By default, nodes are added to the layout in the order that `.nodeGroup().all()` returns\n * them. If specified, `.nodeOrdering` provides an accessor that returns a key to sort the\n * nodes on. *It would be better not to rely on ordering to affect layout, but it may\n * affect the layout in some cases.*\n * @method nodeOrdering\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [nodeOrdering=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeOrdering = property(null);\n\n /**\n * Specify an accessor that returns an {x,y} coordinate for a node that should be\n * {@link https://github.com/tgdwyer/WebCola/wiki/Fixed-Node-Positions fixed in place},\n * and returns falsy for other nodes.\n * @method nodeFixed\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Object} [nodeFixed=null]\n * @return {Function|Object}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFixed = _diagram.nodeFixedAccessor = property(null);\n\n\n /**\n * Set or get the function which will be used to retrieve the stroke color for the edges.\n * @method edgeStroke\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeStroke='black']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeStroke = _diagram.edgeStrokeAccessor = property('black');\n\n /**\n * Set or get the function which will be used to retrieve the stroke width for the edges.\n * @method edgeStrokeWidth\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeStrokeWidth=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeStrokeWidth = _diagram.edgeStrokeWidthAccessor = property(1);\n\n _diagram.edgeStrokeDashArray = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the edge opacity, a number from 0\n * to 1.\n * @method edgeOpacity\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeOpacity=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeOpacity = _diagram.edgeOpacityAccessor = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the edge label text. The label is\n * displayed when an edge is hovered over. By default, uses the `edgeKey`.\n * @method edgeLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeLabel]\n * @example\n * // Default behavior\n * diagram.edgeLabel(function(e) {\n * return _diagram.edgeKey()(e);\n * });\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeLabel = _diagram.edgeLabelAccessor = property(function(e) {\n return _diagram.edgeKey()(e);\n });\n\n /**\n * Set or get the function which will be used to retrieve the name of the arrowhead to use\n * for the target/ head/destination of the edge. Arrow symbols can be specified with\n * `.defineArrow()`. Return null to display no arrowhead.\n * @method edgeArrowhead\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeArrowhead='vee']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowhead = _diagram.edgeArrowheadAccessor = property('vee');\n\n /**\n * Set or get the function which will be used to retrieve the name of the arrow tail to use\n * for the tail/source of the edge. Arrow symbols can be specified with\n * `.defineArrow()`. Return null to display no arrowtail.\n * @method edgeArrowtail\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeArrowtail=null]\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowtail = _diagram.edgeArrowtailAccessor = property(null);\n\n /**\n * Multiplier for arrow size.\n * @method edgeArrowSize\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeArrowSize=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowSize = property(1);\n\n /**\n * To draw an edge but not have it affect the layout, specify a function which returns\n * false for that edge. By default, will return false if the `notLayout` field of the edge\n * value is truthy, true otherwise.\n * @method edgeIsLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Boolean} [edgeIsLayout]\n * @example\n * // Default behavior\n * diagram.edgeIsLayout(function(kv) {\n * return !kv.value.notLayout;\n * });\n * @return {Function|Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeIsLayout = _diagram.edgeIsLayoutAccessor = property(function(kv) {\n return !kv.value.notLayout;\n });\n\n // if false, don't draw or layout the edge. this is not documented because it seems like\n // the interface could be better and this combined with edgeIsLayout. (currently there is\n // no way to layout but not draw an edge.)\n _diagram.edgeIsShown = property(true);\n\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 *\n * **Deprecated**: Use {@link dc_graph.cola_layout#lengthStrategy cola_layout.lengthStrategy} instead.\n * @method lengthStrategy\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [lengthStrategy='symmetric']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.lengthStrategy = deprecate_layout_algo_parameter('lengthStrategy');\n\n /**\n * When the `.lengthStrategy` is 'individual', this accessor will be used to read the\n * length of each edge. By default, reads the `distance` field of the edge. If the\n * distance is falsy, uses the `baseLength`.\n * @method edgeLength\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeLength]\n * @example\n * // Default behavior\n * diagram.edgeLength(function(kv) {\n * return kv.value.distance;\n * });\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeLength = _diagram.edgeDistanceAccessor = property(function(kv) {\n return kv.value.distance;\n });\n\n /**\n * This should be equivalent to rankdir and ranksep in the dagre/graphviz nomenclature, but for\n * now it is separate.\n *\n * **Deprecated**: use {@link dc_graph.cola_layout#flowLayout cola_layout.flowLayout} instead.\n * @method flowLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Object} [flowLayout]\n * @example\n * // No flow (default)\n * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.flowLayout({axis: 'x', minSeparation: 200})\n **/\n _diagram.flowLayout = deprecate_layout_algo_parameter('flowLayout');\n\n /**\n * Direction to draw ranks. Currently for dagre and expand_collapse, but I think cola could be\n * generated from graphviz-style since it is more general.\n *\n * **Deprecated**: use {@link dc_graph.dagre_layout#rankdir dagre_layout.rankdir} instead.\n * @method rankdir\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [rankdir]\n **/\n _diagram.rankdir = deprecate_layout_algo_parameter('rankdir');\n\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 *\n * **Deprecated**: use {@link dc_graph.cola_layout#baseLength cola_layout.baseLength} instead.\n * @method baseLength\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [baseLength]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.baseLength = deprecate_layout_algo_parameter('baseLength');\n\n /**\n * Gets or sets the transition duration, the length of time each change to the diagram will\n * be animated.\n * @method transitionDuration\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [transitionDuration=500]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.transitionDuration = property(500);\n\n /**\n * How transitions should be split into separate animations to emphasize\n * the delete, modify, and insert operations:\n * * `none`: modify and insert operations animate at the same time\n * * `modins`: modify operations happen before inserts\n * * `insmod`: insert operations happen before modifies\n *\n * Deletions always happen before/during layout computation.\n * @method stageTransitions\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [stageTransitions='none']\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.stageTransitions = property('none');\n\n /**\n * The delete transition happens simultaneously with layout, which can take longer\n * than the transition duration. Delaying it can bring it closer to the other\n * staged transitions.\n * @method deleteDelay\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [deleteDelay=0]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.deleteDelay = property(0);\n\n /**\n * Whether to put connected components each in their own group, to stabilize layout.\n * @method groupConnected\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [stageTransitions=false]\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.groupConnected = deprecate_layout_algo_parameter('groupConnected');\n\n /**\n * Gets or sets the maximum time spent doing layout for a render or redraw. Set to 0 for no\n * limit.\n * @method timeLimit\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [timeLimit=0]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.timeLimit = property(0);\n\n /**\n * Gets or sets a function which will be called with the current nodes and edges on each\n * redraw in order to derive new layout constraints. The constraints are built from scratch\n * on each redraw.\n *\n * This can be used to generate alignment (rank) or axis constraints. By default, no\n * constraints will be added, although cola.js uses constraints internally to implement\n * flow and overlap prevention. See\n * {@link https://github.com/tgdwyer/WebCola/wiki/Constraints the cola.js wiki}\n * for more details.\n *\n * For convenience, dc.graph.js implements a other constraints on top of those implemented\n * by cola.js:\n * * 'ordering' - the nodes will be ordered on the specified `axis` according to the keys\n * returned by the `ordering` function, by creating separation constraints using the\n * specified `gap`.\n * * 'circle' - (experimental) the nodes will be placed in a circle using \"wheel\"\n * edge lengths similar to those described in\n * {@link http://www.csse.monash.edu.au/~tdwyer/Dwyer2009FastConstraints.pdf Scalable, Versatile, and Simple Constrained Graph Layout}\n * *Although this is not as performant or stable as might be desired, it may work for\n * simple cases. In particular, it should use edge length *constraints*, which don't yet\n * exist in cola.js.*\n *\n * Because it is tedious to write code to generate constraints for a graph, **dc.graph.js**\n * also includes a {@link #dc_graph+constraint_pattern constraint generator} to produce\n * this constrain function, specifying the constraints themselves in a graph.\n * @method constrain\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [constrain]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.constrain = property(function(nodes, edges) {\n return [];\n });\n\n /**\n * If there are multiple edges between the same two nodes, start them this many pixels away\n * from the original so they don't overlap.\n * @method parallelEdgeOffset\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [parallelEdgeOffset=10]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.parallelEdgeOffset = property(10);\n\n /**\n * By default, edges are added to the layout in the order that `.edgeGroup().all()` returns\n * them. If specified, `.edgeOrdering` provides an accessor that returns a key to sort the\n * edges on.\n *\n * *It would be better not to rely on ordering to affect layout, but it may affect the\n * layout in some cases. (Probably less than node ordering, but it does affect which\n * parallel edge is which.)*\n * @method edgeOrdering\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeOrdering=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeOrdering = property(null);\n\n _diagram.edgeSort = property(null);\n\n _diagram.cascade = cascade(_diagram);\n\n /**\n * Currently there are some bugs when the same instance of cola.js is used multiple\n * times. (In particular, overlaps between nodes may not be eliminated\n * {@link https://github.com/tgdwyer/WebCola/issues/118 if cola is not reinitialized}\n * This flag can be set true to construct a new cola layout object on each redraw. However,\n * layout seems to be more stable if this is set false, so hopefully this will be fixed\n * soon.\n * @method initLayoutOnRedraw\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [initLayoutOnRedraw=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.initLayoutOnRedraw = property(false);\n\n /**\n * Whether to perform layout when the data is unchanged from the last redraw.\n * @method layoutUnchanged\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [layoutUnchanged=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.layoutUnchanged = property(false);\n\n /**\n * When `layoutUnchanged` is false, this will force layout to happen again. This may be needed\n * when changing a parameter but not changing the topology of the graph. (Yes, probably should\n * not be necessary.)\n * @method relayout\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _diagram.relayout = function() {\n _nodes_snapshot = _edges_snapshot = null;\n return this;\n };\n\n /**\n * Function to call to generate an initial layout. Takes (diagram, nodes, edges)\n *\n * **Deprecated**: The only layout that was using this was `tree_positions` and it never\n * worked as an initialization step for cola, as was originally intended. Now that\n * `tree_layout` is a layout algorithm, this should go away.\n *\n * In the future, there will be support for chaining layout algorithms. But that will be a\n * matter of composing them into a super-algorithm, not a special step like this was.\n * @method initialLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [initialLayout=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.initialLayout = deprecated_property('initialLayout is deprecated - use layout algorithms instead', null);\n\n _diagram.initialOnly = deprecated_property('initialOnly is deprecated - see the initialLayout deprecation notice in the documentation', false);\n\n /**\n * By default, all nodes are included, and edges are only included if both end-nodes are\n * visible. If `.induceNodes` is set, then only nodes which have at least one edge will be\n * shown.\n * @method induceNodes\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [induceNodes=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.induceNodes = property(false);\n\n /**\n * If this flag is true, the positions of nodes and will be updated while layout is\n * iterating. If false, the positions will only be updated once layout has\n * stabilized. Note: this may not be compatible with transitionDuration.\n * @method showLayoutSteps\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [showLayoutSteps=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.showLayoutSteps = property(false);\n\n /**\n * Assigns a legend object which will be displayed within the same SVG element and\n * according to the visual encoding of this diagram.\n * @method legend\n * @memberof dc_graph.diagram\n * @instance\n * @param {Object} [legend=null]\n * @return {Object}\n * @return {dc_graph.diagram}\n **/\n // (pre-deprecated; see below)\n\n /**\n * Specifies another kind of child layer or interface. For example, this can\n * be used to display tooltips on nodes using `dc_graph.tip`.\n\n * The child needs to support a `parent` method, the diagram to modify.\n * @method child\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [id] - the name of the child to modify or add\n * @param {Object} [object] - the child object to add, or null to remove\n * @example\n * // Display tooltips on node hover, via the d3-tip library\n * var tip = dc_graph.tip()\n * tip.content(function(n, k) {\n * // you can do an asynchronous call here, e.g. d3.json, if you need\n * // to fetch data to show the tooltip - just call k() with the content\n * k(\"This is \" + n.orig.value.name + \"\");\n * });\n * diagram.child('tip', tip);\n * @return {dc_graph.diagram}\n **/\n _diagram.mode = _diagram.child = named_children();\n\n // for backward compatibility; use .child() for more control & multiple legends\n _diagram.legend = function(_) {\n if(!arguments.length)\n return _diagram.child('node-legend');\n _diagram.child('node-legend', _);\n return _diagram;\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 _diagram.layoutAlgorithm = function(value, skipWarning) {\n if(!arguments.length)\n return _diagram.layoutEngine() ? _diagram.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 _diagram.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 _diagram.layoutEngine = property(null).react(function(val) {\n if(val && val.parent)\n val.parent(_diagram);\n if(_g) { // already rendered\n // remove any calculated points, if engine did that\n Object.keys(_edges).forEach(function(k) {\n _edges[k].cola.points = null;\n });\n // initialize engine\n initLayout(val);\n }\n });\n\n // S-spline any edges that are not going in this direction\n _diagram.enforceEdgeDirection = property(null);\n\n _diagram.tickSize = deprecate_layout_algo_parameter('tickSize');\n\n\n _diagram.uniqueId = function() {\n return _diagram.anchorName().replace(/[ .#=\\[\\]\"]/g, '-');\n };\n\n _diagram.edgeId = function(e) {\n return 'edge-' + _diagram.edgeKey.eval(e).replace(/[^\\w-_]/g, '-');\n };\n\n _diagram.arrowId = function(e, kind) {\n return 'arrow-' + kind + '-' + _diagram.uniqueId() + '-' + _diagram.edgeId(e);\n };\n _diagram.textpathId = function(e) {\n return 'textpath-' + _diagram.uniqueId() + '-' + _diagram.edgeId(e);\n };\n\n // this kind of begs a (meta)graph ADT\n // instead of munging this into the diagram\n _diagram.getNode = function(id) {\n return _nodes[id] ? _nodes[id].orig : null;\n };\n\n _diagram.getWholeNode = function(id) {\n return _nodes[id] ? _nodes[id] : null;\n };\n\n _diagram.getEdge = function(id) {\n return _edges[id] ? _edges[id].orig : null;\n };\n\n _diagram.getWholeEdge = function(id) {\n return _edges[id] ? _edges[id] : null;\n };\n\n // again, awful, we need an ADT\n _diagram.getPort = function(nid, eid, name) {\n return _ports[port_name(nid, eid, name)];\n };\n\n _diagram.nodePorts = function() {\n return _nodePorts;\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 _diagram.handleDisconnected = deprecate_layout_algo_parameter('handleDisconnected');\n\n function initLayout(engine) {\n if(!_diagram.layoutEngine())\n _diagram.layoutAlgorithm('cola', true);\n (engine || _diagram.layoutEngine()).init({\n width: _diagram.width(),\n height: _diagram.height()\n });\n }\n\n _diagram.forEachChild = function(node, children, idf, f) {\n children.enum().forEach(function(key) {\n f(children(key),\n node.filter(function(n) { return idf(n) === key; }));\n });\n };\n _diagram.forEachShape = function(node, f) {\n _diagram.forEachChild(node, _diagram.shape, function(n) { return n.dcg_shape.shape; }, f);\n };\n _diagram.forEachContent = function(node, f) {\n _diagram.forEachChild(node, _diagram.content, _diagram.nodeContent.eval, f);\n };\n _diagram.renderNode = _diagram._enterNode = function(nodeEnter) {\n if(_diagram.nodeTitle())\n nodeEnter.append('title');\n nodeEnter.each(infer_shape(_diagram));\n _diagram.forEachShape(nodeEnter, function(shape, node) {\n node.call(shape.create);\n });\n return _diagram;\n };\n _diagram.redrawNode = _diagram._updateNode = function(node) {\n var changedShape = node.filter(shape_changed(_diagram));\n changedShape.selectAll('.node-shape').remove();\n changedShape.each(infer_shape(_diagram));\n _diagram.forEachShape(changedShape, function(shape, node) {\n node.call(shape.create);\n });\n node.select('title')\n .text(_diagram.nodeTitle.eval);\n _diagram.forEachContent(node, function(contentType, node) {\n node.call(contentType.update);\n _diagram.forEachShape(contentType.selectContent(node), function(shape, content) {\n content\n .call(fit_shape(shape, _diagram));\n });\n });\n _diagram.forEachShape(node, function(shape, node) {\n node.call(shape.update);\n });\n node.select('.node-shape')\n .attr({\n stroke: _diagram.nodeStroke.eval,\n 'stroke-width': _diagram.nodeStrokeWidth.eval,\n 'stroke-dasharray': _diagram.nodeStrokeDashArray.eval,\n fill: compose(_diagram.nodeFillScale() || identity, _diagram.nodeFill.eval)\n });\n return _diagram;\n };\n _diagram.redrawEdge = _diagram._updateEdge = function(edge) {\n edge\n .attr('stroke', _diagram.edgeStroke.eval)\n .attr('stroke-width', _diagram.edgeStrokeWidth.eval)\n .attr('stroke-dasharray', _diagram.edgeStrokeDashArray.eval)\n .attr('marker-end', function(e) {\n var name = _diagram.edgeArrowhead.eval(e),\n id = edgeArrow(e, 'head', name);\n return id ? 'url(#' + id + ')' : null;\n })\n .attr('marker-start', function(e) {\n var name = _diagram.edgeArrowtail.eval(e),\n arrow_id = edgeArrow(e, 'tail', name);\n return name ? 'url(#' + arrow_id + ')' : null;\n })\n .each(function(e) {\n var fillEdgeStroke = _diagram.edgeStroke.eval(e);\n d3.selectAll('#' + _diagram.arrowId(e, 'head'))\n .attr('fill', _diagram.edgeStroke.eval(e));\n d3.selectAll('#' + _diagram.arrowId(e, 'tail'))\n .attr('fill', _diagram.edgeStroke.eval(e));\n });\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 _diagram.stagedDuration = function() {\n return (_diagram.stageTransitions() !== 'none') ?\n _diagram.transitionDuration() / 2 :\n _diagram.transitionDuration();\n };\n\n _diagram.stagedDelay = function(is_enter) {\n return _diagram.stageTransitions() === 'none' ||\n _diagram.stageTransitions() === 'modins' === !is_enter ?\n 0 :\n _diagram.transitionDuration() / 2;\n };\n\n _diagram.selectAllNodes = function(selector) {\n selector = selector || '.node';\n return _nodeLayer && _nodeLayer.selectAll(selector).filter(function(n) {\n return !n.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.selectAllEdges = function(selector) {\n selector = selector || '.edge';\n return _edgeLayer && _edgeLayer.selectAll(selector).filter(function(e) {\n return !e.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.selectAllDefs = function(selector) {\n return _defs && _defs.selectAll(selector).filter(function(def) {\n return !def.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.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 _diagram.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 _diagram.startLayout();\n };\n\n _diagram.startLayout = function () {\n var nodes = _diagram.nodeGroup().all();\n var edges = _diagram.edgeGroup().all();\n var ports = _diagram.portGroup() ? _diagram.portGroup().all() : [];\n if(_running) {\n throw new Error('dc_graph.diagram.redraw already running!');\n }\n _running = true;\n\n var oldWidth = _lastWidth, oldHeight = _lastHeight;\n var newWidth = _diagram.width(), newHeight = _diagram.height();\n if(oldWidth !== newWidth || oldHeight !== newHeight) {\n var scale = _zoom.scale(), translate = _zoom.translate();\n _zoom.scale(1).translate([0,0]);\n var xDomain = _diagram.x().domain(), yDomain = _diagram.y().domain();\n _diagram.x()\n .domain([xDomain[0], xDomain[0] + (xDomain[1] - xDomain[0])*newWidth/oldWidth])\n .range([0, newWidth]);\n _diagram.y()\n .domain([yDomain[0], yDomain[0] + (yDomain[1] - yDomain[0])*newHeight/oldHeight])\n .range([0, newHeight]);\n _zoom\n .x(_diagram.x()).y(_diagram.y())\n .translate(translate).scale(scale);\n }\n\n if(_diagram.initLayoutOnRedraw())\n initLayout();\n _diagram.layoutEngine().stop();\n _dispatch.preDraw();\n\n // ordering shouldn't matter, but we support ordering in case it does\n if(_diagram.nodeOrdering()) {\n nodes = crossfilter.quicksort.by(_diagram.nodeOrdering())(nodes.slice(0), 0, nodes.length);\n }\n if(_diagram.edgeOrdering()) {\n edges = crossfilter.quicksort.by(_diagram.edgeOrdering())(edges.slice(0), 0, edges.length);\n }\n\n var wnodes = regenerate_objects(_nodes, nodes, null, function(v) {\n return _diagram.nodeKey()(v);\n }, function(v1, v) {\n v1.orig = v;\n v1.cola = v1.cola || {};\n v1.cola.dcg_nodeKey = _diagram.nodeKey.eval(v1);\n _diagram.layoutEngine().populateLayoutNode(v1.cola, v1);\n });\n var wedges = regenerate_objects(_edges, edges, null, function(e) {\n return _diagram.edgeKey()(e);\n }, function(e1, e) {\n e1.orig = e;\n e1.cola = e1.cola || {};\n e1.cola.dcg_edgeKey = _diagram.edgeKey.eval(e1);\n e1.cola.dcg_edgeSource = _diagram.edgeSource.eval(e1);\n e1.cola.dcg_edgeTarget = _diagram.edgeTarget.eval(e1);\n e1.source = _nodes[e1.cola.dcg_edgeSource];\n e1.target = _nodes[e1.cola.dcg_edgeTarget];\n e1.cola.dcg_edgeLength = _diagram.edgeLength.eval(e1);\n e1.sourcePort = e1.sourcePort || {};\n e1.targetPort = e1.targetPort || {};\n _diagram.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(_diagram.edgeIsShown.eval);\n\n // now we know which ports should exist\n var needports = wedges.map(function(e) {\n if(_diagram.edgeSourcePortName.eval(e))\n return port_name(_diagram.edgeSource.eval(e), null, _diagram.edgeSourcePortName.eval(e));\n else return port_name(null, _diagram.edgeKey.eval(e), 'source');\n });\n needports = needports.concat(wedges.map(function(e) {\n if(_diagram.edgeTargetPortName.eval(e))\n return port_name(_diagram.edgeTarget.eval(e), null, _diagram.edgeTargetPortName.eval(e));\n else return port_name(null, _diagram.edgeKey.eval(e), 'target');\n }));\n // remove any invalid ports so they don't crash in confusing ways later\n ports = ports.filter(function(p) {\n return _diagram.portNodeKey() && _diagram.portNodeKey()(p) ||\n _diagram.portEdgeKey() && _diagram.portEdgeKey()(p);\n });\n var wports = regenerate_objects(_ports, ports, needports, function(p) {\n return port_name(_diagram.portNodeKey() && _diagram.portNodeKey()(p),\n _diagram.portEdgeKey() && _diagram.portEdgeKey()(p),\n _diagram.portName()(p));\n }, function(p1, p) {\n p1.orig = p;\n if(p1.named)\n p1.edges = [];\n }, function(k, p) {\n console.assert(k, 'should have screened out invalid ports');\n // it's dumb to parse the id we just created. as usual, i blame the lack of metagraphs\n var parse = split_port_name(k);\n if(parse.nodeKey) {\n p.node = _nodes[parse.nodeKey];\n p.named = true;\n }\n else {\n var e = _edges[parse.edgeKey];\n p.node = e[parse.name];\n p.edges = [e];\n p.named = false;\n }\n p.name = parse.name;\n });\n // remove any ports where the end-node was not found, to avoid crashing elsewhere\n wports = wports.filter(function(p) { return p.node; });\n\n // find all edges for named ports\n wedges.forEach(function(e) {\n var name = _diagram.edgeSourcePortName.eval(e);\n if(name)\n _ports[port_name(_diagram.nodeKey.eval(e.source), null, name)].edges.push(e);\n name = _diagram.edgeTargetPortName.eval(e);\n if(name)\n _ports[port_name(_diagram.nodeKey.eval(e.target), null, name)].edges.push(e);\n });\n\n // optionally, delete nodes that have no edges\n if(_diagram.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 // announce new data\n _dispatch.data(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n _stats = {nnodes: wnodes.length, nedges: wedges.length};\n\n // fixed nodes may have been affected by .data() so calculate now\n wnodes.forEach(function(v) {\n if(_diagram.nodeFixed())\n v.cola.dcg_nodeFixed = _diagram.nodeFixed.eval(v);\n });\n\n // annotate parallel edges so we can draw them specially\n if(_diagram.parallelEdgeOffset()) {\n var em = new Array(wnodes.length);\n for(var i = 0; i < wnodes.length; ++i)\n em[i] = new Array(i);\n wedges.forEach(function(e) {\n e.pos = e.pos || {};\n var min, max, minattr, maxattr;\n if(e.source.index < e.target.index) {\n min = e.source.index; max = e.target.index;\n minattr = 'edgeSourcePortName'; maxattr = 'edgeTargetPortName';\n } else {\n max = e.source.index; min = e.target.index;\n maxattr = 'edgeSourcePortName'; minattr = 'edgeTargetPortName';\n }\n var minport = _diagram[minattr].eval(e) || 'no port',\n maxport = _diagram[maxattr].eval(e) || 'no port';\n em[max][min] = em[max][min] || {};\n em[max][min][maxport] = em[max][min][maxport] || {};\n e.parallel = em[max][min][maxport][minport] = em[max][min][maxport][minport] || {\n rev: [],\n edges: []\n };\n e.parallel.edges.push(e);\n e.parallel.rev.push(min !== e.source.index);\n });\n }\n\n // create edge SVG elements\n var edge = _edgeLayer.selectAll('.edge')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeEnter = edge.enter().append('svg:path')\n .attr({\n class: 'edge',\n id: _diagram.edgeId,\n opacity: 0\n })\n .each(function(e) {\n e.deleted = false;\n });\n\n edge.exit().each(function(e) {\n e.deleted = true;\n }).transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.deleteDelay())\n .attr('opacity', 0)\n .each(function(e) {\n edgeArrow(e, 'head', null);\n edgeArrow(e, 'head', null);\n })\n .remove();\n\n if(_diagram.edgeSort()) {\n edge.sort(function(a, b) {\n var as = _diagram.edgeSort.eval(a), bs = _diagram.edgeSort.eval(b);\n return as < bs ? -1 : bs < as ? 1 : 0;\n });\n }\n\n // another wider copy of the edge just for hover events\n var edgeHover = _edgeLayer.selectAll('.edge-hover')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'edge-hover')\n .attr('opacity', 0)\n .attr('fill', 'none')\n .attr('stroke', 'green')\n .attr('stroke-width', 10)\n .on('mouseover', function(e) {\n d3.select('#' + _diagram.edgeId(e) + '-label')\n .attr('visibility', 'visible');\n })\n .on('mouseout', function(e) {\n d3.select('#' + _diagram.edgeId(e) + '-label')\n .attr('visibility', 'hidden');\n });\n edgeHover.exit().remove();\n\n var edgeLabels = _edgeLayer.selectAll('.edge-label')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeLabelsEnter = edgeLabels.enter()\n .append('text')\n .attr('id', function(e) {\n return _diagram.edgeId(e) + '-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(e) {\n var id = _diagram.textpathId(e);\n // angular on firefox needs absolute paths for fragments\n return window.location.href.split('#')[0] + '#' + id;\n });\n var textPaths = _defs.selectAll('path.edge-label-path')\n .data(wedges, _diagram.textpathId);\n var textPathsEnter = textPaths.enter()\n .append('svg:path').attr({\n class: 'edge-label-path',\n id: _diagram.textpathId\n });\n edgeLabels.exit().transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.deleteDelay())\n .attr('opacity', 0).remove();\n\n // create node SVG elements\n var node = _nodeLayer.selectAll('.node')\n .data(wnodes, _diagram.nodeKey.eval);\n var nodeEnter = node.enter().append('g')\n .attr('class', 'node')\n .attr('opacity', '0') // don't show until has layout\n .each(function(n) {\n n.deleted = false;\n });\n // .call(_d3cola.drag);\n\n _diagram._enterNode(nodeEnter);\n\n node.exit().each(function(n) {\n n.deleted = true;\n }).transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.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(_diagram.initialLayout())\n _diagram.initialLayout()(_diagram, wnodes, wedges);\n\n // no layout if the topology and layout parameters haven't changed\n var skip_layout = false;\n if(!_diagram.layoutUnchanged()) {\n var nodes_snapshot = JSON.stringify(wnodes.map(function(n) {\n return {orig: get_original(n), cola: {dcg_nodeFixed: n.cola.dcg_nodeFixed}};\n }));\n var edges_snapshot = JSON.stringify(wedges.map(function(e) {\n return {orig: get_original(e), cola: e.cola};\n }));\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 = _diagram.constrain()(_diagram, 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(_diagram.edgeIsLayout.eval);\n var nonlayout_edges = wedges.filter(function(x) {\n return !_diagram.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 || _diagram.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 _diagram.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(skip_layout) {\n _running = false;\n _dispatch.end(false);\n check_zoom(node, edge);\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 if(!n) {\n console.warn('received node \"' + rn.dcg_nodeKey + '\" that we did not send');\n return;\n }\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 if(!e) {\n console.warn('received edge \"' + re.dcg_edgeKey + '\" that we did not send');\n return;\n }\n if(re.points)\n e.cola.points = re.points;\n });\n }\n _diagram.layoutEngine()\n .on('tick', function(nodes, edges) {\n var elapsed = Date.now() - startTime;\n if(!_diagram.initialOnly())\n populate_cola(nodes, edges);\n if(_diagram.showLayoutSteps()) {\n init_node_ports(_nodes, wports);\n _dispatch.receivedLayout(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n propagate_port_positions(_nodes, wedges, _ports);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, true);\n draw_ports(node);\n // should do this only once\n _dispatch.transitionsStarted(node, edge, edgeHover);\n }\n if(_needsRedraw || _diagram.timeLimit() && elapsed > _diagram.timeLimit()) {\n console.log('cancelled');\n _diagram.layoutEngine().stop();\n }\n })\n .on('end', function(nodes, edges) {\n if(!_diagram.showLayoutSteps()) {\n if(!_diagram.initialOnly())\n populate_cola(nodes, edges);\n init_node_ports(_nodes, wports);\n _dispatch.receivedLayout(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n propagate_port_positions(_nodes, wedges, _ports);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, true);\n draw_ports(node);\n _dispatch.transitionsStarted(node, edge, edgeHover);\n }\n else layout_done(true);\n check_zoom(node, edge);\n })\n .on('start', function() {\n console.log('algo ' + _diagram.layoutEngine().layoutAlgorithm() + ' started.');\n _dispatch.start();\n });\n\n if(_diagram.initialOnly())\n _diagram.layoutEngine().dispatch().end(wnodes, wedges);\n else {\n _dispatch.start(); // cola doesn't seem to fire this itself?\n _diagram.layoutEngine().data(\n { width: _diagram.width(), height: _diagram.height() },\n wnodes.map(function(v) { return v.cola; }),\n layout_edges.map(function(v) { return v.cola; }),\n constraints\n );\n _diagram.layoutEngine().start();\n }\n return this;\n };\n\n function check_zoom(node, edge) {\n var do_zoom, animate = true;\n switch(_diagram.autoZoom()) {\n case 'always-skipanimonce':\n animate = false;\n _diagram.autoZoom('always');\n case 'always':\n do_zoom = true;\n break;\n case 'once-noanim':\n animate = false;\n case 'once':\n do_zoom = true;\n _diagram.autoZoom(null);\n break;\n default:\n do_zoom = false;\n }\n calc_bounds(node, edge);\n if(do_zoom)\n auto_zoom(animate);\n }\n\n function norm(v) {\n var len = Math.hypot(v[0], v[1]);\n return [v[0]/len, v[1]/len];\n }\n function edge_vec(n, e) {\n var dy = e.target.cola.y - e.source.cola.y,\n dx = e.target.cola.x - e.source.cola.x;\n if(e.source !== n)\n dy = -dy, dx = -dx;\n if(e.parallel && e.parallel.edges.length > 1 && e.source.index > e.target.index)\n dy = -dy, dx = -dx;\n return norm([dx, dy]);\n }\n function init_node_ports(nodes, wports) {\n _nodePorts = {};\n // assemble port-lists for nodes, again because we don't have a metagraph.\n wports.forEach(function(p) {\n var nid = _diagram.nodeKey.eval(p.node);\n var np = _nodePorts[nid] = _nodePorts[nid] || [];\n np.push(p);\n });\n for(var nid in _nodePorts) {\n var n = nodes[nid],\n nports = _nodePorts[nid];\n // initial positions: use average of edge vectors, if any, or existing position\n nports.forEach(function(p) {\n if(_diagram.portElastic.eval(p) && p.edges.length) {\n var vecs = p.edges.map(edge_vec.bind(null, n));\n p.vec = [\n d3.sum(vecs, function(v) { return v[0]; })/vecs.length,\n d3.sum(vecs, function(v) { return v[1]; })/vecs.length\n ];\n } else p.vec = p.vec || undefined;\n p.pos = null;\n });\n }\n }\n function propagate_port_positions(nodes, wedges, ports) {\n // make sure we have projected vectors to positions\n for(var nid in _nodePorts) {\n var n = nodes[nid];\n _nodePorts[nid].forEach(function(p) {\n if(!p.pos)\n project_port(_diagram, n, p);\n });\n }\n\n // propagate port positions to edge endpoints\n wedges.forEach(function(e) {\n var name = _diagram.edgeSourcePortName.eval(e);\n e.sourcePort.pos = name ? ports[port_name(_diagram.nodeKey.eval(e.source), null, name)].pos :\n ports[port_name(null, _diagram.edgeKey.eval(e), 'source')].pos;\n name = _diagram.edgeTargetPortName.eval(e);\n e.targetPort.pos = name ? ports[port_name(_diagram.nodeKey.eval(e.target), null, name)].pos :\n ports[port_name(null, _diagram.edgeKey.eval(e), 'target')].pos;\n console.assert(e.sourcePort.pos && e.targetPort.pos);\n });\n }\n\n function _refresh(node, edge) {\n _diagram._updateEdge(edge);\n _diagram._updateNode(node);\n draw_ports(node);\n }\n\n _diagram.refresh = function(node, edge, edgeHover, edgeLabels, textPaths) {\n if(_animating)\n return this; // but what about changed attributes?\n node = node || _diagram.selectAllNodes();\n edge = edge || _diagram.selectAllEdges();\n _refresh(node, edge);\n\n edgeHover = edgeHover || _diagram.selectAllEdges('.edge-hover');\n edgeLabels = edgeLabels || _diagram.selectAllEdges('.edge-label');\n textPaths = textPaths || _diagram.selectAllDefs('path.edge-label-path');\n var nullSel = d3.select(null); // no enters\n draw(node, nullSel, edge, nullSel, edgeHover, nullSel, edgeLabels, nullSel, textPaths, nullSel, false);\n return this;\n };\n\n _diagram.requestRefresh = function(durationOverride) {\n window.requestAnimationFrame(function() {\n var transdur;\n if(durationOverride !== undefined) {\n transdur = _diagram.transitionDuration();\n _diagram.transitionDuration(durationOverride);\n }\n _diagram.refresh();\n if(durationOverride !== undefined)\n _diagram.transitionDuration(transdur);\n });\n };\n\n _diagram.reposition = function(node, edge) {\n node\n .attr('transform', function (n) {\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n });\n // reset edge ports\n edge.each(function(e) {\n e.pos.new = null;\n e.pos.old = null;\n calc_edge_path(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.pos.new.orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', function() {\n return e.pos.new.orienttail;\n });\n })\n .attr('d', render_edge_path('new'));\n return this;\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(!_diagram.isRunning()) // someone else may already have started\n _diagram.redraw();\n }, 0);\n }\n }\n\n function calculate_arrowhead_orientation(points, end) {\n var spos = points[0], tpos = points[points.length-1];\n var partial = bezier_point(points, end === 'tail' ? 0.25 : 0.75);\n return (end === 'head' ?\n Math.atan2(tpos.y - partial.y, tpos.x - partial.x) :\n Math.atan2(spos.y - partial.y, spos.x - partial.x)) + 'rad';\n }\n\n function enforce_path_direction(path, spos, tpos) {\n var points = path.points, first = points[0], last = points[points.length-1];\n switch(_diagram.enforceEdgeDirection()) {\n case 'LR':\n if(spos.x >= tpos.x) {\n var dx = first.x - last.x;\n return {\n points: [\n first,\n {x: first.x + dx, y: first.y - dx/2},\n {x: last.x - dx, y: last.y - dx/2},\n last\n ],\n bezDegree: 3,\n sourcePort: path.sourcePort,\n targetPort: path.targetPort\n };\n }\n break;\n case 'TB':\n if(spos.y >= tpos.y) {\n var dy = first.y - last.y;\n return {\n points: [\n first,\n {x: first.x + dy/2, y: first.y + dy},\n {x: last.x + dy/2, y: last.y - dy},\n last\n ],\n bezDegree: 3,\n sourcePort: path.sourcePort,\n targetPort: path.targetPort\n };\n }\n break;\n }\n return path;\n }\n function calc_edge_path(e, age, sx, sy, tx, ty) {\n var parallel = e.parallel;\n var source = e.source, target = e.target;\n if(parallel.edges.length > 1 && e.source.index > e.target.index) {\n var t;\n t = target; target = source; source = t;\n t = tx; tx = sx; sx = t;\n t = ty; ty = sy; sy = t;\n }\n var source_padding = source.dcg_ry +\n _diagram.nodeStrokeWidth.eval(source) / 2,\n target_padding = target.dcg_ry +\n _diagram.nodeStrokeWidth.eval(target) / 2;\n for(var p = 0; p < parallel.edges.length; ++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 > 0 ? parallel.edges[p > 2 ? p - 2 : 0].pos[age].path : null;\n var path = draw_edge_to_shapes(_diagram, e, sx, sy, tx, ty,\n last, dir, _diagram.parallelEdgeOffset(),\n source_padding, target_padding\n );\n if(parallel.edges.length > 1 && parallel.rev[p])\n path.points.reverse();\n if(_diagram.enforceEdgeDirection())\n path = enforce_path_direction(path, source.cola, target.cola);\n parallel.edges[p].pos[age] = {\n path: path,\n orienthead: calculate_arrowhead_orientation(path.points, 'head'),\n orienttail: calculate_arrowhead_orientation(path.points, 'tail')\n };\n }\n }\n\n function render_edge_path(age) {\n return function(e) {\n var path = e.pos[age].path;\n return generate_path(path.points, path.bezDegree);\n };\n }\n\n function render_edge_label_path(age) {\n return function(e) {\n var path = e.pos[age].path;\n var points = path.points[path.points.length-1].x < path.points[0].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.pos.new.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((_diagram.fitStrategy() || _diagram.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(animate) {\n if(_diagram.fitStrategy()) {\n if(!_bounds)\n return;\n var vwidth = _bounds.right - _bounds.left, vheight = _bounds.bottom - _bounds.top,\n swidth = _diagram.width() - _diagram.margins().left - _diagram.margins().right,\n sheight = _diagram.height() - _diagram.margins().top - _diagram.margins().bottom;\n if(_diagram.DEBUG_BOUNDS)\n debug_bounds(_bounds);\n var fitS = _diagram.fitStrategy(), translate = [0,0], scale = 1;\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(fitS === 'zoom') {\n scale = _zoom.scale();\n translate = bring_in_bounds(_zoom.translate());\n }\n else\n throw new Error('unknown fitStrategy type ' + typeof fitS);\n\n _animateZoom = animate;\n _zoom.translate(translate).scale(scale).event(_svg);\n _animateZoom = false;\n }\n }\n\n // determine pre-transition orientation that won't spin a lot going to new orientation\n function unsurprising_orient(oldorient, neworient) {\n var oldang = +oldorient.slice(0, -3),\n newang = +neworient.slice(0, -3);\n if(Math.abs(oldang - newang) > Math.PI) {\n if(newang > oldang)\n oldang += 2*Math.PI;\n else oldang -= 2*Math.PI;\n }\n return oldang + 'rad';\n }\n\n function draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, animatePositions) {\n console.assert(edge.data().every(has_source_and_target));\n\n var nodeEntered = {};\n nodeEnter\n .each(function(n) {\n nodeEntered[_diagram.nodeKey.eval(n)] = true;\n })\n .attr('transform', function (n) {\n // start new nodes at their final position\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n });\n var ntrans = node\n .transition()\n .duration(_diagram.stagedDuration())\n .delay(function(n) {\n return _diagram.stagedDelay(nodeEntered[_diagram.nodeKey.eval(n)]);\n })\n .attr('opacity', _diagram.nodeOpacity.eval);\n if(animatePositions)\n ntrans\n .attr('transform', function (n) {\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n })\n .each('end.record', function(n) {\n n.prevX = n.cola.x;\n n.prevY = n.cola.y;\n });\n\n // recalculate edge positions\n edge.each(function(e) {\n e.pos.new = null;\n });\n edge.each(function(e) {\n if(e.cola.points) {\n e.pos.new = {\n path: {\n points: e.cola.points,\n bezDegree: 3\n },\n orienthead: calculate_arrowhead_orientation(e.cola.points, 'head'),\n orienttail: calculate_arrowhead_orientation(e.cola.points, 'tail')\n };\n }\n else {\n if(!e.pos.old)\n calc_edge_path(e, 'old', e.source.prevX || e.source.cola.x, e.source.prevY || e.source.cola.y,\n e.target.prevX || e.target.cola.x, e.target.prevY || e.target.cola.y);\n if(!e.pos.new)\n calc_edge_path(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n }\n if(e.pos.old) {\n if(e.pos.old.path.bezDegree !== e.pos.new.path.bezDegree ||\n e.pos.old.path.points.length !== e.pos.new.path.points.length) {\n console.log('old', e.pos.old.path.points.length, 'new', e.pos.new.path.points.length);\n if(is_one_segment(e.pos.old.path)) {\n e.pos.new.path.points = as_bezier3(e.pos.new.path);\n e.pos.old.path.points = split_bezier_n(as_bezier3(e.pos.old.path),\n (e.pos.new.path.points.length-1)/3);\n e.pos.old.path.bezDegree = e.pos.new.bezDegree = 3;\n }\n else if(is_one_segment(e.pos.new.path)) {\n e.pos.old.path.points = as_bezier3(e.pos.old.path);\n e.pos.new.path.points = split_bezier_n(as_bezier3(e.pos.new.path),\n (e.pos.old.path.points.length-1)/3);\n e.pos.old.path.bezDegree = e.pos.new.bezDegree = 3;\n }\n else console.warn(\"don't know how to interpolate two multi-segments\");\n }\n }\n else\n e.pos.old = e.pos.new;\n });\n\n var edgeEntered = {};\n edgeEnter\n .each(function(e) {\n edgeEntered[_diagram.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 = _diagram.stageTransitions() === 'modins' ? 'new' : 'old';\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.pos[age].orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', function() {\n return e.pos[age].orienttail;\n });\n })\n .attr('d', render_edge_path(_diagram.stageTransitions() === 'modins' ? 'new' : 'old'));\n\n var etrans = edge\n .each(function(e) {\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', unsurprising_orient(e.pos.old.orienthead, e.pos.new.orienthead))\n .transition().duration(_diagram.stagedDuration())\n .delay(_diagram.stagedDelay(false))\n .attr('orient', function() {\n return e.pos.new.orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', unsurprising_orient(e.pos.old.orienttail, e.pos.new.orienttail))\n .transition().duration(_diagram.stagedDuration())\n .delay(_diagram.stagedDelay(false))\n .attr('orient', function() {\n return e.pos.new.orienttail;\n });\n })\n .transition()\n .duration(_diagram.stagedDuration())\n .delay(function(e) {\n return _diagram.stagedDelay(edgeEntered[_diagram.edgeKey.eval(e)]);\n })\n .attr('opacity', _diagram.edgeOpacity.eval);\n if(animatePositions)\n etrans\n .attr('d', function(e) {\n var when = _diagram.stageTransitions() === 'insmod' &&\n edgeEntered[_diagram.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_path(when)(e);\n });\n edgeLabels\n .selectAll('textPath')\n .text(function(e){\n return _diagram.edgeLabel.eval(e);\n })\n .attr('opacity', _diagram.edgeOpacity.eval);\n textPathsEnter\n .attr('d', render_edge_label_path(_diagram.stageTransitions() === 'modins' ? 'new' : 'old'));\n var textTrans = textPaths.transition()\n .duration(_diagram.stagedDuration())\n .delay(function(e) {\n return _diagram.stagedDelay(edgeEntered[_diagram.edgeKey.eval(e)]);\n });\n if(animatePositions)\n textTrans\n .attr('d', function(e) {\n var when = _diagram.stageTransitions() === 'insmod' &&\n edgeEntered[_diagram.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_label_path(when)(e);\n });\n if(_diagram.stageTransitions() === 'insmod' && animatePositions) {\n // inserted edges transition twice in insmod mode\n if(_diagram.stagedDuration() >= 50) {\n etrans = etrans.transition()\n .duration(_diagram.stagedDuration())\n .attr('d', render_edge_path('new'));\n textTrans = textTrans.transition()\n .duration(_diagram.stagedDuration())\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 _animating = true;\n if(!_diagram.showLayoutSteps())\n endall([ntrans, etrans, textTrans],\n function() {\n _animating = false;\n layout_done(true);\n });\n\n if(animatePositions)\n edgeHover.attr('d', render_edge_path('new'));\n\n edge.each(function(e) {\n e.pos.old = e.pos.new;\n });\n }\n\n _diagram.animating = function() {\n return _animating;\n };\n\n _diagram.selectNodePortsOfStyle = function(node, style) {\n return node.selectAll('g.port').filter(function(p) {\n return _diagram.portStyleName.eval(p) === style;\n });\n };\n\n function draw_ports(node) {\n if(!_nodePorts)\n return;\n _diagram.portStyle.enum().forEach(function(style) {\n var nodePorts2 = {};\n for(var nid in _nodePorts)\n nodePorts2[nid] = _nodePorts[nid].filter(function(p) {\n return _diagram.portStyleName.eval(p) === style;\n });\n var port = _diagram.selectNodePortsOfStyle(node, style);\n _diagram.portStyle(style).drawPorts(port, nodePorts2, node);\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. 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 _diagram.render = function () {\n if(_svg)\n _dispatch.reset();\n if(!_diagram.initLayoutOnRedraw())\n initLayout();\n _diagram.resetSvg();\n _g = _svg.append('g')\n .attr('class', 'draw');\n\n var layers = ['edge-layer', 'node-layer'];\n if(_diagram.edgesInFront())\n layers.reverse();\n _g.selectAll('g').data(layers)\n .enter().append('g')\n .attr('class', function(l) { return l; });\n _edgeLayer = _g.selectAll('g.edge-layer');\n _nodeLayer = _g.selectAll('g.node-layer');\n\n _dispatch.render();\n _diagram.redraw();\n return this;\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 _diagram.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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 _diagram.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 _diagram.select = function (s) {\n return _diagram.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 _diagram.selectAll = function (s) {\n return _diagram.root() ? _diagram.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. Gets or sets the x scale.\n * @method x\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.scale} [scale]\n * @return {d3.scale}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.x = property(null);\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. Gets or sets the y scale.\n * @method x\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.scale} [scale]\n * @return {d3.scale}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.y = property(null);\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 diagram. 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 _diagram.svg = function (_) {\n if (!arguments.length) {\n return _svg;\n }\n _svg = _;\n return _diagram;\n };\n\n /**\n * Returns the top `g` element for this specific diagram. This method is usually used to\n * retrieve the g element in order to overlay custom svg drawing\n * programatically. **Caution**: The root g element is usually generated internally, and\n * resetting it might produce unpredictable results.\n * @method g\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.selection} [selection]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.g = function (_) {\n if (!arguments.length) {\n return _g;\n }\n _g = _;\n return _diagram;\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 _diagram.resetSvg = function () {\n if(_svg) {\n _svg.remove();\n _svg = null;\n }\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 _diagram.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 _diagram.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 * `diagram.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 * _diagram.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 _diagram.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 _diagram;\n };\n\n _diagram.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(e, kind, name) {\n var id = _diagram.arrowId(e, kind),\n markerEnter = _diagram.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*_diagram.edgeArrowSize.eval(e))\n .attr('markerHeight', _arrows[name].height*_diagram.edgeArrowSize.eval(e))\n .attr('stroke', _diagram.edgeStroke.eval(e))\n .attr('fill', _diagram.edgeStroke.eval(e))\n .call(_arrows[name].drawFunction);\n }\n return name ? id : null;\n }\n\n function globalTransform(pos, scale, animate) {\n _translate = pos;\n _scale = scale;\n var obj = _g;\n if(animate)\n obj = _g.transition().duration(_diagram.zoomDuration());\n obj.attr('transform', 'translate(' + pos + ')' + ' scale(' + scale + ')');\n }\n\n function margined_bounds() {\n var bounds = _bounds || {left: 0, top: 0, right: 0, bottom: 0};\n var scale = _zoom ? _zoom.scale() : 1;\n return {\n left: bounds.left - _diagram.margins().left/scale,\n top: bounds.top - _diagram.margins().top/scale,\n right: bounds.right + _diagram.margins().right/scale,\n bottom: bounds.bottom + _diagram.margins().bottom/scale\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] - _diagram.x()(x) + _diagram.x().range()[0];\n }\n function align_top(translate, y) {\n return translate[1] - _diagram.y()(y) + _diagram.y().range()[0];\n }\n function align_right(translate, x) {\n return translate[0] - _diagram.x()(x) + _diagram.x().range()[1];\n }\n function align_bottom(translate, y) {\n return translate[1] - _diagram.y()(y) + _diagram.y().range()[1];;\n }\n\n function bring_in_bounds(translate) {\n var xDomain = _diagram.x().domain(), yDomain = _diagram.y().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 return translate;\n\n }\n function doZoom() {\n var translate, scale = d3.event.scale;\n if(_diagram.restrictPan())\n _zoom.translate(translate = bring_in_bounds(d3.event.translate));\n else translate = d3.event.translate;\n globalTransform(translate, scale, _animateZoom);\n _dispatch.zoomed(translate, scale);\n }\n\n _diagram.resizeSvg = function(w, h) {\n if(_svg) {\n _svg.attr('width', w || (_width === 'auto' ? '100%' : _diagram.width()))\n .attr('height', h || (_height === 'auto' ? '100%' : _diagram.height()));\n }\n return _diagram;\n };\n\n function enableZoom() {\n _svg.call(_zoom);\n _svg.on('dblclick.zoom', null);\n }\n function disableZoom() {\n _svg.on('.zoom', null);\n }\n\n function generateSvg() {\n _svg = _diagram.root().append('svg');\n _diagram.resizeSvg();\n\n _defs = _svg.append('svg:defs');\n\n // start out with 1:1 zoom\n if(!_diagram.x())\n _diagram.x(d3.scale.linear()\n .domain([0, _diagram.width()])\n .range([0, _diagram.width()]));\n if(!_diagram.y())\n _diagram.y(d3.scale.linear()\n .domain([0, _diagram.height()])\n .range([0, _diagram.height()]));\n _zoom = d3.behavior.zoom()\n .on('zoom', doZoom)\n .x(_diagram.x()).y(_diagram.y())\n .scaleExtent(_diagram.zoomExtent());\n if(_diagram.mouseZoomable()) {\n var mod, mods;\n var brush = _diagram.child('brush');\n if((mod = _diagram.modKeyZoom())) {\n if (Array.isArray (mod))\n mods = mod.slice ();\n else if (typeof mod === \"string\")\n mods = [mod];\n else\n mods = ['Alt'];\n var mouseDown = false, modDown = false, zoomEnabled = false;\n _svg.on('mousedown.modkey-zoom', function() {\n mouseDown = true;\n }).on('mouseup.modkey-zoom', function() {\n mouseDown = false;\n if(!mouseDown && !modDown && zoomEnabled) {\n zoomEnabled = false;\n disableZoom();\n if(brush)\n brush.activate();\n }\n });\n d3.select(document)\n .on('keydown.modkey-zoom', function() {\n if(mods.indexOf (d3.event.key) > -1) {\n modDown = true;\n if(!mouseDown) {\n zoomEnabled = true;\n enableZoom();\n if(brush)\n brush.deactivate();\n }\n }\n })\n .on('keyup.modkey-zoom', function() {\n if(mods.indexOf (d3.event.key) > -1) {\n modDown = false;\n if(!mouseDown) {\n zoomEnabled = false;\n disableZoom();\n if(brush)\n brush.activate();\n }\n }\n });\n }\n else enableZoom();\n }\n\n return _svg;\n }\n\n _diagram.invertCoord = function(clientCoord) {\n return [\n _diagram.x().invert(clientCoord[0]),\n _diagram.y().invert(clientCoord[1])\n ];\n };\n\n _diagram.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 _diagram.defineArrow('crow', 12, 12, 0, 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 _diagram.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 diagram initialization, but be called again to relocate the diagram. 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 _diagram.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 _diagram.root(d3.select(_anchor));\n _diagram.root().classed(dc_graph.constants.CHART_CLASS, true);\n dc.registerChart(_diagram, chartGroup);\n } else {\n throw new dc.errors.BadArgumentException('parent must be defined');\n }\n _chartGroup = chartGroup;\n return _diagram;\n };\n\n /**\n * Returns the internal numeric ID of the chart.\n * @method chartID\n * @memberof dc.baseMixin\n * @instance\n * @returns {String}\n */\n _diagram.chartID = function () {\n return _diagram.__dcFlag__;\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 _diagram.anchorName = function () {\n var a = _diagram.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' + _diagram.chartID();\n };\n\n return _diagram.anchor(parent, chartGroup);\n};\n","dc_graph.spawn_engine = function(layout, args, worker) {\n args = args || {};\n worker = worker && !!window.Worker;\n var engine = dc_graph.engines.instantiate(layout, args, worker);\n if(!engine) {\n console.warn('layout engine ' + layout + ' not found; using default ' + dc_graph._default_engine);\n engine = dc_graph.engines.instantiate(dc_graph._default_engine, args, worker);\n }\n return engine;\n};\n\ndc_graph._engines = [\n {\n name: 'dagre',\n params: ['rankdir'],\n instantiate: function() {\n return dc_graph.dagre_layout();\n }\n },\n {\n name: 'd3force',\n instantiate: function() {\n return dc_graph.d3_force_layout();\n }\n },\n {\n name: 'd3v4force',\n instantiate: function() {\n return dc_graph.d3v4_force_layout();\n }\n },\n {\n name: 'tree',\n instantiate: function() {\n return dc_graph.tree_layout();\n }\n },\n {\n names: ['circo', 'dot', 'neato', 'osage', 'twopi', 'fdp'],\n instantiate: function(layout, args) {\n return dc_graph.graphviz_layout(null, layout, args.server);\n }\n },\n {\n name: 'cola',\n params: ['lengthStrategy'],\n instantiate: function() {\n return dc_graph.cola_layout();\n }\n }\n];\ndc_graph._default_engine = 'cola';\n\ndc_graph.engines = {\n entry_pred: function(layoutName) {\n return function(e) {\n return e.name && e.name === layoutName || e.names && e.names.includes(layoutName);\n };\n },\n get: function(layoutName) {\n return dc_graph._engines.find(this.entry_pred(layoutName));\n },\n instantiate: function(layout, args, worker) {\n var entry = this.get(layout);\n if(!entry)\n return null;\n var engine = entry.instantiate(layout, args),\n params = entry.params || [];\n params.forEach(function(p) {\n if(args[p])\n engine[p](args[p]);\n });\n if(engine.supportsWebworker && engine.supportsWebworker() && worker)\n engine = dc_graph.webworker_layout(engine);\n return engine;\n },\n available: function() {\n return dc_graph._engines.reduce(function(avail, entry) {\n return avail.concat(entry.name ? [entry.name] : entry.names);\n }, []);\n },\n unregister: function(layoutName) {\n // meh. this is a bit much. there is such a thing as making the api too \"easy\".\n var i = dc_graph._engines.findIndex(this.entry_pred(layoutName));\n var remove = false;\n if(i < 0)\n return false;\n var entry = dc_graph._engines[i];\n if(entry.name === layoutName)\n remove = true;\n else {\n var j = entry.names.indexOf(layoutName);\n if(j >= 0)\n entry.names.splice(j, 1);\n else\n console.warn('search for engine failed', layoutName);\n if(entry.names.length === 0)\n remove = true;\n }\n if(remove)\n dc_graph._engines.splice(i, 1);\n return true;\n },\n register: function(entry) {\n var that = this;\n if(!entry.instantiate) {\n console.error('engine definition needs instantiate: function(layout, args) { ... }');\n return this;\n }\n if(entry.name)\n this.unregister(entry.name);\n else if(entry.names)\n entry.names.forEach(function(layoutName) {\n that.unregister(layoutName);\n });\n else {\n console.error('engine definition needs name or names[]');\n return this;\n }\n dc_graph._engines.push(entry);\n return this;\n }\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(graph, nodes, edges, constraints) {\n _worker.worker.postMessage({\n command: 'data',\n args: {\n layoutId: layoutEngine.layoutId(),\n graph: graph,\n nodes: nodes,\n edges: edges,\n constraints: constraints\n }\n });\n };\n engine.start = function() {\n _worker.worker.postMessage({\n command: 'start',\n args: {\n layoutId: layoutEngine.layoutId()\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', 'needsStage',\n 'populateLayoutNode', 'populateLayoutEdge', 'rankdir', 'ranksep'];\n passthroughs.concat(layoutEngine.optionNames()).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 if(arguments.length === 1)\n return _dispatch.on(event);\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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.dcg_nodeFixed;\n\n if(v1.fixed && typeof v.dcg_nodeFixed === 'object') {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_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, null, 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(engine.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() {\n _d3cola.start(engine.unconstrainedIterations(),\n engine.userConstraintIterations(),\n engine.allConstraintsIterations(),\n engine.gridSnapIterations());\n }\n\n function stop() {\n if(_d3cola)\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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize', 'groupConnected']\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 * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.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 switch(dir) {\n case 'LR': return {axis: 'x', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n case 'TB': return {axis: 'y', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n default: return null; // RL, BT do not appear to be possible (negative separation) (?)\n }\n }\n _flowLayout = flow;\n return this;\n },\n unconstrainedIterations: property(10),\n userConstraintIterations: property(20),\n allConstraintsIterations: property(20),\n gridSnapIterations: property(0),\n tickSize: property(1),\n groupConnected: property(false)\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, nodesep: options.nodesep, ranksep: options.ranksep});\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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 /*\n dagre does not seem to accept input positions\n if(v.dcg_nodeFixed) {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n }\n */\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, null, 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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n start: function() {\n start();\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 encode_name(e.dcg_edgeTarget) + '\" ' + stringize_properties([\n stringize_property('id', encode_name(e.dcg_edgeKey)),\n stringize_property('arrowhead', 'none'),\n stringize_property('arrowtail', 'none')\n ]);\n }));\n lines.push('}');\n lines.push('');\n _dotString = lines.join('\\n');\n }\n\n function process_response(error, result) {\n _dispatch.start();\n var bb = result.bb.split(',').map(function(x) { return +x; });\n var nodes = (result.objects || []).filter(function(n) {\n return n.pos; // remove non-nodes like clusters\n }).map(function(n) {\n var pos = n.pos.split(',');\n return {\n dcg_nodeKey: decode_name(n.name),\n x: +pos[0],\n y: bb[3] - pos[1]\n };\n });\n _clusters = (result.objects || []).filter(function(n) {\n return /^cluster/.test(n.name);\n });\n _clusters.forEach(function(c) {\n // annotate with flipped cluster coords for convenience\n c.bbflip = c.bb.split(',').map(function(s) { return +s; });\n var t = bb[3] - c.bbflip[1];\n c.bbflip[1] = bb[3] - c.bbflip[3];\n c.bbflip[3] = t;\n });\n var edges = (result.edges || []).map(function(e) {\n var e2 = {\n dcg_edgeKey: decode_name(e.id || 'n' + e._gvid)\n };\n if(e._draw_) {\n var directive = e._draw_.find(function(d) { return d.op && d.points; });\n e2.points = directive.points.map(function(p) { return {x: p[0], y: bb[3] - p[1]}; });\n }\n return e2;\n });\n _dispatch.end(nodes, edges);\n }\n\n function start() {\n if(server) {\n d3.json(server)\n .header(\"Content-type\", \"application/x-www-form-urlencoded\")\n .post('layouttool=' + layout + '&' + encodeURIComponent(_dotString), process_response);\n }\n else {\n var result = Viz(_dotString, {format: 'json', engine: layout, totalMemory: 1 << 25});\n result = JSON.parse(result);\n process_response(null, result);\n }\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 layout;\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return false;\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n dotInput: function(text) {\n _dotInput = text;\n return this;\n },\n clusters: function() {\n // filter out clusters and return them separately, because dc.graph doesn't know how to draw them\n return _clusters;\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return graphviz_keys;\n },\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n}\n\n","/**\n * `dc_graph.d3_force_layout` is an adaptor for d3-force layouts in dc.graph.js\n * @class d3_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3_force_layout}\n **/\ndc_graph.d3_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3.layout.force()\n .size([options.width, options.height]);\n\n _simulation.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fixed = true;\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n } else v1.fixed = false;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, 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.source.id = nodeIDs[e1.source.dcg_nodeKey];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.target.id = nodeIDs[e1.target.dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.nodes(_wnodes);\n _simulation.links(_wedges);\n }\n\n function start() {\n installForces();\n runSimulation(_options.iterations);\n }\n\n function stop() {\n if(_simulation)\n _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fixed = false;\n _nodes[key].x = data[key].x;\n _nodes[key].y = data[key].y;\n }\n });\n }\n\n function installForces() {\n if(_paths === null)\n _simulation.gravity(_options.gravityStrength)\n .charge(_options.initialCharge);\n else {\n if(_options.fixOffPathNodes) {\n var nodesOnPath = d3.set(); // nodes on path\n _paths.forEach(function(path) {\n path.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(!nodesOnPath.has(key)) {\n _nodes[key].fixed = true;\n } else {\n _nodes[key].fixed = false;\n }\n });\n }\n\n // enlarge charge force to separate nodes on paths\n _simulation.charge(_options.chargeForce);\n }\n };\n\n function runSimulation(iterations) {\n if(!iterations) {\n dispatchState('end');\n return;\n }\n _simulation.start();\n for (var i = 0; i < 300; ++i) {\n _simulation.tick();\n if(_paths)\n applyPathAngleForces();\n }\n _simulation.stop();\n }\n\n function applyPathAngleForces() {\n function _dot(v1, v2) { return v1.x*v2.x + v1.y*v2.y; };\n function _len(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n function _angle(v1, v2) {\n var a = _dot(v1, v2) / (_len(v1)*_len(v2));\n a = Math.min(a, 1);\n a = Math.max(a, -1);\n return Math.acos(a);\n };\n // perpendicular unit length vector\n function _pVec(v) {\n var xx = -v.y/v.x, yy = 1;\n var length = _len({x: xx, y: yy});\n return {x: xx/length, y: yy/length};\n };\n\n function updateNode(node, angle, pVec, alpha) {\n node.x += pVec.x*(Math.PI-angle)*alpha;\n node.y += pVec.y*(Math.PI-angle)*alpha;\n }\n\n _paths.forEach(function(path) {\n if(path.length < 3) return; // at least 3 nodes (and 2 edges): A->B->C\n for(var i = 1; i < path.length-1; ++i) {\n var current = _nodes[path[i]];\n var prev = _nodes[path[i-1]];\n var next = _nodes[path[i+1]];\n\n // calculate the angle\n var vPrev = {x: prev.x - current.x, y: prev.y - current.y};\n var vNext = {x: next.x - current.x, y: next.y - current.y};\n\n var angle = _angle(vPrev, vNext); // angle in [0, PI]\n\n var pvecPrev = _pVec(vPrev);\n var pvecNext = _pVec(vNext);\n\n // make sure the perpendicular vector is in the\n // direction that makes the angle more towards 180 degree\n // 1. calculate the middle point of node 'prev' and 'next'\n var mid = {x: (prev.x+next.x)/2.0, y: (prev.y+next.y)/2.0};\n // 2. calculate the vectors: 'prev' pointing to 'mid', 'next' pointing to 'mid'\n var prev_mid = {x: mid.x-prev.x, y: mid.y-prev.y};\n var next_mid = {x: mid.x-next.x, y: mid.y-next.y};\n // 3. the 'correct' vector: the angle between pvec and prev_mid(next_mid) should\n // be an obtuse angle\n pvecPrev = _angle(prev_mid, pvecPrev) >= Math.PI/2.0 ? pvecPrev : {x: -pvecPrev.x, y: -pvecPrev.y};\n pvecNext = _angle(next_mid, pvecNext) >= Math.PI/2.0 ? pvecNext : {x: -pvecNext.x, y: -pvecNext.y};\n\n // modify positions of prev and next\n updateNode(prev, angle, pvecPrev, _options.angleForce);\n updateNode(next, angle, pvecNext, _options.angleForce);\n }\n\n });\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.02),\n chargeForce: property(-500),\n gravityStrength: property(1.0),\n initialCharge: property(-400),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n return engine;\n};\n\ndc_graph.d3_force_layout.scripts = ['d3.js'];\n","/**\n * `dc_graph.d3v4_force_layout` is an adaptor for d3-force version 4 layouts in dc.graph.js\n * @class d3v4_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3v4_force_layout}\n **/\ndc_graph.d3v4_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3v4.forceSimulation()\n .force('link', d3v4.forceLink())\n .force('center', d3v4.forceCenter(options.width / 2, options.height / 2))\n .force('gravityX', d3v4.forceX(options.width / 2).strength(_options.gravityStrength))\n .force('gravityY', d3v4.forceY(options.height / 2).strength(_options.gravityStrength))\n .force('collision', d3v4.forceCollide(_options.collisionRadius))\n .force('charge', d3v4.forceManyBody())\n .stop();\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fx = v.dcg_nodeFixed.x;\n v1.fy = v.dcg_nodeFixed.y;\n } else v1.fx = v1.fy = null;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.source = nodeIDs[_nodes[e.dcg_edgeSource].dcg_nodeKey];\n e1.target = nodeIDs[_nodes[e.dcg_edgeTarget].dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.force('straighten', null);\n _simulation.nodes(_wnodes);\n _simulation.force('link').links(_wedges);\n }\n\n function start() {\n _dispatch.start();\n installForces(_paths);\n runSimulation(_options.iterations);\n }\n\n function stop() {\n // not running asynchronously, no _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fx = data[key].x;\n _nodes[key].fy = data[key].y;\n }\n });\n }\n function installForces(paths) {\n if(paths)\n paths = paths.filter(function(path) {\n return path.nodes.every(function(nk) { return _nodes[nk]; });\n });\n if(paths === null || !paths.length) {\n _simulation.force('charge').strength(_options.initialCharge);\n } else {\n var nodesOnPath;\n if(_options.fixOffPathNodes) {\n nodesOnPath = d3.set();\n paths.forEach(function(path) {\n path.nodes.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n }\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(_options.fixOffPathNodes && !nodesOnPath.has(key)) {\n _nodes[key].fx = _nodes[key].x;\n _nodes[key].fy = _nodes[key].y;\n } else {\n _nodes[key].fx = null;\n _nodes[key].fy = null;\n }\n });\n\n _simulation.force('charge').strength(_options.chargeForce);\n _simulation.force('straighten', d3v4.forceStraightenPaths()\n .id(function(n) { return n.dcg_nodeKey; })\n .angleForce(_options.angleForce)\n .pathNodes(function(p) { return p.nodes; })\n .pathStrength(function(p) { return p.strength; })\n .paths(paths));\n }\n };\n\n function runSimulation(iterations) {\n _simulation.alpha(1);\n for (var i = 0; i < iterations; ++i) {\n _simulation.tick();\n dispatchState('tick');\n }\n dispatchState('end');\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3v4-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength', 'collisionRadius',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.01),\n chargeForce: property(-600),\n gravityStrength: property(0.3),\n collisionRadius: property(8),\n initialCharge: property(-100),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n engine.pathStraightenForce = engine.angleForce;\n return engine;\n};\n\ndc_graph.d3v4_force_layout.scripts = ['d3.js', 'd3v4-force.js'];\n","dc_graph.flexbox_layout = function(id) {\n var _layoutId = id || uuid();\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n\n var _graph, _tree, _nodes = {}, _wnodes;\n\n function init(options) {\n }\n // like d3.nest but address can be of arbitrary (and different) length\n // probably less efficient too\n function add_node(adhead, adtail, n, tree) {\n tree.address = adhead.slice();\n tree.children = tree.children || {};\n if(!adtail.length) {\n tree.node = n;\n return;\n }\n var t = tree.children[adtail[0]] = tree.children[adtail[0]] || {};\n adhead.push(adtail.shift());\n add_node(adhead, adtail, n, t);\n }\n function all_keys(tree) {\n var key = _engine.addressToKey()(tree.address);\n return Array.prototype.concat.apply([key], Object.keys(tree.children).map(function(k) {\n return all_keys(tree.children[k]);\n }));\n }\n function data(graph, nodes) {\n _graph = graph;\n _tree = {};\n nodes.forEach(function(n) {\n var ad = _engine.keyToAddress()(n.dcg_nodeKey);\n add_node([], ad, n, _tree);\n });\n var need = all_keys(_tree);\n _wnodes = nodes;\n }\n var internal_attrs = ['sort', 'dcg_nodeKey', 'x', 'y'],\n skip_on_parents = ['width', 'height'];\n function create_flextree(attrs, tree) {\n var flexnode = {name: _engine.addressToKey()(tree.address), style: {}};\n var attrs2 = Object.assign({}, attrs);\n var isParent = Object.keys(tree.children).length;\n if(tree.node)\n Object.assign(attrs, tree.node);\n for(var attr in attrs) {\n if(internal_attrs.includes(attr))\n continue;\n if(isParent && skip_on_parents.includes(attr))\n continue;\n var value = attrs[attr];\n if(typeof value === 'function')\n value = value(tree.node);\n flexnode.style[attr] = value;\n }\n if(isParent) {\n flexnode.children = Object.values(tree.children)\n .sort(attrs.sort)\n .map(function(c) { return c.address[c.address.length-1]; })\n .map(function(key) {\n return create_flextree(Object.assign({}, attrs2), tree.children[key]);\n });\n }\n tree.flexnode = flexnode;\n return flexnode;\n }\n function apply_layout(offset, tree) {\n if(_engine.logStuff())\n console.log(tree.node.dcg_nodeKey + ': '+ JSON.stringify(tree.flexnode.layout));\n tree.node.x = offset.x + tree.flexnode.layout.left + tree.flexnode.layout.width/2;\n tree.node.y = offset.y + tree.flexnode.layout.top + tree.flexnode.layout.height/2;\n Object.keys(tree.children)\n .map(function(key) { return tree.children[key]; })\n .forEach(function(child) {\n apply_layout({x: offset.x + tree.flexnode.layout.left, y: offset.y + tree.flexnode.layout.top}, child);\n });\n }\n function dispatchState(wnodes, wedges, event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n function start() {\n var defaults = {\n sort: function(a, b) {\n return d3.ascending(a.node.dcg_nodeKey, b.node.dcg_nodeKey);\n }\n };\n var flexTree = create_flextree(defaults, _tree);\n flexTree.style.width = _graph.width;\n flexTree.style.height = _graph.height;\n if(_engine.logStuff())\n console.log(JSON.stringify(flexTree, null, 2));\n computeLayout(flexTree);\n apply_layout({x: 0, y: 0}, _tree);\n dispatchState(_wnodes, [], 'end');\n }\n function stop() {\n }\n\n // currently dc.graph populates the \"cola\" (really \"layout\") member with the attributes\n // needed for layout and does not pass in the original data. flexbox has a huge number of attributes\n // and it might be more appropriate for it to look at the original data.\n // (Especially because it also computes some attributes based on data.)\n var supportedAttributes = [\n 'width', 'height', // positive number\n 'minWidth', 'minHeight', // positive number\n 'maxWidth', 'maxHeight', // positive number\n 'left', 'right', 'top', 'bottom', // number\n 'margin', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom', // number\n 'padding', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', // positive number\n 'borderWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'borderBottomWidth', // positive number\n 'flexDirection', // 'column', 'row'\n 'justifyContent', // 'flex-start', 'center', 'flex-end', 'space-between', 'space-around'\n 'alignItems', 'alignSelf', // 'flex-start', 'center', 'flex-end', 'stretch'\n 'flex', // positive number\n 'flexWrap', // 'wrap', 'nowrap'\n 'position' // 'relative', 'absolute'\n ];\n\n var _engine = {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes) {\n data(graph, nodes);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return [];\n },\n populateLayoutNode: function(n1, n) {\n ['sort', 'order'].concat(supportedAttributes).forEach(function(attr) {\n if(n.orig.value[attr])\n n1[attr] = n.orig.value[attr];\n });\n },\n populateLayoutEdge: function() {},\n addressToKey: property(function(ad) { return ad.join(','); }),\n keyToAddress: property(function(nid) { return nid.split(','); }),\n logStuff: property(false)\n };\n return _engine;\n};\n\ndc_graph.flexbox_layout.scripts = ['css-layout.js'];\n","dc_graph.manual_layout = function(id) {\n var _layoutId = id || uuid();\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n\n var _wnodes;\n\n function init(options) {\n }\n function data(nodes) {\n _wnodes = nodes;\n }\n function dispatchState(wnodes, wedges, event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n function start() {\n dispatchState(_wnodes, [], 'end');\n }\n function stop() {\n }\n\n var _engine = {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return [];\n },\n populateLayoutNode: function(n1, n) {\n ['x', 'y'].forEach(function(attr) {\n if(n.orig.value[attr] !== undefined)\n n1[attr] = n.orig.value[attr];\n });\n },\n populateLayoutEdge: function() {},\n addressToKey: property(function(ad) { return ad.join(','); }),\n keyToAddress: property(function(nid) { return nid.split(','); })\n };\n return _engine;\n};\n\ndc_graph.manual_layout.scripts = ['css-layout.js'];\n","function port_name(nodeId, edgeId, portName) {\n if(!(nodeId || edgeId))\n return null; // must have one key or the other\n if(nodeId) nodeId = nodeId.replace(/\\//g, '%2F');\n if(edgeId) edgeId = edgeId.replace(/\\//g, '%2F');\n return (nodeId ? 'node/' + nodeId : 'edge/' + edgeId) + '/' + portName;\n};\nfunction split_port_name(portname) {\n var parts = portname.split('/');\n console.assert(parts.length === 3);\n parts = parts.map(function(p) {\n return p.replace(/%2F/g, '/');\n });\n if(parts[0] === 'node')\n return {\n nodeKey: parts[1],\n name: parts[2]\n };\n else return {\n edgeKey: parts[1],\n name: parts[2]\n };\n}\nfunction project_port(diagram, n, p) {\n if(!p.vec) {\n console.assert(!p.edges.length);\n throw new Error(\"port has not been placed, maybe install place_ports? \" + p.name);\n }\n p.pos = diagram.shape(n.dcg_shape.shape).intersect_vec(n, p.vec[0]*1000, p.vec[1]*1000);\n}\n\ndc_graph.place_ports = function() {\n function received_layout(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n var node_ports = diagram.nodePorts();\n\n function is_ccw(u, v) {\n return u[0]*v[1] - u[1]*v[0] > 0;\n }\n function in_bounds(v, bounds) {\n // assume bounds are ccw\n return is_ccw(bounds[0], v) && is_ccw(v, bounds[1]);\n }\n function clip(v, bounds) {\n if(is_ccw(v, bounds[0]))\n return bounds[0];\n else if(is_ccw(bounds[1], v))\n return bounds[1];\n else return v;\n }\n function a_to_v(a) {\n return [Math.cos(a), Math.sin(a)];\n }\n function v_to_a(v) {\n return Math.atan2(v[1], v[0]);\n }\n function distance(p, p2) {\n return Math.hypot(p2.pos.x - p.pos.x, p2.pos.y - p.pos.y);\n }\n function misses(p, p2) {\n var dist = distance(p, p2);\n var misses = dist > _behavior.minDistance();\n return misses;\n }\n function rand_within(a, b) {\n return a + Math.random()*(b-a);\n }\n // calculate port positions\n for(var nid in node_ports) {\n var n = nodes[nid],\n nports = node_ports[nid];\n\n // make sure that we have vector and angle bounds for any ports with specification\n nports.forEach(function(p) {\n var bounds = p.orig && diagram.portBounds.eval(p) || [0, 2*Math.PI];\n if(Array.isArray(bounds[0])) {\n p.vbounds = bounds;\n p.abounds = bounds.map(v_to_a);\n }\n else {\n p.vbounds = bounds.map(a_to_v);\n p.abounds = bounds;\n }\n if(p.abounds[0] > p.abounds[1])\n p.abounds[1] += 2*Math.PI;\n console.assert(p.orig || p.vec, 'unplaced unspecified port');\n });\n\n // determine which ports satisfy bounds or are unplaced\n var inside = [], outside = [], unplaced = [];\n nports.forEach(function(p) {\n if(!p.vec)\n unplaced.push(p);\n else if(p.vbounds && !in_bounds(p.vec, p.vbounds))\n outside.push(p);\n else\n inside.push(p);\n });\n\n // shunt outside ports into their bounds\n outside.forEach(function(p) {\n p.vec = clip(p.vec, p.vbounds);\n inside.push(p);\n });\n\n // for all unplaced ports that share a bounds, evenly distribute them within those bounds.\n // assume that bounds are disjoint.\n var boundses = {}, boundports = {};\n unplaced.forEach(function(p) {\n var boundskey = p.abounds.map(function(x) { return x.toFixed(3); }).join(',');\n boundses[boundskey] = p.abounds;\n boundports[boundskey] = boundports[boundskey] || [];\n boundports[boundskey].push(p);\n });\n for(var b in boundports) {\n var bounds = boundses[b], bports = boundports[b];\n if(bports.length === 1)\n bports[0].vec = a_to_v((bounds[0] + bounds[1])/2);\n else {\n var slice = (bounds[1] - bounds[0]) / (boundports[b].length - 1);\n boundports[b].forEach(function(p, i) {\n p.vec = a_to_v(bounds[0] + i*slice);\n });\n }\n }\n inside = inside.concat(unplaced);\n unplaced = [];\n\n // determine positions of all satisfied\n inside.forEach(function(p) {\n project_port(diagram, n, p);\n });\n\n // detect any existing collisions, unplace the one without edges or second one\n for(var i = 0; i < inside.length; ++i) {\n var x = inside[i];\n if(unplaced.includes(x))\n continue;\n for(var j = i+1; j < inside.length; ++j) {\n var y = inside[j];\n if(unplaced.includes(y))\n continue;\n if(!misses(x, y)) {\n if(!x.edges.length) {\n unplaced.push(x);\n continue;\n }\n else\n unplaced.push(y);\n }\n }\n }\n inside = inside.filter(function(p) { return !unplaced.includes(p); });\n\n // place any remaining by trying random spots within the range until it misses all or we give up\n var patience = _behavior.patience(), maxdist = 0, maxvec;\n while(unplaced.length) {\n var p = unplaced[0];\n p.vec = a_to_v(rand_within(p.abounds[0], p.abounds[1]));\n project_port(diagram, n, p);\n var mindist = d3.min(inside, function(p2) { return distance(p, p2); });\n if(mindist > maxdist) {\n maxdist = mindist;\n maxvec = p.vec;\n }\n if(!patience-- || mindist > _behavior.minDistance()) {\n if(patience<0) {\n console.warn('ran out of patience placing a port');\n p.vec = maxvec;\n project_port(diagram, n, p);\n }\n inside.push(p);\n unplaced.shift();\n patience = _behavior.patience();\n maxdist = 0;\n }\n }\n }\n };\n var _behavior = {\n parent: property(null).react(function(p) {\n if(p) {\n p.on('receivedLayout.place-ports', received_layout);\n } else if(_behavior.parent())\n _behavior.parent().on('receivedLayout.place-ports', null);\n }),\n // minimum distance between ports\n minDistance: property(20),\n // number of random places to try when resolving collision\n patience: property(20)\n };\n\n return _behavior;\n};\n","dc_graph.troubleshoot = function() {\n var _debugLayer = null;\n\n function add_behavior(diagram, node, edge, ehover) {\n if(!_debugLayer)\n _debugLayer = diagram.g().append('g').attr({\n class: 'troubleshoot',\n 'pointer-events': 'none'\n });\n var centers = node.data().map(function(n) {\n return {\n x: n.cola.x,\n y: n.cola.y\n };\n });\n var crosshairs = _debugLayer.selectAll('path.nodecenter').data(centers);\n crosshairs.exit().remove();\n crosshairs.enter().append('path').attr('class', 'nodecenter');\n crosshairs.attr({\n d: function(c) {\n return 'M' + (c.x - _behavior.xhairWidth()/2) + ',' + c.y + ' h' + _behavior.xhairWidth() +\n ' M' + c.x + ',' + (c.y - _behavior.xhairHeight()/2) + ' v' + _behavior.xhairHeight();\n },\n opacity: _behavior.xhairOpacity() !== null ? _behavior.xhairOpacity() : _behavior.opacity(),\n stroke: _behavior.xhairColor()\n });\n function cola_point(n) {\n return {x: n.cola.x, y: n.cola.y};\n }\n var colabounds = node.data().map(function(n) {\n return boundary(cola_point(n), n.cola.width, n.cola.height);\n });\n var colaboundary = _debugLayer.selectAll('path.colaboundary').data(colabounds);\n draw_corners(colaboundary, 'colaboundary');\n\n var textbounds = node.data().map(function(n) {\n if(!n.bbox)\n return null;\n return boundary(cola_point(n), n.bbox.width, n.bbox.height);\n }).filter(function(n) { return !!n; });\n var textboundary = _debugLayer.selectAll('path.textboundary').data(textbounds);\n draw_corners(textboundary, 'textboundary');\n\n var radiibounds = node.data().map(function(n) {\n if(!typeof n.dcg_rx === 'number')\n return null;\n return boundary(cola_point(n), n.dcg_rx*2, n.dcg_ry*2);\n }).filter(function(n) { return !!n; });\n var radiiboundary = _debugLayer.selectAll('path.radiiboundary').data(radiibounds);\n draw_corners(radiiboundary, 'radiiboundary');\n\n var domain = _debugLayer.selectAll('rect.domain').data([0]);\n domain.enter().append('rect');\n var xd = _behavior.parent().x().domain(), yd = _behavior.parent().y().domain();\n domain.attr({\n class: 'domain',\n fill: 'none',\n opacity: _behavior.domainOpacity(),\n stroke: _behavior.domainColor(),\n 'stroke-width': _behavior.domainStrokeWidth(),\n x: xd[0],\n y: yd[0],\n width: xd[1] - xd[0],\n height: yd[1] - yd[0]\n });\n }\n function boundary(point, wid, hei) {\n return {\n left: point.x - wid/2,\n top: point.y - hei/2,\n right: point.x + wid/2,\n bottom: point.y + hei/2\n };\n };\n function bound_tick(x, y, dx, dy) {\n return 'M' + x + ',' + (y + dy) + ' v' + -dy + ' h' + dx;\n }\n function corners(bounds) {\n return [\n bound_tick(bounds.left, bounds.top, _behavior.boundsWidth(), _behavior.boundsHeight()),\n bound_tick(bounds.right, bounds.top, -_behavior.boundsWidth(), _behavior.boundsHeight()),\n bound_tick(bounds.right, bounds.bottom, -_behavior.boundsWidth(), -_behavior.boundsHeight()),\n bound_tick(bounds.left, bounds.bottom, _behavior.boundsWidth(), -_behavior.boundsHeight()),\n ].join(' ');\n }\n function draw_corners(binding, classname) {\n binding.exit().remove();\n binding.enter().append('path').attr('class', classname);\n binding.attr({\n d: corners,\n opacity: _behavior.boundsOpacity() !== null ? _behavior.boundsOpacity() : _behavior.opacity(),\n stroke: _behavior.boundsColor(),\n fill: 'none'\n });\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n if(_debugLayer)\n _debugLayer.remove();\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n laterDraw: true,\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n _behavior.opacity = property(0.75);\n\n _behavior.xhairOpacity = property(null);\n _behavior.xhairWidth = property(10);\n _behavior.xhairHeight = property(10);\n _behavior.xhairColor = property('blue');\n\n _behavior.boundsOpacity = property(null);\n _behavior.boundsWidth = property(10);\n _behavior.boundsHeight = property(10);\n _behavior.boundsColor = property('green');\n\n _behavior.domainOpacity = property(0.6);\n _behavior.domainColor = property('darkorange');\n _behavior.domainStrokeWidth = property(11);\n\n return _behavior;\n};\n\n"," dc_graph.validate = function(title) {\n function falsy(objects, accessor, what, who) {\n var f = objects.filter(function(o) {\n return !accessor(o);\n });\n return f.length ?\n [what + ' is empty for ' + f.length + ' of ' + objects.length + ' ' + who, f] :\n null;\n }\n function build_index(objects, accessor) {\n return objects.reduce(function(m, o) {\n m[accessor(o)] = o;\n return m;\n }, {});\n }\n function not_found(index, objects, accessor, what, where, who) {\n var nf = objects.filter(function(o) {\n return !index[accessor(o)];\n }).map(function(o) {\n return {key: accessor(o), value: o};\n });\n return nf.length ?\n [what + ' was not found in ' + where, Object.keys(index), 'for ' + nf.length + ' of ' + objects.length + ' ' + who, nf] :\n null;\n }\n function validate() {\n var diagram = _behavior.parent();\n var nodes = diagram.nodeGroup().all(),\n edges = diagram.edgeGroup().all(),\n ports = diagram.portGroup() ? diagram.portGroup().all() : [];\n var errors = [];\n\n function check(error) {\n if(error)\n errors.push(error);\n }\n\n check(falsy(nodes, diagram.nodeKey(), 'nodeKey', 'nodes'));\n check(falsy(edges, diagram.edgeSource(), 'edgeSource', 'edges'));\n check(falsy(edges, diagram.edgeTarget(), 'edgeTarget', 'edges'));\n\n var contentTypes = d3.set(diagram.content.enum());\n var ct = dc_graph.functor_wrap(diagram.nodeContent());\n var noContentNodes = nodes.filter(function(kv) {\n return !contentTypes.has(ct(kv));\n });\n if(noContentNodes.length)\n errors.push(['there are ' + noContentNodes.length + ' nodes with nodeContent not matching any content', noContentNodes]);\n\n var nindex = build_index(nodes, diagram.nodeKey()),\n eindex = build_index(edges, diagram.edgeKey());\n check(not_found(nindex, edges, diagram.edgeSource(), 'edgeSource', 'nodes', 'edges'));\n check(not_found(nindex, edges, diagram.edgeTarget(), 'edgeTarget', 'nodes', 'edges'));\n\n check(falsy(ports, function(p) {\n return diagram.portNodeKey() && diagram.portNodeKey()(p) ||\n diagram.portEdgeKey() && diagram.portEdgeKey()(p);\n }, 'portNodeKey||portEdgeKey', 'ports'));\n\n var named_ports = !diagram.portNodeKey() && [] || ports.filter(function(p) {\n return diagram.portNodeKey()(p);\n });\n var anonymous_ports = !diagram.portEdgeKey() && [] || ports.filter(function(p) {\n return diagram.portEdgeKey()(p);\n });\n check(not_found(nindex, named_ports, diagram.portNodeKey(), 'portNodeKey', 'nodes', 'ports'));\n check(not_found(eindex, anonymous_ports, diagram.portEdgeKey(), 'portEdgeKey', 'edges', 'ports'));\n\n if(diagram.portName()) {\n var pindex = build_index(named_ports, function(p) {\n return diagram.portNodeKey()(p) + ' - ' + diagram.portName()(p);\n });\n if(diagram.edgeSourcePortName())\n check(not_found(pindex, edges, function(e) {\n return diagram.edgeSource()(e) + ' - ' + d3.functor(diagram.edgeSourcePortName())(e);\n }, 'edgeSourcePortName', 'ports', 'edges'));\n if(diagram.edgeTargetPortName())\n check(not_found(pindex, edges, function(e) {\n return diagram.edgeTarget()(e) + ' - ' + d3.functor(diagram.edgeTargetPortName())(e);\n }, 'edgeTargetPortName', 'ports', 'edges'));\n }\n\n function count_text() {\n return nodes.length + ' nodes, ' + edges.length + ' edges, ' + ports.length + ' ports';\n }\n if(errors.length) {\n console.warn('validation of ' + title + ' failed with ' + count_text() + ':');\n errors.forEach(function(err) {\n console.warn.apply(null, err);\n });\n }\n else\n console.log('validation of ' + title + ' succeeded with ' + count_text() + '.');\n }\n var _behavior = {\n parent: property(null).react(function(p) {\n if(p)\n p.on('data.validate', validate);\n else\n _behavior.parent().on('data.validate', null);\n })\n };\n\n return _behavior;\n};\n","/**\n## Legend\n\nThe dc_graph.legend shows labeled examples of nodes & edges, within the frame of a dc_graph.diagram.\n**/\ndc_graph.legend = function(legend_namespace) {\n legend_namespace = legend_namespace || 'node-legend';\n var _items, _included = [];\n var _dispatch = d3.dispatch('filtered');\n var _totals, _counts;\n\n function apply_filter() {\n if(_legend.dimension()) {\n _legend.dimension().filterFunction(function(k) {\n return !_included.length || _included.includes(k);\n });\n _legend.parent().redraw();\n }\n }\n\n var _legend = dc_graph.behavior(legend_namespace, {\n add_behavior: redraw,\n remove_behavior: function() {},\n parent: function(p) {\n if(p) {\n p\n .on('render.' + legend_namespace, render)\n .on('data.' + legend_namespace, on_data);\n }\n else {\n _legend.parent()\n .on('render.' + legend_namespace, null)\n .on('data.' + legend_namespace, null);\n }\n }\n });\n\n /**\n #### .type([value])\n Set or get the handler for the specific type of item to be displayed. Default: dc_graph.legend.node_legend()\n **/\n _legend.type = property(dc_graph.legend.node_legend());\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 #### .itemWidth([value])\n Set or get width to reserve for legend item. Default: 30.\n **/\n _legend.itemWidth = _legend.nodeWidth = property(40);\n\n /**\n #### .itemHeight([value])\n Set or get height to reserve for legend item. Default: 30.\n **/\n _legend.itemHeight = _legend.nodeHeight = property(40);\n\n /**\n #### .noLabel([value])\n Remove item labels, since legend labels are displayed outside of the items. Default: true\n **/\n _legend.noLabel = property(true);\n\n _legend.counter = property(null);\n\n _legend.replaceFilter = function(filter) {\n if(filter && filter.length === 1)\n _included = filter[0];\n else\n _included = [];\n return _legend;\n };\n\n _legend.filters = function() {\n return _included;\n };\n\n _legend.on = function(type, f) {\n _dispatch.on(type, f);\n return _legend;\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 function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n if(_legend.counter())\n _counts = _legend.counter()(wnodes.map(get_original), wedges.map(get_original), wports.map(get_original));\n }\n\n function redraw() {\n var legend = _legend.parent().svg()\n .selectAll('g.dc-graph-legend.' + legend_namespace)\n .data([0]);\n legend.enter().append('g')\n .attr('class', 'dc-graph-legend ' + legend_namespace)\n .attr('transform', 'translate(' + _legend.x() + ',' + _legend.y() + ')');\n\n var item = legend.selectAll(_legend.type().itemSelector())\n .data(_items, function(n) { return n.name; });\n var itemEnter = _legend.type().create(_legend.parent(), item.enter(), _legend.itemWidth(), _legend.itemHeight());\n itemEnter.append('text')\n .attr('dy', '0.3em')\n .attr('class', 'legend-label');\n item\n .attr('transform', function(n, i) {\n return 'translate(' + _legend.itemWidth()/2 + ',' + (_legend.itemHeight() + _legend.gap())*(i+0.5) + ')';\n });\n item.select('text.legend-label')\n .attr('transform', 'translate(' + (_legend.itemWidth()/2+_legend.gap()) + ',0)')\n .attr('pointer-events', _legend.dimension() ? 'auto' : 'none')\n .text(function(d) {\n return d.name + (_legend.counter() && _counts ? (' (' + (_counts[d.orig.key] || 0) + (_counts[d.orig.key] !== _totals[d.orig.key] ? '/' + (_totals[d.orig.key] || 0) : '') + ')') : '');\n });\n _legend.type().draw(_legend.parent(), itemEnter, item);\n if(_legend.noLabel())\n item.selectAll(_legend.type().labelSelector()).remove();\n\n if(_legend.dropdown()) {\n var caret = item.selectAll('text.dropdown-caret').data(function(x) { return [x]; });\n caret\n .enter().append('text')\n .attr('dy', '0.3em')\n .attr('font-size', '75%')\n .attr('fill', 'blue')\n .attr('class', 'dropdown-caret')\n .style('visibility', 'hidden')\n .html(' ▼');\n caret\n .attr('dx', function(d) {\n return (_legend.itemWidth()/2+_legend.gap()) + getBBoxNoThrow(d3.select(this.parentNode).select('text.legend-label').node()).width;\n })\n .on('mouseenter', function(n) {\n var rect = this.getBoundingClientRect();\n var key = _legend.parent().nodeKey.eval(n);\n _legend.dropdown()\n .show(key, rect.x, rect.y);\n });\n item\n .on('mouseenter', function(d) {\n if(_counts && _counts[d.orig.key]) {\n d3.select(this).selectAll('.dropdown-caret')\n .style('visibility', 'visible');\n }\n })\n .on('mouseleave', function(d) {\n d3.select(this).selectAll('.dropdown-caret')\n .style('visibility', 'hidden');\n });\n }\n\n if(_legend.dimension()) {\n item.attr('cursor', 'pointer')\n .on('click.legend', function(d) {\n var key = _legend.parent().nodeKey.eval(d);\n if(!_included.length)\n _included = _items.map(_legend.parent().nodeKey.eval);\n if(_included.includes(key))\n _included = _included.filter(function(x) { return x !== key; });\n else\n _included.push(key);\n apply_filter();\n _dispatch.filtered(_legend, key);\n });\n } else {\n item.attr('cursor', 'auto')\n .on('click.legend', null);\n }\n item.transition().duration(1000)\n .attr('opacity', function(d) {\n return (!_included.length || _included.includes(_legend.parent().nodeKey.eval(d))) ? 1 : 0.25;\n });\n };\n\n _legend.countBaseline = function() {\n if(_legend.counter)\n _totals = _legend.counter()(\n _legend.parent().nodeGroup().all(),\n _legend.parent().edgeGroup().all(),\n _legend.parent().portGroup() && _legend.parent().portGroup().all());\n };\n\n function render() {\n var exemplars = _legend.exemplars();\n _legend.countBaseline();\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 redraw();\n };\n\n _legend.dropdown = property(null).react(function(v) {\n if(!!v !== !!_legend.dropdown() && _legend.parent() && _legend.parent().svg())\n window.setTimeout(_legend.redraw, 0);\n });\n\n /* enables filtering */\n _legend.dimension = property(null)\n .react(function(v) {\n if(!v) {\n _included = [];\n apply_filter();\n }\n });\n\n return _legend;\n};\n\n\ndc_graph.legend.node_legend = function() {\n return {\n itemSelector: function() {\n return '.node';\n },\n labelSelector: function() {\n return '.node-label';\n },\n create: function(diagram, selection) {\n return selection.append('g')\n .attr('class', 'node');\n },\n draw: function(diagram, itemEnter, item) {\n diagram\n ._enterNode(itemEnter)\n ._updateNode(item);\n }\n };\n};\n\ndc_graph.legend.edge_legend = function() {\n var _type = {\n itemSelector: function() {\n return '.edge-container';\n },\n labelSelector: function() {\n return '.edge-label';\n },\n create: function(diagram, selection, w, h) {\n var edgeEnter = selection.append('g')\n .attr('class', 'edge-container')\n .attr('opacity', 0);\n edgeEnter\n .append('rect')\n .attr({\n x: -w/2,\n y: -h/2,\n width: w,\n height: h,\n fill: 'green',\n opacity: 0\n });\n edgeEnter\n .selectAll('circle')\n .data([-1, 1])\n .enter()\n .append('circle')\n .attr({\n r: _type.fakeNodeRadius(),\n fill: 'none',\n stroke: 'black',\n \"stroke-dasharray\": \"4,4\",\n opacity: 0.15,\n transform: function(d) {\n return 'translate(' + [d * _type.length() / 2, 0].join(',') + ')';\n }\n });\n var edgex = _type.length()/2 - _type.fakeNodeRadius();\n edgeEnter.append('svg:path')\n .attr({\n class: 'edge',\n id: function(d) { return d.name; },\n d: 'M' + -edgex + ',0 L' + edgex + ',0',\n opacity: diagram.edgeOpacity.eval\n });\n\n return edgeEnter;\n },\n fakeNodeRadius: property(10),\n length: property(50),\n draw: function(diagram, itemEnter, item) {\n diagram._updateEdge(itemEnter.select('path.edge'));\n }\n };\n return _type;\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 * @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(_behavior.direction());\n if(_behavior.offset())\n _d3tip.offset(_behavior.offset());\n parent.svg().call(_d3tip);\n }\n }\n function fetch_and_show_content(d) {\n if(_behavior.disabled() || _behavior.selection().exclude && _behavior.selection().exclude(d3.event.target)) {\n hide_tip.call(this);\n return;\n }\n var target = this,\n next = function() {\n _behavior.content()(d, function(content) {\n _d3tip.show.call(target, content, target);\n d3.select('div.d3-tip')\n .selectAll('a.tip-link')\n .on('click', function() {\n d3.event.preventDefault();\n if(_behavior.linkCallback())\n _behavior.linkCallback()(this.id);\n });\n _dispatch.tipped(d);\n });\n };\n if(_hideTimeout)\n window.clearTimeout(_hideTimeout);\n if(_behavior.delay()) {\n window.clearTimeout(_showTimeout);\n _showTimeout = window.setTimeout(next, _behavior.delay());\n }\n else next();\n }\n\n function check_hide_tip() {\n if(d3.event.relatedTarget &&\n (!_behavior.selection().exclude || !_behavior.selection().exclude(d3.event.target)) &&\n (this && this.contains(d3.event.relatedTarget) || // do not hide when mouse is still over a child\n _behavior.clickable() && d3.event.relatedTarget.classList.contains('d3-tip')))\n return false;\n return true;\n }\n\n function preempt_tip() {\n if(_showTimeout) {\n window.clearTimeout(_showTimeout);\n _showTimeout = null;\n }\n }\n\n function hide_tip() {\n if(!check_hide_tip.apply(this))\n return;\n preempt_tip();\n _d3tip.hide();\n }\n\n function hide_tip_delay() {\n if(!check_hide_tip.apply(this))\n return;\n preempt_tip();\n if(_behavior.hideDelay())\n _hideTimeout = window.setTimeout(function () {\n _d3tip.hide();\n }, _behavior.hideDelay());\n else\n _d3tip.hide();\n }\n\n function add_behavior(diagram, node, edge, ehover) {\n init(diagram);\n _behavior.programmatic() || _behavior.selection().select(diagram, node, edge, ehover)\n .on('mouseover.' + _namespace, fetch_and_show_content)\n .on('mouseout.' + _namespace, hide_tip_delay);\n if(_behavior.clickable()) {\n d3.select('div.d3-tip')\n .on('mouseover.' + _namespace, function() {\n if(_hideTimeout)\n window.clearTimeout(_hideTimeout);\n })\n .on('mouseout.' + _namespace, hide_tip_delay);\n }\n }\n function remove_behavior(diagram, node, edge, ehover) {\n _behavior.programmatic() || _behavior.selection().select(diagram, node, edge, ehover)\n .on('mouseover.' + _namespace, null)\n .on('mouseout.' + _namespace, null);\n }\n\n var _behavior = dc_graph.behavior(_namespace, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n laterDraw: true\n });\n /**\n * Specify the direction for tooltips. Currently supports the\n * [cardinal and intercardinal directions](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 _behavior.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 thing 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: assume it's a node, show node title\n * var tip = dc_graph.tip().content(function(n, k) {\n * k(_behavior.parent() ? _behavior.parent().nodeTitle.eval(n) : '');\n * });\n **/\n _behavior.content = property(function(n, k) {\n k(_behavior.parent() ? _behavior.parent().nodeTitle.eval(n) : '');\n });\n\n _behavior.on = function(event, f) {\n return _dispatch.on(event, f);\n };\n\n _behavior.disabled = property(false);\n _behavior.programmatic = property(false);\n\n _behavior.displayTip = function(filter, n, cb) {\n if(typeof filter !== 'function') {\n var d = filter;\n filter = function(d2) { return d2 === d; };\n }\n var found = _behavior.selection().select(_behavior.parent(), _behavior.parent().selectAllNodes(), _behavior.parent().selectAllEdges(), null)\n .filter(filter);\n if(found.size() > 0) {\n var action = fetch_and_show_content;\n // we need to flatten e.g. for ports, which will have nested selections\n // .nodes() does this better in D3v4\n var flattened = found.reduce(function(p, v) {\n return p.concat(v);\n }, []);\n var which = (n || 0) % flattened.length;\n action.call(flattened[which], d3.select(flattened[which]).datum());\n d = d3.select(flattened[which]).datum();\n if(cb)\n cb(d);\n if(_behavior.programmatic())\n found.on('mouseout', hide_tip_delay);\n }\n return _behavior;\n };\n\n _behavior.hideTip = function(delay) {\n if(_d3tip) {\n if(delay)\n hide_tip_delay();\n else\n hide_tip();\n }\n return _behavior;\n };\n _behavior.selection = property(dc_graph.tip.select_node_and_edge());\n _behavior.showDelay = _behavior.delay = property(0);\n _behavior.hideDelay = property(200);\n _behavior.offset = property(null);\n _behavior.clickable = property(false);\n _behavior.linkCallback = property(null);\n\n return _behavior;\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(dc_graph.tip.table());\n **/\ndc_graph.tip.table = function() {\n var gen = function(d, k) {\n d = gen.fetch()(d);\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 gen.fetch = property(function(d) {\n return d.orig.value;\n });\n return gen;\n};\n\ndc_graph.tip.select_node_and_edge = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n // hack to merge selections, not supported d3v3\n var selection = diagram.selectAll('.foo-this-does-not-exist');\n selection[0] = node[0].concat(ehover ? ehover[0] : []);\n return selection;\n },\n exclude: function(element) {\n return ancestor_has_class(element, 'port');\n }\n };\n};\n\ndc_graph.tip.select_node = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return node;\n },\n exclude: function(element) {\n return ancestor_has_class(element, 'port');\n }\n };\n};\n\ndc_graph.tip.select_edge = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return edge;\n }\n };\n};\n\ndc_graph.tip.select_port = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return node.selectAll('g.port');\n }\n };\n};\n","dc_graph.dropdown = function() {\n dc_graph.dropdown.unique_id = (dc_graph.dropdown.unique_id || 16) + 1;\n var _dropdown = {\n id: 'id' + dc_graph.dropdown.unique_id,\n parent: property(null),\n show: function(key, x, y) {\n var dropdown = _dropdown.parent().root()\n .selectAll('div.dropdown.' + _dropdown.id).data([0]);\n var dropdownEnter = dropdown\n .enter().append('div')\n .attr('class', 'dropdown ' + _dropdown.id);\n dropdown\n .style('visibility', 'visible')\n .style('left', x + 'px')\n .style('top', y + 'px');\n var capture;\n var hides = _dropdown.hideOn().split('|');\n var selects = _dropdown.selectOn().split('|');\n if(hides.includes('leave'))\n dropdown.on('mouseleave', function() {\n dropdown.style('visibility', 'hidden');\n });\n else if(hides.includes('clickout')) {\n var diagram = _dropdown.parent();\n capture = diagram.svg().append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', diagram.width())\n .attr('height', diagram.height())\n .attr('opacity', 0)\n .on('click', function() {\n capture.remove();\n dropdown.style('visibility', 'hidden');\n });\n }\n var container = dropdown;\n if(_dropdown.scrollHeight()) {\n var height = _dropdown.scrollHeight();\n if(typeof height === 'number')\n height = height + 'px';\n dropdown\n .style('max-height', height)\n .property('scrollTop', 0);\n dropdownEnter\n .style('overflow-y', 'auto')\n .append('div')\n .attr('class', 'scroller');\n container = dropdown.selectAll('div.scroller');\n }\n var values = _dropdown.fetchValues()(key, function(values) {\n var items = container\n .selectAll('div.dropdown-item').data(values);\n items\n .enter().append('div')\n .attr('class', 'dropdown-item');\n items.exit().remove();\n var select_event = null;\n if(selects.includes('click'))\n select_event = 'click';\n else if(selects.includes('hover'))\n select_event = 'mouseenter';\n items\n .text(function(item) { return _dropdown.itemText()(item); });\n if(select_event) {\n items\n .on(select_event + '.select', function(d) {\n _dropdown.itemSelected()(d);\n });\n }\n if(hides.includes('clickitem')) {\n items\n .on('click.hide', function(d) {\n capture.remove();\n dropdown.style('visibility', 'hidden');\n });\n }\n });\n },\n hideOn: property('clickout|clickitem'),\n selectOn: property('click'),\n height: property(10),\n itemText: property(function(x) { return x; }),\n itemSelected: property(function() {}),\n fetchValues: property(function(key, k) { k([]); }),\n scrollHeight: property('12em')\n };\n return _dropdown;\n};\n","dc_graph.keyboard = function() {\n var _input_anchor, _dispatch = d3.dispatch('keydown', 'keyup');\n\n function keydown() {\n _dispatch.keydown();\n }\n function keyup() {\n _dispatch.keyup();\n }\n function add_behavior(diagram) {\n _input_anchor = diagram.svg().selectAll('a#dcgraph-keyboard').data([1]);\n _input_anchor.enter()\n .insert('a', ':first-child').attr({\n id: 'dcgraph-keyboard',\n href: '#'\n });\n _input_anchor.on('keydown.keyboard', keydown);\n _input_anchor.on('keyup.keyboard', keyup);\n\n // grab focus whenever svg is interacted with (?)\n diagram.svg().on('mouseup.keyboard', function() {\n _behavior.focus();\n });\n }\n function remove_behavior(diagram) {\n _input_anchor.remove();\n }\n var _behavior = dc_graph.behavior('brush', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n\n _behavior.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\n _dispatch.on(event, f);\n return this;\n };\n\n _behavior.focus = function() {\n if(!_behavior.disableFocus())\n _input_anchor.node().focus();\n };\n\n _behavior.disableFocus = property(false);\n\n return _behavior;\n};\n","// adapted from\n// http://stackoverflow.com/questions/9308938/inline-text-editing-in-svg/#26644652\n\ndc_graph.edit_text = function(parent, options) {\n var foreign = parent.append('foreignObject').attr({\n height: '100%',\n width: '100%' // don't wrap\n });\n function reposition() {\n var pos;\n switch(options.align) {\n case 'left':\n pos = [options.box.x, options.box.y];\n break;\n default:\n case 'center':\n pos = [\n options.box.x + (options.box.width - textdiv.node().offsetWidth)/2,\n options.box.y + (options.box.height - textdiv.node().offsetHeight)/2\n ];\n break;\n }\n foreign.attr('transform', 'translate(' + pos.join(' ') + ')');\n }\n var textdiv = foreign.append('xhtml:div');\n var text = options.text || \"type on me\";\n textdiv.text(text).attr({\n contenteditable: true,\n width: 'auto'\n }).style({\n display: 'inline-block',\n 'background-color': 'white',\n padding: '2px'\n });\n\n function stopProp() {\n d3.event.stopPropagation();\n }\n foreign\n .on('mousedown', stopProp)\n .on('mousemove', stopProp)\n .on('mouseup', stopProp)\n .on('dblclick', stopProp);\n\n function accept() {\n options.accept && options.accept(textdiv.text());\n textdiv.on('blur.edittext', null);\n foreign.remove();\n options.finally && options.finally();\n }\n function cancel() {\n options.cancel && options.cancel();\n textdiv.on('blur.edittext', null);\n foreign.remove();\n options.finally && options.finally();\n }\n\n textdiv.on('keydown.edittext', function() {\n if(d3.event.keyCode===13) {\n d3.event.preventDefault();\n }\n }).on('keyup.edittext', function() {\n if(d3.event.keyCode===13) {\n accept();\n } else if(d3.event.keyCode===27) {\n cancel();\n }\n reposition();\n }).on('blur.edittext', cancel);\n reposition();\n textdiv.node().focus();\n\n var range = document.createRange();\n if(options.selectText) {\n range.selectNodeContents(textdiv.node());\n } else {\n range.setStart(textdiv.node(), 1);\n range.setEnd(textdiv.node(), 1);\n }\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n};\n","dc_graph.brush = function() {\n var _brush = null, _gBrush, _dispatch = d3.dispatch('brushstart', 'brushmove', 'brushend');\n\n function brushstart() {\n _dispatch.brushstart();\n }\n function brushmove() {\n var ext = _brush.extent();\n _dispatch.brushmove(ext);\n }\n function brushend() {\n _dispatch.brushend();\n _gBrush.call(_brush.clear());\n }\n function install_brush(diagram) {\n if(!_brush) {\n _brush = d3.svg.brush()\n .x(diagram.x()).y(diagram.y())\n .on('brushstart', brushstart)\n .on('brush', brushmove)\n .on('brushend', brushend);\n }\n if(!_gBrush) {\n _gBrush = diagram.svg().insert('g', ':first-child')\n .attr('class', 'brush')\n .call(_brush);\n }\n }\n function remove_brush() {\n if(_gBrush) {\n _gBrush.remove();\n _gBrush = null;\n }\n }\n var _behavior = dc_graph.behavior('brush', {\n add_behavior: function() {},\n remove_behavior: remove_brush\n });\n\n _behavior.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\n _dispatch.on(event, f);\n return this;\n };\n _behavior.activate = function() {\n install_brush(_behavior.parent());\n return this;\n };\n _behavior.deactivate = function() {\n remove_brush();\n return this;\n };\n _behavior.isActive = function () {\n return !!_gBrush;\n };\n\n return _behavior;\n};\n","dc_graph.select_things = function(things_group, things_name, thinginess) {\n var _selected = [], _oldSelected;\n var _mousedownThing = null;\n\n var contains_predicate = thinginess.keysEqual ?\n function(k1) {\n return function(k2) {\n return thinginess.keysEqual(k1, k2);\n };\n } :\n function(k1) {\n return function(k2) {\n return k1 === k2;\n };\n };\n function contains(array, key) {\n return !!_selected.find(contains_predicate(key));\n }\n function isUnion(event) {\n return event.shiftKey;\n }\n function isToggle(event) {\n return is_a_mac ? event.metaKey : event.ctrlKey;\n }\n function add_array(array, key) {\n return contains(array, key) ? array : array.concat([key]);\n }\n function toggle_array(array, key) {\n return contains(array, key) ? array.filter(function(x) { return x != key; }) : array.concat([key]);\n }\n\n function selection_changed(diagram) {\n return function(selection, refresh) {\n if(refresh === undefined)\n refresh = true;\n _selected = selection;\n if(refresh)\n diagram.refresh();\n };\n }\n var _have_bce = false;\n function background_click_event(diagram, v) {\n // we seem to have nodes-background interrupting edges-background by reinstalling uselessly\n if(_have_bce === v)\n return;\n diagram.svg().on('click.' + things_name, v ? function(t) {\n if(d3.event.target === this)\n things_group.set_changed([]);\n } : null);\n _have_bce = v;\n }\n function brushstart() {\n if(isUnion(d3.event.sourceEvent) || isToggle(d3.event.sourceEvent))\n _oldSelected = _selected.slice();\n else {\n _oldSelected = [];\n things_group.set_changed([]);\n }\n }\n function brushmove(ext) {\n if(!thinginess.intersectRect)\n return;\n var rectSelect = thinginess.intersectRect(ext);\n var newSelected;\n if(isUnion(d3.event.sourceEvent))\n newSelected = rectSelect.reduce(add_array, _oldSelected);\n else if(isToggle(d3.event.sourceEvent))\n newSelected = rectSelect.reduce(toggle_array, _oldSelected);\n else\n newSelected = rectSelect;\n things_group.set_changed(newSelected);\n }\n\n function add_behavior(diagram, node, edge) {\n var condition = _behavior.noneIsAll() ? function(t) {\n return !_selected.length || contains(_selected, thinginess.key(t));\n } : function(t) {\n return contains(_selected, thinginess.key(t));\n };\n thinginess.applyStyles(condition);\n\n thinginess.clickables(diagram, node, edge).on('mousedown.' + things_name, function(t) {\n _mousedownThing = t;\n });\n\n thinginess.clickables(diagram, node, edge).on('mouseup.' + things_name, function(t) {\n if(thinginess.excludeClick && thinginess.excludeClick(d3.event.target))\n return;\n // it's only a click if the same target was mousedown & mouseup\n // but we can't use click event because things may have been reordered\n if(_mousedownThing !== t)\n return;\n var key = thinginess.key(t), newSelected;\n if(_behavior.multipleSelect()) {\n if(isUnion(d3.event))\n newSelected = add_array(_selected, key);\n else if(isToggle(d3.event))\n newSelected = toggle_array(_selected, key);\n }\n if(!newSelected)\n newSelected = [key];\n things_group.set_changed(newSelected);\n });\n\n if(_behavior.multipleSelect()) {\n var brush_mode = diagram.child('brush');\n brush_mode.activate();\n }\n else\n background_click_event(diagram, _behavior.clickBackgroundClears());\n\n if(_behavior.autoCropSelection()) {\n // drop any selected which no longer exist in the diagram\n var present = thinginess.clickables(diagram, node, edge).data().map(thinginess.key);\n var now_selected = _selected.filter(function(k) { return contains(present, k); });\n if(_selected.length !== now_selected.length)\n things_group.set_changed(now_selected, false);\n }\n }\n\n function remove_behavior(diagram, node, edge) {\n thinginess.clickables(diagram, node, edge).on('click.' + things_name, null);\n diagram.svg().on('click.' + things_name, null);\n thinginess.removeStyles();\n }\n\n var _behavior = dc_graph.behavior(things_name, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n things_group.on('set_changed.' + things_name, p ? selection_changed(p) : null);\n if(p && _behavior.multipleSelect()) {\n var brush_mode = p.child('brush');\n if(!brush_mode) {\n brush_mode = dc_graph.brush();\n p.child('brush', brush_mode);\n }\n brush_mode\n .on('brushstart.' + things_name, brushstart)\n .on('brushmove.' + things_name, brushmove);\n }\n },\n laterDraw: thinginess.laterDraw || false\n });\n\n _behavior.multipleSelect = property(true);\n _behavior.clickBackgroundClears = property(true, false).react(function(v) {\n if(!_behavior.multipleSelect() && _behavior.parent())\n background_click_event(_behavior.parent(), v);\n });\n _behavior.noneIsAll = property(false);\n // if you're replacing the data, you probably want the selection not to be preserved when a thing\n // with the same key re-appears later (true). however, if you're filtering dc.js-style, you\n // probably want filters to be independent between diagrams (false)\n _behavior.autoCropSelection = property(true);\n // if you want to do the cool things select_things can do\n _behavior.thinginess = function() {\n return thinginess;\n };\n return _behavior;\n};\n\ndc_graph.select_things_group = function(brushgroup, type) {\n window.chart_registry.create_type(type, function() {\n return d3.dispatch('set_changed');\n });\n\n return window.chart_registry.create_group(type, brushgroup);\n};\n","dc_graph.select_nodes = function(props, options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n\n var thinginess = {\n intersectRect: function(ext) {\n return _behavior.parent().selectAllNodes().data().filter(function(n) {\n return n && ext[0][0] < n.cola.x && n.cola.x < ext[1][0] &&\n ext[0][1] < n.cola.y && n.cola.y < ext[1][1];\n }).map(this.key);\n },\n clickables: function(diagram, node, edge) {\n return node;\n },\n excludeClick: function(element) {\n return ancestor_has_class(element, 'port');\n },\n key: function(n) {\n return _behavior.parent().nodeKey.eval(n);\n },\n applyStyles: function(pred) {\n _behavior.parent().cascade(50, true, node_edge_conditions(pred, null, props));\n },\n removeStyles: function() {\n _behavior.parent().cascade(50, false, props);\n }\n };\n var _behavior = dc_graph.select_things(select_nodes_group, 'select-nodes', thinginess);\n return _behavior;\n};\n","dc_graph.select_edges = function(props, options) {\n options = options || {};\n var select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges');\n var thinginess = {\n intersectRect: function(ext) {\n return this.clickables().data().filter(function(e) {\n // this nonsense because another select_things may have invalidated the edge positions (!!)\n var sp = {\n x: e.source.cola.x + e.sourcePort.pos.x,\n y: e.source.cola.y + e.sourcePort.pos.y\n },\n tp = {\n x: e.target.cola.x + e.targetPort.pos.x,\n y: e.target.cola.y + e.targetPort.pos.y\n };\n return [sp, tp].some(function(p) {\n return ext[0][0] < p.x && p.x < ext[1][0] &&\n ext[0][1] < p.y && p.y < ext[1][1];\n });\n }).map(this.key);\n },\n clickables: function() {\n return _behavior.parent().selectAllEdges('.edge-hover');\n },\n key: function(e) {\n return _behavior.parent().edgeKey.eval(e);\n },\n applyStyles: function(pred) {\n _behavior.parent().cascade(50, true, node_edge_conditions(null, pred, props));\n },\n removeStyles: function() {\n _behavior.parent().cascade(50, false, props);\n }\n };\n var _behavior = dc_graph.select_things(select_edges_group, 'select-edges', thinginess);\n return _behavior;\n};\n","dc_graph.select_ports = function(props, options) {\n options = options || {};\n var port_style = options.portStyle || 'symbols';\n var select_ports_group = dc_graph.select_things_group(options.select_ports_group || 'select-ports-group', 'select-ports');\n var thinginess = {\n laterDraw: true,\n intersectRect: null, // multiple selection not supported for now\n clickables: function() {\n return _behavior.parent().selectAllNodes('g.port');\n },\n key: function(p) {\n // this scheme also won't work with multiselect\n return p.named ?\n {node: _behavior.parent().nodeKey.eval(p.node), name: p.name} :\n {edge: _behavior.parent().edgeKey.eval(p.edges[0]), name: p.name};\n },\n applyStyles: function(pred) {\n _behavior.parent().portStyle(port_style).cascade(50, true, conditional_properties(pred, props));\n },\n removeStyles: function() {\n _behavior.parent().portStyle(port_style).cascade(50, false, props);\n },\n keysEqual: function(k1, k2) {\n return k1.name === k2.name && (k1.node ? k1.node === k2.node : k1.edge === k2.edge);\n }\n };\n var _behavior = dc_graph.select_things(select_ports_group, 'select-ports', thinginess);\n return _behavior;\n};\n","dc_graph.move_nodes = function(options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _selected = [], _startPos = null, _downNode, _moveStarted;\n var _brush, _drawGraphs, _selectNodes, _restoreBackgroundClick;\n var _maybeSelect = null;\n\n function isUnion(event) {\n return event.shiftKey;\n }\n function isToggle(event) {\n return is_a_mac ? event.metaKey : event.ctrlKey;\n }\n\n function selection_changed(diagram) {\n return function(selection, refresh) {\n if(refresh === undefined)\n refresh = true;\n _selected = selection;\n };\n }\n function for_each_selected(f, selected) {\n selected = selected || _selected;\n selected.forEach(function(key) {\n var n = _behavior.parent().getWholeNode(key);\n f(n, key);\n });\n }\n function add_behavior(diagram, node, edge) {\n node.on('mousedown.move-nodes', function(n) {\n // Need a more general way for modes to say \"I got this\"\n if(_drawGraphs && _drawGraphs.usePorts() && _drawGraphs.usePorts().eventPort())\n return;\n _startPos = dc_graph.event_coords(diagram);\n _downNode = d3.select(this);\n // if the node under the mouse is not in the selection, need to\n // make that node selected\n var key = diagram.nodeKey.eval(n);\n var selected = _selected;\n if(_selected.indexOf(key)<0) {\n selected = [key];\n _maybeSelect = key;\n }\n else _maybeSelect = null;\n for_each_selected(function(n) {\n n.original_position = [n.cola.x, n.cola.y];\n }, selected);\n if(_brush)\n _brush.deactivate();\n });\n function mouse_move() {\n if(_startPos) {\n if(!(d3.event.buttons & 1)) {\n mouse_up();\n return;\n }\n if(_maybeSelect)\n select_nodes_group.set_changed([_maybeSelect]);\n var pos = dc_graph.event_coords(diagram);\n var dx = pos[0] - _startPos[0],\n dy = pos[1] - _startPos[1];\n if(!_moveStarted && Math.hypot(dx, dy) > _behavior.dragSize()) {\n _moveStarted = true;\n // prevent click event for this node setting selection just to this\n if(_downNode)\n _downNode.style('pointer-events', 'none');\n }\n if(_moveStarted) {\n for_each_selected(function(n) {\n n.cola.x = n.original_position[0] + dx;\n n.cola.y = n.original_position[1] + dy;\n });\n diagram.reposition(node, edge);\n }\n }\n }\n function mouse_up() {\n if(_startPos) {\n if(_moveStarted) {\n _moveStarted = false;\n if(_downNode) {\n _downNode.style('pointer-events', null);\n _downNode = null;\n }\n var fixes = [];\n for_each_selected(function(n, id) {\n fixes.push({\n id: id,\n pos: {x: n.cola.x, y: n.cola.y}\n });\n });\n fix_nodes_group.request_fixes(fixes);\n }\n if(_brush)\n _brush.activate();\n _startPos = null;\n }\n }\n node\n .on('mousemove.move-nodes', mouse_move)\n .on('mouseup.move-nodes', mouse_up);\n diagram.svg()\n .on('mousemove.move-nodes', mouse_move)\n .on('mouseup.move-nodes', mouse_up);\n }\n\n function remove_behavior(diagram, node, edge) {\n node.on('mousedown.move-nodes', null);\n node.on('mousemove.move-nodes', null);\n node.on('mouseup.move-nodes', null);\n }\n\n var _behavior = dc_graph.behavior('move-nodes', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n select_nodes_group.on('set_changed.move-nodes', p ? selection_changed(p) : null);\n _brush = p.child('brush');\n _drawGraphs = p.child('draw-graphs');\n _selectNodes = p.child('select-nodes');\n }\n });\n\n // minimum distance that is considered a drag, not a click\n _behavior.dragSize = property(5);\n\n return _behavior;\n};\n","dc_graph.fix_nodes = function(options) {\n options = options || {};\n var fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _fixedPosTag = options.fixedPosTag || 'fixedPos';\n var _fixes = [], _nodes, _wnodes, _edges, _wedges;\n\n var _execute = {\n nodeid: function(n) {\n return _behavior.parent().nodeKey.eval(n);\n },\n sourceid: function(e) {\n return _behavior.parent().edgeSource.eval(e);\n },\n targetid: function(e) {\n return _behavior.parent().edgeTarget.eval(e);\n },\n get_fix: function(n) {\n return _behavior.parent().nodeFixed.eval(n);\n },\n fix_node: function(n, pos) {\n n[_fixedPosTag] = pos;\n },\n unfix_node: function(n) {\n n[_fixedPosTag] = null;\n },\n clear_fixes: function() {\n _fixes = {};\n },\n register_fix: function(id, pos) {\n _fixes[id] = pos;\n }\n };\n\n function request_fixes(fixes) {\n _behavior.strategy().request_fixes(_execute, fixes);\n tell_then_set(find_changes()).then(function() {\n _behavior.parent().redraw();\n });\n }\n function new_node(nid, n, pos) {\n _behavior.strategy().new_node(_execute, nid, n, pos);\n }\n function new_edge(eid, sourceid, targetid) {\n var source = _nodes[sourceid], target = _nodes[targetid];\n _behavior.strategy().new_edge(_execute, eid, source, target);\n }\n function find_changes() {\n var changes = [];\n _wnodes.forEach(function(n) {\n var key = _behavior.parent().nodeKey.eval(n),\n fixPos = _fixes[key],\n oldFixed = n.orig.value[_fixedPosTag],\n changed = false;\n if(oldFixed) {\n if(!fixPos || fixPos.x !== oldFixed.x || fixPos.y !== oldFixed.y)\n changed = true;\n }\n else changed = fixPos;\n if(changed)\n changes.push({n: n, fixed: fixPos ? {x: fixPos.x, y: fixPos.y} : null});\n });\n return changes;\n }\n function execute_change(n, fixed) {\n if(fixed)\n _execute.fix_node(n.orig.value, fixed);\n else\n _execute.unfix_node(n.orig.value);\n }\n function tell_then_set(changes) {\n var callback = _behavior.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n var promises = changes.map(function(change) {\n var key = _behavior.parent().nodeKey.eval(change.n);\n return callback(key, change.fixed)\n .then(function(fixed) {\n execute_change(change.n, fixed);\n });\n });\n return Promise.all(promises);\n }\n function set_changes(changes) {\n changes.forEach(function(change) {\n execute_change(change.n, change.fixed);\n });\n }\n function tell_changes(changes) {\n var callback = _behavior.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n var promises = changes.map(function(change) {\n var key = _behavior.parent().nodeKey.eval(change.n);\n return callback(key, change.fixed);\n });\n return Promise.all(promises);\n }\n function fix_all_nodes(tell) {\n if(tell === undefined)\n tell = true;\n var changes = _wnodes.map(function(n) {\n return {n: n, fixed: {x: n.cola.x, y: n.cola.y}};\n });\n if(tell)\n return tell_then_set(changes);\n else {\n set_changes(changes);\n return Promise.resolve(undefined);\n }\n }\n function clear_fixes() {\n _behavior.strategy().clear_all_fixes && _behavior.strategy().clear_all_fixes();\n _execute.clear_fixes();\n }\n function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _nodes = nodes;\n _wnodes = wnodes;\n _edges = edges;\n _wedges = wedges;\n if(_behavior.strategy().on_data) {\n _behavior.strategy().on_data(_execute, nodes, wnodes, edges, wedges, ports, wports); // ghastly\n var changes = find_changes();\n set_changes(changes);\n // can't wait for backend to acknowledge/approve so just set then blast\n if(_behavior.reportOverridesAsynchronously())\n tell_changes(changes); // dangling promise\n }\n }\n\n var _behavior = {\n parent: property(null).react(function(p) {\n fix_nodes_group\n .on('request_fixes.fix-nodes', p ? request_fixes : null)\n .on('new_node.fix_nodes', p ? new_node : null)\n .on('new_edge.fix_nodes', p ? new_edge : null);\n if(p) {\n p.on('data.fix-nodes', on_data);\n } else if(_behavior.parent())\n _behavior.parent().on('data.fix-nodes', null);\n }),\n // callback for setting & fixing node position\n fixNode: property(null),\n // save/load may want to nail everything / start from scratch\n // (should probably be automatic though)\n fixAllNodes: fix_all_nodes,\n clearFixes: clear_fixes,\n strategy: property(dc_graph.fix_nodes.strategy.fix_last()),\n reportOverridesAsynchronously: property(true)\n };\n\n return _behavior;\n};\n\ndc_graph.fix_nodes.strategy = {};\ndc_graph.fix_nodes.strategy.fix_last = function() {\n return {\n request_fixes: function(exec, fixes) {\n exec.clear_fixes();\n fixes.forEach(function(fix) {\n exec.register_fix(fix.id, fix.pos);\n });\n },\n new_node: function(exec, nid, n, pos) {\n exec.fix_node(n, pos);\n },\n new_edge: function(exec, eid, source, target) {\n exec.unfix_node(source.orig.value);\n exec.unfix_node(target.orig.value);\n }\n };\n};\ndc_graph.fix_nodes.strategy.last_N_per_component = function(maxf) {\n maxf = maxf || 1;\n var _age = 0;\n var _allFixes = {};\n return {\n clear_all_fixes: function() {\n _allFixes = {};\n },\n request_fixes: function(exec, fixes) {\n ++_age;\n fixes.forEach(function(fix) {\n _allFixes[fix.id] = {id: fix.id, age: _age, pos: fix.pos};\n });\n },\n new_node: function(exec, nid, n, pos) {\n ++_age;\n _allFixes[nid] = {id: nid, age: _age, pos: pos};\n exec.fix_node(n, pos);\n },\n new_edge: function() {},\n on_data: function(exec, nodes, wnodes, edges, wedges, ports, wports) {\n ++_age;\n // add any existing fixes as requests\n wnodes.forEach(function(n) {\n var nid = exec.nodeid(n), pos = exec.get_fix(n);\n if(pos && !_allFixes[nid])\n _allFixes[nid] = {id: nid, age: _age, pos: pos};\n });\n // determine components\n var components = [];\n var dfs = dc_graph.undirected_dfs({\n nodeid: exec.nodeid,\n sourceid: exec.sourceid,\n targetid: exec.targetid,\n comp: function() {\n components.push([]);\n },\n node: function(compid, n) {\n components[compid].push(n);\n }\n });\n dfs(wnodes, wedges);\n // start from scratch\n exec.clear_fixes();\n // keep or produce enough fixed nodes per component\n components.forEach(function(comp, i) {\n var oldcomps = comp.reduce(function(cc, n) {\n if(n.last_component) {\n var counts = cc[n.last_component] = cc[n.last_component] || {\n total: 0,\n fixed: 0\n };\n counts.total++;\n if(_allFixes[exec.nodeid(n)])\n counts.fixed++;\n }\n return cc;\n }, {});\n var fixed_by_size = Object.keys(oldcomps).reduce(function(ff, compid) {\n if(oldcomps[compid].fixed)\n ff.push({compid: +compid, total: oldcomps[compid].total, fixed: oldcomps[compid].fixed});\n return ff;\n }, []).sort(function(coa, cob) {\n return cob.total - coa.total;\n });\n var largest_fixed = fixed_by_size.length && fixed_by_size[0].compid;\n var fixes = comp.filter(function(n) {\n return !n.last_component || n.last_component === largest_fixed;\n }).map(function(n) {\n return _allFixes[exec.nodeid(n)];\n }).filter(function(fix) {\n return fix;\n });\n if(fixes.length > maxf) {\n fixes.sort(function(f1, f2) {\n return f2.age - f1.age;\n });\n fixes = fixes.slice(0, maxf);\n }\n fixes.forEach(function(fix) {\n exec.register_fix(fix.id, fix.pos);\n });\n var kept = fixes.reduce(function(m, fix) {\n m[fix.id] = true;\n return m;\n }, {});\n comp.forEach(function(n) {\n var nid = exec.nodeid(n);\n if(!kept[nid])\n _allFixes[nid] = null;\n n.last_component = i+1;\n });\n });\n }\n };\n};\n\ndc_graph.fix_nodes_group = function(brushgroup) {\n window.chart_registry.create_type('fix-nodes', function() {\n return d3.dispatch('request_fixes', 'new_node', 'new_edge');\n });\n\n return window.chart_registry.create_group('fix-nodes', brushgroup);\n};\n","dc_graph.filter_selection = function(things_group, things_name) {\n things_name = things_name || 'select-nodes';\n var select_nodes_group = dc_graph.select_things_group(things_group || 'select-nodes-group', things_name);\n\n function selection_changed(diagram) {\n return function(selection) {\n if(selection.length) {\n var set = d3.set(selection);\n _behavior.dimensionAccessor()(diagram).filterFunction(function(k) {\n return set.has(k);\n });\n } else _behavior.dimensionAccessor()(diagram).filter(null);\n diagram.redrawGroup();\n };\n }\n\n var _behavior = {\n parent: property(null).react(function(p) {\n select_nodes_group.on('set_changed.filter-selection-' + things_name, p ? selection_changed(p) : null);\n })\n };\n _behavior.dimensionAccessor = property(function(diagram) {\n return diagram.nodeDimension();\n });\n return _behavior;\n};\n","dc_graph.delete_things = function(things_group, mode_name, id_tag) {\n id_tag = id_tag || 'id';\n var _deleteKey = is_a_mac ? 'Backspace' : 'Delete';\n var _keyboard, _selected = [];\n function selection_changed(selection) {\n _selected = selection;\n }\n function row_id(r) {\n return r[id_tag];\n }\n function delete_selection(selection) {\n if(!_behavior.crossfilterAccessor())\n throw new Error('need crossfilterAccessor');\n if(!_behavior.dimensionAccessor())\n throw new Error('need dimensionAccessor');\n selection = selection || _selected;\n if(selection.length === 0)\n return Promise.resolve([]);\n var promise = _behavior.preDelete() ? _behavior.preDelete()(selection) : Promise.resolve(selection);\n if(_behavior.onDelete())\n promise = promise.then(_behavior.onDelete());\n return promise.then(function(selection) {\n if(selection && selection.length) {\n var crossfilter = _behavior.crossfilterAccessor()(_behavior.parent()),\n dimension = _behavior.dimensionAccessor()(_behavior.parent());\n var all = crossfilter.all().slice(), n = all.length;\n dimension.filter(null);\n crossfilter.remove();\n var filtered = all.filter(function(r) {\n return selection.indexOf(row_id(r)) === -1;\n });\n if(all.length !== filtered.length + selection.length)\n console.warn('size after deletion is not previous size minus selection size',\n filtered.map(row_id), all.map(row_id), selection);\n crossfilter.add(filtered);\n\n _behavior.parent().redrawGroup();\n }\n return true;\n });\n }\n function add_behavior(diagram) {\n _keyboard.on('keyup.' + mode_name, function() {\n if(d3.event.code === _deleteKey)\n delete_selection();\n });\n }\n function remove_behavior(diagram) {\n }\n var _behavior = dc_graph.behavior(mode_name, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n things_group.on('set_changed.' + mode_name, selection_changed);\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n }\n }\n });\n _behavior.preDelete = property(null);\n _behavior.onDelete = property(null);\n _behavior.crossfilterAccessor = property(null);\n _behavior.dimensionAccessor = property(null);\n _behavior.deleteSelection = delete_selection;\n return _behavior;\n};\n","dc_graph.delete_nodes = function(id_tag, options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges');\n var _behavior = dc_graph.delete_things(select_nodes_group, 'delete-nodes', id_tag);\n\n _behavior.preDelete(function(nodes) {\n // request a delete of all attached edges, using the delete edges mode\n // kind of horrible\n var diagram = _behavior.parent();\n var deleteEdgesMode = diagram.child('delete-edges');\n if(!deleteEdgesMode)\n return null; // reject if we can't delete the edges\n // it is likely that the delete_edges mode is listening to the same keyup event we\n // are. introduce a pause to let it process the delete key now, deleting any selected edges.\n // then select any remaining edges connected to the selected nodes and delete those.\n //\n // more evidence that modes need to be able to say \"i got this\", or that we should have\n // batch deletion. otoh, given the current behavior, delete_nodes deferring to delete_edges\n // makes about as much sense as anything\n return Promise.resolve(undefined).then(function() {\n var deleteEdges = diagram.edgeGroup().all().filter(function(e) {\n return nodes.indexOf(diagram.edgeSource()(e)) !== -1 ||\n nodes.indexOf(diagram.edgeTarget()(e)) !== -1;\n }).map(diagram.edgeKey());\n select_edges_group.set_changed(deleteEdges);\n return deleteEdgesMode.deleteSelection().then(function() {\n return nodes;\n });\n });\n });\n return _behavior;\n};\n","dc_graph.label_things = function(options) {\n options = options || {};\n var select_things_group = dc_graph.select_things_group(options.select_group, options.select_type),\n label_things_group = dc_graph.label_things_group(options.label_group, options.label_type);\n var _selected = [];\n var _keyboard, _selectThings;\n\n function selection_changed_listener(diagram) {\n return function(selection) {\n _selected = selection;\n };\n }\n\n function grab_focus() {\n _keyboard.focus();\n }\n\n function edit_label_listener(diagram) {\n return function(thing, eventOptions) {\n var box = options.thing_box(thing);\n options.hide_thing_label(thing, true);\n dc_graph.edit_text(\n diagram.g(),\n {\n text: eventOptions.text || options.thing_label(thing) || options.default_label,\n align: options.align,\n box: box,\n selectText: eventOptions.selectText,\n accept: function(text) {\n return options.accept(thing, text);\n },\n finally: function() {\n options.hide_thing_label(thing, false);\n grab_focus();\n }\n });\n };\n }\n\n function edit_selection(node, edge, eventOptions) {\n // less than ideal interface.\n // what if there are other things? can i blame the missing metagraph?\n var thing = options.find_thing(_selected[0], node, edge);\n if(thing.empty()) {\n console.error(\"couldn't find thing '\" + _selected[0] + \"'!\");\n return;\n }\n if(thing.size()>1) {\n console.error(\"found too many things for '\" + _selected[0] + \"' (\" + thing.size() + \")!\");\n return;\n }\n label_things_group.edit_label(thing, eventOptions);\n }\n function add_behavior(diagram, node, edge) {\n _keyboard.on('keyup.' + options.label_type, function() {\n if(_selected.length) {\n // printable characters should start edit\n if(d3.event.key.length !== 1)\n return;\n edit_selection(node, edge, {text: d3.event.key, selectText: false});\n }\n });\n if(_selectThings)\n _selectThings.thinginess().clickables(diagram, node, edge).on('dblclick.' + options.label_type, function() {\n edit_selection(node, edge, {selectText: true});\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n }\n\n var _behavior = dc_graph.behavior(options.label_type, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n select_things_group.on('set_changed.' + options.label_type, p ? selection_changed_listener(p) : null);\n label_things_group.on('edit_label.' + options.label_type, p ? edit_label_listener(p) : null);\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n _selectThings = p.child(options.select_type);\n }\n }\n });\n _behavior.editSelection = function(eventOptions) {\n edit_selection(_behavior.parent().selectAllNodes(), _behavior.parent().selectAllEdges(), eventOptions);\n };\n return _behavior;\n};\n\ndc_graph.label_things_group = function(brushgroup, type) {\n window.chart_registry.create_type(type, function() {\n return d3.dispatch('edit_label');\n });\n\n return window.chart_registry.create_group(type, brushgroup);\n};\n","dc_graph.label_nodes = function(options) {\n options = options || {};\n var _labelTag = options.labelTag || 'label';\n options.select_group = options.select_group || 'select-nodes-group';\n options.select_type = options.select_type || 'select-nodes';\n options.label_group = options.label_group || 'label-nodes-group';\n options.label_type = options.label_type || 'label-nodes';\n options.default_label = \"node name\";\n\n options.find_thing = function(key, node, edge) {\n return node.filter(function(n) {\n return _behavior.parent().nodeKey.eval(n) === key;\n });\n };\n options.hide_thing_label = function(node, whether) {\n var contents = _behavior.parent().content(_behavior.parent().nodeContent.eval(node.datum()));\n contents.selectContent(node).attr('visibility', whether ? 'hidden' : 'visible');\n };\n options.thing_box = function(node, eventOptions) {\n var contents = _behavior.parent().content(_behavior.parent().nodeContent.eval(node.datum())),\n box = contents.textbox(node);\n box.x += node.datum().cola.x;\n box.y += node.datum().cola.y;\n return box;\n };\n options.thing_label = function(node) {\n return _behavior.parent().nodeLabel.eval(node.datum());\n };\n options.accept = function(node, text) {\n var callback = _behavior.changeNodeLabel() ?\n _behavior.changeNodeLabel()(_behavior.parent().nodeKey.eval(node.datum()), text) :\n Promise.resolve(text);\n return callback.then(function(text2) {\n var n = node.datum();\n n.orig.value[_labelTag] = text2;\n _behavior.parent().redrawGroup();\n });\n };\n\n var _behavior = dc_graph.label_things(options);\n _behavior.changeNodeLabel = property(null);\n return _behavior;\n};\n","dc_graph.label_edges = function(options) {\n options = options || {};\n var _labelTag = options.labelTag || 'label';\n options.select_group = options.select_group || 'select-edges-group';\n options.select_type = options.select_type || 'select-edges';\n options.label_group = options.label_group || 'label-edges-group';\n options.label_type = options.label_type || 'label-edges';\n options.default_label = \"edge name\";\n\n options.find_thing = function(key, node, edge) {\n return edge.filter(function(e) {\n return _behavior.parent().edgeKey.eval(e) === key;\n });\n };\n options.hide_thing_label = function(edge, whether) {\n var label = _behavior.parent().selectAll('#' + _behavior.parent().edgeId(edge.datum()) + '-label textPath');\n label.attr('visibility', whether ? 'hidden' : 'visible');\n };\n options.thing_box = function(edge, eventOptions) {\n var points = edge.datum().pos.new.path.points,\n x = (points[0].x + points[1].x)/2,\n y = (points[0].y + points[1].y)/2;\n return {x: x, y: y-10, width:0, height: 20};\n };\n options.thing_label = function(edge) {\n return _behavior.parent().edgeLabel.eval(edge.datum());\n };\n options.accept = function(edge, text) {\n var callback = _behavior.changeEdgeLabel() ?\n _behavior.changeEdgeLabel()(_behavior.parent().edgeKey.eval(edge.datum()), text) :\n Promise.resolve(text);\n return callback.then(function(text2) {\n var e = edge.datum();\n e.orig.value[_labelTag] = text2;\n _behavior.parent().redrawGroup();\n });\n };\n\n var _behavior = dc_graph.label_things(options);\n _behavior.changeEdgeLabel = property(null);\n return _behavior;\n};\n","dc_graph.register_highlight_things_group = function(thingsgroup) {\n window.chart_registry.create_type('highlight-things', function() {\n return d3.dispatch('highlight');\n });\n\n return window.chart_registry.create_group('highlight-things', thingsgroup);\n};\n","dc_graph.highlight_things = function(includeprops, excludeprops, modename, groupname, cascbase) {\n var highlight_things_group = dc_graph.register_highlight_things_group(groupname || 'highlight-things-group');\n var _active, _nodeset = {}, _edgeset = {};\n cascbase = cascbase || 150;\n\n function highlight(nodeset, edgeset) {\n _active = nodeset || edgeset;\n _nodeset = nodeset || {};\n _edgeset = edgeset || {};\n _behavior.parent().requestRefresh(_behavior.durationOverride());\n }\n function add_behavior(diagram) {\n diagram.cascade(cascbase, true, node_edge_conditions(\n function(n) {\n return _nodeset[_behavior.parent().nodeKey.eval(n)];\n }, function(e) {\n return _edgeset[_behavior.parent().edgeKey.eval(e)];\n }, includeprops));\n diagram.cascade(cascbase+10, true, node_edge_conditions(\n function(n) {\n return _active && !_nodeset[_behavior.parent().nodeKey.eval(n)];\n }, function(e) {\n return _active && !_edgeset[_behavior.parent().edgeKey.eval(e)];\n }, excludeprops));\n }\n function remove_behavior(diagram) {\n diagram.cascade(cascbase, false, includeprops);\n diagram.cascade(cascbase + 10, false, excludeprops);\n }\n var _behavior = dc_graph.behavior(modename, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n highlight_things_group.on('highlight.' + modename, p ? highlight : null);\n }\n });\n _behavior.durationOverride = property(undefined);\n return _behavior;\n};\n","dc_graph.register_highlight_neighbors_group = function(neighborsgroup) {\n window.chart_registry.create_type('highlight-neighbors', function() {\n return d3.dispatch('highlight_node');\n });\n\n return window.chart_registry.create_group('highlight-neighbors', neighborsgroup);\n};\n","dc_graph.highlight_neighbors = function(includeprops, excludeprops, neighborsgroup, thingsgroup) {\n var highlight_neighbors_group = dc_graph.register_highlight_neighbors_group(neighborsgroup || 'highlight-neighbors-group');\n var highlight_things_group = dc_graph.register_highlight_things_group(thingsgroup || 'highlight-things-group');\n\n function highlight_node(nodeid) {\n var diagram = _behavior.parent();\n var nodeset = {}, edgeset = {};\n if(nodeid) {\n nodeset[nodeid] = true;\n _behavior.parent().selectAllEdges().each(function(e) {\n if(diagram.nodeKey.eval(e.source) === nodeid) {\n edgeset[diagram.edgeKey.eval(e)] = true;\n nodeset[diagram.nodeKey.eval(e.target)] = true;\n }\n if(diagram.nodeKey.eval(e.target) === nodeid) {\n edgeset[diagram.edgeKey.eval(e)] = true;\n nodeset[diagram.nodeKey.eval(e.source)] = true;\n }\n });\n highlight_things_group.highlight(nodeset, edgeset);\n }\n else highlight_things_group.highlight(null, null);\n }\n function add_behavior(diagram, node, edge) {\n node\n .on('mouseover.highlight-neighbors', function(n) {\n highlight_neighbors_group.highlight_node(_behavior.parent().nodeKey.eval(n));\n })\n .on('mouseout.highlight-neighbors', function(n) {\n highlight_neighbors_group.highlight_node(null);\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n node\n .on('mouseover.highlight-neighbors', null)\n .on('mouseout.highlight-neighbors', null);\n highlight_neighbors_group.highlight_node(null);\n }\n\n var _behavior = dc_graph.behavior('highlight-neighbors', {\n add_behavior: add_behavior,\n remove_behavior: function(diagram, node, edge) {\n remove_behavior(diagram, node, edge);\n },\n parent: function(p) {\n highlight_neighbors_group.on('highlight_node.highlight', p ? highlight_node : null);\n if(!p.child('highlight-things'))\n p.child('highlight-things',\n dc_graph.highlight_things(includeprops, excludeprops)\n .durationOverride(_behavior.durationOverride()));\n }\n });\n _behavior.durationOverride = property(undefined);\n return _behavior;\n};\n\n","dc_graph.highlight_radius = function(options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var highlight_things_group = dc_graph.register_highlight_things_group(options.highlight_things_group || 'highlight-things-group');\n var _graph, _selection = [];\n\n function recurse(n, r, nodeset, edgeset) {\n nodeset[n.key()] = true;\n if(r) {\n n.outs().filter(function(e) {\n return !edgeset[e.key()];\n }).forEach(function(e) {\n edgeset[e.key()] = true;\n recurse(e.target(), r-1, nodeset, edgeset);\n });\n n.ins().filter(function(e) {\n return !edgeset[e.key()];\n }).forEach(function(e) {\n edgeset[e.key()] = true;\n recurse(e.source(), r-1, nodeset, edgeset);\n });\n }\n }\n function selection_changed(nodes) {\n _selection = nodes;\n console.assert(_graph);\n var nodeset = {}, edgeset = {};\n nodes.forEach(function(nkey) {\n recurse(_graph.node(nkey), _behavior.radius(), nodeset, edgeset);\n });\n if(!Object.keys(nodeset).length && !Object.keys(edgeset).length)\n nodeset = edgeset = null;\n highlight_things_group.highlight(nodeset, edgeset);\n }\n\n function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _graph = metagraph.graph(wnodes, wedges, {\n nodeKey: diagram.nodeKey.eval,\n edgeKey: diagram.edgeKey.eval,\n edgeSource: diagram.edgeSource.eval,\n edgeTarget: diagram.edgeTarget.eval\n });\n var sel2 = _selection.filter(function(nk) {\n return !!_graph.node(nk);\n });\n if(sel2.length < _selection.length)\n window.setTimeout(function() {\n select_nodes_group.set_changed(sel2);\n }, 0);\n }\n var _behavior = {\n parent: function(p) {\n if(p) {\n p.on('data.fix-nodes', on_data);\n } else if(_behavior.parent())\n _behavior.parent().on('data.fix-nodes', null);\n select_nodes_group.on('set_changed', selection_changed);\n }\n };\n _behavior.radius = property(1);\n return _behavior;\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 var _anchor;\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 selected = hoverpaths = null;\n // it would be difficult to check if no change, but at least check if changing from empty to empty\n if(Object.keys(node_on_paths).length === 0 && Object.keys(nop).length === 0 &&\n Object.keys(edge_on_paths).length === 0 && Object.keys(eop).length === 0)\n return;\n node_on_paths = nop;\n edge_on_paths = eop;\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(diagram, node, edge, ehover) {\n diagram\n .cascade(200, true, node_edge_conditions(function(n) {\n return !!node_on_paths[diagram.nodeKey.eval(n)];\n }, function(e) {\n return !!edge_on_paths[diagram.edgeKey.eval(e)];\n }, pathprops))\n .cascade(300, true, node_edge_conditions(function(n) {\n return intersect_paths(node_on_paths[diagram.nodeKey.eval(n)], selected);\n }, function(e) {\n return intersect_paths(edge_on_paths[diagram.edgeKey.eval(e)], selected);\n }, selectprops))\n .cascade(400, true, node_edge_conditions(function(n) {\n return intersect_paths(node_on_paths[diagram.nodeKey.eval(n)], hoverpaths);\n }, function(e) {\n return intersect_paths(edge_on_paths[diagram.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[diagram.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[diagram.nodeKey.eval(n)]));\n });\n\n\n ehover\n .on('mouseover.highlight-paths', function(e) {\n highlight_paths_group.hover_changed(edge_on_paths[diagram.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[diagram.nodeKey.eval(n)]));\n });\n }\n\n function remove_behavior(diagram, 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 diagram\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(diagram, node, edge, ehover) {\n remove_behavior(diagram, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n if(p)\n _anchor = p.anchorName();\n // else we should have received anchor earlier\n highlight_paths_group.on('paths_changed.highlight' + _anchor, p ? paths_changed : null);\n highlight_paths_group.on('hover_changed.highlight' + _anchor, p ? hover_changed : null);\n highlight_paths_group.on('select_changed.highlight' + _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.draw_spline_paths = function(pathreader, 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 var _paths = null, _hoverpaths = null, _selected = null;\n var _anchor;\n var _layer = null;\n var _savedPositions = null;\n\n function paths_changed(nop, eop, paths) {\n _paths = paths;\n\n var engine = _behavior.parent().layoutEngine(),\n localPaths = paths.filter(pathIsPresent);\n if(localPaths.length) {\n var nidpaths = localPaths.map(function(lpath) {\n var strength = pathreader.pathStrength.eval(lpath);\n if(typeof strength !== 'number')\n strength = 1;\n if(_selected && _selected.indexOf(lpath) !== -1)\n strength *= _behavior.selectedStrength();\n return {\n nodes: path_keys(lpath),\n strength: strength\n };\n });\n engine.paths(nidpaths);\n } else {\n engine.paths(null);\n if(_savedPositions)\n engine.restorePositions(_savedPositions);\n }\n if(_selected)\n _selected = _selected.filter(function(p) { return localPaths.indexOf(p) !== -1; });\n _behavior.parent().redraw();\n }\n\n function select_changed(sp) {\n if(sp !== _selected) {\n _selected = sp;\n paths_changed(null, null, _paths);\n }\n }\n\n function path_keys(path, unique) {\n unique = unique !== false;\n var keys = pathreader.elementList.eval(path).filter(function(elem) {\n return pathreader.elementType.eval(elem) === 'node';\n }).map(function(elem) {\n return pathreader.nodeKey.eval(elem);\n });\n return unique ? uniq(keys) : keys;\n }\n\n // check if entire path is present in this view\n function pathIsPresent(path) {\n return pathreader.elementList.eval(path).every(function(element) {\n return pathreader.elementType.eval(element) !== 'node' ||\n _behavior.parent().getWholeNode(pathreader.nodeKey.eval(element));\n });\n }\n\n // get the positions of nodes on path\n function getNodePositions(path, old) {\n return path_keys(path, false).map(function(key) {\n var node = _behavior.parent().getWholeNode(key);\n return {x: old && node.prevX !== undefined ? node.prevX : node.cola.x,\n y: old && node.prevY !== undefined ? node.prevY : node.cola.y};\n });\n };\n\n // insert fake nodes to avoid sharp turns\n function insertDummyNodes(path_coord) {\n function _distance(node1, node2) {\n return Math.sqrt(Math.pow((node1.x-node2.x),2) + Math.pow((node1.y-node2.y),2));\n }\n\n var new_path_coord = [];\n\n for(var i = 0; i < path_coord.length; i ++) {\n if (i-1 >= 0 && i+1 < path_coord.length) {\n if (path_coord[i-1].x === path_coord[i+1].x &&\n path_coord[i-1].y === path_coord[i+1].y ) {\n // insert node when the previous and next nodes are the same\n var x1 = path_coord[i-1].x, y1 = path_coord[i-1].y;\n var x2 = path_coord[i].x, y2 = path_coord[i].y;\n var dx = x1 - x2, dy = y1 - y2;\n\n var v1 = dy / Math.sqrt(dx*dx + dy*dy);\n var v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p1 = {'x': null, 'y': null};\n var insert_p2 = {'x': null, 'y': null};\n\n var offset = 10;\n\n insert_p1.x = (x1+x2)/2.0 + offset*v1;\n insert_p1.y = (y1+y2)/2.0 + offset*v2;\n\n insert_p2.x = (x1+x2)/2.0 - offset*v1;\n insert_p2.y = (y1+y2)/2.0 - offset*v2;\n\n new_path_coord.push(insert_p1);\n new_path_coord.push(path_coord[i]);\n new_path_coord.push(insert_p2);\n } else if (_distance(path_coord[i-1], path_coord[i+1]) < pathprops.nearNodesDistance){\n // insert node when the previous and next nodes are very close\n // first node\n var x1 = path_coord[i-1].x, y1 = path_coord[i-1].y;\n var x2 = path_coord[i].x, y2 = path_coord[i].y;\n var dx = x1 - x2, dy = y1 - y2;\n\n var v1 = dy / Math.sqrt(dx*dx + dy*dy);\n var v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p1 = {'x': null, 'y': null};\n\n var offset = 10;\n\n insert_p1.x = (x1+x2)/2.0 + offset*v1;\n insert_p1.y = (y1+y2)/2.0 + offset*v2;\n\n // second node\n x1 = path_coord[i].x;\n y1 = path_coord[i].y;\n x2 = path_coord[i+1].x;\n y2 = path_coord[i+1].y;\n dx = x1 - x2;\n dy = y1 - y2;\n\n v1 = dy / Math.sqrt(dx*dx + dy*dy);\n v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p2 = {'x': null, 'y': null};\n\n insert_p2.x = (x1+x2)/2.0 + offset*v1;\n insert_p2.y = (y1+y2)/2.0 + offset*v2;\n\n new_path_coord.push(insert_p1);\n new_path_coord.push(path_coord[i]);\n new_path_coord.push(insert_p2);\n\n }\n else {\n new_path_coord.push(path_coord[i]);\n }\n } else {\n new_path_coord.push(path_coord[i]);\n }\n }\n return new_path_coord;\n }\n\n // helper functions\n var vecDot = function(v0, v1) { return v0.x*v1.x+v0.y*v1.y; };\n var vecMag = function(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n var l2Dist = function(p1, p2) {\n return Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));\n };\n\n function drawCardinalSpline(points, lineTension, avoidSharpTurn, angleThreshold) {\n var c = lineTension || 0;\n avoidSharpTurn = avoidSharpTurn !== false;\n angleThreshold = angleThreshold || 0.02;\n\n // get the path without self loops\n var path_list = [points[0]];\n for(var i = 1; i < points.length; i ++) {\n if(l2Dist(points[i], path_list[path_list.length-1]) > 1e-6) {\n path_list.push(points[i]);\n }\n }\n\n // repeat first and last node\n points = [path_list[0]];\n points = points.concat(path_list);\n points.push(path_list[path_list.length-1]);\n\n // a segment is a list of three points: [c0, c1, p1],\n // representing the coordinates in \"C x0,y0,x1,y1,x,y\" in svg:path\n var segments = []; // control points\n for(var i = 1; i < points.length-2; i ++) {\n // generate svg:path\n var m_0_x = (1-c)*(points[i+1].x - points[i-1].x)/2;\n var m_0_y = (1-c)*(points[i+1].y - points[i-1].y)/2;\n\n var m_1_x = (1-c)*(points[i+2].x - points[i].x)/2;\n var m_1_y = (1-c)*(points[i+2].y - points[i].y)/2;\n\n var p0 = points[i];\n var p1 = points[i+1];\n var c0 = p0;\n if(i !== 1) {\n c0 = {x: p0.x+(m_0_x/3), y:p0.y+(m_0_y/3)};\n }\n var c1 = p1;\n if(i !== points.length-3) {\n c1 = {x: p1.x-(m_1_x/3), y:p1.y-(m_1_y/3)};\n }\n\n // detect special case by calculating the angle\n if(avoidSharpTurn) {\n var v0 = {x:points[i-1].x - points[i].x, y:points[i-1].y - points[i].y};\n var v1 = {x:points[i+1].x - points[i].x, y:points[i+1].y - points[i].y};\n var acosValue = vecDot(v0,v1) / (vecMag(v0)*vecMag(v1));\n acosValue = Math.max(-1, Math.min(1, acosValue));\n var angle = Math.acos( acosValue );\n\n if(angle <= angleThreshold ){\n var m_x = (1-c)*(points[i].x - points[i-1].x)/2;\n var m_y = (1-c)*(points[i].y - points[i-1].y)/2;\n var k = 2;\n\n var cp1 = {x: p0.x+k*(-m_y/3), y:p0.y+k*(m_x/3)};\n var cp2 = {x: p0.x-k*(-m_y/3), y:p0.y-k*(m_x/3)};\n // CP_1CP_2\n var vCP = {x: cp1.x-cp2.x, y:cp1.y-cp2.y}; // vector cp1->cp2\n var vPN = {x: points[i-2].x - points[i+2].x, y:points[i-2].y-points[i+2].y}; // vector Previous->Next\n if(vecDot(vCP, vPN) > 0) {\n c0 = cp1;\n segments[segments.length-1][1] = cp2;\n } else {\n c0 = cp2;\n segments[segments.length-1][1] = cp1;\n }\n }\n }\n\n segments.push([c0,c1,p1]);\n }\n\n var path_d = \"M\"+points[0].x+\",\"+points[0].y;\n for(var i = 0; i < segments.length; i ++) {\n var s = segments[i];\n path_d += \"C\"+s[0].x+\",\"+s[0].y;\n path_d += \",\"+s[1].x+\",\"+s[1].y;\n path_d += \",\"+s[2].x+\",\"+s[2].y;\n }\n return path_d;\n }\n\n function drawDedicatedLoops(points, lineTension, avoidSharpTurn, angleThreshold) {\n // get loops as segments\n var p1 = 0, p2 = 1;\n var seg_list = []; // (start, end)\n while(p1 < points.length-1 && p2 < points.length) {\n if(l2Dist(points[p1], points[p2]) < 1e-6) {\n var repeated = points[p2];\n while(p2 < points.length && l2Dist(points[p2], repeated) < 1e-6) p2++;\n seg_list.push({'start': Math.max(0, p1-1), 'end': Math.min(points.length-1, p2)});\n p1 = p2;\n p2 = p1+1;\n } else {\n p1++;\n p2++;\n }\n }\n\n var loopCurves = \"\";\n for(var i = 0; i < seg_list.length; i ++) {\n var segment = seg_list[i];\n var loopCount = segment.end - segment.start - 2;\n var anchorPoint = points[segment.start+1];\n\n // the vector from previous node to next node\n var vec_pre_next = {\n x: points[segment.end].x-points[segment.start].x,\n y: points[segment.end].y-points[segment.start].y\n };\n\n // when previous node and next node are the same node, we need to handle\n // them differently.\n // e.g. for a loop segment A->B->B->A, we use the perpendicular vector perp_AB\n // instead of vector AA(which is vec_pre_next in this case).\n if(vecMag(vec_pre_next) == 0) {\n vec_pre_next = {\n x: -(points[segment.end].y-anchorPoint.y),\n y: points[segment.end].x-anchorPoint.x\n };\n }\n\n // unit length vector\n var vec_pre_next_unit = {\n x: vec_pre_next.x / vecMag(vec_pre_next),\n y: vec_pre_next.y / vecMag(vec_pre_next)\n };\n var vec_pre_next_perp = {\n x: -vec_pre_next.y / vecMag(vec_pre_next),\n y: vec_pre_next.x / vecMag(vec_pre_next)\n };\n\n var insertP;\n for(var j = 0; j < loopCount; j ++) {\n var c1,c2,c3,c4;\n\n // change the control points every time this loop appears\n var cp_k = 15+2*j;\n\n // calculate c1 and c4, their tangent match the tangent at anchorPoint\n c1 = {\n x: anchorPoint.x + cp_k*vec_pre_next_unit.x,\n y: anchorPoint.y + cp_k*vec_pre_next_unit.y\n };\n\n c4 = {\n x: anchorPoint.x - cp_k*vec_pre_next_unit.x,\n y: anchorPoint.y - cp_k*vec_pre_next_unit.y\n };\n\n // change the location of inserted virtual point every time this loop appears\n var control_k = 25+5*j;\n var insertP1 = {\n x: anchorPoint.x+vec_pre_next_perp.x*control_k,\n y: anchorPoint.y+vec_pre_next_perp.y*control_k\n };\n var insertP2 = {\n x: anchorPoint.x-vec_pre_next_perp.x*control_k,\n y: anchorPoint.y-vec_pre_next_perp.y*control_k\n };\n var vec_i_to_next = {\n x: points[segment.end].x - anchorPoint.x,\n y: points[segment.end].y - anchorPoint.y\n };\n var vec_i_to_insert = {\n x: insertP1.x - anchorPoint.x,\n y: insertP1.y - anchorPoint.y\n };\n insertP = insertP1;\n if(vecDot(vec_i_to_insert, vec_i_to_next) > 0) {\n insertP = insertP2;\n }\n\n // calculate c2 and c3 based on insertP\n c2 = {\n x: insertP.x + cp_k*vec_pre_next_unit.x,\n y: insertP.y + cp_k*vec_pre_next_unit.y\n };\n\n c3 = {\n x: insertP.x - cp_k*vec_pre_next_unit.x,\n y: insertP.y - cp_k*vec_pre_next_unit.y\n };\n\n var curve = \"M\"+anchorPoint.x+\",\"+anchorPoint.y;\n curve += \"C\"+c1.x+\",\"+c1.y+\",\"+c2.x+\",\"+c2.y+\",\"+insertP.x+\",\"+insertP.y;\n curve += \"C\"+c3.x+\",\"+c3.y+\",\"+c4.x+\",\"+c4.y+\",\"+anchorPoint.x+\",\"+anchorPoint.y;\n\n loopCurves += curve;\n }\n }\n return loopCurves;\n }\n\n // convert original path data into \n function genPath(originalPoints, old, lineTension, avoidSharpTurn, angleThreshold) {\n // get coordinates\n var path_coord = getNodePositions(originalPoints, old);\n if(path_coord.length < 2) return \"\";\n\n var result = \"\";\n // process the points and treat them differently:\n // 1. sub-path without self loop\n result += drawCardinalSpline(path_coord, lineTension, avoidSharpTurn, angleThreshold);\n\n // 2. a list of loop segments\n result += drawDedicatedLoops(path_coord, lineTension, avoidSharpTurn, angleThreshold);\n\n return result;\n }\n\n // draw the spline for paths\n function drawSpline(paths) {\n if(paths === null) {\n _savedPositions = _behavior.parent().layoutEngine().savePositions();\n return;\n }\n\n paths = paths.filter(pathIsPresent);\n var hoverpaths = _hoverpaths || [],\n selected = _selected || [];\n\n // edge spline\n var edge = _layer.selectAll(\".spline-edge\").data(paths, function(path) { return path_keys(path).join(','); });\n edge.exit().remove();\n var edgeEnter = edge.enter().append(\"svg:path\")\n .attr('class', 'spline-edge')\n .attr('id', function(d, i) { return \"spline-path-\"+i; })\n .attr('stroke-width', pathprops.edgeStrokeWidth || 1)\n .attr('fill', 'none')\n .attr('d', function(d) { return genPath(d, true, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n edge\n .attr('stroke', function(p) {\n return selected.indexOf(p) !== -1 && selectprops.edgeStroke ||\n hoverpaths.indexOf(p) !== -1 && hoverprops.edgeStroke ||\n pathprops.edgeStroke || 'black';\n })\n .attr('opacity', function(p) {\n return selected.indexOf(p) !== -1 && selectprops.edgeOpacity ||\n hoverpaths.indexOf(p) !== -1 && hoverprops.edgeOpacity ||\n pathprops.edgeOpacity || 1;\n });\n function path_order(p) {\n return hoverpaths.indexOf(p) !== -1 ? 2 :\n selected.indexOf(p) !== -1 ? 1 :\n 0;\n }\n edge.sort(function(a, b) {\n return path_order(a) - path_order(b);\n });\n _layer.selectAll('.spline-edge-hover')\n .each(function() {this.parentNode.appendChild(this);});\n edge.transition().duration(_behavior.parent().transitionDuration())\n .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n\n // another wider copy of the edge just for hover events\n var edgeHover = _layer.selectAll('.spline-edge-hover')\n .data(paths, function(path) { return path_keys(path).join(','); });\n edgeHover.exit().remove();\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'spline-edge-hover')\n .attr('d', function(d) { return genPath(d, true, pathprops.lineTension, _behavior.avoidSharpTurns()); })\n .attr('opacity', 0)\n .attr('stroke', 'green')\n .attr('stroke-width', (pathprops.edgeStrokeWidth || 1) + 4)\n .attr('fill', 'none')\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 var selected = _selected && _selected.slice(0) || [],\n i = selected.indexOf(d);\n if(i !== -1)\n selected.splice(i, 1);\n else if(d3.event.shiftKey)\n selected.push(d);\n else\n selected = [d];\n highlight_paths_group.select_changed(selected);\n });\n edgeHover.transition().duration(_behavior.parent().transitionDuration())\n .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n };\n\n function add_behavior(diagram, node, edge, ehover) {\n _layer = _behavior.parent().select('g.draw').selectAll('g.spline-layer').data([0]);\n _layer.enter().append('g').attr('class', 'spline-layer');\n\n drawSpline(_paths);\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n }\n\n var _behavior = dc_graph.behavior('draw-spline-paths', {\n laterDraw: true,\n add_behavior: add_behavior,\n remove_behavior: function(diagram, node, edge, ehover) {\n remove_behavior(diagram, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n if(p)\n _anchor = p.anchorName();\n highlight_paths_group\n .on('paths_changed.draw-spline-paths-' + _anchor, p ? paths_changed : null)\n .on('select_changed.draw-spline-paths-' + _anchor, p ? select_changed : null)\n .on('hover_changed.draw-spline-paths-' + _anchor, p ? function(hpaths) {\n _hoverpaths = hpaths;\n drawSpline(_paths);\n } : null);\n }\n });\n _behavior.selectedStrength = property(1);\n _behavior.avoidSharpTurns = property(true);\n\n return _behavior;\n};\n","dc_graph.expand_collapse = function(options) {\n if(typeof options === 'function') {\n options = {\n get_degree: arguments[0],\n expand: arguments[1],\n collapse: arguments[2],\n dirs: arguments[3]\n };\n }\n var _keyboard, _overNode, _overDir;\n var collapse_highlight_group = dc_graph.register_highlight_things_group(options.collapse_highlight_group || 'collapse-highlight-group');\n var hide_highlight_group = dc_graph.register_highlight_things_group(options.hide_highlight_group || 'hide-highlight-group');\n options.dirs = options.dirs || ['both'];\n options.hideKey = options.hideKey || 'Alt';\n if(options.dirs.length > 2)\n throw new Error('there are only two directions to expand in');\n\n function add_gradient_def(diagram) {\n var gradient = diagram.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(diagram, edge, dir, key) {\n var fil;\n switch(dir) {\n case 'out':\n fil = function(e) {\n return diagram.edgeSource.eval(e) === key;\n };\n break;\n case 'in':\n fil = function(e) {\n return diagram.edgeTarget.eval(e) === key;\n };\n break;\n case 'both':\n fil = function(e) {\n return diagram.edgeSource.eval(e) === key || diagram.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_stubs(diagram, node, edge) {\n var spike = node\n .selectAll('g.spikes')\n .data(function(n) {\n return (n.dcg_expand_selected &&\n (!n.dcg_expanded || !n.dcg_expanded[n.dcg_expand_selected.dir])) ?\n [n] : [];\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(n) {\n var key = diagram.nodeKey.eval(n);\n var dir = n.dcg_expand_selected.dir,\n N = n.dcg_expand_selected.n,\n af = spike_directioner(diagram.layoutEngine().rankdir(), dir, N),\n ret = Array(N);\n for(var i = 0; i n.cola.y ? 'out' : 'in';\n case 'BT':\n return y < n.cola.y ? 'out' : 'in';\n case 'LR':\n return x > n.cola.x ? 'out' : 'in';\n case 'RL':\n return x < n.cola.x ? 'out' : 'in';\n }\n throw new Error('unknown rankdir ' + diagram.layoutEngine().rankdir());\n }\n\n function detect_key(key) {\n switch(key) {\n case 'Alt':\n return d3.event.altKey;\n case 'Meta':\n return d3.event.metaKey;\n case 'Shift':\n return d3.event.shiftKey;\n case 'Control':\n return d3.event.ctrlKey;\n }\n return false;\n }\n\n function highlight_hiding(diagram, n, edge) {\n var nk = diagram.nodeKey.eval(n);\n var hide_nodes_set = {}, hide_edges_set = {};\n hide_nodes_set[nk] = true;\n edge.each(function(e) {\n if(diagram.edgeSource.eval(e) === nk || diagram.edgeTarget.eval(e) === nk)\n hide_edges_set[diagram.edgeKey.eval(e)] = true;\n });\n hide_highlight_group.highlight(hide_nodes_set, hide_edges_set);\n }\n\n function highlight_collapse(diagram, n, node, edge, dir) {\n var nk = diagram.nodeKey.eval(n);\n Promise.resolve(options.get_degree(nk, dir)).then(function(degree) {\n var spikes = {\n dir: dir,\n n: Math.max(0, degree - view_degree(diagram, edge, dir, nk)) // be tolerant of inconsistencies\n };\n var collapse_nodes_set = {}, collapse_edges_set = {};\n node.each(function(n2) {\n n2.dcg_expand_selected = n2 === n ? spikes : null;\n if(n2 === n && n.dcg_expanded && n.dcg_expanded[dir])\n edge.each(function(e) {\n var other;\n if(['both', 'out'].includes(dir) && diagram.edgeSource.eval(e) === diagram.nodeKey.eval(n))\n other = diagram.edgeTarget.eval(e);\n if(['both', 'in'].includes(dir) && diagram.edgeTarget.eval(e) === diagram.nodeKey.eval(n))\n other = diagram.edgeSource.eval(e);\n if(other && collapsible(diagram, edge, 'both', other)) {\n collapse_nodes_set[other] = true;\n collapse_edges_set[diagram.edgeKey.eval(e)] = true;\n }\n });\n });\n draw_stubs(diagram, node, edge);\n collapse_highlight_group.highlight(collapse_nodes_set, collapse_edges_set);\n });\n }\n\n function add_behavior(diagram, node, edge) {\n function mousemove(n) {\n console.log('collapse mousemove');\n var dir = zonedir(diagram, d3.event, options.dirs, n);\n var nk = diagram.nodeKey.eval(n);\n _overNode = n;\n _overDir = dir;\n if(options.hide && detect_key(options.hideKey))\n highlight_hiding(diagram, n, edge);\n else\n highlight_collapse(diagram, n, node, edge, dir);\n }\n\n function click(n) {\n var event = d3.event;\n console.log(event.type);\n function action() {\n if(options.hide && detect_key(options.hideKey))\n options.hide(diagram.nodeKey.eval(n));\n else {\n var dir = zonedir(diagram, event, options.dirs, n);\n n.dcg_expanded = n.dcg_expanded || {};\n if(!n.dcg_expanded[dir]) {\n options.expand(diagram.nodeKey.eval(n), dir, event.type === 'dblclick');\n n.dcg_expanded[dir] = true;\n }\n else {\n options.collapse(diagram.nodeKey.eval(n), collapsible.bind(null, diagram, edge, 'both'), dir);\n n.dcg_expanded[dir] = false;\n }\n draw_stubs(diagram, node, edge);\n n.dcg_dblclk_timeout = null;\n }\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(n.dcg_dblclk_timeout) {\n window.clearTimeout(n.dcg_dblclk_timeout);\n if(event.type === 'dblclick')\n action();\n n.dcg_dblclk_timeout = null;\n }\n else n.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(n) {\n console.log('collapse mouseout');\n _overNode = null;\n clear_stubs(diagram, node, edge);\n collapse_highlight_group.highlight({}, {});\n hide_highlight_group.highlight({}, {});\n })\n .on('click', click)\n .on('dblclick', click);\n\n _keyboard\n .on('keydown.expand-collapse', function() {\n if(d3.event.key === options.hideKey && _overNode) {\n highlight_hiding(diagram, _overNode, edge);\n clear_stubs(diagram, node, edge);\n collapse_highlight_group.highlight({}, {});\n }\n })\n .on('keyup.expand_collapse', function() {\n if(d3.event.key === options.hideKey && _overNode) {\n hide_highlight_group.highlight({}, {});\n highlight_collapse(diagram, _overNode, node, edge, _overDir);\n }\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n node\n .on('mouseover.expand-collapse', null)\n .on('mouseout.expand-collapse', null);\n clear_stubs(diagram, node, edge);\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 parent: function(p) {\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n }\n }\n });\n};\n","dc_graph.draw_graphs = function(options) {\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes'),\n select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges'),\n label_nodes_group = dc_graph.label_things_group('label-nodes-group', 'label-nodes'),\n label_edges_group = dc_graph.label_things_group('label-edges-group', 'label-edges'),\n fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _nodeIdTag = options.idTag || 'id',\n _edgeIdTag = options.edgeIdTag || _nodeIdTag,\n _sourceTag = options.sourceTag || 'source',\n _targetTag = options.targetTag || 'target',\n _nodeLabelTag = options.labelTag || 'label',\n _edgeLabelTag = options.edgeLabelTag || _nodeLabelTag;\n\n var _sourceDown = null, _targetMove = null, _targetValid = false, _edgeLayer = null, _hintData = [], _crossout;\n\n function update_hint() {\n var data = _hintData.filter(function(h) {\n return h.source && h.target;\n });\n var line = _edgeLayer.selectAll('line.hint-edge').data(data);\n line.exit().remove();\n line.enter().append('line')\n .attr('class', 'hint-edge')\n .style({\n fill: 'none',\n stroke: 'black',\n 'pointer-events': 'none'\n });\n\n line.attr({\n x1: function(n) { return n.source.x; },\n y1: function(n) { return n.source.y; },\n x2: function(n) { return n.target.x; },\n y2: function(n) { return n.target.y; }\n });\n }\n\n function port_pos(p) {\n var style = _behavior.parent().portStyle(_behavior.parent().portStyleName.eval(p));\n var pos = style.portPosition(p);\n pos.x += p.node.cola.x;\n pos.y += p.node.cola.y;\n return pos;\n }\n\n function update_crossout() {\n var data;\n if(_crossout) {\n if(_behavior.usePorts())\n data = [port_pos(_crossout)];\n else\n data = [{x: _crossout.node.cola.x, y: _crossout.node.cola.y}];\n }\n else data = [];\n\n var size = _behavior.crossSize(), wid = _behavior.crossWidth();\n var cross = _edgeLayer.selectAll('polygon.graph-draw-crossout').data(data);\n cross.exit().remove();\n cross.enter().append('polygon')\n .attr('class', 'graph-draw-crossout');\n cross\n .attr('points', function(d) {\n var x = d.x, y = d.y;\n return [\n [x-size/2, y+size/2], [x-size/2+wid, y+size/2], [x, y+wid/2],\n [x+size/2-wid, y+size/2], [x+size/2, y+size/2], [x+wid/2, y],\n [x+size/2, y-size/2], [x+size/2-wid, y-size/2], [x, y-wid/2],\n [x-size/2+wid, y-size/2], [x-size/2, y-size/2], [x-wid/2, y]\n ]\n .map(function(p) { return p.join(','); })\n .join(' ');\n });\n }\n function erase_hint() {\n _hintData = [];\n _targetValid = false;\n _sourceDown = _targetMove = null;\n update_hint();\n }\n\n function create_node(diagram, pos, data) {\n if(!_behavior.nodeCrossfilter())\n throw new Error('need nodeCrossfilter');\n var node, callback = _behavior.addNode() || promise_identity;\n if(data)\n node = data;\n else {\n node = {};\n node[_nodeIdTag] = uuid();\n node[_nodeLabelTag] = '';\n }\n if(pos)\n fix_nodes_group.new_node(node[_nodeIdTag], node, {x: pos[0], y: pos[1]});\n callback(node).then(function(node2) {\n if(!node2)\n return;\n _behavior.nodeCrossfilter().add([node2]);\n diagram.redrawGroup();\n select_nodes_group.set_changed([node2[_nodeIdTag]]);\n });\n }\n\n function create_edge(diagram, source, target) {\n if(!_behavior.edgeCrossfilter())\n throw new Error('need edgeCrossfilter');\n var edge = {}, callback = _behavior.addEdge() || promise_identity;\n edge[_edgeIdTag] = uuid();\n edge[_edgeLabelTag] = '';\n if(_behavior.conduct().detectReversedEdge && _behavior.conduct().detectReversedEdge(edge, source.port, target.port)) {\n edge[_sourceTag] = target.node.orig.key;\n edge[_targetTag] = source.node.orig.key;\n var t;\n t = source; source = target; target = t;\n } else {\n edge[_sourceTag] = source.node.orig.key;\n edge[_targetTag] = target.node.orig.key;\n }\n callback(edge, source.port, target.port).then(function(edge2) {\n if(!edge2)\n return;\n fix_nodes_group.new_edge(edge[_edgeIdTag], edge2[_sourceTag], edge2[_targetTag]);\n _behavior.edgeCrossfilter().add([edge2]);\n select_nodes_group.set_changed([], false);\n select_edges_group.set_changed([edge2[_edgeIdTag]], false);\n diagram.redrawGroup();\n });\n }\n\n function check_invalid_drag(coords) {\n var msg;\n if(!(d3.event.buttons & 1)) {\n // mouse button was released but we missed it\n _crossout = null;\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n erase_hint();\n update_crossout();\n return true;\n }\n if(!_sourceDown.started && Math.hypot(coords[0] - _hintData[0].source.x, coords[1] - _hintData[0].source.y) > _behavior.dragSize()) {\n if(_behavior.conduct().startDragEdge) {\n if(_behavior.conduct().startDragEdge(_sourceDown)) {\n _sourceDown.started = true;\n } else {\n if(_behavior.conduct().invalidSourceMessage) {\n msg = _behavior.conduct().invalidSourceMessage(_sourceDown);\n console.log(msg);\n if(options.negativeTip) {\n options.negativeTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _sourceDown.port : _sourceDown.node);\n }\n }\n erase_hint();\n return true;\n }\n }\n }\n return false;\n }\n\n function add_behavior(diagram, node, edge, ehover) {\n var select_nodes = diagram.child('select-nodes');\n if(select_nodes) {\n if(_behavior.clickCreatesNodes())\n select_nodes.clickBackgroundClears(false);\n }\n node\n .on('mousedown.draw-graphs', function(n) {\n d3.event.stopPropagation();\n if(!_behavior.dragCreatesEdges())\n return;\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip\n .hideTip()\n .disabled(true);\n });\n if(_behavior.usePorts()) {\n var activePort;\n if(typeof _behavior.usePorts() === 'object' && _behavior.usePorts().eventPort)\n activePort = _behavior.usePorts().eventPort();\n else activePort = diagram.getPort(diagram.nodeKey.eval(n), null, 'out')\n || diagram.getPort(diagram.nodeKey.eval(n), null, 'in');\n if(!activePort)\n return;\n _sourceDown = {node: n, port: activePort};\n _hintData = [{source: port_pos(activePort)}];\n } else {\n _sourceDown = {node: n};\n _hintData = [{source: {x: _sourceDown.node.cola.x, y: _sourceDown.node.cola.y}}];\n }\n })\n .on('mousemove.draw-graphs', function(n) {\n var msg;\n d3.event.stopPropagation();\n if(_sourceDown) {\n var coords = dc_graph.event_coords(diagram);\n if(check_invalid_drag(coords))\n return;\n var oldTarget = _targetMove;\n if(n === _sourceDown.node) {\n _behavior.conduct().invalidTargetMessage &&\n console.log(_behavior.conduct().invalidTargetMessage(_sourceDown, _sourceDown));\n _targetMove = null;\n _hintData[0].target = null;\n }\n else if(_behavior.usePorts()) {\n var activePort;\n if(typeof _behavior.usePorts() === 'object' && _behavior.usePorts().eventPort)\n activePort = _behavior.usePorts().eventPort();\n else activePort = diagram.getPort(diagram.nodeKey.eval(n), null, 'in')\n || diagram.getPort(diagram.nodeKey.eval(n), null, 'out');\n if(activePort)\n _targetMove = {node: n, port: activePort};\n else\n _targetMove = null;\n } else if(!_targetMove || n !== _targetMove.node) {\n _targetMove = {node: n};\n }\n if(_behavior.conduct().changeDragTarget) {\n var change;\n if(_behavior.usePorts()) {\n var oldPort = oldTarget && oldTarget.port,\n newPort = _targetMove && _targetMove.port;\n change = oldPort !== newPort;\n } else {\n var oldNode = oldTarget && oldTarget.node,\n newNode = _targetMove && _targetMove.node;\n change = oldNode !== newNode;\n }\n if(change)\n if(_behavior.conduct().changeDragTarget(_sourceDown, _targetMove)) {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip();\n msg = _behavior.conduct().validTargetMessage && _behavior.conduct().validTargetMessage() ||\n 'matches';\n if(options.positiveTip) {\n options.positiveTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _targetMove.port : _targetMove.node);\n }\n _targetValid = true;\n } else {\n _crossout = _behavior.usePorts() ?\n _targetMove && _targetMove.port :\n _targetMove && _targetMove.node;\n if(_targetMove && _behavior.conduct().invalidTargetMessage) {\n if(options.positiveTip)\n options.positiveTip.hideTip();\n msg = _behavior.conduct().invalidTargetMessage(_sourceDown, _targetMove);\n console.log(msg);\n if(options.negativeTip) {\n options.negativeTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _targetMove.port : _targetMove.node);\n }\n }\n _targetValid = false;\n }\n }\n if(_targetMove) {\n if(_targetMove.port)\n _hintData[0].target = port_pos(activePort);\n else\n _hintData[0].target = {x: n.cola.x, y: n.cola.y};\n }\n else {\n _hintData[0].target = {x: coords[0], y: coords[1]};\n }\n update_hint();\n update_crossout();\n }\n })\n .on('mouseup.draw-graphs', function(n) {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip(true);\n if(options.positiveTip)\n options.positiveTip.hideTip(true);\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip.disabled(false);\n });\n // allow keyboard mode to hear this one (again, we need better cooperation)\n // d3.event.stopPropagation();\n if(_sourceDown && _targetValid) {\n var finishPromise;\n if(_behavior.conduct().finishDragEdge)\n finishPromise = _behavior.conduct().finishDragEdge(_sourceDown, _targetMove);\n else finishPromise = Promise.resolve(true);\n var source = _sourceDown, target = _targetMove;\n finishPromise.then(function(ok) {\n if(ok)\n create_edge(diagram, source, target);\n });\n }\n else if(_sourceDown) {\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n }\n erase_hint();\n update_crossout();\n });\n diagram.svg()\n .on('mousedown.draw-graphs', function() {\n _sourceDown = null;\n })\n .on('mousemove.draw-graphs', function() {\n var data = [];\n if(_sourceDown) { // drawing edge\n var coords = dc_graph.event_coords(diagram);\n _crossout = null;\n if(check_invalid_drag(coords))\n return;\n if(_behavior.conduct().dragCanvas)\n _behavior.conduct().dragCanvas(_sourceDown, coords);\n if(_behavior.conduct().changeDragTarget && _targetMove)\n _behavior.conduct().changeDragTarget(_sourceDown, null);\n _targetMove = null;\n _hintData[0].target = {x: coords[0], y: coords[1]};\n update_hint();\n update_crossout();\n }\n })\n .on('mouseup.draw-graphs', function() {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip(true);\n if(options.positiveTip)\n options.positiveTip.hideTip(true);\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip.disabled(false);\n });\n if(_sourceDown) { // drag-edge\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n erase_hint();\n } else { // click-node\n if(d3.event.target === this && _behavior.clickCreatesNodes())\n create_node(diagram, dc_graph.event_coords(diagram));\n }\n update_crossout();\n });\n if(!_edgeLayer)\n _edgeLayer = diagram.g().append('g').attr('class', 'draw-graphs');\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n node\n .on('mousedown.draw-graphs', null)\n .on('mousemove.draw-graphs', null)\n .on('mouseup.draw-graphs', null);\n diagram.svg()\n .on('mousedown.draw-graphs', null)\n .on('mousemove.draw-graphs', null)\n .on('mouseup.draw-graphs', null);\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n\n // update the data source/destination\n _behavior.nodeCrossfilter = property(options.nodeCrossfilter);\n _behavior.edgeCrossfilter = property(options.edgeCrossfilter);\n\n // behavioral options\n _behavior.usePorts = property(null);\n _behavior.clickCreatesNodes = property(true);\n _behavior.dragCreatesEdges = property(true);\n _behavior.dragSize = property(5);\n\n // draw attributes of indicator for failed edge\n _behavior.crossSize = property(15);\n _behavior.crossWidth = property(5);\n\n // really this is a behavior, and what we've been calling behaviors are modes\n // but i'm on a deadline\n _behavior.conduct = property({});\n\n // callbacks to modify data as it's being added\n // as of 0.6, function returns a promise of the new data\n _behavior.addNode = property(null); // node -> promise(node2)\n _behavior.addEdge = property(null); // edge, sourceport, targetport -> promise(edge2)\n\n // or, if you want to drive..\n _behavior.createNode = function(pos, data) {\n create_node(_behavior.parent(), pos, data);\n };\n\n return _behavior;\n};\n\n","dc_graph.match_ports = function(diagram, symbolPorts) {\n var _ports, _wports, _wedges, _validTargets;\n diagram.on('data.match-ports', function(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _ports = ports;\n _wports = wports;\n _wedges = wedges;\n });\n diagram.on('transitionsStarted', function() {\n symbolPorts.enableHover(true);\n });\n function change_state(ports, state) {\n return ports.map(function(p) {\n p.state = state;\n return diagram.portNodeKey.eval(p);\n });\n }\n function reset_ports(source) {\n var nids = change_state(_validTargets, 'small');\n source.port.state = 'small';\n nids.push(diagram.portNodeKey.eval(source.port));\n symbolPorts.animateNodes(nids);\n }\n function has_parallel(sourcePort, targetPort) {\n return _wedges.some(function(e) {\n return sourcePort.edges.indexOf(e) >= 0 && targetPort.edges.indexOf(e) >= 0;\n });\n }\n function is_valid(sourcePort, targetPort) {\n return (_behavior.allowParallel() || !has_parallel(sourcePort, targetPort))\n && _behavior.isValid()(sourcePort, targetPort);\n }\n function why_invalid(sourcePort, targetPort) {\n return !_behavior.allowParallel() && has_parallel(sourcePort, targetPort) && \"can't connect two edges between the same two ports\" ||\n _behavior.whyInvalid()(sourcePort, targetPort);\n }\n var _behavior = {\n isValid: property(function(sourcePort, targetPort) {\n return targetPort !== sourcePort && targetPort.name === sourcePort.name;\n }),\n whyInvalid: property(function(sourcePort, targetPort) {\n return targetPort === sourcePort && \"can't connect port to itself\" ||\n targetPort.name !== sourcePort.name && \"must connect ports of the same type\";\n }),\n allowParallel: property(false),\n hoverPort: function(port) {\n if(port) {\n _validTargets = _wports.filter(is_valid.bind(null, port));\n if(_validTargets.length)\n return change_state(_validTargets, 'shimmer-medium');\n } else if(_validTargets)\n return change_state(_validTargets, 'small');\n return null;\n },\n startDragEdge: function(source) {\n _validTargets = _wports.filter(is_valid.bind(null, source.port));\n var nids = change_state(_validTargets, 'shimmer');\n if(_validTargets.length) {\n symbolPorts.enableHover(false);\n source.port.state = 'large';\n nids.push(diagram.portNodeKey.eval(source.port));\n symbolPorts.animateNodes(nids);\n }\n console.log('valid targets', nids);\n return _validTargets.length !== 0;\n },\n invalidSourceMessage: function(source) {\n return \"no valid matches for this port\";\n },\n changeDragTarget: function(source, target) {\n var nids, valid = target && is_valid(source.port, target.port), before;\n if(valid) {\n nids = change_state(_validTargets, 'small');\n target.port.state = 'large'; // it's one of the valid\n }\n else {\n nids = change_state(_validTargets, 'small');\n before = symbolPorts.animateNodes(nids);\n nids = change_state(_validTargets, 'shimmer');\n }\n symbolPorts.animateNodes(nids, before);\n return valid;\n },\n validTargetMessage: function(source, target) {\n return \"it's a match!\";\n },\n invalidTargetMessage: function(source, target) {\n return why_invalid(source.port, target.port);\n },\n finishDragEdge: function(source, target) {\n symbolPorts.enableHover(true);\n reset_ports(source);\n return Promise.resolve(is_valid(source.port, target.port));\n },\n cancelDragEdge: function(source) {\n symbolPorts.enableHover(true);\n reset_ports(source);\n return true;\n }\n };\n return _behavior;\n};\n","dc_graph.match_opposites = function(diagram, deleteProps, options) {\n options = Object.assign({\n multiplier: 2,\n ease: d3.ease('cubic')\n }, options);\n var _ports, _wports, _wedges, _validTargets;\n\n diagram.cascade(100, true, multiply_properties(function(e) {\n return options.ease(e.deleting || 0);\n }, deleteProps, property_interpolate));\n diagram.on('data.match-opposites', function(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _ports = ports;\n _wports = wports;\n _wedges = wedges;\n });\n function port_pos(p) {\n return { x: p.node.cola.x + p.pos.x, y: p.node.cola.y + p.pos.y };\n }\n function is_valid(sourcePort, targetPort) {\n return (_behavior.allowParallel() || !_wedges.some(function(e) {\n return sourcePort.edges.indexOf(e) >= 0 && targetPort.edges.indexOf(e) >= 0;\n })) && _behavior.isValid()(sourcePort, targetPort);\n }\n function reset_deletables(source, targets) {\n targets.forEach(function(p) {\n p.edges.forEach(function(e) {\n e.deleting = 0;\n });\n });\n if(source)\n source.port.edges.forEach(function(e) {\n e.deleting = 0;\n });\n }\n var _behavior = {\n isValid: property(function(sourcePort, targetPort) {\n // draw_graphs is already enforcing this, but this makes more sense and i use xor any chance i get\n return (diagram.portName.eval(sourcePort) === 'in') ^ (diagram.portName.eval(targetPort) === 'in');\n }),\n allowParallel: property(false),\n hoverPort: function(port) {\n // could be called by draw_graphs when node is hovered, isn't\n },\n startDragEdge: function(source) {\n _validTargets = _wports.filter(is_valid.bind(null, source.port));\n console.log('valid targets', _validTargets.map(diagram.portNodeKey.eval));\n return _validTargets.length !== 0;\n },\n dragCanvas: function(source, coords) {\n var closest = _validTargets.map(function(p) {\n var ppos = port_pos(p);\n return {\n distance: Math.hypot(coords[0] - ppos.x, coords[1] - ppos.y),\n port: p\n };\n }).sort(function(a, b) {\n return a.distance - b.distance;\n });\n var cpos = port_pos(closest[0].port), spos = port_pos(source.port);\n closest.forEach(function(c) {\n c.port.edges.forEach(function(e) {\n e.deleting = 1 - options.multiplier * c.distance / Math.hypot(cpos.x - spos.x, cpos.y - spos.y);\n });\n });\n source.port.edges.forEach(function(e) {\n e.deleting = 1 - options.multiplier * closest[0].distance / Math.hypot(cpos.x - spos.x, cpos.y - spos.y);\n });\n diagram.refresh();\n },\n changeDragTarget: function(source, target) {\n var valid = target && is_valid(source.port, target.port);\n if(valid) {\n target.port.edges.forEach(function(e) {\n e.deleting = 1;\n });\n source.port.edges.forEach(function(e) {\n e.deleting = 1;\n });\n reset_deletables(null, _validTargets.filter(function(p) {\n return p !== target.port;\n }));\n diagram.refresh();\n }\n return valid;\n },\n finishDragEdge: function(source, target) {\n if(is_valid(source.port, target.port)) {\n reset_deletables(null, _validTargets.filter(function(p) {\n return p !== target.port;\n }));\n if(options.delete_edges) {\n var edgeKeys = source.port.edges.map(diagram.edgeKey.eval).concat(target.port.edges.map(diagram.edgeKey.eval));\n return options.delete_edges.deleteSelection(edgeKeys);\n }\n return Promise.resolve(true);\n }\n reset_deletables(source, _validTargets);\n return Promise.resolve(false);\n },\n cancelDragEdge: function(source) {\n reset_deletables(source, _validTargets);\n return true;\n },\n detectReversedEdge: function(edge, sourcePort, targetPort) {\n return diagram.portName.eval(sourcePort) === 'in';\n }\n };\n return _behavior;\n};\n","dc_graph.wildcard_ports = function(options) {\n var diagram = options.diagram,\n get_type = options.get_type || function(p) { return p.orig.value.type; },\n set_type = options.set_type || function(p, src) { p.orig.value.type = src.orig.value.type; },\n get_name = options.get_name || function(p) { return p.orig.value.name; },\n is_wild = options.is_wild || function(p) { return p.orig.value.wild; },\n update_ports = options.update_ports || function() {},\n get_linked = options.get_linked || function() { return []; };\n function linked_ports(n, port) {\n if(!diagram)\n return [];\n var nid = diagram.nodeKey.eval(n);\n var name = get_name(port);\n var links = get_linked(n) || [];\n var found = links.find(function(set) {\n return set.includes(name);\n });\n if(!found) return [];\n return found.filter(function(link) { return link !== name; }).map(function(link) {\n return diagram.getPort(nid, null, link);\n });\n }\n function no_edges(ports) {\n return ports.every(function(lp) {\n return lp.edges.length === 0;\n });\n }\n return {\n isValid: function(p1, p2) {\n return get_type(p1) === null ^ get_type(p2) === null ||\n get_type(p1) !== null && get_type(p1) === get_type(p2);\n },\n whyInvalid: function(p1, p2) {\n return get_type(p1) === null && get_type(p2) === null && \"can't connect wildcard to wildcard\" ||\n get_type(p1) !== get_type(p2) && \"the types of ports must match\";\n },\n copyLinked: function(n, port) {\n linked_ports(n, port).forEach(function(lp) {\n set_type(lp, port);\n });\n },\n copyType: function(e, sport, tport) {\n if(get_type(sport) === null) {\n set_type(sport, tport);\n this.copyLinked(sport.node, sport);\n update_ports();\n } else if(get_type(tport) === null) {\n set_type(tport, sport);\n this.copyLinked(tport.node, tport);\n update_ports();\n }\n return Promise.resolve(e);\n },\n resetTypes: function(edges) {\n // backward compatibility: this used to take diagram as\n // first arg, which was wrong\n var dia = diagram;\n if(arguments.length === 2) {\n dia = arguments[0];\n edges = arguments[1];\n }\n edges.forEach(function(eid) {\n var e = dia.getWholeEdge(eid),\n spname = dia.edgeSourcePortName.eval(e),\n tpname = dia.edgeTargetPortName.eval(e);\n var update = false;\n var p = dia.getPort(dia.nodeKey.eval(e.source), null, spname);\n var linked = linked_ports(e.source, p);\n if(is_wild(p) && p.edges.length === 1 && no_edges(linked)) {\n set_type(p, null);\n linked.forEach(function(lp) {\n set_type(lp, null);\n update = true;\n });\n }\n p = dia.getPort(dia.nodeKey.eval(e.target), null, tpname);\n linked = linked_ports(e.target, p);\n if(is_wild(p) && p.edges.length === 1 && no_edges(linked)) {\n set_type(p, null);\n linked.forEach(function(lp) {\n set_type(lp, null);\n update = true;\n });\n }\n if(update)\n update_ports();\n });\n return Promise.resolve(edges);\n }\n };\n};\n","dc_graph.symbol_port_style = function() {\n var _style = {};\n var _nodePorts, _node;\n var _drawConduct;\n\n _style.symbolScale = property(null);\n _style.colorScale = property(d3.scale.ordinal().range(\n // colorbrewer light qualitative scale\n d3.shuffle(['#8dd3c7','#ffffb3','#bebada','#fb8072','#80b1d3','#fdb462',\n '#b3de69','#fccde5','#d9d9d9','#bc80bd','#ccebc5','#ffed6f'])));\n\n function name_or_edge(p) {\n return p.named ? p.name : _style.parent().edgeKey.eval(p.edges[0]);\n }\n _style.symbol = _style.portSymbol = property(name_or_edge, false); // non standard properties taking \"outer datum\"\n _style.color = _style.portColor = property(name_or_edge, false);\n _style.outline = property(dc_graph.symbol_port_style.outline.circle());\n _style.content = property(dc_graph.symbol_port_style.content.d3symbol());\n _style.smallRadius = _style.portRadius = property(7);\n _style.mediumRadius = _style.portHoverNodeRadius = property(10);\n _style.largeRadius = _style.portHoverPortRadius = property(14);\n _style.displacement = _style.portDisplacement = property(2);\n _style.outlineFillScale = _style.portBackgroundScale = property(null);\n _style.outlineFill = _style.portBackgroundFill = property(null);\n _style.outlineStroke = _style.portBackgroundStroke = property(null);\n _style.outlineStrokeWidth = _style.portBackgroundStrokeWidth = property(null);\n _style.padding = _style.portPadding = property(2);\n _style.label = _style.portLabel = _style.portText = property(function(p) {\n return p.name;\n });\n _style.portLabelPadding = property({x: 5, y: 5});\n _style.cascade = cascade(_style);\n\n _style.portPosition = function(p) {\n var l = Math.hypot(p.pos.x, p.pos.y),\n u = {x: p.pos.x / l, y: p.pos.y / l},\n disp = _style.displacement.eval(p);\n return {x: p.pos.x + disp * u.x, y: p.pos.y + disp * u.y};\n };\n\n function symbol_fill(p) {\n var symcolor = _style.color.eval(p);\n return symcolor ?\n (_style.colorScale() ? _style.colorScale()(symcolor) : symcolor) :\n 'none';\n }\n function port_transform(p) {\n var pos = _style.portPosition(p);\n return 'translate(' + pos.x + ',' + pos.y + ')';\n }\n function port_symbol(p) {\n if(!_style.symbolScale())\n _style.symbolScale(d3.scale.ordinal().range(d3.shuffle(_style.content().enum())));\n var symname = _style.symbol.eval(p);\n return symname && (_style.symbolScale() ? _style.symbolScale()(symname) : symname);\n }\n function is_left(p) {\n return p.vec[0] < 0;\n }\n function hover_radius(p) {\n switch(p.state) {\n case 'large':\n return _style.largeRadius.eval(p);\n case 'medium':\n return _style.mediumRadius.eval(p);\n case 'small':\n default:\n return _style.smallRadius.eval(p);\n }\n }\n function shimmer_radius(p) {\n return /-medium$/.test(p.state) ?\n _style.mediumRadius.eval(p) :\n _style.largeRadius.eval(p);\n }\n // fall back to node aesthetics if not defined for port\n function outline_fill(p) {\n var scale, fill;\n if(_style.outlineFill.eval(p)) {\n scale = _style.outlineFillScale() || identity;\n fill = _style.outlineFill.eval(p);\n }\n else {\n scale = _style.parent().nodeFillScale() || identity;\n fill = _style.parent().nodeFill.eval(p.node);\n }\n return fill === 'none' ? 'none' : scale(fill);\n }\n function outline_stroke(p) {\n return _style.outlineStroke.eval(p) || _style.parent().nodeStroke.eval(p.node);\n }\n function outline_stroke_width(p) {\n var sw = _style.outlineStrokeWidth.eval(p);\n return typeof sw === 'number' ? sw : _style.parent().nodeStrokeWidth.eval(p.node);\n }\n _style.animateNodes = function(nids, before) {\n var setn = d3.set(nids);\n var node = _node\n .filter(function(n) {\n return setn.has(_style.parent().nodeKey.eval(n));\n });\n var symbol = _style.parent().selectNodePortsOfStyle(node, _style.parent().portStyle.nameOf(this));\n var shimmer = symbol.filter(function(p) { return /^shimmer/.test(p.state); }),\n nonshimmer = symbol.filter(function(p) { return !/^shimmer/.test(p.state); });\n if(shimmer.size()) {\n if(before)\n before.each('end', repeat);\n else repeat();\n }\n\n function repeat() {\n var shimin = shimmer.transition()\n .duration(1000)\n .ease(\"bounce\");\n shimin.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return shimmer_radius(p) + _style.portPadding.eval(p);\n }));\n shimin.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, shimmer_radius));\n var shimout = shimin.transition()\n .duration(1000)\n .ease('sin');\n shimout.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n shimout.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n shimout.each(\"end\", repeat);\n }\n\n var trans = nonshimmer.transition()\n .duration(250);\n trans.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return hover_radius(p) + _style.portPadding.eval(p);\n }));\n trans.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, hover_radius));\n\n function text_showing(p) {\n return p.state === 'large' || p.state === 'medium';\n }\n trans.selectAll('text.port-label')\n .attr({\n opacity: function(p) {\n return text_showing(p) ? 1 : 0;\n },\n 'pointer-events': function(p) {\n return text_showing(p) ? 'auto' : 'none';\n }\n });\n trans.selectAll('rect.port-label-background')\n .attr('opacity', function(p) {\n return text_showing(p) ? 1 : 0;\n });\n // bring all nodes which have labels showing to the front\n _node.filter(function(n) {\n var ports = _nodePorts[_style.parent().nodeKey.eval(n)];\n return ports && ports.some(text_showing);\n }).each(function() {\n this.parentNode.appendChild(this);\n });\n // bring all active ports to the front\n symbol.filter(function(p) {\n return p.state !== 'small';\n }).each(function() {\n this.parentNode.appendChild(this);\n });\n return trans;\n };\n _style.eventPort = function() {\n var parent = d3.select(d3.event.target.parentNode);\n if(d3.event.target.parentNode.tagName === 'g' && parent.classed('port'))\n return parent.datum();\n return null;\n };\n _style.drawPorts = function(ports, nodePorts, node) {\n _nodePorts = nodePorts; _node = node;\n var port = ports.data(function(n) {\n return nodePorts[_style.parent().nodeKey.eval(n)] || [];\n }, name_or_edge);\n port.exit().remove();\n var portEnter = port.enter().append('g')\n .attr({\n class: 'port',\n transform: port_transform\n });\n port.transition('port-position')\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .attr({\n transform: port_transform\n });\n\n var outline = port.selectAll('.port-outline').data(function(p) {\n return outline_fill(p) !== 'none' ? [p] : [];\n });\n outline.exit().remove();\n var outlineEnter = outline.enter().append(_style.outline().tag())\n .attr({\n class: 'port-outline',\n fill: outline_fill,\n 'stroke-width': outline_stroke_width,\n stroke: outline_stroke\n });\n if(_style.outline().init)\n outlineEnter.call(_style.outline().init);\n outlineEnter\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n // only position and size are animated (?) - anyway these are not on the node\n // and they are typically used to indicate selection which should be fast\n outline\n .attr({\n fill: outline_fill,\n 'stroke-width': outline_stroke_width,\n stroke: outline_stroke\n });\n outline.transition()\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n\n var symbolEnter = portEnter.append(_style.content().tag())\n .attr('class', 'port-symbol')\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n\n var symbol = port.select('.port-symbol');\n symbol.attr('fill', symbol_fill);\n symbol.transition()\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n\n var label = port.selectAll('text.port-label').data(function(p) {\n return _style.portLabel.eval(p) ? [p] : [];\n });\n label.exit().remove();\n var labelEnter = label.enter();\n labelEnter.append('rect')\n .attr({\n class: 'port-label-background',\n 'pointer-events': 'none'\n });\n labelEnter.append('text')\n .attr({\n class: 'port-label',\n 'dominant-baseline': 'middle',\n 'pointer-events': 'none',\n cursor: 'default',\n opacity: 0\n });\n label\n .each(function(p) {\n p.offset = (is_left(p) ? -1 : 1) * (_style.largeRadius.eval(p) + _style.portPadding.eval(p));\n })\n .attr({\n 'text-anchor': function(p) {\n return is_left(p) ? 'end' : 'start';\n },\n transform: function(p) {\n return 'translate(' + p.offset + ',0)';\n }\n })\n .text(_style.portLabel.eval)\n .each(function(p) {\n p.bbox = getBBoxNoThrow(this);\n });\n port.selectAll('rect.port-label-background')\n .attr({\n x: function(p) {\n return (p.offset < 0 ? p.offset - p.bbox.width : p.offset) - _style.portLabelPadding.eval(p).x;\n },\n y: function(p) {\n return -p.bbox.height/2 - _style.portLabelPadding.eval(p).y;\n },\n width: function(p) {\n return p.bbox.width + 2*_style.portLabelPadding.eval(p).x;\n },\n height: function(p) {\n return p.bbox.height + 2*_style.portLabelPadding.eval(p).y;\n },\n fill: 'white',\n opacity: 0\n });\n return _style;\n };\n\n _style.enableHover = function(whether) {\n if(!_drawConduct) {\n if(_style.parent()) {\n var draw = _style.parent().child('draw-graphs');\n if(draw)\n _drawConduct = draw.conduct();\n }\n }\n var namespace = 'grow-ports-' + _style.parent().portStyle.nameOf(this);\n if(whether) {\n _node.on('mouseover.' + namespace, function(n) {\n var nid = _style.parent().nodeKey.eval(n);\n var activePort = _style.eventPort();\n if(_nodePorts[nid])\n _nodePorts[nid].forEach(function(p) {\n p.state = p === activePort ? 'large' : activePort ? 'small' : 'medium';\n });\n var nids = _drawConduct && _drawConduct.hoverPort(activePort) || [];\n nids.push(nid);\n _style.animateNodes(nids);\n });\n _node.on('mouseout.' + namespace, function(n) {\n var nid = _style.parent().nodeKey.eval(n);\n if(_nodePorts[nid])\n _nodePorts[nid].forEach(function(p) {\n p.state = 'small';\n });\n var nids = _drawConduct && _drawConduct.hoverPort(null) || [];\n nids.push(nid);\n _style.animateNodes(nids);\n });\n } else {\n _node.on('mouseover.' + namespace, null);\n _node.on('mouseout.' + namespace, null);\n }\n return _style;\n };\n\n _style.parent = property(null);\n return _style;\n};\n\ndc_graph.symbol_port_style.outline = {};\ndc_graph.symbol_port_style.outline.circle = function() {\n return {\n tag: function() {\n return 'circle';\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr('r', function(p) { return rf(p); });\n };\n }\n };\n};\ndc_graph.symbol_port_style.outline.square = function() {\n return {\n tag: function() {\n return 'rect';\n },\n init: function(outlines) {\n // crispEdges can make outline off-center from symbols\n // outlines.attr('shape-rendering', 'crispEdges');\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr({\n x: function(p) { return -rf(p); },\n y: function(p) { return -rf(p); },\n width: function(p) { return 2*rf(p); },\n height: function(p) { return 2*rf(p); }\n });\n };\n }\n };\n};\ndc_graph.symbol_port_style.outline.arrow = function() {\n // offset needed for body in order to keep centroid at 0,0\n var left_portion = 3/4 - Math.PI/8;\n var _outline = {\n tag: function() {\n return 'path';\n },\n init: function(outlines) {\n //outlines.attr('shape-rendering', 'crispEdges');\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr('d', function(p) {\n var r = rf(p);\n if(!_outline.outie() || _outline.outie()(p.orig))\n return 'M' + -left_portion*r + ',' + -r + ' h' + r +\n ' l' + r + ',' + r + ' l' + -r + ',' + r +\n ' h' + -r +\n ' a' + r + ',' + r + ' 0 1,1 0,' + -2*r;\n else\n return 'M' + -(2-left_portion)*r + ',' + -r + ' h' + 2*r +\n ' a' + r + ',' + r + ' 0 1,1 0,' + 2*r +\n ' h' + -2*r +\n ' l' + r + ',' + -r + ' l' + -r + ',' + -r;\n });\n };\n },\n outie: property(null)\n };\n return _outline;\n};\n\ndc_graph.symbol_port_style.content = {};\ndc_graph.symbol_port_style.content.d3symbol = function() {\n var _symbol = {\n tag: function() {\n return 'path';\n },\n enum: function() {\n return d3.svg.symbolTypes;\n },\n draw: function(symf, rf) {\n return function(symbols) {\n symbols.attr('d', function(p) {\n var sym = symf(p), r = rf(p);\n return d3.svg.symbol()\n .type(sym)\n .size(r*r)\n ();\n });\n symbols.attr('transform', function(p) {\n switch(symf(p)) {\n case 'triangle-up':\n return 'translate(0, -1)';\n case 'triangle-down':\n return 'translate(0, 1)';\n default: return null;\n }\n });\n };\n }\n };\n return _symbol;\n};\ndc_graph.symbol_port_style.content.letter = function() {\n var _symbol = {\n tag: function() {\n return 'text';\n },\n enum: function() {\n return d3.range(65, 91).map(String.fromCharCode);\n },\n draw: function(symf, rf) {\n return function(symbols) {\n symbols.text(symf)\n .attr({\n 'dominant-baseline': 'middle',\n 'text-anchor': 'middle'\n });\n symbols.each(function(p) {\n if(!p.symbol_size)\n p.symbol_size = getBBoxNoThrow(this);\n });\n symbols.attr('transform', function(p) {\n return 'scale(' + (2*rf(p)/p.symbol_size.height) +\n ') translate(' + [0,2].join(',') + ')';\n });\n };\n }\n };\n return _symbol;\n};\n","function process_dot(callback, error, text) {\n if(error) {\n callback(error, null);\n return;\n }\n var nodes, edges;\n if(graphlibDot.parse) { // graphlib-dot 1.1.0 (where did i get it from?)\n var digraph = graphlibDot.parse(text);\n\n var nodeNames = digraph.nodes();\n 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 edges = [];\n edgeNames.forEach(function(e) {\n var edge = digraph._edges[e];\n edges.push(Object.assign({}, edge.value, {\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 } else { // graphlib-dot 0.6\n digraph = graphlibDot.read(text);\n\n nodeNames = digraph.nodes();\n 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 edges = [];\n digraph.edges().forEach(function(e) {\n edges.push(Object.assign({}, e.value, {\n source: digraph._nodes[e.v].id,\n target: digraph._nodes[e.w].id,\n sourcename: e.v,\n targetname: e.w\n }));\n });\n }\n var graph = {nodes: nodes, links: edges};\n callback(null, graph);\n}\n\nfunction process_dsv(callback, error, data) {\n if(error) {\n callback(error, null);\n return;\n }\n var keys = Object.keys(data[0]);\n var source = keys[0], target = keys[1];\n var nodes = d3.set(data.map(function(r) { return r[source]; }));\n data.forEach(function(r) {\n nodes.add(r[target]);\n });\n nodes = nodes.values().map(function(k) { return {name: k}; });\n callback(null, {\n nodes: nodes,\n links: data.map(function(r, i) {\n return {\n key: i,\n sourcename: r[source],\n targetname: r[target]\n };\n })\n });\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, process_dot.bind(null, callback));\n else if(/\\.psv$/.test(ignore_query(file1)))\n d3.dsv('|', 'text/plain')(file1, process_dsv.bind(null, callback));\n else if(/\\.csv$/.test(ignore_query(file1)))\n d3.csv(file1, process_dsv.bind(null, callback));\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","// collapse edges between same source and target\ndc_graph.deparallelize = function(group, sourceTag, targetTag) {\n return {\n all: function() {\n var ST = {};\n group.all().forEach(function(kv) {\n var source = kv.value[sourceTag],\n target = kv.value[targetTag];\n var dir = source < target;\n var min = dir ? source : target, max = dir ? target : source;\n ST[min] = ST[min] || {};\n var entry = ST[min][max] = ST[min][max] || {in: 0, out: 0, original: kv};\n if(dir)\n ++entry.in;\n else\n ++entry.out;\n });\n var ret = [];\n Object.keys(ST).forEach(function(source) {\n Object.keys(ST[source]).forEach(function(target) {\n var entry = ST[source][target];\n entry[sourceTag] = source;\n entry[targetTag] = target;\n ret.push({key: entry.original.key, value: entry});\n });\n });\n return ret;\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 pathStrength: 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).append('svg');\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(diagram, paths) {\n if(paths.length === 0) return;\n var xpadding = 30;\n var space = 30;\n var radius = 8;\n // set the height of SVG accordingly\n root.attr('height', 20*(paths.length+1))\n .attr('width', xpadding+(space+2*radius)*(paths.length/2+1)+20);\n\n root.selectAll('.path-selector').remove();\n\n var pathlist = root.selectAll('g.path-selector').data(paths);\n pathlist.enter()\n .append('g')\n .attr('class', 'path-selector')\n .attr(\"transform\", function(path, i) { return \"translate(0, \" + i*20 + \")\"; })\n .each(function(path_data, i) {\n var nodes = path_data.element_list.filter(function(d) { return d.element_type === 'node'; });\n // line\n var line = d3.select(this).append('line');\n line.attr('x1', xpadding+space)\n .attr('y1', radius+1)\n .attr('x2', xpadding+space*nodes.length)\n .attr('y2', radius+1)\n .attr('opacity', 0.4)\n .attr('stroke-width', 5)\n .attr('stroke', '#bdbdbd');\n\n // dots\n var path = d3.select(this).selectAll('circle').data(nodes);\n path.enter()\n .append('circle')\n .attr('cx', function(d, i) { return xpadding+space*(i+1); })\n .attr('cy', radius+1)\n .attr('r', radius)\n .attr('opacity', 0.4)\n .attr('fill', function(d) {\n // TODO path_selector shouldn't know the data structure of orignal node objects\n var regeneratedNode = {key:d.property_map.ecomp_uid, value:d.property_map};\n return diagram.nodeStroke()(regeneratedNode);\n });\n\n // label\n var text = d3.select(this).append('text');\n text.text('Path '+i)\n .attr('class', 'path_label')\n .attr('x', 0)\n .attr('y', radius*1.7)\n .on('mouseover', function() {\n highlight_paths_group.hover_changed([path_data]);\n })\n .on('mouseout', function() {\n highlight_paths_group.hover_changed(null);\n })\n .on('click', function() {\n highlight_paths_group.select_changed(toggle_paths(selected, [path_data]));\n });\n });\n pathlist.exit().transition(1000).attr('opacity', 0).remove();\n }\n\n function draw_hovered() {\n var is_hovered = contains_path(hovered);\n root.selectAll('g.path-selector')\n .each(function(d, i) {\n var textColor = is_hovered(d) ? '#e41a1c' : 'black';\n var lineColor = is_hovered(d) ? 'black' : '#bdbdbd';\n var opacity = is_hovered(d) ? '1' : '0.4';\n d3.select(this).select('.path_label').attr('fill', textColor);\n d3.select(this).selectAll('line')\n .attr('stroke', lineColor)\n .attr('opacity', opacity);\n d3.select(this).selectAll('circle').attr('opacity', opacity);\n });\n }\n\n function draw_selected() {\n var is_selected = contains_path(selected);\n root.selectAll('g.path-selector')\n .each(function(d, i) {\n var textWeight = is_selected(d) ? 'bold' : 'normal';\n var lineColor = is_selected(d) ? 'black' : '#bdbdbd';\n var opacity = is_selected(d) ? '1' : '0.4';\n d3.select(this).select('.path_label')\n .attr('font-weight', textWeight);\n d3.select(this).selectAll('line')\n .attr('stroke', lineColor)\n .attr('opacity', opacity);\n d3.select(this).selectAll('circle').attr('opacity', opacity);\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(diagram, 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 0) {\n var choice = Math.random();\n var n1, n2;\n if(!_nodes.length || choice < options.newComponentProb)\n n1 = new_node();\n else\n n1 = random_node();\n if(choice < options.newNodeProb)\n n2 = new_node();\n else\n n2 = random_node();\n if(n1 && n2) {\n var edge = {};\n edge[options.edgeKey] = options.edgeKeyGen(_edges.length);\n edge[options.sourceKey] = n1[options.nodeKey];\n edge[options.targetKey] = n2[options.nodeKey];\n edge[options.dashTag] = Math.floor(Math.random()*options.ndashes);\n if(options.log)\n console.log(n1[options.nodeKey] + ' -> ' + n2[options.nodeKey]);\n _edges.push(edge);\n }\n }\n },\n remove: function(N) {\n while(N-- > 0) {\n var choice = Math.random();\n if(choice < options.removeEdgeProb)\n _edges.splice(Math.floor(Math.random()*_edges.length), 1);\n else {\n var n = _nodes[Math.floor(Math.random()*_nodes.length)];\n var eis = [];\n _edges.forEach(function(e, ei) {\n if(e[options.sourceKey] === n[options.nodeKey] ||\n e[options.targetKey] === n[options.nodeKey])\n eis.push(ei);\n });\n eis.reverse().forEach(function(ei) {\n _edges.splice(ei, 1);\n });\n }\n }\n }\n };\n};\n","var dont_use_key = deprecation_warning('dc_graph.line_breaks now takes a string - d.key behavior is deprecated and will be removed in a later version');\n\ndc_graph.line_breaks = function(charexp, max_line_length) {\n var regexp = new RegExp(charexp, 'g');\n return function(s) {\n if(typeof s === 'object') { // backward compatibility\n dont_use_key();\n s = s.key;\n }\n var result;\n var line = '', lines = [], part, i = 0;\n do {\n result = regexp.exec(s);\n if(result)\n part = s.slice(i, regexp.lastIndex);\n else\n part = s.slice(i);\n if(line.length + part.length > 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/node_contents.js","src/diagram.js","src/engine.js","src/webworker_layout.js","src/graphviz_attrs.js","src/cola_layout.js","src/dagre_layout.js","src/tree_layout.js","src/graphviz_layout.js","src/d3_force_layout.js","src/d3v4_force_layout.js","src/flexbox_layout.js","src/manual_layout.js","src/place_ports.js","src/troubleshoot.js","src/validate.js","src/legend.js","src/constraint_pattern.js","src/tree_positions.js","src/tree_constraints.js","src/behavior.js","src/tip.js","src/dropdown.js","src/keyboard.js","src/edit_text.js","src/brush.js","src/select_things.js","src/select_nodes.js","src/select_edges.js","src/select_ports.js","src/move_nodes.js","src/fix_nodes.js","src/filter_selection.js","src/delete_things.js","src/delete_nodes.js","src/label_things.js","src/label_nodes.js","src/label_edges.js","src/highlight_things_group.js","src/highlight_things.js","src/highlight_neighbors_group.js","src/highlight_neighbors.js","src/highlight_radius.js","src/highlight_paths_group.js","src/highlight_paths.js","src/draw_spline_paths.js","src/expand_collapse.js","src/shown_hidden.js","src/expanded_hidden.js","src/draw_graphs.js","src/match_ports.js","src/match_opposites.js","src/wildcard_ports.js","src/symbol_port_style.js","src/load_graph.js","src/munge_graph.js","src/flat_group.js","src/convert.js","src/transform.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","function property_if(pred, curr) {\n return function(o, last) {\n return pred(o) ? curr(o) : last();\n };\n}\n\nfunction property_interpolate(value, curr) {\n return function(o, last) {\n return d3.interpolate(last(o), curr(o))(value(o));\n };\n}\n\nfunction multiply_properties(pred, props, blend) {\n var props2 = {};\n for(var p in props)\n props2[p] = blend(pred, param(props[p]));\n return props2;\n}\n\nfunction conditional_properties(pred, props) {\n return multiply_properties(pred, props, property_if);\n}\n\nfunction node_edge_conditions(npred, epred, props) {\n var nprops = {}, eprops = {}, badprops = [];\n for(var p in props) {\n if(/^node/.test(p))\n nprops[p] = props[p];\n else if(/^edge/.test(p))\n eprops[p] = props[p];\n else badprops.push(p);\n }\n if(badprops.length)\n console.error('only know how to deal with properties that start with \"node\" or \"edge\"', badprops);\n var props2 = npred ? conditional_properties(npred, nprops) : {};\n if(epred)\n Object.assign(props2, conditional_properties(epred, eprops));\n return props2;\n}\n\nfunction cascade(parent) {\n return function(level, add, props) {\n for(var p in props) {\n if(!parent[p])\n throw new Error('unknown attribute ' + p);\n parent[p].cascade(level, add ? props[p] : null);\n }\n return parent;\n };\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\n// outputs the array with adjacent identical lines collapsed to one\nfunction uniq(a) {\n var ret = [];\n a.forEach(function(x, i) {\n if(i === 0 || x !== a[i-1])\n ret.push(x);\n });\n return ret;\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\nif (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n value: function(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n\n // 5. Let k be 0.\n var k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, � kValue, k, O �)).\n // d. If testResult is true, return kValue.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return kValue;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return undefined.\n return undefined;\n }\n });\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\ndc_graph.event_coords = function(diagram) {\n var bound = diagram.root().node().getBoundingClientRect();\n return diagram.invertCoord([d3.event.clientX - bound.left,\n d3.event.clientY - bound.top]);\n};\n\nfunction promise_identity(x) {\n return Promise.resolve(x);\n}\n\n// http://stackoverflow.com/questions/7044944/jquery-javascript-to-detect-os-without-a-plugin\nvar is_a_mac = navigator.platform.toUpperCase().indexOf('MAC')!==-1;\n\n// https://stackoverflow.com/questions/16863917/check-if-class-exists-somewhere-in-parent-vanilla-js\nfunction ancestor_has_class(element, classname) {\n if(d3.select(element).classed(classname))\n return true;\n return element.parentElement && ancestor_has_class(element.parentElement, classname);\n}\n\nif (typeof SVGElement.prototype.contains == 'undefined') {\n SVGElement.prototype.contains = HTMLDivElement.prototype.contains;\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\n// basically, see if it's any simpler if we start from scratch\n// (well, of course it's simpler because we have less callbacks)\n// same caveats as above\ndc_graph.undirected_dfs = function(callbacks) { // {[comp, node], nodeid, sourceid, targetid}\n return function(nodes, edges) {\n var adjacencies = edges.reduce(function(m, e) {\n var tail = callbacks.sourceid(e),\n head = callbacks.targetid(e);\n if(!m[tail]) m[tail] = [];\n if(!m[head]) m[head] = [];\n m[tail].push(head);\n m[head].push(tail);\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 var found = {};\n function recurse(n) {\n var nid = callbacks.nodeid(n);\n callbacks.node(compid, n);\n found[nid] = true;\n if(adjacencies[nid])\n adjacencies[nid].forEach(function(adj) {\n if(!found[adj])\n recurse(nmap[adj]);\n });\n }\n var compid = 0;\n nodes.forEach(function(n) {\n if(!found[callbacks.nodeid(n)]) {\n callbacks.comp && callbacks.comp(compid);\n recurse(n);\n ++compid;\n }\n });\n };\n};\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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\n// as many as we can get from\n// http://www.graphviz.org/doc/info/shapes.html\ndc_graph.shape_presets = {\n egg: {\n // not really: an ovoid should be two half-ellipses stuck together\n // https://en.wikipedia.org/wiki/Oval\n generator: 'polygon',\n preset: function() {\n return {sides: 100, distortion: -0.25};\n }\n },\n triangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 3};\n }\n },\n rectangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4};\n }\n },\n diamond: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, rotation: 45};\n }\n },\n trapezium: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, distortion: -0.5};\n }\n },\n parallelogram: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, skew: 0.5};\n }\n },\n pentagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 5};\n }\n },\n hexagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 6};\n }\n },\n septagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 7};\n }\n },\n octagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 8};\n }\n },\n invtriangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 3, rotation: 180};\n }\n },\n invtrapezium: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, distortion: 0.5};\n }\n },\n square: {\n generator: 'polygon',\n preset: function() {\n return {\n sides: 4,\n regular: true\n };\n }\n },\n plain: {\n generator: 'rounded-rect',\n preset: function() {\n return {\n noshape: true\n };\n }\n }\n};\n\ndc_graph.shape_presets.box = dc_graph.shape_presets.rect = dc_graph.shape_presets.rectangle;\n\ndc_graph.available_shapes = function() {\n var shapes = Object.keys(dc_graph.shape_presets);\n return shapes.slice(0, shapes.length-1); // not including polygon\n};\n\nvar default_shape = {shape: 'ellipse'};\n\nfunction elaborate_shape(diagram, def) {\n if(typeof def === 'string') def = {shape: def};\n var shape = def.shape, def2 = Object.assign({}, def);\n delete def2.shape;\n if(shape === 'random') {\n var available = dc_graph.available_shapes(); // could include diagram.shape !== ellipse, polygon\n shape = available[Math.floor(Math.random()*available.length)];\n }\n else if(diagram.shape.enum().indexOf(shape) !== -1)\n return diagram.shape(shape).elaborate({shape: shape}, def2);\n if(!dc_graph.shape_presets[shape]) {\n console.warn('unknown shape ', shape);\n return default_shape;\n }\n var preset = dc_graph.shape_presets[shape].preset(def2);\n preset.shape = dc_graph.shape_presets[shape].generator;\n return diagram.shape(preset.shape).elaborate(preset, def2);\n}\n\nfunction infer_shape(diagram) {\n return function(n) {\n var def = diagram.nodeShape.eval(n) || default_shape;\n n.dcg_shape = elaborate_shape(diagram, def);\n n.dcg_shape.abstract = def;\n };\n}\n\nfunction shape_changed(diagram) {\n return function(n) {\n var def = diagram.nodeShape.eval(n) || default_shape;\n var old = n.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 node_label_padding(diagram, n) {\n var nlp = diagram.nodeLabelPadding.eval(n);\n if(typeof nlp === 'number' || typeof nlp === 'string')\n return {x: +nlp, y: +nlp};\n else return nlp;\n}\n\nfunction fit_shape(shape, diagram) {\n return function(content) {\n content.each(function(n) {\n var bbox = null;\n if((!shape.useTextSize || shape.useTextSize(n.dcg_shape)) && diagram.nodeFitLabel.eval(n)) {\n bbox = getBBoxNoThrow(this);\n bbox = {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n var padding;\n var content = diagram.nodeContent.eval(n);\n if(content && diagram.content(content).padding)\n padding = diagram.content(content).padding(n);\n else {\n var padding2 = node_label_padding(diagram, n);\n padding = {\n x: padding2.x*2,\n y: padding2.y*2\n };\n }\n bbox.width += padding.x;\n bbox.height += padding.y;\n n.bbox = bbox;\n }\n var r = 0, radii;\n if(!shape.useRadius || shape.useRadius(n.dcg_shape))\n r = diagram.nodeRadius.eval(n);\n if(bbox && bbox.width && bbox.height || shape.useTextSize && !shape.useTextSize(n.dcg_shape))\n radii = shape.calc_radii(n, r, bbox);\n else\n radii = {rx: r, ry: r};\n n.dcg_rx = radii.rx;\n n.dcg_ry = radii.ry;\n\n var w = radii.rx*2, h = radii.ry*2;\n // fixme: this is only consistent if regular || !squeeze\n // but we'd need to calculate polygon first in order to find out\n // (not a bad idea, just no time right now)\n if(w= 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(diagram, e, 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 sp = e.sourcePort.pos;\n tp = e.targetPort.pos;\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 diagram.shape(node.dcg_shape.shape).intersect_vec(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(e.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(e.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\nfunction is_one_segment(path) {\n return path.bezDegree === 1 && path.points.length === 2 ||\n path.bezDegree === 3 && path.points.length === 4;\n}\n\nfunction as_bezier3(path) {\n var p = path.points;\n if(path.bezDegree === 3) return p;\n else if(path.bezDegree === 1)\n return [\n {\n x: p[0].x,\n y: p[0].y\n },\n {\n x: p[0].x + (p[1].x - p[0].x)/3,\n y: p[0].y + (p[1].y - p[0].y)/3\n },\n {\n x: p[0].x + 2*(p[1].x - p[0].x)/3,\n y: p[0].y + 2*(p[1].y - p[0].y)/3\n },\n {\n x: p[1].x,\n y: p[1].y\n }\n ];\n else throw new Error('unknown bezDegree ' + path.bezDegree);\n}\n\n// from https://www.jasondavies.com/animated-bezier/\nfunction interpolate(d, p) {\n var r = [];\n for (var i=1; i 1) {\n var parts = split_bezier(p, 1/n);\n ret.push(parts[0][0], parts[0][1], parts[0][2]);\n p = parts[1];\n --n;\n }\n ret.push.apply(ret, p);\n return ret;\n}\n\ndc_graph.no_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n useTextSize: function() { return false; },\n useRadius: function() { return false; },\n usePaddingAndStroke: function() { return false; },\n intersect_vec: function(n, deltaX, deltaY) {\n return {x: 0, y: 0};\n },\n calc_radii: function(n, ry, bbox) {\n return {rx: 0, ry: 0};\n },\n create: function(nodeEnter) {\n },\n replace: function(nodeChanged) {\n },\n update: function(node) {\n }\n };\n return _shape;\n};\n\ndc_graph.ellipse_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n return point_on_ellipse(n.dcg_rx, n.dcg_ry, deltaX, deltaY);\n },\n calc_radii: function(n, ry, bbox) {\n // make sure we can fit height in r\n ry = Math.max(ry, bbox.height/2 + 5);\n var rx = bbox.width/2;\n\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/ry;\n rx = rx/Math.sqrt(1 - y_over_B*y_over_B);\n rx = Math.max(rx, ry);\n\n return {rx: rx, ry: ry};\n },\n create: function(nodeEnter) {\n nodeEnter.insert('ellipse', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('ellipse.node-shape')\n .attr(ellipse_attrs(_shape.parent()));\n }\n };\n return _shape;\n};\n\ndc_graph.polygon_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n return point_on_polygon(n.dcg_points, 0, 0, deltaX, deltaY);\n },\n calc_radii: function(n, ry, bbox) {\n // make sure we can fit height in r\n ry = Math.max(ry, bbox.height/2 + 5);\n var rx = bbox.width/2;\n\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 rx = rx*Math.sqrt(2)/Math.cos(Math.PI/(n.dcg_shape.sides||4));\n\n return {rx: rx, ry: ry};\n },\n create: function(nodeEnter) {\n nodeEnter.insert('path', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('path.node-shape')\n .attr(polygon_attrs(_shape.parent()));\n }\n };\n return _shape;\n};\n\ndc_graph.rounded_rectangle_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n preset = Object.assign({rx: 10, ry: 10}, preset);\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n var points = [\n {x: n.dcg_rx, y: n.dcg_ry},\n {x: n.dcg_rx, y: -n.dcg_ry},\n {x: -n.dcg_rx, y: -n.dcg_ry},\n {x: -n.dcg_rx, y: n.dcg_ry}\n ];\n return point_on_polygon(points, 0, 0, deltaX, deltaY); // not rounded\n },\n useRadius: function(shape) {\n return !shape.noshape;\n },\n calc_radii: function(n, ry, bbox) {\n var fity = bbox.height/2;\n // fixme: fudge to make sure text is not too tall for node\n if(!n.dcg_shape.noshape)\n fity += 5;\n return {\n rx: bbox.width / 2,\n ry: Math.max(ry, fity)\n };\n },\n create: function(nodeEnter) {\n nodeEnter.filter(function(n) {\n return !n.dcg_shape.noshape;\n }).insert('rect', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('rect.node-shape')\n .attr({\n x: function(n) {\n return -n.dcg_rx;\n },\n y: function(n) {\n return -n.dcg_ry;\n },\n width: function(n) {\n return 2*n.dcg_rx;\n },\n height: function(n) {\n return 2*n.dcg_ry;\n },\n rx: function(n) {\n return n.dcg_shape.rx + 'px';\n },\n ry: function(n) {\n return n.dcg_shape.ry + 'px';\n }\n });\n }\n };\n return _shape;\n};\n\n","dc_graph.text_contents = function() {\n var _contents = {\n parent: property(null),\n update: function(container) {\n var text = container.selectAll('text.node-label')\n .data(function(n) { return [n]; });\n text.enter().append('text')\n .attr('class', 'node-label');\n var tspan = text.selectAll('tspan').data(function(n) {\n var lines = _contents.parent().nodeLabel.eval(n);\n if(!lines)\n return [];\n else if(typeof lines === 'string')\n lines = [lines];\n var lineHeight = _contents.parent().nodeLineHeight();\n var first = 1 - ((lines.length - 1) * lineHeight + 1)/2;\n return lines.map(function(line, i) { return {node: n, line: line, yofs: (i==0 ? first : lineHeight) + 'em'}; });\n });\n tspan.enter().append('tspan');\n tspan.attr({\n 'text-anchor': 'start',\n x: 0\n }).text(function(s) { return s.line; });\n text\n .each(function(n) {\n n.xofs = 0;\n })\n .filter(function(n) {\n return _contents.parent().nodeLabelAlignment.eval(n) !== 'center';\n })\n .each(function(n) {\n var bbox = getBBoxNoThrow(this);\n n.bbox = {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n switch(_contents.parent().nodeLabelAlignment.eval(n)) {\n case 'left': n.xofs = -n.bbox.width/2;\n break;\n case 'right': n.xofs = n.bbox.width/2;\n break;\n }\n })\n .selectAll('tspan');\n tspan.attr({\n 'text-anchor': function(s) {\n switch(_contents.parent().nodeLabelAlignment.eval(s.node)) {\n case 'left': return 'start';\n case 'center': return 'middle';\n case 'right': return 'end';\n }\n return null;\n },\n x: function(s) {\n return s.node.xofs;\n },\n dy: function(d) { return d.yofs; }\n });\n\n tspan.exit().remove();\n text\n .attr('fill', _contents.parent().nodeLabelFill.eval);\n },\n textbox: function(container) {\n var bbox = getBBoxNoThrow(this.selectContent(container).node());\n return {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n },\n selectContent: function(container) {\n return container.select('text.node-label');\n }\n };\n return _contents;\n};\n\ndc_graph.with_icon_contents = function(contents, width, height) {\n var _contents = {\n parent: property(null).react(function(parent) {\n contents.parent(parent);\n }),\n padding: function(n) {\n var padding = node_label_padding(_contents.parent(), n);\n return {\n x: padding.x * 3,\n y: padding.y * 3\n };\n },\n update: function(container) {\n var g = container.selectAll('g.with-icon')\n .data(function(n) { return [n]; });\n var gEnter = g.enter();\n gEnter.append('g')\n .attr('class', 'with-icon')\n .append('image').attr({\n class: 'icon',\n width: width + 'px',\n height: height + 'px'\n });\n g.call(contents.update);\n contents.selectContent(g)\n .attr('transform', 'translate(' + width/2 + ')');\n g.selectAll('image.icon').attr({\n href: _contents.parent().nodeIcon.eval,\n x: function(n) {\n var totwid = width + contents.textbox(d3.select(this.parentNode)).width;\n return -totwid/2 - node_label_padding(_contents.parent(), n).x;\n },\n y: -height/2\n });\n },\n textbox: function(container) {\n var box = contents.textbox(container);\n box.x += width/2;\n return box;\n },\n selectContent: function(container) {\n return container.select('g.with-icon');\n }\n };\n return _contents;\n};\n\n","/**\n * `dc_graph.diagram` is a dc.js-compatible network visualization component. It registers in\n * the dc.js chart registry and its nodes and edges are generated from crossfilter groups. It\n * logically derives from the dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin},\n * but it does not physically derive from it since so much is different about network\n * visualization versus conventional charts.\n * @class diagram\n * @memberof dc_graph\n * @param {String|node} parent - Any valid\n * {@link https://github.com/mbostock/d3/wiki/Selections#selecting-elements d3 single selector}\n * specifying a dom block element such as a div; or a dom element.\n * @param {String} [chartGroup] - The name of the dc.js chart group this diagram instance\n * should be placed in. Filter interaction with a diagram will only trigger events and redraws\n * within the diagram's group.\n * @return {dc_graph.diagram}\n **/\ndc_graph.diagram = function (parent, chartGroup) {\n // different enough from regular dc charts that we don't use dc.baseMixin\n // but attempt to implement most of that interface, copying some of the most basic stuff\n var _diagram = dc.marginMixin({});\n _diagram.__dcFlag__ = dc.utils.uniqueId();\n _diagram.margins({left: 10, top: 10, right: 10, bottom: 10});\n var _svg = null, _defs = null, _g = null, _nodeLayer = null, _edgeLayer = null;\n var _dispatch = d3.dispatch('preDraw', 'data', 'end', 'start', 'render', 'drawn', 'receivedLayout', 'transitionsStarted', 'zoomed', 'reset');\n var _nodes = {}, _edges = {}; // hold state between runs\n var _ports = {}; // id = node|edge/id/name\n var _nodePorts; // ports sorted by node id\n var _stats = {};\n var _nodes_snapshot, _edges_snapshot;\n var _arrows = {};\n var _running = false; // for detecting concurrency issues\n var _translate = [0,0], _scale = 1;\n var _zoom, _animateZoom;\n var _anchor, _chartGroup;\n var _animating = false; // do not refresh during animations\n\n var _minWidth = 200;\n var _defaultWidthCalc = function (element) {\n var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n return (width && width > _minWidth) ? width : _minWidth;\n };\n var _widthCalc = _defaultWidthCalc;\n\n var _minHeight = 200;\n var _defaultHeightCalc = function (element) {\n var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n return (height && height > _minHeight) ? height : _minHeight;\n };\n var _heightCalc = _defaultHeightCalc;\n var _width, _height, _lastWidth, _lastHeight;\n\n function deprecate_layout_algo_parameter(name) {\n return function(value) {\n if(!_diagram.layoutEngine())\n _diagram.layoutAlgorithm('cola', true);\n var engine = _diagram.layoutEngine();\n if(engine.getEngine)\n engine = engine.getEngine();\n if(engine[name]) {\n console.warn('property is deprecated, call on layout engine instead: dc_graph.diagram.%c' + name,\n 'font-weight: bold');\n if(!arguments.length)\n return engine[name]();\n engine[name](value);\n } else {\n console.warn('property is deprecated, and is not supported for Warning: dc_graph.diagram.' + name + ' is deprecated, and it is not supported for the \"' + engine.layoutAlgorithm() + '\" layout algorithm: ignored.');\n if(!arguments.length)\n return null;\n }\n return this;\n };\n }\n\n /**\n * Set or get the height attribute of the diagram. If a value is given, then the diagram is\n * returned for method chaining. If no value is given, then the current value of the height\n * attribute will be returned.\n *\n * The width and height are applied to the SVG element generated by the diagram on render, or\n * when `resizeSvg` is called.\n *\n * If the value is falsy or a function, the height will be calculated the first time it is\n * needed, using the provided function or default height calculator, and then cached. The\n * default calculator uses the client rect of the element specified when constructing the chart,\n * with a minimum of `minHeight`. A custom calculator will be passed the element.\n *\n * If the value is `'auto'`, the height will be calculated every time the diagram is drawn, and\n * it will not be set on the `` element. Instead, the element will be pinned to the same\n * rectangle as its containing div using CSS.\n *\n * @method height\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [height=200]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.height = function (height) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_height)) {\n _lastHeight = _heightCalc(_diagram.root().node());\n if(_height === 'auto') // 'auto' => calculate every time\n return _lastHeight;\n // null/undefined => calculate once only\n _height = _lastHeight;\n }\n return _height;\n }\n if(dc.utils.isNumber(height) || !height || height === 'auto')\n _height = height;\n else if(typeof height === 'function') {\n _heightCalc = height;\n _height = undefined;\n }\n else throw new Error(\"don't know what to do with height type \" + typeof height + \" value \" + height);\n return _diagram;\n };\n _diagram.minHeight = function(height) {\n if(!arguments.length)\n return _minHeight;\n _minHeight = height;\n return _diagram;\n };\n /**\n * Set or get the width attribute of the diagram. If a value is given, then the diagram is\n * returned for method chaining. If no value is given, then the current value of the width\n * attribute will be returned.\n *\n * The width and height are applied to the SVG element generated by the diagram on render, or\n * when `resizeSvg` is called.\n *\n * If the value is falsy or a function, the width will be calculated the first time it is\n * needed, using the provided function or default width calculator, and then cached. The default\n * calculator uses the client rect of the element specified when constructing the chart, with a\n * minimum of `minWidth`. A custom calculator will be passed the element.\n *\n * If the value is `'auto'`, the width will be calculated every time the diagram is drawn, and\n * it will not be set on the `` element. Instead, the element will be pinned to the same\n * rectangle as its containing div using CSS.\n *\n * @method width\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [width=200]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.width = function (width) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_width)) {\n _lastWidth = _widthCalc(_diagram.root().node());\n if(_width === 'auto') // 'auto' => calculate every time\n return _lastWidth;\n // null/undefined => calculate once only\n _width = _lastWidth;\n }\n return _width;\n }\n if(dc.utils.isNumber(width) || !width || width === 'auto')\n _width = width;\n else if(typeof width === 'function') {\n _widthCalc = width;\n _width = undefined;\n }\n else throw new Error(\"don't know what to do with width type \" + typeof width + \" value \" + width);\n return _diagram;\n };\n _diagram.minWidth = function(width) {\n if(!arguments.length)\n return _minWidth;\n _minWidth = width;\n return _diagram;\n };\n\n /**\n * Get or set the root element, which is usually the parent div. Normally the root is set\n * when the diagram is constructed; setting it later may have unexpected consequences.\n * @method root\n * @memberof dc_graph.diagram\n * @instance\n * @param {node} [root=null]\n * @return {node}\n * @return {dc_graph.diagram}\n **/\n _diagram.root = property(null).react(function(e) {\n if(e.empty())\n console.log('Warning: parent selector ' + parent + \" doesn't seem to exist\");\n });\n\n /**\n * Get or set whether mouse wheel rotation or touchpad gestures will zoom the diagram, and\n * whether dragging on the background pans the diagram.\n * @method mouseZoomable\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [mouseZoomable=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.mouseZoomable = property(true);\n\n _diagram.zoomExtent = property([.1, 2]);\n\n /**\n * Whether zooming should only be enabled when the alt key is pressed.\n * @method altKeyZoom\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [altKeyZoom=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.modKeyZoom = _diagram.altKeyZoom = property(false);\n\n /**\n * Set or get the fitting strategy for the canvas, which affects how the\n * [viewBox](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox) and\n * [preserveAspectRatio](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio)\n * attributes get set. All options except `null` set the `viewBox` attribute.\n *\n * These options set the `viewBox` and adjust the scale and translate to implement the margins.\n * * `'default'` - uses the default behavior of `xMidYMid meet` (but with margins)\n * * `'vertical'` - fits the canvas vertically (with vertical margins) and centers it\n * horizontally. If the canvas is taller than the viewport, it will meet vertically and\n * there will be blank areas to the left and right. If the canvas is wider than the\n * viewport, it will be sliced.\n * * `'horizontal'` - fitst the canvas horizontally (with horizontal margins) and centers\n * it vertically. If the canvas is wider than the viewport, it will meet horizontally and\n * there will be blank areas above and below. If the canvas is taller than the viewport, it\n * will be sliced.\n *\n * Other options\n * * `null` - no attempt is made to fit the canvas to the svg element, `viewBox` is unset.\n * * another string - sets the `viewBox` and uses the string for `preserveAspectRatio`.\n * * function - will be called with (viewport width, viewport height, canvas width, canvas\n * height) and result will be used to set `preserveAspectRatio`.\n * @method fitStrategy\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [fitStrategy='default']\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.fitStrategy = property('default');\n\n /**\n * Do not allow panning (scrolling) to push the diagram out of the viewable area, if there\n * is space for it to be shown. */\n _diagram.restrictPan = property(false);\n\n /**\n * Auto-zoom behavior.\n * * `'always'` - zoom every time layout happens\n * * `'once'` - zoom the next time layout happens\n * * `null` - manual, call `zoomToFit` to fit\n * @method autoZoom\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [autoZoom=null]\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.autoZoom = property(null);\n _diagram.zoomToFit = function(animate) {\n if(!(_nodeLayer && _edgeLayer))\n return;\n var node = _diagram.selectAllNodes(),\n edge = _diagram.selectAllEdges();\n auto_zoom(node, edge, animate);\n };\n _diagram.zoomDuration = property(500);\n\n /**\n * Set or get the crossfilter dimension which represents the nodes (vertices) in the\n * diagram. Typically there will be a crossfilter instance for the nodes, and another for\n * the edges.\n *\n * *Dimensions are included on the diagram for similarity to dc.js, however the diagram\n * itself does not use them - but {@link dc_graph.filter_selection filter_selection} will.*\n * @method nodeDimension\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.dimension} [nodeDimension]\n * @return {crossfilter.dimension}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeDimension = property();\n\n /**\n * Set or get the crossfilter group which is the data source for the nodes in the\n * diagram. The diagram will use the group's `.all()` method to get an array of `{key,\n * value}` pairs, where the key is a unique identifier, and the value is usually an object\n * containing the node's attributes. All accessors work with these key/value pairs.\n *\n * If the group is changed or returns different values, the next call to `.redraw()` will\n * reflect the changes incrementally.\n *\n * It is possible to pass another object with the same `.all()` interface instead of a\n * crossfilter group.\n * @method nodeGroup\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.group} [nodeGroup]\n * @return {crossfilter.group}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeGroup = property();\n\n /**\n * Set or get the crossfilter dimension which represents the edges in the\n * diagram. Typically there will be a crossfilter instance for the nodes, and another for\n * the edges.\n *\n * *Dimensions are included on the diagram for similarity to dc.js, however the diagram\n * itself does not use them - but {@link dc_graph.filter_selection filter_selection} will.*\n * @method edgeDimension\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.dimension} [edgeDimension]\n * @return {crossfilter.dimension}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeDimension = property();\n\n /**\n * Set or get the crossfilter group which is the data source for the edges in the\n * diagram. See `.nodeGroup` above for the way data is loaded from a crossfilter group.\n *\n * The values in the key/value pairs returned by `diagram.edgeGroup().all()` need to\n * support, at a minimum, the {@link dc_graph.diagram#nodeSource nodeSource} and\n * {@link dc_graph.diagram#nodeTarget nodeTarget}, which should return the same\n * keys as the {@link dc_graph.diagram#nodeKey nodeKey}\n *\n * @method edgeGroup\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.group} [edgeGroup]\n * @return {crossfilter.group}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeGroup = property();\n\n _diagram.edgesInFront = property(false);\n\n /**\n * Set or get the function which will be used to retrieve the unique key for each node. By\n * default, this accesses the `key` field of the object passed to it. The keys should match\n * the keys returned by the {@link dc_graph.diagram#edgeSource edgeSource} and\n * {@link dc_graph.diagram#edgeTarget edgeTarget}.\n *\n * @method nodeKey\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [nodeKey=function(kv) { return kv.key }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeKey = _diagram.nodeKeyAccessor = property(function(kv) {\n return kv.key;\n });\n\n /**\n * Set or get the function which will be used to retrieve the unique key for each edge. By\n * default, this accesses the `key` field of the object passed to it.\n *\n * @method edgeKey\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeKey=function(kv) { return kv.key }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeKey = _diagram.edgeKeyAccessor = property(function(kv) {\n return kv.key;\n });\n\n /**\n * Set or get the function which will be used to retrieve the source (origin/tail) key of\n * the edge objects. The key must equal the key returned by the `.nodeKey` for one of the\n * nodes; if it does not, or if the node is currently filtered out, the edge will not be\n * displayed. By default, looks for `.value.sourcename`.\n *\n * @method edgeSource\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeSource=function(kv) { return kv.value.sourcename; }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeSource = _diagram.sourceAccessor = property(function(kv) {\n return kv.value.sourcename;\n });\n\n /**\n * Set or get the function which will be used to retrieve the target (destination/head) key\n * of the edge objects. The key must equal the key returned by the\n * {@link dc_graph.diagram#nodeKey nodeKey} for one of the nodes; if it does not, or if the node\n * is currently filtered out, the edge will not be displayed. By default, looks for\n * `.value.targetname`.\n * @method edgeTarget\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeTarget=function(kv) { return kv.value.targetname; }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeTarget = _diagram.targetAccessor = property(function(kv) {\n return kv.value.targetname;\n });\n\n _diagram.portDimension = property(null);\n _diagram.portGroup = property(null);\n _diagram.portNodeKey = property(null);\n _diagram.portEdgeKey = property(null);\n _diagram.portName = property(null);\n _diagram.portStyleName = property(null);\n _diagram.portElastic = property(true);\n\n _diagram.portStyle = named_children();\n\n _diagram.portBounds = property(null); // position limits, in radians\n\n _diagram.edgeSourcePortName = property(null);\n _diagram.edgeTargetPortName = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the radius, in pixels, for each\n * node. This determines the height of nodes,and if `nodeFitLabel` is false, the width too.\n * @method nodeRadius\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeRadius=25]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeRadius = _diagram.nodeRadiusAccessor = property(25);\n\n /**\n * Set or get the function which will be used to retrieve the stroke width, in pixels, for\n * drawing the outline of each node. According to the SVG specification, the outline will\n * be drawn half on top of the fill, and half outside. Default: 1\n * @method nodeStrokeWidth\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeStrokeWidth=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeStrokeWidth = _diagram.nodeStrokeWidthAccessor = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the stroke color for the outline\n * of each node.\n * @method nodeStroke\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeStroke='black']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeStroke = _diagram.nodeStrokeAccessor = property('black');\n\n _diagram.nodeStrokeDashArray = property(null);\n\n /**\n * If set, the value returned from `nodeFill` will be processed through this\n * {@link https://github.com/mbostock/d3/wiki/Scales d3.scale}\n * to return the fill color. If falsy, uses the identity function (no scale).\n * @method nodeFillScale\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|d3.scale} [nodeFillScale]\n * @return {Function|d3.scale}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFillScale = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the fill color for the body of each\n * node.\n * @method nodeFill\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeFill='white']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFill = _diagram.nodeFillAccessor = property('white');\n\n /**\n * Set or get the function which will be used to retrieve the opacity of each node.\n * @method nodeOpacity\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeOpacity=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeOpacity = property(1);\n\n /**\n * Set or get the padding or minimum distance, in pixels, for a node. (Will be distributed\n * to both sides of the node.)\n * @method nodePadding\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodePadding=6]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodePadding = property(6);\n\n\n /**\n * Set or get the padding, in pixels, for a node's label. If an object, should contain fields\n * `x` and `y`. If a number, will be applied to both x and y.\n * @method nodeLabelPadding\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number|Object} [nodeLabelPadding=0]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabelPadding = property(0);\n\n /**\n * Set or get the line height for nodes with multiple lines of text, in ems.\n * @method nodeLineHeight\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeLineHeight=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLineHeight = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the label text to display in each\n * node. By default, looks for a field `label` or `name` inside the `value` field.\n * @method nodeLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeLabel]\n * @return {Function|String}\n * @example\n * // Default behavior\n * diagram.nodeLabel(function(kv) {\n * return kv.value.label || kv.value.name;\n * });\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabel = _diagram.nodeLabelAccessor = property(function(kv) {\n return kv.value.label || kv.value.name;\n });\n\n _diagram.nodeLabelAlignment = property('center');\n\n /**\n * Set or get the function which will be used to retrieve the label fill color. Default: null\n * @method nodeLabelFill\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeLabelFill=null]\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabelFill = _diagram.nodeLabelFillAccessor = property(null);\n\n /**\n * Whether to fit the node shape around the label\n * @method nodeFitLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Boolean} [nodeFitLabel=true]\n * @return {Function|Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFitLabel = _diagram.nodeFitLabelAccessor = property(true);\n\n /**\n * The shape to use for drawing each node, specified as an object with at least the field\n * `shape`. The names of shapes are mostly taken\n * [from graphviz](http://www.graphviz.org/doc/info/shapes.html); currently ellipse, egg,\n * triangle, rectangle, diamond, trapezium, parallelogram, pentagon, hexagon, septagon, octagon,\n * invtriangle, invtrapezium, square, polygon are supported.\n *\n * If `shape = polygon`:\n * * `sides`: number of sides for a polygon\n * @method nodeShape\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Object} [nodeShape={shape: 'ellipse'}]\n * @return {Function|Object}\n * @return {dc_graph.diagram}\n * @example\n * // set shape to diamond or parallelogram based on flag\n * diagram.nodeShape(function(kv) {\n * return {shape: kv.value.flag ? 'diamond' : 'parallelogram'};\n * });\n **/\n _diagram.nodeShape = property(default_shape);\n\n // for defining custom (and standard) shapes\n _diagram.shape = named_children();\n\n _diagram.shape('nothing', dc_graph.no_shape());\n _diagram.shape('ellipse', dc_graph.ellipse_shape());\n _diagram.shape('polygon', dc_graph.polygon_shape());\n _diagram.shape('rounded-rect', dc_graph.rounded_rectangle_shape());\n\n _diagram.nodeContent = property('text');\n _diagram.content = named_children();\n _diagram.content('text', dc_graph.text_contents());\n\n // really looks like these should reside in an open namespace - this used only by an extension\n // but it's no less real than any other computed property\n _diagram.nodeIcon = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the node title, usually rendered\n * as a tooltip. By default, uses the key of the node.\n * @method nodeTitle\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeTitle]\n * @return {Function|String}\n * @example\n * // Default behavior\n * diagram.nodeTitle(function(kv) {\n * return _diagram.nodeKey()(kv);\n * });\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeTitle = _diagram.nodeTitleAccessor = property(function(kv) {\n return _diagram.nodeKey()(kv);\n });\n\n /**\n * By default, nodes are added to the layout in the order that `.nodeGroup().all()` returns\n * them. If specified, `.nodeOrdering` provides an accessor that returns a key to sort the\n * nodes on. *It would be better not to rely on ordering to affect layout, but it may\n * affect the layout in some cases.*\n * @method nodeOrdering\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [nodeOrdering=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeOrdering = property(null);\n\n /**\n * Specify an accessor that returns an {x,y} coordinate for a node that should be\n * {@link https://github.com/tgdwyer/WebCola/wiki/Fixed-Node-Positions fixed in place},\n * and returns falsy for other nodes.\n * @method nodeFixed\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Object} [nodeFixed=null]\n * @return {Function|Object}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFixed = _diagram.nodeFixedAccessor = property(null);\n\n\n /**\n * Set or get the function which will be used to retrieve the stroke color for the edges.\n * @method edgeStroke\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeStroke='black']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeStroke = _diagram.edgeStrokeAccessor = property('black');\n\n /**\n * Set or get the function which will be used to retrieve the stroke width for the edges.\n * @method edgeStrokeWidth\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeStrokeWidth=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeStrokeWidth = _diagram.edgeStrokeWidthAccessor = property(1);\n\n _diagram.edgeStrokeDashArray = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the edge opacity, a number from 0\n * to 1.\n * @method edgeOpacity\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeOpacity=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeOpacity = _diagram.edgeOpacityAccessor = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the edge label text. The label is\n * displayed when an edge is hovered over. By default, uses the `edgeKey`.\n * @method edgeLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeLabel]\n * @example\n * // Default behavior\n * diagram.edgeLabel(function(e) {\n * return _diagram.edgeKey()(e);\n * });\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeLabel = _diagram.edgeLabelAccessor = property(function(e) {\n return _diagram.edgeKey()(e);\n });\n\n /**\n * Set or get the function which will be used to retrieve the name of the arrowhead to use\n * for the target/ head/destination of the edge. Arrow symbols can be specified with\n * `.defineArrow()`. Return null to display no arrowhead.\n * @method edgeArrowhead\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeArrowhead='vee']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowhead = _diagram.edgeArrowheadAccessor = property('vee');\n\n /**\n * Set or get the function which will be used to retrieve the name of the arrow tail to use\n * for the tail/source of the edge. Arrow symbols can be specified with\n * `.defineArrow()`. Return null to display no arrowtail.\n * @method edgeArrowtail\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeArrowtail=null]\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowtail = _diagram.edgeArrowtailAccessor = property(null);\n\n /**\n * Multiplier for arrow size.\n * @method edgeArrowSize\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeArrowSize=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowSize = property(1);\n\n /**\n * To draw an edge but not have it affect the layout, specify a function which returns\n * false for that edge. By default, will return false if the `notLayout` field of the edge\n * value is truthy, true otherwise.\n * @method edgeIsLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Boolean} [edgeIsLayout]\n * @example\n * // Default behavior\n * diagram.edgeIsLayout(function(kv) {\n * return !kv.value.notLayout;\n * });\n * @return {Function|Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeIsLayout = _diagram.edgeIsLayoutAccessor = property(function(kv) {\n return !kv.value.notLayout;\n });\n\n // if false, don't draw or layout the edge. this is not documented because it seems like\n // the interface could be better and this combined with edgeIsLayout. (currently there is\n // no way to layout but not draw an edge.)\n _diagram.edgeIsShown = property(true);\n\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 *\n * **Deprecated**: Use {@link dc_graph.cola_layout#lengthStrategy cola_layout.lengthStrategy} instead.\n * @method lengthStrategy\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [lengthStrategy='symmetric']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.lengthStrategy = deprecate_layout_algo_parameter('lengthStrategy');\n\n /**\n * When the `.lengthStrategy` is 'individual', this accessor will be used to read the\n * length of each edge. By default, reads the `distance` field of the edge. If the\n * distance is falsy, uses the `baseLength`.\n * @method edgeLength\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeLength]\n * @example\n * // Default behavior\n * diagram.edgeLength(function(kv) {\n * return kv.value.distance;\n * });\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeLength = _diagram.edgeDistanceAccessor = property(function(kv) {\n return kv.value.distance;\n });\n\n /**\n * This should be equivalent to rankdir and ranksep in the dagre/graphviz nomenclature, but for\n * now it is separate.\n *\n * **Deprecated**: use {@link dc_graph.cola_layout#flowLayout cola_layout.flowLayout} instead.\n * @method flowLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Object} [flowLayout]\n * @example\n * // No flow (default)\n * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.flowLayout({axis: 'x', minSeparation: 200})\n **/\n _diagram.flowLayout = deprecate_layout_algo_parameter('flowLayout');\n\n /**\n * Direction to draw ranks. Currently for dagre and expand_collapse, but I think cola could be\n * generated from graphviz-style since it is more general.\n *\n * **Deprecated**: use {@link dc_graph.dagre_layout#rankdir dagre_layout.rankdir} instead.\n * @method rankdir\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [rankdir]\n **/\n _diagram.rankdir = deprecate_layout_algo_parameter('rankdir');\n\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 *\n * **Deprecated**: use {@link dc_graph.cola_layout#baseLength cola_layout.baseLength} instead.\n * @method baseLength\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [baseLength]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.baseLength = deprecate_layout_algo_parameter('baseLength');\n\n /**\n * Gets or sets the transition duration, the length of time each change to the diagram will\n * be animated.\n * @method transitionDuration\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [transitionDuration=500]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.transitionDuration = property(500);\n\n /**\n * How transitions should be split into separate animations to emphasize\n * the delete, modify, and insert operations:\n * * `none`: modify and insert operations animate at the same time\n * * `modins`: modify operations happen before inserts\n * * `insmod`: insert operations happen before modifies\n *\n * Deletions always happen before/during layout computation.\n * @method stageTransitions\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [stageTransitions='none']\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.stageTransitions = property('none');\n\n /**\n * The delete transition happens simultaneously with layout, which can take longer\n * than the transition duration. Delaying it can bring it closer to the other\n * staged transitions.\n * @method deleteDelay\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [deleteDelay=0]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.deleteDelay = property(0);\n\n /**\n * Whether to put connected components each in their own group, to stabilize layout.\n * @method groupConnected\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [stageTransitions=false]\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.groupConnected = deprecate_layout_algo_parameter('groupConnected');\n\n /**\n * Gets or sets the maximum time spent doing layout for a render or redraw. Set to 0 for no\n * limit.\n * @method timeLimit\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [timeLimit=0]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.timeLimit = property(0);\n\n /**\n * Gets or sets a function which will be called with the current nodes and edges on each\n * redraw in order to derive new layout constraints. The constraints are built from scratch\n * on each redraw.\n *\n * This can be used to generate alignment (rank) or axis constraints. By default, no\n * constraints will be added, although cola.js uses constraints internally to implement\n * flow and overlap prevention. See\n * {@link https://github.com/tgdwyer/WebCola/wiki/Constraints the cola.js wiki}\n * for more details.\n *\n * For convenience, dc.graph.js implements a other constraints on top of those implemented\n * by cola.js:\n * * 'ordering' - the nodes will be ordered on the specified `axis` according to the keys\n * returned by the `ordering` function, by creating separation constraints using the\n * specified `gap`.\n * * 'circle' - (experimental) the nodes will be placed in a circle using \"wheel\"\n * edge lengths similar to those described in\n * {@link http://www.csse.monash.edu.au/~tdwyer/Dwyer2009FastConstraints.pdf Scalable, Versatile, and Simple Constrained Graph Layout}\n * *Although this is not as performant or stable as might be desired, it may work for\n * simple cases. In particular, it should use edge length *constraints*, which don't yet\n * exist in cola.js.*\n *\n * Because it is tedious to write code to generate constraints for a graph, **dc.graph.js**\n * also includes a {@link #dc_graph+constraint_pattern constraint generator} to produce\n * this constrain function, specifying the constraints themselves in a graph.\n * @method constrain\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [constrain]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.constrain = property(function(nodes, edges) {\n return [];\n });\n\n /**\n * If there are multiple edges between the same two nodes, start them this many pixels away\n * from the original so they don't overlap.\n * @method parallelEdgeOffset\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [parallelEdgeOffset=10]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.parallelEdgeOffset = property(10);\n\n /**\n * By default, edges are added to the layout in the order that `.edgeGroup().all()` returns\n * them. If specified, `.edgeOrdering` provides an accessor that returns a key to sort the\n * edges on.\n *\n * *It would be better not to rely on ordering to affect layout, but it may affect the\n * layout in some cases. (Probably less than node ordering, but it does affect which\n * parallel edge is which.)*\n * @method edgeOrdering\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeOrdering=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeOrdering = property(null);\n\n _diagram.edgeSort = property(null);\n\n _diagram.cascade = cascade(_diagram);\n\n /**\n * Currently there are some bugs when the same instance of cola.js is used multiple\n * times. (In particular, overlaps between nodes may not be eliminated\n * {@link https://github.com/tgdwyer/WebCola/issues/118 if cola is not reinitialized}\n * This flag can be set true to construct a new cola layout object on each redraw. However,\n * layout seems to be more stable if this is set false, so hopefully this will be fixed\n * soon.\n * @method initLayoutOnRedraw\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [initLayoutOnRedraw=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.initLayoutOnRedraw = property(false);\n\n /**\n * Whether to perform layout when the data is unchanged from the last redraw.\n * @method layoutUnchanged\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [layoutUnchanged=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.layoutUnchanged = property(false);\n\n /**\n * When `layoutUnchanged` is false, this will force layout to happen again. This may be needed\n * when changing a parameter but not changing the topology of the graph. (Yes, probably should\n * not be necessary.)\n * @method relayout\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _diagram.relayout = function() {\n _nodes_snapshot = _edges_snapshot = null;\n return this;\n };\n\n /**\n * Function to call to generate an initial layout. Takes (diagram, nodes, edges)\n *\n * **Deprecated**: The only layout that was using this was `tree_positions` and it never\n * worked as an initialization step for cola, as was originally intended. Now that\n * `tree_layout` is a layout algorithm, this should go away.\n *\n * In the future, there will be support for chaining layout algorithms. But that will be a\n * matter of composing them into a super-algorithm, not a special step like this was.\n * @method initialLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [initialLayout=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.initialLayout = deprecated_property('initialLayout is deprecated - use layout algorithms instead', null);\n\n _diagram.initialOnly = deprecated_property('initialOnly is deprecated - see the initialLayout deprecation notice in the documentation', false);\n\n /**\n * By default, all nodes are included, and edges are only included if both end-nodes are\n * visible. If `.induceNodes` is set, then only nodes which have at least one edge will be\n * shown.\n * @method induceNodes\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [induceNodes=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.induceNodes = property(false);\n\n /**\n * If this flag is true, the positions of nodes and will be updated while layout is\n * iterating. If false, the positions will only be updated once layout has\n * stabilized. Note: this may not be compatible with transitionDuration.\n * @method showLayoutSteps\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [showLayoutSteps=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.showLayoutSteps = property(false);\n\n /**\n * Assigns a legend object which will be displayed within the same SVG element and\n * according to the visual encoding of this diagram.\n * @method legend\n * @memberof dc_graph.diagram\n * @instance\n * @param {Object} [legend=null]\n * @return {Object}\n * @return {dc_graph.diagram}\n **/\n // (pre-deprecated; see below)\n\n /**\n * Specifies another kind of child layer or interface. For example, this can\n * be used to display tooltips on nodes using `dc_graph.tip`.\n\n * The child needs to support a `parent` method, the diagram to modify.\n * @method child\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [id] - the name of the child to modify or add\n * @param {Object} [object] - the child object to add, or null to remove\n * @example\n * // Display tooltips on node hover, via the d3-tip library\n * var tip = dc_graph.tip()\n * tip.content(function(n, k) {\n * // you can do an asynchronous call here, e.g. d3.json, if you need\n * // to fetch data to show the tooltip - just call k() with the content\n * k(\"This is \" + n.orig.value.name + \"\");\n * });\n * diagram.child('tip', tip);\n * @return {dc_graph.diagram}\n **/\n _diagram.mode = _diagram.child = named_children();\n\n // for backward compatibility; use .child() for more control & multiple legends\n _diagram.legend = function(_) {\n if(!arguments.length)\n return _diagram.child('node-legend');\n _diagram.child('node-legend', _);\n return _diagram;\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 _diagram.layoutAlgorithm = function(value, skipWarning) {\n if(!arguments.length)\n return _diagram.layoutEngine() ? _diagram.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 _diagram.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 _diagram.layoutEngine = property(null).react(function(val) {\n if(val && val.parent)\n val.parent(_diagram);\n if(_g) { // already rendered\n // remove any calculated points, if engine did that\n Object.keys(_edges).forEach(function(k) {\n _edges[k].cola.points = null;\n });\n // initialize engine\n initLayout(val);\n }\n });\n\n // S-spline any edges that are not going in this direction\n _diagram.enforceEdgeDirection = property(null);\n\n _diagram.tickSize = deprecate_layout_algo_parameter('tickSize');\n\n\n _diagram.uniqueId = function() {\n return _diagram.anchorName().replace(/[ .#=\\[\\]\"]/g, '-');\n };\n\n _diagram.edgeId = function(e) {\n return 'edge-' + _diagram.edgeKey.eval(e).replace(/[^\\w-_]/g, '-');\n };\n\n _diagram.arrowId = function(e, kind) {\n return 'arrow-' + kind + '-' + _diagram.uniqueId() + '-' + _diagram.edgeId(e);\n };\n _diagram.textpathId = function(e) {\n return 'textpath-' + _diagram.uniqueId() + '-' + _diagram.edgeId(e);\n };\n\n // this kind of begs a (meta)graph ADT\n // instead of munging this into the diagram\n _diagram.getNode = function(id) {\n return _nodes[id] ? _nodes[id].orig : null;\n };\n\n _diagram.getWholeNode = function(id) {\n return _nodes[id] ? _nodes[id] : null;\n };\n\n _diagram.getEdge = function(id) {\n return _edges[id] ? _edges[id].orig : null;\n };\n\n _diagram.getWholeEdge = function(id) {\n return _edges[id] ? _edges[id] : null;\n };\n\n // again, awful, we need an ADT\n _diagram.getPort = function(nid, eid, name) {\n return _ports[port_name(nid, eid, name)];\n };\n\n _diagram.nodePorts = function() {\n return _nodePorts;\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 _diagram.handleDisconnected = deprecate_layout_algo_parameter('handleDisconnected');\n\n function initLayout(engine) {\n if(!_diagram.layoutEngine())\n _diagram.layoutAlgorithm('cola', true);\n (engine || _diagram.layoutEngine()).init({\n width: _diagram.width(),\n height: _diagram.height()\n });\n }\n\n _diagram.forEachChild = function(node, children, idf, f) {\n children.enum().forEach(function(key) {\n f(children(key),\n node.filter(function(n) { return idf(n) === key; }));\n });\n };\n _diagram.forEachShape = function(node, f) {\n _diagram.forEachChild(node, _diagram.shape, function(n) { return n.dcg_shape.shape; }, f);\n };\n _diagram.forEachContent = function(node, f) {\n _diagram.forEachChild(node, _diagram.content, _diagram.nodeContent.eval, f);\n };\n _diagram.renderNode = _diagram._enterNode = function(nodeEnter) {\n if(_diagram.nodeTitle())\n nodeEnter.append('title');\n nodeEnter.each(infer_shape(_diagram));\n _diagram.forEachShape(nodeEnter, function(shape, node) {\n node.call(shape.create);\n });\n return _diagram;\n };\n _diagram.redrawNode = _diagram._updateNode = function(node) {\n var changedShape = node.filter(shape_changed(_diagram));\n changedShape.selectAll('.node-shape').remove();\n changedShape.each(infer_shape(_diagram));\n _diagram.forEachShape(changedShape, function(shape, node) {\n node.call(shape.create);\n });\n node.select('title')\n .text(_diagram.nodeTitle.eval);\n _diagram.forEachContent(node, function(contentType, node) {\n node.call(contentType.update);\n _diagram.forEachShape(contentType.selectContent(node), function(shape, content) {\n content\n .call(fit_shape(shape, _diagram));\n });\n });\n _diagram.forEachShape(node, function(shape, node) {\n node.call(shape.update);\n });\n node.select('.node-shape')\n .attr({\n stroke: _diagram.nodeStroke.eval,\n 'stroke-width': _diagram.nodeStrokeWidth.eval,\n 'stroke-dasharray': _diagram.nodeStrokeDashArray.eval,\n fill: compose(_diagram.nodeFillScale() || identity, _diagram.nodeFill.eval)\n });\n return _diagram;\n };\n _diagram.redrawEdge = _diagram._updateEdge = function(edge) {\n edge\n .attr('stroke', _diagram.edgeStroke.eval)\n .attr('stroke-width', _diagram.edgeStrokeWidth.eval)\n .attr('stroke-dasharray', _diagram.edgeStrokeDashArray.eval)\n .attr('marker-end', function(e) {\n var name = _diagram.edgeArrowhead.eval(e),\n id = edgeArrow(e, 'head', name);\n return id ? 'url(#' + id + ')' : null;\n })\n .attr('marker-start', function(e) {\n var name = _diagram.edgeArrowtail.eval(e),\n arrow_id = edgeArrow(e, 'tail', name);\n return name ? 'url(#' + arrow_id + ')' : null;\n })\n .each(function(e) {\n var fillEdgeStroke = _diagram.edgeStroke.eval(e);\n d3.selectAll('#' + _diagram.arrowId(e, 'head'))\n .attr('fill', _diagram.edgeStroke.eval(e));\n d3.selectAll('#' + _diagram.arrowId(e, 'tail'))\n .attr('fill', _diagram.edgeStroke.eval(e));\n });\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 _diagram.stagedDuration = function() {\n return (_diagram.stageTransitions() !== 'none') ?\n _diagram.transitionDuration() / 2 :\n _diagram.transitionDuration();\n };\n\n _diagram.stagedDelay = function(is_enter) {\n return _diagram.stageTransitions() === 'none' ||\n _diagram.stageTransitions() === 'modins' === !is_enter ?\n 0 :\n _diagram.transitionDuration() / 2;\n };\n\n _diagram.selectAllNodes = function(selector) {\n selector = selector || '.node';\n return _nodeLayer && _nodeLayer.selectAll(selector).filter(function(n) {\n return !n.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.selectAllEdges = function(selector) {\n selector = selector || '.edge';\n return _edgeLayer && _edgeLayer.selectAll(selector).filter(function(e) {\n return !e.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.selectAllDefs = function(selector) {\n return _defs && _defs.selectAll(selector).filter(function(def) {\n return !def.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.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 _diagram.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 _diagram.startLayout();\n };\n\n _diagram.startLayout = function () {\n var nodes = _diagram.nodeGroup().all();\n var edges = _diagram.edgeGroup().all();\n var ports = _diagram.portGroup() ? _diagram.portGroup().all() : [];\n if(_running) {\n throw new Error('dc_graph.diagram.redraw already running!');\n }\n _running = true;\n\n var oldWidth = _lastWidth, oldHeight = _lastHeight;\n var newWidth = _diagram.width(), newHeight = _diagram.height();\n if(oldWidth !== newWidth || oldHeight !== newHeight) {\n var scale = _zoom.scale(), translate = _zoom.translate();\n _zoom.scale(1).translate([0,0]);\n var xDomain = _diagram.x().domain(), yDomain = _diagram.y().domain();\n _diagram.x()\n .domain([xDomain[0], xDomain[0] + (xDomain[1] - xDomain[0])*newWidth/oldWidth])\n .range([0, newWidth]);\n _diagram.y()\n .domain([yDomain[0], yDomain[0] + (yDomain[1] - yDomain[0])*newHeight/oldHeight])\n .range([0, newHeight]);\n _zoom\n .x(_diagram.x()).y(_diagram.y())\n .translate(translate).scale(scale);\n }\n\n if(_diagram.initLayoutOnRedraw())\n initLayout();\n _diagram.layoutEngine().stop();\n _dispatch.preDraw();\n\n // ordering shouldn't matter, but we support ordering in case it does\n if(_diagram.nodeOrdering()) {\n nodes = crossfilter.quicksort.by(_diagram.nodeOrdering())(nodes.slice(0), 0, nodes.length);\n }\n if(_diagram.edgeOrdering()) {\n edges = crossfilter.quicksort.by(_diagram.edgeOrdering())(edges.slice(0), 0, edges.length);\n }\n\n var wnodes = regenerate_objects(_nodes, nodes, null, function(v) {\n return _diagram.nodeKey()(v);\n }, function(v1, v) {\n v1.orig = v;\n v1.cola = v1.cola || {};\n v1.cola.dcg_nodeKey = _diagram.nodeKey.eval(v1);\n _diagram.layoutEngine().populateLayoutNode(v1.cola, v1);\n });\n var wedges = regenerate_objects(_edges, edges, null, function(e) {\n return _diagram.edgeKey()(e);\n }, function(e1, e) {\n e1.orig = e;\n e1.cola = e1.cola || {};\n e1.cola.dcg_edgeKey = _diagram.edgeKey.eval(e1);\n e1.cola.dcg_edgeSource = _diagram.edgeSource.eval(e1);\n e1.cola.dcg_edgeTarget = _diagram.edgeTarget.eval(e1);\n e1.source = _nodes[e1.cola.dcg_edgeSource];\n e1.target = _nodes[e1.cola.dcg_edgeTarget];\n e1.cola.dcg_edgeLength = _diagram.edgeLength.eval(e1);\n e1.sourcePort = e1.sourcePort || {};\n e1.targetPort = e1.targetPort || {};\n _diagram.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(_diagram.edgeIsShown.eval);\n\n // now we know which ports should exist\n var needports = wedges.map(function(e) {\n if(_diagram.edgeSourcePortName.eval(e))\n return port_name(_diagram.edgeSource.eval(e), null, _diagram.edgeSourcePortName.eval(e));\n else return port_name(null, _diagram.edgeKey.eval(e), 'source');\n });\n needports = needports.concat(wedges.map(function(e) {\n if(_diagram.edgeTargetPortName.eval(e))\n return port_name(_diagram.edgeTarget.eval(e), null, _diagram.edgeTargetPortName.eval(e));\n else return port_name(null, _diagram.edgeKey.eval(e), 'target');\n }));\n // remove any invalid ports so they don't crash in confusing ways later\n ports = ports.filter(function(p) {\n return _diagram.portNodeKey() && _diagram.portNodeKey()(p) ||\n _diagram.portEdgeKey() && _diagram.portEdgeKey()(p);\n });\n var wports = regenerate_objects(_ports, ports, needports, function(p) {\n return port_name(_diagram.portNodeKey() && _diagram.portNodeKey()(p),\n _diagram.portEdgeKey() && _diagram.portEdgeKey()(p),\n _diagram.portName()(p));\n }, function(p1, p) {\n p1.orig = p;\n if(p1.named)\n p1.edges = [];\n }, function(k, p) {\n console.assert(k, 'should have screened out invalid ports');\n // it's dumb to parse the id we just created. as usual, i blame the lack of metagraphs\n var parse = split_port_name(k);\n if(parse.nodeKey) {\n p.node = _nodes[parse.nodeKey];\n p.named = true;\n }\n else {\n var e = _edges[parse.edgeKey];\n p.node = e[parse.name];\n p.edges = [e];\n p.named = false;\n }\n p.name = parse.name;\n });\n // remove any ports where the end-node was not found, to avoid crashing elsewhere\n wports = wports.filter(function(p) { return p.node; });\n\n // find all edges for named ports\n wedges.forEach(function(e) {\n var name = _diagram.edgeSourcePortName.eval(e);\n if(name)\n _ports[port_name(_diagram.nodeKey.eval(e.source), null, name)].edges.push(e);\n name = _diagram.edgeTargetPortName.eval(e);\n if(name)\n _ports[port_name(_diagram.nodeKey.eval(e.target), null, name)].edges.push(e);\n });\n\n // optionally, delete nodes that have no edges\n if(_diagram.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 // announce new data\n _dispatch.data(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n _stats = {nnodes: wnodes.length, nedges: wedges.length};\n\n // fixed nodes may have been affected by .data() so calculate now\n wnodes.forEach(function(v) {\n if(_diagram.nodeFixed())\n v.cola.dcg_nodeFixed = _diagram.nodeFixed.eval(v);\n });\n\n // annotate parallel edges so we can draw them specially\n if(_diagram.parallelEdgeOffset()) {\n var em = new Array(wnodes.length);\n for(var i = 0; i < wnodes.length; ++i)\n em[i] = new Array(i);\n wedges.forEach(function(e) {\n e.pos = e.pos || {};\n var min, max, minattr, maxattr;\n if(e.source.index < e.target.index) {\n min = e.source.index; max = e.target.index;\n minattr = 'edgeSourcePortName'; maxattr = 'edgeTargetPortName';\n } else {\n max = e.source.index; min = e.target.index;\n maxattr = 'edgeSourcePortName'; minattr = 'edgeTargetPortName';\n }\n var minport = _diagram[minattr].eval(e) || 'no port',\n maxport = _diagram[maxattr].eval(e) || 'no port';\n em[max][min] = em[max][min] || {};\n em[max][min][maxport] = em[max][min][maxport] || {};\n e.parallel = em[max][min][maxport][minport] = em[max][min][maxport][minport] || {\n rev: [],\n edges: []\n };\n e.parallel.edges.push(e);\n e.parallel.rev.push(min !== e.source.index);\n });\n }\n\n // create edge SVG elements\n var edge = _edgeLayer.selectAll('.edge')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeEnter = edge.enter().append('svg:path')\n .attr({\n class: 'edge',\n id: _diagram.edgeId,\n opacity: 0\n })\n .each(function(e) {\n e.deleted = false;\n });\n\n edge.exit().each(function(e) {\n e.deleted = true;\n }).transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.deleteDelay())\n .attr('opacity', 0)\n .each(function(e) {\n edgeArrow(e, 'head', null);\n edgeArrow(e, 'head', null);\n })\n .remove();\n\n if(_diagram.edgeSort()) {\n edge.sort(function(a, b) {\n var as = _diagram.edgeSort.eval(a), bs = _diagram.edgeSort.eval(b);\n return as < bs ? -1 : bs < as ? 1 : 0;\n });\n }\n\n // another wider copy of the edge just for hover events\n var edgeHover = _edgeLayer.selectAll('.edge-hover')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'edge-hover')\n .attr('opacity', 0)\n .attr('fill', 'none')\n .attr('stroke', 'green')\n .attr('stroke-width', 10)\n .on('mouseover', function(e) {\n d3.select('#' + _diagram.edgeId(e) + '-label')\n .attr('visibility', 'visible');\n })\n .on('mouseout', function(e) {\n d3.select('#' + _diagram.edgeId(e) + '-label')\n .attr('visibility', 'hidden');\n });\n edgeHover.exit().remove();\n\n var edgeLabels = _edgeLayer.selectAll('.edge-label')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeLabelsEnter = edgeLabels.enter()\n .append('text')\n .attr('id', function(e) {\n return _diagram.edgeId(e) + '-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(e) {\n var id = _diagram.textpathId(e);\n // angular on firefox needs absolute paths for fragments\n return window.location.href.split('#')[0] + '#' + id;\n });\n var textPaths = _defs.selectAll('path.edge-label-path')\n .data(wedges, _diagram.textpathId);\n var textPathsEnter = textPaths.enter()\n .append('svg:path').attr({\n class: 'edge-label-path',\n id: _diagram.textpathId\n });\n edgeLabels.exit().transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.deleteDelay())\n .attr('opacity', 0).remove();\n\n // create node SVG elements\n var node = _nodeLayer.selectAll('.node')\n .data(wnodes, _diagram.nodeKey.eval);\n var nodeEnter = node.enter().append('g')\n .attr('class', 'node')\n .attr('opacity', '0') // don't show until has layout\n .each(function(n) {\n n.deleted = false;\n });\n // .call(_d3cola.drag);\n\n _diagram._enterNode(nodeEnter);\n\n node.exit().each(function(n) {\n n.deleted = true;\n }).transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.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(_diagram.initialLayout())\n _diagram.initialLayout()(_diagram, wnodes, wedges);\n\n // no layout if the topology and layout parameters haven't changed\n var skip_layout = false;\n if(!_diagram.layoutUnchanged()) {\n var nodes_snapshot = JSON.stringify(wnodes.map(function(n) {\n return {orig: get_original(n), cola: {dcg_nodeFixed: n.cola.dcg_nodeFixed}};\n }));\n var edges_snapshot = JSON.stringify(wedges.map(function(e) {\n return {orig: get_original(e), cola: e.cola};\n }));\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 = _diagram.constrain()(_diagram, 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(_diagram.edgeIsLayout.eval);\n var nonlayout_edges = wedges.filter(function(x) {\n return !_diagram.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 || _diagram.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 _diagram.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(skip_layout) {\n _running = false;\n _dispatch.end(false);\n check_zoom(node, edge);\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 if(!n) {\n console.warn('received node \"' + rn.dcg_nodeKey + '\" that we did not send');\n return;\n }\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 if(!e) {\n console.warn('received edge \"' + re.dcg_edgeKey + '\" that we did not send');\n return;\n }\n if(re.points)\n e.cola.points = re.points;\n });\n }\n _diagram.layoutEngine()\n .on('tick', function(nodes, edges) {\n var elapsed = Date.now() - startTime;\n if(!_diagram.initialOnly())\n populate_cola(nodes, edges);\n if(_diagram.showLayoutSteps()) {\n init_node_ports(_nodes, wports);\n _dispatch.receivedLayout(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n propagate_port_positions(_nodes, wedges, _ports);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, true);\n draw_ports(node);\n // should do this only once\n _dispatch.transitionsStarted(node, edge, edgeHover);\n }\n if(_needsRedraw || _diagram.timeLimit() && elapsed > _diagram.timeLimit()) {\n console.log('cancelled');\n _diagram.layoutEngine().stop();\n }\n })\n .on('end', function(nodes, edges) {\n if(!_diagram.showLayoutSteps()) {\n if(!_diagram.initialOnly())\n populate_cola(nodes, edges);\n init_node_ports(_nodes, wports);\n _dispatch.receivedLayout(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n propagate_port_positions(_nodes, wedges, _ports);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, true);\n draw_ports(node);\n _dispatch.transitionsStarted(node, edge, edgeHover);\n }\n else layout_done(true);\n check_zoom(node, edge);\n })\n .on('start', function() {\n console.log('algo ' + _diagram.layoutEngine().layoutAlgorithm() + ' started.');\n _dispatch.start();\n });\n\n if(_diagram.initialOnly())\n _diagram.layoutEngine().dispatch().end(wnodes, wedges);\n else {\n _dispatch.start(); // cola doesn't seem to fire this itself?\n _diagram.layoutEngine().data(\n { width: _diagram.width(), height: _diagram.height() },\n wnodes.map(function(v) { return v.cola; }),\n layout_edges.map(function(v) { return v.cola; }),\n constraints\n );\n _diagram.layoutEngine().start();\n }\n return this;\n };\n\n function check_zoom(node, edge) {\n var do_zoom, animate = true;\n switch(_diagram.autoZoom()) {\n case 'always-skipanimonce':\n animate = false;\n _diagram.autoZoom('always');\n case 'always':\n do_zoom = true;\n break;\n case 'once-noanim':\n animate = false;\n case 'once':\n do_zoom = true;\n _diagram.autoZoom(null);\n break;\n default:\n do_zoom = false;\n }\n calc_bounds(node, edge);\n if(do_zoom)\n auto_zoom(animate);\n }\n\n function norm(v) {\n var len = Math.hypot(v[0], v[1]);\n return [v[0]/len, v[1]/len];\n }\n function edge_vec(n, e) {\n var dy = e.target.cola.y - e.source.cola.y,\n dx = e.target.cola.x - e.source.cola.x;\n if(e.source !== n)\n dy = -dy, dx = -dx;\n if(e.parallel && e.parallel.edges.length > 1 && e.source.index > e.target.index)\n dy = -dy, dx = -dx;\n return norm([dx, dy]);\n }\n function init_node_ports(nodes, wports) {\n _nodePorts = {};\n // assemble port-lists for nodes, again because we don't have a metagraph.\n wports.forEach(function(p) {\n var nid = _diagram.nodeKey.eval(p.node);\n var np = _nodePorts[nid] = _nodePorts[nid] || [];\n np.push(p);\n });\n for(var nid in _nodePorts) {\n var n = nodes[nid],\n nports = _nodePorts[nid];\n // initial positions: use average of edge vectors, if any, or existing position\n nports.forEach(function(p) {\n if(_diagram.portElastic.eval(p) && p.edges.length) {\n var vecs = p.edges.map(edge_vec.bind(null, n));\n p.vec = [\n d3.sum(vecs, function(v) { return v[0]; })/vecs.length,\n d3.sum(vecs, function(v) { return v[1]; })/vecs.length\n ];\n } else p.vec = p.vec || undefined;\n p.pos = null;\n });\n }\n }\n function propagate_port_positions(nodes, wedges, ports) {\n // make sure we have projected vectors to positions\n for(var nid in _nodePorts) {\n var n = nodes[nid];\n _nodePorts[nid].forEach(function(p) {\n if(!p.pos)\n project_port(_diagram, n, p);\n });\n }\n\n // propagate port positions to edge endpoints\n wedges.forEach(function(e) {\n var name = _diagram.edgeSourcePortName.eval(e);\n e.sourcePort.pos = name ? ports[port_name(_diagram.nodeKey.eval(e.source), null, name)].pos :\n ports[port_name(null, _diagram.edgeKey.eval(e), 'source')].pos;\n name = _diagram.edgeTargetPortName.eval(e);\n e.targetPort.pos = name ? ports[port_name(_diagram.nodeKey.eval(e.target), null, name)].pos :\n ports[port_name(null, _diagram.edgeKey.eval(e), 'target')].pos;\n console.assert(e.sourcePort.pos && e.targetPort.pos);\n });\n }\n\n function _refresh(node, edge) {\n _diagram._updateEdge(edge);\n _diagram._updateNode(node);\n draw_ports(node);\n }\n\n _diagram.refresh = function(node, edge, edgeHover, edgeLabels, textPaths) {\n if(_animating)\n return this; // but what about changed attributes?\n node = node || _diagram.selectAllNodes();\n edge = edge || _diagram.selectAllEdges();\n _refresh(node, edge);\n\n edgeHover = edgeHover || _diagram.selectAllEdges('.edge-hover');\n edgeLabels = edgeLabels || _diagram.selectAllEdges('.edge-label');\n textPaths = textPaths || _diagram.selectAllDefs('path.edge-label-path');\n var nullSel = d3.select(null); // no enters\n draw(node, nullSel, edge, nullSel, edgeHover, nullSel, edgeLabels, nullSel, textPaths, nullSel, false);\n return this;\n };\n\n _diagram.requestRefresh = function(durationOverride) {\n window.requestAnimationFrame(function() {\n var transdur;\n if(durationOverride !== undefined) {\n transdur = _diagram.transitionDuration();\n _diagram.transitionDuration(durationOverride);\n }\n _diagram.refresh();\n if(durationOverride !== undefined)\n _diagram.transitionDuration(transdur);\n });\n };\n\n _diagram.reposition = function(node, edge) {\n node\n .attr('transform', function (n) {\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n });\n // reset edge ports\n edge.each(function(e) {\n e.pos.new = null;\n e.pos.old = null;\n calc_edge_path(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.pos.new.orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', function() {\n return e.pos.new.orienttail;\n });\n })\n .attr('d', render_edge_path('new'));\n return this;\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(!_diagram.isRunning()) // someone else may already have started\n _diagram.redraw();\n }, 0);\n }\n }\n\n function calculate_arrowhead_orientation(points, end) {\n var spos = points[0], tpos = points[points.length-1];\n var partial = bezier_point(points, end === 'tail' ? 0.25 : 0.75);\n return (end === 'head' ?\n Math.atan2(tpos.y - partial.y, tpos.x - partial.x) :\n Math.atan2(spos.y - partial.y, spos.x - partial.x)) + 'rad';\n }\n\n function enforce_path_direction(path, spos, tpos) {\n var points = path.points, first = points[0], last = points[points.length-1];\n switch(_diagram.enforceEdgeDirection()) {\n case 'LR':\n if(spos.x >= tpos.x) {\n var dx = first.x - last.x;\n return {\n points: [\n first,\n {x: first.x + dx, y: first.y - dx/2},\n {x: last.x - dx, y: last.y - dx/2},\n last\n ],\n bezDegree: 3,\n sourcePort: path.sourcePort,\n targetPort: path.targetPort\n };\n }\n break;\n case 'TB':\n if(spos.y >= tpos.y) {\n var dy = first.y - last.y;\n return {\n points: [\n first,\n {x: first.x + dy/2, y: first.y + dy},\n {x: last.x + dy/2, y: last.y - dy},\n last\n ],\n bezDegree: 3,\n sourcePort: path.sourcePort,\n targetPort: path.targetPort\n };\n }\n break;\n }\n return path;\n }\n function calc_edge_path(e, age, sx, sy, tx, ty) {\n var parallel = e.parallel;\n var source = e.source, target = e.target;\n if(parallel.edges.length > 1 && e.source.index > e.target.index) {\n var t;\n t = target; target = source; source = t;\n t = tx; tx = sx; sx = t;\n t = ty; ty = sy; sy = t;\n }\n var source_padding = source.dcg_ry +\n _diagram.nodeStrokeWidth.eval(source) / 2,\n target_padding = target.dcg_ry +\n _diagram.nodeStrokeWidth.eval(target) / 2;\n for(var p = 0; p < parallel.edges.length; ++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 > 0 ? parallel.edges[p > 2 ? p - 2 : 0].pos[age].path : null;\n var path = draw_edge_to_shapes(_diagram, e, sx, sy, tx, ty,\n last, dir, _diagram.parallelEdgeOffset(),\n source_padding, target_padding\n );\n if(parallel.edges.length > 1 && parallel.rev[p])\n path.points.reverse();\n if(_diagram.enforceEdgeDirection())\n path = enforce_path_direction(path, source.cola, target.cola);\n parallel.edges[p].pos[age] = {\n path: path,\n orienthead: calculate_arrowhead_orientation(path.points, 'head'),\n orienttail: calculate_arrowhead_orientation(path.points, 'tail')\n };\n }\n }\n\n function render_edge_path(age) {\n return function(e) {\n var path = e.pos[age].path;\n return generate_path(path.points, path.bezDegree);\n };\n }\n\n function render_edge_label_path(age) {\n return function(e) {\n var path = e.pos[age].path;\n var points = path.points[path.points.length-1].x < path.points[0].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.pos.new.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((_diagram.fitStrategy() || _diagram.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(animate) {\n if(_diagram.fitStrategy()) {\n if(!_bounds)\n return;\n var vwidth = _bounds.right - _bounds.left, vheight = _bounds.bottom - _bounds.top,\n swidth = _diagram.width() - _diagram.margins().left - _diagram.margins().right,\n sheight = _diagram.height() - _diagram.margins().top - _diagram.margins().bottom;\n if(_diagram.DEBUG_BOUNDS)\n debug_bounds(_bounds);\n var fitS = _diagram.fitStrategy(), translate = [0,0], scale = 1;\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(fitS === 'zoom') {\n scale = _zoom.scale();\n translate = bring_in_bounds(_zoom.translate());\n }\n else\n throw new Error('unknown fitStrategy type ' + typeof fitS);\n\n _animateZoom = animate;\n _zoom.translate(translate).scale(scale).event(_svg);\n _animateZoom = false;\n }\n }\n\n // determine pre-transition orientation that won't spin a lot going to new orientation\n function unsurprising_orient(oldorient, neworient) {\n var oldang = +oldorient.slice(0, -3),\n newang = +neworient.slice(0, -3);\n if(Math.abs(oldang - newang) > Math.PI) {\n if(newang > oldang)\n oldang += 2*Math.PI;\n else oldang -= 2*Math.PI;\n }\n return oldang + 'rad';\n }\n\n function draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, animatePositions) {\n console.assert(edge.data().every(has_source_and_target));\n\n var nodeEntered = {};\n nodeEnter\n .each(function(n) {\n nodeEntered[_diagram.nodeKey.eval(n)] = true;\n })\n .attr('transform', function (n) {\n // start new nodes at their final position\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n });\n var ntrans = node\n .transition()\n .duration(_diagram.stagedDuration())\n .delay(function(n) {\n return _diagram.stagedDelay(nodeEntered[_diagram.nodeKey.eval(n)]);\n })\n .attr('opacity', _diagram.nodeOpacity.eval);\n if(animatePositions)\n ntrans\n .attr('transform', function (n) {\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n })\n .each('end.record', function(n) {\n n.prevX = n.cola.x;\n n.prevY = n.cola.y;\n });\n\n // recalculate edge positions\n edge.each(function(e) {\n e.pos.new = null;\n });\n edge.each(function(e) {\n if(e.cola.points) {\n e.pos.new = {\n path: {\n points: e.cola.points,\n bezDegree: 3\n },\n orienthead: calculate_arrowhead_orientation(e.cola.points, 'head'),\n orienttail: calculate_arrowhead_orientation(e.cola.points, 'tail')\n };\n }\n else {\n if(!e.pos.old)\n calc_edge_path(e, 'old', e.source.prevX || e.source.cola.x, e.source.prevY || e.source.cola.y,\n e.target.prevX || e.target.cola.x, e.target.prevY || e.target.cola.y);\n if(!e.pos.new)\n calc_edge_path(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n }\n if(e.pos.old) {\n if(e.pos.old.path.bezDegree !== e.pos.new.path.bezDegree ||\n e.pos.old.path.points.length !== e.pos.new.path.points.length) {\n console.log('old', e.pos.old.path.points.length, 'new', e.pos.new.path.points.length);\n if(is_one_segment(e.pos.old.path)) {\n e.pos.new.path.points = as_bezier3(e.pos.new.path);\n e.pos.old.path.points = split_bezier_n(as_bezier3(e.pos.old.path),\n (e.pos.new.path.points.length-1)/3);\n e.pos.old.path.bezDegree = e.pos.new.bezDegree = 3;\n }\n else if(is_one_segment(e.pos.new.path)) {\n e.pos.old.path.points = as_bezier3(e.pos.old.path);\n e.pos.new.path.points = split_bezier_n(as_bezier3(e.pos.new.path),\n (e.pos.old.path.points.length-1)/3);\n e.pos.old.path.bezDegree = e.pos.new.bezDegree = 3;\n }\n else console.warn(\"don't know how to interpolate two multi-segments\");\n }\n }\n else\n e.pos.old = e.pos.new;\n });\n\n var edgeEntered = {};\n edgeEnter\n .each(function(e) {\n edgeEntered[_diagram.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 = _diagram.stageTransitions() === 'modins' ? 'new' : 'old';\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.pos[age].orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', function() {\n return e.pos[age].orienttail;\n });\n })\n .attr('d', render_edge_path(_diagram.stageTransitions() === 'modins' ? 'new' : 'old'));\n\n var etrans = edge\n .each(function(e) {\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', unsurprising_orient(e.pos.old.orienthead, e.pos.new.orienthead))\n .transition().duration(_diagram.stagedDuration())\n .delay(_diagram.stagedDelay(false))\n .attr('orient', function() {\n return e.pos.new.orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', unsurprising_orient(e.pos.old.orienttail, e.pos.new.orienttail))\n .transition().duration(_diagram.stagedDuration())\n .delay(_diagram.stagedDelay(false))\n .attr('orient', function() {\n return e.pos.new.orienttail;\n });\n })\n .transition()\n .duration(_diagram.stagedDuration())\n .delay(function(e) {\n return _diagram.stagedDelay(edgeEntered[_diagram.edgeKey.eval(e)]);\n })\n .attr('opacity', _diagram.edgeOpacity.eval);\n if(animatePositions)\n etrans\n .attr('d', function(e) {\n var when = _diagram.stageTransitions() === 'insmod' &&\n edgeEntered[_diagram.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_path(when)(e);\n });\n edgeLabels\n .selectAll('textPath')\n .text(function(e){\n return _diagram.edgeLabel.eval(e);\n })\n .attr('opacity', _diagram.edgeOpacity.eval);\n textPathsEnter\n .attr('d', render_edge_label_path(_diagram.stageTransitions() === 'modins' ? 'new' : 'old'));\n var textTrans = textPaths.transition()\n .duration(_diagram.stagedDuration())\n .delay(function(e) {\n return _diagram.stagedDelay(edgeEntered[_diagram.edgeKey.eval(e)]);\n });\n if(animatePositions)\n textTrans\n .attr('d', function(e) {\n var when = _diagram.stageTransitions() === 'insmod' &&\n edgeEntered[_diagram.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_label_path(when)(e);\n });\n if(_diagram.stageTransitions() === 'insmod' && animatePositions) {\n // inserted edges transition twice in insmod mode\n if(_diagram.stagedDuration() >= 50) {\n etrans = etrans.transition()\n .duration(_diagram.stagedDuration())\n .attr('d', render_edge_path('new'));\n textTrans = textTrans.transition()\n .duration(_diagram.stagedDuration())\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 _animating = true;\n if(!_diagram.showLayoutSteps())\n endall([ntrans, etrans, textTrans],\n function() {\n _animating = false;\n layout_done(true);\n });\n\n if(animatePositions)\n edgeHover.attr('d', render_edge_path('new'));\n\n edge.each(function(e) {\n e.pos.old = e.pos.new;\n });\n }\n\n _diagram.animating = function() {\n return _animating;\n };\n\n _diagram.selectNodePortsOfStyle = function(node, style) {\n return node.selectAll('g.port').filter(function(p) {\n return _diagram.portStyleName.eval(p) === style;\n });\n };\n\n function draw_ports(node) {\n if(!_nodePorts)\n return;\n _diagram.portStyle.enum().forEach(function(style) {\n var nodePorts2 = {};\n for(var nid in _nodePorts)\n nodePorts2[nid] = _nodePorts[nid].filter(function(p) {\n return _diagram.portStyleName.eval(p) === style;\n });\n var port = _diagram.selectNodePortsOfStyle(node, style);\n _diagram.portStyle(style).drawPorts(port, nodePorts2, node);\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. 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 _diagram.render = function () {\n if(_svg)\n _dispatch.reset();\n if(!_diagram.initLayoutOnRedraw())\n initLayout();\n _diagram.resetSvg();\n _g = _svg.append('g')\n .attr('class', 'draw');\n\n var layers = ['edge-layer', 'node-layer'];\n if(_diagram.edgesInFront())\n layers.reverse();\n _g.selectAll('g').data(layers)\n .enter().append('g')\n .attr('class', function(l) { return l; });\n _edgeLayer = _g.selectAll('g.edge-layer');\n _nodeLayer = _g.selectAll('g.node-layer');\n\n _dispatch.render();\n _diagram.redraw();\n return this;\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 _diagram.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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 _diagram.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 _diagram.select = function (s) {\n return _diagram.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 _diagram.selectAll = function (s) {\n return _diagram.root() ? _diagram.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. Gets or sets the x scale.\n * @method x\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.scale} [scale]\n * @return {d3.scale}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.x = property(null);\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. Gets or sets the y scale.\n * @method x\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.scale} [scale]\n * @return {d3.scale}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.y = property(null);\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 diagram. 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 _diagram.svg = function (_) {\n if (!arguments.length) {\n return _svg;\n }\n _svg = _;\n return _diagram;\n };\n\n /**\n * Returns the top `g` element for this specific diagram. This method is usually used to\n * retrieve the g element in order to overlay custom svg drawing\n * programatically. **Caution**: The root g element is usually generated internally, and\n * resetting it might produce unpredictable results.\n * @method g\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.selection} [selection]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.g = function (_) {\n if (!arguments.length) {\n return _g;\n }\n _g = _;\n return _diagram;\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 _diagram.resetSvg = function () {\n if(_svg) {\n _svg.remove();\n _svg = null;\n }\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 _diagram.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 _diagram.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 * `diagram.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 * _diagram.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 _diagram.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 _diagram;\n };\n\n _diagram.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(e, kind, name) {\n var id = _diagram.arrowId(e, kind),\n markerEnter = _diagram.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*_diagram.edgeArrowSize.eval(e))\n .attr('markerHeight', _arrows[name].height*_diagram.edgeArrowSize.eval(e))\n .attr('stroke', _diagram.edgeStroke.eval(e))\n .attr('fill', _diagram.edgeStroke.eval(e))\n .call(_arrows[name].drawFunction);\n }\n return name ? id : null;\n }\n\n function globalTransform(pos, scale, animate) {\n _translate = pos;\n _scale = scale;\n var obj = _g;\n if(animate)\n obj = _g.transition().duration(_diagram.zoomDuration());\n obj.attr('transform', 'translate(' + pos + ')' + ' scale(' + scale + ')');\n }\n\n function margined_bounds() {\n var bounds = _bounds || {left: 0, top: 0, right: 0, bottom: 0};\n var scale = _zoom ? _zoom.scale() : 1;\n return {\n left: bounds.left - _diagram.margins().left/scale,\n top: bounds.top - _diagram.margins().top/scale,\n right: bounds.right + _diagram.margins().right/scale,\n bottom: bounds.bottom + _diagram.margins().bottom/scale\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] - _diagram.x()(x) + _diagram.x().range()[0];\n }\n function align_top(translate, y) {\n return translate[1] - _diagram.y()(y) + _diagram.y().range()[0];\n }\n function align_right(translate, x) {\n return translate[0] - _diagram.x()(x) + _diagram.x().range()[1];\n }\n function align_bottom(translate, y) {\n return translate[1] - _diagram.y()(y) + _diagram.y().range()[1];;\n }\n\n function bring_in_bounds(translate) {\n var xDomain = _diagram.x().domain(), yDomain = _diagram.y().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 return translate;\n\n }\n function doZoom() {\n var translate, scale = d3.event.scale;\n if(_diagram.restrictPan())\n _zoom.translate(translate = bring_in_bounds(d3.event.translate));\n else translate = d3.event.translate;\n globalTransform(translate, scale, _animateZoom);\n _dispatch.zoomed(translate, scale);\n }\n\n _diagram.resizeSvg = function(w, h) {\n if(_svg) {\n _svg.attr('width', w || (_width === 'auto' ? '100%' : _diagram.width()))\n .attr('height', h || (_height === 'auto' ? '100%' : _diagram.height()));\n }\n return _diagram;\n };\n\n function enableZoom() {\n _svg.call(_zoom);\n _svg.on('dblclick.zoom', null);\n }\n function disableZoom() {\n _svg.on('.zoom', null);\n }\n\n function generateSvg() {\n _svg = _diagram.root().append('svg');\n _diagram.resizeSvg();\n\n _defs = _svg.append('svg:defs');\n\n // start out with 1:1 zoom\n if(!_diagram.x())\n _diagram.x(d3.scale.linear()\n .domain([0, _diagram.width()])\n .range([0, _diagram.width()]));\n if(!_diagram.y())\n _diagram.y(d3.scale.linear()\n .domain([0, _diagram.height()])\n .range([0, _diagram.height()]));\n _zoom = d3.behavior.zoom()\n .on('zoom', doZoom)\n .x(_diagram.x()).y(_diagram.y())\n .scaleExtent(_diagram.zoomExtent());\n if(_diagram.mouseZoomable()) {\n var mod, mods;\n var brush = _diagram.child('brush');\n if((mod = _diagram.modKeyZoom())) {\n if (Array.isArray (mod))\n mods = mod.slice ();\n else if (typeof mod === \"string\")\n mods = [mod];\n else\n mods = ['Alt'];\n var mouseDown = false, modDown = false, zoomEnabled = false;\n _svg.on('mousedown.modkey-zoom', function() {\n mouseDown = true;\n }).on('mouseup.modkey-zoom', function() {\n mouseDown = false;\n if(!mouseDown && !modDown && zoomEnabled) {\n zoomEnabled = false;\n disableZoom();\n if(brush)\n brush.activate();\n }\n });\n d3.select(document)\n .on('keydown.modkey-zoom', function() {\n if(mods.indexOf (d3.event.key) > -1) {\n modDown = true;\n if(!mouseDown) {\n zoomEnabled = true;\n enableZoom();\n if(brush)\n brush.deactivate();\n }\n }\n })\n .on('keyup.modkey-zoom', function() {\n if(mods.indexOf (d3.event.key) > -1) {\n modDown = false;\n if(!mouseDown) {\n zoomEnabled = false;\n disableZoom();\n if(brush)\n brush.activate();\n }\n }\n });\n }\n else enableZoom();\n }\n\n return _svg;\n }\n\n _diagram.invertCoord = function(clientCoord) {\n return [\n _diagram.x().invert(clientCoord[0]),\n _diagram.y().invert(clientCoord[1])\n ];\n };\n\n _diagram.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 _diagram.defineArrow('crow', 12, 12, 0, 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 _diagram.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 diagram initialization, but be called again to relocate the diagram. 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 _diagram.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 _diagram.root(d3.select(_anchor));\n _diagram.root().classed(dc_graph.constants.CHART_CLASS, true);\n dc.registerChart(_diagram, chartGroup);\n } else {\n throw new dc.errors.BadArgumentException('parent must be defined');\n }\n _chartGroup = chartGroup;\n return _diagram;\n };\n\n /**\n * Returns the internal numeric ID of the chart.\n * @method chartID\n * @memberof dc.baseMixin\n * @instance\n * @returns {String}\n */\n _diagram.chartID = function () {\n return _diagram.__dcFlag__;\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 _diagram.anchorName = function () {\n var a = _diagram.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' + _diagram.chartID();\n };\n\n return _diagram.anchor(parent, chartGroup);\n};\n","dc_graph.spawn_engine = function(layout, args, worker) {\n args = args || {};\n worker = worker && !!window.Worker;\n var engine = dc_graph.engines.instantiate(layout, args, worker);\n if(!engine) {\n console.warn('layout engine ' + layout + ' not found; using default ' + dc_graph._default_engine);\n engine = dc_graph.engines.instantiate(dc_graph._default_engine, args, worker);\n }\n return engine;\n};\n\ndc_graph._engines = [\n {\n name: 'dagre',\n params: ['rankdir'],\n instantiate: function() {\n return dc_graph.dagre_layout();\n }\n },\n {\n name: 'd3force',\n instantiate: function() {\n return dc_graph.d3_force_layout();\n }\n },\n {\n name: 'd3v4force',\n instantiate: function() {\n return dc_graph.d3v4_force_layout();\n }\n },\n {\n name: 'tree',\n instantiate: function() {\n return dc_graph.tree_layout();\n }\n },\n {\n names: ['circo', 'dot', 'neato', 'osage', 'twopi', 'fdp'],\n instantiate: function(layout, args) {\n return dc_graph.graphviz_layout(null, layout, args.server);\n }\n },\n {\n name: 'cola',\n params: ['lengthStrategy'],\n instantiate: function() {\n return dc_graph.cola_layout();\n }\n }\n];\ndc_graph._default_engine = 'cola';\n\ndc_graph.engines = {\n entry_pred: function(layoutName) {\n return function(e) {\n return e.name && e.name === layoutName || e.names && e.names.includes(layoutName);\n };\n },\n get: function(layoutName) {\n return dc_graph._engines.find(this.entry_pred(layoutName));\n },\n instantiate: function(layout, args, worker) {\n var entry = this.get(layout);\n if(!entry)\n return null;\n var engine = entry.instantiate(layout, args),\n params = entry.params || [];\n params.forEach(function(p) {\n if(args[p])\n engine[p](args[p]);\n });\n if(engine.supportsWebworker && engine.supportsWebworker() && worker)\n engine = dc_graph.webworker_layout(engine);\n return engine;\n },\n available: function() {\n return dc_graph._engines.reduce(function(avail, entry) {\n return avail.concat(entry.name ? [entry.name] : entry.names);\n }, []);\n },\n unregister: function(layoutName) {\n // meh. this is a bit much. there is such a thing as making the api too \"easy\".\n var i = dc_graph._engines.findIndex(this.entry_pred(layoutName));\n var remove = false;\n if(i < 0)\n return false;\n var entry = dc_graph._engines[i];\n if(entry.name === layoutName)\n remove = true;\n else {\n var j = entry.names.indexOf(layoutName);\n if(j >= 0)\n entry.names.splice(j, 1);\n else\n console.warn('search for engine failed', layoutName);\n if(entry.names.length === 0)\n remove = true;\n }\n if(remove)\n dc_graph._engines.splice(i, 1);\n return true;\n },\n register: function(entry) {\n var that = this;\n if(!entry.instantiate) {\n console.error('engine definition needs instantiate: function(layout, args) { ... }');\n return this;\n }\n if(entry.name)\n this.unregister(entry.name);\n else if(entry.names)\n entry.names.forEach(function(layoutName) {\n that.unregister(layoutName);\n });\n else {\n console.error('engine definition needs name or names[]');\n return this;\n }\n dc_graph._engines.push(entry);\n return this;\n }\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(graph, nodes, edges, constraints) {\n _worker.worker.postMessage({\n command: 'data',\n args: {\n layoutId: layoutEngine.layoutId(),\n graph: graph,\n nodes: nodes,\n edges: edges,\n constraints: constraints\n }\n });\n };\n engine.start = function() {\n _worker.worker.postMessage({\n command: 'start',\n args: {\n layoutId: layoutEngine.layoutId()\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', 'needsStage',\n 'populateLayoutNode', 'populateLayoutEdge', 'rankdir', 'ranksep'];\n passthroughs.concat(layoutEngine.optionNames()).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 if(arguments.length === 1)\n return _dispatch.on(event);\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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.dcg_nodeFixed;\n\n if(v1.fixed && typeof v.dcg_nodeFixed === 'object') {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_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, null, 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(engine.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() {\n _d3cola.start(engine.unconstrainedIterations(),\n engine.userConstraintIterations(),\n engine.allConstraintsIterations(),\n engine.gridSnapIterations());\n }\n\n function stop() {\n if(_d3cola)\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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize', 'groupConnected']\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 * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.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 switch(dir) {\n case 'LR': return {axis: 'x', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n case 'TB': return {axis: 'y', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n default: return null; // RL, BT do not appear to be possible (negative separation) (?)\n }\n }\n _flowLayout = flow;\n return this;\n },\n unconstrainedIterations: property(10),\n userConstraintIterations: property(20),\n allConstraintsIterations: property(20),\n gridSnapIterations: property(0),\n tickSize: property(1),\n groupConnected: property(false)\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, nodesep: options.nodesep, ranksep: options.ranksep});\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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 /*\n dagre does not seem to accept input positions\n if(v.dcg_nodeFixed) {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n }\n */\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, null, 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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n start: function() {\n start();\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 encode_name(e.dcg_edgeTarget) + '\" ' + stringize_properties([\n stringize_property('id', encode_name(e.dcg_edgeKey)),\n stringize_property('arrowhead', 'none'),\n stringize_property('arrowtail', 'none')\n ]);\n }));\n lines.push('}');\n lines.push('');\n _dotString = lines.join('\\n');\n }\n\n function process_response(error, result) {\n _dispatch.start();\n var bb = result.bb.split(',').map(function(x) { return +x; });\n var nodes = (result.objects || []).filter(function(n) {\n return n.pos; // remove non-nodes like clusters\n }).map(function(n) {\n var pos = n.pos.split(',');\n return {\n dcg_nodeKey: decode_name(n.name),\n x: +pos[0],\n y: bb[3] - pos[1]\n };\n });\n _clusters = (result.objects || []).filter(function(n) {\n return /^cluster/.test(n.name);\n });\n _clusters.forEach(function(c) {\n // annotate with flipped cluster coords for convenience\n c.bbflip = c.bb.split(',').map(function(s) { return +s; });\n var t = bb[3] - c.bbflip[1];\n c.bbflip[1] = bb[3] - c.bbflip[3];\n c.bbflip[3] = t;\n });\n var edges = (result.edges || []).map(function(e) {\n var e2 = {\n dcg_edgeKey: decode_name(e.id || 'n' + e._gvid)\n };\n if(e._draw_) {\n var directive = e._draw_.find(function(d) { return d.op && d.points; });\n e2.points = directive.points.map(function(p) { return {x: p[0], y: bb[3] - p[1]}; });\n }\n return e2;\n });\n _dispatch.end(nodes, edges);\n }\n\n function start() {\n if(server) {\n d3.json(server)\n .header(\"Content-type\", \"application/x-www-form-urlencoded\")\n .post('layouttool=' + layout + '&' + encodeURIComponent(_dotString), process_response);\n }\n else {\n var result = Viz(_dotString, {format: 'json', engine: layout, totalMemory: 1 << 25});\n result = JSON.parse(result);\n process_response(null, result);\n }\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 layout;\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return false;\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n dotInput: function(text) {\n _dotInput = text;\n return this;\n },\n clusters: function() {\n // filter out clusters and return them separately, because dc.graph doesn't know how to draw them\n return _clusters;\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return graphviz_keys;\n },\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n}\n\n","/**\n * `dc_graph.d3_force_layout` is an adaptor for d3-force layouts in dc.graph.js\n * @class d3_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3_force_layout}\n **/\ndc_graph.d3_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3.layout.force()\n .size([options.width, options.height]);\n\n _simulation.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fixed = true;\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n } else v1.fixed = false;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, 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.source.id = nodeIDs[e1.source.dcg_nodeKey];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.target.id = nodeIDs[e1.target.dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.nodes(_wnodes);\n _simulation.links(_wedges);\n }\n\n function start() {\n installForces();\n runSimulation(_options.iterations);\n }\n\n function stop() {\n if(_simulation)\n _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fixed = false;\n _nodes[key].x = data[key].x;\n _nodes[key].y = data[key].y;\n }\n });\n }\n\n function installForces() {\n if(_paths === null)\n _simulation.gravity(_options.gravityStrength)\n .charge(_options.initialCharge);\n else {\n if(_options.fixOffPathNodes) {\n var nodesOnPath = d3.set(); // nodes on path\n _paths.forEach(function(path) {\n path.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(!nodesOnPath.has(key)) {\n _nodes[key].fixed = true;\n } else {\n _nodes[key].fixed = false;\n }\n });\n }\n\n // enlarge charge force to separate nodes on paths\n _simulation.charge(_options.chargeForce);\n }\n };\n\n function runSimulation(iterations) {\n if(!iterations) {\n dispatchState('end');\n return;\n }\n _simulation.start();\n for (var i = 0; i < 300; ++i) {\n _simulation.tick();\n if(_paths)\n applyPathAngleForces();\n }\n _simulation.stop();\n }\n\n function applyPathAngleForces() {\n function _dot(v1, v2) { return v1.x*v2.x + v1.y*v2.y; };\n function _len(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n function _angle(v1, v2) {\n var a = _dot(v1, v2) / (_len(v1)*_len(v2));\n a = Math.min(a, 1);\n a = Math.max(a, -1);\n return Math.acos(a);\n };\n // perpendicular unit length vector\n function _pVec(v) {\n var xx = -v.y/v.x, yy = 1;\n var length = _len({x: xx, y: yy});\n return {x: xx/length, y: yy/length};\n };\n\n function updateNode(node, angle, pVec, alpha) {\n node.x += pVec.x*(Math.PI-angle)*alpha;\n node.y += pVec.y*(Math.PI-angle)*alpha;\n }\n\n _paths.forEach(function(path) {\n if(path.length < 3) return; // at least 3 nodes (and 2 edges): A->B->C\n for(var i = 1; i < path.length-1; ++i) {\n var current = _nodes[path[i]];\n var prev = _nodes[path[i-1]];\n var next = _nodes[path[i+1]];\n\n // calculate the angle\n var vPrev = {x: prev.x - current.x, y: prev.y - current.y};\n var vNext = {x: next.x - current.x, y: next.y - current.y};\n\n var angle = _angle(vPrev, vNext); // angle in [0, PI]\n\n var pvecPrev = _pVec(vPrev);\n var pvecNext = _pVec(vNext);\n\n // make sure the perpendicular vector is in the\n // direction that makes the angle more towards 180 degree\n // 1. calculate the middle point of node 'prev' and 'next'\n var mid = {x: (prev.x+next.x)/2.0, y: (prev.y+next.y)/2.0};\n // 2. calculate the vectors: 'prev' pointing to 'mid', 'next' pointing to 'mid'\n var prev_mid = {x: mid.x-prev.x, y: mid.y-prev.y};\n var next_mid = {x: mid.x-next.x, y: mid.y-next.y};\n // 3. the 'correct' vector: the angle between pvec and prev_mid(next_mid) should\n // be an obtuse angle\n pvecPrev = _angle(prev_mid, pvecPrev) >= Math.PI/2.0 ? pvecPrev : {x: -pvecPrev.x, y: -pvecPrev.y};\n pvecNext = _angle(next_mid, pvecNext) >= Math.PI/2.0 ? pvecNext : {x: -pvecNext.x, y: -pvecNext.y};\n\n // modify positions of prev and next\n updateNode(prev, angle, pvecPrev, _options.angleForce);\n updateNode(next, angle, pvecNext, _options.angleForce);\n }\n\n });\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.02),\n chargeForce: property(-500),\n gravityStrength: property(1.0),\n initialCharge: property(-400),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n return engine;\n};\n\ndc_graph.d3_force_layout.scripts = ['d3.js'];\n","/**\n * `dc_graph.d3v4_force_layout` is an adaptor for d3-force version 4 layouts in dc.graph.js\n * @class d3v4_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3v4_force_layout}\n **/\ndc_graph.d3v4_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3v4.forceSimulation()\n .force('link', d3v4.forceLink())\n .force('center', d3v4.forceCenter(options.width / 2, options.height / 2))\n .force('gravityX', d3v4.forceX(options.width / 2).strength(_options.gravityStrength))\n .force('gravityY', d3v4.forceY(options.height / 2).strength(_options.gravityStrength))\n .force('collision', d3v4.forceCollide(_options.collisionRadius))\n .force('charge', d3v4.forceManyBody())\n .stop();\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fx = v.dcg_nodeFixed.x;\n v1.fy = v.dcg_nodeFixed.y;\n } else v1.fx = v1.fy = null;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.source = nodeIDs[_nodes[e.dcg_edgeSource].dcg_nodeKey];\n e1.target = nodeIDs[_nodes[e.dcg_edgeTarget].dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.force('straighten', null);\n _simulation.nodes(_wnodes);\n _simulation.force('link').links(_wedges);\n }\n\n function start() {\n _dispatch.start();\n installForces(_paths);\n runSimulation(_options.iterations);\n }\n\n function stop() {\n // not running asynchronously, no _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fx = data[key].x;\n _nodes[key].fy = data[key].y;\n }\n });\n }\n function installForces(paths) {\n if(paths)\n paths = paths.filter(function(path) {\n return path.nodes.every(function(nk) { return _nodes[nk]; });\n });\n if(paths === null || !paths.length) {\n _simulation.force('charge').strength(_options.initialCharge);\n } else {\n var nodesOnPath;\n if(_options.fixOffPathNodes) {\n nodesOnPath = d3.set();\n paths.forEach(function(path) {\n path.nodes.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n }\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(_options.fixOffPathNodes && !nodesOnPath.has(key)) {\n _nodes[key].fx = _nodes[key].x;\n _nodes[key].fy = _nodes[key].y;\n } else {\n _nodes[key].fx = null;\n _nodes[key].fy = null;\n }\n });\n\n _simulation.force('charge').strength(_options.chargeForce);\n _simulation.force('straighten', d3v4.forceStraightenPaths()\n .id(function(n) { return n.dcg_nodeKey; })\n .angleForce(_options.angleForce)\n .pathNodes(function(p) { return p.nodes; })\n .pathStrength(function(p) { return p.strength; })\n .paths(paths));\n }\n };\n\n function runSimulation(iterations) {\n _simulation.alpha(1);\n for (var i = 0; i < iterations; ++i) {\n _simulation.tick();\n dispatchState('tick');\n }\n dispatchState('end');\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3v4-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength', 'collisionRadius',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.01),\n chargeForce: property(-600),\n gravityStrength: property(0.3),\n collisionRadius: property(8),\n initialCharge: property(-100),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n engine.pathStraightenForce = engine.angleForce;\n return engine;\n};\n\ndc_graph.d3v4_force_layout.scripts = ['d3.js', 'd3v4-force.js'];\n","dc_graph.flexbox_layout = function(id) {\n var _layoutId = id || uuid();\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n\n var _graph, _tree, _nodes = {}, _wnodes;\n\n function init(options) {\n }\n // like d3.nest but address can be of arbitrary (and different) length\n // probably less efficient too\n function add_node(adhead, adtail, n, tree) {\n tree.address = adhead.slice();\n tree.children = tree.children || {};\n if(!adtail.length) {\n tree.node = n;\n return;\n }\n var t = tree.children[adtail[0]] = tree.children[adtail[0]] || {};\n adhead.push(adtail.shift());\n add_node(adhead, adtail, n, t);\n }\n function all_keys(tree) {\n var key = _engine.addressToKey()(tree.address);\n return Array.prototype.concat.apply([key], Object.keys(tree.children).map(function(k) {\n return all_keys(tree.children[k]);\n }));\n }\n function data(graph, nodes) {\n _graph = graph;\n _tree = {};\n nodes.forEach(function(n) {\n var ad = _engine.keyToAddress()(n.dcg_nodeKey);\n add_node([], ad, n, _tree);\n });\n var need = all_keys(_tree);\n _wnodes = nodes;\n }\n var internal_attrs = ['sort', 'dcg_nodeKey', 'x', 'y'],\n skip_on_parents = ['width', 'height'];\n function create_flextree(attrs, tree) {\n var flexnode = {name: _engine.addressToKey()(tree.address), style: {}};\n var attrs2 = Object.assign({}, attrs);\n var isParent = Object.keys(tree.children).length;\n if(tree.node)\n Object.assign(attrs, tree.node);\n for(var attr in attrs) {\n if(internal_attrs.includes(attr))\n continue;\n if(isParent && skip_on_parents.includes(attr))\n continue;\n var value = attrs[attr];\n if(typeof value === 'function')\n value = value(tree.node);\n flexnode.style[attr] = value;\n }\n if(isParent) {\n flexnode.children = Object.values(tree.children)\n .sort(attrs.sort)\n .map(function(c) { return c.address[c.address.length-1]; })\n .map(function(key) {\n return create_flextree(Object.assign({}, attrs2), tree.children[key]);\n });\n }\n tree.flexnode = flexnode;\n return flexnode;\n }\n function apply_layout(offset, tree) {\n if(_engine.logStuff())\n console.log(tree.node.dcg_nodeKey + ': '+ JSON.stringify(tree.flexnode.layout));\n tree.node.x = offset.x + tree.flexnode.layout.left + tree.flexnode.layout.width/2;\n tree.node.y = offset.y + tree.flexnode.layout.top + tree.flexnode.layout.height/2;\n Object.keys(tree.children)\n .map(function(key) { return tree.children[key]; })\n .forEach(function(child) {\n apply_layout({x: offset.x + tree.flexnode.layout.left, y: offset.y + tree.flexnode.layout.top}, child);\n });\n }\n function dispatchState(wnodes, wedges, event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n function start() {\n var defaults = {\n sort: function(a, b) {\n return d3.ascending(a.node.dcg_nodeKey, b.node.dcg_nodeKey);\n }\n };\n var flexTree = create_flextree(defaults, _tree);\n flexTree.style.width = _graph.width;\n flexTree.style.height = _graph.height;\n if(_engine.logStuff())\n console.log(JSON.stringify(flexTree, null, 2));\n computeLayout(flexTree);\n apply_layout({x: 0, y: 0}, _tree);\n dispatchState(_wnodes, [], 'end');\n }\n function stop() {\n }\n\n // currently dc.graph populates the \"cola\" (really \"layout\") member with the attributes\n // needed for layout and does not pass in the original data. flexbox has a huge number of attributes\n // and it might be more appropriate for it to look at the original data.\n // (Especially because it also computes some attributes based on data.)\n var supportedAttributes = [\n 'width', 'height', // positive number\n 'minWidth', 'minHeight', // positive number\n 'maxWidth', 'maxHeight', // positive number\n 'left', 'right', 'top', 'bottom', // number\n 'margin', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom', // number\n 'padding', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', // positive number\n 'borderWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'borderBottomWidth', // positive number\n 'flexDirection', // 'column', 'row'\n 'justifyContent', // 'flex-start', 'center', 'flex-end', 'space-between', 'space-around'\n 'alignItems', 'alignSelf', // 'flex-start', 'center', 'flex-end', 'stretch'\n 'flex', // positive number\n 'flexWrap', // 'wrap', 'nowrap'\n 'position' // 'relative', 'absolute'\n ];\n\n var _engine = {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes) {\n data(graph, nodes);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return [];\n },\n populateLayoutNode: function(n1, n) {\n ['sort', 'order'].concat(supportedAttributes).forEach(function(attr) {\n if(n.orig.value[attr])\n n1[attr] = n.orig.value[attr];\n });\n },\n populateLayoutEdge: function() {},\n addressToKey: property(function(ad) { return ad.join(','); }),\n keyToAddress: property(function(nid) { return nid.split(','); }),\n logStuff: property(false)\n };\n return _engine;\n};\n\ndc_graph.flexbox_layout.scripts = ['css-layout.js'];\n","dc_graph.manual_layout = function(id) {\n var _layoutId = id || uuid();\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n\n var _wnodes;\n\n function init(options) {\n }\n function data(nodes) {\n _wnodes = nodes;\n }\n function dispatchState(wnodes, wedges, event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n function start() {\n dispatchState(_wnodes, [], 'end');\n }\n function stop() {\n }\n\n var _engine = {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return [];\n },\n populateLayoutNode: function(n1, n) {\n ['x', 'y'].forEach(function(attr) {\n if(n.orig.value[attr] !== undefined)\n n1[attr] = n.orig.value[attr];\n });\n },\n populateLayoutEdge: function() {},\n addressToKey: property(function(ad) { return ad.join(','); }),\n keyToAddress: property(function(nid) { return nid.split(','); })\n };\n return _engine;\n};\n\ndc_graph.manual_layout.scripts = ['css-layout.js'];\n","function port_name(nodeId, edgeId, portName) {\n if(!(nodeId || edgeId))\n return null; // must have one key or the other\n if(nodeId) nodeId = nodeId.replace(/\\//g, '%2F');\n if(edgeId) edgeId = edgeId.replace(/\\//g, '%2F');\n return (nodeId ? 'node/' + nodeId : 'edge/' + edgeId) + '/' + portName;\n};\nfunction split_port_name(portname) {\n var parts = portname.split('/');\n console.assert(parts.length === 3);\n parts = parts.map(function(p) {\n return p.replace(/%2F/g, '/');\n });\n if(parts[0] === 'node')\n return {\n nodeKey: parts[1],\n name: parts[2]\n };\n else return {\n edgeKey: parts[1],\n name: parts[2]\n };\n}\nfunction project_port(diagram, n, p) {\n if(!p.vec) {\n console.assert(!p.edges.length);\n throw new Error(\"port has not been placed, maybe install place_ports? \" + p.name);\n }\n p.pos = diagram.shape(n.dcg_shape.shape).intersect_vec(n, p.vec[0]*1000, p.vec[1]*1000);\n}\n\ndc_graph.place_ports = function() {\n function received_layout(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n var node_ports = diagram.nodePorts();\n\n function is_ccw(u, v) {\n return u[0]*v[1] - u[1]*v[0] > 0;\n }\n function in_bounds(v, bounds) {\n // assume bounds are ccw\n return is_ccw(bounds[0], v) && is_ccw(v, bounds[1]);\n }\n function clip(v, bounds) {\n if(is_ccw(v, bounds[0]))\n return bounds[0];\n else if(is_ccw(bounds[1], v))\n return bounds[1];\n else return v;\n }\n function a_to_v(a) {\n return [Math.cos(a), Math.sin(a)];\n }\n function v_to_a(v) {\n return Math.atan2(v[1], v[0]);\n }\n function distance(p, p2) {\n return Math.hypot(p2.pos.x - p.pos.x, p2.pos.y - p.pos.y);\n }\n function misses(p, p2) {\n var dist = distance(p, p2);\n var misses = dist > _behavior.minDistance();\n return misses;\n }\n function rand_within(a, b) {\n return a + Math.random()*(b-a);\n }\n // calculate port positions\n for(var nid in node_ports) {\n var n = nodes[nid],\n nports = node_ports[nid];\n\n // make sure that we have vector and angle bounds for any ports with specification\n nports.forEach(function(p) {\n var bounds = p.orig && diagram.portBounds.eval(p) || [0, 2*Math.PI];\n if(Array.isArray(bounds[0])) {\n p.vbounds = bounds;\n p.abounds = bounds.map(v_to_a);\n }\n else {\n p.vbounds = bounds.map(a_to_v);\n p.abounds = bounds;\n }\n if(p.abounds[0] > p.abounds[1])\n p.abounds[1] += 2*Math.PI;\n console.assert(p.orig || p.vec, 'unplaced unspecified port');\n });\n\n // determine which ports satisfy bounds or are unplaced\n var inside = [], outside = [], unplaced = [];\n nports.forEach(function(p) {\n if(!p.vec)\n unplaced.push(p);\n else if(p.vbounds && !in_bounds(p.vec, p.vbounds))\n outside.push(p);\n else\n inside.push(p);\n });\n\n // shunt outside ports into their bounds\n outside.forEach(function(p) {\n p.vec = clip(p.vec, p.vbounds);\n inside.push(p);\n });\n\n // for all unplaced ports that share a bounds, evenly distribute them within those bounds.\n // assume that bounds are disjoint.\n var boundses = {}, boundports = {};\n unplaced.forEach(function(p) {\n var boundskey = p.abounds.map(function(x) { return x.toFixed(3); }).join(',');\n boundses[boundskey] = p.abounds;\n boundports[boundskey] = boundports[boundskey] || [];\n boundports[boundskey].push(p);\n });\n for(var b in boundports) {\n var bounds = boundses[b], bports = boundports[b];\n if(bports.length === 1)\n bports[0].vec = a_to_v((bounds[0] + bounds[1])/2);\n else {\n var slice = (bounds[1] - bounds[0]) / (boundports[b].length - 1);\n boundports[b].forEach(function(p, i) {\n p.vec = a_to_v(bounds[0] + i*slice);\n });\n }\n }\n inside = inside.concat(unplaced);\n unplaced = [];\n\n // determine positions of all satisfied\n inside.forEach(function(p) {\n project_port(diagram, n, p);\n });\n\n // detect any existing collisions, unplace the one without edges or second one\n for(var i = 0; i < inside.length; ++i) {\n var x = inside[i];\n if(unplaced.includes(x))\n continue;\n for(var j = i+1; j < inside.length; ++j) {\n var y = inside[j];\n if(unplaced.includes(y))\n continue;\n if(!misses(x, y)) {\n if(!x.edges.length) {\n unplaced.push(x);\n continue;\n }\n else\n unplaced.push(y);\n }\n }\n }\n inside = inside.filter(function(p) { return !unplaced.includes(p); });\n\n // place any remaining by trying random spots within the range until it misses all or we give up\n var patience = _behavior.patience(), maxdist = 0, maxvec;\n while(unplaced.length) {\n var p = unplaced[0];\n p.vec = a_to_v(rand_within(p.abounds[0], p.abounds[1]));\n project_port(diagram, n, p);\n var mindist = d3.min(inside, function(p2) { return distance(p, p2); });\n if(mindist > maxdist) {\n maxdist = mindist;\n maxvec = p.vec;\n }\n if(!patience-- || mindist > _behavior.minDistance()) {\n if(patience<0) {\n console.warn('ran out of patience placing a port');\n p.vec = maxvec;\n project_port(diagram, n, p);\n }\n inside.push(p);\n unplaced.shift();\n patience = _behavior.patience();\n maxdist = 0;\n }\n }\n }\n };\n var _behavior = {\n parent: property(null).react(function(p) {\n if(p) {\n p.on('receivedLayout.place-ports', received_layout);\n } else if(_behavior.parent())\n _behavior.parent().on('receivedLayout.place-ports', null);\n }),\n // minimum distance between ports\n minDistance: property(20),\n // number of random places to try when resolving collision\n patience: property(20)\n };\n\n return _behavior;\n};\n","dc_graph.troubleshoot = function() {\n var _debugLayer = null;\n\n function add_behavior(diagram, node, edge, ehover) {\n if(!_debugLayer)\n _debugLayer = diagram.g().append('g').attr({\n class: 'troubleshoot',\n 'pointer-events': 'none'\n });\n var centers = node.data().map(function(n) {\n return {\n x: n.cola.x,\n y: n.cola.y\n };\n });\n var crosshairs = _debugLayer.selectAll('path.nodecenter').data(centers);\n crosshairs.exit().remove();\n crosshairs.enter().append('path').attr('class', 'nodecenter');\n crosshairs.attr({\n d: function(c) {\n return 'M' + (c.x - _behavior.xhairWidth()/2) + ',' + c.y + ' h' + _behavior.xhairWidth() +\n ' M' + c.x + ',' + (c.y - _behavior.xhairHeight()/2) + ' v' + _behavior.xhairHeight();\n },\n opacity: _behavior.xhairOpacity() !== null ? _behavior.xhairOpacity() : _behavior.opacity(),\n stroke: _behavior.xhairColor()\n });\n function cola_point(n) {\n return {x: n.cola.x, y: n.cola.y};\n }\n var colabounds = node.data().map(function(n) {\n return boundary(cola_point(n), n.cola.width, n.cola.height);\n });\n var colaboundary = _debugLayer.selectAll('path.colaboundary').data(colabounds);\n draw_corners(colaboundary, 'colaboundary');\n\n var textbounds = node.data().map(function(n) {\n if(!n.bbox)\n return null;\n return boundary(cola_point(n), n.bbox.width, n.bbox.height);\n }).filter(function(n) { return !!n; });\n var textboundary = _debugLayer.selectAll('path.textboundary').data(textbounds);\n draw_corners(textboundary, 'textboundary');\n\n var radiibounds = node.data().map(function(n) {\n if(!typeof n.dcg_rx === 'number')\n return null;\n return boundary(cola_point(n), n.dcg_rx*2, n.dcg_ry*2);\n }).filter(function(n) { return !!n; });\n var radiiboundary = _debugLayer.selectAll('path.radiiboundary').data(radiibounds);\n draw_corners(radiiboundary, 'radiiboundary');\n\n var domain = _debugLayer.selectAll('rect.domain').data([0]);\n domain.enter().append('rect');\n var xd = _behavior.parent().x().domain(), yd = _behavior.parent().y().domain();\n domain.attr({\n class: 'domain',\n fill: 'none',\n opacity: _behavior.domainOpacity(),\n stroke: _behavior.domainColor(),\n 'stroke-width': _behavior.domainStrokeWidth(),\n x: xd[0],\n y: yd[0],\n width: xd[1] - xd[0],\n height: yd[1] - yd[0]\n });\n }\n function boundary(point, wid, hei) {\n return {\n left: point.x - wid/2,\n top: point.y - hei/2,\n right: point.x + wid/2,\n bottom: point.y + hei/2\n };\n };\n function bound_tick(x, y, dx, dy) {\n return 'M' + x + ',' + (y + dy) + ' v' + -dy + ' h' + dx;\n }\n function corners(bounds) {\n return [\n bound_tick(bounds.left, bounds.top, _behavior.boundsWidth(), _behavior.boundsHeight()),\n bound_tick(bounds.right, bounds.top, -_behavior.boundsWidth(), _behavior.boundsHeight()),\n bound_tick(bounds.right, bounds.bottom, -_behavior.boundsWidth(), -_behavior.boundsHeight()),\n bound_tick(bounds.left, bounds.bottom, _behavior.boundsWidth(), -_behavior.boundsHeight()),\n ].join(' ');\n }\n function draw_corners(binding, classname) {\n binding.exit().remove();\n binding.enter().append('path').attr('class', classname);\n binding.attr({\n d: corners,\n opacity: _behavior.boundsOpacity() !== null ? _behavior.boundsOpacity() : _behavior.opacity(),\n stroke: _behavior.boundsColor(),\n fill: 'none'\n });\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n if(_debugLayer)\n _debugLayer.remove();\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n laterDraw: true,\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n _behavior.opacity = property(0.75);\n\n _behavior.xhairOpacity = property(null);\n _behavior.xhairWidth = property(10);\n _behavior.xhairHeight = property(10);\n _behavior.xhairColor = property('blue');\n\n _behavior.boundsOpacity = property(null);\n _behavior.boundsWidth = property(10);\n _behavior.boundsHeight = property(10);\n _behavior.boundsColor = property('green');\n\n _behavior.domainOpacity = property(0.6);\n _behavior.domainColor = property('darkorange');\n _behavior.domainStrokeWidth = property(11);\n\n return _behavior;\n};\n\n"," dc_graph.validate = function(title) {\n function falsy(objects, accessor, what, who) {\n var f = objects.filter(function(o) {\n return !accessor(o);\n });\n return f.length ?\n [what + ' is empty for ' + f.length + ' of ' + objects.length + ' ' + who, f] :\n null;\n }\n function build_index(objects, accessor) {\n return objects.reduce(function(m, o) {\n m[accessor(o)] = o;\n return m;\n }, {});\n }\n function not_found(index, objects, accessor, what, where, who) {\n var nf = objects.filter(function(o) {\n return !index[accessor(o)];\n }).map(function(o) {\n return {key: accessor(o), value: o};\n });\n return nf.length ?\n [what + ' was not found in ' + where, Object.keys(index), 'for ' + nf.length + ' of ' + objects.length + ' ' + who, nf] :\n null;\n }\n function validate() {\n var diagram = _behavior.parent();\n var nodes = diagram.nodeGroup().all(),\n edges = diagram.edgeGroup().all(),\n ports = diagram.portGroup() ? diagram.portGroup().all() : [];\n var errors = [];\n\n function check(error) {\n if(error)\n errors.push(error);\n }\n\n check(falsy(nodes, diagram.nodeKey(), 'nodeKey', 'nodes'));\n check(falsy(edges, diagram.edgeSource(), 'edgeSource', 'edges'));\n check(falsy(edges, diagram.edgeTarget(), 'edgeTarget', 'edges'));\n\n var contentTypes = d3.set(diagram.content.enum());\n var ct = dc_graph.functor_wrap(diagram.nodeContent());\n var noContentNodes = nodes.filter(function(kv) {\n return !contentTypes.has(ct(kv));\n });\n if(noContentNodes.length)\n errors.push(['there are ' + noContentNodes.length + ' nodes with nodeContent not matching any content', noContentNodes]);\n\n var nindex = build_index(nodes, diagram.nodeKey()),\n eindex = build_index(edges, diagram.edgeKey());\n check(not_found(nindex, edges, diagram.edgeSource(), 'edgeSource', 'nodes', 'edges'));\n check(not_found(nindex, edges, diagram.edgeTarget(), 'edgeTarget', 'nodes', 'edges'));\n\n check(falsy(ports, function(p) {\n return diagram.portNodeKey() && diagram.portNodeKey()(p) ||\n diagram.portEdgeKey() && diagram.portEdgeKey()(p);\n }, 'portNodeKey||portEdgeKey', 'ports'));\n\n var named_ports = !diagram.portNodeKey() && [] || ports.filter(function(p) {\n return diagram.portNodeKey()(p);\n });\n var anonymous_ports = !diagram.portEdgeKey() && [] || ports.filter(function(p) {\n return diagram.portEdgeKey()(p);\n });\n check(not_found(nindex, named_ports, diagram.portNodeKey(), 'portNodeKey', 'nodes', 'ports'));\n check(not_found(eindex, anonymous_ports, diagram.portEdgeKey(), 'portEdgeKey', 'edges', 'ports'));\n\n if(diagram.portName()) {\n var pindex = build_index(named_ports, function(p) {\n return diagram.portNodeKey()(p) + ' - ' + diagram.portName()(p);\n });\n if(diagram.edgeSourcePortName())\n check(not_found(pindex, edges, function(e) {\n return diagram.edgeSource()(e) + ' - ' + d3.functor(diagram.edgeSourcePortName())(e);\n }, 'edgeSourcePortName', 'ports', 'edges'));\n if(diagram.edgeTargetPortName())\n check(not_found(pindex, edges, function(e) {\n return diagram.edgeTarget()(e) + ' - ' + d3.functor(diagram.edgeTargetPortName())(e);\n }, 'edgeTargetPortName', 'ports', 'edges'));\n }\n\n function count_text() {\n return nodes.length + ' nodes, ' + edges.length + ' edges, ' + ports.length + ' ports';\n }\n if(errors.length) {\n console.warn('validation of ' + title + ' failed with ' + count_text() + ':');\n errors.forEach(function(err) {\n console.warn.apply(null, err);\n });\n }\n else\n console.log('validation of ' + title + ' succeeded with ' + count_text() + '.');\n }\n var _behavior = {\n parent: property(null).react(function(p) {\n if(p)\n p.on('data.validate', validate);\n else\n _behavior.parent().on('data.validate', null);\n })\n };\n\n return _behavior;\n};\n","/**\n## Legend\n\nThe dc_graph.legend shows labeled examples of nodes & edges, within the frame of a dc_graph.diagram.\n**/\ndc_graph.legend = function(legend_namespace) {\n legend_namespace = legend_namespace || 'node-legend';\n var _items, _included = [];\n var _dispatch = d3.dispatch('filtered');\n var _totals, _counts;\n\n function apply_filter() {\n if(_legend.dimension()) {\n _legend.dimension().filterFunction(function(k) {\n return !_included.length || _included.includes(k);\n });\n _legend.parent().redraw();\n }\n }\n\n var _legend = dc_graph.behavior(legend_namespace, {\n add_behavior: redraw,\n remove_behavior: function() {},\n parent: function(p) {\n if(p) {\n p\n .on('render.' + legend_namespace, render)\n .on('data.' + legend_namespace, on_data);\n }\n else {\n _legend.parent()\n .on('render.' + legend_namespace, null)\n .on('data.' + legend_namespace, null);\n }\n }\n });\n\n /**\n #### .type([value])\n Set or get the handler for the specific type of item to be displayed. Default: dc_graph.legend.node_legend()\n **/\n _legend.type = property(dc_graph.legend.node_legend());\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 #### .itemWidth([value])\n Set or get width to reserve for legend item. Default: 30.\n **/\n _legend.itemWidth = _legend.nodeWidth = property(40);\n\n /**\n #### .itemHeight([value])\n Set or get height to reserve for legend item. Default: 30.\n **/\n _legend.itemHeight = _legend.nodeHeight = property(40);\n\n /**\n #### .noLabel([value])\n Remove item labels, since legend labels are displayed outside of the items. Default: true\n **/\n _legend.noLabel = property(true);\n\n _legend.counter = property(null);\n\n _legend.replaceFilter = function(filter) {\n if(filter && filter.length === 1)\n _included = filter[0];\n else\n _included = [];\n return _legend;\n };\n\n _legend.filters = function() {\n return _included;\n };\n\n _legend.on = function(type, f) {\n _dispatch.on(type, f);\n return _legend;\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 function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n if(_legend.counter())\n _counts = _legend.counter()(wnodes.map(get_original), wedges.map(get_original), wports.map(get_original));\n }\n\n function redraw() {\n var legend = _legend.parent().svg()\n .selectAll('g.dc-graph-legend.' + legend_namespace)\n .data([0]);\n legend.enter().append('g')\n .attr('class', 'dc-graph-legend ' + legend_namespace)\n .attr('transform', 'translate(' + _legend.x() + ',' + _legend.y() + ')');\n\n var item = legend.selectAll(_legend.type().itemSelector())\n .data(_items, function(n) { return n.name; });\n var itemEnter = _legend.type().create(_legend.parent(), item.enter(), _legend.itemWidth(), _legend.itemHeight());\n itemEnter.append('text')\n .attr('dy', '0.3em')\n .attr('class', 'legend-label');\n item\n .attr('transform', function(n, i) {\n return 'translate(' + _legend.itemWidth()/2 + ',' + (_legend.itemHeight() + _legend.gap())*(i+0.5) + ')';\n });\n item.select('text.legend-label')\n .attr('transform', 'translate(' + (_legend.itemWidth()/2+_legend.gap()) + ',0)')\n .attr('pointer-events', _legend.dimension() ? 'auto' : 'none')\n .text(function(d) {\n return d.name + (_legend.counter() && _counts ? (' (' + (_counts[d.orig.key] || 0) + (_counts[d.orig.key] !== _totals[d.orig.key] ? '/' + (_totals[d.orig.key] || 0) : '') + ')') : '');\n });\n _legend.type().draw(_legend.parent(), itemEnter, item);\n if(_legend.noLabel())\n item.selectAll(_legend.type().labelSelector()).remove();\n\n if(_legend.dropdown()) {\n var caret = item.selectAll('text.dropdown-caret').data(function(x) { return [x]; });\n caret\n .enter().append('text')\n .attr('dy', '0.3em')\n .attr('font-size', '75%')\n .attr('fill', 'blue')\n .attr('class', 'dropdown-caret')\n .style('visibility', 'hidden')\n .html(' ▼');\n caret\n .attr('dx', function(d) {\n return (_legend.itemWidth()/2+_legend.gap()) + getBBoxNoThrow(d3.select(this.parentNode).select('text.legend-label').node()).width;\n })\n .on('mouseenter', function(n) {\n var rect = this.getBoundingClientRect();\n var key = _legend.parent().nodeKey.eval(n);\n _legend.dropdown()\n .show(key, rect.x, rect.y);\n });\n item\n .on('mouseenter', function(d) {\n if(_counts && _counts[d.orig.key]) {\n d3.select(this).selectAll('.dropdown-caret')\n .style('visibility', 'visible');\n }\n })\n .on('mouseleave', function(d) {\n d3.select(this).selectAll('.dropdown-caret')\n .style('visibility', 'hidden');\n });\n }\n\n if(_legend.dimension()) {\n item.attr('cursor', 'pointer')\n .on('click.legend', function(d) {\n var key = _legend.parent().nodeKey.eval(d);\n if(!_included.length)\n _included = _items.map(_legend.parent().nodeKey.eval);\n if(_included.includes(key))\n _included = _included.filter(function(x) { return x !== key; });\n else\n _included.push(key);\n apply_filter();\n _dispatch.filtered(_legend, key);\n });\n } else {\n item.attr('cursor', 'auto')\n .on('click.legend', null);\n }\n item.transition().duration(1000)\n .attr('opacity', function(d) {\n return (!_included.length || _included.includes(_legend.parent().nodeKey.eval(d))) ? 1 : 0.25;\n });\n };\n\n _legend.countBaseline = function() {\n if(_legend.counter)\n _totals = _legend.counter()(\n _legend.parent().nodeGroup().all(),\n _legend.parent().edgeGroup().all(),\n _legend.parent().portGroup() && _legend.parent().portGroup().all());\n };\n\n function render() {\n var exemplars = _legend.exemplars();\n _legend.countBaseline();\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 redraw();\n };\n\n _legend.dropdown = property(null).react(function(v) {\n if(!!v !== !!_legend.dropdown() && _legend.parent() && _legend.parent().svg())\n window.setTimeout(_legend.redraw, 0);\n });\n\n /* enables filtering */\n _legend.dimension = property(null)\n .react(function(v) {\n if(!v) {\n _included = [];\n apply_filter();\n }\n });\n\n return _legend;\n};\n\n\ndc_graph.legend.node_legend = function() {\n return {\n itemSelector: function() {\n return '.node';\n },\n labelSelector: function() {\n return '.node-label';\n },\n create: function(diagram, selection) {\n return selection.append('g')\n .attr('class', 'node');\n },\n draw: function(diagram, itemEnter, item) {\n diagram\n ._enterNode(itemEnter)\n ._updateNode(item);\n }\n };\n};\n\ndc_graph.legend.edge_legend = function() {\n var _type = {\n itemSelector: function() {\n return '.edge-container';\n },\n labelSelector: function() {\n return '.edge-label';\n },\n create: function(diagram, selection, w, h) {\n var edgeEnter = selection.append('g')\n .attr('class', 'edge-container')\n .attr('opacity', 0);\n edgeEnter\n .append('rect')\n .attr({\n x: -w/2,\n y: -h/2,\n width: w,\n height: h,\n fill: 'green',\n opacity: 0\n });\n edgeEnter\n .selectAll('circle')\n .data([-1, 1])\n .enter()\n .append('circle')\n .attr({\n r: _type.fakeNodeRadius(),\n fill: 'none',\n stroke: 'black',\n \"stroke-dasharray\": \"4,4\",\n opacity: 0.15,\n transform: function(d) {\n return 'translate(' + [d * _type.length() / 2, 0].join(',') + ')';\n }\n });\n var edgex = _type.length()/2 - _type.fakeNodeRadius();\n edgeEnter.append('svg:path')\n .attr({\n class: 'edge',\n id: function(d) { return d.name; },\n d: 'M' + -edgex + ',0 L' + edgex + ',0',\n opacity: diagram.edgeOpacity.eval\n });\n\n return edgeEnter;\n },\n fakeNodeRadius: property(10),\n length: property(50),\n draw: function(diagram, itemEnter, item) {\n diagram._updateEdge(itemEnter.select('path.edge'));\n }\n };\n return _type;\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 * @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(_behavior.direction());\n if(_behavior.offset())\n _d3tip.offset(_behavior.offset());\n parent.svg().call(_d3tip);\n }\n }\n function fetch_and_show_content(d) {\n if(_behavior.disabled() || _behavior.selection().exclude && _behavior.selection().exclude(d3.event.target)) {\n hide_tip.call(this);\n return;\n }\n var target = this,\n next = function() {\n _behavior.content()(d, function(content) {\n _d3tip.show.call(target, content, target);\n d3.select('div.d3-tip')\n .selectAll('a.tip-link')\n .on('click', function() {\n d3.event.preventDefault();\n if(_behavior.linkCallback())\n _behavior.linkCallback()(this.id);\n });\n _dispatch.tipped(d);\n });\n };\n if(_hideTimeout)\n window.clearTimeout(_hideTimeout);\n if(_behavior.delay()) {\n window.clearTimeout(_showTimeout);\n _showTimeout = window.setTimeout(next, _behavior.delay());\n }\n else next();\n }\n\n function check_hide_tip() {\n if(d3.event.relatedTarget &&\n (!_behavior.selection().exclude || !_behavior.selection().exclude(d3.event.target)) &&\n (this && this.contains(d3.event.relatedTarget) || // do not hide when mouse is still over a child\n _behavior.clickable() && d3.event.relatedTarget.classList.contains('d3-tip')))\n return false;\n return true;\n }\n\n function preempt_tip() {\n if(_showTimeout) {\n window.clearTimeout(_showTimeout);\n _showTimeout = null;\n }\n }\n\n function hide_tip() {\n if(!check_hide_tip.apply(this))\n return;\n preempt_tip();\n _d3tip.hide();\n }\n\n function hide_tip_delay() {\n if(!check_hide_tip.apply(this))\n return;\n preempt_tip();\n if(_behavior.hideDelay())\n _hideTimeout = window.setTimeout(function () {\n _d3tip.hide();\n }, _behavior.hideDelay());\n else\n _d3tip.hide();\n }\n\n function add_behavior(diagram, node, edge, ehover) {\n init(diagram);\n _behavior.programmatic() || _behavior.selection().select(diagram, node, edge, ehover)\n .on('mouseover.' + _namespace, fetch_and_show_content)\n .on('mouseout.' + _namespace, hide_tip_delay);\n if(_behavior.clickable()) {\n d3.select('div.d3-tip')\n .on('mouseover.' + _namespace, function() {\n if(_hideTimeout)\n window.clearTimeout(_hideTimeout);\n })\n .on('mouseout.' + _namespace, hide_tip_delay);\n }\n }\n function remove_behavior(diagram, node, edge, ehover) {\n _behavior.programmatic() || _behavior.selection().select(diagram, node, edge, ehover)\n .on('mouseover.' + _namespace, null)\n .on('mouseout.' + _namespace, null);\n }\n\n var _behavior = dc_graph.behavior(_namespace, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n laterDraw: true\n });\n /**\n * Specify the direction for tooltips. Currently supports the\n * [cardinal and intercardinal directions](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 _behavior.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 thing 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: assume it's a node, show node title\n * var tip = dc_graph.tip().content(function(n, k) {\n * k(_behavior.parent() ? _behavior.parent().nodeTitle.eval(n) : '');\n * });\n **/\n _behavior.content = property(function(n, k) {\n k(_behavior.parent() ? _behavior.parent().nodeTitle.eval(n) : '');\n });\n\n _behavior.on = function(event, f) {\n return _dispatch.on(event, f);\n };\n\n _behavior.disabled = property(false);\n _behavior.programmatic = property(false);\n\n _behavior.displayTip = function(filter, n, cb) {\n if(typeof filter !== 'function') {\n var d = filter;\n filter = function(d2) { return d2 === d; };\n }\n var found = _behavior.selection().select(_behavior.parent(), _behavior.parent().selectAllNodes(), _behavior.parent().selectAllEdges(), null)\n .filter(filter);\n if(found.size() > 0) {\n var action = fetch_and_show_content;\n // we need to flatten e.g. for ports, which will have nested selections\n // .nodes() does this better in D3v4\n var flattened = found.reduce(function(p, v) {\n return p.concat(v);\n }, []);\n var which = (n || 0) % flattened.length;\n action.call(flattened[which], d3.select(flattened[which]).datum());\n d = d3.select(flattened[which]).datum();\n if(cb)\n cb(d);\n if(_behavior.programmatic())\n found.on('mouseout', hide_tip_delay);\n }\n return _behavior;\n };\n\n _behavior.hideTip = function(delay) {\n if(_d3tip) {\n if(delay)\n hide_tip_delay();\n else\n hide_tip();\n }\n return _behavior;\n };\n _behavior.selection = property(dc_graph.tip.select_node_and_edge());\n _behavior.showDelay = _behavior.delay = property(0);\n _behavior.hideDelay = property(200);\n _behavior.offset = property(null);\n _behavior.clickable = property(false);\n _behavior.linkCallback = property(null);\n\n return _behavior;\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(dc_graph.tip.table());\n **/\ndc_graph.tip.table = function() {\n var gen = function(d, k) {\n d = gen.fetch()(d);\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 gen.fetch = property(function(d) {\n return d.orig.value;\n });\n return gen;\n};\n\ndc_graph.tip.select_node_and_edge = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n // hack to merge selections, not supported d3v3\n var selection = diagram.selectAll('.foo-this-does-not-exist');\n selection[0] = node[0].concat(ehover ? ehover[0] : []);\n return selection;\n },\n exclude: function(element) {\n return ancestor_has_class(element, 'port');\n }\n };\n};\n\ndc_graph.tip.select_node = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return node;\n },\n exclude: function(element) {\n return ancestor_has_class(element, 'port');\n }\n };\n};\n\ndc_graph.tip.select_edge = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return edge;\n }\n };\n};\n\ndc_graph.tip.select_port = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return node.selectAll('g.port');\n }\n };\n};\n","dc_graph.dropdown = function() {\n dc_graph.dropdown.unique_id = (dc_graph.dropdown.unique_id || 16) + 1;\n var _dropdown = {\n id: 'id' + dc_graph.dropdown.unique_id,\n parent: property(null),\n show: function(key, x, y) {\n var dropdown = _dropdown.parent().root()\n .selectAll('div.dropdown.' + _dropdown.id).data([0]);\n var dropdownEnter = dropdown\n .enter().append('div')\n .attr('class', 'dropdown ' + _dropdown.id);\n dropdown\n .style('visibility', 'visible')\n .style('left', x + 'px')\n .style('top', y + 'px');\n var capture;\n var hides = _dropdown.hideOn().split('|');\n var selects = _dropdown.selectOn().split('|');\n if(hides.includes('leave'))\n dropdown.on('mouseleave', function() {\n dropdown.style('visibility', 'hidden');\n });\n else if(hides.includes('clickout')) {\n var diagram = _dropdown.parent();\n capture = diagram.svg().append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', diagram.width())\n .attr('height', diagram.height())\n .attr('opacity', 0)\n .on('click', function() {\n capture.remove();\n dropdown.style('visibility', 'hidden');\n });\n }\n var container = dropdown;\n if(_dropdown.scrollHeight()) {\n var height = _dropdown.scrollHeight();\n if(typeof height === 'number')\n height = height + 'px';\n dropdown\n .style('max-height', height)\n .property('scrollTop', 0);\n dropdownEnter\n .style('overflow-y', 'auto')\n .append('div')\n .attr('class', 'scroller');\n container = dropdown.selectAll('div.scroller');\n }\n var values = _dropdown.fetchValues()(key, function(values) {\n var items = container\n .selectAll('div.dropdown-item').data(values);\n items\n .enter().append('div')\n .attr('class', 'dropdown-item');\n items.exit().remove();\n var select_event = null;\n if(selects.includes('click'))\n select_event = 'click';\n else if(selects.includes('hover'))\n select_event = 'mouseenter';\n items\n .text(function(item) { return _dropdown.itemText()(item); });\n if(select_event) {\n items\n .on(select_event + '.select', function(d) {\n _dropdown.itemSelected()(d);\n });\n }\n if(hides.includes('clickitem')) {\n items\n .on('click.hide', function(d) {\n capture.remove();\n dropdown.style('visibility', 'hidden');\n });\n }\n });\n },\n hideOn: property('clickout|clickitem'),\n selectOn: property('click'),\n height: property(10),\n itemText: property(function(x) { return x; }),\n itemSelected: property(function() {}),\n fetchValues: property(function(key, k) { k([]); }),\n scrollHeight: property('12em')\n };\n return _dropdown;\n};\n","dc_graph.keyboard = function() {\n var _input_anchor, _dispatch = d3.dispatch('keydown', 'keyup');\n\n function keydown() {\n _dispatch.keydown();\n }\n function keyup() {\n _dispatch.keyup();\n }\n function add_behavior(diagram) {\n _input_anchor = diagram.svg().selectAll('a#dcgraph-keyboard').data([1]);\n _input_anchor.enter()\n .insert('a', ':first-child').attr({\n id: 'dcgraph-keyboard',\n href: '#'\n });\n _input_anchor.on('keydown.keyboard', keydown);\n _input_anchor.on('keyup.keyboard', keyup);\n\n // grab focus whenever svg is interacted with (?)\n diagram.svg().on('mouseup.keyboard', function() {\n _behavior.focus();\n });\n }\n function remove_behavior(diagram) {\n _input_anchor.remove();\n }\n var _behavior = dc_graph.behavior('brush', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n\n _behavior.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\n _dispatch.on(event, f);\n return this;\n };\n\n _behavior.focus = function() {\n if(!_behavior.disableFocus())\n _input_anchor.node().focus();\n };\n\n _behavior.disableFocus = property(false);\n\n return _behavior;\n};\n","// adapted from\n// http://stackoverflow.com/questions/9308938/inline-text-editing-in-svg/#26644652\n\ndc_graph.edit_text = function(parent, options) {\n var foreign = parent.append('foreignObject').attr({\n height: '100%',\n width: '100%' // don't wrap\n });\n function reposition() {\n var pos;\n switch(options.align) {\n case 'left':\n pos = [options.box.x, options.box.y];\n break;\n default:\n case 'center':\n pos = [\n options.box.x + (options.box.width - textdiv.node().offsetWidth)/2,\n options.box.y + (options.box.height - textdiv.node().offsetHeight)/2\n ];\n break;\n }\n foreign.attr('transform', 'translate(' + pos.join(' ') + ')');\n }\n var textdiv = foreign.append('xhtml:div');\n var text = options.text || \"type on me\";\n textdiv.text(text).attr({\n contenteditable: true,\n width: 'auto'\n }).style({\n display: 'inline-block',\n 'background-color': 'white',\n padding: '2px'\n });\n\n function stopProp() {\n d3.event.stopPropagation();\n }\n foreign\n .on('mousedown', stopProp)\n .on('mousemove', stopProp)\n .on('mouseup', stopProp)\n .on('dblclick', stopProp);\n\n function accept() {\n options.accept && options.accept(textdiv.text());\n textdiv.on('blur.edittext', null);\n foreign.remove();\n options.finally && options.finally();\n }\n function cancel() {\n options.cancel && options.cancel();\n textdiv.on('blur.edittext', null);\n foreign.remove();\n options.finally && options.finally();\n }\n\n textdiv.on('keydown.edittext', function() {\n if(d3.event.keyCode===13) {\n d3.event.preventDefault();\n }\n }).on('keyup.edittext', function() {\n if(d3.event.keyCode===13) {\n accept();\n } else if(d3.event.keyCode===27) {\n cancel();\n }\n reposition();\n }).on('blur.edittext', cancel);\n reposition();\n textdiv.node().focus();\n\n var range = document.createRange();\n if(options.selectText) {\n range.selectNodeContents(textdiv.node());\n } else {\n range.setStart(textdiv.node(), 1);\n range.setEnd(textdiv.node(), 1);\n }\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n};\n","dc_graph.brush = function() {\n var _brush = null, _gBrush, _dispatch = d3.dispatch('brushstart', 'brushmove', 'brushend');\n\n function brushstart() {\n _dispatch.brushstart();\n }\n function brushmove() {\n var ext = _brush.extent();\n _dispatch.brushmove(ext);\n }\n function brushend() {\n _dispatch.brushend();\n _gBrush.call(_brush.clear());\n }\n function install_brush(diagram) {\n if(!_brush) {\n _brush = d3.svg.brush()\n .x(diagram.x()).y(diagram.y())\n .on('brushstart', brushstart)\n .on('brush', brushmove)\n .on('brushend', brushend);\n }\n if(!_gBrush) {\n _gBrush = diagram.svg().insert('g', ':first-child')\n .attr('class', 'brush')\n .call(_brush);\n }\n }\n function remove_brush() {\n if(_gBrush) {\n _gBrush.remove();\n _gBrush = null;\n }\n }\n var _behavior = dc_graph.behavior('brush', {\n add_behavior: function() {},\n remove_behavior: remove_brush\n });\n\n _behavior.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\n _dispatch.on(event, f);\n return this;\n };\n _behavior.activate = function() {\n install_brush(_behavior.parent());\n return this;\n };\n _behavior.deactivate = function() {\n remove_brush();\n return this;\n };\n _behavior.isActive = function () {\n return !!_gBrush;\n };\n\n return _behavior;\n};\n","dc_graph.select_things = function(things_group, things_name, thinginess) {\n var _selected = [], _oldSelected;\n var _mousedownThing = null;\n\n var contains_predicate = thinginess.keysEqual ?\n function(k1) {\n return function(k2) {\n return thinginess.keysEqual(k1, k2);\n };\n } :\n function(k1) {\n return function(k2) {\n return k1 === k2;\n };\n };\n function contains(array, key) {\n return !!_selected.find(contains_predicate(key));\n }\n function isUnion(event) {\n return event.shiftKey;\n }\n function isToggle(event) {\n return is_a_mac ? event.metaKey : event.ctrlKey;\n }\n function add_array(array, key) {\n return contains(array, key) ? array : array.concat([key]);\n }\n function toggle_array(array, key) {\n return contains(array, key) ? array.filter(function(x) { return x != key; }) : array.concat([key]);\n }\n\n function selection_changed(diagram) {\n return function(selection, refresh) {\n if(refresh === undefined)\n refresh = true;\n _selected = selection;\n if(refresh)\n diagram.refresh();\n };\n }\n var _have_bce = false;\n function background_click_event(diagram, v) {\n // we seem to have nodes-background interrupting edges-background by reinstalling uselessly\n if(_have_bce === v)\n return;\n diagram.svg().on('click.' + things_name, v ? function(t) {\n if(d3.event.target === this)\n things_group.set_changed([]);\n } : null);\n _have_bce = v;\n }\n function brushstart() {\n if(isUnion(d3.event.sourceEvent) || isToggle(d3.event.sourceEvent))\n _oldSelected = _selected.slice();\n else {\n _oldSelected = [];\n things_group.set_changed([]);\n }\n }\n function brushmove(ext) {\n if(!thinginess.intersectRect)\n return;\n var rectSelect = thinginess.intersectRect(ext);\n var newSelected;\n if(isUnion(d3.event.sourceEvent))\n newSelected = rectSelect.reduce(add_array, _oldSelected);\n else if(isToggle(d3.event.sourceEvent))\n newSelected = rectSelect.reduce(toggle_array, _oldSelected);\n else\n newSelected = rectSelect;\n things_group.set_changed(newSelected);\n }\n\n function add_behavior(diagram, node, edge) {\n var condition = _behavior.noneIsAll() ? function(t) {\n return !_selected.length || contains(_selected, thinginess.key(t));\n } : function(t) {\n return contains(_selected, thinginess.key(t));\n };\n thinginess.applyStyles(condition);\n\n thinginess.clickables(diagram, node, edge).on('mousedown.' + things_name, function(t) {\n _mousedownThing = t;\n });\n\n thinginess.clickables(diagram, node, edge).on('mouseup.' + things_name, function(t) {\n if(thinginess.excludeClick && thinginess.excludeClick(d3.event.target))\n return;\n // it's only a click if the same target was mousedown & mouseup\n // but we can't use click event because things may have been reordered\n if(_mousedownThing !== t)\n return;\n var key = thinginess.key(t), newSelected;\n if(_behavior.multipleSelect()) {\n if(isUnion(d3.event))\n newSelected = add_array(_selected, key);\n else if(isToggle(d3.event))\n newSelected = toggle_array(_selected, key);\n }\n if(!newSelected)\n newSelected = [key];\n things_group.set_changed(newSelected);\n });\n\n if(_behavior.multipleSelect()) {\n var brush_mode = diagram.child('brush');\n brush_mode.activate();\n }\n else\n background_click_event(diagram, _behavior.clickBackgroundClears());\n\n if(_behavior.autoCropSelection()) {\n // drop any selected which no longer exist in the diagram\n var present = thinginess.clickables(diagram, node, edge).data().map(thinginess.key);\n var now_selected = _selected.filter(function(k) { return contains(present, k); });\n if(_selected.length !== now_selected.length)\n things_group.set_changed(now_selected, false);\n }\n }\n\n function remove_behavior(diagram, node, edge) {\n thinginess.clickables(diagram, node, edge).on('click.' + things_name, null);\n diagram.svg().on('click.' + things_name, null);\n thinginess.removeStyles();\n }\n\n var _behavior = dc_graph.behavior(things_name, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n things_group.on('set_changed.' + things_name, p ? selection_changed(p) : null);\n if(p && _behavior.multipleSelect()) {\n var brush_mode = p.child('brush');\n if(!brush_mode) {\n brush_mode = dc_graph.brush();\n p.child('brush', brush_mode);\n }\n brush_mode\n .on('brushstart.' + things_name, brushstart)\n .on('brushmove.' + things_name, brushmove);\n }\n },\n laterDraw: thinginess.laterDraw || false\n });\n\n _behavior.multipleSelect = property(true);\n _behavior.clickBackgroundClears = property(true, false).react(function(v) {\n if(!_behavior.multipleSelect() && _behavior.parent())\n background_click_event(_behavior.parent(), v);\n });\n _behavior.noneIsAll = property(false);\n // if you're replacing the data, you probably want the selection not to be preserved when a thing\n // with the same key re-appears later (true). however, if you're filtering dc.js-style, you\n // probably want filters to be independent between diagrams (false)\n _behavior.autoCropSelection = property(true);\n // if you want to do the cool things select_things can do\n _behavior.thinginess = function() {\n return thinginess;\n };\n return _behavior;\n};\n\ndc_graph.select_things_group = function(brushgroup, type) {\n window.chart_registry.create_type(type, function() {\n return d3.dispatch('set_changed');\n });\n\n return window.chart_registry.create_group(type, brushgroup);\n};\n","dc_graph.select_nodes = function(props, options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n\n var thinginess = {\n intersectRect: function(ext) {\n return _behavior.parent().selectAllNodes().data().filter(function(n) {\n return n && ext[0][0] < n.cola.x && n.cola.x < ext[1][0] &&\n ext[0][1] < n.cola.y && n.cola.y < ext[1][1];\n }).map(this.key);\n },\n clickables: function(diagram, node, edge) {\n return node;\n },\n excludeClick: function(element) {\n return ancestor_has_class(element, 'port');\n },\n key: function(n) {\n return _behavior.parent().nodeKey.eval(n);\n },\n applyStyles: function(pred) {\n _behavior.parent().cascade(50, true, node_edge_conditions(pred, null, props));\n },\n removeStyles: function() {\n _behavior.parent().cascade(50, false, props);\n }\n };\n var _behavior = dc_graph.select_things(select_nodes_group, 'select-nodes', thinginess);\n return _behavior;\n};\n","dc_graph.select_edges = function(props, options) {\n options = options || {};\n var select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges');\n var thinginess = {\n intersectRect: function(ext) {\n return this.clickables().data().filter(function(e) {\n // this nonsense because another select_things may have invalidated the edge positions (!!)\n var sp = {\n x: e.source.cola.x + e.sourcePort.pos.x,\n y: e.source.cola.y + e.sourcePort.pos.y\n },\n tp = {\n x: e.target.cola.x + e.targetPort.pos.x,\n y: e.target.cola.y + e.targetPort.pos.y\n };\n return [sp, tp].some(function(p) {\n return ext[0][0] < p.x && p.x < ext[1][0] &&\n ext[0][1] < p.y && p.y < ext[1][1];\n });\n }).map(this.key);\n },\n clickables: function() {\n return _behavior.parent().selectAllEdges('.edge-hover');\n },\n key: function(e) {\n return _behavior.parent().edgeKey.eval(e);\n },\n applyStyles: function(pred) {\n _behavior.parent().cascade(50, true, node_edge_conditions(null, pred, props));\n },\n removeStyles: function() {\n _behavior.parent().cascade(50, false, props);\n }\n };\n var _behavior = dc_graph.select_things(select_edges_group, 'select-edges', thinginess);\n return _behavior;\n};\n","dc_graph.select_ports = function(props, options) {\n options = options || {};\n var port_style = options.portStyle || 'symbols';\n var select_ports_group = dc_graph.select_things_group(options.select_ports_group || 'select-ports-group', 'select-ports');\n var thinginess = {\n laterDraw: true,\n intersectRect: null, // multiple selection not supported for now\n clickables: function() {\n return _behavior.parent().selectAllNodes('g.port');\n },\n key: function(p) {\n // this scheme also won't work with multiselect\n return p.named ?\n {node: _behavior.parent().nodeKey.eval(p.node), name: p.name} :\n {edge: _behavior.parent().edgeKey.eval(p.edges[0]), name: p.name};\n },\n applyStyles: function(pred) {\n _behavior.parent().portStyle(port_style).cascade(50, true, conditional_properties(pred, props));\n },\n removeStyles: function() {\n _behavior.parent().portStyle(port_style).cascade(50, false, props);\n },\n keysEqual: function(k1, k2) {\n return k1.name === k2.name && (k1.node ? k1.node === k2.node : k1.edge === k2.edge);\n }\n };\n var _behavior = dc_graph.select_things(select_ports_group, 'select-ports', thinginess);\n return _behavior;\n};\n","dc_graph.move_nodes = function(options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _selected = [], _startPos = null, _downNode, _moveStarted;\n var _brush, _drawGraphs, _selectNodes, _restoreBackgroundClick;\n var _maybeSelect = null;\n\n function isUnion(event) {\n return event.shiftKey;\n }\n function isToggle(event) {\n return is_a_mac ? event.metaKey : event.ctrlKey;\n }\n\n function selection_changed(diagram) {\n return function(selection, refresh) {\n if(refresh === undefined)\n refresh = true;\n _selected = selection;\n };\n }\n function for_each_selected(f, selected) {\n selected = selected || _selected;\n selected.forEach(function(key) {\n var n = _behavior.parent().getWholeNode(key);\n f(n, key);\n });\n }\n function add_behavior(diagram, node, edge) {\n node.on('mousedown.move-nodes', function(n) {\n // Need a more general way for modes to say \"I got this\"\n if(_drawGraphs && _drawGraphs.usePorts() && _drawGraphs.usePorts().eventPort())\n return;\n _startPos = dc_graph.event_coords(diagram);\n _downNode = d3.select(this);\n // if the node under the mouse is not in the selection, need to\n // make that node selected\n var key = diagram.nodeKey.eval(n);\n var selected = _selected;\n if(_selected.indexOf(key)<0) {\n selected = [key];\n _maybeSelect = key;\n }\n else _maybeSelect = null;\n for_each_selected(function(n) {\n n.original_position = [n.cola.x, n.cola.y];\n }, selected);\n if(_brush)\n _brush.deactivate();\n });\n function mouse_move() {\n if(_startPos) {\n if(!(d3.event.buttons & 1)) {\n mouse_up();\n return;\n }\n if(_maybeSelect)\n select_nodes_group.set_changed([_maybeSelect]);\n var pos = dc_graph.event_coords(diagram);\n var dx = pos[0] - _startPos[0],\n dy = pos[1] - _startPos[1];\n if(!_moveStarted && Math.hypot(dx, dy) > _behavior.dragSize()) {\n _moveStarted = true;\n // prevent click event for this node setting selection just to this\n if(_downNode)\n _downNode.style('pointer-events', 'none');\n }\n if(_moveStarted) {\n for_each_selected(function(n) {\n n.cola.x = n.original_position[0] + dx;\n n.cola.y = n.original_position[1] + dy;\n });\n diagram.reposition(node, edge);\n }\n }\n }\n function mouse_up() {\n if(_startPos) {\n if(_moveStarted) {\n _moveStarted = false;\n if(_downNode) {\n _downNode.style('pointer-events', null);\n _downNode = null;\n }\n var fixes = [];\n for_each_selected(function(n, id) {\n fixes.push({\n id: id,\n pos: {x: n.cola.x, y: n.cola.y}\n });\n });\n fix_nodes_group.request_fixes(fixes);\n }\n if(_brush)\n _brush.activate();\n _startPos = null;\n }\n }\n node\n .on('mousemove.move-nodes', mouse_move)\n .on('mouseup.move-nodes', mouse_up);\n diagram.svg()\n .on('mousemove.move-nodes', mouse_move)\n .on('mouseup.move-nodes', mouse_up);\n }\n\n function remove_behavior(diagram, node, edge) {\n node.on('mousedown.move-nodes', null);\n node.on('mousemove.move-nodes', null);\n node.on('mouseup.move-nodes', null);\n }\n\n var _behavior = dc_graph.behavior('move-nodes', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n select_nodes_group.on('set_changed.move-nodes', p ? selection_changed(p) : null);\n _brush = p.child('brush');\n _drawGraphs = p.child('draw-graphs');\n _selectNodes = p.child('select-nodes');\n }\n });\n\n // minimum distance that is considered a drag, not a click\n _behavior.dragSize = property(5);\n\n return _behavior;\n};\n","dc_graph.fix_nodes = function(options) {\n options = options || {};\n var fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _fixedPosTag = options.fixedPosTag || 'fixedPos';\n var _fixes = [], _nodes, _wnodes, _edges, _wedges;\n\n var _execute = {\n nodeid: function(n) {\n return _behavior.parent().nodeKey.eval(n);\n },\n sourceid: function(e) {\n return _behavior.parent().edgeSource.eval(e);\n },\n targetid: function(e) {\n return _behavior.parent().edgeTarget.eval(e);\n },\n get_fix: function(n) {\n return _behavior.parent().nodeFixed.eval(n);\n },\n fix_node: function(n, pos) {\n n[_fixedPosTag] = pos;\n },\n unfix_node: function(n) {\n n[_fixedPosTag] = null;\n },\n clear_fixes: function() {\n _fixes = {};\n },\n register_fix: function(id, pos) {\n _fixes[id] = pos;\n }\n };\n\n function request_fixes(fixes) {\n _behavior.strategy().request_fixes(_execute, fixes);\n tell_then_set(find_changes()).then(function() {\n _behavior.parent().redraw();\n });\n }\n function new_node(nid, n, pos) {\n _behavior.strategy().new_node(_execute, nid, n, pos);\n }\n function new_edge(eid, sourceid, targetid) {\n var source = _nodes[sourceid], target = _nodes[targetid];\n _behavior.strategy().new_edge(_execute, eid, source, target);\n }\n function find_changes() {\n var changes = [];\n _wnodes.forEach(function(n) {\n var key = _behavior.parent().nodeKey.eval(n),\n fixPos = _fixes[key],\n oldFixed = n.orig.value[_fixedPosTag],\n changed = false;\n if(oldFixed) {\n if(!fixPos || fixPos.x !== oldFixed.x || fixPos.y !== oldFixed.y)\n changed = true;\n }\n else changed = fixPos;\n if(changed)\n changes.push({n: n, fixed: fixPos ? {x: fixPos.x, y: fixPos.y} : null});\n });\n return changes;\n }\n function execute_change(n, fixed) {\n if(fixed)\n _execute.fix_node(n.orig.value, fixed);\n else\n _execute.unfix_node(n.orig.value);\n }\n function tell_then_set(changes) {\n var callback = _behavior.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n var promises = changes.map(function(change) {\n var key = _behavior.parent().nodeKey.eval(change.n);\n return callback(key, change.fixed)\n .then(function(fixed) {\n execute_change(change.n, fixed);\n });\n });\n return Promise.all(promises);\n }\n function set_changes(changes) {\n changes.forEach(function(change) {\n execute_change(change.n, change.fixed);\n });\n }\n function tell_changes(changes) {\n var callback = _behavior.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n var promises = changes.map(function(change) {\n var key = _behavior.parent().nodeKey.eval(change.n);\n return callback(key, change.fixed);\n });\n return Promise.all(promises);\n }\n function fix_all_nodes(tell) {\n if(tell === undefined)\n tell = true;\n var changes = _wnodes.map(function(n) {\n return {n: n, fixed: {x: n.cola.x, y: n.cola.y}};\n });\n if(tell)\n return tell_then_set(changes);\n else {\n set_changes(changes);\n return Promise.resolve(undefined);\n }\n }\n function clear_fixes() {\n _behavior.strategy().clear_all_fixes && _behavior.strategy().clear_all_fixes();\n _execute.clear_fixes();\n }\n function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _nodes = nodes;\n _wnodes = wnodes;\n _edges = edges;\n _wedges = wedges;\n if(_behavior.strategy().on_data) {\n _behavior.strategy().on_data(_execute, nodes, wnodes, edges, wedges, ports, wports); // ghastly\n var changes = find_changes();\n set_changes(changes);\n // can't wait for backend to acknowledge/approve so just set then blast\n if(_behavior.reportOverridesAsynchronously())\n tell_changes(changes); // dangling promise\n }\n }\n\n var _behavior = {\n parent: property(null).react(function(p) {\n fix_nodes_group\n .on('request_fixes.fix-nodes', p ? request_fixes : null)\n .on('new_node.fix_nodes', p ? new_node : null)\n .on('new_edge.fix_nodes', p ? new_edge : null);\n if(p) {\n p.on('data.fix-nodes', on_data);\n } else if(_behavior.parent())\n _behavior.parent().on('data.fix-nodes', null);\n }),\n // callback for setting & fixing node position\n fixNode: property(null),\n // save/load may want to nail everything / start from scratch\n // (should probably be automatic though)\n fixAllNodes: fix_all_nodes,\n clearFixes: clear_fixes,\n strategy: property(dc_graph.fix_nodes.strategy.fix_last()),\n reportOverridesAsynchronously: property(true)\n };\n\n return _behavior;\n};\n\ndc_graph.fix_nodes.strategy = {};\ndc_graph.fix_nodes.strategy.fix_last = function() {\n return {\n request_fixes: function(exec, fixes) {\n exec.clear_fixes();\n fixes.forEach(function(fix) {\n exec.register_fix(fix.id, fix.pos);\n });\n },\n new_node: function(exec, nid, n, pos) {\n exec.fix_node(n, pos);\n },\n new_edge: function(exec, eid, source, target) {\n exec.unfix_node(source.orig.value);\n exec.unfix_node(target.orig.value);\n }\n };\n};\ndc_graph.fix_nodes.strategy.last_N_per_component = function(maxf) {\n maxf = maxf || 1;\n var _age = 0;\n var _allFixes = {};\n return {\n clear_all_fixes: function() {\n _allFixes = {};\n },\n request_fixes: function(exec, fixes) {\n ++_age;\n fixes.forEach(function(fix) {\n _allFixes[fix.id] = {id: fix.id, age: _age, pos: fix.pos};\n });\n },\n new_node: function(exec, nid, n, pos) {\n ++_age;\n _allFixes[nid] = {id: nid, age: _age, pos: pos};\n exec.fix_node(n, pos);\n },\n new_edge: function() {},\n on_data: function(exec, nodes, wnodes, edges, wedges, ports, wports) {\n ++_age;\n // add any existing fixes as requests\n wnodes.forEach(function(n) {\n var nid = exec.nodeid(n), pos = exec.get_fix(n);\n if(pos && !_allFixes[nid])\n _allFixes[nid] = {id: nid, age: _age, pos: pos};\n });\n // determine components\n var components = [];\n var dfs = dc_graph.undirected_dfs({\n nodeid: exec.nodeid,\n sourceid: exec.sourceid,\n targetid: exec.targetid,\n comp: function() {\n components.push([]);\n },\n node: function(compid, n) {\n components[compid].push(n);\n }\n });\n dfs(wnodes, wedges);\n // start from scratch\n exec.clear_fixes();\n // keep or produce enough fixed nodes per component\n components.forEach(function(comp, i) {\n var oldcomps = comp.reduce(function(cc, n) {\n if(n.last_component) {\n var counts = cc[n.last_component] = cc[n.last_component] || {\n total: 0,\n fixed: 0\n };\n counts.total++;\n if(_allFixes[exec.nodeid(n)])\n counts.fixed++;\n }\n return cc;\n }, {});\n var fixed_by_size = Object.keys(oldcomps).reduce(function(ff, compid) {\n if(oldcomps[compid].fixed)\n ff.push({compid: +compid, total: oldcomps[compid].total, fixed: oldcomps[compid].fixed});\n return ff;\n }, []).sort(function(coa, cob) {\n return cob.total - coa.total;\n });\n var largest_fixed = fixed_by_size.length && fixed_by_size[0].compid;\n var fixes = comp.filter(function(n) {\n return !n.last_component || n.last_component === largest_fixed;\n }).map(function(n) {\n return _allFixes[exec.nodeid(n)];\n }).filter(function(fix) {\n return fix;\n });\n if(fixes.length > maxf) {\n fixes.sort(function(f1, f2) {\n return f2.age - f1.age;\n });\n fixes = fixes.slice(0, maxf);\n }\n fixes.forEach(function(fix) {\n exec.register_fix(fix.id, fix.pos);\n });\n var kept = fixes.reduce(function(m, fix) {\n m[fix.id] = true;\n return m;\n }, {});\n comp.forEach(function(n) {\n var nid = exec.nodeid(n);\n if(!kept[nid])\n _allFixes[nid] = null;\n n.last_component = i+1;\n });\n });\n }\n };\n};\n\ndc_graph.fix_nodes_group = function(brushgroup) {\n window.chart_registry.create_type('fix-nodes', function() {\n return d3.dispatch('request_fixes', 'new_node', 'new_edge');\n });\n\n return window.chart_registry.create_group('fix-nodes', brushgroup);\n};\n","dc_graph.filter_selection = function(things_group, things_name) {\n things_name = things_name || 'select-nodes';\n var select_nodes_group = dc_graph.select_things_group(things_group || 'select-nodes-group', things_name);\n\n function selection_changed(diagram) {\n return function(selection) {\n if(selection.length) {\n var set = d3.set(selection);\n _behavior.dimensionAccessor()(diagram).filterFunction(function(k) {\n return set.has(k);\n });\n } else _behavior.dimensionAccessor()(diagram).filter(null);\n diagram.redrawGroup();\n };\n }\n\n var _behavior = {\n parent: property(null).react(function(p) {\n select_nodes_group.on('set_changed.filter-selection-' + things_name, p ? selection_changed(p) : null);\n })\n };\n _behavior.dimensionAccessor = property(function(diagram) {\n return diagram.nodeDimension();\n });\n return _behavior;\n};\n","dc_graph.delete_things = function(things_group, mode_name, id_tag) {\n id_tag = id_tag || 'id';\n var _deleteKey = is_a_mac ? 'Backspace' : 'Delete';\n var _keyboard, _selected = [];\n function selection_changed(selection) {\n _selected = selection;\n }\n function row_id(r) {\n return r[id_tag];\n }\n function delete_selection(selection) {\n if(!_behavior.crossfilterAccessor())\n throw new Error('need crossfilterAccessor');\n if(!_behavior.dimensionAccessor())\n throw new Error('need dimensionAccessor');\n selection = selection || _selected;\n if(selection.length === 0)\n return Promise.resolve([]);\n var promise = _behavior.preDelete() ? _behavior.preDelete()(selection) : Promise.resolve(selection);\n if(_behavior.onDelete())\n promise = promise.then(_behavior.onDelete());\n return promise.then(function(selection) {\n if(selection && selection.length) {\n var crossfilter = _behavior.crossfilterAccessor()(_behavior.parent()),\n dimension = _behavior.dimensionAccessor()(_behavior.parent());\n var all = crossfilter.all().slice(), n = all.length;\n dimension.filter(null);\n crossfilter.remove();\n var filtered = all.filter(function(r) {\n return selection.indexOf(row_id(r)) === -1;\n });\n if(all.length !== filtered.length + selection.length)\n console.warn('size after deletion is not previous size minus selection size',\n filtered.map(row_id), all.map(row_id), selection);\n crossfilter.add(filtered);\n\n _behavior.parent().redrawGroup();\n }\n return true;\n });\n }\n function add_behavior(diagram) {\n _keyboard.on('keyup.' + mode_name, function() {\n if(d3.event.code === _deleteKey)\n delete_selection();\n });\n }\n function remove_behavior(diagram) {\n }\n var _behavior = dc_graph.behavior(mode_name, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n things_group.on('set_changed.' + mode_name, selection_changed);\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n }\n }\n });\n _behavior.preDelete = property(null);\n _behavior.onDelete = property(null);\n _behavior.crossfilterAccessor = property(null);\n _behavior.dimensionAccessor = property(null);\n _behavior.deleteSelection = delete_selection;\n return _behavior;\n};\n","dc_graph.delete_nodes = function(id_tag, options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges');\n var _behavior = dc_graph.delete_things(select_nodes_group, 'delete-nodes', id_tag);\n\n _behavior.preDelete(function(nodes) {\n // request a delete of all attached edges, using the delete edges mode\n // kind of horrible\n var diagram = _behavior.parent();\n var deleteEdgesMode = diagram.child('delete-edges');\n if(!deleteEdgesMode)\n return null; // reject if we can't delete the edges\n // it is likely that the delete_edges mode is listening to the same keyup event we\n // are. introduce a pause to let it process the delete key now, deleting any selected edges.\n // then select any remaining edges connected to the selected nodes and delete those.\n //\n // more evidence that modes need to be able to say \"i got this\", or that we should have\n // batch deletion. otoh, given the current behavior, delete_nodes deferring to delete_edges\n // makes about as much sense as anything\n return Promise.resolve(undefined).then(function() {\n var deleteEdges = diagram.edgeGroup().all().filter(function(e) {\n return nodes.indexOf(diagram.edgeSource()(e)) !== -1 ||\n nodes.indexOf(diagram.edgeTarget()(e)) !== -1;\n }).map(diagram.edgeKey());\n select_edges_group.set_changed(deleteEdges);\n return deleteEdgesMode.deleteSelection().then(function() {\n return nodes;\n });\n });\n });\n return _behavior;\n};\n","dc_graph.label_things = function(options) {\n options = options || {};\n var select_things_group = dc_graph.select_things_group(options.select_group, options.select_type),\n label_things_group = dc_graph.label_things_group(options.label_group, options.label_type);\n var _selected = [];\n var _keyboard, _selectThings;\n\n function selection_changed_listener(diagram) {\n return function(selection) {\n _selected = selection;\n };\n }\n\n function grab_focus() {\n _keyboard.focus();\n }\n\n function edit_label_listener(diagram) {\n return function(thing, eventOptions) {\n var box = options.thing_box(thing);\n options.hide_thing_label(thing, true);\n dc_graph.edit_text(\n diagram.g(),\n {\n text: eventOptions.text || options.thing_label(thing) || options.default_label,\n align: options.align,\n box: box,\n selectText: eventOptions.selectText,\n accept: function(text) {\n return options.accept(thing, text);\n },\n finally: function() {\n options.hide_thing_label(thing, false);\n grab_focus();\n }\n });\n };\n }\n\n function edit_selection(node, edge, eventOptions) {\n // less than ideal interface.\n // what if there are other things? can i blame the missing metagraph?\n var thing = options.find_thing(_selected[0], node, edge);\n if(thing.empty()) {\n console.error(\"couldn't find thing '\" + _selected[0] + \"'!\");\n return;\n }\n if(thing.size()>1) {\n console.error(\"found too many things for '\" + _selected[0] + \"' (\" + thing.size() + \")!\");\n return;\n }\n label_things_group.edit_label(thing, eventOptions);\n }\n function add_behavior(diagram, node, edge) {\n _keyboard.on('keyup.' + options.label_type, function() {\n if(_selected.length) {\n // printable characters should start edit\n if(d3.event.key.length !== 1)\n return;\n edit_selection(node, edge, {text: d3.event.key, selectText: false});\n }\n });\n if(_selectThings)\n _selectThings.thinginess().clickables(diagram, node, edge).on('dblclick.' + options.label_type, function() {\n edit_selection(node, edge, {selectText: true});\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n }\n\n var _behavior = dc_graph.behavior(options.label_type, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n select_things_group.on('set_changed.' + options.label_type, p ? selection_changed_listener(p) : null);\n label_things_group.on('edit_label.' + options.label_type, p ? edit_label_listener(p) : null);\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n _selectThings = p.child(options.select_type);\n }\n }\n });\n _behavior.editSelection = function(eventOptions) {\n edit_selection(_behavior.parent().selectAllNodes(), _behavior.parent().selectAllEdges(), eventOptions);\n };\n return _behavior;\n};\n\ndc_graph.label_things_group = function(brushgroup, type) {\n window.chart_registry.create_type(type, function() {\n return d3.dispatch('edit_label');\n });\n\n return window.chart_registry.create_group(type, brushgroup);\n};\n","dc_graph.label_nodes = function(options) {\n options = options || {};\n var _labelTag = options.labelTag || 'label';\n options.select_group = options.select_group || 'select-nodes-group';\n options.select_type = options.select_type || 'select-nodes';\n options.label_group = options.label_group || 'label-nodes-group';\n options.label_type = options.label_type || 'label-nodes';\n options.default_label = \"node name\";\n\n options.find_thing = function(key, node, edge) {\n return node.filter(function(n) {\n return _behavior.parent().nodeKey.eval(n) === key;\n });\n };\n options.hide_thing_label = function(node, whether) {\n var contents = _behavior.parent().content(_behavior.parent().nodeContent.eval(node.datum()));\n contents.selectContent(node).attr('visibility', whether ? 'hidden' : 'visible');\n };\n options.thing_box = function(node, eventOptions) {\n var contents = _behavior.parent().content(_behavior.parent().nodeContent.eval(node.datum())),\n box = contents.textbox(node);\n box.x += node.datum().cola.x;\n box.y += node.datum().cola.y;\n return box;\n };\n options.thing_label = function(node) {\n return _behavior.parent().nodeLabel.eval(node.datum());\n };\n options.accept = function(node, text) {\n var callback = _behavior.changeNodeLabel() ?\n _behavior.changeNodeLabel()(_behavior.parent().nodeKey.eval(node.datum()), text) :\n Promise.resolve(text);\n return callback.then(function(text2) {\n var n = node.datum();\n n.orig.value[_labelTag] = text2;\n _behavior.parent().redrawGroup();\n });\n };\n\n var _behavior = dc_graph.label_things(options);\n _behavior.changeNodeLabel = property(null);\n return _behavior;\n};\n","dc_graph.label_edges = function(options) {\n options = options || {};\n var _labelTag = options.labelTag || 'label';\n options.select_group = options.select_group || 'select-edges-group';\n options.select_type = options.select_type || 'select-edges';\n options.label_group = options.label_group || 'label-edges-group';\n options.label_type = options.label_type || 'label-edges';\n options.default_label = \"edge name\";\n\n options.find_thing = function(key, node, edge) {\n return edge.filter(function(e) {\n return _behavior.parent().edgeKey.eval(e) === key;\n });\n };\n options.hide_thing_label = function(edge, whether) {\n var label = _behavior.parent().selectAll('#' + _behavior.parent().edgeId(edge.datum()) + '-label textPath');\n label.attr('visibility', whether ? 'hidden' : 'visible');\n };\n options.thing_box = function(edge, eventOptions) {\n var points = edge.datum().pos.new.path.points,\n x = (points[0].x + points[1].x)/2,\n y = (points[0].y + points[1].y)/2;\n return {x: x, y: y-10, width:0, height: 20};\n };\n options.thing_label = function(edge) {\n return _behavior.parent().edgeLabel.eval(edge.datum());\n };\n options.accept = function(edge, text) {\n var callback = _behavior.changeEdgeLabel() ?\n _behavior.changeEdgeLabel()(_behavior.parent().edgeKey.eval(edge.datum()), text) :\n Promise.resolve(text);\n return callback.then(function(text2) {\n var e = edge.datum();\n e.orig.value[_labelTag] = text2;\n _behavior.parent().redrawGroup();\n });\n };\n\n var _behavior = dc_graph.label_things(options);\n _behavior.changeEdgeLabel = property(null);\n return _behavior;\n};\n","dc_graph.register_highlight_things_group = function(thingsgroup) {\n window.chart_registry.create_type('highlight-things', function() {\n return d3.dispatch('highlight');\n });\n\n return window.chart_registry.create_group('highlight-things', thingsgroup);\n};\n","dc_graph.highlight_things = function(includeprops, excludeprops, modename, groupname, cascbase) {\n var highlight_things_group = dc_graph.register_highlight_things_group(groupname || 'highlight-things-group');\n var _active, _nodeset = {}, _edgeset = {};\n cascbase = cascbase || 150;\n\n function highlight(nodeset, edgeset) {\n _active = nodeset || edgeset;\n _nodeset = nodeset || {};\n _edgeset = edgeset || {};\n _behavior.parent().requestRefresh(_behavior.durationOverride());\n }\n function add_behavior(diagram) {\n diagram.cascade(cascbase, true, node_edge_conditions(\n function(n) {\n return _nodeset[_behavior.parent().nodeKey.eval(n)];\n }, function(e) {\n return _edgeset[_behavior.parent().edgeKey.eval(e)];\n }, includeprops));\n diagram.cascade(cascbase+10, true, node_edge_conditions(\n function(n) {\n return _active && !_nodeset[_behavior.parent().nodeKey.eval(n)];\n }, function(e) {\n return _active && !_edgeset[_behavior.parent().edgeKey.eval(e)];\n }, excludeprops));\n }\n function remove_behavior(diagram) {\n diagram.cascade(cascbase, false, includeprops);\n diagram.cascade(cascbase + 10, false, excludeprops);\n }\n var _behavior = dc_graph.behavior(modename, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n highlight_things_group.on('highlight.' + modename, p ? highlight : null);\n }\n });\n _behavior.durationOverride = property(undefined);\n return _behavior;\n};\n","dc_graph.register_highlight_neighbors_group = function(neighborsgroup) {\n window.chart_registry.create_type('highlight-neighbors', function() {\n return d3.dispatch('highlight_node');\n });\n\n return window.chart_registry.create_group('highlight-neighbors', neighborsgroup);\n};\n","dc_graph.highlight_neighbors = function(includeprops, excludeprops, neighborsgroup, thingsgroup) {\n var highlight_neighbors_group = dc_graph.register_highlight_neighbors_group(neighborsgroup || 'highlight-neighbors-group');\n var highlight_things_group = dc_graph.register_highlight_things_group(thingsgroup || 'highlight-things-group');\n\n function highlight_node(nodeid) {\n var diagram = _behavior.parent();\n var nodeset = {}, edgeset = {};\n if(nodeid) {\n nodeset[nodeid] = true;\n _behavior.parent().selectAllEdges().each(function(e) {\n if(diagram.nodeKey.eval(e.source) === nodeid) {\n edgeset[diagram.edgeKey.eval(e)] = true;\n nodeset[diagram.nodeKey.eval(e.target)] = true;\n }\n if(diagram.nodeKey.eval(e.target) === nodeid) {\n edgeset[diagram.edgeKey.eval(e)] = true;\n nodeset[diagram.nodeKey.eval(e.source)] = true;\n }\n });\n highlight_things_group.highlight(nodeset, edgeset);\n }\n else highlight_things_group.highlight(null, null);\n }\n function add_behavior(diagram, node, edge) {\n node\n .on('mouseover.highlight-neighbors', function(n) {\n highlight_neighbors_group.highlight_node(_behavior.parent().nodeKey.eval(n));\n })\n .on('mouseout.highlight-neighbors', function(n) {\n highlight_neighbors_group.highlight_node(null);\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n node\n .on('mouseover.highlight-neighbors', null)\n .on('mouseout.highlight-neighbors', null);\n highlight_neighbors_group.highlight_node(null);\n }\n\n var _behavior = dc_graph.behavior('highlight-neighbors', {\n add_behavior: add_behavior,\n remove_behavior: function(diagram, node, edge) {\n remove_behavior(diagram, node, edge);\n },\n parent: function(p) {\n highlight_neighbors_group.on('highlight_node.highlight', p ? highlight_node : null);\n if(!p.child('highlight-things'))\n p.child('highlight-things',\n dc_graph.highlight_things(includeprops, excludeprops)\n .durationOverride(_behavior.durationOverride()));\n }\n });\n _behavior.durationOverride = property(undefined);\n return _behavior;\n};\n\n","dc_graph.highlight_radius = function(options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var highlight_things_group = dc_graph.register_highlight_things_group(options.highlight_things_group || 'highlight-things-group');\n var _graph, _selection = [];\n\n function recurse(n, r, nodeset, edgeset) {\n nodeset[n.key()] = true;\n if(r) {\n n.outs().filter(function(e) {\n return !edgeset[e.key()];\n }).forEach(function(e) {\n edgeset[e.key()] = true;\n recurse(e.target(), r-1, nodeset, edgeset);\n });\n n.ins().filter(function(e) {\n return !edgeset[e.key()];\n }).forEach(function(e) {\n edgeset[e.key()] = true;\n recurse(e.source(), r-1, nodeset, edgeset);\n });\n }\n }\n function selection_changed(nodes) {\n _selection = nodes;\n console.assert(_graph);\n var nodeset = {}, edgeset = {};\n nodes.forEach(function(nkey) {\n recurse(_graph.node(nkey), _behavior.radius(), nodeset, edgeset);\n });\n if(!Object.keys(nodeset).length && !Object.keys(edgeset).length)\n nodeset = edgeset = null;\n highlight_things_group.highlight(nodeset, edgeset);\n }\n\n function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _graph = metagraph.graph(wnodes, wedges, {\n nodeKey: diagram.nodeKey.eval,\n edgeKey: diagram.edgeKey.eval,\n edgeSource: diagram.edgeSource.eval,\n edgeTarget: diagram.edgeTarget.eval\n });\n var sel2 = _selection.filter(function(nk) {\n return !!_graph.node(nk);\n });\n if(sel2.length < _selection.length)\n window.setTimeout(function() {\n select_nodes_group.set_changed(sel2);\n }, 0);\n }\n var _behavior = {\n parent: function(p) {\n if(p) {\n p.on('data.fix-nodes', on_data);\n } else if(_behavior.parent())\n _behavior.parent().on('data.fix-nodes', null);\n select_nodes_group.on('set_changed', selection_changed);\n }\n };\n _behavior.radius = property(1);\n return _behavior;\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 var _anchor;\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 selected = hoverpaths = null;\n // it would be difficult to check if no change, but at least check if changing from empty to empty\n if(Object.keys(node_on_paths).length === 0 && Object.keys(nop).length === 0 &&\n Object.keys(edge_on_paths).length === 0 && Object.keys(eop).length === 0)\n return;\n node_on_paths = nop;\n edge_on_paths = eop;\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(diagram, node, edge, ehover) {\n diagram\n .cascade(200, true, node_edge_conditions(function(n) {\n return !!node_on_paths[diagram.nodeKey.eval(n)];\n }, function(e) {\n return !!edge_on_paths[diagram.edgeKey.eval(e)];\n }, pathprops))\n .cascade(300, true, node_edge_conditions(function(n) {\n return intersect_paths(node_on_paths[diagram.nodeKey.eval(n)], selected);\n }, function(e) {\n return intersect_paths(edge_on_paths[diagram.edgeKey.eval(e)], selected);\n }, selectprops))\n .cascade(400, true, node_edge_conditions(function(n) {\n return intersect_paths(node_on_paths[diagram.nodeKey.eval(n)], hoverpaths);\n }, function(e) {\n return intersect_paths(edge_on_paths[diagram.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[diagram.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[diagram.nodeKey.eval(n)]));\n });\n\n\n ehover\n .on('mouseover.highlight-paths', function(e) {\n highlight_paths_group.hover_changed(edge_on_paths[diagram.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[diagram.nodeKey.eval(n)]));\n });\n }\n\n function remove_behavior(diagram, 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 diagram\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(diagram, node, edge, ehover) {\n remove_behavior(diagram, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n if(p)\n _anchor = p.anchorName();\n // else we should have received anchor earlier\n highlight_paths_group.on('paths_changed.highlight' + _anchor, p ? paths_changed : null);\n highlight_paths_group.on('hover_changed.highlight' + _anchor, p ? hover_changed : null);\n highlight_paths_group.on('select_changed.highlight' + _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.draw_spline_paths = function(pathreader, 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 var _paths = null, _hoverpaths = null, _selected = null;\n var _anchor;\n var _layer = null;\n var _savedPositions = null;\n\n function paths_changed(nop, eop, paths) {\n _paths = paths;\n\n var engine = _behavior.parent().layoutEngine(),\n localPaths = paths.filter(pathIsPresent);\n if(localPaths.length) {\n var nidpaths = localPaths.map(function(lpath) {\n var strength = pathreader.pathStrength.eval(lpath);\n if(typeof strength !== 'number')\n strength = 1;\n if(_selected && _selected.indexOf(lpath) !== -1)\n strength *= _behavior.selectedStrength();\n return {\n nodes: path_keys(lpath),\n strength: strength\n };\n });\n engine.paths(nidpaths);\n } else {\n engine.paths(null);\n if(_savedPositions)\n engine.restorePositions(_savedPositions);\n }\n if(_selected)\n _selected = _selected.filter(function(p) { return localPaths.indexOf(p) !== -1; });\n _behavior.parent().redraw();\n }\n\n function select_changed(sp) {\n if(sp !== _selected) {\n _selected = sp;\n paths_changed(null, null, _paths);\n }\n }\n\n function path_keys(path, unique) {\n unique = unique !== false;\n var keys = pathreader.elementList.eval(path).filter(function(elem) {\n return pathreader.elementType.eval(elem) === 'node';\n }).map(function(elem) {\n return pathreader.nodeKey.eval(elem);\n });\n return unique ? uniq(keys) : keys;\n }\n\n // check if entire path is present in this view\n function pathIsPresent(path) {\n return pathreader.elementList.eval(path).every(function(element) {\n return pathreader.elementType.eval(element) !== 'node' ||\n _behavior.parent().getWholeNode(pathreader.nodeKey.eval(element));\n });\n }\n\n // get the positions of nodes on path\n function getNodePositions(path, old) {\n return path_keys(path, false).map(function(key) {\n var node = _behavior.parent().getWholeNode(key);\n return {x: old && node.prevX !== undefined ? node.prevX : node.cola.x,\n y: old && node.prevY !== undefined ? node.prevY : node.cola.y};\n });\n };\n\n // insert fake nodes to avoid sharp turns\n function insertDummyNodes(path_coord) {\n function _distance(node1, node2) {\n return Math.sqrt(Math.pow((node1.x-node2.x),2) + Math.pow((node1.y-node2.y),2));\n }\n\n var new_path_coord = [];\n\n for(var i = 0; i < path_coord.length; i ++) {\n if (i-1 >= 0 && i+1 < path_coord.length) {\n if (path_coord[i-1].x === path_coord[i+1].x &&\n path_coord[i-1].y === path_coord[i+1].y ) {\n // insert node when the previous and next nodes are the same\n var x1 = path_coord[i-1].x, y1 = path_coord[i-1].y;\n var x2 = path_coord[i].x, y2 = path_coord[i].y;\n var dx = x1 - x2, dy = y1 - y2;\n\n var v1 = dy / Math.sqrt(dx*dx + dy*dy);\n var v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p1 = {'x': null, 'y': null};\n var insert_p2 = {'x': null, 'y': null};\n\n var offset = 10;\n\n insert_p1.x = (x1+x2)/2.0 + offset*v1;\n insert_p1.y = (y1+y2)/2.0 + offset*v2;\n\n insert_p2.x = (x1+x2)/2.0 - offset*v1;\n insert_p2.y = (y1+y2)/2.0 - offset*v2;\n\n new_path_coord.push(insert_p1);\n new_path_coord.push(path_coord[i]);\n new_path_coord.push(insert_p2);\n } else if (_distance(path_coord[i-1], path_coord[i+1]) < pathprops.nearNodesDistance){\n // insert node when the previous and next nodes are very close\n // first node\n var x1 = path_coord[i-1].x, y1 = path_coord[i-1].y;\n var x2 = path_coord[i].x, y2 = path_coord[i].y;\n var dx = x1 - x2, dy = y1 - y2;\n\n var v1 = dy / Math.sqrt(dx*dx + dy*dy);\n var v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p1 = {'x': null, 'y': null};\n\n var offset = 10;\n\n insert_p1.x = (x1+x2)/2.0 + offset*v1;\n insert_p1.y = (y1+y2)/2.0 + offset*v2;\n\n // second node\n x1 = path_coord[i].x;\n y1 = path_coord[i].y;\n x2 = path_coord[i+1].x;\n y2 = path_coord[i+1].y;\n dx = x1 - x2;\n dy = y1 - y2;\n\n v1 = dy / Math.sqrt(dx*dx + dy*dy);\n v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p2 = {'x': null, 'y': null};\n\n insert_p2.x = (x1+x2)/2.0 + offset*v1;\n insert_p2.y = (y1+y2)/2.0 + offset*v2;\n\n new_path_coord.push(insert_p1);\n new_path_coord.push(path_coord[i]);\n new_path_coord.push(insert_p2);\n\n }\n else {\n new_path_coord.push(path_coord[i]);\n }\n } else {\n new_path_coord.push(path_coord[i]);\n }\n }\n return new_path_coord;\n }\n\n // helper functions\n var vecDot = function(v0, v1) { return v0.x*v1.x+v0.y*v1.y; };\n var vecMag = function(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n var l2Dist = function(p1, p2) {\n return Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));\n };\n\n function drawCardinalSpline(points, lineTension, avoidSharpTurn, angleThreshold) {\n var c = lineTension || 0;\n avoidSharpTurn = avoidSharpTurn !== false;\n angleThreshold = angleThreshold || 0.02;\n\n // get the path without self loops\n var path_list = [points[0]];\n for(var i = 1; i < points.length; i ++) {\n if(l2Dist(points[i], path_list[path_list.length-1]) > 1e-6) {\n path_list.push(points[i]);\n }\n }\n\n // repeat first and last node\n points = [path_list[0]];\n points = points.concat(path_list);\n points.push(path_list[path_list.length-1]);\n\n // a segment is a list of three points: [c0, c1, p1],\n // representing the coordinates in \"C x0,y0,x1,y1,x,y\" in svg:path\n var segments = []; // control points\n for(var i = 1; i < points.length-2; i ++) {\n // generate svg:path\n var m_0_x = (1-c)*(points[i+1].x - points[i-1].x)/2;\n var m_0_y = (1-c)*(points[i+1].y - points[i-1].y)/2;\n\n var m_1_x = (1-c)*(points[i+2].x - points[i].x)/2;\n var m_1_y = (1-c)*(points[i+2].y - points[i].y)/2;\n\n var p0 = points[i];\n var p1 = points[i+1];\n var c0 = p0;\n if(i !== 1) {\n c0 = {x: p0.x+(m_0_x/3), y:p0.y+(m_0_y/3)};\n }\n var c1 = p1;\n if(i !== points.length-3) {\n c1 = {x: p1.x-(m_1_x/3), y:p1.y-(m_1_y/3)};\n }\n\n // detect special case by calculating the angle\n if(avoidSharpTurn) {\n var v0 = {x:points[i-1].x - points[i].x, y:points[i-1].y - points[i].y};\n var v1 = {x:points[i+1].x - points[i].x, y:points[i+1].y - points[i].y};\n var acosValue = vecDot(v0,v1) / (vecMag(v0)*vecMag(v1));\n acosValue = Math.max(-1, Math.min(1, acosValue));\n var angle = Math.acos( acosValue );\n\n if(angle <= angleThreshold ){\n var m_x = (1-c)*(points[i].x - points[i-1].x)/2;\n var m_y = (1-c)*(points[i].y - points[i-1].y)/2;\n var k = 2;\n\n var cp1 = {x: p0.x+k*(-m_y/3), y:p0.y+k*(m_x/3)};\n var cp2 = {x: p0.x-k*(-m_y/3), y:p0.y-k*(m_x/3)};\n // CP_1CP_2\n var vCP = {x: cp1.x-cp2.x, y:cp1.y-cp2.y}; // vector cp1->cp2\n var vPN = {x: points[i-2].x - points[i+2].x, y:points[i-2].y-points[i+2].y}; // vector Previous->Next\n if(vecDot(vCP, vPN) > 0) {\n c0 = cp1;\n segments[segments.length-1][1] = cp2;\n } else {\n c0 = cp2;\n segments[segments.length-1][1] = cp1;\n }\n }\n }\n\n segments.push([c0,c1,p1]);\n }\n\n var path_d = \"M\"+points[0].x+\",\"+points[0].y;\n for(var i = 0; i < segments.length; i ++) {\n var s = segments[i];\n path_d += \"C\"+s[0].x+\",\"+s[0].y;\n path_d += \",\"+s[1].x+\",\"+s[1].y;\n path_d += \",\"+s[2].x+\",\"+s[2].y;\n }\n return path_d;\n }\n\n function drawDedicatedLoops(points, lineTension, avoidSharpTurn, angleThreshold) {\n // get loops as segments\n var p1 = 0, p2 = 1;\n var seg_list = []; // (start, end)\n while(p1 < points.length-1 && p2 < points.length) {\n if(l2Dist(points[p1], points[p2]) < 1e-6) {\n var repeated = points[p2];\n while(p2 < points.length && l2Dist(points[p2], repeated) < 1e-6) p2++;\n seg_list.push({'start': Math.max(0, p1-1), 'end': Math.min(points.length-1, p2)});\n p1 = p2;\n p2 = p1+1;\n } else {\n p1++;\n p2++;\n }\n }\n\n var loopCurves = \"\";\n for(var i = 0; i < seg_list.length; i ++) {\n var segment = seg_list[i];\n var loopCount = segment.end - segment.start - 2;\n var anchorPoint = points[segment.start+1];\n\n // the vector from previous node to next node\n var vec_pre_next = {\n x: points[segment.end].x-points[segment.start].x,\n y: points[segment.end].y-points[segment.start].y\n };\n\n // when previous node and next node are the same node, we need to handle\n // them differently.\n // e.g. for a loop segment A->B->B->A, we use the perpendicular vector perp_AB\n // instead of vector AA(which is vec_pre_next in this case).\n if(vecMag(vec_pre_next) == 0) {\n vec_pre_next = {\n x: -(points[segment.end].y-anchorPoint.y),\n y: points[segment.end].x-anchorPoint.x\n };\n }\n\n // unit length vector\n var vec_pre_next_unit = {\n x: vec_pre_next.x / vecMag(vec_pre_next),\n y: vec_pre_next.y / vecMag(vec_pre_next)\n };\n var vec_pre_next_perp = {\n x: -vec_pre_next.y / vecMag(vec_pre_next),\n y: vec_pre_next.x / vecMag(vec_pre_next)\n };\n\n var insertP;\n for(var j = 0; j < loopCount; j ++) {\n var c1,c2,c3,c4;\n\n // change the control points every time this loop appears\n var cp_k = 15+2*j;\n\n // calculate c1 and c4, their tangent match the tangent at anchorPoint\n c1 = {\n x: anchorPoint.x + cp_k*vec_pre_next_unit.x,\n y: anchorPoint.y + cp_k*vec_pre_next_unit.y\n };\n\n c4 = {\n x: anchorPoint.x - cp_k*vec_pre_next_unit.x,\n y: anchorPoint.y - cp_k*vec_pre_next_unit.y\n };\n\n // change the location of inserted virtual point every time this loop appears\n var control_k = 25+5*j;\n var insertP1 = {\n x: anchorPoint.x+vec_pre_next_perp.x*control_k,\n y: anchorPoint.y+vec_pre_next_perp.y*control_k\n };\n var insertP2 = {\n x: anchorPoint.x-vec_pre_next_perp.x*control_k,\n y: anchorPoint.y-vec_pre_next_perp.y*control_k\n };\n var vec_i_to_next = {\n x: points[segment.end].x - anchorPoint.x,\n y: points[segment.end].y - anchorPoint.y\n };\n var vec_i_to_insert = {\n x: insertP1.x - anchorPoint.x,\n y: insertP1.y - anchorPoint.y\n };\n insertP = insertP1;\n if(vecDot(vec_i_to_insert, vec_i_to_next) > 0) {\n insertP = insertP2;\n }\n\n // calculate c2 and c3 based on insertP\n c2 = {\n x: insertP.x + cp_k*vec_pre_next_unit.x,\n y: insertP.y + cp_k*vec_pre_next_unit.y\n };\n\n c3 = {\n x: insertP.x - cp_k*vec_pre_next_unit.x,\n y: insertP.y - cp_k*vec_pre_next_unit.y\n };\n\n var curve = \"M\"+anchorPoint.x+\",\"+anchorPoint.y;\n curve += \"C\"+c1.x+\",\"+c1.y+\",\"+c2.x+\",\"+c2.y+\",\"+insertP.x+\",\"+insertP.y;\n curve += \"C\"+c3.x+\",\"+c3.y+\",\"+c4.x+\",\"+c4.y+\",\"+anchorPoint.x+\",\"+anchorPoint.y;\n\n loopCurves += curve;\n }\n }\n return loopCurves;\n }\n\n // convert original path data into \n function genPath(originalPoints, old, lineTension, avoidSharpTurn, angleThreshold) {\n // get coordinates\n var path_coord = getNodePositions(originalPoints, old);\n if(path_coord.length < 2) return \"\";\n\n var result = \"\";\n // process the points and treat them differently:\n // 1. sub-path without self loop\n result += drawCardinalSpline(path_coord, lineTension, avoidSharpTurn, angleThreshold);\n\n // 2. a list of loop segments\n result += drawDedicatedLoops(path_coord, lineTension, avoidSharpTurn, angleThreshold);\n\n return result;\n }\n\n // draw the spline for paths\n function drawSpline(paths) {\n if(paths === null) {\n _savedPositions = _behavior.parent().layoutEngine().savePositions();\n return;\n }\n\n paths = paths.filter(pathIsPresent);\n var hoverpaths = _hoverpaths || [],\n selected = _selected || [];\n\n // edge spline\n var edge = _layer.selectAll(\".spline-edge\").data(paths, function(path) { return path_keys(path).join(','); });\n edge.exit().remove();\n var edgeEnter = edge.enter().append(\"svg:path\")\n .attr('class', 'spline-edge')\n .attr('id', function(d, i) { return \"spline-path-\"+i; })\n .attr('stroke-width', pathprops.edgeStrokeWidth || 1)\n .attr('fill', 'none')\n .attr('d', function(d) { return genPath(d, true, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n edge\n .attr('stroke', function(p) {\n return selected.indexOf(p) !== -1 && selectprops.edgeStroke ||\n hoverpaths.indexOf(p) !== -1 && hoverprops.edgeStroke ||\n pathprops.edgeStroke || 'black';\n })\n .attr('opacity', function(p) {\n return selected.indexOf(p) !== -1 && selectprops.edgeOpacity ||\n hoverpaths.indexOf(p) !== -1 && hoverprops.edgeOpacity ||\n pathprops.edgeOpacity || 1;\n });\n function path_order(p) {\n return hoverpaths.indexOf(p) !== -1 ? 2 :\n selected.indexOf(p) !== -1 ? 1 :\n 0;\n }\n edge.sort(function(a, b) {\n return path_order(a) - path_order(b);\n });\n _layer.selectAll('.spline-edge-hover')\n .each(function() {this.parentNode.appendChild(this);});\n edge.transition().duration(_behavior.parent().transitionDuration())\n .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n\n // another wider copy of the edge just for hover events\n var edgeHover = _layer.selectAll('.spline-edge-hover')\n .data(paths, function(path) { return path_keys(path).join(','); });\n edgeHover.exit().remove();\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'spline-edge-hover')\n .attr('d', function(d) { return genPath(d, true, pathprops.lineTension, _behavior.avoidSharpTurns()); })\n .attr('opacity', 0)\n .attr('stroke', 'green')\n .attr('stroke-width', (pathprops.edgeStrokeWidth || 1) + 4)\n .attr('fill', 'none')\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 var selected = _selected && _selected.slice(0) || [],\n i = selected.indexOf(d);\n if(i !== -1)\n selected.splice(i, 1);\n else if(d3.event.shiftKey)\n selected.push(d);\n else\n selected = [d];\n highlight_paths_group.select_changed(selected);\n });\n edgeHover.transition().duration(_behavior.parent().transitionDuration())\n .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n };\n\n function add_behavior(diagram, node, edge, ehover) {\n _layer = _behavior.parent().select('g.draw').selectAll('g.spline-layer').data([0]);\n _layer.enter().append('g').attr('class', 'spline-layer');\n\n drawSpline(_paths);\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n }\n\n var _behavior = dc_graph.behavior('draw-spline-paths', {\n laterDraw: true,\n add_behavior: add_behavior,\n remove_behavior: function(diagram, node, edge, ehover) {\n remove_behavior(diagram, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n if(p)\n _anchor = p.anchorName();\n highlight_paths_group\n .on('paths_changed.draw-spline-paths-' + _anchor, p ? paths_changed : null)\n .on('select_changed.draw-spline-paths-' + _anchor, p ? select_changed : null)\n .on('hover_changed.draw-spline-paths-' + _anchor, p ? function(hpaths) {\n _hoverpaths = hpaths;\n drawSpline(_paths);\n } : null);\n }\n });\n _behavior.selectedStrength = property(1);\n _behavior.avoidSharpTurns = property(true);\n\n return _behavior;\n};\n","dc_graph.expand_collapse = function(options) {\n if(typeof options === 'function') {\n options = {\n get_degree: arguments[0],\n expand: arguments[1],\n collapse: arguments[2],\n dirs: arguments[3]\n };\n }\n var _keyboard, _overNode, _overDir, _expanded = {};\n var expanded_highlight_group = dc_graph.register_highlight_things_group(options.expanded_highlight_group || 'expanded-highlight-group');\n var collapse_highlight_group = dc_graph.register_highlight_things_group(options.collapse_highlight_group || 'collapse-highlight-group');\n var hide_highlight_group = dc_graph.register_highlight_things_group(options.hide_highlight_group || 'hide-highlight-group');\n options.dirs = options.dirs || ['both'];\n options.dirs.forEach(function(dir) {\n _expanded[dir] = {};\n });\n options.hideKey = options.hideKey || 'Alt';\n if(options.dirs.length > 2)\n throw new Error('there are only two directions to expand in');\n\n function add_gradient_def(diagram) {\n var gradient = diagram.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(diagram, edge, dir, key) {\n var fil;\n switch(dir) {\n case 'out':\n fil = function(e) {\n return diagram.edgeSource.eval(e) === key;\n };\n break;\n case 'in':\n fil = function(e) {\n return diagram.edgeTarget.eval(e) === key;\n };\n break;\n case 'both':\n fil = function(e) {\n return diagram.edgeSource.eval(e) === key || diagram.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_stubs(diagram, node, edge, n, spikes) {\n if(n && _expanded[spikes.dir][diagram.nodeKey.eval(n)])\n spikes = null;\n var spike = node\n .selectAll('g.spikes')\n .data(function(n2) {\n return spikes && n === n2 ?\n [n2] : [];\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(n) {\n var key = diagram.nodeKey.eval(n);\n var dir = spikes.dir,\n N = spikes.n,\n af = spike_directioner(diagram.layoutEngine().rankdir(), dir, N),\n ret = Array(N);\n for(var i = 0; i n.cola.y ? 'out' : 'in';\n case 'BT':\n return y < n.cola.y ? 'out' : 'in';\n case 'LR':\n return x > n.cola.x ? 'out' : 'in';\n case 'RL':\n return x < n.cola.x ? 'out' : 'in';\n }\n throw new Error('unknown rankdir ' + diagram.layoutEngine().rankdir());\n }\n\n function detect_key(key) {\n switch(key) {\n case 'Alt':\n return d3.event.altKey;\n case 'Meta':\n return d3.event.metaKey;\n case 'Shift':\n return d3.event.shiftKey;\n case 'Control':\n return d3.event.ctrlKey;\n }\n return false;\n }\n\n function highlight_hiding(diagram, n, edge) {\n var nk = diagram.nodeKey.eval(n);\n var hide_nodes_set = {}, hide_edges_set = {};\n hide_nodes_set[nk] = true;\n edge.each(function(e) {\n if(diagram.edgeSource.eval(e) === nk || diagram.edgeTarget.eval(e) === nk)\n hide_edges_set[diagram.edgeKey.eval(e)] = true;\n });\n hide_highlight_group.highlight(hide_nodes_set, hide_edges_set);\n }\n\n function highlight_collapse(diagram, n, node, edge, dir) {\n var nk = diagram.nodeKey.eval(n);\n Promise.resolve(options.get_degree(nk, dir)).then(function(degree) {\n var spikes = {\n dir: dir,\n n: Math.max(0, degree - view_degree(diagram, edge, dir, nk)) // be tolerant of inconsistencies\n };\n draw_stubs(diagram, node, edge, n, spikes);\n var collapse_nodes_set = {}, collapse_edges_set = {};\n if(_expanded[dir][nk] && options.collapsibles) {\n var clps = options.collapsibles(nk, dir);\n collapse_nodes_set = clps.nodes;\n collapse_edges_set = clps.edges;\n }\n collapse_highlight_group.highlight(collapse_nodes_set, collapse_edges_set);\n });\n }\n\n function add_behavior(diagram, node, edge) {\n function mousemove(n) {\n console.log('collapse mousemove');\n var dir = zonedir(diagram, d3.event, options.dirs, n);\n _overNode = n;\n _overDir = dir;\n if(options.hide && detect_key(options.hideKey))\n highlight_hiding(diagram, n, edge);\n else\n highlight_collapse(diagram, n, node, edge, dir);\n }\n function click(n) {\n var nk = diagram.nodeKey.eval(n);\n if(options.hide && detect_key(options.hideKey))\n options.hide(nk);\n else {\n clear_stubs(diagram, node, edge);\n var dir = zonedir(diagram, d3.event, options.dirs, n);\n expand(dir, nk, !_expanded[dir][nk]);\n }\n }\n\n node\n .on('mouseover.expand-collapse', mousemove)\n .on('mousemove.expand-collapse', mousemove)\n .on('mouseout.expand-collapse', function(n) {\n console.log('collapse mouseout');\n _overNode = null;\n clear_stubs(diagram, node, edge);\n collapse_highlight_group.highlight({}, {});\n hide_highlight_group.highlight({}, {});\n })\n .on('click', click)\n .on('dblclick', click);\n\n _keyboard\n .on('keydown.expand-collapse', function() {\n if(d3.event.key === options.hideKey && _overNode) {\n highlight_hiding(diagram, _overNode, edge);\n clear_stubs(diagram, node, edge);\n collapse_highlight_group.highlight({}, {});\n }\n })\n .on('keyup.expand_collapse', function() {\n if(d3.event.key === options.hideKey && _overNode) {\n hide_highlight_group.highlight({}, {});\n highlight_collapse(diagram, _overNode, node, edge, _overDir);\n }\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n node\n .on('mouseover.expand-collapse', null)\n .on('mouseout.expand-collapse', null);\n clear_stubs(diagram, node, edge);\n }\n\n function expand(dir, nk, whether) {\n var exec;\n _expanded[dir][nk] = whether;\n expanded_highlight_group.highlight(_expanded.both, {});\n if(whether)\n options.expand(nk, dir);\n else\n options.collapse(nk, dir);\n }\n\n var _behavior = dc_graph.behavior('expand-collapse', {\n add_behavior: add_behavior,\n first: add_gradient_def,\n remove_behavior: remove_behavior,\n parent: function(p) {\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n }\n }\n });\n\n _behavior.expand = expand;\n return _behavior;\n};\n","dc_graph.expand_collapse.shown_hidden = function(opts) {\n var options = Object.assign({\n nodeKey: function(n) { return n.key; }, // this one is raw rows, others are post-crossfilter-group\n edgeKey: function(e) { return e.key; },\n edgeSource: function(e) { return e.value.source; },\n edgeTarget: function(e) { return e.value.target; }\n }, opts);\n var _shown = {}, _hidden = {};\n\n // independent dimension on keys so that the diagram dimension will observe it\n var _filter = options.nodeCrossfilter.dimension(options.nodeKey);\n function apply_filter() {\n _filter.filterFunction(function(nk) {\n return _shown[nk];\n });\n }\n function adjacent_edges(nk) {\n return options.edgeGroup.all().filter(function(e) {\n return options.edgeSource(e) === nk || options.edgeTarget(e) === nk;\n });\n }\n function adjacent_nodes(nk) {\n return adjacent_edges(nk).map(function(e) {\n return options.edgeSource(e) === nk ? options.edgeTarget(e) : options.edgeSource(e);\n });\n }\n function adjacencies(nk) {\n return adjacent_edges(nk).map(function(e) {\n return options.edgeSource(e) === nk ? [e,options.edgeTarget(e)] : [e,options.edgeSource(e)];\n });\n }\n function out_edges(nk) {\n return options.edgeGroup.all().filter(function(e) {\n return options.edgeSource(e) === nk;\n });\n }\n function in_edges(nk) {\n return options.edgeGroup.all().filter(function(e) {\n return options.edgeTarget(e) === nk;\n });\n }\n function is_collapsible(n1, n2) {\n return options.edgeGroup.all().every(function(e2) {\n var n3;\n if(options.edgeSource(e2) === n2)\n n3 = options.edgeTarget(e2);\n else if(options.edgeTarget(e2) === n2)\n n3 = options.edgeSource(e2);\n return !n3 || n3 === n1 || !_shown[n3];\n });\n }\n apply_filter();\n var _strategy = {};\n if(options.directional)\n Object.assign(_strategy, {\n get_degree: function(nk, dir) {\n switch(dir) {\n case 'out': return out_edges(nk).length;\n case 'in': return in_edges(nk).length;\n default: throw new Error('unknown direction ' + dir);\n }\n },\n expand: function(nk, dir) {\n _shown[nk] = true;\n switch(dir) {\n case 'out':\n out_edges(nk).forEach(function(e) {\n if(!_hidden[options.edgeTarget(e)])\n _shown[options.edgeTarget(e)] = true;\n });\n break;\n case 'in':\n in_edges(nk).forEach(function(e) {\n if(!_hidden[options.edgeSource(e)])\n _shown[options.edgeSource(e)] = true;\n });\n break;\n default: throw new Error('unknown direction ' + dir);\n }\n apply_filter();\n dc.redrawAll();\n },\n collapsibles: function(nk, dir) {\n var nodes = {}, edges = {};\n (dir === 'out' ? out_edges(nk) : in_edges(nk)).forEach(function(e) {\n var n2 = dir === 'out' ? options.edgeTarget(e) : options.edgeSource(e);\n if(is_collapsible(nk, n2)) {\n nodes[n2] = true;\n adjacent_edges(n2).forEach(function(e) {\n edges[options.edgeKey(e)] = true;\n });\n }\n });\n return {nodes: nodes, edges: edges};\n },\n collapse: function(nk, dir) {\n Object.keys(this.collapsibles(nk, dir).nodes).forEach(function(nk) {\n _shown[nk] = false;\n });\n apply_filter();\n dc.redrawAll();\n },\n hide: function(nk) {\n _hidden[nk] = true;\n _shown[nk] = false;\n apply_filter();\n dc.redrawAll();\n },\n dirs: ['out', 'in']\n });\n else\n Object.assign(_strategy, {\n get_degree: function(nk) {\n return adjacent_edges(nk).length;\n },\n expand: function(nk) {\n _shown[nk] = true;\n adjacent_nodes(nk).forEach(function(nk) {\n if(!_hidden[nk])\n _shown[nk] = true;\n });\n apply_filter();\n dc.redrawAll();\n },\n collapsibles: function(nk, dir) {\n var nodes = {}, edges = {};\n adjacencies(nk).forEach(function(adj) {\n var e = adj[0], n2 = adj[1];\n if(is_collapsible(nk, n2)) {\n nodes[n2] = true;\n edges[options.edgeKey(e)] = true;\n }\n });\n return {nodes: nodes, edges: edges};\n },\n collapse: function(nk, dir) {\n Object.keys(_strategy.collapsibles(nk, dir).nodes).forEach(function(nk) {\n _shown[nk] = false;\n });\n apply_filter();\n dc.redrawAll();\n },\n hide: function(nk) {\n _hidden[nk] = true;\n _shown[nk] = false;\n apply_filter();\n dc.redrawAll();\n }\n });\n return _strategy;\n};\n","dc_graph.expand_collapse.expanded_hidden = function(opts) {\n var options = Object.assign({\n nodeKey: function(n) { return n.key; },\n edgeKey: function(e) { return e.key; },\n edgeSource: function(e) { return e.value.source; },\n edgeTarget: function(e) { return e.value.target; }\n }, opts);\n var _expanded = {}, _hidden = {};\n\n // independent dimension on keys so that the diagram dimension will observe it\n var _filter = options.nodeCrossfilter.dimension(options.nodeKey);\n\n function get_shown(expanded) {\n return Object.keys(expanded).reduce(function(p, nk) {\n p[nk] = true;\n adjacent_nodes(nk).forEach(function(nk2) {\n if(!_hidden[nk2])\n p[nk2] = true;\n });\n return p;\n }, {});\n }\n function apply_filter() {\n var _shown = get_shown(_expanded);\n _filter.filterFunction(function(nk) {\n return _shown[nk];\n });\n }\n function adjacent_edges(nk) {\n return options.edgeGroup.all().filter(function(e) {\n return options.edgeSource(e) === nk || options.edgeTarget(e) === nk;\n });\n }\n // function out_edges(nk) {\n // return options.edgeGroup.all().filter(function(e) {\n // return options.edgeSource(e) === nk;\n // });\n // }\n // function in_edges(nk) {\n // return options.edgeGroup.all().filter(function(e) {\n // return options.edgeTarget(e) === nk;\n // });\n // }\n function adjacent_nodes(nk) {\n return adjacent_edges(nk).map(function(e) {\n return options.edgeSource(e) === nk ? options.edgeTarget(e) : options.edgeSource(e);\n });\n }\n\n apply_filter();\n var _strategy = {\n get_degree: function(nk) {\n return adjacent_edges(nk).length;\n },\n expand: function(nk) {\n _expanded[nk] = true;\n apply_filter();\n dc.redrawAll();\n },\n collapsibles: function(nk, dir) {\n var whatif = Object.assign({}, _expanded);\n delete whatif[nk];\n var shown = get_shown(_expanded), would = get_shown(whatif);\n var going = Object.keys(shown)\n .filter(function(nk2) { return !would[nk2]; })\n .reduce(function(p, v) {\n p[v] = true;\n return p;\n }, {});\n return {\n nodes: going,\n edges: options.edgeGroup.all().filter(function(e) {\n return going[options.edgeSource(e)] || going[options.edgeTarget(e)];\n }).reduce(function(p, e) {\n p[options.edgeKey(e)] = true;\n return p;\n }, {})\n };\n },\n collapse: function(nk, collapsible) {\n delete _expanded[nk];\n apply_filter();\n dc.redrawAll();\n },\n hide: function(nk) {\n _hidden[nk] = true;\n this.collapse(nk); // in case\n }\n };\n return _strategy;\n};\n","dc_graph.draw_graphs = function(options) {\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes'),\n select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges'),\n label_nodes_group = dc_graph.label_things_group('label-nodes-group', 'label-nodes'),\n label_edges_group = dc_graph.label_things_group('label-edges-group', 'label-edges'),\n fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _nodeIdTag = options.idTag || 'id',\n _edgeIdTag = options.edgeIdTag || _nodeIdTag,\n _sourceTag = options.sourceTag || 'source',\n _targetTag = options.targetTag || 'target',\n _nodeLabelTag = options.labelTag || 'label',\n _edgeLabelTag = options.edgeLabelTag || _nodeLabelTag;\n\n var _sourceDown = null, _targetMove = null, _targetValid = false, _edgeLayer = null, _hintData = [], _crossout;\n\n function update_hint() {\n var data = _hintData.filter(function(h) {\n return h.source && h.target;\n });\n var line = _edgeLayer.selectAll('line.hint-edge').data(data);\n line.exit().remove();\n line.enter().append('line')\n .attr('class', 'hint-edge')\n .style({\n fill: 'none',\n stroke: 'black',\n 'pointer-events': 'none'\n });\n\n line.attr({\n x1: function(n) { return n.source.x; },\n y1: function(n) { return n.source.y; },\n x2: function(n) { return n.target.x; },\n y2: function(n) { return n.target.y; }\n });\n }\n\n function port_pos(p) {\n var style = _behavior.parent().portStyle(_behavior.parent().portStyleName.eval(p));\n var pos = style.portPosition(p);\n pos.x += p.node.cola.x;\n pos.y += p.node.cola.y;\n return pos;\n }\n\n function update_crossout() {\n var data;\n if(_crossout) {\n if(_behavior.usePorts())\n data = [port_pos(_crossout)];\n else\n data = [{x: _crossout.node.cola.x, y: _crossout.node.cola.y}];\n }\n else data = [];\n\n var size = _behavior.crossSize(), wid = _behavior.crossWidth();\n var cross = _edgeLayer.selectAll('polygon.graph-draw-crossout').data(data);\n cross.exit().remove();\n cross.enter().append('polygon')\n .attr('class', 'graph-draw-crossout');\n cross\n .attr('points', function(d) {\n var x = d.x, y = d.y;\n return [\n [x-size/2, y+size/2], [x-size/2+wid, y+size/2], [x, y+wid/2],\n [x+size/2-wid, y+size/2], [x+size/2, y+size/2], [x+wid/2, y],\n [x+size/2, y-size/2], [x+size/2-wid, y-size/2], [x, y-wid/2],\n [x-size/2+wid, y-size/2], [x-size/2, y-size/2], [x-wid/2, y]\n ]\n .map(function(p) { return p.join(','); })\n .join(' ');\n });\n }\n function erase_hint() {\n _hintData = [];\n _targetValid = false;\n _sourceDown = _targetMove = null;\n update_hint();\n }\n\n function create_node(diagram, pos, data) {\n if(!_behavior.nodeCrossfilter())\n throw new Error('need nodeCrossfilter');\n var node, callback = _behavior.addNode() || promise_identity;\n if(data)\n node = data;\n else {\n node = {};\n node[_nodeIdTag] = uuid();\n node[_nodeLabelTag] = '';\n }\n if(pos)\n fix_nodes_group.new_node(node[_nodeIdTag], node, {x: pos[0], y: pos[1]});\n callback(node).then(function(node2) {\n if(!node2)\n return;\n _behavior.nodeCrossfilter().add([node2]);\n diagram.redrawGroup();\n select_nodes_group.set_changed([node2[_nodeIdTag]]);\n });\n }\n\n function create_edge(diagram, source, target) {\n if(!_behavior.edgeCrossfilter())\n throw new Error('need edgeCrossfilter');\n var edge = {}, callback = _behavior.addEdge() || promise_identity;\n edge[_edgeIdTag] = uuid();\n edge[_edgeLabelTag] = '';\n if(_behavior.conduct().detectReversedEdge && _behavior.conduct().detectReversedEdge(edge, source.port, target.port)) {\n edge[_sourceTag] = target.node.orig.key;\n edge[_targetTag] = source.node.orig.key;\n var t;\n t = source; source = target; target = t;\n } else {\n edge[_sourceTag] = source.node.orig.key;\n edge[_targetTag] = target.node.orig.key;\n }\n callback(edge, source.port, target.port).then(function(edge2) {\n if(!edge2)\n return;\n fix_nodes_group.new_edge(edge[_edgeIdTag], edge2[_sourceTag], edge2[_targetTag]);\n _behavior.edgeCrossfilter().add([edge2]);\n select_nodes_group.set_changed([], false);\n select_edges_group.set_changed([edge2[_edgeIdTag]], false);\n diagram.redrawGroup();\n });\n }\n\n function check_invalid_drag(coords) {\n var msg;\n if(!(d3.event.buttons & 1)) {\n // mouse button was released but we missed it\n _crossout = null;\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n erase_hint();\n update_crossout();\n return true;\n }\n if(!_sourceDown.started && Math.hypot(coords[0] - _hintData[0].source.x, coords[1] - _hintData[0].source.y) > _behavior.dragSize()) {\n if(_behavior.conduct().startDragEdge) {\n if(_behavior.conduct().startDragEdge(_sourceDown)) {\n _sourceDown.started = true;\n } else {\n if(_behavior.conduct().invalidSourceMessage) {\n msg = _behavior.conduct().invalidSourceMessage(_sourceDown);\n console.log(msg);\n if(options.negativeTip) {\n options.negativeTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _sourceDown.port : _sourceDown.node);\n }\n }\n erase_hint();\n return true;\n }\n }\n }\n return false;\n }\n\n function add_behavior(diagram, node, edge, ehover) {\n var select_nodes = diagram.child('select-nodes');\n if(select_nodes) {\n if(_behavior.clickCreatesNodes())\n select_nodes.clickBackgroundClears(false);\n }\n node\n .on('mousedown.draw-graphs', function(n) {\n d3.event.stopPropagation();\n if(!_behavior.dragCreatesEdges())\n return;\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip\n .hideTip()\n .disabled(true);\n });\n if(_behavior.usePorts()) {\n var activePort;\n if(typeof _behavior.usePorts() === 'object' && _behavior.usePorts().eventPort)\n activePort = _behavior.usePorts().eventPort();\n else activePort = diagram.getPort(diagram.nodeKey.eval(n), null, 'out')\n || diagram.getPort(diagram.nodeKey.eval(n), null, 'in');\n if(!activePort)\n return;\n _sourceDown = {node: n, port: activePort};\n _hintData = [{source: port_pos(activePort)}];\n } else {\n _sourceDown = {node: n};\n _hintData = [{source: {x: _sourceDown.node.cola.x, y: _sourceDown.node.cola.y}}];\n }\n })\n .on('mousemove.draw-graphs', function(n) {\n var msg;\n d3.event.stopPropagation();\n if(_sourceDown) {\n var coords = dc_graph.event_coords(diagram);\n if(check_invalid_drag(coords))\n return;\n var oldTarget = _targetMove;\n if(n === _sourceDown.node) {\n _behavior.conduct().invalidTargetMessage &&\n console.log(_behavior.conduct().invalidTargetMessage(_sourceDown, _sourceDown));\n _targetMove = null;\n _hintData[0].target = null;\n }\n else if(_behavior.usePorts()) {\n var activePort;\n if(typeof _behavior.usePorts() === 'object' && _behavior.usePorts().eventPort)\n activePort = _behavior.usePorts().eventPort();\n else activePort = diagram.getPort(diagram.nodeKey.eval(n), null, 'in')\n || diagram.getPort(diagram.nodeKey.eval(n), null, 'out');\n if(activePort)\n _targetMove = {node: n, port: activePort};\n else\n _targetMove = null;\n } else if(!_targetMove || n !== _targetMove.node) {\n _targetMove = {node: n};\n }\n if(_behavior.conduct().changeDragTarget) {\n var change;\n if(_behavior.usePorts()) {\n var oldPort = oldTarget && oldTarget.port,\n newPort = _targetMove && _targetMove.port;\n change = oldPort !== newPort;\n } else {\n var oldNode = oldTarget && oldTarget.node,\n newNode = _targetMove && _targetMove.node;\n change = oldNode !== newNode;\n }\n if(change)\n if(_behavior.conduct().changeDragTarget(_sourceDown, _targetMove)) {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip();\n msg = _behavior.conduct().validTargetMessage && _behavior.conduct().validTargetMessage() ||\n 'matches';\n if(options.positiveTip) {\n options.positiveTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _targetMove.port : _targetMove.node);\n }\n _targetValid = true;\n } else {\n _crossout = _behavior.usePorts() ?\n _targetMove && _targetMove.port :\n _targetMove && _targetMove.node;\n if(_targetMove && _behavior.conduct().invalidTargetMessage) {\n if(options.positiveTip)\n options.positiveTip.hideTip();\n msg = _behavior.conduct().invalidTargetMessage(_sourceDown, _targetMove);\n console.log(msg);\n if(options.negativeTip) {\n options.negativeTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _targetMove.port : _targetMove.node);\n }\n }\n _targetValid = false;\n }\n }\n if(_targetMove) {\n if(_targetMove.port)\n _hintData[0].target = port_pos(activePort);\n else\n _hintData[0].target = {x: n.cola.x, y: n.cola.y};\n }\n else {\n _hintData[0].target = {x: coords[0], y: coords[1]};\n }\n update_hint();\n update_crossout();\n }\n })\n .on('mouseup.draw-graphs', function(n) {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip(true);\n if(options.positiveTip)\n options.positiveTip.hideTip(true);\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip.disabled(false);\n });\n // allow keyboard mode to hear this one (again, we need better cooperation)\n // d3.event.stopPropagation();\n if(_sourceDown && _targetValid) {\n var finishPromise;\n if(_behavior.conduct().finishDragEdge)\n finishPromise = _behavior.conduct().finishDragEdge(_sourceDown, _targetMove);\n else finishPromise = Promise.resolve(true);\n var source = _sourceDown, target = _targetMove;\n finishPromise.then(function(ok) {\n if(ok)\n create_edge(diagram, source, target);\n });\n }\n else if(_sourceDown) {\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n }\n erase_hint();\n update_crossout();\n });\n diagram.svg()\n .on('mousedown.draw-graphs', function() {\n _sourceDown = null;\n })\n .on('mousemove.draw-graphs', function() {\n var data = [];\n if(_sourceDown) { // drawing edge\n var coords = dc_graph.event_coords(diagram);\n _crossout = null;\n if(check_invalid_drag(coords))\n return;\n if(_behavior.conduct().dragCanvas)\n _behavior.conduct().dragCanvas(_sourceDown, coords);\n if(_behavior.conduct().changeDragTarget && _targetMove)\n _behavior.conduct().changeDragTarget(_sourceDown, null);\n _targetMove = null;\n _hintData[0].target = {x: coords[0], y: coords[1]};\n update_hint();\n update_crossout();\n }\n })\n .on('mouseup.draw-graphs', function() {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip(true);\n if(options.positiveTip)\n options.positiveTip.hideTip(true);\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip.disabled(false);\n });\n if(_sourceDown) { // drag-edge\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n erase_hint();\n } else { // click-node\n if(d3.event.target === this && _behavior.clickCreatesNodes())\n create_node(diagram, dc_graph.event_coords(diagram));\n }\n update_crossout();\n });\n if(!_edgeLayer)\n _edgeLayer = diagram.g().append('g').attr('class', 'draw-graphs');\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n node\n .on('mousedown.draw-graphs', null)\n .on('mousemove.draw-graphs', null)\n .on('mouseup.draw-graphs', null);\n diagram.svg()\n .on('mousedown.draw-graphs', null)\n .on('mousemove.draw-graphs', null)\n .on('mouseup.draw-graphs', null);\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n\n // update the data source/destination\n _behavior.nodeCrossfilter = property(options.nodeCrossfilter);\n _behavior.edgeCrossfilter = property(options.edgeCrossfilter);\n\n // behavioral options\n _behavior.usePorts = property(null);\n _behavior.clickCreatesNodes = property(true);\n _behavior.dragCreatesEdges = property(true);\n _behavior.dragSize = property(5);\n\n // draw attributes of indicator for failed edge\n _behavior.crossSize = property(15);\n _behavior.crossWidth = property(5);\n\n // really this is a behavior, and what we've been calling behaviors are modes\n // but i'm on a deadline\n _behavior.conduct = property({});\n\n // callbacks to modify data as it's being added\n // as of 0.6, function returns a promise of the new data\n _behavior.addNode = property(null); // node -> promise(node2)\n _behavior.addEdge = property(null); // edge, sourceport, targetport -> promise(edge2)\n\n // or, if you want to drive..\n _behavior.createNode = function(pos, data) {\n create_node(_behavior.parent(), pos, data);\n };\n\n return _behavior;\n};\n\n","dc_graph.match_ports = function(diagram, symbolPorts) {\n var _ports, _wports, _wedges, _validTargets;\n diagram.on('data.match-ports', function(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _ports = ports;\n _wports = wports;\n _wedges = wedges;\n });\n diagram.on('transitionsStarted', function() {\n symbolPorts.enableHover(true);\n });\n function change_state(ports, state) {\n return ports.map(function(p) {\n p.state = state;\n return diagram.portNodeKey.eval(p);\n });\n }\n function reset_ports(source) {\n var nids = change_state(_validTargets, 'small');\n source.port.state = 'small';\n nids.push(diagram.portNodeKey.eval(source.port));\n symbolPorts.animateNodes(nids);\n }\n function has_parallel(sourcePort, targetPort) {\n return _wedges.some(function(e) {\n return sourcePort.edges.indexOf(e) >= 0 && targetPort.edges.indexOf(e) >= 0;\n });\n }\n function is_valid(sourcePort, targetPort) {\n return (_behavior.allowParallel() || !has_parallel(sourcePort, targetPort))\n && _behavior.isValid()(sourcePort, targetPort);\n }\n function why_invalid(sourcePort, targetPort) {\n return !_behavior.allowParallel() && has_parallel(sourcePort, targetPort) && \"can't connect two edges between the same two ports\" ||\n _behavior.whyInvalid()(sourcePort, targetPort);\n }\n var _behavior = {\n isValid: property(function(sourcePort, targetPort) {\n return targetPort !== sourcePort && targetPort.name === sourcePort.name;\n }),\n whyInvalid: property(function(sourcePort, targetPort) {\n return targetPort === sourcePort && \"can't connect port to itself\" ||\n targetPort.name !== sourcePort.name && \"must connect ports of the same type\";\n }),\n allowParallel: property(false),\n hoverPort: function(port) {\n if(port) {\n _validTargets = _wports.filter(is_valid.bind(null, port));\n if(_validTargets.length)\n return change_state(_validTargets, 'shimmer-medium');\n } else if(_validTargets)\n return change_state(_validTargets, 'small');\n return null;\n },\n startDragEdge: function(source) {\n _validTargets = _wports.filter(is_valid.bind(null, source.port));\n var nids = change_state(_validTargets, 'shimmer');\n if(_validTargets.length) {\n symbolPorts.enableHover(false);\n source.port.state = 'large';\n nids.push(diagram.portNodeKey.eval(source.port));\n symbolPorts.animateNodes(nids);\n }\n console.log('valid targets', nids);\n return _validTargets.length !== 0;\n },\n invalidSourceMessage: function(source) {\n return \"no valid matches for this port\";\n },\n changeDragTarget: function(source, target) {\n var nids, valid = target && is_valid(source.port, target.port), before;\n if(valid) {\n nids = change_state(_validTargets, 'small');\n target.port.state = 'large'; // it's one of the valid\n }\n else {\n nids = change_state(_validTargets, 'small');\n before = symbolPorts.animateNodes(nids);\n nids = change_state(_validTargets, 'shimmer');\n }\n symbolPorts.animateNodes(nids, before);\n return valid;\n },\n validTargetMessage: function(source, target) {\n return \"it's a match!\";\n },\n invalidTargetMessage: function(source, target) {\n return why_invalid(source.port, target.port);\n },\n finishDragEdge: function(source, target) {\n symbolPorts.enableHover(true);\n reset_ports(source);\n return Promise.resolve(is_valid(source.port, target.port));\n },\n cancelDragEdge: function(source) {\n symbolPorts.enableHover(true);\n reset_ports(source);\n return true;\n }\n };\n return _behavior;\n};\n","dc_graph.match_opposites = function(diagram, deleteProps, options) {\n options = Object.assign({\n multiplier: 2,\n ease: d3.ease('cubic')\n }, options);\n var _ports, _wports, _wedges, _validTargets;\n\n diagram.cascade(100, true, multiply_properties(function(e) {\n return options.ease(e.deleting || 0);\n }, deleteProps, property_interpolate));\n diagram.on('data.match-opposites', function(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _ports = ports;\n _wports = wports;\n _wedges = wedges;\n });\n function port_pos(p) {\n return { x: p.node.cola.x + p.pos.x, y: p.node.cola.y + p.pos.y };\n }\n function is_valid(sourcePort, targetPort) {\n return (_behavior.allowParallel() || !_wedges.some(function(e) {\n return sourcePort.edges.indexOf(e) >= 0 && targetPort.edges.indexOf(e) >= 0;\n })) && _behavior.isValid()(sourcePort, targetPort);\n }\n function reset_deletables(source, targets) {\n targets.forEach(function(p) {\n p.edges.forEach(function(e) {\n e.deleting = 0;\n });\n });\n if(source)\n source.port.edges.forEach(function(e) {\n e.deleting = 0;\n });\n }\n var _behavior = {\n isValid: property(function(sourcePort, targetPort) {\n // draw_graphs is already enforcing this, but this makes more sense and i use xor any chance i get\n return (diagram.portName.eval(sourcePort) === 'in') ^ (diagram.portName.eval(targetPort) === 'in');\n }),\n allowParallel: property(false),\n hoverPort: function(port) {\n // could be called by draw_graphs when node is hovered, isn't\n },\n startDragEdge: function(source) {\n _validTargets = _wports.filter(is_valid.bind(null, source.port));\n console.log('valid targets', _validTargets.map(diagram.portNodeKey.eval));\n return _validTargets.length !== 0;\n },\n dragCanvas: function(source, coords) {\n var closest = _validTargets.map(function(p) {\n var ppos = port_pos(p);\n return {\n distance: Math.hypot(coords[0] - ppos.x, coords[1] - ppos.y),\n port: p\n };\n }).sort(function(a, b) {\n return a.distance - b.distance;\n });\n var cpos = port_pos(closest[0].port), spos = port_pos(source.port);\n closest.forEach(function(c) {\n c.port.edges.forEach(function(e) {\n e.deleting = 1 - options.multiplier * c.distance / Math.hypot(cpos.x - spos.x, cpos.y - spos.y);\n });\n });\n source.port.edges.forEach(function(e) {\n e.deleting = 1 - options.multiplier * closest[0].distance / Math.hypot(cpos.x - spos.x, cpos.y - spos.y);\n });\n diagram.refresh();\n },\n changeDragTarget: function(source, target) {\n var valid = target && is_valid(source.port, target.port);\n if(valid) {\n target.port.edges.forEach(function(e) {\n e.deleting = 1;\n });\n source.port.edges.forEach(function(e) {\n e.deleting = 1;\n });\n reset_deletables(null, _validTargets.filter(function(p) {\n return p !== target.port;\n }));\n diagram.refresh();\n }\n return valid;\n },\n finishDragEdge: function(source, target) {\n if(is_valid(source.port, target.port)) {\n reset_deletables(null, _validTargets.filter(function(p) {\n return p !== target.port;\n }));\n if(options.delete_edges) {\n var edgeKeys = source.port.edges.map(diagram.edgeKey.eval).concat(target.port.edges.map(diagram.edgeKey.eval));\n return options.delete_edges.deleteSelection(edgeKeys);\n }\n return Promise.resolve(true);\n }\n reset_deletables(source, _validTargets);\n return Promise.resolve(false);\n },\n cancelDragEdge: function(source) {\n reset_deletables(source, _validTargets);\n return true;\n },\n detectReversedEdge: function(edge, sourcePort, targetPort) {\n return diagram.portName.eval(sourcePort) === 'in';\n }\n };\n return _behavior;\n};\n","dc_graph.wildcard_ports = function(options) {\n var diagram = options.diagram,\n get_type = options.get_type || function(p) { return p.orig.value.type; },\n set_type = options.set_type || function(p, src) { p.orig.value.type = src.orig.value.type; },\n get_name = options.get_name || function(p) { return p.orig.value.name; },\n is_wild = options.is_wild || function(p) { return p.orig.value.wild; },\n update_ports = options.update_ports || function() {},\n get_linked = options.get_linked || function() { return []; };\n function linked_ports(n, port) {\n if(!diagram)\n return [];\n var nid = diagram.nodeKey.eval(n);\n var name = get_name(port);\n var links = get_linked(n) || [];\n var found = links.find(function(set) {\n return set.includes(name);\n });\n if(!found) return [];\n return found.filter(function(link) { return link !== name; }).map(function(link) {\n return diagram.getPort(nid, null, link);\n });\n }\n function no_edges(ports) {\n return ports.every(function(lp) {\n return lp.edges.length === 0;\n });\n }\n return {\n isValid: function(p1, p2) {\n return get_type(p1) === null ^ get_type(p2) === null ||\n get_type(p1) !== null && get_type(p1) === get_type(p2);\n },\n whyInvalid: function(p1, p2) {\n return get_type(p1) === null && get_type(p2) === null && \"can't connect wildcard to wildcard\" ||\n get_type(p1) !== get_type(p2) && \"the types of ports must match\";\n },\n copyLinked: function(n, port) {\n linked_ports(n, port).forEach(function(lp) {\n set_type(lp, port);\n });\n },\n copyType: function(e, sport, tport) {\n if(get_type(sport) === null) {\n set_type(sport, tport);\n this.copyLinked(sport.node, sport);\n update_ports();\n } else if(get_type(tport) === null) {\n set_type(tport, sport);\n this.copyLinked(tport.node, tport);\n update_ports();\n }\n return Promise.resolve(e);\n },\n resetTypes: function(edges) {\n // backward compatibility: this used to take diagram as\n // first arg, which was wrong\n var dia = diagram;\n if(arguments.length === 2) {\n dia = arguments[0];\n edges = arguments[1];\n }\n edges.forEach(function(eid) {\n var e = dia.getWholeEdge(eid),\n spname = dia.edgeSourcePortName.eval(e),\n tpname = dia.edgeTargetPortName.eval(e);\n var update = false;\n var p = dia.getPort(dia.nodeKey.eval(e.source), null, spname);\n var linked = linked_ports(e.source, p);\n if(is_wild(p) && p.edges.length === 1 && no_edges(linked)) {\n set_type(p, null);\n linked.forEach(function(lp) {\n set_type(lp, null);\n update = true;\n });\n }\n p = dia.getPort(dia.nodeKey.eval(e.target), null, tpname);\n linked = linked_ports(e.target, p);\n if(is_wild(p) && p.edges.length === 1 && no_edges(linked)) {\n set_type(p, null);\n linked.forEach(function(lp) {\n set_type(lp, null);\n update = true;\n });\n }\n if(update)\n update_ports();\n });\n return Promise.resolve(edges);\n }\n };\n};\n","dc_graph.symbol_port_style = function() {\n var _style = {};\n var _nodePorts, _node;\n var _drawConduct;\n\n _style.symbolScale = property(null);\n _style.colorScale = property(d3.scale.ordinal().range(\n // colorbrewer light qualitative scale\n d3.shuffle(['#8dd3c7','#ffffb3','#bebada','#fb8072','#80b1d3','#fdb462',\n '#b3de69','#fccde5','#d9d9d9','#bc80bd','#ccebc5','#ffed6f'])));\n\n function name_or_edge(p) {\n return p.named ? p.name : _style.parent().edgeKey.eval(p.edges[0]);\n }\n _style.symbol = _style.portSymbol = property(name_or_edge, false); // non standard properties taking \"outer datum\"\n _style.color = _style.portColor = property(name_or_edge, false);\n _style.outline = property(dc_graph.symbol_port_style.outline.circle());\n _style.content = property(dc_graph.symbol_port_style.content.d3symbol());\n _style.smallRadius = _style.portRadius = property(7);\n _style.mediumRadius = _style.portHoverNodeRadius = property(10);\n _style.largeRadius = _style.portHoverPortRadius = property(14);\n _style.displacement = _style.portDisplacement = property(2);\n _style.outlineFillScale = _style.portBackgroundScale = property(null);\n _style.outlineFill = _style.portBackgroundFill = property(null);\n _style.outlineStroke = _style.portBackgroundStroke = property(null);\n _style.outlineStrokeWidth = _style.portBackgroundStrokeWidth = property(null);\n _style.padding = _style.portPadding = property(2);\n _style.label = _style.portLabel = _style.portText = property(function(p) {\n return p.name;\n });\n _style.portLabelPadding = property({x: 5, y: 5});\n _style.cascade = cascade(_style);\n\n _style.portPosition = function(p) {\n var l = Math.hypot(p.pos.x, p.pos.y),\n u = {x: p.pos.x / l, y: p.pos.y / l},\n disp = _style.displacement.eval(p);\n return {x: p.pos.x + disp * u.x, y: p.pos.y + disp * u.y};\n };\n\n function symbol_fill(p) {\n var symcolor = _style.color.eval(p);\n return symcolor ?\n (_style.colorScale() ? _style.colorScale()(symcolor) : symcolor) :\n 'none';\n }\n function port_transform(p) {\n var pos = _style.portPosition(p);\n return 'translate(' + pos.x + ',' + pos.y + ')';\n }\n function port_symbol(p) {\n if(!_style.symbolScale())\n _style.symbolScale(d3.scale.ordinal().range(d3.shuffle(_style.content().enum())));\n var symname = _style.symbol.eval(p);\n return symname && (_style.symbolScale() ? _style.symbolScale()(symname) : symname);\n }\n function is_left(p) {\n return p.vec[0] < 0;\n }\n function hover_radius(p) {\n switch(p.state) {\n case 'large':\n return _style.largeRadius.eval(p);\n case 'medium':\n return _style.mediumRadius.eval(p);\n case 'small':\n default:\n return _style.smallRadius.eval(p);\n }\n }\n function shimmer_radius(p) {\n return /-medium$/.test(p.state) ?\n _style.mediumRadius.eval(p) :\n _style.largeRadius.eval(p);\n }\n // fall back to node aesthetics if not defined for port\n function outline_fill(p) {\n var scale, fill;\n if(_style.outlineFill.eval(p)) {\n scale = _style.outlineFillScale() || identity;\n fill = _style.outlineFill.eval(p);\n }\n else {\n scale = _style.parent().nodeFillScale() || identity;\n fill = _style.parent().nodeFill.eval(p.node);\n }\n return fill === 'none' ? 'none' : scale(fill);\n }\n function outline_stroke(p) {\n return _style.outlineStroke.eval(p) || _style.parent().nodeStroke.eval(p.node);\n }\n function outline_stroke_width(p) {\n var sw = _style.outlineStrokeWidth.eval(p);\n return typeof sw === 'number' ? sw : _style.parent().nodeStrokeWidth.eval(p.node);\n }\n _style.animateNodes = function(nids, before) {\n var setn = d3.set(nids);\n var node = _node\n .filter(function(n) {\n return setn.has(_style.parent().nodeKey.eval(n));\n });\n var symbol = _style.parent().selectNodePortsOfStyle(node, _style.parent().portStyle.nameOf(this));\n var shimmer = symbol.filter(function(p) { return /^shimmer/.test(p.state); }),\n nonshimmer = symbol.filter(function(p) { return !/^shimmer/.test(p.state); });\n if(shimmer.size()) {\n if(before)\n before.each('end', repeat);\n else repeat();\n }\n\n function repeat() {\n var shimin = shimmer.transition()\n .duration(1000)\n .ease(\"bounce\");\n shimin.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return shimmer_radius(p) + _style.portPadding.eval(p);\n }));\n shimin.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, shimmer_radius));\n var shimout = shimin.transition()\n .duration(1000)\n .ease('sin');\n shimout.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n shimout.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n shimout.each(\"end\", repeat);\n }\n\n var trans = nonshimmer.transition()\n .duration(250);\n trans.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return hover_radius(p) + _style.portPadding.eval(p);\n }));\n trans.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, hover_radius));\n\n function text_showing(p) {\n return p.state === 'large' || p.state === 'medium';\n }\n trans.selectAll('text.port-label')\n .attr({\n opacity: function(p) {\n return text_showing(p) ? 1 : 0;\n },\n 'pointer-events': function(p) {\n return text_showing(p) ? 'auto' : 'none';\n }\n });\n trans.selectAll('rect.port-label-background')\n .attr('opacity', function(p) {\n return text_showing(p) ? 1 : 0;\n });\n // bring all nodes which have labels showing to the front\n _node.filter(function(n) {\n var ports = _nodePorts[_style.parent().nodeKey.eval(n)];\n return ports && ports.some(text_showing);\n }).each(function() {\n this.parentNode.appendChild(this);\n });\n // bring all active ports to the front\n symbol.filter(function(p) {\n return p.state !== 'small';\n }).each(function() {\n this.parentNode.appendChild(this);\n });\n return trans;\n };\n _style.eventPort = function() {\n var parent = d3.select(d3.event.target.parentNode);\n if(d3.event.target.parentNode.tagName === 'g' && parent.classed('port'))\n return parent.datum();\n return null;\n };\n _style.drawPorts = function(ports, nodePorts, node) {\n _nodePorts = nodePorts; _node = node;\n var port = ports.data(function(n) {\n return nodePorts[_style.parent().nodeKey.eval(n)] || [];\n }, name_or_edge);\n port.exit().remove();\n var portEnter = port.enter().append('g')\n .attr({\n class: 'port',\n transform: port_transform\n });\n port.transition('port-position')\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .attr({\n transform: port_transform\n });\n\n var outline = port.selectAll('.port-outline').data(function(p) {\n return outline_fill(p) !== 'none' ? [p] : [];\n });\n outline.exit().remove();\n var outlineEnter = outline.enter().append(_style.outline().tag())\n .attr({\n class: 'port-outline',\n fill: outline_fill,\n 'stroke-width': outline_stroke_width,\n stroke: outline_stroke\n });\n if(_style.outline().init)\n outlineEnter.call(_style.outline().init);\n outlineEnter\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n // only position and size are animated (?) - anyway these are not on the node\n // and they are typically used to indicate selection which should be fast\n outline\n .attr({\n fill: outline_fill,\n 'stroke-width': outline_stroke_width,\n stroke: outline_stroke\n });\n outline.transition()\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n\n var symbolEnter = portEnter.append(_style.content().tag())\n .attr('class', 'port-symbol')\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n\n var symbol = port.select('.port-symbol');\n symbol.attr('fill', symbol_fill);\n symbol.transition()\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n\n var label = port.selectAll('text.port-label').data(function(p) {\n return _style.portLabel.eval(p) ? [p] : [];\n });\n label.exit().remove();\n var labelEnter = label.enter();\n labelEnter.append('rect')\n .attr({\n class: 'port-label-background',\n 'pointer-events': 'none'\n });\n labelEnter.append('text')\n .attr({\n class: 'port-label',\n 'dominant-baseline': 'middle',\n 'pointer-events': 'none',\n cursor: 'default',\n opacity: 0\n });\n label\n .each(function(p) {\n p.offset = (is_left(p) ? -1 : 1) * (_style.largeRadius.eval(p) + _style.portPadding.eval(p));\n })\n .attr({\n 'text-anchor': function(p) {\n return is_left(p) ? 'end' : 'start';\n },\n transform: function(p) {\n return 'translate(' + p.offset + ',0)';\n }\n })\n .text(_style.portLabel.eval)\n .each(function(p) {\n p.bbox = getBBoxNoThrow(this);\n });\n port.selectAll('rect.port-label-background')\n .attr({\n x: function(p) {\n return (p.offset < 0 ? p.offset - p.bbox.width : p.offset) - _style.portLabelPadding.eval(p).x;\n },\n y: function(p) {\n return -p.bbox.height/2 - _style.portLabelPadding.eval(p).y;\n },\n width: function(p) {\n return p.bbox.width + 2*_style.portLabelPadding.eval(p).x;\n },\n height: function(p) {\n return p.bbox.height + 2*_style.portLabelPadding.eval(p).y;\n },\n fill: 'white',\n opacity: 0\n });\n return _style;\n };\n\n _style.enableHover = function(whether) {\n if(!_drawConduct) {\n if(_style.parent()) {\n var draw = _style.parent().child('draw-graphs');\n if(draw)\n _drawConduct = draw.conduct();\n }\n }\n var namespace = 'grow-ports-' + _style.parent().portStyle.nameOf(this);\n if(whether) {\n _node.on('mouseover.' + namespace, function(n) {\n var nid = _style.parent().nodeKey.eval(n);\n var activePort = _style.eventPort();\n if(_nodePorts[nid])\n _nodePorts[nid].forEach(function(p) {\n p.state = p === activePort ? 'large' : activePort ? 'small' : 'medium';\n });\n var nids = _drawConduct && _drawConduct.hoverPort(activePort) || [];\n nids.push(nid);\n _style.animateNodes(nids);\n });\n _node.on('mouseout.' + namespace, function(n) {\n var nid = _style.parent().nodeKey.eval(n);\n if(_nodePorts[nid])\n _nodePorts[nid].forEach(function(p) {\n p.state = 'small';\n });\n var nids = _drawConduct && _drawConduct.hoverPort(null) || [];\n nids.push(nid);\n _style.animateNodes(nids);\n });\n } else {\n _node.on('mouseover.' + namespace, null);\n _node.on('mouseout.' + namespace, null);\n }\n return _style;\n };\n\n _style.parent = property(null);\n return _style;\n};\n\ndc_graph.symbol_port_style.outline = {};\ndc_graph.symbol_port_style.outline.circle = function() {\n return {\n tag: function() {\n return 'circle';\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr('r', function(p) { return rf(p); });\n };\n }\n };\n};\ndc_graph.symbol_port_style.outline.square = function() {\n return {\n tag: function() {\n return 'rect';\n },\n init: function(outlines) {\n // crispEdges can make outline off-center from symbols\n // outlines.attr('shape-rendering', 'crispEdges');\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr({\n x: function(p) { return -rf(p); },\n y: function(p) { return -rf(p); },\n width: function(p) { return 2*rf(p); },\n height: function(p) { return 2*rf(p); }\n });\n };\n }\n };\n};\ndc_graph.symbol_port_style.outline.arrow = function() {\n // offset needed for body in order to keep centroid at 0,0\n var left_portion = 3/4 - Math.PI/8;\n var _outline = {\n tag: function() {\n return 'path';\n },\n init: function(outlines) {\n //outlines.attr('shape-rendering', 'crispEdges');\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr('d', function(p) {\n var r = rf(p);\n if(!_outline.outie() || _outline.outie()(p.orig))\n return 'M' + -left_portion*r + ',' + -r + ' h' + r +\n ' l' + r + ',' + r + ' l' + -r + ',' + r +\n ' h' + -r +\n ' a' + r + ',' + r + ' 0 1,1 0,' + -2*r;\n else\n return 'M' + -(2-left_portion)*r + ',' + -r + ' h' + 2*r +\n ' a' + r + ',' + r + ' 0 1,1 0,' + 2*r +\n ' h' + -2*r +\n ' l' + r + ',' + -r + ' l' + -r + ',' + -r;\n });\n };\n },\n outie: property(null)\n };\n return _outline;\n};\n\ndc_graph.symbol_port_style.content = {};\ndc_graph.symbol_port_style.content.d3symbol = function() {\n var _symbol = {\n tag: function() {\n return 'path';\n },\n enum: function() {\n return d3.svg.symbolTypes;\n },\n draw: function(symf, rf) {\n return function(symbols) {\n symbols.attr('d', function(p) {\n var sym = symf(p), r = rf(p);\n return d3.svg.symbol()\n .type(sym)\n .size(r*r)\n ();\n });\n symbols.attr('transform', function(p) {\n switch(symf(p)) {\n case 'triangle-up':\n return 'translate(0, -1)';\n case 'triangle-down':\n return 'translate(0, 1)';\n default: return null;\n }\n });\n };\n }\n };\n return _symbol;\n};\ndc_graph.symbol_port_style.content.letter = function() {\n var _symbol = {\n tag: function() {\n return 'text';\n },\n enum: function() {\n return d3.range(65, 91).map(String.fromCharCode);\n },\n draw: function(symf, rf) {\n return function(symbols) {\n symbols.text(symf)\n .attr({\n 'dominant-baseline': 'middle',\n 'text-anchor': 'middle'\n });\n symbols.each(function(p) {\n if(!p.symbol_size)\n p.symbol_size = getBBoxNoThrow(this);\n });\n symbols.attr('transform', function(p) {\n return 'scale(' + (2*rf(p)/p.symbol_size.height) +\n ') translate(' + [0,2].join(',') + ')';\n });\n };\n }\n };\n return _symbol;\n};\n","function process_dot(callback, error, text) {\n if(error) {\n callback(error, null);\n return;\n }\n var nodes, edges;\n if(graphlibDot.parse) { // graphlib-dot 1.1.0 (where did i get it from?)\n var digraph = graphlibDot.parse(text);\n\n var nodeNames = digraph.nodes();\n 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 edges = [];\n edgeNames.forEach(function(e) {\n var edge = digraph._edges[e];\n edges.push(Object.assign({}, edge.value, {\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 } else { // graphlib-dot 0.6\n digraph = graphlibDot.read(text);\n\n nodeNames = digraph.nodes();\n 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 edges = [];\n digraph.edges().forEach(function(e) {\n edges.push(Object.assign({}, e.value, {\n source: digraph._nodes[e.v].id,\n target: digraph._nodes[e.w].id,\n sourcename: e.v,\n targetname: e.w\n }));\n });\n }\n var graph = {nodes: nodes, links: edges};\n callback(null, graph);\n}\n\nfunction process_dsv(callback, error, data) {\n if(error) {\n callback(error, null);\n return;\n }\n var keys = Object.keys(data[0]);\n var source = keys[0], target = keys[1];\n var nodes = d3.set(data.map(function(r) { return r[source]; }));\n data.forEach(function(r) {\n nodes.add(r[target]);\n });\n nodes = nodes.values().map(function(k) { return {name: k}; });\n callback(null, {\n nodes: nodes,\n links: data.map(function(r, i) {\n return {\n key: i,\n sourcename: r[source],\n targetname: r[target]\n };\n })\n });\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, process_dot.bind(null, callback));\n else if(/\\.psv$/.test(ignore_query(file1)))\n d3.dsv('|', 'text/plain')(file1, process_dsv.bind(null, callback));\n else if(/\\.csv$/.test(ignore_query(file1)))\n d3.csv(file1, process_dsv.bind(null, callback));\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","// collapse edges between same source and target\ndc_graph.deparallelize = function(group, sourceTag, targetTag) {\n return {\n all: function() {\n var ST = {};\n group.all().forEach(function(kv) {\n var source = kv.value[sourceTag],\n target = kv.value[targetTag];\n var dir = source < target;\n var min = dir ? source : target, max = dir ? target : source;\n ST[min] = ST[min] || {};\n var entry = ST[min][max] = ST[min][max] || {in: 0, out: 0, original: kv};\n if(dir)\n ++entry.in;\n else\n ++entry.out;\n });\n var ret = [];\n Object.keys(ST).forEach(function(source) {\n Object.keys(ST[source]).forEach(function(target) {\n var entry = ST[source][target];\n entry[sourceTag] = source;\n entry[targetTag] = target;\n ret.push({key: entry.original.key, value: entry});\n });\n });\n return ret;\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 pathStrength: 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).append('svg');\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(diagram, paths) {\n if(paths.length === 0) return;\n var xpadding = 30;\n var space = 30;\n var radius = 8;\n // set the height of SVG accordingly\n root.attr('height', 20*(paths.length+1))\n .attr('width', xpadding+(space+2*radius)*(paths.length/2+1)+20);\n\n root.selectAll('.path-selector').remove();\n\n var pathlist = root.selectAll('g.path-selector').data(paths);\n pathlist.enter()\n .append('g')\n .attr('class', 'path-selector')\n .attr(\"transform\", function(path, i) { return \"translate(0, \" + i*20 + \")\"; })\n .each(function(path_data, i) {\n var nodes = path_data.element_list.filter(function(d) { return d.element_type === 'node'; });\n // line\n var line = d3.select(this).append('line');\n line.attr('x1', xpadding+space)\n .attr('y1', radius+1)\n .attr('x2', xpadding+space*nodes.length)\n .attr('y2', radius+1)\n .attr('opacity', 0.4)\n .attr('stroke-width', 5)\n .attr('stroke', '#bdbdbd');\n\n // dots\n var path = d3.select(this).selectAll('circle').data(nodes);\n path.enter()\n .append('circle')\n .attr('cx', function(d, i) { return xpadding+space*(i+1); })\n .attr('cy', radius+1)\n .attr('r', radius)\n .attr('opacity', 0.4)\n .attr('fill', function(d) {\n // TODO path_selector shouldn't know the data structure of orignal node objects\n var regeneratedNode = {key:d.property_map.ecomp_uid, value:d.property_map};\n return diagram.nodeStroke()(regeneratedNode);\n });\n\n // label\n var text = d3.select(this).append('text');\n text.text('Path '+i)\n .attr('class', 'path_label')\n .attr('x', 0)\n .attr('y', radius*1.7)\n .on('mouseover', function() {\n highlight_paths_group.hover_changed([path_data]);\n })\n .on('mouseout', function() {\n highlight_paths_group.hover_changed(null);\n })\n .on('click', function() {\n highlight_paths_group.select_changed(toggle_paths(selected, [path_data]));\n });\n });\n pathlist.exit().transition(1000).attr('opacity', 0).remove();\n }\n\n function draw_hovered() {\n var is_hovered = contains_path(hovered);\n root.selectAll('g.path-selector')\n .each(function(d, i) {\n var textColor = is_hovered(d) ? '#e41a1c' : 'black';\n var lineColor = is_hovered(d) ? 'black' : '#bdbdbd';\n var opacity = is_hovered(d) ? '1' : '0.4';\n d3.select(this).select('.path_label').attr('fill', textColor);\n d3.select(this).selectAll('line')\n .attr('stroke', lineColor)\n .attr('opacity', opacity);\n d3.select(this).selectAll('circle').attr('opacity', opacity);\n });\n }\n\n function draw_selected() {\n var is_selected = contains_path(selected);\n root.selectAll('g.path-selector')\n .each(function(d, i) {\n var textWeight = is_selected(d) ? 'bold' : 'normal';\n var lineColor = is_selected(d) ? 'black' : '#bdbdbd';\n var opacity = is_selected(d) ? '1' : '0.4';\n d3.select(this).select('.path_label')\n .attr('font-weight', textWeight);\n d3.select(this).selectAll('line')\n .attr('stroke', lineColor)\n .attr('opacity', opacity);\n d3.select(this).selectAll('circle').attr('opacity', opacity);\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(diagram, 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 0) {\n var choice = Math.random();\n var n1, n2;\n if(!_nodes.length || choice < options.newComponentProb)\n n1 = new_node();\n else\n n1 = random_node();\n if(choice < options.newNodeProb)\n n2 = new_node();\n else\n n2 = random_node();\n if(n1 && n2) {\n var edge = {};\n edge[options.edgeKey] = options.edgeKeyGen(_edges.length);\n edge[options.sourceKey] = n1[options.nodeKey];\n edge[options.targetKey] = n2[options.nodeKey];\n edge[options.dashTag] = Math.floor(Math.random()*options.ndashes);\n if(options.log)\n console.log(n1[options.nodeKey] + ' -> ' + n2[options.nodeKey]);\n _edges.push(edge);\n }\n }\n },\n remove: function(N) {\n while(N-- > 0) {\n var choice = Math.random();\n if(choice < options.removeEdgeProb)\n _edges.splice(Math.floor(Math.random()*_edges.length), 1);\n else {\n var n = _nodes[Math.floor(Math.random()*_nodes.length)];\n var eis = [];\n _edges.forEach(function(e, ei) {\n if(e[options.sourceKey] === n[options.nodeKey] ||\n e[options.targetKey] === n[options.nodeKey])\n eis.push(ei);\n });\n eis.reverse().forEach(function(ei) {\n _edges.splice(ei, 1);\n });\n }\n }\n }\n };\n};\n","var dont_use_key = deprecation_warning('dc_graph.line_breaks now takes a string - d.key behavior is deprecated and will be removed in a later version');\n\ndc_graph.line_breaks = function(charexp, max_line_length) {\n var regexp = new RegExp(charexp, 'g');\n return function(s) {\n if(typeof s === 'object') { // backward compatibility\n dont_use_key();\n s = s.key;\n }\n var result;\n var line = '', lines = [], part, i = 0;\n do {\n result = regexp.exec(s);\n if(result)\n part = s.slice(i, regexp.lastIndex);\n else\n part = s.slice(i);\n if(line.length + part.length > 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 9f91554a..55d39757 100644 --- a/dc.graph.min.js +++ b/dc.graph.min.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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,5 +18,5 @@ * */ -!function(){function e(de,fe,ge){"use strict";var he={version:"0.6.0",constants:{CHART_CLASS:"dc-graph"}};function pe(e){return e.orig}function ve(e){return e}var ye=function(e,n){void 0===n?n=pe:!1===n&&(n=ve);var t=e,r=null,o=[],a=function(e){return arguments.length?(r&&r(e),t=e,this):t};return a.cascade=function(e,t){for(var n=0;ne)return o.splice(n,0,{n:e,f:t}),a}return o.push({n:e,f:t}),a},a._eval=function(e,t){return 0!==t&&o.length?o[t-1].f(e,function(){return a._eval(e,t-1)}):he.functor_wrap(a(),n)(e)},a.eval=function(e){return a._eval(e,o.length)},a.react=function(e){return arguments.length?(r=e,this):r},a};function me(){var n={},e=function(e,t){return 1===arguments.length?n[e]:(n[e]===t||(n[e]&&n[e].parent(null),(n[e]=t)&&t.parent(this)),this)};return e.enum=function(){return Object.keys(n)},e.nameOf=function(t){var e=Object.entries(n).find(function(e){return e[1]==t});return e?e[0]:null},e}function xe(e,t){var n=ye(t),r=function(){return arguments.length?(console.warn(e),n.apply(ye,arguments),this):n()};return["cascade","_eval","eval","react"].forEach(function(e){r[e]=n[e]}),r}function A(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}function _e(e){try{return e.getBBox()}catch(e){return{x:0,y:0,width:0,height:0}}}function n(n,r){return function(e,t){return n(e)?r(e):t()}}function t(n,r){return function(e,t){return de.interpolate(t(e),r(e))(n(e))}}function f(e,t,n){var r={};for(var o in t)r[o]=n(e,we(t[o]));return r}function c(e,t){return f(e,t,n)}function b(e,t,n){var r={},o={},a=[];for(var i in n)/^node/.test(i)?r[i]=n[i]:/^edge/.test(i)?o[i]=n[i]:a.push(i);a.length&&console.error('only know how to deal with properties that start with "node" or "edge"',a);var u=e?c(e,r):{};return t&&Object.assign(u,c(t,o)),u}function be(o){return function(e,t,n){for(var r in n){if(!o[r])throw new Error("unknown attribute "+r);o[r].cascade(e,t?n[r]:null)}return o}}function we(e){return he.functor_wrap(e,pe)}"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(e),r=1;r>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var r=arguments[1],o=0;o"+n+' is deprecated, and it is not supported for the "'+t.layoutAlgorithm()+'" layout algorithm: ignored.'),!arguments.length)return null;return this}}function Q(e){z.layoutEngine()||z.layoutAlgorithm("cola",!0),(e||z.layoutEngine()).init({width:z.width(),height:z.height()})}function ee(e){return!!e.source&&!!e.target}z.height=function(e){if(!arguments.length){if(!ge.utils.isNumber(i)){if(B=d(z.root().node()),"auto"===i)return B;i=B}return i}if(ge.utils.isNumber(e)||!e||"auto"===e)i=e;else{if("function"!=typeof e)throw new Error("don't know what to do with height type "+typeof e+" value "+e);d=e,i=void 0}return z},z.minHeight=function(e){return arguments.length?(s=e,z):s},z.width=function(e){if(!arguments.length){if(!ge.utils.isNumber(o)){if(q=l(z.root().node()),"auto"===o)return q;o=q}return o}if(ge.utils.isNumber(e)||!e||"auto"===e)o=e;else{if("function"!=typeof e)throw new Error("don't know what to do with width type "+typeof e+" value "+e);l=e,o=void 0}return z},z.minWidth=function(e){return arguments.length?(c=e,z):c},z.root=ye(null).react(function(e){e.empty()&&console.log("Warning: parent selector "+t+" doesn't seem to exist")}),z.mouseZoomable=ye(!0),z.zoomExtent=ye([.1,2]),z.modKeyZoom=z.altKeyZoom=ye(!1),z.fitStrategy=ye("default"),z.restrictPan=ye(!1),z.autoZoom=ye(null),z.zoomToFit=function(e){if(H&&Y){var t=z.selectAllNodes();z.selectAllEdges();P(t)}},z.zoomDuration=ye(500),z.nodeDimension=ye(),z.nodeGroup=ye(),z.edgeDimension=ye(),z.edgeGroup=ye(),z.edgesInFront=ye(!1),z.nodeKey=z.nodeKeyAccessor=ye(function(e){return e.key}),z.edgeKey=z.edgeKeyAccessor=ye(function(e){return e.key}),z.edgeSource=z.sourceAccessor=ye(function(e){return e.value.sourcename}),z.edgeTarget=z.targetAccessor=ye(function(e){return e.value.targetname}),z.portDimension=ye(null),z.portGroup=ye(null),z.portNodeKey=ye(null),z.portEdgeKey=ye(null),z.portName=ye(null),z.portStyleName=ye(null),z.portElastic=ye(!0),z.portStyle=me(),z.portBounds=ye(null),z.edgeSourcePortName=ye(null),z.edgeTargetPortName=ye(null),z.nodeRadius=z.nodeRadiusAccessor=ye(25),z.nodeStrokeWidth=z.nodeStrokeWidthAccessor=ye(1),z.nodeStroke=z.nodeStrokeAccessor=ye("black"),z.nodeStrokeDashArray=ye(null),z.nodeFillScale=ye(null),z.nodeFill=z.nodeFillAccessor=ye("white"),z.nodeOpacity=ye(1),z.nodePadding=ye(6),z.nodeLabelPadding=ye(0),z.nodeLineHeight=ye(1),z.nodeLabel=z.nodeLabelAccessor=ye(function(e){return e.value.label||e.value.name}),z.nodeLabelAlignment=ye("center"),z.nodeLabelFill=z.nodeLabelFillAccessor=ye(null),z.nodeFitLabel=z.nodeFitLabelAccessor=ye(!0),z.nodeShape=ye(Se),z.shape=me(),z.shape("nothing",he.no_shape()),z.shape("ellipse",he.ellipse_shape()),z.shape("polygon",he.polygon_shape()),z.shape("rounded-rect",he.rounded_rectangle_shape()),z.nodeContent=ye("text"),z.content=me(),z.content("text",he.text_contents()),z.nodeIcon=ye(null),z.nodeTitle=z.nodeTitleAccessor=ye(function(e){return z.nodeKey()(e)}),z.nodeOrdering=ye(null),z.nodeFixed=z.nodeFixedAccessor=ye(null),z.edgeStroke=z.edgeStrokeAccessor=ye("black"),z.edgeStrokeWidth=z.edgeStrokeWidthAccessor=ye(1),z.edgeStrokeDashArray=ye(null),z.edgeOpacity=z.edgeOpacityAccessor=ye(1),z.edgeLabel=z.edgeLabelAccessor=ye(function(e){return z.edgeKey()(e)}),z.edgeArrowhead=z.edgeArrowheadAccessor=ye("vee"),z.edgeArrowtail=z.edgeArrowtailAccessor=ye(null),z.edgeArrowSize=ye(1),z.edgeIsLayout=z.edgeIsLayoutAccessor=ye(function(e){return!e.value.notLayout}),z.edgeIsShown=ye(!0),z.lengthStrategy=p("lengthStrategy"),z.edgeLength=z.edgeDistanceAccessor=ye(function(e){return e.value.distance}),z.flowLayout=p("flowLayout"),z.rankdir=p("rankdir"),z.baseLength=p("baseLength"),z.transitionDuration=ye(500),z.stageTransitions=ye("none"),z.deleteDelay=ye(0),z.groupConnected=p("groupConnected"),z.timeLimit=ye(0),z.constrain=ye(function(e,t){return[]}),z.parallelEdgeOffset=ye(10),z.edgeOrdering=ye(null),z.edgeSort=ye(null),z.cascade=be(z),z.initLayoutOnRedraw=ye(!1),z.layoutUnchanged=ye(!1),z.relayout=function(){return F=R=null,this},z.initialLayout=xe("initialLayout is deprecated - use layout algorithms instead",null),z.initialOnly=xe("initialOnly is deprecated - see the initialLayout deprecation notice in the documentation",!1),z.induceNodes=ye(!1),z.showLayoutSteps=ye(!1),z.mode=z.child=me(),z.legend=function(e){return arguments.length?(z.child("node-legend",e),z):z.child("node-legend")},z.layoutAlgorithm=function(e,t){if(!arguments.length)return z.layoutEngine()?z.layoutEngine().layoutAlgorithm():"cola";var n;switch(t||console.warn("dc.graph.diagram.layoutAlgorithm is depecrated - pass the layout engine object to dc_graph.diagram.layoutEngine instead"),e){case"cola":n=he.cola_layout();break;case"dagre":n=he.dagre_layout()}return n=he.webworker_layout(n),z.layoutEngine(n),this},z.layoutEngine=ye(null).react(function(e){e&&e.parent&&e.parent(z),h&&(Object.keys(Z).forEach(function(e){Z[e].cola.points=null}),Q(e))}),z.enforceEdgeDirection=ye(null),z.tickSize=p("tickSize"),z.uniqueId=function(){return z.anchorName().replace(/[ .#=\[\]"]/g,"-")},z.edgeId=function(e){return"edge-"+z.edgeKey.eval(e).replace(/[^\w-_]/g,"-")},z.arrowId=function(e,t){return"arrow-"+t+"-"+z.uniqueId()+"-"+z.edgeId(e)},z.textpathId=function(e){return"textpath-"+z.uniqueId()+"-"+z.edgeId(e)},z.getNode=function(e){return V[e]?V[e].orig:null},z.getWholeNode=function(e){return V[e]?V[e]:null},z.getEdge=function(e){return Z[e]?Z[e].orig:null},z.getWholeEdge=function(e){return Z[e]?Z[e]:null},z.getPort=function(e,t,n){return U[De(e,t,n)]},z.nodePorts=function(){return a},z.handleDisconnected=p("handleDisconnected"),z.forEachChild=function(e,n,r,o){n.enum().forEach(function(t){o(n(t),e.filter(function(e){return r(e)===t}))})},z.forEachShape=function(e,t){z.forEachChild(e,z.shape,function(e){return e.dcg_shape.shape},t)},z.forEachContent=function(e,t){z.forEachChild(e,z.content,z.nodeContent.eval,t)},z.renderNode=z._enterNode=function(e){return z.nodeTitle()&&e.append("title"),e.each(Ke(z)),z.forEachShape(e,function(e,t){t.call(e.create)}),z},z.redrawNode=z._updateNode=function(e){var r,t,n,o=e.filter((r=z,function(e){var t=r.nodeShape.eval(e)||Se,n=e.dcg_shape.abstract;return t.shape!==n.shape||"polygon"===t.shape&&(t.shape.sides!==n.sides||t.shape.skew!==n.skew||t.shape.distortion!==n.distortion||t.shape.rotation!==n.rotation)}));return o.selectAll(".node-shape").remove(),o.each(Ke(z)),z.forEachShape(o,function(e,t){t.call(e.create)}),e.select("title").text(z.nodeTitle.eval),z.forEachContent(e,function(e,t){t.call(e.update),z.forEachShape(e.selectContent(t),function(e,t){var s,d;t.call((s=e,d=z,function(e){e.each(function(e){var t=null;if((!s.useTextSize||s.useTextSize(e.dcg_shape))&&d.nodeFitLabel.eval(e)){var n;t={x:(t=_e(this)).x,y:t.y,width:t.width,height:t.height};var r=d.nodeContent.eval(e);if(r&&d.content(r).padding)n=d.content(r).padding(e);else{var o=Ae(d,e);n={x:2*o.x,y:2*o.y}}t.width+=n.x,t.height+=n.y,e.bbox=t}var a,i=0;s.useRadius&&!s.useRadius(e.dcg_shape)||(i=d.nodeRadius.eval(e)),a=t&&t.width&&t.height||s.useTextSize&&!s.useTextSize(e.dcg_shape)?s.calc_radii(e,i,t):{rx:i,ry:i},e.dcg_rx=a.rx,e.dcg_ry=a.ry;var u=2*a.rx,c=2*a.ry;if(ut.target.index&&(o=-o,a=-a),n=[a,o],r=Math.hypot(n[0],n[1]),[n[0]/r,n[1]/r]}function re(e,t){for(var n in a={},t.forEach(function(e){var t=z.nodeKey.eval(e.node);(a[t]=a[t]||[]).push(e)}),a){var r=e[n];a[n].forEach(function(e){if(z.portElastic.eval(e)&&e.edges.length){var t=e.edges.map(m.bind(null,r));e.vec=[de.sum(t,function(e){return e[0]})/t.length,de.sum(t,function(e){return e[1]})/t.length]}else e.vec=e.vec||void 0;e.pos=null})}}function oe(e,t,n){for(var r in a){var o=e[r];a[r].forEach(function(e){e.pos||Me(z,o,e)})}t.forEach(function(e){var t=z.edgeSourcePortName.eval(e);e.sourcePort.pos=t?n[De(z.nodeKey.eval(e.source),null,t)].pos:n[De(null,z.edgeKey.eval(e),"source")].pos,t=z.edgeTargetPortName.eval(e),e.targetPort.pos=t?n[De(z.nodeKey.eval(e.target),null,t)].pos:n[De(null,z.edgeKey.eval(e),"target")].pos,console.assert(e.sourcePort.pos&&e.targetPort.pos)})}function ae(e,t){z._updateEdge(t),z._updateNode(e),ce(e)}function ie(e){X.end(e),J=!1,te&&(te=!1,window.setTimeout(function(){z.isRunning()||z.redraw()},0))}function x(e,t){var n=e[0],r=e[e.length-1],o=Oe(e,"tail"===t?.25:.75);return("head"===t?Math.atan2(r.y-o.y,r.x-o.x):Math.atan2(n.y-o.y,n.x-o.x))+"rad"}function _(e,t,n){var r=e.points,o=r[0],a=r[r.length-1];switch(z.enforceEdgeDirection()){case"LR":if(t.x>=n.x){var i=o.x-a.x;return{points:[o,{x:o.x+i,y:o.y-i/2},{x:a.x-i,y:a.y-i/2},a],bezDegree:3,sourcePort:e.sourcePort,targetPort:e.targetPort}}break;case"TB":if(t.y>=n.y){var u=o.y-a.y;return{points:[o,{x:o.x+u/2,y:o.y+u},{x:a.x+u/2,y:a.y-u},a],bezDegree:3,sourcePort:e.sourcePort,targetPort:e.targetPort}}}return e}function b(e,t,n,r,o,a){var i,u=e.parallel,c=e.source,l=e.target;1e.target.index&&(i=l,l=c,c=i,i=o,o=n,n=i,i=a,a=r,r=i);for(var s=c.dcg_ry+z.nodeStrokeWidth.eval(c)/2,d=l.dcg_ry+z.nodeStrokeWidth.eval(l)/2,f=0;fMath.PI&&(nz.timeLimit())&&(console.log("cancelled"),z.layoutEngine().stop())}).on("end",function(e,t){z.showLayoutSteps()?ie(!0):(z.initialOnly()||I(e,t),re(V,h),X.receivedLayout(z,V,d,Z,f,U,h),oe(V,f,U),ue(A,P,x,_,b,w,k,E,S,K,!0),ce(A),X.transitionsStarted(A,x,b)),ne(A,x)}).on("start",function(){console.log("algo "+z.layoutEngine().layoutAlgorithm()+" started."),X.start()}),z.initialOnly()?z.layoutEngine().dispatch().end(d,f):(X.start(),z.layoutEngine().data({width:z.width(),height:z.height()},d.map(function(e){return e.cola}),D.map(function(e){return e.cola}),L),z.layoutEngine().start()),this},z.refresh=function(e,t,n,r,o){if(v)return this;ae(e=e||z.selectAllNodes(),t=t||z.selectAllEdges()),n=n||z.selectAllEdges(".edge-hover"),r=r||z.selectAllEdges(".edge-label"),o=o||z.selectAllDefs("path.edge-label-path");var a=de.select(null);return ue(e,a,t,a,n,a,r,a,o,a,!1),this},z.requestRefresh=function(t){window.requestAnimationFrame(function(){var e;void 0!==t&&(e=z.transitionDuration(),z.transitionDuration(t)),z.refresh(),void 0!==t&&z.transitionDuration(e)})},z.reposition=function(e,t){return e.attr("transform",function(e){return"translate("+e.cola.x+","+e.cola.y+")"}),t.each(function(e){e.pos.new=null,e.pos.old=null,b(e,"new",e.source.cola.x,e.source.cola.y,e.target.cola.x,e.target.cola.y),z.edgeArrowhead.eval(e)&&de.select("#"+z.arrowId(e,"head")).attr("orient",function(){return e.pos.new.orienthead}),z.edgeArrowtail.eval(e)&&de.select("#"+z.arrowId(e,"tail")).attr("orient",function(){return e.pos.new.orienttail})}).attr("d",w("new")),this},z.animating=function(){return v},z.selectNodePortsOfStyle=function(e,t){return e.selectAll("g.port").filter(function(e){return z.portStyleName.eval(e)===t})},z.render=function(){g&&X.reset(),z.initLayoutOnRedraw()||Q(),z.resetSvg(),h=g.append("g").attr("class","draw");var e=["edge-layer","node-layer"];return z.edgesInFront()&&e.reverse(),h.selectAll("g").data(e).enter().append("g").attr("class",function(e){return e}),Y=h.selectAll("g.edge-layer"),H=h.selectAll("g.node-layer"),X.render(),z.redraw(),this},z.on=function(e,t){return 1===arguments.length?X.on(e):(X.on(e,t),this)},z.getStats=function(){return $},z.select=function(e){return z.root().select(e)},z.selectAll=function(e){return z.root()?z.root().selectAll(e):null},z.x=ye(null),z.y=ye(null),z.svg=function(e){return arguments.length?(g=e,z):g},z.g=function(e){return arguments.length?(h=e,z):h},z.resetSvg=function(){return g&&(g.remove(),g=null),function(){g=z.root().append("svg"),z.resizeSvg(),G=g.append("svg:defs"),z.x()||z.x(de.scale.linear().domain([0,z.width()]).range([0,z.width()]));z.y()||z.y(de.scale.linear().domain([0,z.height()]).range([0,z.height()]));if(W=de.behavior.zoom().on("zoom",C).x(z.x()).y(z.y()).scaleExtent(z.zoomExtent()),z.mouseZoomable()){var e,t,n=z.child("brush");if(e=z.modKeyZoom()){t=Array.isArray(e)?e.slice():"string"==typeof e?[e]:["Alt"];var r=!1,o=!1,a=!1;g.on("mousedown.modkey-zoom",function(){r=!0}).on("mouseup.modkey-zoom",function(){(r=!1)||o||!a||(a=!1,se(),n&&n.activate())}),de.select(document).on("keydown.modkey-zoom",function(){-1 "':'" -- "')+l(e.dcg_edgeTarget)+'" '+f([d("id",l(e.dcg_edgeKey)),d("arrowhead","none"),d("arrowtail","none")])}))).push("}"),n.push(""),i=n.join("\n")}}(t,n)},dotInput:function(e){return a=e,this},clusters:function(){return u},start:function(){!function(){if(t)de.json(t).header("Content-type","application/x-www-form-urlencoded").post("layouttool="+o+"&"+encodeURIComponent(i),r);else{var e=Viz(i,{format:"json",engine:o,totalMemory:1<<25});r(0,e=JSON.parse(e))}}()},stop:function(){},optionNames:function(){return h},populateLayoutNode:function(){},populateLayoutEdge:function(){}})},he.d3_force_layout=function(e){var t=e||A(),u=null,n=de.dispatch("tick","start","end"),y={},c={},l=[],s=[],m=null,r=null;function o(e){n[e](l,s.map(function(e){return{dcg_edgeKey:e.dcg_edgeKey}}))}function a(){!function(){if(null===r)u.gravity(m.gravityStrength).charge(m.initialCharge);else{if(m.fixOffPathNodes){var t=de.set();r.forEach(function(e){e.forEach(function(e){t.add(e)})}),Object.keys(y).forEach(function(e){t.has(e)?y[e].fixed=!1:y[e].fixed=!0})}u.charge(m.chargeForce)}}(),function(e){if(!e)return o("end");u.start();for(var t=0;t<300;++t)u.tick(),r&&i();u.stop()}(m.iterations)}function i(){function a(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function h(e,t){var n,r,o=(r=t,((n=e).x*r.x+n.y*r.y)/(a(e)*a(t)));return o=Math.min(o,1),o=Math.max(o,-1),Math.acos(o)}function p(e){var t=-e.y/e.x,n=a({x:t,y:1});return{x:t/n,y:1/n}}function v(e,t,n,r){e.x+=n.x*(Math.PI-t)*r,e.y+=n.y*(Math.PI-t)*r}r.forEach(function(e){if(!(e.length<3))for(var t=1;t=Math.PI/2?c:{x:-c.x,y:-c.y},l=h(g,l)>=Math.PI/2?l:{x:-l.x,y:-l.y},v(r,u,c,m.angleForce),v(o,u,l,m.angleForce)}})}var d=he.graphviz_attrs(),f=Object.keys(d);return Object.assign(d,{layoutAlgorithm:function(){return"d3-force"},layoutId:function(){return t},supportsWebworker:function(){return!0},parent:ye(null),on:function(e,t){return 1===arguments.length?n.on(e):(n.on(e,t),this)},init:function(t){var e;return this.optionNames().forEach(function(e){t[e]=t[e]||this[e]()}.bind(this)),m=e=t,(u=de.layout.force().size([e.width,e.height])).on("tick",function(){o("tick")}).on("start",function(){n.start()}).on("end",function(){o("end")}),this},data:function(e,t,n,r){var o,a,i;a=n,i={},(o=t).forEach(function(e,t){i[e.dcg_nodeKey]=t}),l=Ee(y,o,null,function(e){return e.dcg_nodeKey},function(e,t){e.dcg_nodeKey=t.dcg_nodeKey,e.width=t.width,e.height=t.height,e.id=t.dcg_nodeKey,t.dcg_nodeFixed?(e.fixed=!0,e.x=t.dcg_nodeFixed.x,e.y=t.dcg_nodeFixed.y):e.fixed=!1}),s=Ee(c,a,null,function(e){return e.dcg_edgeKey},function(e,t){e.dcg_edgeKey=t.dcg_edgeKey,e.source=y[t.dcg_edgeSource],e.source.id=i[e.source.dcg_nodeKey],e.target=y[t.dcg_edgeTarget],e.target.id=i[e.target.dcg_nodeKey],e.dcg_edgeLength=t.dcg_edgeLength}),u.nodes(l),u.links(s)},start:function(){a()},stop:function(){u&&u.stop()},paths:function(e){r=e},savePositions:function(){var t={};return Object.keys(y).forEach(function(e){t[e]={x:y[e].x,y:y[e].y}}),t},restorePositions:function(t){Object.keys(t).forEach(function(e){y[e]&&(y[e].fixed=!1,y[e].x=t[e].x,y[e].y=t[e].y)})},optionNames:function(){return["iterations","angleForce","chargeForce","gravityStrength","initialCharge","fixOffPathNodes"].concat(f)},iterations:ye(300),angleForce:ye(.02),chargeForce:ye(-500),gravityStrength:ye(1),initialCharge:ye(-400),fixOffPathNodes:ye(!1),populateLayoutNode:function(){},populateLayoutEdge:function(){}})},he.d3_force_layout.scripts=["d3.js"],he.d3v4_force_layout=function(e){var t=e||A(),u=null,n=de.dispatch("tick","start","end"),c={},l={},s=[],d=[],r=null,o=null;function a(e){n[e](s,d.map(function(e){return{dcg_edgeKey:e.dcg_edgeKey}}))}function i(){n.start(),function(e){e&&(e=e.filter(function(e){return e.nodes.every(function(e){return c[e]})}));if(null!==e&&e.length){var t;r.fixOffPathNodes&&(t=de.set(),e.forEach(function(e){e.nodes.forEach(function(e){t.add(e)})})),Object.keys(c).forEach(function(e){r.fixOffPathNodes&&!t.has(e)?(c[e].fx=c[e].x,c[e].fy=c[e].y):(c[e].fx=null,c[e].fy=null)}),u.force("charge").strength(r.chargeForce),u.force("straighten",d3v4.forceStraightenPaths().id(function(e){return e.dcg_nodeKey}).angleForce(r.angleForce).pathNodes(function(e){return e.nodes}).pathStrength(function(e){return e.strength}).paths(e))}else u.force("charge").strength(r.initialCharge)}(o),function(e){u.alpha(1);for(var t=0;te.abounds[1]&&(e.abounds[1]+=2*Math.PI),console.assert(e.orig||e.vec,"unplaced unspecified port")});var y=[],m=[],x=[];v.forEach(function(e){var t,n;e.vec?!e.vbounds||(t=e.vec,s((n=e.vbounds)[0],t)&&s(t,n[1]))?y.push(e):m.push(e):x.push(e)}),m.forEach(function(e){var t,n;e.vec=(t=e.vec,n=e.vbounds,s(t,n[0])?n[0]:s(n[1],t)?n[1]:t),y.push(e)});var _={},b={};for(var w in x.forEach(function(e){var t=e.abounds.map(function(e){return e.toFixed(3)}).join(",");_[t]=e.abounds,b[t]=b[t]||[],b[t].push(e)}),b){var k=_[w],E=b[w];if(1===E.length)E[0].vec=d((k[0]+k[1])/2);else{var S=(k[1]-k[0])/(b[w].length-1);b[w].forEach(function(e,t){e.vec=d(k[0]+t*S)})}}y=y.concat(x),x=[],y.forEach(function(e){Me(n,p,e)});for(var K=0;Kj.minDistance())){if(!A.edges.length){x.push(A);continue}x.push(T)}}}y=y.filter(function(e){return!x.includes(e)});for(var N,O=j.patience(),L=0;x.length;){var D=x[0];D.vec=d((u=D.abounds[0],c=D.abounds[1],u+Math.random()*(c-u))),Me(n,p,D);var M=de.min(y,function(e){return g(D,e)});Lj.minDistance())&&(O<0&&(console.warn("ran out of patience placing a port"),D.vec=N,Me(n,p,D)),y.push(D),x.shift(),O=j.patience(),L=0)}}}var j={parent:ye(null).react(function(e){e?e.on("receivedLayout.place-ports",t):j.parent()&&j.parent().on("receivedLayout.place-ports",null)}),minDistance:ye(20),patience:ye(20)};return j},he.troubleshoot=function(){var g=null;function h(e,t,n){return{left:e.x-t/2,top:e.y-n/2,right:e.x+t/2,bottom:e.y+n/2}}function t(e,t,n,r){return"M"+e+","+(t+r)+" v"+-r+" h"+n}function n(e){return[t(e.left,e.top,v.boundsWidth(),v.boundsHeight()),t(e.right,e.top,-v.boundsWidth(),v.boundsHeight()),t(e.right,e.bottom,-v.boundsWidth(),-v.boundsHeight()),t(e.left,e.bottom,v.boundsWidth(),-v.boundsHeight())].join(" ")}function p(e,t){e.exit().remove(),e.enter().append("path").attr("class",t),e.attr({d:n,opacity:null!==v.boundsOpacity()?v.boundsOpacity():v.opacity(),stroke:v.boundsColor(),fill:"none"})}var v=he.behavior("highlight-paths",{laterDraw:!0,add_behavior:function(e,t,n,r){g||(g=e.g().append("g").attr({class:"troubleshoot","pointer-events":"none"}));var o=t.data().map(function(e){return{x:e.cola.x,y:e.cola.y}}),a=g.selectAll("path.nodecenter").data(o);function i(e){return{x:e.cola.x,y:e.cola.y}}a.exit().remove(),a.enter().append("path").attr("class","nodecenter"),a.attr({d:function(e){return"M"+(e.x-v.xhairWidth()/2)+","+e.y+" h"+v.xhairWidth()+" M"+e.x+","+(e.y-v.xhairHeight()/2)+" v"+v.xhairHeight()},opacity:null!==v.xhairOpacity()?v.xhairOpacity():v.opacity(),stroke:v.xhairColor()});var u=t.data().map(function(e){return h(i(e),e.cola.width,e.cola.height)});p(g.selectAll("path.colaboundary").data(u),"colaboundary");var c=t.data().map(function(e){return e.bbox?h(i(e),e.bbox.width,e.bbox.height):null}).filter(function(e){return!!e});p(g.selectAll("path.textboundary").data(c),"textboundary");var l=t.data().map(function(e){return"number"===(e.dcg_rx,!1)?null:h(i(e),2*e.dcg_rx,2*e.dcg_ry)}).filter(function(e){return!!e});p(g.selectAll("path.radiiboundary").data(l),"radiiboundary");var s=g.selectAll("rect.domain").data([0]);s.enter().append("rect");var d=v.parent().x().domain(),f=v.parent().y().domain();s.attr({class:"domain",fill:"none",opacity:v.domainOpacity(),stroke:v.domainColor(),"stroke-width":v.domainStrokeWidth(),x:d[0],y:f[0],width:d[1]-d[0],height:f[1]-f[0]})},remove_behavior:function(e,t,n,r){g&&g.remove()}});return v.opacity=ye(.75),v.xhairOpacity=ye(null),v.xhairWidth=ye(10),v.xhairHeight=ye(10),v.xhairColor=ye("blue"),v.boundsOpacity=ye(null),v.boundsWidth=ye(10),v.boundsHeight=ye(10),v.boundsColor=ye("green"),v.domainOpacity=ye(.6),v.domainColor=ye("darkorange"),v.domainStrokeWidth=ye(11),v},he.validate=function(p){function v(e,t,n,r){var o=e.filter(function(e){return!t(e)});return o.length?[n+" is empty for "+o.length+" of "+e.length+" "+r,o]:null}function y(e,n){return e.reduce(function(e,t){return e[n(t)]=t,e},{})}function m(t,e,n,r,o,a){var i=e.filter(function(e){return!t[n(e)]}).map(function(e){return{key:n(e),value:e}});return i.length?[r+" was not found in "+o,Object.keys(t),"for "+i.length+" of "+e.length+" "+a,i]:null}function t(){var t=x.parent(),e=t.nodeGroup().all(),n=t.edgeGroup().all(),r=t.portGroup()?t.portGroup().all():[],o=[];function a(e){e&&o.push(e)}a(v(e,t.nodeKey(),"nodeKey","nodes")),a(v(n,t.edgeSource(),"edgeSource","edges")),a(v(n,t.edgeTarget(),"edgeTarget","edges"));var i=de.set(t.content.enum()),u=he.functor_wrap(t.nodeContent()),c=e.filter(function(e){return!i.has(u(e))});c.length&&o.push(["there are "+c.length+" nodes with nodeContent not matching any content",c]);var l=y(e,t.nodeKey()),s=y(n,t.edgeKey());a(m(l,n,t.edgeSource(),"edgeSource","nodes","edges")),a(m(l,n,t.edgeTarget(),"edgeTarget","nodes","edges")),a(v(r,function(e){return t.portNodeKey()&&t.portNodeKey()(e)||t.portEdgeKey()&&t.portEdgeKey()(e)},"portNodeKey||portEdgeKey","ports"));var d=!t.portNodeKey()&&[]||r.filter(function(e){return t.portNodeKey()(e)}),f=!t.portEdgeKey()&&[]||r.filter(function(e){return t.portEdgeKey()(e)});if(a(m(l,d,t.portNodeKey(),"portNodeKey","nodes","ports")),a(m(s,f,t.portEdgeKey(),"portEdgeKey","edges","ports")),t.portName()){var g=y(d,function(e){return t.portNodeKey()(e)+" - "+t.portName()(e)});t.edgeSourcePortName()&&a(m(g,n,function(e){return t.edgeSource()(e)+" - "+de.functor(t.edgeSourcePortName())(e)},"edgeSourcePortName","ports","edges")),t.edgeTargetPortName()&&a(m(g,n,function(e){return t.edgeTarget()(e)+" - "+de.functor(t.edgeTargetPortName())(e)},"edgeTargetPortName","ports","edges"))}function h(){return e.length+" nodes, "+n.length+" edges, "+r.length+" ports"}o.length?(console.warn("validation of "+p+" failed with "+h()+":"),o.forEach(function(e){console.warn.apply(null,e)})):console.log("validation of "+p+" succeeded with "+h()+".")}var x={parent:ye(null).react(function(e){e?e.on("data.validate",t):x.parent().on("data.validate",null)})};return x},he.legend=function(o){o=o||"node-legend";var a,i,u,c=[],l=de.dispatch("filtered");function s(){d.dimension()&&(d.dimension().filterFunction(function(e){return!c.length||c.includes(e)}),d.parent().redraw())}var d=he.behavior(o,{add_behavior:n,remove_behavior:function(){},parent:function(e){e?e.on("render."+o,r).on("data."+o,t):d.parent().on("render."+o,null).on("data."+o,null)}});function t(e,t,n,r,o,a,i){d.counter()&&(u=d.counter()(n.map(pe),o.map(pe),i.map(pe)))}function n(){var e=d.parent().svg().selectAll("g.dc-graph-legend."+o).data([0]);e.enter().append("g").attr("class","dc-graph-legend "+o).attr("transform","translate("+d.x()+","+d.y()+")");var t=e.selectAll(d.type().itemSelector()).data(a,function(e){return e.name}),n=d.type().create(d.parent(),t.enter(),d.itemWidth(),d.itemHeight());if(n.append("text").attr("dy","0.3em").attr("class","legend-label"),t.attr("transform",function(e,t){return"translate("+d.itemWidth()/2+","+(d.itemHeight()+d.gap())*(t+.5)+")"}),t.select("text.legend-label").attr("transform","translate("+(d.itemWidth()/2+d.gap())+",0)").attr("pointer-events",d.dimension()?"auto":"none").text(function(e){return e.name+(d.counter()&&u?" ("+(u[e.orig.key]||0)+(u[e.orig.key]!==i[e.orig.key]?"/"+(i[e.orig.key]||0):"")+")":"")}),d.type().draw(d.parent(),n,t),d.noLabel()&&t.selectAll(d.type().labelSelector()).remove(),d.dropdown()){var r=t.selectAll("text.dropdown-caret").data(function(e){return[e]});r.enter().append("text").attr("dy","0.3em").attr("font-size","75%").attr("fill","blue").attr("class","dropdown-caret").style("visibility","hidden").html(" ▼"),r.attr("dx",function(e){return d.itemWidth()/2+d.gap()+_e(de.select(this.parentNode).select("text.legend-label").node()).width}).on("mouseenter",function(e){var t=this.getBoundingClientRect(),n=d.parent().nodeKey.eval(e);d.dropdown().show(n,t.x,t.y)}),t.on("mouseenter",function(e){u&&u[e.orig.key]&&de.select(this).selectAll(".dropdown-caret").style("visibility","visible")}).on("mouseleave",function(e){de.select(this).selectAll(".dropdown-caret").style("visibility","hidden")})}d.dimension()?t.attr("cursor","pointer").on("click.legend",function(e){var t=d.parent().nodeKey.eval(e);c.length||(c=a.map(d.parent().nodeKey.eval)),c.includes(t)?c=c.filter(function(e){return e!==t}):c.push(t),s(),l.filtered(d,t)}):t.attr("cursor","auto").on("click.legend",null),t.transition().duration(1e3).attr("opacity",function(e){return!c.length||c.includes(d.parent().nodeKey.eval(e))?1:.25})}function r(){var e=d.exemplars();if(d.countBaseline(),e instanceof Array)a=e.map(function(e){return{name:e.name,orig:{key:e.key,value:e.value},cola:{}}});else for(var t in a=[],e)a.push({name:t,orig:{key:t,value:e[t]},cola:{}});n()}return d.type=ye(he.legend.node_legend()),d.x=ye(0),d.y=ye(0),d.gap=ye(5),d.itemWidth=d.nodeWidth=ye(40),d.itemHeight=d.nodeHeight=ye(40),d.noLabel=ye(!0),d.counter=ye(null),d.replaceFilter=function(e){return c=e&&1===e.length?e[0]:[],d},d.filters=function(){return c},d.on=function(e,t){return l.on(e,t),d},d.exemplars=ye({}),d.countBaseline=function(){d.counter&&(i=d.counter()(d.parent().nodeGroup().all(),d.parent().edgeGroup().all(),d.parent().portGroup()&&d.parent().portGroup().all()))},d.dropdown=ye(null).react(function(e){!!e!=!!d.dropdown()&&d.parent()&&d.parent().svg()&&window.setTimeout(d.redraw,0)}),d.dimension=ye(null).react(function(e){e||(c=[],s())}),d},he.legend.node_legend=function(){return{itemSelector:function(){return".node"},labelSelector:function(){return".node-label"},create:function(e,t){return t.append("g").attr("class","node")},draw:function(e,t,n){e._enterNode(t)._updateNode(n)}}},he.legend.edge_legend=function(){var i={itemSelector:function(){return".edge-container"},labelSelector:function(){return".edge-label"},create:function(e,t,n,r){var o=t.append("g").attr("class","edge-container").attr("opacity",0);o.append("rect").attr({x:-n/2,y:-r/2,width:n,height:r,fill:"green",opacity:0}),o.selectAll("circle").data([-1,1]).enter().append("circle").attr({r:i.fakeNodeRadius(),fill:"none",stroke:"black","stroke-dasharray":"4,4",opacity:.15,transform:function(e){return"translate("+[e*i.length()/2,0].join(",")+")"}});var a=i.length()/2-i.fakeNodeRadius();return o.append("svg:path").attr({class:"edge",id:function(e){return e.name},d:"M"+-a+",0 L"+a+",0",opacity:e.edgeOpacity.eval}),o},fakeNodeRadius:ye(10),length:ye(50),draw:function(e,t,n){e._updateEdge(t.select("path.edge"))}};return i},he.constraint_pattern=function(e){var l={},r=[];return e.nodes.forEach(function(t){var e=t.id,n=l[e]||(l[e]={});if(t.partition){var r=t.partition,o=t.value||t.id;t.all||t.typename?(n.match=t.extract?function(e){return t.extract(e.value[r])}:function(e){return e.value[r]},n.typename=t.typename||function(e){return r+"="+e.value[r]}):n.match=function(e){return e.value[r]===o}}else{if(!t.match)throw new Error("couldn't determine matcher for type "+JSON.stringify(t));n.match=t.match}}),e.edges.forEach(function(t){if(!t.disable){var n={source:t.source,target:t.target};n.produce="function"==typeof t.produce?t.produce:function(){return function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}(t.produce)},["listname","wrap","reverse"].forEach(function(e){void 0!==t[e]&&(n[e]=t[e])}),r.push(n)}}),function(i,o,a){var u=[],c={};o.forEach(function(e){var t=i.nodeKey.eval(e);for(var n in l){var r=l[n],o=r.match(e.orig);if(o){var a=r.typename?r.typename(n,o):n;c[a]||(c[a]={nodes:[],whether:{}}),c[a].nodes.push(t),c[a].whether[t]=!0}}});var t=r.filter(function(e){return e.source!==e.target}),e=r.filter(function(e){return e.source===e.target});return a.forEach(function(e){var n=i.edgeSource.eval(e),r=i.edgeTarget.eval(e);t.forEach(function(e){if(c[e.source]&&c[e.source].whether[n]&&c[e.target]&&c[e.target].whether[r]){var t=e.produce(c,o,a);e.reverse?(t.left=r,t.right=n):(t.left=n,t.right=r),u.push(t)}})}),e.forEach(function(e){if(c[e.source]){var t=e.produce(),n=e.listname||e.produce.listname||"nodes",r=e.wrap||e.produce.wrap||function(e){return e};t[n]=c[e.source].nodes.map(r),u.push(t)}}),u}},he.gap_y=function(e,t){return{axis:"y",gap:e,equality:!!t}},he.gap_x=function(e,t){return{axis:"x",gap:e,equality:!!t}},he.align_y=function(){return e("y")},he.align_x=function(){return e("x")},he.order_x=function(e,t){return{type:"ordering",axis:"x",gap:60,ordering:t}},he.order_y=function(e,t){return{type:"ordering",axis:"y",gap:60,ordering:t}},he.tree_positions=function(e,t,n,r,a,i,u){var c;function f(e,t){return(i(e)+i(t))/2}console.warn("dc_graph.tree_positions is deprecated; use the layout engine tree_layout instead"),(e||n)&&console.warn("dc_graph.tree_positions: rootf and treef are ignored"),i=de.functor(i);var o=he.depth_first_traversal({nodeid:function(e){return e.cola.dcg_nodeKey},sourceid:function(e){return e.cola.dcg_edgeSource},targetid:function(e){return e.cola.dcg_edgeTarget},init:function(){c=r},row:function(e){return t(e.orig)},place:function(e,t,n){if(n.length){var r=n[n.length-1],o=(i(r)+i(e))/2;c=Math.max(c,r.left_x+o)}e.left_x=c,e.hit_ins=1,e.cola.y=t*u+a},sib:function(e,t,n){var r=f(t,n);e&&(r*=1.5),c+=r},pop:function(e){e.cola.x=(e.left_x+c)/2},skip:function(e,t){e.cola.x=(e.hit_ins*e.cola.x+c)/++e.hit_ins,e.hit_ins===t&&delete e.hit_ins},finish:function(e){e.forEach(function(e){for(var t,n=e.sort(function(e,t){return e.cola.x-t.cola.x}),r=null,o=null,a=0;a"+e+""}).direction(f.direction()),f.offset()&&c.offset(f.offset()),o.svg().call(c)),f.programmatic()||f.selection().select(e,t,n,r).on("mouseover."+u,l).on("mouseout."+u,d),f.clickable()&&de.select("div.d3-tip").on("mouseover."+u,function(){i&&window.clearTimeout(i)}).on("mouseout."+u,d)},remove_behavior:function(e,t,n,r){f.programmatic()||f.selection().select(e,t,n,r).on("mouseover."+u,null).on("mouseout."+u,null)},laterDraw:!0});return f.direction=ye("n"),f.content=ye(function(e,t){t(f.parent()?f.parent().nodeTitle.eval(e):"")}),f.on=function(e,t){return o.on(e,t)},f.disabled=ye(!1),f.programmatic=ye(!1),f.displayTip=function(e,t,n){if("function"!=typeof e){var r=e;e=function(e){return e===r}}var o=f.selection().select(f.parent(),f.parent().selectAllNodes(),f.parent().selectAllEdges(),null).filter(e);if(0v.dragSize()&&(c=!0,u&&u.style("pointer-events","none")),c&&(p(function(e){e.cola.x=e.original_position[0]+t,e.cola.y=e.original_position[1]+n}),r.reposition(o,a))}}function i(){if(g){if(c){c=!1,u&&(u.style("pointer-events",null),u=null);var n=[];p(function(e,t){n.push({id:t,pos:{x:e.cola.x,y:e.cola.y}})}),t.request_fixes(n)}l&&l.activate(),g=null}}o.on("mousedown.move-nodes",function(e){if(!(s&&s.usePorts()&&s.usePorts().eventPort())){g=he.event_coords(r),u=de.select(this);var t=r.nodeKey.eval(e),n=f;f.indexOf(t)<0?(n=[t],h=t):h=null,p(function(e){e.original_position=[e.cola.x,e.cola.y]},n),l&&l.deactivate()}}),o.on("mousemove.move-nodes",e).on("mouseup.move-nodes",i),r.svg().on("mousemove.move-nodes",e).on("mouseup.move-nodes",i)},remove_behavior:function(e,t,n){t.on("mousedown.move-nodes",null),t.on("mousemove.move-nodes",null),t.on("mouseup.move-nodes",null)},parent:function(e){d.on("set_changed.move-nodes",e?function(e,t){void 0===t&&(t=!0),f=e}:null),l=e.child("brush"),s=e.child("draw-graphs"),e.child("select-nodes")}});return v.dragSize=ye(5),v},he.fix_nodes=function(e){e=e||{};var d,f,t=he.fix_nodes_group("fix-nodes-group"),i=e.fixedPosTag||"fixedPos",u=[],g={nodeid:function(e){return v.parent().nodeKey.eval(e)},sourceid:function(e){return v.parent().edgeSource.eval(e)},targetid:function(e){return v.parent().edgeTarget.eval(e)},get_fix:function(e){return v.parent().nodeFixed.eval(e)},fix_node:function(e,t){e[i]=t},unfix_node:function(e){e[i]=null},clear_fixes:function(){u={}},register_fix:function(e,t){u[e]=t}};function n(e){v.strategy().request_fixes(g,e),c(h()).then(function(){v.parent().redraw()})}function r(e,t,n){v.strategy().new_node(g,e,t,n)}function o(e,t,n){var r=d[t],o=d[n];v.strategy().new_edge(g,e,r,o)}function h(){var a=[];return f.forEach(function(e){var t=v.parent().nodeKey.eval(e),n=u[t],r=e.orig.value[i],o=!1;r?n&&n.x===r.x&&n.y===r.y||(o=!0):o=n,o&&a.push({n:e,fixed:n?{x:n.x,y:n.y}:null})}),a}function a(e,t){t?g.fix_node(e.orig.value,t):g.unfix_node(e.orig.value)}function c(e){var n=v.fixNode()||function(e,t){return Promise.resolve(t)},t=e.map(function(t){var e=v.parent().nodeKey.eval(t.n);return n(e,t.fixed).then(function(e){a(t.n,e)})});return Promise.all(t)}function p(e){e.forEach(function(e){a(e.n,e.fixed)})}function l(e,t,n,r,o,a,i){if(d=t,f=n,r,o,v.strategy().on_data){v.strategy().on_data(g,t,n,r,o,a,i);var u=h();p(u),v.reportOverridesAsynchronously()&&(c=u,l=v.fixNode()||function(e,t){return Promise.resolve(t)},s=c.map(function(e){var t=v.parent().nodeKey.eval(e.n);return l(t,e.fixed)}),Promise.all(s))}var c,l,s}var v={parent:ye(null).react(function(e){t.on("request_fixes.fix-nodes",e?n:null).on("new_node.fix_nodes",e?r:null).on("new_edge.fix_nodes",e?o:null),e?e.on("data.fix-nodes",l):v.parent()&&v.parent().on("data.fix-nodes",null)}),fixNode:ye(null),fixAllNodes:function(e){void 0===e&&(e=!0);var t=f.map(function(e){return{n:e,fixed:{x:e.cola.x,y:e.cola.y}}});return e?c(t):(p(t),Promise.resolve(void 0))},clearFixes:function(){v.strategy().clear_all_fixes&&v.strategy().clear_all_fixes(),g.clear_fixes()},strategy:ye(he.fix_nodes.strategy.fix_last()),reportOverridesAsynchronously:ye(!0)};return v},he.fix_nodes.strategy={},he.fix_nodes.strategy.fix_last=function(){return{request_fixes:function(t,e){t.clear_fixes(),e.forEach(function(e){t.register_fix(e.id,e.pos)})},new_node:function(e,t,n,r){e.fix_node(n,r)},new_edge:function(e,t,n,r){e.unfix_node(n.orig.value),e.unfix_node(r.orig.value)}}},he.fix_nodes.strategy.last_N_per_component=function(c){c=c||1;var l=0,s={};return{clear_all_fixes:function(){s={}},request_fixes:function(e,t){++l,t.forEach(function(e){s[e.id]={id:e.id,age:l,pos:e.pos}})},new_node:function(e,t,n,r){++l,s[t]={id:t,age:l,pos:r},e.fix_node(n,r)},new_edge:function(){},on_data:function(u,e,t,n,r,o,a){++l,t.forEach(function(e){var t=u.nodeid(e),n=u.get_fix(e);n&&!s[t]&&(s[t]={id:t,age:l,pos:n})});var i=[];he.undirected_dfs({nodeid:u.nodeid,sourceid:u.sourceid,targetid:u.targetid,comp:function(){i.push([])},node:function(e,t){i[e].push(t)}})(t,r),u.clear_fixes(),i.forEach(function(e,n){var r=e.reduce(function(e,t){if(t.last_component){var n=e[t.last_component]=e[t.last_component]||{total:0,fixed:0};n.total++,s[u.nodeid(t)]&&n.fixed++}return e},{}),t=Object.keys(r).reduce(function(e,t){return r[t].fixed&&e.push({compid:+t,total:r[t].total,fixed:r[t].fixed}),e},[]).sort(function(e,t){return t.total-e.total}),o=t.length&&t[0].compid,a=e.filter(function(e){return!e.last_component||e.last_component===o}).map(function(e){return s[u.nodeid(e)]}).filter(function(e){return e});a.length>c&&(a.sort(function(e,t){return t.age-e.age}),a=a.slice(0,c)),a.forEach(function(e){u.register_fix(e.id,e.pos)});var i=a.reduce(function(e,t){return e[t.id]=!0,e},{});e.forEach(function(e){var t=u.nodeid(e);i[t]||(s[t]=null),e.last_component=n+1})})}}},he.fix_nodes_group=function(e){return window.chart_registry.create_type("fix-nodes",function(){return de.dispatch("request_fixes","new_node","new_edge")}),window.chart_registry.create_group("fix-nodes",e)},he.filter_selection=function(e,t){t=t||"select-nodes";var r=he.select_things_group(e||"select-nodes-group",t);var o={parent:ye(null).react(function(e){var n;r.on("set_changed.filter-selection-"+t,e?(n=e,function(e){if(e.length){var t=de.set(e);o.dimensionAccessor()(n).filterFunction(function(e){return t.has(e)})}else o.dimensionAccessor()(n).filter(null);n.redrawGroup()}):null)})};return o.dimensionAccessor=ye(function(e){return e.nodeDimension()}),o},he.delete_things=function(t,n,r){r=r||"id";var o,a=x?"Backspace":"Delete",i=[];function u(e){i=e}function c(e){return e[r]}function l(e){if(!s.crossfilterAccessor())throw new Error("need crossfilterAccessor");if(!s.dimensionAccessor())throw new Error("need dimensionAccessor");if(0===(e=e||i).length)return Promise.resolve([]);var t=s.preDelete()?s.preDelete()(e):Promise.resolve(e);return s.onDelete()&&(t=t.then(s.onDelete())),t.then(function(t){if(t&&t.length){var e=s.crossfilterAccessor()(s.parent()),n=s.dimensionAccessor()(s.parent()),r=e.all().slice();r.length;n.filter(null),e.remove();var o=r.filter(function(e){return-1===t.indexOf(c(e))});r.length!==o.length+t.length&&console.warn("size after deletion is not previous size minus selection size",o.map(c),r.map(c),t),e.add(o),s.parent().redrawGroup()}return!0})}var s=he.behavior(n,{add_behavior:function(e){o.on("keyup."+n,function(){de.event.code===a&&l()})},remove_behavior:function(e){},parent:function(e){t.on("set_changed."+n,u),e&&((o=e.child("keyboard"))||e.child("keyboard",o=he.keyboard()))}});return s.preDelete=ye(null),s.onDelete=ye(null),s.crossfilterAccessor=ye(null),s.dimensionAccessor=ye(null),s.deleteSelection=l,s},he.delete_nodes=function(e,t){t=t||{};var n=he.select_things_group(t.select_nodes_group||"select-nodes-group","select-nodes"),o=he.select_things_group(t.select_edges_group||"select-edges-group","select-edges"),a=he.delete_things(n,"delete-nodes",e);return a.preDelete(function(t){var n=a.parent(),r=n.child("delete-edges");return r?Promise.resolve(void 0).then(function(){var e=n.edgeGroup().all().filter(function(e){return-1!==t.indexOf(n.edgeSource()(e))||-1!==t.indexOf(n.edgeTarget()(e))}).map(n.edgeKey());return o.set_changed(e),r.deleteSelection().then(function(){return t})}):null}),a},he.label_things=function(o){o=o||{};var a,r,t=he.select_things_group(o.select_group,o.select_type),i=he.label_things_group(o.label_group,o.label_type),u=[];function n(r){return function(t,e){var n=o.thing_box(t);o.hide_thing_label(t,!0),he.edit_text(r.g(),{text:e.text||o.thing_label(t)||o.default_label,align:o.align,box:n,selectText:e.selectText,accept:function(e){return o.accept(t,e)},finally:function(){o.hide_thing_label(t,!1),a.focus()}})}}function c(e,t,n){var r=o.find_thing(u[0],e,t);r.empty()?console.error("couldn't find thing '"+u[0]+"'!"):1r.cola.y?"out":"in";case"BT":return ur.cola.x?"out":"in";case"RL":return iK.dragSize()&&K.conduct().startDragEdge){if(!K.conduct().startDragEdge(v))return K.conduct().invalidSourceMessage&&(n=K.conduct().invalidSourceMessage(v),console.log(n),i.negativeTip&&i.negativeTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?v.port:v.node)),o(),!0;v.started=!0}return!1}var K=he.behavior("highlight-paths",{add_behavior:function(a,e,t,n){var r=a.child("select-nodes");r&&K.clickCreatesNodes()&&r.clickBackgroundClears(!1),e.on("mousedown.draw-graphs",function(e){if(de.event.stopPropagation(),K.dragCreatesEdges())if(i.tipsDisable&&i.tipsDisable.forEach(function(e){e.hideTip().disabled(!0)}),K.usePorts()){var t;if(!(t="object"==typeof K.usePorts()&&K.usePorts().eventPort?K.usePorts().eventPort():a.getPort(a.nodeKey.eval(e),null,"out")||a.getPort(a.nodeKey.eval(e),null,"in")))return;v={node:e,port:t},_=[{source:w(t)}]}else _=[{source:{x:(v={node:e}).node.cola.x,y:v.node.cola.y}}]}).on("mousemove.draw-graphs",function(e){var n;if(de.event.stopPropagation(),v){var t=he.event_coords(a);if(S(t))return;var r=y;if(e===v.node)K.conduct().invalidTargetMessage&&console.log(K.conduct().invalidTargetMessage(v,v)),y=null,_[0].target=null;else if(K.usePorts()){var o;o="object"==typeof K.usePorts()&&K.usePorts().eventPort?K.usePorts().eventPort():a.getPort(a.nodeKey.eval(e),null,"in")||a.getPort(a.nodeKey.eval(e),null,"out"),y=o?{node:e,port:o}:null}else y&&e===y.node||(y={node:e});if(K.conduct().changeDragTarget)(K.usePorts()?(r&&r.port)!==(y&&y.port):(r&&r.node)!==(y&&y.node))&&(K.conduct().changeDragTarget(v,y)?(u=null,i.negativeTip&&i.negativeTip.hideTip(),n=K.conduct().validTargetMessage&&K.conduct().validTargetMessage()||"matches",i.positiveTip&&i.positiveTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?y.port:y.node),m=!0):(u=K.usePorts()?y&&y.port:y&&y.node,y&&K.conduct().invalidTargetMessage&&(i.positiveTip&&i.positiveTip.hideTip(),n=K.conduct().invalidTargetMessage(v,y),console.log(n),i.negativeTip&&i.negativeTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?y.port:y.node)),m=!1));y?y.port?_[0].target=w(o):_[0].target={x:e.cola.x,y:e.cola.y}:_[0].target={x:t[0],y:t[1]},b(),k()}}).on("mouseup.draw-graphs",function(e){if(u=null,i.negativeTip&&i.negativeTip.hideTip(!0),i.positiveTip&&i.positiveTip.hideTip(!0),i.tipsDisable&&i.tipsDisable.forEach(function(e){e.disabled(!1)}),v&&m){var t;t=K.conduct().finishDragEdge?K.conduct().finishDragEdge(v,y):Promise.resolve(!0);var n=v,r=y;t.then(function(e){e&&function(t,e,n){if(!K.edgeCrossfilter())throw new Error("need edgeCrossfilter");var r,o={},a=K.addEdge()||P;o[d]=A(),o[p]="",K.conduct().detectReversedEdge&&K.conduct().detectReversedEdge(o,e.port,n.port)?(o[f]=n.node.orig.key,o[g]=e.node.orig.key,r=e,e=n,n=r):(o[f]=e.node.orig.key,o[g]=n.node.orig.key),a(o,e.port,n.port).then(function(e){e&&(s.new_edge(o[d],e[f],e[g]),K.edgeCrossfilter().add([e]),c.set_changed([],!1),l.set_changed([e[d]],!1),t.redrawGroup())})}(a,n,r)})}else v&&K.conduct().cancelDragEdge&&K.conduct().cancelDragEdge(v);o(),k()}),a.svg().on("mousedown.draw-graphs",function(){v=null}).on("mousemove.draw-graphs",function(){if(v){var e=he.event_coords(a);if(u=null,S(e))return;K.conduct().dragCanvas&&K.conduct().dragCanvas(v,e),K.conduct().changeDragTarget&&y&&K.conduct().changeDragTarget(v,null),y=null,_[0].target={x:e[0],y:e[1]},b(),k()}}).on("mouseup.draw-graphs",function(){u=null,i.negativeTip&&i.negativeTip.hideTip(!0),i.positiveTip&&i.positiveTip.hideTip(!0),i.tipsDisable&&i.tipsDisable.forEach(function(e){e.disabled(!1)}),v?(K.conduct().cancelDragEdge&&K.conduct().cancelDragEdge(v),o()):de.event.target===this&&K.clickCreatesNodes()&&E(a,he.event_coords(a)),k()}),x||(x=a.g().append("g").attr("class","draw-graphs"))},remove_behavior:function(e,t,n,r){t.on("mousedown.draw-graphs",null).on("mousemove.draw-graphs",null).on("mouseup.draw-graphs",null),e.svg().on("mousedown.draw-graphs",null).on("mousemove.draw-graphs",null).on("mouseup.draw-graphs",null)}});return K.nodeCrossfilter=ye(i.nodeCrossfilter),K.edgeCrossfilter=ye(i.edgeCrossfilter),K.usePorts=ye(null),K.clickCreatesNodes=ye(!0),K.dragCreatesEdges=ye(!0),K.dragSize=ye(5),K.crossSize=ye(15),K.crossWidth=ye(5),K.conduct=ye({}),K.addNode=ye(null),K.addEdge=ye(null),K.createNode=function(e,t){E(K.parent(),e,t)},K},he.match_ports=function(n,a){var u,c,i;function l(e,t){return e.map(function(e){return e.state=t,n.portNodeKey.eval(e)})}function r(e){var t=l(i,"small");e.port.state="small",t.push(n.portNodeKey.eval(e.port)),a.animateNodes(t)}function o(t,n){return c.some(function(e){return 0<=t.edges.indexOf(e)&&0<=n.edges.indexOf(e)})}function s(e,t){return(d.allowParallel()||!o(e,t))&&d.isValid()(e,t)}n.on("data.match-ports",function(e,t,n,r,o,a,i){a,u=i,c=o}),n.on("transitionsStarted",function(){a.enableHover(!0)});var d={isValid:ye(function(e,t){return t!==e&&t.name===e.name}),whyInvalid:ye(function(e,t){return t===e?"can't connect port to itself":t.name!==e.name&&"must connect ports of the same type"}),allowParallel:ye(!1),hoverPort:function(e){if(e){if((i=u.filter(s.bind(null,e))).length)return l(i,"shimmer-medium")}else if(i)return l(i,"small");return null},startDragEdge:function(e){var t=l(i=u.filter(s.bind(null,e.port)),"shimmer");return i.length&&(a.enableHover(!1),e.port.state="large",t.push(n.portNodeKey.eval(e.port)),a.animateNodes(t)),console.log("valid targets",t),0!==i.length},invalidSourceMessage:function(e){return"no valid matches for this port"},changeDragTarget:function(e,t){var n,r,o=t&&s(e.port,t.port);return o?(n=l(i,"small"),t.port.state="large"):(n=l(i,"small"),r=a.animateNodes(n),n=l(i,"shimmer")),a.animateNodes(n,r),o},validTargetMessage:function(e,t){return"it's a match!"},invalidTargetMessage:function(e,t){return n=e.port,r=t.port,!d.allowParallel()&&o(n,r)?"can't connect two edges between the same two ports":d.whyInvalid()(n,r);var n,r},finishDragEdge:function(e,t){return a.enableHover(!0),r(e),Promise.resolve(s(e.port,t.port))},cancelDragEdge:function(e){return a.enableHover(!0),r(e),!0}};return d},he.match_opposites=function(a,e,i){var u,c,l;function s(e){return{x:e.node.cola.x+e.pos.x,y:e.node.cola.y+e.pos.y}}function r(t,n){return(d.allowParallel()||!c.some(function(e){return 0<=t.edges.indexOf(e)&&0<=n.edges.indexOf(e)}))&&d.isValid()(t,n)}function o(e,t){t.forEach(function(e){e.edges.forEach(function(e){e.deleting=0})}),e&&e.port.edges.forEach(function(e){e.deleting=0})}i=Object.assign({multiplier:2,ease:de.ease("cubic")},i),a.cascade(100,!0,f(function(e){return i.ease(e.deleting||0)},e,t)),a.on("data.match-opposites",function(e,t,n,r,o,a,i){a,u=i,c=o});var d={isValid:ye(function(e,t){return"in"===a.portName.eval(e)^"in"===a.portName.eval(t)}),allowParallel:ye(!1),hoverPort:function(e){},startDragEdge:function(e){return l=u.filter(r.bind(null,e.port)),console.log("valid targets",l.map(a.portNodeKey.eval)),0!==l.length},dragCanvas:function(e,n){var t=l.map(function(e){var t=s(e);return{distance:Math.hypot(n[0]-t.x,n[1]-t.y),port:e}}).sort(function(e,t){return e.distance-t.distance}),r=s(t[0].port),o=s(e.port);t.forEach(function(t){t.port.edges.forEach(function(e){e.deleting=1-i.multiplier*t.distance/Math.hypot(r.x-o.x,r.y-o.y)})}),e.port.edges.forEach(function(e){e.deleting=1-i.multiplier*t[0].distance/Math.hypot(r.x-o.x,r.y-o.y)}),a.refresh()},changeDragTarget:function(e,t){var n=t&&r(e.port,t.port);return n&&(t.port.edges.forEach(function(e){e.deleting=1}),e.port.edges.forEach(function(e){e.deleting=1}),o(null,l.filter(function(e){return e!==t.port})),a.refresh()),n},finishDragEdge:function(e,t){if(r(e.port,t.port)){if(o(null,l.filter(function(e){return e!==t.port})),i.delete_edges){var n=e.port.edges.map(a.edgeKey.eval).concat(t.port.edges.map(a.edgeKey.eval));return i.delete_edges.deleteSelection(n)}return Promise.resolve(!0)}return o(e,l),Promise.resolve(!1)},cancelDragEdge:function(e){return o(e,l),!0},detectReversedEdge:function(e,t,n){return"in"===a.portName.eval(t)}};return d},he.wildcard_ports=function(e){var a=e.diagram,r=e.get_type||function(e){return e.orig.value.type},c=e.set_type||function(e,t){e.orig.value.type=t.orig.value.type},i=e.get_name||function(e){return e.orig.value.name},l=e.is_wild||function(e){return e.orig.value.wild},s=e.update_ports||function(){},u=e.get_linked||function(){return[]};function d(e,t){if(!a)return[];var n=a.nodeKey.eval(e),r=i(t),o=(u(e)||[]).find(function(e){return e.includes(r)});return o?o.filter(function(e){return e!==r}).map(function(e){return a.getPort(n,null,e)}):[]}function f(e){return e.every(function(e){return 0===e.edges.length})}return{isValid:function(e,t){return null===r(e)^null===r(t)||null!==r(e)&&r(e)===r(t)},whyInvalid:function(e,t){return null===r(e)&&null===r(t)?"can't connect wildcard to wildcard":r(e)!==r(t)&&"the types of ports must match"},copyLinked:function(e,t){d(e,t).forEach(function(e){c(e,t)})},copyType:function(e,t,n){return null===r(t)?(c(t,n),this.copyLinked(t.node,t),s()):null===r(n)&&(c(n,t),this.copyLinked(n.node,n),s()),Promise.resolve(e)},resetTypes:function(e){var u=a;return 2===arguments.length&&(u=e,e=arguments[1]),e.forEach(function(e){var t=u.getWholeEdge(e),n=u.edgeSourcePortName.eval(t),r=u.edgeTargetPortName.eval(t),o=!1,a=u.getPort(u.nodeKey.eval(t.source),null,n),i=d(t.source,a);l(a)&&1===a.edges.length&&f(i)&&(c(a,null),i.forEach(function(e){c(e,null),o=!0})),a=u.getPort(u.nodeKey.eval(t.target),null,r),i=d(t.target,a),l(a)&&1===a.edges.length&&f(i)&&(c(a,null),i.forEach(function(e){c(e,null),o=!0})),o&&s()}),Promise.resolve(e)}}},he.symbol_port_style=function(){var s,d,o,f={};function g(e){return e.named?e.name:f.parent().edgeKey.eval(e.edges[0])}function h(e){var t=f.color.eval(e);return t?f.colorScale()?f.colorScale()(t):t:"none"}function p(e){var t=f.portPosition(e);return"translate("+t.x+","+t.y+")"}function v(e){f.symbolScale()||f.symbolScale(de.scale.ordinal().range(de.shuffle(f.content().enum())));var t=f.symbol.eval(e);return t&&(f.symbolScale()?f.symbolScale()(t):t)}function y(e){return e.vec[0]<0}function m(e){switch(e.state){case"large":return f.largeRadius.eval(e);case"medium":return f.mediumRadius.eval(e);case"small":default:return f.smallRadius.eval(e)}}function x(e){return/-medium$/.test(e.state)?f.mediumRadius.eval(e):f.largeRadius.eval(e)}function _(e){var t,n;return f.outlineFill.eval(e)?(t=f.outlineFillScale()||ve,n=f.outlineFill.eval(e)):(t=f.parent().nodeFillScale()||ve,n=f.parent().nodeFill.eval(e.node)),"none"===n?"none":t(n)}function b(e){return f.outlineStroke.eval(e)||f.parent().nodeStroke.eval(e.node)}function w(e){var t=f.outlineStrokeWidth.eval(e);return"number"==typeof t?t:f.parent().nodeStrokeWidth.eval(e.node)}return f.symbolScale=ye(null),f.colorScale=ye(de.scale.ordinal().range(de.shuffle(["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"]))),f.symbol=f.portSymbol=ye(g,!1),f.color=f.portColor=ye(g,!1),f.outline=ye(he.symbol_port_style.outline.circle()),f.content=ye(he.symbol_port_style.content.d3symbol()),f.smallRadius=f.portRadius=ye(7),f.mediumRadius=f.portHoverNodeRadius=ye(10),f.largeRadius=f.portHoverPortRadius=ye(14),f.displacement=f.portDisplacement=ye(2),f.outlineFillScale=f.portBackgroundScale=ye(null),f.outlineFill=f.portBackgroundFill=ye(null),f.outlineStroke=f.portBackgroundStroke=ye(null),f.outlineStrokeWidth=f.portBackgroundStrokeWidth=ye(null),f.padding=f.portPadding=ye(2),f.label=f.portLabel=f.portText=ye(function(e){return e.name}),f.portLabelPadding=ye({x:5,y:5}),f.cascade=be(f),f.portPosition=function(e){var t=Math.hypot(e.pos.x,e.pos.y),n=e.pos.x/t,r=e.pos.y/t,o=f.displacement.eval(e);return{x:e.pos.x+o*n,y:e.pos.y+o*r}},f.animateNodes=function(e,t){var n=de.set(e),r=d.filter(function(e){return n.has(f.parent().nodeKey.eval(e))}),o=f.parent().selectNodePortsOfStyle(r,f.parent().portStyle.nameOf(this)),a=o.filter(function(e){return/^shimmer/.test(e.state)}),i=o.filter(function(e){return!/^shimmer/.test(e.state)});function u(){var e=a.transition().duration(1e3).ease("bounce");e.selectAll(".port-outline").call(f.outline().draw(function(e){return x(e)+f.portPadding.eval(e)})),e.selectAll(".port-symbol").call(f.content().draw(v,x));var t=e.transition().duration(1e3).ease("sin");t.selectAll(".port-outline").call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)})),t.selectAll(".port-symbol").call(f.content().draw(v,f.smallRadius.eval)),t.each("end",u)}a.size()&&(t?t.each("end",u):u());var c=i.transition().duration(250);function l(e){return"large"===e.state||"medium"===e.state}return c.selectAll(".port-outline").call(f.outline().draw(function(e){return m(e)+f.portPadding.eval(e)})),c.selectAll(".port-symbol").call(f.content().draw(v,m)),c.selectAll("text.port-label").attr({opacity:function(e){return l(e)?1:0},"pointer-events":function(e){return l(e)?"auto":"none"}}),c.selectAll("rect.port-label-background").attr("opacity",function(e){return l(e)?1:0}),d.filter(function(e){var t=s[f.parent().nodeKey.eval(e)];return t&&t.some(l)}).each(function(){this.parentNode.appendChild(this)}),o.filter(function(e){return"small"!==e.state}).each(function(){this.parentNode.appendChild(this)}),c},f.eventPort=function(){var e=de.select(de.event.target.parentNode);return"g"===de.event.target.parentNode.tagName&&e.classed("port")?e.datum():null},f.drawPorts=function(e,t,n){s=t,d=n;var r=e.data(function(e){return t[f.parent().nodeKey.eval(e)]||[]},g);r.exit().remove();var o=r.enter().append("g").attr({class:"port",transform:p});r.transition("port-position").duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).attr({transform:p});var a=r.selectAll(".port-outline").data(function(e){return"none"!==_(e)?[e]:[]});a.exit().remove();var i=a.enter().append(f.outline().tag()).attr({class:"port-outline",fill:_,"stroke-width":w,stroke:b});f.outline().init&&i.call(f.outline().init),i.call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)})),a.attr({fill:_,"stroke-width":w,stroke:b}),a.transition().duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)}));o.append(f.content().tag()).attr("class","port-symbol").call(f.content().draw(v,f.smallRadius.eval));var u=r.select(".port-symbol");u.attr("fill",h),u.transition().duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).call(f.content().draw(v,f.smallRadius.eval));var c=r.selectAll("text.port-label").data(function(e){return f.portLabel.eval(e)?[e]:[]});c.exit().remove();var l=c.enter();return l.append("rect").attr({class:"port-label-background","pointer-events":"none"}),l.append("text").attr({class:"port-label","dominant-baseline":"middle","pointer-events":"none",cursor:"default",opacity:0}),c.each(function(e){e.offset=(y(e)?-1:1)*(f.largeRadius.eval(e)+f.portPadding.eval(e))}).attr({"text-anchor":function(e){return y(e)?"end":"start"},transform:function(e){return"translate("+e.offset+",0)"}}).text(f.portLabel.eval).each(function(e){e.bbox=_e(this)}),r.selectAll("rect.port-label-background").attr({x:function(e){return(e.offset<0?e.offset-e.bbox.width:e.offset)-f.portLabelPadding.eval(e).x},y:function(e){return-e.bbox.height/2-f.portLabelPadding.eval(e).y},width:function(e){return e.bbox.width+2*f.portLabelPadding.eval(e).x},height:function(e){return e.bbox.height+2*f.portLabelPadding.eval(e).y},fill:"white",opacity:0}),f},f.enableHover=function(e){if(!o&&f.parent()){var t=f.parent().child("draw-graphs");t&&(o=t.conduct())}var n="grow-ports-"+f.parent().portStyle.nameOf(this);return e?(d.on("mouseover."+n,function(e){var t=f.parent().nodeKey.eval(e),n=f.eventPort();s[t]&&s[t].forEach(function(e){e.state=e===n?"large":n?"small":"medium"});var r=o&&o.hoverPort(n)||[];r.push(t),f.animateNodes(r)}),d.on("mouseout."+n,function(e){var t=f.parent().nodeKey.eval(e);s[t]&&s[t].forEach(function(e){e.state="small"});var n=o&&o.hoverPort(null)||[];n.push(t),f.animateNodes(n)})):(d.on("mouseover."+n,null),d.on("mouseout."+n,null)),f},f.parent=ye(null),f},he.symbol_port_style.outline={},he.symbol_port_style.outline.circle=function(){return{tag:function(){return"circle"},draw:function(t){return function(e){e.attr("r",function(e){return t(e)})}}}},he.symbol_port_style.outline.square=function(){return{tag:function(){return"rect"},init:function(e){},draw:function(t){return function(e){e.attr({x:function(e){return-t(e)},y:function(e){return-t(e)},width:function(e){return 2*t(e)},height:function(e){return 2*t(e)}})}}}},he.symbol_port_style.outline.arrow=function(){var r=.75-Math.PI/8,o={tag:function(){return"path"},init:function(e){},draw:function(n){return function(e){e.attr("d",function(e){var t=n(e);return!o.outie()||o.outie()(e.orig)?"M"+-r*t+","+-t+" h"+t+" l"+t+","+t+" l"+-t+","+t+" h"+-t+" a"+t+","+t+" 0 1,1 0,"+-2*t:"M"+-(2-r)*t+","+-t+" h"+2*t+" a"+t+","+t+" 0 1,1 0,"+2*t+" h"+-2*t+" l"+t+","+-t+" l"+-t+","+-t})}},outie:ye(null)};return o},he.symbol_port_style.content={},he.symbol_port_style.content.d3symbol=function(){return{tag:function(){return"path"},enum:function(){return de.svg.symbolTypes},draw:function(r,o){return function(e){e.attr("d",function(e){var t=r(e),n=o(e);return de.svg.symbol().type(t).size(n*n)()}),e.attr("transform",function(e){switch(r(e)){case"triangle-up":return"translate(0, -1)";case"triangle-down":return"translate(0, 1)";default:return null}})}}}},he.symbol_port_style.content.letter=function(){return{tag:function(){return"text"},enum:function(){return de.range(65,91).map(String.fromCharCode)},draw:function(t,n){return function(e){e.text(t).attr({"dominant-baseline":"middle","text-anchor":"middle"}),e.each(function(e){e.symbol_size||(e.symbol_size=_e(this))}),e.attr("transform",function(e){return"scale("+2*n(e)/e.symbol_size.height+") translate("+[0,2].join(",")+")"})}}}},he.load_graph=function(){function e(e){return e?e.replace(/\?.*/,""):null}var t,n,r;if(t=arguments[0],3===arguments.length)n=arguments[1],r=arguments[2];else{if(2!==arguments.length)throw new Error("need two or three arguments");r=arguments[1]}n?queue().defer(de.json,t).defer(de.json,n).await(function(e,t,n){e?r(e,null):r(null,{nodes:t.results,edges:n.results})}):/\.json$/.test(e(t))?de.json(t,r):/\.gv|\.dot$/.test(e(t))?de.text(t,function(e,t,n){if(t)e(t,null);else{var r,o;if(graphlibDot.parse){var a=graphlibDot.parse(n),i=a.nodes();r=new Array(i.length),i.forEach(function(e,t){var n=r[t]=a._nodes[i[t]];n.id=t,n.name=e});var u=a.edges();o=[],u.forEach(function(e){var t=a._edges[e];o.push(Object.assign({},t.value,{source:a._nodes[t.u].id,target:a._nodes[t.v].id,sourcename:t.u,targetname:t.v}))})}else a=graphlibDot.read(n),i=a.nodes(),r=new Array(i.length),i.forEach(function(e,t){var n=r[t]=a._nodes[i[t]];n.id=t,n.name=e}),o=[],a.edges().forEach(function(e){o.push(Object.assign({},e.value,{source:a._nodes[e.v].id,target:a._nodes[e.w].id,sourcename:e.v,targetname:e.w}))});e(null,{nodes:r,links:o})}}.bind(null,r)):/\.psv$/.test(e(t))?de.dsv("|","text/plain")(t,p.bind(null,r)):/\.csv$/.test(e(t))&&de.csv(t,p.bind(null,r))},he.munge_graph=function(t,e,n,r){var o,a,i=e||"name",u=n||"sourcename",c=r||"targetname";if(!w(t)){var l=["database","response"],s=l.findIndex(function(e){return t[e]&&w(t[e])});if(s<0)throw new Error("couldn't find the data!");t=t[l[s]]}function d(t,e){return e.filter(function(e){return!!t[e]})}a=t.edges||t.links,o=t.nodes||t.vertices;var f=a[0];if(void 0===f[u]){var g=n?[n]:["source_ecomp_uid","node1","source","tail"],h=r?[r]:["target_ecomp_uid","node2","target","head"],p=["edge"];if(f.node0&&f.node1)u="node0",c="node1";else{var v=d(f,g);if(!v.length){if((s=p.findIndex(function(e){return f[e]&&d(f[e],g).length}))<0)throw n?new Error("sourceattr "+u+" didn't work"):new Error("didn't find any source attr");a=a.map(function(e){return e[p[s]]}),v=d(f=a[0],g)}if(1(u.valuesByAttr?1:0)){var d=i.shift(),f=[],g=[],t=e.map(function(e){var t,n=e[u.nestKey],r=u.nestKeysUnique?n:A();if(r&&(u.ancestorKeys?(s=s||{},d&&(s[d]=n),t=Object.assign({},s)):t={},t[u.nodeKey]=r,u.label&&u.labelFun&&(t[u.label]=u.labelFun(n,d,e)),u.level&&(t[u.level]=l+1),f.push(t),c)){var o={};o[u.edgeSource]=c,o[u.edgeTarget]=r,g.push(o)}var a=u.valuesByAttr?e[i[0]]:e.values;return v(a,i.slice(0),u,r,l+1,Object.assign({},s))});return{nodes:Array.prototype.concat.apply(f,t.map(ge.pluck("nodes"))),edges:Array.prototype.concat.apply(g,t.map(ge.pluck("edges")))}}return{nodes:e.map(function(e){return e=Object.assign({},e),u.level&&(e[u.level]=l+1),e}),edges:e.map(function(e){var t={};return t[u.edgeSource]=c,t[u.edgeTarget]=e[u.nodeKey],t})}};he.convert_tree=function(e,t,n){return n=Object.assign({nodeKey:"key",edgeKey:"key",edgeSource:"sourcename",edgeTarget:"targetname",nestKey:"key"},n),Array.isArray(e)?v(e,t,n,n.root,0,n.inherit):(t=[""].concat(t),v([e],t,n,n.root,0,n.inherit))},he.convert_nest=function(e,t,n,r,o,a,i){return he.convert_tree(e,t,{nodeKey:n,edgeSource:r,edgeTarget:o,root:a,inherit:i,ancestorKeys:!0,label:"name",labelFun:function(e,t,n){return t+":"+e},level:"_level"})},he.convert_adjacency_list=function(e,r,o){var t=Array.prototype.concat.apply([],e.map(function(n){return n[r.adjacencies].map(function(e){var t={};return o.edgeKey&&(t[o.edgeKey]=A()),t[o.edgeSource]=n[r.nodeKey],t[o.edgeTarget]=r.targetKey?e[r.targetKey]:e,o.adjacency&&(t[o.adjacency]=e),t})}));return{nodes:e,edges:t}},he.deparallelize=function(e,c,l){return{all:function(){var u={};e.all().forEach(function(e){var t=e.value[c],n=e.value[l],r=t "+n[a.nodeKey]),u.push(o)}}},remove:function(e){for(;0i&&0e)return o.splice(n,0,{n:e,f:t}),a}return o.push({n:e,f:t}),a},a._eval=function(e,t){return 0!==t&&o.length?o[t-1].f(e,function(){return a._eval(e,t-1)}):he.functor_wrap(a(),n)(e)},a.eval=function(e){return a._eval(e,o.length)},a.react=function(e){return arguments.length?(r=e,this):r},a};function me(){var n={},e=function(e,t){return 1===arguments.length?n[e]:(n[e]===t||(n[e]&&n[e].parent(null),(n[e]=t)&&t.parent(this)),this)};return e.enum=function(){return Object.keys(n)},e.nameOf=function(t){var e=Object.entries(n).find(function(e){return e[1]==t});return e?e[0]:null},e}function xe(e,t){var n=ye(t),r=function(){return arguments.length?(console.warn(e),n.apply(ye,arguments),this):n()};return["cascade","_eval","eval","react"].forEach(function(e){r[e]=n[e]}),r}function A(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}function _e(e){try{return e.getBBox()}catch(e){return{x:0,y:0,width:0,height:0}}}function n(n,r){return function(e,t){return n(e)?r(e):t()}}function t(n,r){return function(e,t){return de.interpolate(t(e),r(e))(n(e))}}function f(e,t,n){var r={};for(var o in t)r[o]=n(e,we(t[o]));return r}function c(e,t){return f(e,t,n)}function b(e,t,n){var r={},o={},a=[];for(var i in n)/^node/.test(i)?r[i]=n[i]:/^edge/.test(i)?o[i]=n[i]:a.push(i);a.length&&console.error('only know how to deal with properties that start with "node" or "edge"',a);var u=e?c(e,r):{};return t&&Object.assign(u,c(t,o)),u}function be(o){return function(e,t,n){for(var r in n){if(!o[r])throw new Error("unknown attribute "+r);o[r].cascade(e,t?n[r]:null)}return o}}function we(e){return he.functor_wrap(e,pe)}"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(e),r=1;r>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var r=arguments[1],o=0;o"+n+' is deprecated, and it is not supported for the "'+t.layoutAlgorithm()+'" layout algorithm: ignored.'),!arguments.length)return null;return this}}function Q(e){z.layoutEngine()||z.layoutAlgorithm("cola",!0),(e||z.layoutEngine()).init({width:z.width(),height:z.height()})}function ee(e){return!!e.source&&!!e.target}z.height=function(e){if(!arguments.length){if(!ge.utils.isNumber(i)){if(G=d(z.root().node()),"auto"===i)return G;i=G}return i}if(ge.utils.isNumber(e)||!e||"auto"===e)i=e;else{if("function"!=typeof e)throw new Error("don't know what to do with height type "+typeof e+" value "+e);d=e,i=void 0}return z},z.minHeight=function(e){return arguments.length?(s=e,z):s},z.width=function(e){if(!arguments.length){if(!ge.utils.isNumber(o)){if(q=l(z.root().node()),"auto"===o)return q;o=q}return o}if(ge.utils.isNumber(e)||!e||"auto"===e)o=e;else{if("function"!=typeof e)throw new Error("don't know what to do with width type "+typeof e+" value "+e);l=e,o=void 0}return z},z.minWidth=function(e){return arguments.length?(c=e,z):c},z.root=ye(null).react(function(e){e.empty()&&console.log("Warning: parent selector "+t+" doesn't seem to exist")}),z.mouseZoomable=ye(!0),z.zoomExtent=ye([.1,2]),z.modKeyZoom=z.altKeyZoom=ye(!1),z.fitStrategy=ye("default"),z.restrictPan=ye(!1),z.autoZoom=ye(null),z.zoomToFit=function(e){if(H&&Y){var t=z.selectAllNodes();z.selectAllEdges();P(t)}},z.zoomDuration=ye(500),z.nodeDimension=ye(),z.nodeGroup=ye(),z.edgeDimension=ye(),z.edgeGroup=ye(),z.edgesInFront=ye(!1),z.nodeKey=z.nodeKeyAccessor=ye(function(e){return e.key}),z.edgeKey=z.edgeKeyAccessor=ye(function(e){return e.key}),z.edgeSource=z.sourceAccessor=ye(function(e){return e.value.sourcename}),z.edgeTarget=z.targetAccessor=ye(function(e){return e.value.targetname}),z.portDimension=ye(null),z.portGroup=ye(null),z.portNodeKey=ye(null),z.portEdgeKey=ye(null),z.portName=ye(null),z.portStyleName=ye(null),z.portElastic=ye(!0),z.portStyle=me(),z.portBounds=ye(null),z.edgeSourcePortName=ye(null),z.edgeTargetPortName=ye(null),z.nodeRadius=z.nodeRadiusAccessor=ye(25),z.nodeStrokeWidth=z.nodeStrokeWidthAccessor=ye(1),z.nodeStroke=z.nodeStrokeAccessor=ye("black"),z.nodeStrokeDashArray=ye(null),z.nodeFillScale=ye(null),z.nodeFill=z.nodeFillAccessor=ye("white"),z.nodeOpacity=ye(1),z.nodePadding=ye(6),z.nodeLabelPadding=ye(0),z.nodeLineHeight=ye(1),z.nodeLabel=z.nodeLabelAccessor=ye(function(e){return e.value.label||e.value.name}),z.nodeLabelAlignment=ye("center"),z.nodeLabelFill=z.nodeLabelFillAccessor=ye(null),z.nodeFitLabel=z.nodeFitLabelAccessor=ye(!0),z.nodeShape=ye(Se),z.shape=me(),z.shape("nothing",he.no_shape()),z.shape("ellipse",he.ellipse_shape()),z.shape("polygon",he.polygon_shape()),z.shape("rounded-rect",he.rounded_rectangle_shape()),z.nodeContent=ye("text"),z.content=me(),z.content("text",he.text_contents()),z.nodeIcon=ye(null),z.nodeTitle=z.nodeTitleAccessor=ye(function(e){return z.nodeKey()(e)}),z.nodeOrdering=ye(null),z.nodeFixed=z.nodeFixedAccessor=ye(null),z.edgeStroke=z.edgeStrokeAccessor=ye("black"),z.edgeStrokeWidth=z.edgeStrokeWidthAccessor=ye(1),z.edgeStrokeDashArray=ye(null),z.edgeOpacity=z.edgeOpacityAccessor=ye(1),z.edgeLabel=z.edgeLabelAccessor=ye(function(e){return z.edgeKey()(e)}),z.edgeArrowhead=z.edgeArrowheadAccessor=ye("vee"),z.edgeArrowtail=z.edgeArrowtailAccessor=ye(null),z.edgeArrowSize=ye(1),z.edgeIsLayout=z.edgeIsLayoutAccessor=ye(function(e){return!e.value.notLayout}),z.edgeIsShown=ye(!0),z.lengthStrategy=p("lengthStrategy"),z.edgeLength=z.edgeDistanceAccessor=ye(function(e){return e.value.distance}),z.flowLayout=p("flowLayout"),z.rankdir=p("rankdir"),z.baseLength=p("baseLength"),z.transitionDuration=ye(500),z.stageTransitions=ye("none"),z.deleteDelay=ye(0),z.groupConnected=p("groupConnected"),z.timeLimit=ye(0),z.constrain=ye(function(e,t){return[]}),z.parallelEdgeOffset=ye(10),z.edgeOrdering=ye(null),z.edgeSort=ye(null),z.cascade=be(z),z.initLayoutOnRedraw=ye(!1),z.layoutUnchanged=ye(!1),z.relayout=function(){return F=R=null,this},z.initialLayout=xe("initialLayout is deprecated - use layout algorithms instead",null),z.initialOnly=xe("initialOnly is deprecated - see the initialLayout deprecation notice in the documentation",!1),z.induceNodes=ye(!1),z.showLayoutSteps=ye(!1),z.mode=z.child=me(),z.legend=function(e){return arguments.length?(z.child("node-legend",e),z):z.child("node-legend")},z.layoutAlgorithm=function(e,t){if(!arguments.length)return z.layoutEngine()?z.layoutEngine().layoutAlgorithm():"cola";var n;switch(t||console.warn("dc.graph.diagram.layoutAlgorithm is depecrated - pass the layout engine object to dc_graph.diagram.layoutEngine instead"),e){case"cola":n=he.cola_layout();break;case"dagre":n=he.dagre_layout()}return n=he.webworker_layout(n),z.layoutEngine(n),this},z.layoutEngine=ye(null).react(function(e){e&&e.parent&&e.parent(z),h&&(Object.keys(Z).forEach(function(e){Z[e].cola.points=null}),Q(e))}),z.enforceEdgeDirection=ye(null),z.tickSize=p("tickSize"),z.uniqueId=function(){return z.anchorName().replace(/[ .#=\[\]"]/g,"-")},z.edgeId=function(e){return"edge-"+z.edgeKey.eval(e).replace(/[^\w-_]/g,"-")},z.arrowId=function(e,t){return"arrow-"+t+"-"+z.uniqueId()+"-"+z.edgeId(e)},z.textpathId=function(e){return"textpath-"+z.uniqueId()+"-"+z.edgeId(e)},z.getNode=function(e){return V[e]?V[e].orig:null},z.getWholeNode=function(e){return V[e]?V[e]:null},z.getEdge=function(e){return Z[e]?Z[e].orig:null},z.getWholeEdge=function(e){return Z[e]?Z[e]:null},z.getPort=function(e,t,n){return U[De(e,t,n)]},z.nodePorts=function(){return a},z.handleDisconnected=p("handleDisconnected"),z.forEachChild=function(e,n,r,o){n.enum().forEach(function(t){o(n(t),e.filter(function(e){return r(e)===t}))})},z.forEachShape=function(e,t){z.forEachChild(e,z.shape,function(e){return e.dcg_shape.shape},t)},z.forEachContent=function(e,t){z.forEachChild(e,z.content,z.nodeContent.eval,t)},z.renderNode=z._enterNode=function(e){return z.nodeTitle()&&e.append("title"),e.each(Ke(z)),z.forEachShape(e,function(e,t){t.call(e.create)}),z},z.redrawNode=z._updateNode=function(e){var r,t,n,o=e.filter((r=z,function(e){var t=r.nodeShape.eval(e)||Se,n=e.dcg_shape.abstract;return t.shape!==n.shape||"polygon"===t.shape&&(t.shape.sides!==n.sides||t.shape.skew!==n.skew||t.shape.distortion!==n.distortion||t.shape.rotation!==n.rotation)}));return o.selectAll(".node-shape").remove(),o.each(Ke(z)),z.forEachShape(o,function(e,t){t.call(e.create)}),e.select("title").text(z.nodeTitle.eval),z.forEachContent(e,function(e,t){t.call(e.update),z.forEachShape(e.selectContent(t),function(e,t){var s,d;t.call((s=e,d=z,function(e){e.each(function(e){var t=null;if((!s.useTextSize||s.useTextSize(e.dcg_shape))&&d.nodeFitLabel.eval(e)){var n;t={x:(t=_e(this)).x,y:t.y,width:t.width,height:t.height};var r=d.nodeContent.eval(e);if(r&&d.content(r).padding)n=d.content(r).padding(e);else{var o=Ae(d,e);n={x:2*o.x,y:2*o.y}}t.width+=n.x,t.height+=n.y,e.bbox=t}var a,i=0;s.useRadius&&!s.useRadius(e.dcg_shape)||(i=d.nodeRadius.eval(e)),a=t&&t.width&&t.height||s.useTextSize&&!s.useTextSize(e.dcg_shape)?s.calc_radii(e,i,t):{rx:i,ry:i},e.dcg_rx=a.rx,e.dcg_ry=a.ry;var u=2*a.rx,c=2*a.ry;if(ut.target.index&&(o=-o,a=-a),n=[a,o],r=Math.hypot(n[0],n[1]),[n[0]/r,n[1]/r]}function re(e,t){for(var n in a={},t.forEach(function(e){var t=z.nodeKey.eval(e.node);(a[t]=a[t]||[]).push(e)}),a){var r=e[n];a[n].forEach(function(e){if(z.portElastic.eval(e)&&e.edges.length){var t=e.edges.map(m.bind(null,r));e.vec=[de.sum(t,function(e){return e[0]})/t.length,de.sum(t,function(e){return e[1]})/t.length]}else e.vec=e.vec||void 0;e.pos=null})}}function oe(e,t,n){for(var r in a){var o=e[r];a[r].forEach(function(e){e.pos||Me(z,o,e)})}t.forEach(function(e){var t=z.edgeSourcePortName.eval(e);e.sourcePort.pos=t?n[De(z.nodeKey.eval(e.source),null,t)].pos:n[De(null,z.edgeKey.eval(e),"source")].pos,t=z.edgeTargetPortName.eval(e),e.targetPort.pos=t?n[De(z.nodeKey.eval(e.target),null,t)].pos:n[De(null,z.edgeKey.eval(e),"target")].pos,console.assert(e.sourcePort.pos&&e.targetPort.pos)})}function ae(e,t){z._updateEdge(t),z._updateNode(e),ce(e)}function ie(e){X.end(e),J=!1,te&&(te=!1,window.setTimeout(function(){z.isRunning()||z.redraw()},0))}function x(e,t){var n=e[0],r=e[e.length-1],o=Oe(e,"tail"===t?.25:.75);return("head"===t?Math.atan2(r.y-o.y,r.x-o.x):Math.atan2(n.y-o.y,n.x-o.x))+"rad"}function _(e,t,n){var r=e.points,o=r[0],a=r[r.length-1];switch(z.enforceEdgeDirection()){case"LR":if(t.x>=n.x){var i=o.x-a.x;return{points:[o,{x:o.x+i,y:o.y-i/2},{x:a.x-i,y:a.y-i/2},a],bezDegree:3,sourcePort:e.sourcePort,targetPort:e.targetPort}}break;case"TB":if(t.y>=n.y){var u=o.y-a.y;return{points:[o,{x:o.x+u/2,y:o.y+u},{x:a.x+u/2,y:a.y-u},a],bezDegree:3,sourcePort:e.sourcePort,targetPort:e.targetPort}}}return e}function b(e,t,n,r,o,a){var i,u=e.parallel,c=e.source,l=e.target;1e.target.index&&(i=l,l=c,c=i,i=o,o=n,n=i,i=a,a=r,r=i);for(var s=c.dcg_ry+z.nodeStrokeWidth.eval(c)/2,d=l.dcg_ry+z.nodeStrokeWidth.eval(l)/2,f=0;fMath.PI&&(nz.timeLimit())&&(console.log("cancelled"),z.layoutEngine().stop())}).on("end",function(e,t){z.showLayoutSteps()?ie(!0):(z.initialOnly()||I(e,t),re(V,h),X.receivedLayout(z,V,d,Z,f,U,h),oe(V,f,U),ue(A,P,x,_,b,w,k,E,S,K,!0),ce(A),X.transitionsStarted(A,x,b)),ne(A,x)}).on("start",function(){console.log("algo "+z.layoutEngine().layoutAlgorithm()+" started."),X.start()}),z.initialOnly()?z.layoutEngine().dispatch().end(d,f):(X.start(),z.layoutEngine().data({width:z.width(),height:z.height()},d.map(function(e){return e.cola}),D.map(function(e){return e.cola}),L),z.layoutEngine().start()),this},z.refresh=function(e,t,n,r,o){if(v)return this;ae(e=e||z.selectAllNodes(),t=t||z.selectAllEdges()),n=n||z.selectAllEdges(".edge-hover"),r=r||z.selectAllEdges(".edge-label"),o=o||z.selectAllDefs("path.edge-label-path");var a=de.select(null);return ue(e,a,t,a,n,a,r,a,o,a,!1),this},z.requestRefresh=function(t){window.requestAnimationFrame(function(){var e;void 0!==t&&(e=z.transitionDuration(),z.transitionDuration(t)),z.refresh(),void 0!==t&&z.transitionDuration(e)})},z.reposition=function(e,t){return e.attr("transform",function(e){return"translate("+e.cola.x+","+e.cola.y+")"}),t.each(function(e){e.pos.new=null,e.pos.old=null,b(e,"new",e.source.cola.x,e.source.cola.y,e.target.cola.x,e.target.cola.y),z.edgeArrowhead.eval(e)&&de.select("#"+z.arrowId(e,"head")).attr("orient",function(){return e.pos.new.orienthead}),z.edgeArrowtail.eval(e)&&de.select("#"+z.arrowId(e,"tail")).attr("orient",function(){return e.pos.new.orienttail})}).attr("d",w("new")),this},z.animating=function(){return v},z.selectNodePortsOfStyle=function(e,t){return e.selectAll("g.port").filter(function(e){return z.portStyleName.eval(e)===t})},z.render=function(){g&&X.reset(),z.initLayoutOnRedraw()||Q(),z.resetSvg(),h=g.append("g").attr("class","draw");var e=["edge-layer","node-layer"];return z.edgesInFront()&&e.reverse(),h.selectAll("g").data(e).enter().append("g").attr("class",function(e){return e}),Y=h.selectAll("g.edge-layer"),H=h.selectAll("g.node-layer"),X.render(),z.redraw(),this},z.on=function(e,t){return 1===arguments.length?X.on(e):(X.on(e,t),this)},z.getStats=function(){return $},z.select=function(e){return z.root().select(e)},z.selectAll=function(e){return z.root()?z.root().selectAll(e):null},z.x=ye(null),z.y=ye(null),z.svg=function(e){return arguments.length?(g=e,z):g},z.g=function(e){return arguments.length?(h=e,z):h},z.resetSvg=function(){return g&&(g.remove(),g=null),function(){g=z.root().append("svg"),z.resizeSvg(),B=g.append("svg:defs"),z.x()||z.x(de.scale.linear().domain([0,z.width()]).range([0,z.width()]));z.y()||z.y(de.scale.linear().domain([0,z.height()]).range([0,z.height()]));if(W=de.behavior.zoom().on("zoom",C).x(z.x()).y(z.y()).scaleExtent(z.zoomExtent()),z.mouseZoomable()){var e,t,n=z.child("brush");if(e=z.modKeyZoom()){t=Array.isArray(e)?e.slice():"string"==typeof e?[e]:["Alt"];var r=!1,o=!1,a=!1;g.on("mousedown.modkey-zoom",function(){r=!0}).on("mouseup.modkey-zoom",function(){(r=!1)||o||!a||(a=!1,se(),n&&n.activate())}),de.select(document).on("keydown.modkey-zoom",function(){-1 "':'" -- "')+l(e.dcg_edgeTarget)+'" '+f([d("id",l(e.dcg_edgeKey)),d("arrowhead","none"),d("arrowtail","none")])}))).push("}"),n.push(""),i=n.join("\n")}}(t,n)},dotInput:function(e){return a=e,this},clusters:function(){return u},start:function(){!function(){if(t)de.json(t).header("Content-type","application/x-www-form-urlencoded").post("layouttool="+o+"&"+encodeURIComponent(i),r);else{var e=Viz(i,{format:"json",engine:o,totalMemory:1<<25});r(0,e=JSON.parse(e))}}()},stop:function(){},optionNames:function(){return h},populateLayoutNode:function(){},populateLayoutEdge:function(){}})},he.d3_force_layout=function(e){var t=e||A(),u=null,n=de.dispatch("tick","start","end"),y={},c={},l=[],s=[],m=null,r=null;function o(e){n[e](l,s.map(function(e){return{dcg_edgeKey:e.dcg_edgeKey}}))}function a(){!function(){if(null===r)u.gravity(m.gravityStrength).charge(m.initialCharge);else{if(m.fixOffPathNodes){var t=de.set();r.forEach(function(e){e.forEach(function(e){t.add(e)})}),Object.keys(y).forEach(function(e){t.has(e)?y[e].fixed=!1:y[e].fixed=!0})}u.charge(m.chargeForce)}}(),function(e){if(!e)return o("end");u.start();for(var t=0;t<300;++t)u.tick(),r&&i();u.stop()}(m.iterations)}function i(){function a(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function h(e,t){var n,r,o=(r=t,((n=e).x*r.x+n.y*r.y)/(a(e)*a(t)));return o=Math.min(o,1),o=Math.max(o,-1),Math.acos(o)}function p(e){var t=-e.y/e.x,n=a({x:t,y:1});return{x:t/n,y:1/n}}function v(e,t,n,r){e.x+=n.x*(Math.PI-t)*r,e.y+=n.y*(Math.PI-t)*r}r.forEach(function(e){if(!(e.length<3))for(var t=1;t=Math.PI/2?c:{x:-c.x,y:-c.y},l=h(g,l)>=Math.PI/2?l:{x:-l.x,y:-l.y},v(r,u,c,m.angleForce),v(o,u,l,m.angleForce)}})}var d=he.graphviz_attrs(),f=Object.keys(d);return Object.assign(d,{layoutAlgorithm:function(){return"d3-force"},layoutId:function(){return t},supportsWebworker:function(){return!0},parent:ye(null),on:function(e,t){return 1===arguments.length?n.on(e):(n.on(e,t),this)},init:function(t){var e;return this.optionNames().forEach(function(e){t[e]=t[e]||this[e]()}.bind(this)),m=e=t,(u=de.layout.force().size([e.width,e.height])).on("tick",function(){o("tick")}).on("start",function(){n.start()}).on("end",function(){o("end")}),this},data:function(e,t,n,r){var o,a,i;a=n,i={},(o=t).forEach(function(e,t){i[e.dcg_nodeKey]=t}),l=Ee(y,o,null,function(e){return e.dcg_nodeKey},function(e,t){e.dcg_nodeKey=t.dcg_nodeKey,e.width=t.width,e.height=t.height,e.id=t.dcg_nodeKey,t.dcg_nodeFixed?(e.fixed=!0,e.x=t.dcg_nodeFixed.x,e.y=t.dcg_nodeFixed.y):e.fixed=!1}),s=Ee(c,a,null,function(e){return e.dcg_edgeKey},function(e,t){e.dcg_edgeKey=t.dcg_edgeKey,e.source=y[t.dcg_edgeSource],e.source.id=i[e.source.dcg_nodeKey],e.target=y[t.dcg_edgeTarget],e.target.id=i[e.target.dcg_nodeKey],e.dcg_edgeLength=t.dcg_edgeLength}),u.nodes(l),u.links(s)},start:function(){a()},stop:function(){u&&u.stop()},paths:function(e){r=e},savePositions:function(){var t={};return Object.keys(y).forEach(function(e){t[e]={x:y[e].x,y:y[e].y}}),t},restorePositions:function(t){Object.keys(t).forEach(function(e){y[e]&&(y[e].fixed=!1,y[e].x=t[e].x,y[e].y=t[e].y)})},optionNames:function(){return["iterations","angleForce","chargeForce","gravityStrength","initialCharge","fixOffPathNodes"].concat(f)},iterations:ye(300),angleForce:ye(.02),chargeForce:ye(-500),gravityStrength:ye(1),initialCharge:ye(-400),fixOffPathNodes:ye(!1),populateLayoutNode:function(){},populateLayoutEdge:function(){}})},he.d3_force_layout.scripts=["d3.js"],he.d3v4_force_layout=function(e){var t=e||A(),u=null,n=de.dispatch("tick","start","end"),c={},l={},s=[],d=[],r=null,o=null;function a(e){n[e](s,d.map(function(e){return{dcg_edgeKey:e.dcg_edgeKey}}))}function i(){n.start(),function(e){e&&(e=e.filter(function(e){return e.nodes.every(function(e){return c[e]})}));if(null!==e&&e.length){var t;r.fixOffPathNodes&&(t=de.set(),e.forEach(function(e){e.nodes.forEach(function(e){t.add(e)})})),Object.keys(c).forEach(function(e){r.fixOffPathNodes&&!t.has(e)?(c[e].fx=c[e].x,c[e].fy=c[e].y):(c[e].fx=null,c[e].fy=null)}),u.force("charge").strength(r.chargeForce),u.force("straighten",d3v4.forceStraightenPaths().id(function(e){return e.dcg_nodeKey}).angleForce(r.angleForce).pathNodes(function(e){return e.nodes}).pathStrength(function(e){return e.strength}).paths(e))}else u.force("charge").strength(r.initialCharge)}(o),function(e){u.alpha(1);for(var t=0;te.abounds[1]&&(e.abounds[1]+=2*Math.PI),console.assert(e.orig||e.vec,"unplaced unspecified port")});var y=[],m=[],x=[];v.forEach(function(e){var t,n;e.vec?!e.vbounds||(t=e.vec,s((n=e.vbounds)[0],t)&&s(t,n[1]))?y.push(e):m.push(e):x.push(e)}),m.forEach(function(e){var t,n;e.vec=(t=e.vec,n=e.vbounds,s(t,n[0])?n[0]:s(n[1],t)?n[1]:t),y.push(e)});var _={},b={};for(var w in x.forEach(function(e){var t=e.abounds.map(function(e){return e.toFixed(3)}).join(",");_[t]=e.abounds,b[t]=b[t]||[],b[t].push(e)}),b){var k=_[w],E=b[w];if(1===E.length)E[0].vec=d((k[0]+k[1])/2);else{var S=(k[1]-k[0])/(b[w].length-1);b[w].forEach(function(e,t){e.vec=d(k[0]+t*S)})}}y=y.concat(x),x=[],y.forEach(function(e){Me(n,p,e)});for(var K=0;Kj.minDistance())){if(!A.edges.length){x.push(A);continue}x.push(T)}}}y=y.filter(function(e){return!x.includes(e)});for(var N,O=j.patience(),L=0;x.length;){var D=x[0];D.vec=d((u=D.abounds[0],c=D.abounds[1],u+Math.random()*(c-u))),Me(n,p,D);var M=de.min(y,function(e){return g(D,e)});Lj.minDistance())&&(O<0&&(console.warn("ran out of patience placing a port"),D.vec=N,Me(n,p,D)),y.push(D),x.shift(),O=j.patience(),L=0)}}}var j={parent:ye(null).react(function(e){e?e.on("receivedLayout.place-ports",t):j.parent()&&j.parent().on("receivedLayout.place-ports",null)}),minDistance:ye(20),patience:ye(20)};return j},he.troubleshoot=function(){var g=null;function h(e,t,n){return{left:e.x-t/2,top:e.y-n/2,right:e.x+t/2,bottom:e.y+n/2}}function t(e,t,n,r){return"M"+e+","+(t+r)+" v"+-r+" h"+n}function n(e){return[t(e.left,e.top,v.boundsWidth(),v.boundsHeight()),t(e.right,e.top,-v.boundsWidth(),v.boundsHeight()),t(e.right,e.bottom,-v.boundsWidth(),-v.boundsHeight()),t(e.left,e.bottom,v.boundsWidth(),-v.boundsHeight())].join(" ")}function p(e,t){e.exit().remove(),e.enter().append("path").attr("class",t),e.attr({d:n,opacity:null!==v.boundsOpacity()?v.boundsOpacity():v.opacity(),stroke:v.boundsColor(),fill:"none"})}var v=he.behavior("highlight-paths",{laterDraw:!0,add_behavior:function(e,t,n,r){g||(g=e.g().append("g").attr({class:"troubleshoot","pointer-events":"none"}));var o=t.data().map(function(e){return{x:e.cola.x,y:e.cola.y}}),a=g.selectAll("path.nodecenter").data(o);function i(e){return{x:e.cola.x,y:e.cola.y}}a.exit().remove(),a.enter().append("path").attr("class","nodecenter"),a.attr({d:function(e){return"M"+(e.x-v.xhairWidth()/2)+","+e.y+" h"+v.xhairWidth()+" M"+e.x+","+(e.y-v.xhairHeight()/2)+" v"+v.xhairHeight()},opacity:null!==v.xhairOpacity()?v.xhairOpacity():v.opacity(),stroke:v.xhairColor()});var u=t.data().map(function(e){return h(i(e),e.cola.width,e.cola.height)});p(g.selectAll("path.colaboundary").data(u),"colaboundary");var c=t.data().map(function(e){return e.bbox?h(i(e),e.bbox.width,e.bbox.height):null}).filter(function(e){return!!e});p(g.selectAll("path.textboundary").data(c),"textboundary");var l=t.data().map(function(e){return"number"===(e.dcg_rx,!1)?null:h(i(e),2*e.dcg_rx,2*e.dcg_ry)}).filter(function(e){return!!e});p(g.selectAll("path.radiiboundary").data(l),"radiiboundary");var s=g.selectAll("rect.domain").data([0]);s.enter().append("rect");var d=v.parent().x().domain(),f=v.parent().y().domain();s.attr({class:"domain",fill:"none",opacity:v.domainOpacity(),stroke:v.domainColor(),"stroke-width":v.domainStrokeWidth(),x:d[0],y:f[0],width:d[1]-d[0],height:f[1]-f[0]})},remove_behavior:function(e,t,n,r){g&&g.remove()}});return v.opacity=ye(.75),v.xhairOpacity=ye(null),v.xhairWidth=ye(10),v.xhairHeight=ye(10),v.xhairColor=ye("blue"),v.boundsOpacity=ye(null),v.boundsWidth=ye(10),v.boundsHeight=ye(10),v.boundsColor=ye("green"),v.domainOpacity=ye(.6),v.domainColor=ye("darkorange"),v.domainStrokeWidth=ye(11),v},he.validate=function(p){function v(e,t,n,r){var o=e.filter(function(e){return!t(e)});return o.length?[n+" is empty for "+o.length+" of "+e.length+" "+r,o]:null}function y(e,n){return e.reduce(function(e,t){return e[n(t)]=t,e},{})}function m(t,e,n,r,o,a){var i=e.filter(function(e){return!t[n(e)]}).map(function(e){return{key:n(e),value:e}});return i.length?[r+" was not found in "+o,Object.keys(t),"for "+i.length+" of "+e.length+" "+a,i]:null}function t(){var t=x.parent(),e=t.nodeGroup().all(),n=t.edgeGroup().all(),r=t.portGroup()?t.portGroup().all():[],o=[];function a(e){e&&o.push(e)}a(v(e,t.nodeKey(),"nodeKey","nodes")),a(v(n,t.edgeSource(),"edgeSource","edges")),a(v(n,t.edgeTarget(),"edgeTarget","edges"));var i=de.set(t.content.enum()),u=he.functor_wrap(t.nodeContent()),c=e.filter(function(e){return!i.has(u(e))});c.length&&o.push(["there are "+c.length+" nodes with nodeContent not matching any content",c]);var l=y(e,t.nodeKey()),s=y(n,t.edgeKey());a(m(l,n,t.edgeSource(),"edgeSource","nodes","edges")),a(m(l,n,t.edgeTarget(),"edgeTarget","nodes","edges")),a(v(r,function(e){return t.portNodeKey()&&t.portNodeKey()(e)||t.portEdgeKey()&&t.portEdgeKey()(e)},"portNodeKey||portEdgeKey","ports"));var d=!t.portNodeKey()&&[]||r.filter(function(e){return t.portNodeKey()(e)}),f=!t.portEdgeKey()&&[]||r.filter(function(e){return t.portEdgeKey()(e)});if(a(m(l,d,t.portNodeKey(),"portNodeKey","nodes","ports")),a(m(s,f,t.portEdgeKey(),"portEdgeKey","edges","ports")),t.portName()){var g=y(d,function(e){return t.portNodeKey()(e)+" - "+t.portName()(e)});t.edgeSourcePortName()&&a(m(g,n,function(e){return t.edgeSource()(e)+" - "+de.functor(t.edgeSourcePortName())(e)},"edgeSourcePortName","ports","edges")),t.edgeTargetPortName()&&a(m(g,n,function(e){return t.edgeTarget()(e)+" - "+de.functor(t.edgeTargetPortName())(e)},"edgeTargetPortName","ports","edges"))}function h(){return e.length+" nodes, "+n.length+" edges, "+r.length+" ports"}o.length?(console.warn("validation of "+p+" failed with "+h()+":"),o.forEach(function(e){console.warn.apply(null,e)})):console.log("validation of "+p+" succeeded with "+h()+".")}var x={parent:ye(null).react(function(e){e?e.on("data.validate",t):x.parent().on("data.validate",null)})};return x},he.legend=function(o){o=o||"node-legend";var a,i,u,c=[],l=de.dispatch("filtered");function s(){d.dimension()&&(d.dimension().filterFunction(function(e){return!c.length||c.includes(e)}),d.parent().redraw())}var d=he.behavior(o,{add_behavior:n,remove_behavior:function(){},parent:function(e){e?e.on("render."+o,r).on("data."+o,t):d.parent().on("render."+o,null).on("data."+o,null)}});function t(e,t,n,r,o,a,i){d.counter()&&(u=d.counter()(n.map(pe),o.map(pe),i.map(pe)))}function n(){var e=d.parent().svg().selectAll("g.dc-graph-legend."+o).data([0]);e.enter().append("g").attr("class","dc-graph-legend "+o).attr("transform","translate("+d.x()+","+d.y()+")");var t=e.selectAll(d.type().itemSelector()).data(a,function(e){return e.name}),n=d.type().create(d.parent(),t.enter(),d.itemWidth(),d.itemHeight());if(n.append("text").attr("dy","0.3em").attr("class","legend-label"),t.attr("transform",function(e,t){return"translate("+d.itemWidth()/2+","+(d.itemHeight()+d.gap())*(t+.5)+")"}),t.select("text.legend-label").attr("transform","translate("+(d.itemWidth()/2+d.gap())+",0)").attr("pointer-events",d.dimension()?"auto":"none").text(function(e){return e.name+(d.counter()&&u?" ("+(u[e.orig.key]||0)+(u[e.orig.key]!==i[e.orig.key]?"/"+(i[e.orig.key]||0):"")+")":"")}),d.type().draw(d.parent(),n,t),d.noLabel()&&t.selectAll(d.type().labelSelector()).remove(),d.dropdown()){var r=t.selectAll("text.dropdown-caret").data(function(e){return[e]});r.enter().append("text").attr("dy","0.3em").attr("font-size","75%").attr("fill","blue").attr("class","dropdown-caret").style("visibility","hidden").html(" ▼"),r.attr("dx",function(e){return d.itemWidth()/2+d.gap()+_e(de.select(this.parentNode).select("text.legend-label").node()).width}).on("mouseenter",function(e){var t=this.getBoundingClientRect(),n=d.parent().nodeKey.eval(e);d.dropdown().show(n,t.x,t.y)}),t.on("mouseenter",function(e){u&&u[e.orig.key]&&de.select(this).selectAll(".dropdown-caret").style("visibility","visible")}).on("mouseleave",function(e){de.select(this).selectAll(".dropdown-caret").style("visibility","hidden")})}d.dimension()?t.attr("cursor","pointer").on("click.legend",function(e){var t=d.parent().nodeKey.eval(e);c.length||(c=a.map(d.parent().nodeKey.eval)),c.includes(t)?c=c.filter(function(e){return e!==t}):c.push(t),s(),l.filtered(d,t)}):t.attr("cursor","auto").on("click.legend",null),t.transition().duration(1e3).attr("opacity",function(e){return!c.length||c.includes(d.parent().nodeKey.eval(e))?1:.25})}function r(){var e=d.exemplars();if(d.countBaseline(),e instanceof Array)a=e.map(function(e){return{name:e.name,orig:{key:e.key,value:e.value},cola:{}}});else for(var t in a=[],e)a.push({name:t,orig:{key:t,value:e[t]},cola:{}});n()}return d.type=ye(he.legend.node_legend()),d.x=ye(0),d.y=ye(0),d.gap=ye(5),d.itemWidth=d.nodeWidth=ye(40),d.itemHeight=d.nodeHeight=ye(40),d.noLabel=ye(!0),d.counter=ye(null),d.replaceFilter=function(e){return c=e&&1===e.length?e[0]:[],d},d.filters=function(){return c},d.on=function(e,t){return l.on(e,t),d},d.exemplars=ye({}),d.countBaseline=function(){d.counter&&(i=d.counter()(d.parent().nodeGroup().all(),d.parent().edgeGroup().all(),d.parent().portGroup()&&d.parent().portGroup().all()))},d.dropdown=ye(null).react(function(e){!!e!=!!d.dropdown()&&d.parent()&&d.parent().svg()&&window.setTimeout(d.redraw,0)}),d.dimension=ye(null).react(function(e){e||(c=[],s())}),d},he.legend.node_legend=function(){return{itemSelector:function(){return".node"},labelSelector:function(){return".node-label"},create:function(e,t){return t.append("g").attr("class","node")},draw:function(e,t,n){e._enterNode(t)._updateNode(n)}}},he.legend.edge_legend=function(){var i={itemSelector:function(){return".edge-container"},labelSelector:function(){return".edge-label"},create:function(e,t,n,r){var o=t.append("g").attr("class","edge-container").attr("opacity",0);o.append("rect").attr({x:-n/2,y:-r/2,width:n,height:r,fill:"green",opacity:0}),o.selectAll("circle").data([-1,1]).enter().append("circle").attr({r:i.fakeNodeRadius(),fill:"none",stroke:"black","stroke-dasharray":"4,4",opacity:.15,transform:function(e){return"translate("+[e*i.length()/2,0].join(",")+")"}});var a=i.length()/2-i.fakeNodeRadius();return o.append("svg:path").attr({class:"edge",id:function(e){return e.name},d:"M"+-a+",0 L"+a+",0",opacity:e.edgeOpacity.eval}),o},fakeNodeRadius:ye(10),length:ye(50),draw:function(e,t,n){e._updateEdge(t.select("path.edge"))}};return i},he.constraint_pattern=function(e){var l={},r=[];return e.nodes.forEach(function(t){var e=t.id,n=l[e]||(l[e]={});if(t.partition){var r=t.partition,o=t.value||t.id;t.all||t.typename?(n.match=t.extract?function(e){return t.extract(e.value[r])}:function(e){return e.value[r]},n.typename=t.typename||function(e){return r+"="+e.value[r]}):n.match=function(e){return e.value[r]===o}}else{if(!t.match)throw new Error("couldn't determine matcher for type "+JSON.stringify(t));n.match=t.match}}),e.edges.forEach(function(t){if(!t.disable){var n={source:t.source,target:t.target};n.produce="function"==typeof t.produce?t.produce:function(){return function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}(t.produce)},["listname","wrap","reverse"].forEach(function(e){void 0!==t[e]&&(n[e]=t[e])}),r.push(n)}}),function(i,o,a){var u=[],c={};o.forEach(function(e){var t=i.nodeKey.eval(e);for(var n in l){var r=l[n],o=r.match(e.orig);if(o){var a=r.typename?r.typename(n,o):n;c[a]||(c[a]={nodes:[],whether:{}}),c[a].nodes.push(t),c[a].whether[t]=!0}}});var t=r.filter(function(e){return e.source!==e.target}),e=r.filter(function(e){return e.source===e.target});return a.forEach(function(e){var n=i.edgeSource.eval(e),r=i.edgeTarget.eval(e);t.forEach(function(e){if(c[e.source]&&c[e.source].whether[n]&&c[e.target]&&c[e.target].whether[r]){var t=e.produce(c,o,a);e.reverse?(t.left=r,t.right=n):(t.left=n,t.right=r),u.push(t)}})}),e.forEach(function(e){if(c[e.source]){var t=e.produce(),n=e.listname||e.produce.listname||"nodes",r=e.wrap||e.produce.wrap||function(e){return e};t[n]=c[e.source].nodes.map(r),u.push(t)}}),u}},he.gap_y=function(e,t){return{axis:"y",gap:e,equality:!!t}},he.gap_x=function(e,t){return{axis:"x",gap:e,equality:!!t}},he.align_y=function(){return e("y")},he.align_x=function(){return e("x")},he.order_x=function(e,t){return{type:"ordering",axis:"x",gap:60,ordering:t}},he.order_y=function(e,t){return{type:"ordering",axis:"y",gap:60,ordering:t}},he.tree_positions=function(e,t,n,r,a,i,u){var c;function f(e,t){return(i(e)+i(t))/2}console.warn("dc_graph.tree_positions is deprecated; use the layout engine tree_layout instead"),(e||n)&&console.warn("dc_graph.tree_positions: rootf and treef are ignored"),i=de.functor(i);var o=he.depth_first_traversal({nodeid:function(e){return e.cola.dcg_nodeKey},sourceid:function(e){return e.cola.dcg_edgeSource},targetid:function(e){return e.cola.dcg_edgeTarget},init:function(){c=r},row:function(e){return t(e.orig)},place:function(e,t,n){if(n.length){var r=n[n.length-1],o=(i(r)+i(e))/2;c=Math.max(c,r.left_x+o)}e.left_x=c,e.hit_ins=1,e.cola.y=t*u+a},sib:function(e,t,n){var r=f(t,n);e&&(r*=1.5),c+=r},pop:function(e){e.cola.x=(e.left_x+c)/2},skip:function(e,t){e.cola.x=(e.hit_ins*e.cola.x+c)/++e.hit_ins,e.hit_ins===t&&delete e.hit_ins},finish:function(e){e.forEach(function(e){for(var t,n=e.sort(function(e,t){return e.cola.x-t.cola.x}),r=null,o=null,a=0;a"+e+""}).direction(f.direction()),f.offset()&&c.offset(f.offset()),o.svg().call(c)),f.programmatic()||f.selection().select(e,t,n,r).on("mouseover."+u,l).on("mouseout."+u,d),f.clickable()&&de.select("div.d3-tip").on("mouseover."+u,function(){i&&window.clearTimeout(i)}).on("mouseout."+u,d)},remove_behavior:function(e,t,n,r){f.programmatic()||f.selection().select(e,t,n,r).on("mouseover."+u,null).on("mouseout."+u,null)},laterDraw:!0});return f.direction=ye("n"),f.content=ye(function(e,t){t(f.parent()?f.parent().nodeTitle.eval(e):"")}),f.on=function(e,t){return o.on(e,t)},f.disabled=ye(!1),f.programmatic=ye(!1),f.displayTip=function(e,t,n){if("function"!=typeof e){var r=e;e=function(e){return e===r}}var o=f.selection().select(f.parent(),f.parent().selectAllNodes(),f.parent().selectAllEdges(),null).filter(e);if(0v.dragSize()&&(c=!0,u&&u.style("pointer-events","none")),c&&(p(function(e){e.cola.x=e.original_position[0]+t,e.cola.y=e.original_position[1]+n}),r.reposition(o,a))}}function i(){if(g){if(c){c=!1,u&&(u.style("pointer-events",null),u=null);var n=[];p(function(e,t){n.push({id:t,pos:{x:e.cola.x,y:e.cola.y}})}),t.request_fixes(n)}l&&l.activate(),g=null}}o.on("mousedown.move-nodes",function(e){if(!(s&&s.usePorts()&&s.usePorts().eventPort())){g=he.event_coords(r),u=de.select(this);var t=r.nodeKey.eval(e),n=f;f.indexOf(t)<0?(n=[t],h=t):h=null,p(function(e){e.original_position=[e.cola.x,e.cola.y]},n),l&&l.deactivate()}}),o.on("mousemove.move-nodes",e).on("mouseup.move-nodes",i),r.svg().on("mousemove.move-nodes",e).on("mouseup.move-nodes",i)},remove_behavior:function(e,t,n){t.on("mousedown.move-nodes",null),t.on("mousemove.move-nodes",null),t.on("mouseup.move-nodes",null)},parent:function(e){d.on("set_changed.move-nodes",e?function(e,t){void 0===t&&(t=!0),f=e}:null),l=e.child("brush"),s=e.child("draw-graphs"),e.child("select-nodes")}});return v.dragSize=ye(5),v},he.fix_nodes=function(e){e=e||{};var d,f,t=he.fix_nodes_group("fix-nodes-group"),i=e.fixedPosTag||"fixedPos",u=[],g={nodeid:function(e){return v.parent().nodeKey.eval(e)},sourceid:function(e){return v.parent().edgeSource.eval(e)},targetid:function(e){return v.parent().edgeTarget.eval(e)},get_fix:function(e){return v.parent().nodeFixed.eval(e)},fix_node:function(e,t){e[i]=t},unfix_node:function(e){e[i]=null},clear_fixes:function(){u={}},register_fix:function(e,t){u[e]=t}};function n(e){v.strategy().request_fixes(g,e),c(h()).then(function(){v.parent().redraw()})}function r(e,t,n){v.strategy().new_node(g,e,t,n)}function o(e,t,n){var r=d[t],o=d[n];v.strategy().new_edge(g,e,r,o)}function h(){var a=[];return f.forEach(function(e){var t=v.parent().nodeKey.eval(e),n=u[t],r=e.orig.value[i],o=!1;r?n&&n.x===r.x&&n.y===r.y||(o=!0):o=n,o&&a.push({n:e,fixed:n?{x:n.x,y:n.y}:null})}),a}function a(e,t){t?g.fix_node(e.orig.value,t):g.unfix_node(e.orig.value)}function c(e){var n=v.fixNode()||function(e,t){return Promise.resolve(t)},t=e.map(function(t){var e=v.parent().nodeKey.eval(t.n);return n(e,t.fixed).then(function(e){a(t.n,e)})});return Promise.all(t)}function p(e){e.forEach(function(e){a(e.n,e.fixed)})}function l(e,t,n,r,o,a,i){if(d=t,f=n,r,o,v.strategy().on_data){v.strategy().on_data(g,t,n,r,o,a,i);var u=h();p(u),v.reportOverridesAsynchronously()&&(c=u,l=v.fixNode()||function(e,t){return Promise.resolve(t)},s=c.map(function(e){var t=v.parent().nodeKey.eval(e.n);return l(t,e.fixed)}),Promise.all(s))}var c,l,s}var v={parent:ye(null).react(function(e){t.on("request_fixes.fix-nodes",e?n:null).on("new_node.fix_nodes",e?r:null).on("new_edge.fix_nodes",e?o:null),e?e.on("data.fix-nodes",l):v.parent()&&v.parent().on("data.fix-nodes",null)}),fixNode:ye(null),fixAllNodes:function(e){void 0===e&&(e=!0);var t=f.map(function(e){return{n:e,fixed:{x:e.cola.x,y:e.cola.y}}});return e?c(t):(p(t),Promise.resolve(void 0))},clearFixes:function(){v.strategy().clear_all_fixes&&v.strategy().clear_all_fixes(),g.clear_fixes()},strategy:ye(he.fix_nodes.strategy.fix_last()),reportOverridesAsynchronously:ye(!0)};return v},he.fix_nodes.strategy={},he.fix_nodes.strategy.fix_last=function(){return{request_fixes:function(t,e){t.clear_fixes(),e.forEach(function(e){t.register_fix(e.id,e.pos)})},new_node:function(e,t,n,r){e.fix_node(n,r)},new_edge:function(e,t,n,r){e.unfix_node(n.orig.value),e.unfix_node(r.orig.value)}}},he.fix_nodes.strategy.last_N_per_component=function(c){c=c||1;var l=0,s={};return{clear_all_fixes:function(){s={}},request_fixes:function(e,t){++l,t.forEach(function(e){s[e.id]={id:e.id,age:l,pos:e.pos}})},new_node:function(e,t,n,r){++l,s[t]={id:t,age:l,pos:r},e.fix_node(n,r)},new_edge:function(){},on_data:function(u,e,t,n,r,o,a){++l,t.forEach(function(e){var t=u.nodeid(e),n=u.get_fix(e);n&&!s[t]&&(s[t]={id:t,age:l,pos:n})});var i=[];he.undirected_dfs({nodeid:u.nodeid,sourceid:u.sourceid,targetid:u.targetid,comp:function(){i.push([])},node:function(e,t){i[e].push(t)}})(t,r),u.clear_fixes(),i.forEach(function(e,n){var r=e.reduce(function(e,t){if(t.last_component){var n=e[t.last_component]=e[t.last_component]||{total:0,fixed:0};n.total++,s[u.nodeid(t)]&&n.fixed++}return e},{}),t=Object.keys(r).reduce(function(e,t){return r[t].fixed&&e.push({compid:+t,total:r[t].total,fixed:r[t].fixed}),e},[]).sort(function(e,t){return t.total-e.total}),o=t.length&&t[0].compid,a=e.filter(function(e){return!e.last_component||e.last_component===o}).map(function(e){return s[u.nodeid(e)]}).filter(function(e){return e});a.length>c&&(a.sort(function(e,t){return t.age-e.age}),a=a.slice(0,c)),a.forEach(function(e){u.register_fix(e.id,e.pos)});var i=a.reduce(function(e,t){return e[t.id]=!0,e},{});e.forEach(function(e){var t=u.nodeid(e);i[t]||(s[t]=null),e.last_component=n+1})})}}},he.fix_nodes_group=function(e){return window.chart_registry.create_type("fix-nodes",function(){return de.dispatch("request_fixes","new_node","new_edge")}),window.chart_registry.create_group("fix-nodes",e)},he.filter_selection=function(e,t){t=t||"select-nodes";var r=he.select_things_group(e||"select-nodes-group",t);var o={parent:ye(null).react(function(e){var n;r.on("set_changed.filter-selection-"+t,e?(n=e,function(e){if(e.length){var t=de.set(e);o.dimensionAccessor()(n).filterFunction(function(e){return t.has(e)})}else o.dimensionAccessor()(n).filter(null);n.redrawGroup()}):null)})};return o.dimensionAccessor=ye(function(e){return e.nodeDimension()}),o},he.delete_things=function(t,n,r){r=r||"id";var o,a=x?"Backspace":"Delete",i=[];function u(e){i=e}function c(e){return e[r]}function l(e){if(!s.crossfilterAccessor())throw new Error("need crossfilterAccessor");if(!s.dimensionAccessor())throw new Error("need dimensionAccessor");if(0===(e=e||i).length)return Promise.resolve([]);var t=s.preDelete()?s.preDelete()(e):Promise.resolve(e);return s.onDelete()&&(t=t.then(s.onDelete())),t.then(function(t){if(t&&t.length){var e=s.crossfilterAccessor()(s.parent()),n=s.dimensionAccessor()(s.parent()),r=e.all().slice();r.length;n.filter(null),e.remove();var o=r.filter(function(e){return-1===t.indexOf(c(e))});r.length!==o.length+t.length&&console.warn("size after deletion is not previous size minus selection size",o.map(c),r.map(c),t),e.add(o),s.parent().redrawGroup()}return!0})}var s=he.behavior(n,{add_behavior:function(e){o.on("keyup."+n,function(){de.event.code===a&&l()})},remove_behavior:function(e){},parent:function(e){t.on("set_changed."+n,u),e&&((o=e.child("keyboard"))||e.child("keyboard",o=he.keyboard()))}});return s.preDelete=ye(null),s.onDelete=ye(null),s.crossfilterAccessor=ye(null),s.dimensionAccessor=ye(null),s.deleteSelection=l,s},he.delete_nodes=function(e,t){t=t||{};var n=he.select_things_group(t.select_nodes_group||"select-nodes-group","select-nodes"),o=he.select_things_group(t.select_edges_group||"select-edges-group","select-edges"),a=he.delete_things(n,"delete-nodes",e);return a.preDelete(function(t){var n=a.parent(),r=n.child("delete-edges");return r?Promise.resolve(void 0).then(function(){var e=n.edgeGroup().all().filter(function(e){return-1!==t.indexOf(n.edgeSource()(e))||-1!==t.indexOf(n.edgeTarget()(e))}).map(n.edgeKey());return o.set_changed(e),r.deleteSelection().then(function(){return t})}):null}),a},he.label_things=function(o){o=o||{};var a,r,t=he.select_things_group(o.select_group,o.select_type),i=he.label_things_group(o.label_group,o.label_type),u=[];function n(r){return function(t,e){var n=o.thing_box(t);o.hide_thing_label(t,!0),he.edit_text(r.g(),{text:e.text||o.thing_label(t)||o.default_label,align:o.align,box:n,selectText:e.selectText,accept:function(e){return o.accept(t,e)},finally:function(){o.hide_thing_label(t,!1),a.focus()}})}}function c(e,t,n){var r=o.find_thing(u[0],e,t);r.empty()?console.error("couldn't find thing '"+u[0]+"'!"):1r.cola.y?"out":"in";case"BT":return ur.cola.x?"out":"in";case"RL":return iK.dragSize()&&K.conduct().startDragEdge){if(!K.conduct().startDragEdge(v))return K.conduct().invalidSourceMessage&&(n=K.conduct().invalidSourceMessage(v),console.log(n),i.negativeTip&&i.negativeTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?v.port:v.node)),o(),!0;v.started=!0}return!1}var K=he.behavior("highlight-paths",{add_behavior:function(a,e,t,n){var r=a.child("select-nodes");r&&K.clickCreatesNodes()&&r.clickBackgroundClears(!1),e.on("mousedown.draw-graphs",function(e){if(de.event.stopPropagation(),K.dragCreatesEdges())if(i.tipsDisable&&i.tipsDisable.forEach(function(e){e.hideTip().disabled(!0)}),K.usePorts()){var t;if(!(t="object"==typeof K.usePorts()&&K.usePorts().eventPort?K.usePorts().eventPort():a.getPort(a.nodeKey.eval(e),null,"out")||a.getPort(a.nodeKey.eval(e),null,"in")))return;v={node:e,port:t},_=[{source:w(t)}]}else _=[{source:{x:(v={node:e}).node.cola.x,y:v.node.cola.y}}]}).on("mousemove.draw-graphs",function(e){var n;if(de.event.stopPropagation(),v){var t=he.event_coords(a);if(S(t))return;var r=y;if(e===v.node)K.conduct().invalidTargetMessage&&console.log(K.conduct().invalidTargetMessage(v,v)),y=null,_[0].target=null;else if(K.usePorts()){var o;o="object"==typeof K.usePorts()&&K.usePorts().eventPort?K.usePorts().eventPort():a.getPort(a.nodeKey.eval(e),null,"in")||a.getPort(a.nodeKey.eval(e),null,"out"),y=o?{node:e,port:o}:null}else y&&e===y.node||(y={node:e});if(K.conduct().changeDragTarget)(K.usePorts()?(r&&r.port)!==(y&&y.port):(r&&r.node)!==(y&&y.node))&&(K.conduct().changeDragTarget(v,y)?(u=null,i.negativeTip&&i.negativeTip.hideTip(),n=K.conduct().validTargetMessage&&K.conduct().validTargetMessage()||"matches",i.positiveTip&&i.positiveTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?y.port:y.node),m=!0):(u=K.usePorts()?y&&y.port:y&&y.node,y&&K.conduct().invalidTargetMessage&&(i.positiveTip&&i.positiveTip.hideTip(),n=K.conduct().invalidTargetMessage(v,y),console.log(n),i.negativeTip&&i.negativeTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?y.port:y.node)),m=!1));y?y.port?_[0].target=w(o):_[0].target={x:e.cola.x,y:e.cola.y}:_[0].target={x:t[0],y:t[1]},b(),k()}}).on("mouseup.draw-graphs",function(e){if(u=null,i.negativeTip&&i.negativeTip.hideTip(!0),i.positiveTip&&i.positiveTip.hideTip(!0),i.tipsDisable&&i.tipsDisable.forEach(function(e){e.disabled(!1)}),v&&m){var t;t=K.conduct().finishDragEdge?K.conduct().finishDragEdge(v,y):Promise.resolve(!0);var n=v,r=y;t.then(function(e){e&&function(t,e,n){if(!K.edgeCrossfilter())throw new Error("need edgeCrossfilter");var r,o={},a=K.addEdge()||P;o[d]=A(),o[p]="",K.conduct().detectReversedEdge&&K.conduct().detectReversedEdge(o,e.port,n.port)?(o[f]=n.node.orig.key,o[g]=e.node.orig.key,r=e,e=n,n=r):(o[f]=e.node.orig.key,o[g]=n.node.orig.key),a(o,e.port,n.port).then(function(e){e&&(s.new_edge(o[d],e[f],e[g]),K.edgeCrossfilter().add([e]),c.set_changed([],!1),l.set_changed([e[d]],!1),t.redrawGroup())})}(a,n,r)})}else v&&K.conduct().cancelDragEdge&&K.conduct().cancelDragEdge(v);o(),k()}),a.svg().on("mousedown.draw-graphs",function(){v=null}).on("mousemove.draw-graphs",function(){if(v){var e=he.event_coords(a);if(u=null,S(e))return;K.conduct().dragCanvas&&K.conduct().dragCanvas(v,e),K.conduct().changeDragTarget&&y&&K.conduct().changeDragTarget(v,null),y=null,_[0].target={x:e[0],y:e[1]},b(),k()}}).on("mouseup.draw-graphs",function(){u=null,i.negativeTip&&i.negativeTip.hideTip(!0),i.positiveTip&&i.positiveTip.hideTip(!0),i.tipsDisable&&i.tipsDisable.forEach(function(e){e.disabled(!1)}),v?(K.conduct().cancelDragEdge&&K.conduct().cancelDragEdge(v),o()):de.event.target===this&&K.clickCreatesNodes()&&E(a,he.event_coords(a)),k()}),x||(x=a.g().append("g").attr("class","draw-graphs"))},remove_behavior:function(e,t,n,r){t.on("mousedown.draw-graphs",null).on("mousemove.draw-graphs",null).on("mouseup.draw-graphs",null),e.svg().on("mousedown.draw-graphs",null).on("mousemove.draw-graphs",null).on("mouseup.draw-graphs",null)}});return K.nodeCrossfilter=ye(i.nodeCrossfilter),K.edgeCrossfilter=ye(i.edgeCrossfilter),K.usePorts=ye(null),K.clickCreatesNodes=ye(!0),K.dragCreatesEdges=ye(!0),K.dragSize=ye(5),K.crossSize=ye(15),K.crossWidth=ye(5),K.conduct=ye({}),K.addNode=ye(null),K.addEdge=ye(null),K.createNode=function(e,t){E(K.parent(),e,t)},K},he.match_ports=function(n,a){var u,c,i;function l(e,t){return e.map(function(e){return e.state=t,n.portNodeKey.eval(e)})}function r(e){var t=l(i,"small");e.port.state="small",t.push(n.portNodeKey.eval(e.port)),a.animateNodes(t)}function o(t,n){return c.some(function(e){return 0<=t.edges.indexOf(e)&&0<=n.edges.indexOf(e)})}function s(e,t){return(d.allowParallel()||!o(e,t))&&d.isValid()(e,t)}n.on("data.match-ports",function(e,t,n,r,o,a,i){a,u=i,c=o}),n.on("transitionsStarted",function(){a.enableHover(!0)});var d={isValid:ye(function(e,t){return t!==e&&t.name===e.name}),whyInvalid:ye(function(e,t){return t===e?"can't connect port to itself":t.name!==e.name&&"must connect ports of the same type"}),allowParallel:ye(!1),hoverPort:function(e){if(e){if((i=u.filter(s.bind(null,e))).length)return l(i,"shimmer-medium")}else if(i)return l(i,"small");return null},startDragEdge:function(e){var t=l(i=u.filter(s.bind(null,e.port)),"shimmer");return i.length&&(a.enableHover(!1),e.port.state="large",t.push(n.portNodeKey.eval(e.port)),a.animateNodes(t)),console.log("valid targets",t),0!==i.length},invalidSourceMessage:function(e){return"no valid matches for this port"},changeDragTarget:function(e,t){var n,r,o=t&&s(e.port,t.port);return o?(n=l(i,"small"),t.port.state="large"):(n=l(i,"small"),r=a.animateNodes(n),n=l(i,"shimmer")),a.animateNodes(n,r),o},validTargetMessage:function(e,t){return"it's a match!"},invalidTargetMessage:function(e,t){return n=e.port,r=t.port,!d.allowParallel()&&o(n,r)?"can't connect two edges between the same two ports":d.whyInvalid()(n,r);var n,r},finishDragEdge:function(e,t){return a.enableHover(!0),r(e),Promise.resolve(s(e.port,t.port))},cancelDragEdge:function(e){return a.enableHover(!0),r(e),!0}};return d},he.match_opposites=function(a,e,i){var u,c,l;function s(e){return{x:e.node.cola.x+e.pos.x,y:e.node.cola.y+e.pos.y}}function r(t,n){return(d.allowParallel()||!c.some(function(e){return 0<=t.edges.indexOf(e)&&0<=n.edges.indexOf(e)}))&&d.isValid()(t,n)}function o(e,t){t.forEach(function(e){e.edges.forEach(function(e){e.deleting=0})}),e&&e.port.edges.forEach(function(e){e.deleting=0})}i=Object.assign({multiplier:2,ease:de.ease("cubic")},i),a.cascade(100,!0,f(function(e){return i.ease(e.deleting||0)},e,t)),a.on("data.match-opposites",function(e,t,n,r,o,a,i){a,u=i,c=o});var d={isValid:ye(function(e,t){return"in"===a.portName.eval(e)^"in"===a.portName.eval(t)}),allowParallel:ye(!1),hoverPort:function(e){},startDragEdge:function(e){return l=u.filter(r.bind(null,e.port)),console.log("valid targets",l.map(a.portNodeKey.eval)),0!==l.length},dragCanvas:function(e,n){var t=l.map(function(e){var t=s(e);return{distance:Math.hypot(n[0]-t.x,n[1]-t.y),port:e}}).sort(function(e,t){return e.distance-t.distance}),r=s(t[0].port),o=s(e.port);t.forEach(function(t){t.port.edges.forEach(function(e){e.deleting=1-i.multiplier*t.distance/Math.hypot(r.x-o.x,r.y-o.y)})}),e.port.edges.forEach(function(e){e.deleting=1-i.multiplier*t[0].distance/Math.hypot(r.x-o.x,r.y-o.y)}),a.refresh()},changeDragTarget:function(e,t){var n=t&&r(e.port,t.port);return n&&(t.port.edges.forEach(function(e){e.deleting=1}),e.port.edges.forEach(function(e){e.deleting=1}),o(null,l.filter(function(e){return e!==t.port})),a.refresh()),n},finishDragEdge:function(e,t){if(r(e.port,t.port)){if(o(null,l.filter(function(e){return e!==t.port})),i.delete_edges){var n=e.port.edges.map(a.edgeKey.eval).concat(t.port.edges.map(a.edgeKey.eval));return i.delete_edges.deleteSelection(n)}return Promise.resolve(!0)}return o(e,l),Promise.resolve(!1)},cancelDragEdge:function(e){return o(e,l),!0},detectReversedEdge:function(e,t,n){return"in"===a.portName.eval(t)}};return d},he.wildcard_ports=function(e){var a=e.diagram,r=e.get_type||function(e){return e.orig.value.type},c=e.set_type||function(e,t){e.orig.value.type=t.orig.value.type},i=e.get_name||function(e){return e.orig.value.name},l=e.is_wild||function(e){return e.orig.value.wild},s=e.update_ports||function(){},u=e.get_linked||function(){return[]};function d(e,t){if(!a)return[];var n=a.nodeKey.eval(e),r=i(t),o=(u(e)||[]).find(function(e){return e.includes(r)});return o?o.filter(function(e){return e!==r}).map(function(e){return a.getPort(n,null,e)}):[]}function f(e){return e.every(function(e){return 0===e.edges.length})}return{isValid:function(e,t){return null===r(e)^null===r(t)||null!==r(e)&&r(e)===r(t)},whyInvalid:function(e,t){return null===r(e)&&null===r(t)?"can't connect wildcard to wildcard":r(e)!==r(t)&&"the types of ports must match"},copyLinked:function(e,t){d(e,t).forEach(function(e){c(e,t)})},copyType:function(e,t,n){return null===r(t)?(c(t,n),this.copyLinked(t.node,t),s()):null===r(n)&&(c(n,t),this.copyLinked(n.node,n),s()),Promise.resolve(e)},resetTypes:function(e){var u=a;return 2===arguments.length&&(u=e,e=arguments[1]),e.forEach(function(e){var t=u.getWholeEdge(e),n=u.edgeSourcePortName.eval(t),r=u.edgeTargetPortName.eval(t),o=!1,a=u.getPort(u.nodeKey.eval(t.source),null,n),i=d(t.source,a);l(a)&&1===a.edges.length&&f(i)&&(c(a,null),i.forEach(function(e){c(e,null),o=!0})),a=u.getPort(u.nodeKey.eval(t.target),null,r),i=d(t.target,a),l(a)&&1===a.edges.length&&f(i)&&(c(a,null),i.forEach(function(e){c(e,null),o=!0})),o&&s()}),Promise.resolve(e)}}},he.symbol_port_style=function(){var s,d,o,f={};function g(e){return e.named?e.name:f.parent().edgeKey.eval(e.edges[0])}function h(e){var t=f.color.eval(e);return t?f.colorScale()?f.colorScale()(t):t:"none"}function p(e){var t=f.portPosition(e);return"translate("+t.x+","+t.y+")"}function v(e){f.symbolScale()||f.symbolScale(de.scale.ordinal().range(de.shuffle(f.content().enum())));var t=f.symbol.eval(e);return t&&(f.symbolScale()?f.symbolScale()(t):t)}function y(e){return e.vec[0]<0}function m(e){switch(e.state){case"large":return f.largeRadius.eval(e);case"medium":return f.mediumRadius.eval(e);case"small":default:return f.smallRadius.eval(e)}}function x(e){return/-medium$/.test(e.state)?f.mediumRadius.eval(e):f.largeRadius.eval(e)}function _(e){var t,n;return f.outlineFill.eval(e)?(t=f.outlineFillScale()||ve,n=f.outlineFill.eval(e)):(t=f.parent().nodeFillScale()||ve,n=f.parent().nodeFill.eval(e.node)),"none"===n?"none":t(n)}function b(e){return f.outlineStroke.eval(e)||f.parent().nodeStroke.eval(e.node)}function w(e){var t=f.outlineStrokeWidth.eval(e);return"number"==typeof t?t:f.parent().nodeStrokeWidth.eval(e.node)}return f.symbolScale=ye(null),f.colorScale=ye(de.scale.ordinal().range(de.shuffle(["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"]))),f.symbol=f.portSymbol=ye(g,!1),f.color=f.portColor=ye(g,!1),f.outline=ye(he.symbol_port_style.outline.circle()),f.content=ye(he.symbol_port_style.content.d3symbol()),f.smallRadius=f.portRadius=ye(7),f.mediumRadius=f.portHoverNodeRadius=ye(10),f.largeRadius=f.portHoverPortRadius=ye(14),f.displacement=f.portDisplacement=ye(2),f.outlineFillScale=f.portBackgroundScale=ye(null),f.outlineFill=f.portBackgroundFill=ye(null),f.outlineStroke=f.portBackgroundStroke=ye(null),f.outlineStrokeWidth=f.portBackgroundStrokeWidth=ye(null),f.padding=f.portPadding=ye(2),f.label=f.portLabel=f.portText=ye(function(e){return e.name}),f.portLabelPadding=ye({x:5,y:5}),f.cascade=be(f),f.portPosition=function(e){var t=Math.hypot(e.pos.x,e.pos.y),n=e.pos.x/t,r=e.pos.y/t,o=f.displacement.eval(e);return{x:e.pos.x+o*n,y:e.pos.y+o*r}},f.animateNodes=function(e,t){var n=de.set(e),r=d.filter(function(e){return n.has(f.parent().nodeKey.eval(e))}),o=f.parent().selectNodePortsOfStyle(r,f.parent().portStyle.nameOf(this)),a=o.filter(function(e){return/^shimmer/.test(e.state)}),i=o.filter(function(e){return!/^shimmer/.test(e.state)});function u(){var e=a.transition().duration(1e3).ease("bounce");e.selectAll(".port-outline").call(f.outline().draw(function(e){return x(e)+f.portPadding.eval(e)})),e.selectAll(".port-symbol").call(f.content().draw(v,x));var t=e.transition().duration(1e3).ease("sin");t.selectAll(".port-outline").call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)})),t.selectAll(".port-symbol").call(f.content().draw(v,f.smallRadius.eval)),t.each("end",u)}a.size()&&(t?t.each("end",u):u());var c=i.transition().duration(250);function l(e){return"large"===e.state||"medium"===e.state}return c.selectAll(".port-outline").call(f.outline().draw(function(e){return m(e)+f.portPadding.eval(e)})),c.selectAll(".port-symbol").call(f.content().draw(v,m)),c.selectAll("text.port-label").attr({opacity:function(e){return l(e)?1:0},"pointer-events":function(e){return l(e)?"auto":"none"}}),c.selectAll("rect.port-label-background").attr("opacity",function(e){return l(e)?1:0}),d.filter(function(e){var t=s[f.parent().nodeKey.eval(e)];return t&&t.some(l)}).each(function(){this.parentNode.appendChild(this)}),o.filter(function(e){return"small"!==e.state}).each(function(){this.parentNode.appendChild(this)}),c},f.eventPort=function(){var e=de.select(de.event.target.parentNode);return"g"===de.event.target.parentNode.tagName&&e.classed("port")?e.datum():null},f.drawPorts=function(e,t,n){s=t,d=n;var r=e.data(function(e){return t[f.parent().nodeKey.eval(e)]||[]},g);r.exit().remove();var o=r.enter().append("g").attr({class:"port",transform:p});r.transition("port-position").duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).attr({transform:p});var a=r.selectAll(".port-outline").data(function(e){return"none"!==_(e)?[e]:[]});a.exit().remove();var i=a.enter().append(f.outline().tag()).attr({class:"port-outline",fill:_,"stroke-width":w,stroke:b});f.outline().init&&i.call(f.outline().init),i.call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)})),a.attr({fill:_,"stroke-width":w,stroke:b}),a.transition().duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)}));o.append(f.content().tag()).attr("class","port-symbol").call(f.content().draw(v,f.smallRadius.eval));var u=r.select(".port-symbol");u.attr("fill",h),u.transition().duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).call(f.content().draw(v,f.smallRadius.eval));var c=r.selectAll("text.port-label").data(function(e){return f.portLabel.eval(e)?[e]:[]});c.exit().remove();var l=c.enter();return l.append("rect").attr({class:"port-label-background","pointer-events":"none"}),l.append("text").attr({class:"port-label","dominant-baseline":"middle","pointer-events":"none",cursor:"default",opacity:0}),c.each(function(e){e.offset=(y(e)?-1:1)*(f.largeRadius.eval(e)+f.portPadding.eval(e))}).attr({"text-anchor":function(e){return y(e)?"end":"start"},transform:function(e){return"translate("+e.offset+",0)"}}).text(f.portLabel.eval).each(function(e){e.bbox=_e(this)}),r.selectAll("rect.port-label-background").attr({x:function(e){return(e.offset<0?e.offset-e.bbox.width:e.offset)-f.portLabelPadding.eval(e).x},y:function(e){return-e.bbox.height/2-f.portLabelPadding.eval(e).y},width:function(e){return e.bbox.width+2*f.portLabelPadding.eval(e).x},height:function(e){return e.bbox.height+2*f.portLabelPadding.eval(e).y},fill:"white",opacity:0}),f},f.enableHover=function(e){if(!o&&f.parent()){var t=f.parent().child("draw-graphs");t&&(o=t.conduct())}var n="grow-ports-"+f.parent().portStyle.nameOf(this);return e?(d.on("mouseover."+n,function(e){var t=f.parent().nodeKey.eval(e),n=f.eventPort();s[t]&&s[t].forEach(function(e){e.state=e===n?"large":n?"small":"medium"});var r=o&&o.hoverPort(n)||[];r.push(t),f.animateNodes(r)}),d.on("mouseout."+n,function(e){var t=f.parent().nodeKey.eval(e);s[t]&&s[t].forEach(function(e){e.state="small"});var n=o&&o.hoverPort(null)||[];n.push(t),f.animateNodes(n)})):(d.on("mouseover."+n,null),d.on("mouseout."+n,null)),f},f.parent=ye(null),f},he.symbol_port_style.outline={},he.symbol_port_style.outline.circle=function(){return{tag:function(){return"circle"},draw:function(t){return function(e){e.attr("r",function(e){return t(e)})}}}},he.symbol_port_style.outline.square=function(){return{tag:function(){return"rect"},init:function(e){},draw:function(t){return function(e){e.attr({x:function(e){return-t(e)},y:function(e){return-t(e)},width:function(e){return 2*t(e)},height:function(e){return 2*t(e)}})}}}},he.symbol_port_style.outline.arrow=function(){var r=.75-Math.PI/8,o={tag:function(){return"path"},init:function(e){},draw:function(n){return function(e){e.attr("d",function(e){var t=n(e);return!o.outie()||o.outie()(e.orig)?"M"+-r*t+","+-t+" h"+t+" l"+t+","+t+" l"+-t+","+t+" h"+-t+" a"+t+","+t+" 0 1,1 0,"+-2*t:"M"+-(2-r)*t+","+-t+" h"+2*t+" a"+t+","+t+" 0 1,1 0,"+2*t+" h"+-2*t+" l"+t+","+-t+" l"+-t+","+-t})}},outie:ye(null)};return o},he.symbol_port_style.content={},he.symbol_port_style.content.d3symbol=function(){return{tag:function(){return"path"},enum:function(){return de.svg.symbolTypes},draw:function(r,o){return function(e){e.attr("d",function(e){var t=r(e),n=o(e);return de.svg.symbol().type(t).size(n*n)()}),e.attr("transform",function(e){switch(r(e)){case"triangle-up":return"translate(0, -1)";case"triangle-down":return"translate(0, 1)";default:return null}})}}}},he.symbol_port_style.content.letter=function(){return{tag:function(){return"text"},enum:function(){return de.range(65,91).map(String.fromCharCode)},draw:function(t,n){return function(e){e.text(t).attr({"dominant-baseline":"middle","text-anchor":"middle"}),e.each(function(e){e.symbol_size||(e.symbol_size=_e(this))}),e.attr("transform",function(e){return"scale("+2*n(e)/e.symbol_size.height+") translate("+[0,2].join(",")+")"})}}}},he.load_graph=function(){function e(e){return e?e.replace(/\?.*/,""):null}var t,n,r;if(t=arguments[0],3===arguments.length)n=arguments[1],r=arguments[2];else{if(2!==arguments.length)throw new Error("need two or three arguments");r=arguments[1]}n?queue().defer(de.json,t).defer(de.json,n).await(function(e,t,n){e?r(e,null):r(null,{nodes:t.results,edges:n.results})}):/\.json$/.test(e(t))?de.json(t,r):/\.gv|\.dot$/.test(e(t))?de.text(t,function(e,t,n){if(t)e(t,null);else{var r,o;if(graphlibDot.parse){var a=graphlibDot.parse(n),i=a.nodes();r=new Array(i.length),i.forEach(function(e,t){var n=r[t]=a._nodes[i[t]];n.id=t,n.name=e});var u=a.edges();o=[],u.forEach(function(e){var t=a._edges[e];o.push(Object.assign({},t.value,{source:a._nodes[t.u].id,target:a._nodes[t.v].id,sourcename:t.u,targetname:t.v}))})}else a=graphlibDot.read(n),i=a.nodes(),r=new Array(i.length),i.forEach(function(e,t){var n=r[t]=a._nodes[i[t]];n.id=t,n.name=e}),o=[],a.edges().forEach(function(e){o.push(Object.assign({},e.value,{source:a._nodes[e.v].id,target:a._nodes[e.w].id,sourcename:e.v,targetname:e.w}))});e(null,{nodes:r,links:o})}}.bind(null,r)):/\.psv$/.test(e(t))?de.dsv("|","text/plain")(t,p.bind(null,r)):/\.csv$/.test(e(t))&&de.csv(t,p.bind(null,r))},he.munge_graph=function(t,e,n,r){var o,a,i=e||"name",u=n||"sourcename",c=r||"targetname";if(!w(t)){var l=["database","response"],s=l.findIndex(function(e){return t[e]&&w(t[e])});if(s<0)throw new Error("couldn't find the data!");t=t[l[s]]}function d(t,e){return e.filter(function(e){return!!t[e]})}a=t.edges||t.links,o=t.nodes||t.vertices;var f=a[0];if(void 0===f[u]){var g=n?[n]:["source_ecomp_uid","node1","source","tail"],h=r?[r]:["target_ecomp_uid","node2","target","head"],p=["edge"];if(f.node0&&f.node1)u="node0",c="node1";else{var v=d(f,g);if(!v.length){if((s=p.findIndex(function(e){return f[e]&&d(f[e],g).length}))<0)throw n?new Error("sourceattr "+u+" didn't work"):new Error("didn't find any source attr");a=a.map(function(e){return e[p[s]]}),v=d(f=a[0],g)}if(1(u.valuesByAttr?1:0)){var d=i.shift(),f=[],g=[],t=e.map(function(e){var t,n=e[u.nestKey],r=u.nestKeysUnique?n:A();if(r&&(u.ancestorKeys?(s=s||{},d&&(s[d]=n),t=Object.assign({},s)):t={},t[u.nodeKey]=r,u.label&&u.labelFun&&(t[u.label]=u.labelFun(n,d,e)),u.level&&(t[u.level]=l+1),f.push(t),c)){var o={};o[u.edgeSource]=c,o[u.edgeTarget]=r,g.push(o)}var a=u.valuesByAttr?e[i[0]]:e.values;return v(a,i.slice(0),u,r,l+1,Object.assign({},s))});return{nodes:Array.prototype.concat.apply(f,t.map(ge.pluck("nodes"))),edges:Array.prototype.concat.apply(g,t.map(ge.pluck("edges")))}}return{nodes:e.map(function(e){return e=Object.assign({},e),u.level&&(e[u.level]=l+1),e}),edges:e.map(function(e){var t={};return t[u.edgeSource]=c,t[u.edgeTarget]=e[u.nodeKey],t})}};he.convert_tree=function(e,t,n){return n=Object.assign({nodeKey:"key",edgeKey:"key",edgeSource:"sourcename",edgeTarget:"targetname",nestKey:"key"},n),Array.isArray(e)?v(e,t,n,n.root,0,n.inherit):(t=[""].concat(t),v([e],t,n,n.root,0,n.inherit))},he.convert_nest=function(e,t,n,r,o,a,i){return he.convert_tree(e,t,{nodeKey:n,edgeSource:r,edgeTarget:o,root:a,inherit:i,ancestorKeys:!0,label:"name",labelFun:function(e,t,n){return t+":"+e},level:"_level"})},he.convert_adjacency_list=function(e,r,o){var t=Array.prototype.concat.apply([],e.map(function(n){return n[r.adjacencies].map(function(e){var t={};return o.edgeKey&&(t[o.edgeKey]=A()),t[o.edgeSource]=n[r.nodeKey],t[o.edgeTarget]=r.targetKey?e[r.targetKey]:e,o.adjacency&&(t[o.adjacency]=e),t})}));return{nodes:e,edges:t}},he.deparallelize=function(e,c,l){return{all:function(){var u={};e.all().forEach(function(e){var t=e.value[c],n=e.value[l],r=t "+n[a.nodeKey]),u.push(o)}}},remove:function(e){for(;0i&&0 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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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.dcg_nodeFixed;\n\n if(v1.fixed && typeof v.dcg_nodeFixed === 'object') {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_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, null, 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(engine.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() {\n _d3cola.start(engine.unconstrainedIterations(),\n engine.userConstraintIterations(),\n engine.allConstraintsIterations(),\n engine.gridSnapIterations());\n }\n\n function stop() {\n if(_d3cola)\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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize', 'groupConnected']\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 * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.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 switch(dir) {\n case 'LR': return {axis: 'x', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n case 'TB': return {axis: 'y', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n default: return null; // RL, BT do not appear to be possible (negative separation) (?)\n }\n }\n _flowLayout = flow;\n return this;\n },\n unconstrainedIterations: property(10),\n userConstraintIterations: property(20),\n allConstraintsIterations: property(20),\n gridSnapIterations: property(0),\n tickSize: property(1),\n groupConnected: property(false)\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.graph, args.nodes, args.edges, args.constraints);\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();\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 +{"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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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.dcg_nodeFixed;\n\n if(v1.fixed && typeof v.dcg_nodeFixed === 'object') {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_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, null, 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(engine.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() {\n _d3cola.start(engine.unconstrainedIterations(),\n engine.userConstraintIterations(),\n engine.allConstraintsIterations(),\n engine.gridSnapIterations());\n }\n\n function stop() {\n if(_d3cola)\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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize', 'groupConnected']\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 * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.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 switch(dir) {\n case 'LR': return {axis: 'x', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n case 'TB': return {axis: 'y', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n default: return null; // RL, BT do not appear to be possible (negative separation) (?)\n }\n }\n _flowLayout = flow;\n return this;\n },\n unconstrainedIterations: property(10),\n userConstraintIterations: property(20),\n allConstraintsIterations: property(20),\n gridSnapIterations: property(0),\n tickSize: property(1),\n groupConnected: property(false)\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.graph, args.nodes, args.edges, args.constraints);\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();\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/web/js/dc.graph.d3-force.worker.js b/web/js/dc.graph.d3-force.worker.js index acf875fd..03474046 100644 --- a/web/js/dc.graph.d3-force.worker.js +++ b/web/js/dc.graph.d3-force.worker.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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 @@ -25,7 +25,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 diagram. * @namespace dc_graph - * @version 0.6.0 + * @version 0.6.1 * @example * // Example chaining * diagram.width(600) @@ -35,7 +35,7 @@ */ var dc_graph = { - version: '0.6.0', + version: '0.6.1', constants: { CHART_CLASS: 'dc-graph' } diff --git a/web/js/dc.graph.d3-force.worker.js.map b/web/js/dc.graph.d3-force.worker.js.map index dfe48dd4..b6cc5fe7 100644 --- a/web/js/dc.graph.d3-force.worker.js.map +++ b/web/js/dc.graph.d3-force.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/d3_force_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.d3-force.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.0\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.d3_force_layout` is an adaptor for d3-force layouts in dc.graph.js\n * @class d3_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3_force_layout}\n **/\ndc_graph.d3_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3.layout.force()\n .size([options.width, options.height]);\n\n _simulation.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fixed = true;\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n } else v1.fixed = false;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, 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.source.id = nodeIDs[e1.source.dcg_nodeKey];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.target.id = nodeIDs[e1.target.dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.nodes(_wnodes);\n _simulation.links(_wedges);\n }\n\n function start() {\n installForces();\n runSimulation(_options.iterations);\n }\n\n function stop() {\n if(_simulation)\n _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fixed = false;\n _nodes[key].x = data[key].x;\n _nodes[key].y = data[key].y;\n }\n });\n }\n\n function installForces() {\n if(_paths === null)\n _simulation.gravity(_options.gravityStrength)\n .charge(_options.initialCharge);\n else {\n if(_options.fixOffPathNodes) {\n var nodesOnPath = d3.set(); // nodes on path\n _paths.forEach(function(path) {\n path.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(!nodesOnPath.has(key)) {\n _nodes[key].fixed = true;\n } else {\n _nodes[key].fixed = false;\n }\n });\n }\n\n // enlarge charge force to separate nodes on paths\n _simulation.charge(_options.chargeForce);\n }\n };\n\n function runSimulation(iterations) {\n if(!iterations) {\n dispatchState('end');\n return;\n }\n _simulation.start();\n for (var i = 0; i < 300; ++i) {\n _simulation.tick();\n if(_paths)\n applyPathAngleForces();\n }\n _simulation.stop();\n }\n\n function applyPathAngleForces() {\n function _dot(v1, v2) { return v1.x*v2.x + v1.y*v2.y; };\n function _len(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n function _angle(v1, v2) {\n var a = _dot(v1, v2) / (_len(v1)*_len(v2));\n a = Math.min(a, 1);\n a = Math.max(a, -1);\n return Math.acos(a);\n };\n // perpendicular unit length vector\n function _pVec(v) {\n var xx = -v.y/v.x, yy = 1;\n var length = _len({x: xx, y: yy});\n return {x: xx/length, y: yy/length};\n };\n\n function updateNode(node, angle, pVec, alpha) {\n node.x += pVec.x*(Math.PI-angle)*alpha;\n node.y += pVec.y*(Math.PI-angle)*alpha;\n }\n\n _paths.forEach(function(path) {\n if(path.length < 3) return; // at least 3 nodes (and 2 edges): A->B->C\n for(var i = 1; i < path.length-1; ++i) {\n var current = _nodes[path[i]];\n var prev = _nodes[path[i-1]];\n var next = _nodes[path[i+1]];\n\n // calculate the angle\n var vPrev = {x: prev.x - current.x, y: prev.y - current.y};\n var vNext = {x: next.x - current.x, y: next.y - current.y};\n\n var angle = _angle(vPrev, vNext); // angle in [0, PI]\n\n var pvecPrev = _pVec(vPrev);\n var pvecNext = _pVec(vNext);\n\n // make sure the perpendicular vector is in the\n // direction that makes the angle more towards 180 degree\n // 1. calculate the middle point of node 'prev' and 'next'\n var mid = {x: (prev.x+next.x)/2.0, y: (prev.y+next.y)/2.0};\n // 2. calculate the vectors: 'prev' pointing to 'mid', 'next' pointing to 'mid'\n var prev_mid = {x: mid.x-prev.x, y: mid.y-prev.y};\n var next_mid = {x: mid.x-next.x, y: mid.y-next.y};\n // 3. the 'correct' vector: the angle between pvec and prev_mid(next_mid) should\n // be an obtuse angle\n pvecPrev = _angle(prev_mid, pvecPrev) >= Math.PI/2.0 ? pvecPrev : {x: -pvecPrev.x, y: -pvecPrev.y};\n pvecNext = _angle(next_mid, pvecNext) >= Math.PI/2.0 ? pvecNext : {x: -pvecNext.x, y: -pvecNext.y};\n\n // modify positions of prev and next\n updateNode(prev, angle, pvecPrev, _options.angleForce);\n updateNode(next, angle, pvecNext, _options.angleForce);\n }\n\n });\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.02),\n chargeForce: property(-500),\n gravityStrength: property(1.0),\n initialCharge: property(-400),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n return engine;\n};\n\ndc_graph.d3_force_layout.scripts = ['d3.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.graph, args.nodes, args.edges, args.constraints);\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();\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 +{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/d3_force_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.d3-force.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.d3_force_layout` is an adaptor for d3-force layouts in dc.graph.js\n * @class d3_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3_force_layout}\n **/\ndc_graph.d3_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3.layout.force()\n .size([options.width, options.height]);\n\n _simulation.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fixed = true;\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n } else v1.fixed = false;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, 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.source.id = nodeIDs[e1.source.dcg_nodeKey];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.target.id = nodeIDs[e1.target.dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.nodes(_wnodes);\n _simulation.links(_wedges);\n }\n\n function start() {\n installForces();\n runSimulation(_options.iterations);\n }\n\n function stop() {\n if(_simulation)\n _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fixed = false;\n _nodes[key].x = data[key].x;\n _nodes[key].y = data[key].y;\n }\n });\n }\n\n function installForces() {\n if(_paths === null)\n _simulation.gravity(_options.gravityStrength)\n .charge(_options.initialCharge);\n else {\n if(_options.fixOffPathNodes) {\n var nodesOnPath = d3.set(); // nodes on path\n _paths.forEach(function(path) {\n path.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(!nodesOnPath.has(key)) {\n _nodes[key].fixed = true;\n } else {\n _nodes[key].fixed = false;\n }\n });\n }\n\n // enlarge charge force to separate nodes on paths\n _simulation.charge(_options.chargeForce);\n }\n };\n\n function runSimulation(iterations) {\n if(!iterations) {\n dispatchState('end');\n return;\n }\n _simulation.start();\n for (var i = 0; i < 300; ++i) {\n _simulation.tick();\n if(_paths)\n applyPathAngleForces();\n }\n _simulation.stop();\n }\n\n function applyPathAngleForces() {\n function _dot(v1, v2) { return v1.x*v2.x + v1.y*v2.y; };\n function _len(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n function _angle(v1, v2) {\n var a = _dot(v1, v2) / (_len(v1)*_len(v2));\n a = Math.min(a, 1);\n a = Math.max(a, -1);\n return Math.acos(a);\n };\n // perpendicular unit length vector\n function _pVec(v) {\n var xx = -v.y/v.x, yy = 1;\n var length = _len({x: xx, y: yy});\n return {x: xx/length, y: yy/length};\n };\n\n function updateNode(node, angle, pVec, alpha) {\n node.x += pVec.x*(Math.PI-angle)*alpha;\n node.y += pVec.y*(Math.PI-angle)*alpha;\n }\n\n _paths.forEach(function(path) {\n if(path.length < 3) return; // at least 3 nodes (and 2 edges): A->B->C\n for(var i = 1; i < path.length-1; ++i) {\n var current = _nodes[path[i]];\n var prev = _nodes[path[i-1]];\n var next = _nodes[path[i+1]];\n\n // calculate the angle\n var vPrev = {x: prev.x - current.x, y: prev.y - current.y};\n var vNext = {x: next.x - current.x, y: next.y - current.y};\n\n var angle = _angle(vPrev, vNext); // angle in [0, PI]\n\n var pvecPrev = _pVec(vPrev);\n var pvecNext = _pVec(vNext);\n\n // make sure the perpendicular vector is in the\n // direction that makes the angle more towards 180 degree\n // 1. calculate the middle point of node 'prev' and 'next'\n var mid = {x: (prev.x+next.x)/2.0, y: (prev.y+next.y)/2.0};\n // 2. calculate the vectors: 'prev' pointing to 'mid', 'next' pointing to 'mid'\n var prev_mid = {x: mid.x-prev.x, y: mid.y-prev.y};\n var next_mid = {x: mid.x-next.x, y: mid.y-next.y};\n // 3. the 'correct' vector: the angle between pvec and prev_mid(next_mid) should\n // be an obtuse angle\n pvecPrev = _angle(prev_mid, pvecPrev) >= Math.PI/2.0 ? pvecPrev : {x: -pvecPrev.x, y: -pvecPrev.y};\n pvecNext = _angle(next_mid, pvecNext) >= Math.PI/2.0 ? pvecNext : {x: -pvecNext.x, y: -pvecNext.y};\n\n // modify positions of prev and next\n updateNode(prev, angle, pvecPrev, _options.angleForce);\n updateNode(next, angle, pvecNext, _options.angleForce);\n }\n\n });\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.02),\n chargeForce: property(-500),\n gravityStrength: property(1.0),\n initialCharge: property(-400),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n return engine;\n};\n\ndc_graph.d3_force_layout.scripts = ['d3.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.graph, args.nodes, args.edges, args.constraints);\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();\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/web/js/dc.graph.d3v4-force.worker.js b/web/js/dc.graph.d3v4-force.worker.js index 3c376ec4..c86c93b2 100644 --- a/web/js/dc.graph.d3v4-force.worker.js +++ b/web/js/dc.graph.d3v4-force.worker.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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 @@ -25,7 +25,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 diagram. * @namespace dc_graph - * @version 0.6.0 + * @version 0.6.1 * @example * // Example chaining * diagram.width(600) @@ -35,7 +35,7 @@ */ var dc_graph = { - version: '0.6.0', + version: '0.6.1', constants: { CHART_CLASS: 'dc-graph' } diff --git a/web/js/dc.graph.d3v4-force.worker.js.map b/web/js/dc.graph.d3v4-force.worker.js.map index 912a40a5..1bf1d41d 100644 --- a/web/js/dc.graph.d3v4-force.worker.js.map +++ b/web/js/dc.graph.d3v4-force.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/d3v4_force_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.d3v4-force.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.0\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.d3v4_force_layout` is an adaptor for d3-force version 4 layouts in dc.graph.js\n * @class d3v4_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3v4_force_layout}\n **/\ndc_graph.d3v4_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3v4.forceSimulation()\n .force('link', d3v4.forceLink())\n .force('center', d3v4.forceCenter(options.width / 2, options.height / 2))\n .force('gravityX', d3v4.forceX(options.width / 2).strength(_options.gravityStrength))\n .force('gravityY', d3v4.forceY(options.height / 2).strength(_options.gravityStrength))\n .force('collision', d3v4.forceCollide(_options.collisionRadius))\n .force('charge', d3v4.forceManyBody())\n .stop();\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fx = v.dcg_nodeFixed.x;\n v1.fy = v.dcg_nodeFixed.y;\n } else v1.fx = v1.fy = null;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.source = nodeIDs[_nodes[e.dcg_edgeSource].dcg_nodeKey];\n e1.target = nodeIDs[_nodes[e.dcg_edgeTarget].dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.force('straighten', null);\n _simulation.nodes(_wnodes);\n _simulation.force('link').links(_wedges);\n }\n\n function start() {\n _dispatch.start();\n installForces(_paths);\n runSimulation(_options.iterations);\n }\n\n function stop() {\n // not running asynchronously, no _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fx = data[key].x;\n _nodes[key].fy = data[key].y;\n }\n });\n }\n function installForces(paths) {\n if(paths)\n paths = paths.filter(function(path) {\n return path.nodes.every(function(nk) { return _nodes[nk]; });\n });\n if(paths === null || !paths.length) {\n _simulation.force('charge').strength(_options.initialCharge);\n } else {\n var nodesOnPath;\n if(_options.fixOffPathNodes) {\n nodesOnPath = d3.set();\n paths.forEach(function(path) {\n path.nodes.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n }\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(_options.fixOffPathNodes && !nodesOnPath.has(key)) {\n _nodes[key].fx = _nodes[key].x;\n _nodes[key].fy = _nodes[key].y;\n } else {\n _nodes[key].fx = null;\n _nodes[key].fy = null;\n }\n });\n\n _simulation.force('charge').strength(_options.chargeForce);\n _simulation.force('straighten', d3v4.forceStraightenPaths()\n .id(function(n) { return n.dcg_nodeKey; })\n .angleForce(_options.angleForce)\n .pathNodes(function(p) { return p.nodes; })\n .pathStrength(function(p) { return p.strength; })\n .paths(paths));\n }\n };\n\n function runSimulation(iterations) {\n _simulation.alpha(1);\n for (var i = 0; i < iterations; ++i) {\n _simulation.tick();\n dispatchState('tick');\n }\n dispatchState('end');\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3v4-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength', 'collisionRadius',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.01),\n chargeForce: property(-600),\n gravityStrength: property(0.3),\n collisionRadius: property(8),\n initialCharge: property(-100),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n engine.pathStraightenForce = engine.angleForce;\n return engine;\n};\n\ndc_graph.d3v4_force_layout.scripts = ['d3.js', 'd3v4-force.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.graph, args.nodes, args.edges, args.constraints);\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();\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 +{"version":3,"sources":["src/core.js","src/generate_objects.js","src/graphviz_attrs.js","src/d3v4_force_layout.js","src/webworker_message.js"],"names":[],"mappings":"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","file":"dc.graph.d3v4-force.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [ranksep=40]\n **/\n ranksep: property(40)\n };\n};\n","/**\n * `dc_graph.d3v4_force_layout` is an adaptor for d3-force version 4 layouts in dc.graph.js\n * @class d3v4_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3v4_force_layout}\n **/\ndc_graph.d3v4_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3v4.forceSimulation()\n .force('link', d3v4.forceLink())\n .force('center', d3v4.forceCenter(options.width / 2, options.height / 2))\n .force('gravityX', d3v4.forceX(options.width / 2).strength(_options.gravityStrength))\n .force('gravityY', d3v4.forceY(options.height / 2).strength(_options.gravityStrength))\n .force('collision', d3v4.forceCollide(_options.collisionRadius))\n .force('charge', d3v4.forceManyBody())\n .stop();\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fx = v.dcg_nodeFixed.x;\n v1.fy = v.dcg_nodeFixed.y;\n } else v1.fx = v1.fy = null;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.source = nodeIDs[_nodes[e.dcg_edgeSource].dcg_nodeKey];\n e1.target = nodeIDs[_nodes[e.dcg_edgeTarget].dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.force('straighten', null);\n _simulation.nodes(_wnodes);\n _simulation.force('link').links(_wedges);\n }\n\n function start() {\n _dispatch.start();\n installForces(_paths);\n runSimulation(_options.iterations);\n }\n\n function stop() {\n // not running asynchronously, no _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fx = data[key].x;\n _nodes[key].fy = data[key].y;\n }\n });\n }\n function installForces(paths) {\n if(paths)\n paths = paths.filter(function(path) {\n return path.nodes.every(function(nk) { return _nodes[nk]; });\n });\n if(paths === null || !paths.length) {\n _simulation.force('charge').strength(_options.initialCharge);\n } else {\n var nodesOnPath;\n if(_options.fixOffPathNodes) {\n nodesOnPath = d3.set();\n paths.forEach(function(path) {\n path.nodes.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n }\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(_options.fixOffPathNodes && !nodesOnPath.has(key)) {\n _nodes[key].fx = _nodes[key].x;\n _nodes[key].fy = _nodes[key].y;\n } else {\n _nodes[key].fx = null;\n _nodes[key].fy = null;\n }\n });\n\n _simulation.force('charge').strength(_options.chargeForce);\n _simulation.force('straighten', d3v4.forceStraightenPaths()\n .id(function(n) { return n.dcg_nodeKey; })\n .angleForce(_options.angleForce)\n .pathNodes(function(p) { return p.nodes; })\n .pathStrength(function(p) { return p.strength; })\n .paths(paths));\n }\n };\n\n function runSimulation(iterations) {\n _simulation.alpha(1);\n for (var i = 0; i < iterations; ++i) {\n _simulation.tick();\n dispatchState('tick');\n }\n dispatchState('end');\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3v4-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength', 'collisionRadius',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.01),\n chargeForce: property(-600),\n gravityStrength: property(0.3),\n collisionRadius: property(8),\n initialCharge: property(-100),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n engine.pathStraightenForce = engine.angleForce;\n return engine;\n};\n\ndc_graph.d3v4_force_layout.scripts = ['d3.js', 'd3v4-force.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.graph, args.nodes, args.edges, args.constraints);\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();\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/web/js/dc.graph.dagre.worker.js b/web/js/dc.graph.dagre.worker.js index dcb633d8..6c8fa3c4 100644 --- a/web/js/dc.graph.dagre.worker.js +++ b/web/js/dc.graph.dagre.worker.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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 @@ -25,7 +25,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 diagram. * @namespace dc_graph - * @version 0.6.0 + * @version 0.6.1 * @example * // Example chaining * diagram.width(600) @@ -35,7 +35,7 @@ */ var dc_graph = { - version: '0.6.0', + version: '0.6.1', constants: { CHART_CLASS: 'dc-graph' } diff --git a/web/js/dc.graph.dagre.worker.js.map b/web/js/dc.graph.dagre.worker.js.map index 7b33529e..0bc5fc5f 100644 --- a/web/js/dc.graph.dagre.worker.js.map +++ b/web/js/dc.graph.dagre.worker.js.map @@ -1 +1 @@ -{"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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.0\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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, nodesep: options.nodesep, ranksep: options.ranksep});\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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 /*\n dagre does not seem to accept input positions\n if(v.dcg_nodeFixed) {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n }\n */\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, null, 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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n start: function() {\n start();\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.graph, args.nodes, args.edges, args.constraints);\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();\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 +{"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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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, nodesep: options.nodesep, ranksep: options.ranksep});\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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 /*\n dagre does not seem to accept input positions\n if(v.dcg_nodeFixed) {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n }\n */\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, null, 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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n start: function() {\n start();\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.graph, args.nodes, args.edges, args.constraints);\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();\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/web/js/dc.graph.js b/web/js/dc.graph.js index 51fbbed2..fb157887 100644 --- a/web/js/dc.graph.js +++ b/web/js/dc.graph.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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 diagram. * @namespace dc_graph - * @version 0.6.0 + * @version 0.6.1 * @example * // Example chaining * diagram.width(600) @@ -38,7 +38,7 @@ */ var dc_graph = { - version: '0.6.0', + version: '0.6.1', constants: { CHART_CLASS: 'dc-graph' } @@ -9605,10 +9605,14 @@ dc_graph.expand_collapse = function(options) { dirs: arguments[3] }; } - var _keyboard, _overNode, _overDir; + var _keyboard, _overNode, _overDir, _expanded = {}; + var expanded_highlight_group = dc_graph.register_highlight_things_group(options.expanded_highlight_group || 'expanded-highlight-group'); var collapse_highlight_group = dc_graph.register_highlight_things_group(options.collapse_highlight_group || 'collapse-highlight-group'); var hide_highlight_group = dc_graph.register_highlight_things_group(options.hide_highlight_group || 'hide-highlight-group'); options.dirs = options.dirs || ['both']; + options.dirs.forEach(function(dir) { + _expanded[dir] = {}; + }); options.hideKey = options.hideKey || 'Alt'; if(options.dirs.length > 2) throw new Error('there are only two directions to expand in'); @@ -9687,13 +9691,14 @@ dc_graph.expand_collapse = function(options) { } } - function draw_stubs(diagram, node, edge) { + function draw_stubs(diagram, node, edge, n, spikes) { + if(n && _expanded[spikes.dir][diagram.nodeKey.eval(n)]) + spikes = null; var spike = node .selectAll('g.spikes') - .data(function(n) { - return (n.dcg_expand_selected && - (!n.dcg_expanded || !n.dcg_expanded[n.dcg_expand_selected.dir])) ? - [n] : []; + .data(function(n2) { + return spikes && n === n2 ? + [n2] : []; }); spike.exit().remove(); spike @@ -9703,8 +9708,8 @@ dc_graph.expand_collapse = function(options) { .selectAll('rect.spike') .data(function(n) { var key = diagram.nodeKey.eval(n); - var dir = n.dcg_expand_selected.dir, - N = n.dcg_expand_selected.n, + var dir = spikes.dir, + N = spikes.n, af = spike_directioner(diagram.layoutEngine().rankdir(), dir, N), ret = Array(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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","function property_if(pred, curr) {\n return function(o, last) {\n return pred(o) ? curr(o) : last();\n };\n}\n\nfunction property_interpolate(value, curr) {\n return function(o, last) {\n return d3.interpolate(last(o), curr(o))(value(o));\n };\n}\n\nfunction multiply_properties(pred, props, blend) {\n var props2 = {};\n for(var p in props)\n props2[p] = blend(pred, param(props[p]));\n return props2;\n}\n\nfunction conditional_properties(pred, props) {\n return multiply_properties(pred, props, property_if);\n}\n\nfunction node_edge_conditions(npred, epred, props) {\n var nprops = {}, eprops = {}, badprops = [];\n for(var p in props) {\n if(/^node/.test(p))\n nprops[p] = props[p];\n else if(/^edge/.test(p))\n eprops[p] = props[p];\n else badprops.push(p);\n }\n if(badprops.length)\n console.error('only know how to deal with properties that start with \"node\" or \"edge\"', badprops);\n var props2 = npred ? conditional_properties(npred, nprops) : {};\n if(epred)\n Object.assign(props2, conditional_properties(epred, eprops));\n return props2;\n}\n\nfunction cascade(parent) {\n return function(level, add, props) {\n for(var p in props) {\n if(!parent[p])\n throw new Error('unknown attribute ' + p);\n parent[p].cascade(level, add ? props[p] : null);\n }\n return parent;\n };\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\n// outputs the array with adjacent identical lines collapsed to one\nfunction uniq(a) {\n var ret = [];\n a.forEach(function(x, i) {\n if(i === 0 || x !== a[i-1])\n ret.push(x);\n });\n return ret;\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\nif (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n value: function(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n\n // 5. Let k be 0.\n var k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, � kValue, k, O �)).\n // d. If testResult is true, return kValue.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return kValue;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return undefined.\n return undefined;\n }\n });\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\ndc_graph.event_coords = function(diagram) {\n var bound = diagram.root().node().getBoundingClientRect();\n return diagram.invertCoord([d3.event.clientX - bound.left,\n d3.event.clientY - bound.top]);\n};\n\nfunction promise_identity(x) {\n return Promise.resolve(x);\n}\n\n// http://stackoverflow.com/questions/7044944/jquery-javascript-to-detect-os-without-a-plugin\nvar is_a_mac = navigator.platform.toUpperCase().indexOf('MAC')!==-1;\n\n// https://stackoverflow.com/questions/16863917/check-if-class-exists-somewhere-in-parent-vanilla-js\nfunction ancestor_has_class(element, classname) {\n if(d3.select(element).classed(classname))\n return true;\n return element.parentElement && ancestor_has_class(element.parentElement, classname);\n}\n\nif (typeof SVGElement.prototype.contains == 'undefined') {\n SVGElement.prototype.contains = HTMLDivElement.prototype.contains;\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\n// basically, see if it's any simpler if we start from scratch\n// (well, of course it's simpler because we have less callbacks)\n// same caveats as above\ndc_graph.undirected_dfs = function(callbacks) { // {[comp, node], nodeid, sourceid, targetid}\n return function(nodes, edges) {\n var adjacencies = edges.reduce(function(m, e) {\n var tail = callbacks.sourceid(e),\n head = callbacks.targetid(e);\n if(!m[tail]) m[tail] = [];\n if(!m[head]) m[head] = [];\n m[tail].push(head);\n m[head].push(tail);\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 var found = {};\n function recurse(n) {\n var nid = callbacks.nodeid(n);\n callbacks.node(compid, n);\n found[nid] = true;\n if(adjacencies[nid])\n adjacencies[nid].forEach(function(adj) {\n if(!found[adj])\n recurse(nmap[adj]);\n });\n }\n var compid = 0;\n nodes.forEach(function(n) {\n if(!found[callbacks.nodeid(n)]) {\n callbacks.comp && callbacks.comp(compid);\n recurse(n);\n ++compid;\n }\n });\n };\n};\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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\n// as many as we can get from\n// http://www.graphviz.org/doc/info/shapes.html\ndc_graph.shape_presets = {\n egg: {\n // not really: an ovoid should be two half-ellipses stuck together\n // https://en.wikipedia.org/wiki/Oval\n generator: 'polygon',\n preset: function() {\n return {sides: 100, distortion: -0.25};\n }\n },\n triangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 3};\n }\n },\n rectangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4};\n }\n },\n diamond: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, rotation: 45};\n }\n },\n trapezium: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, distortion: -0.5};\n }\n },\n parallelogram: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, skew: 0.5};\n }\n },\n pentagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 5};\n }\n },\n hexagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 6};\n }\n },\n septagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 7};\n }\n },\n octagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 8};\n }\n },\n invtriangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 3, rotation: 180};\n }\n },\n invtrapezium: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, distortion: 0.5};\n }\n },\n square: {\n generator: 'polygon',\n preset: function() {\n return {\n sides: 4,\n regular: true\n };\n }\n },\n plain: {\n generator: 'rounded-rect',\n preset: function() {\n return {\n noshape: true\n };\n }\n }\n};\n\ndc_graph.shape_presets.box = dc_graph.shape_presets.rect = dc_graph.shape_presets.rectangle;\n\ndc_graph.available_shapes = function() {\n var shapes = Object.keys(dc_graph.shape_presets);\n return shapes.slice(0, shapes.length-1); // not including polygon\n};\n\nvar default_shape = {shape: 'ellipse'};\n\nfunction elaborate_shape(diagram, def) {\n if(typeof def === 'string') def = {shape: def};\n var shape = def.shape, def2 = Object.assign({}, def);\n delete def2.shape;\n if(shape === 'random') {\n var available = dc_graph.available_shapes(); // could include diagram.shape !== ellipse, polygon\n shape = available[Math.floor(Math.random()*available.length)];\n }\n else if(diagram.shape.enum().indexOf(shape) !== -1)\n return diagram.shape(shape).elaborate({shape: shape}, def2);\n if(!dc_graph.shape_presets[shape]) {\n console.warn('unknown shape ', shape);\n return default_shape;\n }\n var preset = dc_graph.shape_presets[shape].preset(def2);\n preset.shape = dc_graph.shape_presets[shape].generator;\n return diagram.shape(preset.shape).elaborate(preset, def2);\n}\n\nfunction infer_shape(diagram) {\n return function(n) {\n var def = diagram.nodeShape.eval(n) || default_shape;\n n.dcg_shape = elaborate_shape(diagram, def);\n n.dcg_shape.abstract = def;\n };\n}\n\nfunction shape_changed(diagram) {\n return function(n) {\n var def = diagram.nodeShape.eval(n) || default_shape;\n var old = n.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 node_label_padding(diagram, n) {\n var nlp = diagram.nodeLabelPadding.eval(n);\n if(typeof nlp === 'number' || typeof nlp === 'string')\n return {x: +nlp, y: +nlp};\n else return nlp;\n}\n\nfunction fit_shape(shape, diagram) {\n return function(content) {\n content.each(function(n) {\n var bbox = null;\n if((!shape.useTextSize || shape.useTextSize(n.dcg_shape)) && diagram.nodeFitLabel.eval(n)) {\n bbox = getBBoxNoThrow(this);\n bbox = {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n var padding;\n var content = diagram.nodeContent.eval(n);\n if(content && diagram.content(content).padding)\n padding = diagram.content(content).padding(n);\n else {\n var padding2 = node_label_padding(diagram, n);\n padding = {\n x: padding2.x*2,\n y: padding2.y*2\n };\n }\n bbox.width += padding.x;\n bbox.height += padding.y;\n n.bbox = bbox;\n }\n var r = 0, radii;\n if(!shape.useRadius || shape.useRadius(n.dcg_shape))\n r = diagram.nodeRadius.eval(n);\n if(bbox && bbox.width && bbox.height || shape.useTextSize && !shape.useTextSize(n.dcg_shape))\n radii = shape.calc_radii(n, r, bbox);\n else\n radii = {rx: r, ry: r};\n n.dcg_rx = radii.rx;\n n.dcg_ry = radii.ry;\n\n var w = radii.rx*2, h = radii.ry*2;\n // fixme: this is only consistent if regular || !squeeze\n // but we'd need to calculate polygon first in order to find out\n // (not a bad idea, just no time right now)\n if(w= 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(diagram, e, 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 sp = e.sourcePort.pos;\n tp = e.targetPort.pos;\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 diagram.shape(node.dcg_shape.shape).intersect_vec(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(e.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(e.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\nfunction is_one_segment(path) {\n return path.bezDegree === 1 && path.points.length === 2 ||\n path.bezDegree === 3 && path.points.length === 4;\n}\n\nfunction as_bezier3(path) {\n var p = path.points;\n if(path.bezDegree === 3) return p;\n else if(path.bezDegree === 1)\n return [\n {\n x: p[0].x,\n y: p[0].y\n },\n {\n x: p[0].x + (p[1].x - p[0].x)/3,\n y: p[0].y + (p[1].y - p[0].y)/3\n },\n {\n x: p[0].x + 2*(p[1].x - p[0].x)/3,\n y: p[0].y + 2*(p[1].y - p[0].y)/3\n },\n {\n x: p[1].x,\n y: p[1].y\n }\n ];\n else throw new Error('unknown bezDegree ' + path.bezDegree);\n}\n\n// from https://www.jasondavies.com/animated-bezier/\nfunction interpolate(d, p) {\n var r = [];\n for (var i=1; i 1) {\n var parts = split_bezier(p, 1/n);\n ret.push(parts[0][0], parts[0][1], parts[0][2]);\n p = parts[1];\n --n;\n }\n ret.push.apply(ret, p);\n return ret;\n}\n\ndc_graph.no_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n useTextSize: function() { return false; },\n useRadius: function() { return false; },\n usePaddingAndStroke: function() { return false; },\n intersect_vec: function(n, deltaX, deltaY) {\n return {x: 0, y: 0};\n },\n calc_radii: function(n, ry, bbox) {\n return {rx: 0, ry: 0};\n },\n create: function(nodeEnter) {\n },\n replace: function(nodeChanged) {\n },\n update: function(node) {\n }\n };\n return _shape;\n};\n\ndc_graph.ellipse_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n return point_on_ellipse(n.dcg_rx, n.dcg_ry, deltaX, deltaY);\n },\n calc_radii: function(n, ry, bbox) {\n // make sure we can fit height in r\n ry = Math.max(ry, bbox.height/2 + 5);\n var rx = bbox.width/2;\n\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/ry;\n rx = rx/Math.sqrt(1 - y_over_B*y_over_B);\n rx = Math.max(rx, ry);\n\n return {rx: rx, ry: ry};\n },\n create: function(nodeEnter) {\n nodeEnter.insert('ellipse', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('ellipse.node-shape')\n .attr(ellipse_attrs(_shape.parent()));\n }\n };\n return _shape;\n};\n\ndc_graph.polygon_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n return point_on_polygon(n.dcg_points, 0, 0, deltaX, deltaY);\n },\n calc_radii: function(n, ry, bbox) {\n // make sure we can fit height in r\n ry = Math.max(ry, bbox.height/2 + 5);\n var rx = bbox.width/2;\n\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 rx = rx*Math.sqrt(2)/Math.cos(Math.PI/(n.dcg_shape.sides||4));\n\n return {rx: rx, ry: ry};\n },\n create: function(nodeEnter) {\n nodeEnter.insert('path', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('path.node-shape')\n .attr(polygon_attrs(_shape.parent()));\n }\n };\n return _shape;\n};\n\ndc_graph.rounded_rectangle_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n preset = Object.assign({rx: 10, ry: 10}, preset);\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n var points = [\n {x: n.dcg_rx, y: n.dcg_ry},\n {x: n.dcg_rx, y: -n.dcg_ry},\n {x: -n.dcg_rx, y: -n.dcg_ry},\n {x: -n.dcg_rx, y: n.dcg_ry}\n ];\n return point_on_polygon(points, 0, 0, deltaX, deltaY); // not rounded\n },\n useRadius: function(shape) {\n return !shape.noshape;\n },\n calc_radii: function(n, ry, bbox) {\n var fity = bbox.height/2;\n // fixme: fudge to make sure text is not too tall for node\n if(!n.dcg_shape.noshape)\n fity += 5;\n return {\n rx: bbox.width / 2,\n ry: Math.max(ry, fity)\n };\n },\n create: function(nodeEnter) {\n nodeEnter.filter(function(n) {\n return !n.dcg_shape.noshape;\n }).insert('rect', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('rect.node-shape')\n .attr({\n x: function(n) {\n return -n.dcg_rx;\n },\n y: function(n) {\n return -n.dcg_ry;\n },\n width: function(n) {\n return 2*n.dcg_rx;\n },\n height: function(n) {\n return 2*n.dcg_ry;\n },\n rx: function(n) {\n return n.dcg_shape.rx + 'px';\n },\n ry: function(n) {\n return n.dcg_shape.ry + 'px';\n }\n });\n }\n };\n return _shape;\n};\n\n","dc_graph.text_contents = function() {\n var _contents = {\n parent: property(null),\n update: function(container) {\n var text = container.selectAll('text.node-label')\n .data(function(n) { return [n]; });\n text.enter().append('text')\n .attr('class', 'node-label');\n var tspan = text.selectAll('tspan').data(function(n) {\n var lines = _contents.parent().nodeLabel.eval(n);\n if(!lines)\n return [];\n else if(typeof lines === 'string')\n lines = [lines];\n var lineHeight = _contents.parent().nodeLineHeight();\n var first = 1 - ((lines.length - 1) * lineHeight + 1)/2;\n return lines.map(function(line, i) { return {node: n, line: line, yofs: (i==0 ? first : lineHeight) + 'em'}; });\n });\n tspan.enter().append('tspan');\n tspan.attr({\n 'text-anchor': 'start',\n x: 0\n }).text(function(s) { return s.line; });\n text\n .each(function(n) {\n n.xofs = 0;\n })\n .filter(function(n) {\n return _contents.parent().nodeLabelAlignment.eval(n) !== 'center';\n })\n .each(function(n) {\n var bbox = getBBoxNoThrow(this);\n n.bbox = {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n switch(_contents.parent().nodeLabelAlignment.eval(n)) {\n case 'left': n.xofs = -n.bbox.width/2;\n break;\n case 'right': n.xofs = n.bbox.width/2;\n break;\n }\n })\n .selectAll('tspan');\n tspan.attr({\n 'text-anchor': function(s) {\n switch(_contents.parent().nodeLabelAlignment.eval(s.node)) {\n case 'left': return 'start';\n case 'center': return 'middle';\n case 'right': return 'end';\n }\n return null;\n },\n x: function(s) {\n return s.node.xofs;\n },\n dy: function(d) { return d.yofs; }\n });\n\n tspan.exit().remove();\n text\n .attr('fill', _contents.parent().nodeLabelFill.eval);\n },\n textbox: function(container) {\n var bbox = getBBoxNoThrow(this.selectContent(container).node());\n return {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n },\n selectContent: function(container) {\n return container.select('text.node-label');\n }\n };\n return _contents;\n};\n\ndc_graph.with_icon_contents = function(contents, width, height) {\n var _contents = {\n parent: property(null).react(function(parent) {\n contents.parent(parent);\n }),\n padding: function(n) {\n var padding = node_label_padding(_contents.parent(), n);\n return {\n x: padding.x * 3,\n y: padding.y * 3\n };\n },\n update: function(container) {\n var g = container.selectAll('g.with-icon')\n .data(function(n) { return [n]; });\n var gEnter = g.enter();\n gEnter.append('g')\n .attr('class', 'with-icon')\n .append('image').attr({\n class: 'icon',\n width: width + 'px',\n height: height + 'px'\n });\n g.call(contents.update);\n contents.selectContent(g)\n .attr('transform', 'translate(' + width/2 + ')');\n g.selectAll('image.icon').attr({\n href: _contents.parent().nodeIcon.eval,\n x: function(n) {\n var totwid = width + contents.textbox(d3.select(this.parentNode)).width;\n return -totwid/2 - node_label_padding(_contents.parent(), n).x;\n },\n y: -height/2\n });\n },\n textbox: function(container) {\n var box = contents.textbox(container);\n box.x += width/2;\n return box;\n },\n selectContent: function(container) {\n return container.select('g.with-icon');\n }\n };\n return _contents;\n};\n\n","/**\n * `dc_graph.diagram` is a dc.js-compatible network visualization component. It registers in\n * the dc.js chart registry and its nodes and edges are generated from crossfilter groups. It\n * logically derives from the dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin},\n * but it does not physically derive from it since so much is different about network\n * visualization versus conventional charts.\n * @class diagram\n * @memberof dc_graph\n * @param {String|node} parent - Any valid\n * {@link https://github.com/mbostock/d3/wiki/Selections#selecting-elements d3 single selector}\n * specifying a dom block element such as a div; or a dom element.\n * @param {String} [chartGroup] - The name of the dc.js chart group this diagram instance\n * should be placed in. Filter interaction with a diagram will only trigger events and redraws\n * within the diagram's group.\n * @return {dc_graph.diagram}\n **/\ndc_graph.diagram = function (parent, chartGroup) {\n // different enough from regular dc charts that we don't use dc.baseMixin\n // but attempt to implement most of that interface, copying some of the most basic stuff\n var _diagram = dc.marginMixin({});\n _diagram.__dcFlag__ = dc.utils.uniqueId();\n _diagram.margins({left: 10, top: 10, right: 10, bottom: 10});\n var _svg = null, _defs = null, _g = null, _nodeLayer = null, _edgeLayer = null;\n var _dispatch = d3.dispatch('preDraw', 'data', 'end', 'start', 'render', 'drawn', 'receivedLayout', 'transitionsStarted', 'zoomed', 'reset');\n var _nodes = {}, _edges = {}; // hold state between runs\n var _ports = {}; // id = node|edge/id/name\n var _nodePorts; // ports sorted by node id\n var _stats = {};\n var _nodes_snapshot, _edges_snapshot;\n var _arrows = {};\n var _running = false; // for detecting concurrency issues\n var _translate = [0,0], _scale = 1;\n var _zoom, _animateZoom;\n var _anchor, _chartGroup;\n var _animating = false; // do not refresh during animations\n\n var _minWidth = 200;\n var _defaultWidthCalc = function (element) {\n var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n return (width && width > _minWidth) ? width : _minWidth;\n };\n var _widthCalc = _defaultWidthCalc;\n\n var _minHeight = 200;\n var _defaultHeightCalc = function (element) {\n var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n return (height && height > _minHeight) ? height : _minHeight;\n };\n var _heightCalc = _defaultHeightCalc;\n var _width, _height, _lastWidth, _lastHeight;\n\n function deprecate_layout_algo_parameter(name) {\n return function(value) {\n if(!_diagram.layoutEngine())\n _diagram.layoutAlgorithm('cola', true);\n var engine = _diagram.layoutEngine();\n if(engine.getEngine)\n engine = engine.getEngine();\n if(engine[name]) {\n console.warn('property is deprecated, call on layout engine instead: dc_graph.diagram.%c' + name,\n 'font-weight: bold');\n if(!arguments.length)\n return engine[name]();\n engine[name](value);\n } else {\n console.warn('property is deprecated, and is not supported for Warning: dc_graph.diagram.' + name + ' is deprecated, and it is not supported for the \"' + engine.layoutAlgorithm() + '\" layout algorithm: ignored.');\n if(!arguments.length)\n return null;\n }\n return this;\n };\n }\n\n /**\n * Set or get the height attribute of the diagram. If a value is given, then the diagram is\n * returned for method chaining. If no value is given, then the current value of the height\n * attribute will be returned.\n *\n * The width and height are applied to the SVG element generated by the diagram on render, or\n * when `resizeSvg` is called.\n *\n * If the value is falsy or a function, the height will be calculated the first time it is\n * needed, using the provided function or default height calculator, and then cached. The\n * default calculator uses the client rect of the element specified when constructing the chart,\n * with a minimum of `minHeight`. A custom calculator will be passed the element.\n *\n * If the value is `'auto'`, the height will be calculated every time the diagram is drawn, and\n * it will not be set on the `` element. Instead, the element will be pinned to the same\n * rectangle as its containing div using CSS.\n *\n * @method height\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [height=200]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.height = function (height) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_height)) {\n _lastHeight = _heightCalc(_diagram.root().node());\n if(_height === 'auto') // 'auto' => calculate every time\n return _lastHeight;\n // null/undefined => calculate once only\n _height = _lastHeight;\n }\n return _height;\n }\n if(dc.utils.isNumber(height) || !height || height === 'auto')\n _height = height;\n else if(typeof height === 'function') {\n _heightCalc = height;\n _height = undefined;\n }\n else throw new Error(\"don't know what to do with height type \" + typeof height + \" value \" + height);\n return _diagram;\n };\n _diagram.minHeight = function(height) {\n if(!arguments.length)\n return _minHeight;\n _minHeight = height;\n return _diagram;\n };\n /**\n * Set or get the width attribute of the diagram. If a value is given, then the diagram is\n * returned for method chaining. If no value is given, then the current value of the width\n * attribute will be returned.\n *\n * The width and height are applied to the SVG element generated by the diagram on render, or\n * when `resizeSvg` is called.\n *\n * If the value is falsy or a function, the width will be calculated the first time it is\n * needed, using the provided function or default width calculator, and then cached. The default\n * calculator uses the client rect of the element specified when constructing the chart, with a\n * minimum of `minWidth`. A custom calculator will be passed the element.\n *\n * If the value is `'auto'`, the width will be calculated every time the diagram is drawn, and\n * it will not be set on the `` element. Instead, the element will be pinned to the same\n * rectangle as its containing div using CSS.\n *\n * @method width\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [width=200]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.width = function (width) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_width)) {\n _lastWidth = _widthCalc(_diagram.root().node());\n if(_width === 'auto') // 'auto' => calculate every time\n return _lastWidth;\n // null/undefined => calculate once only\n _width = _lastWidth;\n }\n return _width;\n }\n if(dc.utils.isNumber(width) || !width || width === 'auto')\n _width = width;\n else if(typeof width === 'function') {\n _widthCalc = width;\n _width = undefined;\n }\n else throw new Error(\"don't know what to do with width type \" + typeof width + \" value \" + width);\n return _diagram;\n };\n _diagram.minWidth = function(width) {\n if(!arguments.length)\n return _minWidth;\n _minWidth = width;\n return _diagram;\n };\n\n /**\n * Get or set the root element, which is usually the parent div. Normally the root is set\n * when the diagram is constructed; setting it later may have unexpected consequences.\n * @method root\n * @memberof dc_graph.diagram\n * @instance\n * @param {node} [root=null]\n * @return {node}\n * @return {dc_graph.diagram}\n **/\n _diagram.root = property(null).react(function(e) {\n if(e.empty())\n console.log('Warning: parent selector ' + parent + \" doesn't seem to exist\");\n });\n\n /**\n * Get or set whether mouse wheel rotation or touchpad gestures will zoom the diagram, and\n * whether dragging on the background pans the diagram.\n * @method mouseZoomable\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [mouseZoomable=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.mouseZoomable = property(true);\n\n _diagram.zoomExtent = property([.1, 2]);\n\n /**\n * Whether zooming should only be enabled when the alt key is pressed.\n * @method altKeyZoom\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [altKeyZoom=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.modKeyZoom = _diagram.altKeyZoom = property(false);\n\n /**\n * Set or get the fitting strategy for the canvas, which affects how the\n * [viewBox](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox) and\n * [preserveAspectRatio](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio)\n * attributes get set. All options except `null` set the `viewBox` attribute.\n *\n * These options set the `viewBox` and adjust the scale and translate to implement the margins.\n * * `'default'` - uses the default behavior of `xMidYMid meet` (but with margins)\n * * `'vertical'` - fits the canvas vertically (with vertical margins) and centers it\n * horizontally. If the canvas is taller than the viewport, it will meet vertically and\n * there will be blank areas to the left and right. If the canvas is wider than the\n * viewport, it will be sliced.\n * * `'horizontal'` - fitst the canvas horizontally (with horizontal margins) and centers\n * it vertically. If the canvas is wider than the viewport, it will meet horizontally and\n * there will be blank areas above and below. If the canvas is taller than the viewport, it\n * will be sliced.\n *\n * Other options\n * * `null` - no attempt is made to fit the canvas to the svg element, `viewBox` is unset.\n * * another string - sets the `viewBox` and uses the string for `preserveAspectRatio`.\n * * function - will be called with (viewport width, viewport height, canvas width, canvas\n * height) and result will be used to set `preserveAspectRatio`.\n * @method fitStrategy\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [fitStrategy='default']\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.fitStrategy = property('default');\n\n /**\n * Do not allow panning (scrolling) to push the diagram out of the viewable area, if there\n * is space for it to be shown. */\n _diagram.restrictPan = property(false);\n\n /**\n * Auto-zoom behavior.\n * * `'always'` - zoom every time layout happens\n * * `'once'` - zoom the next time layout happens\n * * `null` - manual, call `zoomToFit` to fit\n * @method autoZoom\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [autoZoom=null]\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.autoZoom = property(null);\n _diagram.zoomToFit = function(animate) {\n if(!(_nodeLayer && _edgeLayer))\n return;\n var node = _diagram.selectAllNodes(),\n edge = _diagram.selectAllEdges();\n auto_zoom(node, edge, animate);\n };\n _diagram.zoomDuration = property(500);\n\n /**\n * Set or get the crossfilter dimension which represents the nodes (vertices) in the\n * diagram. Typically there will be a crossfilter instance for the nodes, and another for\n * the edges.\n *\n * *Dimensions are included on the diagram for similarity to dc.js, however the diagram\n * itself does not use them - but {@link dc_graph.filter_selection filter_selection} will.*\n * @method nodeDimension\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.dimension} [nodeDimension]\n * @return {crossfilter.dimension}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeDimension = property();\n\n /**\n * Set or get the crossfilter group which is the data source for the nodes in the\n * diagram. The diagram will use the group's `.all()` method to get an array of `{key,\n * value}` pairs, where the key is a unique identifier, and the value is usually an object\n * containing the node's attributes. All accessors work with these key/value pairs.\n *\n * If the group is changed or returns different values, the next call to `.redraw()` will\n * reflect the changes incrementally.\n *\n * It is possible to pass another object with the same `.all()` interface instead of a\n * crossfilter group.\n * @method nodeGroup\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.group} [nodeGroup]\n * @return {crossfilter.group}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeGroup = property();\n\n /**\n * Set or get the crossfilter dimension which represents the edges in the\n * diagram. Typically there will be a crossfilter instance for the nodes, and another for\n * the edges.\n *\n * *Dimensions are included on the diagram for similarity to dc.js, however the diagram\n * itself does not use them - but {@link dc_graph.filter_selection filter_selection} will.*\n * @method edgeDimension\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.dimension} [edgeDimension]\n * @return {crossfilter.dimension}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeDimension = property();\n\n /**\n * Set or get the crossfilter group which is the data source for the edges in the\n * diagram. See `.nodeGroup` above for the way data is loaded from a crossfilter group.\n *\n * The values in the key/value pairs returned by `diagram.edgeGroup().all()` need to\n * support, at a minimum, the {@link dc_graph.diagram#nodeSource nodeSource} and\n * {@link dc_graph.diagram#nodeTarget nodeTarget}, which should return the same\n * keys as the {@link dc_graph.diagram#nodeKey nodeKey}\n *\n * @method edgeGroup\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.group} [edgeGroup]\n * @return {crossfilter.group}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeGroup = property();\n\n _diagram.edgesInFront = property(false);\n\n /**\n * Set or get the function which will be used to retrieve the unique key for each node. By\n * default, this accesses the `key` field of the object passed to it. The keys should match\n * the keys returned by the {@link dc_graph.diagram#edgeSource edgeSource} and\n * {@link dc_graph.diagram#edgeTarget edgeTarget}.\n *\n * @method nodeKey\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [nodeKey=function(kv) { return kv.key }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeKey = _diagram.nodeKeyAccessor = property(function(kv) {\n return kv.key;\n });\n\n /**\n * Set or get the function which will be used to retrieve the unique key for each edge. By\n * default, this accesses the `key` field of the object passed to it.\n *\n * @method edgeKey\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeKey=function(kv) { return kv.key }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeKey = _diagram.edgeKeyAccessor = property(function(kv) {\n return kv.key;\n });\n\n /**\n * Set or get the function which will be used to retrieve the source (origin/tail) key of\n * the edge objects. The key must equal the key returned by the `.nodeKey` for one of the\n * nodes; if it does not, or if the node is currently filtered out, the edge will not be\n * displayed. By default, looks for `.value.sourcename`.\n *\n * @method edgeSource\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeSource=function(kv) { return kv.value.sourcename; }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeSource = _diagram.sourceAccessor = property(function(kv) {\n return kv.value.sourcename;\n });\n\n /**\n * Set or get the function which will be used to retrieve the target (destination/head) key\n * of the edge objects. The key must equal the key returned by the\n * {@link dc_graph.diagram#nodeKey nodeKey} for one of the nodes; if it does not, or if the node\n * is currently filtered out, the edge will not be displayed. By default, looks for\n * `.value.targetname`.\n * @method edgeTarget\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeTarget=function(kv) { return kv.value.targetname; }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeTarget = _diagram.targetAccessor = property(function(kv) {\n return kv.value.targetname;\n });\n\n _diagram.portDimension = property(null);\n _diagram.portGroup = property(null);\n _diagram.portNodeKey = property(null);\n _diagram.portEdgeKey = property(null);\n _diagram.portName = property(null);\n _diagram.portStyleName = property(null);\n _diagram.portElastic = property(true);\n\n _diagram.portStyle = named_children();\n\n _diagram.portBounds = property(null); // position limits, in radians\n\n _diagram.edgeSourcePortName = property(null);\n _diagram.edgeTargetPortName = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the radius, in pixels, for each\n * node. This determines the height of nodes,and if `nodeFitLabel` is false, the width too.\n * @method nodeRadius\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeRadius=25]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeRadius = _diagram.nodeRadiusAccessor = property(25);\n\n /**\n * Set or get the function which will be used to retrieve the stroke width, in pixels, for\n * drawing the outline of each node. According to the SVG specification, the outline will\n * be drawn half on top of the fill, and half outside. Default: 1\n * @method nodeStrokeWidth\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeStrokeWidth=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeStrokeWidth = _diagram.nodeStrokeWidthAccessor = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the stroke color for the outline\n * of each node.\n * @method nodeStroke\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeStroke='black']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeStroke = _diagram.nodeStrokeAccessor = property('black');\n\n _diagram.nodeStrokeDashArray = property(null);\n\n /**\n * If set, the value returned from `nodeFill` will be processed through this\n * {@link https://github.com/mbostock/d3/wiki/Scales d3.scale}\n * to return the fill color. If falsy, uses the identity function (no scale).\n * @method nodeFillScale\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|d3.scale} [nodeFillScale]\n * @return {Function|d3.scale}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFillScale = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the fill color for the body of each\n * node.\n * @method nodeFill\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeFill='white']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFill = _diagram.nodeFillAccessor = property('white');\n\n /**\n * Set or get the function which will be used to retrieve the opacity of each node.\n * @method nodeOpacity\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeOpacity=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeOpacity = property(1);\n\n /**\n * Set or get the padding or minimum distance, in pixels, for a node. (Will be distributed\n * to both sides of the node.)\n * @method nodePadding\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodePadding=6]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodePadding = property(6);\n\n\n /**\n * Set or get the padding, in pixels, for a node's label. If an object, should contain fields\n * `x` and `y`. If a number, will be applied to both x and y.\n * @method nodeLabelPadding\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number|Object} [nodeLabelPadding=0]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabelPadding = property(0);\n\n /**\n * Set or get the line height for nodes with multiple lines of text, in ems.\n * @method nodeLineHeight\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeLineHeight=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLineHeight = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the label text to display in each\n * node. By default, looks for a field `label` or `name` inside the `value` field.\n * @method nodeLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeLabel]\n * @return {Function|String}\n * @example\n * // Default behavior\n * diagram.nodeLabel(function(kv) {\n * return kv.value.label || kv.value.name;\n * });\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabel = _diagram.nodeLabelAccessor = property(function(kv) {\n return kv.value.label || kv.value.name;\n });\n\n _diagram.nodeLabelAlignment = property('center');\n\n /**\n * Set or get the function which will be used to retrieve the label fill color. Default: null\n * @method nodeLabelFill\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeLabelFill=null]\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabelFill = _diagram.nodeLabelFillAccessor = property(null);\n\n /**\n * Whether to fit the node shape around the label\n * @method nodeFitLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Boolean} [nodeFitLabel=true]\n * @return {Function|Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFitLabel = _diagram.nodeFitLabelAccessor = property(true);\n\n /**\n * The shape to use for drawing each node, specified as an object with at least the field\n * `shape`. The names of shapes are mostly taken\n * [from graphviz](http://www.graphviz.org/doc/info/shapes.html); currently ellipse, egg,\n * triangle, rectangle, diamond, trapezium, parallelogram, pentagon, hexagon, septagon, octagon,\n * invtriangle, invtrapezium, square, polygon are supported.\n *\n * If `shape = polygon`:\n * * `sides`: number of sides for a polygon\n * @method nodeShape\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Object} [nodeShape={shape: 'ellipse'}]\n * @return {Function|Object}\n * @return {dc_graph.diagram}\n * @example\n * // set shape to diamond or parallelogram based on flag\n * diagram.nodeShape(function(kv) {\n * return {shape: kv.value.flag ? 'diamond' : 'parallelogram'};\n * });\n **/\n _diagram.nodeShape = property(default_shape);\n\n // for defining custom (and standard) shapes\n _diagram.shape = named_children();\n\n _diagram.shape('nothing', dc_graph.no_shape());\n _diagram.shape('ellipse', dc_graph.ellipse_shape());\n _diagram.shape('polygon', dc_graph.polygon_shape());\n _diagram.shape('rounded-rect', dc_graph.rounded_rectangle_shape());\n\n _diagram.nodeContent = property('text');\n _diagram.content = named_children();\n _diagram.content('text', dc_graph.text_contents());\n\n // really looks like these should reside in an open namespace - this used only by an extension\n // but it's no less real than any other computed property\n _diagram.nodeIcon = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the node title, usually rendered\n * as a tooltip. By default, uses the key of the node.\n * @method nodeTitle\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeTitle]\n * @return {Function|String}\n * @example\n * // Default behavior\n * diagram.nodeTitle(function(kv) {\n * return _diagram.nodeKey()(kv);\n * });\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeTitle = _diagram.nodeTitleAccessor = property(function(kv) {\n return _diagram.nodeKey()(kv);\n });\n\n /**\n * By default, nodes are added to the layout in the order that `.nodeGroup().all()` returns\n * them. If specified, `.nodeOrdering` provides an accessor that returns a key to sort the\n * nodes on. *It would be better not to rely on ordering to affect layout, but it may\n * affect the layout in some cases.*\n * @method nodeOrdering\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [nodeOrdering=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeOrdering = property(null);\n\n /**\n * Specify an accessor that returns an {x,y} coordinate for a node that should be\n * {@link https://github.com/tgdwyer/WebCola/wiki/Fixed-Node-Positions fixed in place},\n * and returns falsy for other nodes.\n * @method nodeFixed\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Object} [nodeFixed=null]\n * @return {Function|Object}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFixed = _diagram.nodeFixedAccessor = property(null);\n\n\n /**\n * Set or get the function which will be used to retrieve the stroke color for the edges.\n * @method edgeStroke\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeStroke='black']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeStroke = _diagram.edgeStrokeAccessor = property('black');\n\n /**\n * Set or get the function which will be used to retrieve the stroke width for the edges.\n * @method edgeStrokeWidth\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeStrokeWidth=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeStrokeWidth = _diagram.edgeStrokeWidthAccessor = property(1);\n\n _diagram.edgeStrokeDashArray = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the edge opacity, a number from 0\n * to 1.\n * @method edgeOpacity\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeOpacity=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeOpacity = _diagram.edgeOpacityAccessor = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the edge label text. The label is\n * displayed when an edge is hovered over. By default, uses the `edgeKey`.\n * @method edgeLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeLabel]\n * @example\n * // Default behavior\n * diagram.edgeLabel(function(e) {\n * return _diagram.edgeKey()(e);\n * });\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeLabel = _diagram.edgeLabelAccessor = property(function(e) {\n return _diagram.edgeKey()(e);\n });\n\n /**\n * Set or get the function which will be used to retrieve the name of the arrowhead to use\n * for the target/ head/destination of the edge. Arrow symbols can be specified with\n * `.defineArrow()`. Return null to display no arrowhead.\n * @method edgeArrowhead\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeArrowhead='vee']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowhead = _diagram.edgeArrowheadAccessor = property('vee');\n\n /**\n * Set or get the function which will be used to retrieve the name of the arrow tail to use\n * for the tail/source of the edge. Arrow symbols can be specified with\n * `.defineArrow()`. Return null to display no arrowtail.\n * @method edgeArrowtail\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeArrowtail=null]\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowtail = _diagram.edgeArrowtailAccessor = property(null);\n\n /**\n * Multiplier for arrow size.\n * @method edgeArrowSize\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeArrowSize=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowSize = property(1);\n\n /**\n * To draw an edge but not have it affect the layout, specify a function which returns\n * false for that edge. By default, will return false if the `notLayout` field of the edge\n * value is truthy, true otherwise.\n * @method edgeIsLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Boolean} [edgeIsLayout]\n * @example\n * // Default behavior\n * diagram.edgeIsLayout(function(kv) {\n * return !kv.value.notLayout;\n * });\n * @return {Function|Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeIsLayout = _diagram.edgeIsLayoutAccessor = property(function(kv) {\n return !kv.value.notLayout;\n });\n\n // if false, don't draw or layout the edge. this is not documented because it seems like\n // the interface could be better and this combined with edgeIsLayout. (currently there is\n // no way to layout but not draw an edge.)\n _diagram.edgeIsShown = property(true);\n\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 *\n * **Deprecated**: Use {@link dc_graph.cola_layout#lengthStrategy cola_layout.lengthStrategy} instead.\n * @method lengthStrategy\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [lengthStrategy='symmetric']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.lengthStrategy = deprecate_layout_algo_parameter('lengthStrategy');\n\n /**\n * When the `.lengthStrategy` is 'individual', this accessor will be used to read the\n * length of each edge. By default, reads the `distance` field of the edge. If the\n * distance is falsy, uses the `baseLength`.\n * @method edgeLength\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeLength]\n * @example\n * // Default behavior\n * diagram.edgeLength(function(kv) {\n * return kv.value.distance;\n * });\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeLength = _diagram.edgeDistanceAccessor = property(function(kv) {\n return kv.value.distance;\n });\n\n /**\n * This should be equivalent to rankdir and ranksep in the dagre/graphviz nomenclature, but for\n * now it is separate.\n *\n * **Deprecated**: use {@link dc_graph.cola_layout#flowLayout cola_layout.flowLayout} instead.\n * @method flowLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Object} [flowLayout]\n * @example\n * // No flow (default)\n * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.flowLayout({axis: 'x', minSeparation: 200})\n **/\n _diagram.flowLayout = deprecate_layout_algo_parameter('flowLayout');\n\n /**\n * Direction to draw ranks. Currently for dagre and expand_collapse, but I think cola could be\n * generated from graphviz-style since it is more general.\n *\n * **Deprecated**: use {@link dc_graph.dagre_layout#rankdir dagre_layout.rankdir} instead.\n * @method rankdir\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [rankdir]\n **/\n _diagram.rankdir = deprecate_layout_algo_parameter('rankdir');\n\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 *\n * **Deprecated**: use {@link dc_graph.cola_layout#baseLength cola_layout.baseLength} instead.\n * @method baseLength\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [baseLength]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.baseLength = deprecate_layout_algo_parameter('baseLength');\n\n /**\n * Gets or sets the transition duration, the length of time each change to the diagram will\n * be animated.\n * @method transitionDuration\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [transitionDuration=500]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.transitionDuration = property(500);\n\n /**\n * How transitions should be split into separate animations to emphasize\n * the delete, modify, and insert operations:\n * * `none`: modify and insert operations animate at the same time\n * * `modins`: modify operations happen before inserts\n * * `insmod`: insert operations happen before modifies\n *\n * Deletions always happen before/during layout computation.\n * @method stageTransitions\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [stageTransitions='none']\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.stageTransitions = property('none');\n\n /**\n * The delete transition happens simultaneously with layout, which can take longer\n * than the transition duration. Delaying it can bring it closer to the other\n * staged transitions.\n * @method deleteDelay\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [deleteDelay=0]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.deleteDelay = property(0);\n\n /**\n * Whether to put connected components each in their own group, to stabilize layout.\n * @method groupConnected\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [stageTransitions=false]\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.groupConnected = deprecate_layout_algo_parameter('groupConnected');\n\n /**\n * Gets or sets the maximum time spent doing layout for a render or redraw. Set to 0 for no\n * limit.\n * @method timeLimit\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [timeLimit=0]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.timeLimit = property(0);\n\n /**\n * Gets or sets a function which will be called with the current nodes and edges on each\n * redraw in order to derive new layout constraints. The constraints are built from scratch\n * on each redraw.\n *\n * This can be used to generate alignment (rank) or axis constraints. By default, no\n * constraints will be added, although cola.js uses constraints internally to implement\n * flow and overlap prevention. See\n * {@link https://github.com/tgdwyer/WebCola/wiki/Constraints the cola.js wiki}\n * for more details.\n *\n * For convenience, dc.graph.js implements a other constraints on top of those implemented\n * by cola.js:\n * * 'ordering' - the nodes will be ordered on the specified `axis` according to the keys\n * returned by the `ordering` function, by creating separation constraints using the\n * specified `gap`.\n * * 'circle' - (experimental) the nodes will be placed in a circle using \"wheel\"\n * edge lengths similar to those described in\n * {@link http://www.csse.monash.edu.au/~tdwyer/Dwyer2009FastConstraints.pdf Scalable, Versatile, and Simple Constrained Graph Layout}\n * *Although this is not as performant or stable as might be desired, it may work for\n * simple cases. In particular, it should use edge length *constraints*, which don't yet\n * exist in cola.js.*\n *\n * Because it is tedious to write code to generate constraints for a graph, **dc.graph.js**\n * also includes a {@link #dc_graph+constraint_pattern constraint generator} to produce\n * this constrain function, specifying the constraints themselves in a graph.\n * @method constrain\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [constrain]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.constrain = property(function(nodes, edges) {\n return [];\n });\n\n /**\n * If there are multiple edges between the same two nodes, start them this many pixels away\n * from the original so they don't overlap.\n * @method parallelEdgeOffset\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [parallelEdgeOffset=10]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.parallelEdgeOffset = property(10);\n\n /**\n * By default, edges are added to the layout in the order that `.edgeGroup().all()` returns\n * them. If specified, `.edgeOrdering` provides an accessor that returns a key to sort the\n * edges on.\n *\n * *It would be better not to rely on ordering to affect layout, but it may affect the\n * layout in some cases. (Probably less than node ordering, but it does affect which\n * parallel edge is which.)*\n * @method edgeOrdering\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeOrdering=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeOrdering = property(null);\n\n _diagram.edgeSort = property(null);\n\n _diagram.cascade = cascade(_diagram);\n\n /**\n * Currently there are some bugs when the same instance of cola.js is used multiple\n * times. (In particular, overlaps between nodes may not be eliminated\n * {@link https://github.com/tgdwyer/WebCola/issues/118 if cola is not reinitialized}\n * This flag can be set true to construct a new cola layout object on each redraw. However,\n * layout seems to be more stable if this is set false, so hopefully this will be fixed\n * soon.\n * @method initLayoutOnRedraw\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [initLayoutOnRedraw=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.initLayoutOnRedraw = property(false);\n\n /**\n * Whether to perform layout when the data is unchanged from the last redraw.\n * @method layoutUnchanged\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [layoutUnchanged=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.layoutUnchanged = property(false);\n\n /**\n * When `layoutUnchanged` is false, this will force layout to happen again. This may be needed\n * when changing a parameter but not changing the topology of the graph. (Yes, probably should\n * not be necessary.)\n * @method relayout\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _diagram.relayout = function() {\n _nodes_snapshot = _edges_snapshot = null;\n return this;\n };\n\n /**\n * Function to call to generate an initial layout. Takes (diagram, nodes, edges)\n *\n * **Deprecated**: The only layout that was using this was `tree_positions` and it never\n * worked as an initialization step for cola, as was originally intended. Now that\n * `tree_layout` is a layout algorithm, this should go away.\n *\n * In the future, there will be support for chaining layout algorithms. But that will be a\n * matter of composing them into a super-algorithm, not a special step like this was.\n * @method initialLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [initialLayout=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.initialLayout = deprecated_property('initialLayout is deprecated - use layout algorithms instead', null);\n\n _diagram.initialOnly = deprecated_property('initialOnly is deprecated - see the initialLayout deprecation notice in the documentation', false);\n\n /**\n * By default, all nodes are included, and edges are only included if both end-nodes are\n * visible. If `.induceNodes` is set, then only nodes which have at least one edge will be\n * shown.\n * @method induceNodes\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [induceNodes=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.induceNodes = property(false);\n\n /**\n * If this flag is true, the positions of nodes and will be updated while layout is\n * iterating. If false, the positions will only be updated once layout has\n * stabilized. Note: this may not be compatible with transitionDuration.\n * @method showLayoutSteps\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [showLayoutSteps=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.showLayoutSteps = property(false);\n\n /**\n * Assigns a legend object which will be displayed within the same SVG element and\n * according to the visual encoding of this diagram.\n * @method legend\n * @memberof dc_graph.diagram\n * @instance\n * @param {Object} [legend=null]\n * @return {Object}\n * @return {dc_graph.diagram}\n **/\n // (pre-deprecated; see below)\n\n /**\n * Specifies another kind of child layer or interface. For example, this can\n * be used to display tooltips on nodes using `dc_graph.tip`.\n\n * The child needs to support a `parent` method, the diagram to modify.\n * @method child\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [id] - the name of the child to modify or add\n * @param {Object} [object] - the child object to add, or null to remove\n * @example\n * // Display tooltips on node hover, via the d3-tip library\n * var tip = dc_graph.tip()\n * tip.content(function(n, k) {\n * // you can do an asynchronous call here, e.g. d3.json, if you need\n * // to fetch data to show the tooltip - just call k() with the content\n * k(\"This is \" + n.orig.value.name + \"\");\n * });\n * diagram.child('tip', tip);\n * @return {dc_graph.diagram}\n **/\n _diagram.mode = _diagram.child = named_children();\n\n // for backward compatibility; use .child() for more control & multiple legends\n _diagram.legend = function(_) {\n if(!arguments.length)\n return _diagram.child('node-legend');\n _diagram.child('node-legend', _);\n return _diagram;\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 _diagram.layoutAlgorithm = function(value, skipWarning) {\n if(!arguments.length)\n return _diagram.layoutEngine() ? _diagram.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 _diagram.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 _diagram.layoutEngine = property(null).react(function(val) {\n if(val && val.parent)\n val.parent(_diagram);\n if(_g) { // already rendered\n // remove any calculated points, if engine did that\n Object.keys(_edges).forEach(function(k) {\n _edges[k].cola.points = null;\n });\n // initialize engine\n initLayout(val);\n }\n });\n\n // S-spline any edges that are not going in this direction\n _diagram.enforceEdgeDirection = property(null);\n\n _diagram.tickSize = deprecate_layout_algo_parameter('tickSize');\n\n\n _diagram.uniqueId = function() {\n return _diagram.anchorName().replace(/[ .#=\\[\\]\"]/g, '-');\n };\n\n _diagram.edgeId = function(e) {\n return 'edge-' + _diagram.edgeKey.eval(e).replace(/[^\\w-_]/g, '-');\n };\n\n _diagram.arrowId = function(e, kind) {\n return 'arrow-' + kind + '-' + _diagram.uniqueId() + '-' + _diagram.edgeId(e);\n };\n _diagram.textpathId = function(e) {\n return 'textpath-' + _diagram.uniqueId() + '-' + _diagram.edgeId(e);\n };\n\n // this kind of begs a (meta)graph ADT\n // instead of munging this into the diagram\n _diagram.getNode = function(id) {\n return _nodes[id] ? _nodes[id].orig : null;\n };\n\n _diagram.getWholeNode = function(id) {\n return _nodes[id] ? _nodes[id] : null;\n };\n\n _diagram.getEdge = function(id) {\n return _edges[id] ? _edges[id].orig : null;\n };\n\n _diagram.getWholeEdge = function(id) {\n return _edges[id] ? _edges[id] : null;\n };\n\n // again, awful, we need an ADT\n _diagram.getPort = function(nid, eid, name) {\n return _ports[port_name(nid, eid, name)];\n };\n\n _diagram.nodePorts = function() {\n return _nodePorts;\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 _diagram.handleDisconnected = deprecate_layout_algo_parameter('handleDisconnected');\n\n function initLayout(engine) {\n if(!_diagram.layoutEngine())\n _diagram.layoutAlgorithm('cola', true);\n (engine || _diagram.layoutEngine()).init({\n width: _diagram.width(),\n height: _diagram.height()\n });\n }\n\n _diagram.forEachChild = function(node, children, idf, f) {\n children.enum().forEach(function(key) {\n f(children(key),\n node.filter(function(n) { return idf(n) === key; }));\n });\n };\n _diagram.forEachShape = function(node, f) {\n _diagram.forEachChild(node, _diagram.shape, function(n) { return n.dcg_shape.shape; }, f);\n };\n _diagram.forEachContent = function(node, f) {\n _diagram.forEachChild(node, _diagram.content, _diagram.nodeContent.eval, f);\n };\n _diagram.renderNode = _diagram._enterNode = function(nodeEnter) {\n if(_diagram.nodeTitle())\n nodeEnter.append('title');\n nodeEnter.each(infer_shape(_diagram));\n _diagram.forEachShape(nodeEnter, function(shape, node) {\n node.call(shape.create);\n });\n return _diagram;\n };\n _diagram.redrawNode = _diagram._updateNode = function(node) {\n var changedShape = node.filter(shape_changed(_diagram));\n changedShape.selectAll('.node-shape').remove();\n changedShape.each(infer_shape(_diagram));\n _diagram.forEachShape(changedShape, function(shape, node) {\n node.call(shape.create);\n });\n node.select('title')\n .text(_diagram.nodeTitle.eval);\n _diagram.forEachContent(node, function(contentType, node) {\n node.call(contentType.update);\n _diagram.forEachShape(contentType.selectContent(node), function(shape, content) {\n content\n .call(fit_shape(shape, _diagram));\n });\n });\n _diagram.forEachShape(node, function(shape, node) {\n node.call(shape.update);\n });\n node.select('.node-shape')\n .attr({\n stroke: _diagram.nodeStroke.eval,\n 'stroke-width': _diagram.nodeStrokeWidth.eval,\n 'stroke-dasharray': _diagram.nodeStrokeDashArray.eval,\n fill: compose(_diagram.nodeFillScale() || identity, _diagram.nodeFill.eval)\n });\n return _diagram;\n };\n _diagram.redrawEdge = _diagram._updateEdge = function(edge) {\n edge\n .attr('stroke', _diagram.edgeStroke.eval)\n .attr('stroke-width', _diagram.edgeStrokeWidth.eval)\n .attr('stroke-dasharray', _diagram.edgeStrokeDashArray.eval)\n .attr('marker-end', function(e) {\n var name = _diagram.edgeArrowhead.eval(e),\n id = edgeArrow(e, 'head', name);\n return id ? 'url(#' + id + ')' : null;\n })\n .attr('marker-start', function(e) {\n var name = _diagram.edgeArrowtail.eval(e),\n arrow_id = edgeArrow(e, 'tail', name);\n return name ? 'url(#' + arrow_id + ')' : null;\n })\n .each(function(e) {\n var fillEdgeStroke = _diagram.edgeStroke.eval(e);\n d3.selectAll('#' + _diagram.arrowId(e, 'head'))\n .attr('fill', _diagram.edgeStroke.eval(e));\n d3.selectAll('#' + _diagram.arrowId(e, 'tail'))\n .attr('fill', _diagram.edgeStroke.eval(e));\n });\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 _diagram.stagedDuration = function() {\n return (_diagram.stageTransitions() !== 'none') ?\n _diagram.transitionDuration() / 2 :\n _diagram.transitionDuration();\n };\n\n _diagram.stagedDelay = function(is_enter) {\n return _diagram.stageTransitions() === 'none' ||\n _diagram.stageTransitions() === 'modins' === !is_enter ?\n 0 :\n _diagram.transitionDuration() / 2;\n };\n\n _diagram.selectAllNodes = function(selector) {\n selector = selector || '.node';\n return _nodeLayer && _nodeLayer.selectAll(selector).filter(function(n) {\n return !n.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.selectAllEdges = function(selector) {\n selector = selector || '.edge';\n return _edgeLayer && _edgeLayer.selectAll(selector).filter(function(e) {\n return !e.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.selectAllDefs = function(selector) {\n return _defs && _defs.selectAll(selector).filter(function(def) {\n return !def.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.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 _diagram.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 _diagram.startLayout();\n };\n\n _diagram.startLayout = function () {\n var nodes = _diagram.nodeGroup().all();\n var edges = _diagram.edgeGroup().all();\n var ports = _diagram.portGroup() ? _diagram.portGroup().all() : [];\n if(_running) {\n throw new Error('dc_graph.diagram.redraw already running!');\n }\n _running = true;\n\n var oldWidth = _lastWidth, oldHeight = _lastHeight;\n var newWidth = _diagram.width(), newHeight = _diagram.height();\n if(oldWidth !== newWidth || oldHeight !== newHeight) {\n var scale = _zoom.scale(), translate = _zoom.translate();\n _zoom.scale(1).translate([0,0]);\n var xDomain = _diagram.x().domain(), yDomain = _diagram.y().domain();\n _diagram.x()\n .domain([xDomain[0], xDomain[0] + (xDomain[1] - xDomain[0])*newWidth/oldWidth])\n .range([0, newWidth]);\n _diagram.y()\n .domain([yDomain[0], yDomain[0] + (yDomain[1] - yDomain[0])*newHeight/oldHeight])\n .range([0, newHeight]);\n _zoom\n .x(_diagram.x()).y(_diagram.y())\n .translate(translate).scale(scale);\n }\n\n if(_diagram.initLayoutOnRedraw())\n initLayout();\n _diagram.layoutEngine().stop();\n _dispatch.preDraw();\n\n // ordering shouldn't matter, but we support ordering in case it does\n if(_diagram.nodeOrdering()) {\n nodes = crossfilter.quicksort.by(_diagram.nodeOrdering())(nodes.slice(0), 0, nodes.length);\n }\n if(_diagram.edgeOrdering()) {\n edges = crossfilter.quicksort.by(_diagram.edgeOrdering())(edges.slice(0), 0, edges.length);\n }\n\n var wnodes = regenerate_objects(_nodes, nodes, null, function(v) {\n return _diagram.nodeKey()(v);\n }, function(v1, v) {\n v1.orig = v;\n v1.cola = v1.cola || {};\n v1.cola.dcg_nodeKey = _diagram.nodeKey.eval(v1);\n _diagram.layoutEngine().populateLayoutNode(v1.cola, v1);\n });\n var wedges = regenerate_objects(_edges, edges, null, function(e) {\n return _diagram.edgeKey()(e);\n }, function(e1, e) {\n e1.orig = e;\n e1.cola = e1.cola || {};\n e1.cola.dcg_edgeKey = _diagram.edgeKey.eval(e1);\n e1.cola.dcg_edgeSource = _diagram.edgeSource.eval(e1);\n e1.cola.dcg_edgeTarget = _diagram.edgeTarget.eval(e1);\n e1.source = _nodes[e1.cola.dcg_edgeSource];\n e1.target = _nodes[e1.cola.dcg_edgeTarget];\n e1.cola.dcg_edgeLength = _diagram.edgeLength.eval(e1);\n e1.sourcePort = e1.sourcePort || {};\n e1.targetPort = e1.targetPort || {};\n _diagram.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(_diagram.edgeIsShown.eval);\n\n // now we know which ports should exist\n var needports = wedges.map(function(e) {\n if(_diagram.edgeSourcePortName.eval(e))\n return port_name(_diagram.edgeSource.eval(e), null, _diagram.edgeSourcePortName.eval(e));\n else return port_name(null, _diagram.edgeKey.eval(e), 'source');\n });\n needports = needports.concat(wedges.map(function(e) {\n if(_diagram.edgeTargetPortName.eval(e))\n return port_name(_diagram.edgeTarget.eval(e), null, _diagram.edgeTargetPortName.eval(e));\n else return port_name(null, _diagram.edgeKey.eval(e), 'target');\n }));\n // remove any invalid ports so they don't crash in confusing ways later\n ports = ports.filter(function(p) {\n return _diagram.portNodeKey() && _diagram.portNodeKey()(p) ||\n _diagram.portEdgeKey() && _diagram.portEdgeKey()(p);\n });\n var wports = regenerate_objects(_ports, ports, needports, function(p) {\n return port_name(_diagram.portNodeKey() && _diagram.portNodeKey()(p),\n _diagram.portEdgeKey() && _diagram.portEdgeKey()(p),\n _diagram.portName()(p));\n }, function(p1, p) {\n p1.orig = p;\n if(p1.named)\n p1.edges = [];\n }, function(k, p) {\n console.assert(k, 'should have screened out invalid ports');\n // it's dumb to parse the id we just created. as usual, i blame the lack of metagraphs\n var parse = split_port_name(k);\n if(parse.nodeKey) {\n p.node = _nodes[parse.nodeKey];\n p.named = true;\n }\n else {\n var e = _edges[parse.edgeKey];\n p.node = e[parse.name];\n p.edges = [e];\n p.named = false;\n }\n p.name = parse.name;\n });\n // remove any ports where the end-node was not found, to avoid crashing elsewhere\n wports = wports.filter(function(p) { return p.node; });\n\n // find all edges for named ports\n wedges.forEach(function(e) {\n var name = _diagram.edgeSourcePortName.eval(e);\n if(name)\n _ports[port_name(_diagram.nodeKey.eval(e.source), null, name)].edges.push(e);\n name = _diagram.edgeTargetPortName.eval(e);\n if(name)\n _ports[port_name(_diagram.nodeKey.eval(e.target), null, name)].edges.push(e);\n });\n\n // optionally, delete nodes that have no edges\n if(_diagram.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 // announce new data\n _dispatch.data(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n _stats = {nnodes: wnodes.length, nedges: wedges.length};\n\n // fixed nodes may have been affected by .data() so calculate now\n wnodes.forEach(function(v) {\n if(_diagram.nodeFixed())\n v.cola.dcg_nodeFixed = _diagram.nodeFixed.eval(v);\n });\n\n // annotate parallel edges so we can draw them specially\n if(_diagram.parallelEdgeOffset()) {\n var em = new Array(wnodes.length);\n for(var i = 0; i < wnodes.length; ++i)\n em[i] = new Array(i);\n wedges.forEach(function(e) {\n e.pos = e.pos || {};\n var min, max, minattr, maxattr;\n if(e.source.index < e.target.index) {\n min = e.source.index; max = e.target.index;\n minattr = 'edgeSourcePortName'; maxattr = 'edgeTargetPortName';\n } else {\n max = e.source.index; min = e.target.index;\n maxattr = 'edgeSourcePortName'; minattr = 'edgeTargetPortName';\n }\n var minport = _diagram[minattr].eval(e) || 'no port',\n maxport = _diagram[maxattr].eval(e) || 'no port';\n em[max][min] = em[max][min] || {};\n em[max][min][maxport] = em[max][min][maxport] || {};\n e.parallel = em[max][min][maxport][minport] = em[max][min][maxport][minport] || {\n rev: [],\n edges: []\n };\n e.parallel.edges.push(e);\n e.parallel.rev.push(min !== e.source.index);\n });\n }\n\n // create edge SVG elements\n var edge = _edgeLayer.selectAll('.edge')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeEnter = edge.enter().append('svg:path')\n .attr({\n class: 'edge',\n id: _diagram.edgeId,\n opacity: 0\n })\n .each(function(e) {\n e.deleted = false;\n });\n\n edge.exit().each(function(e) {\n e.deleted = true;\n }).transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.deleteDelay())\n .attr('opacity', 0)\n .each(function(e) {\n edgeArrow(e, 'head', null);\n edgeArrow(e, 'head', null);\n })\n .remove();\n\n if(_diagram.edgeSort()) {\n edge.sort(function(a, b) {\n var as = _diagram.edgeSort.eval(a), bs = _diagram.edgeSort.eval(b);\n return as < bs ? -1 : bs < as ? 1 : 0;\n });\n }\n\n // another wider copy of the edge just for hover events\n var edgeHover = _edgeLayer.selectAll('.edge-hover')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'edge-hover')\n .attr('opacity', 0)\n .attr('fill', 'none')\n .attr('stroke', 'green')\n .attr('stroke-width', 10)\n .on('mouseover', function(e) {\n d3.select('#' + _diagram.edgeId(e) + '-label')\n .attr('visibility', 'visible');\n })\n .on('mouseout', function(e) {\n d3.select('#' + _diagram.edgeId(e) + '-label')\n .attr('visibility', 'hidden');\n });\n edgeHover.exit().remove();\n\n var edgeLabels = _edgeLayer.selectAll('.edge-label')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeLabelsEnter = edgeLabels.enter()\n .append('text')\n .attr('id', function(e) {\n return _diagram.edgeId(e) + '-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(e) {\n var id = _diagram.textpathId(e);\n // angular on firefox needs absolute paths for fragments\n return window.location.href.split('#')[0] + '#' + id;\n });\n var textPaths = _defs.selectAll('path.edge-label-path')\n .data(wedges, _diagram.textpathId);\n var textPathsEnter = textPaths.enter()\n .append('svg:path').attr({\n class: 'edge-label-path',\n id: _diagram.textpathId\n });\n edgeLabels.exit().transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.deleteDelay())\n .attr('opacity', 0).remove();\n\n // create node SVG elements\n var node = _nodeLayer.selectAll('.node')\n .data(wnodes, _diagram.nodeKey.eval);\n var nodeEnter = node.enter().append('g')\n .attr('class', 'node')\n .attr('opacity', '0') // don't show until has layout\n .each(function(n) {\n n.deleted = false;\n });\n // .call(_d3cola.drag);\n\n _diagram._enterNode(nodeEnter);\n\n node.exit().each(function(n) {\n n.deleted = true;\n }).transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.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(_diagram.initialLayout())\n _diagram.initialLayout()(_diagram, wnodes, wedges);\n\n // no layout if the topology and layout parameters haven't changed\n var skip_layout = false;\n if(!_diagram.layoutUnchanged()) {\n var nodes_snapshot = JSON.stringify(wnodes.map(function(n) {\n return {orig: get_original(n), cola: {dcg_nodeFixed: n.cola.dcg_nodeFixed}};\n }));\n var edges_snapshot = JSON.stringify(wedges.map(function(e) {\n return {orig: get_original(e), cola: e.cola};\n }));\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 = _diagram.constrain()(_diagram, 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(_diagram.edgeIsLayout.eval);\n var nonlayout_edges = wedges.filter(function(x) {\n return !_diagram.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 || _diagram.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 _diagram.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(skip_layout) {\n _running = false;\n _dispatch.end(false);\n check_zoom(node, edge);\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 if(!n) {\n console.warn('received node \"' + rn.dcg_nodeKey + '\" that we did not send');\n return;\n }\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 if(!e) {\n console.warn('received edge \"' + re.dcg_edgeKey + '\" that we did not send');\n return;\n }\n if(re.points)\n e.cola.points = re.points;\n });\n }\n _diagram.layoutEngine()\n .on('tick', function(nodes, edges) {\n var elapsed = Date.now() - startTime;\n if(!_diagram.initialOnly())\n populate_cola(nodes, edges);\n if(_diagram.showLayoutSteps()) {\n init_node_ports(_nodes, wports);\n _dispatch.receivedLayout(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n propagate_port_positions(_nodes, wedges, _ports);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, true);\n draw_ports(node);\n // should do this only once\n _dispatch.transitionsStarted(node, edge, edgeHover);\n }\n if(_needsRedraw || _diagram.timeLimit() && elapsed > _diagram.timeLimit()) {\n console.log('cancelled');\n _diagram.layoutEngine().stop();\n }\n })\n .on('end', function(nodes, edges) {\n if(!_diagram.showLayoutSteps()) {\n if(!_diagram.initialOnly())\n populate_cola(nodes, edges);\n init_node_ports(_nodes, wports);\n _dispatch.receivedLayout(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n propagate_port_positions(_nodes, wedges, _ports);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, true);\n draw_ports(node);\n _dispatch.transitionsStarted(node, edge, edgeHover);\n }\n else layout_done(true);\n check_zoom(node, edge);\n })\n .on('start', function() {\n console.log('algo ' + _diagram.layoutEngine().layoutAlgorithm() + ' started.');\n _dispatch.start();\n });\n\n if(_diagram.initialOnly())\n _diagram.layoutEngine().dispatch().end(wnodes, wedges);\n else {\n _dispatch.start(); // cola doesn't seem to fire this itself?\n _diagram.layoutEngine().data(\n { width: _diagram.width(), height: _diagram.height() },\n wnodes.map(function(v) { return v.cola; }),\n layout_edges.map(function(v) { return v.cola; }),\n constraints\n );\n _diagram.layoutEngine().start();\n }\n return this;\n };\n\n function check_zoom(node, edge) {\n var do_zoom, animate = true;\n switch(_diagram.autoZoom()) {\n case 'always-skipanimonce':\n animate = false;\n _diagram.autoZoom('always');\n case 'always':\n do_zoom = true;\n break;\n case 'once-noanim':\n animate = false;\n case 'once':\n do_zoom = true;\n _diagram.autoZoom(null);\n break;\n default:\n do_zoom = false;\n }\n calc_bounds(node, edge);\n if(do_zoom)\n auto_zoom(animate);\n }\n\n function norm(v) {\n var len = Math.hypot(v[0], v[1]);\n return [v[0]/len, v[1]/len];\n }\n function edge_vec(n, e) {\n var dy = e.target.cola.y - e.source.cola.y,\n dx = e.target.cola.x - e.source.cola.x;\n if(e.source !== n)\n dy = -dy, dx = -dx;\n if(e.parallel && e.parallel.edges.length > 1 && e.source.index > e.target.index)\n dy = -dy, dx = -dx;\n return norm([dx, dy]);\n }\n function init_node_ports(nodes, wports) {\n _nodePorts = {};\n // assemble port-lists for nodes, again because we don't have a metagraph.\n wports.forEach(function(p) {\n var nid = _diagram.nodeKey.eval(p.node);\n var np = _nodePorts[nid] = _nodePorts[nid] || [];\n np.push(p);\n });\n for(var nid in _nodePorts) {\n var n = nodes[nid],\n nports = _nodePorts[nid];\n // initial positions: use average of edge vectors, if any, or existing position\n nports.forEach(function(p) {\n if(_diagram.portElastic.eval(p) && p.edges.length) {\n var vecs = p.edges.map(edge_vec.bind(null, n));\n p.vec = [\n d3.sum(vecs, function(v) { return v[0]; })/vecs.length,\n d3.sum(vecs, function(v) { return v[1]; })/vecs.length\n ];\n } else p.vec = p.vec || undefined;\n p.pos = null;\n });\n }\n }\n function propagate_port_positions(nodes, wedges, ports) {\n // make sure we have projected vectors to positions\n for(var nid in _nodePorts) {\n var n = nodes[nid];\n _nodePorts[nid].forEach(function(p) {\n if(!p.pos)\n project_port(_diagram, n, p);\n });\n }\n\n // propagate port positions to edge endpoints\n wedges.forEach(function(e) {\n var name = _diagram.edgeSourcePortName.eval(e);\n e.sourcePort.pos = name ? ports[port_name(_diagram.nodeKey.eval(e.source), null, name)].pos :\n ports[port_name(null, _diagram.edgeKey.eval(e), 'source')].pos;\n name = _diagram.edgeTargetPortName.eval(e);\n e.targetPort.pos = name ? ports[port_name(_diagram.nodeKey.eval(e.target), null, name)].pos :\n ports[port_name(null, _diagram.edgeKey.eval(e), 'target')].pos;\n console.assert(e.sourcePort.pos && e.targetPort.pos);\n });\n }\n\n function _refresh(node, edge) {\n _diagram._updateEdge(edge);\n _diagram._updateNode(node);\n draw_ports(node);\n }\n\n _diagram.refresh = function(node, edge, edgeHover, edgeLabels, textPaths) {\n if(_animating)\n return this; // but what about changed attributes?\n node = node || _diagram.selectAllNodes();\n edge = edge || _diagram.selectAllEdges();\n _refresh(node, edge);\n\n edgeHover = edgeHover || _diagram.selectAllEdges('.edge-hover');\n edgeLabels = edgeLabels || _diagram.selectAllEdges('.edge-label');\n textPaths = textPaths || _diagram.selectAllDefs('path.edge-label-path');\n var nullSel = d3.select(null); // no enters\n draw(node, nullSel, edge, nullSel, edgeHover, nullSel, edgeLabels, nullSel, textPaths, nullSel, false);\n return this;\n };\n\n _diagram.requestRefresh = function(durationOverride) {\n window.requestAnimationFrame(function() {\n var transdur;\n if(durationOverride !== undefined) {\n transdur = _diagram.transitionDuration();\n _diagram.transitionDuration(durationOverride);\n }\n _diagram.refresh();\n if(durationOverride !== undefined)\n _diagram.transitionDuration(transdur);\n });\n };\n\n _diagram.reposition = function(node, edge) {\n node\n .attr('transform', function (n) {\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n });\n // reset edge ports\n edge.each(function(e) {\n e.pos.new = null;\n e.pos.old = null;\n calc_edge_path(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.pos.new.orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', function() {\n return e.pos.new.orienttail;\n });\n })\n .attr('d', render_edge_path('new'));\n return this;\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(!_diagram.isRunning()) // someone else may already have started\n _diagram.redraw();\n }, 0);\n }\n }\n\n function calculate_arrowhead_orientation(points, end) {\n var spos = points[0], tpos = points[points.length-1];\n var partial = bezier_point(points, end === 'tail' ? 0.25 : 0.75);\n return (end === 'head' ?\n Math.atan2(tpos.y - partial.y, tpos.x - partial.x) :\n Math.atan2(spos.y - partial.y, spos.x - partial.x)) + 'rad';\n }\n\n function enforce_path_direction(path, spos, tpos) {\n var points = path.points, first = points[0], last = points[points.length-1];\n switch(_diagram.enforceEdgeDirection()) {\n case 'LR':\n if(spos.x >= tpos.x) {\n var dx = first.x - last.x;\n return {\n points: [\n first,\n {x: first.x + dx, y: first.y - dx/2},\n {x: last.x - dx, y: last.y - dx/2},\n last\n ],\n bezDegree: 3,\n sourcePort: path.sourcePort,\n targetPort: path.targetPort\n };\n }\n break;\n case 'TB':\n if(spos.y >= tpos.y) {\n var dy = first.y - last.y;\n return {\n points: [\n first,\n {x: first.x + dy/2, y: first.y + dy},\n {x: last.x + dy/2, y: last.y - dy},\n last\n ],\n bezDegree: 3,\n sourcePort: path.sourcePort,\n targetPort: path.targetPort\n };\n }\n break;\n }\n return path;\n }\n function calc_edge_path(e, age, sx, sy, tx, ty) {\n var parallel = e.parallel;\n var source = e.source, target = e.target;\n if(parallel.edges.length > 1 && e.source.index > e.target.index) {\n var t;\n t = target; target = source; source = t;\n t = tx; tx = sx; sx = t;\n t = ty; ty = sy; sy = t;\n }\n var source_padding = source.dcg_ry +\n _diagram.nodeStrokeWidth.eval(source) / 2,\n target_padding = target.dcg_ry +\n _diagram.nodeStrokeWidth.eval(target) / 2;\n for(var p = 0; p < parallel.edges.length; ++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 > 0 ? parallel.edges[p > 2 ? p - 2 : 0].pos[age].path : null;\n var path = draw_edge_to_shapes(_diagram, e, sx, sy, tx, ty,\n last, dir, _diagram.parallelEdgeOffset(),\n source_padding, target_padding\n );\n if(parallel.edges.length > 1 && parallel.rev[p])\n path.points.reverse();\n if(_diagram.enforceEdgeDirection())\n path = enforce_path_direction(path, source.cola, target.cola);\n parallel.edges[p].pos[age] = {\n path: path,\n orienthead: calculate_arrowhead_orientation(path.points, 'head'),\n orienttail: calculate_arrowhead_orientation(path.points, 'tail')\n };\n }\n }\n\n function render_edge_path(age) {\n return function(e) {\n var path = e.pos[age].path;\n return generate_path(path.points, path.bezDegree);\n };\n }\n\n function render_edge_label_path(age) {\n return function(e) {\n var path = e.pos[age].path;\n var points = path.points[path.points.length-1].x < path.points[0].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.pos.new.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((_diagram.fitStrategy() || _diagram.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(animate) {\n if(_diagram.fitStrategy()) {\n if(!_bounds)\n return;\n var vwidth = _bounds.right - _bounds.left, vheight = _bounds.bottom - _bounds.top,\n swidth = _diagram.width() - _diagram.margins().left - _diagram.margins().right,\n sheight = _diagram.height() - _diagram.margins().top - _diagram.margins().bottom;\n if(_diagram.DEBUG_BOUNDS)\n debug_bounds(_bounds);\n var fitS = _diagram.fitStrategy(), translate = [0,0], scale = 1;\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(fitS === 'zoom') {\n scale = _zoom.scale();\n translate = bring_in_bounds(_zoom.translate());\n }\n else\n throw new Error('unknown fitStrategy type ' + typeof fitS);\n\n _animateZoom = animate;\n _zoom.translate(translate).scale(scale).event(_svg);\n _animateZoom = false;\n }\n }\n\n // determine pre-transition orientation that won't spin a lot going to new orientation\n function unsurprising_orient(oldorient, neworient) {\n var oldang = +oldorient.slice(0, -3),\n newang = +neworient.slice(0, -3);\n if(Math.abs(oldang - newang) > Math.PI) {\n if(newang > oldang)\n oldang += 2*Math.PI;\n else oldang -= 2*Math.PI;\n }\n return oldang + 'rad';\n }\n\n function draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, animatePositions) {\n console.assert(edge.data().every(has_source_and_target));\n\n var nodeEntered = {};\n nodeEnter\n .each(function(n) {\n nodeEntered[_diagram.nodeKey.eval(n)] = true;\n })\n .attr('transform', function (n) {\n // start new nodes at their final position\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n });\n var ntrans = node\n .transition()\n .duration(_diagram.stagedDuration())\n .delay(function(n) {\n return _diagram.stagedDelay(nodeEntered[_diagram.nodeKey.eval(n)]);\n })\n .attr('opacity', _diagram.nodeOpacity.eval);\n if(animatePositions)\n ntrans\n .attr('transform', function (n) {\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n })\n .each('end.record', function(n) {\n n.prevX = n.cola.x;\n n.prevY = n.cola.y;\n });\n\n // recalculate edge positions\n edge.each(function(e) {\n e.pos.new = null;\n });\n edge.each(function(e) {\n if(e.cola.points) {\n e.pos.new = {\n path: {\n points: e.cola.points,\n bezDegree: 3\n },\n orienthead: calculate_arrowhead_orientation(e.cola.points, 'head'),\n orienttail: calculate_arrowhead_orientation(e.cola.points, 'tail')\n };\n }\n else {\n if(!e.pos.old)\n calc_edge_path(e, 'old', e.source.prevX || e.source.cola.x, e.source.prevY || e.source.cola.y,\n e.target.prevX || e.target.cola.x, e.target.prevY || e.target.cola.y);\n if(!e.pos.new)\n calc_edge_path(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n }\n if(e.pos.old) {\n if(e.pos.old.path.bezDegree !== e.pos.new.path.bezDegree ||\n e.pos.old.path.points.length !== e.pos.new.path.points.length) {\n console.log('old', e.pos.old.path.points.length, 'new', e.pos.new.path.points.length);\n if(is_one_segment(e.pos.old.path)) {\n e.pos.new.path.points = as_bezier3(e.pos.new.path);\n e.pos.old.path.points = split_bezier_n(as_bezier3(e.pos.old.path),\n (e.pos.new.path.points.length-1)/3);\n e.pos.old.path.bezDegree = e.pos.new.bezDegree = 3;\n }\n else if(is_one_segment(e.pos.new.path)) {\n e.pos.old.path.points = as_bezier3(e.pos.old.path);\n e.pos.new.path.points = split_bezier_n(as_bezier3(e.pos.new.path),\n (e.pos.old.path.points.length-1)/3);\n e.pos.old.path.bezDegree = e.pos.new.bezDegree = 3;\n }\n else console.warn(\"don't know how to interpolate two multi-segments\");\n }\n }\n else\n e.pos.old = e.pos.new;\n });\n\n var edgeEntered = {};\n edgeEnter\n .each(function(e) {\n edgeEntered[_diagram.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 = _diagram.stageTransitions() === 'modins' ? 'new' : 'old';\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.pos[age].orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', function() {\n return e.pos[age].orienttail;\n });\n })\n .attr('d', render_edge_path(_diagram.stageTransitions() === 'modins' ? 'new' : 'old'));\n\n var etrans = edge\n .each(function(e) {\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', unsurprising_orient(e.pos.old.orienthead, e.pos.new.orienthead))\n .transition().duration(_diagram.stagedDuration())\n .delay(_diagram.stagedDelay(false))\n .attr('orient', function() {\n return e.pos.new.orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', unsurprising_orient(e.pos.old.orienttail, e.pos.new.orienttail))\n .transition().duration(_diagram.stagedDuration())\n .delay(_diagram.stagedDelay(false))\n .attr('orient', function() {\n return e.pos.new.orienttail;\n });\n })\n .transition()\n .duration(_diagram.stagedDuration())\n .delay(function(e) {\n return _diagram.stagedDelay(edgeEntered[_diagram.edgeKey.eval(e)]);\n })\n .attr('opacity', _diagram.edgeOpacity.eval);\n if(animatePositions)\n etrans\n .attr('d', function(e) {\n var when = _diagram.stageTransitions() === 'insmod' &&\n edgeEntered[_diagram.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_path(when)(e);\n });\n edgeLabels\n .selectAll('textPath')\n .text(function(e){\n return _diagram.edgeLabel.eval(e);\n })\n .attr('opacity', _diagram.edgeOpacity.eval);\n textPathsEnter\n .attr('d', render_edge_label_path(_diagram.stageTransitions() === 'modins' ? 'new' : 'old'));\n var textTrans = textPaths.transition()\n .duration(_diagram.stagedDuration())\n .delay(function(e) {\n return _diagram.stagedDelay(edgeEntered[_diagram.edgeKey.eval(e)]);\n });\n if(animatePositions)\n textTrans\n .attr('d', function(e) {\n var when = _diagram.stageTransitions() === 'insmod' &&\n edgeEntered[_diagram.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_label_path(when)(e);\n });\n if(_diagram.stageTransitions() === 'insmod' && animatePositions) {\n // inserted edges transition twice in insmod mode\n if(_diagram.stagedDuration() >= 50) {\n etrans = etrans.transition()\n .duration(_diagram.stagedDuration())\n .attr('d', render_edge_path('new'));\n textTrans = textTrans.transition()\n .duration(_diagram.stagedDuration())\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 _animating = true;\n if(!_diagram.showLayoutSteps())\n endall([ntrans, etrans, textTrans],\n function() {\n _animating = false;\n layout_done(true);\n });\n\n if(animatePositions)\n edgeHover.attr('d', render_edge_path('new'));\n\n edge.each(function(e) {\n e.pos.old = e.pos.new;\n });\n }\n\n _diagram.animating = function() {\n return _animating;\n };\n\n _diagram.selectNodePortsOfStyle = function(node, style) {\n return node.selectAll('g.port').filter(function(p) {\n return _diagram.portStyleName.eval(p) === style;\n });\n };\n\n function draw_ports(node) {\n if(!_nodePorts)\n return;\n _diagram.portStyle.enum().forEach(function(style) {\n var nodePorts2 = {};\n for(var nid in _nodePorts)\n nodePorts2[nid] = _nodePorts[nid].filter(function(p) {\n return _diagram.portStyleName.eval(p) === style;\n });\n var port = _diagram.selectNodePortsOfStyle(node, style);\n _diagram.portStyle(style).drawPorts(port, nodePorts2, node);\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. 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 _diagram.render = function () {\n if(_svg)\n _dispatch.reset();\n if(!_diagram.initLayoutOnRedraw())\n initLayout();\n _diagram.resetSvg();\n _g = _svg.append('g')\n .attr('class', 'draw');\n\n var layers = ['edge-layer', 'node-layer'];\n if(_diagram.edgesInFront())\n layers.reverse();\n _g.selectAll('g').data(layers)\n .enter().append('g')\n .attr('class', function(l) { return l; });\n _edgeLayer = _g.selectAll('g.edge-layer');\n _nodeLayer = _g.selectAll('g.node-layer');\n\n _dispatch.render();\n _diagram.redraw();\n return this;\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 _diagram.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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 _diagram.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 _diagram.select = function (s) {\n return _diagram.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 _diagram.selectAll = function (s) {\n return _diagram.root() ? _diagram.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. Gets or sets the x scale.\n * @method x\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.scale} [scale]\n * @return {d3.scale}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.x = property(null);\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. Gets or sets the y scale.\n * @method x\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.scale} [scale]\n * @return {d3.scale}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.y = property(null);\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 diagram. 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 _diagram.svg = function (_) {\n if (!arguments.length) {\n return _svg;\n }\n _svg = _;\n return _diagram;\n };\n\n /**\n * Returns the top `g` element for this specific diagram. This method is usually used to\n * retrieve the g element in order to overlay custom svg drawing\n * programatically. **Caution**: The root g element is usually generated internally, and\n * resetting it might produce unpredictable results.\n * @method g\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.selection} [selection]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.g = function (_) {\n if (!arguments.length) {\n return _g;\n }\n _g = _;\n return _diagram;\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 _diagram.resetSvg = function () {\n if(_svg) {\n _svg.remove();\n _svg = null;\n }\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 _diagram.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 _diagram.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 * `diagram.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 * _diagram.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 _diagram.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 _diagram;\n };\n\n _diagram.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(e, kind, name) {\n var id = _diagram.arrowId(e, kind),\n markerEnter = _diagram.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*_diagram.edgeArrowSize.eval(e))\n .attr('markerHeight', _arrows[name].height*_diagram.edgeArrowSize.eval(e))\n .attr('stroke', _diagram.edgeStroke.eval(e))\n .attr('fill', _diagram.edgeStroke.eval(e))\n .call(_arrows[name].drawFunction);\n }\n return name ? id : null;\n }\n\n function globalTransform(pos, scale, animate) {\n _translate = pos;\n _scale = scale;\n var obj = _g;\n if(animate)\n obj = _g.transition().duration(_diagram.zoomDuration());\n obj.attr('transform', 'translate(' + pos + ')' + ' scale(' + scale + ')');\n }\n\n function margined_bounds() {\n var bounds = _bounds || {left: 0, top: 0, right: 0, bottom: 0};\n var scale = _zoom ? _zoom.scale() : 1;\n return {\n left: bounds.left - _diagram.margins().left/scale,\n top: bounds.top - _diagram.margins().top/scale,\n right: bounds.right + _diagram.margins().right/scale,\n bottom: bounds.bottom + _diagram.margins().bottom/scale\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] - _diagram.x()(x) + _diagram.x().range()[0];\n }\n function align_top(translate, y) {\n return translate[1] - _diagram.y()(y) + _diagram.y().range()[0];\n }\n function align_right(translate, x) {\n return translate[0] - _diagram.x()(x) + _diagram.x().range()[1];\n }\n function align_bottom(translate, y) {\n return translate[1] - _diagram.y()(y) + _diagram.y().range()[1];;\n }\n\n function bring_in_bounds(translate) {\n var xDomain = _diagram.x().domain(), yDomain = _diagram.y().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 return translate;\n\n }\n function doZoom() {\n var translate, scale = d3.event.scale;\n if(_diagram.restrictPan())\n _zoom.translate(translate = bring_in_bounds(d3.event.translate));\n else translate = d3.event.translate;\n globalTransform(translate, scale, _animateZoom);\n _dispatch.zoomed(translate, scale);\n }\n\n _diagram.resizeSvg = function(w, h) {\n if(_svg) {\n _svg.attr('width', w || (_width === 'auto' ? '100%' : _diagram.width()))\n .attr('height', h || (_height === 'auto' ? '100%' : _diagram.height()));\n }\n return _diagram;\n };\n\n function enableZoom() {\n _svg.call(_zoom);\n _svg.on('dblclick.zoom', null);\n }\n function disableZoom() {\n _svg.on('.zoom', null);\n }\n\n function generateSvg() {\n _svg = _diagram.root().append('svg');\n _diagram.resizeSvg();\n\n _defs = _svg.append('svg:defs');\n\n // start out with 1:1 zoom\n if(!_diagram.x())\n _diagram.x(d3.scale.linear()\n .domain([0, _diagram.width()])\n .range([0, _diagram.width()]));\n if(!_diagram.y())\n _diagram.y(d3.scale.linear()\n .domain([0, _diagram.height()])\n .range([0, _diagram.height()]));\n _zoom = d3.behavior.zoom()\n .on('zoom', doZoom)\n .x(_diagram.x()).y(_diagram.y())\n .scaleExtent(_diagram.zoomExtent());\n if(_diagram.mouseZoomable()) {\n var mod, mods;\n var brush = _diagram.child('brush');\n if((mod = _diagram.modKeyZoom())) {\n if (Array.isArray (mod))\n mods = mod.slice ();\n else if (typeof mod === \"string\")\n mods = [mod];\n else\n mods = ['Alt'];\n var mouseDown = false, modDown = false, zoomEnabled = false;\n _svg.on('mousedown.modkey-zoom', function() {\n mouseDown = true;\n }).on('mouseup.modkey-zoom', function() {\n mouseDown = false;\n if(!mouseDown && !modDown && zoomEnabled) {\n zoomEnabled = false;\n disableZoom();\n if(brush)\n brush.activate();\n }\n });\n d3.select(document)\n .on('keydown.modkey-zoom', function() {\n if(mods.indexOf (d3.event.key) > -1) {\n modDown = true;\n if(!mouseDown) {\n zoomEnabled = true;\n enableZoom();\n if(brush)\n brush.deactivate();\n }\n }\n })\n .on('keyup.modkey-zoom', function() {\n if(mods.indexOf (d3.event.key) > -1) {\n modDown = false;\n if(!mouseDown) {\n zoomEnabled = false;\n disableZoom();\n if(brush)\n brush.activate();\n }\n }\n });\n }\n else enableZoom();\n }\n\n return _svg;\n }\n\n _diagram.invertCoord = function(clientCoord) {\n return [\n _diagram.x().invert(clientCoord[0]),\n _diagram.y().invert(clientCoord[1])\n ];\n };\n\n _diagram.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 _diagram.defineArrow('crow', 12, 12, 0, 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 _diagram.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 diagram initialization, but be called again to relocate the diagram. 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 _diagram.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 _diagram.root(d3.select(_anchor));\n _diagram.root().classed(dc_graph.constants.CHART_CLASS, true);\n dc.registerChart(_diagram, chartGroup);\n } else {\n throw new dc.errors.BadArgumentException('parent must be defined');\n }\n _chartGroup = chartGroup;\n return _diagram;\n };\n\n /**\n * Returns the internal numeric ID of the chart.\n * @method chartID\n * @memberof dc.baseMixin\n * @instance\n * @returns {String}\n */\n _diagram.chartID = function () {\n return _diagram.__dcFlag__;\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 _diagram.anchorName = function () {\n var a = _diagram.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' + _diagram.chartID();\n };\n\n return _diagram.anchor(parent, chartGroup);\n};\n","dc_graph.spawn_engine = function(layout, args, worker) {\n args = args || {};\n worker = worker && !!window.Worker;\n var engine = dc_graph.engines.instantiate(layout, args, worker);\n if(!engine) {\n console.warn('layout engine ' + layout + ' not found; using default ' + dc_graph._default_engine);\n engine = dc_graph.engines.instantiate(dc_graph._default_engine, args, worker);\n }\n return engine;\n};\n\ndc_graph._engines = [\n {\n name: 'dagre',\n params: ['rankdir'],\n instantiate: function() {\n return dc_graph.dagre_layout();\n }\n },\n {\n name: 'd3force',\n instantiate: function() {\n return dc_graph.d3_force_layout();\n }\n },\n {\n name: 'd3v4force',\n instantiate: function() {\n return dc_graph.d3v4_force_layout();\n }\n },\n {\n name: 'tree',\n instantiate: function() {\n return dc_graph.tree_layout();\n }\n },\n {\n names: ['circo', 'dot', 'neato', 'osage', 'twopi', 'fdp'],\n instantiate: function(layout, args) {\n return dc_graph.graphviz_layout(null, layout, args.server);\n }\n },\n {\n name: 'cola',\n params: ['lengthStrategy'],\n instantiate: function() {\n return dc_graph.cola_layout();\n }\n }\n];\ndc_graph._default_engine = 'cola';\n\ndc_graph.engines = {\n entry_pred: function(layoutName) {\n return function(e) {\n return e.name && e.name === layoutName || e.names && e.names.includes(layoutName);\n };\n },\n get: function(layoutName) {\n return dc_graph._engines.find(this.entry_pred(layoutName));\n },\n instantiate: function(layout, args, worker) {\n var entry = this.get(layout);\n if(!entry)\n return null;\n var engine = entry.instantiate(layout, args),\n params = entry.params || [];\n params.forEach(function(p) {\n if(args[p])\n engine[p](args[p]);\n });\n if(engine.supportsWebworker && engine.supportsWebworker() && worker)\n engine = dc_graph.webworker_layout(engine);\n return engine;\n },\n available: function() {\n return dc_graph._engines.reduce(function(avail, entry) {\n return avail.concat(entry.name ? [entry.name] : entry.names);\n }, []);\n },\n unregister: function(layoutName) {\n // meh. this is a bit much. there is such a thing as making the api too \"easy\".\n var i = dc_graph._engines.findIndex(this.entry_pred(layoutName));\n var remove = false;\n if(i < 0)\n return false;\n var entry = dc_graph._engines[i];\n if(entry.name === layoutName)\n remove = true;\n else {\n var j = entry.names.indexOf(layoutName);\n if(j >= 0)\n entry.names.splice(j, 1);\n else\n console.warn('search for engine failed', layoutName);\n if(entry.names.length === 0)\n remove = true;\n }\n if(remove)\n dc_graph._engines.splice(i, 1);\n return true;\n },\n register: function(entry) {\n var that = this;\n if(!entry.instantiate) {\n console.error('engine definition needs instantiate: function(layout, args) { ... }');\n return this;\n }\n if(entry.name)\n this.unregister(entry.name);\n else if(entry.names)\n entry.names.forEach(function(layoutName) {\n that.unregister(layoutName);\n });\n else {\n console.error('engine definition needs name or names[]');\n return this;\n }\n dc_graph._engines.push(entry);\n return this;\n }\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(graph, nodes, edges, constraints) {\n _worker.worker.postMessage({\n command: 'data',\n args: {\n layoutId: layoutEngine.layoutId(),\n graph: graph,\n nodes: nodes,\n edges: edges,\n constraints: constraints\n }\n });\n };\n engine.start = function() {\n _worker.worker.postMessage({\n command: 'start',\n args: {\n layoutId: layoutEngine.layoutId()\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', 'needsStage',\n 'populateLayoutNode', 'populateLayoutEdge', 'rankdir', 'ranksep'];\n passthroughs.concat(layoutEngine.optionNames()).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 if(arguments.length === 1)\n return _dispatch.on(event);\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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.dcg_nodeFixed;\n\n if(v1.fixed && typeof v.dcg_nodeFixed === 'object') {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_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, null, 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(engine.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() {\n _d3cola.start(engine.unconstrainedIterations(),\n engine.userConstraintIterations(),\n engine.allConstraintsIterations(),\n engine.gridSnapIterations());\n }\n\n function stop() {\n if(_d3cola)\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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize', 'groupConnected']\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 * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.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 switch(dir) {\n case 'LR': return {axis: 'x', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n case 'TB': return {axis: 'y', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n default: return null; // RL, BT do not appear to be possible (negative separation) (?)\n }\n }\n _flowLayout = flow;\n return this;\n },\n unconstrainedIterations: property(10),\n userConstraintIterations: property(20),\n allConstraintsIterations: property(20),\n gridSnapIterations: property(0),\n tickSize: property(1),\n groupConnected: property(false)\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, nodesep: options.nodesep, ranksep: options.ranksep});\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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 /*\n dagre does not seem to accept input positions\n if(v.dcg_nodeFixed) {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n }\n */\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, null, 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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n start: function() {\n start();\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 encode_name(e.dcg_edgeTarget) + '\" ' + stringize_properties([\n stringize_property('id', encode_name(e.dcg_edgeKey)),\n stringize_property('arrowhead', 'none'),\n stringize_property('arrowtail', 'none')\n ]);\n }));\n lines.push('}');\n lines.push('');\n _dotString = lines.join('\\n');\n }\n\n function process_response(error, result) {\n _dispatch.start();\n var bb = result.bb.split(',').map(function(x) { return +x; });\n var nodes = (result.objects || []).filter(function(n) {\n return n.pos; // remove non-nodes like clusters\n }).map(function(n) {\n var pos = n.pos.split(',');\n return {\n dcg_nodeKey: decode_name(n.name),\n x: +pos[0],\n y: bb[3] - pos[1]\n };\n });\n _clusters = (result.objects || []).filter(function(n) {\n return /^cluster/.test(n.name);\n });\n _clusters.forEach(function(c) {\n // annotate with flipped cluster coords for convenience\n c.bbflip = c.bb.split(',').map(function(s) { return +s; });\n var t = bb[3] - c.bbflip[1];\n c.bbflip[1] = bb[3] - c.bbflip[3];\n c.bbflip[3] = t;\n });\n var edges = (result.edges || []).map(function(e) {\n var e2 = {\n dcg_edgeKey: decode_name(e.id || 'n' + e._gvid)\n };\n if(e._draw_) {\n var directive = e._draw_.find(function(d) { return d.op && d.points; });\n e2.points = directive.points.map(function(p) { return {x: p[0], y: bb[3] - p[1]}; });\n }\n return e2;\n });\n _dispatch.end(nodes, edges);\n }\n\n function start() {\n if(server) {\n d3.json(server)\n .header(\"Content-type\", \"application/x-www-form-urlencoded\")\n .post('layouttool=' + layout + '&' + encodeURIComponent(_dotString), process_response);\n }\n else {\n var result = Viz(_dotString, {format: 'json', engine: layout, totalMemory: 1 << 25});\n result = JSON.parse(result);\n process_response(null, result);\n }\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 layout;\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return false;\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n dotInput: function(text) {\n _dotInput = text;\n return this;\n },\n clusters: function() {\n // filter out clusters and return them separately, because dc.graph doesn't know how to draw them\n return _clusters;\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return graphviz_keys;\n },\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n}\n\n","/**\n * `dc_graph.d3_force_layout` is an adaptor for d3-force layouts in dc.graph.js\n * @class d3_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3_force_layout}\n **/\ndc_graph.d3_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3.layout.force()\n .size([options.width, options.height]);\n\n _simulation.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fixed = true;\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n } else v1.fixed = false;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, 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.source.id = nodeIDs[e1.source.dcg_nodeKey];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.target.id = nodeIDs[e1.target.dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.nodes(_wnodes);\n _simulation.links(_wedges);\n }\n\n function start() {\n installForces();\n runSimulation(_options.iterations);\n }\n\n function stop() {\n if(_simulation)\n _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fixed = false;\n _nodes[key].x = data[key].x;\n _nodes[key].y = data[key].y;\n }\n });\n }\n\n function installForces() {\n if(_paths === null)\n _simulation.gravity(_options.gravityStrength)\n .charge(_options.initialCharge);\n else {\n if(_options.fixOffPathNodes) {\n var nodesOnPath = d3.set(); // nodes on path\n _paths.forEach(function(path) {\n path.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(!nodesOnPath.has(key)) {\n _nodes[key].fixed = true;\n } else {\n _nodes[key].fixed = false;\n }\n });\n }\n\n // enlarge charge force to separate nodes on paths\n _simulation.charge(_options.chargeForce);\n }\n };\n\n function runSimulation(iterations) {\n if(!iterations) {\n dispatchState('end');\n return;\n }\n _simulation.start();\n for (var i = 0; i < 300; ++i) {\n _simulation.tick();\n if(_paths)\n applyPathAngleForces();\n }\n _simulation.stop();\n }\n\n function applyPathAngleForces() {\n function _dot(v1, v2) { return v1.x*v2.x + v1.y*v2.y; };\n function _len(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n function _angle(v1, v2) {\n var a = _dot(v1, v2) / (_len(v1)*_len(v2));\n a = Math.min(a, 1);\n a = Math.max(a, -1);\n return Math.acos(a);\n };\n // perpendicular unit length vector\n function _pVec(v) {\n var xx = -v.y/v.x, yy = 1;\n var length = _len({x: xx, y: yy});\n return {x: xx/length, y: yy/length};\n };\n\n function updateNode(node, angle, pVec, alpha) {\n node.x += pVec.x*(Math.PI-angle)*alpha;\n node.y += pVec.y*(Math.PI-angle)*alpha;\n }\n\n _paths.forEach(function(path) {\n if(path.length < 3) return; // at least 3 nodes (and 2 edges): A->B->C\n for(var i = 1; i < path.length-1; ++i) {\n var current = _nodes[path[i]];\n var prev = _nodes[path[i-1]];\n var next = _nodes[path[i+1]];\n\n // calculate the angle\n var vPrev = {x: prev.x - current.x, y: prev.y - current.y};\n var vNext = {x: next.x - current.x, y: next.y - current.y};\n\n var angle = _angle(vPrev, vNext); // angle in [0, PI]\n\n var pvecPrev = _pVec(vPrev);\n var pvecNext = _pVec(vNext);\n\n // make sure the perpendicular vector is in the\n // direction that makes the angle more towards 180 degree\n // 1. calculate the middle point of node 'prev' and 'next'\n var mid = {x: (prev.x+next.x)/2.0, y: (prev.y+next.y)/2.0};\n // 2. calculate the vectors: 'prev' pointing to 'mid', 'next' pointing to 'mid'\n var prev_mid = {x: mid.x-prev.x, y: mid.y-prev.y};\n var next_mid = {x: mid.x-next.x, y: mid.y-next.y};\n // 3. the 'correct' vector: the angle between pvec and prev_mid(next_mid) should\n // be an obtuse angle\n pvecPrev = _angle(prev_mid, pvecPrev) >= Math.PI/2.0 ? pvecPrev : {x: -pvecPrev.x, y: -pvecPrev.y};\n pvecNext = _angle(next_mid, pvecNext) >= Math.PI/2.0 ? pvecNext : {x: -pvecNext.x, y: -pvecNext.y};\n\n // modify positions of prev and next\n updateNode(prev, angle, pvecPrev, _options.angleForce);\n updateNode(next, angle, pvecNext, _options.angleForce);\n }\n\n });\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.02),\n chargeForce: property(-500),\n gravityStrength: property(1.0),\n initialCharge: property(-400),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n return engine;\n};\n\ndc_graph.d3_force_layout.scripts = ['d3.js'];\n","/**\n * `dc_graph.d3v4_force_layout` is an adaptor for d3-force version 4 layouts in dc.graph.js\n * @class d3v4_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3v4_force_layout}\n **/\ndc_graph.d3v4_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3v4.forceSimulation()\n .force('link', d3v4.forceLink())\n .force('center', d3v4.forceCenter(options.width / 2, options.height / 2))\n .force('gravityX', d3v4.forceX(options.width / 2).strength(_options.gravityStrength))\n .force('gravityY', d3v4.forceY(options.height / 2).strength(_options.gravityStrength))\n .force('collision', d3v4.forceCollide(_options.collisionRadius))\n .force('charge', d3v4.forceManyBody())\n .stop();\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fx = v.dcg_nodeFixed.x;\n v1.fy = v.dcg_nodeFixed.y;\n } else v1.fx = v1.fy = null;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.source = nodeIDs[_nodes[e.dcg_edgeSource].dcg_nodeKey];\n e1.target = nodeIDs[_nodes[e.dcg_edgeTarget].dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.force('straighten', null);\n _simulation.nodes(_wnodes);\n _simulation.force('link').links(_wedges);\n }\n\n function start() {\n _dispatch.start();\n installForces(_paths);\n runSimulation(_options.iterations);\n }\n\n function stop() {\n // not running asynchronously, no _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fx = data[key].x;\n _nodes[key].fy = data[key].y;\n }\n });\n }\n function installForces(paths) {\n if(paths)\n paths = paths.filter(function(path) {\n return path.nodes.every(function(nk) { return _nodes[nk]; });\n });\n if(paths === null || !paths.length) {\n _simulation.force('charge').strength(_options.initialCharge);\n } else {\n var nodesOnPath;\n if(_options.fixOffPathNodes) {\n nodesOnPath = d3.set();\n paths.forEach(function(path) {\n path.nodes.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n }\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(_options.fixOffPathNodes && !nodesOnPath.has(key)) {\n _nodes[key].fx = _nodes[key].x;\n _nodes[key].fy = _nodes[key].y;\n } else {\n _nodes[key].fx = null;\n _nodes[key].fy = null;\n }\n });\n\n _simulation.force('charge').strength(_options.chargeForce);\n _simulation.force('straighten', d3v4.forceStraightenPaths()\n .id(function(n) { return n.dcg_nodeKey; })\n .angleForce(_options.angleForce)\n .pathNodes(function(p) { return p.nodes; })\n .pathStrength(function(p) { return p.strength; })\n .paths(paths));\n }\n };\n\n function runSimulation(iterations) {\n _simulation.alpha(1);\n for (var i = 0; i < iterations; ++i) {\n _simulation.tick();\n dispatchState('tick');\n }\n dispatchState('end');\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3v4-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength', 'collisionRadius',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.01),\n chargeForce: property(-600),\n gravityStrength: property(0.3),\n collisionRadius: property(8),\n initialCharge: property(-100),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n engine.pathStraightenForce = engine.angleForce;\n return engine;\n};\n\ndc_graph.d3v4_force_layout.scripts = ['d3.js', 'd3v4-force.js'];\n","dc_graph.flexbox_layout = function(id) {\n var _layoutId = id || uuid();\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n\n var _graph, _tree, _nodes = {}, _wnodes;\n\n function init(options) {\n }\n // like d3.nest but address can be of arbitrary (and different) length\n // probably less efficient too\n function add_node(adhead, adtail, n, tree) {\n tree.address = adhead.slice();\n tree.children = tree.children || {};\n if(!adtail.length) {\n tree.node = n;\n return;\n }\n var t = tree.children[adtail[0]] = tree.children[adtail[0]] || {};\n adhead.push(adtail.shift());\n add_node(adhead, adtail, n, t);\n }\n function all_keys(tree) {\n var key = _engine.addressToKey()(tree.address);\n return Array.prototype.concat.apply([key], Object.keys(tree.children).map(function(k) {\n return all_keys(tree.children[k]);\n }));\n }\n function data(graph, nodes) {\n _graph = graph;\n _tree = {};\n nodes.forEach(function(n) {\n var ad = _engine.keyToAddress()(n.dcg_nodeKey);\n add_node([], ad, n, _tree);\n });\n var need = all_keys(_tree);\n _wnodes = nodes;\n }\n var internal_attrs = ['sort', 'dcg_nodeKey', 'x', 'y'],\n skip_on_parents = ['width', 'height'];\n function create_flextree(attrs, tree) {\n var flexnode = {name: _engine.addressToKey()(tree.address), style: {}};\n var attrs2 = Object.assign({}, attrs);\n var isParent = Object.keys(tree.children).length;\n if(tree.node)\n Object.assign(attrs, tree.node);\n for(var attr in attrs) {\n if(internal_attrs.includes(attr))\n continue;\n if(isParent && skip_on_parents.includes(attr))\n continue;\n var value = attrs[attr];\n if(typeof value === 'function')\n value = value(tree.node);\n flexnode.style[attr] = value;\n }\n if(isParent) {\n flexnode.children = Object.values(tree.children)\n .sort(attrs.sort)\n .map(function(c) { return c.address[c.address.length-1]; })\n .map(function(key) {\n return create_flextree(Object.assign({}, attrs2), tree.children[key]);\n });\n }\n tree.flexnode = flexnode;\n return flexnode;\n }\n function apply_layout(offset, tree) {\n if(_engine.logStuff())\n console.log(tree.node.dcg_nodeKey + ': '+ JSON.stringify(tree.flexnode.layout));\n tree.node.x = offset.x + tree.flexnode.layout.left + tree.flexnode.layout.width/2;\n tree.node.y = offset.y + tree.flexnode.layout.top + tree.flexnode.layout.height/2;\n Object.keys(tree.children)\n .map(function(key) { return tree.children[key]; })\n .forEach(function(child) {\n apply_layout({x: offset.x + tree.flexnode.layout.left, y: offset.y + tree.flexnode.layout.top}, child);\n });\n }\n function dispatchState(wnodes, wedges, event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n function start() {\n var defaults = {\n sort: function(a, b) {\n return d3.ascending(a.node.dcg_nodeKey, b.node.dcg_nodeKey);\n }\n };\n var flexTree = create_flextree(defaults, _tree);\n flexTree.style.width = _graph.width;\n flexTree.style.height = _graph.height;\n if(_engine.logStuff())\n console.log(JSON.stringify(flexTree, null, 2));\n computeLayout(flexTree);\n apply_layout({x: 0, y: 0}, _tree);\n dispatchState(_wnodes, [], 'end');\n }\n function stop() {\n }\n\n // currently dc.graph populates the \"cola\" (really \"layout\") member with the attributes\n // needed for layout and does not pass in the original data. flexbox has a huge number of attributes\n // and it might be more appropriate for it to look at the original data.\n // (Especially because it also computes some attributes based on data.)\n var supportedAttributes = [\n 'width', 'height', // positive number\n 'minWidth', 'minHeight', // positive number\n 'maxWidth', 'maxHeight', // positive number\n 'left', 'right', 'top', 'bottom', // number\n 'margin', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom', // number\n 'padding', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', // positive number\n 'borderWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'borderBottomWidth', // positive number\n 'flexDirection', // 'column', 'row'\n 'justifyContent', // 'flex-start', 'center', 'flex-end', 'space-between', 'space-around'\n 'alignItems', 'alignSelf', // 'flex-start', 'center', 'flex-end', 'stretch'\n 'flex', // positive number\n 'flexWrap', // 'wrap', 'nowrap'\n 'position' // 'relative', 'absolute'\n ];\n\n var _engine = {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes) {\n data(graph, nodes);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return [];\n },\n populateLayoutNode: function(n1, n) {\n ['sort', 'order'].concat(supportedAttributes).forEach(function(attr) {\n if(n.orig.value[attr])\n n1[attr] = n.orig.value[attr];\n });\n },\n populateLayoutEdge: function() {},\n addressToKey: property(function(ad) { return ad.join(','); }),\n keyToAddress: property(function(nid) { return nid.split(','); }),\n logStuff: property(false)\n };\n return _engine;\n};\n\ndc_graph.flexbox_layout.scripts = ['css-layout.js'];\n","dc_graph.manual_layout = function(id) {\n var _layoutId = id || uuid();\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n\n var _wnodes;\n\n function init(options) {\n }\n function data(nodes) {\n _wnodes = nodes;\n }\n function dispatchState(wnodes, wedges, event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n function start() {\n dispatchState(_wnodes, [], 'end');\n }\n function stop() {\n }\n\n var _engine = {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return [];\n },\n populateLayoutNode: function(n1, n) {\n ['x', 'y'].forEach(function(attr) {\n if(n.orig.value[attr] !== undefined)\n n1[attr] = n.orig.value[attr];\n });\n },\n populateLayoutEdge: function() {},\n addressToKey: property(function(ad) { return ad.join(','); }),\n keyToAddress: property(function(nid) { return nid.split(','); })\n };\n return _engine;\n};\n\ndc_graph.manual_layout.scripts = ['css-layout.js'];\n","function port_name(nodeId, edgeId, portName) {\n if(!(nodeId || edgeId))\n return null; // must have one key or the other\n if(nodeId) nodeId = nodeId.replace(/\\//g, '%2F');\n if(edgeId) edgeId = edgeId.replace(/\\//g, '%2F');\n return (nodeId ? 'node/' + nodeId : 'edge/' + edgeId) + '/' + portName;\n};\nfunction split_port_name(portname) {\n var parts = portname.split('/');\n console.assert(parts.length === 3);\n parts = parts.map(function(p) {\n return p.replace(/%2F/g, '/');\n });\n if(parts[0] === 'node')\n return {\n nodeKey: parts[1],\n name: parts[2]\n };\n else return {\n edgeKey: parts[1],\n name: parts[2]\n };\n}\nfunction project_port(diagram, n, p) {\n if(!p.vec) {\n console.assert(!p.edges.length);\n throw new Error(\"port has not been placed, maybe install place_ports? \" + p.name);\n }\n p.pos = diagram.shape(n.dcg_shape.shape).intersect_vec(n, p.vec[0]*1000, p.vec[1]*1000);\n}\n\ndc_graph.place_ports = function() {\n function received_layout(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n var node_ports = diagram.nodePorts();\n\n function is_ccw(u, v) {\n return u[0]*v[1] - u[1]*v[0] > 0;\n }\n function in_bounds(v, bounds) {\n // assume bounds are ccw\n return is_ccw(bounds[0], v) && is_ccw(v, bounds[1]);\n }\n function clip(v, bounds) {\n if(is_ccw(v, bounds[0]))\n return bounds[0];\n else if(is_ccw(bounds[1], v))\n return bounds[1];\n else return v;\n }\n function a_to_v(a) {\n return [Math.cos(a), Math.sin(a)];\n }\n function v_to_a(v) {\n return Math.atan2(v[1], v[0]);\n }\n function distance(p, p2) {\n return Math.hypot(p2.pos.x - p.pos.x, p2.pos.y - p.pos.y);\n }\n function misses(p, p2) {\n var dist = distance(p, p2);\n var misses = dist > _behavior.minDistance();\n return misses;\n }\n function rand_within(a, b) {\n return a + Math.random()*(b-a);\n }\n // calculate port positions\n for(var nid in node_ports) {\n var n = nodes[nid],\n nports = node_ports[nid];\n\n // make sure that we have vector and angle bounds for any ports with specification\n nports.forEach(function(p) {\n var bounds = p.orig && diagram.portBounds.eval(p) || [0, 2*Math.PI];\n if(Array.isArray(bounds[0])) {\n p.vbounds = bounds;\n p.abounds = bounds.map(v_to_a);\n }\n else {\n p.vbounds = bounds.map(a_to_v);\n p.abounds = bounds;\n }\n if(p.abounds[0] > p.abounds[1])\n p.abounds[1] += 2*Math.PI;\n console.assert(p.orig || p.vec, 'unplaced unspecified port');\n });\n\n // determine which ports satisfy bounds or are unplaced\n var inside = [], outside = [], unplaced = [];\n nports.forEach(function(p) {\n if(!p.vec)\n unplaced.push(p);\n else if(p.vbounds && !in_bounds(p.vec, p.vbounds))\n outside.push(p);\n else\n inside.push(p);\n });\n\n // shunt outside ports into their bounds\n outside.forEach(function(p) {\n p.vec = clip(p.vec, p.vbounds);\n inside.push(p);\n });\n\n // for all unplaced ports that share a bounds, evenly distribute them within those bounds.\n // assume that bounds are disjoint.\n var boundses = {}, boundports = {};\n unplaced.forEach(function(p) {\n var boundskey = p.abounds.map(function(x) { return x.toFixed(3); }).join(',');\n boundses[boundskey] = p.abounds;\n boundports[boundskey] = boundports[boundskey] || [];\n boundports[boundskey].push(p);\n });\n for(var b in boundports) {\n var bounds = boundses[b], bports = boundports[b];\n if(bports.length === 1)\n bports[0].vec = a_to_v((bounds[0] + bounds[1])/2);\n else {\n var slice = (bounds[1] - bounds[0]) / (boundports[b].length - 1);\n boundports[b].forEach(function(p, i) {\n p.vec = a_to_v(bounds[0] + i*slice);\n });\n }\n }\n inside = inside.concat(unplaced);\n unplaced = [];\n\n // determine positions of all satisfied\n inside.forEach(function(p) {\n project_port(diagram, n, p);\n });\n\n // detect any existing collisions, unplace the one without edges or second one\n for(var i = 0; i < inside.length; ++i) {\n var x = inside[i];\n if(unplaced.includes(x))\n continue;\n for(var j = i+1; j < inside.length; ++j) {\n var y = inside[j];\n if(unplaced.includes(y))\n continue;\n if(!misses(x, y)) {\n if(!x.edges.length) {\n unplaced.push(x);\n continue;\n }\n else\n unplaced.push(y);\n }\n }\n }\n inside = inside.filter(function(p) { return !unplaced.includes(p); });\n\n // place any remaining by trying random spots within the range until it misses all or we give up\n var patience = _behavior.patience(), maxdist = 0, maxvec;\n while(unplaced.length) {\n var p = unplaced[0];\n p.vec = a_to_v(rand_within(p.abounds[0], p.abounds[1]));\n project_port(diagram, n, p);\n var mindist = d3.min(inside, function(p2) { return distance(p, p2); });\n if(mindist > maxdist) {\n maxdist = mindist;\n maxvec = p.vec;\n }\n if(!patience-- || mindist > _behavior.minDistance()) {\n if(patience<0) {\n console.warn('ran out of patience placing a port');\n p.vec = maxvec;\n project_port(diagram, n, p);\n }\n inside.push(p);\n unplaced.shift();\n patience = _behavior.patience();\n maxdist = 0;\n }\n }\n }\n };\n var _behavior = {\n parent: property(null).react(function(p) {\n if(p) {\n p.on('receivedLayout.place-ports', received_layout);\n } else if(_behavior.parent())\n _behavior.parent().on('receivedLayout.place-ports', null);\n }),\n // minimum distance between ports\n minDistance: property(20),\n // number of random places to try when resolving collision\n patience: property(20)\n };\n\n return _behavior;\n};\n","dc_graph.troubleshoot = function() {\n var _debugLayer = null;\n\n function add_behavior(diagram, node, edge, ehover) {\n if(!_debugLayer)\n _debugLayer = diagram.g().append('g').attr({\n class: 'troubleshoot',\n 'pointer-events': 'none'\n });\n var centers = node.data().map(function(n) {\n return {\n x: n.cola.x,\n y: n.cola.y\n };\n });\n var crosshairs = _debugLayer.selectAll('path.nodecenter').data(centers);\n crosshairs.exit().remove();\n crosshairs.enter().append('path').attr('class', 'nodecenter');\n crosshairs.attr({\n d: function(c) {\n return 'M' + (c.x - _behavior.xhairWidth()/2) + ',' + c.y + ' h' + _behavior.xhairWidth() +\n ' M' + c.x + ',' + (c.y - _behavior.xhairHeight()/2) + ' v' + _behavior.xhairHeight();\n },\n opacity: _behavior.xhairOpacity() !== null ? _behavior.xhairOpacity() : _behavior.opacity(),\n stroke: _behavior.xhairColor()\n });\n function cola_point(n) {\n return {x: n.cola.x, y: n.cola.y};\n }\n var colabounds = node.data().map(function(n) {\n return boundary(cola_point(n), n.cola.width, n.cola.height);\n });\n var colaboundary = _debugLayer.selectAll('path.colaboundary').data(colabounds);\n draw_corners(colaboundary, 'colaboundary');\n\n var textbounds = node.data().map(function(n) {\n if(!n.bbox)\n return null;\n return boundary(cola_point(n), n.bbox.width, n.bbox.height);\n }).filter(function(n) { return !!n; });\n var textboundary = _debugLayer.selectAll('path.textboundary').data(textbounds);\n draw_corners(textboundary, 'textboundary');\n\n var radiibounds = node.data().map(function(n) {\n if(!typeof n.dcg_rx === 'number')\n return null;\n return boundary(cola_point(n), n.dcg_rx*2, n.dcg_ry*2);\n }).filter(function(n) { return !!n; });\n var radiiboundary = _debugLayer.selectAll('path.radiiboundary').data(radiibounds);\n draw_corners(radiiboundary, 'radiiboundary');\n\n var domain = _debugLayer.selectAll('rect.domain').data([0]);\n domain.enter().append('rect');\n var xd = _behavior.parent().x().domain(), yd = _behavior.parent().y().domain();\n domain.attr({\n class: 'domain',\n fill: 'none',\n opacity: _behavior.domainOpacity(),\n stroke: _behavior.domainColor(),\n 'stroke-width': _behavior.domainStrokeWidth(),\n x: xd[0],\n y: yd[0],\n width: xd[1] - xd[0],\n height: yd[1] - yd[0]\n });\n }\n function boundary(point, wid, hei) {\n return {\n left: point.x - wid/2,\n top: point.y - hei/2,\n right: point.x + wid/2,\n bottom: point.y + hei/2\n };\n };\n function bound_tick(x, y, dx, dy) {\n return 'M' + x + ',' + (y + dy) + ' v' + -dy + ' h' + dx;\n }\n function corners(bounds) {\n return [\n bound_tick(bounds.left, bounds.top, _behavior.boundsWidth(), _behavior.boundsHeight()),\n bound_tick(bounds.right, bounds.top, -_behavior.boundsWidth(), _behavior.boundsHeight()),\n bound_tick(bounds.right, bounds.bottom, -_behavior.boundsWidth(), -_behavior.boundsHeight()),\n bound_tick(bounds.left, bounds.bottom, _behavior.boundsWidth(), -_behavior.boundsHeight()),\n ].join(' ');\n }\n function draw_corners(binding, classname) {\n binding.exit().remove();\n binding.enter().append('path').attr('class', classname);\n binding.attr({\n d: corners,\n opacity: _behavior.boundsOpacity() !== null ? _behavior.boundsOpacity() : _behavior.opacity(),\n stroke: _behavior.boundsColor(),\n fill: 'none'\n });\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n if(_debugLayer)\n _debugLayer.remove();\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n laterDraw: true,\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n _behavior.opacity = property(0.75);\n\n _behavior.xhairOpacity = property(null);\n _behavior.xhairWidth = property(10);\n _behavior.xhairHeight = property(10);\n _behavior.xhairColor = property('blue');\n\n _behavior.boundsOpacity = property(null);\n _behavior.boundsWidth = property(10);\n _behavior.boundsHeight = property(10);\n _behavior.boundsColor = property('green');\n\n _behavior.domainOpacity = property(0.6);\n _behavior.domainColor = property('darkorange');\n _behavior.domainStrokeWidth = property(11);\n\n return _behavior;\n};\n\n"," dc_graph.validate = function(title) {\n function falsy(objects, accessor, what, who) {\n var f = objects.filter(function(o) {\n return !accessor(o);\n });\n return f.length ?\n [what + ' is empty for ' + f.length + ' of ' + objects.length + ' ' + who, f] :\n null;\n }\n function build_index(objects, accessor) {\n return objects.reduce(function(m, o) {\n m[accessor(o)] = o;\n return m;\n }, {});\n }\n function not_found(index, objects, accessor, what, where, who) {\n var nf = objects.filter(function(o) {\n return !index[accessor(o)];\n }).map(function(o) {\n return {key: accessor(o), value: o};\n });\n return nf.length ?\n [what + ' was not found in ' + where, Object.keys(index), 'for ' + nf.length + ' of ' + objects.length + ' ' + who, nf] :\n null;\n }\n function validate() {\n var diagram = _behavior.parent();\n var nodes = diagram.nodeGroup().all(),\n edges = diagram.edgeGroup().all(),\n ports = diagram.portGroup() ? diagram.portGroup().all() : [];\n var errors = [];\n\n function check(error) {\n if(error)\n errors.push(error);\n }\n\n check(falsy(nodes, diagram.nodeKey(), 'nodeKey', 'nodes'));\n check(falsy(edges, diagram.edgeSource(), 'edgeSource', 'edges'));\n check(falsy(edges, diagram.edgeTarget(), 'edgeTarget', 'edges'));\n\n var contentTypes = d3.set(diagram.content.enum());\n var ct = dc_graph.functor_wrap(diagram.nodeContent());\n var noContentNodes = nodes.filter(function(kv) {\n return !contentTypes.has(ct(kv));\n });\n if(noContentNodes.length)\n errors.push(['there are ' + noContentNodes.length + ' nodes with nodeContent not matching any content', noContentNodes]);\n\n var nindex = build_index(nodes, diagram.nodeKey()),\n eindex = build_index(edges, diagram.edgeKey());\n check(not_found(nindex, edges, diagram.edgeSource(), 'edgeSource', 'nodes', 'edges'));\n check(not_found(nindex, edges, diagram.edgeTarget(), 'edgeTarget', 'nodes', 'edges'));\n\n check(falsy(ports, function(p) {\n return diagram.portNodeKey() && diagram.portNodeKey()(p) ||\n diagram.portEdgeKey() && diagram.portEdgeKey()(p);\n }, 'portNodeKey||portEdgeKey', 'ports'));\n\n var named_ports = !diagram.portNodeKey() && [] || ports.filter(function(p) {\n return diagram.portNodeKey()(p);\n });\n var anonymous_ports = !diagram.portEdgeKey() && [] || ports.filter(function(p) {\n return diagram.portEdgeKey()(p);\n });\n check(not_found(nindex, named_ports, diagram.portNodeKey(), 'portNodeKey', 'nodes', 'ports'));\n check(not_found(eindex, anonymous_ports, diagram.portEdgeKey(), 'portEdgeKey', 'edges', 'ports'));\n\n if(diagram.portName()) {\n var pindex = build_index(named_ports, function(p) {\n return diagram.portNodeKey()(p) + ' - ' + diagram.portName()(p);\n });\n if(diagram.edgeSourcePortName())\n check(not_found(pindex, edges, function(e) {\n return diagram.edgeSource()(e) + ' - ' + d3.functor(diagram.edgeSourcePortName())(e);\n }, 'edgeSourcePortName', 'ports', 'edges'));\n if(diagram.edgeTargetPortName())\n check(not_found(pindex, edges, function(e) {\n return diagram.edgeTarget()(e) + ' - ' + d3.functor(diagram.edgeTargetPortName())(e);\n }, 'edgeTargetPortName', 'ports', 'edges'));\n }\n\n function count_text() {\n return nodes.length + ' nodes, ' + edges.length + ' edges, ' + ports.length + ' ports';\n }\n if(errors.length) {\n console.warn('validation of ' + title + ' failed with ' + count_text() + ':');\n errors.forEach(function(err) {\n console.warn.apply(null, err);\n });\n }\n else\n console.log('validation of ' + title + ' succeeded with ' + count_text() + '.');\n }\n var _behavior = {\n parent: property(null).react(function(p) {\n if(p)\n p.on('data.validate', validate);\n else\n _behavior.parent().on('data.validate', null);\n })\n };\n\n return _behavior;\n};\n","/**\n## Legend\n\nThe dc_graph.legend shows labeled examples of nodes & edges, within the frame of a dc_graph.diagram.\n**/\ndc_graph.legend = function(legend_namespace) {\n legend_namespace = legend_namespace || 'node-legend';\n var _items, _included = [];\n var _dispatch = d3.dispatch('filtered');\n var _totals, _counts;\n\n function apply_filter() {\n if(_legend.dimension()) {\n _legend.dimension().filterFunction(function(k) {\n return !_included.length || _included.includes(k);\n });\n _legend.parent().redraw();\n }\n }\n\n var _legend = dc_graph.behavior(legend_namespace, {\n add_behavior: redraw,\n remove_behavior: function() {},\n parent: function(p) {\n if(p) {\n p\n .on('render.' + legend_namespace, render)\n .on('data.' + legend_namespace, on_data);\n }\n else {\n _legend.parent()\n .on('render.' + legend_namespace, null)\n .on('data.' + legend_namespace, null);\n }\n }\n });\n\n /**\n #### .type([value])\n Set or get the handler for the specific type of item to be displayed. Default: dc_graph.legend.node_legend()\n **/\n _legend.type = property(dc_graph.legend.node_legend());\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 #### .itemWidth([value])\n Set or get width to reserve for legend item. Default: 30.\n **/\n _legend.itemWidth = _legend.nodeWidth = property(40);\n\n /**\n #### .itemHeight([value])\n Set or get height to reserve for legend item. Default: 30.\n **/\n _legend.itemHeight = _legend.nodeHeight = property(40);\n\n /**\n #### .noLabel([value])\n Remove item labels, since legend labels are displayed outside of the items. Default: true\n **/\n _legend.noLabel = property(true);\n\n _legend.counter = property(null);\n\n _legend.replaceFilter = function(filter) {\n if(filter && filter.length === 1)\n _included = filter[0];\n else\n _included = [];\n return _legend;\n };\n\n _legend.filters = function() {\n return _included;\n };\n\n _legend.on = function(type, f) {\n _dispatch.on(type, f);\n return _legend;\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 function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n if(_legend.counter())\n _counts = _legend.counter()(wnodes.map(get_original), wedges.map(get_original), wports.map(get_original));\n }\n\n function redraw() {\n var legend = _legend.parent().svg()\n .selectAll('g.dc-graph-legend.' + legend_namespace)\n .data([0]);\n legend.enter().append('g')\n .attr('class', 'dc-graph-legend ' + legend_namespace)\n .attr('transform', 'translate(' + _legend.x() + ',' + _legend.y() + ')');\n\n var item = legend.selectAll(_legend.type().itemSelector())\n .data(_items, function(n) { return n.name; });\n var itemEnter = _legend.type().create(_legend.parent(), item.enter(), _legend.itemWidth(), _legend.itemHeight());\n itemEnter.append('text')\n .attr('dy', '0.3em')\n .attr('class', 'legend-label');\n item\n .attr('transform', function(n, i) {\n return 'translate(' + _legend.itemWidth()/2 + ',' + (_legend.itemHeight() + _legend.gap())*(i+0.5) + ')';\n });\n item.select('text.legend-label')\n .attr('transform', 'translate(' + (_legend.itemWidth()/2+_legend.gap()) + ',0)')\n .attr('pointer-events', _legend.dimension() ? 'auto' : 'none')\n .text(function(d) {\n return d.name + (_legend.counter() && _counts ? (' (' + (_counts[d.orig.key] || 0) + (_counts[d.orig.key] !== _totals[d.orig.key] ? '/' + (_totals[d.orig.key] || 0) : '') + ')') : '');\n });\n _legend.type().draw(_legend.parent(), itemEnter, item);\n if(_legend.noLabel())\n item.selectAll(_legend.type().labelSelector()).remove();\n\n if(_legend.dropdown()) {\n var caret = item.selectAll('text.dropdown-caret').data(function(x) { return [x]; });\n caret\n .enter().append('text')\n .attr('dy', '0.3em')\n .attr('font-size', '75%')\n .attr('fill', 'blue')\n .attr('class', 'dropdown-caret')\n .style('visibility', 'hidden')\n .html(' ▼');\n caret\n .attr('dx', function(d) {\n return (_legend.itemWidth()/2+_legend.gap()) + getBBoxNoThrow(d3.select(this.parentNode).select('text.legend-label').node()).width;\n })\n .on('mouseenter', function(n) {\n var rect = this.getBoundingClientRect();\n var key = _legend.parent().nodeKey.eval(n);\n _legend.dropdown()\n .show(key, rect.x, rect.y);\n });\n item\n .on('mouseenter', function(d) {\n if(_counts && _counts[d.orig.key]) {\n d3.select(this).selectAll('.dropdown-caret')\n .style('visibility', 'visible');\n }\n })\n .on('mouseleave', function(d) {\n d3.select(this).selectAll('.dropdown-caret')\n .style('visibility', 'hidden');\n });\n }\n\n if(_legend.dimension()) {\n item.attr('cursor', 'pointer')\n .on('click.legend', function(d) {\n var key = _legend.parent().nodeKey.eval(d);\n if(!_included.length)\n _included = _items.map(_legend.parent().nodeKey.eval);\n if(_included.includes(key))\n _included = _included.filter(function(x) { return x !== key; });\n else\n _included.push(key);\n apply_filter();\n _dispatch.filtered(_legend, key);\n });\n } else {\n item.attr('cursor', 'auto')\n .on('click.legend', null);\n }\n item.transition().duration(1000)\n .attr('opacity', function(d) {\n return (!_included.length || _included.includes(_legend.parent().nodeKey.eval(d))) ? 1 : 0.25;\n });\n };\n\n _legend.countBaseline = function() {\n if(_legend.counter)\n _totals = _legend.counter()(\n _legend.parent().nodeGroup().all(),\n _legend.parent().edgeGroup().all(),\n _legend.parent().portGroup() && _legend.parent().portGroup().all());\n };\n\n function render() {\n var exemplars = _legend.exemplars();\n _legend.countBaseline();\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 redraw();\n };\n\n _legend.dropdown = property(null).react(function(v) {\n if(!!v !== !!_legend.dropdown() && _legend.parent() && _legend.parent().svg())\n window.setTimeout(_legend.redraw, 0);\n });\n\n /* enables filtering */\n _legend.dimension = property(null)\n .react(function(v) {\n if(!v) {\n _included = [];\n apply_filter();\n }\n });\n\n return _legend;\n};\n\n\ndc_graph.legend.node_legend = function() {\n return {\n itemSelector: function() {\n return '.node';\n },\n labelSelector: function() {\n return '.node-label';\n },\n create: function(diagram, selection) {\n return selection.append('g')\n .attr('class', 'node');\n },\n draw: function(diagram, itemEnter, item) {\n diagram\n ._enterNode(itemEnter)\n ._updateNode(item);\n }\n };\n};\n\ndc_graph.legend.edge_legend = function() {\n var _type = {\n itemSelector: function() {\n return '.edge-container';\n },\n labelSelector: function() {\n return '.edge-label';\n },\n create: function(diagram, selection, w, h) {\n var edgeEnter = selection.append('g')\n .attr('class', 'edge-container')\n .attr('opacity', 0);\n edgeEnter\n .append('rect')\n .attr({\n x: -w/2,\n y: -h/2,\n width: w,\n height: h,\n fill: 'green',\n opacity: 0\n });\n edgeEnter\n .selectAll('circle')\n .data([-1, 1])\n .enter()\n .append('circle')\n .attr({\n r: _type.fakeNodeRadius(),\n fill: 'none',\n stroke: 'black',\n \"stroke-dasharray\": \"4,4\",\n opacity: 0.15,\n transform: function(d) {\n return 'translate(' + [d * _type.length() / 2, 0].join(',') + ')';\n }\n });\n var edgex = _type.length()/2 - _type.fakeNodeRadius();\n edgeEnter.append('svg:path')\n .attr({\n class: 'edge',\n id: function(d) { return d.name; },\n d: 'M' + -edgex + ',0 L' + edgex + ',0',\n opacity: diagram.edgeOpacity.eval\n });\n\n return edgeEnter;\n },\n fakeNodeRadius: property(10),\n length: property(50),\n draw: function(diagram, itemEnter, item) {\n diagram._updateEdge(itemEnter.select('path.edge'));\n }\n };\n return _type;\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 * @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(_behavior.direction());\n if(_behavior.offset())\n _d3tip.offset(_behavior.offset());\n parent.svg().call(_d3tip);\n }\n }\n function fetch_and_show_content(d) {\n if(_behavior.disabled() || _behavior.selection().exclude && _behavior.selection().exclude(d3.event.target)) {\n hide_tip.call(this);\n return;\n }\n var target = this,\n next = function() {\n _behavior.content()(d, function(content) {\n _d3tip.show.call(target, content, target);\n d3.select('div.d3-tip')\n .selectAll('a.tip-link')\n .on('click', function() {\n d3.event.preventDefault();\n if(_behavior.linkCallback())\n _behavior.linkCallback()(this.id);\n });\n _dispatch.tipped(d);\n });\n };\n if(_hideTimeout)\n window.clearTimeout(_hideTimeout);\n if(_behavior.delay()) {\n window.clearTimeout(_showTimeout);\n _showTimeout = window.setTimeout(next, _behavior.delay());\n }\n else next();\n }\n\n function check_hide_tip() {\n if(d3.event.relatedTarget &&\n (!_behavior.selection().exclude || !_behavior.selection().exclude(d3.event.target)) &&\n (this && this.contains(d3.event.relatedTarget) || // do not hide when mouse is still over a child\n _behavior.clickable() && d3.event.relatedTarget.classList.contains('d3-tip')))\n return false;\n return true;\n }\n\n function preempt_tip() {\n if(_showTimeout) {\n window.clearTimeout(_showTimeout);\n _showTimeout = null;\n }\n }\n\n function hide_tip() {\n if(!check_hide_tip.apply(this))\n return;\n preempt_tip();\n _d3tip.hide();\n }\n\n function hide_tip_delay() {\n if(!check_hide_tip.apply(this))\n return;\n preempt_tip();\n if(_behavior.hideDelay())\n _hideTimeout = window.setTimeout(function () {\n _d3tip.hide();\n }, _behavior.hideDelay());\n else\n _d3tip.hide();\n }\n\n function add_behavior(diagram, node, edge, ehover) {\n init(diagram);\n _behavior.programmatic() || _behavior.selection().select(diagram, node, edge, ehover)\n .on('mouseover.' + _namespace, fetch_and_show_content)\n .on('mouseout.' + _namespace, hide_tip_delay);\n if(_behavior.clickable()) {\n d3.select('div.d3-tip')\n .on('mouseover.' + _namespace, function() {\n if(_hideTimeout)\n window.clearTimeout(_hideTimeout);\n })\n .on('mouseout.' + _namespace, hide_tip_delay);\n }\n }\n function remove_behavior(diagram, node, edge, ehover) {\n _behavior.programmatic() || _behavior.selection().select(diagram, node, edge, ehover)\n .on('mouseover.' + _namespace, null)\n .on('mouseout.' + _namespace, null);\n }\n\n var _behavior = dc_graph.behavior(_namespace, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n laterDraw: true\n });\n /**\n * Specify the direction for tooltips. Currently supports the\n * [cardinal and intercardinal directions](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 _behavior.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 thing 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: assume it's a node, show node title\n * var tip = dc_graph.tip().content(function(n, k) {\n * k(_behavior.parent() ? _behavior.parent().nodeTitle.eval(n) : '');\n * });\n **/\n _behavior.content = property(function(n, k) {\n k(_behavior.parent() ? _behavior.parent().nodeTitle.eval(n) : '');\n });\n\n _behavior.on = function(event, f) {\n return _dispatch.on(event, f);\n };\n\n _behavior.disabled = property(false);\n _behavior.programmatic = property(false);\n\n _behavior.displayTip = function(filter, n, cb) {\n if(typeof filter !== 'function') {\n var d = filter;\n filter = function(d2) { return d2 === d; };\n }\n var found = _behavior.selection().select(_behavior.parent(), _behavior.parent().selectAllNodes(), _behavior.parent().selectAllEdges(), null)\n .filter(filter);\n if(found.size() > 0) {\n var action = fetch_and_show_content;\n // we need to flatten e.g. for ports, which will have nested selections\n // .nodes() does this better in D3v4\n var flattened = found.reduce(function(p, v) {\n return p.concat(v);\n }, []);\n var which = (n || 0) % flattened.length;\n action.call(flattened[which], d3.select(flattened[which]).datum());\n d = d3.select(flattened[which]).datum();\n if(cb)\n cb(d);\n if(_behavior.programmatic())\n found.on('mouseout', hide_tip_delay);\n }\n return _behavior;\n };\n\n _behavior.hideTip = function(delay) {\n if(_d3tip) {\n if(delay)\n hide_tip_delay();\n else\n hide_tip();\n }\n return _behavior;\n };\n _behavior.selection = property(dc_graph.tip.select_node_and_edge());\n _behavior.showDelay = _behavior.delay = property(0);\n _behavior.hideDelay = property(200);\n _behavior.offset = property(null);\n _behavior.clickable = property(false);\n _behavior.linkCallback = property(null);\n\n return _behavior;\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(dc_graph.tip.table());\n **/\ndc_graph.tip.table = function() {\n var gen = function(d, k) {\n d = gen.fetch()(d);\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 gen.fetch = property(function(d) {\n return d.orig.value;\n });\n return gen;\n};\n\ndc_graph.tip.select_node_and_edge = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n // hack to merge selections, not supported d3v3\n var selection = diagram.selectAll('.foo-this-does-not-exist');\n selection[0] = node[0].concat(ehover ? ehover[0] : []);\n return selection;\n },\n exclude: function(element) {\n return ancestor_has_class(element, 'port');\n }\n };\n};\n\ndc_graph.tip.select_node = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return node;\n },\n exclude: function(element) {\n return ancestor_has_class(element, 'port');\n }\n };\n};\n\ndc_graph.tip.select_edge = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return edge;\n }\n };\n};\n\ndc_graph.tip.select_port = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return node.selectAll('g.port');\n }\n };\n};\n","dc_graph.dropdown = function() {\n dc_graph.dropdown.unique_id = (dc_graph.dropdown.unique_id || 16) + 1;\n var _dropdown = {\n id: 'id' + dc_graph.dropdown.unique_id,\n parent: property(null),\n show: function(key, x, y) {\n var dropdown = _dropdown.parent().root()\n .selectAll('div.dropdown.' + _dropdown.id).data([0]);\n var dropdownEnter = dropdown\n .enter().append('div')\n .attr('class', 'dropdown ' + _dropdown.id);\n dropdown\n .style('visibility', 'visible')\n .style('left', x + 'px')\n .style('top', y + 'px');\n var capture;\n var hides = _dropdown.hideOn().split('|');\n var selects = _dropdown.selectOn().split('|');\n if(hides.includes('leave'))\n dropdown.on('mouseleave', function() {\n dropdown.style('visibility', 'hidden');\n });\n else if(hides.includes('clickout')) {\n var diagram = _dropdown.parent();\n capture = diagram.svg().append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', diagram.width())\n .attr('height', diagram.height())\n .attr('opacity', 0)\n .on('click', function() {\n capture.remove();\n dropdown.style('visibility', 'hidden');\n });\n }\n var container = dropdown;\n if(_dropdown.scrollHeight()) {\n var height = _dropdown.scrollHeight();\n if(typeof height === 'number')\n height = height + 'px';\n dropdown\n .style('max-height', height)\n .property('scrollTop', 0);\n dropdownEnter\n .style('overflow-y', 'auto')\n .append('div')\n .attr('class', 'scroller');\n container = dropdown.selectAll('div.scroller');\n }\n var values = _dropdown.fetchValues()(key, function(values) {\n var items = container\n .selectAll('div.dropdown-item').data(values);\n items\n .enter().append('div')\n .attr('class', 'dropdown-item');\n items.exit().remove();\n var select_event = null;\n if(selects.includes('click'))\n select_event = 'click';\n else if(selects.includes('hover'))\n select_event = 'mouseenter';\n items\n .text(function(item) { return _dropdown.itemText()(item); });\n if(select_event) {\n items\n .on(select_event + '.select', function(d) {\n _dropdown.itemSelected()(d);\n });\n }\n if(hides.includes('clickitem')) {\n items\n .on('click.hide', function(d) {\n capture.remove();\n dropdown.style('visibility', 'hidden');\n });\n }\n });\n },\n hideOn: property('clickout|clickitem'),\n selectOn: property('click'),\n height: property(10),\n itemText: property(function(x) { return x; }),\n itemSelected: property(function() {}),\n fetchValues: property(function(key, k) { k([]); }),\n scrollHeight: property('12em')\n };\n return _dropdown;\n};\n","dc_graph.keyboard = function() {\n var _input_anchor, _dispatch = d3.dispatch('keydown', 'keyup');\n\n function keydown() {\n _dispatch.keydown();\n }\n function keyup() {\n _dispatch.keyup();\n }\n function add_behavior(diagram) {\n _input_anchor = diagram.svg().selectAll('a#dcgraph-keyboard').data([1]);\n _input_anchor.enter()\n .insert('a', ':first-child').attr({\n id: 'dcgraph-keyboard',\n href: '#'\n });\n _input_anchor.on('keydown.keyboard', keydown);\n _input_anchor.on('keyup.keyboard', keyup);\n\n // grab focus whenever svg is interacted with (?)\n diagram.svg().on('mouseup.keyboard', function() {\n _behavior.focus();\n });\n }\n function remove_behavior(diagram) {\n _input_anchor.remove();\n }\n var _behavior = dc_graph.behavior('brush', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n\n _behavior.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\n _dispatch.on(event, f);\n return this;\n };\n\n _behavior.focus = function() {\n if(!_behavior.disableFocus())\n _input_anchor.node().focus();\n };\n\n _behavior.disableFocus = property(false);\n\n return _behavior;\n};\n","// adapted from\n// http://stackoverflow.com/questions/9308938/inline-text-editing-in-svg/#26644652\n\ndc_graph.edit_text = function(parent, options) {\n var foreign = parent.append('foreignObject').attr({\n height: '100%',\n width: '100%' // don't wrap\n });\n function reposition() {\n var pos;\n switch(options.align) {\n case 'left':\n pos = [options.box.x, options.box.y];\n break;\n default:\n case 'center':\n pos = [\n options.box.x + (options.box.width - textdiv.node().offsetWidth)/2,\n options.box.y + (options.box.height - textdiv.node().offsetHeight)/2\n ];\n break;\n }\n foreign.attr('transform', 'translate(' + pos.join(' ') + ')');\n }\n var textdiv = foreign.append('xhtml:div');\n var text = options.text || \"type on me\";\n textdiv.text(text).attr({\n contenteditable: true,\n width: 'auto'\n }).style({\n display: 'inline-block',\n 'background-color': 'white',\n padding: '2px'\n });\n\n function stopProp() {\n d3.event.stopPropagation();\n }\n foreign\n .on('mousedown', stopProp)\n .on('mousemove', stopProp)\n .on('mouseup', stopProp)\n .on('dblclick', stopProp);\n\n function accept() {\n options.accept && options.accept(textdiv.text());\n textdiv.on('blur.edittext', null);\n foreign.remove();\n options.finally && options.finally();\n }\n function cancel() {\n options.cancel && options.cancel();\n textdiv.on('blur.edittext', null);\n foreign.remove();\n options.finally && options.finally();\n }\n\n textdiv.on('keydown.edittext', function() {\n if(d3.event.keyCode===13) {\n d3.event.preventDefault();\n }\n }).on('keyup.edittext', function() {\n if(d3.event.keyCode===13) {\n accept();\n } else if(d3.event.keyCode===27) {\n cancel();\n }\n reposition();\n }).on('blur.edittext', cancel);\n reposition();\n textdiv.node().focus();\n\n var range = document.createRange();\n if(options.selectText) {\n range.selectNodeContents(textdiv.node());\n } else {\n range.setStart(textdiv.node(), 1);\n range.setEnd(textdiv.node(), 1);\n }\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n};\n","dc_graph.brush = function() {\n var _brush = null, _gBrush, _dispatch = d3.dispatch('brushstart', 'brushmove', 'brushend');\n\n function brushstart() {\n _dispatch.brushstart();\n }\n function brushmove() {\n var ext = _brush.extent();\n _dispatch.brushmove(ext);\n }\n function brushend() {\n _dispatch.brushend();\n _gBrush.call(_brush.clear());\n }\n function install_brush(diagram) {\n if(!_brush) {\n _brush = d3.svg.brush()\n .x(diagram.x()).y(diagram.y())\n .on('brushstart', brushstart)\n .on('brush', brushmove)\n .on('brushend', brushend);\n }\n if(!_gBrush) {\n _gBrush = diagram.svg().insert('g', ':first-child')\n .attr('class', 'brush')\n .call(_brush);\n }\n }\n function remove_brush() {\n if(_gBrush) {\n _gBrush.remove();\n _gBrush = null;\n }\n }\n var _behavior = dc_graph.behavior('brush', {\n add_behavior: function() {},\n remove_behavior: remove_brush\n });\n\n _behavior.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\n _dispatch.on(event, f);\n return this;\n };\n _behavior.activate = function() {\n install_brush(_behavior.parent());\n return this;\n };\n _behavior.deactivate = function() {\n remove_brush();\n return this;\n };\n _behavior.isActive = function () {\n return !!_gBrush;\n };\n\n return _behavior;\n};\n","dc_graph.select_things = function(things_group, things_name, thinginess) {\n var _selected = [], _oldSelected;\n var _mousedownThing = null;\n\n var contains_predicate = thinginess.keysEqual ?\n function(k1) {\n return function(k2) {\n return thinginess.keysEqual(k1, k2);\n };\n } :\n function(k1) {\n return function(k2) {\n return k1 === k2;\n };\n };\n function contains(array, key) {\n return !!_selected.find(contains_predicate(key));\n }\n function isUnion(event) {\n return event.shiftKey;\n }\n function isToggle(event) {\n return is_a_mac ? event.metaKey : event.ctrlKey;\n }\n function add_array(array, key) {\n return contains(array, key) ? array : array.concat([key]);\n }\n function toggle_array(array, key) {\n return contains(array, key) ? array.filter(function(x) { return x != key; }) : array.concat([key]);\n }\n\n function selection_changed(diagram) {\n return function(selection, refresh) {\n if(refresh === undefined)\n refresh = true;\n _selected = selection;\n if(refresh)\n diagram.refresh();\n };\n }\n var _have_bce = false;\n function background_click_event(diagram, v) {\n // we seem to have nodes-background interrupting edges-background by reinstalling uselessly\n if(_have_bce === v)\n return;\n diagram.svg().on('click.' + things_name, v ? function(t) {\n if(d3.event.target === this)\n things_group.set_changed([]);\n } : null);\n _have_bce = v;\n }\n function brushstart() {\n if(isUnion(d3.event.sourceEvent) || isToggle(d3.event.sourceEvent))\n _oldSelected = _selected.slice();\n else {\n _oldSelected = [];\n things_group.set_changed([]);\n }\n }\n function brushmove(ext) {\n if(!thinginess.intersectRect)\n return;\n var rectSelect = thinginess.intersectRect(ext);\n var newSelected;\n if(isUnion(d3.event.sourceEvent))\n newSelected = rectSelect.reduce(add_array, _oldSelected);\n else if(isToggle(d3.event.sourceEvent))\n newSelected = rectSelect.reduce(toggle_array, _oldSelected);\n else\n newSelected = rectSelect;\n things_group.set_changed(newSelected);\n }\n\n function add_behavior(diagram, node, edge) {\n var condition = _behavior.noneIsAll() ? function(t) {\n return !_selected.length || contains(_selected, thinginess.key(t));\n } : function(t) {\n return contains(_selected, thinginess.key(t));\n };\n thinginess.applyStyles(condition);\n\n thinginess.clickables(diagram, node, edge).on('mousedown.' + things_name, function(t) {\n _mousedownThing = t;\n });\n\n thinginess.clickables(diagram, node, edge).on('mouseup.' + things_name, function(t) {\n if(thinginess.excludeClick && thinginess.excludeClick(d3.event.target))\n return;\n // it's only a click if the same target was mousedown & mouseup\n // but we can't use click event because things may have been reordered\n if(_mousedownThing !== t)\n return;\n var key = thinginess.key(t), newSelected;\n if(_behavior.multipleSelect()) {\n if(isUnion(d3.event))\n newSelected = add_array(_selected, key);\n else if(isToggle(d3.event))\n newSelected = toggle_array(_selected, key);\n }\n if(!newSelected)\n newSelected = [key];\n things_group.set_changed(newSelected);\n });\n\n if(_behavior.multipleSelect()) {\n var brush_mode = diagram.child('brush');\n brush_mode.activate();\n }\n else\n background_click_event(diagram, _behavior.clickBackgroundClears());\n\n if(_behavior.autoCropSelection()) {\n // drop any selected which no longer exist in the diagram\n var present = thinginess.clickables(diagram, node, edge).data().map(thinginess.key);\n var now_selected = _selected.filter(function(k) { return contains(present, k); });\n if(_selected.length !== now_selected.length)\n things_group.set_changed(now_selected, false);\n }\n }\n\n function remove_behavior(diagram, node, edge) {\n thinginess.clickables(diagram, node, edge).on('click.' + things_name, null);\n diagram.svg().on('click.' + things_name, null);\n thinginess.removeStyles();\n }\n\n var _behavior = dc_graph.behavior(things_name, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n things_group.on('set_changed.' + things_name, p ? selection_changed(p) : null);\n if(p && _behavior.multipleSelect()) {\n var brush_mode = p.child('brush');\n if(!brush_mode) {\n brush_mode = dc_graph.brush();\n p.child('brush', brush_mode);\n }\n brush_mode\n .on('brushstart.' + things_name, brushstart)\n .on('brushmove.' + things_name, brushmove);\n }\n },\n laterDraw: thinginess.laterDraw || false\n });\n\n _behavior.multipleSelect = property(true);\n _behavior.clickBackgroundClears = property(true, false).react(function(v) {\n if(!_behavior.multipleSelect() && _behavior.parent())\n background_click_event(_behavior.parent(), v);\n });\n _behavior.noneIsAll = property(false);\n // if you're replacing the data, you probably want the selection not to be preserved when a thing\n // with the same key re-appears later (true). however, if you're filtering dc.js-style, you\n // probably want filters to be independent between diagrams (false)\n _behavior.autoCropSelection = property(true);\n // if you want to do the cool things select_things can do\n _behavior.thinginess = function() {\n return thinginess;\n };\n return _behavior;\n};\n\ndc_graph.select_things_group = function(brushgroup, type) {\n window.chart_registry.create_type(type, function() {\n return d3.dispatch('set_changed');\n });\n\n return window.chart_registry.create_group(type, brushgroup);\n};\n","dc_graph.select_nodes = function(props, options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n\n var thinginess = {\n intersectRect: function(ext) {\n return _behavior.parent().selectAllNodes().data().filter(function(n) {\n return n && ext[0][0] < n.cola.x && n.cola.x < ext[1][0] &&\n ext[0][1] < n.cola.y && n.cola.y < ext[1][1];\n }).map(this.key);\n },\n clickables: function(diagram, node, edge) {\n return node;\n },\n excludeClick: function(element) {\n return ancestor_has_class(element, 'port');\n },\n key: function(n) {\n return _behavior.parent().nodeKey.eval(n);\n },\n applyStyles: function(pred) {\n _behavior.parent().cascade(50, true, node_edge_conditions(pred, null, props));\n },\n removeStyles: function() {\n _behavior.parent().cascade(50, false, props);\n }\n };\n var _behavior = dc_graph.select_things(select_nodes_group, 'select-nodes', thinginess);\n return _behavior;\n};\n","dc_graph.select_edges = function(props, options) {\n options = options || {};\n var select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges');\n var thinginess = {\n intersectRect: function(ext) {\n return this.clickables().data().filter(function(e) {\n // this nonsense because another select_things may have invalidated the edge positions (!!)\n var sp = {\n x: e.source.cola.x + e.sourcePort.pos.x,\n y: e.source.cola.y + e.sourcePort.pos.y\n },\n tp = {\n x: e.target.cola.x + e.targetPort.pos.x,\n y: e.target.cola.y + e.targetPort.pos.y\n };\n return [sp, tp].some(function(p) {\n return ext[0][0] < p.x && p.x < ext[1][0] &&\n ext[0][1] < p.y && p.y < ext[1][1];\n });\n }).map(this.key);\n },\n clickables: function() {\n return _behavior.parent().selectAllEdges('.edge-hover');\n },\n key: function(e) {\n return _behavior.parent().edgeKey.eval(e);\n },\n applyStyles: function(pred) {\n _behavior.parent().cascade(50, true, node_edge_conditions(null, pred, props));\n },\n removeStyles: function() {\n _behavior.parent().cascade(50, false, props);\n }\n };\n var _behavior = dc_graph.select_things(select_edges_group, 'select-edges', thinginess);\n return _behavior;\n};\n","dc_graph.select_ports = function(props, options) {\n options = options || {};\n var port_style = options.portStyle || 'symbols';\n var select_ports_group = dc_graph.select_things_group(options.select_ports_group || 'select-ports-group', 'select-ports');\n var thinginess = {\n laterDraw: true,\n intersectRect: null, // multiple selection not supported for now\n clickables: function() {\n return _behavior.parent().selectAllNodes('g.port');\n },\n key: function(p) {\n // this scheme also won't work with multiselect\n return p.named ?\n {node: _behavior.parent().nodeKey.eval(p.node), name: p.name} :\n {edge: _behavior.parent().edgeKey.eval(p.edges[0]), name: p.name};\n },\n applyStyles: function(pred) {\n _behavior.parent().portStyle(port_style).cascade(50, true, conditional_properties(pred, props));\n },\n removeStyles: function() {\n _behavior.parent().portStyle(port_style).cascade(50, false, props);\n },\n keysEqual: function(k1, k2) {\n return k1.name === k2.name && (k1.node ? k1.node === k2.node : k1.edge === k2.edge);\n }\n };\n var _behavior = dc_graph.select_things(select_ports_group, 'select-ports', thinginess);\n return _behavior;\n};\n","dc_graph.move_nodes = function(options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _selected = [], _startPos = null, _downNode, _moveStarted;\n var _brush, _drawGraphs, _selectNodes, _restoreBackgroundClick;\n var _maybeSelect = null;\n\n function isUnion(event) {\n return event.shiftKey;\n }\n function isToggle(event) {\n return is_a_mac ? event.metaKey : event.ctrlKey;\n }\n\n function selection_changed(diagram) {\n return function(selection, refresh) {\n if(refresh === undefined)\n refresh = true;\n _selected = selection;\n };\n }\n function for_each_selected(f, selected) {\n selected = selected || _selected;\n selected.forEach(function(key) {\n var n = _behavior.parent().getWholeNode(key);\n f(n, key);\n });\n }\n function add_behavior(diagram, node, edge) {\n node.on('mousedown.move-nodes', function(n) {\n // Need a more general way for modes to say \"I got this\"\n if(_drawGraphs && _drawGraphs.usePorts() && _drawGraphs.usePorts().eventPort())\n return;\n _startPos = dc_graph.event_coords(diagram);\n _downNode = d3.select(this);\n // if the node under the mouse is not in the selection, need to\n // make that node selected\n var key = diagram.nodeKey.eval(n);\n var selected = _selected;\n if(_selected.indexOf(key)<0) {\n selected = [key];\n _maybeSelect = key;\n }\n else _maybeSelect = null;\n for_each_selected(function(n) {\n n.original_position = [n.cola.x, n.cola.y];\n }, selected);\n if(_brush)\n _brush.deactivate();\n });\n function mouse_move() {\n if(_startPos) {\n if(!(d3.event.buttons & 1)) {\n mouse_up();\n return;\n }\n if(_maybeSelect)\n select_nodes_group.set_changed([_maybeSelect]);\n var pos = dc_graph.event_coords(diagram);\n var dx = pos[0] - _startPos[0],\n dy = pos[1] - _startPos[1];\n if(!_moveStarted && Math.hypot(dx, dy) > _behavior.dragSize()) {\n _moveStarted = true;\n // prevent click event for this node setting selection just to this\n if(_downNode)\n _downNode.style('pointer-events', 'none');\n }\n if(_moveStarted) {\n for_each_selected(function(n) {\n n.cola.x = n.original_position[0] + dx;\n n.cola.y = n.original_position[1] + dy;\n });\n diagram.reposition(node, edge);\n }\n }\n }\n function mouse_up() {\n if(_startPos) {\n if(_moveStarted) {\n _moveStarted = false;\n if(_downNode) {\n _downNode.style('pointer-events', null);\n _downNode = null;\n }\n var fixes = [];\n for_each_selected(function(n, id) {\n fixes.push({\n id: id,\n pos: {x: n.cola.x, y: n.cola.y}\n });\n });\n fix_nodes_group.request_fixes(fixes);\n }\n if(_brush)\n _brush.activate();\n _startPos = null;\n }\n }\n node\n .on('mousemove.move-nodes', mouse_move)\n .on('mouseup.move-nodes', mouse_up);\n diagram.svg()\n .on('mousemove.move-nodes', mouse_move)\n .on('mouseup.move-nodes', mouse_up);\n }\n\n function remove_behavior(diagram, node, edge) {\n node.on('mousedown.move-nodes', null);\n node.on('mousemove.move-nodes', null);\n node.on('mouseup.move-nodes', null);\n }\n\n var _behavior = dc_graph.behavior('move-nodes', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n select_nodes_group.on('set_changed.move-nodes', p ? selection_changed(p) : null);\n _brush = p.child('brush');\n _drawGraphs = p.child('draw-graphs');\n _selectNodes = p.child('select-nodes');\n }\n });\n\n // minimum distance that is considered a drag, not a click\n _behavior.dragSize = property(5);\n\n return _behavior;\n};\n","dc_graph.fix_nodes = function(options) {\n options = options || {};\n var fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _fixedPosTag = options.fixedPosTag || 'fixedPos';\n var _fixes = [], _nodes, _wnodes, _edges, _wedges;\n\n var _execute = {\n nodeid: function(n) {\n return _behavior.parent().nodeKey.eval(n);\n },\n sourceid: function(e) {\n return _behavior.parent().edgeSource.eval(e);\n },\n targetid: function(e) {\n return _behavior.parent().edgeTarget.eval(e);\n },\n get_fix: function(n) {\n return _behavior.parent().nodeFixed.eval(n);\n },\n fix_node: function(n, pos) {\n n[_fixedPosTag] = pos;\n },\n unfix_node: function(n) {\n n[_fixedPosTag] = null;\n },\n clear_fixes: function() {\n _fixes = {};\n },\n register_fix: function(id, pos) {\n _fixes[id] = pos;\n }\n };\n\n function request_fixes(fixes) {\n _behavior.strategy().request_fixes(_execute, fixes);\n tell_then_set(find_changes()).then(function() {\n _behavior.parent().redraw();\n });\n }\n function new_node(nid, n, pos) {\n _behavior.strategy().new_node(_execute, nid, n, pos);\n }\n function new_edge(eid, sourceid, targetid) {\n var source = _nodes[sourceid], target = _nodes[targetid];\n _behavior.strategy().new_edge(_execute, eid, source, target);\n }\n function find_changes() {\n var changes = [];\n _wnodes.forEach(function(n) {\n var key = _behavior.parent().nodeKey.eval(n),\n fixPos = _fixes[key],\n oldFixed = n.orig.value[_fixedPosTag],\n changed = false;\n if(oldFixed) {\n if(!fixPos || fixPos.x !== oldFixed.x || fixPos.y !== oldFixed.y)\n changed = true;\n }\n else changed = fixPos;\n if(changed)\n changes.push({n: n, fixed: fixPos ? {x: fixPos.x, y: fixPos.y} : null});\n });\n return changes;\n }\n function execute_change(n, fixed) {\n if(fixed)\n _execute.fix_node(n.orig.value, fixed);\n else\n _execute.unfix_node(n.orig.value);\n }\n function tell_then_set(changes) {\n var callback = _behavior.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n var promises = changes.map(function(change) {\n var key = _behavior.parent().nodeKey.eval(change.n);\n return callback(key, change.fixed)\n .then(function(fixed) {\n execute_change(change.n, fixed);\n });\n });\n return Promise.all(promises);\n }\n function set_changes(changes) {\n changes.forEach(function(change) {\n execute_change(change.n, change.fixed);\n });\n }\n function tell_changes(changes) {\n var callback = _behavior.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n var promises = changes.map(function(change) {\n var key = _behavior.parent().nodeKey.eval(change.n);\n return callback(key, change.fixed);\n });\n return Promise.all(promises);\n }\n function fix_all_nodes(tell) {\n if(tell === undefined)\n tell = true;\n var changes = _wnodes.map(function(n) {\n return {n: n, fixed: {x: n.cola.x, y: n.cola.y}};\n });\n if(tell)\n return tell_then_set(changes);\n else {\n set_changes(changes);\n return Promise.resolve(undefined);\n }\n }\n function clear_fixes() {\n _behavior.strategy().clear_all_fixes && _behavior.strategy().clear_all_fixes();\n _execute.clear_fixes();\n }\n function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _nodes = nodes;\n _wnodes = wnodes;\n _edges = edges;\n _wedges = wedges;\n if(_behavior.strategy().on_data) {\n _behavior.strategy().on_data(_execute, nodes, wnodes, edges, wedges, ports, wports); // ghastly\n var changes = find_changes();\n set_changes(changes);\n // can't wait for backend to acknowledge/approve so just set then blast\n if(_behavior.reportOverridesAsynchronously())\n tell_changes(changes); // dangling promise\n }\n }\n\n var _behavior = {\n parent: property(null).react(function(p) {\n fix_nodes_group\n .on('request_fixes.fix-nodes', p ? request_fixes : null)\n .on('new_node.fix_nodes', p ? new_node : null)\n .on('new_edge.fix_nodes', p ? new_edge : null);\n if(p) {\n p.on('data.fix-nodes', on_data);\n } else if(_behavior.parent())\n _behavior.parent().on('data.fix-nodes', null);\n }),\n // callback for setting & fixing node position\n fixNode: property(null),\n // save/load may want to nail everything / start from scratch\n // (should probably be automatic though)\n fixAllNodes: fix_all_nodes,\n clearFixes: clear_fixes,\n strategy: property(dc_graph.fix_nodes.strategy.fix_last()),\n reportOverridesAsynchronously: property(true)\n };\n\n return _behavior;\n};\n\ndc_graph.fix_nodes.strategy = {};\ndc_graph.fix_nodes.strategy.fix_last = function() {\n return {\n request_fixes: function(exec, fixes) {\n exec.clear_fixes();\n fixes.forEach(function(fix) {\n exec.register_fix(fix.id, fix.pos);\n });\n },\n new_node: function(exec, nid, n, pos) {\n exec.fix_node(n, pos);\n },\n new_edge: function(exec, eid, source, target) {\n exec.unfix_node(source.orig.value);\n exec.unfix_node(target.orig.value);\n }\n };\n};\ndc_graph.fix_nodes.strategy.last_N_per_component = function(maxf) {\n maxf = maxf || 1;\n var _age = 0;\n var _allFixes = {};\n return {\n clear_all_fixes: function() {\n _allFixes = {};\n },\n request_fixes: function(exec, fixes) {\n ++_age;\n fixes.forEach(function(fix) {\n _allFixes[fix.id] = {id: fix.id, age: _age, pos: fix.pos};\n });\n },\n new_node: function(exec, nid, n, pos) {\n ++_age;\n _allFixes[nid] = {id: nid, age: _age, pos: pos};\n exec.fix_node(n, pos);\n },\n new_edge: function() {},\n on_data: function(exec, nodes, wnodes, edges, wedges, ports, wports) {\n ++_age;\n // add any existing fixes as requests\n wnodes.forEach(function(n) {\n var nid = exec.nodeid(n), pos = exec.get_fix(n);\n if(pos && !_allFixes[nid])\n _allFixes[nid] = {id: nid, age: _age, pos: pos};\n });\n // determine components\n var components = [];\n var dfs = dc_graph.undirected_dfs({\n nodeid: exec.nodeid,\n sourceid: exec.sourceid,\n targetid: exec.targetid,\n comp: function() {\n components.push([]);\n },\n node: function(compid, n) {\n components[compid].push(n);\n }\n });\n dfs(wnodes, wedges);\n // start from scratch\n exec.clear_fixes();\n // keep or produce enough fixed nodes per component\n components.forEach(function(comp, i) {\n var oldcomps = comp.reduce(function(cc, n) {\n if(n.last_component) {\n var counts = cc[n.last_component] = cc[n.last_component] || {\n total: 0,\n fixed: 0\n };\n counts.total++;\n if(_allFixes[exec.nodeid(n)])\n counts.fixed++;\n }\n return cc;\n }, {});\n var fixed_by_size = Object.keys(oldcomps).reduce(function(ff, compid) {\n if(oldcomps[compid].fixed)\n ff.push({compid: +compid, total: oldcomps[compid].total, fixed: oldcomps[compid].fixed});\n return ff;\n }, []).sort(function(coa, cob) {\n return cob.total - coa.total;\n });\n var largest_fixed = fixed_by_size.length && fixed_by_size[0].compid;\n var fixes = comp.filter(function(n) {\n return !n.last_component || n.last_component === largest_fixed;\n }).map(function(n) {\n return _allFixes[exec.nodeid(n)];\n }).filter(function(fix) {\n return fix;\n });\n if(fixes.length > maxf) {\n fixes.sort(function(f1, f2) {\n return f2.age - f1.age;\n });\n fixes = fixes.slice(0, maxf);\n }\n fixes.forEach(function(fix) {\n exec.register_fix(fix.id, fix.pos);\n });\n var kept = fixes.reduce(function(m, fix) {\n m[fix.id] = true;\n return m;\n }, {});\n comp.forEach(function(n) {\n var nid = exec.nodeid(n);\n if(!kept[nid])\n _allFixes[nid] = null;\n n.last_component = i+1;\n });\n });\n }\n };\n};\n\ndc_graph.fix_nodes_group = function(brushgroup) {\n window.chart_registry.create_type('fix-nodes', function() {\n return d3.dispatch('request_fixes', 'new_node', 'new_edge');\n });\n\n return window.chart_registry.create_group('fix-nodes', brushgroup);\n};\n","dc_graph.filter_selection = function(things_group, things_name) {\n things_name = things_name || 'select-nodes';\n var select_nodes_group = dc_graph.select_things_group(things_group || 'select-nodes-group', things_name);\n\n function selection_changed(diagram) {\n return function(selection) {\n if(selection.length) {\n var set = d3.set(selection);\n _behavior.dimensionAccessor()(diagram).filterFunction(function(k) {\n return set.has(k);\n });\n } else _behavior.dimensionAccessor()(diagram).filter(null);\n diagram.redrawGroup();\n };\n }\n\n var _behavior = {\n parent: property(null).react(function(p) {\n select_nodes_group.on('set_changed.filter-selection-' + things_name, p ? selection_changed(p) : null);\n })\n };\n _behavior.dimensionAccessor = property(function(diagram) {\n return diagram.nodeDimension();\n });\n return _behavior;\n};\n","dc_graph.delete_things = function(things_group, mode_name, id_tag) {\n id_tag = id_tag || 'id';\n var _deleteKey = is_a_mac ? 'Backspace' : 'Delete';\n var _keyboard, _selected = [];\n function selection_changed(selection) {\n _selected = selection;\n }\n function row_id(r) {\n return r[id_tag];\n }\n function delete_selection(selection) {\n if(!_behavior.crossfilterAccessor())\n throw new Error('need crossfilterAccessor');\n if(!_behavior.dimensionAccessor())\n throw new Error('need dimensionAccessor');\n selection = selection || _selected;\n if(selection.length === 0)\n return Promise.resolve([]);\n var promise = _behavior.preDelete() ? _behavior.preDelete()(selection) : Promise.resolve(selection);\n if(_behavior.onDelete())\n promise = promise.then(_behavior.onDelete());\n return promise.then(function(selection) {\n if(selection && selection.length) {\n var crossfilter = _behavior.crossfilterAccessor()(_behavior.parent()),\n dimension = _behavior.dimensionAccessor()(_behavior.parent());\n var all = crossfilter.all().slice(), n = all.length;\n dimension.filter(null);\n crossfilter.remove();\n var filtered = all.filter(function(r) {\n return selection.indexOf(row_id(r)) === -1;\n });\n if(all.length !== filtered.length + selection.length)\n console.warn('size after deletion is not previous size minus selection size',\n filtered.map(row_id), all.map(row_id), selection);\n crossfilter.add(filtered);\n\n _behavior.parent().redrawGroup();\n }\n return true;\n });\n }\n function add_behavior(diagram) {\n _keyboard.on('keyup.' + mode_name, function() {\n if(d3.event.code === _deleteKey)\n delete_selection();\n });\n }\n function remove_behavior(diagram) {\n }\n var _behavior = dc_graph.behavior(mode_name, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n things_group.on('set_changed.' + mode_name, selection_changed);\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n }\n }\n });\n _behavior.preDelete = property(null);\n _behavior.onDelete = property(null);\n _behavior.crossfilterAccessor = property(null);\n _behavior.dimensionAccessor = property(null);\n _behavior.deleteSelection = delete_selection;\n return _behavior;\n};\n","dc_graph.delete_nodes = function(id_tag, options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges');\n var _behavior = dc_graph.delete_things(select_nodes_group, 'delete-nodes', id_tag);\n\n _behavior.preDelete(function(nodes) {\n // request a delete of all attached edges, using the delete edges mode\n // kind of horrible\n var diagram = _behavior.parent();\n var deleteEdgesMode = diagram.child('delete-edges');\n if(!deleteEdgesMode)\n return null; // reject if we can't delete the edges\n // it is likely that the delete_edges mode is listening to the same keyup event we\n // are. introduce a pause to let it process the delete key now, deleting any selected edges.\n // then select any remaining edges connected to the selected nodes and delete those.\n //\n // more evidence that modes need to be able to say \"i got this\", or that we should have\n // batch deletion. otoh, given the current behavior, delete_nodes deferring to delete_edges\n // makes about as much sense as anything\n return Promise.resolve(undefined).then(function() {\n var deleteEdges = diagram.edgeGroup().all().filter(function(e) {\n return nodes.indexOf(diagram.edgeSource()(e)) !== -1 ||\n nodes.indexOf(diagram.edgeTarget()(e)) !== -1;\n }).map(diagram.edgeKey());\n select_edges_group.set_changed(deleteEdges);\n return deleteEdgesMode.deleteSelection().then(function() {\n return nodes;\n });\n });\n });\n return _behavior;\n};\n","dc_graph.label_things = function(options) {\n options = options || {};\n var select_things_group = dc_graph.select_things_group(options.select_group, options.select_type),\n label_things_group = dc_graph.label_things_group(options.label_group, options.label_type);\n var _selected = [];\n var _keyboard, _selectThings;\n\n function selection_changed_listener(diagram) {\n return function(selection) {\n _selected = selection;\n };\n }\n\n function grab_focus() {\n _keyboard.focus();\n }\n\n function edit_label_listener(diagram) {\n return function(thing, eventOptions) {\n var box = options.thing_box(thing);\n options.hide_thing_label(thing, true);\n dc_graph.edit_text(\n diagram.g(),\n {\n text: eventOptions.text || options.thing_label(thing) || options.default_label,\n align: options.align,\n box: box,\n selectText: eventOptions.selectText,\n accept: function(text) {\n return options.accept(thing, text);\n },\n finally: function() {\n options.hide_thing_label(thing, false);\n grab_focus();\n }\n });\n };\n }\n\n function edit_selection(node, edge, eventOptions) {\n // less than ideal interface.\n // what if there are other things? can i blame the missing metagraph?\n var thing = options.find_thing(_selected[0], node, edge);\n if(thing.empty()) {\n console.error(\"couldn't find thing '\" + _selected[0] + \"'!\");\n return;\n }\n if(thing.size()>1) {\n console.error(\"found too many things for '\" + _selected[0] + \"' (\" + thing.size() + \")!\");\n return;\n }\n label_things_group.edit_label(thing, eventOptions);\n }\n function add_behavior(diagram, node, edge) {\n _keyboard.on('keyup.' + options.label_type, function() {\n if(_selected.length) {\n // printable characters should start edit\n if(d3.event.key.length !== 1)\n return;\n edit_selection(node, edge, {text: d3.event.key, selectText: false});\n }\n });\n if(_selectThings)\n _selectThings.thinginess().clickables(diagram, node, edge).on('dblclick.' + options.label_type, function() {\n edit_selection(node, edge, {selectText: true});\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n }\n\n var _behavior = dc_graph.behavior(options.label_type, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n select_things_group.on('set_changed.' + options.label_type, p ? selection_changed_listener(p) : null);\n label_things_group.on('edit_label.' + options.label_type, p ? edit_label_listener(p) : null);\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n _selectThings = p.child(options.select_type);\n }\n }\n });\n _behavior.editSelection = function(eventOptions) {\n edit_selection(_behavior.parent().selectAllNodes(), _behavior.parent().selectAllEdges(), eventOptions);\n };\n return _behavior;\n};\n\ndc_graph.label_things_group = function(brushgroup, type) {\n window.chart_registry.create_type(type, function() {\n return d3.dispatch('edit_label');\n });\n\n return window.chart_registry.create_group(type, brushgroup);\n};\n","dc_graph.label_nodes = function(options) {\n options = options || {};\n var _labelTag = options.labelTag || 'label';\n options.select_group = options.select_group || 'select-nodes-group';\n options.select_type = options.select_type || 'select-nodes';\n options.label_group = options.label_group || 'label-nodes-group';\n options.label_type = options.label_type || 'label-nodes';\n options.default_label = \"node name\";\n\n options.find_thing = function(key, node, edge) {\n return node.filter(function(n) {\n return _behavior.parent().nodeKey.eval(n) === key;\n });\n };\n options.hide_thing_label = function(node, whether) {\n var contents = _behavior.parent().content(_behavior.parent().nodeContent.eval(node.datum()));\n contents.selectContent(node).attr('visibility', whether ? 'hidden' : 'visible');\n };\n options.thing_box = function(node, eventOptions) {\n var contents = _behavior.parent().content(_behavior.parent().nodeContent.eval(node.datum())),\n box = contents.textbox(node);\n box.x += node.datum().cola.x;\n box.y += node.datum().cola.y;\n return box;\n };\n options.thing_label = function(node) {\n return _behavior.parent().nodeLabel.eval(node.datum());\n };\n options.accept = function(node, text) {\n var callback = _behavior.changeNodeLabel() ?\n _behavior.changeNodeLabel()(_behavior.parent().nodeKey.eval(node.datum()), text) :\n Promise.resolve(text);\n return callback.then(function(text2) {\n var n = node.datum();\n n.orig.value[_labelTag] = text2;\n _behavior.parent().redrawGroup();\n });\n };\n\n var _behavior = dc_graph.label_things(options);\n _behavior.changeNodeLabel = property(null);\n return _behavior;\n};\n","dc_graph.label_edges = function(options) {\n options = options || {};\n var _labelTag = options.labelTag || 'label';\n options.select_group = options.select_group || 'select-edges-group';\n options.select_type = options.select_type || 'select-edges';\n options.label_group = options.label_group || 'label-edges-group';\n options.label_type = options.label_type || 'label-edges';\n options.default_label = \"edge name\";\n\n options.find_thing = function(key, node, edge) {\n return edge.filter(function(e) {\n return _behavior.parent().edgeKey.eval(e) === key;\n });\n };\n options.hide_thing_label = function(edge, whether) {\n var label = _behavior.parent().selectAll('#' + _behavior.parent().edgeId(edge.datum()) + '-label textPath');\n label.attr('visibility', whether ? 'hidden' : 'visible');\n };\n options.thing_box = function(edge, eventOptions) {\n var points = edge.datum().pos.new.path.points,\n x = (points[0].x + points[1].x)/2,\n y = (points[0].y + points[1].y)/2;\n return {x: x, y: y-10, width:0, height: 20};\n };\n options.thing_label = function(edge) {\n return _behavior.parent().edgeLabel.eval(edge.datum());\n };\n options.accept = function(edge, text) {\n var callback = _behavior.changeEdgeLabel() ?\n _behavior.changeEdgeLabel()(_behavior.parent().edgeKey.eval(edge.datum()), text) :\n Promise.resolve(text);\n return callback.then(function(text2) {\n var e = edge.datum();\n e.orig.value[_labelTag] = text2;\n _behavior.parent().redrawGroup();\n });\n };\n\n var _behavior = dc_graph.label_things(options);\n _behavior.changeEdgeLabel = property(null);\n return _behavior;\n};\n","dc_graph.register_highlight_things_group = function(thingsgroup) {\n window.chart_registry.create_type('highlight-things', function() {\n return d3.dispatch('highlight');\n });\n\n return window.chart_registry.create_group('highlight-things', thingsgroup);\n};\n","dc_graph.highlight_things = function(includeprops, excludeprops, modename, groupname, cascbase) {\n var highlight_things_group = dc_graph.register_highlight_things_group(groupname || 'highlight-things-group');\n var _active, _nodeset = {}, _edgeset = {};\n cascbase = cascbase || 150;\n\n function highlight(nodeset, edgeset) {\n _active = nodeset || edgeset;\n _nodeset = nodeset || {};\n _edgeset = edgeset || {};\n _behavior.parent().requestRefresh(_behavior.durationOverride());\n }\n function add_behavior(diagram) {\n diagram.cascade(cascbase, true, node_edge_conditions(\n function(n) {\n return _nodeset[_behavior.parent().nodeKey.eval(n)];\n }, function(e) {\n return _edgeset[_behavior.parent().edgeKey.eval(e)];\n }, includeprops));\n diagram.cascade(cascbase+10, true, node_edge_conditions(\n function(n) {\n return _active && !_nodeset[_behavior.parent().nodeKey.eval(n)];\n }, function(e) {\n return _active && !_edgeset[_behavior.parent().edgeKey.eval(e)];\n }, excludeprops));\n }\n function remove_behavior(diagram) {\n diagram.cascade(cascbase, false, includeprops);\n diagram.cascade(cascbase + 10, false, excludeprops);\n }\n var _behavior = dc_graph.behavior(modename, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n highlight_things_group.on('highlight.' + modename, p ? highlight : null);\n }\n });\n _behavior.durationOverride = property(undefined);\n return _behavior;\n};\n","dc_graph.register_highlight_neighbors_group = function(neighborsgroup) {\n window.chart_registry.create_type('highlight-neighbors', function() {\n return d3.dispatch('highlight_node');\n });\n\n return window.chart_registry.create_group('highlight-neighbors', neighborsgroup);\n};\n","dc_graph.highlight_neighbors = function(includeprops, excludeprops, neighborsgroup, thingsgroup) {\n var highlight_neighbors_group = dc_graph.register_highlight_neighbors_group(neighborsgroup || 'highlight-neighbors-group');\n var highlight_things_group = dc_graph.register_highlight_things_group(thingsgroup || 'highlight-things-group');\n\n function highlight_node(nodeid) {\n var diagram = _behavior.parent();\n var nodeset = {}, edgeset = {};\n if(nodeid) {\n nodeset[nodeid] = true;\n _behavior.parent().selectAllEdges().each(function(e) {\n if(diagram.nodeKey.eval(e.source) === nodeid) {\n edgeset[diagram.edgeKey.eval(e)] = true;\n nodeset[diagram.nodeKey.eval(e.target)] = true;\n }\n if(diagram.nodeKey.eval(e.target) === nodeid) {\n edgeset[diagram.edgeKey.eval(e)] = true;\n nodeset[diagram.nodeKey.eval(e.source)] = true;\n }\n });\n highlight_things_group.highlight(nodeset, edgeset);\n }\n else highlight_things_group.highlight(null, null);\n }\n function add_behavior(diagram, node, edge) {\n node\n .on('mouseover.highlight-neighbors', function(n) {\n highlight_neighbors_group.highlight_node(_behavior.parent().nodeKey.eval(n));\n })\n .on('mouseout.highlight-neighbors', function(n) {\n highlight_neighbors_group.highlight_node(null);\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n node\n .on('mouseover.highlight-neighbors', null)\n .on('mouseout.highlight-neighbors', null);\n highlight_neighbors_group.highlight_node(null);\n }\n\n var _behavior = dc_graph.behavior('highlight-neighbors', {\n add_behavior: add_behavior,\n remove_behavior: function(diagram, node, edge) {\n remove_behavior(diagram, node, edge);\n },\n parent: function(p) {\n highlight_neighbors_group.on('highlight_node.highlight', p ? highlight_node : null);\n if(!p.child('highlight-things'))\n p.child('highlight-things',\n dc_graph.highlight_things(includeprops, excludeprops)\n .durationOverride(_behavior.durationOverride()));\n }\n });\n _behavior.durationOverride = property(undefined);\n return _behavior;\n};\n\n","dc_graph.highlight_radius = function(options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var highlight_things_group = dc_graph.register_highlight_things_group(options.highlight_things_group || 'highlight-things-group');\n var _graph, _selection = [];\n\n function recurse(n, r, nodeset, edgeset) {\n nodeset[n.key()] = true;\n if(r) {\n n.outs().filter(function(e) {\n return !edgeset[e.key()];\n }).forEach(function(e) {\n edgeset[e.key()] = true;\n recurse(e.target(), r-1, nodeset, edgeset);\n });\n n.ins().filter(function(e) {\n return !edgeset[e.key()];\n }).forEach(function(e) {\n edgeset[e.key()] = true;\n recurse(e.source(), r-1, nodeset, edgeset);\n });\n }\n }\n function selection_changed(nodes) {\n _selection = nodes;\n console.assert(_graph);\n var nodeset = {}, edgeset = {};\n nodes.forEach(function(nkey) {\n recurse(_graph.node(nkey), _behavior.radius(), nodeset, edgeset);\n });\n if(!Object.keys(nodeset).length && !Object.keys(edgeset).length)\n nodeset = edgeset = null;\n highlight_things_group.highlight(nodeset, edgeset);\n }\n\n function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _graph = metagraph.graph(wnodes, wedges, {\n nodeKey: diagram.nodeKey.eval,\n edgeKey: diagram.edgeKey.eval,\n edgeSource: diagram.edgeSource.eval,\n edgeTarget: diagram.edgeTarget.eval\n });\n var sel2 = _selection.filter(function(nk) {\n return !!_graph.node(nk);\n });\n if(sel2.length < _selection.length)\n window.setTimeout(function() {\n select_nodes_group.set_changed(sel2);\n }, 0);\n }\n var _behavior = {\n parent: function(p) {\n if(p) {\n p.on('data.fix-nodes', on_data);\n } else if(_behavior.parent())\n _behavior.parent().on('data.fix-nodes', null);\n select_nodes_group.on('set_changed', selection_changed);\n }\n };\n _behavior.radius = property(1);\n return _behavior;\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 var _anchor;\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 selected = hoverpaths = null;\n // it would be difficult to check if no change, but at least check if changing from empty to empty\n if(Object.keys(node_on_paths).length === 0 && Object.keys(nop).length === 0 &&\n Object.keys(edge_on_paths).length === 0 && Object.keys(eop).length === 0)\n return;\n node_on_paths = nop;\n edge_on_paths = eop;\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(diagram, node, edge, ehover) {\n diagram\n .cascade(200, true, node_edge_conditions(function(n) {\n return !!node_on_paths[diagram.nodeKey.eval(n)];\n }, function(e) {\n return !!edge_on_paths[diagram.edgeKey.eval(e)];\n }, pathprops))\n .cascade(300, true, node_edge_conditions(function(n) {\n return intersect_paths(node_on_paths[diagram.nodeKey.eval(n)], selected);\n }, function(e) {\n return intersect_paths(edge_on_paths[diagram.edgeKey.eval(e)], selected);\n }, selectprops))\n .cascade(400, true, node_edge_conditions(function(n) {\n return intersect_paths(node_on_paths[diagram.nodeKey.eval(n)], hoverpaths);\n }, function(e) {\n return intersect_paths(edge_on_paths[diagram.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[diagram.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[diagram.nodeKey.eval(n)]));\n });\n\n\n ehover\n .on('mouseover.highlight-paths', function(e) {\n highlight_paths_group.hover_changed(edge_on_paths[diagram.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[diagram.nodeKey.eval(n)]));\n });\n }\n\n function remove_behavior(diagram, 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 diagram\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(diagram, node, edge, ehover) {\n remove_behavior(diagram, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n if(p)\n _anchor = p.anchorName();\n // else we should have received anchor earlier\n highlight_paths_group.on('paths_changed.highlight' + _anchor, p ? paths_changed : null);\n highlight_paths_group.on('hover_changed.highlight' + _anchor, p ? hover_changed : null);\n highlight_paths_group.on('select_changed.highlight' + _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.draw_spline_paths = function(pathreader, 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 var _paths = null, _hoverpaths = null, _selected = null;\n var _anchor;\n var _layer = null;\n var _savedPositions = null;\n\n function paths_changed(nop, eop, paths) {\n _paths = paths;\n\n var engine = _behavior.parent().layoutEngine(),\n localPaths = paths.filter(pathIsPresent);\n if(localPaths.length) {\n var nidpaths = localPaths.map(function(lpath) {\n var strength = pathreader.pathStrength.eval(lpath);\n if(typeof strength !== 'number')\n strength = 1;\n if(_selected && _selected.indexOf(lpath) !== -1)\n strength *= _behavior.selectedStrength();\n return {\n nodes: path_keys(lpath),\n strength: strength\n };\n });\n engine.paths(nidpaths);\n } else {\n engine.paths(null);\n if(_savedPositions)\n engine.restorePositions(_savedPositions);\n }\n if(_selected)\n _selected = _selected.filter(function(p) { return localPaths.indexOf(p) !== -1; });\n _behavior.parent().redraw();\n }\n\n function select_changed(sp) {\n if(sp !== _selected) {\n _selected = sp;\n paths_changed(null, null, _paths);\n }\n }\n\n function path_keys(path, unique) {\n unique = unique !== false;\n var keys = pathreader.elementList.eval(path).filter(function(elem) {\n return pathreader.elementType.eval(elem) === 'node';\n }).map(function(elem) {\n return pathreader.nodeKey.eval(elem);\n });\n return unique ? uniq(keys) : keys;\n }\n\n // check if entire path is present in this view\n function pathIsPresent(path) {\n return pathreader.elementList.eval(path).every(function(element) {\n return pathreader.elementType.eval(element) !== 'node' ||\n _behavior.parent().getWholeNode(pathreader.nodeKey.eval(element));\n });\n }\n\n // get the positions of nodes on path\n function getNodePositions(path, old) {\n return path_keys(path, false).map(function(key) {\n var node = _behavior.parent().getWholeNode(key);\n return {x: old && node.prevX !== undefined ? node.prevX : node.cola.x,\n y: old && node.prevY !== undefined ? node.prevY : node.cola.y};\n });\n };\n\n // insert fake nodes to avoid sharp turns\n function insertDummyNodes(path_coord) {\n function _distance(node1, node2) {\n return Math.sqrt(Math.pow((node1.x-node2.x),2) + Math.pow((node1.y-node2.y),2));\n }\n\n var new_path_coord = [];\n\n for(var i = 0; i < path_coord.length; i ++) {\n if (i-1 >= 0 && i+1 < path_coord.length) {\n if (path_coord[i-1].x === path_coord[i+1].x &&\n path_coord[i-1].y === path_coord[i+1].y ) {\n // insert node when the previous and next nodes are the same\n var x1 = path_coord[i-1].x, y1 = path_coord[i-1].y;\n var x2 = path_coord[i].x, y2 = path_coord[i].y;\n var dx = x1 - x2, dy = y1 - y2;\n\n var v1 = dy / Math.sqrt(dx*dx + dy*dy);\n var v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p1 = {'x': null, 'y': null};\n var insert_p2 = {'x': null, 'y': null};\n\n var offset = 10;\n\n insert_p1.x = (x1+x2)/2.0 + offset*v1;\n insert_p1.y = (y1+y2)/2.0 + offset*v2;\n\n insert_p2.x = (x1+x2)/2.0 - offset*v1;\n insert_p2.y = (y1+y2)/2.0 - offset*v2;\n\n new_path_coord.push(insert_p1);\n new_path_coord.push(path_coord[i]);\n new_path_coord.push(insert_p2);\n } else if (_distance(path_coord[i-1], path_coord[i+1]) < pathprops.nearNodesDistance){\n // insert node when the previous and next nodes are very close\n // first node\n var x1 = path_coord[i-1].x, y1 = path_coord[i-1].y;\n var x2 = path_coord[i].x, y2 = path_coord[i].y;\n var dx = x1 - x2, dy = y1 - y2;\n\n var v1 = dy / Math.sqrt(dx*dx + dy*dy);\n var v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p1 = {'x': null, 'y': null};\n\n var offset = 10;\n\n insert_p1.x = (x1+x2)/2.0 + offset*v1;\n insert_p1.y = (y1+y2)/2.0 + offset*v2;\n\n // second node\n x1 = path_coord[i].x;\n y1 = path_coord[i].y;\n x2 = path_coord[i+1].x;\n y2 = path_coord[i+1].y;\n dx = x1 - x2;\n dy = y1 - y2;\n\n v1 = dy / Math.sqrt(dx*dx + dy*dy);\n v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p2 = {'x': null, 'y': null};\n\n insert_p2.x = (x1+x2)/2.0 + offset*v1;\n insert_p2.y = (y1+y2)/2.0 + offset*v2;\n\n new_path_coord.push(insert_p1);\n new_path_coord.push(path_coord[i]);\n new_path_coord.push(insert_p2);\n\n }\n else {\n new_path_coord.push(path_coord[i]);\n }\n } else {\n new_path_coord.push(path_coord[i]);\n }\n }\n return new_path_coord;\n }\n\n // helper functions\n var vecDot = function(v0, v1) { return v0.x*v1.x+v0.y*v1.y; };\n var vecMag = function(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n var l2Dist = function(p1, p2) {\n return Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));\n };\n\n function drawCardinalSpline(points, lineTension, avoidSharpTurn, angleThreshold) {\n var c = lineTension || 0;\n avoidSharpTurn = avoidSharpTurn !== false;\n angleThreshold = angleThreshold || 0.02;\n\n // get the path without self loops\n var path_list = [points[0]];\n for(var i = 1; i < points.length; i ++) {\n if(l2Dist(points[i], path_list[path_list.length-1]) > 1e-6) {\n path_list.push(points[i]);\n }\n }\n\n // repeat first and last node\n points = [path_list[0]];\n points = points.concat(path_list);\n points.push(path_list[path_list.length-1]);\n\n // a segment is a list of three points: [c0, c1, p1],\n // representing the coordinates in \"C x0,y0,x1,y1,x,y\" in svg:path\n var segments = []; // control points\n for(var i = 1; i < points.length-2; i ++) {\n // generate svg:path\n var m_0_x = (1-c)*(points[i+1].x - points[i-1].x)/2;\n var m_0_y = (1-c)*(points[i+1].y - points[i-1].y)/2;\n\n var m_1_x = (1-c)*(points[i+2].x - points[i].x)/2;\n var m_1_y = (1-c)*(points[i+2].y - points[i].y)/2;\n\n var p0 = points[i];\n var p1 = points[i+1];\n var c0 = p0;\n if(i !== 1) {\n c0 = {x: p0.x+(m_0_x/3), y:p0.y+(m_0_y/3)};\n }\n var c1 = p1;\n if(i !== points.length-3) {\n c1 = {x: p1.x-(m_1_x/3), y:p1.y-(m_1_y/3)};\n }\n\n // detect special case by calculating the angle\n if(avoidSharpTurn) {\n var v0 = {x:points[i-1].x - points[i].x, y:points[i-1].y - points[i].y};\n var v1 = {x:points[i+1].x - points[i].x, y:points[i+1].y - points[i].y};\n var acosValue = vecDot(v0,v1) / (vecMag(v0)*vecMag(v1));\n acosValue = Math.max(-1, Math.min(1, acosValue));\n var angle = Math.acos( acosValue );\n\n if(angle <= angleThreshold ){\n var m_x = (1-c)*(points[i].x - points[i-1].x)/2;\n var m_y = (1-c)*(points[i].y - points[i-1].y)/2;\n var k = 2;\n\n var cp1 = {x: p0.x+k*(-m_y/3), y:p0.y+k*(m_x/3)};\n var cp2 = {x: p0.x-k*(-m_y/3), y:p0.y-k*(m_x/3)};\n // CP_1CP_2\n var vCP = {x: cp1.x-cp2.x, y:cp1.y-cp2.y}; // vector cp1->cp2\n var vPN = {x: points[i-2].x - points[i+2].x, y:points[i-2].y-points[i+2].y}; // vector Previous->Next\n if(vecDot(vCP, vPN) > 0) {\n c0 = cp1;\n segments[segments.length-1][1] = cp2;\n } else {\n c0 = cp2;\n segments[segments.length-1][1] = cp1;\n }\n }\n }\n\n segments.push([c0,c1,p1]);\n }\n\n var path_d = \"M\"+points[0].x+\",\"+points[0].y;\n for(var i = 0; i < segments.length; i ++) {\n var s = segments[i];\n path_d += \"C\"+s[0].x+\",\"+s[0].y;\n path_d += \",\"+s[1].x+\",\"+s[1].y;\n path_d += \",\"+s[2].x+\",\"+s[2].y;\n }\n return path_d;\n }\n\n function drawDedicatedLoops(points, lineTension, avoidSharpTurn, angleThreshold) {\n // get loops as segments\n var p1 = 0, p2 = 1;\n var seg_list = []; // (start, end)\n while(p1 < points.length-1 && p2 < points.length) {\n if(l2Dist(points[p1], points[p2]) < 1e-6) {\n var repeated = points[p2];\n while(p2 < points.length && l2Dist(points[p2], repeated) < 1e-6) p2++;\n seg_list.push({'start': Math.max(0, p1-1), 'end': Math.min(points.length-1, p2)});\n p1 = p2;\n p2 = p1+1;\n } else {\n p1++;\n p2++;\n }\n }\n\n var loopCurves = \"\";\n for(var i = 0; i < seg_list.length; i ++) {\n var segment = seg_list[i];\n var loopCount = segment.end - segment.start - 2;\n var anchorPoint = points[segment.start+1];\n\n // the vector from previous node to next node\n var vec_pre_next = {\n x: points[segment.end].x-points[segment.start].x,\n y: points[segment.end].y-points[segment.start].y\n };\n\n // when previous node and next node are the same node, we need to handle\n // them differently.\n // e.g. for a loop segment A->B->B->A, we use the perpendicular vector perp_AB\n // instead of vector AA(which is vec_pre_next in this case).\n if(vecMag(vec_pre_next) == 0) {\n vec_pre_next = {\n x: -(points[segment.end].y-anchorPoint.y),\n y: points[segment.end].x-anchorPoint.x\n };\n }\n\n // unit length vector\n var vec_pre_next_unit = {\n x: vec_pre_next.x / vecMag(vec_pre_next),\n y: vec_pre_next.y / vecMag(vec_pre_next)\n };\n var vec_pre_next_perp = {\n x: -vec_pre_next.y / vecMag(vec_pre_next),\n y: vec_pre_next.x / vecMag(vec_pre_next)\n };\n\n var insertP;\n for(var j = 0; j < loopCount; j ++) {\n var c1,c2,c3,c4;\n\n // change the control points every time this loop appears\n var cp_k = 15+2*j;\n\n // calculate c1 and c4, their tangent match the tangent at anchorPoint\n c1 = {\n x: anchorPoint.x + cp_k*vec_pre_next_unit.x,\n y: anchorPoint.y + cp_k*vec_pre_next_unit.y\n };\n\n c4 = {\n x: anchorPoint.x - cp_k*vec_pre_next_unit.x,\n y: anchorPoint.y - cp_k*vec_pre_next_unit.y\n };\n\n // change the location of inserted virtual point every time this loop appears\n var control_k = 25+5*j;\n var insertP1 = {\n x: anchorPoint.x+vec_pre_next_perp.x*control_k,\n y: anchorPoint.y+vec_pre_next_perp.y*control_k\n };\n var insertP2 = {\n x: anchorPoint.x-vec_pre_next_perp.x*control_k,\n y: anchorPoint.y-vec_pre_next_perp.y*control_k\n };\n var vec_i_to_next = {\n x: points[segment.end].x - anchorPoint.x,\n y: points[segment.end].y - anchorPoint.y\n };\n var vec_i_to_insert = {\n x: insertP1.x - anchorPoint.x,\n y: insertP1.y - anchorPoint.y\n };\n insertP = insertP1;\n if(vecDot(vec_i_to_insert, vec_i_to_next) > 0) {\n insertP = insertP2;\n }\n\n // calculate c2 and c3 based on insertP\n c2 = {\n x: insertP.x + cp_k*vec_pre_next_unit.x,\n y: insertP.y + cp_k*vec_pre_next_unit.y\n };\n\n c3 = {\n x: insertP.x - cp_k*vec_pre_next_unit.x,\n y: insertP.y - cp_k*vec_pre_next_unit.y\n };\n\n var curve = \"M\"+anchorPoint.x+\",\"+anchorPoint.y;\n curve += \"C\"+c1.x+\",\"+c1.y+\",\"+c2.x+\",\"+c2.y+\",\"+insertP.x+\",\"+insertP.y;\n curve += \"C\"+c3.x+\",\"+c3.y+\",\"+c4.x+\",\"+c4.y+\",\"+anchorPoint.x+\",\"+anchorPoint.y;\n\n loopCurves += curve;\n }\n }\n return loopCurves;\n }\n\n // convert original path data into \n function genPath(originalPoints, old, lineTension, avoidSharpTurn, angleThreshold) {\n // get coordinates\n var path_coord = getNodePositions(originalPoints, old);\n if(path_coord.length < 2) return \"\";\n\n var result = \"\";\n // process the points and treat them differently:\n // 1. sub-path without self loop\n result += drawCardinalSpline(path_coord, lineTension, avoidSharpTurn, angleThreshold);\n\n // 2. a list of loop segments\n result += drawDedicatedLoops(path_coord, lineTension, avoidSharpTurn, angleThreshold);\n\n return result;\n }\n\n // draw the spline for paths\n function drawSpline(paths) {\n if(paths === null) {\n _savedPositions = _behavior.parent().layoutEngine().savePositions();\n return;\n }\n\n paths = paths.filter(pathIsPresent);\n var hoverpaths = _hoverpaths || [],\n selected = _selected || [];\n\n // edge spline\n var edge = _layer.selectAll(\".spline-edge\").data(paths, function(path) { return path_keys(path).join(','); });\n edge.exit().remove();\n var edgeEnter = edge.enter().append(\"svg:path\")\n .attr('class', 'spline-edge')\n .attr('id', function(d, i) { return \"spline-path-\"+i; })\n .attr('stroke-width', pathprops.edgeStrokeWidth || 1)\n .attr('fill', 'none')\n .attr('d', function(d) { return genPath(d, true, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n edge\n .attr('stroke', function(p) {\n return selected.indexOf(p) !== -1 && selectprops.edgeStroke ||\n hoverpaths.indexOf(p) !== -1 && hoverprops.edgeStroke ||\n pathprops.edgeStroke || 'black';\n })\n .attr('opacity', function(p) {\n return selected.indexOf(p) !== -1 && selectprops.edgeOpacity ||\n hoverpaths.indexOf(p) !== -1 && hoverprops.edgeOpacity ||\n pathprops.edgeOpacity || 1;\n });\n function path_order(p) {\n return hoverpaths.indexOf(p) !== -1 ? 2 :\n selected.indexOf(p) !== -1 ? 1 :\n 0;\n }\n edge.sort(function(a, b) {\n return path_order(a) - path_order(b);\n });\n _layer.selectAll('.spline-edge-hover')\n .each(function() {this.parentNode.appendChild(this);});\n edge.transition().duration(_behavior.parent().transitionDuration())\n .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n\n // another wider copy of the edge just for hover events\n var edgeHover = _layer.selectAll('.spline-edge-hover')\n .data(paths, function(path) { return path_keys(path).join(','); });\n edgeHover.exit().remove();\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'spline-edge-hover')\n .attr('d', function(d) { return genPath(d, true, pathprops.lineTension, _behavior.avoidSharpTurns()); })\n .attr('opacity', 0)\n .attr('stroke', 'green')\n .attr('stroke-width', (pathprops.edgeStrokeWidth || 1) + 4)\n .attr('fill', 'none')\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 var selected = _selected && _selected.slice(0) || [],\n i = selected.indexOf(d);\n if(i !== -1)\n selected.splice(i, 1);\n else if(d3.event.shiftKey)\n selected.push(d);\n else\n selected = [d];\n highlight_paths_group.select_changed(selected);\n });\n edgeHover.transition().duration(_behavior.parent().transitionDuration())\n .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n };\n\n function add_behavior(diagram, node, edge, ehover) {\n _layer = _behavior.parent().select('g.draw').selectAll('g.spline-layer').data([0]);\n _layer.enter().append('g').attr('class', 'spline-layer');\n\n drawSpline(_paths);\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n }\n\n var _behavior = dc_graph.behavior('draw-spline-paths', {\n laterDraw: true,\n add_behavior: add_behavior,\n remove_behavior: function(diagram, node, edge, ehover) {\n remove_behavior(diagram, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n if(p)\n _anchor = p.anchorName();\n highlight_paths_group\n .on('paths_changed.draw-spline-paths-' + _anchor, p ? paths_changed : null)\n .on('select_changed.draw-spline-paths-' + _anchor, p ? select_changed : null)\n .on('hover_changed.draw-spline-paths-' + _anchor, p ? function(hpaths) {\n _hoverpaths = hpaths;\n drawSpline(_paths);\n } : null);\n }\n });\n _behavior.selectedStrength = property(1);\n _behavior.avoidSharpTurns = property(true);\n\n return _behavior;\n};\n","dc_graph.expand_collapse = function(options) {\n if(typeof options === 'function') {\n options = {\n get_degree: arguments[0],\n expand: arguments[1],\n collapse: arguments[2],\n dirs: arguments[3]\n };\n }\n var _keyboard, _overNode, _overDir;\n var collapse_highlight_group = dc_graph.register_highlight_things_group(options.collapse_highlight_group || 'collapse-highlight-group');\n var hide_highlight_group = dc_graph.register_highlight_things_group(options.hide_highlight_group || 'hide-highlight-group');\n options.dirs = options.dirs || ['both'];\n options.hideKey = options.hideKey || 'Alt';\n if(options.dirs.length > 2)\n throw new Error('there are only two directions to expand in');\n\n function add_gradient_def(diagram) {\n var gradient = diagram.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(diagram, edge, dir, key) {\n var fil;\n switch(dir) {\n case 'out':\n fil = function(e) {\n return diagram.edgeSource.eval(e) === key;\n };\n break;\n case 'in':\n fil = function(e) {\n return diagram.edgeTarget.eval(e) === key;\n };\n break;\n case 'both':\n fil = function(e) {\n return diagram.edgeSource.eval(e) === key || diagram.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_stubs(diagram, node, edge) {\n var spike = node\n .selectAll('g.spikes')\n .data(function(n) {\n return (n.dcg_expand_selected &&\n (!n.dcg_expanded || !n.dcg_expanded[n.dcg_expand_selected.dir])) ?\n [n] : [];\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(n) {\n var key = diagram.nodeKey.eval(n);\n var dir = n.dcg_expand_selected.dir,\n N = n.dcg_expand_selected.n,\n af = spike_directioner(diagram.layoutEngine().rankdir(), dir, N),\n ret = Array(N);\n for(var i = 0; i n.cola.y ? 'out' : 'in';\n case 'BT':\n return y < n.cola.y ? 'out' : 'in';\n case 'LR':\n return x > n.cola.x ? 'out' : 'in';\n case 'RL':\n return x < n.cola.x ? 'out' : 'in';\n }\n throw new Error('unknown rankdir ' + diagram.layoutEngine().rankdir());\n }\n\n function detect_key(key) {\n switch(key) {\n case 'Alt':\n return d3.event.altKey;\n case 'Meta':\n return d3.event.metaKey;\n case 'Shift':\n return d3.event.shiftKey;\n case 'Control':\n return d3.event.ctrlKey;\n }\n return false;\n }\n\n function highlight_hiding(diagram, n, edge) {\n var nk = diagram.nodeKey.eval(n);\n var hide_nodes_set = {}, hide_edges_set = {};\n hide_nodes_set[nk] = true;\n edge.each(function(e) {\n if(diagram.edgeSource.eval(e) === nk || diagram.edgeTarget.eval(e) === nk)\n hide_edges_set[diagram.edgeKey.eval(e)] = true;\n });\n hide_highlight_group.highlight(hide_nodes_set, hide_edges_set);\n }\n\n function highlight_collapse(diagram, n, node, edge, dir) {\n var nk = diagram.nodeKey.eval(n);\n Promise.resolve(options.get_degree(nk, dir)).then(function(degree) {\n var spikes = {\n dir: dir,\n n: Math.max(0, degree - view_degree(diagram, edge, dir, nk)) // be tolerant of inconsistencies\n };\n var collapse_nodes_set = {}, collapse_edges_set = {};\n node.each(function(n2) {\n n2.dcg_expand_selected = n2 === n ? spikes : null;\n if(n2 === n && n.dcg_expanded && n.dcg_expanded[dir])\n edge.each(function(e) {\n var other;\n if(['both', 'out'].includes(dir) && diagram.edgeSource.eval(e) === diagram.nodeKey.eval(n))\n other = diagram.edgeTarget.eval(e);\n if(['both', 'in'].includes(dir) && diagram.edgeTarget.eval(e) === diagram.nodeKey.eval(n))\n other = diagram.edgeSource.eval(e);\n if(other && collapsible(diagram, edge, 'both', other)) {\n collapse_nodes_set[other] = true;\n collapse_edges_set[diagram.edgeKey.eval(e)] = true;\n }\n });\n });\n draw_stubs(diagram, node, edge);\n collapse_highlight_group.highlight(collapse_nodes_set, collapse_edges_set);\n });\n }\n\n function add_behavior(diagram, node, edge) {\n function mousemove(n) {\n console.log('collapse mousemove');\n var dir = zonedir(diagram, d3.event, options.dirs, n);\n var nk = diagram.nodeKey.eval(n);\n _overNode = n;\n _overDir = dir;\n if(options.hide && detect_key(options.hideKey))\n highlight_hiding(diagram, n, edge);\n else\n highlight_collapse(diagram, n, node, edge, dir);\n }\n\n function click(n) {\n var event = d3.event;\n console.log(event.type);\n function action() {\n if(options.hide && detect_key(options.hideKey))\n options.hide(diagram.nodeKey.eval(n));\n else {\n var dir = zonedir(diagram, event, options.dirs, n);\n n.dcg_expanded = n.dcg_expanded || {};\n if(!n.dcg_expanded[dir]) {\n options.expand(diagram.nodeKey.eval(n), dir, event.type === 'dblclick');\n n.dcg_expanded[dir] = true;\n }\n else {\n options.collapse(diagram.nodeKey.eval(n), collapsible.bind(null, diagram, edge, 'both'), dir);\n n.dcg_expanded[dir] = false;\n }\n draw_stubs(diagram, node, edge);\n n.dcg_dblclk_timeout = null;\n }\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(n.dcg_dblclk_timeout) {\n window.clearTimeout(n.dcg_dblclk_timeout);\n if(event.type === 'dblclick')\n action();\n n.dcg_dblclk_timeout = null;\n }\n else n.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(n) {\n console.log('collapse mouseout');\n _overNode = null;\n clear_stubs(diagram, node, edge);\n collapse_highlight_group.highlight({}, {});\n hide_highlight_group.highlight({}, {});\n })\n .on('click', click)\n .on('dblclick', click);\n\n _keyboard\n .on('keydown.expand-collapse', function() {\n if(d3.event.key === options.hideKey && _overNode) {\n highlight_hiding(diagram, _overNode, edge);\n clear_stubs(diagram, node, edge);\n collapse_highlight_group.highlight({}, {});\n }\n })\n .on('keyup.expand_collapse', function() {\n if(d3.event.key === options.hideKey && _overNode) {\n hide_highlight_group.highlight({}, {});\n highlight_collapse(diagram, _overNode, node, edge, _overDir);\n }\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n node\n .on('mouseover.expand-collapse', null)\n .on('mouseout.expand-collapse', null);\n clear_stubs(diagram, node, edge);\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 parent: function(p) {\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n }\n }\n });\n};\n","dc_graph.draw_graphs = function(options) {\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes'),\n select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges'),\n label_nodes_group = dc_graph.label_things_group('label-nodes-group', 'label-nodes'),\n label_edges_group = dc_graph.label_things_group('label-edges-group', 'label-edges'),\n fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _nodeIdTag = options.idTag || 'id',\n _edgeIdTag = options.edgeIdTag || _nodeIdTag,\n _sourceTag = options.sourceTag || 'source',\n _targetTag = options.targetTag || 'target',\n _nodeLabelTag = options.labelTag || 'label',\n _edgeLabelTag = options.edgeLabelTag || _nodeLabelTag;\n\n var _sourceDown = null, _targetMove = null, _targetValid = false, _edgeLayer = null, _hintData = [], _crossout;\n\n function update_hint() {\n var data = _hintData.filter(function(h) {\n return h.source && h.target;\n });\n var line = _edgeLayer.selectAll('line.hint-edge').data(data);\n line.exit().remove();\n line.enter().append('line')\n .attr('class', 'hint-edge')\n .style({\n fill: 'none',\n stroke: 'black',\n 'pointer-events': 'none'\n });\n\n line.attr({\n x1: function(n) { return n.source.x; },\n y1: function(n) { return n.source.y; },\n x2: function(n) { return n.target.x; },\n y2: function(n) { return n.target.y; }\n });\n }\n\n function port_pos(p) {\n var style = _behavior.parent().portStyle(_behavior.parent().portStyleName.eval(p));\n var pos = style.portPosition(p);\n pos.x += p.node.cola.x;\n pos.y += p.node.cola.y;\n return pos;\n }\n\n function update_crossout() {\n var data;\n if(_crossout) {\n if(_behavior.usePorts())\n data = [port_pos(_crossout)];\n else\n data = [{x: _crossout.node.cola.x, y: _crossout.node.cola.y}];\n }\n else data = [];\n\n var size = _behavior.crossSize(), wid = _behavior.crossWidth();\n var cross = _edgeLayer.selectAll('polygon.graph-draw-crossout').data(data);\n cross.exit().remove();\n cross.enter().append('polygon')\n .attr('class', 'graph-draw-crossout');\n cross\n .attr('points', function(d) {\n var x = d.x, y = d.y;\n return [\n [x-size/2, y+size/2], [x-size/2+wid, y+size/2], [x, y+wid/2],\n [x+size/2-wid, y+size/2], [x+size/2, y+size/2], [x+wid/2, y],\n [x+size/2, y-size/2], [x+size/2-wid, y-size/2], [x, y-wid/2],\n [x-size/2+wid, y-size/2], [x-size/2, y-size/2], [x-wid/2, y]\n ]\n .map(function(p) { return p.join(','); })\n .join(' ');\n });\n }\n function erase_hint() {\n _hintData = [];\n _targetValid = false;\n _sourceDown = _targetMove = null;\n update_hint();\n }\n\n function create_node(diagram, pos, data) {\n if(!_behavior.nodeCrossfilter())\n throw new Error('need nodeCrossfilter');\n var node, callback = _behavior.addNode() || promise_identity;\n if(data)\n node = data;\n else {\n node = {};\n node[_nodeIdTag] = uuid();\n node[_nodeLabelTag] = '';\n }\n if(pos)\n fix_nodes_group.new_node(node[_nodeIdTag], node, {x: pos[0], y: pos[1]});\n callback(node).then(function(node2) {\n if(!node2)\n return;\n _behavior.nodeCrossfilter().add([node2]);\n diagram.redrawGroup();\n select_nodes_group.set_changed([node2[_nodeIdTag]]);\n });\n }\n\n function create_edge(diagram, source, target) {\n if(!_behavior.edgeCrossfilter())\n throw new Error('need edgeCrossfilter');\n var edge = {}, callback = _behavior.addEdge() || promise_identity;\n edge[_edgeIdTag] = uuid();\n edge[_edgeLabelTag] = '';\n if(_behavior.conduct().detectReversedEdge && _behavior.conduct().detectReversedEdge(edge, source.port, target.port)) {\n edge[_sourceTag] = target.node.orig.key;\n edge[_targetTag] = source.node.orig.key;\n var t;\n t = source; source = target; target = t;\n } else {\n edge[_sourceTag] = source.node.orig.key;\n edge[_targetTag] = target.node.orig.key;\n }\n callback(edge, source.port, target.port).then(function(edge2) {\n if(!edge2)\n return;\n fix_nodes_group.new_edge(edge[_edgeIdTag], edge2[_sourceTag], edge2[_targetTag]);\n _behavior.edgeCrossfilter().add([edge2]);\n select_nodes_group.set_changed([], false);\n select_edges_group.set_changed([edge2[_edgeIdTag]], false);\n diagram.redrawGroup();\n });\n }\n\n function check_invalid_drag(coords) {\n var msg;\n if(!(d3.event.buttons & 1)) {\n // mouse button was released but we missed it\n _crossout = null;\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n erase_hint();\n update_crossout();\n return true;\n }\n if(!_sourceDown.started && Math.hypot(coords[0] - _hintData[0].source.x, coords[1] - _hintData[0].source.y) > _behavior.dragSize()) {\n if(_behavior.conduct().startDragEdge) {\n if(_behavior.conduct().startDragEdge(_sourceDown)) {\n _sourceDown.started = true;\n } else {\n if(_behavior.conduct().invalidSourceMessage) {\n msg = _behavior.conduct().invalidSourceMessage(_sourceDown);\n console.log(msg);\n if(options.negativeTip) {\n options.negativeTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _sourceDown.port : _sourceDown.node);\n }\n }\n erase_hint();\n return true;\n }\n }\n }\n return false;\n }\n\n function add_behavior(diagram, node, edge, ehover) {\n var select_nodes = diagram.child('select-nodes');\n if(select_nodes) {\n if(_behavior.clickCreatesNodes())\n select_nodes.clickBackgroundClears(false);\n }\n node\n .on('mousedown.draw-graphs', function(n) {\n d3.event.stopPropagation();\n if(!_behavior.dragCreatesEdges())\n return;\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip\n .hideTip()\n .disabled(true);\n });\n if(_behavior.usePorts()) {\n var activePort;\n if(typeof _behavior.usePorts() === 'object' && _behavior.usePorts().eventPort)\n activePort = _behavior.usePorts().eventPort();\n else activePort = diagram.getPort(diagram.nodeKey.eval(n), null, 'out')\n || diagram.getPort(diagram.nodeKey.eval(n), null, 'in');\n if(!activePort)\n return;\n _sourceDown = {node: n, port: activePort};\n _hintData = [{source: port_pos(activePort)}];\n } else {\n _sourceDown = {node: n};\n _hintData = [{source: {x: _sourceDown.node.cola.x, y: _sourceDown.node.cola.y}}];\n }\n })\n .on('mousemove.draw-graphs', function(n) {\n var msg;\n d3.event.stopPropagation();\n if(_sourceDown) {\n var coords = dc_graph.event_coords(diagram);\n if(check_invalid_drag(coords))\n return;\n var oldTarget = _targetMove;\n if(n === _sourceDown.node) {\n _behavior.conduct().invalidTargetMessage &&\n console.log(_behavior.conduct().invalidTargetMessage(_sourceDown, _sourceDown));\n _targetMove = null;\n _hintData[0].target = null;\n }\n else if(_behavior.usePorts()) {\n var activePort;\n if(typeof _behavior.usePorts() === 'object' && _behavior.usePorts().eventPort)\n activePort = _behavior.usePorts().eventPort();\n else activePort = diagram.getPort(diagram.nodeKey.eval(n), null, 'in')\n || diagram.getPort(diagram.nodeKey.eval(n), null, 'out');\n if(activePort)\n _targetMove = {node: n, port: activePort};\n else\n _targetMove = null;\n } else if(!_targetMove || n !== _targetMove.node) {\n _targetMove = {node: n};\n }\n if(_behavior.conduct().changeDragTarget) {\n var change;\n if(_behavior.usePorts()) {\n var oldPort = oldTarget && oldTarget.port,\n newPort = _targetMove && _targetMove.port;\n change = oldPort !== newPort;\n } else {\n var oldNode = oldTarget && oldTarget.node,\n newNode = _targetMove && _targetMove.node;\n change = oldNode !== newNode;\n }\n if(change)\n if(_behavior.conduct().changeDragTarget(_sourceDown, _targetMove)) {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip();\n msg = _behavior.conduct().validTargetMessage && _behavior.conduct().validTargetMessage() ||\n 'matches';\n if(options.positiveTip) {\n options.positiveTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _targetMove.port : _targetMove.node);\n }\n _targetValid = true;\n } else {\n _crossout = _behavior.usePorts() ?\n _targetMove && _targetMove.port :\n _targetMove && _targetMove.node;\n if(_targetMove && _behavior.conduct().invalidTargetMessage) {\n if(options.positiveTip)\n options.positiveTip.hideTip();\n msg = _behavior.conduct().invalidTargetMessage(_sourceDown, _targetMove);\n console.log(msg);\n if(options.negativeTip) {\n options.negativeTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _targetMove.port : _targetMove.node);\n }\n }\n _targetValid = false;\n }\n }\n if(_targetMove) {\n if(_targetMove.port)\n _hintData[0].target = port_pos(activePort);\n else\n _hintData[0].target = {x: n.cola.x, y: n.cola.y};\n }\n else {\n _hintData[0].target = {x: coords[0], y: coords[1]};\n }\n update_hint();\n update_crossout();\n }\n })\n .on('mouseup.draw-graphs', function(n) {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip(true);\n if(options.positiveTip)\n options.positiveTip.hideTip(true);\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip.disabled(false);\n });\n // allow keyboard mode to hear this one (again, we need better cooperation)\n // d3.event.stopPropagation();\n if(_sourceDown && _targetValid) {\n var finishPromise;\n if(_behavior.conduct().finishDragEdge)\n finishPromise = _behavior.conduct().finishDragEdge(_sourceDown, _targetMove);\n else finishPromise = Promise.resolve(true);\n var source = _sourceDown, target = _targetMove;\n finishPromise.then(function(ok) {\n if(ok)\n create_edge(diagram, source, target);\n });\n }\n else if(_sourceDown) {\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n }\n erase_hint();\n update_crossout();\n });\n diagram.svg()\n .on('mousedown.draw-graphs', function() {\n _sourceDown = null;\n })\n .on('mousemove.draw-graphs', function() {\n var data = [];\n if(_sourceDown) { // drawing edge\n var coords = dc_graph.event_coords(diagram);\n _crossout = null;\n if(check_invalid_drag(coords))\n return;\n if(_behavior.conduct().dragCanvas)\n _behavior.conduct().dragCanvas(_sourceDown, coords);\n if(_behavior.conduct().changeDragTarget && _targetMove)\n _behavior.conduct().changeDragTarget(_sourceDown, null);\n _targetMove = null;\n _hintData[0].target = {x: coords[0], y: coords[1]};\n update_hint();\n update_crossout();\n }\n })\n .on('mouseup.draw-graphs', function() {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip(true);\n if(options.positiveTip)\n options.positiveTip.hideTip(true);\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip.disabled(false);\n });\n if(_sourceDown) { // drag-edge\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n erase_hint();\n } else { // click-node\n if(d3.event.target === this && _behavior.clickCreatesNodes())\n create_node(diagram, dc_graph.event_coords(diagram));\n }\n update_crossout();\n });\n if(!_edgeLayer)\n _edgeLayer = diagram.g().append('g').attr('class', 'draw-graphs');\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n node\n .on('mousedown.draw-graphs', null)\n .on('mousemove.draw-graphs', null)\n .on('mouseup.draw-graphs', null);\n diagram.svg()\n .on('mousedown.draw-graphs', null)\n .on('mousemove.draw-graphs', null)\n .on('mouseup.draw-graphs', null);\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n\n // update the data source/destination\n _behavior.nodeCrossfilter = property(options.nodeCrossfilter);\n _behavior.edgeCrossfilter = property(options.edgeCrossfilter);\n\n // behavioral options\n _behavior.usePorts = property(null);\n _behavior.clickCreatesNodes = property(true);\n _behavior.dragCreatesEdges = property(true);\n _behavior.dragSize = property(5);\n\n // draw attributes of indicator for failed edge\n _behavior.crossSize = property(15);\n _behavior.crossWidth = property(5);\n\n // really this is a behavior, and what we've been calling behaviors are modes\n // but i'm on a deadline\n _behavior.conduct = property({});\n\n // callbacks to modify data as it's being added\n // as of 0.6, function returns a promise of the new data\n _behavior.addNode = property(null); // node -> promise(node2)\n _behavior.addEdge = property(null); // edge, sourceport, targetport -> promise(edge2)\n\n // or, if you want to drive..\n _behavior.createNode = function(pos, data) {\n create_node(_behavior.parent(), pos, data);\n };\n\n return _behavior;\n};\n\n","dc_graph.match_ports = function(diagram, symbolPorts) {\n var _ports, _wports, _wedges, _validTargets;\n diagram.on('data.match-ports', function(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _ports = ports;\n _wports = wports;\n _wedges = wedges;\n });\n diagram.on('transitionsStarted', function() {\n symbolPorts.enableHover(true);\n });\n function change_state(ports, state) {\n return ports.map(function(p) {\n p.state = state;\n return diagram.portNodeKey.eval(p);\n });\n }\n function reset_ports(source) {\n var nids = change_state(_validTargets, 'small');\n source.port.state = 'small';\n nids.push(diagram.portNodeKey.eval(source.port));\n symbolPorts.animateNodes(nids);\n }\n function has_parallel(sourcePort, targetPort) {\n return _wedges.some(function(e) {\n return sourcePort.edges.indexOf(e) >= 0 && targetPort.edges.indexOf(e) >= 0;\n });\n }\n function is_valid(sourcePort, targetPort) {\n return (_behavior.allowParallel() || !has_parallel(sourcePort, targetPort))\n && _behavior.isValid()(sourcePort, targetPort);\n }\n function why_invalid(sourcePort, targetPort) {\n return !_behavior.allowParallel() && has_parallel(sourcePort, targetPort) && \"can't connect two edges between the same two ports\" ||\n _behavior.whyInvalid()(sourcePort, targetPort);\n }\n var _behavior = {\n isValid: property(function(sourcePort, targetPort) {\n return targetPort !== sourcePort && targetPort.name === sourcePort.name;\n }),\n whyInvalid: property(function(sourcePort, targetPort) {\n return targetPort === sourcePort && \"can't connect port to itself\" ||\n targetPort.name !== sourcePort.name && \"must connect ports of the same type\";\n }),\n allowParallel: property(false),\n hoverPort: function(port) {\n if(port) {\n _validTargets = _wports.filter(is_valid.bind(null, port));\n if(_validTargets.length)\n return change_state(_validTargets, 'shimmer-medium');\n } else if(_validTargets)\n return change_state(_validTargets, 'small');\n return null;\n },\n startDragEdge: function(source) {\n _validTargets = _wports.filter(is_valid.bind(null, source.port));\n var nids = change_state(_validTargets, 'shimmer');\n if(_validTargets.length) {\n symbolPorts.enableHover(false);\n source.port.state = 'large';\n nids.push(diagram.portNodeKey.eval(source.port));\n symbolPorts.animateNodes(nids);\n }\n console.log('valid targets', nids);\n return _validTargets.length !== 0;\n },\n invalidSourceMessage: function(source) {\n return \"no valid matches for this port\";\n },\n changeDragTarget: function(source, target) {\n var nids, valid = target && is_valid(source.port, target.port), before;\n if(valid) {\n nids = change_state(_validTargets, 'small');\n target.port.state = 'large'; // it's one of the valid\n }\n else {\n nids = change_state(_validTargets, 'small');\n before = symbolPorts.animateNodes(nids);\n nids = change_state(_validTargets, 'shimmer');\n }\n symbolPorts.animateNodes(nids, before);\n return valid;\n },\n validTargetMessage: function(source, target) {\n return \"it's a match!\";\n },\n invalidTargetMessage: function(source, target) {\n return why_invalid(source.port, target.port);\n },\n finishDragEdge: function(source, target) {\n symbolPorts.enableHover(true);\n reset_ports(source);\n return Promise.resolve(is_valid(source.port, target.port));\n },\n cancelDragEdge: function(source) {\n symbolPorts.enableHover(true);\n reset_ports(source);\n return true;\n }\n };\n return _behavior;\n};\n","dc_graph.match_opposites = function(diagram, deleteProps, options) {\n options = Object.assign({\n multiplier: 2,\n ease: d3.ease('cubic')\n }, options);\n var _ports, _wports, _wedges, _validTargets;\n\n diagram.cascade(100, true, multiply_properties(function(e) {\n return options.ease(e.deleting || 0);\n }, deleteProps, property_interpolate));\n diagram.on('data.match-opposites', function(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _ports = ports;\n _wports = wports;\n _wedges = wedges;\n });\n function port_pos(p) {\n return { x: p.node.cola.x + p.pos.x, y: p.node.cola.y + p.pos.y };\n }\n function is_valid(sourcePort, targetPort) {\n return (_behavior.allowParallel() || !_wedges.some(function(e) {\n return sourcePort.edges.indexOf(e) >= 0 && targetPort.edges.indexOf(e) >= 0;\n })) && _behavior.isValid()(sourcePort, targetPort);\n }\n function reset_deletables(source, targets) {\n targets.forEach(function(p) {\n p.edges.forEach(function(e) {\n e.deleting = 0;\n });\n });\n if(source)\n source.port.edges.forEach(function(e) {\n e.deleting = 0;\n });\n }\n var _behavior = {\n isValid: property(function(sourcePort, targetPort) {\n // draw_graphs is already enforcing this, but this makes more sense and i use xor any chance i get\n return (diagram.portName.eval(sourcePort) === 'in') ^ (diagram.portName.eval(targetPort) === 'in');\n }),\n allowParallel: property(false),\n hoverPort: function(port) {\n // could be called by draw_graphs when node is hovered, isn't\n },\n startDragEdge: function(source) {\n _validTargets = _wports.filter(is_valid.bind(null, source.port));\n console.log('valid targets', _validTargets.map(diagram.portNodeKey.eval));\n return _validTargets.length !== 0;\n },\n dragCanvas: function(source, coords) {\n var closest = _validTargets.map(function(p) {\n var ppos = port_pos(p);\n return {\n distance: Math.hypot(coords[0] - ppos.x, coords[1] - ppos.y),\n port: p\n };\n }).sort(function(a, b) {\n return a.distance - b.distance;\n });\n var cpos = port_pos(closest[0].port), spos = port_pos(source.port);\n closest.forEach(function(c) {\n c.port.edges.forEach(function(e) {\n e.deleting = 1 - options.multiplier * c.distance / Math.hypot(cpos.x - spos.x, cpos.y - spos.y);\n });\n });\n source.port.edges.forEach(function(e) {\n e.deleting = 1 - options.multiplier * closest[0].distance / Math.hypot(cpos.x - spos.x, cpos.y - spos.y);\n });\n diagram.refresh();\n },\n changeDragTarget: function(source, target) {\n var valid = target && is_valid(source.port, target.port);\n if(valid) {\n target.port.edges.forEach(function(e) {\n e.deleting = 1;\n });\n source.port.edges.forEach(function(e) {\n e.deleting = 1;\n });\n reset_deletables(null, _validTargets.filter(function(p) {\n return p !== target.port;\n }));\n diagram.refresh();\n }\n return valid;\n },\n finishDragEdge: function(source, target) {\n if(is_valid(source.port, target.port)) {\n reset_deletables(null, _validTargets.filter(function(p) {\n return p !== target.port;\n }));\n if(options.delete_edges) {\n var edgeKeys = source.port.edges.map(diagram.edgeKey.eval).concat(target.port.edges.map(diagram.edgeKey.eval));\n return options.delete_edges.deleteSelection(edgeKeys);\n }\n return Promise.resolve(true);\n }\n reset_deletables(source, _validTargets);\n return Promise.resolve(false);\n },\n cancelDragEdge: function(source) {\n reset_deletables(source, _validTargets);\n return true;\n },\n detectReversedEdge: function(edge, sourcePort, targetPort) {\n return diagram.portName.eval(sourcePort) === 'in';\n }\n };\n return _behavior;\n};\n","dc_graph.wildcard_ports = function(options) {\n var diagram = options.diagram,\n get_type = options.get_type || function(p) { return p.orig.value.type; },\n set_type = options.set_type || function(p, src) { p.orig.value.type = src.orig.value.type; },\n get_name = options.get_name || function(p) { return p.orig.value.name; },\n is_wild = options.is_wild || function(p) { return p.orig.value.wild; },\n update_ports = options.update_ports || function() {},\n get_linked = options.get_linked || function() { return []; };\n function linked_ports(n, port) {\n if(!diagram)\n return [];\n var nid = diagram.nodeKey.eval(n);\n var name = get_name(port);\n var links = get_linked(n) || [];\n var found = links.find(function(set) {\n return set.includes(name);\n });\n if(!found) return [];\n return found.filter(function(link) { return link !== name; }).map(function(link) {\n return diagram.getPort(nid, null, link);\n });\n }\n function no_edges(ports) {\n return ports.every(function(lp) {\n return lp.edges.length === 0;\n });\n }\n return {\n isValid: function(p1, p2) {\n return get_type(p1) === null ^ get_type(p2) === null ||\n get_type(p1) !== null && get_type(p1) === get_type(p2);\n },\n whyInvalid: function(p1, p2) {\n return get_type(p1) === null && get_type(p2) === null && \"can't connect wildcard to wildcard\" ||\n get_type(p1) !== get_type(p2) && \"the types of ports must match\";\n },\n copyLinked: function(n, port) {\n linked_ports(n, port).forEach(function(lp) {\n set_type(lp, port);\n });\n },\n copyType: function(e, sport, tport) {\n if(get_type(sport) === null) {\n set_type(sport, tport);\n this.copyLinked(sport.node, sport);\n update_ports();\n } else if(get_type(tport) === null) {\n set_type(tport, sport);\n this.copyLinked(tport.node, tport);\n update_ports();\n }\n return Promise.resolve(e);\n },\n resetTypes: function(edges) {\n // backward compatibility: this used to take diagram as\n // first arg, which was wrong\n var dia = diagram;\n if(arguments.length === 2) {\n dia = arguments[0];\n edges = arguments[1];\n }\n edges.forEach(function(eid) {\n var e = dia.getWholeEdge(eid),\n spname = dia.edgeSourcePortName.eval(e),\n tpname = dia.edgeTargetPortName.eval(e);\n var update = false;\n var p = dia.getPort(dia.nodeKey.eval(e.source), null, spname);\n var linked = linked_ports(e.source, p);\n if(is_wild(p) && p.edges.length === 1 && no_edges(linked)) {\n set_type(p, null);\n linked.forEach(function(lp) {\n set_type(lp, null);\n update = true;\n });\n }\n p = dia.getPort(dia.nodeKey.eval(e.target), null, tpname);\n linked = linked_ports(e.target, p);\n if(is_wild(p) && p.edges.length === 1 && no_edges(linked)) {\n set_type(p, null);\n linked.forEach(function(lp) {\n set_type(lp, null);\n update = true;\n });\n }\n if(update)\n update_ports();\n });\n return Promise.resolve(edges);\n }\n };\n};\n","dc_graph.symbol_port_style = function() {\n var _style = {};\n var _nodePorts, _node;\n var _drawConduct;\n\n _style.symbolScale = property(null);\n _style.colorScale = property(d3.scale.ordinal().range(\n // colorbrewer light qualitative scale\n d3.shuffle(['#8dd3c7','#ffffb3','#bebada','#fb8072','#80b1d3','#fdb462',\n '#b3de69','#fccde5','#d9d9d9','#bc80bd','#ccebc5','#ffed6f'])));\n\n function name_or_edge(p) {\n return p.named ? p.name : _style.parent().edgeKey.eval(p.edges[0]);\n }\n _style.symbol = _style.portSymbol = property(name_or_edge, false); // non standard properties taking \"outer datum\"\n _style.color = _style.portColor = property(name_or_edge, false);\n _style.outline = property(dc_graph.symbol_port_style.outline.circle());\n _style.content = property(dc_graph.symbol_port_style.content.d3symbol());\n _style.smallRadius = _style.portRadius = property(7);\n _style.mediumRadius = _style.portHoverNodeRadius = property(10);\n _style.largeRadius = _style.portHoverPortRadius = property(14);\n _style.displacement = _style.portDisplacement = property(2);\n _style.outlineFillScale = _style.portBackgroundScale = property(null);\n _style.outlineFill = _style.portBackgroundFill = property(null);\n _style.outlineStroke = _style.portBackgroundStroke = property(null);\n _style.outlineStrokeWidth = _style.portBackgroundStrokeWidth = property(null);\n _style.padding = _style.portPadding = property(2);\n _style.label = _style.portLabel = _style.portText = property(function(p) {\n return p.name;\n });\n _style.portLabelPadding = property({x: 5, y: 5});\n _style.cascade = cascade(_style);\n\n _style.portPosition = function(p) {\n var l = Math.hypot(p.pos.x, p.pos.y),\n u = {x: p.pos.x / l, y: p.pos.y / l},\n disp = _style.displacement.eval(p);\n return {x: p.pos.x + disp * u.x, y: p.pos.y + disp * u.y};\n };\n\n function symbol_fill(p) {\n var symcolor = _style.color.eval(p);\n return symcolor ?\n (_style.colorScale() ? _style.colorScale()(symcolor) : symcolor) :\n 'none';\n }\n function port_transform(p) {\n var pos = _style.portPosition(p);\n return 'translate(' + pos.x + ',' + pos.y + ')';\n }\n function port_symbol(p) {\n if(!_style.symbolScale())\n _style.symbolScale(d3.scale.ordinal().range(d3.shuffle(_style.content().enum())));\n var symname = _style.symbol.eval(p);\n return symname && (_style.symbolScale() ? _style.symbolScale()(symname) : symname);\n }\n function is_left(p) {\n return p.vec[0] < 0;\n }\n function hover_radius(p) {\n switch(p.state) {\n case 'large':\n return _style.largeRadius.eval(p);\n case 'medium':\n return _style.mediumRadius.eval(p);\n case 'small':\n default:\n return _style.smallRadius.eval(p);\n }\n }\n function shimmer_radius(p) {\n return /-medium$/.test(p.state) ?\n _style.mediumRadius.eval(p) :\n _style.largeRadius.eval(p);\n }\n // fall back to node aesthetics if not defined for port\n function outline_fill(p) {\n var scale, fill;\n if(_style.outlineFill.eval(p)) {\n scale = _style.outlineFillScale() || identity;\n fill = _style.outlineFill.eval(p);\n }\n else {\n scale = _style.parent().nodeFillScale() || identity;\n fill = _style.parent().nodeFill.eval(p.node);\n }\n return fill === 'none' ? 'none' : scale(fill);\n }\n function outline_stroke(p) {\n return _style.outlineStroke.eval(p) || _style.parent().nodeStroke.eval(p.node);\n }\n function outline_stroke_width(p) {\n var sw = _style.outlineStrokeWidth.eval(p);\n return typeof sw === 'number' ? sw : _style.parent().nodeStrokeWidth.eval(p.node);\n }\n _style.animateNodes = function(nids, before) {\n var setn = d3.set(nids);\n var node = _node\n .filter(function(n) {\n return setn.has(_style.parent().nodeKey.eval(n));\n });\n var symbol = _style.parent().selectNodePortsOfStyle(node, _style.parent().portStyle.nameOf(this));\n var shimmer = symbol.filter(function(p) { return /^shimmer/.test(p.state); }),\n nonshimmer = symbol.filter(function(p) { return !/^shimmer/.test(p.state); });\n if(shimmer.size()) {\n if(before)\n before.each('end', repeat);\n else repeat();\n }\n\n function repeat() {\n var shimin = shimmer.transition()\n .duration(1000)\n .ease(\"bounce\");\n shimin.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return shimmer_radius(p) + _style.portPadding.eval(p);\n }));\n shimin.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, shimmer_radius));\n var shimout = shimin.transition()\n .duration(1000)\n .ease('sin');\n shimout.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n shimout.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n shimout.each(\"end\", repeat);\n }\n\n var trans = nonshimmer.transition()\n .duration(250);\n trans.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return hover_radius(p) + _style.portPadding.eval(p);\n }));\n trans.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, hover_radius));\n\n function text_showing(p) {\n return p.state === 'large' || p.state === 'medium';\n }\n trans.selectAll('text.port-label')\n .attr({\n opacity: function(p) {\n return text_showing(p) ? 1 : 0;\n },\n 'pointer-events': function(p) {\n return text_showing(p) ? 'auto' : 'none';\n }\n });\n trans.selectAll('rect.port-label-background')\n .attr('opacity', function(p) {\n return text_showing(p) ? 1 : 0;\n });\n // bring all nodes which have labels showing to the front\n _node.filter(function(n) {\n var ports = _nodePorts[_style.parent().nodeKey.eval(n)];\n return ports && ports.some(text_showing);\n }).each(function() {\n this.parentNode.appendChild(this);\n });\n // bring all active ports to the front\n symbol.filter(function(p) {\n return p.state !== 'small';\n }).each(function() {\n this.parentNode.appendChild(this);\n });\n return trans;\n };\n _style.eventPort = function() {\n var parent = d3.select(d3.event.target.parentNode);\n if(d3.event.target.parentNode.tagName === 'g' && parent.classed('port'))\n return parent.datum();\n return null;\n };\n _style.drawPorts = function(ports, nodePorts, node) {\n _nodePorts = nodePorts; _node = node;\n var port = ports.data(function(n) {\n return nodePorts[_style.parent().nodeKey.eval(n)] || [];\n }, name_or_edge);\n port.exit().remove();\n var portEnter = port.enter().append('g')\n .attr({\n class: 'port',\n transform: port_transform\n });\n port.transition('port-position')\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .attr({\n transform: port_transform\n });\n\n var outline = port.selectAll('.port-outline').data(function(p) {\n return outline_fill(p) !== 'none' ? [p] : [];\n });\n outline.exit().remove();\n var outlineEnter = outline.enter().append(_style.outline().tag())\n .attr({\n class: 'port-outline',\n fill: outline_fill,\n 'stroke-width': outline_stroke_width,\n stroke: outline_stroke\n });\n if(_style.outline().init)\n outlineEnter.call(_style.outline().init);\n outlineEnter\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n // only position and size are animated (?) - anyway these are not on the node\n // and they are typically used to indicate selection which should be fast\n outline\n .attr({\n fill: outline_fill,\n 'stroke-width': outline_stroke_width,\n stroke: outline_stroke\n });\n outline.transition()\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n\n var symbolEnter = portEnter.append(_style.content().tag())\n .attr('class', 'port-symbol')\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n\n var symbol = port.select('.port-symbol');\n symbol.attr('fill', symbol_fill);\n symbol.transition()\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n\n var label = port.selectAll('text.port-label').data(function(p) {\n return _style.portLabel.eval(p) ? [p] : [];\n });\n label.exit().remove();\n var labelEnter = label.enter();\n labelEnter.append('rect')\n .attr({\n class: 'port-label-background',\n 'pointer-events': 'none'\n });\n labelEnter.append('text')\n .attr({\n class: 'port-label',\n 'dominant-baseline': 'middle',\n 'pointer-events': 'none',\n cursor: 'default',\n opacity: 0\n });\n label\n .each(function(p) {\n p.offset = (is_left(p) ? -1 : 1) * (_style.largeRadius.eval(p) + _style.portPadding.eval(p));\n })\n .attr({\n 'text-anchor': function(p) {\n return is_left(p) ? 'end' : 'start';\n },\n transform: function(p) {\n return 'translate(' + p.offset + ',0)';\n }\n })\n .text(_style.portLabel.eval)\n .each(function(p) {\n p.bbox = getBBoxNoThrow(this);\n });\n port.selectAll('rect.port-label-background')\n .attr({\n x: function(p) {\n return (p.offset < 0 ? p.offset - p.bbox.width : p.offset) - _style.portLabelPadding.eval(p).x;\n },\n y: function(p) {\n return -p.bbox.height/2 - _style.portLabelPadding.eval(p).y;\n },\n width: function(p) {\n return p.bbox.width + 2*_style.portLabelPadding.eval(p).x;\n },\n height: function(p) {\n return p.bbox.height + 2*_style.portLabelPadding.eval(p).y;\n },\n fill: 'white',\n opacity: 0\n });\n return _style;\n };\n\n _style.enableHover = function(whether) {\n if(!_drawConduct) {\n if(_style.parent()) {\n var draw = _style.parent().child('draw-graphs');\n if(draw)\n _drawConduct = draw.conduct();\n }\n }\n var namespace = 'grow-ports-' + _style.parent().portStyle.nameOf(this);\n if(whether) {\n _node.on('mouseover.' + namespace, function(n) {\n var nid = _style.parent().nodeKey.eval(n);\n var activePort = _style.eventPort();\n if(_nodePorts[nid])\n _nodePorts[nid].forEach(function(p) {\n p.state = p === activePort ? 'large' : activePort ? 'small' : 'medium';\n });\n var nids = _drawConduct && _drawConduct.hoverPort(activePort) || [];\n nids.push(nid);\n _style.animateNodes(nids);\n });\n _node.on('mouseout.' + namespace, function(n) {\n var nid = _style.parent().nodeKey.eval(n);\n if(_nodePorts[nid])\n _nodePorts[nid].forEach(function(p) {\n p.state = 'small';\n });\n var nids = _drawConduct && _drawConduct.hoverPort(null) || [];\n nids.push(nid);\n _style.animateNodes(nids);\n });\n } else {\n _node.on('mouseover.' + namespace, null);\n _node.on('mouseout.' + namespace, null);\n }\n return _style;\n };\n\n _style.parent = property(null);\n return _style;\n};\n\ndc_graph.symbol_port_style.outline = {};\ndc_graph.symbol_port_style.outline.circle = function() {\n return {\n tag: function() {\n return 'circle';\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr('r', function(p) { return rf(p); });\n };\n }\n };\n};\ndc_graph.symbol_port_style.outline.square = function() {\n return {\n tag: function() {\n return 'rect';\n },\n init: function(outlines) {\n // crispEdges can make outline off-center from symbols\n // outlines.attr('shape-rendering', 'crispEdges');\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr({\n x: function(p) { return -rf(p); },\n y: function(p) { return -rf(p); },\n width: function(p) { return 2*rf(p); },\n height: function(p) { return 2*rf(p); }\n });\n };\n }\n };\n};\ndc_graph.symbol_port_style.outline.arrow = function() {\n // offset needed for body in order to keep centroid at 0,0\n var left_portion = 3/4 - Math.PI/8;\n var _outline = {\n tag: function() {\n return 'path';\n },\n init: function(outlines) {\n //outlines.attr('shape-rendering', 'crispEdges');\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr('d', function(p) {\n var r = rf(p);\n if(!_outline.outie() || _outline.outie()(p.orig))\n return 'M' + -left_portion*r + ',' + -r + ' h' + r +\n ' l' + r + ',' + r + ' l' + -r + ',' + r +\n ' h' + -r +\n ' a' + r + ',' + r + ' 0 1,1 0,' + -2*r;\n else\n return 'M' + -(2-left_portion)*r + ',' + -r + ' h' + 2*r +\n ' a' + r + ',' + r + ' 0 1,1 0,' + 2*r +\n ' h' + -2*r +\n ' l' + r + ',' + -r + ' l' + -r + ',' + -r;\n });\n };\n },\n outie: property(null)\n };\n return _outline;\n};\n\ndc_graph.symbol_port_style.content = {};\ndc_graph.symbol_port_style.content.d3symbol = function() {\n var _symbol = {\n tag: function() {\n return 'path';\n },\n enum: function() {\n return d3.svg.symbolTypes;\n },\n draw: function(symf, rf) {\n return function(symbols) {\n symbols.attr('d', function(p) {\n var sym = symf(p), r = rf(p);\n return d3.svg.symbol()\n .type(sym)\n .size(r*r)\n ();\n });\n symbols.attr('transform', function(p) {\n switch(symf(p)) {\n case 'triangle-up':\n return 'translate(0, -1)';\n case 'triangle-down':\n return 'translate(0, 1)';\n default: return null;\n }\n });\n };\n }\n };\n return _symbol;\n};\ndc_graph.symbol_port_style.content.letter = function() {\n var _symbol = {\n tag: function() {\n return 'text';\n },\n enum: function() {\n return d3.range(65, 91).map(String.fromCharCode);\n },\n draw: function(symf, rf) {\n return function(symbols) {\n symbols.text(symf)\n .attr({\n 'dominant-baseline': 'middle',\n 'text-anchor': 'middle'\n });\n symbols.each(function(p) {\n if(!p.symbol_size)\n p.symbol_size = getBBoxNoThrow(this);\n });\n symbols.attr('transform', function(p) {\n return 'scale(' + (2*rf(p)/p.symbol_size.height) +\n ') translate(' + [0,2].join(',') + ')';\n });\n };\n }\n };\n return _symbol;\n};\n","function process_dot(callback, error, text) {\n if(error) {\n callback(error, null);\n return;\n }\n var nodes, edges;\n if(graphlibDot.parse) { // graphlib-dot 1.1.0 (where did i get it from?)\n var digraph = graphlibDot.parse(text);\n\n var nodeNames = digraph.nodes();\n 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 edges = [];\n edgeNames.forEach(function(e) {\n var edge = digraph._edges[e];\n edges.push(Object.assign({}, edge.value, {\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 } else { // graphlib-dot 0.6\n digraph = graphlibDot.read(text);\n\n nodeNames = digraph.nodes();\n 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 edges = [];\n digraph.edges().forEach(function(e) {\n edges.push(Object.assign({}, e.value, {\n source: digraph._nodes[e.v].id,\n target: digraph._nodes[e.w].id,\n sourcename: e.v,\n targetname: e.w\n }));\n });\n }\n var graph = {nodes: nodes, links: edges};\n callback(null, graph);\n}\n\nfunction process_dsv(callback, error, data) {\n if(error) {\n callback(error, null);\n return;\n }\n var keys = Object.keys(data[0]);\n var source = keys[0], target = keys[1];\n var nodes = d3.set(data.map(function(r) { return r[source]; }));\n data.forEach(function(r) {\n nodes.add(r[target]);\n });\n nodes = nodes.values().map(function(k) { return {name: k}; });\n callback(null, {\n nodes: nodes,\n links: data.map(function(r, i) {\n return {\n key: i,\n sourcename: r[source],\n targetname: r[target]\n };\n })\n });\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, process_dot.bind(null, callback));\n else if(/\\.psv$/.test(ignore_query(file1)))\n d3.dsv('|', 'text/plain')(file1, process_dsv.bind(null, callback));\n else if(/\\.csv$/.test(ignore_query(file1)))\n d3.csv(file1, process_dsv.bind(null, callback));\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","// collapse edges between same source and target\ndc_graph.deparallelize = function(group, sourceTag, targetTag) {\n return {\n all: function() {\n var ST = {};\n group.all().forEach(function(kv) {\n var source = kv.value[sourceTag],\n target = kv.value[targetTag];\n var dir = source < target;\n var min = dir ? source : target, max = dir ? target : source;\n ST[min] = ST[min] || {};\n var entry = ST[min][max] = ST[min][max] || {in: 0, out: 0, original: kv};\n if(dir)\n ++entry.in;\n else\n ++entry.out;\n });\n var ret = [];\n Object.keys(ST).forEach(function(source) {\n Object.keys(ST[source]).forEach(function(target) {\n var entry = ST[source][target];\n entry[sourceTag] = source;\n entry[targetTag] = target;\n ret.push({key: entry.original.key, value: entry});\n });\n });\n return ret;\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 pathStrength: 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).append('svg');\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(diagram, paths) {\n if(paths.length === 0) return;\n var xpadding = 30;\n var space = 30;\n var radius = 8;\n // set the height of SVG accordingly\n root.attr('height', 20*(paths.length+1))\n .attr('width', xpadding+(space+2*radius)*(paths.length/2+1)+20);\n\n root.selectAll('.path-selector').remove();\n\n var pathlist = root.selectAll('g.path-selector').data(paths);\n pathlist.enter()\n .append('g')\n .attr('class', 'path-selector')\n .attr(\"transform\", function(path, i) { return \"translate(0, \" + i*20 + \")\"; })\n .each(function(path_data, i) {\n var nodes = path_data.element_list.filter(function(d) { return d.element_type === 'node'; });\n // line\n var line = d3.select(this).append('line');\n line.attr('x1', xpadding+space)\n .attr('y1', radius+1)\n .attr('x2', xpadding+space*nodes.length)\n .attr('y2', radius+1)\n .attr('opacity', 0.4)\n .attr('stroke-width', 5)\n .attr('stroke', '#bdbdbd');\n\n // dots\n var path = d3.select(this).selectAll('circle').data(nodes);\n path.enter()\n .append('circle')\n .attr('cx', function(d, i) { return xpadding+space*(i+1); })\n .attr('cy', radius+1)\n .attr('r', radius)\n .attr('opacity', 0.4)\n .attr('fill', function(d) {\n // TODO path_selector shouldn't know the data structure of orignal node objects\n var regeneratedNode = {key:d.property_map.ecomp_uid, value:d.property_map};\n return diagram.nodeStroke()(regeneratedNode);\n });\n\n // label\n var text = d3.select(this).append('text');\n text.text('Path '+i)\n .attr('class', 'path_label')\n .attr('x', 0)\n .attr('y', radius*1.7)\n .on('mouseover', function() {\n highlight_paths_group.hover_changed([path_data]);\n })\n .on('mouseout', function() {\n highlight_paths_group.hover_changed(null);\n })\n .on('click', function() {\n highlight_paths_group.select_changed(toggle_paths(selected, [path_data]));\n });\n });\n pathlist.exit().transition(1000).attr('opacity', 0).remove();\n }\n\n function draw_hovered() {\n var is_hovered = contains_path(hovered);\n root.selectAll('g.path-selector')\n .each(function(d, i) {\n var textColor = is_hovered(d) ? '#e41a1c' : 'black';\n var lineColor = is_hovered(d) ? 'black' : '#bdbdbd';\n var opacity = is_hovered(d) ? '1' : '0.4';\n d3.select(this).select('.path_label').attr('fill', textColor);\n d3.select(this).selectAll('line')\n .attr('stroke', lineColor)\n .attr('opacity', opacity);\n d3.select(this).selectAll('circle').attr('opacity', opacity);\n });\n }\n\n function draw_selected() {\n var is_selected = contains_path(selected);\n root.selectAll('g.path-selector')\n .each(function(d, i) {\n var textWeight = is_selected(d) ? 'bold' : 'normal';\n var lineColor = is_selected(d) ? 'black' : '#bdbdbd';\n var opacity = is_selected(d) ? '1' : '0.4';\n d3.select(this).select('.path_label')\n .attr('font-weight', textWeight);\n d3.select(this).selectAll('line')\n .attr('stroke', lineColor)\n .attr('opacity', opacity);\n d3.select(this).selectAll('circle').attr('opacity', opacity);\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(diagram, 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 0) {\n var choice = Math.random();\n var n1, n2;\n if(!_nodes.length || choice < options.newComponentProb)\n n1 = new_node();\n else\n n1 = random_node();\n if(choice < options.newNodeProb)\n n2 = new_node();\n else\n n2 = random_node();\n if(n1 && n2) {\n var edge = {};\n edge[options.edgeKey] = options.edgeKeyGen(_edges.length);\n edge[options.sourceKey] = n1[options.nodeKey];\n edge[options.targetKey] = n2[options.nodeKey];\n edge[options.dashTag] = Math.floor(Math.random()*options.ndashes);\n if(options.log)\n console.log(n1[options.nodeKey] + ' -> ' + n2[options.nodeKey]);\n _edges.push(edge);\n }\n }\n },\n remove: function(N) {\n while(N-- > 0) {\n var choice = Math.random();\n if(choice < options.removeEdgeProb)\n _edges.splice(Math.floor(Math.random()*_edges.length), 1);\n else {\n var n = _nodes[Math.floor(Math.random()*_nodes.length)];\n var eis = [];\n _edges.forEach(function(e, ei) {\n if(e[options.sourceKey] === n[options.nodeKey] ||\n e[options.targetKey] === n[options.nodeKey])\n eis.push(ei);\n });\n eis.reverse().forEach(function(ei) {\n _edges.splice(ei, 1);\n });\n }\n }\n }\n };\n};\n","var dont_use_key = deprecation_warning('dc_graph.line_breaks now takes a string - d.key behavior is deprecated and will be removed in a later version');\n\ndc_graph.line_breaks = function(charexp, max_line_length) {\n var regexp = new RegExp(charexp, 'g');\n return function(s) {\n if(typeof s === 'object') { // backward compatibility\n dont_use_key();\n s = s.key;\n }\n var result;\n var line = '', lines = [], part, i = 0;\n do {\n result = regexp.exec(s);\n if(result)\n part = s.slice(i, regexp.lastIndex);\n else\n part = s.slice(i);\n if(line.length + part.length > 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/node_contents.js","src/diagram.js","src/engine.js","src/webworker_layout.js","src/graphviz_attrs.js","src/cola_layout.js","src/dagre_layout.js","src/tree_layout.js","src/graphviz_layout.js","src/d3_force_layout.js","src/d3v4_force_layout.js","src/flexbox_layout.js","src/manual_layout.js","src/place_ports.js","src/troubleshoot.js","src/validate.js","src/legend.js","src/constraint_pattern.js","src/tree_positions.js","src/tree_constraints.js","src/behavior.js","src/tip.js","src/dropdown.js","src/keyboard.js","src/edit_text.js","src/brush.js","src/select_things.js","src/select_nodes.js","src/select_edges.js","src/select_ports.js","src/move_nodes.js","src/fix_nodes.js","src/filter_selection.js","src/delete_things.js","src/delete_nodes.js","src/label_things.js","src/label_nodes.js","src/label_edges.js","src/highlight_things_group.js","src/highlight_things.js","src/highlight_neighbors_group.js","src/highlight_neighbors.js","src/highlight_radius.js","src/highlight_paths_group.js","src/highlight_paths.js","src/draw_spline_paths.js","src/expand_collapse.js","src/shown_hidden.js","src/expanded_hidden.js","src/draw_graphs.js","src/match_ports.js","src/match_opposites.js","src/wildcard_ports.js","src/symbol_port_style.js","src/load_graph.js","src/munge_graph.js","src/flat_group.js","src/convert.js","src/transform.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 diagram\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 diagram.\n * @namespace dc_graph\n * @version 0.6.1\n * @example\n * // Example chaining\n * diagram.width(600)\n * .height(400)\n * .nodeDimension(nodeDim)\n * .nodeGroup(nodeGroup);\n */\n\nvar dc_graph = {\n version: '0.6.1',\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 named_children() {\n var _children = {};\n var f = function(id, object) {\n if(arguments.length === 1)\n return _children[id];\n // do not notify unnecessarily\n if(_children[id] === object)\n return this;\n if(_children[id])\n _children[id].parent(null);\n _children[id] = object;\n if(object)\n object.parent(this);\n return this;\n };\n f.enum = function() {\n return Object.keys(_children);\n };\n f.nameOf = function(o) {\n var found = Object.entries(_children).find(function(kv) {\n return kv[1] == o;\n });\n return found ? found[0] : null;\n };\n return f;\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\nfunction deprecation_warning(message) {\n var said = false;\n return function() {\n if(said)\n return;\n console.warn(message);\n };\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// polyfill Object.assign for IE\n// it's just too useful to do without\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nfunction getBBoxNoThrow(elem) {\n // firefox seems to have issues with some of my texts\n // just catch for now\n try {\n return elem.getBBox();\n } catch(xep) {\n return {x: 0, y: 0, width:0, height: 0};\n }\n}\n","function property_if(pred, curr) {\n return function(o, last) {\n return pred(o) ? curr(o) : last();\n };\n}\n\nfunction property_interpolate(value, curr) {\n return function(o, last) {\n return d3.interpolate(last(o), curr(o))(value(o));\n };\n}\n\nfunction multiply_properties(pred, props, blend) {\n var props2 = {};\n for(var p in props)\n props2[p] = blend(pred, param(props[p]));\n return props2;\n}\n\nfunction conditional_properties(pred, props) {\n return multiply_properties(pred, props, property_if);\n}\n\nfunction node_edge_conditions(npred, epred, props) {\n var nprops = {}, eprops = {}, badprops = [];\n for(var p in props) {\n if(/^node/.test(p))\n nprops[p] = props[p];\n else if(/^edge/.test(p))\n eprops[p] = props[p];\n else badprops.push(p);\n }\n if(badprops.length)\n console.error('only know how to deal with properties that start with \"node\" or \"edge\"', badprops);\n var props2 = npred ? conditional_properties(npred, nprops) : {};\n if(epred)\n Object.assign(props2, conditional_properties(epred, eprops));\n return props2;\n}\n\nfunction cascade(parent) {\n return function(level, add, props) {\n for(var p in props) {\n if(!parent[p])\n throw new Error('unknown attribute ' + p);\n parent[p].cascade(level, add ? props[p] : null);\n }\n return parent;\n };\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\n// outputs the array with adjacent identical lines collapsed to one\nfunction uniq(a) {\n var ret = [];\n a.forEach(function(x, i) {\n if(i === 0 || x !== a[i-1])\n ret.push(x);\n });\n return ret;\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\nif (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n value: function(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n\n // 5. Let k be 0.\n var k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, � kValue, k, O �)).\n // d. If testResult is true, return kValue.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return kValue;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return undefined.\n return undefined;\n }\n });\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\ndc_graph.event_coords = function(diagram) {\n var bound = diagram.root().node().getBoundingClientRect();\n return diagram.invertCoord([d3.event.clientX - bound.left,\n d3.event.clientY - bound.top]);\n};\n\nfunction promise_identity(x) {\n return Promise.resolve(x);\n}\n\n// http://stackoverflow.com/questions/7044944/jquery-javascript-to-detect-os-without-a-plugin\nvar is_a_mac = navigator.platform.toUpperCase().indexOf('MAC')!==-1;\n\n// https://stackoverflow.com/questions/16863917/check-if-class-exists-somewhere-in-parent-vanilla-js\nfunction ancestor_has_class(element, classname) {\n if(d3.select(element).classed(classname))\n return true;\n return element.parentElement && ancestor_has_class(element.parentElement, classname);\n}\n\nif (typeof SVGElement.prototype.contains == 'undefined') {\n SVGElement.prototype.contains = HTMLDivElement.prototype.contains;\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\n// basically, see if it's any simpler if we start from scratch\n// (well, of course it's simpler because we have less callbacks)\n// same caveats as above\ndc_graph.undirected_dfs = function(callbacks) { // {[comp, node], nodeid, sourceid, targetid}\n return function(nodes, edges) {\n var adjacencies = edges.reduce(function(m, e) {\n var tail = callbacks.sourceid(e),\n head = callbacks.targetid(e);\n if(!m[tail]) m[tail] = [];\n if(!m[head]) m[head] = [];\n m[tail].push(head);\n m[head].push(tail);\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 var found = {};\n function recurse(n) {\n var nid = callbacks.nodeid(n);\n callbacks.node(compid, n);\n found[nid] = true;\n if(adjacencies[nid])\n adjacencies[nid].forEach(function(adj) {\n if(!found[adj])\n recurse(nmap[adj]);\n });\n }\n var compid = 0;\n nodes.forEach(function(n) {\n if(!found[callbacks.nodeid(n)]) {\n callbacks.comp && callbacks.comp(compid);\n recurse(n);\n ++compid;\n }\n });\n };\n};\n","// create or re-use objects in a map, delete the ones that were not reused\nfunction regenerate_objects(preserved, list, need, 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 if(need)\n need.forEach(function(k) {\n if(!preserved[k]) { // hasn't been created, needs to be\n create(k, preserved[k] = {}, null);\n assign(preserved[k], null);\n }\n if(!keep[k]) { // wasn't in list, should be\n wlist.push(preserved[k]);\n keep[k] = true;\n }\n });\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\n// as many as we can get from\n// http://www.graphviz.org/doc/info/shapes.html\ndc_graph.shape_presets = {\n egg: {\n // not really: an ovoid should be two half-ellipses stuck together\n // https://en.wikipedia.org/wiki/Oval\n generator: 'polygon',\n preset: function() {\n return {sides: 100, distortion: -0.25};\n }\n },\n triangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 3};\n }\n },\n rectangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4};\n }\n },\n diamond: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, rotation: 45};\n }\n },\n trapezium: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, distortion: -0.5};\n }\n },\n parallelogram: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, skew: 0.5};\n }\n },\n pentagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 5};\n }\n },\n hexagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 6};\n }\n },\n septagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 7};\n }\n },\n octagon: {\n generator: 'polygon',\n preset: function() {\n return {sides: 8};\n }\n },\n invtriangle: {\n generator: 'polygon',\n preset: function() {\n return {sides: 3, rotation: 180};\n }\n },\n invtrapezium: {\n generator: 'polygon',\n preset: function() {\n return {sides: 4, distortion: 0.5};\n }\n },\n square: {\n generator: 'polygon',\n preset: function() {\n return {\n sides: 4,\n regular: true\n };\n }\n },\n plain: {\n generator: 'rounded-rect',\n preset: function() {\n return {\n noshape: true\n };\n }\n }\n};\n\ndc_graph.shape_presets.box = dc_graph.shape_presets.rect = dc_graph.shape_presets.rectangle;\n\ndc_graph.available_shapes = function() {\n var shapes = Object.keys(dc_graph.shape_presets);\n return shapes.slice(0, shapes.length-1); // not including polygon\n};\n\nvar default_shape = {shape: 'ellipse'};\n\nfunction elaborate_shape(diagram, def) {\n if(typeof def === 'string') def = {shape: def};\n var shape = def.shape, def2 = Object.assign({}, def);\n delete def2.shape;\n if(shape === 'random') {\n var available = dc_graph.available_shapes(); // could include diagram.shape !== ellipse, polygon\n shape = available[Math.floor(Math.random()*available.length)];\n }\n else if(diagram.shape.enum().indexOf(shape) !== -1)\n return diagram.shape(shape).elaborate({shape: shape}, def2);\n if(!dc_graph.shape_presets[shape]) {\n console.warn('unknown shape ', shape);\n return default_shape;\n }\n var preset = dc_graph.shape_presets[shape].preset(def2);\n preset.shape = dc_graph.shape_presets[shape].generator;\n return diagram.shape(preset.shape).elaborate(preset, def2);\n}\n\nfunction infer_shape(diagram) {\n return function(n) {\n var def = diagram.nodeShape.eval(n) || default_shape;\n n.dcg_shape = elaborate_shape(diagram, def);\n n.dcg_shape.abstract = def;\n };\n}\n\nfunction shape_changed(diagram) {\n return function(n) {\n var def = diagram.nodeShape.eval(n) || default_shape;\n var old = n.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 node_label_padding(diagram, n) {\n var nlp = diagram.nodeLabelPadding.eval(n);\n if(typeof nlp === 'number' || typeof nlp === 'string')\n return {x: +nlp, y: +nlp};\n else return nlp;\n}\n\nfunction fit_shape(shape, diagram) {\n return function(content) {\n content.each(function(n) {\n var bbox = null;\n if((!shape.useTextSize || shape.useTextSize(n.dcg_shape)) && diagram.nodeFitLabel.eval(n)) {\n bbox = getBBoxNoThrow(this);\n bbox = {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n var padding;\n var content = diagram.nodeContent.eval(n);\n if(content && diagram.content(content).padding)\n padding = diagram.content(content).padding(n);\n else {\n var padding2 = node_label_padding(diagram, n);\n padding = {\n x: padding2.x*2,\n y: padding2.y*2\n };\n }\n bbox.width += padding.x;\n bbox.height += padding.y;\n n.bbox = bbox;\n }\n var r = 0, radii;\n if(!shape.useRadius || shape.useRadius(n.dcg_shape))\n r = diagram.nodeRadius.eval(n);\n if(bbox && bbox.width && bbox.height || shape.useTextSize && !shape.useTextSize(n.dcg_shape))\n radii = shape.calc_radii(n, r, bbox);\n else\n radii = {rx: r, ry: r};\n n.dcg_rx = radii.rx;\n n.dcg_ry = radii.ry;\n\n var w = radii.rx*2, h = radii.ry*2;\n // fixme: this is only consistent if regular || !squeeze\n // but we'd need to calculate polygon first in order to find out\n // (not a bad idea, just no time right now)\n if(w= 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(diagram, e, 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 sp = e.sourcePort.pos;\n tp = e.targetPort.pos;\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 diagram.shape(node.dcg_shape.shape).intersect_vec(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(e.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(e.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\nfunction is_one_segment(path) {\n return path.bezDegree === 1 && path.points.length === 2 ||\n path.bezDegree === 3 && path.points.length === 4;\n}\n\nfunction as_bezier3(path) {\n var p = path.points;\n if(path.bezDegree === 3) return p;\n else if(path.bezDegree === 1)\n return [\n {\n x: p[0].x,\n y: p[0].y\n },\n {\n x: p[0].x + (p[1].x - p[0].x)/3,\n y: p[0].y + (p[1].y - p[0].y)/3\n },\n {\n x: p[0].x + 2*(p[1].x - p[0].x)/3,\n y: p[0].y + 2*(p[1].y - p[0].y)/3\n },\n {\n x: p[1].x,\n y: p[1].y\n }\n ];\n else throw new Error('unknown bezDegree ' + path.bezDegree);\n}\n\n// from https://www.jasondavies.com/animated-bezier/\nfunction interpolate(d, p) {\n var r = [];\n for (var i=1; i 1) {\n var parts = split_bezier(p, 1/n);\n ret.push(parts[0][0], parts[0][1], parts[0][2]);\n p = parts[1];\n --n;\n }\n ret.push.apply(ret, p);\n return ret;\n}\n\ndc_graph.no_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n useTextSize: function() { return false; },\n useRadius: function() { return false; },\n usePaddingAndStroke: function() { return false; },\n intersect_vec: function(n, deltaX, deltaY) {\n return {x: 0, y: 0};\n },\n calc_radii: function(n, ry, bbox) {\n return {rx: 0, ry: 0};\n },\n create: function(nodeEnter) {\n },\n replace: function(nodeChanged) {\n },\n update: function(node) {\n }\n };\n return _shape;\n};\n\ndc_graph.ellipse_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n return point_on_ellipse(n.dcg_rx, n.dcg_ry, deltaX, deltaY);\n },\n calc_radii: function(n, ry, bbox) {\n // make sure we can fit height in r\n ry = Math.max(ry, bbox.height/2 + 5);\n var rx = bbox.width/2;\n\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/ry;\n rx = rx/Math.sqrt(1 - y_over_B*y_over_B);\n rx = Math.max(rx, ry);\n\n return {rx: rx, ry: ry};\n },\n create: function(nodeEnter) {\n nodeEnter.insert('ellipse', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('ellipse.node-shape')\n .attr(ellipse_attrs(_shape.parent()));\n }\n };\n return _shape;\n};\n\ndc_graph.polygon_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n return point_on_polygon(n.dcg_points, 0, 0, deltaX, deltaY);\n },\n calc_radii: function(n, ry, bbox) {\n // make sure we can fit height in r\n ry = Math.max(ry, bbox.height/2 + 5);\n var rx = bbox.width/2;\n\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 rx = rx*Math.sqrt(2)/Math.cos(Math.PI/(n.dcg_shape.sides||4));\n\n return {rx: rx, ry: ry};\n },\n create: function(nodeEnter) {\n nodeEnter.insert('path', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('path.node-shape')\n .attr(polygon_attrs(_shape.parent()));\n }\n };\n return _shape;\n};\n\ndc_graph.rounded_rectangle_shape = function() {\n var _shape = {\n parent: property(null),\n elaborate: function(preset, def) {\n preset = Object.assign({rx: 10, ry: 10}, preset);\n return Object.assign(preset, def);\n },\n intersect_vec: function(n, deltaX, deltaY) {\n var points = [\n {x: n.dcg_rx, y: n.dcg_ry},\n {x: n.dcg_rx, y: -n.dcg_ry},\n {x: -n.dcg_rx, y: -n.dcg_ry},\n {x: -n.dcg_rx, y: n.dcg_ry}\n ];\n return point_on_polygon(points, 0, 0, deltaX, deltaY); // not rounded\n },\n useRadius: function(shape) {\n return !shape.noshape;\n },\n calc_radii: function(n, ry, bbox) {\n var fity = bbox.height/2;\n // fixme: fudge to make sure text is not too tall for node\n if(!n.dcg_shape.noshape)\n fity += 5;\n return {\n rx: bbox.width / 2,\n ry: Math.max(ry, fity)\n };\n },\n create: function(nodeEnter) {\n nodeEnter.filter(function(n) {\n return !n.dcg_shape.noshape;\n }).insert('rect', ':first-child')\n .attr('class', 'node-shape');\n },\n update: function(node) {\n node.select('rect.node-shape')\n .attr({\n x: function(n) {\n return -n.dcg_rx;\n },\n y: function(n) {\n return -n.dcg_ry;\n },\n width: function(n) {\n return 2*n.dcg_rx;\n },\n height: function(n) {\n return 2*n.dcg_ry;\n },\n rx: function(n) {\n return n.dcg_shape.rx + 'px';\n },\n ry: function(n) {\n return n.dcg_shape.ry + 'px';\n }\n });\n }\n };\n return _shape;\n};\n\n","dc_graph.text_contents = function() {\n var _contents = {\n parent: property(null),\n update: function(container) {\n var text = container.selectAll('text.node-label')\n .data(function(n) { return [n]; });\n text.enter().append('text')\n .attr('class', 'node-label');\n var tspan = text.selectAll('tspan').data(function(n) {\n var lines = _contents.parent().nodeLabel.eval(n);\n if(!lines)\n return [];\n else if(typeof lines === 'string')\n lines = [lines];\n var lineHeight = _contents.parent().nodeLineHeight();\n var first = 1 - ((lines.length - 1) * lineHeight + 1)/2;\n return lines.map(function(line, i) { return {node: n, line: line, yofs: (i==0 ? first : lineHeight) + 'em'}; });\n });\n tspan.enter().append('tspan');\n tspan.attr({\n 'text-anchor': 'start',\n x: 0\n }).text(function(s) { return s.line; });\n text\n .each(function(n) {\n n.xofs = 0;\n })\n .filter(function(n) {\n return _contents.parent().nodeLabelAlignment.eval(n) !== 'center';\n })\n .each(function(n) {\n var bbox = getBBoxNoThrow(this);\n n.bbox = {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n switch(_contents.parent().nodeLabelAlignment.eval(n)) {\n case 'left': n.xofs = -n.bbox.width/2;\n break;\n case 'right': n.xofs = n.bbox.width/2;\n break;\n }\n })\n .selectAll('tspan');\n tspan.attr({\n 'text-anchor': function(s) {\n switch(_contents.parent().nodeLabelAlignment.eval(s.node)) {\n case 'left': return 'start';\n case 'center': return 'middle';\n case 'right': return 'end';\n }\n return null;\n },\n x: function(s) {\n return s.node.xofs;\n },\n dy: function(d) { return d.yofs; }\n });\n\n tspan.exit().remove();\n text\n .attr('fill', _contents.parent().nodeLabelFill.eval);\n },\n textbox: function(container) {\n var bbox = getBBoxNoThrow(this.selectContent(container).node());\n return {x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height};\n },\n selectContent: function(container) {\n return container.select('text.node-label');\n }\n };\n return _contents;\n};\n\ndc_graph.with_icon_contents = function(contents, width, height) {\n var _contents = {\n parent: property(null).react(function(parent) {\n contents.parent(parent);\n }),\n padding: function(n) {\n var padding = node_label_padding(_contents.parent(), n);\n return {\n x: padding.x * 3,\n y: padding.y * 3\n };\n },\n update: function(container) {\n var g = container.selectAll('g.with-icon')\n .data(function(n) { return [n]; });\n var gEnter = g.enter();\n gEnter.append('g')\n .attr('class', 'with-icon')\n .append('image').attr({\n class: 'icon',\n width: width + 'px',\n height: height + 'px'\n });\n g.call(contents.update);\n contents.selectContent(g)\n .attr('transform', 'translate(' + width/2 + ')');\n g.selectAll('image.icon').attr({\n href: _contents.parent().nodeIcon.eval,\n x: function(n) {\n var totwid = width + contents.textbox(d3.select(this.parentNode)).width;\n return -totwid/2 - node_label_padding(_contents.parent(), n).x;\n },\n y: -height/2\n });\n },\n textbox: function(container) {\n var box = contents.textbox(container);\n box.x += width/2;\n return box;\n },\n selectContent: function(container) {\n return container.select('g.with-icon');\n }\n };\n return _contents;\n};\n\n","/**\n * `dc_graph.diagram` is a dc.js-compatible network visualization component. It registers in\n * the dc.js chart registry and its nodes and edges are generated from crossfilter groups. It\n * logically derives from the dc.js\n * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin},\n * but it does not physically derive from it since so much is different about network\n * visualization versus conventional charts.\n * @class diagram\n * @memberof dc_graph\n * @param {String|node} parent - Any valid\n * {@link https://github.com/mbostock/d3/wiki/Selections#selecting-elements d3 single selector}\n * specifying a dom block element such as a div; or a dom element.\n * @param {String} [chartGroup] - The name of the dc.js chart group this diagram instance\n * should be placed in. Filter interaction with a diagram will only trigger events and redraws\n * within the diagram's group.\n * @return {dc_graph.diagram}\n **/\ndc_graph.diagram = function (parent, chartGroup) {\n // different enough from regular dc charts that we don't use dc.baseMixin\n // but attempt to implement most of that interface, copying some of the most basic stuff\n var _diagram = dc.marginMixin({});\n _diagram.__dcFlag__ = dc.utils.uniqueId();\n _diagram.margins({left: 10, top: 10, right: 10, bottom: 10});\n var _svg = null, _defs = null, _g = null, _nodeLayer = null, _edgeLayer = null;\n var _dispatch = d3.dispatch('preDraw', 'data', 'end', 'start', 'render', 'drawn', 'receivedLayout', 'transitionsStarted', 'zoomed', 'reset');\n var _nodes = {}, _edges = {}; // hold state between runs\n var _ports = {}; // id = node|edge/id/name\n var _nodePorts; // ports sorted by node id\n var _stats = {};\n var _nodes_snapshot, _edges_snapshot;\n var _arrows = {};\n var _running = false; // for detecting concurrency issues\n var _translate = [0,0], _scale = 1;\n var _zoom, _animateZoom;\n var _anchor, _chartGroup;\n var _animating = false; // do not refresh during animations\n\n var _minWidth = 200;\n var _defaultWidthCalc = function (element) {\n var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n return (width && width > _minWidth) ? width : _minWidth;\n };\n var _widthCalc = _defaultWidthCalc;\n\n var _minHeight = 200;\n var _defaultHeightCalc = function (element) {\n var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n return (height && height > _minHeight) ? height : _minHeight;\n };\n var _heightCalc = _defaultHeightCalc;\n var _width, _height, _lastWidth, _lastHeight;\n\n function deprecate_layout_algo_parameter(name) {\n return function(value) {\n if(!_diagram.layoutEngine())\n _diagram.layoutAlgorithm('cola', true);\n var engine = _diagram.layoutEngine();\n if(engine.getEngine)\n engine = engine.getEngine();\n if(engine[name]) {\n console.warn('property is deprecated, call on layout engine instead: dc_graph.diagram.%c' + name,\n 'font-weight: bold');\n if(!arguments.length)\n return engine[name]();\n engine[name](value);\n } else {\n console.warn('property is deprecated, and is not supported for Warning: dc_graph.diagram.' + name + ' is deprecated, and it is not supported for the \"' + engine.layoutAlgorithm() + '\" layout algorithm: ignored.');\n if(!arguments.length)\n return null;\n }\n return this;\n };\n }\n\n /**\n * Set or get the height attribute of the diagram. If a value is given, then the diagram is\n * returned for method chaining. If no value is given, then the current value of the height\n * attribute will be returned.\n *\n * The width and height are applied to the SVG element generated by the diagram on render, or\n * when `resizeSvg` is called.\n *\n * If the value is falsy or a function, the height will be calculated the first time it is\n * needed, using the provided function or default height calculator, and then cached. The\n * default calculator uses the client rect of the element specified when constructing the chart,\n * with a minimum of `minHeight`. A custom calculator will be passed the element.\n *\n * If the value is `'auto'`, the height will be calculated every time the diagram is drawn, and\n * it will not be set on the `` element. Instead, the element will be pinned to the same\n * rectangle as its containing div using CSS.\n *\n * @method height\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [height=200]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.height = function (height) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_height)) {\n _lastHeight = _heightCalc(_diagram.root().node());\n if(_height === 'auto') // 'auto' => calculate every time\n return _lastHeight;\n // null/undefined => calculate once only\n _height = _lastHeight;\n }\n return _height;\n }\n if(dc.utils.isNumber(height) || !height || height === 'auto')\n _height = height;\n else if(typeof height === 'function') {\n _heightCalc = height;\n _height = undefined;\n }\n else throw new Error(\"don't know what to do with height type \" + typeof height + \" value \" + height);\n return _diagram;\n };\n _diagram.minHeight = function(height) {\n if(!arguments.length)\n return _minHeight;\n _minHeight = height;\n return _diagram;\n };\n /**\n * Set or get the width attribute of the diagram. If a value is given, then the diagram is\n * returned for method chaining. If no value is given, then the current value of the width\n * attribute will be returned.\n *\n * The width and height are applied to the SVG element generated by the diagram on render, or\n * when `resizeSvg` is called.\n *\n * If the value is falsy or a function, the width will be calculated the first time it is\n * needed, using the provided function or default width calculator, and then cached. The default\n * calculator uses the client rect of the element specified when constructing the chart, with a\n * minimum of `minWidth`. A custom calculator will be passed the element.\n *\n * If the value is `'auto'`, the width will be calculated every time the diagram is drawn, and\n * it will not be set on the `` element. Instead, the element will be pinned to the same\n * rectangle as its containing div using CSS.\n *\n * @method width\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [width=200]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.width = function (width) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_width)) {\n _lastWidth = _widthCalc(_diagram.root().node());\n if(_width === 'auto') // 'auto' => calculate every time\n return _lastWidth;\n // null/undefined => calculate once only\n _width = _lastWidth;\n }\n return _width;\n }\n if(dc.utils.isNumber(width) || !width || width === 'auto')\n _width = width;\n else if(typeof width === 'function') {\n _widthCalc = width;\n _width = undefined;\n }\n else throw new Error(\"don't know what to do with width type \" + typeof width + \" value \" + width);\n return _diagram;\n };\n _diagram.minWidth = function(width) {\n if(!arguments.length)\n return _minWidth;\n _minWidth = width;\n return _diagram;\n };\n\n /**\n * Get or set the root element, which is usually the parent div. Normally the root is set\n * when the diagram is constructed; setting it later may have unexpected consequences.\n * @method root\n * @memberof dc_graph.diagram\n * @instance\n * @param {node} [root=null]\n * @return {node}\n * @return {dc_graph.diagram}\n **/\n _diagram.root = property(null).react(function(e) {\n if(e.empty())\n console.log('Warning: parent selector ' + parent + \" doesn't seem to exist\");\n });\n\n /**\n * Get or set whether mouse wheel rotation or touchpad gestures will zoom the diagram, and\n * whether dragging on the background pans the diagram.\n * @method mouseZoomable\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [mouseZoomable=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.mouseZoomable = property(true);\n\n _diagram.zoomExtent = property([.1, 2]);\n\n /**\n * Whether zooming should only be enabled when the alt key is pressed.\n * @method altKeyZoom\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [altKeyZoom=true]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.modKeyZoom = _diagram.altKeyZoom = property(false);\n\n /**\n * Set or get the fitting strategy for the canvas, which affects how the\n * [viewBox](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox) and\n * [preserveAspectRatio](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio)\n * attributes get set. All options except `null` set the `viewBox` attribute.\n *\n * These options set the `viewBox` and adjust the scale and translate to implement the margins.\n * * `'default'` - uses the default behavior of `xMidYMid meet` (but with margins)\n * * `'vertical'` - fits the canvas vertically (with vertical margins) and centers it\n * horizontally. If the canvas is taller than the viewport, it will meet vertically and\n * there will be blank areas to the left and right. If the canvas is wider than the\n * viewport, it will be sliced.\n * * `'horizontal'` - fitst the canvas horizontally (with horizontal margins) and centers\n * it vertically. If the canvas is wider than the viewport, it will meet horizontally and\n * there will be blank areas above and below. If the canvas is taller than the viewport, it\n * will be sliced.\n *\n * Other options\n * * `null` - no attempt is made to fit the canvas to the svg element, `viewBox` is unset.\n * * another string - sets the `viewBox` and uses the string for `preserveAspectRatio`.\n * * function - will be called with (viewport width, viewport height, canvas width, canvas\n * height) and result will be used to set `preserveAspectRatio`.\n * @method fitStrategy\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [fitStrategy='default']\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.fitStrategy = property('default');\n\n /**\n * Do not allow panning (scrolling) to push the diagram out of the viewable area, if there\n * is space for it to be shown. */\n _diagram.restrictPan = property(false);\n\n /**\n * Auto-zoom behavior.\n * * `'always'` - zoom every time layout happens\n * * `'once'` - zoom the next time layout happens\n * * `null` - manual, call `zoomToFit` to fit\n * @method autoZoom\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [autoZoom=null]\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.autoZoom = property(null);\n _diagram.zoomToFit = function(animate) {\n if(!(_nodeLayer && _edgeLayer))\n return;\n var node = _diagram.selectAllNodes(),\n edge = _diagram.selectAllEdges();\n auto_zoom(node, edge, animate);\n };\n _diagram.zoomDuration = property(500);\n\n /**\n * Set or get the crossfilter dimension which represents the nodes (vertices) in the\n * diagram. Typically there will be a crossfilter instance for the nodes, and another for\n * the edges.\n *\n * *Dimensions are included on the diagram for similarity to dc.js, however the diagram\n * itself does not use them - but {@link dc_graph.filter_selection filter_selection} will.*\n * @method nodeDimension\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.dimension} [nodeDimension]\n * @return {crossfilter.dimension}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeDimension = property();\n\n /**\n * Set or get the crossfilter group which is the data source for the nodes in the\n * diagram. The diagram will use the group's `.all()` method to get an array of `{key,\n * value}` pairs, where the key is a unique identifier, and the value is usually an object\n * containing the node's attributes. All accessors work with these key/value pairs.\n *\n * If the group is changed or returns different values, the next call to `.redraw()` will\n * reflect the changes incrementally.\n *\n * It is possible to pass another object with the same `.all()` interface instead of a\n * crossfilter group.\n * @method nodeGroup\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.group} [nodeGroup]\n * @return {crossfilter.group}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeGroup = property();\n\n /**\n * Set or get the crossfilter dimension which represents the edges in the\n * diagram. Typically there will be a crossfilter instance for the nodes, and another for\n * the edges.\n *\n * *Dimensions are included on the diagram for similarity to dc.js, however the diagram\n * itself does not use them - but {@link dc_graph.filter_selection filter_selection} will.*\n * @method edgeDimension\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.dimension} [edgeDimension]\n * @return {crossfilter.dimension}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeDimension = property();\n\n /**\n * Set or get the crossfilter group which is the data source for the edges in the\n * diagram. See `.nodeGroup` above for the way data is loaded from a crossfilter group.\n *\n * The values in the key/value pairs returned by `diagram.edgeGroup().all()` need to\n * support, at a minimum, the {@link dc_graph.diagram#nodeSource nodeSource} and\n * {@link dc_graph.diagram#nodeTarget nodeTarget}, which should return the same\n * keys as the {@link dc_graph.diagram#nodeKey nodeKey}\n *\n * @method edgeGroup\n * @memberof dc_graph.diagram\n * @instance\n * @param {crossfilter.group} [edgeGroup]\n * @return {crossfilter.group}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeGroup = property();\n\n _diagram.edgesInFront = property(false);\n\n /**\n * Set or get the function which will be used to retrieve the unique key for each node. By\n * default, this accesses the `key` field of the object passed to it. The keys should match\n * the keys returned by the {@link dc_graph.diagram#edgeSource edgeSource} and\n * {@link dc_graph.diagram#edgeTarget edgeTarget}.\n *\n * @method nodeKey\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [nodeKey=function(kv) { return kv.key }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeKey = _diagram.nodeKeyAccessor = property(function(kv) {\n return kv.key;\n });\n\n /**\n * Set or get the function which will be used to retrieve the unique key for each edge. By\n * default, this accesses the `key` field of the object passed to it.\n *\n * @method edgeKey\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeKey=function(kv) { return kv.key }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeKey = _diagram.edgeKeyAccessor = property(function(kv) {\n return kv.key;\n });\n\n /**\n * Set or get the function which will be used to retrieve the source (origin/tail) key of\n * the edge objects. The key must equal the key returned by the `.nodeKey` for one of the\n * nodes; if it does not, or if the node is currently filtered out, the edge will not be\n * displayed. By default, looks for `.value.sourcename`.\n *\n * @method edgeSource\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeSource=function(kv) { return kv.value.sourcename; }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeSource = _diagram.sourceAccessor = property(function(kv) {\n return kv.value.sourcename;\n });\n\n /**\n * Set or get the function which will be used to retrieve the target (destination/head) key\n * of the edge objects. The key must equal the key returned by the\n * {@link dc_graph.diagram#nodeKey nodeKey} for one of the nodes; if it does not, or if the node\n * is currently filtered out, the edge will not be displayed. By default, looks for\n * `.value.targetname`.\n * @method edgeTarget\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeTarget=function(kv) { return kv.value.targetname; }]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeTarget = _diagram.targetAccessor = property(function(kv) {\n return kv.value.targetname;\n });\n\n _diagram.portDimension = property(null);\n _diagram.portGroup = property(null);\n _diagram.portNodeKey = property(null);\n _diagram.portEdgeKey = property(null);\n _diagram.portName = property(null);\n _diagram.portStyleName = property(null);\n _diagram.portElastic = property(true);\n\n _diagram.portStyle = named_children();\n\n _diagram.portBounds = property(null); // position limits, in radians\n\n _diagram.edgeSourcePortName = property(null);\n _diagram.edgeTargetPortName = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the radius, in pixels, for each\n * node. This determines the height of nodes,and if `nodeFitLabel` is false, the width too.\n * @method nodeRadius\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeRadius=25]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeRadius = _diagram.nodeRadiusAccessor = property(25);\n\n /**\n * Set or get the function which will be used to retrieve the stroke width, in pixels, for\n * drawing the outline of each node. According to the SVG specification, the outline will\n * be drawn half on top of the fill, and half outside. Default: 1\n * @method nodeStrokeWidth\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeStrokeWidth=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeStrokeWidth = _diagram.nodeStrokeWidthAccessor = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the stroke color for the outline\n * of each node.\n * @method nodeStroke\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeStroke='black']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeStroke = _diagram.nodeStrokeAccessor = property('black');\n\n _diagram.nodeStrokeDashArray = property(null);\n\n /**\n * If set, the value returned from `nodeFill` will be processed through this\n * {@link https://github.com/mbostock/d3/wiki/Scales d3.scale}\n * to return the fill color. If falsy, uses the identity function (no scale).\n * @method nodeFillScale\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|d3.scale} [nodeFillScale]\n * @return {Function|d3.scale}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFillScale = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the fill color for the body of each\n * node.\n * @method nodeFill\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeFill='white']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFill = _diagram.nodeFillAccessor = property('white');\n\n /**\n * Set or get the function which will be used to retrieve the opacity of each node.\n * @method nodeOpacity\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeOpacity=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeOpacity = property(1);\n\n /**\n * Set or get the padding or minimum distance, in pixels, for a node. (Will be distributed\n * to both sides of the node.)\n * @method nodePadding\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodePadding=6]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodePadding = property(6);\n\n\n /**\n * Set or get the padding, in pixels, for a node's label. If an object, should contain fields\n * `x` and `y`. If a number, will be applied to both x and y.\n * @method nodeLabelPadding\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number|Object} [nodeLabelPadding=0]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabelPadding = property(0);\n\n /**\n * Set or get the line height for nodes with multiple lines of text, in ems.\n * @method nodeLineHeight\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [nodeLineHeight=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLineHeight = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the label text to display in each\n * node. By default, looks for a field `label` or `name` inside the `value` field.\n * @method nodeLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeLabel]\n * @return {Function|String}\n * @example\n * // Default behavior\n * diagram.nodeLabel(function(kv) {\n * return kv.value.label || kv.value.name;\n * });\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabel = _diagram.nodeLabelAccessor = property(function(kv) {\n return kv.value.label || kv.value.name;\n });\n\n _diagram.nodeLabelAlignment = property('center');\n\n /**\n * Set or get the function which will be used to retrieve the label fill color. Default: null\n * @method nodeLabelFill\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeLabelFill=null]\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeLabelFill = _diagram.nodeLabelFillAccessor = property(null);\n\n /**\n * Whether to fit the node shape around the label\n * @method nodeFitLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Boolean} [nodeFitLabel=true]\n * @return {Function|Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFitLabel = _diagram.nodeFitLabelAccessor = property(true);\n\n /**\n * The shape to use for drawing each node, specified as an object with at least the field\n * `shape`. The names of shapes are mostly taken\n * [from graphviz](http://www.graphviz.org/doc/info/shapes.html); currently ellipse, egg,\n * triangle, rectangle, diamond, trapezium, parallelogram, pentagon, hexagon, septagon, octagon,\n * invtriangle, invtrapezium, square, polygon are supported.\n *\n * If `shape = polygon`:\n * * `sides`: number of sides for a polygon\n * @method nodeShape\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Object} [nodeShape={shape: 'ellipse'}]\n * @return {Function|Object}\n * @return {dc_graph.diagram}\n * @example\n * // set shape to diamond or parallelogram based on flag\n * diagram.nodeShape(function(kv) {\n * return {shape: kv.value.flag ? 'diamond' : 'parallelogram'};\n * });\n **/\n _diagram.nodeShape = property(default_shape);\n\n // for defining custom (and standard) shapes\n _diagram.shape = named_children();\n\n _diagram.shape('nothing', dc_graph.no_shape());\n _diagram.shape('ellipse', dc_graph.ellipse_shape());\n _diagram.shape('polygon', dc_graph.polygon_shape());\n _diagram.shape('rounded-rect', dc_graph.rounded_rectangle_shape());\n\n _diagram.nodeContent = property('text');\n _diagram.content = named_children();\n _diagram.content('text', dc_graph.text_contents());\n\n // really looks like these should reside in an open namespace - this used only by an extension\n // but it's no less real than any other computed property\n _diagram.nodeIcon = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the node title, usually rendered\n * as a tooltip. By default, uses the key of the node.\n * @method nodeTitle\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [nodeTitle]\n * @return {Function|String}\n * @example\n * // Default behavior\n * diagram.nodeTitle(function(kv) {\n * return _diagram.nodeKey()(kv);\n * });\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeTitle = _diagram.nodeTitleAccessor = property(function(kv) {\n return _diagram.nodeKey()(kv);\n });\n\n /**\n * By default, nodes are added to the layout in the order that `.nodeGroup().all()` returns\n * them. If specified, `.nodeOrdering` provides an accessor that returns a key to sort the\n * nodes on. *It would be better not to rely on ordering to affect layout, but it may\n * affect the layout in some cases.*\n * @method nodeOrdering\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [nodeOrdering=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeOrdering = property(null);\n\n /**\n * Specify an accessor that returns an {x,y} coordinate for a node that should be\n * {@link https://github.com/tgdwyer/WebCola/wiki/Fixed-Node-Positions fixed in place},\n * and returns falsy for other nodes.\n * @method nodeFixed\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Object} [nodeFixed=null]\n * @return {Function|Object}\n * @return {dc_graph.diagram}\n **/\n _diagram.nodeFixed = _diagram.nodeFixedAccessor = property(null);\n\n\n /**\n * Set or get the function which will be used to retrieve the stroke color for the edges.\n * @method edgeStroke\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeStroke='black']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeStroke = _diagram.edgeStrokeAccessor = property('black');\n\n /**\n * Set or get the function which will be used to retrieve the stroke width for the edges.\n * @method edgeStrokeWidth\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeStrokeWidth=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeStrokeWidth = _diagram.edgeStrokeWidthAccessor = property(1);\n\n _diagram.edgeStrokeDashArray = property(null);\n\n /**\n * Set or get the function which will be used to retrieve the edge opacity, a number from 0\n * to 1.\n * @method edgeOpacity\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeOpacity=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeOpacity = _diagram.edgeOpacityAccessor = property(1);\n\n /**\n * Set or get the function which will be used to retrieve the edge label text. The label is\n * displayed when an edge is hovered over. By default, uses the `edgeKey`.\n * @method edgeLabel\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeLabel]\n * @example\n * // Default behavior\n * diagram.edgeLabel(function(e) {\n * return _diagram.edgeKey()(e);\n * });\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeLabel = _diagram.edgeLabelAccessor = property(function(e) {\n return _diagram.edgeKey()(e);\n });\n\n /**\n * Set or get the function which will be used to retrieve the name of the arrowhead to use\n * for the target/ head/destination of the edge. Arrow symbols can be specified with\n * `.defineArrow()`. Return null to display no arrowhead.\n * @method edgeArrowhead\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeArrowhead='vee']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowhead = _diagram.edgeArrowheadAccessor = property('vee');\n\n /**\n * Set or get the function which will be used to retrieve the name of the arrow tail to use\n * for the tail/source of the edge. Arrow symbols can be specified with\n * `.defineArrow()`. Return null to display no arrowtail.\n * @method edgeArrowtail\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [edgeArrowtail=null]\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowtail = _diagram.edgeArrowtailAccessor = property(null);\n\n /**\n * Multiplier for arrow size.\n * @method edgeArrowSize\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeArrowSize=1]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeArrowSize = property(1);\n\n /**\n * To draw an edge but not have it affect the layout, specify a function which returns\n * false for that edge. By default, will return false if the `notLayout` field of the edge\n * value is truthy, true otherwise.\n * @method edgeIsLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Boolean} [edgeIsLayout]\n * @example\n * // Default behavior\n * diagram.edgeIsLayout(function(kv) {\n * return !kv.value.notLayout;\n * });\n * @return {Function|Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeIsLayout = _diagram.edgeIsLayoutAccessor = property(function(kv) {\n return !kv.value.notLayout;\n });\n\n // if false, don't draw or layout the edge. this is not documented because it seems like\n // the interface could be better and this combined with edgeIsLayout. (currently there is\n // no way to layout but not draw an edge.)\n _diagram.edgeIsShown = property(true);\n\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 *\n * **Deprecated**: Use {@link dc_graph.cola_layout#lengthStrategy cola_layout.lengthStrategy} instead.\n * @method lengthStrategy\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|String} [lengthStrategy='symmetric']\n * @return {Function|String}\n * @return {dc_graph.diagram}\n **/\n _diagram.lengthStrategy = deprecate_layout_algo_parameter('lengthStrategy');\n\n /**\n * When the `.lengthStrategy` is 'individual', this accessor will be used to read the\n * length of each edge. By default, reads the `distance` field of the edge. If the\n * distance is falsy, uses the `baseLength`.\n * @method edgeLength\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [edgeLength]\n * @example\n * // Default behavior\n * diagram.edgeLength(function(kv) {\n * return kv.value.distance;\n * });\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeLength = _diagram.edgeDistanceAccessor = property(function(kv) {\n return kv.value.distance;\n });\n\n /**\n * This should be equivalent to rankdir and ranksep in the dagre/graphviz nomenclature, but for\n * now it is separate.\n *\n * **Deprecated**: use {@link dc_graph.cola_layout#flowLayout cola_layout.flowLayout} instead.\n * @method flowLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Object} [flowLayout]\n * @example\n * // No flow (default)\n * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.flowLayout({axis: 'x', minSeparation: 200})\n **/\n _diagram.flowLayout = deprecate_layout_algo_parameter('flowLayout');\n\n /**\n * Direction to draw ranks. Currently for dagre and expand_collapse, but I think cola could be\n * generated from graphviz-style since it is more general.\n *\n * **Deprecated**: use {@link dc_graph.dagre_layout#rankdir dagre_layout.rankdir} instead.\n * @method rankdir\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [rankdir]\n **/\n _diagram.rankdir = deprecate_layout_algo_parameter('rankdir');\n\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 *\n * **Deprecated**: use {@link dc_graph.cola_layout#baseLength cola_layout.baseLength} instead.\n * @method baseLength\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [baseLength]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.baseLength = deprecate_layout_algo_parameter('baseLength');\n\n /**\n * Gets or sets the transition duration, the length of time each change to the diagram will\n * be animated.\n * @method transitionDuration\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [transitionDuration=500]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.transitionDuration = property(500);\n\n /**\n * How transitions should be split into separate animations to emphasize\n * the delete, modify, and insert operations:\n * * `none`: modify and insert operations animate at the same time\n * * `modins`: modify operations happen before inserts\n * * `insmod`: insert operations happen before modifies\n *\n * Deletions always happen before/during layout computation.\n * @method stageTransitions\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [stageTransitions='none']\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.stageTransitions = property('none');\n\n /**\n * The delete transition happens simultaneously with layout, which can take longer\n * than the transition duration. Delaying it can bring it closer to the other\n * staged transitions.\n * @method deleteDelay\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [deleteDelay=0]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.deleteDelay = property(0);\n\n /**\n * Whether to put connected components each in their own group, to stabilize layout.\n * @method groupConnected\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [stageTransitions=false]\n * @return {String}\n * @return {dc_graph.diagram}\n **/\n _diagram.groupConnected = deprecate_layout_algo_parameter('groupConnected');\n\n /**\n * Gets or sets the maximum time spent doing layout for a render or redraw. Set to 0 for no\n * limit.\n * @method timeLimit\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function|Number} [timeLimit=0]\n * @return {Function|Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.timeLimit = property(0);\n\n /**\n * Gets or sets a function which will be called with the current nodes and edges on each\n * redraw in order to derive new layout constraints. The constraints are built from scratch\n * on each redraw.\n *\n * This can be used to generate alignment (rank) or axis constraints. By default, no\n * constraints will be added, although cola.js uses constraints internally to implement\n * flow and overlap prevention. See\n * {@link https://github.com/tgdwyer/WebCola/wiki/Constraints the cola.js wiki}\n * for more details.\n *\n * For convenience, dc.graph.js implements a other constraints on top of those implemented\n * by cola.js:\n * * 'ordering' - the nodes will be ordered on the specified `axis` according to the keys\n * returned by the `ordering` function, by creating separation constraints using the\n * specified `gap`.\n * * 'circle' - (experimental) the nodes will be placed in a circle using \"wheel\"\n * edge lengths similar to those described in\n * {@link http://www.csse.monash.edu.au/~tdwyer/Dwyer2009FastConstraints.pdf Scalable, Versatile, and Simple Constrained Graph Layout}\n * *Although this is not as performant or stable as might be desired, it may work for\n * simple cases. In particular, it should use edge length *constraints*, which don't yet\n * exist in cola.js.*\n *\n * Because it is tedious to write code to generate constraints for a graph, **dc.graph.js**\n * also includes a {@link #dc_graph+constraint_pattern constraint generator} to produce\n * this constrain function, specifying the constraints themselves in a graph.\n * @method constrain\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [constrain]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.constrain = property(function(nodes, edges) {\n return [];\n });\n\n /**\n * If there are multiple edges between the same two nodes, start them this many pixels away\n * from the original so they don't overlap.\n * @method parallelEdgeOffset\n * @memberof dc_graph.diagram\n * @instance\n * @param {Number} [parallelEdgeOffset=10]\n * @return {Number}\n * @return {dc_graph.diagram}\n **/\n _diagram.parallelEdgeOffset = property(10);\n\n /**\n * By default, edges are added to the layout in the order that `.edgeGroup().all()` returns\n * them. If specified, `.edgeOrdering` provides an accessor that returns a key to sort the\n * edges on.\n *\n * *It would be better not to rely on ordering to affect layout, but it may affect the\n * layout in some cases. (Probably less than node ordering, but it does affect which\n * parallel edge is which.)*\n * @method edgeOrdering\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [edgeOrdering=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.edgeOrdering = property(null);\n\n _diagram.edgeSort = property(null);\n\n _diagram.cascade = cascade(_diagram);\n\n /**\n * Currently there are some bugs when the same instance of cola.js is used multiple\n * times. (In particular, overlaps between nodes may not be eliminated\n * {@link https://github.com/tgdwyer/WebCola/issues/118 if cola is not reinitialized}\n * This flag can be set true to construct a new cola layout object on each redraw. However,\n * layout seems to be more stable if this is set false, so hopefully this will be fixed\n * soon.\n * @method initLayoutOnRedraw\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [initLayoutOnRedraw=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.initLayoutOnRedraw = property(false);\n\n /**\n * Whether to perform layout when the data is unchanged from the last redraw.\n * @method layoutUnchanged\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [layoutUnchanged=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.layoutUnchanged = property(false);\n\n /**\n * When `layoutUnchanged` is false, this will force layout to happen again. This may be needed\n * when changing a parameter but not changing the topology of the graph. (Yes, probably should\n * not be necessary.)\n * @method relayout\n * @memberof dc_graph.diagram\n * @instance\n * @return {dc_graph.diagram}\n **/\n _diagram.relayout = function() {\n _nodes_snapshot = _edges_snapshot = null;\n return this;\n };\n\n /**\n * Function to call to generate an initial layout. Takes (diagram, nodes, edges)\n *\n * **Deprecated**: The only layout that was using this was `tree_positions` and it never\n * worked as an initialization step for cola, as was originally intended. Now that\n * `tree_layout` is a layout algorithm, this should go away.\n *\n * In the future, there will be support for chaining layout algorithms. But that will be a\n * matter of composing them into a super-algorithm, not a special step like this was.\n * @method initialLayout\n * @memberof dc_graph.diagram\n * @instance\n * @param {Function} [initialLayout=null]\n * @return {Function}\n * @return {dc_graph.diagram}\n **/\n _diagram.initialLayout = deprecated_property('initialLayout is deprecated - use layout algorithms instead', null);\n\n _diagram.initialOnly = deprecated_property('initialOnly is deprecated - see the initialLayout deprecation notice in the documentation', false);\n\n /**\n * By default, all nodes are included, and edges are only included if both end-nodes are\n * visible. If `.induceNodes` is set, then only nodes which have at least one edge will be\n * shown.\n * @method induceNodes\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [induceNodes=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.induceNodes = property(false);\n\n /**\n * If this flag is true, the positions of nodes and will be updated while layout is\n * iterating. If false, the positions will only be updated once layout has\n * stabilized. Note: this may not be compatible with transitionDuration.\n * @method showLayoutSteps\n * @memberof dc_graph.diagram\n * @instance\n * @param {Boolean} [showLayoutSteps=false]\n * @return {Boolean}\n * @return {dc_graph.diagram}\n **/\n _diagram.showLayoutSteps = property(false);\n\n /**\n * Assigns a legend object which will be displayed within the same SVG element and\n * according to the visual encoding of this diagram.\n * @method legend\n * @memberof dc_graph.diagram\n * @instance\n * @param {Object} [legend=null]\n * @return {Object}\n * @return {dc_graph.diagram}\n **/\n // (pre-deprecated; see below)\n\n /**\n * Specifies another kind of child layer or interface. For example, this can\n * be used to display tooltips on nodes using `dc_graph.tip`.\n\n * The child needs to support a `parent` method, the diagram to modify.\n * @method child\n * @memberof dc_graph.diagram\n * @instance\n * @param {String} [id] - the name of the child to modify or add\n * @param {Object} [object] - the child object to add, or null to remove\n * @example\n * // Display tooltips on node hover, via the d3-tip library\n * var tip = dc_graph.tip()\n * tip.content(function(n, k) {\n * // you can do an asynchronous call here, e.g. d3.json, if you need\n * // to fetch data to show the tooltip - just call k() with the content\n * k(\"This is \" + n.orig.value.name + \"\");\n * });\n * diagram.child('tip', tip);\n * @return {dc_graph.diagram}\n **/\n _diagram.mode = _diagram.child = named_children();\n\n // for backward compatibility; use .child() for more control & multiple legends\n _diagram.legend = function(_) {\n if(!arguments.length)\n return _diagram.child('node-legend');\n _diagram.child('node-legend', _);\n return _diagram;\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 _diagram.layoutAlgorithm = function(value, skipWarning) {\n if(!arguments.length)\n return _diagram.layoutEngine() ? _diagram.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 _diagram.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 _diagram.layoutEngine = property(null).react(function(val) {\n if(val && val.parent)\n val.parent(_diagram);\n if(_g) { // already rendered\n // remove any calculated points, if engine did that\n Object.keys(_edges).forEach(function(k) {\n _edges[k].cola.points = null;\n });\n // initialize engine\n initLayout(val);\n }\n });\n\n // S-spline any edges that are not going in this direction\n _diagram.enforceEdgeDirection = property(null);\n\n _diagram.tickSize = deprecate_layout_algo_parameter('tickSize');\n\n\n _diagram.uniqueId = function() {\n return _diagram.anchorName().replace(/[ .#=\\[\\]\"]/g, '-');\n };\n\n _diagram.edgeId = function(e) {\n return 'edge-' + _diagram.edgeKey.eval(e).replace(/[^\\w-_]/g, '-');\n };\n\n _diagram.arrowId = function(e, kind) {\n return 'arrow-' + kind + '-' + _diagram.uniqueId() + '-' + _diagram.edgeId(e);\n };\n _diagram.textpathId = function(e) {\n return 'textpath-' + _diagram.uniqueId() + '-' + _diagram.edgeId(e);\n };\n\n // this kind of begs a (meta)graph ADT\n // instead of munging this into the diagram\n _diagram.getNode = function(id) {\n return _nodes[id] ? _nodes[id].orig : null;\n };\n\n _diagram.getWholeNode = function(id) {\n return _nodes[id] ? _nodes[id] : null;\n };\n\n _diagram.getEdge = function(id) {\n return _edges[id] ? _edges[id].orig : null;\n };\n\n _diagram.getWholeEdge = function(id) {\n return _edges[id] ? _edges[id] : null;\n };\n\n // again, awful, we need an ADT\n _diagram.getPort = function(nid, eid, name) {\n return _ports[port_name(nid, eid, name)];\n };\n\n _diagram.nodePorts = function() {\n return _nodePorts;\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 _diagram.handleDisconnected = deprecate_layout_algo_parameter('handleDisconnected');\n\n function initLayout(engine) {\n if(!_diagram.layoutEngine())\n _diagram.layoutAlgorithm('cola', true);\n (engine || _diagram.layoutEngine()).init({\n width: _diagram.width(),\n height: _diagram.height()\n });\n }\n\n _diagram.forEachChild = function(node, children, idf, f) {\n children.enum().forEach(function(key) {\n f(children(key),\n node.filter(function(n) { return idf(n) === key; }));\n });\n };\n _diagram.forEachShape = function(node, f) {\n _diagram.forEachChild(node, _diagram.shape, function(n) { return n.dcg_shape.shape; }, f);\n };\n _diagram.forEachContent = function(node, f) {\n _diagram.forEachChild(node, _diagram.content, _diagram.nodeContent.eval, f);\n };\n _diagram.renderNode = _diagram._enterNode = function(nodeEnter) {\n if(_diagram.nodeTitle())\n nodeEnter.append('title');\n nodeEnter.each(infer_shape(_diagram));\n _diagram.forEachShape(nodeEnter, function(shape, node) {\n node.call(shape.create);\n });\n return _diagram;\n };\n _diagram.redrawNode = _diagram._updateNode = function(node) {\n var changedShape = node.filter(shape_changed(_diagram));\n changedShape.selectAll('.node-shape').remove();\n changedShape.each(infer_shape(_diagram));\n _diagram.forEachShape(changedShape, function(shape, node) {\n node.call(shape.create);\n });\n node.select('title')\n .text(_diagram.nodeTitle.eval);\n _diagram.forEachContent(node, function(contentType, node) {\n node.call(contentType.update);\n _diagram.forEachShape(contentType.selectContent(node), function(shape, content) {\n content\n .call(fit_shape(shape, _diagram));\n });\n });\n _diagram.forEachShape(node, function(shape, node) {\n node.call(shape.update);\n });\n node.select('.node-shape')\n .attr({\n stroke: _diagram.nodeStroke.eval,\n 'stroke-width': _diagram.nodeStrokeWidth.eval,\n 'stroke-dasharray': _diagram.nodeStrokeDashArray.eval,\n fill: compose(_diagram.nodeFillScale() || identity, _diagram.nodeFill.eval)\n });\n return _diagram;\n };\n _diagram.redrawEdge = _diagram._updateEdge = function(edge) {\n edge\n .attr('stroke', _diagram.edgeStroke.eval)\n .attr('stroke-width', _diagram.edgeStrokeWidth.eval)\n .attr('stroke-dasharray', _diagram.edgeStrokeDashArray.eval)\n .attr('marker-end', function(e) {\n var name = _diagram.edgeArrowhead.eval(e),\n id = edgeArrow(e, 'head', name);\n return id ? 'url(#' + id + ')' : null;\n })\n .attr('marker-start', function(e) {\n var name = _diagram.edgeArrowtail.eval(e),\n arrow_id = edgeArrow(e, 'tail', name);\n return name ? 'url(#' + arrow_id + ')' : null;\n })\n .each(function(e) {\n var fillEdgeStroke = _diagram.edgeStroke.eval(e);\n d3.selectAll('#' + _diagram.arrowId(e, 'head'))\n .attr('fill', _diagram.edgeStroke.eval(e));\n d3.selectAll('#' + _diagram.arrowId(e, 'tail'))\n .attr('fill', _diagram.edgeStroke.eval(e));\n });\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 _diagram.stagedDuration = function() {\n return (_diagram.stageTransitions() !== 'none') ?\n _diagram.transitionDuration() / 2 :\n _diagram.transitionDuration();\n };\n\n _diagram.stagedDelay = function(is_enter) {\n return _diagram.stageTransitions() === 'none' ||\n _diagram.stageTransitions() === 'modins' === !is_enter ?\n 0 :\n _diagram.transitionDuration() / 2;\n };\n\n _diagram.selectAllNodes = function(selector) {\n selector = selector || '.node';\n return _nodeLayer && _nodeLayer.selectAll(selector).filter(function(n) {\n return !n.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.selectAllEdges = function(selector) {\n selector = selector || '.edge';\n return _edgeLayer && _edgeLayer.selectAll(selector).filter(function(e) {\n return !e.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.selectAllDefs = function(selector) {\n return _defs && _defs.selectAll(selector).filter(function(def) {\n return !def.deleted;\n }) || d3.selectAll('.foo-this-does-not-exist');\n };\n\n _diagram.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 _diagram.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 _diagram.startLayout();\n };\n\n _diagram.startLayout = function () {\n var nodes = _diagram.nodeGroup().all();\n var edges = _diagram.edgeGroup().all();\n var ports = _diagram.portGroup() ? _diagram.portGroup().all() : [];\n if(_running) {\n throw new Error('dc_graph.diagram.redraw already running!');\n }\n _running = true;\n\n var oldWidth = _lastWidth, oldHeight = _lastHeight;\n var newWidth = _diagram.width(), newHeight = _diagram.height();\n if(oldWidth !== newWidth || oldHeight !== newHeight) {\n var scale = _zoom.scale(), translate = _zoom.translate();\n _zoom.scale(1).translate([0,0]);\n var xDomain = _diagram.x().domain(), yDomain = _diagram.y().domain();\n _diagram.x()\n .domain([xDomain[0], xDomain[0] + (xDomain[1] - xDomain[0])*newWidth/oldWidth])\n .range([0, newWidth]);\n _diagram.y()\n .domain([yDomain[0], yDomain[0] + (yDomain[1] - yDomain[0])*newHeight/oldHeight])\n .range([0, newHeight]);\n _zoom\n .x(_diagram.x()).y(_diagram.y())\n .translate(translate).scale(scale);\n }\n\n if(_diagram.initLayoutOnRedraw())\n initLayout();\n _diagram.layoutEngine().stop();\n _dispatch.preDraw();\n\n // ordering shouldn't matter, but we support ordering in case it does\n if(_diagram.nodeOrdering()) {\n nodes = crossfilter.quicksort.by(_diagram.nodeOrdering())(nodes.slice(0), 0, nodes.length);\n }\n if(_diagram.edgeOrdering()) {\n edges = crossfilter.quicksort.by(_diagram.edgeOrdering())(edges.slice(0), 0, edges.length);\n }\n\n var wnodes = regenerate_objects(_nodes, nodes, null, function(v) {\n return _diagram.nodeKey()(v);\n }, function(v1, v) {\n v1.orig = v;\n v1.cola = v1.cola || {};\n v1.cola.dcg_nodeKey = _diagram.nodeKey.eval(v1);\n _diagram.layoutEngine().populateLayoutNode(v1.cola, v1);\n });\n var wedges = regenerate_objects(_edges, edges, null, function(e) {\n return _diagram.edgeKey()(e);\n }, function(e1, e) {\n e1.orig = e;\n e1.cola = e1.cola || {};\n e1.cola.dcg_edgeKey = _diagram.edgeKey.eval(e1);\n e1.cola.dcg_edgeSource = _diagram.edgeSource.eval(e1);\n e1.cola.dcg_edgeTarget = _diagram.edgeTarget.eval(e1);\n e1.source = _nodes[e1.cola.dcg_edgeSource];\n e1.target = _nodes[e1.cola.dcg_edgeTarget];\n e1.cola.dcg_edgeLength = _diagram.edgeLength.eval(e1);\n e1.sourcePort = e1.sourcePort || {};\n e1.targetPort = e1.targetPort || {};\n _diagram.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(_diagram.edgeIsShown.eval);\n\n // now we know which ports should exist\n var needports = wedges.map(function(e) {\n if(_diagram.edgeSourcePortName.eval(e))\n return port_name(_diagram.edgeSource.eval(e), null, _diagram.edgeSourcePortName.eval(e));\n else return port_name(null, _diagram.edgeKey.eval(e), 'source');\n });\n needports = needports.concat(wedges.map(function(e) {\n if(_diagram.edgeTargetPortName.eval(e))\n return port_name(_diagram.edgeTarget.eval(e), null, _diagram.edgeTargetPortName.eval(e));\n else return port_name(null, _diagram.edgeKey.eval(e), 'target');\n }));\n // remove any invalid ports so they don't crash in confusing ways later\n ports = ports.filter(function(p) {\n return _diagram.portNodeKey() && _diagram.portNodeKey()(p) ||\n _diagram.portEdgeKey() && _diagram.portEdgeKey()(p);\n });\n var wports = regenerate_objects(_ports, ports, needports, function(p) {\n return port_name(_diagram.portNodeKey() && _diagram.portNodeKey()(p),\n _diagram.portEdgeKey() && _diagram.portEdgeKey()(p),\n _diagram.portName()(p));\n }, function(p1, p) {\n p1.orig = p;\n if(p1.named)\n p1.edges = [];\n }, function(k, p) {\n console.assert(k, 'should have screened out invalid ports');\n // it's dumb to parse the id we just created. as usual, i blame the lack of metagraphs\n var parse = split_port_name(k);\n if(parse.nodeKey) {\n p.node = _nodes[parse.nodeKey];\n p.named = true;\n }\n else {\n var e = _edges[parse.edgeKey];\n p.node = e[parse.name];\n p.edges = [e];\n p.named = false;\n }\n p.name = parse.name;\n });\n // remove any ports where the end-node was not found, to avoid crashing elsewhere\n wports = wports.filter(function(p) { return p.node; });\n\n // find all edges for named ports\n wedges.forEach(function(e) {\n var name = _diagram.edgeSourcePortName.eval(e);\n if(name)\n _ports[port_name(_diagram.nodeKey.eval(e.source), null, name)].edges.push(e);\n name = _diagram.edgeTargetPortName.eval(e);\n if(name)\n _ports[port_name(_diagram.nodeKey.eval(e.target), null, name)].edges.push(e);\n });\n\n // optionally, delete nodes that have no edges\n if(_diagram.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 // announce new data\n _dispatch.data(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n _stats = {nnodes: wnodes.length, nedges: wedges.length};\n\n // fixed nodes may have been affected by .data() so calculate now\n wnodes.forEach(function(v) {\n if(_diagram.nodeFixed())\n v.cola.dcg_nodeFixed = _diagram.nodeFixed.eval(v);\n });\n\n // annotate parallel edges so we can draw them specially\n if(_diagram.parallelEdgeOffset()) {\n var em = new Array(wnodes.length);\n for(var i = 0; i < wnodes.length; ++i)\n em[i] = new Array(i);\n wedges.forEach(function(e) {\n e.pos = e.pos || {};\n var min, max, minattr, maxattr;\n if(e.source.index < e.target.index) {\n min = e.source.index; max = e.target.index;\n minattr = 'edgeSourcePortName'; maxattr = 'edgeTargetPortName';\n } else {\n max = e.source.index; min = e.target.index;\n maxattr = 'edgeSourcePortName'; minattr = 'edgeTargetPortName';\n }\n var minport = _diagram[minattr].eval(e) || 'no port',\n maxport = _diagram[maxattr].eval(e) || 'no port';\n em[max][min] = em[max][min] || {};\n em[max][min][maxport] = em[max][min][maxport] || {};\n e.parallel = em[max][min][maxport][minport] = em[max][min][maxport][minport] || {\n rev: [],\n edges: []\n };\n e.parallel.edges.push(e);\n e.parallel.rev.push(min !== e.source.index);\n });\n }\n\n // create edge SVG elements\n var edge = _edgeLayer.selectAll('.edge')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeEnter = edge.enter().append('svg:path')\n .attr({\n class: 'edge',\n id: _diagram.edgeId,\n opacity: 0\n })\n .each(function(e) {\n e.deleted = false;\n });\n\n edge.exit().each(function(e) {\n e.deleted = true;\n }).transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.deleteDelay())\n .attr('opacity', 0)\n .each(function(e) {\n edgeArrow(e, 'head', null);\n edgeArrow(e, 'head', null);\n })\n .remove();\n\n if(_diagram.edgeSort()) {\n edge.sort(function(a, b) {\n var as = _diagram.edgeSort.eval(a), bs = _diagram.edgeSort.eval(b);\n return as < bs ? -1 : bs < as ? 1 : 0;\n });\n }\n\n // another wider copy of the edge just for hover events\n var edgeHover = _edgeLayer.selectAll('.edge-hover')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'edge-hover')\n .attr('opacity', 0)\n .attr('fill', 'none')\n .attr('stroke', 'green')\n .attr('stroke-width', 10)\n .on('mouseover', function(e) {\n d3.select('#' + _diagram.edgeId(e) + '-label')\n .attr('visibility', 'visible');\n })\n .on('mouseout', function(e) {\n d3.select('#' + _diagram.edgeId(e) + '-label')\n .attr('visibility', 'hidden');\n });\n edgeHover.exit().remove();\n\n var edgeLabels = _edgeLayer.selectAll('.edge-label')\n .data(wedges, _diagram.edgeKey.eval);\n var edgeLabelsEnter = edgeLabels.enter()\n .append('text')\n .attr('id', function(e) {\n return _diagram.edgeId(e) + '-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(e) {\n var id = _diagram.textpathId(e);\n // angular on firefox needs absolute paths for fragments\n return window.location.href.split('#')[0] + '#' + id;\n });\n var textPaths = _defs.selectAll('path.edge-label-path')\n .data(wedges, _diagram.textpathId);\n var textPathsEnter = textPaths.enter()\n .append('svg:path').attr({\n class: 'edge-label-path',\n id: _diagram.textpathId\n });\n edgeLabels.exit().transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.deleteDelay())\n .attr('opacity', 0).remove();\n\n // create node SVG elements\n var node = _nodeLayer.selectAll('.node')\n .data(wnodes, _diagram.nodeKey.eval);\n var nodeEnter = node.enter().append('g')\n .attr('class', 'node')\n .attr('opacity', '0') // don't show until has layout\n .each(function(n) {\n n.deleted = false;\n });\n // .call(_d3cola.drag);\n\n _diagram._enterNode(nodeEnter);\n\n node.exit().each(function(n) {\n n.deleted = true;\n }).transition()\n .duration(_diagram.stagedDuration())\n .delay(_diagram.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(_diagram.initialLayout())\n _diagram.initialLayout()(_diagram, wnodes, wedges);\n\n // no layout if the topology and layout parameters haven't changed\n var skip_layout = false;\n if(!_diagram.layoutUnchanged()) {\n var nodes_snapshot = JSON.stringify(wnodes.map(function(n) {\n return {orig: get_original(n), cola: {dcg_nodeFixed: n.cola.dcg_nodeFixed}};\n }));\n var edges_snapshot = JSON.stringify(wedges.map(function(e) {\n return {orig: get_original(e), cola: e.cola};\n }));\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 = _diagram.constrain()(_diagram, 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(_diagram.edgeIsLayout.eval);\n var nonlayout_edges = wedges.filter(function(x) {\n return !_diagram.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 || _diagram.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 _diagram.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(skip_layout) {\n _running = false;\n _dispatch.end(false);\n check_zoom(node, edge);\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 if(!n) {\n console.warn('received node \"' + rn.dcg_nodeKey + '\" that we did not send');\n return;\n }\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 if(!e) {\n console.warn('received edge \"' + re.dcg_edgeKey + '\" that we did not send');\n return;\n }\n if(re.points)\n e.cola.points = re.points;\n });\n }\n _diagram.layoutEngine()\n .on('tick', function(nodes, edges) {\n var elapsed = Date.now() - startTime;\n if(!_diagram.initialOnly())\n populate_cola(nodes, edges);\n if(_diagram.showLayoutSteps()) {\n init_node_ports(_nodes, wports);\n _dispatch.receivedLayout(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n propagate_port_positions(_nodes, wedges, _ports);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, true);\n draw_ports(node);\n // should do this only once\n _dispatch.transitionsStarted(node, edge, edgeHover);\n }\n if(_needsRedraw || _diagram.timeLimit() && elapsed > _diagram.timeLimit()) {\n console.log('cancelled');\n _diagram.layoutEngine().stop();\n }\n })\n .on('end', function(nodes, edges) {\n if(!_diagram.showLayoutSteps()) {\n if(!_diagram.initialOnly())\n populate_cola(nodes, edges);\n init_node_ports(_nodes, wports);\n _dispatch.receivedLayout(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n propagate_port_positions(_nodes, wedges, _ports);\n draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, true);\n draw_ports(node);\n _dispatch.transitionsStarted(node, edge, edgeHover);\n }\n else layout_done(true);\n check_zoom(node, edge);\n })\n .on('start', function() {\n console.log('algo ' + _diagram.layoutEngine().layoutAlgorithm() + ' started.');\n _dispatch.start();\n });\n\n if(_diagram.initialOnly())\n _diagram.layoutEngine().dispatch().end(wnodes, wedges);\n else {\n _dispatch.start(); // cola doesn't seem to fire this itself?\n _diagram.layoutEngine().data(\n { width: _diagram.width(), height: _diagram.height() },\n wnodes.map(function(v) { return v.cola; }),\n layout_edges.map(function(v) { return v.cola; }),\n constraints\n );\n _diagram.layoutEngine().start();\n }\n return this;\n };\n\n function check_zoom(node, edge) {\n var do_zoom, animate = true;\n switch(_diagram.autoZoom()) {\n case 'always-skipanimonce':\n animate = false;\n _diagram.autoZoom('always');\n case 'always':\n do_zoom = true;\n break;\n case 'once-noanim':\n animate = false;\n case 'once':\n do_zoom = true;\n _diagram.autoZoom(null);\n break;\n default:\n do_zoom = false;\n }\n calc_bounds(node, edge);\n if(do_zoom)\n auto_zoom(animate);\n }\n\n function norm(v) {\n var len = Math.hypot(v[0], v[1]);\n return [v[0]/len, v[1]/len];\n }\n function edge_vec(n, e) {\n var dy = e.target.cola.y - e.source.cola.y,\n dx = e.target.cola.x - e.source.cola.x;\n if(e.source !== n)\n dy = -dy, dx = -dx;\n if(e.parallel && e.parallel.edges.length > 1 && e.source.index > e.target.index)\n dy = -dy, dx = -dx;\n return norm([dx, dy]);\n }\n function init_node_ports(nodes, wports) {\n _nodePorts = {};\n // assemble port-lists for nodes, again because we don't have a metagraph.\n wports.forEach(function(p) {\n var nid = _diagram.nodeKey.eval(p.node);\n var np = _nodePorts[nid] = _nodePorts[nid] || [];\n np.push(p);\n });\n for(var nid in _nodePorts) {\n var n = nodes[nid],\n nports = _nodePorts[nid];\n // initial positions: use average of edge vectors, if any, or existing position\n nports.forEach(function(p) {\n if(_diagram.portElastic.eval(p) && p.edges.length) {\n var vecs = p.edges.map(edge_vec.bind(null, n));\n p.vec = [\n d3.sum(vecs, function(v) { return v[0]; })/vecs.length,\n d3.sum(vecs, function(v) { return v[1]; })/vecs.length\n ];\n } else p.vec = p.vec || undefined;\n p.pos = null;\n });\n }\n }\n function propagate_port_positions(nodes, wedges, ports) {\n // make sure we have projected vectors to positions\n for(var nid in _nodePorts) {\n var n = nodes[nid];\n _nodePorts[nid].forEach(function(p) {\n if(!p.pos)\n project_port(_diagram, n, p);\n });\n }\n\n // propagate port positions to edge endpoints\n wedges.forEach(function(e) {\n var name = _diagram.edgeSourcePortName.eval(e);\n e.sourcePort.pos = name ? ports[port_name(_diagram.nodeKey.eval(e.source), null, name)].pos :\n ports[port_name(null, _diagram.edgeKey.eval(e), 'source')].pos;\n name = _diagram.edgeTargetPortName.eval(e);\n e.targetPort.pos = name ? ports[port_name(_diagram.nodeKey.eval(e.target), null, name)].pos :\n ports[port_name(null, _diagram.edgeKey.eval(e), 'target')].pos;\n console.assert(e.sourcePort.pos && e.targetPort.pos);\n });\n }\n\n function _refresh(node, edge) {\n _diagram._updateEdge(edge);\n _diagram._updateNode(node);\n draw_ports(node);\n }\n\n _diagram.refresh = function(node, edge, edgeHover, edgeLabels, textPaths) {\n if(_animating)\n return this; // but what about changed attributes?\n node = node || _diagram.selectAllNodes();\n edge = edge || _diagram.selectAllEdges();\n _refresh(node, edge);\n\n edgeHover = edgeHover || _diagram.selectAllEdges('.edge-hover');\n edgeLabels = edgeLabels || _diagram.selectAllEdges('.edge-label');\n textPaths = textPaths || _diagram.selectAllDefs('path.edge-label-path');\n var nullSel = d3.select(null); // no enters\n draw(node, nullSel, edge, nullSel, edgeHover, nullSel, edgeLabels, nullSel, textPaths, nullSel, false);\n return this;\n };\n\n _diagram.requestRefresh = function(durationOverride) {\n window.requestAnimationFrame(function() {\n var transdur;\n if(durationOverride !== undefined) {\n transdur = _diagram.transitionDuration();\n _diagram.transitionDuration(durationOverride);\n }\n _diagram.refresh();\n if(durationOverride !== undefined)\n _diagram.transitionDuration(transdur);\n });\n };\n\n _diagram.reposition = function(node, edge) {\n node\n .attr('transform', function (n) {\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n });\n // reset edge ports\n edge.each(function(e) {\n e.pos.new = null;\n e.pos.old = null;\n calc_edge_path(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.pos.new.orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', function() {\n return e.pos.new.orienttail;\n });\n })\n .attr('d', render_edge_path('new'));\n return this;\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(!_diagram.isRunning()) // someone else may already have started\n _diagram.redraw();\n }, 0);\n }\n }\n\n function calculate_arrowhead_orientation(points, end) {\n var spos = points[0], tpos = points[points.length-1];\n var partial = bezier_point(points, end === 'tail' ? 0.25 : 0.75);\n return (end === 'head' ?\n Math.atan2(tpos.y - partial.y, tpos.x - partial.x) :\n Math.atan2(spos.y - partial.y, spos.x - partial.x)) + 'rad';\n }\n\n function enforce_path_direction(path, spos, tpos) {\n var points = path.points, first = points[0], last = points[points.length-1];\n switch(_diagram.enforceEdgeDirection()) {\n case 'LR':\n if(spos.x >= tpos.x) {\n var dx = first.x - last.x;\n return {\n points: [\n first,\n {x: first.x + dx, y: first.y - dx/2},\n {x: last.x - dx, y: last.y - dx/2},\n last\n ],\n bezDegree: 3,\n sourcePort: path.sourcePort,\n targetPort: path.targetPort\n };\n }\n break;\n case 'TB':\n if(spos.y >= tpos.y) {\n var dy = first.y - last.y;\n return {\n points: [\n first,\n {x: first.x + dy/2, y: first.y + dy},\n {x: last.x + dy/2, y: last.y - dy},\n last\n ],\n bezDegree: 3,\n sourcePort: path.sourcePort,\n targetPort: path.targetPort\n };\n }\n break;\n }\n return path;\n }\n function calc_edge_path(e, age, sx, sy, tx, ty) {\n var parallel = e.parallel;\n var source = e.source, target = e.target;\n if(parallel.edges.length > 1 && e.source.index > e.target.index) {\n var t;\n t = target; target = source; source = t;\n t = tx; tx = sx; sx = t;\n t = ty; ty = sy; sy = t;\n }\n var source_padding = source.dcg_ry +\n _diagram.nodeStrokeWidth.eval(source) / 2,\n target_padding = target.dcg_ry +\n _diagram.nodeStrokeWidth.eval(target) / 2;\n for(var p = 0; p < parallel.edges.length; ++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 > 0 ? parallel.edges[p > 2 ? p - 2 : 0].pos[age].path : null;\n var path = draw_edge_to_shapes(_diagram, e, sx, sy, tx, ty,\n last, dir, _diagram.parallelEdgeOffset(),\n source_padding, target_padding\n );\n if(parallel.edges.length > 1 && parallel.rev[p])\n path.points.reverse();\n if(_diagram.enforceEdgeDirection())\n path = enforce_path_direction(path, source.cola, target.cola);\n parallel.edges[p].pos[age] = {\n path: path,\n orienthead: calculate_arrowhead_orientation(path.points, 'head'),\n orienttail: calculate_arrowhead_orientation(path.points, 'tail')\n };\n }\n }\n\n function render_edge_path(age) {\n return function(e) {\n var path = e.pos[age].path;\n return generate_path(path.points, path.bezDegree);\n };\n }\n\n function render_edge_label_path(age) {\n return function(e) {\n var path = e.pos[age].path;\n var points = path.points[path.points.length-1].x < path.points[0].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.pos.new.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((_diagram.fitStrategy() || _diagram.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(animate) {\n if(_diagram.fitStrategy()) {\n if(!_bounds)\n return;\n var vwidth = _bounds.right - _bounds.left, vheight = _bounds.bottom - _bounds.top,\n swidth = _diagram.width() - _diagram.margins().left - _diagram.margins().right,\n sheight = _diagram.height() - _diagram.margins().top - _diagram.margins().bottom;\n if(_diagram.DEBUG_BOUNDS)\n debug_bounds(_bounds);\n var fitS = _diagram.fitStrategy(), translate = [0,0], scale = 1;\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(fitS === 'zoom') {\n scale = _zoom.scale();\n translate = bring_in_bounds(_zoom.translate());\n }\n else\n throw new Error('unknown fitStrategy type ' + typeof fitS);\n\n _animateZoom = animate;\n _zoom.translate(translate).scale(scale).event(_svg);\n _animateZoom = false;\n }\n }\n\n // determine pre-transition orientation that won't spin a lot going to new orientation\n function unsurprising_orient(oldorient, neworient) {\n var oldang = +oldorient.slice(0, -3),\n newang = +neworient.slice(0, -3);\n if(Math.abs(oldang - newang) > Math.PI) {\n if(newang > oldang)\n oldang += 2*Math.PI;\n else oldang -= 2*Math.PI;\n }\n return oldang + 'rad';\n }\n\n function draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter, edgeLabels, edgeLabelsEnter, textPaths, textPathsEnter, animatePositions) {\n console.assert(edge.data().every(has_source_and_target));\n\n var nodeEntered = {};\n nodeEnter\n .each(function(n) {\n nodeEntered[_diagram.nodeKey.eval(n)] = true;\n })\n .attr('transform', function (n) {\n // start new nodes at their final position\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n });\n var ntrans = node\n .transition()\n .duration(_diagram.stagedDuration())\n .delay(function(n) {\n return _diagram.stagedDelay(nodeEntered[_diagram.nodeKey.eval(n)]);\n })\n .attr('opacity', _diagram.nodeOpacity.eval);\n if(animatePositions)\n ntrans\n .attr('transform', function (n) {\n return 'translate(' + n.cola.x + ',' + n.cola.y + ')';\n })\n .each('end.record', function(n) {\n n.prevX = n.cola.x;\n n.prevY = n.cola.y;\n });\n\n // recalculate edge positions\n edge.each(function(e) {\n e.pos.new = null;\n });\n edge.each(function(e) {\n if(e.cola.points) {\n e.pos.new = {\n path: {\n points: e.cola.points,\n bezDegree: 3\n },\n orienthead: calculate_arrowhead_orientation(e.cola.points, 'head'),\n orienttail: calculate_arrowhead_orientation(e.cola.points, 'tail')\n };\n }\n else {\n if(!e.pos.old)\n calc_edge_path(e, 'old', e.source.prevX || e.source.cola.x, e.source.prevY || e.source.cola.y,\n e.target.prevX || e.target.cola.x, e.target.prevY || e.target.cola.y);\n if(!e.pos.new)\n calc_edge_path(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n }\n if(e.pos.old) {\n if(e.pos.old.path.bezDegree !== e.pos.new.path.bezDegree ||\n e.pos.old.path.points.length !== e.pos.new.path.points.length) {\n console.log('old', e.pos.old.path.points.length, 'new', e.pos.new.path.points.length);\n if(is_one_segment(e.pos.old.path)) {\n e.pos.new.path.points = as_bezier3(e.pos.new.path);\n e.pos.old.path.points = split_bezier_n(as_bezier3(e.pos.old.path),\n (e.pos.new.path.points.length-1)/3);\n e.pos.old.path.bezDegree = e.pos.new.bezDegree = 3;\n }\n else if(is_one_segment(e.pos.new.path)) {\n e.pos.old.path.points = as_bezier3(e.pos.old.path);\n e.pos.new.path.points = split_bezier_n(as_bezier3(e.pos.new.path),\n (e.pos.old.path.points.length-1)/3);\n e.pos.old.path.bezDegree = e.pos.new.bezDegree = 3;\n }\n else console.warn(\"don't know how to interpolate two multi-segments\");\n }\n }\n else\n e.pos.old = e.pos.new;\n });\n\n var edgeEntered = {};\n edgeEnter\n .each(function(e) {\n edgeEntered[_diagram.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 = _diagram.stageTransitions() === 'modins' ? 'new' : 'old';\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', function() {\n return e.pos[age].orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', function() {\n return e.pos[age].orienttail;\n });\n })\n .attr('d', render_edge_path(_diagram.stageTransitions() === 'modins' ? 'new' : 'old'));\n\n var etrans = edge\n .each(function(e) {\n if(_diagram.edgeArrowhead.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'head'))\n .attr('orient', unsurprising_orient(e.pos.old.orienthead, e.pos.new.orienthead))\n .transition().duration(_diagram.stagedDuration())\n .delay(_diagram.stagedDelay(false))\n .attr('orient', function() {\n return e.pos.new.orienthead;\n });\n if(_diagram.edgeArrowtail.eval(e))\n d3.select('#' + _diagram.arrowId(e, 'tail'))\n .attr('orient', unsurprising_orient(e.pos.old.orienttail, e.pos.new.orienttail))\n .transition().duration(_diagram.stagedDuration())\n .delay(_diagram.stagedDelay(false))\n .attr('orient', function() {\n return e.pos.new.orienttail;\n });\n })\n .transition()\n .duration(_diagram.stagedDuration())\n .delay(function(e) {\n return _diagram.stagedDelay(edgeEntered[_diagram.edgeKey.eval(e)]);\n })\n .attr('opacity', _diagram.edgeOpacity.eval);\n if(animatePositions)\n etrans\n .attr('d', function(e) {\n var when = _diagram.stageTransitions() === 'insmod' &&\n edgeEntered[_diagram.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_path(when)(e);\n });\n edgeLabels\n .selectAll('textPath')\n .text(function(e){\n return _diagram.edgeLabel.eval(e);\n })\n .attr('opacity', _diagram.edgeOpacity.eval);\n textPathsEnter\n .attr('d', render_edge_label_path(_diagram.stageTransitions() === 'modins' ? 'new' : 'old'));\n var textTrans = textPaths.transition()\n .duration(_diagram.stagedDuration())\n .delay(function(e) {\n return _diagram.stagedDelay(edgeEntered[_diagram.edgeKey.eval(e)]);\n });\n if(animatePositions)\n textTrans\n .attr('d', function(e) {\n var when = _diagram.stageTransitions() === 'insmod' &&\n edgeEntered[_diagram.edgeKey.eval(e)] ? 'old' : 'new';\n return render_edge_label_path(when)(e);\n });\n if(_diagram.stageTransitions() === 'insmod' && animatePositions) {\n // inserted edges transition twice in insmod mode\n if(_diagram.stagedDuration() >= 50) {\n etrans = etrans.transition()\n .duration(_diagram.stagedDuration())\n .attr('d', render_edge_path('new'));\n textTrans = textTrans.transition()\n .duration(_diagram.stagedDuration())\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 _animating = true;\n if(!_diagram.showLayoutSteps())\n endall([ntrans, etrans, textTrans],\n function() {\n _animating = false;\n layout_done(true);\n });\n\n if(animatePositions)\n edgeHover.attr('d', render_edge_path('new'));\n\n edge.each(function(e) {\n e.pos.old = e.pos.new;\n });\n }\n\n _diagram.animating = function() {\n return _animating;\n };\n\n _diagram.selectNodePortsOfStyle = function(node, style) {\n return node.selectAll('g.port').filter(function(p) {\n return _diagram.portStyleName.eval(p) === style;\n });\n };\n\n function draw_ports(node) {\n if(!_nodePorts)\n return;\n _diagram.portStyle.enum().forEach(function(style) {\n var nodePorts2 = {};\n for(var nid in _nodePorts)\n nodePorts2[nid] = _nodePorts[nid].filter(function(p) {\n return _diagram.portStyleName.eval(p) === style;\n });\n var port = _diagram.selectNodePortsOfStyle(node, style);\n _diagram.portStyle(style).drawPorts(port, nodePorts2, node);\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. 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 _diagram.render = function () {\n if(_svg)\n _dispatch.reset();\n if(!_diagram.initLayoutOnRedraw())\n initLayout();\n _diagram.resetSvg();\n _g = _svg.append('g')\n .attr('class', 'draw');\n\n var layers = ['edge-layer', 'node-layer'];\n if(_diagram.edgesInFront())\n layers.reverse();\n _g.selectAll('g').data(layers)\n .enter().append('g')\n .attr('class', function(l) { return l; });\n _edgeLayer = _g.selectAll('g.edge-layer');\n _nodeLayer = _g.selectAll('g.node-layer');\n\n _dispatch.render();\n _diagram.redraw();\n return this;\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 _diagram.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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 _diagram.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 _diagram.select = function (s) {\n return _diagram.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 _diagram.selectAll = function (s) {\n return _diagram.root() ? _diagram.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. Gets or sets the x scale.\n * @method x\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.scale} [scale]\n * @return {d3.scale}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.x = property(null);\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. Gets or sets the y scale.\n * @method x\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.scale} [scale]\n * @return {d3.scale}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.y = property(null);\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 diagram. 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 _diagram.svg = function (_) {\n if (!arguments.length) {\n return _svg;\n }\n _svg = _;\n return _diagram;\n };\n\n /**\n * Returns the top `g` element for this specific diagram. This method is usually used to\n * retrieve the g element in order to overlay custom svg drawing\n * programatically. **Caution**: The root g element is usually generated internally, and\n * resetting it might produce unpredictable results.\n * @method g\n * @memberof dc_graph.diagram\n * @instance\n * @param {d3.selection} [selection]\n * @return {d3.selection}\n * @return {dc_graph.diagram}\n\n **/\n _diagram.g = function (_) {\n if (!arguments.length) {\n return _g;\n }\n _g = _;\n return _diagram;\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 _diagram.resetSvg = function () {\n if(_svg) {\n _svg.remove();\n _svg = null;\n }\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 _diagram.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 _diagram.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 * `diagram.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 * _diagram.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 _diagram.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 _diagram;\n };\n\n _diagram.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(e, kind, name) {\n var id = _diagram.arrowId(e, kind),\n markerEnter = _diagram.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*_diagram.edgeArrowSize.eval(e))\n .attr('markerHeight', _arrows[name].height*_diagram.edgeArrowSize.eval(e))\n .attr('stroke', _diagram.edgeStroke.eval(e))\n .attr('fill', _diagram.edgeStroke.eval(e))\n .call(_arrows[name].drawFunction);\n }\n return name ? id : null;\n }\n\n function globalTransform(pos, scale, animate) {\n _translate = pos;\n _scale = scale;\n var obj = _g;\n if(animate)\n obj = _g.transition().duration(_diagram.zoomDuration());\n obj.attr('transform', 'translate(' + pos + ')' + ' scale(' + scale + ')');\n }\n\n function margined_bounds() {\n var bounds = _bounds || {left: 0, top: 0, right: 0, bottom: 0};\n var scale = _zoom ? _zoom.scale() : 1;\n return {\n left: bounds.left - _diagram.margins().left/scale,\n top: bounds.top - _diagram.margins().top/scale,\n right: bounds.right + _diagram.margins().right/scale,\n bottom: bounds.bottom + _diagram.margins().bottom/scale\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] - _diagram.x()(x) + _diagram.x().range()[0];\n }\n function align_top(translate, y) {\n return translate[1] - _diagram.y()(y) + _diagram.y().range()[0];\n }\n function align_right(translate, x) {\n return translate[0] - _diagram.x()(x) + _diagram.x().range()[1];\n }\n function align_bottom(translate, y) {\n return translate[1] - _diagram.y()(y) + _diagram.y().range()[1];;\n }\n\n function bring_in_bounds(translate) {\n var xDomain = _diagram.x().domain(), yDomain = _diagram.y().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 return translate;\n\n }\n function doZoom() {\n var translate, scale = d3.event.scale;\n if(_diagram.restrictPan())\n _zoom.translate(translate = bring_in_bounds(d3.event.translate));\n else translate = d3.event.translate;\n globalTransform(translate, scale, _animateZoom);\n _dispatch.zoomed(translate, scale);\n }\n\n _diagram.resizeSvg = function(w, h) {\n if(_svg) {\n _svg.attr('width', w || (_width === 'auto' ? '100%' : _diagram.width()))\n .attr('height', h || (_height === 'auto' ? '100%' : _diagram.height()));\n }\n return _diagram;\n };\n\n function enableZoom() {\n _svg.call(_zoom);\n _svg.on('dblclick.zoom', null);\n }\n function disableZoom() {\n _svg.on('.zoom', null);\n }\n\n function generateSvg() {\n _svg = _diagram.root().append('svg');\n _diagram.resizeSvg();\n\n _defs = _svg.append('svg:defs');\n\n // start out with 1:1 zoom\n if(!_diagram.x())\n _diagram.x(d3.scale.linear()\n .domain([0, _diagram.width()])\n .range([0, _diagram.width()]));\n if(!_diagram.y())\n _diagram.y(d3.scale.linear()\n .domain([0, _diagram.height()])\n .range([0, _diagram.height()]));\n _zoom = d3.behavior.zoom()\n .on('zoom', doZoom)\n .x(_diagram.x()).y(_diagram.y())\n .scaleExtent(_diagram.zoomExtent());\n if(_diagram.mouseZoomable()) {\n var mod, mods;\n var brush = _diagram.child('brush');\n if((mod = _diagram.modKeyZoom())) {\n if (Array.isArray (mod))\n mods = mod.slice ();\n else if (typeof mod === \"string\")\n mods = [mod];\n else\n mods = ['Alt'];\n var mouseDown = false, modDown = false, zoomEnabled = false;\n _svg.on('mousedown.modkey-zoom', function() {\n mouseDown = true;\n }).on('mouseup.modkey-zoom', function() {\n mouseDown = false;\n if(!mouseDown && !modDown && zoomEnabled) {\n zoomEnabled = false;\n disableZoom();\n if(brush)\n brush.activate();\n }\n });\n d3.select(document)\n .on('keydown.modkey-zoom', function() {\n if(mods.indexOf (d3.event.key) > -1) {\n modDown = true;\n if(!mouseDown) {\n zoomEnabled = true;\n enableZoom();\n if(brush)\n brush.deactivate();\n }\n }\n })\n .on('keyup.modkey-zoom', function() {\n if(mods.indexOf (d3.event.key) > -1) {\n modDown = false;\n if(!mouseDown) {\n zoomEnabled = false;\n disableZoom();\n if(brush)\n brush.activate();\n }\n }\n });\n }\n else enableZoom();\n }\n\n return _svg;\n }\n\n _diagram.invertCoord = function(clientCoord) {\n return [\n _diagram.x().invert(clientCoord[0]),\n _diagram.y().invert(clientCoord[1])\n ];\n };\n\n _diagram.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 _diagram.defineArrow('crow', 12, 12, 0, 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 _diagram.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 diagram initialization, but be called again to relocate the diagram. 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 _diagram.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 _diagram.root(d3.select(_anchor));\n _diagram.root().classed(dc_graph.constants.CHART_CLASS, true);\n dc.registerChart(_diagram, chartGroup);\n } else {\n throw new dc.errors.BadArgumentException('parent must be defined');\n }\n _chartGroup = chartGroup;\n return _diagram;\n };\n\n /**\n * Returns the internal numeric ID of the chart.\n * @method chartID\n * @memberof dc.baseMixin\n * @instance\n * @returns {String}\n */\n _diagram.chartID = function () {\n return _diagram.__dcFlag__;\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 _diagram.anchorName = function () {\n var a = _diagram.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' + _diagram.chartID();\n };\n\n return _diagram.anchor(parent, chartGroup);\n};\n","dc_graph.spawn_engine = function(layout, args, worker) {\n args = args || {};\n worker = worker && !!window.Worker;\n var engine = dc_graph.engines.instantiate(layout, args, worker);\n if(!engine) {\n console.warn('layout engine ' + layout + ' not found; using default ' + dc_graph._default_engine);\n engine = dc_graph.engines.instantiate(dc_graph._default_engine, args, worker);\n }\n return engine;\n};\n\ndc_graph._engines = [\n {\n name: 'dagre',\n params: ['rankdir'],\n instantiate: function() {\n return dc_graph.dagre_layout();\n }\n },\n {\n name: 'd3force',\n instantiate: function() {\n return dc_graph.d3_force_layout();\n }\n },\n {\n name: 'd3v4force',\n instantiate: function() {\n return dc_graph.d3v4_force_layout();\n }\n },\n {\n name: 'tree',\n instantiate: function() {\n return dc_graph.tree_layout();\n }\n },\n {\n names: ['circo', 'dot', 'neato', 'osage', 'twopi', 'fdp'],\n instantiate: function(layout, args) {\n return dc_graph.graphviz_layout(null, layout, args.server);\n }\n },\n {\n name: 'cola',\n params: ['lengthStrategy'],\n instantiate: function() {\n return dc_graph.cola_layout();\n }\n }\n];\ndc_graph._default_engine = 'cola';\n\ndc_graph.engines = {\n entry_pred: function(layoutName) {\n return function(e) {\n return e.name && e.name === layoutName || e.names && e.names.includes(layoutName);\n };\n },\n get: function(layoutName) {\n return dc_graph._engines.find(this.entry_pred(layoutName));\n },\n instantiate: function(layout, args, worker) {\n var entry = this.get(layout);\n if(!entry)\n return null;\n var engine = entry.instantiate(layout, args),\n params = entry.params || [];\n params.forEach(function(p) {\n if(args[p])\n engine[p](args[p]);\n });\n if(engine.supportsWebworker && engine.supportsWebworker() && worker)\n engine = dc_graph.webworker_layout(engine);\n return engine;\n },\n available: function() {\n return dc_graph._engines.reduce(function(avail, entry) {\n return avail.concat(entry.name ? [entry.name] : entry.names);\n }, []);\n },\n unregister: function(layoutName) {\n // meh. this is a bit much. there is such a thing as making the api too \"easy\".\n var i = dc_graph._engines.findIndex(this.entry_pred(layoutName));\n var remove = false;\n if(i < 0)\n return false;\n var entry = dc_graph._engines[i];\n if(entry.name === layoutName)\n remove = true;\n else {\n var j = entry.names.indexOf(layoutName);\n if(j >= 0)\n entry.names.splice(j, 1);\n else\n console.warn('search for engine failed', layoutName);\n if(entry.names.length === 0)\n remove = true;\n }\n if(remove)\n dc_graph._engines.splice(i, 1);\n return true;\n },\n register: function(entry) {\n var that = this;\n if(!entry.instantiate) {\n console.error('engine definition needs instantiate: function(layout, args) { ... }');\n return this;\n }\n if(entry.name)\n this.unregister(entry.name);\n else if(entry.names)\n entry.names.forEach(function(layoutName) {\n that.unregister(layoutName);\n });\n else {\n console.error('engine definition needs name or names[]');\n return this;\n }\n dc_graph._engines.push(entry);\n return this;\n }\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(graph, nodes, edges, constraints) {\n _worker.worker.postMessage({\n command: 'data',\n args: {\n layoutId: layoutEngine.layoutId(),\n graph: graph,\n nodes: nodes,\n edges: edges,\n constraints: constraints\n }\n });\n };\n engine.start = function() {\n _worker.worker.postMessage({\n command: 'start',\n args: {\n layoutId: layoutEngine.layoutId()\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', 'needsStage',\n 'populateLayoutNode', 'populateLayoutEdge', 'rankdir', 'ranksep'];\n passthroughs.concat(layoutEngine.optionNames()).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 if(arguments.length === 1)\n return _dispatch.on(event);\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.\n *\n * these 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 nodes in the same rank.\n * @method nodesep\n * @memberof dc_graph.graphviz_attrs\n * @instance\n * @param {String} [nodesep=40]\n **/\n nodesep: property(40),\n /**\n * Spacing in between ranks.\n * @method ranksep\n * @memberof dc_graph.graphviz_attrs\n * @instance\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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.dcg_nodeFixed;\n\n if(v1.fixed && typeof v.dcg_nodeFixed === 'object') {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_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, null, 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(engine.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() {\n _d3cola.start(engine.unconstrainedIterations(),\n engine.userConstraintIterations(),\n engine.allConstraintsIterations(),\n engine.gridSnapIterations());\n }\n\n function stop() {\n if(_d3cola)\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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout', 'tickSize', 'groupConnected']\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 * diagram.flowLayout(null)\n * // flow in x with min separation 200\n * diagram.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 switch(dir) {\n case 'LR': return {axis: 'x', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n case 'TB': return {axis: 'y', minSeparation: engine.ranksep() + engine.parent().nodeRadius()*2};\n default: return null; // RL, BT do not appear to be possible (negative separation) (?)\n }\n }\n _flowLayout = flow;\n return this;\n },\n unconstrainedIterations: property(10),\n userConstraintIterations: property(20),\n allConstraintsIterations: property(20),\n gridSnapIterations: property(0),\n tickSize: property(1),\n groupConnected: property(false)\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, nodesep: options.nodesep, ranksep: options.ranksep});\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) {\n var wnodes = regenerate_objects(_nodes, nodes, null, 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 /*\n dagre does not seem to accept input positions\n if(v.dcg_nodeFixed) {\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n }\n */\n }, function(k, o) {\n _dagreGraph.setNode(k, o);\n }, function(k) {\n _dagreGraph.removeNode(k);\n });\n var wedges = regenerate_objects(_edges, edges, null, 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 supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n start: function() {\n start();\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 encode_name(e.dcg_edgeTarget) + '\" ' + stringize_properties([\n stringize_property('id', encode_name(e.dcg_edgeKey)),\n stringize_property('arrowhead', 'none'),\n stringize_property('arrowtail', 'none')\n ]);\n }));\n lines.push('}');\n lines.push('');\n _dotString = lines.join('\\n');\n }\n\n function process_response(error, result) {\n _dispatch.start();\n var bb = result.bb.split(',').map(function(x) { return +x; });\n var nodes = (result.objects || []).filter(function(n) {\n return n.pos; // remove non-nodes like clusters\n }).map(function(n) {\n var pos = n.pos.split(',');\n return {\n dcg_nodeKey: decode_name(n.name),\n x: +pos[0],\n y: bb[3] - pos[1]\n };\n });\n _clusters = (result.objects || []).filter(function(n) {\n return /^cluster/.test(n.name);\n });\n _clusters.forEach(function(c) {\n // annotate with flipped cluster coords for convenience\n c.bbflip = c.bb.split(',').map(function(s) { return +s; });\n var t = bb[3] - c.bbflip[1];\n c.bbflip[1] = bb[3] - c.bbflip[3];\n c.bbflip[3] = t;\n });\n var edges = (result.edges || []).map(function(e) {\n var e2 = {\n dcg_edgeKey: decode_name(e.id || 'n' + e._gvid)\n };\n if(e._draw_) {\n var directive = e._draw_.find(function(d) { return d.op && d.points; });\n e2.points = directive.points.map(function(p) { return {x: p[0], y: bb[3] - p[1]}; });\n }\n return e2;\n });\n _dispatch.end(nodes, edges);\n }\n\n function start() {\n if(server) {\n d3.json(server)\n .header(\"Content-type\", \"application/x-www-form-urlencoded\")\n .post('layouttool=' + layout + '&' + encodeURIComponent(_dotString), process_response);\n }\n else {\n var result = Viz(_dotString, {format: 'json', engine: layout, totalMemory: 1 << 25});\n result = JSON.parse(result);\n process_response(null, result);\n }\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 layout;\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return false;\n },\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes, edges);\n },\n dotInput: function(text) {\n _dotInput = text;\n return this;\n },\n clusters: function() {\n // filter out clusters and return them separately, because dc.graph doesn't know how to draw them\n return _clusters;\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return graphviz_keys;\n },\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n}\n\n","/**\n * `dc_graph.d3_force_layout` is an adaptor for d3-force layouts in dc.graph.js\n * @class d3_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3_force_layout}\n **/\ndc_graph.d3_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3.layout.force()\n .size([options.width, options.height]);\n\n _simulation.on('tick', /* _tick = */ function() {\n dispatchState('tick');\n }).on('start', function() {\n _dispatch.start();\n }).on('end', /* _done = */ function() {\n dispatchState('end');\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fixed = true;\n v1.x = v.dcg_nodeFixed.x;\n v1.y = v.dcg_nodeFixed.y;\n } else v1.fixed = false;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, 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.source.id = nodeIDs[e1.source.dcg_nodeKey];\n e1.target = _nodes[e.dcg_edgeTarget];\n e1.target.id = nodeIDs[e1.target.dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.nodes(_wnodes);\n _simulation.links(_wedges);\n }\n\n function start() {\n installForces();\n runSimulation(_options.iterations);\n }\n\n function stop() {\n if(_simulation)\n _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fixed = false;\n _nodes[key].x = data[key].x;\n _nodes[key].y = data[key].y;\n }\n });\n }\n\n function installForces() {\n if(_paths === null)\n _simulation.gravity(_options.gravityStrength)\n .charge(_options.initialCharge);\n else {\n if(_options.fixOffPathNodes) {\n var nodesOnPath = d3.set(); // nodes on path\n _paths.forEach(function(path) {\n path.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(!nodesOnPath.has(key)) {\n _nodes[key].fixed = true;\n } else {\n _nodes[key].fixed = false;\n }\n });\n }\n\n // enlarge charge force to separate nodes on paths\n _simulation.charge(_options.chargeForce);\n }\n };\n\n function runSimulation(iterations) {\n if(!iterations) {\n dispatchState('end');\n return;\n }\n _simulation.start();\n for (var i = 0; i < 300; ++i) {\n _simulation.tick();\n if(_paths)\n applyPathAngleForces();\n }\n _simulation.stop();\n }\n\n function applyPathAngleForces() {\n function _dot(v1, v2) { return v1.x*v2.x + v1.y*v2.y; };\n function _len(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n function _angle(v1, v2) {\n var a = _dot(v1, v2) / (_len(v1)*_len(v2));\n a = Math.min(a, 1);\n a = Math.max(a, -1);\n return Math.acos(a);\n };\n // perpendicular unit length vector\n function _pVec(v) {\n var xx = -v.y/v.x, yy = 1;\n var length = _len({x: xx, y: yy});\n return {x: xx/length, y: yy/length};\n };\n\n function updateNode(node, angle, pVec, alpha) {\n node.x += pVec.x*(Math.PI-angle)*alpha;\n node.y += pVec.y*(Math.PI-angle)*alpha;\n }\n\n _paths.forEach(function(path) {\n if(path.length < 3) return; // at least 3 nodes (and 2 edges): A->B->C\n for(var i = 1; i < path.length-1; ++i) {\n var current = _nodes[path[i]];\n var prev = _nodes[path[i-1]];\n var next = _nodes[path[i+1]];\n\n // calculate the angle\n var vPrev = {x: prev.x - current.x, y: prev.y - current.y};\n var vNext = {x: next.x - current.x, y: next.y - current.y};\n\n var angle = _angle(vPrev, vNext); // angle in [0, PI]\n\n var pvecPrev = _pVec(vPrev);\n var pvecNext = _pVec(vNext);\n\n // make sure the perpendicular vector is in the\n // direction that makes the angle more towards 180 degree\n // 1. calculate the middle point of node 'prev' and 'next'\n var mid = {x: (prev.x+next.x)/2.0, y: (prev.y+next.y)/2.0};\n // 2. calculate the vectors: 'prev' pointing to 'mid', 'next' pointing to 'mid'\n var prev_mid = {x: mid.x-prev.x, y: mid.y-prev.y};\n var next_mid = {x: mid.x-next.x, y: mid.y-next.y};\n // 3. the 'correct' vector: the angle between pvec and prev_mid(next_mid) should\n // be an obtuse angle\n pvecPrev = _angle(prev_mid, pvecPrev) >= Math.PI/2.0 ? pvecPrev : {x: -pvecPrev.x, y: -pvecPrev.y};\n pvecNext = _angle(next_mid, pvecNext) >= Math.PI/2.0 ? pvecNext : {x: -pvecNext.x, y: -pvecNext.y};\n\n // modify positions of prev and next\n updateNode(prev, angle, pvecPrev, _options.angleForce);\n updateNode(next, angle, pvecNext, _options.angleForce);\n }\n\n });\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.02),\n chargeForce: property(-500),\n gravityStrength: property(1.0),\n initialCharge: property(-400),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n return engine;\n};\n\ndc_graph.d3_force_layout.scripts = ['d3.js'];\n","/**\n * `dc_graph.d3v4_force_layout` is an adaptor for d3-force version 4 layouts in dc.graph.js\n * @class d3v4_force_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.d3v4_force_layout}\n **/\ndc_graph.d3v4_force_layout = function(id) {\n var _layoutId = id || uuid();\n var _simulation = null; // d3-force simulation\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n // node and edge objects shared with d3-force, preserved from one iteration\n // to the next (as long as the object is still in the layout)\n var _nodes = {}, _edges = {};\n var _wnodes = [], _wedges = [];\n var _options = null;\n var _paths = null;\n\n function init(options) {\n _options = options;\n\n _simulation = d3v4.forceSimulation()\n .force('link', d3v4.forceLink())\n .force('center', d3v4.forceCenter(options.width / 2, options.height / 2))\n .force('gravityX', d3v4.forceX(options.width / 2).strength(_options.gravityStrength))\n .force('gravityY', d3v4.forceY(options.height / 2).strength(_options.gravityStrength))\n .force('collision', d3v4.forceCollide(_options.collisionRadius))\n .force('charge', d3v4.forceManyBody())\n .stop();\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\n function data(nodes, edges, constraints) {\n var nodeIDs = {};\n nodes.forEach(function(d, i) {\n nodeIDs[d.dcg_nodeKey] = i;\n });\n\n _wnodes = regenerate_objects(_nodes, nodes, null, 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.id = v.dcg_nodeKey;\n if(v.dcg_nodeFixed) {\n v1.fx = v.dcg_nodeFixed.x;\n v1.fy = v.dcg_nodeFixed.y;\n } else v1.fx = v1.fy = null;\n });\n\n _wedges = regenerate_objects(_edges, edges, null, function(e) {\n return e.dcg_edgeKey;\n }, function(e1, e) {\n e1.dcg_edgeKey = e.dcg_edgeKey;\n e1.source = nodeIDs[_nodes[e.dcg_edgeSource].dcg_nodeKey];\n e1.target = nodeIDs[_nodes[e.dcg_edgeTarget].dcg_nodeKey];\n e1.dcg_edgeLength = e.dcg_edgeLength;\n });\n\n _simulation.force('straighten', null);\n _simulation.nodes(_wnodes);\n _simulation.force('link').links(_wedges);\n }\n\n function start() {\n _dispatch.start();\n installForces(_paths);\n runSimulation(_options.iterations);\n }\n\n function stop() {\n // not running asynchronously, no _simulation.stop();\n }\n\n function savePositions() {\n var data = {};\n Object.keys(_nodes).forEach(function(key) {\n data[key] = {x: _nodes[key].x, y: _nodes[key].y};\n });\n return data;\n }\n function restorePositions(data) {\n Object.keys(data).forEach(function(key) {\n if(_nodes[key]) {\n _nodes[key].fx = data[key].x;\n _nodes[key].fy = data[key].y;\n }\n });\n }\n function installForces(paths) {\n if(paths)\n paths = paths.filter(function(path) {\n return path.nodes.every(function(nk) { return _nodes[nk]; });\n });\n if(paths === null || !paths.length) {\n _simulation.force('charge').strength(_options.initialCharge);\n } else {\n var nodesOnPath;\n if(_options.fixOffPathNodes) {\n nodesOnPath = d3.set();\n paths.forEach(function(path) {\n path.nodes.forEach(function(nid) {\n nodesOnPath.add(nid);\n });\n });\n }\n\n // fix nodes not on paths\n Object.keys(_nodes).forEach(function(key) {\n if(_options.fixOffPathNodes && !nodesOnPath.has(key)) {\n _nodes[key].fx = _nodes[key].x;\n _nodes[key].fy = _nodes[key].y;\n } else {\n _nodes[key].fx = null;\n _nodes[key].fy = null;\n }\n });\n\n _simulation.force('charge').strength(_options.chargeForce);\n _simulation.force('straighten', d3v4.forceStraightenPaths()\n .id(function(n) { return n.dcg_nodeKey; })\n .angleForce(_options.angleForce)\n .pathNodes(function(p) { return p.nodes; })\n .pathStrength(function(p) { return p.strength; })\n .paths(paths));\n }\n };\n\n function runSimulation(iterations) {\n _simulation.alpha(1);\n for (var i = 0; i < iterations; ++i) {\n _simulation.tick();\n dispatchState('tick');\n }\n dispatchState('end');\n }\n\n var graphviz = dc_graph.graphviz_attrs(), graphviz_keys = Object.keys(graphviz);\n\n var engine = Object.assign(graphviz, {\n layoutAlgorithm: function() {\n return 'd3v4-force';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges, constraints) {\n data(nodes, edges, constraints);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n paths: function(paths) {\n _paths = paths;\n },\n savePositions: savePositions,\n restorePositions: restorePositions,\n optionNames: function() {\n return ['iterations', 'angleForce', 'chargeForce', 'gravityStrength', 'collisionRadius',\n 'initialCharge', 'fixOffPathNodes']\n .concat(graphviz_keys);\n },\n iterations: property(300),\n angleForce: property(0.01),\n chargeForce: property(-600),\n gravityStrength: property(0.3),\n collisionRadius: property(8),\n initialCharge: property(-100),\n fixOffPathNodes: property(false),\n populateLayoutNode: function() {},\n populateLayoutEdge: function() {}\n });\n engine.pathStraightenForce = engine.angleForce;\n return engine;\n};\n\ndc_graph.d3v4_force_layout.scripts = ['d3.js', 'd3v4-force.js'];\n","dc_graph.flexbox_layout = function(id) {\n var _layoutId = id || uuid();\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n\n var _graph, _tree, _nodes = {}, _wnodes;\n\n function init(options) {\n }\n // like d3.nest but address can be of arbitrary (and different) length\n // probably less efficient too\n function add_node(adhead, adtail, n, tree) {\n tree.address = adhead.slice();\n tree.children = tree.children || {};\n if(!adtail.length) {\n tree.node = n;\n return;\n }\n var t = tree.children[adtail[0]] = tree.children[adtail[0]] || {};\n adhead.push(adtail.shift());\n add_node(adhead, adtail, n, t);\n }\n function all_keys(tree) {\n var key = _engine.addressToKey()(tree.address);\n return Array.prototype.concat.apply([key], Object.keys(tree.children).map(function(k) {\n return all_keys(tree.children[k]);\n }));\n }\n function data(graph, nodes) {\n _graph = graph;\n _tree = {};\n nodes.forEach(function(n) {\n var ad = _engine.keyToAddress()(n.dcg_nodeKey);\n add_node([], ad, n, _tree);\n });\n var need = all_keys(_tree);\n _wnodes = nodes;\n }\n var internal_attrs = ['sort', 'dcg_nodeKey', 'x', 'y'],\n skip_on_parents = ['width', 'height'];\n function create_flextree(attrs, tree) {\n var flexnode = {name: _engine.addressToKey()(tree.address), style: {}};\n var attrs2 = Object.assign({}, attrs);\n var isParent = Object.keys(tree.children).length;\n if(tree.node)\n Object.assign(attrs, tree.node);\n for(var attr in attrs) {\n if(internal_attrs.includes(attr))\n continue;\n if(isParent && skip_on_parents.includes(attr))\n continue;\n var value = attrs[attr];\n if(typeof value === 'function')\n value = value(tree.node);\n flexnode.style[attr] = value;\n }\n if(isParent) {\n flexnode.children = Object.values(tree.children)\n .sort(attrs.sort)\n .map(function(c) { return c.address[c.address.length-1]; })\n .map(function(key) {\n return create_flextree(Object.assign({}, attrs2), tree.children[key]);\n });\n }\n tree.flexnode = flexnode;\n return flexnode;\n }\n function apply_layout(offset, tree) {\n if(_engine.logStuff())\n console.log(tree.node.dcg_nodeKey + ': '+ JSON.stringify(tree.flexnode.layout));\n tree.node.x = offset.x + tree.flexnode.layout.left + tree.flexnode.layout.width/2;\n tree.node.y = offset.y + tree.flexnode.layout.top + tree.flexnode.layout.height/2;\n Object.keys(tree.children)\n .map(function(key) { return tree.children[key]; })\n .forEach(function(child) {\n apply_layout({x: offset.x + tree.flexnode.layout.left, y: offset.y + tree.flexnode.layout.top}, child);\n });\n }\n function dispatchState(wnodes, wedges, event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n function start() {\n var defaults = {\n sort: function(a, b) {\n return d3.ascending(a.node.dcg_nodeKey, b.node.dcg_nodeKey);\n }\n };\n var flexTree = create_flextree(defaults, _tree);\n flexTree.style.width = _graph.width;\n flexTree.style.height = _graph.height;\n if(_engine.logStuff())\n console.log(JSON.stringify(flexTree, null, 2));\n computeLayout(flexTree);\n apply_layout({x: 0, y: 0}, _tree);\n dispatchState(_wnodes, [], 'end');\n }\n function stop() {\n }\n\n // currently dc.graph populates the \"cola\" (really \"layout\") member with the attributes\n // needed for layout and does not pass in the original data. flexbox has a huge number of attributes\n // and it might be more appropriate for it to look at the original data.\n // (Especially because it also computes some attributes based on data.)\n var supportedAttributes = [\n 'width', 'height', // positive number\n 'minWidth', 'minHeight', // positive number\n 'maxWidth', 'maxHeight', // positive number\n 'left', 'right', 'top', 'bottom', // number\n 'margin', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom', // number\n 'padding', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', // positive number\n 'borderWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'borderBottomWidth', // positive number\n 'flexDirection', // 'column', 'row'\n 'justifyContent', // 'flex-start', 'center', 'flex-end', 'space-between', 'space-around'\n 'alignItems', 'alignSelf', // 'flex-start', 'center', 'flex-end', 'stretch'\n 'flex', // positive number\n 'flexWrap', // 'wrap', 'nowrap'\n 'position' // 'relative', 'absolute'\n ];\n\n var _engine = {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes) {\n data(graph, nodes);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return [];\n },\n populateLayoutNode: function(n1, n) {\n ['sort', 'order'].concat(supportedAttributes).forEach(function(attr) {\n if(n.orig.value[attr])\n n1[attr] = n.orig.value[attr];\n });\n },\n populateLayoutEdge: function() {},\n addressToKey: property(function(ad) { return ad.join(','); }),\n keyToAddress: property(function(nid) { return nid.split(','); }),\n logStuff: property(false)\n };\n return _engine;\n};\n\ndc_graph.flexbox_layout.scripts = ['css-layout.js'];\n","dc_graph.manual_layout = function(id) {\n var _layoutId = id || uuid();\n var _dispatch = d3.dispatch('tick', 'start', 'end');\n\n var _wnodes;\n\n function init(options) {\n }\n function data(nodes) {\n _wnodes = nodes;\n }\n function dispatchState(wnodes, wedges, event) {\n _dispatch[event](\n wnodes,\n wedges.map(function(e) {\n return {dcg_edgeKey: e.dcg_edgeKey};\n })\n );\n }\n function start() {\n dispatchState(_wnodes, [], 'end');\n }\n function stop() {\n }\n\n var _engine = {\n layoutAlgorithm: function() {\n return 'cola';\n },\n layoutId: function() {\n return _layoutId;\n },\n supportsWebworker: function() {\n return true;\n },\n needsStage: function(stage) { // stopgap until we have engine chaining\n return stage === 'ports' || stage === 'edgepos';\n },\n parent: property(null),\n on: function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\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(graph, nodes, edges) {\n data(nodes);\n },\n start: function() {\n start();\n },\n stop: function() {\n stop();\n },\n optionNames: function() {\n return [];\n },\n populateLayoutNode: function(n1, n) {\n ['x', 'y'].forEach(function(attr) {\n if(n.orig.value[attr] !== undefined)\n n1[attr] = n.orig.value[attr];\n });\n },\n populateLayoutEdge: function() {},\n addressToKey: property(function(ad) { return ad.join(','); }),\n keyToAddress: property(function(nid) { return nid.split(','); })\n };\n return _engine;\n};\n\ndc_graph.manual_layout.scripts = ['css-layout.js'];\n","function port_name(nodeId, edgeId, portName) {\n if(!(nodeId || edgeId))\n return null; // must have one key or the other\n if(nodeId) nodeId = nodeId.replace(/\\//g, '%2F');\n if(edgeId) edgeId = edgeId.replace(/\\//g, '%2F');\n return (nodeId ? 'node/' + nodeId : 'edge/' + edgeId) + '/' + portName;\n};\nfunction split_port_name(portname) {\n var parts = portname.split('/');\n console.assert(parts.length === 3);\n parts = parts.map(function(p) {\n return p.replace(/%2F/g, '/');\n });\n if(parts[0] === 'node')\n return {\n nodeKey: parts[1],\n name: parts[2]\n };\n else return {\n edgeKey: parts[1],\n name: parts[2]\n };\n}\nfunction project_port(diagram, n, p) {\n if(!p.vec) {\n console.assert(!p.edges.length);\n throw new Error(\"port has not been placed, maybe install place_ports? \" + p.name);\n }\n p.pos = diagram.shape(n.dcg_shape.shape).intersect_vec(n, p.vec[0]*1000, p.vec[1]*1000);\n}\n\ndc_graph.place_ports = function() {\n function received_layout(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n var node_ports = diagram.nodePorts();\n\n function is_ccw(u, v) {\n return u[0]*v[1] - u[1]*v[0] > 0;\n }\n function in_bounds(v, bounds) {\n // assume bounds are ccw\n return is_ccw(bounds[0], v) && is_ccw(v, bounds[1]);\n }\n function clip(v, bounds) {\n if(is_ccw(v, bounds[0]))\n return bounds[0];\n else if(is_ccw(bounds[1], v))\n return bounds[1];\n else return v;\n }\n function a_to_v(a) {\n return [Math.cos(a), Math.sin(a)];\n }\n function v_to_a(v) {\n return Math.atan2(v[1], v[0]);\n }\n function distance(p, p2) {\n return Math.hypot(p2.pos.x - p.pos.x, p2.pos.y - p.pos.y);\n }\n function misses(p, p2) {\n var dist = distance(p, p2);\n var misses = dist > _behavior.minDistance();\n return misses;\n }\n function rand_within(a, b) {\n return a + Math.random()*(b-a);\n }\n // calculate port positions\n for(var nid in node_ports) {\n var n = nodes[nid],\n nports = node_ports[nid];\n\n // make sure that we have vector and angle bounds for any ports with specification\n nports.forEach(function(p) {\n var bounds = p.orig && diagram.portBounds.eval(p) || [0, 2*Math.PI];\n if(Array.isArray(bounds[0])) {\n p.vbounds = bounds;\n p.abounds = bounds.map(v_to_a);\n }\n else {\n p.vbounds = bounds.map(a_to_v);\n p.abounds = bounds;\n }\n if(p.abounds[0] > p.abounds[1])\n p.abounds[1] += 2*Math.PI;\n console.assert(p.orig || p.vec, 'unplaced unspecified port');\n });\n\n // determine which ports satisfy bounds or are unplaced\n var inside = [], outside = [], unplaced = [];\n nports.forEach(function(p) {\n if(!p.vec)\n unplaced.push(p);\n else if(p.vbounds && !in_bounds(p.vec, p.vbounds))\n outside.push(p);\n else\n inside.push(p);\n });\n\n // shunt outside ports into their bounds\n outside.forEach(function(p) {\n p.vec = clip(p.vec, p.vbounds);\n inside.push(p);\n });\n\n // for all unplaced ports that share a bounds, evenly distribute them within those bounds.\n // assume that bounds are disjoint.\n var boundses = {}, boundports = {};\n unplaced.forEach(function(p) {\n var boundskey = p.abounds.map(function(x) { return x.toFixed(3); }).join(',');\n boundses[boundskey] = p.abounds;\n boundports[boundskey] = boundports[boundskey] || [];\n boundports[boundskey].push(p);\n });\n for(var b in boundports) {\n var bounds = boundses[b], bports = boundports[b];\n if(bports.length === 1)\n bports[0].vec = a_to_v((bounds[0] + bounds[1])/2);\n else {\n var slice = (bounds[1] - bounds[0]) / (boundports[b].length - 1);\n boundports[b].forEach(function(p, i) {\n p.vec = a_to_v(bounds[0] + i*slice);\n });\n }\n }\n inside = inside.concat(unplaced);\n unplaced = [];\n\n // determine positions of all satisfied\n inside.forEach(function(p) {\n project_port(diagram, n, p);\n });\n\n // detect any existing collisions, unplace the one without edges or second one\n for(var i = 0; i < inside.length; ++i) {\n var x = inside[i];\n if(unplaced.includes(x))\n continue;\n for(var j = i+1; j < inside.length; ++j) {\n var y = inside[j];\n if(unplaced.includes(y))\n continue;\n if(!misses(x, y)) {\n if(!x.edges.length) {\n unplaced.push(x);\n continue;\n }\n else\n unplaced.push(y);\n }\n }\n }\n inside = inside.filter(function(p) { return !unplaced.includes(p); });\n\n // place any remaining by trying random spots within the range until it misses all or we give up\n var patience = _behavior.patience(), maxdist = 0, maxvec;\n while(unplaced.length) {\n var p = unplaced[0];\n p.vec = a_to_v(rand_within(p.abounds[0], p.abounds[1]));\n project_port(diagram, n, p);\n var mindist = d3.min(inside, function(p2) { return distance(p, p2); });\n if(mindist > maxdist) {\n maxdist = mindist;\n maxvec = p.vec;\n }\n if(!patience-- || mindist > _behavior.minDistance()) {\n if(patience<0) {\n console.warn('ran out of patience placing a port');\n p.vec = maxvec;\n project_port(diagram, n, p);\n }\n inside.push(p);\n unplaced.shift();\n patience = _behavior.patience();\n maxdist = 0;\n }\n }\n }\n };\n var _behavior = {\n parent: property(null).react(function(p) {\n if(p) {\n p.on('receivedLayout.place-ports', received_layout);\n } else if(_behavior.parent())\n _behavior.parent().on('receivedLayout.place-ports', null);\n }),\n // minimum distance between ports\n minDistance: property(20),\n // number of random places to try when resolving collision\n patience: property(20)\n };\n\n return _behavior;\n};\n","dc_graph.troubleshoot = function() {\n var _debugLayer = null;\n\n function add_behavior(diagram, node, edge, ehover) {\n if(!_debugLayer)\n _debugLayer = diagram.g().append('g').attr({\n class: 'troubleshoot',\n 'pointer-events': 'none'\n });\n var centers = node.data().map(function(n) {\n return {\n x: n.cola.x,\n y: n.cola.y\n };\n });\n var crosshairs = _debugLayer.selectAll('path.nodecenter').data(centers);\n crosshairs.exit().remove();\n crosshairs.enter().append('path').attr('class', 'nodecenter');\n crosshairs.attr({\n d: function(c) {\n return 'M' + (c.x - _behavior.xhairWidth()/2) + ',' + c.y + ' h' + _behavior.xhairWidth() +\n ' M' + c.x + ',' + (c.y - _behavior.xhairHeight()/2) + ' v' + _behavior.xhairHeight();\n },\n opacity: _behavior.xhairOpacity() !== null ? _behavior.xhairOpacity() : _behavior.opacity(),\n stroke: _behavior.xhairColor()\n });\n function cola_point(n) {\n return {x: n.cola.x, y: n.cola.y};\n }\n var colabounds = node.data().map(function(n) {\n return boundary(cola_point(n), n.cola.width, n.cola.height);\n });\n var colaboundary = _debugLayer.selectAll('path.colaboundary').data(colabounds);\n draw_corners(colaboundary, 'colaboundary');\n\n var textbounds = node.data().map(function(n) {\n if(!n.bbox)\n return null;\n return boundary(cola_point(n), n.bbox.width, n.bbox.height);\n }).filter(function(n) { return !!n; });\n var textboundary = _debugLayer.selectAll('path.textboundary').data(textbounds);\n draw_corners(textboundary, 'textboundary');\n\n var radiibounds = node.data().map(function(n) {\n if(!typeof n.dcg_rx === 'number')\n return null;\n return boundary(cola_point(n), n.dcg_rx*2, n.dcg_ry*2);\n }).filter(function(n) { return !!n; });\n var radiiboundary = _debugLayer.selectAll('path.radiiboundary').data(radiibounds);\n draw_corners(radiiboundary, 'radiiboundary');\n\n var domain = _debugLayer.selectAll('rect.domain').data([0]);\n domain.enter().append('rect');\n var xd = _behavior.parent().x().domain(), yd = _behavior.parent().y().domain();\n domain.attr({\n class: 'domain',\n fill: 'none',\n opacity: _behavior.domainOpacity(),\n stroke: _behavior.domainColor(),\n 'stroke-width': _behavior.domainStrokeWidth(),\n x: xd[0],\n y: yd[0],\n width: xd[1] - xd[0],\n height: yd[1] - yd[0]\n });\n }\n function boundary(point, wid, hei) {\n return {\n left: point.x - wid/2,\n top: point.y - hei/2,\n right: point.x + wid/2,\n bottom: point.y + hei/2\n };\n };\n function bound_tick(x, y, dx, dy) {\n return 'M' + x + ',' + (y + dy) + ' v' + -dy + ' h' + dx;\n }\n function corners(bounds) {\n return [\n bound_tick(bounds.left, bounds.top, _behavior.boundsWidth(), _behavior.boundsHeight()),\n bound_tick(bounds.right, bounds.top, -_behavior.boundsWidth(), _behavior.boundsHeight()),\n bound_tick(bounds.right, bounds.bottom, -_behavior.boundsWidth(), -_behavior.boundsHeight()),\n bound_tick(bounds.left, bounds.bottom, _behavior.boundsWidth(), -_behavior.boundsHeight()),\n ].join(' ');\n }\n function draw_corners(binding, classname) {\n binding.exit().remove();\n binding.enter().append('path').attr('class', classname);\n binding.attr({\n d: corners,\n opacity: _behavior.boundsOpacity() !== null ? _behavior.boundsOpacity() : _behavior.opacity(),\n stroke: _behavior.boundsColor(),\n fill: 'none'\n });\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n if(_debugLayer)\n _debugLayer.remove();\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n laterDraw: true,\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n _behavior.opacity = property(0.75);\n\n _behavior.xhairOpacity = property(null);\n _behavior.xhairWidth = property(10);\n _behavior.xhairHeight = property(10);\n _behavior.xhairColor = property('blue');\n\n _behavior.boundsOpacity = property(null);\n _behavior.boundsWidth = property(10);\n _behavior.boundsHeight = property(10);\n _behavior.boundsColor = property('green');\n\n _behavior.domainOpacity = property(0.6);\n _behavior.domainColor = property('darkorange');\n _behavior.domainStrokeWidth = property(11);\n\n return _behavior;\n};\n\n"," dc_graph.validate = function(title) {\n function falsy(objects, accessor, what, who) {\n var f = objects.filter(function(o) {\n return !accessor(o);\n });\n return f.length ?\n [what + ' is empty for ' + f.length + ' of ' + objects.length + ' ' + who, f] :\n null;\n }\n function build_index(objects, accessor) {\n return objects.reduce(function(m, o) {\n m[accessor(o)] = o;\n return m;\n }, {});\n }\n function not_found(index, objects, accessor, what, where, who) {\n var nf = objects.filter(function(o) {\n return !index[accessor(o)];\n }).map(function(o) {\n return {key: accessor(o), value: o};\n });\n return nf.length ?\n [what + ' was not found in ' + where, Object.keys(index), 'for ' + nf.length + ' of ' + objects.length + ' ' + who, nf] :\n null;\n }\n function validate() {\n var diagram = _behavior.parent();\n var nodes = diagram.nodeGroup().all(),\n edges = diagram.edgeGroup().all(),\n ports = diagram.portGroup() ? diagram.portGroup().all() : [];\n var errors = [];\n\n function check(error) {\n if(error)\n errors.push(error);\n }\n\n check(falsy(nodes, diagram.nodeKey(), 'nodeKey', 'nodes'));\n check(falsy(edges, diagram.edgeSource(), 'edgeSource', 'edges'));\n check(falsy(edges, diagram.edgeTarget(), 'edgeTarget', 'edges'));\n\n var contentTypes = d3.set(diagram.content.enum());\n var ct = dc_graph.functor_wrap(diagram.nodeContent());\n var noContentNodes = nodes.filter(function(kv) {\n return !contentTypes.has(ct(kv));\n });\n if(noContentNodes.length)\n errors.push(['there are ' + noContentNodes.length + ' nodes with nodeContent not matching any content', noContentNodes]);\n\n var nindex = build_index(nodes, diagram.nodeKey()),\n eindex = build_index(edges, diagram.edgeKey());\n check(not_found(nindex, edges, diagram.edgeSource(), 'edgeSource', 'nodes', 'edges'));\n check(not_found(nindex, edges, diagram.edgeTarget(), 'edgeTarget', 'nodes', 'edges'));\n\n check(falsy(ports, function(p) {\n return diagram.portNodeKey() && diagram.portNodeKey()(p) ||\n diagram.portEdgeKey() && diagram.portEdgeKey()(p);\n }, 'portNodeKey||portEdgeKey', 'ports'));\n\n var named_ports = !diagram.portNodeKey() && [] || ports.filter(function(p) {\n return diagram.portNodeKey()(p);\n });\n var anonymous_ports = !diagram.portEdgeKey() && [] || ports.filter(function(p) {\n return diagram.portEdgeKey()(p);\n });\n check(not_found(nindex, named_ports, diagram.portNodeKey(), 'portNodeKey', 'nodes', 'ports'));\n check(not_found(eindex, anonymous_ports, diagram.portEdgeKey(), 'portEdgeKey', 'edges', 'ports'));\n\n if(diagram.portName()) {\n var pindex = build_index(named_ports, function(p) {\n return diagram.portNodeKey()(p) + ' - ' + diagram.portName()(p);\n });\n if(diagram.edgeSourcePortName())\n check(not_found(pindex, edges, function(e) {\n return diagram.edgeSource()(e) + ' - ' + d3.functor(diagram.edgeSourcePortName())(e);\n }, 'edgeSourcePortName', 'ports', 'edges'));\n if(diagram.edgeTargetPortName())\n check(not_found(pindex, edges, function(e) {\n return diagram.edgeTarget()(e) + ' - ' + d3.functor(diagram.edgeTargetPortName())(e);\n }, 'edgeTargetPortName', 'ports', 'edges'));\n }\n\n function count_text() {\n return nodes.length + ' nodes, ' + edges.length + ' edges, ' + ports.length + ' ports';\n }\n if(errors.length) {\n console.warn('validation of ' + title + ' failed with ' + count_text() + ':');\n errors.forEach(function(err) {\n console.warn.apply(null, err);\n });\n }\n else\n console.log('validation of ' + title + ' succeeded with ' + count_text() + '.');\n }\n var _behavior = {\n parent: property(null).react(function(p) {\n if(p)\n p.on('data.validate', validate);\n else\n _behavior.parent().on('data.validate', null);\n })\n };\n\n return _behavior;\n};\n","/**\n## Legend\n\nThe dc_graph.legend shows labeled examples of nodes & edges, within the frame of a dc_graph.diagram.\n**/\ndc_graph.legend = function(legend_namespace) {\n legend_namespace = legend_namespace || 'node-legend';\n var _items, _included = [];\n var _dispatch = d3.dispatch('filtered');\n var _totals, _counts;\n\n function apply_filter() {\n if(_legend.dimension()) {\n _legend.dimension().filterFunction(function(k) {\n return !_included.length || _included.includes(k);\n });\n _legend.parent().redraw();\n }\n }\n\n var _legend = dc_graph.behavior(legend_namespace, {\n add_behavior: redraw,\n remove_behavior: function() {},\n parent: function(p) {\n if(p) {\n p\n .on('render.' + legend_namespace, render)\n .on('data.' + legend_namespace, on_data);\n }\n else {\n _legend.parent()\n .on('render.' + legend_namespace, null)\n .on('data.' + legend_namespace, null);\n }\n }\n });\n\n /**\n #### .type([value])\n Set or get the handler for the specific type of item to be displayed. Default: dc_graph.legend.node_legend()\n **/\n _legend.type = property(dc_graph.legend.node_legend());\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 #### .itemWidth([value])\n Set or get width to reserve for legend item. Default: 30.\n **/\n _legend.itemWidth = _legend.nodeWidth = property(40);\n\n /**\n #### .itemHeight([value])\n Set or get height to reserve for legend item. Default: 30.\n **/\n _legend.itemHeight = _legend.nodeHeight = property(40);\n\n /**\n #### .noLabel([value])\n Remove item labels, since legend labels are displayed outside of the items. Default: true\n **/\n _legend.noLabel = property(true);\n\n _legend.counter = property(null);\n\n _legend.replaceFilter = function(filter) {\n if(filter && filter.length === 1)\n _included = filter[0];\n else\n _included = [];\n return _legend;\n };\n\n _legend.filters = function() {\n return _included;\n };\n\n _legend.on = function(type, f) {\n _dispatch.on(type, f);\n return _legend;\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 function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n if(_legend.counter())\n _counts = _legend.counter()(wnodes.map(get_original), wedges.map(get_original), wports.map(get_original));\n }\n\n function redraw() {\n var legend = _legend.parent().svg()\n .selectAll('g.dc-graph-legend.' + legend_namespace)\n .data([0]);\n legend.enter().append('g')\n .attr('class', 'dc-graph-legend ' + legend_namespace)\n .attr('transform', 'translate(' + _legend.x() + ',' + _legend.y() + ')');\n\n var item = legend.selectAll(_legend.type().itemSelector())\n .data(_items, function(n) { return n.name; });\n var itemEnter = _legend.type().create(_legend.parent(), item.enter(), _legend.itemWidth(), _legend.itemHeight());\n itemEnter.append('text')\n .attr('dy', '0.3em')\n .attr('class', 'legend-label');\n item\n .attr('transform', function(n, i) {\n return 'translate(' + _legend.itemWidth()/2 + ',' + (_legend.itemHeight() + _legend.gap())*(i+0.5) + ')';\n });\n item.select('text.legend-label')\n .attr('transform', 'translate(' + (_legend.itemWidth()/2+_legend.gap()) + ',0)')\n .attr('pointer-events', _legend.dimension() ? 'auto' : 'none')\n .text(function(d) {\n return d.name + (_legend.counter() && _counts ? (' (' + (_counts[d.orig.key] || 0) + (_counts[d.orig.key] !== _totals[d.orig.key] ? '/' + (_totals[d.orig.key] || 0) : '') + ')') : '');\n });\n _legend.type().draw(_legend.parent(), itemEnter, item);\n if(_legend.noLabel())\n item.selectAll(_legend.type().labelSelector()).remove();\n\n if(_legend.dropdown()) {\n var caret = item.selectAll('text.dropdown-caret').data(function(x) { return [x]; });\n caret\n .enter().append('text')\n .attr('dy', '0.3em')\n .attr('font-size', '75%')\n .attr('fill', 'blue')\n .attr('class', 'dropdown-caret')\n .style('visibility', 'hidden')\n .html(' ▼');\n caret\n .attr('dx', function(d) {\n return (_legend.itemWidth()/2+_legend.gap()) + getBBoxNoThrow(d3.select(this.parentNode).select('text.legend-label').node()).width;\n })\n .on('mouseenter', function(n) {\n var rect = this.getBoundingClientRect();\n var key = _legend.parent().nodeKey.eval(n);\n _legend.dropdown()\n .show(key, rect.x, rect.y);\n });\n item\n .on('mouseenter', function(d) {\n if(_counts && _counts[d.orig.key]) {\n d3.select(this).selectAll('.dropdown-caret')\n .style('visibility', 'visible');\n }\n })\n .on('mouseleave', function(d) {\n d3.select(this).selectAll('.dropdown-caret')\n .style('visibility', 'hidden');\n });\n }\n\n if(_legend.dimension()) {\n item.attr('cursor', 'pointer')\n .on('click.legend', function(d) {\n var key = _legend.parent().nodeKey.eval(d);\n if(!_included.length)\n _included = _items.map(_legend.parent().nodeKey.eval);\n if(_included.includes(key))\n _included = _included.filter(function(x) { return x !== key; });\n else\n _included.push(key);\n apply_filter();\n _dispatch.filtered(_legend, key);\n });\n } else {\n item.attr('cursor', 'auto')\n .on('click.legend', null);\n }\n item.transition().duration(1000)\n .attr('opacity', function(d) {\n return (!_included.length || _included.includes(_legend.parent().nodeKey.eval(d))) ? 1 : 0.25;\n });\n };\n\n _legend.countBaseline = function() {\n if(_legend.counter)\n _totals = _legend.counter()(\n _legend.parent().nodeGroup().all(),\n _legend.parent().edgeGroup().all(),\n _legend.parent().portGroup() && _legend.parent().portGroup().all());\n };\n\n function render() {\n var exemplars = _legend.exemplars();\n _legend.countBaseline();\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 redraw();\n };\n\n _legend.dropdown = property(null).react(function(v) {\n if(!!v !== !!_legend.dropdown() && _legend.parent() && _legend.parent().svg())\n window.setTimeout(_legend.redraw, 0);\n });\n\n /* enables filtering */\n _legend.dimension = property(null)\n .react(function(v) {\n if(!v) {\n _included = [];\n apply_filter();\n }\n });\n\n return _legend;\n};\n\n\ndc_graph.legend.node_legend = function() {\n return {\n itemSelector: function() {\n return '.node';\n },\n labelSelector: function() {\n return '.node-label';\n },\n create: function(diagram, selection) {\n return selection.append('g')\n .attr('class', 'node');\n },\n draw: function(diagram, itemEnter, item) {\n diagram\n ._enterNode(itemEnter)\n ._updateNode(item);\n }\n };\n};\n\ndc_graph.legend.edge_legend = function() {\n var _type = {\n itemSelector: function() {\n return '.edge-container';\n },\n labelSelector: function() {\n return '.edge-label';\n },\n create: function(diagram, selection, w, h) {\n var edgeEnter = selection.append('g')\n .attr('class', 'edge-container')\n .attr('opacity', 0);\n edgeEnter\n .append('rect')\n .attr({\n x: -w/2,\n y: -h/2,\n width: w,\n height: h,\n fill: 'green',\n opacity: 0\n });\n edgeEnter\n .selectAll('circle')\n .data([-1, 1])\n .enter()\n .append('circle')\n .attr({\n r: _type.fakeNodeRadius(),\n fill: 'none',\n stroke: 'black',\n \"stroke-dasharray\": \"4,4\",\n opacity: 0.15,\n transform: function(d) {\n return 'translate(' + [d * _type.length() / 2, 0].join(',') + ')';\n }\n });\n var edgex = _type.length()/2 - _type.fakeNodeRadius();\n edgeEnter.append('svg:path')\n .attr({\n class: 'edge',\n id: function(d) { return d.name; },\n d: 'M' + -edgex + ',0 L' + edgex + ',0',\n opacity: diagram.edgeOpacity.eval\n });\n\n return edgeEnter;\n },\n fakeNodeRadius: property(10),\n length: property(50),\n draw: function(diagram, itemEnter, item) {\n diagram._updateEdge(itemEnter.select('path.edge'));\n }\n };\n return _type;\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 * @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(_behavior.direction());\n if(_behavior.offset())\n _d3tip.offset(_behavior.offset());\n parent.svg().call(_d3tip);\n }\n }\n function fetch_and_show_content(d) {\n if(_behavior.disabled() || _behavior.selection().exclude && _behavior.selection().exclude(d3.event.target)) {\n hide_tip.call(this);\n return;\n }\n var target = this,\n next = function() {\n _behavior.content()(d, function(content) {\n _d3tip.show.call(target, content, target);\n d3.select('div.d3-tip')\n .selectAll('a.tip-link')\n .on('click', function() {\n d3.event.preventDefault();\n if(_behavior.linkCallback())\n _behavior.linkCallback()(this.id);\n });\n _dispatch.tipped(d);\n });\n };\n if(_hideTimeout)\n window.clearTimeout(_hideTimeout);\n if(_behavior.delay()) {\n window.clearTimeout(_showTimeout);\n _showTimeout = window.setTimeout(next, _behavior.delay());\n }\n else next();\n }\n\n function check_hide_tip() {\n if(d3.event.relatedTarget &&\n (!_behavior.selection().exclude || !_behavior.selection().exclude(d3.event.target)) &&\n (this && this.contains(d3.event.relatedTarget) || // do not hide when mouse is still over a child\n _behavior.clickable() && d3.event.relatedTarget.classList.contains('d3-tip')))\n return false;\n return true;\n }\n\n function preempt_tip() {\n if(_showTimeout) {\n window.clearTimeout(_showTimeout);\n _showTimeout = null;\n }\n }\n\n function hide_tip() {\n if(!check_hide_tip.apply(this))\n return;\n preempt_tip();\n _d3tip.hide();\n }\n\n function hide_tip_delay() {\n if(!check_hide_tip.apply(this))\n return;\n preempt_tip();\n if(_behavior.hideDelay())\n _hideTimeout = window.setTimeout(function () {\n _d3tip.hide();\n }, _behavior.hideDelay());\n else\n _d3tip.hide();\n }\n\n function add_behavior(diagram, node, edge, ehover) {\n init(diagram);\n _behavior.programmatic() || _behavior.selection().select(diagram, node, edge, ehover)\n .on('mouseover.' + _namespace, fetch_and_show_content)\n .on('mouseout.' + _namespace, hide_tip_delay);\n if(_behavior.clickable()) {\n d3.select('div.d3-tip')\n .on('mouseover.' + _namespace, function() {\n if(_hideTimeout)\n window.clearTimeout(_hideTimeout);\n })\n .on('mouseout.' + _namespace, hide_tip_delay);\n }\n }\n function remove_behavior(diagram, node, edge, ehover) {\n _behavior.programmatic() || _behavior.selection().select(diagram, node, edge, ehover)\n .on('mouseover.' + _namespace, null)\n .on('mouseout.' + _namespace, null);\n }\n\n var _behavior = dc_graph.behavior(_namespace, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n laterDraw: true\n });\n /**\n * Specify the direction for tooltips. Currently supports the\n * [cardinal and intercardinal directions](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 _behavior.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 thing 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: assume it's a node, show node title\n * var tip = dc_graph.tip().content(function(n, k) {\n * k(_behavior.parent() ? _behavior.parent().nodeTitle.eval(n) : '');\n * });\n **/\n _behavior.content = property(function(n, k) {\n k(_behavior.parent() ? _behavior.parent().nodeTitle.eval(n) : '');\n });\n\n _behavior.on = function(event, f) {\n return _dispatch.on(event, f);\n };\n\n _behavior.disabled = property(false);\n _behavior.programmatic = property(false);\n\n _behavior.displayTip = function(filter, n, cb) {\n if(typeof filter !== 'function') {\n var d = filter;\n filter = function(d2) { return d2 === d; };\n }\n var found = _behavior.selection().select(_behavior.parent(), _behavior.parent().selectAllNodes(), _behavior.parent().selectAllEdges(), null)\n .filter(filter);\n if(found.size() > 0) {\n var action = fetch_and_show_content;\n // we need to flatten e.g. for ports, which will have nested selections\n // .nodes() does this better in D3v4\n var flattened = found.reduce(function(p, v) {\n return p.concat(v);\n }, []);\n var which = (n || 0) % flattened.length;\n action.call(flattened[which], d3.select(flattened[which]).datum());\n d = d3.select(flattened[which]).datum();\n if(cb)\n cb(d);\n if(_behavior.programmatic())\n found.on('mouseout', hide_tip_delay);\n }\n return _behavior;\n };\n\n _behavior.hideTip = function(delay) {\n if(_d3tip) {\n if(delay)\n hide_tip_delay();\n else\n hide_tip();\n }\n return _behavior;\n };\n _behavior.selection = property(dc_graph.tip.select_node_and_edge());\n _behavior.showDelay = _behavior.delay = property(0);\n _behavior.hideDelay = property(200);\n _behavior.offset = property(null);\n _behavior.clickable = property(false);\n _behavior.linkCallback = property(null);\n\n return _behavior;\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(dc_graph.tip.table());\n **/\ndc_graph.tip.table = function() {\n var gen = function(d, k) {\n d = gen.fetch()(d);\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 gen.fetch = property(function(d) {\n return d.orig.value;\n });\n return gen;\n};\n\ndc_graph.tip.select_node_and_edge = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n // hack to merge selections, not supported d3v3\n var selection = diagram.selectAll('.foo-this-does-not-exist');\n selection[0] = node[0].concat(ehover ? ehover[0] : []);\n return selection;\n },\n exclude: function(element) {\n return ancestor_has_class(element, 'port');\n }\n };\n};\n\ndc_graph.tip.select_node = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return node;\n },\n exclude: function(element) {\n return ancestor_has_class(element, 'port');\n }\n };\n};\n\ndc_graph.tip.select_edge = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return edge;\n }\n };\n};\n\ndc_graph.tip.select_port = function() {\n return {\n select: function(diagram, node, edge, ehover) {\n return node.selectAll('g.port');\n }\n };\n};\n","dc_graph.dropdown = function() {\n dc_graph.dropdown.unique_id = (dc_graph.dropdown.unique_id || 16) + 1;\n var _dropdown = {\n id: 'id' + dc_graph.dropdown.unique_id,\n parent: property(null),\n show: function(key, x, y) {\n var dropdown = _dropdown.parent().root()\n .selectAll('div.dropdown.' + _dropdown.id).data([0]);\n var dropdownEnter = dropdown\n .enter().append('div')\n .attr('class', 'dropdown ' + _dropdown.id);\n dropdown\n .style('visibility', 'visible')\n .style('left', x + 'px')\n .style('top', y + 'px');\n var capture;\n var hides = _dropdown.hideOn().split('|');\n var selects = _dropdown.selectOn().split('|');\n if(hides.includes('leave'))\n dropdown.on('mouseleave', function() {\n dropdown.style('visibility', 'hidden');\n });\n else if(hides.includes('clickout')) {\n var diagram = _dropdown.parent();\n capture = diagram.svg().append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', diagram.width())\n .attr('height', diagram.height())\n .attr('opacity', 0)\n .on('click', function() {\n capture.remove();\n dropdown.style('visibility', 'hidden');\n });\n }\n var container = dropdown;\n if(_dropdown.scrollHeight()) {\n var height = _dropdown.scrollHeight();\n if(typeof height === 'number')\n height = height + 'px';\n dropdown\n .style('max-height', height)\n .property('scrollTop', 0);\n dropdownEnter\n .style('overflow-y', 'auto')\n .append('div')\n .attr('class', 'scroller');\n container = dropdown.selectAll('div.scroller');\n }\n var values = _dropdown.fetchValues()(key, function(values) {\n var items = container\n .selectAll('div.dropdown-item').data(values);\n items\n .enter().append('div')\n .attr('class', 'dropdown-item');\n items.exit().remove();\n var select_event = null;\n if(selects.includes('click'))\n select_event = 'click';\n else if(selects.includes('hover'))\n select_event = 'mouseenter';\n items\n .text(function(item) { return _dropdown.itemText()(item); });\n if(select_event) {\n items\n .on(select_event + '.select', function(d) {\n _dropdown.itemSelected()(d);\n });\n }\n if(hides.includes('clickitem')) {\n items\n .on('click.hide', function(d) {\n capture.remove();\n dropdown.style('visibility', 'hidden');\n });\n }\n });\n },\n hideOn: property('clickout|clickitem'),\n selectOn: property('click'),\n height: property(10),\n itemText: property(function(x) { return x; }),\n itemSelected: property(function() {}),\n fetchValues: property(function(key, k) { k([]); }),\n scrollHeight: property('12em')\n };\n return _dropdown;\n};\n","dc_graph.keyboard = function() {\n var _input_anchor, _dispatch = d3.dispatch('keydown', 'keyup');\n\n function keydown() {\n _dispatch.keydown();\n }\n function keyup() {\n _dispatch.keyup();\n }\n function add_behavior(diagram) {\n _input_anchor = diagram.svg().selectAll('a#dcgraph-keyboard').data([1]);\n _input_anchor.enter()\n .insert('a', ':first-child').attr({\n id: 'dcgraph-keyboard',\n href: '#'\n });\n _input_anchor.on('keydown.keyboard', keydown);\n _input_anchor.on('keyup.keyboard', keyup);\n\n // grab focus whenever svg is interacted with (?)\n diagram.svg().on('mouseup.keyboard', function() {\n _behavior.focus();\n });\n }\n function remove_behavior(diagram) {\n _input_anchor.remove();\n }\n var _behavior = dc_graph.behavior('brush', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n\n _behavior.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\n _dispatch.on(event, f);\n return this;\n };\n\n _behavior.focus = function() {\n if(!_behavior.disableFocus())\n _input_anchor.node().focus();\n };\n\n _behavior.disableFocus = property(false);\n\n return _behavior;\n};\n","// adapted from\n// http://stackoverflow.com/questions/9308938/inline-text-editing-in-svg/#26644652\n\ndc_graph.edit_text = function(parent, options) {\n var foreign = parent.append('foreignObject').attr({\n height: '100%',\n width: '100%' // don't wrap\n });\n function reposition() {\n var pos;\n switch(options.align) {\n case 'left':\n pos = [options.box.x, options.box.y];\n break;\n default:\n case 'center':\n pos = [\n options.box.x + (options.box.width - textdiv.node().offsetWidth)/2,\n options.box.y + (options.box.height - textdiv.node().offsetHeight)/2\n ];\n break;\n }\n foreign.attr('transform', 'translate(' + pos.join(' ') + ')');\n }\n var textdiv = foreign.append('xhtml:div');\n var text = options.text || \"type on me\";\n textdiv.text(text).attr({\n contenteditable: true,\n width: 'auto'\n }).style({\n display: 'inline-block',\n 'background-color': 'white',\n padding: '2px'\n });\n\n function stopProp() {\n d3.event.stopPropagation();\n }\n foreign\n .on('mousedown', stopProp)\n .on('mousemove', stopProp)\n .on('mouseup', stopProp)\n .on('dblclick', stopProp);\n\n function accept() {\n options.accept && options.accept(textdiv.text());\n textdiv.on('blur.edittext', null);\n foreign.remove();\n options.finally && options.finally();\n }\n function cancel() {\n options.cancel && options.cancel();\n textdiv.on('blur.edittext', null);\n foreign.remove();\n options.finally && options.finally();\n }\n\n textdiv.on('keydown.edittext', function() {\n if(d3.event.keyCode===13) {\n d3.event.preventDefault();\n }\n }).on('keyup.edittext', function() {\n if(d3.event.keyCode===13) {\n accept();\n } else if(d3.event.keyCode===27) {\n cancel();\n }\n reposition();\n }).on('blur.edittext', cancel);\n reposition();\n textdiv.node().focus();\n\n var range = document.createRange();\n if(options.selectText) {\n range.selectNodeContents(textdiv.node());\n } else {\n range.setStart(textdiv.node(), 1);\n range.setEnd(textdiv.node(), 1);\n }\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n};\n","dc_graph.brush = function() {\n var _brush = null, _gBrush, _dispatch = d3.dispatch('brushstart', 'brushmove', 'brushend');\n\n function brushstart() {\n _dispatch.brushstart();\n }\n function brushmove() {\n var ext = _brush.extent();\n _dispatch.brushmove(ext);\n }\n function brushend() {\n _dispatch.brushend();\n _gBrush.call(_brush.clear());\n }\n function install_brush(diagram) {\n if(!_brush) {\n _brush = d3.svg.brush()\n .x(diagram.x()).y(diagram.y())\n .on('brushstart', brushstart)\n .on('brush', brushmove)\n .on('brushend', brushend);\n }\n if(!_gBrush) {\n _gBrush = diagram.svg().insert('g', ':first-child')\n .attr('class', 'brush')\n .call(_brush);\n }\n }\n function remove_brush() {\n if(_gBrush) {\n _gBrush.remove();\n _gBrush = null;\n }\n }\n var _behavior = dc_graph.behavior('brush', {\n add_behavior: function() {},\n remove_behavior: remove_brush\n });\n\n _behavior.on = function(event, f) {\n if(arguments.length === 1)\n return _dispatch.on(event);\n _dispatch.on(event, f);\n return this;\n };\n _behavior.activate = function() {\n install_brush(_behavior.parent());\n return this;\n };\n _behavior.deactivate = function() {\n remove_brush();\n return this;\n };\n _behavior.isActive = function () {\n return !!_gBrush;\n };\n\n return _behavior;\n};\n","dc_graph.select_things = function(things_group, things_name, thinginess) {\n var _selected = [], _oldSelected;\n var _mousedownThing = null;\n\n var contains_predicate = thinginess.keysEqual ?\n function(k1) {\n return function(k2) {\n return thinginess.keysEqual(k1, k2);\n };\n } :\n function(k1) {\n return function(k2) {\n return k1 === k2;\n };\n };\n function contains(array, key) {\n return !!_selected.find(contains_predicate(key));\n }\n function isUnion(event) {\n return event.shiftKey;\n }\n function isToggle(event) {\n return is_a_mac ? event.metaKey : event.ctrlKey;\n }\n function add_array(array, key) {\n return contains(array, key) ? array : array.concat([key]);\n }\n function toggle_array(array, key) {\n return contains(array, key) ? array.filter(function(x) { return x != key; }) : array.concat([key]);\n }\n\n function selection_changed(diagram) {\n return function(selection, refresh) {\n if(refresh === undefined)\n refresh = true;\n _selected = selection;\n if(refresh)\n diagram.refresh();\n };\n }\n var _have_bce = false;\n function background_click_event(diagram, v) {\n // we seem to have nodes-background interrupting edges-background by reinstalling uselessly\n if(_have_bce === v)\n return;\n diagram.svg().on('click.' + things_name, v ? function(t) {\n if(d3.event.target === this)\n things_group.set_changed([]);\n } : null);\n _have_bce = v;\n }\n function brushstart() {\n if(isUnion(d3.event.sourceEvent) || isToggle(d3.event.sourceEvent))\n _oldSelected = _selected.slice();\n else {\n _oldSelected = [];\n things_group.set_changed([]);\n }\n }\n function brushmove(ext) {\n if(!thinginess.intersectRect)\n return;\n var rectSelect = thinginess.intersectRect(ext);\n var newSelected;\n if(isUnion(d3.event.sourceEvent))\n newSelected = rectSelect.reduce(add_array, _oldSelected);\n else if(isToggle(d3.event.sourceEvent))\n newSelected = rectSelect.reduce(toggle_array, _oldSelected);\n else\n newSelected = rectSelect;\n things_group.set_changed(newSelected);\n }\n\n function add_behavior(diagram, node, edge) {\n var condition = _behavior.noneIsAll() ? function(t) {\n return !_selected.length || contains(_selected, thinginess.key(t));\n } : function(t) {\n return contains(_selected, thinginess.key(t));\n };\n thinginess.applyStyles(condition);\n\n thinginess.clickables(diagram, node, edge).on('mousedown.' + things_name, function(t) {\n _mousedownThing = t;\n });\n\n thinginess.clickables(diagram, node, edge).on('mouseup.' + things_name, function(t) {\n if(thinginess.excludeClick && thinginess.excludeClick(d3.event.target))\n return;\n // it's only a click if the same target was mousedown & mouseup\n // but we can't use click event because things may have been reordered\n if(_mousedownThing !== t)\n return;\n var key = thinginess.key(t), newSelected;\n if(_behavior.multipleSelect()) {\n if(isUnion(d3.event))\n newSelected = add_array(_selected, key);\n else if(isToggle(d3.event))\n newSelected = toggle_array(_selected, key);\n }\n if(!newSelected)\n newSelected = [key];\n things_group.set_changed(newSelected);\n });\n\n if(_behavior.multipleSelect()) {\n var brush_mode = diagram.child('brush');\n brush_mode.activate();\n }\n else\n background_click_event(diagram, _behavior.clickBackgroundClears());\n\n if(_behavior.autoCropSelection()) {\n // drop any selected which no longer exist in the diagram\n var present = thinginess.clickables(diagram, node, edge).data().map(thinginess.key);\n var now_selected = _selected.filter(function(k) { return contains(present, k); });\n if(_selected.length !== now_selected.length)\n things_group.set_changed(now_selected, false);\n }\n }\n\n function remove_behavior(diagram, node, edge) {\n thinginess.clickables(diagram, node, edge).on('click.' + things_name, null);\n diagram.svg().on('click.' + things_name, null);\n thinginess.removeStyles();\n }\n\n var _behavior = dc_graph.behavior(things_name, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n things_group.on('set_changed.' + things_name, p ? selection_changed(p) : null);\n if(p && _behavior.multipleSelect()) {\n var brush_mode = p.child('brush');\n if(!brush_mode) {\n brush_mode = dc_graph.brush();\n p.child('brush', brush_mode);\n }\n brush_mode\n .on('brushstart.' + things_name, brushstart)\n .on('brushmove.' + things_name, brushmove);\n }\n },\n laterDraw: thinginess.laterDraw || false\n });\n\n _behavior.multipleSelect = property(true);\n _behavior.clickBackgroundClears = property(true, false).react(function(v) {\n if(!_behavior.multipleSelect() && _behavior.parent())\n background_click_event(_behavior.parent(), v);\n });\n _behavior.noneIsAll = property(false);\n // if you're replacing the data, you probably want the selection not to be preserved when a thing\n // with the same key re-appears later (true). however, if you're filtering dc.js-style, you\n // probably want filters to be independent between diagrams (false)\n _behavior.autoCropSelection = property(true);\n // if you want to do the cool things select_things can do\n _behavior.thinginess = function() {\n return thinginess;\n };\n return _behavior;\n};\n\ndc_graph.select_things_group = function(brushgroup, type) {\n window.chart_registry.create_type(type, function() {\n return d3.dispatch('set_changed');\n });\n\n return window.chart_registry.create_group(type, brushgroup);\n};\n","dc_graph.select_nodes = function(props, options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n\n var thinginess = {\n intersectRect: function(ext) {\n return _behavior.parent().selectAllNodes().data().filter(function(n) {\n return n && ext[0][0] < n.cola.x && n.cola.x < ext[1][0] &&\n ext[0][1] < n.cola.y && n.cola.y < ext[1][1];\n }).map(this.key);\n },\n clickables: function(diagram, node, edge) {\n return node;\n },\n excludeClick: function(element) {\n return ancestor_has_class(element, 'port');\n },\n key: function(n) {\n return _behavior.parent().nodeKey.eval(n);\n },\n applyStyles: function(pred) {\n _behavior.parent().cascade(50, true, node_edge_conditions(pred, null, props));\n },\n removeStyles: function() {\n _behavior.parent().cascade(50, false, props);\n }\n };\n var _behavior = dc_graph.select_things(select_nodes_group, 'select-nodes', thinginess);\n return _behavior;\n};\n","dc_graph.select_edges = function(props, options) {\n options = options || {};\n var select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges');\n var thinginess = {\n intersectRect: function(ext) {\n return this.clickables().data().filter(function(e) {\n // this nonsense because another select_things may have invalidated the edge positions (!!)\n var sp = {\n x: e.source.cola.x + e.sourcePort.pos.x,\n y: e.source.cola.y + e.sourcePort.pos.y\n },\n tp = {\n x: e.target.cola.x + e.targetPort.pos.x,\n y: e.target.cola.y + e.targetPort.pos.y\n };\n return [sp, tp].some(function(p) {\n return ext[0][0] < p.x && p.x < ext[1][0] &&\n ext[0][1] < p.y && p.y < ext[1][1];\n });\n }).map(this.key);\n },\n clickables: function() {\n return _behavior.parent().selectAllEdges('.edge-hover');\n },\n key: function(e) {\n return _behavior.parent().edgeKey.eval(e);\n },\n applyStyles: function(pred) {\n _behavior.parent().cascade(50, true, node_edge_conditions(null, pred, props));\n },\n removeStyles: function() {\n _behavior.parent().cascade(50, false, props);\n }\n };\n var _behavior = dc_graph.select_things(select_edges_group, 'select-edges', thinginess);\n return _behavior;\n};\n","dc_graph.select_ports = function(props, options) {\n options = options || {};\n var port_style = options.portStyle || 'symbols';\n var select_ports_group = dc_graph.select_things_group(options.select_ports_group || 'select-ports-group', 'select-ports');\n var thinginess = {\n laterDraw: true,\n intersectRect: null, // multiple selection not supported for now\n clickables: function() {\n return _behavior.parent().selectAllNodes('g.port');\n },\n key: function(p) {\n // this scheme also won't work with multiselect\n return p.named ?\n {node: _behavior.parent().nodeKey.eval(p.node), name: p.name} :\n {edge: _behavior.parent().edgeKey.eval(p.edges[0]), name: p.name};\n },\n applyStyles: function(pred) {\n _behavior.parent().portStyle(port_style).cascade(50, true, conditional_properties(pred, props));\n },\n removeStyles: function() {\n _behavior.parent().portStyle(port_style).cascade(50, false, props);\n },\n keysEqual: function(k1, k2) {\n return k1.name === k2.name && (k1.node ? k1.node === k2.node : k1.edge === k2.edge);\n }\n };\n var _behavior = dc_graph.select_things(select_ports_group, 'select-ports', thinginess);\n return _behavior;\n};\n","dc_graph.move_nodes = function(options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _selected = [], _startPos = null, _downNode, _moveStarted;\n var _brush, _drawGraphs, _selectNodes, _restoreBackgroundClick;\n var _maybeSelect = null;\n\n function isUnion(event) {\n return event.shiftKey;\n }\n function isToggle(event) {\n return is_a_mac ? event.metaKey : event.ctrlKey;\n }\n\n function selection_changed(diagram) {\n return function(selection, refresh) {\n if(refresh === undefined)\n refresh = true;\n _selected = selection;\n };\n }\n function for_each_selected(f, selected) {\n selected = selected || _selected;\n selected.forEach(function(key) {\n var n = _behavior.parent().getWholeNode(key);\n f(n, key);\n });\n }\n function add_behavior(diagram, node, edge) {\n node.on('mousedown.move-nodes', function(n) {\n // Need a more general way for modes to say \"I got this\"\n if(_drawGraphs && _drawGraphs.usePorts() && _drawGraphs.usePorts().eventPort())\n return;\n _startPos = dc_graph.event_coords(diagram);\n _downNode = d3.select(this);\n // if the node under the mouse is not in the selection, need to\n // make that node selected\n var key = diagram.nodeKey.eval(n);\n var selected = _selected;\n if(_selected.indexOf(key)<0) {\n selected = [key];\n _maybeSelect = key;\n }\n else _maybeSelect = null;\n for_each_selected(function(n) {\n n.original_position = [n.cola.x, n.cola.y];\n }, selected);\n if(_brush)\n _brush.deactivate();\n });\n function mouse_move() {\n if(_startPos) {\n if(!(d3.event.buttons & 1)) {\n mouse_up();\n return;\n }\n if(_maybeSelect)\n select_nodes_group.set_changed([_maybeSelect]);\n var pos = dc_graph.event_coords(diagram);\n var dx = pos[0] - _startPos[0],\n dy = pos[1] - _startPos[1];\n if(!_moveStarted && Math.hypot(dx, dy) > _behavior.dragSize()) {\n _moveStarted = true;\n // prevent click event for this node setting selection just to this\n if(_downNode)\n _downNode.style('pointer-events', 'none');\n }\n if(_moveStarted) {\n for_each_selected(function(n) {\n n.cola.x = n.original_position[0] + dx;\n n.cola.y = n.original_position[1] + dy;\n });\n diagram.reposition(node, edge);\n }\n }\n }\n function mouse_up() {\n if(_startPos) {\n if(_moveStarted) {\n _moveStarted = false;\n if(_downNode) {\n _downNode.style('pointer-events', null);\n _downNode = null;\n }\n var fixes = [];\n for_each_selected(function(n, id) {\n fixes.push({\n id: id,\n pos: {x: n.cola.x, y: n.cola.y}\n });\n });\n fix_nodes_group.request_fixes(fixes);\n }\n if(_brush)\n _brush.activate();\n _startPos = null;\n }\n }\n node\n .on('mousemove.move-nodes', mouse_move)\n .on('mouseup.move-nodes', mouse_up);\n diagram.svg()\n .on('mousemove.move-nodes', mouse_move)\n .on('mouseup.move-nodes', mouse_up);\n }\n\n function remove_behavior(diagram, node, edge) {\n node.on('mousedown.move-nodes', null);\n node.on('mousemove.move-nodes', null);\n node.on('mouseup.move-nodes', null);\n }\n\n var _behavior = dc_graph.behavior('move-nodes', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n select_nodes_group.on('set_changed.move-nodes', p ? selection_changed(p) : null);\n _brush = p.child('brush');\n _drawGraphs = p.child('draw-graphs');\n _selectNodes = p.child('select-nodes');\n }\n });\n\n // minimum distance that is considered a drag, not a click\n _behavior.dragSize = property(5);\n\n return _behavior;\n};\n","dc_graph.fix_nodes = function(options) {\n options = options || {};\n var fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _fixedPosTag = options.fixedPosTag || 'fixedPos';\n var _fixes = [], _nodes, _wnodes, _edges, _wedges;\n\n var _execute = {\n nodeid: function(n) {\n return _behavior.parent().nodeKey.eval(n);\n },\n sourceid: function(e) {\n return _behavior.parent().edgeSource.eval(e);\n },\n targetid: function(e) {\n return _behavior.parent().edgeTarget.eval(e);\n },\n get_fix: function(n) {\n return _behavior.parent().nodeFixed.eval(n);\n },\n fix_node: function(n, pos) {\n n[_fixedPosTag] = pos;\n },\n unfix_node: function(n) {\n n[_fixedPosTag] = null;\n },\n clear_fixes: function() {\n _fixes = {};\n },\n register_fix: function(id, pos) {\n _fixes[id] = pos;\n }\n };\n\n function request_fixes(fixes) {\n _behavior.strategy().request_fixes(_execute, fixes);\n tell_then_set(find_changes()).then(function() {\n _behavior.parent().redraw();\n });\n }\n function new_node(nid, n, pos) {\n _behavior.strategy().new_node(_execute, nid, n, pos);\n }\n function new_edge(eid, sourceid, targetid) {\n var source = _nodes[sourceid], target = _nodes[targetid];\n _behavior.strategy().new_edge(_execute, eid, source, target);\n }\n function find_changes() {\n var changes = [];\n _wnodes.forEach(function(n) {\n var key = _behavior.parent().nodeKey.eval(n),\n fixPos = _fixes[key],\n oldFixed = n.orig.value[_fixedPosTag],\n changed = false;\n if(oldFixed) {\n if(!fixPos || fixPos.x !== oldFixed.x || fixPos.y !== oldFixed.y)\n changed = true;\n }\n else changed = fixPos;\n if(changed)\n changes.push({n: n, fixed: fixPos ? {x: fixPos.x, y: fixPos.y} : null});\n });\n return changes;\n }\n function execute_change(n, fixed) {\n if(fixed)\n _execute.fix_node(n.orig.value, fixed);\n else\n _execute.unfix_node(n.orig.value);\n }\n function tell_then_set(changes) {\n var callback = _behavior.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n var promises = changes.map(function(change) {\n var key = _behavior.parent().nodeKey.eval(change.n);\n return callback(key, change.fixed)\n .then(function(fixed) {\n execute_change(change.n, fixed);\n });\n });\n return Promise.all(promises);\n }\n function set_changes(changes) {\n changes.forEach(function(change) {\n execute_change(change.n, change.fixed);\n });\n }\n function tell_changes(changes) {\n var callback = _behavior.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n var promises = changes.map(function(change) {\n var key = _behavior.parent().nodeKey.eval(change.n);\n return callback(key, change.fixed);\n });\n return Promise.all(promises);\n }\n function fix_all_nodes(tell) {\n if(tell === undefined)\n tell = true;\n var changes = _wnodes.map(function(n) {\n return {n: n, fixed: {x: n.cola.x, y: n.cola.y}};\n });\n if(tell)\n return tell_then_set(changes);\n else {\n set_changes(changes);\n return Promise.resolve(undefined);\n }\n }\n function clear_fixes() {\n _behavior.strategy().clear_all_fixes && _behavior.strategy().clear_all_fixes();\n _execute.clear_fixes();\n }\n function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _nodes = nodes;\n _wnodes = wnodes;\n _edges = edges;\n _wedges = wedges;\n if(_behavior.strategy().on_data) {\n _behavior.strategy().on_data(_execute, nodes, wnodes, edges, wedges, ports, wports); // ghastly\n var changes = find_changes();\n set_changes(changes);\n // can't wait for backend to acknowledge/approve so just set then blast\n if(_behavior.reportOverridesAsynchronously())\n tell_changes(changes); // dangling promise\n }\n }\n\n var _behavior = {\n parent: property(null).react(function(p) {\n fix_nodes_group\n .on('request_fixes.fix-nodes', p ? request_fixes : null)\n .on('new_node.fix_nodes', p ? new_node : null)\n .on('new_edge.fix_nodes', p ? new_edge : null);\n if(p) {\n p.on('data.fix-nodes', on_data);\n } else if(_behavior.parent())\n _behavior.parent().on('data.fix-nodes', null);\n }),\n // callback for setting & fixing node position\n fixNode: property(null),\n // save/load may want to nail everything / start from scratch\n // (should probably be automatic though)\n fixAllNodes: fix_all_nodes,\n clearFixes: clear_fixes,\n strategy: property(dc_graph.fix_nodes.strategy.fix_last()),\n reportOverridesAsynchronously: property(true)\n };\n\n return _behavior;\n};\n\ndc_graph.fix_nodes.strategy = {};\ndc_graph.fix_nodes.strategy.fix_last = function() {\n return {\n request_fixes: function(exec, fixes) {\n exec.clear_fixes();\n fixes.forEach(function(fix) {\n exec.register_fix(fix.id, fix.pos);\n });\n },\n new_node: function(exec, nid, n, pos) {\n exec.fix_node(n, pos);\n },\n new_edge: function(exec, eid, source, target) {\n exec.unfix_node(source.orig.value);\n exec.unfix_node(target.orig.value);\n }\n };\n};\ndc_graph.fix_nodes.strategy.last_N_per_component = function(maxf) {\n maxf = maxf || 1;\n var _age = 0;\n var _allFixes = {};\n return {\n clear_all_fixes: function() {\n _allFixes = {};\n },\n request_fixes: function(exec, fixes) {\n ++_age;\n fixes.forEach(function(fix) {\n _allFixes[fix.id] = {id: fix.id, age: _age, pos: fix.pos};\n });\n },\n new_node: function(exec, nid, n, pos) {\n ++_age;\n _allFixes[nid] = {id: nid, age: _age, pos: pos};\n exec.fix_node(n, pos);\n },\n new_edge: function() {},\n on_data: function(exec, nodes, wnodes, edges, wedges, ports, wports) {\n ++_age;\n // add any existing fixes as requests\n wnodes.forEach(function(n) {\n var nid = exec.nodeid(n), pos = exec.get_fix(n);\n if(pos && !_allFixes[nid])\n _allFixes[nid] = {id: nid, age: _age, pos: pos};\n });\n // determine components\n var components = [];\n var dfs = dc_graph.undirected_dfs({\n nodeid: exec.nodeid,\n sourceid: exec.sourceid,\n targetid: exec.targetid,\n comp: function() {\n components.push([]);\n },\n node: function(compid, n) {\n components[compid].push(n);\n }\n });\n dfs(wnodes, wedges);\n // start from scratch\n exec.clear_fixes();\n // keep or produce enough fixed nodes per component\n components.forEach(function(comp, i) {\n var oldcomps = comp.reduce(function(cc, n) {\n if(n.last_component) {\n var counts = cc[n.last_component] = cc[n.last_component] || {\n total: 0,\n fixed: 0\n };\n counts.total++;\n if(_allFixes[exec.nodeid(n)])\n counts.fixed++;\n }\n return cc;\n }, {});\n var fixed_by_size = Object.keys(oldcomps).reduce(function(ff, compid) {\n if(oldcomps[compid].fixed)\n ff.push({compid: +compid, total: oldcomps[compid].total, fixed: oldcomps[compid].fixed});\n return ff;\n }, []).sort(function(coa, cob) {\n return cob.total - coa.total;\n });\n var largest_fixed = fixed_by_size.length && fixed_by_size[0].compid;\n var fixes = comp.filter(function(n) {\n return !n.last_component || n.last_component === largest_fixed;\n }).map(function(n) {\n return _allFixes[exec.nodeid(n)];\n }).filter(function(fix) {\n return fix;\n });\n if(fixes.length > maxf) {\n fixes.sort(function(f1, f2) {\n return f2.age - f1.age;\n });\n fixes = fixes.slice(0, maxf);\n }\n fixes.forEach(function(fix) {\n exec.register_fix(fix.id, fix.pos);\n });\n var kept = fixes.reduce(function(m, fix) {\n m[fix.id] = true;\n return m;\n }, {});\n comp.forEach(function(n) {\n var nid = exec.nodeid(n);\n if(!kept[nid])\n _allFixes[nid] = null;\n n.last_component = i+1;\n });\n });\n }\n };\n};\n\ndc_graph.fix_nodes_group = function(brushgroup) {\n window.chart_registry.create_type('fix-nodes', function() {\n return d3.dispatch('request_fixes', 'new_node', 'new_edge');\n });\n\n return window.chart_registry.create_group('fix-nodes', brushgroup);\n};\n","dc_graph.filter_selection = function(things_group, things_name) {\n things_name = things_name || 'select-nodes';\n var select_nodes_group = dc_graph.select_things_group(things_group || 'select-nodes-group', things_name);\n\n function selection_changed(diagram) {\n return function(selection) {\n if(selection.length) {\n var set = d3.set(selection);\n _behavior.dimensionAccessor()(diagram).filterFunction(function(k) {\n return set.has(k);\n });\n } else _behavior.dimensionAccessor()(diagram).filter(null);\n diagram.redrawGroup();\n };\n }\n\n var _behavior = {\n parent: property(null).react(function(p) {\n select_nodes_group.on('set_changed.filter-selection-' + things_name, p ? selection_changed(p) : null);\n })\n };\n _behavior.dimensionAccessor = property(function(diagram) {\n return diagram.nodeDimension();\n });\n return _behavior;\n};\n","dc_graph.delete_things = function(things_group, mode_name, id_tag) {\n id_tag = id_tag || 'id';\n var _deleteKey = is_a_mac ? 'Backspace' : 'Delete';\n var _keyboard, _selected = [];\n function selection_changed(selection) {\n _selected = selection;\n }\n function row_id(r) {\n return r[id_tag];\n }\n function delete_selection(selection) {\n if(!_behavior.crossfilterAccessor())\n throw new Error('need crossfilterAccessor');\n if(!_behavior.dimensionAccessor())\n throw new Error('need dimensionAccessor');\n selection = selection || _selected;\n if(selection.length === 0)\n return Promise.resolve([]);\n var promise = _behavior.preDelete() ? _behavior.preDelete()(selection) : Promise.resolve(selection);\n if(_behavior.onDelete())\n promise = promise.then(_behavior.onDelete());\n return promise.then(function(selection) {\n if(selection && selection.length) {\n var crossfilter = _behavior.crossfilterAccessor()(_behavior.parent()),\n dimension = _behavior.dimensionAccessor()(_behavior.parent());\n var all = crossfilter.all().slice(), n = all.length;\n dimension.filter(null);\n crossfilter.remove();\n var filtered = all.filter(function(r) {\n return selection.indexOf(row_id(r)) === -1;\n });\n if(all.length !== filtered.length + selection.length)\n console.warn('size after deletion is not previous size minus selection size',\n filtered.map(row_id), all.map(row_id), selection);\n crossfilter.add(filtered);\n\n _behavior.parent().redrawGroup();\n }\n return true;\n });\n }\n function add_behavior(diagram) {\n _keyboard.on('keyup.' + mode_name, function() {\n if(d3.event.code === _deleteKey)\n delete_selection();\n });\n }\n function remove_behavior(diagram) {\n }\n var _behavior = dc_graph.behavior(mode_name, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n things_group.on('set_changed.' + mode_name, selection_changed);\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n }\n }\n });\n _behavior.preDelete = property(null);\n _behavior.onDelete = property(null);\n _behavior.crossfilterAccessor = property(null);\n _behavior.dimensionAccessor = property(null);\n _behavior.deleteSelection = delete_selection;\n return _behavior;\n};\n","dc_graph.delete_nodes = function(id_tag, options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges');\n var _behavior = dc_graph.delete_things(select_nodes_group, 'delete-nodes', id_tag);\n\n _behavior.preDelete(function(nodes) {\n // request a delete of all attached edges, using the delete edges mode\n // kind of horrible\n var diagram = _behavior.parent();\n var deleteEdgesMode = diagram.child('delete-edges');\n if(!deleteEdgesMode)\n return null; // reject if we can't delete the edges\n // it is likely that the delete_edges mode is listening to the same keyup event we\n // are. introduce a pause to let it process the delete key now, deleting any selected edges.\n // then select any remaining edges connected to the selected nodes and delete those.\n //\n // more evidence that modes need to be able to say \"i got this\", or that we should have\n // batch deletion. otoh, given the current behavior, delete_nodes deferring to delete_edges\n // makes about as much sense as anything\n return Promise.resolve(undefined).then(function() {\n var deleteEdges = diagram.edgeGroup().all().filter(function(e) {\n return nodes.indexOf(diagram.edgeSource()(e)) !== -1 ||\n nodes.indexOf(diagram.edgeTarget()(e)) !== -1;\n }).map(diagram.edgeKey());\n select_edges_group.set_changed(deleteEdges);\n return deleteEdgesMode.deleteSelection().then(function() {\n return nodes;\n });\n });\n });\n return _behavior;\n};\n","dc_graph.label_things = function(options) {\n options = options || {};\n var select_things_group = dc_graph.select_things_group(options.select_group, options.select_type),\n label_things_group = dc_graph.label_things_group(options.label_group, options.label_type);\n var _selected = [];\n var _keyboard, _selectThings;\n\n function selection_changed_listener(diagram) {\n return function(selection) {\n _selected = selection;\n };\n }\n\n function grab_focus() {\n _keyboard.focus();\n }\n\n function edit_label_listener(diagram) {\n return function(thing, eventOptions) {\n var box = options.thing_box(thing);\n options.hide_thing_label(thing, true);\n dc_graph.edit_text(\n diagram.g(),\n {\n text: eventOptions.text || options.thing_label(thing) || options.default_label,\n align: options.align,\n box: box,\n selectText: eventOptions.selectText,\n accept: function(text) {\n return options.accept(thing, text);\n },\n finally: function() {\n options.hide_thing_label(thing, false);\n grab_focus();\n }\n });\n };\n }\n\n function edit_selection(node, edge, eventOptions) {\n // less than ideal interface.\n // what if there are other things? can i blame the missing metagraph?\n var thing = options.find_thing(_selected[0], node, edge);\n if(thing.empty()) {\n console.error(\"couldn't find thing '\" + _selected[0] + \"'!\");\n return;\n }\n if(thing.size()>1) {\n console.error(\"found too many things for '\" + _selected[0] + \"' (\" + thing.size() + \")!\");\n return;\n }\n label_things_group.edit_label(thing, eventOptions);\n }\n function add_behavior(diagram, node, edge) {\n _keyboard.on('keyup.' + options.label_type, function() {\n if(_selected.length) {\n // printable characters should start edit\n if(d3.event.key.length !== 1)\n return;\n edit_selection(node, edge, {text: d3.event.key, selectText: false});\n }\n });\n if(_selectThings)\n _selectThings.thinginess().clickables(diagram, node, edge).on('dblclick.' + options.label_type, function() {\n edit_selection(node, edge, {selectText: true});\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n }\n\n var _behavior = dc_graph.behavior(options.label_type, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n select_things_group.on('set_changed.' + options.label_type, p ? selection_changed_listener(p) : null);\n label_things_group.on('edit_label.' + options.label_type, p ? edit_label_listener(p) : null);\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n _selectThings = p.child(options.select_type);\n }\n }\n });\n _behavior.editSelection = function(eventOptions) {\n edit_selection(_behavior.parent().selectAllNodes(), _behavior.parent().selectAllEdges(), eventOptions);\n };\n return _behavior;\n};\n\ndc_graph.label_things_group = function(brushgroup, type) {\n window.chart_registry.create_type(type, function() {\n return d3.dispatch('edit_label');\n });\n\n return window.chart_registry.create_group(type, brushgroup);\n};\n","dc_graph.label_nodes = function(options) {\n options = options || {};\n var _labelTag = options.labelTag || 'label';\n options.select_group = options.select_group || 'select-nodes-group';\n options.select_type = options.select_type || 'select-nodes';\n options.label_group = options.label_group || 'label-nodes-group';\n options.label_type = options.label_type || 'label-nodes';\n options.default_label = \"node name\";\n\n options.find_thing = function(key, node, edge) {\n return node.filter(function(n) {\n return _behavior.parent().nodeKey.eval(n) === key;\n });\n };\n options.hide_thing_label = function(node, whether) {\n var contents = _behavior.parent().content(_behavior.parent().nodeContent.eval(node.datum()));\n contents.selectContent(node).attr('visibility', whether ? 'hidden' : 'visible');\n };\n options.thing_box = function(node, eventOptions) {\n var contents = _behavior.parent().content(_behavior.parent().nodeContent.eval(node.datum())),\n box = contents.textbox(node);\n box.x += node.datum().cola.x;\n box.y += node.datum().cola.y;\n return box;\n };\n options.thing_label = function(node) {\n return _behavior.parent().nodeLabel.eval(node.datum());\n };\n options.accept = function(node, text) {\n var callback = _behavior.changeNodeLabel() ?\n _behavior.changeNodeLabel()(_behavior.parent().nodeKey.eval(node.datum()), text) :\n Promise.resolve(text);\n return callback.then(function(text2) {\n var n = node.datum();\n n.orig.value[_labelTag] = text2;\n _behavior.parent().redrawGroup();\n });\n };\n\n var _behavior = dc_graph.label_things(options);\n _behavior.changeNodeLabel = property(null);\n return _behavior;\n};\n","dc_graph.label_edges = function(options) {\n options = options || {};\n var _labelTag = options.labelTag || 'label';\n options.select_group = options.select_group || 'select-edges-group';\n options.select_type = options.select_type || 'select-edges';\n options.label_group = options.label_group || 'label-edges-group';\n options.label_type = options.label_type || 'label-edges';\n options.default_label = \"edge name\";\n\n options.find_thing = function(key, node, edge) {\n return edge.filter(function(e) {\n return _behavior.parent().edgeKey.eval(e) === key;\n });\n };\n options.hide_thing_label = function(edge, whether) {\n var label = _behavior.parent().selectAll('#' + _behavior.parent().edgeId(edge.datum()) + '-label textPath');\n label.attr('visibility', whether ? 'hidden' : 'visible');\n };\n options.thing_box = function(edge, eventOptions) {\n var points = edge.datum().pos.new.path.points,\n x = (points[0].x + points[1].x)/2,\n y = (points[0].y + points[1].y)/2;\n return {x: x, y: y-10, width:0, height: 20};\n };\n options.thing_label = function(edge) {\n return _behavior.parent().edgeLabel.eval(edge.datum());\n };\n options.accept = function(edge, text) {\n var callback = _behavior.changeEdgeLabel() ?\n _behavior.changeEdgeLabel()(_behavior.parent().edgeKey.eval(edge.datum()), text) :\n Promise.resolve(text);\n return callback.then(function(text2) {\n var e = edge.datum();\n e.orig.value[_labelTag] = text2;\n _behavior.parent().redrawGroup();\n });\n };\n\n var _behavior = dc_graph.label_things(options);\n _behavior.changeEdgeLabel = property(null);\n return _behavior;\n};\n","dc_graph.register_highlight_things_group = function(thingsgroup) {\n window.chart_registry.create_type('highlight-things', function() {\n return d3.dispatch('highlight');\n });\n\n return window.chart_registry.create_group('highlight-things', thingsgroup);\n};\n","dc_graph.highlight_things = function(includeprops, excludeprops, modename, groupname, cascbase) {\n var highlight_things_group = dc_graph.register_highlight_things_group(groupname || 'highlight-things-group');\n var _active, _nodeset = {}, _edgeset = {};\n cascbase = cascbase || 150;\n\n function highlight(nodeset, edgeset) {\n _active = nodeset || edgeset;\n _nodeset = nodeset || {};\n _edgeset = edgeset || {};\n _behavior.parent().requestRefresh(_behavior.durationOverride());\n }\n function add_behavior(diagram) {\n diagram.cascade(cascbase, true, node_edge_conditions(\n function(n) {\n return _nodeset[_behavior.parent().nodeKey.eval(n)];\n }, function(e) {\n return _edgeset[_behavior.parent().edgeKey.eval(e)];\n }, includeprops));\n diagram.cascade(cascbase+10, true, node_edge_conditions(\n function(n) {\n return _active && !_nodeset[_behavior.parent().nodeKey.eval(n)];\n }, function(e) {\n return _active && !_edgeset[_behavior.parent().edgeKey.eval(e)];\n }, excludeprops));\n }\n function remove_behavior(diagram) {\n diagram.cascade(cascbase, false, includeprops);\n diagram.cascade(cascbase + 10, false, excludeprops);\n }\n var _behavior = dc_graph.behavior(modename, {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior,\n parent: function(p) {\n highlight_things_group.on('highlight.' + modename, p ? highlight : null);\n }\n });\n _behavior.durationOverride = property(undefined);\n return _behavior;\n};\n","dc_graph.register_highlight_neighbors_group = function(neighborsgroup) {\n window.chart_registry.create_type('highlight-neighbors', function() {\n return d3.dispatch('highlight_node');\n });\n\n return window.chart_registry.create_group('highlight-neighbors', neighborsgroup);\n};\n","dc_graph.highlight_neighbors = function(includeprops, excludeprops, neighborsgroup, thingsgroup) {\n var highlight_neighbors_group = dc_graph.register_highlight_neighbors_group(neighborsgroup || 'highlight-neighbors-group');\n var highlight_things_group = dc_graph.register_highlight_things_group(thingsgroup || 'highlight-things-group');\n\n function highlight_node(nodeid) {\n var diagram = _behavior.parent();\n var nodeset = {}, edgeset = {};\n if(nodeid) {\n nodeset[nodeid] = true;\n _behavior.parent().selectAllEdges().each(function(e) {\n if(diagram.nodeKey.eval(e.source) === nodeid) {\n edgeset[diagram.edgeKey.eval(e)] = true;\n nodeset[diagram.nodeKey.eval(e.target)] = true;\n }\n if(diagram.nodeKey.eval(e.target) === nodeid) {\n edgeset[diagram.edgeKey.eval(e)] = true;\n nodeset[diagram.nodeKey.eval(e.source)] = true;\n }\n });\n highlight_things_group.highlight(nodeset, edgeset);\n }\n else highlight_things_group.highlight(null, null);\n }\n function add_behavior(diagram, node, edge) {\n node\n .on('mouseover.highlight-neighbors', function(n) {\n highlight_neighbors_group.highlight_node(_behavior.parent().nodeKey.eval(n));\n })\n .on('mouseout.highlight-neighbors', function(n) {\n highlight_neighbors_group.highlight_node(null);\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n node\n .on('mouseover.highlight-neighbors', null)\n .on('mouseout.highlight-neighbors', null);\n highlight_neighbors_group.highlight_node(null);\n }\n\n var _behavior = dc_graph.behavior('highlight-neighbors', {\n add_behavior: add_behavior,\n remove_behavior: function(diagram, node, edge) {\n remove_behavior(diagram, node, edge);\n },\n parent: function(p) {\n highlight_neighbors_group.on('highlight_node.highlight', p ? highlight_node : null);\n if(!p.child('highlight-things'))\n p.child('highlight-things',\n dc_graph.highlight_things(includeprops, excludeprops)\n .durationOverride(_behavior.durationOverride()));\n }\n });\n _behavior.durationOverride = property(undefined);\n return _behavior;\n};\n\n","dc_graph.highlight_radius = function(options) {\n options = options || {};\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes');\n var highlight_things_group = dc_graph.register_highlight_things_group(options.highlight_things_group || 'highlight-things-group');\n var _graph, _selection = [];\n\n function recurse(n, r, nodeset, edgeset) {\n nodeset[n.key()] = true;\n if(r) {\n n.outs().filter(function(e) {\n return !edgeset[e.key()];\n }).forEach(function(e) {\n edgeset[e.key()] = true;\n recurse(e.target(), r-1, nodeset, edgeset);\n });\n n.ins().filter(function(e) {\n return !edgeset[e.key()];\n }).forEach(function(e) {\n edgeset[e.key()] = true;\n recurse(e.source(), r-1, nodeset, edgeset);\n });\n }\n }\n function selection_changed(nodes) {\n _selection = nodes;\n console.assert(_graph);\n var nodeset = {}, edgeset = {};\n nodes.forEach(function(nkey) {\n recurse(_graph.node(nkey), _behavior.radius(), nodeset, edgeset);\n });\n if(!Object.keys(nodeset).length && !Object.keys(edgeset).length)\n nodeset = edgeset = null;\n highlight_things_group.highlight(nodeset, edgeset);\n }\n\n function on_data(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _graph = metagraph.graph(wnodes, wedges, {\n nodeKey: diagram.nodeKey.eval,\n edgeKey: diagram.edgeKey.eval,\n edgeSource: diagram.edgeSource.eval,\n edgeTarget: diagram.edgeTarget.eval\n });\n var sel2 = _selection.filter(function(nk) {\n return !!_graph.node(nk);\n });\n if(sel2.length < _selection.length)\n window.setTimeout(function() {\n select_nodes_group.set_changed(sel2);\n }, 0);\n }\n var _behavior = {\n parent: function(p) {\n if(p) {\n p.on('data.fix-nodes', on_data);\n } else if(_behavior.parent())\n _behavior.parent().on('data.fix-nodes', null);\n select_nodes_group.on('set_changed', selection_changed);\n }\n };\n _behavior.radius = property(1);\n return _behavior;\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 var _anchor;\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 selected = hoverpaths = null;\n // it would be difficult to check if no change, but at least check if changing from empty to empty\n if(Object.keys(node_on_paths).length === 0 && Object.keys(nop).length === 0 &&\n Object.keys(edge_on_paths).length === 0 && Object.keys(eop).length === 0)\n return;\n node_on_paths = nop;\n edge_on_paths = eop;\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(diagram, node, edge, ehover) {\n diagram\n .cascade(200, true, node_edge_conditions(function(n) {\n return !!node_on_paths[diagram.nodeKey.eval(n)];\n }, function(e) {\n return !!edge_on_paths[diagram.edgeKey.eval(e)];\n }, pathprops))\n .cascade(300, true, node_edge_conditions(function(n) {\n return intersect_paths(node_on_paths[diagram.nodeKey.eval(n)], selected);\n }, function(e) {\n return intersect_paths(edge_on_paths[diagram.edgeKey.eval(e)], selected);\n }, selectprops))\n .cascade(400, true, node_edge_conditions(function(n) {\n return intersect_paths(node_on_paths[diagram.nodeKey.eval(n)], hoverpaths);\n }, function(e) {\n return intersect_paths(edge_on_paths[diagram.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[diagram.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[diagram.nodeKey.eval(n)]));\n });\n\n\n ehover\n .on('mouseover.highlight-paths', function(e) {\n highlight_paths_group.hover_changed(edge_on_paths[diagram.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[diagram.nodeKey.eval(n)]));\n });\n }\n\n function remove_behavior(diagram, 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 diagram\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(diagram, node, edge, ehover) {\n remove_behavior(diagram, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n if(p)\n _anchor = p.anchorName();\n // else we should have received anchor earlier\n highlight_paths_group.on('paths_changed.highlight' + _anchor, p ? paths_changed : null);\n highlight_paths_group.on('hover_changed.highlight' + _anchor, p ? hover_changed : null);\n highlight_paths_group.on('select_changed.highlight' + _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.draw_spline_paths = function(pathreader, 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 var _paths = null, _hoverpaths = null, _selected = null;\n var _anchor;\n var _layer = null;\n var _savedPositions = null;\n\n function paths_changed(nop, eop, paths) {\n _paths = paths;\n\n var engine = _behavior.parent().layoutEngine(),\n localPaths = paths.filter(pathIsPresent);\n if(localPaths.length) {\n var nidpaths = localPaths.map(function(lpath) {\n var strength = pathreader.pathStrength.eval(lpath);\n if(typeof strength !== 'number')\n strength = 1;\n if(_selected && _selected.indexOf(lpath) !== -1)\n strength *= _behavior.selectedStrength();\n return {\n nodes: path_keys(lpath),\n strength: strength\n };\n });\n engine.paths(nidpaths);\n } else {\n engine.paths(null);\n if(_savedPositions)\n engine.restorePositions(_savedPositions);\n }\n if(_selected)\n _selected = _selected.filter(function(p) { return localPaths.indexOf(p) !== -1; });\n _behavior.parent().redraw();\n }\n\n function select_changed(sp) {\n if(sp !== _selected) {\n _selected = sp;\n paths_changed(null, null, _paths);\n }\n }\n\n function path_keys(path, unique) {\n unique = unique !== false;\n var keys = pathreader.elementList.eval(path).filter(function(elem) {\n return pathreader.elementType.eval(elem) === 'node';\n }).map(function(elem) {\n return pathreader.nodeKey.eval(elem);\n });\n return unique ? uniq(keys) : keys;\n }\n\n // check if entire path is present in this view\n function pathIsPresent(path) {\n return pathreader.elementList.eval(path).every(function(element) {\n return pathreader.elementType.eval(element) !== 'node' ||\n _behavior.parent().getWholeNode(pathreader.nodeKey.eval(element));\n });\n }\n\n // get the positions of nodes on path\n function getNodePositions(path, old) {\n return path_keys(path, false).map(function(key) {\n var node = _behavior.parent().getWholeNode(key);\n return {x: old && node.prevX !== undefined ? node.prevX : node.cola.x,\n y: old && node.prevY !== undefined ? node.prevY : node.cola.y};\n });\n };\n\n // insert fake nodes to avoid sharp turns\n function insertDummyNodes(path_coord) {\n function _distance(node1, node2) {\n return Math.sqrt(Math.pow((node1.x-node2.x),2) + Math.pow((node1.y-node2.y),2));\n }\n\n var new_path_coord = [];\n\n for(var i = 0; i < path_coord.length; i ++) {\n if (i-1 >= 0 && i+1 < path_coord.length) {\n if (path_coord[i-1].x === path_coord[i+1].x &&\n path_coord[i-1].y === path_coord[i+1].y ) {\n // insert node when the previous and next nodes are the same\n var x1 = path_coord[i-1].x, y1 = path_coord[i-1].y;\n var x2 = path_coord[i].x, y2 = path_coord[i].y;\n var dx = x1 - x2, dy = y1 - y2;\n\n var v1 = dy / Math.sqrt(dx*dx + dy*dy);\n var v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p1 = {'x': null, 'y': null};\n var insert_p2 = {'x': null, 'y': null};\n\n var offset = 10;\n\n insert_p1.x = (x1+x2)/2.0 + offset*v1;\n insert_p1.y = (y1+y2)/2.0 + offset*v2;\n\n insert_p2.x = (x1+x2)/2.0 - offset*v1;\n insert_p2.y = (y1+y2)/2.0 - offset*v2;\n\n new_path_coord.push(insert_p1);\n new_path_coord.push(path_coord[i]);\n new_path_coord.push(insert_p2);\n } else if (_distance(path_coord[i-1], path_coord[i+1]) < pathprops.nearNodesDistance){\n // insert node when the previous and next nodes are very close\n // first node\n var x1 = path_coord[i-1].x, y1 = path_coord[i-1].y;\n var x2 = path_coord[i].x, y2 = path_coord[i].y;\n var dx = x1 - x2, dy = y1 - y2;\n\n var v1 = dy / Math.sqrt(dx*dx + dy*dy);\n var v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p1 = {'x': null, 'y': null};\n\n var offset = 10;\n\n insert_p1.x = (x1+x2)/2.0 + offset*v1;\n insert_p1.y = (y1+y2)/2.0 + offset*v2;\n\n // second node\n x1 = path_coord[i].x;\n y1 = path_coord[i].y;\n x2 = path_coord[i+1].x;\n y2 = path_coord[i+1].y;\n dx = x1 - x2;\n dy = y1 - y2;\n\n v1 = dy / Math.sqrt(dx*dx + dy*dy);\n v2 = - dx / Math.sqrt(dx*dx + dy*dy);\n\n var insert_p2 = {'x': null, 'y': null};\n\n insert_p2.x = (x1+x2)/2.0 + offset*v1;\n insert_p2.y = (y1+y2)/2.0 + offset*v2;\n\n new_path_coord.push(insert_p1);\n new_path_coord.push(path_coord[i]);\n new_path_coord.push(insert_p2);\n\n }\n else {\n new_path_coord.push(path_coord[i]);\n }\n } else {\n new_path_coord.push(path_coord[i]);\n }\n }\n return new_path_coord;\n }\n\n // helper functions\n var vecDot = function(v0, v1) { return v0.x*v1.x+v0.y*v1.y; };\n var vecMag = function(v) { return Math.sqrt(v.x*v.x + v.y*v.y); };\n var l2Dist = function(p1, p2) {\n return Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));\n };\n\n function drawCardinalSpline(points, lineTension, avoidSharpTurn, angleThreshold) {\n var c = lineTension || 0;\n avoidSharpTurn = avoidSharpTurn !== false;\n angleThreshold = angleThreshold || 0.02;\n\n // get the path without self loops\n var path_list = [points[0]];\n for(var i = 1; i < points.length; i ++) {\n if(l2Dist(points[i], path_list[path_list.length-1]) > 1e-6) {\n path_list.push(points[i]);\n }\n }\n\n // repeat first and last node\n points = [path_list[0]];\n points = points.concat(path_list);\n points.push(path_list[path_list.length-1]);\n\n // a segment is a list of three points: [c0, c1, p1],\n // representing the coordinates in \"C x0,y0,x1,y1,x,y\" in svg:path\n var segments = []; // control points\n for(var i = 1; i < points.length-2; i ++) {\n // generate svg:path\n var m_0_x = (1-c)*(points[i+1].x - points[i-1].x)/2;\n var m_0_y = (1-c)*(points[i+1].y - points[i-1].y)/2;\n\n var m_1_x = (1-c)*(points[i+2].x - points[i].x)/2;\n var m_1_y = (1-c)*(points[i+2].y - points[i].y)/2;\n\n var p0 = points[i];\n var p1 = points[i+1];\n var c0 = p0;\n if(i !== 1) {\n c0 = {x: p0.x+(m_0_x/3), y:p0.y+(m_0_y/3)};\n }\n var c1 = p1;\n if(i !== points.length-3) {\n c1 = {x: p1.x-(m_1_x/3), y:p1.y-(m_1_y/3)};\n }\n\n // detect special case by calculating the angle\n if(avoidSharpTurn) {\n var v0 = {x:points[i-1].x - points[i].x, y:points[i-1].y - points[i].y};\n var v1 = {x:points[i+1].x - points[i].x, y:points[i+1].y - points[i].y};\n var acosValue = vecDot(v0,v1) / (vecMag(v0)*vecMag(v1));\n acosValue = Math.max(-1, Math.min(1, acosValue));\n var angle = Math.acos( acosValue );\n\n if(angle <= angleThreshold ){\n var m_x = (1-c)*(points[i].x - points[i-1].x)/2;\n var m_y = (1-c)*(points[i].y - points[i-1].y)/2;\n var k = 2;\n\n var cp1 = {x: p0.x+k*(-m_y/3), y:p0.y+k*(m_x/3)};\n var cp2 = {x: p0.x-k*(-m_y/3), y:p0.y-k*(m_x/3)};\n // CP_1CP_2\n var vCP = {x: cp1.x-cp2.x, y:cp1.y-cp2.y}; // vector cp1->cp2\n var vPN = {x: points[i-2].x - points[i+2].x, y:points[i-2].y-points[i+2].y}; // vector Previous->Next\n if(vecDot(vCP, vPN) > 0) {\n c0 = cp1;\n segments[segments.length-1][1] = cp2;\n } else {\n c0 = cp2;\n segments[segments.length-1][1] = cp1;\n }\n }\n }\n\n segments.push([c0,c1,p1]);\n }\n\n var path_d = \"M\"+points[0].x+\",\"+points[0].y;\n for(var i = 0; i < segments.length; i ++) {\n var s = segments[i];\n path_d += \"C\"+s[0].x+\",\"+s[0].y;\n path_d += \",\"+s[1].x+\",\"+s[1].y;\n path_d += \",\"+s[2].x+\",\"+s[2].y;\n }\n return path_d;\n }\n\n function drawDedicatedLoops(points, lineTension, avoidSharpTurn, angleThreshold) {\n // get loops as segments\n var p1 = 0, p2 = 1;\n var seg_list = []; // (start, end)\n while(p1 < points.length-1 && p2 < points.length) {\n if(l2Dist(points[p1], points[p2]) < 1e-6) {\n var repeated = points[p2];\n while(p2 < points.length && l2Dist(points[p2], repeated) < 1e-6) p2++;\n seg_list.push({'start': Math.max(0, p1-1), 'end': Math.min(points.length-1, p2)});\n p1 = p2;\n p2 = p1+1;\n } else {\n p1++;\n p2++;\n }\n }\n\n var loopCurves = \"\";\n for(var i = 0; i < seg_list.length; i ++) {\n var segment = seg_list[i];\n var loopCount = segment.end - segment.start - 2;\n var anchorPoint = points[segment.start+1];\n\n // the vector from previous node to next node\n var vec_pre_next = {\n x: points[segment.end].x-points[segment.start].x,\n y: points[segment.end].y-points[segment.start].y\n };\n\n // when previous node and next node are the same node, we need to handle\n // them differently.\n // e.g. for a loop segment A->B->B->A, we use the perpendicular vector perp_AB\n // instead of vector AA(which is vec_pre_next in this case).\n if(vecMag(vec_pre_next) == 0) {\n vec_pre_next = {\n x: -(points[segment.end].y-anchorPoint.y),\n y: points[segment.end].x-anchorPoint.x\n };\n }\n\n // unit length vector\n var vec_pre_next_unit = {\n x: vec_pre_next.x / vecMag(vec_pre_next),\n y: vec_pre_next.y / vecMag(vec_pre_next)\n };\n var vec_pre_next_perp = {\n x: -vec_pre_next.y / vecMag(vec_pre_next),\n y: vec_pre_next.x / vecMag(vec_pre_next)\n };\n\n var insertP;\n for(var j = 0; j < loopCount; j ++) {\n var c1,c2,c3,c4;\n\n // change the control points every time this loop appears\n var cp_k = 15+2*j;\n\n // calculate c1 and c4, their tangent match the tangent at anchorPoint\n c1 = {\n x: anchorPoint.x + cp_k*vec_pre_next_unit.x,\n y: anchorPoint.y + cp_k*vec_pre_next_unit.y\n };\n\n c4 = {\n x: anchorPoint.x - cp_k*vec_pre_next_unit.x,\n y: anchorPoint.y - cp_k*vec_pre_next_unit.y\n };\n\n // change the location of inserted virtual point every time this loop appears\n var control_k = 25+5*j;\n var insertP1 = {\n x: anchorPoint.x+vec_pre_next_perp.x*control_k,\n y: anchorPoint.y+vec_pre_next_perp.y*control_k\n };\n var insertP2 = {\n x: anchorPoint.x-vec_pre_next_perp.x*control_k,\n y: anchorPoint.y-vec_pre_next_perp.y*control_k\n };\n var vec_i_to_next = {\n x: points[segment.end].x - anchorPoint.x,\n y: points[segment.end].y - anchorPoint.y\n };\n var vec_i_to_insert = {\n x: insertP1.x - anchorPoint.x,\n y: insertP1.y - anchorPoint.y\n };\n insertP = insertP1;\n if(vecDot(vec_i_to_insert, vec_i_to_next) > 0) {\n insertP = insertP2;\n }\n\n // calculate c2 and c3 based on insertP\n c2 = {\n x: insertP.x + cp_k*vec_pre_next_unit.x,\n y: insertP.y + cp_k*vec_pre_next_unit.y\n };\n\n c3 = {\n x: insertP.x - cp_k*vec_pre_next_unit.x,\n y: insertP.y - cp_k*vec_pre_next_unit.y\n };\n\n var curve = \"M\"+anchorPoint.x+\",\"+anchorPoint.y;\n curve += \"C\"+c1.x+\",\"+c1.y+\",\"+c2.x+\",\"+c2.y+\",\"+insertP.x+\",\"+insertP.y;\n curve += \"C\"+c3.x+\",\"+c3.y+\",\"+c4.x+\",\"+c4.y+\",\"+anchorPoint.x+\",\"+anchorPoint.y;\n\n loopCurves += curve;\n }\n }\n return loopCurves;\n }\n\n // convert original path data into \n function genPath(originalPoints, old, lineTension, avoidSharpTurn, angleThreshold) {\n // get coordinates\n var path_coord = getNodePositions(originalPoints, old);\n if(path_coord.length < 2) return \"\";\n\n var result = \"\";\n // process the points and treat them differently:\n // 1. sub-path without self loop\n result += drawCardinalSpline(path_coord, lineTension, avoidSharpTurn, angleThreshold);\n\n // 2. a list of loop segments\n result += drawDedicatedLoops(path_coord, lineTension, avoidSharpTurn, angleThreshold);\n\n return result;\n }\n\n // draw the spline for paths\n function drawSpline(paths) {\n if(paths === null) {\n _savedPositions = _behavior.parent().layoutEngine().savePositions();\n return;\n }\n\n paths = paths.filter(pathIsPresent);\n var hoverpaths = _hoverpaths || [],\n selected = _selected || [];\n\n // edge spline\n var edge = _layer.selectAll(\".spline-edge\").data(paths, function(path) { return path_keys(path).join(','); });\n edge.exit().remove();\n var edgeEnter = edge.enter().append(\"svg:path\")\n .attr('class', 'spline-edge')\n .attr('id', function(d, i) { return \"spline-path-\"+i; })\n .attr('stroke-width', pathprops.edgeStrokeWidth || 1)\n .attr('fill', 'none')\n .attr('d', function(d) { return genPath(d, true, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n edge\n .attr('stroke', function(p) {\n return selected.indexOf(p) !== -1 && selectprops.edgeStroke ||\n hoverpaths.indexOf(p) !== -1 && hoverprops.edgeStroke ||\n pathprops.edgeStroke || 'black';\n })\n .attr('opacity', function(p) {\n return selected.indexOf(p) !== -1 && selectprops.edgeOpacity ||\n hoverpaths.indexOf(p) !== -1 && hoverprops.edgeOpacity ||\n pathprops.edgeOpacity || 1;\n });\n function path_order(p) {\n return hoverpaths.indexOf(p) !== -1 ? 2 :\n selected.indexOf(p) !== -1 ? 1 :\n 0;\n }\n edge.sort(function(a, b) {\n return path_order(a) - path_order(b);\n });\n _layer.selectAll('.spline-edge-hover')\n .each(function() {this.parentNode.appendChild(this);});\n edge.transition().duration(_behavior.parent().transitionDuration())\n .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n\n // another wider copy of the edge just for hover events\n var edgeHover = _layer.selectAll('.spline-edge-hover')\n .data(paths, function(path) { return path_keys(path).join(','); });\n edgeHover.exit().remove();\n var edgeHoverEnter = edgeHover.enter().append('svg:path')\n .attr('class', 'spline-edge-hover')\n .attr('d', function(d) { return genPath(d, true, pathprops.lineTension, _behavior.avoidSharpTurns()); })\n .attr('opacity', 0)\n .attr('stroke', 'green')\n .attr('stroke-width', (pathprops.edgeStrokeWidth || 1) + 4)\n .attr('fill', 'none')\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 var selected = _selected && _selected.slice(0) || [],\n i = selected.indexOf(d);\n if(i !== -1)\n selected.splice(i, 1);\n else if(d3.event.shiftKey)\n selected.push(d);\n else\n selected = [d];\n highlight_paths_group.select_changed(selected);\n });\n edgeHover.transition().duration(_behavior.parent().transitionDuration())\n .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _behavior.avoidSharpTurns()); });\n };\n\n function add_behavior(diagram, node, edge, ehover) {\n _layer = _behavior.parent().select('g.draw').selectAll('g.spline-layer').data([0]);\n _layer.enter().append('g').attr('class', 'spline-layer');\n\n drawSpline(_paths);\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n }\n\n var _behavior = dc_graph.behavior('draw-spline-paths', {\n laterDraw: true,\n add_behavior: add_behavior,\n remove_behavior: function(diagram, node, edge, ehover) {\n remove_behavior(diagram, node, edge, ehover);\n return this;\n },\n parent: function(p) {\n if(p)\n _anchor = p.anchorName();\n highlight_paths_group\n .on('paths_changed.draw-spline-paths-' + _anchor, p ? paths_changed : null)\n .on('select_changed.draw-spline-paths-' + _anchor, p ? select_changed : null)\n .on('hover_changed.draw-spline-paths-' + _anchor, p ? function(hpaths) {\n _hoverpaths = hpaths;\n drawSpline(_paths);\n } : null);\n }\n });\n _behavior.selectedStrength = property(1);\n _behavior.avoidSharpTurns = property(true);\n\n return _behavior;\n};\n","dc_graph.expand_collapse = function(options) {\n if(typeof options === 'function') {\n options = {\n get_degree: arguments[0],\n expand: arguments[1],\n collapse: arguments[2],\n dirs: arguments[3]\n };\n }\n var _keyboard, _overNode, _overDir, _expanded = {};\n var expanded_highlight_group = dc_graph.register_highlight_things_group(options.expanded_highlight_group || 'expanded-highlight-group');\n var collapse_highlight_group = dc_graph.register_highlight_things_group(options.collapse_highlight_group || 'collapse-highlight-group');\n var hide_highlight_group = dc_graph.register_highlight_things_group(options.hide_highlight_group || 'hide-highlight-group');\n options.dirs = options.dirs || ['both'];\n options.dirs.forEach(function(dir) {\n _expanded[dir] = {};\n });\n options.hideKey = options.hideKey || 'Alt';\n if(options.dirs.length > 2)\n throw new Error('there are only two directions to expand in');\n\n function add_gradient_def(diagram) {\n var gradient = diagram.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(diagram, edge, dir, key) {\n var fil;\n switch(dir) {\n case 'out':\n fil = function(e) {\n return diagram.edgeSource.eval(e) === key;\n };\n break;\n case 'in':\n fil = function(e) {\n return diagram.edgeTarget.eval(e) === key;\n };\n break;\n case 'both':\n fil = function(e) {\n return diagram.edgeSource.eval(e) === key || diagram.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_stubs(diagram, node, edge, n, spikes) {\n if(n && _expanded[spikes.dir][diagram.nodeKey.eval(n)])\n spikes = null;\n var spike = node\n .selectAll('g.spikes')\n .data(function(n2) {\n return spikes && n === n2 ?\n [n2] : [];\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(n) {\n var key = diagram.nodeKey.eval(n);\n var dir = spikes.dir,\n N = spikes.n,\n af = spike_directioner(diagram.layoutEngine().rankdir(), dir, N),\n ret = Array(N);\n for(var i = 0; i n.cola.y ? 'out' : 'in';\n case 'BT':\n return y < n.cola.y ? 'out' : 'in';\n case 'LR':\n return x > n.cola.x ? 'out' : 'in';\n case 'RL':\n return x < n.cola.x ? 'out' : 'in';\n }\n throw new Error('unknown rankdir ' + diagram.layoutEngine().rankdir());\n }\n\n function detect_key(key) {\n switch(key) {\n case 'Alt':\n return d3.event.altKey;\n case 'Meta':\n return d3.event.metaKey;\n case 'Shift':\n return d3.event.shiftKey;\n case 'Control':\n return d3.event.ctrlKey;\n }\n return false;\n }\n\n function highlight_hiding(diagram, n, edge) {\n var nk = diagram.nodeKey.eval(n);\n var hide_nodes_set = {}, hide_edges_set = {};\n hide_nodes_set[nk] = true;\n edge.each(function(e) {\n if(diagram.edgeSource.eval(e) === nk || diagram.edgeTarget.eval(e) === nk)\n hide_edges_set[diagram.edgeKey.eval(e)] = true;\n });\n hide_highlight_group.highlight(hide_nodes_set, hide_edges_set);\n }\n\n function highlight_collapse(diagram, n, node, edge, dir) {\n var nk = diagram.nodeKey.eval(n);\n Promise.resolve(options.get_degree(nk, dir)).then(function(degree) {\n var spikes = {\n dir: dir,\n n: Math.max(0, degree - view_degree(diagram, edge, dir, nk)) // be tolerant of inconsistencies\n };\n draw_stubs(diagram, node, edge, n, spikes);\n var collapse_nodes_set = {}, collapse_edges_set = {};\n if(_expanded[dir][nk] && options.collapsibles) {\n var clps = options.collapsibles(nk, dir);\n collapse_nodes_set = clps.nodes;\n collapse_edges_set = clps.edges;\n }\n collapse_highlight_group.highlight(collapse_nodes_set, collapse_edges_set);\n });\n }\n\n function add_behavior(diagram, node, edge) {\n function mousemove(n) {\n console.log('collapse mousemove');\n var dir = zonedir(diagram, d3.event, options.dirs, n);\n _overNode = n;\n _overDir = dir;\n if(options.hide && detect_key(options.hideKey))\n highlight_hiding(diagram, n, edge);\n else\n highlight_collapse(diagram, n, node, edge, dir);\n }\n function click(n) {\n var nk = diagram.nodeKey.eval(n);\n if(options.hide && detect_key(options.hideKey))\n options.hide(nk);\n else {\n clear_stubs(diagram, node, edge);\n var dir = zonedir(diagram, d3.event, options.dirs, n);\n expand(dir, nk, !_expanded[dir][nk]);\n }\n }\n\n node\n .on('mouseover.expand-collapse', mousemove)\n .on('mousemove.expand-collapse', mousemove)\n .on('mouseout.expand-collapse', function(n) {\n console.log('collapse mouseout');\n _overNode = null;\n clear_stubs(diagram, node, edge);\n collapse_highlight_group.highlight({}, {});\n hide_highlight_group.highlight({}, {});\n })\n .on('click', click)\n .on('dblclick', click);\n\n _keyboard\n .on('keydown.expand-collapse', function() {\n if(d3.event.key === options.hideKey && _overNode) {\n highlight_hiding(diagram, _overNode, edge);\n clear_stubs(diagram, node, edge);\n collapse_highlight_group.highlight({}, {});\n }\n })\n .on('keyup.expand_collapse', function() {\n if(d3.event.key === options.hideKey && _overNode) {\n hide_highlight_group.highlight({}, {});\n highlight_collapse(diagram, _overNode, node, edge, _overDir);\n }\n });\n }\n\n function remove_behavior(diagram, node, edge) {\n node\n .on('mouseover.expand-collapse', null)\n .on('mouseout.expand-collapse', null);\n clear_stubs(diagram, node, edge);\n }\n\n function expand(dir, nk, whether) {\n var exec;\n _expanded[dir][nk] = whether;\n expanded_highlight_group.highlight(_expanded.both, {});\n if(whether)\n options.expand(nk, dir);\n else\n options.collapse(nk, dir);\n }\n\n var _behavior = dc_graph.behavior('expand-collapse', {\n add_behavior: add_behavior,\n first: add_gradient_def,\n remove_behavior: remove_behavior,\n parent: function(p) {\n if(p) {\n _keyboard = p.child('keyboard');\n if(!_keyboard)\n p.child('keyboard', _keyboard = dc_graph.keyboard());\n }\n }\n });\n\n _behavior.expand = expand;\n return _behavior;\n};\n","dc_graph.expand_collapse.shown_hidden = function(opts) {\n var options = Object.assign({\n nodeKey: function(n) { return n.key; }, // this one is raw rows, others are post-crossfilter-group\n edgeKey: function(e) { return e.key; },\n edgeSource: function(e) { return e.value.source; },\n edgeTarget: function(e) { return e.value.target; }\n }, opts);\n var _shown = {}, _hidden = {};\n\n // independent dimension on keys so that the diagram dimension will observe it\n var _filter = options.nodeCrossfilter.dimension(options.nodeKey);\n function apply_filter() {\n _filter.filterFunction(function(nk) {\n return _shown[nk];\n });\n }\n function adjacent_edges(nk) {\n return options.edgeGroup.all().filter(function(e) {\n return options.edgeSource(e) === nk || options.edgeTarget(e) === nk;\n });\n }\n function adjacent_nodes(nk) {\n return adjacent_edges(nk).map(function(e) {\n return options.edgeSource(e) === nk ? options.edgeTarget(e) : options.edgeSource(e);\n });\n }\n function adjacencies(nk) {\n return adjacent_edges(nk).map(function(e) {\n return options.edgeSource(e) === nk ? [e,options.edgeTarget(e)] : [e,options.edgeSource(e)];\n });\n }\n function out_edges(nk) {\n return options.edgeGroup.all().filter(function(e) {\n return options.edgeSource(e) === nk;\n });\n }\n function in_edges(nk) {\n return options.edgeGroup.all().filter(function(e) {\n return options.edgeTarget(e) === nk;\n });\n }\n function is_collapsible(n1, n2) {\n return options.edgeGroup.all().every(function(e2) {\n var n3;\n if(options.edgeSource(e2) === n2)\n n3 = options.edgeTarget(e2);\n else if(options.edgeTarget(e2) === n2)\n n3 = options.edgeSource(e2);\n return !n3 || n3 === n1 || !_shown[n3];\n });\n }\n apply_filter();\n var _strategy = {};\n if(options.directional)\n Object.assign(_strategy, {\n get_degree: function(nk, dir) {\n switch(dir) {\n case 'out': return out_edges(nk).length;\n case 'in': return in_edges(nk).length;\n default: throw new Error('unknown direction ' + dir);\n }\n },\n expand: function(nk, dir) {\n _shown[nk] = true;\n switch(dir) {\n case 'out':\n out_edges(nk).forEach(function(e) {\n if(!_hidden[options.edgeTarget(e)])\n _shown[options.edgeTarget(e)] = true;\n });\n break;\n case 'in':\n in_edges(nk).forEach(function(e) {\n if(!_hidden[options.edgeSource(e)])\n _shown[options.edgeSource(e)] = true;\n });\n break;\n default: throw new Error('unknown direction ' + dir);\n }\n apply_filter();\n dc.redrawAll();\n },\n collapsibles: function(nk, dir) {\n var nodes = {}, edges = {};\n (dir === 'out' ? out_edges(nk) : in_edges(nk)).forEach(function(e) {\n var n2 = dir === 'out' ? options.edgeTarget(e) : options.edgeSource(e);\n if(is_collapsible(nk, n2)) {\n nodes[n2] = true;\n adjacent_edges(n2).forEach(function(e) {\n edges[options.edgeKey(e)] = true;\n });\n }\n });\n return {nodes: nodes, edges: edges};\n },\n collapse: function(nk, dir) {\n Object.keys(this.collapsibles(nk, dir).nodes).forEach(function(nk) {\n _shown[nk] = false;\n });\n apply_filter();\n dc.redrawAll();\n },\n hide: function(nk) {\n _hidden[nk] = true;\n _shown[nk] = false;\n apply_filter();\n dc.redrawAll();\n },\n dirs: ['out', 'in']\n });\n else\n Object.assign(_strategy, {\n get_degree: function(nk) {\n return adjacent_edges(nk).length;\n },\n expand: function(nk) {\n _shown[nk] = true;\n adjacent_nodes(nk).forEach(function(nk) {\n if(!_hidden[nk])\n _shown[nk] = true;\n });\n apply_filter();\n dc.redrawAll();\n },\n collapsibles: function(nk, dir) {\n var nodes = {}, edges = {};\n adjacencies(nk).forEach(function(adj) {\n var e = adj[0], n2 = adj[1];\n if(is_collapsible(nk, n2)) {\n nodes[n2] = true;\n edges[options.edgeKey(e)] = true;\n }\n });\n return {nodes: nodes, edges: edges};\n },\n collapse: function(nk, dir) {\n Object.keys(_strategy.collapsibles(nk, dir).nodes).forEach(function(nk) {\n _shown[nk] = false;\n });\n apply_filter();\n dc.redrawAll();\n },\n hide: function(nk) {\n _hidden[nk] = true;\n _shown[nk] = false;\n apply_filter();\n dc.redrawAll();\n }\n });\n return _strategy;\n};\n","dc_graph.expand_collapse.expanded_hidden = function(opts) {\n var options = Object.assign({\n nodeKey: function(n) { return n.key; },\n edgeKey: function(e) { return e.key; },\n edgeSource: function(e) { return e.value.source; },\n edgeTarget: function(e) { return e.value.target; }\n }, opts);\n var _expanded = {}, _hidden = {};\n\n // independent dimension on keys so that the diagram dimension will observe it\n var _filter = options.nodeCrossfilter.dimension(options.nodeKey);\n\n function get_shown(expanded) {\n return Object.keys(expanded).reduce(function(p, nk) {\n p[nk] = true;\n adjacent_nodes(nk).forEach(function(nk2) {\n if(!_hidden[nk2])\n p[nk2] = true;\n });\n return p;\n }, {});\n }\n function apply_filter() {\n var _shown = get_shown(_expanded);\n _filter.filterFunction(function(nk) {\n return _shown[nk];\n });\n }\n function adjacent_edges(nk) {\n return options.edgeGroup.all().filter(function(e) {\n return options.edgeSource(e) === nk || options.edgeTarget(e) === nk;\n });\n }\n // function out_edges(nk) {\n // return options.edgeGroup.all().filter(function(e) {\n // return options.edgeSource(e) === nk;\n // });\n // }\n // function in_edges(nk) {\n // return options.edgeGroup.all().filter(function(e) {\n // return options.edgeTarget(e) === nk;\n // });\n // }\n function adjacent_nodes(nk) {\n return adjacent_edges(nk).map(function(e) {\n return options.edgeSource(e) === nk ? options.edgeTarget(e) : options.edgeSource(e);\n });\n }\n\n apply_filter();\n var _strategy = {\n get_degree: function(nk) {\n return adjacent_edges(nk).length;\n },\n expand: function(nk) {\n _expanded[nk] = true;\n apply_filter();\n dc.redrawAll();\n },\n collapsibles: function(nk, dir) {\n var whatif = Object.assign({}, _expanded);\n delete whatif[nk];\n var shown = get_shown(_expanded), would = get_shown(whatif);\n var going = Object.keys(shown)\n .filter(function(nk2) { return !would[nk2]; })\n .reduce(function(p, v) {\n p[v] = true;\n return p;\n }, {});\n return {\n nodes: going,\n edges: options.edgeGroup.all().filter(function(e) {\n return going[options.edgeSource(e)] || going[options.edgeTarget(e)];\n }).reduce(function(p, e) {\n p[options.edgeKey(e)] = true;\n return p;\n }, {})\n };\n },\n collapse: function(nk, collapsible) {\n delete _expanded[nk];\n apply_filter();\n dc.redrawAll();\n },\n hide: function(nk) {\n _hidden[nk] = true;\n this.collapse(nk); // in case\n }\n };\n return _strategy;\n};\n","dc_graph.draw_graphs = function(options) {\n var select_nodes_group = dc_graph.select_things_group(options.select_nodes_group || 'select-nodes-group', 'select-nodes'),\n select_edges_group = dc_graph.select_things_group(options.select_edges_group || 'select-edges-group', 'select-edges'),\n label_nodes_group = dc_graph.label_things_group('label-nodes-group', 'label-nodes'),\n label_edges_group = dc_graph.label_things_group('label-edges-group', 'label-edges'),\n fix_nodes_group = dc_graph.fix_nodes_group('fix-nodes-group');\n var _nodeIdTag = options.idTag || 'id',\n _edgeIdTag = options.edgeIdTag || _nodeIdTag,\n _sourceTag = options.sourceTag || 'source',\n _targetTag = options.targetTag || 'target',\n _nodeLabelTag = options.labelTag || 'label',\n _edgeLabelTag = options.edgeLabelTag || _nodeLabelTag;\n\n var _sourceDown = null, _targetMove = null, _targetValid = false, _edgeLayer = null, _hintData = [], _crossout;\n\n function update_hint() {\n var data = _hintData.filter(function(h) {\n return h.source && h.target;\n });\n var line = _edgeLayer.selectAll('line.hint-edge').data(data);\n line.exit().remove();\n line.enter().append('line')\n .attr('class', 'hint-edge')\n .style({\n fill: 'none',\n stroke: 'black',\n 'pointer-events': 'none'\n });\n\n line.attr({\n x1: function(n) { return n.source.x; },\n y1: function(n) { return n.source.y; },\n x2: function(n) { return n.target.x; },\n y2: function(n) { return n.target.y; }\n });\n }\n\n function port_pos(p) {\n var style = _behavior.parent().portStyle(_behavior.parent().portStyleName.eval(p));\n var pos = style.portPosition(p);\n pos.x += p.node.cola.x;\n pos.y += p.node.cola.y;\n return pos;\n }\n\n function update_crossout() {\n var data;\n if(_crossout) {\n if(_behavior.usePorts())\n data = [port_pos(_crossout)];\n else\n data = [{x: _crossout.node.cola.x, y: _crossout.node.cola.y}];\n }\n else data = [];\n\n var size = _behavior.crossSize(), wid = _behavior.crossWidth();\n var cross = _edgeLayer.selectAll('polygon.graph-draw-crossout').data(data);\n cross.exit().remove();\n cross.enter().append('polygon')\n .attr('class', 'graph-draw-crossout');\n cross\n .attr('points', function(d) {\n var x = d.x, y = d.y;\n return [\n [x-size/2, y+size/2], [x-size/2+wid, y+size/2], [x, y+wid/2],\n [x+size/2-wid, y+size/2], [x+size/2, y+size/2], [x+wid/2, y],\n [x+size/2, y-size/2], [x+size/2-wid, y-size/2], [x, y-wid/2],\n [x-size/2+wid, y-size/2], [x-size/2, y-size/2], [x-wid/2, y]\n ]\n .map(function(p) { return p.join(','); })\n .join(' ');\n });\n }\n function erase_hint() {\n _hintData = [];\n _targetValid = false;\n _sourceDown = _targetMove = null;\n update_hint();\n }\n\n function create_node(diagram, pos, data) {\n if(!_behavior.nodeCrossfilter())\n throw new Error('need nodeCrossfilter');\n var node, callback = _behavior.addNode() || promise_identity;\n if(data)\n node = data;\n else {\n node = {};\n node[_nodeIdTag] = uuid();\n node[_nodeLabelTag] = '';\n }\n if(pos)\n fix_nodes_group.new_node(node[_nodeIdTag], node, {x: pos[0], y: pos[1]});\n callback(node).then(function(node2) {\n if(!node2)\n return;\n _behavior.nodeCrossfilter().add([node2]);\n diagram.redrawGroup();\n select_nodes_group.set_changed([node2[_nodeIdTag]]);\n });\n }\n\n function create_edge(diagram, source, target) {\n if(!_behavior.edgeCrossfilter())\n throw new Error('need edgeCrossfilter');\n var edge = {}, callback = _behavior.addEdge() || promise_identity;\n edge[_edgeIdTag] = uuid();\n edge[_edgeLabelTag] = '';\n if(_behavior.conduct().detectReversedEdge && _behavior.conduct().detectReversedEdge(edge, source.port, target.port)) {\n edge[_sourceTag] = target.node.orig.key;\n edge[_targetTag] = source.node.orig.key;\n var t;\n t = source; source = target; target = t;\n } else {\n edge[_sourceTag] = source.node.orig.key;\n edge[_targetTag] = target.node.orig.key;\n }\n callback(edge, source.port, target.port).then(function(edge2) {\n if(!edge2)\n return;\n fix_nodes_group.new_edge(edge[_edgeIdTag], edge2[_sourceTag], edge2[_targetTag]);\n _behavior.edgeCrossfilter().add([edge2]);\n select_nodes_group.set_changed([], false);\n select_edges_group.set_changed([edge2[_edgeIdTag]], false);\n diagram.redrawGroup();\n });\n }\n\n function check_invalid_drag(coords) {\n var msg;\n if(!(d3.event.buttons & 1)) {\n // mouse button was released but we missed it\n _crossout = null;\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n erase_hint();\n update_crossout();\n return true;\n }\n if(!_sourceDown.started && Math.hypot(coords[0] - _hintData[0].source.x, coords[1] - _hintData[0].source.y) > _behavior.dragSize()) {\n if(_behavior.conduct().startDragEdge) {\n if(_behavior.conduct().startDragEdge(_sourceDown)) {\n _sourceDown.started = true;\n } else {\n if(_behavior.conduct().invalidSourceMessage) {\n msg = _behavior.conduct().invalidSourceMessage(_sourceDown);\n console.log(msg);\n if(options.negativeTip) {\n options.negativeTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _sourceDown.port : _sourceDown.node);\n }\n }\n erase_hint();\n return true;\n }\n }\n }\n return false;\n }\n\n function add_behavior(diagram, node, edge, ehover) {\n var select_nodes = diagram.child('select-nodes');\n if(select_nodes) {\n if(_behavior.clickCreatesNodes())\n select_nodes.clickBackgroundClears(false);\n }\n node\n .on('mousedown.draw-graphs', function(n) {\n d3.event.stopPropagation();\n if(!_behavior.dragCreatesEdges())\n return;\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip\n .hideTip()\n .disabled(true);\n });\n if(_behavior.usePorts()) {\n var activePort;\n if(typeof _behavior.usePorts() === 'object' && _behavior.usePorts().eventPort)\n activePort = _behavior.usePorts().eventPort();\n else activePort = diagram.getPort(diagram.nodeKey.eval(n), null, 'out')\n || diagram.getPort(diagram.nodeKey.eval(n), null, 'in');\n if(!activePort)\n return;\n _sourceDown = {node: n, port: activePort};\n _hintData = [{source: port_pos(activePort)}];\n } else {\n _sourceDown = {node: n};\n _hintData = [{source: {x: _sourceDown.node.cola.x, y: _sourceDown.node.cola.y}}];\n }\n })\n .on('mousemove.draw-graphs', function(n) {\n var msg;\n d3.event.stopPropagation();\n if(_sourceDown) {\n var coords = dc_graph.event_coords(diagram);\n if(check_invalid_drag(coords))\n return;\n var oldTarget = _targetMove;\n if(n === _sourceDown.node) {\n _behavior.conduct().invalidTargetMessage &&\n console.log(_behavior.conduct().invalidTargetMessage(_sourceDown, _sourceDown));\n _targetMove = null;\n _hintData[0].target = null;\n }\n else if(_behavior.usePorts()) {\n var activePort;\n if(typeof _behavior.usePorts() === 'object' && _behavior.usePorts().eventPort)\n activePort = _behavior.usePorts().eventPort();\n else activePort = diagram.getPort(diagram.nodeKey.eval(n), null, 'in')\n || diagram.getPort(diagram.nodeKey.eval(n), null, 'out');\n if(activePort)\n _targetMove = {node: n, port: activePort};\n else\n _targetMove = null;\n } else if(!_targetMove || n !== _targetMove.node) {\n _targetMove = {node: n};\n }\n if(_behavior.conduct().changeDragTarget) {\n var change;\n if(_behavior.usePorts()) {\n var oldPort = oldTarget && oldTarget.port,\n newPort = _targetMove && _targetMove.port;\n change = oldPort !== newPort;\n } else {\n var oldNode = oldTarget && oldTarget.node,\n newNode = _targetMove && _targetMove.node;\n change = oldNode !== newNode;\n }\n if(change)\n if(_behavior.conduct().changeDragTarget(_sourceDown, _targetMove)) {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip();\n msg = _behavior.conduct().validTargetMessage && _behavior.conduct().validTargetMessage() ||\n 'matches';\n if(options.positiveTip) {\n options.positiveTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _targetMove.port : _targetMove.node);\n }\n _targetValid = true;\n } else {\n _crossout = _behavior.usePorts() ?\n _targetMove && _targetMove.port :\n _targetMove && _targetMove.node;\n if(_targetMove && _behavior.conduct().invalidTargetMessage) {\n if(options.positiveTip)\n options.positiveTip.hideTip();\n msg = _behavior.conduct().invalidTargetMessage(_sourceDown, _targetMove);\n console.log(msg);\n if(options.negativeTip) {\n options.negativeTip\n .content(function(_, k) { k(msg); })\n .displayTip(_behavior.usePorts() ? _targetMove.port : _targetMove.node);\n }\n }\n _targetValid = false;\n }\n }\n if(_targetMove) {\n if(_targetMove.port)\n _hintData[0].target = port_pos(activePort);\n else\n _hintData[0].target = {x: n.cola.x, y: n.cola.y};\n }\n else {\n _hintData[0].target = {x: coords[0], y: coords[1]};\n }\n update_hint();\n update_crossout();\n }\n })\n .on('mouseup.draw-graphs', function(n) {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip(true);\n if(options.positiveTip)\n options.positiveTip.hideTip(true);\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip.disabled(false);\n });\n // allow keyboard mode to hear this one (again, we need better cooperation)\n // d3.event.stopPropagation();\n if(_sourceDown && _targetValid) {\n var finishPromise;\n if(_behavior.conduct().finishDragEdge)\n finishPromise = _behavior.conduct().finishDragEdge(_sourceDown, _targetMove);\n else finishPromise = Promise.resolve(true);\n var source = _sourceDown, target = _targetMove;\n finishPromise.then(function(ok) {\n if(ok)\n create_edge(diagram, source, target);\n });\n }\n else if(_sourceDown) {\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n }\n erase_hint();\n update_crossout();\n });\n diagram.svg()\n .on('mousedown.draw-graphs', function() {\n _sourceDown = null;\n })\n .on('mousemove.draw-graphs', function() {\n var data = [];\n if(_sourceDown) { // drawing edge\n var coords = dc_graph.event_coords(diagram);\n _crossout = null;\n if(check_invalid_drag(coords))\n return;\n if(_behavior.conduct().dragCanvas)\n _behavior.conduct().dragCanvas(_sourceDown, coords);\n if(_behavior.conduct().changeDragTarget && _targetMove)\n _behavior.conduct().changeDragTarget(_sourceDown, null);\n _targetMove = null;\n _hintData[0].target = {x: coords[0], y: coords[1]};\n update_hint();\n update_crossout();\n }\n })\n .on('mouseup.draw-graphs', function() {\n _crossout = null;\n if(options.negativeTip)\n options.negativeTip.hideTip(true);\n if(options.positiveTip)\n options.positiveTip.hideTip(true);\n if(options.tipsDisable)\n options.tipsDisable.forEach(function(tip) {\n tip.disabled(false);\n });\n if(_sourceDown) { // drag-edge\n if(_behavior.conduct().cancelDragEdge)\n _behavior.conduct().cancelDragEdge(_sourceDown);\n erase_hint();\n } else { // click-node\n if(d3.event.target === this && _behavior.clickCreatesNodes())\n create_node(diagram, dc_graph.event_coords(diagram));\n }\n update_crossout();\n });\n if(!_edgeLayer)\n _edgeLayer = diagram.g().append('g').attr('class', 'draw-graphs');\n }\n\n function remove_behavior(diagram, node, edge, ehover) {\n node\n .on('mousedown.draw-graphs', null)\n .on('mousemove.draw-graphs', null)\n .on('mouseup.draw-graphs', null);\n diagram.svg()\n .on('mousedown.draw-graphs', null)\n .on('mousemove.draw-graphs', null)\n .on('mouseup.draw-graphs', null);\n }\n\n var _behavior = dc_graph.behavior('highlight-paths', {\n add_behavior: add_behavior,\n remove_behavior: remove_behavior\n });\n\n // update the data source/destination\n _behavior.nodeCrossfilter = property(options.nodeCrossfilter);\n _behavior.edgeCrossfilter = property(options.edgeCrossfilter);\n\n // behavioral options\n _behavior.usePorts = property(null);\n _behavior.clickCreatesNodes = property(true);\n _behavior.dragCreatesEdges = property(true);\n _behavior.dragSize = property(5);\n\n // draw attributes of indicator for failed edge\n _behavior.crossSize = property(15);\n _behavior.crossWidth = property(5);\n\n // really this is a behavior, and what we've been calling behaviors are modes\n // but i'm on a deadline\n _behavior.conduct = property({});\n\n // callbacks to modify data as it's being added\n // as of 0.6, function returns a promise of the new data\n _behavior.addNode = property(null); // node -> promise(node2)\n _behavior.addEdge = property(null); // edge, sourceport, targetport -> promise(edge2)\n\n // or, if you want to drive..\n _behavior.createNode = function(pos, data) {\n create_node(_behavior.parent(), pos, data);\n };\n\n return _behavior;\n};\n\n","dc_graph.match_ports = function(diagram, symbolPorts) {\n var _ports, _wports, _wedges, _validTargets;\n diagram.on('data.match-ports', function(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _ports = ports;\n _wports = wports;\n _wedges = wedges;\n });\n diagram.on('transitionsStarted', function() {\n symbolPorts.enableHover(true);\n });\n function change_state(ports, state) {\n return ports.map(function(p) {\n p.state = state;\n return diagram.portNodeKey.eval(p);\n });\n }\n function reset_ports(source) {\n var nids = change_state(_validTargets, 'small');\n source.port.state = 'small';\n nids.push(diagram.portNodeKey.eval(source.port));\n symbolPorts.animateNodes(nids);\n }\n function has_parallel(sourcePort, targetPort) {\n return _wedges.some(function(e) {\n return sourcePort.edges.indexOf(e) >= 0 && targetPort.edges.indexOf(e) >= 0;\n });\n }\n function is_valid(sourcePort, targetPort) {\n return (_behavior.allowParallel() || !has_parallel(sourcePort, targetPort))\n && _behavior.isValid()(sourcePort, targetPort);\n }\n function why_invalid(sourcePort, targetPort) {\n return !_behavior.allowParallel() && has_parallel(sourcePort, targetPort) && \"can't connect two edges between the same two ports\" ||\n _behavior.whyInvalid()(sourcePort, targetPort);\n }\n var _behavior = {\n isValid: property(function(sourcePort, targetPort) {\n return targetPort !== sourcePort && targetPort.name === sourcePort.name;\n }),\n whyInvalid: property(function(sourcePort, targetPort) {\n return targetPort === sourcePort && \"can't connect port to itself\" ||\n targetPort.name !== sourcePort.name && \"must connect ports of the same type\";\n }),\n allowParallel: property(false),\n hoverPort: function(port) {\n if(port) {\n _validTargets = _wports.filter(is_valid.bind(null, port));\n if(_validTargets.length)\n return change_state(_validTargets, 'shimmer-medium');\n } else if(_validTargets)\n return change_state(_validTargets, 'small');\n return null;\n },\n startDragEdge: function(source) {\n _validTargets = _wports.filter(is_valid.bind(null, source.port));\n var nids = change_state(_validTargets, 'shimmer');\n if(_validTargets.length) {\n symbolPorts.enableHover(false);\n source.port.state = 'large';\n nids.push(diagram.portNodeKey.eval(source.port));\n symbolPorts.animateNodes(nids);\n }\n console.log('valid targets', nids);\n return _validTargets.length !== 0;\n },\n invalidSourceMessage: function(source) {\n return \"no valid matches for this port\";\n },\n changeDragTarget: function(source, target) {\n var nids, valid = target && is_valid(source.port, target.port), before;\n if(valid) {\n nids = change_state(_validTargets, 'small');\n target.port.state = 'large'; // it's one of the valid\n }\n else {\n nids = change_state(_validTargets, 'small');\n before = symbolPorts.animateNodes(nids);\n nids = change_state(_validTargets, 'shimmer');\n }\n symbolPorts.animateNodes(nids, before);\n return valid;\n },\n validTargetMessage: function(source, target) {\n return \"it's a match!\";\n },\n invalidTargetMessage: function(source, target) {\n return why_invalid(source.port, target.port);\n },\n finishDragEdge: function(source, target) {\n symbolPorts.enableHover(true);\n reset_ports(source);\n return Promise.resolve(is_valid(source.port, target.port));\n },\n cancelDragEdge: function(source) {\n symbolPorts.enableHover(true);\n reset_ports(source);\n return true;\n }\n };\n return _behavior;\n};\n","dc_graph.match_opposites = function(diagram, deleteProps, options) {\n options = Object.assign({\n multiplier: 2,\n ease: d3.ease('cubic')\n }, options);\n var _ports, _wports, _wedges, _validTargets;\n\n diagram.cascade(100, true, multiply_properties(function(e) {\n return options.ease(e.deleting || 0);\n }, deleteProps, property_interpolate));\n diagram.on('data.match-opposites', function(diagram, nodes, wnodes, edges, wedges, ports, wports) {\n _ports = ports;\n _wports = wports;\n _wedges = wedges;\n });\n function port_pos(p) {\n return { x: p.node.cola.x + p.pos.x, y: p.node.cola.y + p.pos.y };\n }\n function is_valid(sourcePort, targetPort) {\n return (_behavior.allowParallel() || !_wedges.some(function(e) {\n return sourcePort.edges.indexOf(e) >= 0 && targetPort.edges.indexOf(e) >= 0;\n })) && _behavior.isValid()(sourcePort, targetPort);\n }\n function reset_deletables(source, targets) {\n targets.forEach(function(p) {\n p.edges.forEach(function(e) {\n e.deleting = 0;\n });\n });\n if(source)\n source.port.edges.forEach(function(e) {\n e.deleting = 0;\n });\n }\n var _behavior = {\n isValid: property(function(sourcePort, targetPort) {\n // draw_graphs is already enforcing this, but this makes more sense and i use xor any chance i get\n return (diagram.portName.eval(sourcePort) === 'in') ^ (diagram.portName.eval(targetPort) === 'in');\n }),\n allowParallel: property(false),\n hoverPort: function(port) {\n // could be called by draw_graphs when node is hovered, isn't\n },\n startDragEdge: function(source) {\n _validTargets = _wports.filter(is_valid.bind(null, source.port));\n console.log('valid targets', _validTargets.map(diagram.portNodeKey.eval));\n return _validTargets.length !== 0;\n },\n dragCanvas: function(source, coords) {\n var closest = _validTargets.map(function(p) {\n var ppos = port_pos(p);\n return {\n distance: Math.hypot(coords[0] - ppos.x, coords[1] - ppos.y),\n port: p\n };\n }).sort(function(a, b) {\n return a.distance - b.distance;\n });\n var cpos = port_pos(closest[0].port), spos = port_pos(source.port);\n closest.forEach(function(c) {\n c.port.edges.forEach(function(e) {\n e.deleting = 1 - options.multiplier * c.distance / Math.hypot(cpos.x - spos.x, cpos.y - spos.y);\n });\n });\n source.port.edges.forEach(function(e) {\n e.deleting = 1 - options.multiplier * closest[0].distance / Math.hypot(cpos.x - spos.x, cpos.y - spos.y);\n });\n diagram.refresh();\n },\n changeDragTarget: function(source, target) {\n var valid = target && is_valid(source.port, target.port);\n if(valid) {\n target.port.edges.forEach(function(e) {\n e.deleting = 1;\n });\n source.port.edges.forEach(function(e) {\n e.deleting = 1;\n });\n reset_deletables(null, _validTargets.filter(function(p) {\n return p !== target.port;\n }));\n diagram.refresh();\n }\n return valid;\n },\n finishDragEdge: function(source, target) {\n if(is_valid(source.port, target.port)) {\n reset_deletables(null, _validTargets.filter(function(p) {\n return p !== target.port;\n }));\n if(options.delete_edges) {\n var edgeKeys = source.port.edges.map(diagram.edgeKey.eval).concat(target.port.edges.map(diagram.edgeKey.eval));\n return options.delete_edges.deleteSelection(edgeKeys);\n }\n return Promise.resolve(true);\n }\n reset_deletables(source, _validTargets);\n return Promise.resolve(false);\n },\n cancelDragEdge: function(source) {\n reset_deletables(source, _validTargets);\n return true;\n },\n detectReversedEdge: function(edge, sourcePort, targetPort) {\n return diagram.portName.eval(sourcePort) === 'in';\n }\n };\n return _behavior;\n};\n","dc_graph.wildcard_ports = function(options) {\n var diagram = options.diagram,\n get_type = options.get_type || function(p) { return p.orig.value.type; },\n set_type = options.set_type || function(p, src) { p.orig.value.type = src.orig.value.type; },\n get_name = options.get_name || function(p) { return p.orig.value.name; },\n is_wild = options.is_wild || function(p) { return p.orig.value.wild; },\n update_ports = options.update_ports || function() {},\n get_linked = options.get_linked || function() { return []; };\n function linked_ports(n, port) {\n if(!diagram)\n return [];\n var nid = diagram.nodeKey.eval(n);\n var name = get_name(port);\n var links = get_linked(n) || [];\n var found = links.find(function(set) {\n return set.includes(name);\n });\n if(!found) return [];\n return found.filter(function(link) { return link !== name; }).map(function(link) {\n return diagram.getPort(nid, null, link);\n });\n }\n function no_edges(ports) {\n return ports.every(function(lp) {\n return lp.edges.length === 0;\n });\n }\n return {\n isValid: function(p1, p2) {\n return get_type(p1) === null ^ get_type(p2) === null ||\n get_type(p1) !== null && get_type(p1) === get_type(p2);\n },\n whyInvalid: function(p1, p2) {\n return get_type(p1) === null && get_type(p2) === null && \"can't connect wildcard to wildcard\" ||\n get_type(p1) !== get_type(p2) && \"the types of ports must match\";\n },\n copyLinked: function(n, port) {\n linked_ports(n, port).forEach(function(lp) {\n set_type(lp, port);\n });\n },\n copyType: function(e, sport, tport) {\n if(get_type(sport) === null) {\n set_type(sport, tport);\n this.copyLinked(sport.node, sport);\n update_ports();\n } else if(get_type(tport) === null) {\n set_type(tport, sport);\n this.copyLinked(tport.node, tport);\n update_ports();\n }\n return Promise.resolve(e);\n },\n resetTypes: function(edges) {\n // backward compatibility: this used to take diagram as\n // first arg, which was wrong\n var dia = diagram;\n if(arguments.length === 2) {\n dia = arguments[0];\n edges = arguments[1];\n }\n edges.forEach(function(eid) {\n var e = dia.getWholeEdge(eid),\n spname = dia.edgeSourcePortName.eval(e),\n tpname = dia.edgeTargetPortName.eval(e);\n var update = false;\n var p = dia.getPort(dia.nodeKey.eval(e.source), null, spname);\n var linked = linked_ports(e.source, p);\n if(is_wild(p) && p.edges.length === 1 && no_edges(linked)) {\n set_type(p, null);\n linked.forEach(function(lp) {\n set_type(lp, null);\n update = true;\n });\n }\n p = dia.getPort(dia.nodeKey.eval(e.target), null, tpname);\n linked = linked_ports(e.target, p);\n if(is_wild(p) && p.edges.length === 1 && no_edges(linked)) {\n set_type(p, null);\n linked.forEach(function(lp) {\n set_type(lp, null);\n update = true;\n });\n }\n if(update)\n update_ports();\n });\n return Promise.resolve(edges);\n }\n };\n};\n","dc_graph.symbol_port_style = function() {\n var _style = {};\n var _nodePorts, _node;\n var _drawConduct;\n\n _style.symbolScale = property(null);\n _style.colorScale = property(d3.scale.ordinal().range(\n // colorbrewer light qualitative scale\n d3.shuffle(['#8dd3c7','#ffffb3','#bebada','#fb8072','#80b1d3','#fdb462',\n '#b3de69','#fccde5','#d9d9d9','#bc80bd','#ccebc5','#ffed6f'])));\n\n function name_or_edge(p) {\n return p.named ? p.name : _style.parent().edgeKey.eval(p.edges[0]);\n }\n _style.symbol = _style.portSymbol = property(name_or_edge, false); // non standard properties taking \"outer datum\"\n _style.color = _style.portColor = property(name_or_edge, false);\n _style.outline = property(dc_graph.symbol_port_style.outline.circle());\n _style.content = property(dc_graph.symbol_port_style.content.d3symbol());\n _style.smallRadius = _style.portRadius = property(7);\n _style.mediumRadius = _style.portHoverNodeRadius = property(10);\n _style.largeRadius = _style.portHoverPortRadius = property(14);\n _style.displacement = _style.portDisplacement = property(2);\n _style.outlineFillScale = _style.portBackgroundScale = property(null);\n _style.outlineFill = _style.portBackgroundFill = property(null);\n _style.outlineStroke = _style.portBackgroundStroke = property(null);\n _style.outlineStrokeWidth = _style.portBackgroundStrokeWidth = property(null);\n _style.padding = _style.portPadding = property(2);\n _style.label = _style.portLabel = _style.portText = property(function(p) {\n return p.name;\n });\n _style.portLabelPadding = property({x: 5, y: 5});\n _style.cascade = cascade(_style);\n\n _style.portPosition = function(p) {\n var l = Math.hypot(p.pos.x, p.pos.y),\n u = {x: p.pos.x / l, y: p.pos.y / l},\n disp = _style.displacement.eval(p);\n return {x: p.pos.x + disp * u.x, y: p.pos.y + disp * u.y};\n };\n\n function symbol_fill(p) {\n var symcolor = _style.color.eval(p);\n return symcolor ?\n (_style.colorScale() ? _style.colorScale()(symcolor) : symcolor) :\n 'none';\n }\n function port_transform(p) {\n var pos = _style.portPosition(p);\n return 'translate(' + pos.x + ',' + pos.y + ')';\n }\n function port_symbol(p) {\n if(!_style.symbolScale())\n _style.symbolScale(d3.scale.ordinal().range(d3.shuffle(_style.content().enum())));\n var symname = _style.symbol.eval(p);\n return symname && (_style.symbolScale() ? _style.symbolScale()(symname) : symname);\n }\n function is_left(p) {\n return p.vec[0] < 0;\n }\n function hover_radius(p) {\n switch(p.state) {\n case 'large':\n return _style.largeRadius.eval(p);\n case 'medium':\n return _style.mediumRadius.eval(p);\n case 'small':\n default:\n return _style.smallRadius.eval(p);\n }\n }\n function shimmer_radius(p) {\n return /-medium$/.test(p.state) ?\n _style.mediumRadius.eval(p) :\n _style.largeRadius.eval(p);\n }\n // fall back to node aesthetics if not defined for port\n function outline_fill(p) {\n var scale, fill;\n if(_style.outlineFill.eval(p)) {\n scale = _style.outlineFillScale() || identity;\n fill = _style.outlineFill.eval(p);\n }\n else {\n scale = _style.parent().nodeFillScale() || identity;\n fill = _style.parent().nodeFill.eval(p.node);\n }\n return fill === 'none' ? 'none' : scale(fill);\n }\n function outline_stroke(p) {\n return _style.outlineStroke.eval(p) || _style.parent().nodeStroke.eval(p.node);\n }\n function outline_stroke_width(p) {\n var sw = _style.outlineStrokeWidth.eval(p);\n return typeof sw === 'number' ? sw : _style.parent().nodeStrokeWidth.eval(p.node);\n }\n _style.animateNodes = function(nids, before) {\n var setn = d3.set(nids);\n var node = _node\n .filter(function(n) {\n return setn.has(_style.parent().nodeKey.eval(n));\n });\n var symbol = _style.parent().selectNodePortsOfStyle(node, _style.parent().portStyle.nameOf(this));\n var shimmer = symbol.filter(function(p) { return /^shimmer/.test(p.state); }),\n nonshimmer = symbol.filter(function(p) { return !/^shimmer/.test(p.state); });\n if(shimmer.size()) {\n if(before)\n before.each('end', repeat);\n else repeat();\n }\n\n function repeat() {\n var shimin = shimmer.transition()\n .duration(1000)\n .ease(\"bounce\");\n shimin.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return shimmer_radius(p) + _style.portPadding.eval(p);\n }));\n shimin.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, shimmer_radius));\n var shimout = shimin.transition()\n .duration(1000)\n .ease('sin');\n shimout.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n shimout.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n shimout.each(\"end\", repeat);\n }\n\n var trans = nonshimmer.transition()\n .duration(250);\n trans.selectAll('.port-outline')\n .call(_style.outline().draw(function(p) {\n return hover_radius(p) + _style.portPadding.eval(p);\n }));\n trans.selectAll('.port-symbol')\n .call(_style.content().draw(port_symbol, hover_radius));\n\n function text_showing(p) {\n return p.state === 'large' || p.state === 'medium';\n }\n trans.selectAll('text.port-label')\n .attr({\n opacity: function(p) {\n return text_showing(p) ? 1 : 0;\n },\n 'pointer-events': function(p) {\n return text_showing(p) ? 'auto' : 'none';\n }\n });\n trans.selectAll('rect.port-label-background')\n .attr('opacity', function(p) {\n return text_showing(p) ? 1 : 0;\n });\n // bring all nodes which have labels showing to the front\n _node.filter(function(n) {\n var ports = _nodePorts[_style.parent().nodeKey.eval(n)];\n return ports && ports.some(text_showing);\n }).each(function() {\n this.parentNode.appendChild(this);\n });\n // bring all active ports to the front\n symbol.filter(function(p) {\n return p.state !== 'small';\n }).each(function() {\n this.parentNode.appendChild(this);\n });\n return trans;\n };\n _style.eventPort = function() {\n var parent = d3.select(d3.event.target.parentNode);\n if(d3.event.target.parentNode.tagName === 'g' && parent.classed('port'))\n return parent.datum();\n return null;\n };\n _style.drawPorts = function(ports, nodePorts, node) {\n _nodePorts = nodePorts; _node = node;\n var port = ports.data(function(n) {\n return nodePorts[_style.parent().nodeKey.eval(n)] || [];\n }, name_or_edge);\n port.exit().remove();\n var portEnter = port.enter().append('g')\n .attr({\n class: 'port',\n transform: port_transform\n });\n port.transition('port-position')\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .attr({\n transform: port_transform\n });\n\n var outline = port.selectAll('.port-outline').data(function(p) {\n return outline_fill(p) !== 'none' ? [p] : [];\n });\n outline.exit().remove();\n var outlineEnter = outline.enter().append(_style.outline().tag())\n .attr({\n class: 'port-outline',\n fill: outline_fill,\n 'stroke-width': outline_stroke_width,\n stroke: outline_stroke\n });\n if(_style.outline().init)\n outlineEnter.call(_style.outline().init);\n outlineEnter\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n // only position and size are animated (?) - anyway these are not on the node\n // and they are typically used to indicate selection which should be fast\n outline\n .attr({\n fill: outline_fill,\n 'stroke-width': outline_stroke_width,\n stroke: outline_stroke\n });\n outline.transition()\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .call(_style.outline().draw(function(p) {\n return _style.smallRadius.eval(p) + _style.portPadding.eval(p);\n }));\n\n var symbolEnter = portEnter.append(_style.content().tag())\n .attr('class', 'port-symbol')\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n\n var symbol = port.select('.port-symbol');\n symbol.attr('fill', symbol_fill);\n symbol.transition()\n .duration(_style.parent().stagedDuration())\n .delay(_style.parent().stagedDelay(false)) // need to account for enters as well\n .call(_style.content().draw(port_symbol, _style.smallRadius.eval));\n\n var label = port.selectAll('text.port-label').data(function(p) {\n return _style.portLabel.eval(p) ? [p] : [];\n });\n label.exit().remove();\n var labelEnter = label.enter();\n labelEnter.append('rect')\n .attr({\n class: 'port-label-background',\n 'pointer-events': 'none'\n });\n labelEnter.append('text')\n .attr({\n class: 'port-label',\n 'dominant-baseline': 'middle',\n 'pointer-events': 'none',\n cursor: 'default',\n opacity: 0\n });\n label\n .each(function(p) {\n p.offset = (is_left(p) ? -1 : 1) * (_style.largeRadius.eval(p) + _style.portPadding.eval(p));\n })\n .attr({\n 'text-anchor': function(p) {\n return is_left(p) ? 'end' : 'start';\n },\n transform: function(p) {\n return 'translate(' + p.offset + ',0)';\n }\n })\n .text(_style.portLabel.eval)\n .each(function(p) {\n p.bbox = getBBoxNoThrow(this);\n });\n port.selectAll('rect.port-label-background')\n .attr({\n x: function(p) {\n return (p.offset < 0 ? p.offset - p.bbox.width : p.offset) - _style.portLabelPadding.eval(p).x;\n },\n y: function(p) {\n return -p.bbox.height/2 - _style.portLabelPadding.eval(p).y;\n },\n width: function(p) {\n return p.bbox.width + 2*_style.portLabelPadding.eval(p).x;\n },\n height: function(p) {\n return p.bbox.height + 2*_style.portLabelPadding.eval(p).y;\n },\n fill: 'white',\n opacity: 0\n });\n return _style;\n };\n\n _style.enableHover = function(whether) {\n if(!_drawConduct) {\n if(_style.parent()) {\n var draw = _style.parent().child('draw-graphs');\n if(draw)\n _drawConduct = draw.conduct();\n }\n }\n var namespace = 'grow-ports-' + _style.parent().portStyle.nameOf(this);\n if(whether) {\n _node.on('mouseover.' + namespace, function(n) {\n var nid = _style.parent().nodeKey.eval(n);\n var activePort = _style.eventPort();\n if(_nodePorts[nid])\n _nodePorts[nid].forEach(function(p) {\n p.state = p === activePort ? 'large' : activePort ? 'small' : 'medium';\n });\n var nids = _drawConduct && _drawConduct.hoverPort(activePort) || [];\n nids.push(nid);\n _style.animateNodes(nids);\n });\n _node.on('mouseout.' + namespace, function(n) {\n var nid = _style.parent().nodeKey.eval(n);\n if(_nodePorts[nid])\n _nodePorts[nid].forEach(function(p) {\n p.state = 'small';\n });\n var nids = _drawConduct && _drawConduct.hoverPort(null) || [];\n nids.push(nid);\n _style.animateNodes(nids);\n });\n } else {\n _node.on('mouseover.' + namespace, null);\n _node.on('mouseout.' + namespace, null);\n }\n return _style;\n };\n\n _style.parent = property(null);\n return _style;\n};\n\ndc_graph.symbol_port_style.outline = {};\ndc_graph.symbol_port_style.outline.circle = function() {\n return {\n tag: function() {\n return 'circle';\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr('r', function(p) { return rf(p); });\n };\n }\n };\n};\ndc_graph.symbol_port_style.outline.square = function() {\n return {\n tag: function() {\n return 'rect';\n },\n init: function(outlines) {\n // crispEdges can make outline off-center from symbols\n // outlines.attr('shape-rendering', 'crispEdges');\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr({\n x: function(p) { return -rf(p); },\n y: function(p) { return -rf(p); },\n width: function(p) { return 2*rf(p); },\n height: function(p) { return 2*rf(p); }\n });\n };\n }\n };\n};\ndc_graph.symbol_port_style.outline.arrow = function() {\n // offset needed for body in order to keep centroid at 0,0\n var left_portion = 3/4 - Math.PI/8;\n var _outline = {\n tag: function() {\n return 'path';\n },\n init: function(outlines) {\n //outlines.attr('shape-rendering', 'crispEdges');\n },\n draw: function(rf) {\n return function(outlines) {\n outlines.attr('d', function(p) {\n var r = rf(p);\n if(!_outline.outie() || _outline.outie()(p.orig))\n return 'M' + -left_portion*r + ',' + -r + ' h' + r +\n ' l' + r + ',' + r + ' l' + -r + ',' + r +\n ' h' + -r +\n ' a' + r + ',' + r + ' 0 1,1 0,' + -2*r;\n else\n return 'M' + -(2-left_portion)*r + ',' + -r + ' h' + 2*r +\n ' a' + r + ',' + r + ' 0 1,1 0,' + 2*r +\n ' h' + -2*r +\n ' l' + r + ',' + -r + ' l' + -r + ',' + -r;\n });\n };\n },\n outie: property(null)\n };\n return _outline;\n};\n\ndc_graph.symbol_port_style.content = {};\ndc_graph.symbol_port_style.content.d3symbol = function() {\n var _symbol = {\n tag: function() {\n return 'path';\n },\n enum: function() {\n return d3.svg.symbolTypes;\n },\n draw: function(symf, rf) {\n return function(symbols) {\n symbols.attr('d', function(p) {\n var sym = symf(p), r = rf(p);\n return d3.svg.symbol()\n .type(sym)\n .size(r*r)\n ();\n });\n symbols.attr('transform', function(p) {\n switch(symf(p)) {\n case 'triangle-up':\n return 'translate(0, -1)';\n case 'triangle-down':\n return 'translate(0, 1)';\n default: return null;\n }\n });\n };\n }\n };\n return _symbol;\n};\ndc_graph.symbol_port_style.content.letter = function() {\n var _symbol = {\n tag: function() {\n return 'text';\n },\n enum: function() {\n return d3.range(65, 91).map(String.fromCharCode);\n },\n draw: function(symf, rf) {\n return function(symbols) {\n symbols.text(symf)\n .attr({\n 'dominant-baseline': 'middle',\n 'text-anchor': 'middle'\n });\n symbols.each(function(p) {\n if(!p.symbol_size)\n p.symbol_size = getBBoxNoThrow(this);\n });\n symbols.attr('transform', function(p) {\n return 'scale(' + (2*rf(p)/p.symbol_size.height) +\n ') translate(' + [0,2].join(',') + ')';\n });\n };\n }\n };\n return _symbol;\n};\n","function process_dot(callback, error, text) {\n if(error) {\n callback(error, null);\n return;\n }\n var nodes, edges;\n if(graphlibDot.parse) { // graphlib-dot 1.1.0 (where did i get it from?)\n var digraph = graphlibDot.parse(text);\n\n var nodeNames = digraph.nodes();\n 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 edges = [];\n edgeNames.forEach(function(e) {\n var edge = digraph._edges[e];\n edges.push(Object.assign({}, edge.value, {\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 } else { // graphlib-dot 0.6\n digraph = graphlibDot.read(text);\n\n nodeNames = digraph.nodes();\n 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 edges = [];\n digraph.edges().forEach(function(e) {\n edges.push(Object.assign({}, e.value, {\n source: digraph._nodes[e.v].id,\n target: digraph._nodes[e.w].id,\n sourcename: e.v,\n targetname: e.w\n }));\n });\n }\n var graph = {nodes: nodes, links: edges};\n callback(null, graph);\n}\n\nfunction process_dsv(callback, error, data) {\n if(error) {\n callback(error, null);\n return;\n }\n var keys = Object.keys(data[0]);\n var source = keys[0], target = keys[1];\n var nodes = d3.set(data.map(function(r) { return r[source]; }));\n data.forEach(function(r) {\n nodes.add(r[target]);\n });\n nodes = nodes.values().map(function(k) { return {name: k}; });\n callback(null, {\n nodes: nodes,\n links: data.map(function(r, i) {\n return {\n key: i,\n sourcename: r[source],\n targetname: r[target]\n };\n })\n });\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, process_dot.bind(null, callback));\n else if(/\\.psv$/.test(ignore_query(file1)))\n d3.dsv('|', 'text/plain')(file1, process_dsv.bind(null, callback));\n else if(/\\.csv$/.test(ignore_query(file1)))\n d3.csv(file1, process_dsv.bind(null, callback));\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","// collapse edges between same source and target\ndc_graph.deparallelize = function(group, sourceTag, targetTag) {\n return {\n all: function() {\n var ST = {};\n group.all().forEach(function(kv) {\n var source = kv.value[sourceTag],\n target = kv.value[targetTag];\n var dir = source < target;\n var min = dir ? source : target, max = dir ? target : source;\n ST[min] = ST[min] || {};\n var entry = ST[min][max] = ST[min][max] || {in: 0, out: 0, original: kv};\n if(dir)\n ++entry.in;\n else\n ++entry.out;\n });\n var ret = [];\n Object.keys(ST).forEach(function(source) {\n Object.keys(ST[source]).forEach(function(target) {\n var entry = ST[source][target];\n entry[sourceTag] = source;\n entry[targetTag] = target;\n ret.push({key: entry.original.key, value: entry});\n });\n });\n return ret;\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 pathStrength: 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).append('svg');\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(diagram, paths) {\n if(paths.length === 0) return;\n var xpadding = 30;\n var space = 30;\n var radius = 8;\n // set the height of SVG accordingly\n root.attr('height', 20*(paths.length+1))\n .attr('width', xpadding+(space+2*radius)*(paths.length/2+1)+20);\n\n root.selectAll('.path-selector').remove();\n\n var pathlist = root.selectAll('g.path-selector').data(paths);\n pathlist.enter()\n .append('g')\n .attr('class', 'path-selector')\n .attr(\"transform\", function(path, i) { return \"translate(0, \" + i*20 + \")\"; })\n .each(function(path_data, i) {\n var nodes = path_data.element_list.filter(function(d) { return d.element_type === 'node'; });\n // line\n var line = d3.select(this).append('line');\n line.attr('x1', xpadding+space)\n .attr('y1', radius+1)\n .attr('x2', xpadding+space*nodes.length)\n .attr('y2', radius+1)\n .attr('opacity', 0.4)\n .attr('stroke-width', 5)\n .attr('stroke', '#bdbdbd');\n\n // dots\n var path = d3.select(this).selectAll('circle').data(nodes);\n path.enter()\n .append('circle')\n .attr('cx', function(d, i) { return xpadding+space*(i+1); })\n .attr('cy', radius+1)\n .attr('r', radius)\n .attr('opacity', 0.4)\n .attr('fill', function(d) {\n // TODO path_selector shouldn't know the data structure of orignal node objects\n var regeneratedNode = {key:d.property_map.ecomp_uid, value:d.property_map};\n return diagram.nodeStroke()(regeneratedNode);\n });\n\n // label\n var text = d3.select(this).append('text');\n text.text('Path '+i)\n .attr('class', 'path_label')\n .attr('x', 0)\n .attr('y', radius*1.7)\n .on('mouseover', function() {\n highlight_paths_group.hover_changed([path_data]);\n })\n .on('mouseout', function() {\n highlight_paths_group.hover_changed(null);\n })\n .on('click', function() {\n highlight_paths_group.select_changed(toggle_paths(selected, [path_data]));\n });\n });\n pathlist.exit().transition(1000).attr('opacity', 0).remove();\n }\n\n function draw_hovered() {\n var is_hovered = contains_path(hovered);\n root.selectAll('g.path-selector')\n .each(function(d, i) {\n var textColor = is_hovered(d) ? '#e41a1c' : 'black';\n var lineColor = is_hovered(d) ? 'black' : '#bdbdbd';\n var opacity = is_hovered(d) ? '1' : '0.4';\n d3.select(this).select('.path_label').attr('fill', textColor);\n d3.select(this).selectAll('line')\n .attr('stroke', lineColor)\n .attr('opacity', opacity);\n d3.select(this).selectAll('circle').attr('opacity', opacity);\n });\n }\n\n function draw_selected() {\n var is_selected = contains_path(selected);\n root.selectAll('g.path-selector')\n .each(function(d, i) {\n var textWeight = is_selected(d) ? 'bold' : 'normal';\n var lineColor = is_selected(d) ? 'black' : '#bdbdbd';\n var opacity = is_selected(d) ? '1' : '0.4';\n d3.select(this).select('.path_label')\n .attr('font-weight', textWeight);\n d3.select(this).selectAll('line')\n .attr('stroke', lineColor)\n .attr('opacity', opacity);\n d3.select(this).selectAll('circle').attr('opacity', opacity);\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(diagram, 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 0) {\n var choice = Math.random();\n var n1, n2;\n if(!_nodes.length || choice < options.newComponentProb)\n n1 = new_node();\n else\n n1 = random_node();\n if(choice < options.newNodeProb)\n n2 = new_node();\n else\n n2 = random_node();\n if(n1 && n2) {\n var edge = {};\n edge[options.edgeKey] = options.edgeKeyGen(_edges.length);\n edge[options.sourceKey] = n1[options.nodeKey];\n edge[options.targetKey] = n2[options.nodeKey];\n edge[options.dashTag] = Math.floor(Math.random()*options.ndashes);\n if(options.log)\n console.log(n1[options.nodeKey] + ' -> ' + n2[options.nodeKey]);\n _edges.push(edge);\n }\n }\n },\n remove: function(N) {\n while(N-- > 0) {\n var choice = Math.random();\n if(choice < options.removeEdgeProb)\n _edges.splice(Math.floor(Math.random()*_edges.length), 1);\n else {\n var n = _nodes[Math.floor(Math.random()*_nodes.length)];\n var eis = [];\n _edges.forEach(function(e, ei) {\n if(e[options.sourceKey] === n[options.nodeKey] ||\n e[options.targetKey] === n[options.nodeKey])\n eis.push(ei);\n });\n eis.reverse().forEach(function(ei) {\n _edges.splice(ei, 1);\n });\n }\n }\n }\n };\n};\n","var dont_use_key = deprecation_warning('dc_graph.line_breaks now takes a string - d.key behavior is deprecated and will be removed in a later version');\n\ndc_graph.line_breaks = function(charexp, max_line_length) {\n var regexp = new RegExp(charexp, 'g');\n return function(s) {\n if(typeof s === 'object') { // backward compatibility\n dont_use_key();\n s = s.key;\n }\n var result;\n var line = '', lines = [], part, i = 0;\n do {\n result = regexp.exec(s);\n if(result)\n part = s.slice(i, regexp.lastIndex);\n else\n part = s.slice(i);\n if(line.length + part.length > 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/web/js/dc.graph.min.js b/web/js/dc.graph.min.js index 9f91554a..55d39757 100644 --- a/web/js/dc.graph.min.js +++ b/web/js/dc.graph.min.js @@ -1,5 +1,5 @@ /*! - * dc.graph 0.6.0 + * dc.graph 0.6.1 * 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,5 +18,5 @@ * */ -!function(){function e(de,fe,ge){"use strict";var he={version:"0.6.0",constants:{CHART_CLASS:"dc-graph"}};function pe(e){return e.orig}function ve(e){return e}var ye=function(e,n){void 0===n?n=pe:!1===n&&(n=ve);var t=e,r=null,o=[],a=function(e){return arguments.length?(r&&r(e),t=e,this):t};return a.cascade=function(e,t){for(var n=0;ne)return o.splice(n,0,{n:e,f:t}),a}return o.push({n:e,f:t}),a},a._eval=function(e,t){return 0!==t&&o.length?o[t-1].f(e,function(){return a._eval(e,t-1)}):he.functor_wrap(a(),n)(e)},a.eval=function(e){return a._eval(e,o.length)},a.react=function(e){return arguments.length?(r=e,this):r},a};function me(){var n={},e=function(e,t){return 1===arguments.length?n[e]:(n[e]===t||(n[e]&&n[e].parent(null),(n[e]=t)&&t.parent(this)),this)};return e.enum=function(){return Object.keys(n)},e.nameOf=function(t){var e=Object.entries(n).find(function(e){return e[1]==t});return e?e[0]:null},e}function xe(e,t){var n=ye(t),r=function(){return arguments.length?(console.warn(e),n.apply(ye,arguments),this):n()};return["cascade","_eval","eval","react"].forEach(function(e){r[e]=n[e]}),r}function A(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}function _e(e){try{return e.getBBox()}catch(e){return{x:0,y:0,width:0,height:0}}}function n(n,r){return function(e,t){return n(e)?r(e):t()}}function t(n,r){return function(e,t){return de.interpolate(t(e),r(e))(n(e))}}function f(e,t,n){var r={};for(var o in t)r[o]=n(e,we(t[o]));return r}function c(e,t){return f(e,t,n)}function b(e,t,n){var r={},o={},a=[];for(var i in n)/^node/.test(i)?r[i]=n[i]:/^edge/.test(i)?o[i]=n[i]:a.push(i);a.length&&console.error('only know how to deal with properties that start with "node" or "edge"',a);var u=e?c(e,r):{};return t&&Object.assign(u,c(t,o)),u}function be(o){return function(e,t,n){for(var r in n){if(!o[r])throw new Error("unknown attribute "+r);o[r].cascade(e,t?n[r]:null)}return o}}function we(e){return he.functor_wrap(e,pe)}"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(e),r=1;r>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var r=arguments[1],o=0;o"+n+' is deprecated, and it is not supported for the "'+t.layoutAlgorithm()+'" layout algorithm: ignored.'),!arguments.length)return null;return this}}function Q(e){z.layoutEngine()||z.layoutAlgorithm("cola",!0),(e||z.layoutEngine()).init({width:z.width(),height:z.height()})}function ee(e){return!!e.source&&!!e.target}z.height=function(e){if(!arguments.length){if(!ge.utils.isNumber(i)){if(B=d(z.root().node()),"auto"===i)return B;i=B}return i}if(ge.utils.isNumber(e)||!e||"auto"===e)i=e;else{if("function"!=typeof e)throw new Error("don't know what to do with height type "+typeof e+" value "+e);d=e,i=void 0}return z},z.minHeight=function(e){return arguments.length?(s=e,z):s},z.width=function(e){if(!arguments.length){if(!ge.utils.isNumber(o)){if(q=l(z.root().node()),"auto"===o)return q;o=q}return o}if(ge.utils.isNumber(e)||!e||"auto"===e)o=e;else{if("function"!=typeof e)throw new Error("don't know what to do with width type "+typeof e+" value "+e);l=e,o=void 0}return z},z.minWidth=function(e){return arguments.length?(c=e,z):c},z.root=ye(null).react(function(e){e.empty()&&console.log("Warning: parent selector "+t+" doesn't seem to exist")}),z.mouseZoomable=ye(!0),z.zoomExtent=ye([.1,2]),z.modKeyZoom=z.altKeyZoom=ye(!1),z.fitStrategy=ye("default"),z.restrictPan=ye(!1),z.autoZoom=ye(null),z.zoomToFit=function(e){if(H&&Y){var t=z.selectAllNodes();z.selectAllEdges();P(t)}},z.zoomDuration=ye(500),z.nodeDimension=ye(),z.nodeGroup=ye(),z.edgeDimension=ye(),z.edgeGroup=ye(),z.edgesInFront=ye(!1),z.nodeKey=z.nodeKeyAccessor=ye(function(e){return e.key}),z.edgeKey=z.edgeKeyAccessor=ye(function(e){return e.key}),z.edgeSource=z.sourceAccessor=ye(function(e){return e.value.sourcename}),z.edgeTarget=z.targetAccessor=ye(function(e){return e.value.targetname}),z.portDimension=ye(null),z.portGroup=ye(null),z.portNodeKey=ye(null),z.portEdgeKey=ye(null),z.portName=ye(null),z.portStyleName=ye(null),z.portElastic=ye(!0),z.portStyle=me(),z.portBounds=ye(null),z.edgeSourcePortName=ye(null),z.edgeTargetPortName=ye(null),z.nodeRadius=z.nodeRadiusAccessor=ye(25),z.nodeStrokeWidth=z.nodeStrokeWidthAccessor=ye(1),z.nodeStroke=z.nodeStrokeAccessor=ye("black"),z.nodeStrokeDashArray=ye(null),z.nodeFillScale=ye(null),z.nodeFill=z.nodeFillAccessor=ye("white"),z.nodeOpacity=ye(1),z.nodePadding=ye(6),z.nodeLabelPadding=ye(0),z.nodeLineHeight=ye(1),z.nodeLabel=z.nodeLabelAccessor=ye(function(e){return e.value.label||e.value.name}),z.nodeLabelAlignment=ye("center"),z.nodeLabelFill=z.nodeLabelFillAccessor=ye(null),z.nodeFitLabel=z.nodeFitLabelAccessor=ye(!0),z.nodeShape=ye(Se),z.shape=me(),z.shape("nothing",he.no_shape()),z.shape("ellipse",he.ellipse_shape()),z.shape("polygon",he.polygon_shape()),z.shape("rounded-rect",he.rounded_rectangle_shape()),z.nodeContent=ye("text"),z.content=me(),z.content("text",he.text_contents()),z.nodeIcon=ye(null),z.nodeTitle=z.nodeTitleAccessor=ye(function(e){return z.nodeKey()(e)}),z.nodeOrdering=ye(null),z.nodeFixed=z.nodeFixedAccessor=ye(null),z.edgeStroke=z.edgeStrokeAccessor=ye("black"),z.edgeStrokeWidth=z.edgeStrokeWidthAccessor=ye(1),z.edgeStrokeDashArray=ye(null),z.edgeOpacity=z.edgeOpacityAccessor=ye(1),z.edgeLabel=z.edgeLabelAccessor=ye(function(e){return z.edgeKey()(e)}),z.edgeArrowhead=z.edgeArrowheadAccessor=ye("vee"),z.edgeArrowtail=z.edgeArrowtailAccessor=ye(null),z.edgeArrowSize=ye(1),z.edgeIsLayout=z.edgeIsLayoutAccessor=ye(function(e){return!e.value.notLayout}),z.edgeIsShown=ye(!0),z.lengthStrategy=p("lengthStrategy"),z.edgeLength=z.edgeDistanceAccessor=ye(function(e){return e.value.distance}),z.flowLayout=p("flowLayout"),z.rankdir=p("rankdir"),z.baseLength=p("baseLength"),z.transitionDuration=ye(500),z.stageTransitions=ye("none"),z.deleteDelay=ye(0),z.groupConnected=p("groupConnected"),z.timeLimit=ye(0),z.constrain=ye(function(e,t){return[]}),z.parallelEdgeOffset=ye(10),z.edgeOrdering=ye(null),z.edgeSort=ye(null),z.cascade=be(z),z.initLayoutOnRedraw=ye(!1),z.layoutUnchanged=ye(!1),z.relayout=function(){return F=R=null,this},z.initialLayout=xe("initialLayout is deprecated - use layout algorithms instead",null),z.initialOnly=xe("initialOnly is deprecated - see the initialLayout deprecation notice in the documentation",!1),z.induceNodes=ye(!1),z.showLayoutSteps=ye(!1),z.mode=z.child=me(),z.legend=function(e){return arguments.length?(z.child("node-legend",e),z):z.child("node-legend")},z.layoutAlgorithm=function(e,t){if(!arguments.length)return z.layoutEngine()?z.layoutEngine().layoutAlgorithm():"cola";var n;switch(t||console.warn("dc.graph.diagram.layoutAlgorithm is depecrated - pass the layout engine object to dc_graph.diagram.layoutEngine instead"),e){case"cola":n=he.cola_layout();break;case"dagre":n=he.dagre_layout()}return n=he.webworker_layout(n),z.layoutEngine(n),this},z.layoutEngine=ye(null).react(function(e){e&&e.parent&&e.parent(z),h&&(Object.keys(Z).forEach(function(e){Z[e].cola.points=null}),Q(e))}),z.enforceEdgeDirection=ye(null),z.tickSize=p("tickSize"),z.uniqueId=function(){return z.anchorName().replace(/[ .#=\[\]"]/g,"-")},z.edgeId=function(e){return"edge-"+z.edgeKey.eval(e).replace(/[^\w-_]/g,"-")},z.arrowId=function(e,t){return"arrow-"+t+"-"+z.uniqueId()+"-"+z.edgeId(e)},z.textpathId=function(e){return"textpath-"+z.uniqueId()+"-"+z.edgeId(e)},z.getNode=function(e){return V[e]?V[e].orig:null},z.getWholeNode=function(e){return V[e]?V[e]:null},z.getEdge=function(e){return Z[e]?Z[e].orig:null},z.getWholeEdge=function(e){return Z[e]?Z[e]:null},z.getPort=function(e,t,n){return U[De(e,t,n)]},z.nodePorts=function(){return a},z.handleDisconnected=p("handleDisconnected"),z.forEachChild=function(e,n,r,o){n.enum().forEach(function(t){o(n(t),e.filter(function(e){return r(e)===t}))})},z.forEachShape=function(e,t){z.forEachChild(e,z.shape,function(e){return e.dcg_shape.shape},t)},z.forEachContent=function(e,t){z.forEachChild(e,z.content,z.nodeContent.eval,t)},z.renderNode=z._enterNode=function(e){return z.nodeTitle()&&e.append("title"),e.each(Ke(z)),z.forEachShape(e,function(e,t){t.call(e.create)}),z},z.redrawNode=z._updateNode=function(e){var r,t,n,o=e.filter((r=z,function(e){var t=r.nodeShape.eval(e)||Se,n=e.dcg_shape.abstract;return t.shape!==n.shape||"polygon"===t.shape&&(t.shape.sides!==n.sides||t.shape.skew!==n.skew||t.shape.distortion!==n.distortion||t.shape.rotation!==n.rotation)}));return o.selectAll(".node-shape").remove(),o.each(Ke(z)),z.forEachShape(o,function(e,t){t.call(e.create)}),e.select("title").text(z.nodeTitle.eval),z.forEachContent(e,function(e,t){t.call(e.update),z.forEachShape(e.selectContent(t),function(e,t){var s,d;t.call((s=e,d=z,function(e){e.each(function(e){var t=null;if((!s.useTextSize||s.useTextSize(e.dcg_shape))&&d.nodeFitLabel.eval(e)){var n;t={x:(t=_e(this)).x,y:t.y,width:t.width,height:t.height};var r=d.nodeContent.eval(e);if(r&&d.content(r).padding)n=d.content(r).padding(e);else{var o=Ae(d,e);n={x:2*o.x,y:2*o.y}}t.width+=n.x,t.height+=n.y,e.bbox=t}var a,i=0;s.useRadius&&!s.useRadius(e.dcg_shape)||(i=d.nodeRadius.eval(e)),a=t&&t.width&&t.height||s.useTextSize&&!s.useTextSize(e.dcg_shape)?s.calc_radii(e,i,t):{rx:i,ry:i},e.dcg_rx=a.rx,e.dcg_ry=a.ry;var u=2*a.rx,c=2*a.ry;if(ut.target.index&&(o=-o,a=-a),n=[a,o],r=Math.hypot(n[0],n[1]),[n[0]/r,n[1]/r]}function re(e,t){for(var n in a={},t.forEach(function(e){var t=z.nodeKey.eval(e.node);(a[t]=a[t]||[]).push(e)}),a){var r=e[n];a[n].forEach(function(e){if(z.portElastic.eval(e)&&e.edges.length){var t=e.edges.map(m.bind(null,r));e.vec=[de.sum(t,function(e){return e[0]})/t.length,de.sum(t,function(e){return e[1]})/t.length]}else e.vec=e.vec||void 0;e.pos=null})}}function oe(e,t,n){for(var r in a){var o=e[r];a[r].forEach(function(e){e.pos||Me(z,o,e)})}t.forEach(function(e){var t=z.edgeSourcePortName.eval(e);e.sourcePort.pos=t?n[De(z.nodeKey.eval(e.source),null,t)].pos:n[De(null,z.edgeKey.eval(e),"source")].pos,t=z.edgeTargetPortName.eval(e),e.targetPort.pos=t?n[De(z.nodeKey.eval(e.target),null,t)].pos:n[De(null,z.edgeKey.eval(e),"target")].pos,console.assert(e.sourcePort.pos&&e.targetPort.pos)})}function ae(e,t){z._updateEdge(t),z._updateNode(e),ce(e)}function ie(e){X.end(e),J=!1,te&&(te=!1,window.setTimeout(function(){z.isRunning()||z.redraw()},0))}function x(e,t){var n=e[0],r=e[e.length-1],o=Oe(e,"tail"===t?.25:.75);return("head"===t?Math.atan2(r.y-o.y,r.x-o.x):Math.atan2(n.y-o.y,n.x-o.x))+"rad"}function _(e,t,n){var r=e.points,o=r[0],a=r[r.length-1];switch(z.enforceEdgeDirection()){case"LR":if(t.x>=n.x){var i=o.x-a.x;return{points:[o,{x:o.x+i,y:o.y-i/2},{x:a.x-i,y:a.y-i/2},a],bezDegree:3,sourcePort:e.sourcePort,targetPort:e.targetPort}}break;case"TB":if(t.y>=n.y){var u=o.y-a.y;return{points:[o,{x:o.x+u/2,y:o.y+u},{x:a.x+u/2,y:a.y-u},a],bezDegree:3,sourcePort:e.sourcePort,targetPort:e.targetPort}}}return e}function b(e,t,n,r,o,a){var i,u=e.parallel,c=e.source,l=e.target;1e.target.index&&(i=l,l=c,c=i,i=o,o=n,n=i,i=a,a=r,r=i);for(var s=c.dcg_ry+z.nodeStrokeWidth.eval(c)/2,d=l.dcg_ry+z.nodeStrokeWidth.eval(l)/2,f=0;fMath.PI&&(nz.timeLimit())&&(console.log("cancelled"),z.layoutEngine().stop())}).on("end",function(e,t){z.showLayoutSteps()?ie(!0):(z.initialOnly()||I(e,t),re(V,h),X.receivedLayout(z,V,d,Z,f,U,h),oe(V,f,U),ue(A,P,x,_,b,w,k,E,S,K,!0),ce(A),X.transitionsStarted(A,x,b)),ne(A,x)}).on("start",function(){console.log("algo "+z.layoutEngine().layoutAlgorithm()+" started."),X.start()}),z.initialOnly()?z.layoutEngine().dispatch().end(d,f):(X.start(),z.layoutEngine().data({width:z.width(),height:z.height()},d.map(function(e){return e.cola}),D.map(function(e){return e.cola}),L),z.layoutEngine().start()),this},z.refresh=function(e,t,n,r,o){if(v)return this;ae(e=e||z.selectAllNodes(),t=t||z.selectAllEdges()),n=n||z.selectAllEdges(".edge-hover"),r=r||z.selectAllEdges(".edge-label"),o=o||z.selectAllDefs("path.edge-label-path");var a=de.select(null);return ue(e,a,t,a,n,a,r,a,o,a,!1),this},z.requestRefresh=function(t){window.requestAnimationFrame(function(){var e;void 0!==t&&(e=z.transitionDuration(),z.transitionDuration(t)),z.refresh(),void 0!==t&&z.transitionDuration(e)})},z.reposition=function(e,t){return e.attr("transform",function(e){return"translate("+e.cola.x+","+e.cola.y+")"}),t.each(function(e){e.pos.new=null,e.pos.old=null,b(e,"new",e.source.cola.x,e.source.cola.y,e.target.cola.x,e.target.cola.y),z.edgeArrowhead.eval(e)&&de.select("#"+z.arrowId(e,"head")).attr("orient",function(){return e.pos.new.orienthead}),z.edgeArrowtail.eval(e)&&de.select("#"+z.arrowId(e,"tail")).attr("orient",function(){return e.pos.new.orienttail})}).attr("d",w("new")),this},z.animating=function(){return v},z.selectNodePortsOfStyle=function(e,t){return e.selectAll("g.port").filter(function(e){return z.portStyleName.eval(e)===t})},z.render=function(){g&&X.reset(),z.initLayoutOnRedraw()||Q(),z.resetSvg(),h=g.append("g").attr("class","draw");var e=["edge-layer","node-layer"];return z.edgesInFront()&&e.reverse(),h.selectAll("g").data(e).enter().append("g").attr("class",function(e){return e}),Y=h.selectAll("g.edge-layer"),H=h.selectAll("g.node-layer"),X.render(),z.redraw(),this},z.on=function(e,t){return 1===arguments.length?X.on(e):(X.on(e,t),this)},z.getStats=function(){return $},z.select=function(e){return z.root().select(e)},z.selectAll=function(e){return z.root()?z.root().selectAll(e):null},z.x=ye(null),z.y=ye(null),z.svg=function(e){return arguments.length?(g=e,z):g},z.g=function(e){return arguments.length?(h=e,z):h},z.resetSvg=function(){return g&&(g.remove(),g=null),function(){g=z.root().append("svg"),z.resizeSvg(),G=g.append("svg:defs"),z.x()||z.x(de.scale.linear().domain([0,z.width()]).range([0,z.width()]));z.y()||z.y(de.scale.linear().domain([0,z.height()]).range([0,z.height()]));if(W=de.behavior.zoom().on("zoom",C).x(z.x()).y(z.y()).scaleExtent(z.zoomExtent()),z.mouseZoomable()){var e,t,n=z.child("brush");if(e=z.modKeyZoom()){t=Array.isArray(e)?e.slice():"string"==typeof e?[e]:["Alt"];var r=!1,o=!1,a=!1;g.on("mousedown.modkey-zoom",function(){r=!0}).on("mouseup.modkey-zoom",function(){(r=!1)||o||!a||(a=!1,se(),n&&n.activate())}),de.select(document).on("keydown.modkey-zoom",function(){-1 "':'" -- "')+l(e.dcg_edgeTarget)+'" '+f([d("id",l(e.dcg_edgeKey)),d("arrowhead","none"),d("arrowtail","none")])}))).push("}"),n.push(""),i=n.join("\n")}}(t,n)},dotInput:function(e){return a=e,this},clusters:function(){return u},start:function(){!function(){if(t)de.json(t).header("Content-type","application/x-www-form-urlencoded").post("layouttool="+o+"&"+encodeURIComponent(i),r);else{var e=Viz(i,{format:"json",engine:o,totalMemory:1<<25});r(0,e=JSON.parse(e))}}()},stop:function(){},optionNames:function(){return h},populateLayoutNode:function(){},populateLayoutEdge:function(){}})},he.d3_force_layout=function(e){var t=e||A(),u=null,n=de.dispatch("tick","start","end"),y={},c={},l=[],s=[],m=null,r=null;function o(e){n[e](l,s.map(function(e){return{dcg_edgeKey:e.dcg_edgeKey}}))}function a(){!function(){if(null===r)u.gravity(m.gravityStrength).charge(m.initialCharge);else{if(m.fixOffPathNodes){var t=de.set();r.forEach(function(e){e.forEach(function(e){t.add(e)})}),Object.keys(y).forEach(function(e){t.has(e)?y[e].fixed=!1:y[e].fixed=!0})}u.charge(m.chargeForce)}}(),function(e){if(!e)return o("end");u.start();for(var t=0;t<300;++t)u.tick(),r&&i();u.stop()}(m.iterations)}function i(){function a(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function h(e,t){var n,r,o=(r=t,((n=e).x*r.x+n.y*r.y)/(a(e)*a(t)));return o=Math.min(o,1),o=Math.max(o,-1),Math.acos(o)}function p(e){var t=-e.y/e.x,n=a({x:t,y:1});return{x:t/n,y:1/n}}function v(e,t,n,r){e.x+=n.x*(Math.PI-t)*r,e.y+=n.y*(Math.PI-t)*r}r.forEach(function(e){if(!(e.length<3))for(var t=1;t=Math.PI/2?c:{x:-c.x,y:-c.y},l=h(g,l)>=Math.PI/2?l:{x:-l.x,y:-l.y},v(r,u,c,m.angleForce),v(o,u,l,m.angleForce)}})}var d=he.graphviz_attrs(),f=Object.keys(d);return Object.assign(d,{layoutAlgorithm:function(){return"d3-force"},layoutId:function(){return t},supportsWebworker:function(){return!0},parent:ye(null),on:function(e,t){return 1===arguments.length?n.on(e):(n.on(e,t),this)},init:function(t){var e;return this.optionNames().forEach(function(e){t[e]=t[e]||this[e]()}.bind(this)),m=e=t,(u=de.layout.force().size([e.width,e.height])).on("tick",function(){o("tick")}).on("start",function(){n.start()}).on("end",function(){o("end")}),this},data:function(e,t,n,r){var o,a,i;a=n,i={},(o=t).forEach(function(e,t){i[e.dcg_nodeKey]=t}),l=Ee(y,o,null,function(e){return e.dcg_nodeKey},function(e,t){e.dcg_nodeKey=t.dcg_nodeKey,e.width=t.width,e.height=t.height,e.id=t.dcg_nodeKey,t.dcg_nodeFixed?(e.fixed=!0,e.x=t.dcg_nodeFixed.x,e.y=t.dcg_nodeFixed.y):e.fixed=!1}),s=Ee(c,a,null,function(e){return e.dcg_edgeKey},function(e,t){e.dcg_edgeKey=t.dcg_edgeKey,e.source=y[t.dcg_edgeSource],e.source.id=i[e.source.dcg_nodeKey],e.target=y[t.dcg_edgeTarget],e.target.id=i[e.target.dcg_nodeKey],e.dcg_edgeLength=t.dcg_edgeLength}),u.nodes(l),u.links(s)},start:function(){a()},stop:function(){u&&u.stop()},paths:function(e){r=e},savePositions:function(){var t={};return Object.keys(y).forEach(function(e){t[e]={x:y[e].x,y:y[e].y}}),t},restorePositions:function(t){Object.keys(t).forEach(function(e){y[e]&&(y[e].fixed=!1,y[e].x=t[e].x,y[e].y=t[e].y)})},optionNames:function(){return["iterations","angleForce","chargeForce","gravityStrength","initialCharge","fixOffPathNodes"].concat(f)},iterations:ye(300),angleForce:ye(.02),chargeForce:ye(-500),gravityStrength:ye(1),initialCharge:ye(-400),fixOffPathNodes:ye(!1),populateLayoutNode:function(){},populateLayoutEdge:function(){}})},he.d3_force_layout.scripts=["d3.js"],he.d3v4_force_layout=function(e){var t=e||A(),u=null,n=de.dispatch("tick","start","end"),c={},l={},s=[],d=[],r=null,o=null;function a(e){n[e](s,d.map(function(e){return{dcg_edgeKey:e.dcg_edgeKey}}))}function i(){n.start(),function(e){e&&(e=e.filter(function(e){return e.nodes.every(function(e){return c[e]})}));if(null!==e&&e.length){var t;r.fixOffPathNodes&&(t=de.set(),e.forEach(function(e){e.nodes.forEach(function(e){t.add(e)})})),Object.keys(c).forEach(function(e){r.fixOffPathNodes&&!t.has(e)?(c[e].fx=c[e].x,c[e].fy=c[e].y):(c[e].fx=null,c[e].fy=null)}),u.force("charge").strength(r.chargeForce),u.force("straighten",d3v4.forceStraightenPaths().id(function(e){return e.dcg_nodeKey}).angleForce(r.angleForce).pathNodes(function(e){return e.nodes}).pathStrength(function(e){return e.strength}).paths(e))}else u.force("charge").strength(r.initialCharge)}(o),function(e){u.alpha(1);for(var t=0;te.abounds[1]&&(e.abounds[1]+=2*Math.PI),console.assert(e.orig||e.vec,"unplaced unspecified port")});var y=[],m=[],x=[];v.forEach(function(e){var t,n;e.vec?!e.vbounds||(t=e.vec,s((n=e.vbounds)[0],t)&&s(t,n[1]))?y.push(e):m.push(e):x.push(e)}),m.forEach(function(e){var t,n;e.vec=(t=e.vec,n=e.vbounds,s(t,n[0])?n[0]:s(n[1],t)?n[1]:t),y.push(e)});var _={},b={};for(var w in x.forEach(function(e){var t=e.abounds.map(function(e){return e.toFixed(3)}).join(",");_[t]=e.abounds,b[t]=b[t]||[],b[t].push(e)}),b){var k=_[w],E=b[w];if(1===E.length)E[0].vec=d((k[0]+k[1])/2);else{var S=(k[1]-k[0])/(b[w].length-1);b[w].forEach(function(e,t){e.vec=d(k[0]+t*S)})}}y=y.concat(x),x=[],y.forEach(function(e){Me(n,p,e)});for(var K=0;Kj.minDistance())){if(!A.edges.length){x.push(A);continue}x.push(T)}}}y=y.filter(function(e){return!x.includes(e)});for(var N,O=j.patience(),L=0;x.length;){var D=x[0];D.vec=d((u=D.abounds[0],c=D.abounds[1],u+Math.random()*(c-u))),Me(n,p,D);var M=de.min(y,function(e){return g(D,e)});Lj.minDistance())&&(O<0&&(console.warn("ran out of patience placing a port"),D.vec=N,Me(n,p,D)),y.push(D),x.shift(),O=j.patience(),L=0)}}}var j={parent:ye(null).react(function(e){e?e.on("receivedLayout.place-ports",t):j.parent()&&j.parent().on("receivedLayout.place-ports",null)}),minDistance:ye(20),patience:ye(20)};return j},he.troubleshoot=function(){var g=null;function h(e,t,n){return{left:e.x-t/2,top:e.y-n/2,right:e.x+t/2,bottom:e.y+n/2}}function t(e,t,n,r){return"M"+e+","+(t+r)+" v"+-r+" h"+n}function n(e){return[t(e.left,e.top,v.boundsWidth(),v.boundsHeight()),t(e.right,e.top,-v.boundsWidth(),v.boundsHeight()),t(e.right,e.bottom,-v.boundsWidth(),-v.boundsHeight()),t(e.left,e.bottom,v.boundsWidth(),-v.boundsHeight())].join(" ")}function p(e,t){e.exit().remove(),e.enter().append("path").attr("class",t),e.attr({d:n,opacity:null!==v.boundsOpacity()?v.boundsOpacity():v.opacity(),stroke:v.boundsColor(),fill:"none"})}var v=he.behavior("highlight-paths",{laterDraw:!0,add_behavior:function(e,t,n,r){g||(g=e.g().append("g").attr({class:"troubleshoot","pointer-events":"none"}));var o=t.data().map(function(e){return{x:e.cola.x,y:e.cola.y}}),a=g.selectAll("path.nodecenter").data(o);function i(e){return{x:e.cola.x,y:e.cola.y}}a.exit().remove(),a.enter().append("path").attr("class","nodecenter"),a.attr({d:function(e){return"M"+(e.x-v.xhairWidth()/2)+","+e.y+" h"+v.xhairWidth()+" M"+e.x+","+(e.y-v.xhairHeight()/2)+" v"+v.xhairHeight()},opacity:null!==v.xhairOpacity()?v.xhairOpacity():v.opacity(),stroke:v.xhairColor()});var u=t.data().map(function(e){return h(i(e),e.cola.width,e.cola.height)});p(g.selectAll("path.colaboundary").data(u),"colaboundary");var c=t.data().map(function(e){return e.bbox?h(i(e),e.bbox.width,e.bbox.height):null}).filter(function(e){return!!e});p(g.selectAll("path.textboundary").data(c),"textboundary");var l=t.data().map(function(e){return"number"===(e.dcg_rx,!1)?null:h(i(e),2*e.dcg_rx,2*e.dcg_ry)}).filter(function(e){return!!e});p(g.selectAll("path.radiiboundary").data(l),"radiiboundary");var s=g.selectAll("rect.domain").data([0]);s.enter().append("rect");var d=v.parent().x().domain(),f=v.parent().y().domain();s.attr({class:"domain",fill:"none",opacity:v.domainOpacity(),stroke:v.domainColor(),"stroke-width":v.domainStrokeWidth(),x:d[0],y:f[0],width:d[1]-d[0],height:f[1]-f[0]})},remove_behavior:function(e,t,n,r){g&&g.remove()}});return v.opacity=ye(.75),v.xhairOpacity=ye(null),v.xhairWidth=ye(10),v.xhairHeight=ye(10),v.xhairColor=ye("blue"),v.boundsOpacity=ye(null),v.boundsWidth=ye(10),v.boundsHeight=ye(10),v.boundsColor=ye("green"),v.domainOpacity=ye(.6),v.domainColor=ye("darkorange"),v.domainStrokeWidth=ye(11),v},he.validate=function(p){function v(e,t,n,r){var o=e.filter(function(e){return!t(e)});return o.length?[n+" is empty for "+o.length+" of "+e.length+" "+r,o]:null}function y(e,n){return e.reduce(function(e,t){return e[n(t)]=t,e},{})}function m(t,e,n,r,o,a){var i=e.filter(function(e){return!t[n(e)]}).map(function(e){return{key:n(e),value:e}});return i.length?[r+" was not found in "+o,Object.keys(t),"for "+i.length+" of "+e.length+" "+a,i]:null}function t(){var t=x.parent(),e=t.nodeGroup().all(),n=t.edgeGroup().all(),r=t.portGroup()?t.portGroup().all():[],o=[];function a(e){e&&o.push(e)}a(v(e,t.nodeKey(),"nodeKey","nodes")),a(v(n,t.edgeSource(),"edgeSource","edges")),a(v(n,t.edgeTarget(),"edgeTarget","edges"));var i=de.set(t.content.enum()),u=he.functor_wrap(t.nodeContent()),c=e.filter(function(e){return!i.has(u(e))});c.length&&o.push(["there are "+c.length+" nodes with nodeContent not matching any content",c]);var l=y(e,t.nodeKey()),s=y(n,t.edgeKey());a(m(l,n,t.edgeSource(),"edgeSource","nodes","edges")),a(m(l,n,t.edgeTarget(),"edgeTarget","nodes","edges")),a(v(r,function(e){return t.portNodeKey()&&t.portNodeKey()(e)||t.portEdgeKey()&&t.portEdgeKey()(e)},"portNodeKey||portEdgeKey","ports"));var d=!t.portNodeKey()&&[]||r.filter(function(e){return t.portNodeKey()(e)}),f=!t.portEdgeKey()&&[]||r.filter(function(e){return t.portEdgeKey()(e)});if(a(m(l,d,t.portNodeKey(),"portNodeKey","nodes","ports")),a(m(s,f,t.portEdgeKey(),"portEdgeKey","edges","ports")),t.portName()){var g=y(d,function(e){return t.portNodeKey()(e)+" - "+t.portName()(e)});t.edgeSourcePortName()&&a(m(g,n,function(e){return t.edgeSource()(e)+" - "+de.functor(t.edgeSourcePortName())(e)},"edgeSourcePortName","ports","edges")),t.edgeTargetPortName()&&a(m(g,n,function(e){return t.edgeTarget()(e)+" - "+de.functor(t.edgeTargetPortName())(e)},"edgeTargetPortName","ports","edges"))}function h(){return e.length+" nodes, "+n.length+" edges, "+r.length+" ports"}o.length?(console.warn("validation of "+p+" failed with "+h()+":"),o.forEach(function(e){console.warn.apply(null,e)})):console.log("validation of "+p+" succeeded with "+h()+".")}var x={parent:ye(null).react(function(e){e?e.on("data.validate",t):x.parent().on("data.validate",null)})};return x},he.legend=function(o){o=o||"node-legend";var a,i,u,c=[],l=de.dispatch("filtered");function s(){d.dimension()&&(d.dimension().filterFunction(function(e){return!c.length||c.includes(e)}),d.parent().redraw())}var d=he.behavior(o,{add_behavior:n,remove_behavior:function(){},parent:function(e){e?e.on("render."+o,r).on("data."+o,t):d.parent().on("render."+o,null).on("data."+o,null)}});function t(e,t,n,r,o,a,i){d.counter()&&(u=d.counter()(n.map(pe),o.map(pe),i.map(pe)))}function n(){var e=d.parent().svg().selectAll("g.dc-graph-legend."+o).data([0]);e.enter().append("g").attr("class","dc-graph-legend "+o).attr("transform","translate("+d.x()+","+d.y()+")");var t=e.selectAll(d.type().itemSelector()).data(a,function(e){return e.name}),n=d.type().create(d.parent(),t.enter(),d.itemWidth(),d.itemHeight());if(n.append("text").attr("dy","0.3em").attr("class","legend-label"),t.attr("transform",function(e,t){return"translate("+d.itemWidth()/2+","+(d.itemHeight()+d.gap())*(t+.5)+")"}),t.select("text.legend-label").attr("transform","translate("+(d.itemWidth()/2+d.gap())+",0)").attr("pointer-events",d.dimension()?"auto":"none").text(function(e){return e.name+(d.counter()&&u?" ("+(u[e.orig.key]||0)+(u[e.orig.key]!==i[e.orig.key]?"/"+(i[e.orig.key]||0):"")+")":"")}),d.type().draw(d.parent(),n,t),d.noLabel()&&t.selectAll(d.type().labelSelector()).remove(),d.dropdown()){var r=t.selectAll("text.dropdown-caret").data(function(e){return[e]});r.enter().append("text").attr("dy","0.3em").attr("font-size","75%").attr("fill","blue").attr("class","dropdown-caret").style("visibility","hidden").html(" ▼"),r.attr("dx",function(e){return d.itemWidth()/2+d.gap()+_e(de.select(this.parentNode).select("text.legend-label").node()).width}).on("mouseenter",function(e){var t=this.getBoundingClientRect(),n=d.parent().nodeKey.eval(e);d.dropdown().show(n,t.x,t.y)}),t.on("mouseenter",function(e){u&&u[e.orig.key]&&de.select(this).selectAll(".dropdown-caret").style("visibility","visible")}).on("mouseleave",function(e){de.select(this).selectAll(".dropdown-caret").style("visibility","hidden")})}d.dimension()?t.attr("cursor","pointer").on("click.legend",function(e){var t=d.parent().nodeKey.eval(e);c.length||(c=a.map(d.parent().nodeKey.eval)),c.includes(t)?c=c.filter(function(e){return e!==t}):c.push(t),s(),l.filtered(d,t)}):t.attr("cursor","auto").on("click.legend",null),t.transition().duration(1e3).attr("opacity",function(e){return!c.length||c.includes(d.parent().nodeKey.eval(e))?1:.25})}function r(){var e=d.exemplars();if(d.countBaseline(),e instanceof Array)a=e.map(function(e){return{name:e.name,orig:{key:e.key,value:e.value},cola:{}}});else for(var t in a=[],e)a.push({name:t,orig:{key:t,value:e[t]},cola:{}});n()}return d.type=ye(he.legend.node_legend()),d.x=ye(0),d.y=ye(0),d.gap=ye(5),d.itemWidth=d.nodeWidth=ye(40),d.itemHeight=d.nodeHeight=ye(40),d.noLabel=ye(!0),d.counter=ye(null),d.replaceFilter=function(e){return c=e&&1===e.length?e[0]:[],d},d.filters=function(){return c},d.on=function(e,t){return l.on(e,t),d},d.exemplars=ye({}),d.countBaseline=function(){d.counter&&(i=d.counter()(d.parent().nodeGroup().all(),d.parent().edgeGroup().all(),d.parent().portGroup()&&d.parent().portGroup().all()))},d.dropdown=ye(null).react(function(e){!!e!=!!d.dropdown()&&d.parent()&&d.parent().svg()&&window.setTimeout(d.redraw,0)}),d.dimension=ye(null).react(function(e){e||(c=[],s())}),d},he.legend.node_legend=function(){return{itemSelector:function(){return".node"},labelSelector:function(){return".node-label"},create:function(e,t){return t.append("g").attr("class","node")},draw:function(e,t,n){e._enterNode(t)._updateNode(n)}}},he.legend.edge_legend=function(){var i={itemSelector:function(){return".edge-container"},labelSelector:function(){return".edge-label"},create:function(e,t,n,r){var o=t.append("g").attr("class","edge-container").attr("opacity",0);o.append("rect").attr({x:-n/2,y:-r/2,width:n,height:r,fill:"green",opacity:0}),o.selectAll("circle").data([-1,1]).enter().append("circle").attr({r:i.fakeNodeRadius(),fill:"none",stroke:"black","stroke-dasharray":"4,4",opacity:.15,transform:function(e){return"translate("+[e*i.length()/2,0].join(",")+")"}});var a=i.length()/2-i.fakeNodeRadius();return o.append("svg:path").attr({class:"edge",id:function(e){return e.name},d:"M"+-a+",0 L"+a+",0",opacity:e.edgeOpacity.eval}),o},fakeNodeRadius:ye(10),length:ye(50),draw:function(e,t,n){e._updateEdge(t.select("path.edge"))}};return i},he.constraint_pattern=function(e){var l={},r=[];return e.nodes.forEach(function(t){var e=t.id,n=l[e]||(l[e]={});if(t.partition){var r=t.partition,o=t.value||t.id;t.all||t.typename?(n.match=t.extract?function(e){return t.extract(e.value[r])}:function(e){return e.value[r]},n.typename=t.typename||function(e){return r+"="+e.value[r]}):n.match=function(e){return e.value[r]===o}}else{if(!t.match)throw new Error("couldn't determine matcher for type "+JSON.stringify(t));n.match=t.match}}),e.edges.forEach(function(t){if(!t.disable){var n={source:t.source,target:t.target};n.produce="function"==typeof t.produce?t.produce:function(){return function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}(t.produce)},["listname","wrap","reverse"].forEach(function(e){void 0!==t[e]&&(n[e]=t[e])}),r.push(n)}}),function(i,o,a){var u=[],c={};o.forEach(function(e){var t=i.nodeKey.eval(e);for(var n in l){var r=l[n],o=r.match(e.orig);if(o){var a=r.typename?r.typename(n,o):n;c[a]||(c[a]={nodes:[],whether:{}}),c[a].nodes.push(t),c[a].whether[t]=!0}}});var t=r.filter(function(e){return e.source!==e.target}),e=r.filter(function(e){return e.source===e.target});return a.forEach(function(e){var n=i.edgeSource.eval(e),r=i.edgeTarget.eval(e);t.forEach(function(e){if(c[e.source]&&c[e.source].whether[n]&&c[e.target]&&c[e.target].whether[r]){var t=e.produce(c,o,a);e.reverse?(t.left=r,t.right=n):(t.left=n,t.right=r),u.push(t)}})}),e.forEach(function(e){if(c[e.source]){var t=e.produce(),n=e.listname||e.produce.listname||"nodes",r=e.wrap||e.produce.wrap||function(e){return e};t[n]=c[e.source].nodes.map(r),u.push(t)}}),u}},he.gap_y=function(e,t){return{axis:"y",gap:e,equality:!!t}},he.gap_x=function(e,t){return{axis:"x",gap:e,equality:!!t}},he.align_y=function(){return e("y")},he.align_x=function(){return e("x")},he.order_x=function(e,t){return{type:"ordering",axis:"x",gap:60,ordering:t}},he.order_y=function(e,t){return{type:"ordering",axis:"y",gap:60,ordering:t}},he.tree_positions=function(e,t,n,r,a,i,u){var c;function f(e,t){return(i(e)+i(t))/2}console.warn("dc_graph.tree_positions is deprecated; use the layout engine tree_layout instead"),(e||n)&&console.warn("dc_graph.tree_positions: rootf and treef are ignored"),i=de.functor(i);var o=he.depth_first_traversal({nodeid:function(e){return e.cola.dcg_nodeKey},sourceid:function(e){return e.cola.dcg_edgeSource},targetid:function(e){return e.cola.dcg_edgeTarget},init:function(){c=r},row:function(e){return t(e.orig)},place:function(e,t,n){if(n.length){var r=n[n.length-1],o=(i(r)+i(e))/2;c=Math.max(c,r.left_x+o)}e.left_x=c,e.hit_ins=1,e.cola.y=t*u+a},sib:function(e,t,n){var r=f(t,n);e&&(r*=1.5),c+=r},pop:function(e){e.cola.x=(e.left_x+c)/2},skip:function(e,t){e.cola.x=(e.hit_ins*e.cola.x+c)/++e.hit_ins,e.hit_ins===t&&delete e.hit_ins},finish:function(e){e.forEach(function(e){for(var t,n=e.sort(function(e,t){return e.cola.x-t.cola.x}),r=null,o=null,a=0;a"+e+""}).direction(f.direction()),f.offset()&&c.offset(f.offset()),o.svg().call(c)),f.programmatic()||f.selection().select(e,t,n,r).on("mouseover."+u,l).on("mouseout."+u,d),f.clickable()&&de.select("div.d3-tip").on("mouseover."+u,function(){i&&window.clearTimeout(i)}).on("mouseout."+u,d)},remove_behavior:function(e,t,n,r){f.programmatic()||f.selection().select(e,t,n,r).on("mouseover."+u,null).on("mouseout."+u,null)},laterDraw:!0});return f.direction=ye("n"),f.content=ye(function(e,t){t(f.parent()?f.parent().nodeTitle.eval(e):"")}),f.on=function(e,t){return o.on(e,t)},f.disabled=ye(!1),f.programmatic=ye(!1),f.displayTip=function(e,t,n){if("function"!=typeof e){var r=e;e=function(e){return e===r}}var o=f.selection().select(f.parent(),f.parent().selectAllNodes(),f.parent().selectAllEdges(),null).filter(e);if(0v.dragSize()&&(c=!0,u&&u.style("pointer-events","none")),c&&(p(function(e){e.cola.x=e.original_position[0]+t,e.cola.y=e.original_position[1]+n}),r.reposition(o,a))}}function i(){if(g){if(c){c=!1,u&&(u.style("pointer-events",null),u=null);var n=[];p(function(e,t){n.push({id:t,pos:{x:e.cola.x,y:e.cola.y}})}),t.request_fixes(n)}l&&l.activate(),g=null}}o.on("mousedown.move-nodes",function(e){if(!(s&&s.usePorts()&&s.usePorts().eventPort())){g=he.event_coords(r),u=de.select(this);var t=r.nodeKey.eval(e),n=f;f.indexOf(t)<0?(n=[t],h=t):h=null,p(function(e){e.original_position=[e.cola.x,e.cola.y]},n),l&&l.deactivate()}}),o.on("mousemove.move-nodes",e).on("mouseup.move-nodes",i),r.svg().on("mousemove.move-nodes",e).on("mouseup.move-nodes",i)},remove_behavior:function(e,t,n){t.on("mousedown.move-nodes",null),t.on("mousemove.move-nodes",null),t.on("mouseup.move-nodes",null)},parent:function(e){d.on("set_changed.move-nodes",e?function(e,t){void 0===t&&(t=!0),f=e}:null),l=e.child("brush"),s=e.child("draw-graphs"),e.child("select-nodes")}});return v.dragSize=ye(5),v},he.fix_nodes=function(e){e=e||{};var d,f,t=he.fix_nodes_group("fix-nodes-group"),i=e.fixedPosTag||"fixedPos",u=[],g={nodeid:function(e){return v.parent().nodeKey.eval(e)},sourceid:function(e){return v.parent().edgeSource.eval(e)},targetid:function(e){return v.parent().edgeTarget.eval(e)},get_fix:function(e){return v.parent().nodeFixed.eval(e)},fix_node:function(e,t){e[i]=t},unfix_node:function(e){e[i]=null},clear_fixes:function(){u={}},register_fix:function(e,t){u[e]=t}};function n(e){v.strategy().request_fixes(g,e),c(h()).then(function(){v.parent().redraw()})}function r(e,t,n){v.strategy().new_node(g,e,t,n)}function o(e,t,n){var r=d[t],o=d[n];v.strategy().new_edge(g,e,r,o)}function h(){var a=[];return f.forEach(function(e){var t=v.parent().nodeKey.eval(e),n=u[t],r=e.orig.value[i],o=!1;r?n&&n.x===r.x&&n.y===r.y||(o=!0):o=n,o&&a.push({n:e,fixed:n?{x:n.x,y:n.y}:null})}),a}function a(e,t){t?g.fix_node(e.orig.value,t):g.unfix_node(e.orig.value)}function c(e){var n=v.fixNode()||function(e,t){return Promise.resolve(t)},t=e.map(function(t){var e=v.parent().nodeKey.eval(t.n);return n(e,t.fixed).then(function(e){a(t.n,e)})});return Promise.all(t)}function p(e){e.forEach(function(e){a(e.n,e.fixed)})}function l(e,t,n,r,o,a,i){if(d=t,f=n,r,o,v.strategy().on_data){v.strategy().on_data(g,t,n,r,o,a,i);var u=h();p(u),v.reportOverridesAsynchronously()&&(c=u,l=v.fixNode()||function(e,t){return Promise.resolve(t)},s=c.map(function(e){var t=v.parent().nodeKey.eval(e.n);return l(t,e.fixed)}),Promise.all(s))}var c,l,s}var v={parent:ye(null).react(function(e){t.on("request_fixes.fix-nodes",e?n:null).on("new_node.fix_nodes",e?r:null).on("new_edge.fix_nodes",e?o:null),e?e.on("data.fix-nodes",l):v.parent()&&v.parent().on("data.fix-nodes",null)}),fixNode:ye(null),fixAllNodes:function(e){void 0===e&&(e=!0);var t=f.map(function(e){return{n:e,fixed:{x:e.cola.x,y:e.cola.y}}});return e?c(t):(p(t),Promise.resolve(void 0))},clearFixes:function(){v.strategy().clear_all_fixes&&v.strategy().clear_all_fixes(),g.clear_fixes()},strategy:ye(he.fix_nodes.strategy.fix_last()),reportOverridesAsynchronously:ye(!0)};return v},he.fix_nodes.strategy={},he.fix_nodes.strategy.fix_last=function(){return{request_fixes:function(t,e){t.clear_fixes(),e.forEach(function(e){t.register_fix(e.id,e.pos)})},new_node:function(e,t,n,r){e.fix_node(n,r)},new_edge:function(e,t,n,r){e.unfix_node(n.orig.value),e.unfix_node(r.orig.value)}}},he.fix_nodes.strategy.last_N_per_component=function(c){c=c||1;var l=0,s={};return{clear_all_fixes:function(){s={}},request_fixes:function(e,t){++l,t.forEach(function(e){s[e.id]={id:e.id,age:l,pos:e.pos}})},new_node:function(e,t,n,r){++l,s[t]={id:t,age:l,pos:r},e.fix_node(n,r)},new_edge:function(){},on_data:function(u,e,t,n,r,o,a){++l,t.forEach(function(e){var t=u.nodeid(e),n=u.get_fix(e);n&&!s[t]&&(s[t]={id:t,age:l,pos:n})});var i=[];he.undirected_dfs({nodeid:u.nodeid,sourceid:u.sourceid,targetid:u.targetid,comp:function(){i.push([])},node:function(e,t){i[e].push(t)}})(t,r),u.clear_fixes(),i.forEach(function(e,n){var r=e.reduce(function(e,t){if(t.last_component){var n=e[t.last_component]=e[t.last_component]||{total:0,fixed:0};n.total++,s[u.nodeid(t)]&&n.fixed++}return e},{}),t=Object.keys(r).reduce(function(e,t){return r[t].fixed&&e.push({compid:+t,total:r[t].total,fixed:r[t].fixed}),e},[]).sort(function(e,t){return t.total-e.total}),o=t.length&&t[0].compid,a=e.filter(function(e){return!e.last_component||e.last_component===o}).map(function(e){return s[u.nodeid(e)]}).filter(function(e){return e});a.length>c&&(a.sort(function(e,t){return t.age-e.age}),a=a.slice(0,c)),a.forEach(function(e){u.register_fix(e.id,e.pos)});var i=a.reduce(function(e,t){return e[t.id]=!0,e},{});e.forEach(function(e){var t=u.nodeid(e);i[t]||(s[t]=null),e.last_component=n+1})})}}},he.fix_nodes_group=function(e){return window.chart_registry.create_type("fix-nodes",function(){return de.dispatch("request_fixes","new_node","new_edge")}),window.chart_registry.create_group("fix-nodes",e)},he.filter_selection=function(e,t){t=t||"select-nodes";var r=he.select_things_group(e||"select-nodes-group",t);var o={parent:ye(null).react(function(e){var n;r.on("set_changed.filter-selection-"+t,e?(n=e,function(e){if(e.length){var t=de.set(e);o.dimensionAccessor()(n).filterFunction(function(e){return t.has(e)})}else o.dimensionAccessor()(n).filter(null);n.redrawGroup()}):null)})};return o.dimensionAccessor=ye(function(e){return e.nodeDimension()}),o},he.delete_things=function(t,n,r){r=r||"id";var o,a=x?"Backspace":"Delete",i=[];function u(e){i=e}function c(e){return e[r]}function l(e){if(!s.crossfilterAccessor())throw new Error("need crossfilterAccessor");if(!s.dimensionAccessor())throw new Error("need dimensionAccessor");if(0===(e=e||i).length)return Promise.resolve([]);var t=s.preDelete()?s.preDelete()(e):Promise.resolve(e);return s.onDelete()&&(t=t.then(s.onDelete())),t.then(function(t){if(t&&t.length){var e=s.crossfilterAccessor()(s.parent()),n=s.dimensionAccessor()(s.parent()),r=e.all().slice();r.length;n.filter(null),e.remove();var o=r.filter(function(e){return-1===t.indexOf(c(e))});r.length!==o.length+t.length&&console.warn("size after deletion is not previous size minus selection size",o.map(c),r.map(c),t),e.add(o),s.parent().redrawGroup()}return!0})}var s=he.behavior(n,{add_behavior:function(e){o.on("keyup."+n,function(){de.event.code===a&&l()})},remove_behavior:function(e){},parent:function(e){t.on("set_changed."+n,u),e&&((o=e.child("keyboard"))||e.child("keyboard",o=he.keyboard()))}});return s.preDelete=ye(null),s.onDelete=ye(null),s.crossfilterAccessor=ye(null),s.dimensionAccessor=ye(null),s.deleteSelection=l,s},he.delete_nodes=function(e,t){t=t||{};var n=he.select_things_group(t.select_nodes_group||"select-nodes-group","select-nodes"),o=he.select_things_group(t.select_edges_group||"select-edges-group","select-edges"),a=he.delete_things(n,"delete-nodes",e);return a.preDelete(function(t){var n=a.parent(),r=n.child("delete-edges");return r?Promise.resolve(void 0).then(function(){var e=n.edgeGroup().all().filter(function(e){return-1!==t.indexOf(n.edgeSource()(e))||-1!==t.indexOf(n.edgeTarget()(e))}).map(n.edgeKey());return o.set_changed(e),r.deleteSelection().then(function(){return t})}):null}),a},he.label_things=function(o){o=o||{};var a,r,t=he.select_things_group(o.select_group,o.select_type),i=he.label_things_group(o.label_group,o.label_type),u=[];function n(r){return function(t,e){var n=o.thing_box(t);o.hide_thing_label(t,!0),he.edit_text(r.g(),{text:e.text||o.thing_label(t)||o.default_label,align:o.align,box:n,selectText:e.selectText,accept:function(e){return o.accept(t,e)},finally:function(){o.hide_thing_label(t,!1),a.focus()}})}}function c(e,t,n){var r=o.find_thing(u[0],e,t);r.empty()?console.error("couldn't find thing '"+u[0]+"'!"):1r.cola.y?"out":"in";case"BT":return ur.cola.x?"out":"in";case"RL":return iK.dragSize()&&K.conduct().startDragEdge){if(!K.conduct().startDragEdge(v))return K.conduct().invalidSourceMessage&&(n=K.conduct().invalidSourceMessage(v),console.log(n),i.negativeTip&&i.negativeTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?v.port:v.node)),o(),!0;v.started=!0}return!1}var K=he.behavior("highlight-paths",{add_behavior:function(a,e,t,n){var r=a.child("select-nodes");r&&K.clickCreatesNodes()&&r.clickBackgroundClears(!1),e.on("mousedown.draw-graphs",function(e){if(de.event.stopPropagation(),K.dragCreatesEdges())if(i.tipsDisable&&i.tipsDisable.forEach(function(e){e.hideTip().disabled(!0)}),K.usePorts()){var t;if(!(t="object"==typeof K.usePorts()&&K.usePorts().eventPort?K.usePorts().eventPort():a.getPort(a.nodeKey.eval(e),null,"out")||a.getPort(a.nodeKey.eval(e),null,"in")))return;v={node:e,port:t},_=[{source:w(t)}]}else _=[{source:{x:(v={node:e}).node.cola.x,y:v.node.cola.y}}]}).on("mousemove.draw-graphs",function(e){var n;if(de.event.stopPropagation(),v){var t=he.event_coords(a);if(S(t))return;var r=y;if(e===v.node)K.conduct().invalidTargetMessage&&console.log(K.conduct().invalidTargetMessage(v,v)),y=null,_[0].target=null;else if(K.usePorts()){var o;o="object"==typeof K.usePorts()&&K.usePorts().eventPort?K.usePorts().eventPort():a.getPort(a.nodeKey.eval(e),null,"in")||a.getPort(a.nodeKey.eval(e),null,"out"),y=o?{node:e,port:o}:null}else y&&e===y.node||(y={node:e});if(K.conduct().changeDragTarget)(K.usePorts()?(r&&r.port)!==(y&&y.port):(r&&r.node)!==(y&&y.node))&&(K.conduct().changeDragTarget(v,y)?(u=null,i.negativeTip&&i.negativeTip.hideTip(),n=K.conduct().validTargetMessage&&K.conduct().validTargetMessage()||"matches",i.positiveTip&&i.positiveTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?y.port:y.node),m=!0):(u=K.usePorts()?y&&y.port:y&&y.node,y&&K.conduct().invalidTargetMessage&&(i.positiveTip&&i.positiveTip.hideTip(),n=K.conduct().invalidTargetMessage(v,y),console.log(n),i.negativeTip&&i.negativeTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?y.port:y.node)),m=!1));y?y.port?_[0].target=w(o):_[0].target={x:e.cola.x,y:e.cola.y}:_[0].target={x:t[0],y:t[1]},b(),k()}}).on("mouseup.draw-graphs",function(e){if(u=null,i.negativeTip&&i.negativeTip.hideTip(!0),i.positiveTip&&i.positiveTip.hideTip(!0),i.tipsDisable&&i.tipsDisable.forEach(function(e){e.disabled(!1)}),v&&m){var t;t=K.conduct().finishDragEdge?K.conduct().finishDragEdge(v,y):Promise.resolve(!0);var n=v,r=y;t.then(function(e){e&&function(t,e,n){if(!K.edgeCrossfilter())throw new Error("need edgeCrossfilter");var r,o={},a=K.addEdge()||P;o[d]=A(),o[p]="",K.conduct().detectReversedEdge&&K.conduct().detectReversedEdge(o,e.port,n.port)?(o[f]=n.node.orig.key,o[g]=e.node.orig.key,r=e,e=n,n=r):(o[f]=e.node.orig.key,o[g]=n.node.orig.key),a(o,e.port,n.port).then(function(e){e&&(s.new_edge(o[d],e[f],e[g]),K.edgeCrossfilter().add([e]),c.set_changed([],!1),l.set_changed([e[d]],!1),t.redrawGroup())})}(a,n,r)})}else v&&K.conduct().cancelDragEdge&&K.conduct().cancelDragEdge(v);o(),k()}),a.svg().on("mousedown.draw-graphs",function(){v=null}).on("mousemove.draw-graphs",function(){if(v){var e=he.event_coords(a);if(u=null,S(e))return;K.conduct().dragCanvas&&K.conduct().dragCanvas(v,e),K.conduct().changeDragTarget&&y&&K.conduct().changeDragTarget(v,null),y=null,_[0].target={x:e[0],y:e[1]},b(),k()}}).on("mouseup.draw-graphs",function(){u=null,i.negativeTip&&i.negativeTip.hideTip(!0),i.positiveTip&&i.positiveTip.hideTip(!0),i.tipsDisable&&i.tipsDisable.forEach(function(e){e.disabled(!1)}),v?(K.conduct().cancelDragEdge&&K.conduct().cancelDragEdge(v),o()):de.event.target===this&&K.clickCreatesNodes()&&E(a,he.event_coords(a)),k()}),x||(x=a.g().append("g").attr("class","draw-graphs"))},remove_behavior:function(e,t,n,r){t.on("mousedown.draw-graphs",null).on("mousemove.draw-graphs",null).on("mouseup.draw-graphs",null),e.svg().on("mousedown.draw-graphs",null).on("mousemove.draw-graphs",null).on("mouseup.draw-graphs",null)}});return K.nodeCrossfilter=ye(i.nodeCrossfilter),K.edgeCrossfilter=ye(i.edgeCrossfilter),K.usePorts=ye(null),K.clickCreatesNodes=ye(!0),K.dragCreatesEdges=ye(!0),K.dragSize=ye(5),K.crossSize=ye(15),K.crossWidth=ye(5),K.conduct=ye({}),K.addNode=ye(null),K.addEdge=ye(null),K.createNode=function(e,t){E(K.parent(),e,t)},K},he.match_ports=function(n,a){var u,c,i;function l(e,t){return e.map(function(e){return e.state=t,n.portNodeKey.eval(e)})}function r(e){var t=l(i,"small");e.port.state="small",t.push(n.portNodeKey.eval(e.port)),a.animateNodes(t)}function o(t,n){return c.some(function(e){return 0<=t.edges.indexOf(e)&&0<=n.edges.indexOf(e)})}function s(e,t){return(d.allowParallel()||!o(e,t))&&d.isValid()(e,t)}n.on("data.match-ports",function(e,t,n,r,o,a,i){a,u=i,c=o}),n.on("transitionsStarted",function(){a.enableHover(!0)});var d={isValid:ye(function(e,t){return t!==e&&t.name===e.name}),whyInvalid:ye(function(e,t){return t===e?"can't connect port to itself":t.name!==e.name&&"must connect ports of the same type"}),allowParallel:ye(!1),hoverPort:function(e){if(e){if((i=u.filter(s.bind(null,e))).length)return l(i,"shimmer-medium")}else if(i)return l(i,"small");return null},startDragEdge:function(e){var t=l(i=u.filter(s.bind(null,e.port)),"shimmer");return i.length&&(a.enableHover(!1),e.port.state="large",t.push(n.portNodeKey.eval(e.port)),a.animateNodes(t)),console.log("valid targets",t),0!==i.length},invalidSourceMessage:function(e){return"no valid matches for this port"},changeDragTarget:function(e,t){var n,r,o=t&&s(e.port,t.port);return o?(n=l(i,"small"),t.port.state="large"):(n=l(i,"small"),r=a.animateNodes(n),n=l(i,"shimmer")),a.animateNodes(n,r),o},validTargetMessage:function(e,t){return"it's a match!"},invalidTargetMessage:function(e,t){return n=e.port,r=t.port,!d.allowParallel()&&o(n,r)?"can't connect two edges between the same two ports":d.whyInvalid()(n,r);var n,r},finishDragEdge:function(e,t){return a.enableHover(!0),r(e),Promise.resolve(s(e.port,t.port))},cancelDragEdge:function(e){return a.enableHover(!0),r(e),!0}};return d},he.match_opposites=function(a,e,i){var u,c,l;function s(e){return{x:e.node.cola.x+e.pos.x,y:e.node.cola.y+e.pos.y}}function r(t,n){return(d.allowParallel()||!c.some(function(e){return 0<=t.edges.indexOf(e)&&0<=n.edges.indexOf(e)}))&&d.isValid()(t,n)}function o(e,t){t.forEach(function(e){e.edges.forEach(function(e){e.deleting=0})}),e&&e.port.edges.forEach(function(e){e.deleting=0})}i=Object.assign({multiplier:2,ease:de.ease("cubic")},i),a.cascade(100,!0,f(function(e){return i.ease(e.deleting||0)},e,t)),a.on("data.match-opposites",function(e,t,n,r,o,a,i){a,u=i,c=o});var d={isValid:ye(function(e,t){return"in"===a.portName.eval(e)^"in"===a.portName.eval(t)}),allowParallel:ye(!1),hoverPort:function(e){},startDragEdge:function(e){return l=u.filter(r.bind(null,e.port)),console.log("valid targets",l.map(a.portNodeKey.eval)),0!==l.length},dragCanvas:function(e,n){var t=l.map(function(e){var t=s(e);return{distance:Math.hypot(n[0]-t.x,n[1]-t.y),port:e}}).sort(function(e,t){return e.distance-t.distance}),r=s(t[0].port),o=s(e.port);t.forEach(function(t){t.port.edges.forEach(function(e){e.deleting=1-i.multiplier*t.distance/Math.hypot(r.x-o.x,r.y-o.y)})}),e.port.edges.forEach(function(e){e.deleting=1-i.multiplier*t[0].distance/Math.hypot(r.x-o.x,r.y-o.y)}),a.refresh()},changeDragTarget:function(e,t){var n=t&&r(e.port,t.port);return n&&(t.port.edges.forEach(function(e){e.deleting=1}),e.port.edges.forEach(function(e){e.deleting=1}),o(null,l.filter(function(e){return e!==t.port})),a.refresh()),n},finishDragEdge:function(e,t){if(r(e.port,t.port)){if(o(null,l.filter(function(e){return e!==t.port})),i.delete_edges){var n=e.port.edges.map(a.edgeKey.eval).concat(t.port.edges.map(a.edgeKey.eval));return i.delete_edges.deleteSelection(n)}return Promise.resolve(!0)}return o(e,l),Promise.resolve(!1)},cancelDragEdge:function(e){return o(e,l),!0},detectReversedEdge:function(e,t,n){return"in"===a.portName.eval(t)}};return d},he.wildcard_ports=function(e){var a=e.diagram,r=e.get_type||function(e){return e.orig.value.type},c=e.set_type||function(e,t){e.orig.value.type=t.orig.value.type},i=e.get_name||function(e){return e.orig.value.name},l=e.is_wild||function(e){return e.orig.value.wild},s=e.update_ports||function(){},u=e.get_linked||function(){return[]};function d(e,t){if(!a)return[];var n=a.nodeKey.eval(e),r=i(t),o=(u(e)||[]).find(function(e){return e.includes(r)});return o?o.filter(function(e){return e!==r}).map(function(e){return a.getPort(n,null,e)}):[]}function f(e){return e.every(function(e){return 0===e.edges.length})}return{isValid:function(e,t){return null===r(e)^null===r(t)||null!==r(e)&&r(e)===r(t)},whyInvalid:function(e,t){return null===r(e)&&null===r(t)?"can't connect wildcard to wildcard":r(e)!==r(t)&&"the types of ports must match"},copyLinked:function(e,t){d(e,t).forEach(function(e){c(e,t)})},copyType:function(e,t,n){return null===r(t)?(c(t,n),this.copyLinked(t.node,t),s()):null===r(n)&&(c(n,t),this.copyLinked(n.node,n),s()),Promise.resolve(e)},resetTypes:function(e){var u=a;return 2===arguments.length&&(u=e,e=arguments[1]),e.forEach(function(e){var t=u.getWholeEdge(e),n=u.edgeSourcePortName.eval(t),r=u.edgeTargetPortName.eval(t),o=!1,a=u.getPort(u.nodeKey.eval(t.source),null,n),i=d(t.source,a);l(a)&&1===a.edges.length&&f(i)&&(c(a,null),i.forEach(function(e){c(e,null),o=!0})),a=u.getPort(u.nodeKey.eval(t.target),null,r),i=d(t.target,a),l(a)&&1===a.edges.length&&f(i)&&(c(a,null),i.forEach(function(e){c(e,null),o=!0})),o&&s()}),Promise.resolve(e)}}},he.symbol_port_style=function(){var s,d,o,f={};function g(e){return e.named?e.name:f.parent().edgeKey.eval(e.edges[0])}function h(e){var t=f.color.eval(e);return t?f.colorScale()?f.colorScale()(t):t:"none"}function p(e){var t=f.portPosition(e);return"translate("+t.x+","+t.y+")"}function v(e){f.symbolScale()||f.symbolScale(de.scale.ordinal().range(de.shuffle(f.content().enum())));var t=f.symbol.eval(e);return t&&(f.symbolScale()?f.symbolScale()(t):t)}function y(e){return e.vec[0]<0}function m(e){switch(e.state){case"large":return f.largeRadius.eval(e);case"medium":return f.mediumRadius.eval(e);case"small":default:return f.smallRadius.eval(e)}}function x(e){return/-medium$/.test(e.state)?f.mediumRadius.eval(e):f.largeRadius.eval(e)}function _(e){var t,n;return f.outlineFill.eval(e)?(t=f.outlineFillScale()||ve,n=f.outlineFill.eval(e)):(t=f.parent().nodeFillScale()||ve,n=f.parent().nodeFill.eval(e.node)),"none"===n?"none":t(n)}function b(e){return f.outlineStroke.eval(e)||f.parent().nodeStroke.eval(e.node)}function w(e){var t=f.outlineStrokeWidth.eval(e);return"number"==typeof t?t:f.parent().nodeStrokeWidth.eval(e.node)}return f.symbolScale=ye(null),f.colorScale=ye(de.scale.ordinal().range(de.shuffle(["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"]))),f.symbol=f.portSymbol=ye(g,!1),f.color=f.portColor=ye(g,!1),f.outline=ye(he.symbol_port_style.outline.circle()),f.content=ye(he.symbol_port_style.content.d3symbol()),f.smallRadius=f.portRadius=ye(7),f.mediumRadius=f.portHoverNodeRadius=ye(10),f.largeRadius=f.portHoverPortRadius=ye(14),f.displacement=f.portDisplacement=ye(2),f.outlineFillScale=f.portBackgroundScale=ye(null),f.outlineFill=f.portBackgroundFill=ye(null),f.outlineStroke=f.portBackgroundStroke=ye(null),f.outlineStrokeWidth=f.portBackgroundStrokeWidth=ye(null),f.padding=f.portPadding=ye(2),f.label=f.portLabel=f.portText=ye(function(e){return e.name}),f.portLabelPadding=ye({x:5,y:5}),f.cascade=be(f),f.portPosition=function(e){var t=Math.hypot(e.pos.x,e.pos.y),n=e.pos.x/t,r=e.pos.y/t,o=f.displacement.eval(e);return{x:e.pos.x+o*n,y:e.pos.y+o*r}},f.animateNodes=function(e,t){var n=de.set(e),r=d.filter(function(e){return n.has(f.parent().nodeKey.eval(e))}),o=f.parent().selectNodePortsOfStyle(r,f.parent().portStyle.nameOf(this)),a=o.filter(function(e){return/^shimmer/.test(e.state)}),i=o.filter(function(e){return!/^shimmer/.test(e.state)});function u(){var e=a.transition().duration(1e3).ease("bounce");e.selectAll(".port-outline").call(f.outline().draw(function(e){return x(e)+f.portPadding.eval(e)})),e.selectAll(".port-symbol").call(f.content().draw(v,x));var t=e.transition().duration(1e3).ease("sin");t.selectAll(".port-outline").call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)})),t.selectAll(".port-symbol").call(f.content().draw(v,f.smallRadius.eval)),t.each("end",u)}a.size()&&(t?t.each("end",u):u());var c=i.transition().duration(250);function l(e){return"large"===e.state||"medium"===e.state}return c.selectAll(".port-outline").call(f.outline().draw(function(e){return m(e)+f.portPadding.eval(e)})),c.selectAll(".port-symbol").call(f.content().draw(v,m)),c.selectAll("text.port-label").attr({opacity:function(e){return l(e)?1:0},"pointer-events":function(e){return l(e)?"auto":"none"}}),c.selectAll("rect.port-label-background").attr("opacity",function(e){return l(e)?1:0}),d.filter(function(e){var t=s[f.parent().nodeKey.eval(e)];return t&&t.some(l)}).each(function(){this.parentNode.appendChild(this)}),o.filter(function(e){return"small"!==e.state}).each(function(){this.parentNode.appendChild(this)}),c},f.eventPort=function(){var e=de.select(de.event.target.parentNode);return"g"===de.event.target.parentNode.tagName&&e.classed("port")?e.datum():null},f.drawPorts=function(e,t,n){s=t,d=n;var r=e.data(function(e){return t[f.parent().nodeKey.eval(e)]||[]},g);r.exit().remove();var o=r.enter().append("g").attr({class:"port",transform:p});r.transition("port-position").duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).attr({transform:p});var a=r.selectAll(".port-outline").data(function(e){return"none"!==_(e)?[e]:[]});a.exit().remove();var i=a.enter().append(f.outline().tag()).attr({class:"port-outline",fill:_,"stroke-width":w,stroke:b});f.outline().init&&i.call(f.outline().init),i.call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)})),a.attr({fill:_,"stroke-width":w,stroke:b}),a.transition().duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)}));o.append(f.content().tag()).attr("class","port-symbol").call(f.content().draw(v,f.smallRadius.eval));var u=r.select(".port-symbol");u.attr("fill",h),u.transition().duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).call(f.content().draw(v,f.smallRadius.eval));var c=r.selectAll("text.port-label").data(function(e){return f.portLabel.eval(e)?[e]:[]});c.exit().remove();var l=c.enter();return l.append("rect").attr({class:"port-label-background","pointer-events":"none"}),l.append("text").attr({class:"port-label","dominant-baseline":"middle","pointer-events":"none",cursor:"default",opacity:0}),c.each(function(e){e.offset=(y(e)?-1:1)*(f.largeRadius.eval(e)+f.portPadding.eval(e))}).attr({"text-anchor":function(e){return y(e)?"end":"start"},transform:function(e){return"translate("+e.offset+",0)"}}).text(f.portLabel.eval).each(function(e){e.bbox=_e(this)}),r.selectAll("rect.port-label-background").attr({x:function(e){return(e.offset<0?e.offset-e.bbox.width:e.offset)-f.portLabelPadding.eval(e).x},y:function(e){return-e.bbox.height/2-f.portLabelPadding.eval(e).y},width:function(e){return e.bbox.width+2*f.portLabelPadding.eval(e).x},height:function(e){return e.bbox.height+2*f.portLabelPadding.eval(e).y},fill:"white",opacity:0}),f},f.enableHover=function(e){if(!o&&f.parent()){var t=f.parent().child("draw-graphs");t&&(o=t.conduct())}var n="grow-ports-"+f.parent().portStyle.nameOf(this);return e?(d.on("mouseover."+n,function(e){var t=f.parent().nodeKey.eval(e),n=f.eventPort();s[t]&&s[t].forEach(function(e){e.state=e===n?"large":n?"small":"medium"});var r=o&&o.hoverPort(n)||[];r.push(t),f.animateNodes(r)}),d.on("mouseout."+n,function(e){var t=f.parent().nodeKey.eval(e);s[t]&&s[t].forEach(function(e){e.state="small"});var n=o&&o.hoverPort(null)||[];n.push(t),f.animateNodes(n)})):(d.on("mouseover."+n,null),d.on("mouseout."+n,null)),f},f.parent=ye(null),f},he.symbol_port_style.outline={},he.symbol_port_style.outline.circle=function(){return{tag:function(){return"circle"},draw:function(t){return function(e){e.attr("r",function(e){return t(e)})}}}},he.symbol_port_style.outline.square=function(){return{tag:function(){return"rect"},init:function(e){},draw:function(t){return function(e){e.attr({x:function(e){return-t(e)},y:function(e){return-t(e)},width:function(e){return 2*t(e)},height:function(e){return 2*t(e)}})}}}},he.symbol_port_style.outline.arrow=function(){var r=.75-Math.PI/8,o={tag:function(){return"path"},init:function(e){},draw:function(n){return function(e){e.attr("d",function(e){var t=n(e);return!o.outie()||o.outie()(e.orig)?"M"+-r*t+","+-t+" h"+t+" l"+t+","+t+" l"+-t+","+t+" h"+-t+" a"+t+","+t+" 0 1,1 0,"+-2*t:"M"+-(2-r)*t+","+-t+" h"+2*t+" a"+t+","+t+" 0 1,1 0,"+2*t+" h"+-2*t+" l"+t+","+-t+" l"+-t+","+-t})}},outie:ye(null)};return o},he.symbol_port_style.content={},he.symbol_port_style.content.d3symbol=function(){return{tag:function(){return"path"},enum:function(){return de.svg.symbolTypes},draw:function(r,o){return function(e){e.attr("d",function(e){var t=r(e),n=o(e);return de.svg.symbol().type(t).size(n*n)()}),e.attr("transform",function(e){switch(r(e)){case"triangle-up":return"translate(0, -1)";case"triangle-down":return"translate(0, 1)";default:return null}})}}}},he.symbol_port_style.content.letter=function(){return{tag:function(){return"text"},enum:function(){return de.range(65,91).map(String.fromCharCode)},draw:function(t,n){return function(e){e.text(t).attr({"dominant-baseline":"middle","text-anchor":"middle"}),e.each(function(e){e.symbol_size||(e.symbol_size=_e(this))}),e.attr("transform",function(e){return"scale("+2*n(e)/e.symbol_size.height+") translate("+[0,2].join(",")+")"})}}}},he.load_graph=function(){function e(e){return e?e.replace(/\?.*/,""):null}var t,n,r;if(t=arguments[0],3===arguments.length)n=arguments[1],r=arguments[2];else{if(2!==arguments.length)throw new Error("need two or three arguments");r=arguments[1]}n?queue().defer(de.json,t).defer(de.json,n).await(function(e,t,n){e?r(e,null):r(null,{nodes:t.results,edges:n.results})}):/\.json$/.test(e(t))?de.json(t,r):/\.gv|\.dot$/.test(e(t))?de.text(t,function(e,t,n){if(t)e(t,null);else{var r,o;if(graphlibDot.parse){var a=graphlibDot.parse(n),i=a.nodes();r=new Array(i.length),i.forEach(function(e,t){var n=r[t]=a._nodes[i[t]];n.id=t,n.name=e});var u=a.edges();o=[],u.forEach(function(e){var t=a._edges[e];o.push(Object.assign({},t.value,{source:a._nodes[t.u].id,target:a._nodes[t.v].id,sourcename:t.u,targetname:t.v}))})}else a=graphlibDot.read(n),i=a.nodes(),r=new Array(i.length),i.forEach(function(e,t){var n=r[t]=a._nodes[i[t]];n.id=t,n.name=e}),o=[],a.edges().forEach(function(e){o.push(Object.assign({},e.value,{source:a._nodes[e.v].id,target:a._nodes[e.w].id,sourcename:e.v,targetname:e.w}))});e(null,{nodes:r,links:o})}}.bind(null,r)):/\.psv$/.test(e(t))?de.dsv("|","text/plain")(t,p.bind(null,r)):/\.csv$/.test(e(t))&&de.csv(t,p.bind(null,r))},he.munge_graph=function(t,e,n,r){var o,a,i=e||"name",u=n||"sourcename",c=r||"targetname";if(!w(t)){var l=["database","response"],s=l.findIndex(function(e){return t[e]&&w(t[e])});if(s<0)throw new Error("couldn't find the data!");t=t[l[s]]}function d(t,e){return e.filter(function(e){return!!t[e]})}a=t.edges||t.links,o=t.nodes||t.vertices;var f=a[0];if(void 0===f[u]){var g=n?[n]:["source_ecomp_uid","node1","source","tail"],h=r?[r]:["target_ecomp_uid","node2","target","head"],p=["edge"];if(f.node0&&f.node1)u="node0",c="node1";else{var v=d(f,g);if(!v.length){if((s=p.findIndex(function(e){return f[e]&&d(f[e],g).length}))<0)throw n?new Error("sourceattr "+u+" didn't work"):new Error("didn't find any source attr");a=a.map(function(e){return e[p[s]]}),v=d(f=a[0],g)}if(1(u.valuesByAttr?1:0)){var d=i.shift(),f=[],g=[],t=e.map(function(e){var t,n=e[u.nestKey],r=u.nestKeysUnique?n:A();if(r&&(u.ancestorKeys?(s=s||{},d&&(s[d]=n),t=Object.assign({},s)):t={},t[u.nodeKey]=r,u.label&&u.labelFun&&(t[u.label]=u.labelFun(n,d,e)),u.level&&(t[u.level]=l+1),f.push(t),c)){var o={};o[u.edgeSource]=c,o[u.edgeTarget]=r,g.push(o)}var a=u.valuesByAttr?e[i[0]]:e.values;return v(a,i.slice(0),u,r,l+1,Object.assign({},s))});return{nodes:Array.prototype.concat.apply(f,t.map(ge.pluck("nodes"))),edges:Array.prototype.concat.apply(g,t.map(ge.pluck("edges")))}}return{nodes:e.map(function(e){return e=Object.assign({},e),u.level&&(e[u.level]=l+1),e}),edges:e.map(function(e){var t={};return t[u.edgeSource]=c,t[u.edgeTarget]=e[u.nodeKey],t})}};he.convert_tree=function(e,t,n){return n=Object.assign({nodeKey:"key",edgeKey:"key",edgeSource:"sourcename",edgeTarget:"targetname",nestKey:"key"},n),Array.isArray(e)?v(e,t,n,n.root,0,n.inherit):(t=[""].concat(t),v([e],t,n,n.root,0,n.inherit))},he.convert_nest=function(e,t,n,r,o,a,i){return he.convert_tree(e,t,{nodeKey:n,edgeSource:r,edgeTarget:o,root:a,inherit:i,ancestorKeys:!0,label:"name",labelFun:function(e,t,n){return t+":"+e},level:"_level"})},he.convert_adjacency_list=function(e,r,o){var t=Array.prototype.concat.apply([],e.map(function(n){return n[r.adjacencies].map(function(e){var t={};return o.edgeKey&&(t[o.edgeKey]=A()),t[o.edgeSource]=n[r.nodeKey],t[o.edgeTarget]=r.targetKey?e[r.targetKey]:e,o.adjacency&&(t[o.adjacency]=e),t})}));return{nodes:e,edges:t}},he.deparallelize=function(e,c,l){return{all:function(){var u={};e.all().forEach(function(e){var t=e.value[c],n=e.value[l],r=t "+n[a.nodeKey]),u.push(o)}}},remove:function(e){for(;0i&&0e)return o.splice(n,0,{n:e,f:t}),a}return o.push({n:e,f:t}),a},a._eval=function(e,t){return 0!==t&&o.length?o[t-1].f(e,function(){return a._eval(e,t-1)}):he.functor_wrap(a(),n)(e)},a.eval=function(e){return a._eval(e,o.length)},a.react=function(e){return arguments.length?(r=e,this):r},a};function me(){var n={},e=function(e,t){return 1===arguments.length?n[e]:(n[e]===t||(n[e]&&n[e].parent(null),(n[e]=t)&&t.parent(this)),this)};return e.enum=function(){return Object.keys(n)},e.nameOf=function(t){var e=Object.entries(n).find(function(e){return e[1]==t});return e?e[0]:null},e}function xe(e,t){var n=ye(t),r=function(){return arguments.length?(console.warn(e),n.apply(ye,arguments),this):n()};return["cascade","_eval","eval","react"].forEach(function(e){r[e]=n[e]}),r}function A(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}function _e(e){try{return e.getBBox()}catch(e){return{x:0,y:0,width:0,height:0}}}function n(n,r){return function(e,t){return n(e)?r(e):t()}}function t(n,r){return function(e,t){return de.interpolate(t(e),r(e))(n(e))}}function f(e,t,n){var r={};for(var o in t)r[o]=n(e,we(t[o]));return r}function c(e,t){return f(e,t,n)}function b(e,t,n){var r={},o={},a=[];for(var i in n)/^node/.test(i)?r[i]=n[i]:/^edge/.test(i)?o[i]=n[i]:a.push(i);a.length&&console.error('only know how to deal with properties that start with "node" or "edge"',a);var u=e?c(e,r):{};return t&&Object.assign(u,c(t,o)),u}function be(o){return function(e,t,n){for(var r in n){if(!o[r])throw new Error("unknown attribute "+r);o[r].cascade(e,t?n[r]:null)}return o}}function we(e){return he.functor_wrap(e,pe)}"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(e),r=1;r>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var r=arguments[1],o=0;o"+n+' is deprecated, and it is not supported for the "'+t.layoutAlgorithm()+'" layout algorithm: ignored.'),!arguments.length)return null;return this}}function Q(e){z.layoutEngine()||z.layoutAlgorithm("cola",!0),(e||z.layoutEngine()).init({width:z.width(),height:z.height()})}function ee(e){return!!e.source&&!!e.target}z.height=function(e){if(!arguments.length){if(!ge.utils.isNumber(i)){if(G=d(z.root().node()),"auto"===i)return G;i=G}return i}if(ge.utils.isNumber(e)||!e||"auto"===e)i=e;else{if("function"!=typeof e)throw new Error("don't know what to do with height type "+typeof e+" value "+e);d=e,i=void 0}return z},z.minHeight=function(e){return arguments.length?(s=e,z):s},z.width=function(e){if(!arguments.length){if(!ge.utils.isNumber(o)){if(q=l(z.root().node()),"auto"===o)return q;o=q}return o}if(ge.utils.isNumber(e)||!e||"auto"===e)o=e;else{if("function"!=typeof e)throw new Error("don't know what to do with width type "+typeof e+" value "+e);l=e,o=void 0}return z},z.minWidth=function(e){return arguments.length?(c=e,z):c},z.root=ye(null).react(function(e){e.empty()&&console.log("Warning: parent selector "+t+" doesn't seem to exist")}),z.mouseZoomable=ye(!0),z.zoomExtent=ye([.1,2]),z.modKeyZoom=z.altKeyZoom=ye(!1),z.fitStrategy=ye("default"),z.restrictPan=ye(!1),z.autoZoom=ye(null),z.zoomToFit=function(e){if(H&&Y){var t=z.selectAllNodes();z.selectAllEdges();P(t)}},z.zoomDuration=ye(500),z.nodeDimension=ye(),z.nodeGroup=ye(),z.edgeDimension=ye(),z.edgeGroup=ye(),z.edgesInFront=ye(!1),z.nodeKey=z.nodeKeyAccessor=ye(function(e){return e.key}),z.edgeKey=z.edgeKeyAccessor=ye(function(e){return e.key}),z.edgeSource=z.sourceAccessor=ye(function(e){return e.value.sourcename}),z.edgeTarget=z.targetAccessor=ye(function(e){return e.value.targetname}),z.portDimension=ye(null),z.portGroup=ye(null),z.portNodeKey=ye(null),z.portEdgeKey=ye(null),z.portName=ye(null),z.portStyleName=ye(null),z.portElastic=ye(!0),z.portStyle=me(),z.portBounds=ye(null),z.edgeSourcePortName=ye(null),z.edgeTargetPortName=ye(null),z.nodeRadius=z.nodeRadiusAccessor=ye(25),z.nodeStrokeWidth=z.nodeStrokeWidthAccessor=ye(1),z.nodeStroke=z.nodeStrokeAccessor=ye("black"),z.nodeStrokeDashArray=ye(null),z.nodeFillScale=ye(null),z.nodeFill=z.nodeFillAccessor=ye("white"),z.nodeOpacity=ye(1),z.nodePadding=ye(6),z.nodeLabelPadding=ye(0),z.nodeLineHeight=ye(1),z.nodeLabel=z.nodeLabelAccessor=ye(function(e){return e.value.label||e.value.name}),z.nodeLabelAlignment=ye("center"),z.nodeLabelFill=z.nodeLabelFillAccessor=ye(null),z.nodeFitLabel=z.nodeFitLabelAccessor=ye(!0),z.nodeShape=ye(Se),z.shape=me(),z.shape("nothing",he.no_shape()),z.shape("ellipse",he.ellipse_shape()),z.shape("polygon",he.polygon_shape()),z.shape("rounded-rect",he.rounded_rectangle_shape()),z.nodeContent=ye("text"),z.content=me(),z.content("text",he.text_contents()),z.nodeIcon=ye(null),z.nodeTitle=z.nodeTitleAccessor=ye(function(e){return z.nodeKey()(e)}),z.nodeOrdering=ye(null),z.nodeFixed=z.nodeFixedAccessor=ye(null),z.edgeStroke=z.edgeStrokeAccessor=ye("black"),z.edgeStrokeWidth=z.edgeStrokeWidthAccessor=ye(1),z.edgeStrokeDashArray=ye(null),z.edgeOpacity=z.edgeOpacityAccessor=ye(1),z.edgeLabel=z.edgeLabelAccessor=ye(function(e){return z.edgeKey()(e)}),z.edgeArrowhead=z.edgeArrowheadAccessor=ye("vee"),z.edgeArrowtail=z.edgeArrowtailAccessor=ye(null),z.edgeArrowSize=ye(1),z.edgeIsLayout=z.edgeIsLayoutAccessor=ye(function(e){return!e.value.notLayout}),z.edgeIsShown=ye(!0),z.lengthStrategy=p("lengthStrategy"),z.edgeLength=z.edgeDistanceAccessor=ye(function(e){return e.value.distance}),z.flowLayout=p("flowLayout"),z.rankdir=p("rankdir"),z.baseLength=p("baseLength"),z.transitionDuration=ye(500),z.stageTransitions=ye("none"),z.deleteDelay=ye(0),z.groupConnected=p("groupConnected"),z.timeLimit=ye(0),z.constrain=ye(function(e,t){return[]}),z.parallelEdgeOffset=ye(10),z.edgeOrdering=ye(null),z.edgeSort=ye(null),z.cascade=be(z),z.initLayoutOnRedraw=ye(!1),z.layoutUnchanged=ye(!1),z.relayout=function(){return F=R=null,this},z.initialLayout=xe("initialLayout is deprecated - use layout algorithms instead",null),z.initialOnly=xe("initialOnly is deprecated - see the initialLayout deprecation notice in the documentation",!1),z.induceNodes=ye(!1),z.showLayoutSteps=ye(!1),z.mode=z.child=me(),z.legend=function(e){return arguments.length?(z.child("node-legend",e),z):z.child("node-legend")},z.layoutAlgorithm=function(e,t){if(!arguments.length)return z.layoutEngine()?z.layoutEngine().layoutAlgorithm():"cola";var n;switch(t||console.warn("dc.graph.diagram.layoutAlgorithm is depecrated - pass the layout engine object to dc_graph.diagram.layoutEngine instead"),e){case"cola":n=he.cola_layout();break;case"dagre":n=he.dagre_layout()}return n=he.webworker_layout(n),z.layoutEngine(n),this},z.layoutEngine=ye(null).react(function(e){e&&e.parent&&e.parent(z),h&&(Object.keys(Z).forEach(function(e){Z[e].cola.points=null}),Q(e))}),z.enforceEdgeDirection=ye(null),z.tickSize=p("tickSize"),z.uniqueId=function(){return z.anchorName().replace(/[ .#=\[\]"]/g,"-")},z.edgeId=function(e){return"edge-"+z.edgeKey.eval(e).replace(/[^\w-_]/g,"-")},z.arrowId=function(e,t){return"arrow-"+t+"-"+z.uniqueId()+"-"+z.edgeId(e)},z.textpathId=function(e){return"textpath-"+z.uniqueId()+"-"+z.edgeId(e)},z.getNode=function(e){return V[e]?V[e].orig:null},z.getWholeNode=function(e){return V[e]?V[e]:null},z.getEdge=function(e){return Z[e]?Z[e].orig:null},z.getWholeEdge=function(e){return Z[e]?Z[e]:null},z.getPort=function(e,t,n){return U[De(e,t,n)]},z.nodePorts=function(){return a},z.handleDisconnected=p("handleDisconnected"),z.forEachChild=function(e,n,r,o){n.enum().forEach(function(t){o(n(t),e.filter(function(e){return r(e)===t}))})},z.forEachShape=function(e,t){z.forEachChild(e,z.shape,function(e){return e.dcg_shape.shape},t)},z.forEachContent=function(e,t){z.forEachChild(e,z.content,z.nodeContent.eval,t)},z.renderNode=z._enterNode=function(e){return z.nodeTitle()&&e.append("title"),e.each(Ke(z)),z.forEachShape(e,function(e,t){t.call(e.create)}),z},z.redrawNode=z._updateNode=function(e){var r,t,n,o=e.filter((r=z,function(e){var t=r.nodeShape.eval(e)||Se,n=e.dcg_shape.abstract;return t.shape!==n.shape||"polygon"===t.shape&&(t.shape.sides!==n.sides||t.shape.skew!==n.skew||t.shape.distortion!==n.distortion||t.shape.rotation!==n.rotation)}));return o.selectAll(".node-shape").remove(),o.each(Ke(z)),z.forEachShape(o,function(e,t){t.call(e.create)}),e.select("title").text(z.nodeTitle.eval),z.forEachContent(e,function(e,t){t.call(e.update),z.forEachShape(e.selectContent(t),function(e,t){var s,d;t.call((s=e,d=z,function(e){e.each(function(e){var t=null;if((!s.useTextSize||s.useTextSize(e.dcg_shape))&&d.nodeFitLabel.eval(e)){var n;t={x:(t=_e(this)).x,y:t.y,width:t.width,height:t.height};var r=d.nodeContent.eval(e);if(r&&d.content(r).padding)n=d.content(r).padding(e);else{var o=Ae(d,e);n={x:2*o.x,y:2*o.y}}t.width+=n.x,t.height+=n.y,e.bbox=t}var a,i=0;s.useRadius&&!s.useRadius(e.dcg_shape)||(i=d.nodeRadius.eval(e)),a=t&&t.width&&t.height||s.useTextSize&&!s.useTextSize(e.dcg_shape)?s.calc_radii(e,i,t):{rx:i,ry:i},e.dcg_rx=a.rx,e.dcg_ry=a.ry;var u=2*a.rx,c=2*a.ry;if(ut.target.index&&(o=-o,a=-a),n=[a,o],r=Math.hypot(n[0],n[1]),[n[0]/r,n[1]/r]}function re(e,t){for(var n in a={},t.forEach(function(e){var t=z.nodeKey.eval(e.node);(a[t]=a[t]||[]).push(e)}),a){var r=e[n];a[n].forEach(function(e){if(z.portElastic.eval(e)&&e.edges.length){var t=e.edges.map(m.bind(null,r));e.vec=[de.sum(t,function(e){return e[0]})/t.length,de.sum(t,function(e){return e[1]})/t.length]}else e.vec=e.vec||void 0;e.pos=null})}}function oe(e,t,n){for(var r in a){var o=e[r];a[r].forEach(function(e){e.pos||Me(z,o,e)})}t.forEach(function(e){var t=z.edgeSourcePortName.eval(e);e.sourcePort.pos=t?n[De(z.nodeKey.eval(e.source),null,t)].pos:n[De(null,z.edgeKey.eval(e),"source")].pos,t=z.edgeTargetPortName.eval(e),e.targetPort.pos=t?n[De(z.nodeKey.eval(e.target),null,t)].pos:n[De(null,z.edgeKey.eval(e),"target")].pos,console.assert(e.sourcePort.pos&&e.targetPort.pos)})}function ae(e,t){z._updateEdge(t),z._updateNode(e),ce(e)}function ie(e){X.end(e),J=!1,te&&(te=!1,window.setTimeout(function(){z.isRunning()||z.redraw()},0))}function x(e,t){var n=e[0],r=e[e.length-1],o=Oe(e,"tail"===t?.25:.75);return("head"===t?Math.atan2(r.y-o.y,r.x-o.x):Math.atan2(n.y-o.y,n.x-o.x))+"rad"}function _(e,t,n){var r=e.points,o=r[0],a=r[r.length-1];switch(z.enforceEdgeDirection()){case"LR":if(t.x>=n.x){var i=o.x-a.x;return{points:[o,{x:o.x+i,y:o.y-i/2},{x:a.x-i,y:a.y-i/2},a],bezDegree:3,sourcePort:e.sourcePort,targetPort:e.targetPort}}break;case"TB":if(t.y>=n.y){var u=o.y-a.y;return{points:[o,{x:o.x+u/2,y:o.y+u},{x:a.x+u/2,y:a.y-u},a],bezDegree:3,sourcePort:e.sourcePort,targetPort:e.targetPort}}}return e}function b(e,t,n,r,o,a){var i,u=e.parallel,c=e.source,l=e.target;1e.target.index&&(i=l,l=c,c=i,i=o,o=n,n=i,i=a,a=r,r=i);for(var s=c.dcg_ry+z.nodeStrokeWidth.eval(c)/2,d=l.dcg_ry+z.nodeStrokeWidth.eval(l)/2,f=0;fMath.PI&&(nz.timeLimit())&&(console.log("cancelled"),z.layoutEngine().stop())}).on("end",function(e,t){z.showLayoutSteps()?ie(!0):(z.initialOnly()||I(e,t),re(V,h),X.receivedLayout(z,V,d,Z,f,U,h),oe(V,f,U),ue(A,P,x,_,b,w,k,E,S,K,!0),ce(A),X.transitionsStarted(A,x,b)),ne(A,x)}).on("start",function(){console.log("algo "+z.layoutEngine().layoutAlgorithm()+" started."),X.start()}),z.initialOnly()?z.layoutEngine().dispatch().end(d,f):(X.start(),z.layoutEngine().data({width:z.width(),height:z.height()},d.map(function(e){return e.cola}),D.map(function(e){return e.cola}),L),z.layoutEngine().start()),this},z.refresh=function(e,t,n,r,o){if(v)return this;ae(e=e||z.selectAllNodes(),t=t||z.selectAllEdges()),n=n||z.selectAllEdges(".edge-hover"),r=r||z.selectAllEdges(".edge-label"),o=o||z.selectAllDefs("path.edge-label-path");var a=de.select(null);return ue(e,a,t,a,n,a,r,a,o,a,!1),this},z.requestRefresh=function(t){window.requestAnimationFrame(function(){var e;void 0!==t&&(e=z.transitionDuration(),z.transitionDuration(t)),z.refresh(),void 0!==t&&z.transitionDuration(e)})},z.reposition=function(e,t){return e.attr("transform",function(e){return"translate("+e.cola.x+","+e.cola.y+")"}),t.each(function(e){e.pos.new=null,e.pos.old=null,b(e,"new",e.source.cola.x,e.source.cola.y,e.target.cola.x,e.target.cola.y),z.edgeArrowhead.eval(e)&&de.select("#"+z.arrowId(e,"head")).attr("orient",function(){return e.pos.new.orienthead}),z.edgeArrowtail.eval(e)&&de.select("#"+z.arrowId(e,"tail")).attr("orient",function(){return e.pos.new.orienttail})}).attr("d",w("new")),this},z.animating=function(){return v},z.selectNodePortsOfStyle=function(e,t){return e.selectAll("g.port").filter(function(e){return z.portStyleName.eval(e)===t})},z.render=function(){g&&X.reset(),z.initLayoutOnRedraw()||Q(),z.resetSvg(),h=g.append("g").attr("class","draw");var e=["edge-layer","node-layer"];return z.edgesInFront()&&e.reverse(),h.selectAll("g").data(e).enter().append("g").attr("class",function(e){return e}),Y=h.selectAll("g.edge-layer"),H=h.selectAll("g.node-layer"),X.render(),z.redraw(),this},z.on=function(e,t){return 1===arguments.length?X.on(e):(X.on(e,t),this)},z.getStats=function(){return $},z.select=function(e){return z.root().select(e)},z.selectAll=function(e){return z.root()?z.root().selectAll(e):null},z.x=ye(null),z.y=ye(null),z.svg=function(e){return arguments.length?(g=e,z):g},z.g=function(e){return arguments.length?(h=e,z):h},z.resetSvg=function(){return g&&(g.remove(),g=null),function(){g=z.root().append("svg"),z.resizeSvg(),B=g.append("svg:defs"),z.x()||z.x(de.scale.linear().domain([0,z.width()]).range([0,z.width()]));z.y()||z.y(de.scale.linear().domain([0,z.height()]).range([0,z.height()]));if(W=de.behavior.zoom().on("zoom",C).x(z.x()).y(z.y()).scaleExtent(z.zoomExtent()),z.mouseZoomable()){var e,t,n=z.child("brush");if(e=z.modKeyZoom()){t=Array.isArray(e)?e.slice():"string"==typeof e?[e]:["Alt"];var r=!1,o=!1,a=!1;g.on("mousedown.modkey-zoom",function(){r=!0}).on("mouseup.modkey-zoom",function(){(r=!1)||o||!a||(a=!1,se(),n&&n.activate())}),de.select(document).on("keydown.modkey-zoom",function(){-1 "':'" -- "')+l(e.dcg_edgeTarget)+'" '+f([d("id",l(e.dcg_edgeKey)),d("arrowhead","none"),d("arrowtail","none")])}))).push("}"),n.push(""),i=n.join("\n")}}(t,n)},dotInput:function(e){return a=e,this},clusters:function(){return u},start:function(){!function(){if(t)de.json(t).header("Content-type","application/x-www-form-urlencoded").post("layouttool="+o+"&"+encodeURIComponent(i),r);else{var e=Viz(i,{format:"json",engine:o,totalMemory:1<<25});r(0,e=JSON.parse(e))}}()},stop:function(){},optionNames:function(){return h},populateLayoutNode:function(){},populateLayoutEdge:function(){}})},he.d3_force_layout=function(e){var t=e||A(),u=null,n=de.dispatch("tick","start","end"),y={},c={},l=[],s=[],m=null,r=null;function o(e){n[e](l,s.map(function(e){return{dcg_edgeKey:e.dcg_edgeKey}}))}function a(){!function(){if(null===r)u.gravity(m.gravityStrength).charge(m.initialCharge);else{if(m.fixOffPathNodes){var t=de.set();r.forEach(function(e){e.forEach(function(e){t.add(e)})}),Object.keys(y).forEach(function(e){t.has(e)?y[e].fixed=!1:y[e].fixed=!0})}u.charge(m.chargeForce)}}(),function(e){if(!e)return o("end");u.start();for(var t=0;t<300;++t)u.tick(),r&&i();u.stop()}(m.iterations)}function i(){function a(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function h(e,t){var n,r,o=(r=t,((n=e).x*r.x+n.y*r.y)/(a(e)*a(t)));return o=Math.min(o,1),o=Math.max(o,-1),Math.acos(o)}function p(e){var t=-e.y/e.x,n=a({x:t,y:1});return{x:t/n,y:1/n}}function v(e,t,n,r){e.x+=n.x*(Math.PI-t)*r,e.y+=n.y*(Math.PI-t)*r}r.forEach(function(e){if(!(e.length<3))for(var t=1;t=Math.PI/2?c:{x:-c.x,y:-c.y},l=h(g,l)>=Math.PI/2?l:{x:-l.x,y:-l.y},v(r,u,c,m.angleForce),v(o,u,l,m.angleForce)}})}var d=he.graphviz_attrs(),f=Object.keys(d);return Object.assign(d,{layoutAlgorithm:function(){return"d3-force"},layoutId:function(){return t},supportsWebworker:function(){return!0},parent:ye(null),on:function(e,t){return 1===arguments.length?n.on(e):(n.on(e,t),this)},init:function(t){var e;return this.optionNames().forEach(function(e){t[e]=t[e]||this[e]()}.bind(this)),m=e=t,(u=de.layout.force().size([e.width,e.height])).on("tick",function(){o("tick")}).on("start",function(){n.start()}).on("end",function(){o("end")}),this},data:function(e,t,n,r){var o,a,i;a=n,i={},(o=t).forEach(function(e,t){i[e.dcg_nodeKey]=t}),l=Ee(y,o,null,function(e){return e.dcg_nodeKey},function(e,t){e.dcg_nodeKey=t.dcg_nodeKey,e.width=t.width,e.height=t.height,e.id=t.dcg_nodeKey,t.dcg_nodeFixed?(e.fixed=!0,e.x=t.dcg_nodeFixed.x,e.y=t.dcg_nodeFixed.y):e.fixed=!1}),s=Ee(c,a,null,function(e){return e.dcg_edgeKey},function(e,t){e.dcg_edgeKey=t.dcg_edgeKey,e.source=y[t.dcg_edgeSource],e.source.id=i[e.source.dcg_nodeKey],e.target=y[t.dcg_edgeTarget],e.target.id=i[e.target.dcg_nodeKey],e.dcg_edgeLength=t.dcg_edgeLength}),u.nodes(l),u.links(s)},start:function(){a()},stop:function(){u&&u.stop()},paths:function(e){r=e},savePositions:function(){var t={};return Object.keys(y).forEach(function(e){t[e]={x:y[e].x,y:y[e].y}}),t},restorePositions:function(t){Object.keys(t).forEach(function(e){y[e]&&(y[e].fixed=!1,y[e].x=t[e].x,y[e].y=t[e].y)})},optionNames:function(){return["iterations","angleForce","chargeForce","gravityStrength","initialCharge","fixOffPathNodes"].concat(f)},iterations:ye(300),angleForce:ye(.02),chargeForce:ye(-500),gravityStrength:ye(1),initialCharge:ye(-400),fixOffPathNodes:ye(!1),populateLayoutNode:function(){},populateLayoutEdge:function(){}})},he.d3_force_layout.scripts=["d3.js"],he.d3v4_force_layout=function(e){var t=e||A(),u=null,n=de.dispatch("tick","start","end"),c={},l={},s=[],d=[],r=null,o=null;function a(e){n[e](s,d.map(function(e){return{dcg_edgeKey:e.dcg_edgeKey}}))}function i(){n.start(),function(e){e&&(e=e.filter(function(e){return e.nodes.every(function(e){return c[e]})}));if(null!==e&&e.length){var t;r.fixOffPathNodes&&(t=de.set(),e.forEach(function(e){e.nodes.forEach(function(e){t.add(e)})})),Object.keys(c).forEach(function(e){r.fixOffPathNodes&&!t.has(e)?(c[e].fx=c[e].x,c[e].fy=c[e].y):(c[e].fx=null,c[e].fy=null)}),u.force("charge").strength(r.chargeForce),u.force("straighten",d3v4.forceStraightenPaths().id(function(e){return e.dcg_nodeKey}).angleForce(r.angleForce).pathNodes(function(e){return e.nodes}).pathStrength(function(e){return e.strength}).paths(e))}else u.force("charge").strength(r.initialCharge)}(o),function(e){u.alpha(1);for(var t=0;te.abounds[1]&&(e.abounds[1]+=2*Math.PI),console.assert(e.orig||e.vec,"unplaced unspecified port")});var y=[],m=[],x=[];v.forEach(function(e){var t,n;e.vec?!e.vbounds||(t=e.vec,s((n=e.vbounds)[0],t)&&s(t,n[1]))?y.push(e):m.push(e):x.push(e)}),m.forEach(function(e){var t,n;e.vec=(t=e.vec,n=e.vbounds,s(t,n[0])?n[0]:s(n[1],t)?n[1]:t),y.push(e)});var _={},b={};for(var w in x.forEach(function(e){var t=e.abounds.map(function(e){return e.toFixed(3)}).join(",");_[t]=e.abounds,b[t]=b[t]||[],b[t].push(e)}),b){var k=_[w],E=b[w];if(1===E.length)E[0].vec=d((k[0]+k[1])/2);else{var S=(k[1]-k[0])/(b[w].length-1);b[w].forEach(function(e,t){e.vec=d(k[0]+t*S)})}}y=y.concat(x),x=[],y.forEach(function(e){Me(n,p,e)});for(var K=0;Kj.minDistance())){if(!A.edges.length){x.push(A);continue}x.push(T)}}}y=y.filter(function(e){return!x.includes(e)});for(var N,O=j.patience(),L=0;x.length;){var D=x[0];D.vec=d((u=D.abounds[0],c=D.abounds[1],u+Math.random()*(c-u))),Me(n,p,D);var M=de.min(y,function(e){return g(D,e)});Lj.minDistance())&&(O<0&&(console.warn("ran out of patience placing a port"),D.vec=N,Me(n,p,D)),y.push(D),x.shift(),O=j.patience(),L=0)}}}var j={parent:ye(null).react(function(e){e?e.on("receivedLayout.place-ports",t):j.parent()&&j.parent().on("receivedLayout.place-ports",null)}),minDistance:ye(20),patience:ye(20)};return j},he.troubleshoot=function(){var g=null;function h(e,t,n){return{left:e.x-t/2,top:e.y-n/2,right:e.x+t/2,bottom:e.y+n/2}}function t(e,t,n,r){return"M"+e+","+(t+r)+" v"+-r+" h"+n}function n(e){return[t(e.left,e.top,v.boundsWidth(),v.boundsHeight()),t(e.right,e.top,-v.boundsWidth(),v.boundsHeight()),t(e.right,e.bottom,-v.boundsWidth(),-v.boundsHeight()),t(e.left,e.bottom,v.boundsWidth(),-v.boundsHeight())].join(" ")}function p(e,t){e.exit().remove(),e.enter().append("path").attr("class",t),e.attr({d:n,opacity:null!==v.boundsOpacity()?v.boundsOpacity():v.opacity(),stroke:v.boundsColor(),fill:"none"})}var v=he.behavior("highlight-paths",{laterDraw:!0,add_behavior:function(e,t,n,r){g||(g=e.g().append("g").attr({class:"troubleshoot","pointer-events":"none"}));var o=t.data().map(function(e){return{x:e.cola.x,y:e.cola.y}}),a=g.selectAll("path.nodecenter").data(o);function i(e){return{x:e.cola.x,y:e.cola.y}}a.exit().remove(),a.enter().append("path").attr("class","nodecenter"),a.attr({d:function(e){return"M"+(e.x-v.xhairWidth()/2)+","+e.y+" h"+v.xhairWidth()+" M"+e.x+","+(e.y-v.xhairHeight()/2)+" v"+v.xhairHeight()},opacity:null!==v.xhairOpacity()?v.xhairOpacity():v.opacity(),stroke:v.xhairColor()});var u=t.data().map(function(e){return h(i(e),e.cola.width,e.cola.height)});p(g.selectAll("path.colaboundary").data(u),"colaboundary");var c=t.data().map(function(e){return e.bbox?h(i(e),e.bbox.width,e.bbox.height):null}).filter(function(e){return!!e});p(g.selectAll("path.textboundary").data(c),"textboundary");var l=t.data().map(function(e){return"number"===(e.dcg_rx,!1)?null:h(i(e),2*e.dcg_rx,2*e.dcg_ry)}).filter(function(e){return!!e});p(g.selectAll("path.radiiboundary").data(l),"radiiboundary");var s=g.selectAll("rect.domain").data([0]);s.enter().append("rect");var d=v.parent().x().domain(),f=v.parent().y().domain();s.attr({class:"domain",fill:"none",opacity:v.domainOpacity(),stroke:v.domainColor(),"stroke-width":v.domainStrokeWidth(),x:d[0],y:f[0],width:d[1]-d[0],height:f[1]-f[0]})},remove_behavior:function(e,t,n,r){g&&g.remove()}});return v.opacity=ye(.75),v.xhairOpacity=ye(null),v.xhairWidth=ye(10),v.xhairHeight=ye(10),v.xhairColor=ye("blue"),v.boundsOpacity=ye(null),v.boundsWidth=ye(10),v.boundsHeight=ye(10),v.boundsColor=ye("green"),v.domainOpacity=ye(.6),v.domainColor=ye("darkorange"),v.domainStrokeWidth=ye(11),v},he.validate=function(p){function v(e,t,n,r){var o=e.filter(function(e){return!t(e)});return o.length?[n+" is empty for "+o.length+" of "+e.length+" "+r,o]:null}function y(e,n){return e.reduce(function(e,t){return e[n(t)]=t,e},{})}function m(t,e,n,r,o,a){var i=e.filter(function(e){return!t[n(e)]}).map(function(e){return{key:n(e),value:e}});return i.length?[r+" was not found in "+o,Object.keys(t),"for "+i.length+" of "+e.length+" "+a,i]:null}function t(){var t=x.parent(),e=t.nodeGroup().all(),n=t.edgeGroup().all(),r=t.portGroup()?t.portGroup().all():[],o=[];function a(e){e&&o.push(e)}a(v(e,t.nodeKey(),"nodeKey","nodes")),a(v(n,t.edgeSource(),"edgeSource","edges")),a(v(n,t.edgeTarget(),"edgeTarget","edges"));var i=de.set(t.content.enum()),u=he.functor_wrap(t.nodeContent()),c=e.filter(function(e){return!i.has(u(e))});c.length&&o.push(["there are "+c.length+" nodes with nodeContent not matching any content",c]);var l=y(e,t.nodeKey()),s=y(n,t.edgeKey());a(m(l,n,t.edgeSource(),"edgeSource","nodes","edges")),a(m(l,n,t.edgeTarget(),"edgeTarget","nodes","edges")),a(v(r,function(e){return t.portNodeKey()&&t.portNodeKey()(e)||t.portEdgeKey()&&t.portEdgeKey()(e)},"portNodeKey||portEdgeKey","ports"));var d=!t.portNodeKey()&&[]||r.filter(function(e){return t.portNodeKey()(e)}),f=!t.portEdgeKey()&&[]||r.filter(function(e){return t.portEdgeKey()(e)});if(a(m(l,d,t.portNodeKey(),"portNodeKey","nodes","ports")),a(m(s,f,t.portEdgeKey(),"portEdgeKey","edges","ports")),t.portName()){var g=y(d,function(e){return t.portNodeKey()(e)+" - "+t.portName()(e)});t.edgeSourcePortName()&&a(m(g,n,function(e){return t.edgeSource()(e)+" - "+de.functor(t.edgeSourcePortName())(e)},"edgeSourcePortName","ports","edges")),t.edgeTargetPortName()&&a(m(g,n,function(e){return t.edgeTarget()(e)+" - "+de.functor(t.edgeTargetPortName())(e)},"edgeTargetPortName","ports","edges"))}function h(){return e.length+" nodes, "+n.length+" edges, "+r.length+" ports"}o.length?(console.warn("validation of "+p+" failed with "+h()+":"),o.forEach(function(e){console.warn.apply(null,e)})):console.log("validation of "+p+" succeeded with "+h()+".")}var x={parent:ye(null).react(function(e){e?e.on("data.validate",t):x.parent().on("data.validate",null)})};return x},he.legend=function(o){o=o||"node-legend";var a,i,u,c=[],l=de.dispatch("filtered");function s(){d.dimension()&&(d.dimension().filterFunction(function(e){return!c.length||c.includes(e)}),d.parent().redraw())}var d=he.behavior(o,{add_behavior:n,remove_behavior:function(){},parent:function(e){e?e.on("render."+o,r).on("data."+o,t):d.parent().on("render."+o,null).on("data."+o,null)}});function t(e,t,n,r,o,a,i){d.counter()&&(u=d.counter()(n.map(pe),o.map(pe),i.map(pe)))}function n(){var e=d.parent().svg().selectAll("g.dc-graph-legend."+o).data([0]);e.enter().append("g").attr("class","dc-graph-legend "+o).attr("transform","translate("+d.x()+","+d.y()+")");var t=e.selectAll(d.type().itemSelector()).data(a,function(e){return e.name}),n=d.type().create(d.parent(),t.enter(),d.itemWidth(),d.itemHeight());if(n.append("text").attr("dy","0.3em").attr("class","legend-label"),t.attr("transform",function(e,t){return"translate("+d.itemWidth()/2+","+(d.itemHeight()+d.gap())*(t+.5)+")"}),t.select("text.legend-label").attr("transform","translate("+(d.itemWidth()/2+d.gap())+",0)").attr("pointer-events",d.dimension()?"auto":"none").text(function(e){return e.name+(d.counter()&&u?" ("+(u[e.orig.key]||0)+(u[e.orig.key]!==i[e.orig.key]?"/"+(i[e.orig.key]||0):"")+")":"")}),d.type().draw(d.parent(),n,t),d.noLabel()&&t.selectAll(d.type().labelSelector()).remove(),d.dropdown()){var r=t.selectAll("text.dropdown-caret").data(function(e){return[e]});r.enter().append("text").attr("dy","0.3em").attr("font-size","75%").attr("fill","blue").attr("class","dropdown-caret").style("visibility","hidden").html(" ▼"),r.attr("dx",function(e){return d.itemWidth()/2+d.gap()+_e(de.select(this.parentNode).select("text.legend-label").node()).width}).on("mouseenter",function(e){var t=this.getBoundingClientRect(),n=d.parent().nodeKey.eval(e);d.dropdown().show(n,t.x,t.y)}),t.on("mouseenter",function(e){u&&u[e.orig.key]&&de.select(this).selectAll(".dropdown-caret").style("visibility","visible")}).on("mouseleave",function(e){de.select(this).selectAll(".dropdown-caret").style("visibility","hidden")})}d.dimension()?t.attr("cursor","pointer").on("click.legend",function(e){var t=d.parent().nodeKey.eval(e);c.length||(c=a.map(d.parent().nodeKey.eval)),c.includes(t)?c=c.filter(function(e){return e!==t}):c.push(t),s(),l.filtered(d,t)}):t.attr("cursor","auto").on("click.legend",null),t.transition().duration(1e3).attr("opacity",function(e){return!c.length||c.includes(d.parent().nodeKey.eval(e))?1:.25})}function r(){var e=d.exemplars();if(d.countBaseline(),e instanceof Array)a=e.map(function(e){return{name:e.name,orig:{key:e.key,value:e.value},cola:{}}});else for(var t in a=[],e)a.push({name:t,orig:{key:t,value:e[t]},cola:{}});n()}return d.type=ye(he.legend.node_legend()),d.x=ye(0),d.y=ye(0),d.gap=ye(5),d.itemWidth=d.nodeWidth=ye(40),d.itemHeight=d.nodeHeight=ye(40),d.noLabel=ye(!0),d.counter=ye(null),d.replaceFilter=function(e){return c=e&&1===e.length?e[0]:[],d},d.filters=function(){return c},d.on=function(e,t){return l.on(e,t),d},d.exemplars=ye({}),d.countBaseline=function(){d.counter&&(i=d.counter()(d.parent().nodeGroup().all(),d.parent().edgeGroup().all(),d.parent().portGroup()&&d.parent().portGroup().all()))},d.dropdown=ye(null).react(function(e){!!e!=!!d.dropdown()&&d.parent()&&d.parent().svg()&&window.setTimeout(d.redraw,0)}),d.dimension=ye(null).react(function(e){e||(c=[],s())}),d},he.legend.node_legend=function(){return{itemSelector:function(){return".node"},labelSelector:function(){return".node-label"},create:function(e,t){return t.append("g").attr("class","node")},draw:function(e,t,n){e._enterNode(t)._updateNode(n)}}},he.legend.edge_legend=function(){var i={itemSelector:function(){return".edge-container"},labelSelector:function(){return".edge-label"},create:function(e,t,n,r){var o=t.append("g").attr("class","edge-container").attr("opacity",0);o.append("rect").attr({x:-n/2,y:-r/2,width:n,height:r,fill:"green",opacity:0}),o.selectAll("circle").data([-1,1]).enter().append("circle").attr({r:i.fakeNodeRadius(),fill:"none",stroke:"black","stroke-dasharray":"4,4",opacity:.15,transform:function(e){return"translate("+[e*i.length()/2,0].join(",")+")"}});var a=i.length()/2-i.fakeNodeRadius();return o.append("svg:path").attr({class:"edge",id:function(e){return e.name},d:"M"+-a+",0 L"+a+",0",opacity:e.edgeOpacity.eval}),o},fakeNodeRadius:ye(10),length:ye(50),draw:function(e,t,n){e._updateEdge(t.select("path.edge"))}};return i},he.constraint_pattern=function(e){var l={},r=[];return e.nodes.forEach(function(t){var e=t.id,n=l[e]||(l[e]={});if(t.partition){var r=t.partition,o=t.value||t.id;t.all||t.typename?(n.match=t.extract?function(e){return t.extract(e.value[r])}:function(e){return e.value[r]},n.typename=t.typename||function(e){return r+"="+e.value[r]}):n.match=function(e){return e.value[r]===o}}else{if(!t.match)throw new Error("couldn't determine matcher for type "+JSON.stringify(t));n.match=t.match}}),e.edges.forEach(function(t){if(!t.disable){var n={source:t.source,target:t.target};n.produce="function"==typeof t.produce?t.produce:function(){return function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}(t.produce)},["listname","wrap","reverse"].forEach(function(e){void 0!==t[e]&&(n[e]=t[e])}),r.push(n)}}),function(i,o,a){var u=[],c={};o.forEach(function(e){var t=i.nodeKey.eval(e);for(var n in l){var r=l[n],o=r.match(e.orig);if(o){var a=r.typename?r.typename(n,o):n;c[a]||(c[a]={nodes:[],whether:{}}),c[a].nodes.push(t),c[a].whether[t]=!0}}});var t=r.filter(function(e){return e.source!==e.target}),e=r.filter(function(e){return e.source===e.target});return a.forEach(function(e){var n=i.edgeSource.eval(e),r=i.edgeTarget.eval(e);t.forEach(function(e){if(c[e.source]&&c[e.source].whether[n]&&c[e.target]&&c[e.target].whether[r]){var t=e.produce(c,o,a);e.reverse?(t.left=r,t.right=n):(t.left=n,t.right=r),u.push(t)}})}),e.forEach(function(e){if(c[e.source]){var t=e.produce(),n=e.listname||e.produce.listname||"nodes",r=e.wrap||e.produce.wrap||function(e){return e};t[n]=c[e.source].nodes.map(r),u.push(t)}}),u}},he.gap_y=function(e,t){return{axis:"y",gap:e,equality:!!t}},he.gap_x=function(e,t){return{axis:"x",gap:e,equality:!!t}},he.align_y=function(){return e("y")},he.align_x=function(){return e("x")},he.order_x=function(e,t){return{type:"ordering",axis:"x",gap:60,ordering:t}},he.order_y=function(e,t){return{type:"ordering",axis:"y",gap:60,ordering:t}},he.tree_positions=function(e,t,n,r,a,i,u){var c;function f(e,t){return(i(e)+i(t))/2}console.warn("dc_graph.tree_positions is deprecated; use the layout engine tree_layout instead"),(e||n)&&console.warn("dc_graph.tree_positions: rootf and treef are ignored"),i=de.functor(i);var o=he.depth_first_traversal({nodeid:function(e){return e.cola.dcg_nodeKey},sourceid:function(e){return e.cola.dcg_edgeSource},targetid:function(e){return e.cola.dcg_edgeTarget},init:function(){c=r},row:function(e){return t(e.orig)},place:function(e,t,n){if(n.length){var r=n[n.length-1],o=(i(r)+i(e))/2;c=Math.max(c,r.left_x+o)}e.left_x=c,e.hit_ins=1,e.cola.y=t*u+a},sib:function(e,t,n){var r=f(t,n);e&&(r*=1.5),c+=r},pop:function(e){e.cola.x=(e.left_x+c)/2},skip:function(e,t){e.cola.x=(e.hit_ins*e.cola.x+c)/++e.hit_ins,e.hit_ins===t&&delete e.hit_ins},finish:function(e){e.forEach(function(e){for(var t,n=e.sort(function(e,t){return e.cola.x-t.cola.x}),r=null,o=null,a=0;a"+e+""}).direction(f.direction()),f.offset()&&c.offset(f.offset()),o.svg().call(c)),f.programmatic()||f.selection().select(e,t,n,r).on("mouseover."+u,l).on("mouseout."+u,d),f.clickable()&&de.select("div.d3-tip").on("mouseover."+u,function(){i&&window.clearTimeout(i)}).on("mouseout."+u,d)},remove_behavior:function(e,t,n,r){f.programmatic()||f.selection().select(e,t,n,r).on("mouseover."+u,null).on("mouseout."+u,null)},laterDraw:!0});return f.direction=ye("n"),f.content=ye(function(e,t){t(f.parent()?f.parent().nodeTitle.eval(e):"")}),f.on=function(e,t){return o.on(e,t)},f.disabled=ye(!1),f.programmatic=ye(!1),f.displayTip=function(e,t,n){if("function"!=typeof e){var r=e;e=function(e){return e===r}}var o=f.selection().select(f.parent(),f.parent().selectAllNodes(),f.parent().selectAllEdges(),null).filter(e);if(0v.dragSize()&&(c=!0,u&&u.style("pointer-events","none")),c&&(p(function(e){e.cola.x=e.original_position[0]+t,e.cola.y=e.original_position[1]+n}),r.reposition(o,a))}}function i(){if(g){if(c){c=!1,u&&(u.style("pointer-events",null),u=null);var n=[];p(function(e,t){n.push({id:t,pos:{x:e.cola.x,y:e.cola.y}})}),t.request_fixes(n)}l&&l.activate(),g=null}}o.on("mousedown.move-nodes",function(e){if(!(s&&s.usePorts()&&s.usePorts().eventPort())){g=he.event_coords(r),u=de.select(this);var t=r.nodeKey.eval(e),n=f;f.indexOf(t)<0?(n=[t],h=t):h=null,p(function(e){e.original_position=[e.cola.x,e.cola.y]},n),l&&l.deactivate()}}),o.on("mousemove.move-nodes",e).on("mouseup.move-nodes",i),r.svg().on("mousemove.move-nodes",e).on("mouseup.move-nodes",i)},remove_behavior:function(e,t,n){t.on("mousedown.move-nodes",null),t.on("mousemove.move-nodes",null),t.on("mouseup.move-nodes",null)},parent:function(e){d.on("set_changed.move-nodes",e?function(e,t){void 0===t&&(t=!0),f=e}:null),l=e.child("brush"),s=e.child("draw-graphs"),e.child("select-nodes")}});return v.dragSize=ye(5),v},he.fix_nodes=function(e){e=e||{};var d,f,t=he.fix_nodes_group("fix-nodes-group"),i=e.fixedPosTag||"fixedPos",u=[],g={nodeid:function(e){return v.parent().nodeKey.eval(e)},sourceid:function(e){return v.parent().edgeSource.eval(e)},targetid:function(e){return v.parent().edgeTarget.eval(e)},get_fix:function(e){return v.parent().nodeFixed.eval(e)},fix_node:function(e,t){e[i]=t},unfix_node:function(e){e[i]=null},clear_fixes:function(){u={}},register_fix:function(e,t){u[e]=t}};function n(e){v.strategy().request_fixes(g,e),c(h()).then(function(){v.parent().redraw()})}function r(e,t,n){v.strategy().new_node(g,e,t,n)}function o(e,t,n){var r=d[t],o=d[n];v.strategy().new_edge(g,e,r,o)}function h(){var a=[];return f.forEach(function(e){var t=v.parent().nodeKey.eval(e),n=u[t],r=e.orig.value[i],o=!1;r?n&&n.x===r.x&&n.y===r.y||(o=!0):o=n,o&&a.push({n:e,fixed:n?{x:n.x,y:n.y}:null})}),a}function a(e,t){t?g.fix_node(e.orig.value,t):g.unfix_node(e.orig.value)}function c(e){var n=v.fixNode()||function(e,t){return Promise.resolve(t)},t=e.map(function(t){var e=v.parent().nodeKey.eval(t.n);return n(e,t.fixed).then(function(e){a(t.n,e)})});return Promise.all(t)}function p(e){e.forEach(function(e){a(e.n,e.fixed)})}function l(e,t,n,r,o,a,i){if(d=t,f=n,r,o,v.strategy().on_data){v.strategy().on_data(g,t,n,r,o,a,i);var u=h();p(u),v.reportOverridesAsynchronously()&&(c=u,l=v.fixNode()||function(e,t){return Promise.resolve(t)},s=c.map(function(e){var t=v.parent().nodeKey.eval(e.n);return l(t,e.fixed)}),Promise.all(s))}var c,l,s}var v={parent:ye(null).react(function(e){t.on("request_fixes.fix-nodes",e?n:null).on("new_node.fix_nodes",e?r:null).on("new_edge.fix_nodes",e?o:null),e?e.on("data.fix-nodes",l):v.parent()&&v.parent().on("data.fix-nodes",null)}),fixNode:ye(null),fixAllNodes:function(e){void 0===e&&(e=!0);var t=f.map(function(e){return{n:e,fixed:{x:e.cola.x,y:e.cola.y}}});return e?c(t):(p(t),Promise.resolve(void 0))},clearFixes:function(){v.strategy().clear_all_fixes&&v.strategy().clear_all_fixes(),g.clear_fixes()},strategy:ye(he.fix_nodes.strategy.fix_last()),reportOverridesAsynchronously:ye(!0)};return v},he.fix_nodes.strategy={},he.fix_nodes.strategy.fix_last=function(){return{request_fixes:function(t,e){t.clear_fixes(),e.forEach(function(e){t.register_fix(e.id,e.pos)})},new_node:function(e,t,n,r){e.fix_node(n,r)},new_edge:function(e,t,n,r){e.unfix_node(n.orig.value),e.unfix_node(r.orig.value)}}},he.fix_nodes.strategy.last_N_per_component=function(c){c=c||1;var l=0,s={};return{clear_all_fixes:function(){s={}},request_fixes:function(e,t){++l,t.forEach(function(e){s[e.id]={id:e.id,age:l,pos:e.pos}})},new_node:function(e,t,n,r){++l,s[t]={id:t,age:l,pos:r},e.fix_node(n,r)},new_edge:function(){},on_data:function(u,e,t,n,r,o,a){++l,t.forEach(function(e){var t=u.nodeid(e),n=u.get_fix(e);n&&!s[t]&&(s[t]={id:t,age:l,pos:n})});var i=[];he.undirected_dfs({nodeid:u.nodeid,sourceid:u.sourceid,targetid:u.targetid,comp:function(){i.push([])},node:function(e,t){i[e].push(t)}})(t,r),u.clear_fixes(),i.forEach(function(e,n){var r=e.reduce(function(e,t){if(t.last_component){var n=e[t.last_component]=e[t.last_component]||{total:0,fixed:0};n.total++,s[u.nodeid(t)]&&n.fixed++}return e},{}),t=Object.keys(r).reduce(function(e,t){return r[t].fixed&&e.push({compid:+t,total:r[t].total,fixed:r[t].fixed}),e},[]).sort(function(e,t){return t.total-e.total}),o=t.length&&t[0].compid,a=e.filter(function(e){return!e.last_component||e.last_component===o}).map(function(e){return s[u.nodeid(e)]}).filter(function(e){return e});a.length>c&&(a.sort(function(e,t){return t.age-e.age}),a=a.slice(0,c)),a.forEach(function(e){u.register_fix(e.id,e.pos)});var i=a.reduce(function(e,t){return e[t.id]=!0,e},{});e.forEach(function(e){var t=u.nodeid(e);i[t]||(s[t]=null),e.last_component=n+1})})}}},he.fix_nodes_group=function(e){return window.chart_registry.create_type("fix-nodes",function(){return de.dispatch("request_fixes","new_node","new_edge")}),window.chart_registry.create_group("fix-nodes",e)},he.filter_selection=function(e,t){t=t||"select-nodes";var r=he.select_things_group(e||"select-nodes-group",t);var o={parent:ye(null).react(function(e){var n;r.on("set_changed.filter-selection-"+t,e?(n=e,function(e){if(e.length){var t=de.set(e);o.dimensionAccessor()(n).filterFunction(function(e){return t.has(e)})}else o.dimensionAccessor()(n).filter(null);n.redrawGroup()}):null)})};return o.dimensionAccessor=ye(function(e){return e.nodeDimension()}),o},he.delete_things=function(t,n,r){r=r||"id";var o,a=x?"Backspace":"Delete",i=[];function u(e){i=e}function c(e){return e[r]}function l(e){if(!s.crossfilterAccessor())throw new Error("need crossfilterAccessor");if(!s.dimensionAccessor())throw new Error("need dimensionAccessor");if(0===(e=e||i).length)return Promise.resolve([]);var t=s.preDelete()?s.preDelete()(e):Promise.resolve(e);return s.onDelete()&&(t=t.then(s.onDelete())),t.then(function(t){if(t&&t.length){var e=s.crossfilterAccessor()(s.parent()),n=s.dimensionAccessor()(s.parent()),r=e.all().slice();r.length;n.filter(null),e.remove();var o=r.filter(function(e){return-1===t.indexOf(c(e))});r.length!==o.length+t.length&&console.warn("size after deletion is not previous size minus selection size",o.map(c),r.map(c),t),e.add(o),s.parent().redrawGroup()}return!0})}var s=he.behavior(n,{add_behavior:function(e){o.on("keyup."+n,function(){de.event.code===a&&l()})},remove_behavior:function(e){},parent:function(e){t.on("set_changed."+n,u),e&&((o=e.child("keyboard"))||e.child("keyboard",o=he.keyboard()))}});return s.preDelete=ye(null),s.onDelete=ye(null),s.crossfilterAccessor=ye(null),s.dimensionAccessor=ye(null),s.deleteSelection=l,s},he.delete_nodes=function(e,t){t=t||{};var n=he.select_things_group(t.select_nodes_group||"select-nodes-group","select-nodes"),o=he.select_things_group(t.select_edges_group||"select-edges-group","select-edges"),a=he.delete_things(n,"delete-nodes",e);return a.preDelete(function(t){var n=a.parent(),r=n.child("delete-edges");return r?Promise.resolve(void 0).then(function(){var e=n.edgeGroup().all().filter(function(e){return-1!==t.indexOf(n.edgeSource()(e))||-1!==t.indexOf(n.edgeTarget()(e))}).map(n.edgeKey());return o.set_changed(e),r.deleteSelection().then(function(){return t})}):null}),a},he.label_things=function(o){o=o||{};var a,r,t=he.select_things_group(o.select_group,o.select_type),i=he.label_things_group(o.label_group,o.label_type),u=[];function n(r){return function(t,e){var n=o.thing_box(t);o.hide_thing_label(t,!0),he.edit_text(r.g(),{text:e.text||o.thing_label(t)||o.default_label,align:o.align,box:n,selectText:e.selectText,accept:function(e){return o.accept(t,e)},finally:function(){o.hide_thing_label(t,!1),a.focus()}})}}function c(e,t,n){var r=o.find_thing(u[0],e,t);r.empty()?console.error("couldn't find thing '"+u[0]+"'!"):1r.cola.y?"out":"in";case"BT":return ur.cola.x?"out":"in";case"RL":return iK.dragSize()&&K.conduct().startDragEdge){if(!K.conduct().startDragEdge(v))return K.conduct().invalidSourceMessage&&(n=K.conduct().invalidSourceMessage(v),console.log(n),i.negativeTip&&i.negativeTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?v.port:v.node)),o(),!0;v.started=!0}return!1}var K=he.behavior("highlight-paths",{add_behavior:function(a,e,t,n){var r=a.child("select-nodes");r&&K.clickCreatesNodes()&&r.clickBackgroundClears(!1),e.on("mousedown.draw-graphs",function(e){if(de.event.stopPropagation(),K.dragCreatesEdges())if(i.tipsDisable&&i.tipsDisable.forEach(function(e){e.hideTip().disabled(!0)}),K.usePorts()){var t;if(!(t="object"==typeof K.usePorts()&&K.usePorts().eventPort?K.usePorts().eventPort():a.getPort(a.nodeKey.eval(e),null,"out")||a.getPort(a.nodeKey.eval(e),null,"in")))return;v={node:e,port:t},_=[{source:w(t)}]}else _=[{source:{x:(v={node:e}).node.cola.x,y:v.node.cola.y}}]}).on("mousemove.draw-graphs",function(e){var n;if(de.event.stopPropagation(),v){var t=he.event_coords(a);if(S(t))return;var r=y;if(e===v.node)K.conduct().invalidTargetMessage&&console.log(K.conduct().invalidTargetMessage(v,v)),y=null,_[0].target=null;else if(K.usePorts()){var o;o="object"==typeof K.usePorts()&&K.usePorts().eventPort?K.usePorts().eventPort():a.getPort(a.nodeKey.eval(e),null,"in")||a.getPort(a.nodeKey.eval(e),null,"out"),y=o?{node:e,port:o}:null}else y&&e===y.node||(y={node:e});if(K.conduct().changeDragTarget)(K.usePorts()?(r&&r.port)!==(y&&y.port):(r&&r.node)!==(y&&y.node))&&(K.conduct().changeDragTarget(v,y)?(u=null,i.negativeTip&&i.negativeTip.hideTip(),n=K.conduct().validTargetMessage&&K.conduct().validTargetMessage()||"matches",i.positiveTip&&i.positiveTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?y.port:y.node),m=!0):(u=K.usePorts()?y&&y.port:y&&y.node,y&&K.conduct().invalidTargetMessage&&(i.positiveTip&&i.positiveTip.hideTip(),n=K.conduct().invalidTargetMessage(v,y),console.log(n),i.negativeTip&&i.negativeTip.content(function(e,t){t(n)}).displayTip(K.usePorts()?y.port:y.node)),m=!1));y?y.port?_[0].target=w(o):_[0].target={x:e.cola.x,y:e.cola.y}:_[0].target={x:t[0],y:t[1]},b(),k()}}).on("mouseup.draw-graphs",function(e){if(u=null,i.negativeTip&&i.negativeTip.hideTip(!0),i.positiveTip&&i.positiveTip.hideTip(!0),i.tipsDisable&&i.tipsDisable.forEach(function(e){e.disabled(!1)}),v&&m){var t;t=K.conduct().finishDragEdge?K.conduct().finishDragEdge(v,y):Promise.resolve(!0);var n=v,r=y;t.then(function(e){e&&function(t,e,n){if(!K.edgeCrossfilter())throw new Error("need edgeCrossfilter");var r,o={},a=K.addEdge()||P;o[d]=A(),o[p]="",K.conduct().detectReversedEdge&&K.conduct().detectReversedEdge(o,e.port,n.port)?(o[f]=n.node.orig.key,o[g]=e.node.orig.key,r=e,e=n,n=r):(o[f]=e.node.orig.key,o[g]=n.node.orig.key),a(o,e.port,n.port).then(function(e){e&&(s.new_edge(o[d],e[f],e[g]),K.edgeCrossfilter().add([e]),c.set_changed([],!1),l.set_changed([e[d]],!1),t.redrawGroup())})}(a,n,r)})}else v&&K.conduct().cancelDragEdge&&K.conduct().cancelDragEdge(v);o(),k()}),a.svg().on("mousedown.draw-graphs",function(){v=null}).on("mousemove.draw-graphs",function(){if(v){var e=he.event_coords(a);if(u=null,S(e))return;K.conduct().dragCanvas&&K.conduct().dragCanvas(v,e),K.conduct().changeDragTarget&&y&&K.conduct().changeDragTarget(v,null),y=null,_[0].target={x:e[0],y:e[1]},b(),k()}}).on("mouseup.draw-graphs",function(){u=null,i.negativeTip&&i.negativeTip.hideTip(!0),i.positiveTip&&i.positiveTip.hideTip(!0),i.tipsDisable&&i.tipsDisable.forEach(function(e){e.disabled(!1)}),v?(K.conduct().cancelDragEdge&&K.conduct().cancelDragEdge(v),o()):de.event.target===this&&K.clickCreatesNodes()&&E(a,he.event_coords(a)),k()}),x||(x=a.g().append("g").attr("class","draw-graphs"))},remove_behavior:function(e,t,n,r){t.on("mousedown.draw-graphs",null).on("mousemove.draw-graphs",null).on("mouseup.draw-graphs",null),e.svg().on("mousedown.draw-graphs",null).on("mousemove.draw-graphs",null).on("mouseup.draw-graphs",null)}});return K.nodeCrossfilter=ye(i.nodeCrossfilter),K.edgeCrossfilter=ye(i.edgeCrossfilter),K.usePorts=ye(null),K.clickCreatesNodes=ye(!0),K.dragCreatesEdges=ye(!0),K.dragSize=ye(5),K.crossSize=ye(15),K.crossWidth=ye(5),K.conduct=ye({}),K.addNode=ye(null),K.addEdge=ye(null),K.createNode=function(e,t){E(K.parent(),e,t)},K},he.match_ports=function(n,a){var u,c,i;function l(e,t){return e.map(function(e){return e.state=t,n.portNodeKey.eval(e)})}function r(e){var t=l(i,"small");e.port.state="small",t.push(n.portNodeKey.eval(e.port)),a.animateNodes(t)}function o(t,n){return c.some(function(e){return 0<=t.edges.indexOf(e)&&0<=n.edges.indexOf(e)})}function s(e,t){return(d.allowParallel()||!o(e,t))&&d.isValid()(e,t)}n.on("data.match-ports",function(e,t,n,r,o,a,i){a,u=i,c=o}),n.on("transitionsStarted",function(){a.enableHover(!0)});var d={isValid:ye(function(e,t){return t!==e&&t.name===e.name}),whyInvalid:ye(function(e,t){return t===e?"can't connect port to itself":t.name!==e.name&&"must connect ports of the same type"}),allowParallel:ye(!1),hoverPort:function(e){if(e){if((i=u.filter(s.bind(null,e))).length)return l(i,"shimmer-medium")}else if(i)return l(i,"small");return null},startDragEdge:function(e){var t=l(i=u.filter(s.bind(null,e.port)),"shimmer");return i.length&&(a.enableHover(!1),e.port.state="large",t.push(n.portNodeKey.eval(e.port)),a.animateNodes(t)),console.log("valid targets",t),0!==i.length},invalidSourceMessage:function(e){return"no valid matches for this port"},changeDragTarget:function(e,t){var n,r,o=t&&s(e.port,t.port);return o?(n=l(i,"small"),t.port.state="large"):(n=l(i,"small"),r=a.animateNodes(n),n=l(i,"shimmer")),a.animateNodes(n,r),o},validTargetMessage:function(e,t){return"it's a match!"},invalidTargetMessage:function(e,t){return n=e.port,r=t.port,!d.allowParallel()&&o(n,r)?"can't connect two edges between the same two ports":d.whyInvalid()(n,r);var n,r},finishDragEdge:function(e,t){return a.enableHover(!0),r(e),Promise.resolve(s(e.port,t.port))},cancelDragEdge:function(e){return a.enableHover(!0),r(e),!0}};return d},he.match_opposites=function(a,e,i){var u,c,l;function s(e){return{x:e.node.cola.x+e.pos.x,y:e.node.cola.y+e.pos.y}}function r(t,n){return(d.allowParallel()||!c.some(function(e){return 0<=t.edges.indexOf(e)&&0<=n.edges.indexOf(e)}))&&d.isValid()(t,n)}function o(e,t){t.forEach(function(e){e.edges.forEach(function(e){e.deleting=0})}),e&&e.port.edges.forEach(function(e){e.deleting=0})}i=Object.assign({multiplier:2,ease:de.ease("cubic")},i),a.cascade(100,!0,f(function(e){return i.ease(e.deleting||0)},e,t)),a.on("data.match-opposites",function(e,t,n,r,o,a,i){a,u=i,c=o});var d={isValid:ye(function(e,t){return"in"===a.portName.eval(e)^"in"===a.portName.eval(t)}),allowParallel:ye(!1),hoverPort:function(e){},startDragEdge:function(e){return l=u.filter(r.bind(null,e.port)),console.log("valid targets",l.map(a.portNodeKey.eval)),0!==l.length},dragCanvas:function(e,n){var t=l.map(function(e){var t=s(e);return{distance:Math.hypot(n[0]-t.x,n[1]-t.y),port:e}}).sort(function(e,t){return e.distance-t.distance}),r=s(t[0].port),o=s(e.port);t.forEach(function(t){t.port.edges.forEach(function(e){e.deleting=1-i.multiplier*t.distance/Math.hypot(r.x-o.x,r.y-o.y)})}),e.port.edges.forEach(function(e){e.deleting=1-i.multiplier*t[0].distance/Math.hypot(r.x-o.x,r.y-o.y)}),a.refresh()},changeDragTarget:function(e,t){var n=t&&r(e.port,t.port);return n&&(t.port.edges.forEach(function(e){e.deleting=1}),e.port.edges.forEach(function(e){e.deleting=1}),o(null,l.filter(function(e){return e!==t.port})),a.refresh()),n},finishDragEdge:function(e,t){if(r(e.port,t.port)){if(o(null,l.filter(function(e){return e!==t.port})),i.delete_edges){var n=e.port.edges.map(a.edgeKey.eval).concat(t.port.edges.map(a.edgeKey.eval));return i.delete_edges.deleteSelection(n)}return Promise.resolve(!0)}return o(e,l),Promise.resolve(!1)},cancelDragEdge:function(e){return o(e,l),!0},detectReversedEdge:function(e,t,n){return"in"===a.portName.eval(t)}};return d},he.wildcard_ports=function(e){var a=e.diagram,r=e.get_type||function(e){return e.orig.value.type},c=e.set_type||function(e,t){e.orig.value.type=t.orig.value.type},i=e.get_name||function(e){return e.orig.value.name},l=e.is_wild||function(e){return e.orig.value.wild},s=e.update_ports||function(){},u=e.get_linked||function(){return[]};function d(e,t){if(!a)return[];var n=a.nodeKey.eval(e),r=i(t),o=(u(e)||[]).find(function(e){return e.includes(r)});return o?o.filter(function(e){return e!==r}).map(function(e){return a.getPort(n,null,e)}):[]}function f(e){return e.every(function(e){return 0===e.edges.length})}return{isValid:function(e,t){return null===r(e)^null===r(t)||null!==r(e)&&r(e)===r(t)},whyInvalid:function(e,t){return null===r(e)&&null===r(t)?"can't connect wildcard to wildcard":r(e)!==r(t)&&"the types of ports must match"},copyLinked:function(e,t){d(e,t).forEach(function(e){c(e,t)})},copyType:function(e,t,n){return null===r(t)?(c(t,n),this.copyLinked(t.node,t),s()):null===r(n)&&(c(n,t),this.copyLinked(n.node,n),s()),Promise.resolve(e)},resetTypes:function(e){var u=a;return 2===arguments.length&&(u=e,e=arguments[1]),e.forEach(function(e){var t=u.getWholeEdge(e),n=u.edgeSourcePortName.eval(t),r=u.edgeTargetPortName.eval(t),o=!1,a=u.getPort(u.nodeKey.eval(t.source),null,n),i=d(t.source,a);l(a)&&1===a.edges.length&&f(i)&&(c(a,null),i.forEach(function(e){c(e,null),o=!0})),a=u.getPort(u.nodeKey.eval(t.target),null,r),i=d(t.target,a),l(a)&&1===a.edges.length&&f(i)&&(c(a,null),i.forEach(function(e){c(e,null),o=!0})),o&&s()}),Promise.resolve(e)}}},he.symbol_port_style=function(){var s,d,o,f={};function g(e){return e.named?e.name:f.parent().edgeKey.eval(e.edges[0])}function h(e){var t=f.color.eval(e);return t?f.colorScale()?f.colorScale()(t):t:"none"}function p(e){var t=f.portPosition(e);return"translate("+t.x+","+t.y+")"}function v(e){f.symbolScale()||f.symbolScale(de.scale.ordinal().range(de.shuffle(f.content().enum())));var t=f.symbol.eval(e);return t&&(f.symbolScale()?f.symbolScale()(t):t)}function y(e){return e.vec[0]<0}function m(e){switch(e.state){case"large":return f.largeRadius.eval(e);case"medium":return f.mediumRadius.eval(e);case"small":default:return f.smallRadius.eval(e)}}function x(e){return/-medium$/.test(e.state)?f.mediumRadius.eval(e):f.largeRadius.eval(e)}function _(e){var t,n;return f.outlineFill.eval(e)?(t=f.outlineFillScale()||ve,n=f.outlineFill.eval(e)):(t=f.parent().nodeFillScale()||ve,n=f.parent().nodeFill.eval(e.node)),"none"===n?"none":t(n)}function b(e){return f.outlineStroke.eval(e)||f.parent().nodeStroke.eval(e.node)}function w(e){var t=f.outlineStrokeWidth.eval(e);return"number"==typeof t?t:f.parent().nodeStrokeWidth.eval(e.node)}return f.symbolScale=ye(null),f.colorScale=ye(de.scale.ordinal().range(de.shuffle(["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"]))),f.symbol=f.portSymbol=ye(g,!1),f.color=f.portColor=ye(g,!1),f.outline=ye(he.symbol_port_style.outline.circle()),f.content=ye(he.symbol_port_style.content.d3symbol()),f.smallRadius=f.portRadius=ye(7),f.mediumRadius=f.portHoverNodeRadius=ye(10),f.largeRadius=f.portHoverPortRadius=ye(14),f.displacement=f.portDisplacement=ye(2),f.outlineFillScale=f.portBackgroundScale=ye(null),f.outlineFill=f.portBackgroundFill=ye(null),f.outlineStroke=f.portBackgroundStroke=ye(null),f.outlineStrokeWidth=f.portBackgroundStrokeWidth=ye(null),f.padding=f.portPadding=ye(2),f.label=f.portLabel=f.portText=ye(function(e){return e.name}),f.portLabelPadding=ye({x:5,y:5}),f.cascade=be(f),f.portPosition=function(e){var t=Math.hypot(e.pos.x,e.pos.y),n=e.pos.x/t,r=e.pos.y/t,o=f.displacement.eval(e);return{x:e.pos.x+o*n,y:e.pos.y+o*r}},f.animateNodes=function(e,t){var n=de.set(e),r=d.filter(function(e){return n.has(f.parent().nodeKey.eval(e))}),o=f.parent().selectNodePortsOfStyle(r,f.parent().portStyle.nameOf(this)),a=o.filter(function(e){return/^shimmer/.test(e.state)}),i=o.filter(function(e){return!/^shimmer/.test(e.state)});function u(){var e=a.transition().duration(1e3).ease("bounce");e.selectAll(".port-outline").call(f.outline().draw(function(e){return x(e)+f.portPadding.eval(e)})),e.selectAll(".port-symbol").call(f.content().draw(v,x));var t=e.transition().duration(1e3).ease("sin");t.selectAll(".port-outline").call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)})),t.selectAll(".port-symbol").call(f.content().draw(v,f.smallRadius.eval)),t.each("end",u)}a.size()&&(t?t.each("end",u):u());var c=i.transition().duration(250);function l(e){return"large"===e.state||"medium"===e.state}return c.selectAll(".port-outline").call(f.outline().draw(function(e){return m(e)+f.portPadding.eval(e)})),c.selectAll(".port-symbol").call(f.content().draw(v,m)),c.selectAll("text.port-label").attr({opacity:function(e){return l(e)?1:0},"pointer-events":function(e){return l(e)?"auto":"none"}}),c.selectAll("rect.port-label-background").attr("opacity",function(e){return l(e)?1:0}),d.filter(function(e){var t=s[f.parent().nodeKey.eval(e)];return t&&t.some(l)}).each(function(){this.parentNode.appendChild(this)}),o.filter(function(e){return"small"!==e.state}).each(function(){this.parentNode.appendChild(this)}),c},f.eventPort=function(){var e=de.select(de.event.target.parentNode);return"g"===de.event.target.parentNode.tagName&&e.classed("port")?e.datum():null},f.drawPorts=function(e,t,n){s=t,d=n;var r=e.data(function(e){return t[f.parent().nodeKey.eval(e)]||[]},g);r.exit().remove();var o=r.enter().append("g").attr({class:"port",transform:p});r.transition("port-position").duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).attr({transform:p});var a=r.selectAll(".port-outline").data(function(e){return"none"!==_(e)?[e]:[]});a.exit().remove();var i=a.enter().append(f.outline().tag()).attr({class:"port-outline",fill:_,"stroke-width":w,stroke:b});f.outline().init&&i.call(f.outline().init),i.call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)})),a.attr({fill:_,"stroke-width":w,stroke:b}),a.transition().duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).call(f.outline().draw(function(e){return f.smallRadius.eval(e)+f.portPadding.eval(e)}));o.append(f.content().tag()).attr("class","port-symbol").call(f.content().draw(v,f.smallRadius.eval));var u=r.select(".port-symbol");u.attr("fill",h),u.transition().duration(f.parent().stagedDuration()).delay(f.parent().stagedDelay(!1)).call(f.content().draw(v,f.smallRadius.eval));var c=r.selectAll("text.port-label").data(function(e){return f.portLabel.eval(e)?[e]:[]});c.exit().remove();var l=c.enter();return l.append("rect").attr({class:"port-label-background","pointer-events":"none"}),l.append("text").attr({class:"port-label","dominant-baseline":"middle","pointer-events":"none",cursor:"default",opacity:0}),c.each(function(e){e.offset=(y(e)?-1:1)*(f.largeRadius.eval(e)+f.portPadding.eval(e))}).attr({"text-anchor":function(e){return y(e)?"end":"start"},transform:function(e){return"translate("+e.offset+",0)"}}).text(f.portLabel.eval).each(function(e){e.bbox=_e(this)}),r.selectAll("rect.port-label-background").attr({x:function(e){return(e.offset<0?e.offset-e.bbox.width:e.offset)-f.portLabelPadding.eval(e).x},y:function(e){return-e.bbox.height/2-f.portLabelPadding.eval(e).y},width:function(e){return e.bbox.width+2*f.portLabelPadding.eval(e).x},height:function(e){return e.bbox.height+2*f.portLabelPadding.eval(e).y},fill:"white",opacity:0}),f},f.enableHover=function(e){if(!o&&f.parent()){var t=f.parent().child("draw-graphs");t&&(o=t.conduct())}var n="grow-ports-"+f.parent().portStyle.nameOf(this);return e?(d.on("mouseover."+n,function(e){var t=f.parent().nodeKey.eval(e),n=f.eventPort();s[t]&&s[t].forEach(function(e){e.state=e===n?"large":n?"small":"medium"});var r=o&&o.hoverPort(n)||[];r.push(t),f.animateNodes(r)}),d.on("mouseout."+n,function(e){var t=f.parent().nodeKey.eval(e);s[t]&&s[t].forEach(function(e){e.state="small"});var n=o&&o.hoverPort(null)||[];n.push(t),f.animateNodes(n)})):(d.on("mouseover."+n,null),d.on("mouseout."+n,null)),f},f.parent=ye(null),f},he.symbol_port_style.outline={},he.symbol_port_style.outline.circle=function(){return{tag:function(){return"circle"},draw:function(t){return function(e){e.attr("r",function(e){return t(e)})}}}},he.symbol_port_style.outline.square=function(){return{tag:function(){return"rect"},init:function(e){},draw:function(t){return function(e){e.attr({x:function(e){return-t(e)},y:function(e){return-t(e)},width:function(e){return 2*t(e)},height:function(e){return 2*t(e)}})}}}},he.symbol_port_style.outline.arrow=function(){var r=.75-Math.PI/8,o={tag:function(){return"path"},init:function(e){},draw:function(n){return function(e){e.attr("d",function(e){var t=n(e);return!o.outie()||o.outie()(e.orig)?"M"+-r*t+","+-t+" h"+t+" l"+t+","+t+" l"+-t+","+t+" h"+-t+" a"+t+","+t+" 0 1,1 0,"+-2*t:"M"+-(2-r)*t+","+-t+" h"+2*t+" a"+t+","+t+" 0 1,1 0,"+2*t+" h"+-2*t+" l"+t+","+-t+" l"+-t+","+-t})}},outie:ye(null)};return o},he.symbol_port_style.content={},he.symbol_port_style.content.d3symbol=function(){return{tag:function(){return"path"},enum:function(){return de.svg.symbolTypes},draw:function(r,o){return function(e){e.attr("d",function(e){var t=r(e),n=o(e);return de.svg.symbol().type(t).size(n*n)()}),e.attr("transform",function(e){switch(r(e)){case"triangle-up":return"translate(0, -1)";case"triangle-down":return"translate(0, 1)";default:return null}})}}}},he.symbol_port_style.content.letter=function(){return{tag:function(){return"text"},enum:function(){return de.range(65,91).map(String.fromCharCode)},draw:function(t,n){return function(e){e.text(t).attr({"dominant-baseline":"middle","text-anchor":"middle"}),e.each(function(e){e.symbol_size||(e.symbol_size=_e(this))}),e.attr("transform",function(e){return"scale("+2*n(e)/e.symbol_size.height+") translate("+[0,2].join(",")+")"})}}}},he.load_graph=function(){function e(e){return e?e.replace(/\?.*/,""):null}var t,n,r;if(t=arguments[0],3===arguments.length)n=arguments[1],r=arguments[2];else{if(2!==arguments.length)throw new Error("need two or three arguments");r=arguments[1]}n?queue().defer(de.json,t).defer(de.json,n).await(function(e,t,n){e?r(e,null):r(null,{nodes:t.results,edges:n.results})}):/\.json$/.test(e(t))?de.json(t,r):/\.gv|\.dot$/.test(e(t))?de.text(t,function(e,t,n){if(t)e(t,null);else{var r,o;if(graphlibDot.parse){var a=graphlibDot.parse(n),i=a.nodes();r=new Array(i.length),i.forEach(function(e,t){var n=r[t]=a._nodes[i[t]];n.id=t,n.name=e});var u=a.edges();o=[],u.forEach(function(e){var t=a._edges[e];o.push(Object.assign({},t.value,{source:a._nodes[t.u].id,target:a._nodes[t.v].id,sourcename:t.u,targetname:t.v}))})}else a=graphlibDot.read(n),i=a.nodes(),r=new Array(i.length),i.forEach(function(e,t){var n=r[t]=a._nodes[i[t]];n.id=t,n.name=e}),o=[],a.edges().forEach(function(e){o.push(Object.assign({},e.value,{source:a._nodes[e.v].id,target:a._nodes[e.w].id,sourcename:e.v,targetname:e.w}))});e(null,{nodes:r,links:o})}}.bind(null,r)):/\.psv$/.test(e(t))?de.dsv("|","text/plain")(t,p.bind(null,r)):/\.csv$/.test(e(t))&&de.csv(t,p.bind(null,r))},he.munge_graph=function(t,e,n,r){var o,a,i=e||"name",u=n||"sourcename",c=r||"targetname";if(!w(t)){var l=["database","response"],s=l.findIndex(function(e){return t[e]&&w(t[e])});if(s<0)throw new Error("couldn't find the data!");t=t[l[s]]}function d(t,e){return e.filter(function(e){return!!t[e]})}a=t.edges||t.links,o=t.nodes||t.vertices;var f=a[0];if(void 0===f[u]){var g=n?[n]:["source_ecomp_uid","node1","source","tail"],h=r?[r]:["target_ecomp_uid","node2","target","head"],p=["edge"];if(f.node0&&f.node1)u="node0",c="node1";else{var v=d(f,g);if(!v.length){if((s=p.findIndex(function(e){return f[e]&&d(f[e],g).length}))<0)throw n?new Error("sourceattr "+u+" didn't work"):new Error("didn't find any source attr");a=a.map(function(e){return e[p[s]]}),v=d(f=a[0],g)}if(1(u.valuesByAttr?1:0)){var d=i.shift(),f=[],g=[],t=e.map(function(e){var t,n=e[u.nestKey],r=u.nestKeysUnique?n:A();if(r&&(u.ancestorKeys?(s=s||{},d&&(s[d]=n),t=Object.assign({},s)):t={},t[u.nodeKey]=r,u.label&&u.labelFun&&(t[u.label]=u.labelFun(n,d,e)),u.level&&(t[u.level]=l+1),f.push(t),c)){var o={};o[u.edgeSource]=c,o[u.edgeTarget]=r,g.push(o)}var a=u.valuesByAttr?e[i[0]]:e.values;return v(a,i.slice(0),u,r,l+1,Object.assign({},s))});return{nodes:Array.prototype.concat.apply(f,t.map(ge.pluck("nodes"))),edges:Array.prototype.concat.apply(g,t.map(ge.pluck("edges")))}}return{nodes:e.map(function(e){return e=Object.assign({},e),u.level&&(e[u.level]=l+1),e}),edges:e.map(function(e){var t={};return t[u.edgeSource]=c,t[u.edgeTarget]=e[u.nodeKey],t})}};he.convert_tree=function(e,t,n){return n=Object.assign({nodeKey:"key",edgeKey:"key",edgeSource:"sourcename",edgeTarget:"targetname",nestKey:"key"},n),Array.isArray(e)?v(e,t,n,n.root,0,n.inherit):(t=[""].concat(t),v([e],t,n,n.root,0,n.inherit))},he.convert_nest=function(e,t,n,r,o,a,i){return he.convert_tree(e,t,{nodeKey:n,edgeSource:r,edgeTarget:o,root:a,inherit:i,ancestorKeys:!0,label:"name",labelFun:function(e,t,n){return t+":"+e},level:"_level"})},he.convert_adjacency_list=function(e,r,o){var t=Array.prototype.concat.apply([],e.map(function(n){return n[r.adjacencies].map(function(e){var t={};return o.edgeKey&&(t[o.edgeKey]=A()),t[o.edgeSource]=n[r.nodeKey],t[o.edgeTarget]=r.targetKey?e[r.targetKey]:e,o.adjacency&&(t[o.adjacency]=e),t})}));return{nodes:e,edges:t}},he.deparallelize=function(e,c,l){return{all:function(){var u={};e.all().forEach(function(e){var t=e.value[c],n=e.value[l],r=t "+n[a.nodeKey]),u.push(o)}}},remove:function(e){for(;0i&&0