From 69e2c3e4c7f818796ddab0d3b0270e3043e7bbbe Mon Sep 17 00:00:00 2001 From: Daniel Pollithy Date: Thu, 10 Aug 2017 12:42:31 +0200 Subject: [PATCH] Fully integrate mxGraph 3.7.2 without dependencies. Fix #90 Fix #89 --- appveyor.yml | 1 - docs/heatmap_performance.png | Bin 0 -> 22805 bytes .../sphinx/_build/doctrees/environment.pickle | Bin 0 -> 13340 bytes docs/sphinx/_build/doctrees/index.doctree | Bin 0 -> 16143 bytes .../_build/doctrees/sources/CHANGELOG.doctree | Bin 0 -> 2905 bytes .../doctrees/sources/Configuration.doctree | Bin 0 -> 2463 bytes .../doctrees/sources/Deployment.doctree | Bin 0 -> 28906 bytes .../Deployment/Deployment-Travis.doctree | Bin 0 -> 2138 bytes .../sources/Deployment/Deployment.doctree | Bin 0 -> 28917 bytes .../_build/doctrees/sources/Downloads.doctree | Bin 0 -> 2657 bytes .../_build/doctrees/sources/Heatmap.doctree | Bin 0 -> 5816 bytes docs/sphinx/_build/html/.buildinfo | 4 + docs/sphinx/_build/html/.nojekyll | 0 .../sphinx/_build/html/_sources/index.rst.txt | 66 + .../html/_sources/sources/CHANGELOG.rst.txt | 7 + .../_sources/sources/Configuration.rst.txt | 3 + .../html/_sources/sources/Deployment.rst.txt | 200 + .../Deployment/Deployment-Travis.rst.txt | 0 .../sources/Deployment/Deployment.rst.txt | 200 + .../html/_sources/sources/Downloads.rst.txt | 5 + .../html/_sources/sources/Heatmap.rst.txt | 32 + .../_build/html/_static/ajax-loader.gif | Bin 0 -> 673 bytes docs/sphinx/_build/html/_static/alabaster.css | 693 + docs/sphinx/_build/html/_static/basic.css | 632 + .../_build/html/_static/comment-bright.png | Bin 0 -> 756 bytes .../_build/html/_static/comment-close.png | Bin 0 -> 829 bytes docs/sphinx/_build/html/_static/comment.png | Bin 0 -> 641 bytes docs/sphinx/_build/html/_static/custom.css | 1 + docs/sphinx/_build/html/_static/doctools.js | 287 + .../_build/html/_static/down-pressed.png | Bin 0 -> 222 bytes docs/sphinx/_build/html/_static/down.png | Bin 0 -> 202 bytes docs/sphinx/_build/html/_static/file.png | Bin 0 -> 286 bytes .../_build/html/_static/jquery-3.1.0.js | 10074 ++++++++++++ docs/sphinx/_build/html/_static/jquery.js | 4 + docs/sphinx/_build/html/_static/minus.png | Bin 0 -> 90 bytes docs/sphinx/_build/html/_static/plus.png | Bin 0 -> 90 bytes docs/sphinx/_build/html/_static/pygments.css | 69 + .../sphinx/_build/html/_static/searchtools.js | 758 + .../_build/html/_static/underscore-1.3.1.js | 999 ++ docs/sphinx/_build/html/_static/underscore.js | 31 + .../sphinx/_build/html/_static/up-pressed.png | Bin 0 -> 214 bytes docs/sphinx/_build/html/_static/up.png | Bin 0 -> 203 bytes docs/sphinx/_build/html/_static/websupport.js | 808 + docs/sphinx/_build/html/genindex.html | 94 + docs/sphinx/_build/html/index.html | 177 + docs/sphinx/_build/html/objects.inv | Bin 0 -> 353 bytes docs/sphinx/_build/html/search.html | 104 + docs/sphinx/_build/html/searchindex.js | 1 + .../sphinx/_build/html/sources/CHANGELOG.html | 99 + .../_build/html/sources/Configuration.html | 99 + .../_build/html/sources/Deployment.html | 391 + .../sources/Deployment/Deployment-Travis.html | 96 + .../html/sources/Deployment/Deployment.html | 391 + .../sphinx/_build/html/sources/Downloads.html | 98 + docs/sphinx/_build/html/sources/Heatmap.html | 130 + editor/README.txt | 5 + editor/www/index.html | 2 +- editor/www/src/css/common.css | 160 + editor/www/src/css/explorer.css | 18 + editor/www/src/images/button.gif | Bin 0 -> 137 bytes editor/www/src/images/close.gif | Bin 0 -> 70 bytes editor/www/src/images/collapsed.gif | Bin 0 -> 877 bytes editor/www/src/images/error.gif | Bin 0 -> 907 bytes editor/www/src/images/expanded.gif | Bin 0 -> 878 bytes editor/www/src/images/maximize.gif | Bin 0 -> 843 bytes editor/www/src/images/minimize.gif | Bin 0 -> 64 bytes editor/www/src/images/normalize.gif | Bin 0 -> 845 bytes editor/www/src/images/point.gif | Bin 0 -> 55 bytes editor/www/src/images/resize.gif | Bin 0 -> 74 bytes editor/www/src/images/separator.gif | Bin 0 -> 146 bytes editor/www/src/images/submenu.gif | Bin 0 -> 56 bytes editor/www/src/images/transparent.gif | Bin 0 -> 90 bytes editor/www/src/images/warning.gif | Bin 0 -> 276 bytes editor/www/src/images/warning.png | Bin 0 -> 425 bytes editor/www/src/images/window-title.gif | Bin 0 -> 275 bytes editor/www/src/images/window.gif | Bin 0 -> 75 bytes .../www/src/js/editor/mxDefaultKeyHandler.js | 126 + .../www/src/js/editor/mxDefaultPopupMenu.js | 306 + editor/www/src/js/editor/mxDefaultToolbar.js | 564 + editor/www/src/js/editor/mxEditor.js | 3114 ++++ editor/www/src/js/handler/mxCellHighlight.js | 302 + editor/www/src/js/handler/mxCellMarker.js | 430 + editor/www/src/js/handler/mxCellTracker.js | 145 + .../www/src/js/handler/mxConnectionHandler.js | 2204 +++ .../www/src/js/handler/mxConstraintHandler.js | 520 + editor/www/src/js/handler/mxEdgeHandler.js | 2409 +++ .../src/js/handler/mxEdgeSegmentHandler.js | 401 + .../www/src/js/handler/mxElbowEdgeHandler.js | 229 + editor/www/src/js/handler/mxGraphHandler.js | 1074 ++ editor/www/src/js/handler/mxHandle.js | 352 + editor/www/src/js/handler/mxKeyHandler.js | 428 + editor/www/src/js/handler/mxPanningHandler.js | 462 + .../www/src/js/handler/mxPopupMenuHandler.js | 218 + editor/www/src/js/handler/mxRubberband.js | 401 + .../src/js/handler/mxSelectionCellsHandler.js | 287 + editor/www/src/js/handler/mxTooltipHandler.js | 336 + editor/www/src/js/handler/mxVertexHandler.js | 1938 +++ editor/www/src/js/index.txt | 316 + editor/www/src/js/io/mxCellCodec.js | 189 + editor/www/src/js/io/mxChildChangeCodec.js | 149 + editor/www/src/js/io/mxCodec.js | 596 + editor/www/src/js/io/mxCodecRegistry.js | 137 + .../www/src/js/io/mxDefaultKeyHandlerCodec.js | 88 + .../www/src/js/io/mxDefaultPopupMenuCodec.js | 54 + editor/www/src/js/io/mxDefaultToolbarCodec.js | 312 + editor/www/src/js/io/mxEditorCodec.js | 245 + editor/www/src/js/io/mxGenericChangeCodec.js | 64 + editor/www/src/js/io/mxGraphCodec.js | 28 + editor/www/src/js/io/mxGraphViewCodec.js | 197 + editor/www/src/js/io/mxModelCodec.js | 80 + editor/www/src/js/io/mxObjectCodec.js | 1077 ++ editor/www/src/js/io/mxRootChangeCodec.js | 83 + editor/www/src/js/io/mxStylesheetCodec.js | 217 + editor/www/src/js/io/mxTerminalChangeCodec.js | 42 + .../model/mxGraphAbstractHierarchyCell.js | 206 + .../model/mxGraphHierarchyEdge.js | 187 + .../model/mxGraphHierarchyModel.js | 681 + .../model/mxGraphHierarchyNode.js | 220 + .../hierarchical/model/mxSwimlaneModel.js | 801 + .../hierarchical/mxHierarchicalLayout.js | 846 + .../layout/hierarchical/mxSwimlaneLayout.js | 937 ++ .../stage/mxCoordinateAssignment.js | 1830 +++ .../stage/mxHierarchicalLayoutStage.js | 25 + .../stage/mxMedianHybridCrossingReduction.js | 675 + .../stage/mxMinimumCycleRemover.js | 108 + .../hierarchical/stage/mxSwimlaneOrdering.js | 96 + editor/www/src/js/layout/mxCircleLayout.js | 203 + .../www/src/js/layout/mxCompactTreeLayout.js | 1203 ++ editor/www/src/js/layout/mxCompositeLayout.js | 101 + editor/www/src/js/layout/mxEdgeLabelLayout.js | 165 + .../www/src/js/layout/mxFastOrganicLayout.js | 591 + editor/www/src/js/layout/mxGraphLayout.js | 461 + .../www/src/js/layout/mxParallelEdgeLayout.js | 225 + editor/www/src/js/layout/mxPartitionLayout.js | 240 + .../www/src/js/layout/mxRadialTreeLayout.js | 317 + editor/www/src/js/layout/mxStackLayout.js | 515 + editor/www/src/js/model/mxCell.js | 825 + editor/www/src/js/model/mxCellPath.js | 163 + editor/www/src/js/model/mxGeometry.js | 415 + editor/www/src/js/model/mxGraphModel.js | 2667 ++++ editor/www/src/js/mxClient.js | 750 + editor/www/src/js/shape/mxActor.js | 86 + editor/www/src/js/shape/mxArrow.js | 115 + editor/www/src/js/shape/mxArrowConnector.js | 485 + editor/www/src/js/shape/mxCloud.js | 55 + editor/www/src/js/shape/mxConnector.js | 149 + editor/www/src/js/shape/mxCylinder.js | 105 + editor/www/src/js/shape/mxDoubleEllipse.js | 114 + editor/www/src/js/shape/mxEllipse.js | 48 + editor/www/src/js/shape/mxHexagon.js | 34 + editor/www/src/js/shape/mxImageShape.js | 233 + editor/www/src/js/shape/mxLabel.js | 275 + editor/www/src/js/shape/mxLine.js | 51 + editor/www/src/js/shape/mxMarker.js | 208 + editor/www/src/js/shape/mxPolyline.js | 127 + editor/www/src/js/shape/mxRectangleShape.js | 106 + editor/www/src/js/shape/mxRhombus.js | 54 + editor/www/src/js/shape/mxShape.js | 1530 ++ editor/www/src/js/shape/mxStencil.js | 761 + editor/www/src/js/shape/mxStencilRegistry.js | 53 + editor/www/src/js/shape/mxSwimlane.js | 410 + editor/www/src/js/shape/mxText.js | 1261 ++ editor/www/src/js/shape/mxTriangle.js | 33 + editor/www/src/js/util/mxAbstractCanvas2D.js | 640 + editor/www/src/js/util/mxAnimation.js | 92 + editor/www/src/js/util/mxAutoSaveManager.js | 213 + editor/www/src/js/util/mxClipboard.js | 221 + editor/www/src/js/util/mxConstants.js | 2248 +++ editor/www/src/js/util/mxDictionary.js | 130 + editor/www/src/js/util/mxDivResizer.js | 151 + editor/www/src/js/util/mxDragSource.js | 679 + editor/www/src/js/util/mxEffects.js | 211 + editor/www/src/js/util/mxEvent.js | 1394 ++ editor/www/src/js/util/mxEventObject.js | 111 + editor/www/src/js/util/mxEventSource.js | 189 + editor/www/src/js/util/mxForm.js | 202 + editor/www/src/js/util/mxGuide.js | 401 + editor/www/src/js/util/mxImage.js | 40 + editor/www/src/js/util/mxImageBundle.js | 103 + editor/www/src/js/util/mxImageExport.js | 175 + editor/www/src/js/util/mxLog.js | 413 + editor/www/src/js/util/mxMorphing.js | 248 + editor/www/src/js/util/mxMouseEvent.js | 244 + editor/www/src/js/util/mxObjectIdentity.js | 72 + editor/www/src/js/util/mxPanningManager.js | 262 + editor/www/src/js/util/mxPoint.js | 54 + editor/www/src/js/util/mxPopupMenu.js | 613 + editor/www/src/js/util/mxRectangle.js | 179 + editor/www/src/js/util/mxResources.js | 450 + editor/www/src/js/util/mxSvgCanvas2D.js | 2178 +++ editor/www/src/js/util/mxToolbar.js | 527 + editor/www/src/js/util/mxUndoManager.js | 229 + editor/www/src/js/util/mxUndoableEdit.js | 213 + editor/www/src/js/util/mxUrlConverter.js | 151 + editor/www/src/js/util/mxUtils.js | 4249 +++++ editor/www/src/js/util/mxVmlCanvas2D.js | 1102 ++ editor/www/src/js/util/mxWindow.js | 1130 ++ editor/www/src/js/util/mxXmlCanvas2D.js | 1209 ++ editor/www/src/js/util/mxXmlRequest.js | 463 + editor/www/src/js/view/mxCellEditor.js | 1069 ++ editor/www/src/js/view/mxCellOverlay.js | 233 + editor/www/src/js/view/mxCellRenderer.js | 1530 ++ editor/www/src/js/view/mxCellState.js | 431 + editor/www/src/js/view/mxCellStatePreview.js | 203 + .../www/src/js/view/mxConnectionConstraint.js | 50 + editor/www/src/js/view/mxEdgeStyle.js | 1569 ++ editor/www/src/js/view/mxGraph.js | 12760 ++++++++++++++++ .../www/src/js/view/mxGraphSelectionModel.js | 436 + editor/www/src/js/view/mxGraphView.js | 2958 ++++ editor/www/src/js/view/mxLayoutManager.js | 409 + editor/www/src/js/view/mxMultiplicity.js | 257 + editor/www/src/js/view/mxOutline.js | 761 + editor/www/src/js/view/mxPerimeter.js | 921 ++ editor/www/src/js/view/mxPrintPreview.js | 1175 ++ editor/www/src/js/view/mxStyleRegistry.js | 71 + editor/www/src/js/view/mxStylesheet.js | 266 + editor/www/src/js/view/mxSwimlaneManager.js | 450 + .../www/src/js/view/mxTemporaryCellStates.js | 108 + editor/www/src/resources/editor.txt | 5 + editor/www/src/resources/editor_de.txt | 5 + editor/www/src/resources/editor_zh.txt | 5 + editor/www/src/resources/graph.txt | 11 + editor/www/src/resources/graph_de.txt | 11 + editor/www/src/resources/graph_zh.txt | 11 + package.json | 1 - 225 files changed, 105494 insertions(+), 3 deletions(-) create mode 100644 docs/heatmap_performance.png create mode 100644 docs/sphinx/_build/doctrees/environment.pickle create mode 100644 docs/sphinx/_build/doctrees/index.doctree create mode 100644 docs/sphinx/_build/doctrees/sources/CHANGELOG.doctree create mode 100644 docs/sphinx/_build/doctrees/sources/Configuration.doctree create mode 100644 docs/sphinx/_build/doctrees/sources/Deployment.doctree create mode 100644 docs/sphinx/_build/doctrees/sources/Deployment/Deployment-Travis.doctree create mode 100644 docs/sphinx/_build/doctrees/sources/Deployment/Deployment.doctree create mode 100644 docs/sphinx/_build/doctrees/sources/Downloads.doctree create mode 100644 docs/sphinx/_build/doctrees/sources/Heatmap.doctree create mode 100644 docs/sphinx/_build/html/.buildinfo create mode 100644 docs/sphinx/_build/html/.nojekyll create mode 100644 docs/sphinx/_build/html/_sources/index.rst.txt create mode 100644 docs/sphinx/_build/html/_sources/sources/CHANGELOG.rst.txt create mode 100644 docs/sphinx/_build/html/_sources/sources/Configuration.rst.txt create mode 100644 docs/sphinx/_build/html/_sources/sources/Deployment.rst.txt create mode 100644 docs/sphinx/_build/html/_sources/sources/Deployment/Deployment-Travis.rst.txt create mode 100644 docs/sphinx/_build/html/_sources/sources/Deployment/Deployment.rst.txt create mode 100644 docs/sphinx/_build/html/_sources/sources/Downloads.rst.txt create mode 100644 docs/sphinx/_build/html/_sources/sources/Heatmap.rst.txt create mode 100644 docs/sphinx/_build/html/_static/ajax-loader.gif create mode 100644 docs/sphinx/_build/html/_static/alabaster.css create mode 100644 docs/sphinx/_build/html/_static/basic.css create mode 100644 docs/sphinx/_build/html/_static/comment-bright.png create mode 100644 docs/sphinx/_build/html/_static/comment-close.png create mode 100644 docs/sphinx/_build/html/_static/comment.png create mode 100644 docs/sphinx/_build/html/_static/custom.css create mode 100644 docs/sphinx/_build/html/_static/doctools.js create mode 100644 docs/sphinx/_build/html/_static/down-pressed.png create mode 100644 docs/sphinx/_build/html/_static/down.png create mode 100644 docs/sphinx/_build/html/_static/file.png create mode 100644 docs/sphinx/_build/html/_static/jquery-3.1.0.js create mode 100644 docs/sphinx/_build/html/_static/jquery.js create mode 100644 docs/sphinx/_build/html/_static/minus.png create mode 100644 docs/sphinx/_build/html/_static/plus.png create mode 100644 docs/sphinx/_build/html/_static/pygments.css create mode 100644 docs/sphinx/_build/html/_static/searchtools.js create mode 100644 docs/sphinx/_build/html/_static/underscore-1.3.1.js create mode 100644 docs/sphinx/_build/html/_static/underscore.js create mode 100644 docs/sphinx/_build/html/_static/up-pressed.png create mode 100644 docs/sphinx/_build/html/_static/up.png create mode 100644 docs/sphinx/_build/html/_static/websupport.js create mode 100644 docs/sphinx/_build/html/genindex.html create mode 100644 docs/sphinx/_build/html/index.html create mode 100644 docs/sphinx/_build/html/objects.inv create mode 100644 docs/sphinx/_build/html/search.html create mode 100644 docs/sphinx/_build/html/searchindex.js create mode 100644 docs/sphinx/_build/html/sources/CHANGELOG.html create mode 100644 docs/sphinx/_build/html/sources/Configuration.html create mode 100644 docs/sphinx/_build/html/sources/Deployment.html create mode 100644 docs/sphinx/_build/html/sources/Deployment/Deployment-Travis.html create mode 100644 docs/sphinx/_build/html/sources/Deployment/Deployment.html create mode 100644 docs/sphinx/_build/html/sources/Downloads.html create mode 100644 docs/sphinx/_build/html/sources/Heatmap.html create mode 100644 editor/README.txt create mode 100644 editor/www/src/css/common.css create mode 100644 editor/www/src/css/explorer.css create mode 100644 editor/www/src/images/button.gif create mode 100644 editor/www/src/images/close.gif create mode 100644 editor/www/src/images/collapsed.gif create mode 100644 editor/www/src/images/error.gif create mode 100644 editor/www/src/images/expanded.gif create mode 100644 editor/www/src/images/maximize.gif create mode 100644 editor/www/src/images/minimize.gif create mode 100644 editor/www/src/images/normalize.gif create mode 100644 editor/www/src/images/point.gif create mode 100644 editor/www/src/images/resize.gif create mode 100644 editor/www/src/images/separator.gif create mode 100644 editor/www/src/images/submenu.gif create mode 100644 editor/www/src/images/transparent.gif create mode 100644 editor/www/src/images/warning.gif create mode 100644 editor/www/src/images/warning.png create mode 100644 editor/www/src/images/window-title.gif create mode 100644 editor/www/src/images/window.gif create mode 100644 editor/www/src/js/editor/mxDefaultKeyHandler.js create mode 100644 editor/www/src/js/editor/mxDefaultPopupMenu.js create mode 100644 editor/www/src/js/editor/mxDefaultToolbar.js create mode 100644 editor/www/src/js/editor/mxEditor.js create mode 100644 editor/www/src/js/handler/mxCellHighlight.js create mode 100644 editor/www/src/js/handler/mxCellMarker.js create mode 100644 editor/www/src/js/handler/mxCellTracker.js create mode 100644 editor/www/src/js/handler/mxConnectionHandler.js create mode 100644 editor/www/src/js/handler/mxConstraintHandler.js create mode 100644 editor/www/src/js/handler/mxEdgeHandler.js create mode 100644 editor/www/src/js/handler/mxEdgeSegmentHandler.js create mode 100644 editor/www/src/js/handler/mxElbowEdgeHandler.js create mode 100644 editor/www/src/js/handler/mxGraphHandler.js create mode 100644 editor/www/src/js/handler/mxHandle.js create mode 100644 editor/www/src/js/handler/mxKeyHandler.js create mode 100644 editor/www/src/js/handler/mxPanningHandler.js create mode 100644 editor/www/src/js/handler/mxPopupMenuHandler.js create mode 100644 editor/www/src/js/handler/mxRubberband.js create mode 100644 editor/www/src/js/handler/mxSelectionCellsHandler.js create mode 100644 editor/www/src/js/handler/mxTooltipHandler.js create mode 100644 editor/www/src/js/handler/mxVertexHandler.js create mode 100644 editor/www/src/js/index.txt create mode 100644 editor/www/src/js/io/mxCellCodec.js create mode 100644 editor/www/src/js/io/mxChildChangeCodec.js create mode 100644 editor/www/src/js/io/mxCodec.js create mode 100644 editor/www/src/js/io/mxCodecRegistry.js create mode 100644 editor/www/src/js/io/mxDefaultKeyHandlerCodec.js create mode 100644 editor/www/src/js/io/mxDefaultPopupMenuCodec.js create mode 100644 editor/www/src/js/io/mxDefaultToolbarCodec.js create mode 100644 editor/www/src/js/io/mxEditorCodec.js create mode 100644 editor/www/src/js/io/mxGenericChangeCodec.js create mode 100644 editor/www/src/js/io/mxGraphCodec.js create mode 100644 editor/www/src/js/io/mxGraphViewCodec.js create mode 100644 editor/www/src/js/io/mxModelCodec.js create mode 100644 editor/www/src/js/io/mxObjectCodec.js create mode 100644 editor/www/src/js/io/mxRootChangeCodec.js create mode 100644 editor/www/src/js/io/mxStylesheetCodec.js create mode 100644 editor/www/src/js/io/mxTerminalChangeCodec.js create mode 100644 editor/www/src/js/layout/hierarchical/model/mxGraphAbstractHierarchyCell.js create mode 100644 editor/www/src/js/layout/hierarchical/model/mxGraphHierarchyEdge.js create mode 100644 editor/www/src/js/layout/hierarchical/model/mxGraphHierarchyModel.js create mode 100644 editor/www/src/js/layout/hierarchical/model/mxGraphHierarchyNode.js create mode 100644 editor/www/src/js/layout/hierarchical/model/mxSwimlaneModel.js create mode 100644 editor/www/src/js/layout/hierarchical/mxHierarchicalLayout.js create mode 100644 editor/www/src/js/layout/hierarchical/mxSwimlaneLayout.js create mode 100644 editor/www/src/js/layout/hierarchical/stage/mxCoordinateAssignment.js create mode 100644 editor/www/src/js/layout/hierarchical/stage/mxHierarchicalLayoutStage.js create mode 100644 editor/www/src/js/layout/hierarchical/stage/mxMedianHybridCrossingReduction.js create mode 100644 editor/www/src/js/layout/hierarchical/stage/mxMinimumCycleRemover.js create mode 100644 editor/www/src/js/layout/hierarchical/stage/mxSwimlaneOrdering.js create mode 100644 editor/www/src/js/layout/mxCircleLayout.js create mode 100644 editor/www/src/js/layout/mxCompactTreeLayout.js create mode 100644 editor/www/src/js/layout/mxCompositeLayout.js create mode 100644 editor/www/src/js/layout/mxEdgeLabelLayout.js create mode 100644 editor/www/src/js/layout/mxFastOrganicLayout.js create mode 100644 editor/www/src/js/layout/mxGraphLayout.js create mode 100644 editor/www/src/js/layout/mxParallelEdgeLayout.js create mode 100644 editor/www/src/js/layout/mxPartitionLayout.js create mode 100644 editor/www/src/js/layout/mxRadialTreeLayout.js create mode 100644 editor/www/src/js/layout/mxStackLayout.js create mode 100644 editor/www/src/js/model/mxCell.js create mode 100644 editor/www/src/js/model/mxCellPath.js create mode 100644 editor/www/src/js/model/mxGeometry.js create mode 100644 editor/www/src/js/model/mxGraphModel.js create mode 100644 editor/www/src/js/mxClient.js create mode 100644 editor/www/src/js/shape/mxActor.js create mode 100644 editor/www/src/js/shape/mxArrow.js create mode 100644 editor/www/src/js/shape/mxArrowConnector.js create mode 100644 editor/www/src/js/shape/mxCloud.js create mode 100644 editor/www/src/js/shape/mxConnector.js create mode 100644 editor/www/src/js/shape/mxCylinder.js create mode 100644 editor/www/src/js/shape/mxDoubleEllipse.js create mode 100644 editor/www/src/js/shape/mxEllipse.js create mode 100644 editor/www/src/js/shape/mxHexagon.js create mode 100644 editor/www/src/js/shape/mxImageShape.js create mode 100644 editor/www/src/js/shape/mxLabel.js create mode 100644 editor/www/src/js/shape/mxLine.js create mode 100644 editor/www/src/js/shape/mxMarker.js create mode 100644 editor/www/src/js/shape/mxPolyline.js create mode 100644 editor/www/src/js/shape/mxRectangleShape.js create mode 100644 editor/www/src/js/shape/mxRhombus.js create mode 100644 editor/www/src/js/shape/mxShape.js create mode 100644 editor/www/src/js/shape/mxStencil.js create mode 100644 editor/www/src/js/shape/mxStencilRegistry.js create mode 100644 editor/www/src/js/shape/mxSwimlane.js create mode 100644 editor/www/src/js/shape/mxText.js create mode 100644 editor/www/src/js/shape/mxTriangle.js create mode 100644 editor/www/src/js/util/mxAbstractCanvas2D.js create mode 100644 editor/www/src/js/util/mxAnimation.js create mode 100644 editor/www/src/js/util/mxAutoSaveManager.js create mode 100644 editor/www/src/js/util/mxClipboard.js create mode 100644 editor/www/src/js/util/mxConstants.js create mode 100644 editor/www/src/js/util/mxDictionary.js create mode 100644 editor/www/src/js/util/mxDivResizer.js create mode 100644 editor/www/src/js/util/mxDragSource.js create mode 100644 editor/www/src/js/util/mxEffects.js create mode 100644 editor/www/src/js/util/mxEvent.js create mode 100644 editor/www/src/js/util/mxEventObject.js create mode 100644 editor/www/src/js/util/mxEventSource.js create mode 100644 editor/www/src/js/util/mxForm.js create mode 100644 editor/www/src/js/util/mxGuide.js create mode 100644 editor/www/src/js/util/mxImage.js create mode 100644 editor/www/src/js/util/mxImageBundle.js create mode 100644 editor/www/src/js/util/mxImageExport.js create mode 100644 editor/www/src/js/util/mxLog.js create mode 100644 editor/www/src/js/util/mxMorphing.js create mode 100644 editor/www/src/js/util/mxMouseEvent.js create mode 100644 editor/www/src/js/util/mxObjectIdentity.js create mode 100644 editor/www/src/js/util/mxPanningManager.js create mode 100644 editor/www/src/js/util/mxPoint.js create mode 100644 editor/www/src/js/util/mxPopupMenu.js create mode 100644 editor/www/src/js/util/mxRectangle.js create mode 100644 editor/www/src/js/util/mxResources.js create mode 100644 editor/www/src/js/util/mxSvgCanvas2D.js create mode 100644 editor/www/src/js/util/mxToolbar.js create mode 100644 editor/www/src/js/util/mxUndoManager.js create mode 100644 editor/www/src/js/util/mxUndoableEdit.js create mode 100644 editor/www/src/js/util/mxUrlConverter.js create mode 100644 editor/www/src/js/util/mxUtils.js create mode 100644 editor/www/src/js/util/mxVmlCanvas2D.js create mode 100644 editor/www/src/js/util/mxWindow.js create mode 100644 editor/www/src/js/util/mxXmlCanvas2D.js create mode 100644 editor/www/src/js/util/mxXmlRequest.js create mode 100644 editor/www/src/js/view/mxCellEditor.js create mode 100644 editor/www/src/js/view/mxCellOverlay.js create mode 100644 editor/www/src/js/view/mxCellRenderer.js create mode 100644 editor/www/src/js/view/mxCellState.js create mode 100644 editor/www/src/js/view/mxCellStatePreview.js create mode 100644 editor/www/src/js/view/mxConnectionConstraint.js create mode 100644 editor/www/src/js/view/mxEdgeStyle.js create mode 100644 editor/www/src/js/view/mxGraph.js create mode 100644 editor/www/src/js/view/mxGraphSelectionModel.js create mode 100644 editor/www/src/js/view/mxGraphView.js create mode 100644 editor/www/src/js/view/mxLayoutManager.js create mode 100644 editor/www/src/js/view/mxMultiplicity.js create mode 100644 editor/www/src/js/view/mxOutline.js create mode 100644 editor/www/src/js/view/mxPerimeter.js create mode 100644 editor/www/src/js/view/mxPrintPreview.js create mode 100644 editor/www/src/js/view/mxStyleRegistry.js create mode 100644 editor/www/src/js/view/mxStylesheet.js create mode 100644 editor/www/src/js/view/mxSwimlaneManager.js create mode 100644 editor/www/src/js/view/mxTemporaryCellStates.js create mode 100644 editor/www/src/resources/editor.txt create mode 100644 editor/www/src/resources/editor_de.txt create mode 100644 editor/www/src/resources/editor_zh.txt create mode 100644 editor/www/src/resources/graph.txt create mode 100644 editor/www/src/resources/graph_de.txt create mode 100644 editor/www/src/resources/graph_zh.txt diff --git a/appveyor.yml b/appveyor.yml index e3d66de..63ba157 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,7 +10,6 @@ install: - ps: Install-Product node 6 x64 - git reset --hard HEAD - npm install npm -g - - npm install -g grunt - npm install electron-builder@next # force install next version to test electron-builder - npm install - npm prune diff --git a/docs/heatmap_performance.png b/docs/heatmap_performance.png new file mode 100644 index 0000000000000000000000000000000000000000..487127a6b702f686f6b15b1fbc999a8d2bbb7559 GIT binary patch literal 22805 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/doctrees/index.doctree b/docs/sphinx/_build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e33a73bef8869334b2bdb504faad1796d5e7ab2e GIT binary patch literal 16143 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 TF8&2WRxh-!|IYEBtiA9rfAy9E literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/doctrees/sources/Deployment.doctree b/docs/sphinx/_build/doctrees/sources/Deployment.doctree new file mode 100644 index 0000000000000000000000000000000000000000..58331e3c86e43b21237f96159199907c369e0da2 GIT binary patch literal 28906 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/doctrees/sources/Deployment/Deployment-Travis.doctree b/docs/sphinx/_build/doctrees/sources/Deployment/Deployment-Travis.doctree new file mode 100644 index 0000000000000000000000000000000000000000..af742deef43edc9102d705d3c758a7df82eb2be9 GIT binary patch literal 2138 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/doctrees/sources/Downloads.doctree b/docs/sphinx/_build/doctrees/sources/Downloads.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5bdd1e459ec09c95db844fa336b161361ea6e25d GIT binary patch literal 2657 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 AlK=n! literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/html/.buildinfo b/docs/sphinx/_build/html/.buildinfo new file mode 100644 index 0000000..c96bc4f --- /dev/null +++ b/docs/sphinx/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 342b41b28a66df2942a4913900c98b00 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/sphinx/_build/html/.nojekyll b/docs/sphinx/_build/html/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/sphinx/_build/html/_sources/index.rst.txt b/docs/sphinx/_build/html/_sources/index.rst.txt new file mode 100644 index 0000000..744486f --- /dev/null +++ b/docs/sphinx/_build/html/_sources/index.rst.txt @@ -0,0 +1,66 @@ +.. TransliterationApplication documentation master file, created by + sphinx-quickstart on Wed May 31 15:08:02 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to TransliterationApplication's documentation! +====================================================== + +This is a **technical documentation** of the components and how to use them. +It powers ~well written "articles" on general questions. See Articles_ section. + +There is also an **API description** here: + +``_ + +Contents +-------- + +.. toctree:: + :maxdepth: 2 + + sources/Deployment + sources/Configuration + sources/Heatmap + sources/Download + sources/CHANGELOG + + +Articles +======== + +The following article list will give you a good insight in all the knowledge about this application. + +It is going to cover + + - "Basic data flow description" + - "How mxGraph was modded", + - "Codec.js - mxGraph XML -> GraphML -> Neo4J", + - "The express.js server", + - "Pug templates", + - "Data storage XML and images", + - "Exif data extraction", + - "Electron application", + - "How to build the electron application cross platform", + - "Why Electron" + - "Could the server be used as a standalone?", + - "How does the autocomplete function work", + - "Asynchronous tests with mocha.js and chai.js" + - "About the code coverage" + - "Extending the mxGraph Editor" + - "What is not implemented" + - "Next steps" + +Maybe + - "App performance struggle: Million of nodes, thousands of images and a lot of properties" + - "Codec.js - What is the biggest XML-Graph it can convert to Neo4J?" + - "A question of complexity: Cypher vs SQL for transliteration analyzes" + - "The use case of this application" + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/docs/sphinx/_build/html/_sources/sources/CHANGELOG.rst.txt b/docs/sphinx/_build/html/_sources/sources/CHANGELOG.rst.txt new file mode 100644 index 0000000..28992e5 --- /dev/null +++ b/docs/sphinx/_build/html/_sources/sources/CHANGELOG.rst.txt @@ -0,0 +1,7 @@ +CHANGELOG +========= + +make a list of changes connected and linked to by Downloads.rst + +Keep track of Versions (link to semantic versioning) + diff --git a/docs/sphinx/_build/html/_sources/sources/Configuration.rst.txt b/docs/sphinx/_build/html/_sources/sources/Configuration.rst.txt new file mode 100644 index 0000000..ddb2814 --- /dev/null +++ b/docs/sphinx/_build/html/_sources/sources/Configuration.rst.txt @@ -0,0 +1,3 @@ +Configuration +============= + diff --git a/docs/sphinx/_build/html/_sources/sources/Deployment.rst.txt b/docs/sphinx/_build/html/_sources/sources/Deployment.rst.txt new file mode 100644 index 0000000..011d492 --- /dev/null +++ b/docs/sphinx/_build/html/_sources/sources/Deployment.rst.txt @@ -0,0 +1,200 @@ +Deployment +========== + +Deployment automation +--------------------- + +Since this project needs to be build on multiple platforms it is a good idea to not just run tests automated +but also use **TRAVIS-CI** and **AppVeyor** to build and deploy the application. +The configuration files can be found in the root directory of the repository. + +Travis is used for linux 32bit and 64bit builds and AppVeyor for both architectures for windows (called win32). +See Deployment-Travis or Deployment-AppVeyor for configuration and documentation. + + - `Deployment on Travis-CI`_ + + +Trigger an automatic build +.......................... + +A build shall only be triggered on tag push. This is how to do this: + - Tag the commit in Git by :code:`git tag -a v0.0.0 -m "Release 0.0.0"` + - Push the tag :code:`git push origin v0.0.0` + +Now the build triggers automatically the deployment to github releases. +After some minutes there is a new release on the GitHub-Page with the zipped applications attached. + +How to Deploy manually +---------------------- + +If you made a change to the code and want to ship this change in an electron app +follow this procedure + + - Tag the commit in Git by :code:`git tag -a v0.0.0 -m "Release 0.0.0"` + - Push the tag :code:`git push origin v0.0.0` + - Package the electron app for your platform with :code:`electron-packager` + - If you haven't done so, install :code:`electron-packager` globally: :code:`npm install -g electron-packager` + - If you are on the OS that you want to target with the build execute :code:`electron-packager` + (consulate the documentation of electron-packager) + - Compress the created folder. Example for linux: :code:`zip -r [archive-name].zip [name of the folder]` + - Navigate to the releases tab of the github repository + - Edit your release: Add the compressed archive. + - Add the release to the download section of the documentation + - Describe the changes made in the CHANGELIST of the documentation + + +Deployment on Travis-CI +----------------------- + +This is an explanation of the configuration and how the workflow works. +If you know Travis-CI this will be boring. + +What is Travis-CI +................. + +It is a CI (continuous integration) provider that is free to use for public git repositories. +It provides virtual machines that can automatize jobs for you, e.g. run your unit tests or test your code with various +code versions and a lot more. + +Setup Travis-CI +............... + +It is easily setup if you have a github account. +You can use the github account as a single sign on for Travis-CI.org. +There you activate the wanted repository in the overview. + +After you set that up, every time you push to the master branch Travis will start to work for you. + +What does Travis do? +.................... + +He (look at the logo) will pull our code and look for a configuration file called :code:`.travis.yml`. +This file contains all the things we want Travis to do for us. + +In our case this is: + - downloading and installing the latest neo4j-community server + - install all other dependencies + - run the tests + - build the electron application and package it + - deploy the package to github releases (if the release doesn't exist so far, he will create one) + +Detailed description of the Configuration +......................................... + +In Line 22 there is the installation script for neo4j triggered. This will only work on unix systems. + +In Line 40 you see there is a BASH variable. If you want to use this deploy configuration +you have to go to github.com, login into your account, from there create an access token with the +option "repo" ticked and copy paste the generated token into the environment variables in the TRAVIS +web frontend. **Don't forget to activate encryption for this variable** or else everyone can access +your with ease. + +.. code-block:: yaml + :linenos: + :emphasize-lines: 22, 40 + + osx_image: xcode7.3 + sudo: required + dist: trusty + language: c + matrix: + include: + - os: osx + - os: linux + env: CC=clang CXX=clang++ npm_config_clang=1 + compiler: clang + cache: + directories: + - node_modules + - "$HOME/.electron" + - "$HOME/.cache" + addons: + apt: + packages: + - libgnome-keyring-dev + - icnsutils + before_install: + - ./install_neo4j.sh + - mkdir -p /tmp/git-lfs && curl -L https://github.com/github/git-lfs/releases/download/v1.2.1/git-lfs-$([ + "$TRAVIS_OS_NAME" == "linux" ] && echo "linux" || echo "darwin")-amd64-1.2.1.tar.gz + | tar -xz -C /tmp/git-lfs --strip-components 1 && /tmp/git-lfs/git-lfs pull + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick xz-utils; fi + install: + - nvm install 6 + - npm install electron-builder@next + - npm install + - npm prune + script: + - npm run release + branches: + except: + - "/^v\\d+\\.\\d+\\.\\d+$/" + + deploy: + provider: releases + api_key: "$GH_TOKEN" + file_glob: true + file: "*.zip" + skip_cleanup: true + on: + tags: false + + + +Deployment on AppVeyor +---------------------- + +AppVeyor provides a similar service to Travis-CI but is focused on windows. +So they provide a **Power shell** on a win32 host system you can configure. + +You have to put a :code:`appveyor.yml` file into the base dir of the repo which +might look like this. + +This configuration excludes the test because we already ran the tests on travis +and at the moment you are going to have a hard time installing neo4j into their machines. + +.. code-block:: yaml + :linenos: + :emphasize-lines: 22, 40 + + version: 0.1.{build} + + platform: + - x86 + - x64 + + cache: + - node_modules + - app\node_modules + - '%APPDATA%\npm-cache' + - '%USERPROFILE%\.electron' + + init: + - git config --global core.autocrlf input + + install: + - ps: Install-Product node 6 x64 + - git reset --hard HEAD + - npm install npm -g + - npm install electron-builder@next # force install next version to test electron-builder + - npm install + - npm prune + + build_script: + - node --version + - npm --version + - npm run release + + test: off + + deploy: + release: TransliterationApplication-v$(appveyor_build_version) + description: 'TransliterationApplication' + provider: GitHub + auth_token: + secure: QBn6bw8znM2WsrG32eTzA55Iu0iE6oymujVBos6XFUldN/biNahd6Csr6d9Y4u+E + artifact: '**\*.zip' # upload all NuGet packages to release assets + draft: true + prerelease: true + on: + branch: master # release from master branch only \ No newline at end of file diff --git a/docs/sphinx/_build/html/_sources/sources/Deployment/Deployment-Travis.rst.txt b/docs/sphinx/_build/html/_sources/sources/Deployment/Deployment-Travis.rst.txt new file mode 100644 index 0000000..e69de29 diff --git a/docs/sphinx/_build/html/_sources/sources/Deployment/Deployment.rst.txt b/docs/sphinx/_build/html/_sources/sources/Deployment/Deployment.rst.txt new file mode 100644 index 0000000..011d492 --- /dev/null +++ b/docs/sphinx/_build/html/_sources/sources/Deployment/Deployment.rst.txt @@ -0,0 +1,200 @@ +Deployment +========== + +Deployment automation +--------------------- + +Since this project needs to be build on multiple platforms it is a good idea to not just run tests automated +but also use **TRAVIS-CI** and **AppVeyor** to build and deploy the application. +The configuration files can be found in the root directory of the repository. + +Travis is used for linux 32bit and 64bit builds and AppVeyor for both architectures for windows (called win32). +See Deployment-Travis or Deployment-AppVeyor for configuration and documentation. + + - `Deployment on Travis-CI`_ + + +Trigger an automatic build +.......................... + +A build shall only be triggered on tag push. This is how to do this: + - Tag the commit in Git by :code:`git tag -a v0.0.0 -m "Release 0.0.0"` + - Push the tag :code:`git push origin v0.0.0` + +Now the build triggers automatically the deployment to github releases. +After some minutes there is a new release on the GitHub-Page with the zipped applications attached. + +How to Deploy manually +---------------------- + +If you made a change to the code and want to ship this change in an electron app +follow this procedure + + - Tag the commit in Git by :code:`git tag -a v0.0.0 -m "Release 0.0.0"` + - Push the tag :code:`git push origin v0.0.0` + - Package the electron app for your platform with :code:`electron-packager` + - If you haven't done so, install :code:`electron-packager` globally: :code:`npm install -g electron-packager` + - If you are on the OS that you want to target with the build execute :code:`electron-packager` + (consulate the documentation of electron-packager) + - Compress the created folder. Example for linux: :code:`zip -r [archive-name].zip [name of the folder]` + - Navigate to the releases tab of the github repository + - Edit your release: Add the compressed archive. + - Add the release to the download section of the documentation + - Describe the changes made in the CHANGELIST of the documentation + + +Deployment on Travis-CI +----------------------- + +This is an explanation of the configuration and how the workflow works. +If you know Travis-CI this will be boring. + +What is Travis-CI +................. + +It is a CI (continuous integration) provider that is free to use for public git repositories. +It provides virtual machines that can automatize jobs for you, e.g. run your unit tests or test your code with various +code versions and a lot more. + +Setup Travis-CI +............... + +It is easily setup if you have a github account. +You can use the github account as a single sign on for Travis-CI.org. +There you activate the wanted repository in the overview. + +After you set that up, every time you push to the master branch Travis will start to work for you. + +What does Travis do? +.................... + +He (look at the logo) will pull our code and look for a configuration file called :code:`.travis.yml`. +This file contains all the things we want Travis to do for us. + +In our case this is: + - downloading and installing the latest neo4j-community server + - install all other dependencies + - run the tests + - build the electron application and package it + - deploy the package to github releases (if the release doesn't exist so far, he will create one) + +Detailed description of the Configuration +......................................... + +In Line 22 there is the installation script for neo4j triggered. This will only work on unix systems. + +In Line 40 you see there is a BASH variable. If you want to use this deploy configuration +you have to go to github.com, login into your account, from there create an access token with the +option "repo" ticked and copy paste the generated token into the environment variables in the TRAVIS +web frontend. **Don't forget to activate encryption for this variable** or else everyone can access +your with ease. + +.. code-block:: yaml + :linenos: + :emphasize-lines: 22, 40 + + osx_image: xcode7.3 + sudo: required + dist: trusty + language: c + matrix: + include: + - os: osx + - os: linux + env: CC=clang CXX=clang++ npm_config_clang=1 + compiler: clang + cache: + directories: + - node_modules + - "$HOME/.electron" + - "$HOME/.cache" + addons: + apt: + packages: + - libgnome-keyring-dev + - icnsutils + before_install: + - ./install_neo4j.sh + - mkdir -p /tmp/git-lfs && curl -L https://github.com/github/git-lfs/releases/download/v1.2.1/git-lfs-$([ + "$TRAVIS_OS_NAME" == "linux" ] && echo "linux" || echo "darwin")-amd64-1.2.1.tar.gz + | tar -xz -C /tmp/git-lfs --strip-components 1 && /tmp/git-lfs/git-lfs pull + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick xz-utils; fi + install: + - nvm install 6 + - npm install electron-builder@next + - npm install + - npm prune + script: + - npm run release + branches: + except: + - "/^v\\d+\\.\\d+\\.\\d+$/" + + deploy: + provider: releases + api_key: "$GH_TOKEN" + file_glob: true + file: "*.zip" + skip_cleanup: true + on: + tags: false + + + +Deployment on AppVeyor +---------------------- + +AppVeyor provides a similar service to Travis-CI but is focused on windows. +So they provide a **Power shell** on a win32 host system you can configure. + +You have to put a :code:`appveyor.yml` file into the base dir of the repo which +might look like this. + +This configuration excludes the test because we already ran the tests on travis +and at the moment you are going to have a hard time installing neo4j into their machines. + +.. code-block:: yaml + :linenos: + :emphasize-lines: 22, 40 + + version: 0.1.{build} + + platform: + - x86 + - x64 + + cache: + - node_modules + - app\node_modules + - '%APPDATA%\npm-cache' + - '%USERPROFILE%\.electron' + + init: + - git config --global core.autocrlf input + + install: + - ps: Install-Product node 6 x64 + - git reset --hard HEAD + - npm install npm -g + - npm install electron-builder@next # force install next version to test electron-builder + - npm install + - npm prune + + build_script: + - node --version + - npm --version + - npm run release + + test: off + + deploy: + release: TransliterationApplication-v$(appveyor_build_version) + description: 'TransliterationApplication' + provider: GitHub + auth_token: + secure: QBn6bw8znM2WsrG32eTzA55Iu0iE6oymujVBos6XFUldN/biNahd6Csr6d9Y4u+E + artifact: '**\*.zip' # upload all NuGet packages to release assets + draft: true + prerelease: true + on: + branch: master # release from master branch only \ No newline at end of file diff --git a/docs/sphinx/_build/html/_sources/sources/Downloads.rst.txt b/docs/sphinx/_build/html/_sources/sources/Downloads.rst.txt new file mode 100644 index 0000000..ae793cc --- /dev/null +++ b/docs/sphinx/_build/html/_sources/sources/Downloads.rst.txt @@ -0,0 +1,5 @@ +Downloads +========= + +make a list of downloads with CHECKSUMS! + diff --git a/docs/sphinx/_build/html/_sources/sources/Heatmap.rst.txt b/docs/sphinx/_build/html/_sources/sources/Heatmap.rst.txt new file mode 100644 index 0000000..81cbbc8 --- /dev/null +++ b/docs/sphinx/_build/html/_sources/sources/Heatmap.rst.txt @@ -0,0 +1,32 @@ +Heatmap +======= + +The heatmap tool can be used to analyze the positions of tokens. +It might be interesting to see the density of tokens in a region or the outline they form. + +The input for this tool has to be a Cypher query. It will then only work with the tokens, +therefore it is recommended to build your query to only return tokens. + +The query is not analyzed or guarded. This means that any code can be executed. +As a consequence must this feature kept on a local system and not exposed through a webserver! + +The color scheme of the heatmap reaches from 0 (yellow) to 1 (red). + +Normalization techniques +------------------------ + +In this context the term normalization refers to an algorithm that makes the positions +of tokens in different images comparable. + +So far there are two types of normalizations present: + +Normalization 1: Position in image +.................................. + +Das Bezugssystem ist hier + +Normalization 2: Position in scritte (bounding box) +................................................... + +... + diff --git a/docs/sphinx/_build/html/_static/ajax-loader.gif b/docs/sphinx/_build/html/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/html/_static/alabaster.css b/docs/sphinx/_build/html/_static/alabaster.css new file mode 100644 index 0000000..be65b13 --- /dev/null +++ b/docs/sphinx/_build/html/_static/alabaster.css @@ -0,0 +1,693 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: 'Garamond', 'Georgia', serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} \ No newline at end of file diff --git a/docs/sphinx/_build/html/_static/basic.css b/docs/sphinx/_build/html/_static/basic.css new file mode 100644 index 0000000..dc88b5a --- /dev/null +++ b/docs/sphinx/_build/html/_static/basic.css @@ -0,0 +1,632 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/sphinx/_build/html/_static/comment-bright.png b/docs/sphinx/_build/html/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..15e27edb12ac25701ac0ac21b97b52bb4e45415e GIT binary patch literal 756 zcmVgfIX78 z$8Pzv({A~p%??+>KickCb#0FM1rYN=mBmQ&Nwp<#JXUhU;{|)}%&s>suq6lXw*~s{ zvHx}3C%<;wE5CH!BR{p5@ml9ws}y)=QN-kL2?#`S5d*6j zk`h<}j1>tD$b?4D^N9w}-k)bxXxFg>+#kme^xx#qg6FI-%iv2U{0h(Y)cs%5a|m%Pn_K3X_bDJ>EH#(Fb73Z zfUt2Q3B>N+ot3qb*DqbTZpFIn4a!#_R-}{?-~Hs=xSS6p&$sZ-k1zDdtqU`Y@`#qL z&zv-~)Q#JCU(dI)Hf;$CEnK=6CK50}q7~wdbI->?E07bJ0R;!GSQTs5Am`#;*WHjvHRvY?&$Lm-vq1a_BzocI^ULXV!lbMd%|^B#fY;XX)n<&R^L z=84u1e_3ziq;Hz-*k5~zwY3*oDKt0;bM@M@@89;@m*4RFgvvM_4;5LB!@OB@^WbVT zjl{t;a8_>od-~P4 m{5|DvB&z#xT;*OnJqG}gk~_7HcNkCr0000W zanA~u9RIXo;n7c96&U)YLgs-FGlx~*_c{Jgvesu1E5(8YEf&5wF=YFPcRe@1=MJmi zag(L*xc2r0(slpcN!vC5CUju;vHJkHc*&70_n2OZsK%O~A=!+YIw z7zLLl7~Z+~RgWOQ=MI6$#0pvpu$Q43 zP@36QAmu6!_9NPM?o<1_!+stoVRRZbW9#SPe!n;#A_6m8f}|xN1;H{`0RoXQ2LM47 zt(g;iZ6|pCb@h2xk&(}S3=EVBUO0e90m2Lp5CB<(SPIaB;n4))3JB87Or#XPOPcum z?<^(g+m9}VNn4Y&B`g8h{t_$+RB1%HKRY6fjtd-<7&EsU;vs0GM(Lmbhi%Gwcfs0FTF}T zL{_M6Go&E0Eg8FuB*(Yn+Z*RVTBE@10eIOb3El^MhO`GabDll(V0&FlJi2k^;q8af zkENdk2}x2)_KVp`5OAwXZM;dG0?M-S)xE1IKDi6BY@5%Or?#aZ9$gcX)dPZ&wA1a< z$rFXHPn|TBf`e?>Are8sKtKrKcjF$i^lp!zkL?C|y^vlHr1HXeVJd;1I~g&Ob-q)& z(fn7s-KI}G{wnKzg_U5G(V%bX6uk zIa+<@>rdmZYd!9Y=C0cuchrbIjuRB_Wq{-RXlic?flu1*_ux}x%(HDH&nT`k^xCeC ziHi1!ChH*sQ6|UqJpTTzX$aw8e(UfcS^f;6yBWd+(1-70zU(rtxtqR%j z-lsH|CKQJXqD{+F7V0OTv8@{~(wp(`oIP^ZykMWgR>&|RsklFMCnOo&Bd{le} zV5F6424Qzl;o2G%oVvmHgRDP9!=rK8fy^!yV8y*4p=??uIRrrr0?>O!(z*g5AvL2!4z0{sq%vhG*Po}`a<6%kTK5TNhtC8}rXNu&h^QH4A&Sk~Autm*s~45(H7+0bi^MraaRVzr05hQ3iK?j` zR#U@^i0WhkIHTg29u~|ypU?sXCQEQgXfObPW;+0YAF;|5XyaMAEM0sQ@4-xCZe=0e z7r$ofiAxn@O5#RodD8rh5D@nKQ;?lcf@tg4o+Wp44aMl~c47azN_(im0N)7OqdPBC zGw;353_o$DqGRDhuhU$Eaj!@m000000NkvXXu0mjfjZ7Z_ literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/html/_static/custom.css b/docs/sphinx/_build/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/docs/sphinx/_build/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/docs/sphinx/_build/html/_static/doctools.js b/docs/sphinx/_build/html/_static/doctools.js new file mode 100644 index 0000000..5654977 --- /dev/null +++ b/docs/sphinx/_build/html/_static/doctools.js @@ -0,0 +1,287 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s == 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node) { + if (node.nodeType == 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); \ No newline at end of file diff --git a/docs/sphinx/_build/html/_static/down-pressed.png b/docs/sphinx/_build/html/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..5756c8cad8854722893dc70b9eb4bb0400343a39 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFdm2Ln;`PZ^+1>KjR?B@S0W7 z%OS_REiHONoJ6{+Ks@6k3590|7k9F+ddB6!zw3#&!aw#S`x}3V3&=A(a#84O-&F7T z^k3tZB;&iR9siw0|F|E|DAL<8r-F4!1H-;1{e*~yAKZN5f0|Ei6yUmR#Is)EM(Po_ zi`qJR6|P<~+)N+kSDgL7AjdIC_!O7Q?eGb+L+qOjm{~LLinM4NHn7U%HcK%uoMYO5 VJ~8zD2B3o(JYD@<);T3K0RV0%P>BEl literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/html/_static/down.png b/docs/sphinx/_build/html/_static/down.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3bdad2ceffae91cee61b32f3295f9bbe646e48 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6CVIL!hEy=F?b*7pIY7kW{q%Rg zx!yQ<9v8bmJwa`TQk7YSw}WVQ()mRdQ;TC;* literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/html/_static/file.png b/docs/sphinx/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/sphinx/_build/html/_static/jquery-3.1.0.js b/docs/sphinx/_build/html/_static/jquery-3.1.0.js new file mode 100644 index 0000000..f2fc274 --- /dev/null +++ b/docs/sphinx/_build/html/_static/jquery-3.1.0.js @@ -0,0 +1,10074 @@ +/*eslint-disable no-unused-vars*/ +/*! + * jQuery JavaScript Library v3.1.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2016-07-07T21:44Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.1.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.0 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-01-04 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + // Known :disabled false positives: + // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) + // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Check form elements and option elements for explicit disabling + return "label" in elem && elem.disabled === disabled || + "form" in elem && elem.disabled === disabled || + + // Check non-disabled form elements for fieldset[disabled] ancestors + "form" in elem && elem.disabled === false && ( + // Support: IE6-11+ + // Ancestry is covered for us + elem.isDisabled === disabled || + + // Otherwise, assume any non-