28-11-2019 (v3.1.1)

 * dia.CellView - prevent DOM exceptions when invalid attrs provided
 * dia.ToolView - prevent `contextmenu` event (uses paper.options.guard now)

15-10-2019 (v3.1.0)

 * add RoughJS demo
 * add elementTools: Button, Remove, Boundary
 * improve low-level performance for large graphs
 * fix ES5 dependencies
 * dia.Paper - validateMagnet() callback has `evt` argument
 * dia.Paper - ignore viewport when removing views, register unmounted views on render
 * dia.Graph - fix bfs() stop condition
 * dia.Element - make sure only elements are taken into account in fitEmbeds()
 * dia.LinkView - fix label rendering after multiple changes made to model
 * dia.LinkView - fix missing `pointerup` event for non-interactive labels
 * linkTools.Boundary - padding can be defined separately for each side
 * dia.ToolView - support reusable tools
 * connectors.jumpover - add `radius` option to make corners rounded
 * layout.DirectedGraph - remove unnecessary vertices
 * dia.attributes - add `stubs` option to `connection` attribute
 * dia.attributes - add `displayEmpty` for text elements
 * Vectorizer - fix e2c() overflowing the stack in normalizePathData()
 * Geometry - add simplify() to Polyline (remove redundant points)

02-08-2019 (v3.0.4)

  * package.json - add a browser key to point to dist (fix webpack build in IE11)
  * dia.Paper - pass Backbone model options to view update (cell removal & `z` change)
  * dia.CellView -  fix `mouseleave` event in async mode
  * linkTools.Vertices - fix vertexAdding option

23-07-2019 (v3.0.3)

  * allow for automatic patch upgrades for dependencies
  * changes to config options are respected
  * dia.Paper - ensure SVG document has id
  * dia.Paper - fix viewport matching for links
  * dia.Graph - make hasActiveBatches() use the same logic for various signatures
  * dia.CellView - properly separate elements and ports CSS selectors

27-06-2019 (v3.0.2)

  * layout.DirectedGraph - allow injecting `dagre` and `graphlib` as an option property
  * routers.Manhattan - use fallback when source and target are exactly the same
  * fix markup TypeScript definition

17-06-2019 (v3.0.1)

  * remove all global variables
  * dia.LinkView - fix `cell:pointerup` event

07-06-2019 (v3.0.0)

  * dia.Paper - async mode revamped (viewport matching, rendering progress) [breaking change]
  * dia.Paper - cells are rendered into the `paper.cells` (previously called `paper.viewport`), transformations are applied to `paper.layers` (parent of `paper.cells`) [breaking change]
  * dia.Graph - getBBox() accepts no parameters and returns the bounding box of the entire graph [breaking change]
  * dia.Graph - getCellsBBox(cells) does not ignore links passed via `cells` parameter [breaking change]
  * dia.CellView - listening for underlying model changes switched from a specific attribute change (e.g. `change:size`) to a general `change` event [breaking change]
  * dia.CellView - remove deprecated getStrokeBBox() [breaking change]
  * Vectorizer - change `xmlns` to `svg` namespace, add correct `xmlns` namespace [breaking change]
  * remove deprecated `PortsModelInterface` and `PortsViewInterface` from `joint.shapes.basic` [breaking change]
  * upgrade dependencies (Backbone v1.4.0, Dagre v0.8.4, Graphlib v2.1.6, jQuery v3.4.1)
  * full support for ES Modules
  * support for Link to Link connections
  * dia.Paper - implement viewport matching (remove views from the DOM when not in the viewport) via `viewport` option and checkViewport()
  * dia.Paper - add freeze(), unfreeze(), isFrozen() and option `frozen` to stop/start views updates
  * dia.Paper - add requireView(), dumpViews(), updateViews() to force views to update
  * dia.Paper - add sorting options (none, approximate, exact)
  * dia.Paper - add `anchorNamespace`, `linkAnchorNamespace`, `connectionPointNamespace`, `defaultLinkAnchor` options
  * dia.Paper - add `useModelGeometry` for scaleContentToFit(), fitToContent(), getContentBBox(), getContentArea()
  * dia.Paper - add `contentArea` for scaleContentToFit(), fitToContent()
  * dia.Paper - fitToContent() returns area (g.Rect) of the content
  * dia.Graph - add `indirect` option for getNeighbors(), getConnectedLinks(), isNeighbor() for link-link connections
  * dia.Link - add `priority` attribute for anchors
  * dia.Link - add getSourceCell(), getTargetCell(), getPolyline(), getSourcePoint(), getTargetPoint(), getBBox()
  * dia.Link - getSourceElement() and getTargetElement() finds also indirect elements
  * dia.Link - add angle, keepGradient and ensureLegibility options for labels
  * dia.ElementView - add findPortNode()
  * dia.LinkView - properly revert `pointer-events` attribute after a link interaction
  * dia.LinkView - add root node selector for string markup
  * dia.CellView - keep a dragged always view under the pointer (esp. when `restrictTranslate` in use)
  * dia.CellView - make sure `cell:mouseleave` and `cell:mouseenter` events are always called when the mouse leaves/enters a cell
  * dia.CellView - fix referenced bounding box for nodes outside the rotatable group
  * dia.Cell - add generateId(), generatePortId()
  * anchors - modelCenter anchor accepts `dx`, `dy` options
  * linkAnchors - add anchors for link-link connections (ratio, length, perpendicular, closest)
  * linkTools - add `stopPropagation` option for Vertices tool
  * shapes.standard - add `standard.InscribedImage` shape
  * util - breakText() prefers breaking words at hyphens
  * util - nextFrame() extra parameters are appended to the arguments the callback receives
  * Vectorizer - fix translateAndAutoOrient() for edge cases
  * Geometry - add divideAt() and divideAtLength() for paths
  * Geometry - supports scientific notation for paths defined via SVGPath data
  * Geometry - add Line.prototype.angle(), Point.prototype.chooseClosest()
  * Geometry - add containsPoint() for Polyline, Path, Curve and Line
  * Geometry - fix Path.prototype.closestPoint() ending in an infinite loop
  * Geometry - add random()
  * add Mix Bus, ForeignObject demos

