From e114753512d7ee1ba76f3ecbc14b9981c2f163dc Mon Sep 17 00:00:00 2001
From: kaw67872 <kawtar.laariche@iais.fraunhofer.de>
Date: Fri, 13 Sep 2024 11:12:29 +0200
Subject: [PATCH] #26: add remaining design studio js dependencies

---
 src/legacy/design-studio/js/bootstrap.js    | 3535 +++++++++++++++++++
 src/legacy/design-studio/js/dc.graph.js.map |    1 +
 2 files changed, 3536 insertions(+)
 create mode 100644 src/legacy/design-studio/js/bootstrap.js
 create mode 100644 src/legacy/design-studio/js/dc.graph.js.map

diff --git a/src/legacy/design-studio/js/bootstrap.js b/src/legacy/design-studio/js/bootstrap.js
new file mode 100644
index 0000000..2568773
--- /dev/null
+++ b/src/legacy/design-studio/js/bootstrap.js
@@ -0,0 +1,3535 @@
+/*!
+ * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com)
+ * Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+if (typeof jQuery === 'undefined') {
+  throw new Error('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.')
+}
+
++function ($) {
+  var version = $.fn.jquery.split(' ')[0].split('.')
+  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] >= 4)) {
+    throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')
+  }
+}(jQuery);
+
+
++function () {
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): util.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Util = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Private TransitionEnd Helpers
+   * ------------------------------------------------------------------------
+   */
+
+  var transition = false;
+
+  var MAX_UID = 1000000;
+
+  var TransitionEndEvent = {
+    WebkitTransition: 'webkitTransitionEnd',
+    MozTransition: 'transitionend',
+    OTransition: 'oTransitionEnd otransitionend',
+    transition: 'transitionend'
+  };
+
+  // shoutout AngusCroll (https://goo.gl/pxwQGp)
+  function toType(obj) {
+    return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
+  }
+
+  function isElement(obj) {
+    return (obj[0] || obj).nodeType;
+  }
+
+  function getSpecialTransitionEndEvent() {
+    return {
+      bindType: transition.end,
+      delegateType: transition.end,
+      handle: function handle(event) {
+        if ($(event.target).is(this)) {
+          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
+        }
+        return undefined;
+      }
+    };
+  }
+
+  function transitionEndTest() {
+    if (window.QUnit) {
+      return false;
+    }
+
+    var el = document.createElement('bootstrap');
+
+    for (var name in TransitionEndEvent) {
+      if (el.style[name] !== undefined) {
+        return {
+          end: TransitionEndEvent[name]
+        };
+      }
+    }
+
+    return false;
+  }
+
+  function transitionEndEmulator(duration) {
+    var _this = this;
+
+    var called = false;
+
+    $(this).one(Util.TRANSITION_END, function () {
+      called = true;
+    });
+
+    setTimeout(function () {
+      if (!called) {
+        Util.triggerTransitionEnd(_this);
+      }
+    }, duration);
+
+    return this;
+  }
+
+  function setTransitionEndSupport() {
+    transition = transitionEndTest();
+
+    $.fn.emulateTransitionEnd = transitionEndEmulator;
+
+    if (Util.supportsTransitionEnd()) {
+      $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Public Util Api
+   * --------------------------------------------------------------------------
+   */
+
+  var Util = {
+
+    TRANSITION_END: 'bsTransitionEnd',
+
+    getUID: function getUID(prefix) {
+      do {
+        // eslint-disable-next-line no-bitwise
+        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
+      } while (document.getElementById(prefix));
+      return prefix;
+    },
+    getSelectorFromElement: function getSelectorFromElement(element) {
+      var selector = element.getAttribute('data-target');
+
+      if (!selector) {
+        selector = element.getAttribute('href') || '';
+        selector = /^#[a-z]/i.test(selector) ? selector : null;
+      }
+
+      return selector;
+    },
+    reflow: function reflow(element) {
+      return element.offsetHeight;
+    },
+    triggerTransitionEnd: function triggerTransitionEnd(element) {
+      $(element).trigger(transition.end);
+    },
+    supportsTransitionEnd: function supportsTransitionEnd() {
+      return Boolean(transition);
+    },
+    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
+      for (var property in configTypes) {
+        if (configTypes.hasOwnProperty(property)) {
+          var expectedTypes = configTypes[property];
+          var value = config[property];
+          var valueType = value && isElement(value) ? 'element' : toType(value);
+
+          if (!new RegExp(expectedTypes).test(valueType)) {
+            throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".'));
+          }
+        }
+      }
+    }
+  };
+
+  setTransitionEndSupport();
+
+  return Util;
+}(jQuery);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): alert.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Alert = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'alert';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.alert';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var TRANSITION_DURATION = 150;
+
+  var Selector = {
+    DISMISS: '[data-dismiss="alert"]'
+  };
+
+  var Event = {
+    CLOSE: 'close' + EVENT_KEY,
+    CLOSED: 'closed' + EVENT_KEY,
+    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
+  };
+
+  var ClassName = {
+    ALERT: 'alert',
+    FADE: 'fade',
+    SHOW: 'show'
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var Alert = function () {
+    function Alert(element) {
+      _classCallCheck(this, Alert);
+
+      this._element = element;
+    }
+
+    // getters
+
+    // public
+
+    Alert.prototype.close = function close(element) {
+      element = element || this._element;
+
+      var rootElement = this._getRootElement(element);
+      var customEvent = this._triggerCloseEvent(rootElement);
+
+      if (customEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      this._removeElement(rootElement);
+    };
+
+    Alert.prototype.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      this._element = null;
+    };
+
+    // private
+
+    Alert.prototype._getRootElement = function _getRootElement(element) {
+      var selector = Util.getSelectorFromElement(element);
+      var parent = false;
+
+      if (selector) {
+        parent = $(selector)[0];
+      }
+
+      if (!parent) {
+        parent = $(element).closest('.' + ClassName.ALERT)[0];
+      }
+
+      return parent;
+    };
+
+    Alert.prototype._triggerCloseEvent = function _triggerCloseEvent(element) {
+      var closeEvent = $.Event(Event.CLOSE);
+
+      $(element).trigger(closeEvent);
+      return closeEvent;
+    };
+
+    Alert.prototype._removeElement = function _removeElement(element) {
+      var _this2 = this;
+
+      $(element).removeClass(ClassName.SHOW);
+
+      if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
+        this._destroyElement(element);
+        return;
+      }
+
+      $(element).one(Util.TRANSITION_END, function (event) {
+        return _this2._destroyElement(element, event);
+      }).emulateTransitionEnd(TRANSITION_DURATION);
+    };
+
+    Alert.prototype._destroyElement = function _destroyElement(element) {
+      $(element).detach().trigger(Event.CLOSED).remove();
+    };
+
+    // static
+
+    Alert._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var $element = $(this);
+        var data = $element.data(DATA_KEY);
+
+        if (!data) {
+          data = new Alert(this);
+          $element.data(DATA_KEY, data);
+        }
+
+        if (config === 'close') {
+          data[config](this);
+        }
+      });
+    };
+
+    Alert._handleDismiss = function _handleDismiss(alertInstance) {
+      return function (event) {
+        if (event) {
+          event.preventDefault();
+        }
+
+        alertInstance.close(this);
+      };
+    };
+
+    _createClass(Alert, null, [{
+      key: 'VERSION',
+      get: function get() {
+        return VERSION;
+      }
+    }]);
+
+    return Alert;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Alert._jQueryInterface;
+  $.fn[NAME].Constructor = Alert;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Alert._jQueryInterface;
+  };
+
+  return Alert;
+}(jQuery);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): button.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Button = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'button';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.button';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+
+  var ClassName = {
+    ACTIVE: 'active',
+    BUTTON: 'btn',
+    FOCUS: 'focus'
+  };
+
+  var Selector = {
+    DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
+    DATA_TOGGLE: '[data-toggle="buttons"]',
+    INPUT: 'input',
+    ACTIVE: '.active',
+    BUTTON: '.btn'
+  };
+
+  var Event = {
+    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
+    FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY)
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var Button = function () {
+    function Button(element) {
+      _classCallCheck(this, Button);
+
+      this._element = element;
+    }
+
+    // getters
+
+    // public
+
+    Button.prototype.toggle = function toggle() {
+      var triggerChangeEvent = true;
+      var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
+
+      if (rootElement) {
+        var input = $(this._element).find(Selector.INPUT)[0];
+
+        if (input) {
+          if (input.type === 'radio') {
+            if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {
+              triggerChangeEvent = false;
+            } else {
+              var activeElement = $(rootElement).find(Selector.ACTIVE)[0];
+
+              if (activeElement) {
+                $(activeElement).removeClass(ClassName.ACTIVE);
+              }
+            }
+          }
+
+          if (triggerChangeEvent) {
+            input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
+            $(input).trigger('change');
+          }
+
+          input.focus();
+        }
+      }
+
+      this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
+
+      if (triggerChangeEvent) {
+        $(this._element).toggleClass(ClassName.ACTIVE);
+      }
+    };
+
+    Button.prototype.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      this._element = null;
+    };
+
+    // static
+
+    Button._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+
+        if (!data) {
+          data = new Button(this);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (config === 'toggle') {
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Button, null, [{
+      key: 'VERSION',
+      get: function get() {
+        return VERSION;
+      }
+    }]);
+
+    return Button;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
+    event.preventDefault();
+
+    var button = event.target;
+
+    if (!$(button).hasClass(ClassName.BUTTON)) {
+      button = $(button).closest(Selector.BUTTON);
+    }
+
+    Button._jQueryInterface.call($(button), 'toggle');
+  }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
+    var button = $(event.target).closest(Selector.BUTTON)[0];
+    $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
+  });
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Button._jQueryInterface;
+  $.fn[NAME].Constructor = Button;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Button._jQueryInterface;
+  };
+
+  return Button;
+}(jQuery);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): carousel.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Carousel = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'carousel';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.carousel';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var TRANSITION_DURATION = 600;
+  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
+  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
+
+  var Default = {
+    interval: 5000,
+    keyboard: true,
+    slide: false,
+    pause: 'hover',
+    wrap: true
+  };
+
+  var DefaultType = {
+    interval: '(number|boolean)',
+    keyboard: 'boolean',
+    slide: '(boolean|string)',
+    pause: '(string|boolean)',
+    wrap: 'boolean'
+  };
+
+  var Direction = {
+    NEXT: 'next',
+    PREV: 'prev',
+    LEFT: 'left',
+    RIGHT: 'right'
+  };
+
+  var Event = {
+    SLIDE: 'slide' + EVENT_KEY,
+    SLID: 'slid' + EVENT_KEY,
+    KEYDOWN: 'keydown' + EVENT_KEY,
+    MOUSEENTER: 'mouseenter' + EVENT_KEY,
+    MOUSELEAVE: 'mouseleave' + EVENT_KEY,
+    LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY,
+    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
+  };
+
+  var ClassName = {
+    CAROUSEL: 'carousel',
+    ACTIVE: 'active',
+    SLIDE: 'slide',
+    RIGHT: 'carousel-item-right',
+    LEFT: 'carousel-item-left',
+    NEXT: 'carousel-item-next',
+    PREV: 'carousel-item-prev',
+    ITEM: 'carousel-item'
+  };
+
+  var Selector = {
+    ACTIVE: '.active',
+    ACTIVE_ITEM: '.active.carousel-item',
+    ITEM: '.carousel-item',
+    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
+    INDICATORS: '.carousel-indicators',
+    DATA_SLIDE: '[data-slide], [data-slide-to]',
+    DATA_RIDE: '[data-ride="carousel"]'
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var Carousel = function () {
+    function Carousel(element, config) {
+      _classCallCheck(this, Carousel);
+
+      this._items = null;
+      this._interval = null;
+      this._activeElement = null;
+
+      this._isPaused = false;
+      this._isSliding = false;
+
+      this._config = this._getConfig(config);
+      this._element = $(element)[0];
+      this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0];
+
+      this._addEventListeners();
+    }
+
+    // getters
+
+    // public
+
+    Carousel.prototype.next = function next() {
+      if (this._isSliding) {
+        throw new Error('Carousel is sliding');
+      }
+      this._slide(Direction.NEXT);
+    };
+
+    Carousel.prototype.nextWhenVisible = function nextWhenVisible() {
+      // Don't call next when the page isn't visible
+      if (!document.hidden) {
+        this.next();
+      }
+    };
+
+    Carousel.prototype.prev = function prev() {
+      if (this._isSliding) {
+        throw new Error('Carousel is sliding');
+      }
+      this._slide(Direction.PREVIOUS);
+    };
+
+    Carousel.prototype.pause = function pause(event) {
+      if (!event) {
+        this._isPaused = true;
+      }
+
+      if ($(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) {
+        Util.triggerTransitionEnd(this._element);
+        this.cycle(true);
+      }
+
+      clearInterval(this._interval);
+      this._interval = null;
+    };
+
+    Carousel.prototype.cycle = function cycle(event) {
+      if (!event) {
+        this._isPaused = false;
+      }
+
+      if (this._interval) {
+        clearInterval(this._interval);
+        this._interval = null;
+      }
+
+      if (this._config.interval && !this._isPaused) {
+        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
+      }
+    };
+
+    Carousel.prototype.to = function to(index) {
+      var _this3 = this;
+
+      this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
+
+      var activeIndex = this._getItemIndex(this._activeElement);
+
+      if (index > this._items.length - 1 || index < 0) {
+        return;
+      }
+
+      if (this._isSliding) {
+        $(this._element).one(Event.SLID, function () {
+          return _this3.to(index);
+        });
+        return;
+      }
+
+      if (activeIndex === index) {
+        this.pause();
+        this.cycle();
+        return;
+      }
+
+      var direction = index > activeIndex ? Direction.NEXT : Direction.PREVIOUS;
+
+      this._slide(direction, this._items[index]);
+    };
+
+    Carousel.prototype.dispose = function dispose() {
+      $(this._element).off(EVENT_KEY);
+      $.removeData(this._element, DATA_KEY);
+
+      this._items = null;
+      this._config = null;
+      this._element = null;
+      this._interval = null;
+      this._isPaused = null;
+      this._isSliding = null;
+      this._activeElement = null;
+      this._indicatorsElement = null;
+    };
+
+    // private
+
+    Carousel.prototype._getConfig = function _getConfig(config) {
+      config = $.extend({}, Default, config);
+      Util.typeCheckConfig(NAME, config, DefaultType);
+      return config;
+    };
+
+    Carousel.prototype._addEventListeners = function _addEventListeners() {
+      var _this4 = this;
+
+      if (this._config.keyboard) {
+        $(this._element).on(Event.KEYDOWN, function (event) {
+          return _this4._keydown(event);
+        });
+      }
+
+      if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) {
+        $(this._element).on(Event.MOUSEENTER, function (event) {
+          return _this4.pause(event);
+        }).on(Event.MOUSELEAVE, function (event) {
+          return _this4.cycle(event);
+        });
+      }
+    };
+
+    Carousel.prototype._keydown = function _keydown(event) {
+      if (/input|textarea/i.test(event.target.tagName)) {
+        return;
+      }
+
+      switch (event.which) {
+        case ARROW_LEFT_KEYCODE:
+          event.preventDefault();
+          this.prev();
+          break;
+        case ARROW_RIGHT_KEYCODE:
+          event.preventDefault();
+          this.next();
+          break;
+        default:
+          return;
+      }
+    };
+
+    Carousel.prototype._getItemIndex = function _getItemIndex(element) {
+      this._items = $.makeArray($(element).parent().find(Selector.ITEM));
+      return this._items.indexOf(element);
+    };
+
+    Carousel.prototype._getItemByDirection = function _getItemByDirection(direction, activeElement) {
+      var isNextDirection = direction === Direction.NEXT;
+      var isPrevDirection = direction === Direction.PREVIOUS;
+      var activeIndex = this._getItemIndex(activeElement);
+      var lastItemIndex = this._items.length - 1;
+      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
+
+      if (isGoingToWrap && !this._config.wrap) {
+        return activeElement;
+      }
+
+      var delta = direction === Direction.PREVIOUS ? -1 : 1;
+      var itemIndex = (activeIndex + delta) % this._items.length;
+
+      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
+    };
+
+    Carousel.prototype._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
+      var slideEvent = $.Event(Event.SLIDE, {
+        relatedTarget: relatedTarget,
+        direction: eventDirectionName
+      });
+
+      $(this._element).trigger(slideEvent);
+
+      return slideEvent;
+    };
+
+    Carousel.prototype._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
+      if (this._indicatorsElement) {
+        $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
+
+        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
+
+        if (nextIndicator) {
+          $(nextIndicator).addClass(ClassName.ACTIVE);
+        }
+      }
+    };
+
+    Carousel.prototype._slide = function _slide(direction, element) {
+      var _this5 = this;
+
+      var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
+      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
+
+      var isCycling = Boolean(this._interval);
+
+      var directionalClassName = void 0;
+      var orderClassName = void 0;
+      var eventDirectionName = void 0;
+
+      if (direction === Direction.NEXT) {
+        directionalClassName = ClassName.LEFT;
+        orderClassName = ClassName.NEXT;
+        eventDirectionName = Direction.LEFT;
+      } else {
+        directionalClassName = ClassName.RIGHT;
+        orderClassName = ClassName.PREV;
+        eventDirectionName = Direction.RIGHT;
+      }
+
+      if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {
+        this._isSliding = false;
+        return;
+      }
+
+      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
+      if (slideEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      if (!activeElement || !nextElement) {
+        // some weirdness is happening, so we bail
+        return;
+      }
+
+      this._isSliding = true;
+
+      if (isCycling) {
+        this.pause();
+      }
+
+      this._setActiveIndicatorElement(nextElement);
+
+      var slidEvent = $.Event(Event.SLID, {
+        relatedTarget: nextElement,
+        direction: eventDirectionName
+      });
+
+      if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) {
+
+        $(nextElement).addClass(orderClassName);
+
+        Util.reflow(nextElement);
+
+        $(activeElement).addClass(directionalClassName);
+        $(nextElement).addClass(directionalClassName);
+
+        $(activeElement).one(Util.TRANSITION_END, function () {
+          $(nextElement).removeClass(directionalClassName + ' ' + orderClassName).addClass(ClassName.ACTIVE);
+
+          $(activeElement).removeClass(ClassName.ACTIVE + ' ' + orderClassName + ' ' + directionalClassName);
+
+          _this5._isSliding = false;
+
+          setTimeout(function () {
+            return $(_this5._element).trigger(slidEvent);
+          }, 0);
+        }).emulateTransitionEnd(TRANSITION_DURATION);
+      } else {
+        $(activeElement).removeClass(ClassName.ACTIVE);
+        $(nextElement).addClass(ClassName.ACTIVE);
+
+        this._isSliding = false;
+        $(this._element).trigger(slidEvent);
+      }
+
+      if (isCycling) {
+        this.cycle();
+      }
+    };
+
+    // static
+
+    Carousel._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+        var _config = $.extend({}, Default, $(this).data());
+
+        if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object') {
+          $.extend(_config, config);
+        }
+
+        var action = typeof config === 'string' ? config : _config.slide;
+
+        if (!data) {
+          data = new Carousel(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'number') {
+          data.to(config);
+        } else if (typeof action === 'string') {
+          if (data[action] === undefined) {
+            throw new Error('No method named "' + action + '"');
+          }
+          data[action]();
+        } else if (_config.interval) {
+          data.pause();
+          data.cycle();
+        }
+      });
+    };
+
+    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
+      var selector = Util.getSelectorFromElement(this);
+
+      if (!selector) {
+        return;
+      }
+
+      var target = $(selector)[0];
+
+      if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {
+        return;
+      }
+
+      var config = $.extend({}, $(target).data(), $(this).data());
+      var slideIndex = this.getAttribute('data-slide-to');
+
+      if (slideIndex) {
+        config.interval = false;
+      }
+
+      Carousel._jQueryInterface.call($(target), config);
+
+      if (slideIndex) {
+        $(target).data(DATA_KEY).to(slideIndex);
+      }
+
+      event.preventDefault();
+    };
+
+    _createClass(Carousel, null, [{
+      key: 'VERSION',
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: 'Default',
+      get: function get() {
+        return Default;
+      }
+    }]);
+
+    return Carousel;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);
+
+  $(window).on(Event.LOAD_DATA_API, function () {
+    $(Selector.DATA_RIDE).each(function () {
+      var $carousel = $(this);
+      Carousel._jQueryInterface.call($carousel, $carousel.data());
+    });
+  });
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Carousel._jQueryInterface;
+  $.fn[NAME].Constructor = Carousel;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Carousel._jQueryInterface;
+  };
+
+  return Carousel;
+}(jQuery);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): collapse.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Collapse = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'collapse';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.collapse';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var TRANSITION_DURATION = 600;
+
+  var Default = {
+    toggle: true,
+    parent: ''
+  };
+
+  var DefaultType = {
+    toggle: 'boolean',
+    parent: 'string'
+  };
+
+  var Event = {
+    SHOW: 'show' + EVENT_KEY,
+    SHOWN: 'shown' + EVENT_KEY,
+    HIDE: 'hide' + EVENT_KEY,
+    HIDDEN: 'hidden' + EVENT_KEY,
+    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
+  };
+
+  var ClassName = {
+    SHOW: 'show',
+    COLLAPSE: 'collapse',
+    COLLAPSING: 'collapsing',
+    COLLAPSED: 'collapsed'
+  };
+
+  var Dimension = {
+    WIDTH: 'width',
+    HEIGHT: 'height'
+  };
+
+  var Selector = {
+    ACTIVES: '.card > .show, .card > .collapsing',
+    DATA_TOGGLE: '[data-toggle="collapse"]'
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var Collapse = function () {
+    function Collapse(element, config) {
+      _classCallCheck(this, Collapse);
+
+      this._isTransitioning = false;
+      this._element = element;
+      this._config = this._getConfig(config);
+      this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]')));
+
+      this._parent = this._config.parent ? this._getParent() : null;
+
+      if (!this._config.parent) {
+        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
+      }
+
+      if (this._config.toggle) {
+        this.toggle();
+      }
+    }
+
+    // getters
+
+    // public
+
+    Collapse.prototype.toggle = function toggle() {
+      if ($(this._element).hasClass(ClassName.SHOW)) {
+        this.hide();
+      } else {
+        this.show();
+      }
+    };
+
+    Collapse.prototype.show = function show() {
+      var _this6 = this;
+
+      if (this._isTransitioning) {
+        throw new Error('Collapse is transitioning');
+      }
+
+      if ($(this._element).hasClass(ClassName.SHOW)) {
+        return;
+      }
+
+      var actives = void 0;
+      var activesData = void 0;
+
+      if (this._parent) {
+        actives = $.makeArray($(this._parent).find(Selector.ACTIVES));
+        if (!actives.length) {
+          actives = null;
+        }
+      }
+
+      if (actives) {
+        activesData = $(actives).data(DATA_KEY);
+        if (activesData && activesData._isTransitioning) {
+          return;
+        }
+      }
+
+      var startEvent = $.Event(Event.SHOW);
+      $(this._element).trigger(startEvent);
+      if (startEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      if (actives) {
+        Collapse._jQueryInterface.call($(actives), 'hide');
+        if (!activesData) {
+          $(actives).data(DATA_KEY, null);
+        }
+      }
+
+      var dimension = this._getDimension();
+
+      $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
+
+      this._element.style[dimension] = 0;
+      this._element.setAttribute('aria-expanded', true);
+
+      if (this._triggerArray.length) {
+        $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
+      }
+
+      this.setTransitioning(true);
+
+      var complete = function complete() {
+        $(_this6._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
+
+        _this6._element.style[dimension] = '';
+
+        _this6.setTransitioning(false);
+
+        $(_this6._element).trigger(Event.SHOWN);
+      };
+
+      if (!Util.supportsTransitionEnd()) {
+        complete();
+        return;
+      }
+
+      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
+      var scrollSize = 'scroll' + capitalizedDimension;
+
+      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
+
+      this._element.style[dimension] = this._element[scrollSize] + 'px';
+    };
+
+    Collapse.prototype.hide = function hide() {
+      var _this7 = this;
+
+      if (this._isTransitioning) {
+        throw new Error('Collapse is transitioning');
+      }
+
+      if (!$(this._element).hasClass(ClassName.SHOW)) {
+        return;
+      }
+
+      var startEvent = $.Event(Event.HIDE);
+      $(this._element).trigger(startEvent);
+      if (startEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      var dimension = this._getDimension();
+      var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight';
+
+      this._element.style[dimension] = this._element[offsetDimension] + 'px';
+
+      Util.reflow(this._element);
+
+      $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
+
+      this._element.setAttribute('aria-expanded', false);
+
+      if (this._triggerArray.length) {
+        $(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
+      }
+
+      this.setTransitioning(true);
+
+      var complete = function complete() {
+        _this7.setTransitioning(false);
+        $(_this7._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
+      };
+
+      this._element.style[dimension] = '';
+
+      if (!Util.supportsTransitionEnd()) {
+        complete();
+        return;
+      }
+
+      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
+    };
+
+    Collapse.prototype.setTransitioning = function setTransitioning(isTransitioning) {
+      this._isTransitioning = isTransitioning;
+    };
+
+    Collapse.prototype.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+
+      this._config = null;
+      this._parent = null;
+      this._element = null;
+      this._triggerArray = null;
+      this._isTransitioning = null;
+    };
+
+    // private
+
+    Collapse.prototype._getConfig = function _getConfig(config) {
+      config = $.extend({}, Default, config);
+      config.toggle = Boolean(config.toggle); // coerce string values
+      Util.typeCheckConfig(NAME, config, DefaultType);
+      return config;
+    };
+
+    Collapse.prototype._getDimension = function _getDimension() {
+      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
+      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
+    };
+
+    Collapse.prototype._getParent = function _getParent() {
+      var _this8 = this;
+
+      var parent = $(this._config.parent)[0];
+      var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
+
+      $(parent).find(selector).each(function (i, element) {
+        _this8._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
+      });
+
+      return parent;
+    };
+
+    Collapse.prototype._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
+      if (element) {
+        var isOpen = $(element).hasClass(ClassName.SHOW);
+        element.setAttribute('aria-expanded', isOpen);
+
+        if (triggerArray.length) {
+          $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
+        }
+      }
+    };
+
+    // static
+
+    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
+      var selector = Util.getSelectorFromElement(element);
+      return selector ? $(selector)[0] : null;
+    };
+
+    Collapse._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var $this = $(this);
+        var data = $this.data(DATA_KEY);
+        var _config = $.extend({}, Default, $this.data(), (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config);
+
+        if (!data && _config.toggle && /show|hide/.test(config)) {
+          _config.toggle = false;
+        }
+
+        if (!data) {
+          data = new Collapse(this, _config);
+          $this.data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (data[config] === undefined) {
+            throw new Error('No method named "' + config + '"');
+          }
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Collapse, null, [{
+      key: 'VERSION',
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: 'Default',
+      get: function get() {
+        return Default;
+      }
+    }]);
+
+    return Collapse;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
+    event.preventDefault();
+
+    var target = Collapse._getTargetFromElement(this);
+    var data = $(target).data(DATA_KEY);
+    var config = data ? 'toggle' : $(this).data();
+
+    Collapse._jQueryInterface.call($(target), config);
+  });
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Collapse._jQueryInterface;
+  $.fn[NAME].Constructor = Collapse;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Collapse._jQueryInterface;
+  };
+
+  return Collapse;
+}(jQuery);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): dropdown.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Dropdown = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'dropdown';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.dropdown';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
+  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
+  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
+  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
+
+  var Event = {
+    HIDE: 'hide' + EVENT_KEY,
+    HIDDEN: 'hidden' + EVENT_KEY,
+    SHOW: 'show' + EVENT_KEY,
+    SHOWN: 'shown' + EVENT_KEY,
+    CLICK: 'click' + EVENT_KEY,
+    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
+    FOCUSIN_DATA_API: 'focusin' + EVENT_KEY + DATA_API_KEY,
+    KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY
+  };
+
+  var ClassName = {
+    BACKDROP: 'dropdown-backdrop',
+    DISABLED: 'disabled',
+    SHOW: 'show'
+  };
+
+  var Selector = {
+    BACKDROP: '.dropdown-backdrop',
+    DATA_TOGGLE: '[data-toggle="dropdown"]',
+    FORM_CHILD: '.dropdown form',
+    ROLE_MENU: '[role="menu"]',
+    ROLE_LISTBOX: '[role="listbox"]',
+    NAVBAR_NAV: '.navbar-nav',
+    VISIBLE_ITEMS: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a'
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var Dropdown = function () {
+    function Dropdown(element) {
+      _classCallCheck(this, Dropdown);
+
+      this._element = element;
+
+      this._addEventListeners();
+    }
+
+    // getters
+
+    // public
+
+    Dropdown.prototype.toggle = function toggle() {
+      if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
+        return false;
+      }
+
+      var parent = Dropdown._getParentFromElement(this);
+      var isActive = $(parent).hasClass(ClassName.SHOW);
+
+      Dropdown._clearMenus();
+
+      if (isActive) {
+        return false;
+      }
+
+      if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) {
+
+        // if mobile we use a backdrop because click events don't delegate
+        var dropdown = document.createElement('div');
+        dropdown.className = ClassName.BACKDROP;
+        $(dropdown).insertBefore(this);
+        $(dropdown).on('click', Dropdown._clearMenus);
+      }
+
+      var relatedTarget = {
+        relatedTarget: this
+      };
+      var showEvent = $.Event(Event.SHOW, relatedTarget);
+
+      $(parent).trigger(showEvent);
+
+      if (showEvent.isDefaultPrevented()) {
+        return false;
+      }
+
+      this.focus();
+      this.setAttribute('aria-expanded', true);
+
+      $(parent).toggleClass(ClassName.SHOW);
+      $(parent).trigger($.Event(Event.SHOWN, relatedTarget));
+
+      return false;
+    };
+
+    Dropdown.prototype.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      $(this._element).off(EVENT_KEY);
+      this._element = null;
+    };
+
+    // private
+
+    Dropdown.prototype._addEventListeners = function _addEventListeners() {
+      $(this._element).on(Event.CLICK, this.toggle);
+    };
+
+    // static
+
+    Dropdown._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+
+        if (!data) {
+          data = new Dropdown(this);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (data[config] === undefined) {
+            throw new Error('No method named "' + config + '"');
+          }
+          data[config].call(this);
+        }
+      });
+    };
+
+    Dropdown._clearMenus = function _clearMenus(event) {
+      if (event && event.which === RIGHT_MOUSE_BUTTON_WHICH) {
+        return;
+      }
+
+      var backdrop = $(Selector.BACKDROP)[0];
+      if (backdrop) {
+        backdrop.parentNode.removeChild(backdrop);
+      }
+
+      var toggles = $.makeArray($(Selector.DATA_TOGGLE));
+
+      for (var i = 0; i < toggles.length; i++) {
+        var parent = Dropdown._getParentFromElement(toggles[i]);
+        var relatedTarget = {
+          relatedTarget: toggles[i]
+        };
+
+        if (!$(parent).hasClass(ClassName.SHOW)) {
+          continue;
+        }
+
+        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'focusin') && $.contains(parent, event.target)) {
+          continue;
+        }
+
+        var hideEvent = $.Event(Event.HIDE, relatedTarget);
+        $(parent).trigger(hideEvent);
+        if (hideEvent.isDefaultPrevented()) {
+          continue;
+        }
+
+        toggles[i].setAttribute('aria-expanded', 'false');
+
+        $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
+      }
+    };
+
+    Dropdown._getParentFromElement = function _getParentFromElement(element) {
+      var parent = void 0;
+      var selector = Util.getSelectorFromElement(element);
+
+      if (selector) {
+        parent = $(selector)[0];
+      }
+
+      return parent || element.parentNode;
+    };
+
+    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
+      if (!/(38|40|27|32)/.test(event.which) || /input|textarea/i.test(event.target.tagName)) {
+        return;
+      }
+
+      event.preventDefault();
+      event.stopPropagation();
+
+      if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
+        return;
+      }
+
+      var parent = Dropdown._getParentFromElement(this);
+      var isActive = $(parent).hasClass(ClassName.SHOW);
+
+      if (!isActive && event.which !== ESCAPE_KEYCODE || isActive && event.which === ESCAPE_KEYCODE) {
+
+        if (event.which === ESCAPE_KEYCODE) {
+          var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];
+          $(toggle).trigger('focus');
+        }
+
+        $(this).trigger('click');
+        return;
+      }
+
+      var items = $(parent).find(Selector.VISIBLE_ITEMS).get();
+
+      if (!items.length) {
+        return;
+      }
+
+      var index = items.indexOf(event.target);
+
+      if (event.which === ARROW_UP_KEYCODE && index > 0) {
+        // up
+        index--;
+      }
+
+      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
+        // down
+        index++;
+      }
+
+      if (index < 0) {
+        index = 0;
+      }
+
+      items[index].focus();
+    };
+
+    _createClass(Dropdown, null, [{
+      key: 'VERSION',
+      get: function get() {
+        return VERSION;
+      }
+    }]);
+
+    return Dropdown;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+  $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + ' ' + Event.FOCUSIN_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
+    e.stopPropagation();
+  });
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Dropdown._jQueryInterface;
+  $.fn[NAME].Constructor = Dropdown;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Dropdown._jQueryInterface;
+  };
+
+  return Dropdown;
+}(jQuery);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): modal.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Modal = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'modal';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.modal';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var TRANSITION_DURATION = 300;
+  var BACKDROP_TRANSITION_DURATION = 150;
+  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
+
+  var Default = {
+    backdrop: true,
+    keyboard: true,
+    focus: true,
+    show: true
+  };
+
+  var DefaultType = {
+    backdrop: '(boolean|string)',
+    keyboard: 'boolean',
+    focus: 'boolean',
+    show: 'boolean'
+  };
+
+  var Event = {
+    HIDE: 'hide' + EVENT_KEY,
+    HIDDEN: 'hidden' + EVENT_KEY,
+    SHOW: 'show' + EVENT_KEY,
+    SHOWN: 'shown' + EVENT_KEY,
+    FOCUSIN: 'focusin' + EVENT_KEY,
+    RESIZE: 'resize' + EVENT_KEY,
+    CLICK_DISMISS: 'click.dismiss' + EVENT_KEY,
+    KEYDOWN_DISMISS: 'keydown.dismiss' + EVENT_KEY,
+    MOUSEUP_DISMISS: 'mouseup.dismiss' + EVENT_KEY,
+    MOUSEDOWN_DISMISS: 'mousedown.dismiss' + EVENT_KEY,
+    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
+  };
+
+  var ClassName = {
+    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
+    BACKDROP: 'modal-backdrop',
+    OPEN: 'modal-open',
+    FADE: 'fade',
+    SHOW: 'show'
+  };
+
+  var Selector = {
+    DIALOG: '.modal-dialog',
+    DATA_TOGGLE: '[data-toggle="modal"]',
+    DATA_DISMISS: '[data-dismiss="modal"]',
+    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var Modal = function () {
+    function Modal(element, config) {
+      _classCallCheck(this, Modal);
+
+      this._config = this._getConfig(config);
+      this._element = element;
+      this._dialog = $(element).find(Selector.DIALOG)[0];
+      this._backdrop = null;
+      this._isShown = false;
+      this._isBodyOverflowing = false;
+      this._ignoreBackdropClick = false;
+      this._isTransitioning = false;
+      this._originalBodyPadding = 0;
+      this._scrollbarWidth = 0;
+    }
+
+    // getters
+
+    // public
+
+    Modal.prototype.toggle = function toggle(relatedTarget) {
+      return this._isShown ? this.hide() : this.show(relatedTarget);
+    };
+
+    Modal.prototype.show = function show(relatedTarget) {
+      var _this9 = this;
+
+      if (this._isTransitioning) {
+        throw new Error('Modal is transitioning');
+      }
+
+      if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
+        this._isTransitioning = true;
+      }
+      var showEvent = $.Event(Event.SHOW, {
+        relatedTarget: relatedTarget
+      });
+
+      $(this._element).trigger(showEvent);
+
+      if (this._isShown || showEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      this._isShown = true;
+
+      this._checkScrollbar();
+      this._setScrollbar();
+
+      $(document.body).addClass(ClassName.OPEN);
+
+      this._setEscapeEvent();
+      this._setResizeEvent();
+
+      $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
+        return _this9.hide(event);
+      });
+
+      $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
+        $(_this9._element).one(Event.MOUSEUP_DISMISS, function (event) {
+          if ($(event.target).is(_this9._element)) {
+            _this9._ignoreBackdropClick = true;
+          }
+        });
+      });
+
+      this._showBackdrop(function () {
+        return _this9._showElement(relatedTarget);
+      });
+    };
+
+    Modal.prototype.hide = function hide(event) {
+      var _this10 = this;
+
+      if (event) {
+        event.preventDefault();
+      }
+
+      if (this._isTransitioning) {
+        throw new Error('Modal is transitioning');
+      }
+
+      var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
+      if (transition) {
+        this._isTransitioning = true;
+      }
+
+      var hideEvent = $.Event(Event.HIDE);
+      $(this._element).trigger(hideEvent);
+
+      if (!this._isShown || hideEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      this._isShown = false;
+
+      this._setEscapeEvent();
+      this._setResizeEvent();
+
+      $(document).off(Event.FOCUSIN);
+
+      $(this._element).removeClass(ClassName.SHOW);
+
+      $(this._element).off(Event.CLICK_DISMISS);
+      $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
+
+      if (transition) {
+        $(this._element).one(Util.TRANSITION_END, function (event) {
+          return _this10._hideModal(event);
+        }).emulateTransitionEnd(TRANSITION_DURATION);
+      } else {
+        this._hideModal();
+      }
+    };
+
+    Modal.prototype.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+
+      $(window, document, this._element, this._backdrop).off(EVENT_KEY);
+
+      this._config = null;
+      this._element = null;
+      this._dialog = null;
+      this._backdrop = null;
+      this._isShown = null;
+      this._isBodyOverflowing = null;
+      this._ignoreBackdropClick = null;
+      this._originalBodyPadding = null;
+      this._scrollbarWidth = null;
+    };
+
+    // private
+
+    Modal.prototype._getConfig = function _getConfig(config) {
+      config = $.extend({}, Default, config);
+      Util.typeCheckConfig(NAME, config, DefaultType);
+      return config;
+    };
+
+    Modal.prototype._showElement = function _showElement(relatedTarget) {
+      var _this11 = this;
+
+      var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
+
+      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
+        // don't move modals dom position
+        document.body.appendChild(this._element);
+      }
+
+      this._element.style.display = 'block';
+      this._element.removeAttribute('aria-hidden');
+      this._element.scrollTop = 0;
+
+      if (transition) {
+        Util.reflow(this._element);
+      }
+
+      $(this._element).addClass(ClassName.SHOW);
+
+      if (this._config.focus) {
+        this._enforceFocus();
+      }
+
+      var shownEvent = $.Event(Event.SHOWN, {
+        relatedTarget: relatedTarget
+      });
+
+      var transitionComplete = function transitionComplete() {
+        if (_this11._config.focus) {
+          _this11._element.focus();
+        }
+        _this11._isTransitioning = false;
+        $(_this11._element).trigger(shownEvent);
+      };
+
+      if (transition) {
+        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);
+      } else {
+        transitionComplete();
+      }
+    };
+
+    Modal.prototype._enforceFocus = function _enforceFocus() {
+      var _this12 = this;
+
+      $(document).off(Event.FOCUSIN) // guard against infinite focus loop
+      .on(Event.FOCUSIN, function (event) {
+        if (document !== event.target && _this12._element !== event.target && !$(_this12._element).has(event.target).length) {
+          _this12._element.focus();
+        }
+      });
+    };
+
+    Modal.prototype._setEscapeEvent = function _setEscapeEvent() {
+      var _this13 = this;
+
+      if (this._isShown && this._config.keyboard) {
+        $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
+          if (event.which === ESCAPE_KEYCODE) {
+            _this13.hide();
+          }
+        });
+      } else if (!this._isShown) {
+        $(this._element).off(Event.KEYDOWN_DISMISS);
+      }
+    };
+
+    Modal.prototype._setResizeEvent = function _setResizeEvent() {
+      var _this14 = this;
+
+      if (this._isShown) {
+        $(window).on(Event.RESIZE, function (event) {
+          return _this14._handleUpdate(event);
+        });
+      } else {
+        $(window).off(Event.RESIZE);
+      }
+    };
+
+    Modal.prototype._hideModal = function _hideModal() {
+      var _this15 = this;
+
+      this._element.style.display = 'none';
+      this._element.setAttribute('aria-hidden', 'true');
+      this._isTransitioning = false;
+      this._showBackdrop(function () {
+        $(document.body).removeClass(ClassName.OPEN);
+        _this15._resetAdjustments();
+        _this15._resetScrollbar();
+        $(_this15._element).trigger(Event.HIDDEN);
+      });
+    };
+
+    Modal.prototype._removeBackdrop = function _removeBackdrop() {
+      if (this._backdrop) {
+        $(this._backdrop).remove();
+        this._backdrop = null;
+      }
+    };
+
+    Modal.prototype._showBackdrop = function _showBackdrop(callback) {
+      var _this16 = this;
+
+      var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
+
+      if (this._isShown && this._config.backdrop) {
+        var doAnimate = Util.supportsTransitionEnd() && animate;
+
+        this._backdrop = document.createElement('div');
+        this._backdrop.className = ClassName.BACKDROP;
+
+        if (animate) {
+          $(this._backdrop).addClass(animate);
+        }
+
+        $(this._backdrop).appendTo(document.body);
+
+        $(this._element).on(Event.CLICK_DISMISS, function (event) {
+          if (_this16._ignoreBackdropClick) {
+            _this16._ignoreBackdropClick = false;
+            return;
+          }
+          if (event.target !== event.currentTarget) {
+            return;
+          }
+          if (_this16._config.backdrop === 'static') {
+            _this16._element.focus();
+          } else {
+            _this16.hide();
+          }
+        });
+
+        if (doAnimate) {
+          Util.reflow(this._backdrop);
+        }
+
+        $(this._backdrop).addClass(ClassName.SHOW);
+
+        if (!callback) {
+          return;
+        }
+
+        if (!doAnimate) {
+          callback();
+          return;
+        }
+
+        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
+      } else if (!this._isShown && this._backdrop) {
+        $(this._backdrop).removeClass(ClassName.SHOW);
+
+        var callbackRemove = function callbackRemove() {
+          _this16._removeBackdrop();
+          if (callback) {
+            callback();
+          }
+        };
+
+        if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
+          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
+        } else {
+          callbackRemove();
+        }
+      } else if (callback) {
+        callback();
+      }
+    };
+
+    // ----------------------------------------------------------------------
+    // the following methods are used to handle overflowing modals
+    // todo (fat): these should probably be refactored out of modal.js
+    // ----------------------------------------------------------------------
+
+    Modal.prototype._handleUpdate = function _handleUpdate() {
+      this._adjustDialog();
+    };
+
+    Modal.prototype._adjustDialog = function _adjustDialog() {
+      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+
+      if (!this._isBodyOverflowing && isModalOverflowing) {
+        this._element.style.paddingLeft = this._scrollbarWidth + 'px';
+      }
+
+      if (this._isBodyOverflowing && !isModalOverflowing) {
+        this._element.style.paddingRight = this._scrollbarWidth + 'px';
+      }
+    };
+
+    Modal.prototype._resetAdjustments = function _resetAdjustments() {
+      this._element.style.paddingLeft = '';
+      this._element.style.paddingRight = '';
+    };
+
+    Modal.prototype._checkScrollbar = function _checkScrollbar() {
+      this._isBodyOverflowing = document.body.clientWidth < window.innerWidth;
+      this._scrollbarWidth = this._getScrollbarWidth();
+    };
+
+    Modal.prototype._setScrollbar = function _setScrollbar() {
+      var bodyPadding = parseInt($(Selector.FIXED_CONTENT).css('padding-right') || 0, 10);
+
+      this._originalBodyPadding = document.body.style.paddingRight || '';
+
+      if (this._isBodyOverflowing) {
+        document.body.style.paddingRight = bodyPadding + this._scrollbarWidth + 'px';
+      }
+    };
+
+    Modal.prototype._resetScrollbar = function _resetScrollbar() {
+      document.body.style.paddingRight = this._originalBodyPadding;
+    };
+
+    Modal.prototype._getScrollbarWidth = function _getScrollbarWidth() {
+      // thx d.walsh
+      var scrollDiv = document.createElement('div');
+      scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
+      document.body.appendChild(scrollDiv);
+      var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+      document.body.removeChild(scrollDiv);
+      return scrollbarWidth;
+    };
+
+    // static
+
+    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+        var _config = $.extend({}, Modal.Default, $(this).data(), (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config);
+
+        if (!data) {
+          data = new Modal(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (data[config] === undefined) {
+            throw new Error('No method named "' + config + '"');
+          }
+          data[config](relatedTarget);
+        } else if (_config.show) {
+          data.show(relatedTarget);
+        }
+      });
+    };
+
+    _createClass(Modal, null, [{
+      key: 'VERSION',
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: 'Default',
+      get: function get() {
+        return Default;
+      }
+    }]);
+
+    return Modal;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
+    var _this17 = this;
+
+    var target = void 0;
+    var selector = Util.getSelectorFromElement(this);
+
+    if (selector) {
+      target = $(selector)[0];
+    }
+
+    var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());
+
+    if (this.tagName === 'A' || this.tagName === 'AREA') {
+      event.preventDefault();
+    }
+
+    var $target = $(target).one(Event.SHOW, function (showEvent) {
+      if (showEvent.isDefaultPrevented()) {
+        // only register focus restorer if modal will actually get shown
+        return;
+      }
+
+      $target.one(Event.HIDDEN, function () {
+        if ($(_this17).is(':visible')) {
+          _this17.focus();
+        }
+      });
+    });
+
+    Modal._jQueryInterface.call($(target), config, this);
+  });
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Modal._jQueryInterface;
+  $.fn[NAME].Constructor = Modal;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Modal._jQueryInterface;
+  };
+
+  return Modal;
+}(jQuery);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): scrollspy.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var ScrollSpy = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'scrollspy';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.scrollspy';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+
+  var Default = {
+    offset: 10,
+    method: 'auto',
+    target: ''
+  };
+
+  var DefaultType = {
+    offset: 'number',
+    method: 'string',
+    target: '(string|element)'
+  };
+
+  var Event = {
+    ACTIVATE: 'activate' + EVENT_KEY,
+    SCROLL: 'scroll' + EVENT_KEY,
+    LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY
+  };
+
+  var ClassName = {
+    DROPDOWN_ITEM: 'dropdown-item',
+    DROPDOWN_MENU: 'dropdown-menu',
+    NAV_LINK: 'nav-link',
+    NAV: 'nav',
+    ACTIVE: 'active'
+  };
+
+  var Selector = {
+    DATA_SPY: '[data-spy="scroll"]',
+    ACTIVE: '.active',
+    LIST_ITEM: '.list-item',
+    LI: 'li',
+    LI_DROPDOWN: 'li.dropdown',
+    NAV_LINKS: '.nav-link',
+    DROPDOWN: '.dropdown',
+    DROPDOWN_ITEMS: '.dropdown-item',
+    DROPDOWN_TOGGLE: '.dropdown-toggle'
+  };
+
+  var OffsetMethod = {
+    OFFSET: 'offset',
+    POSITION: 'position'
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var ScrollSpy = function () {
+    function ScrollSpy(element, config) {
+      var _this18 = this;
+
+      _classCallCheck(this, ScrollSpy);
+
+      this._element = element;
+      this._scrollElement = element.tagName === 'BODY' ? window : element;
+      this._config = this._getConfig(config);
+      this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS);
+      this._offsets = [];
+      this._targets = [];
+      this._activeTarget = null;
+      this._scrollHeight = 0;
+
+      $(this._scrollElement).on(Event.SCROLL, function (event) {
+        return _this18._process(event);
+      });
+
+      this.refresh();
+      this._process();
+    }
+
+    // getters
+
+    // public
+
+    ScrollSpy.prototype.refresh = function refresh() {
+      var _this19 = this;
+
+      var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
+
+      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
+
+      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
+
+      this._offsets = [];
+      this._targets = [];
+
+      this._scrollHeight = this._getScrollHeight();
+
+      var targets = $.makeArray($(this._selector));
+
+      targets.map(function (element) {
+        var target = void 0;
+        var targetSelector = Util.getSelectorFromElement(element);
+
+        if (targetSelector) {
+          target = $(targetSelector)[0];
+        }
+
+        if (target && (target.offsetWidth || target.offsetHeight)) {
+          // todo (fat): remove sketch reliance on jQuery position/offset
+          return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
+        }
+        return null;
+      }).filter(function (item) {
+        return item;
+      }).sort(function (a, b) {
+        return a[0] - b[0];
+      }).forEach(function (item) {
+        _this19._offsets.push(item[0]);
+        _this19._targets.push(item[1]);
+      });
+    };
+
+    ScrollSpy.prototype.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      $(this._scrollElement).off(EVENT_KEY);
+
+      this._element = null;
+      this._scrollElement = null;
+      this._config = null;
+      this._selector = null;
+      this._offsets = null;
+      this._targets = null;
+      this._activeTarget = null;
+      this._scrollHeight = null;
+    };
+
+    // private
+
+    ScrollSpy.prototype._getConfig = function _getConfig(config) {
+      config = $.extend({}, Default, config);
+
+      if (typeof config.target !== 'string') {
+        var id = $(config.target).attr('id');
+        if (!id) {
+          id = Util.getUID(NAME);
+          $(config.target).attr('id', id);
+        }
+        config.target = '#' + id;
+      }
+
+      Util.typeCheckConfig(NAME, config, DefaultType);
+
+      return config;
+    };
+
+    ScrollSpy.prototype._getScrollTop = function _getScrollTop() {
+      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
+    };
+
+    ScrollSpy.prototype._getScrollHeight = function _getScrollHeight() {
+      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
+    };
+
+    ScrollSpy.prototype._getOffsetHeight = function _getOffsetHeight() {
+      return this._scrollElement === window ? window.innerHeight : this._scrollElement.offsetHeight;
+    };
+
+    ScrollSpy.prototype._process = function _process() {
+      var scrollTop = this._getScrollTop() + this._config.offset;
+      var scrollHeight = this._getScrollHeight();
+      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
+
+      if (this._scrollHeight !== scrollHeight) {
+        this.refresh();
+      }
+
+      if (scrollTop >= maxScroll) {
+        var target = this._targets[this._targets.length - 1];
+
+        if (this._activeTarget !== target) {
+          this._activate(target);
+        }
+        return;
+      }
+
+      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
+        this._activeTarget = null;
+        this._clear();
+        return;
+      }
+
+      for (var i = this._offsets.length; i--;) {
+        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]);
+
+        if (isActiveTarget) {
+          this._activate(this._targets[i]);
+        }
+      }
+    };
+
+    ScrollSpy.prototype._activate = function _activate(target) {
+      this._activeTarget = target;
+
+      this._clear();
+
+      var queries = this._selector.split(',');
+      queries = queries.map(function (selector) {
+        return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]');
+      });
+
+      var $link = $(queries.join(','));
+
+      if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {
+        $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
+        $link.addClass(ClassName.ACTIVE);
+      } else {
+        // todo (fat) this is kinda sus...
+        // recursively add actives to tested nav-links
+        $link.parents(Selector.LI).find('> ' + Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
+      }
+
+      $(this._scrollElement).trigger(Event.ACTIVATE, {
+        relatedTarget: target
+      });
+    };
+
+    ScrollSpy.prototype._clear = function _clear() {
+      $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
+    };
+
+    // static
+
+    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+        var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config;
+
+        if (!data) {
+          data = new ScrollSpy(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (data[config] === undefined) {
+            throw new Error('No method named "' + config + '"');
+          }
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(ScrollSpy, null, [{
+      key: 'VERSION',
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: 'Default',
+      get: function get() {
+        return Default;
+      }
+    }]);
+
+    return ScrollSpy;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+  $(window).on(Event.LOAD_DATA_API, function () {
+    var scrollSpys = $.makeArray($(Selector.DATA_SPY));
+
+    for (var i = scrollSpys.length; i--;) {
+      var $spy = $(scrollSpys[i]);
+      ScrollSpy._jQueryInterface.call($spy, $spy.data());
+    }
+  });
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = ScrollSpy._jQueryInterface;
+  $.fn[NAME].Constructor = ScrollSpy;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return ScrollSpy._jQueryInterface;
+  };
+
+  return ScrollSpy;
+}(jQuery);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): tab.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Tab = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'tab';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.tab';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var TRANSITION_DURATION = 150;
+
+  var Event = {
+    HIDE: 'hide' + EVENT_KEY,
+    HIDDEN: 'hidden' + EVENT_KEY,
+    SHOW: 'show' + EVENT_KEY,
+    SHOWN: 'shown' + EVENT_KEY,
+    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
+  };
+
+  var ClassName = {
+    DROPDOWN_MENU: 'dropdown-menu',
+    ACTIVE: 'active',
+    DISABLED: 'disabled',
+    FADE: 'fade',
+    SHOW: 'show'
+  };
+
+  var Selector = {
+    A: 'a',
+    LI: 'li',
+    DROPDOWN: '.dropdown',
+    LIST: 'ul:not(.dropdown-menu), ol:not(.dropdown-menu), nav:not(.dropdown-menu)',
+    FADE_CHILD: '> .nav-item .fade, > .fade',
+    ACTIVE: '.active',
+    ACTIVE_CHILD: '> .nav-item > .active, > .active',
+    DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]',
+    DROPDOWN_TOGGLE: '.dropdown-toggle',
+    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var Tab = function () {
+    function Tab(element) {
+      _classCallCheck(this, Tab);
+
+      this._element = element;
+    }
+
+    // getters
+
+    // public
+
+    Tab.prototype.show = function show() {
+      var _this20 = this;
+
+      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
+        return;
+      }
+
+      var target = void 0;
+      var previous = void 0;
+      var listElement = $(this._element).closest(Selector.LIST)[0];
+      var selector = Util.getSelectorFromElement(this._element);
+
+      if (listElement) {
+        previous = $.makeArray($(listElement).find(Selector.ACTIVE));
+        previous = previous[previous.length - 1];
+      }
+
+      var hideEvent = $.Event(Event.HIDE, {
+        relatedTarget: this._element
+      });
+
+      var showEvent = $.Event(Event.SHOW, {
+        relatedTarget: previous
+      });
+
+      if (previous) {
+        $(previous).trigger(hideEvent);
+      }
+
+      $(this._element).trigger(showEvent);
+
+      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      if (selector) {
+        target = $(selector)[0];
+      }
+
+      this._activate(this._element, listElement);
+
+      var complete = function complete() {
+        var hiddenEvent = $.Event(Event.HIDDEN, {
+          relatedTarget: _this20._element
+        });
+
+        var shownEvent = $.Event(Event.SHOWN, {
+          relatedTarget: previous
+        });
+
+        $(previous).trigger(hiddenEvent);
+        $(_this20._element).trigger(shownEvent);
+      };
+
+      if (target) {
+        this._activate(target, target.parentNode, complete);
+      } else {
+        complete();
+      }
+    };
+
+    Tab.prototype.dispose = function dispose() {
+      $.removeClass(this._element, DATA_KEY);
+      this._element = null;
+    };
+
+    // private
+
+    Tab.prototype._activate = function _activate(element, container, callback) {
+      var _this21 = this;
+
+      var active = $(container).find(Selector.ACTIVE_CHILD)[0];
+      var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0]));
+
+      var complete = function complete() {
+        return _this21._transitionComplete(element, active, isTransitioning, callback);
+      };
+
+      if (active && isTransitioning) {
+        $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
+      } else {
+        complete();
+      }
+
+      if (active) {
+        $(active).removeClass(ClassName.SHOW);
+      }
+    };
+
+    Tab.prototype._transitionComplete = function _transitionComplete(element, active, isTransitioning, callback) {
+      if (active) {
+        $(active).removeClass(ClassName.ACTIVE);
+
+        var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
+
+        if (dropdownChild) {
+          $(dropdownChild).removeClass(ClassName.ACTIVE);
+        }
+
+        active.setAttribute('aria-expanded', false);
+      }
+
+      $(element).addClass(ClassName.ACTIVE);
+      element.setAttribute('aria-expanded', true);
+
+      if (isTransitioning) {
+        Util.reflow(element);
+        $(element).addClass(ClassName.SHOW);
+      } else {
+        $(element).removeClass(ClassName.FADE);
+      }
+
+      if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
+
+        var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
+        if (dropdownElement) {
+          $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
+        }
+
+        element.setAttribute('aria-expanded', true);
+      }
+
+      if (callback) {
+        callback();
+      }
+    };
+
+    // static
+
+    Tab._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var $this = $(this);
+        var data = $this.data(DATA_KEY);
+
+        if (!data) {
+          data = new Tab(this);
+          $this.data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (data[config] === undefined) {
+            throw new Error('No method named "' + config + '"');
+          }
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Tab, null, [{
+      key: 'VERSION',
+      get: function get() {
+        return VERSION;
+      }
+    }]);
+
+    return Tab;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
+    event.preventDefault();
+    Tab._jQueryInterface.call($(this), 'show');
+  });
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Tab._jQueryInterface;
+  $.fn[NAME].Constructor = Tab;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Tab._jQueryInterface;
+  };
+
+  return Tab;
+}(jQuery);
+
+/* global Tether */
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): tooltip.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Tooltip = function ($) {
+
+  /**
+   * Check for Tether dependency
+   * Tether - http://tether.io/
+   */
+  if (typeof Tether === 'undefined') {
+    throw new Error('Bootstrap tooltips require Tether (http://tether.io/)');
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'tooltip';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.tooltip';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var TRANSITION_DURATION = 150;
+  var CLASS_PREFIX = 'bs-tether';
+
+  var Default = {
+    animation: true,
+    template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-inner"></div></div>',
+    trigger: 'hover focus',
+    title: '',
+    delay: 0,
+    html: false,
+    selector: false,
+    placement: 'top',
+    offset: '0 0',
+    constraints: [],
+    container: false
+  };
+
+  var DefaultType = {
+    animation: 'boolean',
+    template: 'string',
+    title: '(string|element|function)',
+    trigger: 'string',
+    delay: '(number|object)',
+    html: 'boolean',
+    selector: '(string|boolean)',
+    placement: '(string|function)',
+    offset: 'string',
+    constraints: 'array',
+    container: '(string|element|boolean)'
+  };
+
+  var AttachmentMap = {
+    TOP: 'bottom center',
+    RIGHT: 'middle left',
+    BOTTOM: 'top center',
+    LEFT: 'middle right'
+  };
+
+  var HoverState = {
+    SHOW: 'show',
+    OUT: 'out'
+  };
+
+  var Event = {
+    HIDE: 'hide' + EVENT_KEY,
+    HIDDEN: 'hidden' + EVENT_KEY,
+    SHOW: 'show' + EVENT_KEY,
+    SHOWN: 'shown' + EVENT_KEY,
+    INSERTED: 'inserted' + EVENT_KEY,
+    CLICK: 'click' + EVENT_KEY,
+    FOCUSIN: 'focusin' + EVENT_KEY,
+    FOCUSOUT: 'focusout' + EVENT_KEY,
+    MOUSEENTER: 'mouseenter' + EVENT_KEY,
+    MOUSELEAVE: 'mouseleave' + EVENT_KEY
+  };
+
+  var ClassName = {
+    FADE: 'fade',
+    SHOW: 'show'
+  };
+
+  var Selector = {
+    TOOLTIP: '.tooltip',
+    TOOLTIP_INNER: '.tooltip-inner'
+  };
+
+  var TetherClass = {
+    element: false,
+    enabled: false
+  };
+
+  var Trigger = {
+    HOVER: 'hover',
+    FOCUS: 'focus',
+    CLICK: 'click',
+    MANUAL: 'manual'
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var Tooltip = function () {
+    function Tooltip(element, config) {
+      _classCallCheck(this, Tooltip);
+
+      // private
+      this._isEnabled = true;
+      this._timeout = 0;
+      this._hoverState = '';
+      this._activeTrigger = {};
+      this._isTransitioning = false;
+      this._tether = null;
+
+      // protected
+      this.element = element;
+      this.config = this._getConfig(config);
+      this.tip = null;
+
+      this._setListeners();
+    }
+
+    // getters
+
+    // public
+
+    Tooltip.prototype.enable = function enable() {
+      this._isEnabled = true;
+    };
+
+    Tooltip.prototype.disable = function disable() {
+      this._isEnabled = false;
+    };
+
+    Tooltip.prototype.toggleEnabled = function toggleEnabled() {
+      this._isEnabled = !this._isEnabled;
+    };
+
+    Tooltip.prototype.toggle = function toggle(event) {
+      if (event) {
+        var dataKey = this.constructor.DATA_KEY;
+        var context = $(event.currentTarget).data(dataKey);
+
+        if (!context) {
+          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
+          $(event.currentTarget).data(dataKey, context);
+        }
+
+        context._activeTrigger.click = !context._activeTrigger.click;
+
+        if (context._isWithActiveTrigger()) {
+          context._enter(null, context);
+        } else {
+          context._leave(null, context);
+        }
+      } else {
+
+        if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {
+          this._leave(null, this);
+          return;
+        }
+
+        this._enter(null, this);
+      }
+    };
+
+    Tooltip.prototype.dispose = function dispose() {
+      clearTimeout(this._timeout);
+
+      this.cleanupTether();
+
+      $.removeData(this.element, this.constructor.DATA_KEY);
+
+      $(this.element).off(this.constructor.EVENT_KEY);
+      $(this.element).closest('.modal').off('hide.bs.modal');
+
+      if (this.tip) {
+        $(this.tip).remove();
+      }
+
+      this._isEnabled = null;
+      this._timeout = null;
+      this._hoverState = null;
+      this._activeTrigger = null;
+      this._tether = null;
+
+      this.element = null;
+      this.config = null;
+      this.tip = null;
+    };
+
+    Tooltip.prototype.show = function show() {
+      var _this22 = this;
+
+      if ($(this.element).css('display') === 'none') {
+        throw new Error('Please use show on visible elements');
+      }
+
+      var showEvent = $.Event(this.constructor.Event.SHOW);
+      if (this.isWithContent() && this._isEnabled) {
+        if (this._isTransitioning) {
+          throw new Error('Tooltip is transitioning');
+        }
+        $(this.element).trigger(showEvent);
+
+        var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);
+
+        if (showEvent.isDefaultPrevented() || !isInTheDom) {
+          return;
+        }
+
+        var tip = this.getTipElement();
+        var tipId = Util.getUID(this.constructor.NAME);
+
+        tip.setAttribute('id', tipId);
+        this.element.setAttribute('aria-describedby', tipId);
+
+        this.setContent();
+
+        if (this.config.animation) {
+          $(tip).addClass(ClassName.FADE);
+        }
+
+        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
+
+        var attachment = this._getAttachment(placement);
+
+        var container = this.config.container === false ? document.body : $(this.config.container);
+
+        $(tip).data(this.constructor.DATA_KEY, this).appendTo(container);
+
+        $(this.element).trigger(this.constructor.Event.INSERTED);
+
+        this._tether = new Tether({
+          attachment: attachment,
+          element: tip,
+          target: this.element,
+          classes: TetherClass,
+          classPrefix: CLASS_PREFIX,
+          offset: this.config.offset,
+          constraints: this.config.constraints,
+          addTargetClasses: false
+        });
+
+        Util.reflow(tip);
+        this._tether.position();
+
+        $(tip).addClass(ClassName.SHOW);
+
+        var complete = function complete() {
+          var prevHoverState = _this22._hoverState;
+          _this22._hoverState = null;
+          _this22._isTransitioning = false;
+
+          $(_this22.element).trigger(_this22.constructor.Event.SHOWN);
+
+          if (prevHoverState === HoverState.OUT) {
+            _this22._leave(null, _this22);
+          }
+        };
+
+        if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
+          this._isTransitioning = true;
+          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);
+          return;
+        }
+
+        complete();
+      }
+    };
+
+    Tooltip.prototype.hide = function hide(callback) {
+      var _this23 = this;
+
+      var tip = this.getTipElement();
+      var hideEvent = $.Event(this.constructor.Event.HIDE);
+      if (this._isTransitioning) {
+        throw new Error('Tooltip is transitioning');
+      }
+      var complete = function complete() {
+        if (_this23._hoverState !== HoverState.SHOW && tip.parentNode) {
+          tip.parentNode.removeChild(tip);
+        }
+
+        _this23.element.removeAttribute('aria-describedby');
+        $(_this23.element).trigger(_this23.constructor.Event.HIDDEN);
+        _this23._isTransitioning = false;
+        _this23.cleanupTether();
+
+        if (callback) {
+          callback();
+        }
+      };
+
+      $(this.element).trigger(hideEvent);
+
+      if (hideEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      $(tip).removeClass(ClassName.SHOW);
+
+      this._activeTrigger[Trigger.CLICK] = false;
+      this._activeTrigger[Trigger.FOCUS] = false;
+      this._activeTrigger[Trigger.HOVER] = false;
+
+      if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
+        this._isTransitioning = true;
+        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
+      } else {
+        complete();
+      }
+
+      this._hoverState = '';
+    };
+
+    // protected
+
+    Tooltip.prototype.isWithContent = function isWithContent() {
+      return Boolean(this.getTitle());
+    };
+
+    Tooltip.prototype.getTipElement = function getTipElement() {
+      return this.tip = this.tip || $(this.config.template)[0];
+    };
+
+    Tooltip.prototype.setContent = function setContent() {
+      var $tip = $(this.getTipElement());
+
+      this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());
+
+      $tip.removeClass(ClassName.FADE + ' ' + ClassName.SHOW);
+
+      this.cleanupTether();
+    };
+
+    Tooltip.prototype.setElementContent = function setElementContent($element, content) {
+      var html = this.config.html;
+      if ((typeof content === 'undefined' ? 'undefined' : _typeof(content)) === 'object' && (content.nodeType || content.jquery)) {
+        // content is a DOM node or a jQuery
+        if (html) {
+          if (!$(content).parent().is($element)) {
+            $element.empty().append(content);
+          }
+        } else {
+          $element.text($(content).text());
+        }
+      } else {
+        $element[html ? 'html' : 'text'](content);
+      }
+    };
+
+    Tooltip.prototype.getTitle = function getTitle() {
+      var title = this.element.getAttribute('data-original-title');
+
+      if (!title) {
+        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
+      }
+
+      return title;
+    };
+
+    Tooltip.prototype.cleanupTether = function cleanupTether() {
+      if (this._tether) {
+        this._tether.destroy();
+      }
+    };
+
+    // private
+
+    Tooltip.prototype._getAttachment = function _getAttachment(placement) {
+      return AttachmentMap[placement.toUpperCase()];
+    };
+
+    Tooltip.prototype._setListeners = function _setListeners() {
+      var _this24 = this;
+
+      var triggers = this.config.trigger.split(' ');
+
+      triggers.forEach(function (trigger) {
+        if (trigger === 'click') {
+          $(_this24.element).on(_this24.constructor.Event.CLICK, _this24.config.selector, function (event) {
+            return _this24.toggle(event);
+          });
+        } else if (trigger !== Trigger.MANUAL) {
+          var eventIn = trigger === Trigger.HOVER ? _this24.constructor.Event.MOUSEENTER : _this24.constructor.Event.FOCUSIN;
+          var eventOut = trigger === Trigger.HOVER ? _this24.constructor.Event.MOUSELEAVE : _this24.constructor.Event.FOCUSOUT;
+
+          $(_this24.element).on(eventIn, _this24.config.selector, function (event) {
+            return _this24._enter(event);
+          }).on(eventOut, _this24.config.selector, function (event) {
+            return _this24._leave(event);
+          });
+        }
+
+        $(_this24.element).closest('.modal').on('hide.bs.modal', function () {
+          return _this24.hide();
+        });
+      });
+
+      if (this.config.selector) {
+        this.config = $.extend({}, this.config, {
+          trigger: 'manual',
+          selector: ''
+        });
+      } else {
+        this._fixTitle();
+      }
+    };
+
+    Tooltip.prototype._fixTitle = function _fixTitle() {
+      var titleType = _typeof(this.element.getAttribute('data-original-title'));
+      if (this.element.getAttribute('title') || titleType !== 'string') {
+        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
+        this.element.setAttribute('title', '');
+      }
+    };
+
+    Tooltip.prototype._enter = function _enter(event, context) {
+      var dataKey = this.constructor.DATA_KEY;
+
+      context = context || $(event.currentTarget).data(dataKey);
+
+      if (!context) {
+        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
+        $(event.currentTarget).data(dataKey, context);
+      }
+
+      if (event) {
+        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
+      }
+
+      if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {
+        context._hoverState = HoverState.SHOW;
+        return;
+      }
+
+      clearTimeout(context._timeout);
+
+      context._hoverState = HoverState.SHOW;
+
+      if (!context.config.delay || !context.config.delay.show) {
+        context.show();
+        return;
+      }
+
+      context._timeout = setTimeout(function () {
+        if (context._hoverState === HoverState.SHOW) {
+          context.show();
+        }
+      }, context.config.delay.show);
+    };
+
+    Tooltip.prototype._leave = function _leave(event, context) {
+      var dataKey = this.constructor.DATA_KEY;
+
+      context = context || $(event.currentTarget).data(dataKey);
+
+      if (!context) {
+        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
+        $(event.currentTarget).data(dataKey, context);
+      }
+
+      if (event) {
+        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
+      }
+
+      if (context._isWithActiveTrigger()) {
+        return;
+      }
+
+      clearTimeout(context._timeout);
+
+      context._hoverState = HoverState.OUT;
+
+      if (!context.config.delay || !context.config.delay.hide) {
+        context.hide();
+        return;
+      }
+
+      context._timeout = setTimeout(function () {
+        if (context._hoverState === HoverState.OUT) {
+          context.hide();
+        }
+      }, context.config.delay.hide);
+    };
+
+    Tooltip.prototype._isWithActiveTrigger = function _isWithActiveTrigger() {
+      for (var trigger in this._activeTrigger) {
+        if (this._activeTrigger[trigger]) {
+          return true;
+        }
+      }
+
+      return false;
+    };
+
+    Tooltip.prototype._getConfig = function _getConfig(config) {
+      config = $.extend({}, this.constructor.Default, $(this.element).data(), config);
+
+      if (config.delay && typeof config.delay === 'number') {
+        config.delay = {
+          show: config.delay,
+          hide: config.delay
+        };
+      }
+
+      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
+
+      return config;
+    };
+
+    Tooltip.prototype._getDelegateConfig = function _getDelegateConfig() {
+      var config = {};
+
+      if (this.config) {
+        for (var key in this.config) {
+          if (this.constructor.Default[key] !== this.config[key]) {
+            config[key] = this.config[key];
+          }
+        }
+      }
+
+      return config;
+    };
+
+    // static
+
+    Tooltip._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+        var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config;
+
+        if (!data && /dispose|hide/.test(config)) {
+          return;
+        }
+
+        if (!data) {
+          data = new Tooltip(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (data[config] === undefined) {
+            throw new Error('No method named "' + config + '"');
+          }
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Tooltip, null, [{
+      key: 'VERSION',
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: 'Default',
+      get: function get() {
+        return Default;
+      }
+    }, {
+      key: 'NAME',
+      get: function get() {
+        return NAME;
+      }
+    }, {
+      key: 'DATA_KEY',
+      get: function get() {
+        return DATA_KEY;
+      }
+    }, {
+      key: 'Event',
+      get: function get() {
+        return Event;
+      }
+    }, {
+      key: 'EVENT_KEY',
+      get: function get() {
+        return EVENT_KEY;
+      }
+    }, {
+      key: 'DefaultType',
+      get: function get() {
+        return DefaultType;
+      }
+    }]);
+
+    return Tooltip;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Tooltip._jQueryInterface;
+  $.fn[NAME].Constructor = Tooltip;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Tooltip._jQueryInterface;
+  };
+
+  return Tooltip;
+}(jQuery);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-alpha.6): popover.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+var Popover = function ($) {
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'popover';
+  var VERSION = '4.0.0-alpha.6';
+  var DATA_KEY = 'bs.popover';
+  var EVENT_KEY = '.' + DATA_KEY;
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+
+  var Default = $.extend({}, Tooltip.Default, {
+    placement: 'right',
+    trigger: 'click',
+    content: '',
+    template: '<div class="popover" role="tooltip">' + '<h3 class="popover-title"></h3>' + '<div class="popover-content"></div></div>'
+  });
+
+  var DefaultType = $.extend({}, Tooltip.DefaultType, {
+    content: '(string|element|function)'
+  });
+
+  var ClassName = {
+    FADE: 'fade',
+    SHOW: 'show'
+  };
+
+  var Selector = {
+    TITLE: '.popover-title',
+    CONTENT: '.popover-content'
+  };
+
+  var Event = {
+    HIDE: 'hide' + EVENT_KEY,
+    HIDDEN: 'hidden' + EVENT_KEY,
+    SHOW: 'show' + EVENT_KEY,
+    SHOWN: 'shown' + EVENT_KEY,
+    INSERTED: 'inserted' + EVENT_KEY,
+    CLICK: 'click' + EVENT_KEY,
+    FOCUSIN: 'focusin' + EVENT_KEY,
+    FOCUSOUT: 'focusout' + EVENT_KEY,
+    MOUSEENTER: 'mouseenter' + EVENT_KEY,
+    MOUSELEAVE: 'mouseleave' + EVENT_KEY
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+
+  var Popover = function (_Tooltip) {
+    _inherits(Popover, _Tooltip);
+
+    function Popover() {
+      _classCallCheck(this, Popover);
+
+      return _possibleConstructorReturn(this, _Tooltip.apply(this, arguments));
+    }
+
+    // overrides
+
+    Popover.prototype.isWithContent = function isWithContent() {
+      return this.getTitle() || this._getContent();
+    };
+
+    Popover.prototype.getTipElement = function getTipElement() {
+      return this.tip = this.tip || $(this.config.template)[0];
+    };
+
+    Popover.prototype.setContent = function setContent() {
+      var $tip = $(this.getTipElement());
+
+      // we use append for html objects to maintain js events
+      this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
+      this.setElementContent($tip.find(Selector.CONTENT), this._getContent());
+
+      $tip.removeClass(ClassName.FADE + ' ' + ClassName.SHOW);
+
+      this.cleanupTether();
+    };
+
+    // private
+
+    Popover.prototype._getContent = function _getContent() {
+      return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content);
+    };
+
+    // static
+
+    Popover._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+        var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' ? config : null;
+
+        if (!data && /destroy|hide/.test(config)) {
+          return;
+        }
+
+        if (!data) {
+          data = new Popover(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (data[config] === undefined) {
+            throw new Error('No method named "' + config + '"');
+          }
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Popover, null, [{
+      key: 'VERSION',
+
+
+      // getters
+
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: 'Default',
+      get: function get() {
+        return Default;
+      }
+    }, {
+      key: 'NAME',
+      get: function get() {
+        return NAME;
+      }
+    }, {
+      key: 'DATA_KEY',
+      get: function get() {
+        return DATA_KEY;
+      }
+    }, {
+      key: 'Event',
+      get: function get() {
+        return Event;
+      }
+    }, {
+      key: 'EVENT_KEY',
+      get: function get() {
+        return EVENT_KEY;
+      }
+    }, {
+      key: 'DefaultType',
+      get: function get() {
+        return DefaultType;
+      }
+    }]);
+
+    return Popover;
+  }(Tooltip);
+
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Popover._jQueryInterface;
+  $.fn[NAME].Constructor = Popover;
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Popover._jQueryInterface;
+  };
+
+  return Popover;
+}(jQuery);
+
+}();
diff --git a/src/legacy/design-studio/js/dc.graph.js.map b/src/legacy/design-studio/js/dc.graph.js.map
new file mode 100644
index 0000000..56c8bf9
--- /dev/null
+++ b/src/legacy/design-studio/js/dc.graph.js.map
@@ -0,0 +1 @@
+{"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/arrows.js","src/node_contents.js","src/diagram.js","src/render_svg.js","src/render_webgl.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/layered_layout.js","src/place_ports.js","src/grid.js","src/annotate_layers.js","src/troubleshoot.js","src/validate.js","src/legend.js","src/constraint_pattern.js","src/tree_positions.js","src/tree_constraints.js","src/mode.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/spline_paths.js","src/draw_clusters.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/supergraph.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.9.5\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.9.5',\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<cascade.length; ++i) {\n            if(cascade[i].n === n) {\n                if(f)\n                    cascade[i].f = f;\n                else cascade.splice(i, 1);\n                return ret;\n            } else if(cascade[i].n > 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        if(f.reject) {\n            var reject = f.reject(id, object);\n            if(reject) {\n                console.groupCollapsed(reject);\n                console.trace();\n                console.groupEnd();\n                return this;\n            }\n        }\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 onetime_trace(level, message) {\n    var said = false;\n    return function() {\n        if(said)\n            return;\n        if(level === 'trace') {\n            console.groupCollapsed(message);\n            console.trace();\n            console.groupEnd();\n        }\n        else\n            console[level](message);\n        said = true;\n    };\n}\n\nfunction deprecation_warning(message) {\n    return onetime_trace('warn', message);\n}\n\nfunction trace_function(level, message, f) {\n    var dep = onetime_trace(level, message);\n    return function() {\n        dep();\n        return f.apply(this, arguments);\n    };\n}\nfunction deprecate_function(message, f) {\n    return trace_function('warn', message, f);\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\nfunction is_ie() {\n    var ua = window.navigator.userAgent;\n\n    return(ua.indexOf('MSIE ') > 0 ||\n           ua.indexOf('Trident/') > 0 ||\n           ua.indexOf('Edge/') > 0);\n}\n\nfunction is_safari() {\n    return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\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\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\nif (!Array.prototype.includes) {\n  Object.defineProperty(Array.prototype, 'includes', {\n    value: function(valueToFind, fromIndex) {\n\n      if (this == null) {\n        throw new TypeError('\"this\" is null or not defined');\n      }\n\n      // 1. Let O be ? ToObject(this value).\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 len is 0, return false.\n      if (len === 0) {\n        return false;\n      }\n\n      // 4. Let n be ? ToInteger(fromIndex).\n      //    (If fromIndex is undefined, this step produces the value 0.)\n      var n = fromIndex | 0;\n\n      // 5. If n >= 0, then\n      //  a. Let k be n.\n      // 6. Else n < 0,\n      //  a. Let k be len + n.\n      //  b. If k < 0, let k be 0.\n      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n      function sameValueZero(x, y) {\n        return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));\n      }\n\n      // 7. Repeat, while k < len\n      while (k < len) {\n        // a. Let elementK be the result of ? Get(O, ! ToString(k)).\n        // b. If SameValueZero(valueToFind, elementK) is true, return true.\n        if (sameValueZero(o[k], valueToFind)) {\n          return true;\n        }\n        // c. Increase k by 1.\n        k++;\n      }\n\n      // 8. Return false\n      return false;\n    }\n  });\n}\n\nif (!Object.entries) {\n  Object.entries = function( obj ){\n    var ownProps = Object.keys( obj ),\n        i = ownProps.length,\n        resArray = new Array(i); // preallocate the Array\n    while (i--)\n      resArray[i] = [ownProps[i], obj[ownProps[i]]];\n    return resArray;\n  };\n}\n\n// https://github.com/KhaledElAnsari/Object.values\nObject.values = Object.values ? Object.values : function(obj) {\n    var allowedTypes = [\"[object String]\", \"[object Object]\", \"[object Array]\", \"[object Function]\"];\n    var objType = Object.prototype.toString.call(obj);\n\n    if(obj === null || typeof obj === \"undefined\") {\n\tthrow new TypeError(\"Cannot convert undefined or null to object\");\n    } else if(!~allowedTypes.indexOf(objType)) {\n\treturn [];\n    } else {\n\t// if ES6 is supported\n\tif (Object.keys) {\n\t    return Object.keys(obj).map(function (key) {\n\t\treturn obj[key];\n\t    });\n\t}\n\n\tvar result = [];\n\tfor (var prop in obj) {\n\t    if (obj.hasOwnProperty(prop)) {\n\t\tresult.push(obj[prop]);\n\t    }\n\t}\n\n\treturn result;\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    house: {\n        generator: 'elaborated-rect',\n        preset: function() {\n            return {\n                get_points: function(rx, ry) {\n                    return [\n                        {x: rx, y: ry*2/3},\n                        {x: rx, y: -ry/2},\n                        {x: 0, y: -ry},\n                        {x: -rx, y: -ry/2},\n                        {x: -rx, y: ry*2/3}\n                    ];\n                },\n                minrx: 30\n            };\n        }\n    },\n    invhouse: {\n        generator: 'elaborated-rect',\n        preset: function() {\n            return {\n                get_points: function(rx, ry) {\n                    return [\n                        {x: rx, y: ry/2},\n                        {x: rx, y: -ry*2/3},\n                        {x: -rx, y: -ry*2/3},\n                        {x: -rx, y: ry/2},\n                        {x: 0, y: ry}\n                    ];\n                },\n                minrx: 30\n            };\n        }\n    },\n    rarrow: {\n        generator: 'elaborated-rect',\n        preset: function() {\n            return {\n                get_points: function(rx, ry) {\n                    return [\n                        {x: rx, y: ry},\n                        {x: rx, y: ry*1.5},\n                        {x: rx + ry*1.5, y: 0},\n                        {x: rx, y: -ry*1.5},\n                        {x: rx, y: -ry},\n                        {x: -rx, y: -ry},\n                        {x: -rx, y: ry}\n                    ];\n                },\n                minrx: 30\n            };\n        }\n    },\n    larrow: {\n        generator: 'elaborated-rect',\n        preset: function() {\n            return {\n                get_points: function(rx, ry) {\n                    return [\n                        {x: -rx, y: ry},\n                        {x: -rx, y: ry*1.5},\n                        {x: -rx - ry*1.5, y: 0},\n                        {x: -rx, y: -ry*1.5},\n                        {x: -rx, y: -ry},\n                        {x: rx, y: -ry},\n                        {x: rx, y: ry}\n                    ];\n                },\n                minrx: 30\n            };\n        }\n    },\n    rpromoter: {\n        generator: 'elaborated-rect',\n        preset: function() {\n            return {\n                get_points: function(rx, ry) {\n                    return [\n                        {x: rx, y: ry},\n                        {x: rx, y: ry*1.5},\n                        {x: rx + ry*1.5, y: 0},\n                        {x: rx, y: -ry*1.5},\n                        {x: rx, y: -ry},\n                        {x: -rx, y: -ry},\n                        {x: -rx, y: ry*1.5},\n                        {x: 0, y: ry*1.5},\n                        {x: 0, y: ry},\n                    ];\n                },\n                minrx: 30\n            };\n        }\n    },\n    lpromoter: {\n        generator: 'elaborated-rect',\n        preset: function() {\n            return {\n                get_points: function(rx, ry) {\n                    return [\n                        {x: -rx, y: ry},\n                        {x: -rx, y: ry*1.5},\n                        {x: -rx - ry*1.5, y: 0},\n                        {x: -rx, y: -ry*1.5},\n                        {x: -rx, y: -ry},\n                        {x: rx, y: -ry},\n                        {x: rx, y: ry*1.5},\n                        {x: 0, y: ry*1.5},\n                        {x: 0, y: ry}\n                    ];\n                },\n                minrx: 30\n            };\n        }\n    },\n    cds: {\n        generator: 'elaborated-rect',\n        preset: function() {\n            return {\n                get_points: function(rx, ry) {\n                    return [\n                        {x: rx, y: ry},\n                        {x: rx + ry, y: 0},\n                        {x: rx, y: -ry},\n                        {x: -rx, y: -ry},\n                        {x: -rx, y: ry}\n                    ];\n                },\n                minrx: 30\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 normalize_shape_def(diagram, n) {\n    var def = diagram.nodeShape.eval(n);\n    if(!def)\n        return default_shape;\n    if(typeof def === 'string')\n        return {shape: def};\n    return def;\n}\n\nfunction elaborate_shape(diagram, 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 = normalize_shape_def(diagram, n);\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 = normalize_shape_def(diagram, n);\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<h) w = h;\n\n            if(!shape.usePaddingAndStroke || shape.usePaddingAndStroke(n.dcg_shape)) {\n                var pands = diagram.nodePadding.eval(n) + diagram.nodeStrokeWidth.eval(n);\n                w += pands;\n                h += pands;\n            }\n            n.cola.width = w;\n            n.cola.height = h;\n        });\n    };\n}\n\nfunction ellipse_attrs(diagram) {\n    return {\n        rx: function(n) { return n.dcg_rx; },\n        ry: function(n) { return n.dcg_ry; }\n    };\n}\n\nfunction polygon_attrs(diagram, n) {\n    return {\n        d: function(n) {\n            var rx = n.dcg_rx, ry = n.dcg_ry,\n                def = n.dcg_shape,\n                sides = def.sides || 4,\n                skew = def.skew || 0,\n                distortion = def.distortion || 0,\n                rotation = def.rotation || 0,\n                align = (sides%2 ? 0 : 0.5), // even-sided horizontal top, odd pointy top\n                angles = [];\n            rotation = rotation/360 + 0.25; // start at y axis not x\n            for(var i = 0; i<sides; ++i) {\n                var theta = -((i+align)/sides + rotation)*Math.PI*2; // svg is up-negative\n                angles.push({x: Math.cos(theta), y: Math.sin(theta)});\n            }\n            var yext = d3.extent(angles, function(theta) { return theta.y; });\n            if(def.regular)\n                rx = ry = Math.max(rx, ry);\n            else if(rx < ry && !def.squeeze)\n                rx = ry;\n            else\n                ry = ry / Math.min(-yext[0], yext[1]);\n            n.dcg_points = angles.map(function(theta) {\n                var x = rx*theta.x,\n                    y = ry*theta.y;\n                x *= 1 + distortion*((ry-y)/ry - 1);\n                x -= skew*y/2;\n                return {x: x, y: y};\n            });\n            return generate_path(n.dcg_points, 1, true);\n        }\n    };\n}\n\nfunction binary_search(f, a, b) {\n    var patience = 100;\n    if(f(a).val >= 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<d.length; i++) {\n        var d0 = d[i-1], d1 = d[i];\n        r.push({x: d0.x + (d1.x - d0.x) * p, y: d0.y + (d1.y - d0.y) * p});\n    }\n    return r;\n}\n\nfunction getLevels(points, t_) {\n    var x = [points];\n    for (var i=1; i<points.length; i++) {\n        x.push(interpolate(x[x.length-1], t_));\n    }\n    return x;\n}\n\n// get a point on a bezier segment, where 0 <= t <= 1\nfunction bezier_point(points, t_) {\n    var q = getLevels(points, t_);\n    return q[q.length-1][0];\n}\n\n// from https://stackoverflow.com/questions/8369488/splitting-a-bezier-curve#8405756\n// somewhat redundant with the above but different objective\nfunction split_bezier(p, t) {\n    var x1 = p[0].x, y1 = p[0].y,\n        x2 = p[1].x, y2 = p[1].y,\n        x3 = p[2].x, y3 = p[2].y,\n        x4 = p[3].x, y4 = p[3].y,\n\n        x12 = (x2-x1)*t+x1,\n        y12 = (y2-y1)*t+y1,\n\n        x23 = (x3-x2)*t+x2,\n        y23 = (y3-y2)*t+y2,\n\n        x34 = (x4-x3)*t+x3,\n        y34 = (y4-y3)*t+y3,\n\n        x123 = (x23-x12)*t+x12,\n        y123 = (y23-y12)*t+y12,\n\n        x234 = (x34-x23)*t+x23,\n        y234 = (y34-y23)*t+y23,\n\n        x1234 = (x234-x123)*t+x123,\n        y1234 = (y234-y123)*t+y123;\n\n    return [\n        [{x: x1, y: y1}, {x: x12, y: y12}, {x: x123, y: y123}, {x: x1234, y: y1234}],\n        [{x: x1234, y: y1234}, {x: x234, y: y234}, {x: x34, y: y34}, {x: x4, y: y4}]\n    ];\n}\nfunction split_bezier_n(p, n) {\n    var ret = [];\n    while(n > 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\n// binary search for a point along a bezier that is a certain distance from one of the end points\n// return the bezier cut at that point.\nfunction chop_bezier(points, end, dist) {\n    var EPS = 0.1, dist2 = dist*dist;\n    var ref, dir, segment;\n    if(end === 'head') {\n        ref = points[points.length-1];\n        segment = points.slice(points.length-4);\n        dir = -1;\n    } else {\n        ref = points[0];\n        segment = points.slice(0, 4);\n        dir = 1;\n    }\n    var parts, d2, t = 0.5, dt = 0.5, dx, dy;\n    do {\n        parts = split_bezier(segment, t);\n        dx = ref.x - parts[1][0].x;\n        dy = ref.y - parts[1][0].y;\n        d2 = dx*dx + dy*dy;\n        dt /= 2;\n        if(d2 > dist2)\n            t -= dt*dir;\n        else\n            t += dt*dir;\n        //console.log('dist', dist, 'dir', dir, 'd', d, 't', t, 'dt', dt);\n    }\n    while(dt > 0.0000001 && Math.abs(d2 - dist2) > EPS);\n    points = points.slice();\n    if(end === 'head')\n        return points.slice(0, points.length-4).concat(parts[0]);\n    else\n        return parts[1].concat(points.slice(4));\n}\n\nfunction angle_between_points(p0, p1) {\n    return Math.atan2(p1.y - p0.y, p1.x - p0.x);\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// this is not all that accurate - idea is that arrows, houses, etc, are rectangles\n// in terms of sizing, but elaborated drawing & clipping. refine until done.\ndc_graph.elaborated_rectangle_shape = function() {\n    var _shape = dc_graph.rounded_rectangle_shape();\n    _shape.intersect_vec = function(n, deltaX, deltaY) {\n        var points = n.dcg_shape.get_points(n.dcg_rx, n.dcg_ry);\n        return point_on_polygon(points, 0, 0, deltaX, deltaY);\n    };\n    delete _shape.useRadius;\n    var orig_radii = _shape.calc_radii;\n    _shape.calc_radii = function(n, ry, bbox) {\n        var ret = orig_radii(n, ry, bbox);\n        return {\n            rx: Math.max(ret.rx, n.dcg_shape.minrx),\n            ry: ret.ry\n        };\n    };\n    _shape.create = function(nodeEnter) {\n        nodeEnter.insert('path', ':first-child')\n            .attr('class', 'node-shape');\n    };\n    _shape.update = function(node) {\n        node.select('path.node-shape')\n            .attr('d', function(n) {\n                return generate_path(n.dcg_shape.get_points(n.dcg_rx, n.dcg_ry), 1, true);\n            });\n    };\n    return _shape;\n};\n\n","function offsetx(ofsx) {\n    return function(p) {\n        return {x: p.x + ofsx, y: p.y};\n    };\n}\n\ndc_graph.builtin_arrows = {\n    box: function(open, side) {\n        if(!open) return {\n            frontRef: [8,0],\n            drawFunction: function(marker, ofs, stemWidth) {\n                marker.append('rect')\n                    .attr({\n                        x: ofs[0],\n                        y: side==='right' ? -stemWidth/2 : -4,\n                        width: 8,\n                        height: side ? 4+stemWidth/2 : 8,\n                        'stroke-width': 0\n                    });\n            }\n        };\n        else return {\n            frontRef: [8,0],\n            drawFunction: function(marker, ofs, stemWidth) {\n                marker.append('rect')\n                    .attr({\n                        x: ofs[0] + 0.5,\n                        y: side==='right' ? 0 : -3.5,\n                        width: 7,\n                        height: side ? 3.5 : 7,\n                        'stroke-width': 1,\n                        fill: 'none'\n                    });\n                if(side)\n                marker.append('svg:path')\n                    .attr({\n                        d: ['M', ofs[0], 0, 'h',8].join(' '),\n                        'stroke-width': stemWidth,\n                        fill: 'none'\n                    });\n            }\n        };\n    },\n    curve: function(open, side) {\n        return {\n            stems: [true,false],\n            kernstems: [0, 0.25],\n            frontRef: [8,0],\n            drawFunction: function(marker, ofs, stemWidth) {\n                var instrs = [];\n                instrs.push('M', (side==='left' ? 7.5 : 4) + ofs[0], side==='left' ? stemWidth/2 : 3.5);\n                if(side==='left')\n                    instrs.push('v', -stemWidth/2);\n                instrs.push('A', 3.5, 3.5, 0, 0, 0,\n                            (side==='right' ? 7.5 : 4) + ofs[0], side==='right' ? 0 : -3.5);\n                if(side==='right')\n                    instrs.push('v', -stemWidth/2);\n                marker.append('svg:path')\n                    .attr({\n                        d: instrs.join(' '),\n                        'stroke-width': 1,\n                        fill: 'none'\n                    });\n                marker.append('svg:path')\n                    .attr({\n                        d: ['M', 7 + ofs[0],  0,\n                            'h  -7'].join(' '),\n                        'stroke-width': stemWidth,\n                        fill: 'none'\n                    });\n            }\n        };\n    },\n    icurve: function(open, side) {\n        return {\n            stems: [false,true],\n            kernstems: [0.25,0],\n            frontRef: [8,0],\n            drawFunction: function(marker, ofs, stemWidth) {\n                var instrs = [];\n                instrs.push('M', (side==='left' ? 0.5 : 4) + ofs[0], side==='left' ? stemWidth/2 : 3.5);\n                if(side==='left')\n                    instrs.push('v', -stemWidth/2);\n                instrs.push('A', 3.5, 3.5, 0, 0, 1,\n                            (side==='right' ? 0.5 : 4) + ofs[0], side==='right' ? 0 : -3.5);\n                if(side==='right')\n                    instrs.push('v', -stemWidth/2);\n                marker.append('svg:path')\n                    .attr({\n                        d: instrs.join(' '),\n                        'stroke-width': 1,\n                        fill: 'none'\n                    });\n                marker.append('svg:path')\n                    .attr({\n                        d: ['M', 1 + ofs[0],  0,\n                            'h 7'].join(' '),\n                        'stroke-width': stemWidth,\n                        fill: 'none'\n                    });\n            }\n        };\n    },\n    diamond: function(open, side) {\n        if(!open) return {\n            frontRef: [side ? 11.25 : 12, 0],\n            backRef: [side ? 0.75 : 0, 0],\n            viewBox: [0, -4, 12, 8],\n            stems: [!!side, !!side],\n            kernstems: function(stemWidth) {\n                return [side ? 0 : .75*stemWidth, side ? 0 : .75*stemWidth];\n            },\n            drawFunction: function(marker, ofs, stemWidth) {\n                var upoints = [{x: 0, y: 0}];\n                if(side !== 'left')\n                    upoints.push({x: 6, y: 4});\n                else\n                    upoints.push({x: 6, y: -4});\n                upoints.push({x: 12, y: 0});\n                if(!side)\n                    upoints.push({x: 6, y: -4});\n                var points = upoints.map(offsetx(ofs[0]));\n                marker.append('svg:path')\n                    .attr({\n                        d: generate_path(points, 1, true),\n                        'stroke-width': 0\n                    });\n                if(side) {\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', 0.75 + ofs[0],  0,\n                                'h 10.5'].join(' '),\n                            'stroke-width': stemWidth,\n                            fill: 'none'\n                        });\n                }\n            }\n        };\n        else return {\n            frontRef: [side ? 11.25 : 12, 0],\n            backRef: [side ? 0.75 : 0, 0],\n            viewBox: [0, -4, 12, 8],\n            stems: [!!side, !!side],\n            kernstems: function(stemWidth) {\n                return [side ? 0 : .75*stemWidth, side ? 0 : .75*stemWidth];\n            },\n            drawFunction: function(marker, ofs, stemWidth) {\n                var upoints = [{x: 0.9, y: 0}];\n                if(side !== 'left')\n                    upoints.push({x: 6, y: 3.4});\n                else\n                    upoints.push({x: 6, y: -3.4});\n                upoints.push({x: 11.1, y: 0});\n                if(!side)\n                    upoints.push({x: 6, y: -3.4});\n                var points = upoints.map(offsetx(ofs[0]));\n                marker.append('svg:path')\n                    .attr({\n                        d: generate_path(points, 1, !side),\n                        'stroke-width': 1,\n                        fill: 'none'\n                    });\n                if(side) {\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', 0.75 + ofs[0],  0,\n                                'h 10.5'].join(' '),\n                            'stroke-width': stemWidth,\n                            fill: 'none'\n                        });\n                }\n            }\n        };\n    },\n    dot: function(open, side) {\n        if(!open) return {\n            frontRef: [8,0],\n            stems: [!!side, !!side],\n            drawFunction: function(marker, ofs, stemWidth) {\n                if(side) {\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', ofs[0], 0,\n                                'A', 4, 4, 0, 0, side==='left'?1:0, 8 + ofs[0], 0].join(' '),\n                            'stroke-width': 0\n                        });\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', ofs[0],  0,\n                                'h 8'].join(' '),\n                            'stroke-width': stemWidth,\n                            fill: 'none'\n                        });\n                }\n                else {\n                    marker.append('svg:circle')\n                        .attr('r', 4)\n                        .attr('cx', 4 + ofs[0])\n                        .attr('cy', 0)\n                        .attr('stroke-width', '0px');\n                }\n            }\n        };\n        else return {\n            frontRef: [8,0],\n            stems: [!!side, !!side],\n            drawFunction: function(marker, ofs, stemWidth) {\n                if(side) {\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', 0.5 + ofs[0], 0,\n                                'A', 3.5, 3.5, 0, 0, side==='left'?1:0, 7.5 + ofs[0], 0].join(' '),\n                            'stroke-width': 1,\n                            fill: 'none'\n                        });\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', ofs[0],  0,\n                                'h 8'].join(' '),\n                            'stroke-width': stemWidth,\n                            fill: 'none'\n                        });\n                } else {\n                    marker.append('svg:circle')\n                        .attr('r', 3.5)\n                        .attr('cx', 4 + ofs[0])\n                        .attr('cy', 0)\n                        .attr('fill', 'none')\n                        .attr('stroke-width', '1px');\n                }\n            }\n        };\n    },\n    normal: function(open, side) {\n        if(!open) return {\n            frontRef: [side ? 8-4/3 : 8, 0],\n            viewBox: [0, -3, 8, 6],\n            kernstems: function(stemWidth) {\n                return [0,stemWidth*4/3];\n            },\n            drawFunction: function(marker, ofs, stemWidth) {\n                var upoints = [];\n                if(side === 'left')\n                    upoints.push({x: 0, y: 0});\n                else\n                    upoints.push({x: 0, y: 3});\n                switch(side) {\n                case 'left':\n                    upoints.push({x: 8 - stemWidth*4/3, y: -stemWidth/2});\n                    break;\n                case 'right':\n                    upoints.push({x: 8 - stemWidth*4/3, y: stemWidth/2});\n                    break;\n                default:\n                    upoints.push({x: 8, y: 0});\n                }\n                if(side === 'right')\n                    upoints.push({x: 0, y: 0});\n                else\n                    upoints.push({x: 0, y: -3});\n                var points = upoints.map(offsetx(ofs[0]));\n                marker.append('svg:path')\n                    .attr('d', generate_path(points, 1, true))\n                    .attr('stroke-width', '0px');\n                if(side) {\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', ofs[0],  0,\n                                'h', 8-4*stemWidth/3].join(' '),\n                            'stroke-width': stemWidth,\n                            fill: 'none'\n                        });\n                }\n            }\n        };\n        else return {\n            frontRef: [side ? 8-4/3 : 8, 0],\n            viewBox: [0, -3, 8, 6],\n            kernstems: function(stemWidth) {\n                return [0,stemWidth*4/3];\n            },\n            drawFunction: function(marker, ofs, stemWidth) {\n                var upoints = [];\n                if(!side) {\n                    upoints = [\n                        {x: 0.5, y: 2.28},\n                        {x: 6.57, y: 0},\n                        {x: 0.5, y: -2.28}\n                    ];\n                } else {\n                    upoints = [\n                        {x: 0.5, y: 0},\n                        {x: 0.5, y: side === 'left' ? -2.28 : 2.28},\n                        {x: 8-4/3, y: 0}\n                    ];\n                }\n                var points = upoints.map(offsetx(ofs[0]));\n                marker.append('svg:path')\n                    .attr({\n                        d: generate_path(points, 1, !side),\n                        'stroke-width': 1,\n                        fill: 'none'\n                    });\n                if(side) {\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', ofs[0],  0,\n                                'h', 8-4/3].join(' '),\n                            'stroke-width': stemWidth,\n                            fill: 'none'\n                        });\n                }\n            }\n        };\n    },\n    inv: function(open, side) {\n        if(!open) return {\n            frontRef: [8,0],\n            backRef: [side ? 4/3 : 0, 0],\n            viewBox: [0, -3, 8, 6],\n            kernstems: function(stemWidth) {\n                return [stemWidth*4/3,0];\n            },\n            drawFunction: function(marker, ofs, stemWidth) {\n                var upoints = [];\n                if(side === 'left')\n                    upoints.push({x: 8, y: 0});\n                else\n                    upoints.push({x: 8, y: 3});\n                switch(side) {\n                case 'left':\n                    upoints.push({x: stemWidth*4/3, y: -stemWidth/2});\n                    break;\n                case 'right':\n                    upoints.push({x: stemWidth*4/3, y: stemWidth/2});\n                    break;\n                default:\n                    upoints.push({x: 0, y: 0});\n                }\n                if(side === 'right')\n                    upoints.push({x: 8, y: 0});\n                else\n                    upoints.push({x: 8, y: -3});\n                var points = upoints.map(offsetx(ofs[0]));\n                marker.append('svg:path')\n                    .attr('d', generate_path(points, 1, true))\n                    .attr('stroke-width', '0px');\n                if(side) {\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', 4*stemWidth/3 + ofs[0],  0,\n                                'h', 8-4*stemWidth/3].join(' '),\n                            'stroke-width': stemWidth,\n                            fill: 'none'\n                        });\n                }\n            }\n        };\n        else return {\n            frontRef: [8,0],\n            backRef: [side ? 4/3 : 0, 0],\n            viewBox: [0, -3, 8, 6],\n            kernstems: function(stemWidth) {\n                return [stemWidth*4/3,0];\n            },\n            drawFunction: function(marker, ofs, stemWidth) {\n                var upoints = [];\n                if(!side) {\n                    upoints = [\n                        {x: 7.5, y: 2.28},\n                        {x: 1.43, y: 0},\n                        {x: 7.5, y: -2.28}\n                    ];\n                } else {\n                    upoints = [\n                        {x: 7.5, y: 0},\n                        {x: 7.5, y: side === 'left' ? -2.28 : 2.28},\n                        {x: 1.43, y: 0}\n                    ];\n                }\n                var points = upoints.map(offsetx(ofs[0]));\n                marker.append('svg:path')\n                    .attr({\n                        d: generate_path(points, 1, !side),\n                        'stroke-width': 1,\n                        fill: 'none'\n                    });\n                if(side) {\n                    marker.append('svg:path')\n                        .attr({\n                            d: ['M', 4*stemWidth/3 + ofs[0],  0,\n                                'h', 8-4/3].join(' '),\n                            'stroke-width': stemWidth,\n                            fill: 'none'\n                        });\n                }\n            }\n        };\n    },\n    tee: function(open, side) {\n        return {\n            frontRef: [5,0],\n            viewBox: [0, -5, 5, 10],\n            stems: [true,false],\n            drawFunction: function(marker, ofs, stemWidth) {\n                var b = side === 'right' ? 0 : -5,\n                    t = side === 'left' ? 0 : 5;\n                var points = [\n                    {x: 2, y: t},\n                    {x: 5, y: t},\n                    {x: 5, y: b},\n                    {x: 2, y: b}\n                ].map(offsetx(ofs[0]));\n                marker.append('svg:path')\n                    .attr('d', generate_path(points, 1, true))\n                    .attr('stroke-width', '0px');\n                marker.append('svg:path')\n                    .attr('d', ['M', ofs[0], 0, 'h', 5].join(' '))\n                    .attr('stroke-width', stemWidth)\n                    .attr('fill', 'none');\n            }\n        };\n    },\n    vee: function(open, side) {\n        return {\n            stems: [true,false],\n            kernstems: function(stemWidth) {\n                return [0,stemWidth];\n            },\n            drawFunction: function(marker, ofs, stemWidth) {\n                var upoints = [\n                    {x: 0, y: -5},\n                    {x: 10, y: 0},\n                    {x: 0, y: 5},\n                    {x: 5, y: 0}\n                ];\n                if(side==='right')\n                    upoints.splice(0, 1,\n                                  {x: 5, y: -stemWidth/2},\n                                  {x: 10, y: -stemWidth/2});\n                else if(side==='left')\n                    upoints.splice(2, 1,\n                                  {x: 10, y: stemWidth/2},\n                                  {x: 5, y: stemWidth/2});\n                var points = upoints.map(offsetx(ofs[0]));\n                marker.append('svg:path')\n                    .attr('d', generate_path(points, 1, true))\n                    .attr('stroke-width', '0px');\n                marker.append('svg:path')\n                    .attr('d', ['M', ofs[0]+5, 0, 'h',-5].join(' '))\n                    .attr('stroke-width', stemWidth);\n            }\n        };\n    },\n    crow: function(open, side) {\n        return {\n            stems: [false,true],\n            kernstems: function(stemWidth) {\n                return [stemWidth,0];\n            },\n            drawFunction: function(marker, ofs, stemWidth) {\n                var upoints = [\n                    {x: 10, y: -5},\n                    {x: 0, y: 0},\n                    {x: 10, y: 5},\n                    {x: 5, y: 0}\n                ];\n                if(side==='right')\n                    upoints.splice(0, 1,\n                                  {x: 5, y: -stemWidth/2},\n                                  {x: 0, y: -stemWidth/2});\n                else if(side==='left')\n                    upoints.splice(2, 1,\n                                  {x: 0, y: stemWidth/2},\n                                  {x: 5, y: stemWidth/2});\n                var points = upoints.map(offsetx(ofs[0]));\n                marker.append('svg:path')\n                    .attr('d', generate_path(points, 1, true))\n                    .attr('stroke-width', '0px');\n                marker.append('svg:path')\n                    .attr('d', ['M', ofs[0]+5, 0, 'h',5].join(' '))\n                    .attr('stroke-width', stemWidth);\n            }\n        };\n    }\n};\n\nfunction arrow_def(arrdefs, shape, open, side) {\n    return arrdefs[shape](open, side);\n}\n\nfunction arrow_parts(arrdefs, desc) {\n    // graphviz appears to use a real parser for this\n    var parts = [];\n    while(desc && desc.length) {\n        var mods = /^o?(?:l|r)?/.exec(desc);\n        var open = false, side = null;\n        if(mods[0]) {\n            mods = mods[0];\n            desc = desc.slice(mods.length);\n            open = mods[0] === 'o';\n            switch(mods[mods.length-1]) {\n            case 'l':\n                side='left';\n                break;\n            case 'r':\n                side='right';\n            }\n        }\n        var ok = false;\n        for(var aname in arrdefs)\n            if(desc.substring(0, aname.length) === aname) {\n                ok = true;\n                parts.push(arrow_def(arrdefs, aname, open, side));\n                desc = desc.slice(aname.length);\n                break;\n            }\n        if(!ok) {\n            console.warn(\"couldn't find arrow name in \" + desc);\n            break;\n        }\n    }\n    return parts;\n}\n\nfunction union_viewbox(vb1, vb2) {\n    var left = Math.min(vb1[0], vb2[0]),\n        bottom = Math.min(vb1[1], vb2[1]),\n        right = Math.max(vb1[0] + vb1[2], vb2[0] + vb2[2]),\n        top = Math.max(vb1[1] + vb1[3], vb2[1] + vb2[3]);\n    return [left, bottom, right - left, top - bottom];\n}\n\nfunction subtract_points(p1, p2) {\n    return [p1[0] - p2[0], p1[1] - p2[1]];\n}\n\nfunction add_points(p1, p2) {\n    return [p1[0] + p2[0], p1[1] + p2[1]];\n}\n\nfunction mult_point(p, s) {\n    return p.map(function(x) { return x*s; });\n}\n\nfunction defaulted(def) {\n    return function(x) {\n        return x || def;\n    };\n}\n\nvar view_box = defaulted([0, -5, 10, 10]),\n    front_ref = defaulted([10, 0]),\n    back_ref = defaulted([0, 0]);\n\nfunction arrow_offsets(parts, stemWidth) {\n    var frontRef = null, backRef = null;\n    return parts.map(function(p, i) {\n        var fr = front_ref(p.frontRef).slice(),\n            br = back_ref(p.backRef).slice();\n        if(p.kernstems) {\n            var kernstems = p.kernstems;\n            if(typeof kernstems === 'function')\n                kernstems = kernstems(stemWidth);\n            if(i !== 0 && kernstems[1]) {\n                var last = parts[i-1];\n                if(last.stems && last.stems[0])\n                    fr[0] -= kernstems[1];\n            }\n            if(kernstems[0]) {\n                var kern = false;\n                if(i === parts.length-1)\n                    kern = true;\n                else {\n                    var next = parts[i+1];\n                    if(next.stems && next.stems[1])\n                        kern = true;\n                }\n                if(kern)\n                    br[0] += kernstems[0];\n            }\n        }\n        if(i === 0) {\n            frontRef = fr;\n            backRef = br;\n            return {backRef: backRef, offset: [0, 0]};\n        } else {\n            var ofs = subtract_points(backRef, fr);\n            backRef = add_points(br, ofs);\n            return {backRef: backRef, offset: ofs};\n        }\n    });\n}\n\nfunction arrow_bounds(parts, stemWidth) {\n    var viewBox = null, offsets = arrow_offsets(parts, stemWidth);\n    parts.forEach(function(p, i) {\n        var vb = view_box(p.viewBox);\n        var ofs = offsets[i].offset;\n        if(!viewBox)\n            viewBox = vb.slice();\n        else\n            viewBox = union_viewbox(viewBox, [vb[0] + ofs[0], vb[1] + ofs[1], vb[2], vb[3]]);\n    });\n    return {offsets: offsets, viewBox: viewBox};\n}\n\nfunction arrow_length(parts, stemWidth) {\n    if(!parts.length)\n        return 0;\n    var offsets = arrow_offsets(parts, stemWidth);\n    return front_ref(parts[0].frontRef)[0] - offsets[parts.length-1].backRef[0];\n}\n\n\nfunction scaled_arrow_lengths(diagram, e) {\n    var arrowSize = diagram.edgeArrowSize.eval(e),\n        stemWidth = diagram.edgeStrokeWidth.eval(e) / arrowSize;\n    var headLength = arrowSize *\n        (arrow_length(arrow_parts(diagram.arrows(), diagram.edgeArrowhead.eval(e)), stemWidth) +\n         diagram.nodeStrokeWidth.eval(e.target) / 2),\n        tailLength = arrowSize *\n        (arrow_length(arrow_parts(diagram.arrows(), diagram.edgeArrowtail.eval(e)), stemWidth) +\n         diagram.nodeStrokeWidth.eval(e.source) / 2);\n    return {headLength: headLength, tailLength: tailLength};\n}\n\nfunction clip_path_to_arrows(headLength, tailLength, path) {\n    var points0 = as_bezier3(path),\n        points = chop_bezier(points0, 'head', headLength);\n    return {\n        bezDegree: 3,\n        points: chop_bezier(points, 'tail', tailLength),\n        sourcePort: path.sourcePort,\n        targetPort: path.targetPort\n    };\n}\n\nfunction place_arrows_on_spline(diagram, e, points) {\n    var alengths = scaled_arrow_lengths(diagram, e);\n    var path0 = {\n        points: points,\n        bezDegree: 3\n    };\n    var path = clip_path_to_arrows(alengths.headLength, alengths.tailLength, path0);\n    return {\n        path: path,\n        full: path0,\n        orienthead: angle_between_points(path.points[path.points.length-1], path0.points[path0.points.length-1]) + 'rad', //calculate_arrowhead_orientation(e.cola.points, 'head'),\n        orienttail: angle_between_points(path.points[0], path0.points[0]) + 'rad' //calculate_arrowhead_orientation(e.cola.points, 'tail')\n    };\n}\n\n\n// determine pre-transition orientation that won't spin a lot going to new orientation\nfunction 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;\n}\n\n\nfunction edgeArrow(diagram, arrdefs, e, kind, desc) {\n    var id = diagram.arrowId(e, kind);\n    var strokeOfs, edgeStroke;\n    function arrow_sig() {\n        return desc + '-' + strokeOfs + '-' + edgeStroke;\n    }\n    if(desc) {\n        strokeOfs = diagram.nodeStrokeWidth.eval(kind==='tail' ? e.source : e.target)/2;\n        edgeStroke = diagram.edgeStroke.eval(e);\n        if(e[kind + 'ArrowLast'] === arrow_sig())\n            return id;\n    }\n    var parts = arrow_parts(arrdefs, desc),\n        marker = diagram.addOrRemoveDef(id, !!parts.length, 'svg:marker');\n\n    if(parts.length) {\n        var arrowSize = diagram.edgeArrowSize.eval(e),\n            stemWidth = diagram.edgeStrokeWidth.eval(e) / arrowSize,\n            bounds = arrow_bounds(parts, stemWidth),\n            frontRef = front_ref(parts[0].frontRef);\n        bounds.viewBox[0] -= strokeOfs/arrowSize;\n        bounds.viewBox[3] += strokeOfs/arrowSize;\n        marker\n            .attr('viewBox', bounds.viewBox.join(' '))\n            .attr('refX', frontRef[0])\n            .attr('refY', frontRef[1])\n            .attr('markerUnits', 'userSpaceOnUse')\n            .attr('markerWidth', bounds.viewBox[2]*arrowSize)\n            .attr('markerHeight', bounds.viewBox[3]*arrowSize)\n            .attr('stroke', edgeStroke)\n            .attr('fill', edgeStroke);\n        marker.html(null);\n        parts.forEach(function(p, i) {\n            marker\n                .call(p.drawFunction,\n                      add_points([-strokeOfs/arrowSize,0], bounds.offsets[i].offset),\n                      stemWidth);\n        });\n    }\n    e[kind + 'ArrowLast'] = arrow_sig();\n    return desc ? id : null;\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 = 0.5 - ((lines.length - 1) * lineHeight + 1)/2;\n                // IE, Edge, and Safari do not seem to support\n                // dominant-baseline: central although they say they do\n                if(is_ie() || is_safari())\n                    first += 0.3;\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                'text-decoration': function(line) {\n                    return _contents.parent().nodeLabelDecoration.eval(line.node);\n                },\n                x: 0\n            }).html(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        selectText: function(container) {\n            return this.selectContent(container);\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        selectText: function(container) {\n            return this.selectContent(container).select('text.node-label');\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 _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 _clusters = {};\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 _anchor, _chartGroup;\n    var _animateZoom;\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.<b>' + name + '</b> 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 `<svg>` 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 `<svg>` 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 translate\n     * and scale get calculated when `autoZoom` is triggered.\n     *\n     * * `'default'` - simulates the preserveAspectRatio behavior of `xMidYMid meet`, but\n     *   with margins - the content is stretched or squished in the more constrained\n     *   direction, and centered in the other direction\n     * * `'vertical'` - fits the canvas vertically (with vertical margins) and centers\n     *   it horizontally. If the canvas is taller than the viewport, it will meet\n     *   vertically and there will be blank areas to the left and right. If the canvas\n     *   is wider than the viewport, it will be sliced.\n     * * `'horizontal'` - fits the canvas horizontally (with horizontal margins) and\n     *   centers it vertically. If the canvas is wider than the viewport, it will meet\n     *   horizontally and there will be blank areas above and below. If the canvas is\n     *   taller than the viewport, it will be sliced.\n     *\n     * Other options\n     * * `null` - no attempt is made to fit the content in the viewport\n     * * `'zoom'` - does not scale the content, but attempts to bring as much content\n     *   into view as possible, using using the same algorithm as `restrictPan`\n     * * `'align_{tlbrc}[2]'` - does not scale; aligns up to two sides or centers them\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        auto_zoom(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 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     * *As with node and edge dimensions, the diagram will itself not filter on cluster dimensions;\n     * this is included for symmetry, and for modes which may want to filter clusters.*\n     * @method clusterDimension\n     * @memberof dc_graph.diagram\n     * @instance\n     * @param {crossfilter.dimension} [clusterDimension]\n     * @return {crossfilter.dimension}\n     * @return {dc_graph.diagram}\n     **/\n    _diagram.clusterDimension = property(null);\n\n    /**\n     * Set or get the crossfilter group which is the data source for clusters in the\n     * diagram.\n     *\n     * The key/value pairs returned by `diagram.clusterGroup().all()` need to support, at a minimum,\n     * the {@link dc_graph.diagram#clusterKey clusterKey} and {@link dc_graph.diagram#clusterParent clusterParent}\n     * accessors, which should return keys in this group.\n     *\n     * @method clusterGroup\n     * @memberof dc_graph.diagram\n     * @instance\n     * @param {crossfilter.group} [clusterGroup]\n     * @return {crossfilter.group}\n     * @return {dc_graph.diagram}\n     **/\n    _diagram.clusterGroup = property(null);\n\n    // cluster accessors\n    /**\n     * Set or get the function which will be used to retrieve the unique key for each cluster. By\n     * default, this accesses the `key` field of the object passed to it.\n     *\n     * @method clusterKey\n     * @memberof dc_graph.diagram\n     * @instance\n     * @param {Function} [clusterKey=function(kv) { return kv.key }]\n     * @return {Function}\n     * @return {dc_graph.diagram}\n     **/\n    _diagram.clusterKey = property(dc.pluck('key'));\n\n    /**\n     * Set or get the function which will be used to retrieve the key of the parent of a cluster,\n     * which is another cluster.\n     *\n     * @method clusterParent\n     * @memberof dc_graph.diagram\n     * @instance\n     * @param {Function} [clusterParent=function(kv) { return kv.key }]\n     * @return {Function}\n     * @return {dc_graph.diagram}\n     **/\n    _diagram.clusterParent = property(null);\n\n    /**\n     * Set or get the function which will be used to retrieve the padding, in pixels, around a cluster.\n     *\n     * **To be implemented.** If a single value is returned, it will be used on all sides; if two\n     * values are returned they will be interpreted as the vertical and horizontal padding.\n     *\n     * @method clusterPadding\n     * @memberof dc_graph.diagram\n     * @instance\n     * @param {Function} [clusterPadding=function(kv) { return kv.key }]\n     * @return {Function}\n     * @return {dc_graph.diagram}\n     **/\n    _diagram.clusterPadding = property(8);\n\n    // node accessor\n    /**\n     * Set or get the function which will be used to retrieve the parent cluster of a node, or\n     * `null` if the node is not in a cluster.\n     *\n     * @method nodeParentCluster\n     * @memberof dc_graph.diagram\n     * @instance\n     * @param {Function} [nodeParentCluster=function(kv) { return kv.key }]\n     * @return {Function}\n     * @return {dc_graph.diagram}\n     **/\n    _diagram.nodeParentCluster = 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    _diagram.nodeLabelDecoration = property(null);\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    _diagram.shape('elaborated-rect', dc_graph.elaborated_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    // vertical spacing when there are multiple lines of edge label\n    _diagram.edgeLabelSpacing = property(12);\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} [groupConnected=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 <em>\" + n.orig.value.name + \"</em>\");\n     * });\n     * diagram.child('tip', tip);\n     * @return {dc_graph.diagram}\n     **/\n    _diagram.mode = _diagram.child = named_children();\n\n    _diagram.mode.reject = function(id, object) {\n        var rtype = _diagram.renderer().rendererType();\n        if(!object)\n            return false; // null is always a valid mode for any renderer\n        if(!object.supportsRenderer)\n            console.log('could not check if \"' + id + '\" is compatible with ' + rtype);\n        else if(!object.supportsRenderer(rtype))\n            return 'not installing \"' + id + '\" because it is not compatible with renderer ' + rtype;\n        return false;\n    };\n\n    _diagram.legend = deprecate_function(\".legend() is deprecated; use .child() for more control & multiple legends\", 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 deprecated - 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 positions of nodes and edges.\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(_diagram.renderer().isRendered()) {\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    _diagram.renderer = property(dc_graph.render_svg().parent(_diagram)).react(function(r) {\n        if(_diagram.renderer())\n            _diagram.renderer().parent(null);\n        r.parent(_diagram);\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    _diagram.getWholeCluster = function(id) {\n        return _clusters[id] || null;\n    };\n\n    /**\n     * Instructs cola.js to fit the connected components.\n     *\n     * **Deprecated**: Use\n     * {@link dc_graph.cola_layout#handleDisconnected cola_layout.handleDisconnected} instead.\n     * @method handleDisconnected\n     * @memberof dc_graph.diagram\n     * @instance\n     * @param {Boolean} [handleDisconnected=true]\n     * @return {Boolean}\n     * @return {dc_graph.diagram}\n     **/\n    _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\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.isRunning = function() {\n        return _running;\n    };\n\n    function svg_specific(name) {\n        return trace_function('trace', name + '() is specific to the SVG renderer', function() {\n            return _diagram.renderer()[name].apply(this, arguments);\n        });\n    }\n\n    function call_on_renderer(name) {\n        return trace_function('trace', 'calling ' + name + '() on renderer', function() {\n            return _diagram.renderer()[name].apply(this, arguments);\n        });\n    }\n\n    _diagram.svg = svg_specific('svg');\n    _diagram.g = svg_specific('g');\n    _diagram.select = svg_specific('select');\n    _diagram.selectAll = svg_specific('selectAll');\n    _diagram.addOrRemoveDef = svg_specific('addOrRemoveDef');\n    _diagram.selectAllNodes = svg_specific('selectAllNodes');\n    _diagram.selectAllEdges = svg_specific('selectAllEdges');\n    _diagram.selectNodePortsOfStyle = svg_specific('selectNodePortsOfStyle');\n    _diagram.zoom = svg_specific('zoom');\n    _diagram.translate = svg_specific('translate');\n    _diagram.scale = svg_specific('scale');\n\n    function renderer_specific(name) {\n        return trace_function('trace', name + '() will have renderer-specific arguments', function() {\n            return _diagram.renderer()[name].apply(this, arguments);\n        });\n    }\n    _diagram.renderNode = svg_specific('renderNode');\n    _diagram.renderEdge = svg_specific('renderEdge');\n    _diagram.redrawNode = svg_specific('redrawNode');\n    _diagram.redrawEdge = svg_specific('redrawEdge');\n    _diagram.reposition = call_on_renderer('reposition');\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     * @method redraw\n     * @memberof dc_graph.diagram\n     * @instance\n     * @return {dc_graph.diagram}\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    /**\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(_diagram.renderer().isRendered())\n            _dispatch.reset();\n        if(!_diagram.initLayoutOnRedraw())\n            initLayout();\n\n        _nodes = {};\n        _edges = {};\n        _ports = {};\n        _clusters = {};\n\n        // start out with 1:1 zoom\n        _diagram.x(d3.scale.linear()\n                   .domain([0, _diagram.width()])\n                   .range([0, _diagram.width()]));\n        _diagram.y(d3.scale.linear()\n                   .domain([0, _diagram.height()])\n                   .range([0, _diagram.height()]));\n        _diagram.renderer().initializeDrawing();\n        _dispatch.render();\n        _diagram.redraw();\n        return this;\n    };\n\n    _diagram.refresh = call_on_renderer('refresh');\n\n    _diagram.width_is_automatic = function() {\n        return _width === 'auto';\n    };\n\n    _diagram.height_is_automatic = function() {\n        return _height === 'auto';\n    };\n\n    function detect_size_change() {\n        var oldWidth = _lastWidth, oldHeight = _lastHeight;\n        var newWidth = _diagram.width(), newHeight = _diagram.height();\n        if(oldWidth !== newWidth || oldHeight !== newHeight)\n            _diagram.renderer().rezoom(oldWidth, oldHeight, newWidth, newHeight);\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        var clusters = _diagram.clusterGroup() ? _diagram.clusterGroup().all() : [];\n        if(_running) {\n            throw new Error('dc_graph.diagram.redraw already running!');\n        }\n        _running = true;\n\n        if(_diagram.width_is_automatic() || _diagram.height_is_automatic())\n            detect_size_change();\n        else\n            _diagram.renderer().resize();\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            v1.cola.dcg_nodeParentCluster = _diagram.nodeParentCluster.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.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        var needclusters = d3.set(wnodes.map(function(n) {\n            return _diagram.nodeParentCluster.eval(n);\n        }).filter(identity)).values();\n\n        var wclusters = regenerate_objects(_clusters, clusters, needclusters, function(c) {\n            return _diagram.clusterKey()(c);\n        }, function(c1, c) { // assign\n            c1.orig = c;\n            c1.cola = c1.cola || {\n                dcg_clusterKey: _diagram.clusterKey.eval(c1),\n                dcg_clusterParent: _diagram.clusterParent.eval(c1)\n            };\n        }, function(k, c) { // create\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        var drawState = _diagram.renderer().startRedraw(_dispatch, wnodes, wedges);\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        // edge lengths may be affected by node sizes\n        wedges.forEach(function(e) {\n            e.cola.dcg_edgeLength = _diagram.edgeLength.eval(e);\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\n        // warn if there are any loops (before changing names to indices)\n        // it would be better to do this in webcola\n        // (for one thing, this duplicates logic in rectangle.ts)\n        // but by that time it has lost the names of things,\n        // so the output would be difficult to use\n        var constraints_by_left = constraints.reduce(function(p, c) {\n            if(c.type) {\n                switch(c.type) {\n                case 'alignment':\n                    var left = c.offsets[0].node;\n                    p[left] = p[left] || [];\n                    c.offsets.slice(1).forEach(function(o) {\n                        p[left].push({node: o.node, in_constraint: c});\n                    });\n                    break;\n                }\n            } else if(c.axis) {\n                p[c.left] = p[c.left] || [];\n                p[c.left].push({node: c.right, in_constraint: c});\n            }\n            return p;\n        }, {});\n        var touched = {};\n        function find_constraint_loops(con, stack) {\n            var left = con.node;\n            stack = stack || [];\n            var loop = stack.find(function(con) { return con.node === left; });\n            stack = stack.concat([con]);\n            if(loop)\n                console.warn('found a loop in constraints', stack);\n            if(touched[left])\n                return;\n            touched[left] = true;\n            if(!constraints_by_left[left])\n                return;\n            constraints_by_left[left].forEach(function(right) {\n                find_constraint_loops(right, stack);\n            });\n        }\n        Object.keys(constraints_by_left).forEach(function(left) {\n            if(!touched[left])\n                find_constraint_loops({node: left, in_constraint: null});\n        });\n\n        // translate references from names to indices (ugly)\n        var invalid_constraints = [];\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 && c.left && c.right) {\n                c.left = _nodes[c.left].index;\n                c.right = _nodes[c.right].index;\n            }\n            else invalid_constraints.push(c);\n        });\n\n        if(invalid_constraints.length)\n            console.warn(invalid_constraints.length + ' invalid constraints', invalid_constraints);\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            // init_node_ports?\n            _diagram.renderer().draw(drawState, true);\n            _diagram.renderer().drawPorts(drawState);\n            _diagram.renderer().fireTSEvent(_dispatch, drawState);\n            check_zoom(drawState);\n            return this;\n        }\n        var startTime = Date.now();\n\n        function populate_cola(rnodes, redges, rclusters) {\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, ignored');\n                    return;\n                }\n                n.cola.x = rn.x;\n                n.cola.y = rn.y;\n                n.cola.z = rn.z;\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, ignored');\n                    return;\n                }\n                if(re.points)\n                    e.cola.points = re.points;\n            });\n            wclusters.forEach(function(c) {\n                c.cola.bounds = null;\n            });\n            if(rclusters)\n                rclusters.forEach(function(rc) {\n                    var c = _clusters[rc.dcg_clusterKey];\n                    if(!c) {\n                        console.warn('received cluster \"' + rc.dcg_clusterKey + '\" that we did not send, ignored');\n                        return;\n                    }\n                    if(rc.bounds)\n                        c.cola.bounds = rc.bounds;\n                });\n        }\n        _diagram.layoutEngine()\n            .on('tick.diagram', function(nodes, edges, clusters) {\n                var elapsed = Date.now() - startTime;\n                if(!_diagram.initialOnly())\n                    populate_cola(nodes, edges, clusters);\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                    _diagram.renderer().draw(drawState, true);\n                    _diagram.renderer().drawPorts(drawState);\n                    // should do this only once\n                    _diagram.renderer().fireTSEvent(_dispatch, drawState);\n                }\n                if(_needsRedraw || _diagram.timeLimit() && elapsed > _diagram.timeLimit()) {\n                    console.log('cancelled');\n                    _diagram.layoutEngine().stop();\n                }\n            })\n            .on('end.diagram', function(nodes, edges, clusters) {\n                if(!_diagram.showLayoutSteps()) {\n                    if(!_diagram.initialOnly())\n                        populate_cola(nodes, edges, clusters);\n                    init_node_ports(_nodes, wports);\n                    _dispatch.receivedLayout(_diagram, _nodes, wnodes, _edges, wedges, _ports, wports);\n                    propagate_port_positions(_nodes, wedges, _ports);\n                    _diagram.renderer().draw(drawState, true);\n                    _diagram.renderer().drawPorts(drawState);\n                    _diagram.renderer().fireTSEvent(_dispatch, drawState);\n                }\n                else _diagram.layoutDone(true);\n                check_zoom(drawState);\n            })\n            .on('start.diagram', 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            var engine = _diagram.layoutEngine();\n            engine.data(\n                { width: _diagram.width(), height: _diagram.height() },\n                wnodes.map(function(v) {\n                    var lv = Object.assign({}, v.cola, v.dcg_shape);\n                    if(engine.annotateNode)\n                        engine.annotateNode(lv, v);\n                    else if(engine.extractNodeAttrs)\n                        Object.keys(engine.extractNodeAttrs()).forEach(function(key) {\n                            lv[key] = engine.extractNodeAttrs()[key](v.orig);\n                        });\n                    return lv;\n                }),\n                layout_edges.map(function(e) {\n                    var le = e.cola;\n                    if(engine.annotateEdge)\n                        engine.annotateEdge(le, e);\n                    else if(engine.extractEdgeAttrs)\n                        Object.keys(engine.extractEdgeAttrs()).forEach(function(key) {\n                            le[key] = engine.extractEdgeAttrs()[key](e.orig);\n                        });\n                    return le;\n                }),\n                wclusters.map(function(c) {\n                    return c.cola;\n                }),\n                constraints\n            );\n            engine.start();\n        }\n        return this;\n    };\n\n    function check_zoom(drawState) {\n        var do_zoom, animate = true;\n        if(_diagram.width_is_automatic() || _diagram.height_is_automatic())\n            detect_size_change();\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(drawState);\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(dy === 0 && dx === 0)\n            return [1, 0];\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    _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.renderer().refresh();\n            if(durationOverride !== undefined)\n                _diagram.transitionDuration(transdur);\n        });\n    };\n\n    _diagram.layoutDone = function(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 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    _diagram.calcEdgePath = function(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            var path0 = {\n                points: path.points,\n                bezDegree: path.bezDegree\n            };\n            var alengths = scaled_arrow_lengths(_diagram, parallel.edges[p]);\n            path = clip_path_to_arrows(alengths.headLength, alengths.tailLength, path);\n            var points = path.points, points0 = path0.points;\n            parallel.edges[p].pos[age] = {\n                path: path,\n                full: path0,\n                orienthead: angle_between_points(points[points.length-1], points0[points0.length-1]) + 'rad',\n                orienttail: angle_between_points(points[0], points0[0]) + 'rad'\n            };\n        }\n    };\n\n    function node_bounds(n) {\n        var bounds = {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        if(_diagram.portStyle.enum().length) {\n            var ports = _nodePorts[_diagram.nodeKey.eval(n)];\n            if(ports)\n                ports.forEach(function(p) {\n                    var portStyle =_diagram.portStyleName.eval(p);\n                    if(!portStyle || !_diagram.portStyle(portStyle))\n                        return;\n                    var pb = _diagram.portStyle(portStyle).portBounds(p);\n                    pb.left += n.cola.x; pb.top += n.cola.y;\n                    pb.right += n.cola.x; pb.bottom += n.cola.y;\n                    bounds = union_bounds(bounds, pb);\n                });\n        }\n        return bounds;\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    _diagram.calculateBounds = function(ndata, edata) {\n        // assumption: there can be no edges without nodes\n        var bounds = ndata.map(node_bounds).reduce(union_bounds);\n        return edata.map(edge_bounds).reduce(union_bounds, bounds);\n    };\n    var _bounds;\n    function calc_bounds(drawState) {\n        if((_diagram.fitStrategy() || _diagram.restrictPan())) {\n            _bounds = _diagram.renderer().calculateBounds(drawState);\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            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<sAR, // view aspect ratio is less (wider)\n                    amv = (fitS === 'default') ? !vrl : (fitS === 'vertical'); // align margins vertically\n                scale = amv ? sheight / vheight : swidth / vwidth;\n                scale = Math.max(_diagram.zoomExtent()[0], Math.min(_diagram.zoomExtent()[1], scale));\n                translate = [_diagram.margins().left - _bounds.left*scale + (swidth - vwidth*scale) / 2,\n                             _diagram.margins().top - _bounds.top*scale + (sheight - vheight*scale) / 2];\n            }\n            else if(typeof fitS === 'string' && fitS.match(/^align_/)) {\n                var sides = fitS.split('_')[1].toLowerCase().split('');\n                if(sides.length > 2)\n                    throw new Error(\"align_ expecting 0-2 sides, not \" + sides.length);\n                var bounds = margined_bounds();\n                translate = _diagram.renderer().translate();\n                scale = _diagram.renderer().scale();\n                var vertalign = false, horzalign = false;\n                sides.forEach(function(s) {\n                    switch(s) {\n                    case 'l':\n                        translate[0] = align_left(translate, bounds.left);\n                        horzalign = true;\n                        break;\n                    case 't':\n                        translate[1] = align_top(translate, bounds.top);\n                        vertalign = true;\n                        break;\n                    case 'r':\n                        translate[0] = align_right(translate, bounds.right);\n                        horzalign = true;\n                        break;\n                    case 'b':\n                        translate[1] = align_bottom(translate, bounds.bottom);\n                        vertalign = true;\n                        break;\n                    case 'c': // handled below\n                        break;\n                    default:\n                        throw new Error(\"align_ expecting l t r b or c, not '\" + s + \"'\");\n                    }\n                });\n                if(sides.includes('c')) {\n                    if(!horzalign)\n                        translate[0] = center_horizontally(translate, bounds);\n                    if(!vertalign)\n                        translate[1] = center_vertically(translate, bounds);\n                }\n            }\n            else if(fitS === 'zoom') {\n                scale = _diagram.renderer().scale();\n                translate = bring_in_bounds(_diagram.renderer().translate());\n            }\n            else\n                throw new Error('unknown fitStrategy type ' + typeof fitS);\n\n            _animateZoom = animate;\n            _diagram.renderer().translate(translate).scale(scale).commitTranslateScale();\n            _animateZoom = false;\n        }\n    }\n    function namespace_event_reducer(msg_fun) {\n        return function(p, ev) {\n            var namespace = {};\n            p[ev] = function(ns) {\n                return namespace[ns] = namespace[ns] || onetime_trace('trace', msg_fun(ns, ev));\n            };\n            return p;\n        };\n    }\n    var renderer_specific_events = ['drawn', 'transitionsStarted', 'zoomed']\n            .reduce(namespace_event_reducer(function(ns, ev) {\n                return 'subscribing \"' + ns + '\" to event \"' + ev + '\" which takes renderer-specific parameters';\n            }), {});\n    var inconsistent_arguments = ['end']\n            .reduce(namespace_event_reducer(function(ns, ev) {\n                return 'subscribing \"' + ns + '\" to event \"' + ev + '\" which may receive inconsistent arguments';\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        var evns = event.split('.'),\n            warning = renderer_specific_events[evns[0]] || inconsistent_arguments[evns[0]];\n        if(warning)\n            warning(evns[1] || '')();\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     * 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 y\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. 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.\n     *\n     * Sorry, this is not currently documented - please see\n     * [arrows.js](https://github.com/dc-js/dc.graph.js/blob/develop/src/arrows.js)\n     * for examples\n     * @return {dc_graph.diagram}\n     **/\n    _diagram.defineArrow = function(name, defn) {\n        if(typeof defn !== 'function')\n            throw new Error('sorry, defineArrow no longer takes specific shape parameters, and the parameters have changed too much to convert them. it takes a name and a function returning a definition - please look at arrows.js for new format');\n        _arrows[name] = defn;\n        return _diagram;\n    };\n\n    // hmm\n    _diagram.arrows = function() {\n        return _arrows;\n    };\n\n    Object.keys(dc_graph.builtin_arrows).forEach(function(aname) {\n        var defn = dc_graph.builtin_arrows[aname];\n        _diagram.defineArrow(aname, defn);\n    });\n\n    function margined_bounds() {\n        var bounds = _bounds || {left: 0, top: 0, right: 0, bottom: 0};\n        var scale = _diagram.renderer().scale();\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    function center_horizontally(translate, bounds) {\n        return (align_left(translate, bounds.left) + align_right(translate, bounds.right))/2;\n    }\n    function center_vertically(translate, bounds) {\n        return (align_top(translate, bounds.top) + align_bottom(translate, bounds.bottom))/2;\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\n    _diagram.doZoom = function() {\n        if(_diagram.width_is_automatic() || _diagram.height_is_automatic())\n            detect_size_change();\n        var translate, scale = d3.event.scale;\n        if(_diagram.restrictPan())\n            _diagram.renderer().translate(translate = bring_in_bounds(d3.event.translate));\n        else translate = d3.event.translate;\n        _diagram.renderer().globalTransform(translate, scale, _animateZoom);\n        _dispatch.zoomed(translate, scale, _diagram.x().domain(), _diagram.y().domain());\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    /**\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.render_svg = function() {\n    var _svg = null, _defs = null, _g = null, _nodeLayer = null, _edgeLayer = null;\n    var _animating = false; // do not refresh during animations\n    var _zoom;\n    var _renderer = {};\n\n    _renderer.rendererType = function() {\n        return 'svg';\n    };\n\n    _renderer.parent = property(null);\n\n    _renderer.renderNode = _renderer._enterNode = function(nodeEnter) {\n        if(_renderer.parent().nodeTitle())\n            nodeEnter.append('title');\n        nodeEnter.each(infer_shape(_renderer.parent()));\n        _renderer.parent().forEachShape(nodeEnter, function(shape, node) {\n            node.call(shape.create);\n        });\n        return _renderer;\n    };\n    _renderer.redrawNode = _renderer._updateNode = function(node) {\n        var changedShape = node.filter(shape_changed(_renderer.parent()));\n        changedShape.selectAll('.node-shape').remove();\n        changedShape.each(infer_shape(_renderer.parent()));\n        _renderer.parent().forEachShape(changedShape, function(shape, node) {\n            node.call(shape.create);\n        });\n        node.select('title')\n            .text(_renderer.parent().nodeTitle.eval);\n        _renderer.parent().forEachContent(node, function(contentType, node) {\n            node.call(contentType.update);\n            _renderer.parent().forEachShape(contentType.selectContent(node), function(shape, content) {\n                content\n                    .call(fit_shape(shape, _renderer.parent()));\n            });\n        });\n        _renderer.parent().forEachShape(node, function(shape, node) {\n            node.call(shape.update);\n        });\n        node.select('.node-shape')\n            .attr({\n                stroke: _renderer.parent().nodeStroke.eval,\n                'stroke-width': _renderer.parent().nodeStrokeWidth.eval,\n                'stroke-dasharray': _renderer.parent().nodeStrokeDashArray.eval,\n                fill: compose(_renderer.parent().nodeFillScale() || identity, _renderer.parent().nodeFill.eval)\n            });\n        return _renderer;\n    };\n    _renderer.redrawEdge = _renderer._updateEdge = function(edge, edgeArrows) {\n        edge\n            .attr('stroke', _renderer.parent().edgeStroke.eval)\n            .attr('stroke-width', _renderer.parent().edgeStrokeWidth.eval)\n            .attr('stroke-dasharray', _renderer.parent().edgeStrokeDashArray.eval);\n        edgeArrows\n            .attr('marker-end', function(e) {\n                var name = _renderer.parent().edgeArrowhead.eval(e),\n                    id = edgeArrow(_renderer.parent(), _renderer.parent().arrows(), e, 'head', name);\n                return id ? 'url(#' + id + ')' : null;\n            })\n            .attr('marker-start', function(e) {\n                var name = _renderer.parent().edgeArrowtail.eval(e),\n                    arrow_id = edgeArrow(_renderer.parent(), _renderer.parent().arrows(), e, 'tail', name);\n                return name ? 'url(#' + arrow_id + ')' : null;\n            })\n            .each(function(e) {\n                var fillEdgeStroke = _renderer.parent().edgeStroke.eval(e);\n                _renderer.selectAll('#' + _renderer.parent().arrowId(e, 'head'))\n                    .attr('fill', _renderer.parent().edgeStroke.eval(e));\n                _renderer.selectAll('#' + _renderer.parent().arrowId(e, 'tail'))\n                    .attr('fill', _renderer.parent().edgeStroke.eval(e));\n            });\n    };\n\n    _renderer.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    _renderer.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    _renderer.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    _renderer.resize = function(w, h) {\n        if(_svg) {\n            _svg.attr('width', w || (_renderer.parent().width_is_automatic() ? '100%' : _renderer.parent().width()))\n                .attr('height', h || (_renderer.parent().height_is_automatic() ? '100%' : _renderer.parent().height()));\n        }\n        return _renderer;\n    };\n\n    _renderer.rezoom = function(oldWidth, oldHeight, newWidth, newHeight) {\n        var scale = _zoom.scale(), translate = _zoom.translate();\n        _zoom.scale(1).translate([0,0]);\n        var xDomain = _renderer.parent().x().domain(), yDomain = _renderer.parent().y().domain();\n        _renderer.parent().x()\n            .domain([xDomain[0], xDomain[0] + (xDomain[1] - xDomain[0])*newWidth/oldWidth])\n            .range([0, newWidth]);\n        _renderer.parent().y()\n            .domain([yDomain[0], yDomain[0] + (yDomain[1] - yDomain[0])*newHeight/oldHeight])\n            .range([0, newHeight]);\n        _zoom\n            .x(_renderer.parent().x()).y(_renderer.parent().y())\n            .translate(translate).scale(scale);\n    };\n\n    _renderer.globalTransform = function(pos, scale, animate) {\n        // _translate = pos;\n        // _scale = scale;\n        var obj = _g;\n        if(animate)\n            obj = _g.transition().duration(_renderer.parent().zoomDuration());\n        obj.attr('transform', 'translate(' + pos + ')' + ' scale(' + scale + ')');\n    };\n\n    _renderer.translate = function(_) {\n        if(!arguments.length)\n            return _zoom.translate();\n        _zoom.translate(_);\n        return this;\n    };\n\n    _renderer.scale = function(_) {\n        if(!arguments.length)\n            return _zoom ? _zoom.scale() : 1;\n        _zoom.scale(_);\n        return this;\n    };\n\n    // argh\n    _renderer.commitTranslateScale = function() {\n        _zoom.event(_svg);\n    };\n\n    _renderer.zoom = function(_) {\n        if(!arguments.length)\n            return _zoom;\n        _zoom = _; // is this a good idea?\n        return _renderer;\n    };\n\n    _renderer.startRedraw = function(dispatch, wnodes, wedges) {\n        // create edge SVG elements\n        var edge = _edgeLayer.selectAll('.edge')\n                .data(wedges, _renderer.parent().edgeKey.eval);\n        var edgeEnter = edge.enter().append('svg:path')\n                .attr({\n                    class: 'edge',\n                    id: _renderer.parent().edgeId,\n                    opacity: 0\n                })\n            .each(function(e) {\n                e.deleted = false;\n            });\n        edge.exit().each(function(e) {\n            e.deleted = true;\n        }).transition()\n            .duration(_renderer.parent().stagedDuration())\n            .delay(_renderer.parent().deleteDelay())\n            .attr('opacity', 0)\n            .remove();\n\n        var edgeArrows = _edgeLayer.selectAll('.edge-arrows')\n                .data(wedges, _renderer.parent().edgeKey.eval);\n        var edgeArrowsEnter = edgeArrows.enter().append('svg:path')\n                .attr({\n                    class: 'edge-arrows',\n                    id: function(d) {\n                        return _renderer.parent().edgeId(d) + '-arrows';\n                    },\n                    fill: 'none',\n                    opacity: 0\n                });\n        edgeArrows.exit().transition()\n            .duration(_renderer.parent().stagedDuration())\n            .delay(_renderer.parent().deleteDelay())\n            .attr('opacity', 0)\n            .remove()\n            .each('end.delarrow', function(e) {\n                edgeArrow(_renderer.parent(), _renderer.parent().arrows(), e, 'head', null);\n                edgeArrow(_renderer.parent(), _renderer.parent().arrows(), e, 'tail', null);\n            });\n\n        if(_renderer.parent().edgeSort()) {\n            edge.sort(function(a, b) {\n                var as = _renderer.parent().edgeSort.eval(a), bs = _renderer.parent().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, _renderer.parent().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.diagram', function(e) {\n                _renderer.select('#' + _renderer.parent().edgeId(e) + '-label')\n                    .attr('visibility', 'visible');\n            })\n            .on('mouseout.diagram', function(e) {\n                _renderer.select('#' + _renderer.parent().edgeId(e) + '-label')\n                    .attr('visibility', 'hidden');\n            });\n        edgeHover.exit().remove();\n\n        var edgeLabels = _edgeLayer.selectAll('g.edge-label-wrapper')\n            .data(wedges, _renderer.parent().edgeKey.eval);\n        var edgeLabelsEnter = edgeLabels.enter()\n            .append('g')\n              .attr('class', 'edge-label-wrapper')\n              .attr('visibility', 'hidden')\n              .attr('id', function(e) {\n                  return _renderer.parent().edgeId(e) + '-label';\n              });\n        var textPaths = _defs.selectAll('path.edge-label-path')\n                .data(wedges, _renderer.parent().textpathId);\n        var textPathsEnter = textPaths.enter()\n                .append('svg:path').attr({\n                    class: 'edge-label-path',\n                    id: _renderer.parent().textpathId\n                });\n        edgeLabels.exit().transition()\n            .duration(_renderer.parent().stagedDuration())\n            .delay(_renderer.parent().deleteDelay())\n            .attr('opacity', 0).remove();\n\n        // create node SVG elements\n        var node = _nodeLayer.selectAll('.node')\n                .data(wnodes, _renderer.parent().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        _renderer.renderNode(nodeEnter);\n\n        node.exit().each(function(n) {\n            n.deleted = true;\n        }).transition()\n            .duration(_renderer.parent().stagedDuration())\n            .delay(_renderer.parent().deleteDelay())\n            .attr('opacity', 0)\n            .remove();\n\n        dispatch.drawn(node, edge, edgeHover);\n\n        var drawState = {\n            node: node,\n            nodeEnter: nodeEnter,\n            edge: edge,\n            edgeEnter: edgeEnter,\n            edgeHover: edgeHover,\n            edgeHoverEnter: edgeHoverEnter,\n            edgeLabels: edgeLabels,\n            edgeLabelsEnter: edgeLabelsEnter,\n            edgeArrows: edgeArrows,\n            edgeArrowsEnter: edgeArrowsEnter,\n            textPaths: textPaths,\n            textPathsEnter: textPathsEnter\n        };\n\n        _refresh(drawState);\n\n        return drawState;\n    };\n\n    function _refresh(drawState) {\n        _renderer.redrawEdge(drawState.edge, drawState.edgeArrows);\n        _renderer.redrawNode(drawState.node);\n        _renderer.drawPorts(drawState);\n    }\n\n    _renderer.refresh = function(node, edge, edgeHover, edgeLabels, textPaths) {\n        if(_animating)\n            return this; // but what about changed attributes?\n        node = node || _renderer.selectAllNodes();\n        edge = edge || _renderer.selectAllEdges();\n        var edgeArrows = _renderer.selectAllEdges('.edge-arrows');\n        _refresh({node: node, edge: edge, edgeArrows: edgeArrows});\n\n        edgeHover = edgeHover || _renderer.selectAllEdges('.edge-hover');\n        edgeLabels = edgeLabels || _renderer.selectAllEdges('.edge-label-wrapper');\n        textPaths = textPaths || _renderer.selectAllDefs('path.edge-label-path');\n        var nullSel = d3.select(null); // no enters\n        draw(node, nullSel, edge, nullSel, edgeHover, nullSel, edgeLabels, nullSel, edgeArrows, nullSel, textPaths, nullSel, false);\n        return this;\n    };\n\n    _renderer.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            _renderer.parent().calcEdgePath(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n            if(_renderer.parent().edgeArrowhead.eval(e))\n                _renderer.select('#' + _renderer.parent().arrowId(e, 'head'))\n                .attr('orient', function() {\n                    return e.pos.new.orienthead;\n                });\n            if(_renderer.parent().edgeArrowtail.eval(e))\n                _renderer.select('#' + _renderer.parent().arrowId(e, 'tail'))\n                .attr('orient', function() {\n                    return e.pos.new.orienttail;\n                });\n        })\n            .attr('d', generate_edge_path('new'));\n        return this;\n    };\n\n    function generate_edge_path(age, full) {\n        var field = full ? 'full' : 'path';\n        return function(e) {\n            var path = e.pos[age][field];\n            return generate_path(path.points, path.bezDegree);\n        };\n    };\n\n    function generate_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    function with_rad(f) {\n        return function() {\n            return f.apply(this, arguments) + 'rad';\n        };\n    }\n\n    function unsurprising_orient_rad(oldorient, neworient) {\n        return with_rad(unsurprising_orient)(oldorient, neworient);\n   }\n\n    function has_source_and_target(e) {\n        return !!e.source && !!e.target;\n    }\n\n    _renderer.draw = function(drawState, animatePositions) {\n        draw(drawState.node, drawState.nodeEnter,\n             drawState.edge, drawState.edgeEnter,\n             drawState.edgeHover, drawState.edgeHoverEnter,\n             drawState.edgeLabels, drawState.edgeLabelsEnter,\n             drawState.edgeArrows, drawState.edgeArrowsEnter,\n             drawState.textPaths, drawState.textPathsEnter,\n             animatePositions);\n    };\n\n    function draw(node, nodeEnter, edge, edgeEnter, edgeHover, edgeHoverEnter,\n                  edgeLabels, edgeLabelsEnter, edgeArrows, edgeArrowsEnter,\n                  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[_renderer.parent().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(_renderer.parent().stagedDuration())\n                .delay(function(n) {\n                    return _renderer.parent().stagedDelay(nodeEntered[_renderer.parent().nodeKey.eval(n)]);\n                })\n                .attr('opacity', _renderer.parent().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 = place_arrows_on_spline(_renderer.parent(), e, e.cola.points);\n            }\n            else {\n                if(!e.pos.old)\n                    _renderer.parent().calcEdgePath(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                    _renderer.parent().calcEdgePath(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[_renderer.parent().edgeKey.eval(e)] = true;\n            })\n            .attr('d', generate_edge_path(_renderer.parent().stageTransitions() === 'modins' ? 'new' : 'old'));\n\n        edgeArrowsEnter\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 = _renderer.parent().stageTransitions() === 'modins' ? 'new' : 'old';\n                if(_renderer.parent().edgeArrowhead.eval(e))\n                    _renderer.select('#' + _renderer.parent().arrowId(e, 'head'))\n                    .attr('orient', function() {\n                        return e.pos[age].orienthead;\n                    });\n                if(_renderer.parent().edgeArrowtail.eval(e))\n                    _renderer.select('#' + _renderer.parent().arrowId(e, 'tail'))\n                    .attr('orient', function() {\n                        return e.pos[age].orienttail;\n                    });\n            })\n            .attr('d', generate_edge_path(_renderer.parent().stageTransitions() === 'modins' ? 'new' : 'old', true));\n\n        edgeArrows\n            .each(function(e) {\n                if(_renderer.parent().edgeArrowhead.eval(e))\n                    _renderer.select('#' + _renderer.parent().arrowId(e, 'head'))\n                    .attr('orient', unsurprising_orient_rad(e.pos.old.orienthead, e.pos.new.orienthead))\n                    .transition().duration(_renderer.parent().stagedDuration())\n                    .delay(_renderer.parent().stagedDelay(false))\n                    .attr('orient', function() {\n                        return e.pos.new.orienthead;\n                    });\n                if(_renderer.parent().edgeArrowtail.eval(e))\n                    _renderer.select('#' + _renderer.parent().arrowId(e, 'tail'))\n                    .attr('orient', unsurprising_orient_rad(e.pos.old.orienttail, e.pos.new.orienttail))\n                    .transition().duration(_renderer.parent().stagedDuration())\n                    .delay(_renderer.parent().stagedDelay(false))\n                    .attr('orient', function() {\n                        return e.pos.new.orienttail;\n                    });\n            });\n\n        var etrans = edge\n              .transition()\n                .duration(_renderer.parent().stagedDuration())\n                .delay(function(e) {\n                    return _renderer.parent().stagedDelay(edgeEntered[_renderer.parent().edgeKey.eval(e)]);\n                })\n                .attr('opacity', _renderer.parent().edgeOpacity.eval);\n        var arrowtrans = edgeArrows\n              .transition()\n                .duration(_renderer.parent().stagedDuration())\n                .delay(function(e) {\n                    return _renderer.parent().stagedDelay(edgeEntered[_renderer.parent().edgeKey.eval(e)]);\n                })\n                .attr('opacity', _renderer.parent().edgeOpacity.eval);\n        (animatePositions ? etrans : edge)\n            .attr('d', function(e) {\n                var when = _renderer.parent().stageTransitions() === 'insmod' &&\n                        edgeEntered[_renderer.parent().edgeKey.eval(e)] ? 'old' : 'new';\n                return generate_edge_path(when)(e);\n            });\n        (animatePositions ? arrowtrans : edgeArrows)\n            .attr('d', function(e) {\n                var when = _renderer.parent().stageTransitions() === 'insmod' &&\n                        edgeEntered[_renderer.parent().edgeKey.eval(e)] ? 'old' : 'new';\n                return generate_edge_path(when, true)(e);\n            });\n        var elabels = edgeLabels\n            .selectAll('text').data(function(e) {\n                var labels = _renderer.parent().edgeLabel.eval(e);\n                if(!labels)\n                    return [];\n                else if(typeof labels === 'string')\n                    return [labels];\n                else return labels;\n            });\n        elabels.enter()\n          .append('text')\n            .attr({\n                'class': 'edge-label',\n                'text-anchor': 'middle',\n                dy: function(_, i) {\n                    return i * _renderer.parent().edgeLabelSpacing.eval(this.parentNode) -2;\n                }\n            })\n          .append('textPath')\n            .attr('startOffset', '50%');\n        elabels\n          .select('textPath')\n            .html(function(t) { return t; })\n            .attr('opacity', function() {\n                return _renderer.parent().edgeOpacity.eval(d3.select(this.parentNode.parentNode).datum());\n            })\n            .attr('xlink:href', function(e) {\n                var id = _renderer.parent().textpathId(d3.select(this.parentNode.parentNode).datum());\n                // angular on firefox needs absolute paths for fragments\n                return window.location.href.split('#')[0] + '#' + id;\n            });\n        textPathsEnter\n            .attr('d', generate_edge_label_path(_renderer.parent().stageTransitions() === 'modins' ? 'new' : 'old'));\n        var textTrans = textPaths.transition()\n            .duration(_renderer.parent().stagedDuration())\n            .delay(function(e) {\n                return _renderer.parent().stagedDelay(edgeEntered[_renderer.parent().edgeKey.eval(e)]);\n            });\n        if(animatePositions)\n            textTrans\n            .attr('d', function(e) {\n                var when = _renderer.parent().stageTransitions() === 'insmod' &&\n                        edgeEntered[_renderer.parent().edgeKey.eval(e)] ? 'old' : 'new';\n                return generate_edge_label_path(when)(e);\n            });\n        if(_renderer.parent().stageTransitions() === 'insmod' && animatePositions) {\n            // inserted edges transition twice in insmod mode\n            if(_renderer.parent().stagedDuration() >= 50) {\n                etrans = etrans.transition()\n                    .duration(_renderer.parent().stagedDuration())\n                    .attr('d', generate_edge_path('new'));\n                textTrans = textTrans.transition()\n                    .duration(_renderer.parent().stagedDuration())\n                    .attr('d', generate_edge_label_path('new'));\n                arrowtrans.transition()\n                    .duration(_renderer.parent().stagedDuration())\n                    .attr('d', generate_edge_path('new', true));\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', generate_edge_path('new'));\n                textTrans\n                    .attr('d', generate_edge_path('new'));\n                arrowtrans\n                    .attr('d', generate_edge_path('new', true));\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(!_renderer.parent().showLayoutSteps())\n            endall([ntrans, etrans, textTrans],\n                   function() {\n                       _animating = false;\n                       _renderer.parent().layoutDone(true);\n                   });\n\n        if(animatePositions)\n            edgeHover.attr('d', generate_edge_path('new'));\n\n        edge.each(function(e) {\n            e.pos.old = e.pos.new;\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    _renderer.isRendered = function() {\n        return !!_svg;\n    };\n\n    _renderer.initializeDrawing = function () {\n        _renderer.resetSvg();\n        _g = _svg.append('g')\n            .attr('class', 'draw');\n\n        var layers = ['edge-layer', 'node-layer'];\n        if(_renderer.parent().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        return this;\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    _renderer.select = function (s) {\n        return _renderer.parent().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    _renderer.selectAll = function (s) {\n        return _renderer.parent().root() ? _renderer.parent().root().selectAll(s) : null;\n    };\n\n    _renderer.selectNodePortsOfStyle = function(node, style) {\n        return node.selectAll('g.port').filter(function(p) {\n            return _renderer.parent().portStyleName.eval(p) === style;\n        });\n    };\n\n    _renderer.drawPorts = function(drawState) {\n        var nodePorts = _renderer.parent().nodePorts();\n        if(!nodePorts)\n            return;\n        _renderer.parent().portStyle.enum().forEach(function(style) {\n            var nodePorts2 = {};\n            for(var nid in nodePorts)\n                nodePorts2[nid] = nodePorts[nid].filter(function(p) {\n                    return _renderer.parent().portStyleName.eval(p) === style;\n                });\n            var port = _renderer.selectNodePortsOfStyle(drawState.node, style);\n            _renderer.parent().portStyle(style).drawPorts(port, nodePorts2, drawState.node);\n        });\n    };\n\n    _renderer.fireTSEvent = function(dispatch, drawState) {\n        dispatch.transitionsStarted(drawState.node, drawState.edge, drawState.edgeHover);\n    };\n\n    _renderer.calculateBounds = function(drawState) {\n        if(!drawState.node.size())\n            return null;\n        return _renderer.parent().calculateBounds(drawState.node.data(), drawState.edge.data());\n    };\n\n    /**\n     * Standard dc.js\n     * {@link https://github.com/dc-js/dc.js/blob/develop/web/docs/api-latest.md#dc.baseMixin baseMixin}\n     * method. Returns the top `svg` element for this specific 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    _renderer.svg = function (_) {\n        if (!arguments.length) {\n            return _svg;\n        }\n        _svg = _;\n        return _renderer;\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    _renderer.g = function (_) {\n        if (!arguments.length) {\n            return _g;\n        }\n        _g = _;\n        return _renderer;\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. 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    _renderer.resetSvg = function () {\n        // we might be re-initialized in a div, in which case\n        // we already have an <svg> element to delete\n        var svg = _svg || _renderer.select('svg');\n        svg.remove();\n        _svg = null;\n        //_renderer.parent().x(null).y(null);\n        return generateSvg();\n    };\n\n    _renderer.addOrRemoveDef = function(id, whether, tag, onEnter) {\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        if(selEnter.size() && onEnter)\n            selEnter.call(onEnter);\n        sel.exit().remove();\n        return sel;\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 = _renderer.parent().root().append('svg');\n        _renderer.resize();\n\n        _defs = _svg.append('svg:defs');\n\n        _zoom = d3.behavior.zoom()\n            .on('zoom.diagram', _renderer.parent().doZoom)\n            .x(_renderer.parent().x()).y(_renderer.parent().y())\n            .scaleExtent(_renderer.parent().zoomExtent());\n        if(_renderer.parent().mouseZoomable()) {\n            var mod, mods;\n            var brush = _renderer.parent().child('brush');\n            if((mod = _renderer.parent().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-' + _renderer.parent().anchorName(), 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-' + _renderer.parent().anchorName(), 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    _renderer.animating = function() {\n        return _animating;\n    };\n\n    return _renderer;\n};\n\n","dc_graph.render_webgl = function() {\n    //var _svg = null, _defs = null, _g = null, _nodeLayer = null, _edgeLayer = null;\n    var _camera, _scene, _webgl_renderer;\n    var _directionalLight, _ambientLight;\n    var _controls;\n    var _sphereGeometry;\n    var _nodes = {}, _edges = {};\n    var _animating = false; // do not refresh during animations\n    var _renderer = {};\n\n    _renderer.rendererType = function() {\n        return 'webgl';\n    };\n\n    _renderer.parent = property(null);\n\n    _renderer.isRendered = function() {\n        return !!_camera;\n    };\n\n    _renderer.resize = function(w, h) {\n        return _renderer;\n    };\n\n    _renderer.rezoom = function(oldWidth, oldHeight, newWidth, newHeight) {\n        return _renderer;\n    };\n\n    _renderer.globalTransform = function(pos, scale, animate) {\n        return _renderer;\n    };\n\n    _renderer.translate = function(_) {\n        if(!arguments.length)\n            return [0,0];\n        return _renderer;\n    };\n\n    _renderer.scale = function(_) {\n        if(!arguments.length)\n            return 1;\n        return _renderer;\n    };\n\n    // argh\n    _renderer.commitTranslateScale = function() {\n    };\n\n    _renderer.initializeDrawing = function () {\n        if(_scene) // just treat it as a redraw\n            return _renderer;\n\n        _camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);\n        _camera.up = new THREE.Vector3(0, 0, 1);\n\n        _scene = new THREE.Scene();\n\n        _sphereGeometry = new THREE.SphereBufferGeometry(10, 32, 32);\n\n        _directionalLight = new THREE.DirectionalLight(0xffffff, 1);\n        _directionalLight.position.set(-1, -1, 1).normalize();\n        _scene.add(_directionalLight);\n\n        _ambientLight = new THREE.AmbientLight(0xaaaaaa);\n        _scene.add(_ambientLight);\n\n        _webgl_renderer = new THREE.WebGLRenderer({ antialias: true });\n        _webgl_renderer.setPixelRatio(window.devicePixelRatio);\n        var boundRect = _renderer.parent().root().node().getBoundingClientRect();\n        _webgl_renderer.setSize(boundRect.width, boundRect.height);\n        _renderer.parent().root().node().appendChild(_webgl_renderer.domElement);\n\n        _controls = new THREE.OrbitControls(_camera, _webgl_renderer.domElement);\n        _controls.minDistance = 300;\n        _controls.maxDistance = 1000;\n        return _renderer;\n    };\n\n    _renderer.startRedraw = function(dispatch, wnodes, wedges) {\n        wnodes.forEach(infer_shape(_renderer.parent()));\n        var rnodes = regenerate_objects(_nodes, wnodes, null, function(n) {\n            return _renderer.parent().nodeKey.eval(n);\n        }, function(rn, n) {\n            rn.wnode = n;\n        }, null, function(wnode, rnode) {\n            _scene.remove(rnode.mesh);\n            //rnode.mesh.dispose();\n            rnode.material.dispose();\n        });\n        var redges = regenerate_objects(_edges, wedges, null, function(e) {\n            return _renderer.parent().edgeKey.eval(e);\n        }, function(re, e) {\n            re.wedge = e;\n        }, null, function(wedge, redge) {\n            _scene.remove(redge.mesh);\n            //redge.mesh.dispose();\n            redge.geometry.dispose();\n            redge.material.dispose();\n        });\n        animate();\n        return {wnodes: wnodes, wedges: wedges, rnodes: rnodes, redges: redges};\n    };\n\n    function color_to_int(color) {\n        // it better be 6 byte hex RGB\n        if(color.length !== 7 || color[0] !== '#') {\n            console.warn(\"don't know how to use color \" + color);\n            color = '#888888';\n        }\n        return parseInt(color.slice(1), 16);\n    }\n    _renderer.color_to_int = color_to_int;\n\n    _renderer.draw = function(drawState, animatePositions) {\n        drawState.wedges.forEach(function(e) {\n            if(!e.pos.old)\n                _renderer.parent().calcEdgePath(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                _renderer.parent().calcEdgePath(e, 'new', e.source.cola.x, e.source.cola.y, e.target.cola.x, e.target.cola.y);\n        });\n\n        var MULT = _renderer.multiplier();\n        drawState.rnodes.forEach(function(rn) {\n            var color = _renderer.parent().nodeFill.eval(rn.wnode);\n            var add = false;\n            if(!rn.mesh) {\n                add = true;\n                if(_renderer.parent().nodeFillScale())\n                    color = _renderer.parent().nodeFillScale()(color);\n                var cint = color_to_int(color);\n                rn.material = new THREE.MeshLambertMaterial({color: cint});\n                rn.mesh = new THREE.Mesh(_sphereGeometry, rn.material);\n                rn.mesh.name = _renderer.parent().nodeKey.eval(rn.wnode);\n            }\n            rn.mesh.position.x = rn.wnode.cola.x * MULT;\n            rn.mesh.position.y = -rn.wnode.cola.y * MULT;\n            rn.mesh.position.z = rn.wnode.cola.z * MULT || 0;\n            if(add)\n                _scene.add(rn.mesh);\n        });\n\n        var xext = d3.extent(drawState.wnodes, function(n) { return n.cola.x * MULT; }),\n            yext = d3.extent(drawState.wnodes, function(n) { return -n.cola.y * MULT; }),\n            zext = d3.extent(drawState.wnodes, function(n) { return n.cola.z * MULT || 0; });\n        var cx = (xext[0] + xext[1])/2,\n            cy = (yext[0] + yext[1])/2,\n            cz = (zext[0] + zext[1])/2;\n\n        drawState.center = [cx, cy, cz];\n        drawState.extents = [xext, yext, zext];\n        _controls.target.set(cx, cy, cz);\n        _controls.update();\n\n        var vertices = [];\n        drawState.redges.forEach(function(re) {\n            if(!re.wedge.source || !re.wedge.target)\n                return;\n            var a = re.wedge.source.cola, b = re.wedge.target.cola;\n            var add = false;\n            var width = _renderer.parent().edgeStrokeWidth.eval(re.wedge);\n            if(!re.mesh) {\n                add = true;\n                var color = _renderer.parent().edgeStroke.eval(re.wedge);\n                var cint = color_to_int(color);\n                re.material = new THREE.MeshLambertMaterial({ color: cint });\n                re.curve = new THREE.LineCurve3(\n                    new THREE.Vector3(a.x*MULT, -a.y*MULT, a.z*MULT || 0),\n                    new THREE.Vector3(b.x*MULT, -b.y*MULT, b.z*MULT || 0));\n                re.geometry = new THREE.TubeBufferGeometry(re.curve, 20, width/2, 8, false);\n                re.mesh = new THREE.Mesh(re.geometry, re.material);\n                re.mesh.name = _renderer.parent().edgeKey.eval(re.wedge);\n            } else {\n                re.curve = new THREE.LineCurve3(\n                    new THREE.Vector3(a.x*MULT, -a.y*MULT, a.z*MULT || 0),\n                    new THREE.Vector3(b.x*MULT, -b.y*MULT, b.z*MULT || 0));\n                re.geometry.dispose();\n                re.geometry = new THREE.TubeBufferGeometry(re.curve, 20, width/2, 8, false);\n                re.mesh.geometry = re.geometry;\n            }\n            if(add)\n                _scene.add(re.mesh);\n        });\n        _animating = false;\n        _renderer.parent().layoutDone(true);\n        return _renderer;\n    };\n\n    function animate() {\n        window.requestAnimationFrame(animate);\n        render();\n    }\n\n    function render() {\n        _webgl_renderer.render(_scene, _camera);\n    }\n\n    _renderer.drawPorts = function(drawState) {\n        var nodePorts = _renderer.parent().nodePorts();\n        if(!nodePorts)\n            return;\n        _renderer.parent().portStyle.enum().forEach(function(style) {\n            var nodePorts2 = {};\n            for(var nid in nodePorts)\n                nodePorts2[nid] = nodePorts[nid].filter(function(p) {\n                    return _renderer.parent().portStyleName.eval(p) === style;\n                });\n            // not implemented\n            var port = _renderer.selectNodePortsOfStyle(drawState.node, style);\n            //_renderer.parent().portStyle(style).drawPorts(port, nodePorts2, drawState.node);\n        });\n    };\n\n    _renderer.fireTSEvent = function(dispatch, drawState) {\n        dispatch.transitionsStarted(_scene, drawState);\n    };\n\n    _renderer.calculateBounds = function(drawState) {\n        if(!drawState.wnodes.length)\n            return null;\n        return _renderer.parent().calculateBounds(drawState.wnodes, drawState.wedges);\n    };\n\n    _renderer.refresh = function(node, edge, edgeHover, edgeLabels, textPaths) {\n        if(_animating)\n            return _renderer; // but what about changed attributes?\n        return _renderer;\n    };\n\n    _renderer.reposition = function(node, edge) {\n        return _renderer;\n    };\n\n    function has_source_and_target(e) {\n        return !!e.source && !!e.target;\n    }\n\n    _renderer.animating = function() {\n        return _animating;\n    };\n\n    _renderer.multiplier = property(3);\n\n    return _renderer;\n};\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    {\n        name: 'manual',\n        instantiate: function() {\n            return dc_graph.manual_layout();\n        }\n    },\n    {\n        name: 'flexbox',\n        instantiate: function() {\n            return dc_graph.flexbox_layout();\n        }\n    },\n    {\n        name: 'layered',\n        instantiate: function() {\n            return dc_graph.layered_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 = {};\nvar NUMBER_RESULTS = 3;\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            var engine = worker.layouts[layoutId].getEngine();\n            if(e.data.args.length > NUMBER_RESULTS && engine.processExtraWorkerResults)\n                engine.processExtraWorkerResults.apply(engine, e.data.args.slice(NUMBER_RESULTS));\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        if(layoutEngine.propagateOptions)\n            layoutEngine.propagateOptions(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, clusters, constraints) {\n        _worker.worker.postMessage({\n            command: 'data',\n            args: {\n                layoutId: layoutEngine.layoutId(),\n                graph: graph,\n                nodes: nodes,\n                edges: edges,\n                clusters: clusters,\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', 'populateLayoutNode', 'populateLayoutEdge',\n                        'rankdir', 'ranksep'];\n    passthroughs.concat(layoutEngine.optionNames(),\n                        layoutEngine.passThru ? layoutEngine.passThru() : []).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 * modes (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// graphlib-dot seems to wrap nodes in an extra {value}\n// actually this is quite a common problem with generic libs\nfunction nvalue(n) {\n    return n.value.value ? n.value.value : n.value;\n}\n\n// apply standard accessors to a diagram in order to style it as graphviz would\n// this is a work in progress\ndc_graph.apply_graphviz_accessors = function(diagram) {\n    diagram\n        .nodeLabel(function(n) {\n            var label = nvalue(n).label;\n            if(label === undefined)\n                label = n.key;\n            return label && label.split(/\\n|\\\\n/);\n        })\n        .nodeRadius(function(n) {\n            // should do width & height instead, #25\n            return nvalue(n).radius || 25;\n        })\n        .nodeShape(function(n) { return nvalue(n).shape; })\n        .nodeFill(function(n) { return nvalue(n).fillcolor || 'white'; })\n        .nodeOpacity(function(n) {\n            // not standard gv\n            return nvalue(n).opacity || 1;\n        })\n        .nodeLabelFill(function(n) { return nvalue(n).fontcolor || 'black'; })\n        .nodeTitle(function(n) {\n            return (nvalue(n).htmltip || nvalue(n).jsontip) ? null :\n                nvalue(n).tooltip !== undefined ?\n                nvalue(n).tooltip :\n                diagram.nodeLabel()(n);\n        })\n        .nodeStrokeWidth(function(n) {\n            // it is debatable whether a point === a pixel but they are close\n            // https://graphicdesign.stackexchange.com/questions/199/point-vs-pixel-what-is-the-difference\n            var penwidth = nvalue(n).penwidth;\n            return penwidth !== undefined ? +penwidth : 1;\n        })\n        .edgeLabel(function(e) { return e.value.label ? e.value.label.split(/\\n|\\\\n/) : ''; })\n        .edgeStroke(function(e) { return e.value.color || 'black'; })\n        .edgeOpacity(function(e) {\n            // not standard gv\n            return e.value.opacity || 1;\n        })\n        .edgeArrowSize(function(e) {\n            return e.value.arrowsize || 1;\n        })\n        // need directedness to default these correctly, see #106\n        .edgeArrowhead(function(e) {\n            var head = e.value.arrowhead;\n            return head !== undefined ? head : 'vee';\n        })\n        .edgeArrowtail(function(e) {\n            var tail = e.value.arrowtail;\n            return tail !== undefined ? tail : null;\n        })\n        .edgeStrokeDashArray(function(e) {\n            switch(e.value.style) {\n            case 'dotted':\n                return [1,5];\n            }\n            return null;\n        });\n    var draw_clusters = diagram.child('draw-clusters');\n    if(draw_clusters) {\n        draw_clusters\n            .clusterStroke(function(c) {\n                return c.value.color || 'black';\n            })\n            .clusterFill(function(c) {\n                return c.value.style === 'filled' ? c.value.fillcolor || c.value.color || c.value.bgcolor : null;\n            })\n            .clusterLabel(function(c) {\n                return c.value.label;\n            });\n    }\n};\n\ndc_graph.snapshot_graphviz = function(diagram) {\n    var xDomain = diagram.x().domain(), yDomain = diagram.y().domain();\n    return {\n        nodes: diagram.nodeGroup().all().map(function(n) {\n            return diagram.getWholeNode(n.key);\n        })\n            .filter(function(x) { return x; })\n            .map(function(n) {\n                return {\n                    key: diagram.nodeKey.eval(n),\n                    label: diagram.nodeLabel.eval(n),\n                    fillcolor: diagram.nodeFillScale()(diagram.nodeFill.eval(n)),\n                    penwidth: diagram.nodeStrokeWidth.eval(n),\n                    // not supported as input, see dc.graph.js#25\n                    // width: n.cola.dcg_rx*2,\n                    // height: n.cola.dcg_ry*2,\n\n                    // not graphviz attributes\n                    // until we have w/h\n                    radius: diagram.nodeRadius.eval(n),\n                    // does not seem to exist in gv\n                    opacity: diagram.nodeOpacity.eval(n),\n                    // should be pos\n                    x: n.cola.x,\n                    y: n.cola.y\n                };\n            }),\n        edges: diagram.edgeGroup().all().map(function(e) {\n            return diagram.getWholeEdge(e.key);\n        }).map(function(e) {\n            return {\n                key: diagram.edgeKey.eval(e),\n                source: diagram.edgeSource.eval(e),\n                target: diagram.edgeTarget.eval(e),\n                color: diagram.edgeStroke.eval(e),\n                arrowsize: diagram.edgeArrowSize.eval(e),\n                opacity: diagram.edgeOpacity.eval(e),\n                // should support dir, see dc.graph.js#106\n                arrowhead: diagram.edgeArrowhead.eval(e),\n                arrowtail: diagram.edgeArrowtail.eval(e)\n            };\n        }),\n        bounds: {\n            left: xDomain[0],\n            top: yDomain[0],\n            right: xDomain[1],\n            bottom: yDomain[1]\n        }\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 _setcola_nodes;\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    var _options;\n\n    function init(options) {\n        _options = options;\n        _d3cola = cola.d3adaptor()\n            .avoidOverlaps(true)\n            .size([options.width, options.height])\n            .handleDisconnected(options.handleDisconnected);\n\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, clusters, 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.dcg_nodeParentCluster = v.dcg_nodeParentCluster;\n            v1.width = v.width;\n            v1.height = v.height;\n            v1.fixed = !!v.dcg_nodeFixed;\n            _options.nodeAttrs.forEach(function(key) {\n                v1[key] = v[key];\n            });\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            _options.edgeAttrs.forEach(function(key) {\n                e1[key] = e[key];\n            });\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 {\n                    dcg_autoGroup: true,\n                    leaves: g.array.map(function(n) { return n.index; })\n                };\n            });\n        } else if(clusters) {\n            var G = {};\n            groups = clusters.filter(function(c) {\n                return /^cluster/.test(c.dcg_clusterKey);\n            }).map(function(c, i) {\n                return G[c.dcg_clusterKey] = {\n                    dcg_clusterKey: c.dcg_clusterKey,\n                    index: i,\n                    groups: [],\n                    leaves: []\n                };\n            });\n            clusters.forEach(function(c) {\n                if(c.dcg_clusterParent && G[c.dcg_clusterParent])\n                    G[c.dcg_clusterParent].groups.push(G[c.dcg_clusterKey].index);\n            });\n            wnodes.forEach(function(n, i) {\n                if(n.dcg_nodeParentCluster && G[n.dcg_nodeParentCluster])\n                    G[n.dcg_nodeParentCluster].leaves.push(i);\n            });\n        }\n\n        function dispatchState(event) {\n            // clean up extra setcola annotations\n            wnodes.forEach(function(n) {\n                Object.keys(n).forEach(function(key) {\n                    if(/^get/.test(key) && typeof n[key] === 'function')\n                        delete n[key];\n                });\n            });\n            _dispatch[event](\n                wnodes,\n                wedges.map(function(e) {\n                    return {dcg_edgeKey: e.dcg_edgeKey};\n                }),\n                groups.filter(function(g) {\n                    return !g.dcg_autoGroup;\n                }).map(function(g) {\n                    g = Object.assign({}, g);\n                    g.bounds = {\n                        left: g.bounds.x,\n                        top: g.bounds.y,\n                        right: g.bounds.X,\n                        bottom: g.bounds.Y\n                    };\n                    return g;\n                }),\n                _setcola_nodes\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\n        if(_options.setcolaSpec && typeof setcola !== 'undefined') {\n            console.log('generating setcola constrains');\n            var setcola_result = setcola\n                .nodes(wnodes)\n                .links(wedges)\n                .constraints(_options.setcolaSpec)\n                .gap(10) //default value is 10, can be customized in setcolaSpec\n                .layout();\n\n            _setcola_nodes = setcola_result.nodes.filter(function(n) { return n._cid; });\n            _d3cola.nodes(setcola_result.nodes)\n                .links(setcola_result.links)\n                .constraints(setcola_result.constraints)\n                .groups(groups);\n        } else {\n            _d3cola.nodes(wnodes)\n                .links(wedges)\n                .constraints(constraints)\n                .groups(groups);\n        }\n\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        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            this.propagateOptions(options);\n            init(options);\n            return this;\n        },\n        data: function(graph, nodes, edges, clusters, constraints) {\n            data(nodes, edges, clusters, constraints);\n        },\n        start: function() {\n            start();\n        },\n        stop: function() {\n            stop();\n        },\n        optionNames: function() {\n            return ['handleDisconnected', 'lengthStrategy', 'baseLength', 'flowLayout',\n                    'tickSize', 'groupConnected', 'setcolaSpec', 'setcolaNodes']\n                .concat(graphviz_keys);\n        },\n        passThru: function() {\n            return ['extractNodeAttrs', 'extractEdgeAttrs'];\n        },\n        propagateOptions: function(options) {\n            if(!options.nodeAttrs)\n                options.nodeAttrs = Object.keys(engine.extractNodeAttrs());\n            if(!options.edgeAttrs)\n                options.edgeAttrs = Object.keys(engine.extractEdgeAttrs());\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        setcolaSpec: property(null),\n        setcolaNodes: function() {\n            return _setcola_nodes;\n        },\n        extractNodeAttrs: property({}), // {attr: function(node)}\n        extractEdgeAttrs: property({}),\n        processExtraWorkerResults: function(setcolaNodes) {\n            _setcola_nodes = setcolaNodes;\n        }\n    });\n    return engine;\n};\n\ndc_graph.cola_layout.scripts = ['d3.js', 'cola.js'];\ndc_graph.cola_layout.optional_scripts = ['setcola.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, compound: 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, clusters) {\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        clusters = clusters.filter(function(c) {\n            return /^cluster/.test(c.dcg_clusterKey);\n        });\n        clusters.forEach(function(c) {\n            _dagreGraph.setNode(c.dcg_clusterKey, c);\n        });\n        clusters.forEach(function(c) {\n            if(c.dcg_clusterParent)\n                _dagreGraph.setParent(c.dcg_clusterKey, c.dcg_clusterParent);\n        });\n        nodes.forEach(function(n) {\n            if(n.dcg_nodeParentCluster)\n                _dagreGraph.setParent(n.dcg_nodeKey, n.dcg_nodeParentCluster);\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                clusters.map(function(c) {\n                    var c = Object.assign({}, _dagreGraph.node(c.dcg_clusterKey));\n                    c.bounds = {\n                        left: c.x - c.width/2,\n                        top: c.y - c.height/2,\n                        right: c.x + c.width/2,\n                        bottom: c.y + c.height/2\n                    };\n                    return c;\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        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, clusters) {\n            data(nodes, edges, 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\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; i<sort.length-1; ++i) {\n                        var left = sort[i], right = sort[i+1];\n                        if(!badi) {\n                            if(right.x - left.x < best_dist(left, right)) {\n                                badi = i;\n                                badl = left.x;\n                                want = best_dist(left, right);\n                            } // else still not bad\n                        } else {\n                            want += best_dist(left, right);\n                            if(i < sort.length - 2 && right.x < badl + want)\n                                continue; // still bad\n                            else {\n                                if(badi>0)\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<limit; ++j) {\n                                    l += best_dist(sort[j-1], sort[j]);\n                                    sort[j].x = l;\n                                }\n                                badi = badl = want = null;\n                            }\n                        }\n                    }\n                });\n            }\n        });\n    }\n\n    var _nodes, _edges;\n    function data(nodes, edges) {\n        _nodes = nodes;\n        _edges = edges;\n    }\n\n    function start() {\n        _dfs(_nodes, _edges);\n        _dispatch.end(_nodes, _edges);\n    }\n\n    function stop() {\n    }\n\n    var layout = {\n        layoutAlgorithm: function() {\n            return 'tree';\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        start: function() {\n            start();\n        },\n        stop: function() {\n            stop();\n        },\n        optionNames: function() {\n            return ['nodeWidth', 'offsetX', 'offsetY', 'rowFunction', 'gapY'];\n        },\n        populateLayoutNode: function(layout, node) {\n            if(this.rowFunction())\n                layout.dcg_rank = this.rowFunction.eval(node);\n        },\n        populateLayoutEdge: function() {},\n        nodeWidth: property(function(n) { return n.width; }),\n        offsetX: property(30),\n        offsetY: property(30),\n        rowFunction: property(null),\n        gapY: property(100)\n    };\n    return layout;\n};\n\ndc_graph.tree_layout.scripts = [];\n","/**\n * `dc_graph.graphviz_layout` is an adaptor for viz.js (graphviz) layouts in dc.graph.js\n *\n * In addition to the below layout attributes, `graphviz_layout` also implements the attributes from\n * {@link dc_graph.graphviz_attrs graphviz_attrs}\n * @class graphviz_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.graphviz_layout}\n **/\ndc_graph.graphviz_layout = function(id, layout, server) {\n    var _layoutId = id || uuid();\n    var _dispatch = d3.dispatch('tick', 'start', 'end');\n    var _dotInput, _dotString;\n\n    function init(options) {\n    }\n\n    function encode_name(name) {\n        return name.replace(/^%/, '&#37;');\n    }\n    function decode_name(name) {\n        return name.replace(/^&#37;/, '%');\n    }\n    function stringize_property(prop, value) {\n        return [prop, '\"' + value + '\"'].join('=');\n    }\n    function stringize_properties(props) {\n        return '[' + props.join(', ') + ']';\n    }\n    function data(nodes, edges, clusters) {\n        if(_dotInput) {\n            _dotString = _dotInput;\n            return;\n        }\n        var lines = [];\n        var directed = layout !== 'neato';\n        lines.push((directed ? 'digraph' : 'graph') + ' g {');\n        lines.push('graph ' + stringize_properties([\n            stringize_property('nodesep', graphviz.nodesep()/72),\n            stringize_property('ranksep', graphviz.ranksep()/72),\n            stringize_property('rankdir', graphviz.rankdir())\n        ]));\n        var cluster_nodes = {};\n        nodes.forEach(function(n) {\n            var cl = n.dcg_nodeParentCluster;\n            if(cl) {\n                cluster_nodes[cl] = cluster_nodes[cl] || [];\n                cluster_nodes[cl].push(n.dcg_nodeKey);\n            }\n        });\n        var cluster_children = {}, tops = [];\n        clusters.forEach(function(c) {\n            var p = c.dcg_clusterParent;\n            if(p) {\n                cluster_children[p] = cluster_children[p] || [];\n                cluster_children[p].push(c.dcg_clusterKey);\n            } else tops.push(c.dcg_clusterKey);\n        });\n\n        function print_subgraph(i, c) {\n            var indent = ' '.repeat(i*2);\n            lines.push(indent + 'subgraph \"' + c + '\" {');\n            if(cluster_children[c])\n                cluster_children[c].forEach(print_subgraph.bind(null, i+1));\n            lines.push(indent + '  ' + cluster_nodes[c].join(' '));\n            lines.push(indent + '}');\n        }\n        tops.forEach(print_subgraph.bind(null, 1));\n\n        lines = lines.concat(nodes.map(function(v) {\n            var props = [\n                stringize_property('width', v.width/72),\n                stringize_property('height', v.height/72),\n                stringize_property('fixedsize', 'shape'),\n                stringize_property('shape', v.abstract.shape)\n            ];\n            if(v.dcg_nodeFixed)\n                props.push(stringize_property('pos', [\n                    v.dcg_nodeFixed.x,\n                    1000-v.dcg_nodeFixed.y\n                ].join(',')));\n            return '  \"' + encode_name(v.dcg_nodeKey) + '\" ' + stringize_properties(props);\n        }));\n        lines = lines.concat(edges.map(function(e) {\n            return '  \"' + encode_name(e.dcg_edgeSource) + (directed ? '\" -> \"' : '\" -- \"') +\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        if(error) {\n            console.warn(\"graphviz layout failed: \", error);\n            return;\n        }\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            if(isNaN(pos[0]) || isNaN(pos[1])) {\n                console.warn('got a NaN position from graphviz');\n                pos[0] = pos[1] = 0;\n            }\n            return {\n                dcg_nodeKey: decode_name(n.name),\n                x: +pos[0],\n                y: bb[3] - pos[1]\n            };\n        });\n        var clusters = (result.objects || []).filter(function(n) {\n            return /^cluster/.test(n.name);\n        });\n        clusters.forEach(function(c) {\n            c.dcg_clusterKey = c.name;\n\n            // gv: llx, lly, urx, ury, up-positive\n            var cbb = c.bb.split(',').map(function(s) { return +s; });\n            c.bounds = {left: cbb[0], top: bb[3] - cbb[3],\n                        right: cbb[2], bottom: bb[3] - cbb[1]};\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, clusters);\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, clusters) {\n            data(nodes, edges, clusters);\n        },\n        dotInput: function(text) {\n            _dotInput = text;\n            return this;\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        if(options.linkDistance) {\n            if(typeof options.linkDistance === 'number')\n                _simulation.linkDistance(options.linkDistance);\n            else if(options.linkDistance === 'auto')\n                _simulation.linkDistance(function(e) {\n                    return e.dcg_edgeLength;\n                });\n        }\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', 'linkDistance', '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        linkDistance: property(20),\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) {\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","/**\n * `dc_graph.flexbox_layout` lays out nodes in accordance with the\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox flexbox layout algorithm}.\n * Nodes fit into a containment hierarchy based on their keys; edges do not affect the layout but\n * are drawn from node to node.\n *\n * Since the flexbox algorithm is not ordinarily available in SVG, this class uses the\n * {@link https://npmjs.com/package/css-layout css-layout}\n * package. (It does not currently support css-layout's successor\n * {@link https://github.com/facebook/yoga yoga} but that should be straightforward to add if\n * there is interest.)\n *\n * Unlike conventional graph layout, where positions are determined based on a few attributes and\n * the topological structure of the eedges, flexbox layout is determined based on the node hierarchy\n * and a large number of attributes on the nodes. See css-layout's\n * {@link https://npmjs.com/package/css-layout#supported-attributes Supported Attributes}\n * for a list of those attributes, and see below to understand how the hierarchy is inferred from\n * node keys.\n *\n * `flexbox_layout` does not require all internal nodes to be specified. The node keys are parsed as\n * \"addresses\" or paths (arrays of strings) and the tree is built from those paths. Wherever a\n * node's path terminates is where that node's data will be applied.\n *\n * Since flexbox supports a vast number of attributes, we don't attempt to create accessors for\n * every one. Instead, any attributes in the node data are copied which match the names of flexbox\n * attributes.\n *\n * @class flexbox_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.flexbox_layout}\n **/\ndc_graph.flexbox_layout = function(id, options) {\n    var _layoutId = id || uuid();\n    options = options || {algo: 'yoga-layout'};\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 = {address: [], children: {}};\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    function ensure_inner_nodes(tree) {\n        if(!tree.node)\n            tree.node = {dcg_nodeKey: tree.address.length ? tree.address[tree.address.length-1] : null};\n        Object.values(tree.children).forEach(ensure_inner_nodes);\n    }\n    var yoga_constants = {\n        alignItems: {\n            stretch: yogaLayout.ALIGN_STRETCH,\n            'flex-start': yogaLayout.ALIGN_FLEX_START,\n            center: yogaLayout.ALIGN_CENTER,\n            'flex-end': yogaLayout.ALIGN_FLEX_END,\n            baseline: yogaLayout.ALIGN_BASELINE\n        },\n        alignSelf: {\n            stretch: yogaLayout.ALIGN_STRETCH,\n            'flex-start': yogaLayout.ALIGN_FLEX_START,\n            center: yogaLayout.ALIGN_CENTER,\n            'flex-end': yogaLayout.ALIGN_FLEX_END,\n            baseline: yogaLayout.ALIGN_BASELINE\n        },\n        alignContent: {\n            'flex-start': yogaLayout.ALIGN_FLEX_START,\n            'flex-end': yogaLayout.ALIGN_FLEX_END,\n            stretch: yogaLayout.ALIGN_STRETCH,\n            center: yogaLayout.ALIGN_CENTER,\n            'space-between': yogaLayout.ALIGN_SPACE_BETWEEN,\n            'space-around': yogaLayout.ALIGN_SPACE_AROUND\n        },\n        flexDirection: {\n            column: yogaLayout.FLEX_DIRECTION_COLUMN,\n            'column-reverse': yogaLayout.FLEX_DIRECTION_COLUMN_REVERSE,\n            row: yogaLayout.FLEX_DIRECTION_ROW,\n            'row-reverse': yogaLayout.FLEX_DIRECTION_ROW_REVERSE\n        },\n        justifyContent: {\n            'flex-start': yogaLayout.JUSTIFY_FLEX_START,\n            center: yogaLayout.JUSTIFY_CENTER,\n            'flex-end': yogaLayout.JUSTIFY_FLEX_END,\n            'space-between': yogaLayout.JUSTIFY_SPACE_BETWEEN,\n            'space-around': yogaLayout.JUSTIFY_SPACE_AROUND,\n            'space-evenly': yogaLayout.JUSTIFY_SPACE_EVENLY\n        }\n    };\n    function set_yoga_attr(flexnode, attr, value) {\n        var fname = 'set' + attr.charAt(0).toUpperCase() + attr.slice(1);\n        if(typeof flexnode[fname] !== 'function')\n            throw new Error('Could not set yoga attr \"' + attr + '\" (' + fname + ')');\n        if(yoga_constants[attr])\n            value = yoga_constants[attr][value];\n        flexnode['set' + attr.charAt(0).toUpperCase() + attr.slice(1)](value);\n    }\n    function get_yoga_attr(flexnode, attr) {\n        var fname = 'getComputed' + attr.charAt(0).toUpperCase() + attr.slice(1);\n        if(typeof flexnode[fname] !== 'function')\n            throw new Error('Could not get yoga attr \"' + attr + '\" (' + fname + ')');\n        return flexnode[fname]();\n    }\n    var internal_attrs = ['sort', 'order', 'dcg_nodeKey', 'dcg_nodeParentCluster', 'shape', 'abstract', 'rx', 'ry', 'x', 'y', 'z'],\n        skip_on_parents = ['width', 'height'];\n    function create_flextree(attrs, tree) {\n        var flexnode;\n        switch(options.algo) {\n        case 'css-layout':\n            flexnode = {name: _engine.addressToKey()(tree.address), style: {}};\n            break;\n        case 'yoga-layout':\n            flexnode = yogaLayout.Node.create();\n            break;\n        }\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            switch(options.algo) {\n            case 'css-layout':\n                flexnode.style[attr] = value;\n                break;\n            case 'yoga-layout':\n                set_yoga_attr(flexnode, attr, value);\n                break;\n            }\n        }\n        if(isParent) {\n            var 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            switch(options.algo) {\n            case 'css-layout':\n                flexnode.children = children;\n                break;\n            case 'yoga-layout':\n                children.forEach(function(child, i) {\n                    flexnode.insertChild(child, i);\n                });\n                break;\n            }\n        }\n        tree.flexnode = flexnode;\n        return flexnode;\n    }\n    function apply_layout(offset, tree) {\n        var left, top, width, height;\n        switch(options.algo) {\n        case 'css-layout':\n            if(_engine.logStuff())\n                console.log(tree.node.dcg_nodeKey + ': '+ JSON.stringify(tree.flexnode.layout));\n            left = tree.flexnode.layout.left; width = tree.flexnode.layout.width;\n            top = tree.flexnode.layout.top; height = tree.flexnode.layout.height;\n            break;\n        case 'yoga-layout':\n            left = get_yoga_attr(tree.flexnode, 'left'); width = get_yoga_attr(tree.flexnode, 'width');\n            top = get_yoga_attr(tree.flexnode, 'top'); height = get_yoga_attr(tree.flexnode, 'height');\n            break;\n        }\n        tree.node.x = offset.x + left + width/2;\n        tree.node.y = offset.y + top + 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 + left, y: offset.y + 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        ensure_inner_nodes(_tree);\n        var flexTree = create_flextree(defaults, _tree);\n        switch(options.algo) {\n        case 'css-layout':\n            flexTree.style.width = _graph.width;\n            flexTree.style.height = _graph.height;\n            break;\n        case 'yoga-layout':\n            set_yoga_attr(flexTree, 'width', _graph.width);\n            set_yoga_attr(flexTree, 'height', _graph.height);\n            break;\n        }\n        if(_engine.logStuff())\n            console.log(JSON.stringify(flexTree, null, 2));\n        switch(options.algo) {\n        case 'css-layout':\n            computeLayout(flexTree);\n            break;\n        case 'yoga-layout':\n            flexTree.calculateLayout();\n            break;\n        }\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        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        /**\n         * This function constructs a node key string from an \"address\". An address is an array of\n         * strings identifying the path from the root to the node.\n         *\n         * By default, it joins the address with commas.\n         * @method addressToKey\n         * @memberof dc_graph.flexbox_layout\n         * @instance\n         * @param {Function} [addressToKey = function(ad) { return ad.join(','); }]\n         * @return {Function}\n         * @return {dc_graph.flexbox_layout}\n         **/\n        addressToKey: property(function(ad) { return ad.join(','); }),\n        /**\n         * This function constructs an \"address\" from a node key string. An address is an array of\n         * strings identifying the path from the root to the node.\n         *\n         * By default, it splits the key by its commas.\n         * @method keyToAddress\n         * @memberof dc_graph.flexbox_layout\n         * @instance\n         * @param {Function} [keyToAddress = function(nid) { return nid.split(','); }]\n         * @return {Function}\n         * @return {dc_graph.flexbox_layout}\n         **/\n        keyToAddress: property(function(nid) { return nid.split(','); }),\n        yogaConstants: function() {\n            // in case any are missing, they can be added\n            // please file PRs for any missing constants!\n            return yoga_constants;\n        },\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 'manual';\n        },\n        layoutId: function() {\n            return _layoutId;\n        },\n        supportsWebworker: function() {\n            return false;\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","/**\n * `dc_graph.layered_layout` produces 3D layered layouts, utilizing another layout\n * that supports fixed nodes and position hints for the layers\n * @class layered_layout\n * @memberof dc_graph\n * @param {String} [id=uuid()] - Unique identifier\n * @return {dc_graph.layered_layout}\n **/\ndc_graph.layered_layout = function(id) {\n    var _layoutId = id || uuid();\n    var _dispatch = d3.dispatch('tick', 'start', 'end');\n    var _supergraph, _subgraphs;\n    var _layers;\n    var _options = null;\n\n    function init(options) {\n        _options = options;\n\n    }\n\n    function data(nodes, edges, constraints) {\n        _supergraph = dc_graph.supergraph({nodes: nodes, edges: edges}, {\n            nodeKey: function(n) { return n.dcg_nodeKey; },\n            edgeKey: function(n) { return n.dcg_edgeKey; },\n            nodeValue: function(n) { return n; },\n            edgeValue: function(e) { return e; },\n            edgeSource: function(e) { return e.dcg_edgeSource; },\n            edgeTarget: function(e) { return e.dcg_edgeTarget; }\n        });\n\n        // every node belongs natively in one rank\n        var nranks = _supergraph.nodes().reduce(function(p, n) {\n            var rank = engine.layerAccessor()(n.value());\n            p[rank] = p[rank] || [];\n            p[rank].push(n);\n            return p;\n        }, {});\n        var eranks = Object.keys(nranks).reduce(function(p, r) {\n            p[r] = [];\n            return p;\n        }, {});\n\n        // nodes are shadowed into any layers to which they are adjacent\n        // edges are induced from the native&shadow nodes in each layer\n        _supergraph.edges().forEach(function(e) {\n            var srank = engine.layerAccessor()(e.source().value()),\n                trank = engine.layerAccessor()(e.target().value());\n            if(srank == trank) {\n                eranks[srank].push(e);\n                return;\n            }\n            nranks[trank].push(e.source());\n            eranks[trank].push(e);\n            nranks[srank].push(e.target());\n            eranks[srank].push(e);\n        });\n\n        // produce a subgraph for each layer\n        _subgraphs = Object.keys(nranks).reduce(function(p, r) {\n            p[r] = _supergraph.subgraph(\n                nranks[r].map(function(n) { return n.key(); }),\n                eranks[r].map(function(e) { return e.key(); }));\n            return p;\n        }, {});\n\n        // start from the most populous layer\n        var max = null;\n        Object.keys(nranks).forEach(function(r) {\n            if(max === null ||\n               _subgraphs[r].nodes().length > _subgraphs[max].nodes().length)\n                max = +r;\n        });\n\n        // travel up and down from there, each time fixing the nodes from the last layer\n        var ranks = Object.keys(nranks).map(function(r) { return +r; }).sort();\n        _layers = ranks.map(function(r) {\n            return {\n                rank: r,\n                z: -r * engine.layerSeparationZ()\n            };\n        });\n        var mi = ranks.indexOf(max);\n        var ups = ranks.slice(mi+1), downs = ranks.slice(0, mi).reverse();\n        layout_layer(max, -1).then(function(layout) {\n            Promise.all([\n                layout_layers(layout, max, ups),\n                layout_layers(layout, max, downs)\n            ]).then(function() {\n                _dispatch.end(\n                    _supergraph.nodes().map(function(n) { return n.value(); }),\n                    _supergraph.edges().map(function(e) { return e.value(); }));\n            });\n        });\n    }\n\n    function layout_layers(layout, last, layers) {\n        if(layers.length === 0)\n            return Promise.resolve(layout);\n        var curr = layers.shift();\n        return layout_layer(curr, last).then(function(layout) {\n            return layout_layers(layout, curr, layers);\n        });\n    }\n\n    function layout_layer(r, last) {\n        _subgraphs[r].nodes().forEach(function(n) {\n            if(engine.layerAccessor()(n.value()) !== r &&\n               n.value().x !== undefined &&\n               n.value().y !== undefined)\n                n.value().dcg_nodeFixed = {\n                    x: n.value().x,\n                    y: n.value().y\n                };\n            else n.value().dcg_nodeFixed = null;\n        });\n        var subengine = engine.engineFactory()();\n        subengine.init(_options);\n        subengine.data(\n            {},\n            _subgraphs[r].nodes().map(function(n) {\n                return n.value();\n            }),\n            _subgraphs[r].edges().map(function(e) {\n                return e.value();\n            }));\n        return promise_layout(r, subengine);\n    }\n\n    function promise_layout(r, subengine) {\n        // stopgap - engine.start() should return a promise\n        return new Promise(function(resolve, reject) {\n            subengine.on('end', function(nodes, edges) {\n                resolve({nodes: nodes, edges: edges});\n            });\n            subengine.start();\n        }).then(function(layout) {\n            // copy positions back into the subgraph (and hence supergraph)\n            layout.nodes.forEach(function(ln) {\n                var n = _subgraphs[r].node(ln.dcg_nodeKey);\n                // do not copy positions for shadow nodes\n                if(engine.layerAccessor()(n.value()) !== r)\n                    return;\n                n.value().x = ln.x;\n                n.value().y = ln.y;\n                n.value().z = -r * engine.layerSeparationZ(); // lowest rank at top\n            });\n            return layout;\n        });\n    }\n\n    function start() {\n        _dispatch.start();\n    }\n\n    function stop() {\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 'layered';\n        },\n        layoutId: function() {\n            return _layoutId;\n        },\n        supportsWebworker: function() {\n            return false;\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 []\n                .concat(graphviz_keys);\n        },\n        engineFactory: property(null),\n        layerAccessor: property(null),\n        layerSeparationZ: property(50),\n        layers: function() {\n            return _layers;\n        },\n        populateLayoutNode: function() {},\n        populateLayoutEdge: function() {},\n        extractNodeAttrs: property({}), // {attr: function(node)}\n        extractEdgeAttrs: property({})\n    });\n    return engine;\n};\n\n\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 > _mode.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 = _mode.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 > _mode.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 = _mode.patience();\n                    maxdist = 0;\n                }\n            }\n        }\n    };\n    var _mode = {\n        parent: property(null).react(function(p) {\n            if(p) {\n                p.on('receivedLayout.place-ports', received_layout);\n            } else if(_mode.parent())\n                _mode.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 _mode;\n};\n","dc_graph.grid = function() {\n    var _gridLayer = null;\n    var _translate, _scale, _xDomain, _yDomain;\n\n    function draw(diagram, node, edge, ehover) {\n        //infer_and_draw(diagram);\n    }\n\n    function remove(diagram, node, edge, ehover) {\n        if(_gridLayer)\n            _gridLayer.remove();\n    }\n\n    function draw(diagram) {\n        _gridLayer = diagram.g().selectAll('g.grid-layer').data([0]);\n        _gridLayer.enter().append('g').attr('class', 'grid-layer');\n        var ofs = _mode.wholeOnLines() ? 0 : 0.5;\n        var vline_data = _scale >= _mode.threshold() ? d3.range(Math.floor(_xDomain[0]), Math.ceil(_xDomain[1]) + 1) : [];\n        var vlines = _gridLayer.selectAll('line.grid-line.vertical')\n            .data(vline_data, function(d) { return d - ofs; });\n        vlines.exit().remove();\n        vlines.enter().append('line')\n            .attr({\n                class: 'grid-line vertical',\n                x1: function(d) { return d - ofs; },\n                x2: function(d) { return d - ofs; }\n            });\n        vlines.attr({\n            'stroke-width': 1/_scale,\n            y1: _yDomain[0],\n            y2: _yDomain[1]\n        });\n        var hline_data = _scale >= _mode.threshold() ? d3.range(Math.floor(_yDomain[0]), Math.ceil(_yDomain[1]) + 1) : [];\n        var hlines = _gridLayer.selectAll('line.grid-line.horizontal')\n            .data(hline_data, function(d) { return d - ofs; });\n        hlines.exit().remove();\n        hlines.enter().append('line')\n            .attr({\n                class: 'grid-line horizontal',\n                y1: function(d) { return d - ofs; },\n                y2: function(d) { return d - ofs; }\n            });\n        hlines.attr({\n            'stroke-width': 1/_scale,\n            x1: _xDomain[0],\n            x2: _xDomain[1]\n        });\n    }\n\n    function on_zoom(translate, scale, xDomain, yDomain) {\n        _translate = translate;\n        _scale = scale;\n        _xDomain = xDomain,\n        _yDomain = yDomain;\n        draw(_mode.parent());\n    }\n\n    function infer_and_draw(diagram) {\n        _translate = diagram.translate();\n        _scale = diagram.scale();\n        _xDomain = diagram.x().domain();\n        _yDomain = diagram.y().domain();\n        draw(diagram);\n    }\n\n    var _mode = dc_graph.mode('highlight-paths', {\n        draw: draw,\n        remove: remove,\n        parent: function(p) {\n            if(p) {\n                p.on('zoomed.grid', on_zoom);\n                infer_and_draw(p);\n            }\n        }\n    });\n\n    _mode.threshold = property(4);\n    _mode.wholeOnLines = property(true);\n\n    return _mode;\n};\n\n\n","dc_graph.annotate_layers = function() {\n    // svg-specific\n    var _drawLayer;\n    // wegl-specific\n    var _planes = [];\n    var _planeGeometry;\n    var _mode = dc_graph.mode('annotate-layers', {\n        laterDraw: true,\n        renderers: ['svg', 'webgl'],\n        draw: draw,\n        remove: remove\n    });\n    function draw(diagram) {\n        var rendererType = _mode.parent().renderer().rendererType();\n        var engine = _mode.parent().layoutEngine();\n        if(rendererType === 'svg') {\n            if(engine.layoutAlgorithm() === 'cola' &&\n               engine.setcolaSpec() && engine.setcolaNodes()) {\n                _drawLayer = _mode.parent().select('g.draw').selectAll('g.divider-layer').data([0]);\n                _drawLayer.enter().append('g').attr('class', 'divider-layer');\n                var boundary_nodes = engine.setcolaNodes().filter(function(n) {\n                    return /^sort_order_boundary/.test(n.name);\n                });\n                var lines = _drawLayer.selectAll('line.divider').data(boundary_nodes);\n                lines.exit().remove();\n                lines.enter().append('line')\n                    .attr('class', 'divider');\n                lines.attr({\n                    stroke: _mode.stroke(),\n                    'stroke-width': _mode.strokeWidth(),\n                    'stroke-dasharray': _mode.strokeDashArray(),\n                    x1: -5000,\n                    y1: function(n) {\n                        return n.y;\n                    },\n                    x2: 5000,\n                    y2:  function(n) {\n                        return n.y;\n                    }\n                });\n            }\n        } else if(rendererType === 'webgl') {\n            var MULT = _mode.parent().renderer().multiplier();\n            var scene = arguments[1], drawState = arguments[2];\n            if(engine.layoutAlgorithm() === 'layered' && engine.layers()) {\n                var width = drawState.extents[0][1] - drawState.extents[0][0] + _mode.planePadding()*MULT*2,\n                    height = drawState.extents[1][1] - drawState.extents[1][0] + _mode.planePadding()*MULT*2;\n                var delGeom;\n                var shape = new THREE.Shape();\n                shape.moveTo(0, 0);\n                shape.lineTo(0, height);\n                shape.lineTo(width, height);\n                shape.lineTo(width, 0);\n                shape.lineTo(0, 0);\n                if(_planeGeometry)\n                    delGeom = _planeGeometry;\n                _planeGeometry = new THREE.ShapeBufferGeometry(shape);\n\n                var layers = engine.layers();\n                if(layers.length < _planes.length) {\n                    for(var i = layers.length; i < _planes.length; ++i)\n                        scene.remove(_planes[i].mesh);\n                    _planes = _planes.slice(0, layers.length);\n                }\n                layers.forEach(function(layer, i) {\n                    if(!_planes[i])\n                        _planes[i] = Object.assign({}, layer);\n                    if(_planes[i].mesh)\n                        scene.remove(_planes[i].mesh);\n                    var mesh = _planes[i].mesh = new THREE.Mesh(_planeGeometry, new THREE.MeshStandardMaterial({\n                        opacity: _mode.planeOpacity(),\n                        transparent: true,\n                        color: _mode.parent().renderer().color_to_int(_mode.planeColor()),\n                        side: THREE.DoubleSide\n                    }));\n                    mesh.position.set(drawState.extents[0][0] - _mode.planePadding()*MULT,\n                                      drawState.extents[1][0] - _mode.planePadding()*MULT,\n                                      layer.z * MULT);\n                    scene.add(mesh);\n                });\n                if(delGeom)\n                    delGeom.dispose();\n            }\n        } else throw new Error(\"annotate_layers doesn't know how to work with renderer \" + rendererType);\n    }\n    function remove() {\n        if(_drawLayer)\n            _drawLayer.remove();\n    }\n\n    // line properties for svg\n    _mode.stroke = property('black');\n    _mode.strokeWidth = property(2);\n    _mode.strokeDashArray = property([5,5]);\n\n    // plane properties\n    _mode.planePadding = property(5);\n    _mode.planeOpacity = property(0.2);\n    _mode.planeColor = property('#ffffdd');\n    return _mode;\n};\n","dc_graph.troubleshoot = function() {\n    var _debugLayer = null;\n    var _translate, _scale = 1, _xDomain, _yDomain;\n\n    function draw(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 - _mode.xhairWidth()/2) + ',' + c.y + ' h' + _mode.xhairWidth() +\n                    ' M' + c.x + ',' + (c.y - _mode.xhairHeight()/2) + ' v' + _mode.xhairHeight();\n            },\n            opacity: _mode.xhairOpacity() !== null ? _mode.xhairOpacity() : _mode.opacity(),\n            stroke: _mode.xhairColor(),\n            'stroke-width': 1/_scale\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', _mode.boundsColor());\n\n        var textbounds = node.data().map(function(n) {\n            if(!n.bbox || (!n.bbox.width && !n.bbox.height))\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', _mode.boundsColor());\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', _mode.boundsColor());\n\n        diagram.addOrRemoveDef('debug-orient-marker-head',\n                               true,\n                               'svg:marker',\n                               orient_marker.bind(null, _mode.arrowHeadColor()));\n        diagram.addOrRemoveDef('debug-orient-marker-tail',\n                               true,\n                               'svg:marker',\n                               orient_marker.bind(null, _mode.arrowTailColor()));\n        var heads = _mode.arrowLength() ? edge.data().map(function(e) {\n            return {pos: e.pos.new.path.points[e.pos.new.path.points.length-1], orient: e.pos.new.orienthead};\n        }) : [];\n        var headOrients = _debugLayer.selectAll('line.heads').data(heads);\n        draw_arrow_orient(headOrients, 'heads', _mode.arrowHeadColor(), '#debug-orient-marker-head');\n\n        var tails = _mode.arrowLength() ? edge.data().map(function(e) {\n            return {pos: e.pos.new.path.points[0], orient: e.pos.new.orienttail};\n        }) : [];\n        var tailOrients = _debugLayer.selectAll('line.tails').data(tails);\n        draw_arrow_orient(tailOrients, 'tails', _mode.arrowTailColor(), '#debug-orient-marker-tail');\n\n        var headpts = Array.prototype.concat.apply([], edge.data().map(function(e) {\n            var arrowSize = diagram.edgeArrowSize.eval(e);\n            return edge_arrow_points(\n                diagram.arrows(),\n                diagram.edgeArrowhead.eval(e),\n                arrowSize,\n                diagram.edgeStrokeWidth.eval(e) / arrowSize,\n                unrad(e.pos.new.orienthead),\n                e.pos.new.full.points[e.pos.new.full.points.length-1],\n                diagram.nodeStrokeWidth.eval(e.target)\n            );\n        }));\n        var hp = _debugLayer.selectAll('path.head-point').data(headpts);\n        draw_x(hp, 'head-point', _mode.arrowHeadColor());\n\n        var tailpts = Array.prototype.concat.apply([], edge.data().map(function(e) {\n            var arrowSize = diagram.edgeArrowSize.eval(e);\n            return edge_arrow_points(\n                diagram.arrows(),\n                diagram.edgeArrowtail.eval(e),\n                arrowSize,\n                diagram.edgeStrokeWidth.eval(e) / arrowSize,\n                unrad(e.pos.new.orienttail),\n                e.pos.new.full.points[0],\n                diagram.nodeStrokeWidth.eval(e.source)\n            );\n        }));\n        var tp = _debugLayer.selectAll('path.tail-point').data(tailpts);\n        draw_x(tp, 'tail-point', _mode.arrowTailColor());\n\n        var domain = _debugLayer.selectAll('rect.domain').data([0]);\n        domain.enter().append('rect');\n        var xd = _mode.parent().x().domain(), yd = _mode.parent().y().domain();\n        domain.attr({\n            class: 'domain',\n            fill: 'none',\n            opacity: _mode.domainOpacity(),\n            stroke: _mode.domainColor(),\n            'stroke-width': _mode.domainStrokeWidth()/_scale,\n            x: xd[0],\n            y: yd[0],\n            width: xd[1] - xd[0],\n            height: yd[1] - yd[0]\n        });\n    }\n    function on_zoom(translate, scale, xDomain, yDomain) {\n        _translate = translate;\n        _scale = scale;\n        _xDomain = xDomain;\n        _yDomain = yDomain;\n        draw(_mode.parent(), _mode.parent().selectAllNodes(), _mode.parent().selectAllEdges());\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, _mode.boundsWidth(), _mode.boundsHeight()),\n            bound_tick(bounds.right, bounds.top, -_mode.boundsWidth(), _mode.boundsHeight()),\n            bound_tick(bounds.right, bounds.bottom, -_mode.boundsWidth(), -_mode.boundsHeight()),\n            bound_tick(bounds.left, bounds.bottom, _mode.boundsWidth(), -_mode.boundsHeight()),\n        ].join(' ');\n    }\n    function draw_corners(binding, classname, color) {\n        binding.exit().remove();\n        binding.enter().append('path').attr('class', classname);\n        binding.attr({\n            d: corners,\n            opacity: _mode.boundsOpacity() !== null ? _mode.boundsOpacity() : _mode.opacity(),\n            stroke: color,\n            'stroke-width': 1/_scale,\n            fill: 'none'\n        });\n    }\n        function unrad(orient) {\n            return +orient.replace('rad','');\n        }\n    function draw_arrow_orient(binding, classname, color, markerUrl) {\n        binding.exit().remove();\n        binding.enter().append('line').attr('class', classname);\n        binding.attr({\n            x1: function(d) { return d.pos.x; },\n            y1: function(d) { return d.pos.y; },\n            x2: function(d) { return d.pos.x - Math.cos(unrad(d.orient))*_mode.arrowLength(); },\n            y2: function(d) { return d.pos.y - Math.sin(unrad(d.orient))*_mode.arrowLength(); },\n            stroke: color,\n            'stroke-width': _mode.arrowStrokeWidth()/_scale,\n            opacity: _mode.arrowOpacity() !== null ? _mode.arrowOpacity() : _mode.opacity(),\n            'marker-end': 'url(' + markerUrl + ')'\n        });\n    }\n    function orient_marker(color, markerEnter) {\n        markerEnter\n            .attr({\n                viewBox: '0 -3 3 6',\n                refX: 3,\n                refY: 0,\n                orient: 'auto'\n            });\n        markerEnter.append('path')\n            .attr('stroke', color)\n            .attr('fill', 'none')\n            .attr('d', 'M0,3 L3,0 L0,-3');\n    }\n    function edge_arrow_points(arrows, defn, arrowSize, stemWidth, orient, endp, strokeWidth) {\n        var parts = arrow_parts(arrows, defn),\n            offsets = arrow_offsets(parts, stemWidth),\n            xunit = [Math.cos(orient), Math.sin(orient)];\n        endp = [endp.x, endp.y];\n        if(!parts.length)\n            return [[endp[0] - xunit[0]*strokeWidth/2,\n                     endp[1] - xunit[1]*strokeWidth/2]];\n        var globofs = add_points(\n            [-strokeWidth/arrowSize/2,0],\n            mult_point(front_ref(parts[0].frontRef), -1));\n        var pts = offsets.map(function(ofs, i) {\n            return mult_point([\n                globofs,\n                front_ref(parts[i].frontRef),\n                ofs.offset\n            ].reduce(add_points), arrowSize);\n        });\n        pts.push(mult_point([\n            globofs,\n            back_ref(parts[parts.length-1].backRef),\n            offsets[parts.length-1].offset\n        ].reduce(add_points), arrowSize));\n        return pts.map(function(p) {\n            return add_points(\n                endp,\n                [p[0]*xunit[0] - p[1]*xunit[1], p[0]*xunit[1] + p[1]*xunit[0]]\n            );\n        });\n    }\n\n\n    function draw_x(binding, classname, color) {\n        var xw = _mode.xWidth()/2, xh = _mode.xHeight()/2;\n        binding.exit().remove();\n        binding.enter().append('path').attr('class', classname);\n        binding.attr({\n            d: function(pos) {\n                return [[[-xw,-xh],[xw,xh]], [[xw,-xh], [-xw,xh]]].map(function(seg) {\n                    return 'M' + seg.map(function(p) {\n                        return (pos[0] + p[0]) + ',' + (pos[1] + p[1]);\n                    }).join(' L');\n                }).join(' ');\n            },\n            'stroke-width': 2/_scale,\n            stroke: color,\n            opacity: _mode.xOpacity()\n        });\n    }\n    function remove(diagram, node, edge, ehover) {\n        if(_debugLayer)\n            _debugLayer.remove();\n    }\n\n    var _mode = dc_graph.mode('highlight-paths', {\n        laterDraw: true,\n        draw: draw,\n        remove: remove,\n        parent: function(p) {\n            if(p) {\n                _translate = p.translate();\n                _scale = p.scale();\n                p.on('zoomed.troubleshoot', on_zoom);\n            }\n            else if(_mode.parent())\n                _mode.parent().on('zoomed.troubleshoot', null);\n        }\n    });\n    _mode.opacity = property(0.75);\n\n    _mode.xhairOpacity = property(null);\n    _mode.xhairWidth = property(10);\n    _mode.xhairHeight = property(10);\n    _mode.xhairColor = property('blue');\n\n    _mode.boundsOpacity = property(null);\n    _mode.boundsWidth = property(10);\n    _mode.boundsHeight = property(10);\n    _mode.boundsColor = property('green');\n\n    _mode.arrowOpacity = property(null);\n    _mode.arrowStrokeWidth = property(3);\n    _mode.arrowColor = _mode.arrowHeadColor = property('darkorange');\n    _mode.arrowTailColor = property('red');\n    _mode.arrowLength = property(100);\n\n    _mode.xWidth = property(1);\n    _mode.xHeight = property(1);\n    _mode.xOpacity = property(0.8);\n\n    _mode.domainOpacity = property(0.6);\n    _mode.domainColor = property('darkorange');\n    _mode.domainStrokeWidth = property(4);\n\n    return _mode;\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 = _mode.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(console, err);\n            });\n        }\n        else\n            console.log('validation of ' + title + ' succeeded with ' + count_text() + '.');\n    }\n    var _mode = {\n        parent: property(null).react(function(p) {\n            if(p)\n                p.on('data.validate', validate);\n            else\n                _mode.parent().on('data.validate', null);\n        })\n    };\n\n    return _mode;\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    var _svg_renderer;\n\n    function apply_filter() {\n        if(_legend.dimension()) {\n            if(_legend.isTagDimension()) {\n                _legend.dimension().filterFunction(function(ks) {\n                    return !_included.length || ks.filter(function(k) {\n                        return _included.includes(k);\n                    }).length;\n                });\n            } else {\n                _legend.dimension().filterFunction(function(k) {\n                    return !_included.length || _included.includes(k);\n                });\n            }\n            _legend.parent().redraw();\n        }\n    }\n\n    var _legend = dc_graph.mode(legend_namespace, {\n        renderers: ['svg', 'webgl'],\n        draw: redraw,\n        remove: 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    _legend.dyLabel = property('0.3em');\n\n    _legend.omitEmpty = property(false);\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    _legend.redraw = deprecate_function(\"dc_graph.legend is an ordinary mode now; redraw will go away soon\", redraw);\n    function redraw() {\n        var legend = (_svg_renderer || _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 items = !_legend.omitEmpty() || !_counts ? _items : _items.filter(function(i) {\n            return _included.length && !_included.includes(i.orig.key) || _counts[i.orig.key];\n        });\n        var item = legend.selectAll(_legend.type().itemSelector())\n                .data(items, function(n) { return n.name; });\n        item.exit().remove();\n        var itemEnter = _legend.type().create(_legend.parent(), item.enter(), _legend.itemWidth(), _legend.itemHeight());\n        itemEnter.append('text')\n            .attr('dy', _legend.dyLabel())\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(_svg_renderer || _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('&emsp;&#x25BC;');\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.' + legend_namespace, 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.' + legend_namespace, 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.' + legend_namespace, 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_namespace, 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                    if(_svg_renderer)\n                        window.setTimeout(redraw, 250);\n                });\n        } else {\n            item.attr('cursor', 'auto')\n                .on('click.' + legend_namespace, 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    _legend.render = deprecate_function(\"dc_graph.legend is an ordinary mode now; render will go away soon\", render);\n    function render() {\n        if(_legend.parent().renderer().rendererType() !== 'svg') {\n            _svg_renderer = dc_graph.render_svg();\n            _svg_renderer.parent(_legend.parent())\n                .svg(_legend.parent().root().append('svg')\n                     .style({\n                         position: 'absolute',\n                         left: 0, top: 0,\n                         width: '100%', height: '100%',\n                         fill: 'wheat',\n                         'pointer-events': 'none'\n                     }));\n        }\n\n\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() && (_svg_renderer || _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    _legend.isTagDimension = property(false);\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(renderer, itemEnter, item) {\n            renderer\n                .renderNode(itemEnter)\n                .redrawNode(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(renderer, itemEnter, item) {\n            renderer.redrawEdge(itemEnter.select('path.edge'), renderer.selectAllEdges('.edge-arrows'));\n        }\n    };\n    return _type;\n};\n\ndc_graph.legend.symbol_legend = function(symbolScale) {\n    return {\n        itemSelector: function() {\n            return '.symbol';\n        },\n        labelSelector: function() {\n            return '.symbol-label';\n        },\n        create: function(diagram, selection, w, h) {\n            var symbolEnter = selection.append('g')\n                .attr('class', 'symbol');\n            return symbolEnter;\n        },\n        draw: function(renderer, symbolEnter, symbol) {\n            symbolEnter.append('text')\n                .html(function(d) {\n                    return symbolScale(d.orig.key);\n                });\n            return symbolEnter;\n        }\n    };\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 * <ol type='a'>\n *    <li>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 *    <li>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 * </ol>\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; i<sort.length-1; ++i) {\n                    var left = sort[i], right = sort[i+1];\n                    if(!badi) {\n                        if(right.cola.x - left.cola.x < best_dist(left, right)) {\n                            badi = i;\n                            badl = left.cola.x;\n                            want = best_dist(left, right);\n                        } // else still not bad\n                    } else {\n                        want += best_dist(left, right);\n                        if(i < sort.length - 2 && right.cola.x < badl + want)\n                            continue; // still bad\n                        else {\n                            if(badi>0)\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<limit; ++j) {\n                                l += best_dist(sort[j-1], sort[j]);\n                                sort[j].cola.x = l;\n                            }\n                            badi = badl = want = null;\n                        }\n                    }\n                }\n            });\n        }\n    });\n\n    return function(diagram, nodes, edges) {\n        return dfs(nodes, edges);\n    };\n};\n\n","// this naive tree-drawer is paraphrased from memory from dot\ndc_graph.tree_constraints = function(rootf, treef, xgap, ygap) {\n    console.warn('dc_graph.tree_constraints is deprecated - it never worked right and may not be a good idea');\n    return function(diagram, nodes, edges) {\n        var constraints = [];\n        var x = 0;\n        var dfs = dc_graph.depth_first_traversal({\n            root: rootf,\n            tree: treef,\n            place: function(n, r, row) {\n                if(row.length) {\n                    var last = row[row.length-1];\n                    constraints.push({\n                        left: diagram.nodeKey.eval(last),\n                        right: diagram.nodeKey.eval(n),\n                        axis: 'x',\n                        gap: x-last.foo_x,\n                        equality: true\n                    });\n                }\n                n.foo_x = x;\n                // n.cola.x = x;\n                // n.cola.y = r*ygap;\n            },\n            sib: function() {\n                x += xgap;\n            }\n        });\n        dfs(diagram, nodes, edges);\n        return constraints;\n    };\n};\n","dc_graph.mode = function(event_namespace, options) {\n    var _mode = {};\n    var _eventName = options.laterDraw ? 'transitionsStarted' : 'drawn';\n    var draw = options.draw, remove = options.remove;\n    var supported_renderers = options.renderers || ['svg'];\n\n    if(!draw) {\n        console.warn('behavior.add_behavior has been replaced by mode.draw');\n        draw = options.add_behavior;\n    }\n    if(!remove) {\n        console.warn('behavior.remove_behavior has been replaced by mode.remove');\n        remove = options.remove_behavior;\n    }\n\n    /**\n     #### .parent([object])\n     Assigns this mode to a diagram.\n     **/\n    _mode.parent = property(null)\n        .react(function(p) {\n            var diagram;\n            if(p) {\n                var first = true;\n                diagram = p;\n                p.on(_eventName + '.' + event_namespace, function() {\n                    var args2 = [diagram].concat(Array.prototype.slice.call(arguments));\n                    draw.apply(null, args2);\n                    if(first && options.first) {\n                        options.first.apply(null, args2);\n                        first = false;\n                    }\n                    else if(options.rest)\n                        options.rest.apply(null, args2);\n                });\n                p.on('reset.' + event_namespace, function() {\n                    var rend = diagram.renderer(),\n                        node = rend.selectAllNodes ? rend.selectAllNodes() : null,\n                        edge = rend.selectAllEdges ? rend.selectAllEdges() : null,\n                        edgeHover = rend.selectAllEdges ? rend.selectAllEdges('.edge-hover') : null;\n                    remove(diagram, node, edge, edgeHover);\n                });\n            }\n            else if(_mode.parent()) {\n                diagram = _mode.parent();\n                diagram.on(_eventName + '.' + event_namespace, function(node, edge, ehover) {\n                    remove(diagram, node, edge, ehover);\n                    diagram.on(_eventName + '.' + event_namespace, null);\n                });\n            }\n            options.parent && options.parent(p);\n        });\n\n    _mode.supportsRenderer = function(rendererType) {\n        return supported_renderers.includes(rendererType);\n    };\n\n    return _mode;\n};\n\ndc_graph.behavior = deprecate_function('dc_graph.behavior has been renamed dc_graph.mode', dc_graph.mode);\n","/**\n * Asynchronous [d3.tip](https://github.com/Caged/d3-tip) support for dc.graph.js\n *\n * Add tooltips to the nodes and edges of a graph using an asynchronous callback to get\n * the html to show.\n *\n * Optional - requires separately loading the d3.tip script and CSS (which are included in\n * dc.graph.js in `web/js/d3-tip/index.js` and `web/css/d3-tip/example-styles.css`)\n *\n * @class tip\n * @memberof dc_graph\n * @return {Object}\n **/\ndc_graph.tip = function(options) {\n    options = options || {};\n    var _namespace = options.namespace || 'tip';\n    var _d3tip = null;\n    var _showTimeout, _hideTimeout;\n    var _dispatch = d3.dispatch('tipped');\n\n    function init(parent) {\n        if(!_d3tip) {\n            _d3tip = d3.tip()\n                .attr('class', options.class || 'd3-tip')\n                .html(function(d) { return \"<span>\" + d + \"</span>\"; })\n                .direction(_mode.direction());\n            if(_mode.offset())\n                _d3tip.offset(_mode.offset());\n            parent.svg().call(_d3tip);\n        }\n    }\n    function fetch_and_show_content(d) {\n        if(_mode.disabled() || _mode.selection().exclude && _mode.selection().exclude(d3.event.target)) {\n            hide_tip.call(this);\n            return;\n        }\n        var target = this,\n            next = function() {\n                _mode.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.' + _namespace, function() {\n                            d3.event.preventDefault();\n                            if(_mode.linkCallback())\n                                _mode.linkCallback()(this.id);\n                        });\n                    _dispatch.tipped(d);\n                });\n            };\n        if(_hideTimeout)\n            window.clearTimeout(_hideTimeout);\n        if(_mode.delay()) {\n            window.clearTimeout(_showTimeout);\n            _showTimeout = window.setTimeout(next, _mode.delay());\n        }\n        else next();\n    }\n\n    function check_hide_tip() {\n        if(d3.event.relatedTarget &&\n           (!_mode.selection().exclude || !_mode.selection().exclude(d3.event.target)) &&\n           (this && this.contains(d3.event.relatedTarget) || // do not hide when mouse is still over a child\n            _mode.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(_mode.hideDelay())\n            _hideTimeout = window.setTimeout(function () {\n                _d3tip.hide();\n            }, _mode.hideDelay());\n        else\n            _d3tip.hide();\n    }\n\n    function draw(diagram, node, edge, ehover) {\n        init(diagram);\n        _mode.programmatic() || _mode.selection().select(diagram, node, edge, ehover)\n            .on('mouseover.' + _namespace, fetch_and_show_content)\n            .on('mouseout.' + _namespace, hide_tip_delay);\n        if(_mode.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(diagram, node, edge, ehover) {\n        _mode.programmatic() || _mode.selection().select(diagram, node, edge, ehover)\n            .on('mouseover.' + _namespace, null)\n            .on('mouseout.' + _namespace, null);\n    }\n\n    var _mode = dc_graph.mode(_namespace, {\n        draw: draw,\n        remove: remove,\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     **/\n    _mode.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 mode: assume it's a node, show node title\n     * var tip = dc_graph.tip().content(function(n, k) {\n     *     k(_mode.parent() ? _mode.parent().nodeTitle.eval(n) : '');\n     * });\n     **/\n    _mode.content = property(function(n, k) {\n        k(_mode.parent() ? _mode.parent().nodeTitle.eval(n) : '');\n    });\n\n    _mode.on = function(event, f) {\n        return _dispatch.on(event, f);\n    };\n\n    _mode.disabled = property(false);\n    _mode.programmatic = property(false);\n\n    _mode.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 = _mode.selection().select(_mode.parent(), _mode.parent().selectAllNodes(), _mode.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(_mode.programmatic())\n                found.on('mouseout.' + _namespace, hide_tip_delay);\n        }\n        return _mode;\n    };\n\n    _mode.hideTip = function(delay) {\n        if(_d3tip) {\n            if(delay)\n                hide_tip_delay();\n            else\n                hide_tip();\n        }\n        return _mode;\n    };\n    _mode.selection = property(dc_graph.tip.select_node_and_edge());\n    _mode.showDelay = _mode.delay = property(0);\n    _mode.hideDelay = property(200);\n    _mode.offset = property(null);\n    _mode.clickable = property(false);\n    _mode.linkCallback = property(null);\n\n    return _mode;\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 * @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        if(!d)\n            return; // don't display tooltip if no content\n        var data, keys;\n        if(Array.isArray(d))\n            data = d;\n        else if(typeof d === 'number' || typeof d === 'string')\n            data = [d];\n        else { // object\n            data = keys = Object.keys(d).filter(d3.functor(gen.filter()))\n                .filter(function(k) {\n                    return d[k] !== undefined;\n                });\n        }\n        var table = d3.select(document.createElement('table'));\n        var rows = table.selectAll('tr').data(data);\n        var rowsEnter = rows.enter().append('tr');\n        rowsEnter.append('td').text(function(item) {\n            if(keys && typeof item === 'string')\n                return item;\n            return JSON.stringify(item);\n        });\n        if(keys)\n            rowsEnter.append('td').text(function(item) {\n                return JSON.stringify(d[item]);\n            });\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.json_table = function() {\n    var table = dc_graph.tip.table().fetch(function(d) {\n        var jsontip = table.json()(d);\n        if(!jsontip) return null;\n        try {\n            return JSON.parse(jsontip);\n        } catch(xep) {\n            return [jsontip];\n        }\n    });\n    table.json = property(function(d) {\n        return (d.orig.value.value || d.orig.value).jsontip;\n    });\n    return table;\n};\n\ndc_graph.tip.html_or_json_table = function() {\n    var json_table = dc_graph.tip.json_table();\n    var gen = function(d, k) {\n        var html = gen.html()(d);\n        if(html)\n            k(html);\n        else\n            json_table(d, k);\n    };\n    gen.json = json_table.json;\n    gen.html = property(function(d) {\n        return (d.orig.value.value || d.orig.value).htmltip;\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 draw(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            _mode.focus();\n        });\n    }\n    function remove(diagram) {\n        _input_anchor.remove();\n    }\n    var _mode = dc_graph.mode('brush', {\n        draw: draw,\n        remove: remove\n    });\n\n    _mode.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    _mode.focus = function() {\n        if(!_mode.disableFocus()) {\n            _input_anchor.node().focus && _input_anchor.node().focus();\n        }\n    };\n\n    _mode.disableFocus = property(false);\n\n    return _mode;\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    var padding = options.padding !== undefined ? options.padding : 2;\n    function reposition() {\n        var pos;\n        switch(options.align) {\n        case 'left':\n            pos = [options.box.x-padding, options.box.y-padding];\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        class: options.class || null\n    }).style({\n        display: 'inline-block',\n        'background-color': 'white',\n        padding: padding + 'px'\n    });\n\n    function stopProp() {\n        d3.event.stopPropagation();\n    }\n    foreign\n        .on('mousedown.edit-text', stopProp)\n        .on('mousemove.edit-text', stopProp)\n        .on('mouseup.edit-text', stopProp)\n        .on('dblclick.edit-text', stopProp);\n\n    function accept() {\n        options.accept && options.accept(textdiv.text());\n        textdiv.on('blur.edit-text', null);\n        foreign.remove();\n        options.finally && options.finally();\n    }\n    function cancel() {\n        options.cancel && options.cancel();\n        textdiv.on('blur.edit-text', null);\n        foreign.remove();\n        options.finally && options.finally();\n    }\n\n    textdiv.on('keydown.edit-text', function() {\n        if(d3.event.keyCode===13) {\n            d3.event.preventDefault();\n        }\n    }).on('keyup.edit-text', function() {\n        if(d3.event.keyCode===13) {\n            accept();\n        } else if(d3.event.keyCode===27) {\n            cancel();\n        }\n        reposition();\n    }).on('blur.edit-text', 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","/**\n * `dc_graph.brush` is a {@link dc_graph.mode mode} providing a simple wrapper over\n * [d3.svg.brush](https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Controls.md#brush)\n * @class brush\n * @memberof dc_graph\n * @return {dc_graph.brush}\n **/\ndc_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.brush-mode', brushstart)\n                .on('brush.brush-mode', brushmove)\n                .on('brushend.brush-mode', 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 _mode = dc_graph.mode('brush', {\n        draw: function() {},\n        remove: remove_brush\n    });\n\n    /**\n     * Subscribe to a brush event, currently `brushstart`, `brushmove`, or `brushend`\n     * @method on\n     * @memberof dc_graph.brush\n     * @instance\n     * @param {String} event the name of the event; please namespace with `'namespace.event'`\n     * @param {Function} [f] the handler function; if omitted, returns the current handler\n     * @return {dc_graph.brush}\n     * @return {Function}\n     **/\n    _mode.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     * Add the brush to the parent diagram's SVG\n     * @method activate\n     * @memberof dc_graph.brush\n     * @instance\n     * @return {dc_graph.brush}\n     **/\n    _mode.activate = function() {\n        install_brush(_mode.parent());\n        return this;\n    };\n    /**\n     * Remove the brush from the parent diagram's SVG\n     * @method deactivate\n     * @memberof dc_graph.brush\n     * @instance\n     * @return {dc_graph.brush}\n     **/\n    _mode.deactivate = function() {\n        remove_brush();\n        return this;\n    };\n    /**\n     * Retrieve whether the brush is currently active\n     * @method isActive\n     * @memberof dc_graph.brush\n     * @instance\n     * @return {Boolean}\n     **/\n    _mode.isActive = function () {\n        return !!_gBrush;\n    };\n\n    return _mode;\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.requestRefresh();\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 draw(diagram, node, edge) {\n        var condition = _mode.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(_mode.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(_mode.multipleSelect()) {\n            var brush_mode = diagram.child('brush');\n            brush_mode.activate();\n        }\n        else\n            background_click_event(diagram, _mode.clickBackgroundClears());\n\n        if(_mode.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(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 _mode = dc_graph.mode(things_name, {\n        draw: draw,\n        remove: remove,\n        parent: function(p) {\n            things_group.on('set_changed.' + things_name, p ? selection_changed(p) : null);\n            if(p && _mode.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    _mode.multipleSelect = property(true);\n    _mode.clickBackgroundClears = property(true, false).react(function(v) {\n        if(!_mode.multipleSelect() && _mode.parent())\n            background_click_event(_mode.parent(), v);\n    });\n    _mode.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    _mode.autoCropSelection = property(true);\n    // if you want to do the cool things select_things can do\n    _mode.thinginess = function() {\n        return thinginess;\n    };\n    return _mode;\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 _mode.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 _mode.parent().nodeKey.eval(n);\n        },\n        applyStyles: function(pred) {\n            _mode.parent().cascade(50, true, node_edge_conditions(pred, null, props));\n        },\n        removeStyles: function() {\n            _mode.parent().cascade(50, false, props);\n        }\n    };\n    var _mode = dc_graph.select_things(select_nodes_group, 'select-nodes', thinginess);\n    return _mode;\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 _mode.parent().selectAllEdges('.edge-hover');\n        },\n        key: function(e) {\n            return _mode.parent().edgeKey.eval(e);\n        },\n        applyStyles: function(pred) {\n            _mode.parent().cascade(50, true, node_edge_conditions(null, pred, props));\n        },\n        removeStyles: function() {\n            _mode.parent().cascade(50, false, props);\n        }\n    };\n    var _mode = dc_graph.select_things(select_edges_group, 'select-edges', thinginess);\n    return _mode;\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 _mode.parent().selectAllNodes('g.port');\n        },\n        key: function(p) {\n            // this scheme also won't work with multiselect\n            return p.named ?\n                {node: _mode.parent().nodeKey.eval(p.node), name: p.name} :\n            {edge: _mode.parent().edgeKey.eval(p.edges[0]), name: p.name};\n        },\n        applyStyles: function(pred) {\n            _mode.parent().portStyle(port_style).cascade(50, true, conditional_properties(pred, props));\n        },\n        removeStyles: function() {\n            _mode.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 _mode = dc_graph.select_things(select_ports_group, 'select-ports', thinginess);\n    return _mode;\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 = _mode.parent().getWholeNode(key);\n            f(n, key);\n        });\n    }\n    function draw(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) > _mode.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(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 _mode = dc_graph.mode('move-nodes', {\n        draw: draw,\n        remove: remove,\n        parent: function(p) {\n            select_nodes_group.on('set_changed.move-nodes', p ? selection_changed(p) : null);\n            if(p) {\n                _brush = p.child('brush');\n                _drawGraphs = p.child('draw-graphs');\n                _selectNodes = p.child('select-nodes');\n            }\n            else _brush = _drawGraphs = _selectNodes = null;\n        }\n    });\n\n    // minimum distance that is considered a drag, not a click\n    _mode.dragSize = property(5);\n\n    return _mode;\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 _mode.parent().nodeKey.eval(n);\n        },\n        sourceid: function(e) {\n            return _mode.parent().edgeSource.eval(e);\n        },\n        targetid: function(e) {\n            return _mode.parent().edgeTarget.eval(e);\n        },\n        get_fix: function(n) {\n            return _mode.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        _mode.strategy().request_fixes(_execute, fixes);\n        tell_then_set(find_changes()).then(function() {\n            _mode.parent().redraw();\n        });\n    }\n    function new_node(nid, n, pos) {\n        _mode.strategy().new_node(_execute, nid, n, pos);\n    }\n    function new_edge(eid, sourceid, targetid) {\n        var source = _nodes[sourceid], target = _nodes[targetid];\n        _mode.strategy().new_edge(_execute, eid, source, target);\n    }\n    function find_changes() {\n        var changes = [];\n        _wnodes.forEach(function(n) {\n            var key = _mode.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 = _mode.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n        var promises = changes.map(function(change) {\n            var key = _mode.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 = _mode.fixNode() || function(n, pos) { return Promise.resolve(pos); };\n        var promises = changes.map(function(change) {\n            var key = _mode.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        _mode.strategy().clear_all_fixes && _mode.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(_mode.strategy().on_data) {\n            _mode.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(_mode.reportOverridesAsynchronously())\n                tell_changes(changes); // dangling promise\n        }\n    }\n\n    var _mode = {\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(_mode.parent())\n                _mode.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 _mode;\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                _mode.dimensionAccessor()(diagram).filterFunction(function(k) {\n                    return set.has(k);\n                });\n            } else _mode.dimensionAccessor()(diagram).filter(null);\n            diagram.redrawGroup();\n        };\n    }\n\n    var _mode = {\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    _mode.dimensionAccessor = property(function(diagram) {\n        return diagram.nodeDimension();\n    });\n    return _mode;\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(!_mode.crossfilterAccessor())\n            throw new Error('need crossfilterAccessor');\n        if(!_mode.dimensionAccessor())\n            throw new Error('need dimensionAccessor');\n        selection = selection || _selected;\n        if(selection.length === 0)\n            return Promise.resolve([]);\n        var promise = _mode.preDelete() ? _mode.preDelete()(selection) : Promise.resolve(selection);\n        if(_mode.onDelete())\n            promise = promise.then(_mode.onDelete());\n        return promise.then(function(selection) {\n            if(selection && selection.length) {\n                var crossfilter = _mode.crossfilterAccessor()(_mode.parent()),\n                    dimension = _mode.dimensionAccessor()(_mode.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                _mode.parent().redrawGroup();\n            }\n            return true;\n        });\n    }\n    function draw(diagram) {\n        _keyboard.on('keyup.' + mode_name, function() {\n            if(d3.event.code === _deleteKey)\n                delete_selection();\n        });\n    }\n    function remove(diagram) {\n    }\n    var _mode = dc_graph.mode(mode_name, {\n        draw: draw,\n        remove: remove,\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    _mode.preDelete = property(null);\n    _mode.onDelete = property(null);\n    _mode.crossfilterAccessor = property(null);\n    _mode.dimensionAccessor = property(null);\n    _mode.deleteSelection = delete_selection;\n    return _mode;\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 _mode = dc_graph.delete_things(select_nodes_group, 'delete-nodes', id_tag);\n\n    _mode.preDelete(function(nodes) {\n        // request a delete of all attached edges, using the delete edges mode\n        // kind of horrible\n        var diagram = _mode.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 _mode;\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                    class: options.class,\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 draw(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(diagram, node, edge) {\n    }\n\n    var _mode = dc_graph.mode(options.label_type, {\n        draw: draw,\n        remove: remove,\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    _mode.editSelection = function(eventOptions) {\n        edit_selection(_mode.parent().selectAllNodes(), _mode.parent().selectAllEdges(), eventOptions);\n    };\n    return _mode;\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 _mode.parent().nodeKey.eval(n) === key;\n        });\n    };\n    options.hide_thing_label = function(node, whether) {\n        var contents = _mode.parent().content(_mode.parent().nodeContent.eval(node.datum()));\n        contents.selectText(node).attr('visibility', whether ? 'hidden' : 'visible');\n    };\n    options.thing_box = function(node, eventOptions) {\n        var contents = _mode.parent().content(_mode.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 _mode.parent().nodeLabel.eval(node.datum());\n    };\n    options.accept = function(node, text) {\n        var callback = _mode.changeNodeLabel() ?\n                _mode.changeNodeLabel()(_mode.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            _mode.parent().redrawGroup();\n        });\n    };\n\n    var _mode = dc_graph.label_things(options);\n    _mode.changeNodeLabel = property(null);\n    return _mode;\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 _mode.parent().edgeKey.eval(e) === key;\n        });\n    };\n    options.hide_thing_label = function(edge, whether) {\n        var label = _mode.parent().selectAll('#' + _mode.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 _mode.parent().edgeLabel.eval(edge.datum());\n    };\n    options.accept = function(edge, text) {\n        var callback = _mode.changeEdgeLabel() ?\n                _mode.changeEdgeLabel()(_mode.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            _mode.parent().redrawGroup();\n        });\n    };\n\n    var _mode = dc_graph.label_things(options);\n    _mode.changeEdgeLabel = property(null);\n    return _mode;\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        _mode.parent().requestRefresh(_mode.durationOverride());\n    }\n    function draw(diagram) {\n        diagram.cascade(cascbase, true, node_edge_conditions(\n            function(n) {\n                return _nodeset[_mode.parent().nodeKey.eval(n)];\n            }, function(e) {\n                return _edgeset[_mode.parent().edgeKey.eval(e)];\n            }, includeprops));\n        diagram.cascade(cascbase+10, true, node_edge_conditions(\n            function(n) {\n                return _active && !_nodeset[_mode.parent().nodeKey.eval(n)];\n            }, function(e) {\n                return _active && !_edgeset[_mode.parent().edgeKey.eval(e)];\n            }, excludeprops));\n    }\n    function remove(diagram) {\n        diagram.cascade(cascbase, false, includeprops);\n        diagram.cascade(cascbase + 10, false, excludeprops);\n    }\n    var _mode = dc_graph.mode(modename, {\n        draw: draw,\n        remove: remove,\n        parent: function(p) {\n            highlight_things_group.on('highlight.' + modename, p ? highlight : null);\n        }\n    });\n    _mode.durationOverride = property(undefined);\n    return _mode;\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 = _mode.parent();\n        var nodeset = {}, edgeset = {};\n        if(nodeid) {\n            nodeset[nodeid] = true;\n            _mode.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 draw(diagram, node, edge) {\n        node\n            .on('mouseover.highlight-neighbors', function(n) {\n                highlight_neighbors_group.highlight_node(_mode.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(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 _mode = dc_graph.mode('highlight-neighbors', {\n        draw: draw,\n        remove: function(diagram, node, edge) {\n            remove(diagram, node, edge);\n        },\n        parent: function(p) {\n            highlight_neighbors_group.on('highlight_node.highlight-neighbors', p ? highlight_node : null);\n            if(p && !p.child('highlight-things'))\n                p.child('highlight-things',\n                        dc_graph.highlight_things(includeprops, excludeprops)\n                          .durationOverride(_mode.durationOverride()));\n        }\n    });\n    _mode.durationOverride = property(undefined);\n    return _mode;\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), _mode.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 _mode = {\n        parent: function(p) {\n            if(p) {\n                p.on('data.highlight-radius', on_data);\n            } else if(_mode.parent())\n                _mode.parent().on('data.highlight-radius', null);\n            select_nodes_group.on('set_changed.highlight-radius', selection_changed);\n        }\n    };\n    _mode.radius = property(1);\n    return _mode;\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(_mode.doRedraw())\n            _mode.parent().relayout().redraw();\n        else\n            _mode.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 draw(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(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 _mode = dc_graph.mode('highlight-paths', {\n        draw: draw,\n        remove: function(diagram, node, edge, ehover) {\n            remove(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-paths-' + _anchor, p ? paths_changed : null);\n            highlight_paths_group.on('hover_changed.highlight-paths-' + _anchor, p ? hover_changed : null);\n            highlight_paths_group.on('select_changed.highlight-paths-' + _anchor, p ? select_changed : null);\n        }\n    });\n\n    // whether to do relayout & redraw (true) or just refresh (false)\n    _mode.doRedraw = property(false);\n\n    return _mode;\n};\n\n","dc_graph.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 = _mode.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 *= _mode.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        _mode.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                _mode.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 = _mode.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 <d>\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 = _mode.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, _mode.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(_mode.parent().transitionDuration())\n            .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _mode.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, _mode.avoidSharpTurns()); })\n            .attr('opacity', 0)\n            .attr('stroke', 'green')\n            .attr('stroke-width', (pathprops.edgeStrokeWidth || 1) + 4)\n            .attr('fill', 'none')\n            .on('mouseover.spline-paths', function(d) {\n                highlight_paths_group.hover_changed([d]);\n             })\n            .on('mouseout.spline-paths', function(d) {\n                highlight_paths_group.hover_changed(null);\n             })\n            .on('click.spline-paths', 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(_mode.parent().transitionDuration())\n            .attr('d', function(d) { return genPath(d, false, pathprops.lineTension, _mode.avoidSharpTurns()); });\n    };\n\n    function draw(diagram, node, edge, ehover) {\n        _layer = _mode.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(diagram, node, edge, ehover) {\n    }\n\n    var _mode = dc_graph.mode('draw-spline-paths', {\n        laterDraw: true,\n        draw: draw,\n        remove: function(diagram, node, edge, ehover) {\n            remove(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    _mode.selectedStrength = property(1);\n    _mode.avoidSharpTurns = property(true);\n\n    return _mode;\n};\n\ndc_graph.draw_spline_paths = deprecate_function(\"draw_spline_paths has been renamed spline_paths, please update\", dc_graph.spline_paths);\n","dc_graph.draw_clusters = function() {\n\n    function apply_bounds(rect) {\n        rect.attr({\n            x: function(c) {\n                return c.cola.bounds.left;\n            },\n            y: function(c) {\n                return c.cola.bounds.top;\n            },\n            width: function(c) {\n                return c.cola.bounds.right - c.cola.bounds.left;\n            },\n            height: function(c) {\n                return c.cola.bounds.bottom - c.cola.bounds.top;\n            }\n        });\n    }\n    function draw(diagram) {\n        if(!diagram.clusterGroup())\n            return;\n        var clayer = diagram.g().selectAll('g.cluster-layer').data([0]);\n        clayer.enter().insert('g', ':first-child')\n            .attr('class', 'cluster-layer');\n        var clusters = diagram.clusterGroup().all().map(function(kv) {\n            return _mode.parent().getWholeCluster(kv.key);\n        }).filter(function(c) {\n            return c && c.cola.bounds;\n        });\n        var rects = clayer.selectAll('rect.cluster')\n            .data(clusters, function(c) { return c.orig.key; });\n        rects.exit().remove();\n        rects.enter().append('rect')\n            .attr({\n                class: 'cluster',\n                opacity: 0,\n                stroke: _mode.clusterStroke.eval,\n                'stroke-width': _mode.clusterStrokeWidth.eval,\n                fill: function(c) {\n                    return _mode.clusterFill.eval(c) || 'none';\n                }\n            })\n            .call(apply_bounds);\n        rects.transition()\n            .duration(_mode.parent().stagedDuration())\n            .attr('opacity', _mode.clusterOpacity.eval)\n            .call(apply_bounds);\n    }\n    function remove(diagram, node, edge, ehover) {\n    }\n    var _mode = dc_graph.mode('draw-clusters', {\n        laterDraw: true,\n        draw: draw,\n        remove: remove\n    });\n    _mode.clusterOpacity = property(0.25);\n    _mode.clusterStroke = property('black');\n    _mode.clusterStrokeWidth = property(1);\n    _mode.clusterFill = property(null);\n    _mode.clusterLabel = property(null);\n    _mode.clusterLabelFill = property('black');\n    _mode.clusterLabelAlignment = property(['bottom','right']);\n\n    return _mode;\n};\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, _overEdge, _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    options.linkKey = options.linkKey || (is_a_mac ? 'Meta' : 'Control');\n    if(options.dirs.length > 2)\n        throw new Error('there are only two directions to expand in');\n\n    var _gradients_added = {};\n    function add_gradient_def(color, diagram) {\n        if(_gradients_added[color])\n            return;\n        _gradients_added[color] = true;\n        diagram.addOrRemoveDef('spike-gradient-' + color, true, 'linearGradient', function(gradient) {\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, color, 1], [100, color, '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\n    function visible_edges(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).data();\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; ++i) {\n                    var a = af(i);\n                    ret[i] = {\n                        a: a * 180 / Math.PI,\n                        x: Math.cos(a) * n.dcg_rx*.9,\n                        y: Math.sin(a) * n.dcg_ry*.9,\n                        edge: spikes.invisible ? spikes.invisible[i] : null\n                    };\n                }\n                return ret;\n            });\n        rect\n          .enter().append('rect')\n            .classed('spike', true)\n            .attr({\n                width: 25,\n                height: 3,\n                fill: function(s) {\n                    var color = s.edge ? dc_graph.functor_wrap(diagram.edgeStroke())(s.edge) : 'black';\n                    add_gradient_def(color, diagram);\n                    return 'url(#spike-gradient-' + color + ')';\n                },\n                rx: 1,\n                ry: 1,\n                x: 0,\n                y: 0\n            });\n        rect.attr('transform', function(d) {\n            return 'translate(' + d.x + ',' + d.y + ') rotate(' + d.a + ')';\n        });\n        rect.exit().remove();\n    }\n\n    function clear_stubs(diagram, node, edge) {\n        draw_stubs(diagram, node, edge, null, null);\n    }\n\n    function zonedir(diagram, event, dirs, n) {\n        if(dirs.length === 1) // we assume it's ['out', 'in']\n            return dirs[0];\n        var bound = diagram.root().node().getBoundingClientRect();\n        var invert = diagram.invertCoord([event.clientX - bound.left,event.clientY - bound.top]),\n            x = invert[0],\n            y = invert[1];\n        switch(diagram.layoutEngine().rankdir()) {\n        case 'TB':\n            return y > 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_node(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    function highlight_hiding_edge(diagram, e) {\n        var hide_edges_set = {};\n        hide_edges_set[diagram.edgeKey.eval(e)] = true;\n        hide_highlight_group.highlight({}, hide_edges_set);\n    }\n\n    function highlight_collapse(diagram, n, node, edge, dir) {\n        var nk = diagram.nodeKey.eval(n);\n        var p;\n        if(options.get_edges)\n            p = Promise.resolve(options.get_edges(nk, dir));\n        else\n            p = Promise.resolve(options.get_degree(nk, dir));\n        p.then(function(de) {\n            var degree, edges;\n            if(typeof de === 'number')\n                degree = de;\n            else {\n                edges = de;\n                degree = edges.length;\n            }\n            var spikes = {\n                dir: dir,\n                visible: visible_edges(diagram, edge, dir, nk)\n            };\n            spikes.n = Math.max(0, degree - spikes.visible.length); // be tolerant of inconsistencies\n            if(edges) {\n                var shown = spikes.visible.reduce(function(p, e) {\n                    p[diagram.edgeKey.eval(e)] = true;\n                    return p;\n                }, {});\n                spikes.invisible = edges.filter(function(e) { return !shown[diagram.edgeKey()(e)]; });\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 draw(diagram, node, edge, ehover) {\n        function over_node(n) {\n            var dir = zonedir(diagram, d3.event, options.dirs, n);\n            _overNode = n;\n            _overDir = dir;\n            if(options.hideNode && detect_key(options.hideKey))\n                highlight_hiding_node(diagram, n, edge);\n            else if(_mode.nodeURL.eval(_overNode) && detect_key(options.linkKey)) {\n                diagram.selectAllNodes()\n                    .filter(function(n) {\n                        return n === _overNode;\n                    }).attr('cursor', 'pointer');\n                diagram.requestRefresh(0);\n            }\n            else\n                highlight_collapse(diagram, n, node, edge, dir);\n        }\n        function leave_node(n)  {\n            diagram.selectAllNodes()\n                .filter(function(n) {\n                    return n === _overNode;\n                }).attr('cursor', null);\n            _overNode = null;\n            clear_stubs(diagram, node, edge);\n            collapse_highlight_group.highlight({}, {});\n            hide_highlight_group.highlight({}, {});\n        }\n        function click_node(n) {\n            var nk = diagram.nodeKey.eval(n);\n            if(options.hideNode && detect_key(options.hideKey))\n                options.hideNode(nk);\n            else if(detect_key(options.linkKey)) {\n                if(_mode.nodeURL.eval(n) && _mode.urlOpener)\n                    _mode.urlOpener()(_mode, n, _mode.nodeURL.eval(n));\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        function enter_edge(e) {\n            _overEdge = e;\n            if(options.hideEdge && detect_key(options.hideKey))\n                highlight_hiding_edge(diagram, e);\n        }\n        function leave_edge(e) {\n            _overEdge = null;\n            hide_highlight_group.highlight({}, {});\n        }\n        function click_edge(e) {\n            if(options.hideEdge && detect_key(options.hideKey))\n                options.hideEdge(diagram.edgeKey.eval(e));\n        }\n\n        node\n            .on('mouseenter.expand-collapse', over_node)\n            .on('mousemove.expand-collapse', over_node)\n            .on('mouseout.expand-collapse', leave_node)\n            .on('click.expand-collapse', click_node)\n            .on('dblclick.expand-collapse', click_node);\n\n        ehover\n            .on('mouseenter.expand-collapse', enter_edge)\n            .on('mouseout.expand-collapse', leave_edge)\n            .on('click.expand-collapse', click_edge);\n\n        _keyboard\n            .on('keydown.expand-collapse', function() {\n                if(d3.event.key === options.hideKey && (_overNode && options.hideNode || _overEdge && options.hideEdge)) {\n                    if(_overNode)\n                        highlight_hiding_node(diagram, _overNode, edge);\n                    if(_overEdge)\n                        highlight_hiding_edge(diagram, _overEdge);\n                    clear_stubs(diagram, node, edge);\n                    collapse_highlight_group.highlight({}, {});\n                }\n                else if(d3.event.key === options.linkKey && _overNode) {\n                    if(_overNode && _mode.nodeURL.eval(_overNode)) {\n                        diagram.selectAllNodes()\n                            .filter(function(n) {\n                                return n === _overNode;\n                            }).attr('cursor', 'pointer');\n                    }\n                    hide_highlight_group.highlight({}, {});\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 || d3.event.key === options.linkKey) && (_overNode || _overEdge)) {\n                    hide_highlight_group.highlight({}, {});\n                    if(_overNode) {\n                        highlight_collapse(diagram, _overNode, node, edge, _overDir);\n                        if(_mode.nodeURL.eval(_overNode)) {\n                            diagram.selectAllNodes()\n                                .filter(function(n) {\n                                    return n === _overNode;\n                                }).attr('cursor', null);\n                        }\n                    }\n                }\n            });\n        diagram.cascade(97, true, conditional_properties(\n            function(n) {\n                return n === _overNode && n.orig.value.value && n.orig.value.value.URL;\n            },\n            {\n                nodeLabelDecoration: 'underline'\n            }\n        ));\n    }\n\n    function remove(diagram, node, edge, ehover) {\n        node\n            .on('mouseenter.expand-collapse', null)\n            .on('mousemove.expand-collapse', null)\n            .on('mouseout.expand-collapse', null)\n            .on('click.expand-collapse', null)\n            .on('dblclick.expand-collapse', null);\n        ehover\n            .on('mouseenter.expand-collapse', null)\n            .on('mouseout.expand-collapse', null)\n            .on('click.expand-collapse', null);\n        clear_stubs(diagram, node, edge);\n    }\n\n    function expand(dir, nk, whether) {\n        if(dir === 'both' && !_expanded.both)\n            options.dirs.forEach(function(dir2) {\n                _expanded[dir2][nk] = whether;\n            });\n        else\n            _expanded[dir][nk] = whether;\n        var bothmap;\n        if(_expanded.both)\n            bothmap = _expanded.both;\n        else {\n            bothmap = Object.keys(_expanded.in).filter(function(nk2) {\n                return _expanded.in[nk2] && _expanded.out[nk2];\n            }).reduce(function(p, v) {\n                p[v] = true;\n                return p;\n            }, {});\n        }\n        expanded_highlight_group.highlight(bothmap, {});\n        if(dir === 'both' && !_expanded.both)\n            options.dirs.forEach(function(dir2, i) {\n                if(whether)\n                    options.expand(nk, dir2, i !== options.dirs.length-1);\n                else\n                    options.collapse(nk, dir2, i !== options.dirs.length-1);\n            });\n        else {\n            if(whether)\n                options.expand(nk, dir);\n            else\n                options.collapse(nk, dir);\n        }\n    }\n\n    function expandNodes(nks) {\n        var map = nks.reduce(function(p, v) {\n            p[v] = true;\n            return p;\n        }, {});\n        options.dirs.forEach(function(dir) {\n            _expanded[dir] = Object.assign({}, map);\n        });\n        expanded_highlight_group.highlight(map, {});\n        options.expandedNodes(map);\n    }\n\n    var _mode = dc_graph.mode('expand-collapse', {\n        draw: draw,\n        remove: remove,\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    _mode.expand = expand;\n    _mode.expandNodes = expandNodes;\n    _mode.clickableLinks = deprecated_property(\"warning - clickableLinks doesn't belong in collapse_expand and will be moved\", false);\n    _mode.nodeURL = property(function(n) {\n        return n.value && n.value.value && n.value.value.URL;\n    });\n    _mode.urlTargetWindow = property('dcgraphlink');\n    _mode.urlOpener = property(dc_graph.expand_collapse.default_url_opener);\n    return _mode;\n};\n\ndc_graph.expand_collapse.default_url_opener = function(mode, node, url) {\n    window.open(mode.nodeURL.eval(node), mode.urlTargetWindow());\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 _nodeShown = {}, _nodeHidden = {};\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 _nodeShown[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 || !_nodeShown[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, skip_draw) {\n                _nodeShown[nk] = true;\n                switch(dir) {\n                case 'out':\n                    out_edges(nk).forEach(function(e) {\n                        if(!_nodeHidden[options.edgeTarget(e)])\n                            _nodeShown[options.edgeTarget(e)] = true;\n                    });\n                    break;\n                case 'in':\n                    in_edges(nk).forEach(function(e) {\n                        if(!_nodeHidden[options.edgeSource(e)])\n                            _nodeShown[options.edgeSource(e)] = true;\n                    });\n                    break;\n                default: throw new Error('unknown direction ' + dir);\n                }\n                if(!skip_draw) {\n                    apply_filter();\n                    dc.redrawAll();\n                }\n            },\n            expandedNodes: function(_) {\n                if(!arguments.length)\n                    throw new Error('not supported'); // should not be called\n                var that = this;\n                _nodeShown = {};\n                Object.keys(_).forEach(function(nk) {\n                    that.expand(nk, 'out', true);\n                    that.expand(nk, 'in', true);\n                });\n                apply_filter();\n                dc.redrawAll();\n                return this;\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                    _nodeShown[nk] = false;\n                });\n                apply_filter();\n                dc.redrawAll();\n            },\n            hideNode: function(nk) {\n                _nodeHidden[nk] = true;\n                _nodeShown[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                _nodeShown[nk] = true;\n                adjacent_nodes(nk).forEach(function(nk) {\n                    if(!_nodeHidden[nk])\n                        _nodeShown[nk] = true;\n                });\n                apply_filter();\n                dc.redrawAll();\n            },\n            expandedNodes: function(_) {\n                if(!arguments.length)\n                    throw new Error('not supported'); // should not be called\n                var that = this;\n                _nodeShown = {};\n                Object.keys(_).forEach(function(nk) {\n                    that.expand(nk);\n                });\n                return this;\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                    _nodeShown[nk] = false;\n                });\n                apply_filter();\n                dc.redrawAll();\n            },\n            hideNode: function(nk) {\n                _nodeHidden[nk] = true;\n                _nodeShown[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 _nodeExpanded = {}, _nodeHidden = {}, _edgeHidden = {};\n\n    // independent dimension on keys so that the diagram dimension will observe it\n    var _nodeDim = options.nodeCrossfilter.dimension(options.nodeKey),\n        _edgeDim = options.edgeCrossfilter && options.edgeCrossfilter.dimension(options.edgeRawKey);\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(!_nodeHidden[nk2])\n                    p[nk2] = true;\n            });\n            return p;\n        }, {});\n    }\n    function apply_filter() {\n        var _shown = get_shown(_nodeExpanded);\n        _nodeDim.filterFunction(function(nk) {\n            return _shown[nk];\n        });\n        _edgeDim && _edgeDim.filterFunction(function(ek) {\n            return !_edgeHidden[ek];\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        get_edges: function(nk) {\n            return adjacent_edges(nk);\n        },\n        expand: function(nk) {\n            _nodeExpanded[nk] = true;\n            apply_filter();\n            dc.redrawAll();\n        },\n        expandedNodes: function(_) {\n            if(!arguments.length)\n                return _nodeExpanded;\n            _nodeExpanded = _;\n            apply_filter();\n            dc.redrawAll();\n            return this;\n        },\n        collapsibles: function(nk, dir) {\n            var whatif = Object.assign({}, _nodeExpanded);\n            delete whatif[nk];\n            var shown = get_shown(_nodeExpanded), 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 _nodeExpanded[nk];\n            apply_filter();\n            dc.redrawAll();\n        },\n        hideNode: function(nk) {\n            _nodeHidden[nk] = true;\n            this.collapse(nk); // in case\n        },\n        hideEdge: function(ek) {\n            if(!options.edgeCrossfilter)\n                console.warn('expanded_hidden needs edgeCrossfilter to hide edges');\n            _edgeHidden[ek] = true;\n            apply_filter();\n            dc.redrawAll();\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 = _mode.parent().portStyle(_mode.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(_mode.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 = _mode.crossSize(), wid = _mode.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(!_mode.nodeCrossfilter())\n            throw new Error('need nodeCrossfilter');\n        var node, callback = _mode.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            _mode.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(!_mode.edgeCrossfilter())\n            throw new Error('need edgeCrossfilter');\n        var edge = {}, callback = _mode.addEdge() || promise_identity;\n        edge[_edgeIdTag] = uuid();\n        edge[_edgeLabelTag] = '';\n        if(_mode.conduct().detectReversedEdge && _mode.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            _mode.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(_mode.conduct().cancelDragEdge)\n                _mode.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) > _mode.dragSize()) {\n            if(_mode.conduct().startDragEdge) {\n                if(_mode.conduct().startDragEdge(_sourceDown)) {\n                    _sourceDown.started = true;\n                } else {\n                    if(_mode.conduct().invalidSourceMessage) {\n                        msg = _mode.conduct().invalidSourceMessage(_sourceDown);\n                        console.log(msg);\n                        if(options.negativeTip) {\n                            options.negativeTip\n                                .content(function(_, k) { k(msg); })\n                                .displayTip(_mode.usePorts() ? _sourceDown.port : _sourceDown.node);\n                        }\n                    }\n                    erase_hint();\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    function draw(diagram, node, edge, ehover) {\n        var select_nodes = diagram.child('select-nodes');\n        if(select_nodes) {\n            if(_mode.clickCreatesNodes())\n                select_nodes.clickBackgroundClears(false);\n        }\n        node\n            .on('mousedown.draw-graphs', function(n) {\n                d3.event.stopPropagation();\n                if(!_mode.dragCreatesEdges())\n                    return;\n                if(options.tipsDisable)\n                    options.tipsDisable.forEach(function(tip) {\n                        tip\n                            .hideTip()\n                            .disabled(true);\n                    });\n                if(_mode.usePorts()) {\n                    var activePort;\n                    if(typeof _mode.usePorts() === 'object' && _mode.usePorts().eventPort)\n                        activePort = _mode.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                        _mode.conduct().invalidTargetMessage &&\n                            console.log(_mode.conduct().invalidTargetMessage(_sourceDown, _sourceDown));\n                        _targetMove = null;\n                        _hintData[0].target = null;\n                    }\n                    else if(_mode.usePorts()) {\n                        var activePort;\n                        if(typeof _mode.usePorts() === 'object' && _mode.usePorts().eventPort)\n                            activePort = _mode.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(_mode.conduct().changeDragTarget) {\n                        var change;\n                        if(_mode.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(_mode.conduct().changeDragTarget(_sourceDown, _targetMove)) {\n                                _crossout = null;\n                                if(options.negativeTip)\n                                    options.negativeTip.hideTip();\n                                msg = _mode.conduct().validTargetMessage && _mode.conduct().validTargetMessage() ||\n                                    'matches';\n                                if(options.positiveTip) {\n                                    options.positiveTip\n                                        .content(function(_, k) { k(msg); })\n                                        .displayTip(_mode.usePorts() ? _targetMove.port : _targetMove.node);\n                                }\n                                _targetValid = true;\n                            } else {\n                                _crossout = _mode.usePorts() ?\n                                    _targetMove && _targetMove.port :\n                                    _targetMove && _targetMove.node;\n                                if(_targetMove && _mode.conduct().invalidTargetMessage) {\n                                    if(options.positiveTip)\n                                        options.positiveTip.hideTip();\n                                    msg = _mode.conduct().invalidTargetMessage(_sourceDown, _targetMove);\n                                    console.log(msg);\n                                    if(options.negativeTip) {\n                                        options.negativeTip\n                                            .content(function(_, k) { k(msg); })\n                                            .displayTip(_mode.usePorts() ? _targetMove.port : _targetMove.node);\n                                    }\n                                }\n                                _targetValid = false;\n                            }\n                    } else _targetValid = true;\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(_mode.conduct().finishDragEdge)\n                        finishPromise = _mode.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(_mode.conduct().cancelDragEdge)\n                        _mode.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(_mode.conduct().dragCanvas)\n                        _mode.conduct().dragCanvas(_sourceDown, coords);\n                    if(_mode.conduct().changeDragTarget && _targetMove)\n                        _mode.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(_mode.conduct().cancelDragEdge)\n                        _mode.conduct().cancelDragEdge(_sourceDown);\n                    erase_hint();\n                } else { // click-node\n                    if(d3.event.target === this && _mode.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(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 _mode = dc_graph.mode('highlight-paths', {\n        draw: draw,\n        remove: remove\n    });\n\n    // update the data source/destination\n    _mode.nodeCrossfilter = property(options.nodeCrossfilter);\n    _mode.edgeCrossfilter = property(options.edgeCrossfilter);\n\n    // modeal options\n    _mode.usePorts = property(null);\n    _mode.clickCreatesNodes = property(true);\n    _mode.dragCreatesEdges = property(true);\n    _mode.dragSize = property(5);\n\n    // draw attributes of indicator for failed edge\n    _mode.crossSize = property(15);\n    _mode.crossWidth = property(5);\n\n    // really this is a behavior or strategy\n    _mode.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    _mode.addNode = property(null); // node -> promise(node2)\n    _mode.addEdge = property(null); // edge, sourceport, targetport -> promise(edge2)\n\n    // or, if you want to drive..\n    _mode.createNode = function(pos, data) {\n        create_node(_mode.parent(), pos, data);\n    };\n\n    return _mode;\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.match-ports', 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 (_strategy.allowParallel() || !has_parallel(sourcePort, targetPort))\n            && _strategy.isValid()(sourcePort, targetPort);\n    }\n    function why_invalid(sourcePort, targetPort) {\n        return !_strategy.allowParallel() && has_parallel(sourcePort, targetPort) && \"can't connect two edges between the same two ports\" ||\n            _strategy.whyInvalid()(sourcePort, targetPort);\n    }\n    var _strategy = {\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 _strategy;\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 (_strategy.allowParallel() || !_wedges.some(function(e) {\n            return sourcePort.edges.indexOf(e) >= 0 && targetPort.edges.indexOf(e) >= 0;\n        })) && _strategy.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 _strategy = {\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.requestRefresh(0);\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.requestRefresh(0);\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 _strategy;\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    _style.portBounds = function(p) {\n        var R = _style.largeRadius.eval(p),\n            pos = _style.portPosition(p);\n        return {\n            left: pos.x - R/2,\n            top: pos.y - R/2,\n            right: pos.x + R/2,\n            bottom: pos.y + R/2\n        };\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 sym ? 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, node_cluster = {}, clusters = [];\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        // TODO: if this version exists in the wild, look at how it does subgraphs/clusters\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({}, digraph.edge(e.v, e.w), {\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        // iterative bfs for variety (recursion would work just as well)\n        var cluster_names = {};\n        var queue = digraph.children().map(function(c) { return Object.assign({parent: null, key: c}, digraph.node(c)); });\n        while(queue.length) {\n            var item = queue.shift(),\n                children = digraph.children(item.key);\n            if(children.length) {\n                clusters.push(item);\n                cluster_names[item.key] = true;\n            }\n            else\n                node_cluster[item.key] = item.parent;\n            queue = queue.concat(children.map(function(c) { return {parent: item.key, key: c}; }));\n        }\n        // clusters as nodes not currently supported\n        nodes = nodes.filter(function(n) {\n            return !cluster_names[n.name];\n        });\n    }\n    var graph = {nodes: nodes, links: edges, node_cluster: node_cluster, clusters: clusters};\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\ndc_graph.file_formats = [\n    {\n        exts: 'json',\n        mimes: 'application/json',\n        from_url: d3.json,\n        from_text: function(text, callback) {\n            callback(null, JSON.parse(text));\n        }\n    },\n    {\n        exts: ['gv', 'dot'],\n        mimes: 'text/vnd.graphviz',\n        from_url: function(url, callback) {\n            d3.text(url, process_dot.bind(null, callback));\n        },\n        from_text: function(text, callback) {\n            process_dot(callback, null, text);\n        }\n    },\n    {\n        exts: 'psv',\n        mimes: 'text/psv',\n        from_url: function(url, callback) {\n            d3.dsv('|', 'text/plain')(url, process_dsv.bind(null, callback));\n        },\n        from_text: function(text, callback) {\n            process_dsv(callback, null, d3.dsv('|').parse(text));\n        }\n    },\n    {\n        exts: 'csv',\n        mimes: 'text/csv',\n        from_url: function(url, callback) {\n            d3.csv(url, process_dsv.bind(null, callback));\n        },\n        from_text: function(text, callback) {\n            process_dsv(callback, null, d3.csv.parse(text));\n        }\n    }\n];\n\ndc_graph.match_file_format = function(filename) {\n    return dc_graph.file_formats.find(function(format) {\n        var exts = format.exts;\n        if(!Array.isArray(exts))\n            exts = [exts];\n        return exts.find(function(ext) {\n                return new RegExp('\\.' + ext + '$').test(filename);\n        });\n    });\n};\n\ndc_graph.match_mime_type = function(mime) {\n    return dc_graph.file_formats.find(function(format) {\n        var mimes = format.mimes;\n        if(!Array.isArray(mimes))\n            mimes = [mimes];\n        return mimes.includes(mime);\n    });\n};\n\nfunction unknown_format_error(filename) {\n    var spl = filename.split('.');\n    if(spl.length)\n        return new Error('do not know how to process graph file extension ' + spl[spl.length-1]);\n    else\n        return new Error('need file extension to process graph file automatically, filename ' + filename);\n}\n\nfunction unknown_mime_error(mime) {\n    return new Error('do not know how to process mime type ' + mime);\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 {\n        var format;\n        if(/^data:/.test(file1)) {\n            var parts = file1.slice(5).split(/,(.+)/);\n            format = dc_graph.match_mime_type(parts[0]);\n            if(format)\n                format.from_text(parts[1], callback);\n            else callback(unknown_mime_error(parts[0]));\n        } else {\n            var file1noq = ignore_query(file1);\n            format = dc_graph.match_file_format(file1noq);\n            if(format)\n                format.from_url(file1, callback);\n            else callback(unknown_format_error(file1noq));\n        }\n    }\n};\n\ndc_graph.load_graph_text = function(text, filename, callback) {\n    var format = dc_graph.match_file_format(filename);\n    if(format)\n        format.from_text(text, callback);\n    else callback(unknown_format_error(filename));\n};\n\ndc_graph.data_url = function(data) {\n    return 'data:application/json,' + JSON.stringify(data);\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', 'key'];\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\n * [\"fake crossfilter group\"](https://github.com/dc-js/dc.js/wiki/FAQ#fake-groups)\n * for the case of a group which is 1:1 with the rows of the data array.\n *\n * Although `dc_graph` can be used with aggregated or reduced data, typically the nodes and edges\n * are rows of two data arrays, and each row has a column which contains the unique identifier for\n * the node or edge.\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. Returns an object containing all three.\n         *\n         *  1. If `source` is an array, create a crossfilter from it. Otherwise assume it is a\n         *  crossfilter instance.\n         *  2. Create a dimension on the crossfilter keyed by `id_accessor`\n         *  3. Create a group from the dimension, reducing to the row when it's filtered in, or\n         * `null` when it's out.\n         *  4. Wrap the group in a fake group which filters out the nulls.\n         *\n         * The resulting fake group's `.all()` method returns an array of the currently filtered-in\n         * `{key, value}` pairs where the key is `id_accessor(row)` and the value is the row.\n         * @method make\n         * @memberof dc_graph.flat_group\n         * @param {Array} source - the data array for crossfilter, or a 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(source, id_accessor) {\n            var cf;\n            if(Array.isArray(source))\n                cf = crossfilter(source);\n            else cf = source;\n            return dim_group(cf, id_accessor);\n        },\n        /**\n         * Create a flat dimension and group from an existing crossfilter.\n         *\n         * @method another\n         * @memberof dc_graph.flat_group\n         * @deprecated use .make() instead\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: deprecate_function('use .make() instead', function(cf, id_accessor) {\n            return this.make(cf, 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, options) {\n    options = options || {};\n    var both = options.both || false,\n        reduce = options.reduce || null;\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 = both ? true : source < target;\n                var min = dir ? source : target, max = dir ? target : source;\n                ST[min] = ST[min] || {};\n                var entry;\n                if(ST[min][max]) {\n                    entry = ST[min][max];\n                    if(reduce)\n                        entry.original = reduce(entry.original, kv);\n                } else ST[min][max] = entry = {in: 0, out: 0, original: Object.assign({}, 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.path-selector', function() {\n                  highlight_paths_group.hover_changed([path_data]);\n              })\n              .on('mouseout.path-selector', function() {\n                  highlight_paths_group.hover_changed(null);\n              })\n              .on('click.path-selector', 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.path-selector', function(nop, eop, paths) {\n            hovered = selected = null;\n            paths_ = paths;\n            selector.redraw();\n        })\n        .on('hover_changed.path-selector', function(hpaths) {\n            hovered = hpaths;\n            draw_hovered();\n        })\n        .on('select_changed.path-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<N; ++i) {\n            nodes[i] = dc_graph.node_object(i, {circle: \"A\", name: nodePrefix+dc_graph.node_name(i)});\n            for(j=0; j<i; ++j)\n                edges.push(dc_graph.edge_object(namef, i, j, {notLayout: true, undirected: true}));\n        }\n        if(type==='cliquestf')\n            for(i = 0; i<N; ++i) {\n                nodes[i+N] = dc_graph.node_object(i+N);\n                nodes[i+2*N] = dc_graph.node_object(i+2*N);\n                edges.push(dc_graph.edge_object(namef, i, i+N, {undirected: true}));\n                edges.push(dc_graph.edge_object(namef, i, i+2*N, {undirected: true}));\n            }\n        break;\n    case 'wheel':\n        nodes = new Array(N);\n        for(i = 0; i < N; ++i)\n            nodes[i] = dc_graph.node_object(i, {name: nodePrefix+dc_graph.node_name(i)});\n        edges = dc_graph.wheel_edges(namef, _.range(N), N*linkLength/2);\n        var rimLength = edges[0].distance;\n        for(i = 0; i < args[1]; ++i)\n            for(j = 0; j < N; ++j) {\n                var a = j, b = (j+1)%N, t;\n                if(i%2 === 1) {\n                    t = a;\n                    a = b;\n                    b = t;\n                }\n                edges.push(dc_graph.edge_object(namef, a, b, {distance: rimLength, par: i+2}));\n            }\n        break;\n    default:\n        throw new Error(\"unknown generation type \"+type);\n    }\n    var graph = {nodes: nodes, links: edges};\n    callback(null, graph);\n};\n\ndc_graph.wheel_edges = function(namef, nindices, R) {\n    var N = nindices.length;\n    var edges = [];\n    var strutSkip = Math.floor(N/2),\n        rimLength = 2 * R * Math.sin(Math.PI / N),\n        strutLength = 2 * R * Math.sin(strutSkip * Math.PI / N);\n    for(var i = 0; i < N; ++i)\n        edges.push(dc_graph.edge_object(namef, nindices[i], nindices[(i+1)%N], {distance: rimLength}));\n    for(i = 0; i < N/2; ++i) {\n        edges.push(dc_graph.edge_object(namef, nindices[i], nindices[(i+strutSkip)%N], {distance: strutLength}));\n        if(N%2 && i != Math.floor(N/2))\n            edges.push(dc_graph.edge_object(namef, nindices[i], nindices[(i+N-strutSkip)%N], {distance: strutLength}));\n    }\n    return edges;\n};\n\ndc_graph.random_graph = function(options) {\n    options = Object.assign({\n        ncolors: 5,\n        ndashes: 4,\n        nodeKey: 'key',\n        edgeKey: 'key',\n        sourceKey: 'sourcename',\n        targetKey: 'targetname',\n        colorTag: 'color',\n        dashTag: 'dash',\n        nodeKeyGen: function(i) { return 'n' + i; },\n        edgeKeyGen: function(i) { return 'e' + i; },\n        newComponentProb: 0.1,\n        newNodeProb: 0.9,\n        removeEdgeProb: 0.75,\n        log: false\n    }, options);\n    if(isNaN(options.newNodeProb))\n        options.newNodeProb = 0.9;\n    if(options.newNodProb <= 0)\n        options.newNodeProb = 0.1;\n    var _nodes = [], _edges = [];\n    function new_node() {\n        var n = {};\n        n[options.nodeKey] = options.nodeKeyGen(_nodes.length);\n        n[options.colorTag] = Math.floor(Math.random()*options.ncolors);\n        _nodes.push(n);\n        return n;\n    }\n    function random_node() {\n        return _nodes[Math.floor(Math.random()*_nodes.length)];\n    }\n    return {\n        nodes: function() {\n            return _nodes;\n        },\n        edges: function() {\n            return _edges;\n        },\n        generate: function(N) {\n            while(N-- > 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","dc_graph.supergraph = function(data, options) {\n    if(!dc_graph.supergraph.pattern) {\n        var mg = metagraph;\n        var graph_and_subgraph = {\n            nodes: {\n                graph: mg.graph_pattern(options),\n                sg: mg.subgraph_pattern(options),\n                subgraph: mg.graph_pattern(options)\n            },\n            edges: {\n                to_sg: {\n                    source: 'graph',\n                    target: 'sg',\n                    input: 'parent'\n                },\n                from_sg: {\n                    source: 'subgraph',\n                    target: 'sg',\n                    input: 'child'\n                }\n            }\n        };\n        dc_graph.supergraph.pattern = mg.compose(mg.graph_detect(graph_and_subgraph));\n    }\n    return dc_graph.supergraph.pattern.node('graph.Graph').value().create(data);\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
-- 
GitLab