12-11-2018 (v2.2.1)
  * utils - fix breakText() definition in Typescript
  * dia.CellView - findAttribute() docs
  * grunt - wrapper files use file extension .js.partial
  * demos - improvements

30-10-2018 (v2.2.0)
  * update insecure dependencies (mainly Lodash v4.17.11)
  * use Karma+Istanbul to run tests
  * dia.Graph - getCellsBBox() takes cells' rotation into account
  * dia.Graph - fix cell removal after dry flag passed
  * dia.Paper - support relative dimensions (e.g. width='100%')
  * dia.Paper - add stopDelegation interactive option
  * dia.Paper - add magnetThreshold option (create a link when the pointer leaves the magnet)
  * dia.Paper - allow to stop propagation of paper events
  * dia.Element - add removePorts()
  * dia.ElementView - add element:magnet:pointerclick, element:magnet:dblpointerclick, element:magnet:contextmenu events
  * dia.ElementView - fix embeddingMode for Lodash v4+
  * dia.ElementView - fix cell:pointerclick in Chrome after DOM change
  * dia.LinkView - prevent multiple validate connections for already snapped magnets
  * dia.LinkView - fix label rendering in IE
  * dia.Cell - JSON Markup accepts textContent and groupSelector properties
  * dia.CellView - presentation attributes (attrs) are now applied in the order given
  * mvc.View - prevent multiple onRender() calls
  * mvc.View - add findAttribute()
  * mvc.View - prevent className undefined
  * dia.attributes - add ellipsis option for textWrap
  * dia.attributes - add refWidth2 and refHeight2
  * shapes.standard - add background to BorderedImage
  * shapes.standard - add InscribedImage shape
  * shapes.pn - fix PlaceView
  * connectionPoints.Boundary - fix for non-graphical elements
  * routers.manhattan - prevent rounding errors, add padding option
  * routers.orthogonal - add padding option
  * linkTools - fix touch interactions
  * utils - normalize event.target in normalizeEvent() for <use> tag in IE
  * utils - improve parseCssNumeric() for restrictUnit parameter
  * Vectorizer - add isSVGGraphicsElement()
  * fix legacy PortsViewInterface

1-8-2018 (v2.1.4)
  * reconfigure eslint
  * add .editorconfig
  * dia.Element - fix hasPorts() when no items defined
  * dia.LinkView - stop preventing propagation for legacy link tools events

29-6-2018 (v2.1.3)
  * dia.CellView - fix ambiguous magnet selector
  * dia.LinkView - trigger missing link:pointerdown event on label pointerdown
  * dia.LinkView - fix connection update for loop links
  * dia.Link - improve reparenting (loop link embeds into the connected element, link connected to ancestor and its descendant embeds into the ancestor)
  * dia.Graph - getConnectedLinks() does not contain enclosed links (not necessary embedded links), add includeEnclosed option to get all connected links.
  * dia.Paper - fix cell:contextmenu event
  * dia.Paper - fix missing magnet reference for validateConnection()
  * dia.LinkView - fix backwards compatibility for linkConnectionPoint option signature
  * dia.attributes - fix textWrap attribute
  * Geometry - improve polyline parsing
  * improve advanced tutorials

8-5-2018 (v2.1.2)
  * dia.CellView - fix magnet lookup based on the port property
  * docs - fix broken links

7-5-2018 (v2.1.1)
  * layout.PortLabel - fix manual position
  * anchors - prevent exception when reference node not in the DOM

27-4-2018 (v2.1.0)
  * update Tutorials
  * shapes.Standard - add new set of high-performance elements and links
  * dia.LinkView - new flexible definitions based on geometric representation
  * dia.LinkView - refactor event handlers
  * dia.LinkView - introduce anchors, connectionPoints and connectionStrategy
  * dia.LinkView - add getConnection(), getSerializedConnection(), getConnectionSubdivisions(), getPointAtRatio(), getTangentAtLength(), getTangentAtRatio() getClosestPoint() and getClosestPointLength()
  * dia.LinkView - add getVertexIndex(), getLabelCoordinates()
  * dia.Link - add vertex API
  * dia.Link - add label API and allow define a default label
  * dia.Link - add source(), target(), router(), connector()
  * anchors - ready-to-use anchors (center, top, bottom, left, right, topLeft, topRight, bottomLeft, bottomRight, perpendicular, midSide)
  * connectionPoints - ready-to-use connection points (anchor, bbox, rectangle, boundary),
  * connectionStrategies - predefined connection strategies (defaulAnchor, pinAbsolute, pinRelative)
  * dia.ElementView - allow element's rotation without rotatable group
  * dia.ElementView - refactor event handlers
  * dia.ElementView - apply vector-effect: non-scaling-stroke to nodes inside ths scalable group only
  * dia.Element - add angle()
  * dia.CellView - render markup from JSON (link, element, ports and labels)
  * dia.Cell - avoid unnecessary z-index changes during toFront or toBack
  * dia.ToolsView - set of tools for a link
  * dia.ToolView - base class for a single link tool
  * linkTools - ready-to-use tools (vertices, segments, anchor, arrowhead, boundary, remove button)
  * dia.Paper - complete set of events
  * dia.Paper - add allowLink option to revert/remove invalid links
  * dia.Paper - add getContentArea()
  * dia.Paper - findParentBy option can be defined as a function
  * dia.Paper - consequitive pointerdown, pointermove and pointerup can share event data
  * dia.Paper - fire pointerup event on touchcancel
  * dia.Paper - improve preventing image dragging in FireFox
  * dia.attributes - sourceMarker, targetMarker and vertextMarker receive default stroke, fill and opacity values from its context
  * dia.attributes - add refRInscribed, refRCircumscribed, refD, refPoints, title, textVerticalAnchor attributes
  * dia.attributes - add connection, atConnectionLength, atConnectionRatio
  * routers.Manhattan - adaptive grid for pathfinding
  * routers - supports anchors (don't necessary start and end in the center of the magnet)
  * layout.DirectedGraph - prevent undesired input cells sorting
  * Vectorizer - add toGeometryShape(), normalizePathData(), tagName() and id to prototype
  * Vectorizer - add transformLine() and transformPolyline()
  * Vectorizer - text() accepts textVerticalAnchor option
  * Vectorizer - improve Kappa value
  * Geometry - add Path and Curves
  * Geometry - add Polyline bbox(), scale(), translate(), clone() and serialize()
  * Geometry - implement intersections of line with various shapes
  * Geometry - add Point lerp() for linear interpolation
  * shapes.basic.TextBlock - sanitize text
  * util - normalizeSides() validates input and accepts horizontal and vertical attributes
  * util - add parseDOMJSON(), dataUriToBlob(), downloadBlob(), downloadDataUri() and isPercentage()

15-11-2017 (v2.0.1)
  * toggleFullscreen() - fix canceling fullscreen in an iframe
  * dia.Link - fix default label font color (IE)
  * dia.Cell - fix removeProp() on arrays
  * dia.Graph - fromJSON() does not ignore dry option anymore

23-10-2017 (v2.0.0)
  * Typescript definitions refactored (breaking change of the release)
  * JointJS now compatible with Lodash v4 (see `demo/lodash4` for instructions)
  * Geometry - add Polyline with pointAtLength(), length(), closestPointLength(), closestPoint() and convexHull()
  * Geometry - add cross(), dot(), squaredDistance(), closestPoint(), closestPointNormalizedLength(), vector(), vectorAngle(), angleBetween() to Point
  * Vectorizer - add children() and getBBox()
  * Vectorizer - fix parseTransformString() and matrixToTransformString()
  * Vectorizer - make the text `y` coordinate based on the first line `line-height` in text()
  * Vectorizer - add option to define the end-of-line character for text()
  * layout.DirectedLayout - add ability to position labels
  * layout.DirectedLayout - fix bug when the elements passed do not include their parents
  * dia.Paper - add `clickThreshold`, `moveThreshold` and `preventDefaultBlankAction` options
  * dia.Paper - add cancelRenderViews() for async mode
  * dia.CellView - do not reset node's transform attribute if no transform applied update()
  * dia.Element - position() can be called with { deep: true } option to set position of the embeds
  * dia.attributes - `text` attribute takes `x` into account
  * dia.attributes - add `event` for easier events handling on CellViews and `resetOffset` for paths to start at 0,0
  * dia.LinkView - stop triggering link:connect/link:disconnnect when connection not allowed
  * dia.LinkView - can sendToken() backwards
  * highlighters.Stroke - fix for magnets inside scalable group and with zero width or height

31-03-2017 (v1.1.0)
  * add TypeScript definitions
  * update jQuery v3.1.1
  * Geometry - improve Point/Rect prototype.round(precision) - fix coordinates being converted to a string after round() with a precision called, allow negative precision
  * Geometry - add Rect inflate(), bottomLine(), topLine(), leftLine() and rightLine()
  * Geometry - Point offset() and difference() accept both a point and x,y coordinates
  * Geometry - add Line equals()
  * Geometry - Line intersection() renamed to intersect() and calculates intersection points with another line or rectangle
  * Vectorizer - stop accessing deprecated `nodeName` and `nodeValue` attribute properties
  * Vectorizer - add prototype.contains() method
  * Vectorizer - add matrixToTransformString() method as opposed to transformStringToMatrix()
  * Vectorizer - add ensureId() method
  * Vectorizer - add appendTo() method
  * Vectorizer - V(node); does not set automatically id on the node anymore
  * Vectorizer - text() with content doesn't set invalid display: null on node anymore
  * Vectorizer - fix convertRectToPathData() for rounded rectangles
  * dia.attributes - add namespace for defining custom attributes, allow camelCase attribute style
  * dia.attributes - new attributes `sourceMarker`, `targetMarker`, `vertexMarker`, `textWrap`, `refRx`, `refRy`, `refCx`, `refCy`, `refX2`, `refY2`
  * dia.attributes - improve `text` attribute performance on cellView update
  * dia.attributes - fix mixing various attributes (e.g. `transform`, `refX` and `refDx` now add up)
  * dia.Paper - add defineGradient(), defineFilter(), defineMarker() and isDefined() methods
  * dia.Paper - fix async rendering when cell was previously member of different graph.
  * dia.Paper - improve grid precision, added new grid patterns, update drawGrid() options definition.
  * dia.Paper - `blank:pointerup` event is fired only after a preceeding `blank:pointerdown` event
  * dia.Paper - add paperToLocalPoint(), clientToLocalPoint(), pageToLocalPoint(), localToPaperPoint(), localToPagePoint() and localToClientPoint().
  * dia.Paper - add paperToLocalRect(), clientToLocalRect(), pageToLocalRect(), localToPaperRect(), localToClientRect() and localToPageRect()
  * dia.Paper - add clientOffset() and pageOffset()
  * dia.Cell - make cell.attr() work as getter
  * dia.Cell - prop(), removeProp() accept also path defined as an array
  * dia.Element - add size(), getPortPositions() methods
  * dia.Element - rotate() doesn't translate embeddeded cells anymore
  * dia.Link - allow arbitrary shapes for labels
  * dia.LinkView - fix link translating when embedded and has no marker
  * dia.LinkView - set correct port and selector on the link
  * mvc.View - prevent extend() from modifying prototype propertires
  * ports events `ports:add` and `ports:remove` triggered when port is added to element/removed from element
  * utils - fix toggleFullScreen() in IE
  * utils - breakText() takes the lineHeight style into account
  * util - change cells() wrapper also accept a single cell
  * highlighter.Stroke - allow multiple strokes to be applied to a single cellView magnet, prevent memory leaks
  * connectors.jumpover - fix on graph `reset`

18-11-2016 (v1.0.3)
  * make compatibility changes towards jQuery 3.1
  * shapes.TextBlock - fix `SVGForeignObject` detection
  * dia.Graph - fix graph references stored on cells (when a cell added to another graph)
  * layout.DirectedGraph - fix cell's graph references overriden by the layout
  * Vectorizer - remove deprecated attributes' `nodeValue` and `nodeName` calls

27-10-2016 (v1.0.2)
  * Vectorizer - fix `convertToPathData()` for polyline.
  * add yarn.lock
  * improve documentation

20-09-2016 (v1.0.1)
  * All joint views now use the `joint-` class name prefix for their class names.
  * dia.Element - make it easy to add ports to an arbitrary element, introduced API for ports manipulation
  * shapes.devs.Model - uses new port API internally. shapes.basic.PortsViewInterface, shapes.basic.PortsInterface are marked as `deprecated`
  * layout.Port - various layouts for positioning ports
  * layout.PortLabel - various layouts for positioning labels relatively to ports
  * joint.util.deepSupplement, joint.util.supplement, joint.util.mixin, joint.util.deepMixin marked as `deprecated`. Use lodash _.defaultsDeep, _.defaults, _.assign, _.mixin instead
  * layout.DirectedGraph - layout() returns a bbox
  * dia.LinkView - unify `link:options` event signature with the rest of events (breaking change)
  * dia.LinkView - fix perpendicular links outside the pahper area
  * dia.ElementView - fix resizing without scalable group, re-render element when markup change
  * dia.ElementView - improve x-alignment and y-alignment for text
  * other bug fixes and improvements

13-06-2016 (v0.9.10)
* Fixes for webpack, browserify

31-05-2016 (v0.9.9)
  * JointJS:
    * Added env namespace with env.test(name) and env.addTest(name, fn) methods
    * Added highlighters namespace with two highlighters (stroke and opacity). Highlighting now done automatically when: embedding an element, connecting a link to a port or element.
    * dia.Paper:
      * Added paper.drawGrid(opt) - draws grid lines on the paper's DOM element.
      * Added paper.setGridSize(gridSize) - changes the grid size of the paper.
      * Added paper.setInteractivity() for changing interactivity.
      * Added blank:mousewheel and cell:mousewheel events to paper
      * Added link:connect, link:disconnect paper events for easier link source/target change detection
      * Changed the link tool event signature (e.g. `link:options`) to be the same as the rest of the cell events.
    * dia.Cell:
      * Added isElement() and isLink() methods
    * dia.Element:
      * Added scale() for transforming element by providing a scale ratio and origin.
    * dia.Link:
      * Added scale() for transforming link by providing a scale ratio and origin.
    * dia.Graph:
      * Added resize(), resizeCells() for a group resizing
      * Added getCellsBBox() for getting a group bounding box
      * Added removeCells()
      * Can now use addCells(), removeCells(), and resetCells() with the same method signature. For example: addCells(cell, cell) addCells(cell, cell, opt) addCells([cell, cell]) addCells([cell, cell], opt) are all valid usage.
    * layout.DirectedGraph:
      * Added layout() `align` option for rank nodes alignment.
  * Vectorizer:
    * Added transform() method to apply SVG matrix to SVG element
    * Added empty(), before() method
    * prepend() method now accepts single or multiple nodes
    * createSVGTransform() now accepts optionally an SVG matrix
  * Geometry:
    * Added point.scale(), rect.scale() - scale point/rect with given origin.
    * Added point.toJSON(), rect.toJSON() - converts point/rect into JSON object.
    * Added leftMiddle(), rightMiddle(), topMiddle(), bottomMiddle() for finding middle points of rect sides.
    * Added ellipse.fromRect(), rect.fromEllipse() for rect-ellipse interchangeability.

19-12-2015 (v0.9.6/v0.9.7)
  * dia.Graph introduces new functions for traversing graphs: dfs(), bfs(), search(), isSuccessor(), isPredecessor(), getPredecessors(), getSuccessors(), isNeighbor(), isSource(), isSink(), getSources(), getSinks(), getSubgraph(), getFirstCell(), getLastCell() and getCells()
  * new functions for cloning cells dia.Graph.cloneCells(), dia.Graph.cloneSubgraph()
  * dia.Element.resize() function has been extended with 'direction' option allowing for resizing to any side
  * new convenient methods for getting source/target elements added to dia.Link: getSourceElement() and getTargetElement()
  * dia.Paper has a new option 'multiLinks' that when set to false, prevents from creating multiple links between the same elements
  * dia.Paper has a new option function 'guard' that allows for preventing the paper from handling UI events
  * dia.Paper.findViewsInArea() has been extended with 'strict' option that when set, returns only views that are contained within the area passed in the argument
  * Vectorizer adds a new method 'transformPoint()' for a convenient way transform points via SVG transformation matrices
  * Geometry adds a new function rect.union()
  * another new utility function added: joint.util.setAttributesBySelector() for setting attributes on DOM elements referenced by a selector
  * dia.Element and dia.Link has a new function getAncestors() that returs an array of ancestor cells
  * dia.LinkView enables for setting a custom markup for its secondary tools (enabled via the 'doubleLinkTools' option)
  * dia.Graph getNeighbors() function extended with 'inbound' and 'outbound' options
  * dia.Graph has a new translate() method for translating all elements in the graph
  * routers.manhattan introduces new options 'startDirections', 'endDirections' to control what direction a link can start/end; and 'excludeTypes' to ignore certain element types as obstacles
  * links are now much faster when used with manhattan router
  * fixed a critical bug in upcoming Google Chrome which removed the native getTransformToElement() method on SVG elements
  * other bug fixes and improvements

08-09-2015 (v0.9.5)
  * layout.DirectedGraph upgrades Dagre to v0.7.1
  * layout.DirectedGraph introduces new option 'resizeClusters' to reposition and resize cluster elements (parents of other elements) so that they embody their children
  * cells get removeProp() method for removing - possibly nested - properties
  * cells get new addTo() method as a syntactic sugar for adding them to joint.dia.Graph
  * prop() methods on cells now accepts 'undefined' as a value (instead of behaving like a getter)
  * remove() method now correctly propagates the options object to all listeners
  * routers.Manhattan router was improved to cope with hierarchical diagrams with embedded elements and does not consider ancestors of elements as obstacles
  * routers.Manhattan router got smarter, finding better paths between source and target of a link
  * new router for links 'oneSide' that always routes links to/from a certain side specified
  * new 'jumpover' connector type
  * Vectorizer adds sample() method for interpolating any SVG path with discrete equidistant points
  * Vectorizer adds convertToPath(), convertToPathData() and findIntersection() functions
  * Vectorizer adds findAnnotationsAtIndex(), findAnnotationsBetweenIndexes() and shiftAnnotations() helper functions manipulating text annotations (see Vectorizer:text())
  * Vectorizer now sets 'v-line' class to all text lines rendered with text() and 'v-empty-line' for lines that are empty
  * Vectorizer find() now returns an array of vectorizer elements, not the DOM NodeList
  * Vectorizer V() function now throws an error if invalid markup is given to it making wrong shape definitons visible to the programmer
  * Vectorizer bbox() now does not round values making calculations more precise
  * Geometry adds rect:equals(), rect:snapToGrid() and rect:intersect() functions
  * Geometry adds clone() method to all objects
  * new events in joint.dia.Paper link:pointerdown, link:pointerdown, link:pointermove, link:pointerup, element:pointerdown, element:pointermove, element:pointerup
  * new events in joint.dia.Paper cell:contextmenu and blank:contextmenu
  * new maxWidth and maxHeight options in joint.dia.Paper fitToContent() method
  * joint.dia.Paper adds labelMove option to the 'interactive' object for enabling moving labels via UI
  * joint.dia.Paper findViewByModel() significantly improved performance
  * fixes in joint.dia.Paper async rendering
  * new 'restrictTranslate' option in joint.dia.Paper for restricting movement of elements
  * joint.dia.Paper introduces new 'cellViewNamespace' option for declaring custom namespace for views (defaults to 'joint.shapes')
  * joint.dia.Paper 'elementView' and 'linkView' options can be now functions
  * joint.dia.Paper introduces new 'defaultRouter' and 'defaultConnector' options
  * joint.dia.Paper introduces new 'linkPinning' option to disable creating links without source/target
  * joint.dia.Paper now ignores mouse events that are not relevant (events that do not target the internal SVG document or a cell)
  * joint.dia.Paper remove() make a proper cleanup of all views
  * fixed using multiple joint.dia.Paper objects on the same page so that they don't share any options
  * fixed normalization of touch events that now expose stopPropagation() and preventDefault() as all other events do
  * new method findModelsUnderElement() in joint.dia.Graph for finding elements below another element
  * joint.dia.Graph fixes the fetch() method
  * joint.dia.Graph introduces new 'cellNamespace' option for declaring custom namespace for models (defaults to 'joint.shapes')
  * joint.dia.Graph adds new method getCells()
  * joint.dia.Graph getNeighbors() method improved and extended with 'deep' option to better support hierarchical diagrams containing embedded elements
  * joint.dia.Link adds offset property on labels and implements dragging labels off the links
  * joint.dia.Element adds fitEmbeds() method for resizing the element so that it fits all the embedded elements inside it
  * joint.dia.ElementView getBBox() now returns the rect object of Geometry library that directly exposes various math functions for rectangles
  * new joint.util.getElementBBox() function for getting a bounding box of both HTML and SVG elements
  * new joint.util.normalizSides() function
  * new joint.util.sortElements() function for sorting DOM elements
  * add an optional context parameter to joint.util.nextFrame()
  * new filters joint.filter.outline and joint.filter.highlight
  * special JointJS attributes ref-x, ref-y, ref-width and ref-height can be specified in percentages
  * joint.dia.Link routers and connector can be now specified as functions
  * source code passed through JSCS checker, fixed coding style and indentation
  * Lodash upgraded to the latest version v3.10.1
  * Backbone upgraded to v1.2.1
  * make JointJS compatible with Browserify, Webpack and RequireJS
  * other fixes and improvements

03-02-2015 (v0.9.3)
  * add cell:highlight and cell:unhilight events to dia.Paper for custom highlithing
  * add isEmbeddedIn() method to dia.Element and dia.Link
  * introduce "deep" option in toFront() and toBack() methods on cells
  * introduce validateEmbedding() optional function on dia.Paper
  * add getCommonAncestor() method to dia.Graph
  * add reparent() method to dia.Link
  * add getEmbeddedCells() with "deep", "breadthFirst" options to dia.Element
  * extend getConnectedLink() method on dia.Graph with "deep" option
  * add joint.util.breakText() function for auto-breaking text into lines
  * add getBBox() method to dia.Graph for finding the compound bounding box of more elements
  * add cell:mouseover and cell:mouseout events to dia.Paper
  * add isLink() method to cells for a quick check if cell is a link or an element
  * add new special attributes "ref-width" and "ref-height"
  * add support for text along paths to Vectorizer and also via cell attrs
  * add new options parameter to dia.Element:translate()
  * add new "fitToContent" options "minWidth" and "minHeight" in dia.Paper
  * expose "defs", "viewport" and "svg" properties on dia.Paper
  * many other improvements and bug fixes

16-09-2014 (v0.9.2)
  * add joint.version property with the JointJS version currently in use
  * extend interactive option in dia.Paper for finer control over the interactivity of links
  * add getBBox(elements) method to dia.Graph for returning bounding box of all the elements in the parameter
  * allow embedding links to elements in order to translate their vertices if the parent moves
  * introduce translate() method on links for translating all vertices (and source/target if they are points)
  * add extra parameter in dia.Element rotate() method for rotating around custom origin
  * introduce linkConnectionPoint() function in dia.Paper options for custom definition of link sticky points
  * introduce findView() method on cells for easier lookup of paper views
  * introduce addTo() method on cells for quicker adding cells to the graph
  * introduce scaleContentToFit() method on dia.Paper
  * implement sendToken() method on the link view for sending animated tokens along links
  * add prop() method to elements and links for easier setting of custom data, potentially nested
  * upgrade Backbone to v1.1.2
  * allow external function for setting positions and vertices in layout.DirectedGraph plugin
  * introduce markAvailable option on dia.Paper for highlighting available elements/ports while reconnecting
  * introduce origin option and setOrigin() on dia.Paper
  * add basic.Rhombus shape
  * add new geometry functions: point.bearing, point.reflection, line.bearing, line.pointAt, rect.containsRect, rect.normalize, rect.bbox
  * other bug fixes and improvements

13-05-2014 (v0.9.0)
  * add g.scale.linear(domain, range, value) function to the Geometry library
  * add joint.util.format.number() for formatting numbers via the Python Format specification mini-language
  * improve joint.shapes.basic.TextBlock
  * add ref-width and ref-height JointJS special attributes
  * add joint.util.breakText() for breaking text to lines based on a desired area
  * add joint.util.unsetByPath() for deleting nested properties of any object
  * add joint.dia.Cell.prototype.removeAttr() for deleting presentational attributes from cells
  * make Geometry and Vectorizer libraries completely standalone
  * implement pluggable link routing
  * add manhattan, orthogonal, rounded and metro smart link routing avoiding elements
  * adjustments to DirectedGraph plugin
  * add V.rectToPath method to Vectorizer
  * fix special attributes for multiple selected elements in joint.dia.Element
  * set a CSS class to links based on their type
  * drop jquery.sortElements.js plugin
  * remove elements in batch in joint.dia.Graph.prototype.clear() method
  * add support for click events to the joint.dia.Paper
  * other bug fixes and improvements

21-01-2014 (v0.8.0)
  * add support for SVG filters
  * add support for SVG gradients
  * implement better handling of ports
  * add validateConnection() as a function to paper options
  * add defaultLink model to paper otions
  * improve support for touch devices
  * add joint.shapes.basic.TextBlock that handles text wrapping via foreignObject
  * speed up link rendering and updates
  * other bug fixes and improvements

03-12-2013 (v0.7.1)
  * upgrade to jQuery v2.0.3
  * take into accont minLen property in links in DirectedGraph plugin
  * return width/height of the layouted graph in DirectedGraph plugin
  * add centerContent() method to the joint.dia.Paper
  * emit cell:pointerdblclick and blank:pointerdblclick events when a cell/blank paper is double clicked

04-11-2013 (v0.7.0)
  * make JointJS models compatible with NodeJS (npm install jointjs)
  * add animations (transition(), getTransitions(), stopTransition() in cells)
  * implement transitions timing functions (linear, quad, cubic, inout, exponential, bounce, reverse, reflect, back, elastic)
  * implement transitions interpolating functions (number, object, hexColor, unit)
  * fix graph.toJSON()
  * fix listening on model events in views
  * other bug fixes and improvements

15-10-2013 (v0.6.4)
  * integrated Dagre v0.3.0 into DirectedGraph plugin
  * bug fixes and improvements in all the shape plugins
  * manhattan link routing (set manhattan: true option in the joint.dia.Link constructor)
  * fix joint.dia.CellView highlight/unhighlight methods
  * new joint.util.setByPath(), joint.util.getByPath() and joint.util.flattenObject() helper functions
  * joint.dia.Cell.prototype.attr() can now optionally take a string defining a path separated by `/` character
  * new joint.dia.Paper.prototype.fitToContent() method to auto-set the paper dimensions in order to fit the content
  * cubic bezier is drawn even on a link with no vertices when `smooth: true` flag is set
  * add tool-options markup to the link-tool by default (by default hidden in joint.css)
  * add (a naive but handy) joint.dia.CellView.prototype.getStrokeBBox() method
  * add g.normalizeAngle() method to the geometry library
  * snap elements to grid when they get translated (now real grid snapping - not old relative snapping)
  * add getBBox() method to the element model
  * other bug fixes and improvements
