Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
atlas
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dataplatform
atlas
Commits
ff1a9dc2
Commit
ff1a9dc2
authored
Apr 17, 2020
by
kevalbhatt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ATLAS-3732 : UI: Lineage graph improvement and lib version updated
parent
ad226ddd
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
1537 additions
and
937 deletions
+1537
-937
package-lock.json
dashboardv2/package-lock.json
+345
-113
package.json
dashboardv2/package.json
+2
-2
graph.scss
dashboardv2/public/css/scss/graph.scss
+10
-0
theme.scss
dashboardv2/public/css/scss/theme.scss
+2
-1
main.js
dashboardv2/public/js/main.js
+1
-1
LineageLayoutView.js
dashboardv2/public/js/views/graph/LineageLayoutView.js
+172
-334
LineageUtils.js
dashboardv2/public/js/views/graph/LineageUtils.js
+242
-11
package-lock.json
dashboardv3/package-lock.json
+335
-112
package.json
dashboardv3/package.json
+1
-1
graph.scss
dashboardv3/public/css/scss/graph.scss
+10
-0
theme.scss
dashboardv3/public/css/scss/theme.scss
+2
-1
main.js
dashboardv3/public/js/main.js
+1
-1
LineageLayoutView.js
dashboardv3/public/js/views/graph/LineageLayoutView.js
+172
-349
LineageUtils.js
dashboardv3/public/js/views/graph/LineageUtils.js
+242
-11
No files found.
dashboardv2/package-lock.json
View file @
ff1a9dc2
...
@@ -512,13 +512,9 @@
...
@@ -512,13 +512,9 @@
}
}
},
},
"commander"
:
{
"commander"
:
{
"version"
:
"2.9.0"
,
"version"
:
"2.20.3"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.9.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
,
"integrity"
:
"sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q="
,
"integrity"
:
"sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
"dev"
:
true
,
"requires"
:
{
"graceful-readlink"
:
">= 1.0.0"
}
},
},
"concat-map"
:
{
"concat-map"
:
{
"version"
:
"0.0.1"
,
"version"
:
"0.0.1"
,
...
@@ -625,6 +621,202 @@
...
@@ -625,6 +621,202 @@
"resolved"
:
"https://registry.npmjs.org/d3/-/d3-3.5.17.tgz"
,
"resolved"
:
"https://registry.npmjs.org/d3/-/d3-3.5.17.tgz"
,
"integrity"
:
"sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
"integrity"
:
"sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
},
},
"d3-array"
:
{
"version"
:
"1.2.4"
,
"resolved"
:
"https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz"
,
"integrity"
:
"sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
},
"d3-axis"
:
{
"version"
:
"1.0.12"
,
"resolved"
:
"https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz"
,
"integrity"
:
"sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ=="
},
"d3-brush"
:
{
"version"
:
"1.1.5"
,
"resolved"
:
"https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.5.tgz"
,
"integrity"
:
"sha512-rEaJ5gHlgLxXugWjIkolTA0OyMvw8UWU1imYXy1v642XyyswmI1ybKOv05Ft+ewq+TFmdliD3VuK0pRp1VT/5A=="
,
"requires"
:
{
"d3-dispatch"
:
"1"
,
"d3-drag"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-selection"
:
"1"
,
"d3-transition"
:
"1"
}
},
"d3-chord"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz"
,
"integrity"
:
"sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA=="
,
"requires"
:
{
"d3-array"
:
"1"
,
"d3-path"
:
"1"
}
},
"d3-collection"
:
{
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz"
,
"integrity"
:
"sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
},
"d3-color"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-color/-/d3-color-1.4.0.tgz"
,
"integrity"
:
"sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg=="
},
"d3-contour"
:
{
"version"
:
"1.3.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz"
,
"integrity"
:
"sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg=="
,
"requires"
:
{
"d3-array"
:
"^1.1.1"
}
},
"d3-dispatch"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz"
,
"integrity"
:
"sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA=="
},
"d3-drag"
:
{
"version"
:
"1.2.5"
,
"resolved"
:
"https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz"
,
"integrity"
:
"sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w=="
,
"requires"
:
{
"d3-dispatch"
:
"1"
,
"d3-selection"
:
"1"
}
},
"d3-dsv"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz"
,
"integrity"
:
"sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g=="
,
"requires"
:
{
"commander"
:
"2"
,
"iconv-lite"
:
"0.4"
,
"rw"
:
"1"
}
},
"d3-ease"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.6.tgz"
,
"integrity"
:
"sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ=="
},
"d3-fetch"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.1.2.tgz"
,
"integrity"
:
"sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA=="
,
"requires"
:
{
"d3-dsv"
:
"1"
}
},
"d3-force"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz"
,
"integrity"
:
"sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg=="
,
"requires"
:
{
"d3-collection"
:
"1"
,
"d3-dispatch"
:
"1"
,
"d3-quadtree"
:
"1"
,
"d3-timer"
:
"1"
}
},
"d3-format"
:
{
"version"
:
"1.4.4"
,
"resolved"
:
"https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz"
,
"integrity"
:
"sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw=="
},
"d3-geo"
:
{
"version"
:
"1.11.9"
,
"resolved"
:
"https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.9.tgz"
,
"integrity"
:
"sha512-9edcH6J3s/Aa3KJITWqFJbyB/8q3mMlA9Fi7z6yy+FAYMnRaxmC7jBhUnsINxVWD14GmqX3DK8uk7nV6/Ekt4A=="
,
"requires"
:
{
"d3-array"
:
"1"
}
},
"d3-hierarchy"
:
{
"version"
:
"1.1.9"
,
"resolved"
:
"https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz"
,
"integrity"
:
"sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ=="
},
"d3-interpolate"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz"
,
"integrity"
:
"sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA=="
,
"requires"
:
{
"d3-color"
:
"1"
}
},
"d3-path"
:
{
"version"
:
"1.0.9"
,
"resolved"
:
"https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz"
,
"integrity"
:
"sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
},
"d3-polygon"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz"
,
"integrity"
:
"sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ=="
},
"d3-quadtree"
:
{
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz"
,
"integrity"
:
"sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA=="
},
"d3-random"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz"
,
"integrity"
:
"sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ=="
},
"d3-scale"
:
{
"version"
:
"2.2.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz"
,
"integrity"
:
"sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw=="
,
"requires"
:
{
"d3-array"
:
"^1.2.0"
,
"d3-collection"
:
"1"
,
"d3-format"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-time"
:
"1"
,
"d3-time-format"
:
"2"
}
},
"d3-scale-chromatic"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz"
,
"integrity"
:
"sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg=="
,
"requires"
:
{
"d3-color"
:
"1"
,
"d3-interpolate"
:
"1"
}
},
"d3-selection"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.1.tgz"
,
"integrity"
:
"sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA=="
},
"d3-shape"
:
{
"version"
:
"1.3.7"
,
"resolved"
:
"https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz"
,
"integrity"
:
"sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="
,
"requires"
:
{
"d3-path"
:
"1"
}
},
"d3-time"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz"
,
"integrity"
:
"sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
},
"d3-time-format"
:
{
"version"
:
"2.2.3"
,
"resolved"
:
"https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz"
,
"integrity"
:
"sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA=="
,
"requires"
:
{
"d3-time"
:
"1"
}
},
"d3-timer"
:
{
"version"
:
"1.0.10"
,
"resolved"
:
"https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz"
,
"integrity"
:
"sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw=="
},
"d3-tip"
:
{
"d3-tip"
:
{
"version"
:
"0.6.8"
,
"version"
:
"0.6.8"
,
"resolved"
:
"https://registry.npmjs.org/d3-tip/-/d3-tip-0.6.8.tgz"
,
"resolved"
:
"https://registry.npmjs.org/d3-tip/-/d3-tip-0.6.8.tgz"
,
...
@@ -633,24 +825,94 @@
...
@@ -633,24 +825,94 @@
"d3"
:
"^3.5.5"
"d3"
:
"^3.5.5"
}
}
},
},
"d3-transition"
:
{
"version"
:
"1.3.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz"
,
"integrity"
:
"sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA=="
,
"requires"
:
{
"d3-color"
:
"1"
,
"d3-dispatch"
:
"1"
,
"d3-ease"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-selection"
:
"^1.1.0"
,
"d3-timer"
:
"1"
}
},
"d3-voronoi"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz"
,
"integrity"
:
"sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg=="
},
"d3-zoom"
:
{
"version"
:
"1.8.3"
,
"resolved"
:
"https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz"
,
"integrity"
:
"sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ=="
,
"requires"
:
{
"d3-dispatch"
:
"1"
,
"d3-drag"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-selection"
:
"1"
,
"d3-transition"
:
"1"
}
},
"dagre"
:
{
"dagre"
:
{
"version"
:
"0.
7.4
"
,
"version"
:
"0.
8.5
"
,
"resolved"
:
"https://registry.npmjs.org/dagre/-/dagre-0.
7.4
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/dagre/-/dagre-0.
8.5
.tgz"
,
"integrity"
:
"sha
1-3nLw50pVDOEc5jjwoTb+1xI5gCI
="
,
"integrity"
:
"sha
512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw=
="
,
"requires"
:
{
"requires"
:
{
"graphlib"
:
"^
1.0.5
"
,
"graphlib"
:
"^
2.1.8
"
,
"lodash"
:
"^
3.10.0
"
"lodash"
:
"^
4.17.15
"
}
}
},
},
"dagre-d3"
:
{
"dagre-d3"
:
{
"version"
:
"0.
4.17
"
,
"version"
:
"0.
6.4
"
,
"resolved"
:
"https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.
4.17
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.
6.4
.tgz"
,
"integrity"
:
"sha
1-lTMYDQC6n/KLBM7hJ+k1ktnGChw
="
,
"integrity"
:
"sha
512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ=
="
,
"requires"
:
{
"requires"
:
{
"d3"
:
"^3.3.8"
,
"d3"
:
"^5.14"
,
"dagre"
:
"^0.7.3"
,
"dagre"
:
"^0.8.5"
,
"graphlib"
:
"^1.0.5"
,
"graphlib"
:
"^2.1.8"
,
"lodash"
:
"^3.10.0"
"lodash"
:
"^4.17.15"
},
"dependencies"
:
{
"d3"
:
{
"version"
:
"5.15.1"
,
"resolved"
:
"https://registry.npmjs.org/d3/-/d3-5.15.1.tgz"
,
"integrity"
:
"sha512-Xu9gT6Lm0jH3wWJJSRomFwqnGGi3YAfWIfxNFl4++YVgYOjo3F8V2idAG3nJBgpZOkD0/RHPZX6F4k6tzgOvYw=="
,
"requires"
:
{
"d3-array"
:
"1"
,
"d3-axis"
:
"1"
,
"d3-brush"
:
"1"
,
"d3-chord"
:
"1"
,
"d3-collection"
:
"1"
,
"d3-color"
:
"1"
,
"d3-contour"
:
"1"
,
"d3-dispatch"
:
"1"
,
"d3-drag"
:
"1"
,
"d3-dsv"
:
"1"
,
"d3-ease"
:
"1"
,
"d3-fetch"
:
"1"
,
"d3-force"
:
"1"
,
"d3-format"
:
"1"
,
"d3-geo"
:
"1"
,
"d3-hierarchy"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-path"
:
"1"
,
"d3-polygon"
:
"1"
,
"d3-quadtree"
:
"1"
,
"d3-random"
:
"1"
,
"d3-scale"
:
"2"
,
"d3-scale-chromatic"
:
"1"
,
"d3-selection"
:
"1"
,
"d3-shape"
:
"1"
,
"d3-time"
:
"1"
,
"d3-time-format"
:
"2"
,
"d3-timer"
:
"1"
,
"d3-transition"
:
"1"
,
"d3-voronoi"
:
"1"
,
"d3-zoom"
:
"1"
}
}
}
}
},
},
"dashdash"
:
{
"dashdash"
:
{
...
@@ -709,9 +971,9 @@
...
@@ -709,9 +971,9 @@
"dev"
:
true
"dev"
:
true
},
},
"depd"
:
{
"depd"
:
{
"version"
:
"
1.1.2
"
,
"version"
:
"
2.0.0
"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-
1.1.2
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-
2.0.0
.tgz"
,
"integrity"
:
"sha
1-m81S4UwJd2PnSbJ0xDRu0uVgtak
="
,
"integrity"
:
"sha
512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=
="
,
"dev"
:
true
"dev"
:
true
},
},
"destroy"
:
{
"destroy"
:
{
...
@@ -750,9 +1012,9 @@
...
@@ -750,9 +1012,9 @@
}
}
},
},
"dropzone"
:
{
"dropzone"
:
{
"version"
:
"5.
5.1
"
,
"version"
:
"5.
7.0
"
,
"resolved"
:
"https://registry.npmjs.org/dropzone/-/dropzone-5.
5.1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/dropzone/-/dropzone-5.
7.0
.tgz"
,
"integrity"
:
"sha512-
3VduRWLxx9hbVr42QieQN25mx/I61/mRdUSuxAmDGdDqZIN8qtP7tcKMa3KfpJjuGjOJGYYUzzeq6eGDnkzesA
=="
"integrity"
:
"sha512-
kOltiZXH5cO/72I22JjE+w6BoT6uaVLfWdFMsi1PMKFkU6BZWpqRwjnsRm0o6ANGTBuZar5Piu7m/CbKqRPiYg
=="
},
},
"ecc-jsbn"
:
{
"ecc-jsbn"
:
{
"version"
:
"0.1.2"
,
"version"
:
"0.1.2"
,
...
@@ -1070,12 +1332,6 @@
...
@@ -1070,12 +1332,6 @@
"once"
:
"^1.3.0"
,
"once"
:
"^1.3.0"
,
"path-is-absolute"
:
"^1.0.0"
"path-is-absolute"
:
"^1.0.0"
}
}
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
}
},
},
...
@@ -1092,11 +1348,11 @@
...
@@ -1092,11 +1348,11 @@
"dev"
:
true
"dev"
:
true
},
},
"graphlib"
:
{
"graphlib"
:
{
"version"
:
"
1.0.7
"
,
"version"
:
"
2.1.8
"
,
"resolved"
:
"https://registry.npmjs.org/graphlib/-/graphlib-
1.0.7
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/graphlib/-/graphlib-
2.1.8
.tgz"
,
"integrity"
:
"sha
1-DKst8P/mq+BwsmJb+h7bbslnuLE
="
,
"integrity"
:
"sha
512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A=
="
,
"requires"
:
{
"requires"
:
{
"lodash"
:
"^
3.10.0
"
"lodash"
:
"^
4.17.15
"
}
}
},
},
"grunt"
:
{
"grunt"
:
{
...
@@ -1356,12 +1612,6 @@
...
@@ -1356,12 +1612,6 @@
"requires"
:
{
"requires"
:
{
"lodash"
:
"^4.17.14"
"lodash"
:
"^4.17.14"
}
}
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
}
},
},
...
@@ -1381,14 +1631,6 @@
...
@@ -1381,14 +1631,6 @@
"grunt-legacy-log-utils"
:
"~2.0.0"
,
"grunt-legacy-log-utils"
:
"~2.0.0"
,
"hooker"
:
"~0.2.3"
,
"hooker"
:
"~0.2.3"
,
"lodash"
:
"~4.17.5"
"lodash"
:
"~4.17.5"
},
"dependencies"
:
{
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
},
},
"grunt-legacy-log-utils"
:
{
"grunt-legacy-log-utils"
:
{
...
@@ -1399,14 +1641,6 @@
...
@@ -1399,14 +1641,6 @@
"requires"
:
{
"requires"
:
{
"chalk"
:
"~2.4.1"
,
"chalk"
:
"~2.4.1"
,
"lodash"
:
"~4.17.10"
"lodash"
:
"~4.17.10"
},
"dependencies"
:
{
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
},
},
"grunt-legacy-util"
:
{
"grunt-legacy-util"
:
{
...
@@ -1422,14 +1656,6 @@
...
@@ -1422,14 +1656,6 @@
"lodash"
:
"~4.17.10"
,
"lodash"
:
"~4.17.10"
,
"underscore.string"
:
"~3.3.4"
,
"underscore.string"
:
"~3.3.4"
,
"which"
:
"~1.3.0"
"which"
:
"~1.3.0"
},
"dependencies"
:
{
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
},
},
"grunt-middleware-proxy"
:
{
"grunt-middleware-proxy"
:
{
...
@@ -1535,6 +1761,17 @@
...
@@ -1535,6 +1761,17 @@
"param-case"
:
"2.1.x"
,
"param-case"
:
"2.1.x"
,
"relateurl"
:
"0.2.x"
,
"relateurl"
:
"0.2.x"
,
"uglify-js"
:
"2.7.x"
"uglify-js"
:
"2.7.x"
},
"dependencies"
:
{
"commander"
:
{
"version"
:
"2.9.0"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.9.0.tgz"
,
"integrity"
:
"sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q="
,
"dev"
:
true
,
"requires"
:
{
"graceful-readlink"
:
">= 1.0.0"
}
}
}
}
},
},
"http-errors"
:
{
"http-errors"
:
{
...
@@ -1549,6 +1786,12 @@
...
@@ -1549,6 +1786,12 @@
"statuses"
:
">= 1.4.0 < 2"
"statuses"
:
">= 1.4.0 < 2"
},
},
"dependencies"
:
{
"dependencies"
:
{
"depd"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
,
"integrity"
:
"sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
,
"dev"
:
true
},
"inherits"
:
{
"inherits"
:
{
"version"
:
"2.0.3"
,
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
...
@@ -1584,7 +1827,6 @@
...
@@ -1584,7 +1827,6 @@
"version"
:
"0.4.24"
,
"version"
:
"0.4.24"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"integrity"
:
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
,
"integrity"
:
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
"safer-buffer"
:
">= 2.1.2 < 3"
}
}
...
@@ -1852,9 +2094,9 @@
...
@@ -1852,9 +2094,9 @@
}
}
},
},
"lodash"
:
{
"lodash"
:
{
"version"
:
"
3.10.1
"
,
"version"
:
"
4.17.15
"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-
3.10.1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-
4.17.15
.tgz"
,
"integrity"
:
"sha
1-W/Rejkm6QYnhfUgnid/RW9FAt7Y
="
"integrity"
:
"sha
512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=
="
},
},
"longest"
:
{
"longest"
:
{
"version"
:
"1.0.1"
,
"version"
:
"1.0.1"
,
...
@@ -1993,20 +2235,12 @@
...
@@ -1993,20 +2235,12 @@
"dev"
:
true
"dev"
:
true
},
},
"mkdirp"
:
{
"mkdirp"
:
{
"version"
:
"0.5.
1
"
,
"version"
:
"0.5.
5
"
,
"resolved"
:
"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.
1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.
5
.tgz"
,
"integrity"
:
"sha
1-MAV0OOrGz3+MR2fzhkjWaX11yQM
="
,
"integrity"
:
"sha
512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ=
="
,
"dev"
:
true
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"minimist"
:
"0.0.8"
"minimist"
:
"^1.2.5"
},
"dependencies"
:
{
"minimist"
:
{
"version"
:
"0.0.8"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
,
"integrity"
:
"sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
,
"dev"
:
true
}
}
}
},
},
"moment"
:
{
"moment"
:
{
...
@@ -2023,16 +2257,16 @@
...
@@ -2023,16 +2257,16 @@
}
}
},
},
"morgan"
:
{
"morgan"
:
{
"version"
:
"1.
9.1
"
,
"version"
:
"1.
10.0
"
,
"resolved"
:
"https://registry.npmjs.org/morgan/-/morgan-1.
9.1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/morgan/-/morgan-1.
10.0
.tgz"
,
"integrity"
:
"sha512-
HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA
=="
,
"integrity"
:
"sha512-
AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ
=="
,
"dev"
:
true
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"basic-auth"
:
"~2.0.
0
"
,
"basic-auth"
:
"~2.0.
1
"
,
"debug"
:
"2.6.9"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~
1.1.2
"
,
"depd"
:
"~
2.0.0
"
,
"on-finished"
:
"~2.3.0"
,
"on-finished"
:
"~2.3.0"
,
"on-headers"
:
"~1.0.
1
"
"on-headers"
:
"~1.0.
2
"
}
}
},
},
"ms"
:
{
"ms"
:
{
...
@@ -2155,12 +2389,6 @@
...
@@ -2155,12 +2389,6 @@
"supports-color"
:
"^2.0.0"
"supports-color"
:
"^2.0.0"
}
}
},
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
},
"supports-color"
:
{
"supports-color"
:
{
"version"
:
"2.0.0"
,
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
,
...
@@ -2456,9 +2684,9 @@
...
@@ -2456,9 +2684,9 @@
"dev"
:
true
"dev"
:
true
},
},
"psl"
:
{
"psl"
:
{
"version"
:
"1.
7
.0"
,
"version"
:
"1.
8
.0"
,
"resolved"
:
"https://registry.npmjs.org/psl/-/psl-1.
7
.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/psl/-/psl-1.
8
.0.tgz"
,
"integrity"
:
"sha512-
5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJO
Q=="
,
"integrity"
:
"sha512-
RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjI
Q=="
,
"dev"
:
true
"dev"
:
true
},
},
"punycode"
:
{
"punycode"
:
{
...
@@ -2468,9 +2696,9 @@
...
@@ -2468,9 +2696,9 @@
"dev"
:
true
"dev"
:
true
},
},
"qs"
:
{
"qs"
:
{
"version"
:
"6.9.
1
"
,
"version"
:
"6.9.
3
"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.9.
1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.9.
3
.tgz"
,
"integrity"
:
"sha512-
Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA
=="
,
"integrity"
:
"sha512-
EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw
=="
,
"dev"
:
true
"dev"
:
true
},
},
"range-parser"
:
{
"range-parser"
:
{
...
@@ -2628,9 +2856,9 @@
...
@@ -2628,9 +2856,9 @@
"integrity"
:
"sha1-ExOHM2E/xEV7fhJH6Mt1HfeqVCk="
"integrity"
:
"sha1-ExOHM2E/xEV7fhJH6Mt1HfeqVCk="
},
},
"resolve"
:
{
"resolve"
:
{
"version"
:
"1.1
5.1
"
,
"version"
:
"1.1
6.0
"
,
"resolved"
:
"https://registry.npmjs.org/resolve/-/resolve-1.1
5.1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/resolve/-/resolve-1.1
6.0
.tgz"
,
"integrity"
:
"sha512-
84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w
=="
,
"integrity"
:
"sha512-
LarL/PIKJvc09k1jaeT4kQb/8/7P+qV4qSnN2K80AES+OHdfZELAKVOBjxsvtToT/uLOfFbvYvKfZmV8cee7nA
=="
,
"dev"
:
true
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"path-parse"
:
"^1.0.6"
"path-parse"
:
"^1.0.6"
...
@@ -2685,6 +2913,11 @@
...
@@ -2685,6 +2913,11 @@
}
}
}
}
},
},
"rw"
:
{
"version"
:
"1.3.3"
,
"resolved"
:
"https://registry.npmjs.org/rw/-/rw-1.3.3.tgz"
,
"integrity"
:
"sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
},
"rx"
:
{
"rx"
:
{
"version"
:
"4.1.0"
,
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/rx/-/rx-4.1.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/rx/-/rx-4.1.0.tgz"
,
...
@@ -2705,8 +2938,7 @@
...
@@ -2705,8 +2938,7 @@
"safer-buffer"
:
{
"safer-buffer"
:
{
"version"
:
"2.1.2"
,
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
,
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
"dev"
:
true
},
},
"sass-graph"
:
{
"sass-graph"
:
{
"version"
:
"2.2.4"
,
"version"
:
"2.2.4"
,
...
@@ -2737,12 +2969,6 @@
...
@@ -2737,12 +2969,6 @@
"wrap-ansi"
:
"^2.0.0"
"wrap-ansi"
:
"^2.0.0"
}
}
},
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
},
"yargs"
:
{
"yargs"
:
{
"version"
:
"7.1.0"
,
"version"
:
"7.1.0"
,
"resolved"
:
"https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz"
,
...
@@ -2823,6 +3049,12 @@
...
@@ -2823,6 +3049,12 @@
"statuses"
:
"~1.5.0"
"statuses"
:
"~1.5.0"
},
},
"dependencies"
:
{
"dependencies"
:
{
"depd"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
,
"integrity"
:
"sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
,
"dev"
:
true
},
"http-errors"
:
{
"http-errors"
:
{
"version"
:
"1.7.3"
,
"version"
:
"1.7.3"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz"
,
...
@@ -2890,9 +3122,9 @@
...
@@ -2890,9 +3122,9 @@
"dev"
:
true
"dev"
:
true
},
},
"signal-exit"
:
{
"signal-exit"
:
{
"version"
:
"3.0.
2
"
,
"version"
:
"3.0.
3
"
,
"resolved"
:
"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.
2
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.
3
.tgz"
,
"integrity"
:
"sha
1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0
="
,
"integrity"
:
"sha
512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=
="
,
"dev"
:
true
"dev"
:
true
},
},
"source-map"
:
{
"source-map"
:
{
...
...
dashboardv2/package.json
View file @
ff1a9dc2
...
@@ -32,8 +32,8 @@
...
@@ -32,8 +32,8 @@
"bootstrap-daterangepicker"
:
"2.1.25"
,
"bootstrap-daterangepicker"
:
"2.1.25"
,
"d3"
:
"3.5.17"
,
"d3"
:
"3.5.17"
,
"d3-tip"
:
"0.6.8"
,
"d3-tip"
:
"0.6.8"
,
"dagre-d3"
:
"0.
4.17
"
,
"dagre-d3"
:
"0.
6.4
"
,
"dropzone"
:
"5.
5.1
"
,
"dropzone"
:
"5.
7.0
"
,
"font-awesome"
:
"4.7.0"
,
"font-awesome"
:
"4.7.0"
,
"jQuery-QueryBuilder"
:
"2.4.3"
,
"jQuery-QueryBuilder"
:
"2.4.3"
,
"jquery"
:
"3.3.1"
,
"jquery"
:
"3.3.1"
,
...
...
dashboardv2/public/css/scss/graph.scss
View file @
ff1a9dc2
...
@@ -48,6 +48,16 @@
...
@@ -48,6 +48,16 @@
.label
{
.label
{
fill
:
$color_suva_gray_approx
;
fill
:
$color_suva_gray_approx
;
&
.highlight
{
cursor
:
pointer
;
fill
:
$color_havelock_blue_approx
;
text-decoration
:
underline
;
tspan
{
font-weight
:
400
;
}
}
}
}
circle
{
circle
{
...
...
dashboardv2/public/css/scss/theme.scss
View file @
ff1a9dc2
...
@@ -576,7 +576,8 @@ td.searchTableName:hover {
...
@@ -576,7 +576,8 @@ td.searchTableName:hover {
}
}
}
}
image
{
image
,
circle
{
opacity
:
0
.2
;
opacity
:
0
.2
;
//animation: blink 2.5s infinite;
//animation: blink 2.5s infinite;
}
}
...
...
dashboardv2/public/js/main.js
View file @
ff1a9dc2
...
@@ -42,7 +42,7 @@ require.config({
...
@@ -42,7 +42,7 @@ require.config({
* @default 7 seconds
* @default 7 seconds
* @type {Number}
* @type {Number}
*/
*/
'waitSeconds'
:
3
0
,
'waitSeconds'
:
0
,
'shim'
:
{
'shim'
:
{
'backbone'
:
{
'backbone'
:
{
...
...
dashboardv2/public/js/views/graph/LineageLayoutView.js
View file @
ff1a9dc2
...
@@ -109,7 +109,6 @@ define(['require',
...
@@ -109,7 +109,6 @@ define(['require',
selectedNode
:
''
selectedNode
:
''
}
}
},
},
initializeGraph
:
function
()
{
initializeGraph
:
function
()
{
this
.
g
=
{};
this
.
g
=
{};
this
.
g
=
new
dagreD3
.
graphlib
.
Graph
()
this
.
g
=
new
dagreD3
.
graphlib
.
Graph
()
...
@@ -129,17 +128,15 @@ define(['require',
...
@@ -129,17 +128,15 @@ define(['require',
},
},
onRender
:
function
()
{
onRender
:
function
()
{
var
that
=
this
;
var
that
=
this
;
this
.
ui
.
searchToggler
.
prop
(
"disabled"
,
true
);
this
.
$graphButtonsEl
=
this
.
$
(
".graph-button-group button,select[data-id='selectDepth']"
)
this
.
fetchGraphData
();
this
.
fetchGraphData
();
if
(
platform
.
name
===
"IE"
)
{
if
(
platform
.
name
===
"IE"
)
{
this
.
$
(
'svg'
).
css
(
'opacity'
,
'0'
);
this
.
$
(
'svg'
).
css
(
'opacity'
,
'0'
);
}
}
if
(
platform
.
name
===
"Microsoft Edge"
||
platform
.
name
===
"IE"
)
{
if
(
platform
.
name
===
"Microsoft Edge"
||
platform
.
name
===
"IE"
)
{
$
(
that
.
ui
.
saveSvg
).
hide
();
$
(
that
.
ui
.
saveSvg
).
hide
();
}
}
if
(
this
.
layoutRendered
)
{
if
(
this
.
layoutRendered
)
{
this
.
layoutRendered
();
this
.
layoutRendered
();
...
@@ -177,15 +174,22 @@ define(['require',
...
@@ -177,15 +174,22 @@ define(['require',
panel
.
toggleClass
(
'fullscreen-mode'
);
panel
.
toggleClass
(
'fullscreen-mode'
);
},
},
onCheckUnwantedEntity
:
function
(
e
)
{
onCheckUnwantedEntity
:
function
(
e
)
{
var
data
=
$
.
extend
(
true
,
{},
this
.
lineageData
);
var
that
=
this
;
//this.fromToNodeData = {};
this
.
initializeGraph
();
this
.
initializeGraph
();
if
(
$
(
e
.
target
).
data
(
"id"
)
===
"checkHideProcess"
)
{
if
(
$
(
e
.
target
).
data
(
"id"
)
===
"checkHideProcess"
)
{
this
.
filterObj
.
isProcessHideCheck
=
e
.
target
.
checked
;
this
.
filterObj
.
isProcessHideCheck
=
e
.
target
.
checked
;
}
else
{
}
else
{
this
.
filterObj
.
isDeletedEntityHideCheck
=
e
.
target
.
checked
;
this
.
filterObj
.
isDeletedEntityHideCheck
=
e
.
target
.
checked
;
}
}
this
.
generateData
({
"relationshipMap"
:
this
.
relationshipMap
,
"guidEntityMap"
:
this
.
guidEntityMap
});
that
.
toggleDisableState
({
"el"
:
that
.
$graphButtonsEl
});
this
.
generateData
(
this
.
lineageData
).
then
(
function
()
{
that
.
createGraph
();
that
.
toggleDisableState
({
"el"
:
that
.
$graphButtonsEl
});
});
},
},
toggleBoxPanel
:
function
(
options
)
{
toggleBoxPanel
:
function
(
options
)
{
var
el
=
options
&&
options
.
el
,
var
el
=
options
&&
options
.
el
,
...
@@ -214,11 +218,9 @@ define(['require',
...
@@ -214,11 +218,9 @@ define(['require',
this
.
filterObj
.
depthCount
=
e
.
currentTarget
.
value
;
this
.
filterObj
.
depthCount
=
e
.
currentTarget
.
value
;
this
.
fetchGraphData
({
queryParam
:
{
'depth'
:
this
.
filterObj
.
depthCount
}
});
this
.
fetchGraphData
({
queryParam
:
{
'depth'
:
this
.
filterObj
.
depthCount
}
});
},
},
fetchGraphData
:
function
(
options
)
{
fetchGraphData
:
function
(
options
)
{
var
that
=
this
,
var
that
=
this
,
queryParam
=
options
&&
options
.
queryParam
||
{};
queryParam
=
options
&&
options
.
queryParam
||
{};
this
.
fromToNodeData
=
{};
this
.
$
(
'.fontLoader'
).
show
();
this
.
$
(
'.fontLoader'
).
show
();
this
.
$
(
'svg>g'
).
hide
();
this
.
$
(
'svg>g'
).
hide
();
this
.
toggleDisableState
({
this
.
toggleDisableState
({
...
@@ -232,16 +234,18 @@ define(['require',
...
@@ -232,16 +234,18 @@ define(['require',
}
}
if
(
data
.
relations
.
length
)
{
if
(
data
.
relations
.
length
)
{
that
.
lineageData
=
$
.
extend
(
true
,
{},
data
);
that
.
lineageData
=
$
.
extend
(
true
,
{},
data
);
that
.
relationshipMap
=
that
.
crateLineageRelationshipHashMap
(
data
);
that
.
generateData
(
that
.
lineageData
).
then
(
function
(
graphObj
)
{
that
.
guidEntityMap
=
$
.
extend
(
true
,
{},
data
.
guidEntityMap
);
that
.
createGraph
();
that
.
generateData
({
"relationshipMap"
:
that
.
relationshipMap
,
"guidEntityMap"
:
that
.
guidEntityMap
});
that
.
toggleDisableState
({
that
.
toggleDisableState
({
"el"
:
that
.
$
(
".graph-button-group button,select[data-id='selectDepth']"
)
"el"
:
that
.
$graphButtonsEl
});
});
that
.
renderLineageTypeSearch
().
then
(
function
()
{
that
.
ui
.
searchToggler
.
prop
(
"disabled"
,
false
);
});
});
}
else
{
}
else
{
that
.
noLineage
();
that
.
noLineage
();
that
.
hideCheckForProcess
();
that
.
hideCheckForProcess
();
}
}
},
},
cust_error
:
function
(
model
,
response
)
{
cust_error
:
function
(
model
,
response
)
{
...
@@ -286,7 +290,6 @@ define(['require',
...
@@ -286,7 +290,6 @@ define(['require',
var
returnObj
=
{
var
returnObj
=
{
isProcess
:
(
isProcessHideCheck
&&
node
.
isProcess
),
isProcess
:
(
isProcessHideCheck
&&
node
.
isProcess
),
isDeleted
:
(
isDeletedEntityHideCheck
&&
node
.
isDeleted
)
isDeleted
:
(
isDeletedEntityHideCheck
&&
node
.
isDeleted
)
};
};
returnObj
[
"update"
]
=
returnObj
.
isProcess
||
returnObj
.
isDeleted
;
returnObj
[
"update"
]
=
returnObj
.
isProcess
||
returnObj
.
isDeleted
;
return
returnObj
;
return
returnObj
;
...
@@ -317,34 +320,46 @@ define(['require',
...
@@ -317,34 +320,46 @@ define(['require',
}
}
return
serviceType
;
return
serviceType
;
},
},
crateLineageRelationshipHashMap
:
function
(
data
)
{
generateData
:
function
(
options
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
try
{
var
that
=
this
,
var
that
=
this
,
relations
=
data
&&
data
.
relations
,
relations
=
options
&&
options
.
relations
||
{},
guidEntityMap
=
data
&&
data
.
guidEntityMap
,
guidEntityMap
=
options
&&
options
.
guidEntityMap
||
{},
isHideFilterOn
=
this
.
filterObj
.
isProcessHideCheck
||
this
.
filterObj
.
isDeletedEntityHideCheck
,
newHashMap
=
{},
styleObj
=
{
fill
:
'none'
,
stroke
:
'#ffb203'
,
width
:
3
},
makeNodeData
=
function
(
relationObj
)
{
makeNodeData
=
function
(
relationObj
)
{
var
obj
=
$
.
extend
(
true
,
{
if
(
relationObj
)
{
if
(
relationObj
.
updatedValues
)
{
return
relationObj
;
}
var
obj
=
_
.
extend
(
relationObj
,
{
shape
:
"img"
,
shape
:
"img"
,
updatedValues
:
true
,
label
:
relationObj
.
displayText
.
trunc
(
18
),
label
:
relationObj
.
displayText
.
trunc
(
18
),
toolTipLabel
:
relationObj
.
displayText
,
toolTipLabel
:
relationObj
.
displayText
,
id
:
relationObj
.
guid
,
id
:
relationObj
.
guid
,
isLineage
:
true
,
isLineage
:
true
,
isIncomplete
:
relationObj
.
isIncomplete
,
isIncomplete
:
relationObj
.
isIncomplete
,
entityDef
:
this
.
getEntityDef
(
relationObj
.
typeName
)
entityDef
:
that
.
getEntityDef
(
relationObj
.
typeName
)
},
relationObj
);
}
);
obj
[
"serviceType"
]
=
this
.
getServiceType
({
typeName
:
relationObj
.
typeName
,
entityDef
:
obj
.
entityDef
});
obj
[
"serviceType"
]
=
that
.
getServiceType
({
typeName
:
relationObj
.
typeName
,
entityDef
:
obj
.
entityDef
});
obj
[
"superTypes"
]
=
this
.
getNestedSuperTypes
({
entityDef
:
obj
.
entityDef
});
obj
[
"superTypes"
]
=
that
.
getNestedSuperTypes
({
entityDef
:
obj
.
entityDef
});
obj
[
'isProcess'
]
=
this
.
isProcess
(
obj
);
obj
[
'isProcess'
]
=
that
.
isProcess
(
obj
);
obj
[
'isDeleted'
]
=
this
.
isDeleted
(
obj
);
obj
[
'isDeleted'
]
=
that
.
isDeleted
(
obj
);
return
obj
;
return
obj
;
}.
bind
(
this
),
}
},
crateLineageRelationshipHashMap
=
function
(
data
)
{
var
that
=
this
,
relations
=
data
&&
data
.
relations
,
newHashMap
=
{};
newHashMap
=
{};
_
.
each
(
relations
,
function
(
obj
)
{
_
.
each
(
relations
,
function
(
obj
)
{
if
(
!
that
.
fromToNodeData
[
obj
.
fromEntityId
])
{
that
.
fromToNodeData
[
obj
.
fromEntityId
]
=
makeNodeData
(
guidEntityMap
[
obj
.
fromEntityId
]);
}
if
(
!
that
.
fromToNodeData
[
obj
.
toEntityId
])
{
that
.
fromToNodeData
[
obj
.
toEntityId
]
=
makeNodeData
(
guidEntityMap
[
obj
.
toEntityId
]);
}
if
(
newHashMap
[
obj
.
fromEntityId
])
{
if
(
newHashMap
[
obj
.
fromEntityId
])
{
newHashMap
[
obj
.
fromEntityId
].
push
(
obj
.
toEntityId
);
newHashMap
[
obj
.
fromEntityId
].
push
(
obj
.
toEntityId
);
}
else
{
}
else
{
...
@@ -353,25 +368,14 @@ define(['require',
...
@@ -353,25 +368,14 @@ define(['require',
});
});
return
newHashMap
;
return
newHashMap
;
},
},
generateData
:
function
(
options
)
{
var
that
=
this
,
relationshipMap
=
options
&&
$
.
extend
(
true
,
{},
options
.
relationshipMap
)
||
{},
guidEntityMap
=
options
&&
options
.
guidEntityMap
||
{},
styleObj
=
{
fill
:
'none'
,
stroke
:
'#ffb203'
,
width
:
3
},
getStyleObjStr
=
function
(
styleObj
)
{
getStyleObjStr
=
function
(
styleObj
)
{
return
'fill:'
+
styleObj
.
fill
+
';stroke:'
+
styleObj
.
stroke
+
';stroke-width:'
+
styleObj
.
width
;
return
'fill:'
+
styleObj
.
fill
+
';stroke:'
+
styleObj
.
stroke
+
';stroke-width:'
+
styleObj
.
width
;
},
},
filterRelationshipMap
=
relationshipMap
,
isHideFilterOn
=
this
.
filterObj
.
isProcessHideCheck
||
this
.
filterObj
.
isDeletedEntityHideCheck
,
getNewToNodeRelationship
=
function
(
toNodeGuid
)
{
getNewToNodeRelationship
=
function
(
toNodeGuid
)
{
if
(
toNodeGuid
&&
relationshipMap
[
toNodeGuid
])
{
if
(
toNodeGuid
&&
relationshipMap
[
toNodeGuid
])
{
var
newRelationship
=
[];
var
newRelationship
=
[];
_
.
each
(
relationshipMap
[
toNodeGuid
],
function
(
guid
)
{
_
.
each
(
relationshipMap
[
toNodeGuid
],
function
(
guid
)
{
var
nodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
that
.
fromToNodeData
[
guid
]
);
var
nodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
makeNodeData
(
guidEntityMap
[
guid
])
);
if
(
nodeToBeUpdated
.
update
)
{
if
(
nodeToBeUpdated
.
update
)
{
var
newRelation
=
getNewToNodeRelationship
(
guid
);
var
newRelation
=
getNewToNodeRelationship
(
guid
);
if
(
newRelation
)
{
if
(
newRelation
)
{
...
@@ -389,7 +393,7 @@ define(['require',
...
@@ -389,7 +393,7 @@ define(['require',
getToNodeRelation
=
function
(
toNodes
,
fromNodeToBeUpdated
)
{
getToNodeRelation
=
function
(
toNodes
,
fromNodeToBeUpdated
)
{
var
toNodeRelationship
=
[];
var
toNodeRelationship
=
[];
_
.
each
(
toNodes
,
function
(
toNodeGuid
)
{
_
.
each
(
toNodes
,
function
(
toNodeGuid
)
{
var
toNodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
that
.
fromToNodeData
[
toNodeGuid
]
);
var
toNodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
makeNodeData
(
guidEntityMap
[
toNodeGuid
])
);
if
(
toNodeToBeUpdated
.
update
)
{
if
(
toNodeToBeUpdated
.
update
)
{
// To node need to updated
// To node need to updated
if
(
pendingFromRelationship
[
toNodeGuid
])
{
if
(
pendingFromRelationship
[
toNodeGuid
])
{
...
@@ -407,11 +411,33 @@ define(['require',
...
@@ -407,11 +411,33 @@ define(['require',
});
});
return
toNodeRelationship
;
return
toNodeRelationship
;
},
},
setNode
=
function
(
guid
)
{
if
(
!
that
.
g
.
_nodes
[
guid
])
{
var
nodeData
=
makeNodeData
(
guidEntityMap
[
guid
]);
that
.
g
.
setNode
(
guid
,
nodeData
);
return
nodeData
;
}
else
{
return
that
.
g
.
_nodes
[
guid
];
}
},
setEdge
=
function
(
fromNodeGuid
,
toNodeGuid
)
{
that
.
g
.
setEdge
(
fromNodeGuid
,
toNodeGuid
,
{
"arrowhead"
:
'arrowPoint'
,
"curve"
:
LineageUtils
.
BezierCurve
,
"style"
:
getStyleObjStr
(
styleObj
),
"styleObj"
:
styleObj
});
},
setGraphData
=
function
(
fromEntityId
,
toEntityId
)
{
setNode
(
fromEntityId
);
setNode
(
toEntityId
);
setEdge
(
fromEntityId
,
toEntityId
);
},
pendingFromRelationship
=
{};
pendingFromRelationship
=
{};
if
(
isHideFilterOn
)
{
if
(
isHideFilterOn
)
{
filterRelationshipMap
=
{};
var
relationshipMap
=
crateLineageRelationshipHashMap
(
options
)
_
.
each
(
relationshipMap
,
function
(
toNodes
,
fromNodeGuid
)
{
_
.
each
(
relationshipMap
,
function
(
toNodes
,
fromNodeGuid
)
{
var
fromNodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
that
.
fromToNodeData
[
fromNodeGuid
]
),
var
fromNodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
makeNodeData
(
guidEntityMap
[
fromNodeGuid
])
),
toNodeList
=
getToNodeRelation
(
toNodes
,
fromNodeToBeUpdated
);
toNodeList
=
getToNodeRelation
(
toNodes
,
fromNodeToBeUpdated
);
if
(
fromNodeToBeUpdated
.
update
)
{
if
(
fromNodeToBeUpdated
.
update
)
{
if
(
pendingFromRelationship
[
fromNodeGuid
])
{
if
(
pendingFromRelationship
[
fromNodeGuid
])
{
...
@@ -420,74 +446,58 @@ define(['require',
...
@@ -420,74 +446,58 @@ define(['require',
pendingFromRelationship
[
fromNodeGuid
]
=
toNodeList
;
pendingFromRelationship
[
fromNodeGuid
]
=
toNodeList
;
}
}
}
else
{
}
else
{
if
(
filterRelationshipMap
[
fromNodeGuid
])
{
_
.
each
(
toNodeList
,
function
(
toNodeGuid
)
{
filterRelationshipMap
[
fromNodeGuid
]
=
filterRelationshipMap
[
fromNodeGuid
].
concat
(
toNodeList
);
setGraphData
(
fromNodeGuid
,
toNodeGuid
);
}
else
{
});
filterRelationshipMap
[
fromNodeGuid
]
=
toNodeList
;
}
}
}
})
})
}
else
{
_
.
each
(
relations
,
function
(
obj
)
{
setGraphData
(
obj
.
fromEntityId
,
obj
.
toEntityId
);
});
}
}
if
(
this
.
g
.
_nodes
[
this
.
guid
])
{
_
.
each
(
filterRelationshipMap
,
function
(
toNodesList
,
fromNodeGuid
)
{
if
(
this
.
g
.
_nodes
[
this
.
guid
])
{
if
(
!
that
.
g
.
_nodes
[
fromNodeGuid
])
{
this
.
g
.
_nodes
[
this
.
guid
][
'isLineage'
]
=
false
;
that
.
g
.
setNode
(
fromNodeGuid
,
that
.
fromToNodeData
[
fromNodeGuid
]);
}
}
_
.
each
(
toNodesList
,
function
(
toNodeGuid
)
{
this
.
findImpactNodeAndUpdateData
({
"guid"
:
this
.
guid
,
"getStyleObjStr"
:
getStyleObjStr
});
if
(
!
that
.
g
.
_nodes
[
toNodeGuid
])
{
that
.
g
.
setNode
(
toNodeGuid
,
that
.
fromToNodeData
[
toNodeGuid
]);
}
}
that
.
g
.
setEdge
(
fromNodeGuid
,
toNodeGuid
,
{
resolve
(
this
.
g
);
"arrowhead"
:
'arrowPoint'
,
}
catch
(
e
)
{
"lineInterpolate"
:
'basis'
,
reject
(
e
)
"style"
:
getStyleObjStr
(
styleObj
),
'styleObj'
:
styleObj
});
})
})
//if no relations found
if
(
_
.
isEmpty
(
filterRelationshipMap
))
{
this
.
$
(
'svg'
).
html
(
'<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">No relations to display</text>'
);
}
if
(
this
.
fromToNodeData
[
this
.
guid
])
{
this
.
fromToNodeData
[
this
.
guid
][
'isLineage'
]
=
false
;
this
.
findImpactNodeAndUpdateData
({
"relationshipMap"
:
filterRelationshipMap
,
"guid"
:
this
.
guid
,
"getStyleObjStr"
:
getStyleObjStr
});
}
}
this
.
renderLineageTypeSearch
();
}.
bind
(
this
));
this
.
createGraph
();
},
},
findImpactNodeAndUpdateData
:
function
(
options
)
{
findImpactNodeAndUpdateData
:
function
(
options
)
{
var
that
=
this
,
var
that
=
this
,
relationshipMap
=
options
.
relationshipMap
,
guid
=
options
.
guid
,
fromNodeGuid
=
options
.
guid
,
getStyleObjStr
=
options
.
getStyleObjStr
,
getStyleObjStr
=
options
.
getStyleObjStr
,
toNodeList
=
relationshipMap
[
fromNodeGuid
];
traversedMap
=
{},
if
(
toNodeList
&&
toNodeList
.
length
)
{
styleObj
=
{
if
(
!
relationshipMap
[
fromNodeGuid
][
"traversed"
])
{
relationshipMap
[
fromNodeGuid
][
"traversed"
]
=
true
;
_
.
each
(
toNodeList
,
function
(
toNodeGuid
)
{
that
.
fromToNodeData
[
toNodeGuid
][
'isLineage'
]
=
false
;
var
styleObj
=
{
fill
:
'none'
,
fill
:
'none'
,
stroke
:
'#fb4200'
,
stroke
:
'#fb4200'
,
width
:
3
width
:
3
},
traversed
=
function
(
toNodeList
,
fromNodeGuid
)
{
if
(
!
_
.
isEmpty
(
toNodeList
))
{
if
(
!
traversedMap
[
fromNodeGuid
])
{
traversedMap
[
fromNodeGuid
]
=
true
;
_
.
each
(
toNodeList
,
function
(
val
,
toNodeGuid
)
{
if
(
that
.
g
.
_nodes
[
toNodeGuid
])
{
that
.
g
.
_nodes
[
toNodeGuid
][
'isLineage'
]
=
false
;
}
}
that
.
g
.
setEdge
(
fromNodeGuid
,
toNodeGuid
,
{
that
.
g
.
setEdge
(
fromNodeGuid
,
toNodeGuid
,
{
"arrowhead"
:
'arrowPoint'
,
"arrowhead"
:
'arrowPoint'
,
"lineInterpolate"
:
'basis'
,
"curve"
:
LineageUtils
.
BezierCurve
,
"style"
:
getStyleObjStr
(
styleObj
),
"style"
:
getStyleObjStr
(
styleObj
),
'styleObj'
:
styleObj
'styleObj'
:
styleObj
});
});
that
.
findImpactNodeAndUpdateData
({
traversed
(
that
.
g
.
_sucs
[
toNodeGuid
],
toNodeGuid
);
"relationshipMap"
:
relationshipMap
,
"guid"
:
toNodeGuid
,
"getStyleObjStr"
:
getStyleObjStr
});
});
});
}
}
}
}
};
traversed
(
this
.
g
.
_sucs
[
guid
],
guid
)
},
},
zoomed
:
function
(
that
)
{
zoomed
:
function
(
that
)
{
this
.
$
(
'svg'
).
find
(
'>g'
).
attr
(
"transform"
,
this
.
$
(
'svg'
).
find
(
'>g'
).
attr
(
"transform"
,
...
@@ -513,6 +523,10 @@ define(['require',
...
@@ -513,6 +523,10 @@ define(['require',
});
});
},
},
createGraph
:
function
()
{
createGraph
:
function
()
{
if
(
_
.
isEmpty
(
this
.
g
.
_nodes
))
{
this
.
$
(
'svg'
).
html
(
'<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">No relations to display</text>'
);
return
;
}
var
that
=
this
,
var
that
=
this
,
width
=
this
.
$
(
'svg'
).
width
(),
width
=
this
.
$
(
'svg'
).
width
(),
height
=
this
.
$
(
'svg'
).
height
(),
height
=
this
.
$
(
'svg'
).
height
(),
...
@@ -529,111 +543,12 @@ define(['require',
...
@@ -529,111 +543,12 @@ define(['require',
// Create the renderer
// Create the renderer
var
render
=
new
dagreD3
.
render
();
var
render
=
new
dagreD3
.
render
();
// Add our custom arrow (a hollow-point)
// Add our custom arrow (a hollow-point)
render
.
arrows
().
arrowPoint
=
function
normal
(
parent
,
id
,
edge
,
type
)
{
render
.
arrows
().
arrowPoint
=
function
(
parent
,
id
,
edge
,
type
)
{
var
parentNode
=
parent
&&
parent
[
0
]
&&
parent
[
0
][
0
]
&&
parent
[
0
][
0
].
parentNode
?
parent
[
0
][
0
].
parentNode
:
parent
;
return
LineageUtils
.
arrowPointRender
(
parent
,
id
,
edge
,
type
,
{
guid
:
that
.
guid
,
dagreD3
:
dagreD3
});
d3
.
select
(
parentNode
).
select
(
'path.path'
).
attr
(
'marker-end'
,
"url(#"
+
id
+
")"
);
var
marker
=
parent
.
append
(
"marker"
)
.
attr
(
"id"
,
id
)
.
attr
(
"viewBox"
,
"0 0 10 10"
)
.
attr
(
"refX"
,
8
)
.
attr
(
"refY"
,
5
)
.
attr
(
"markerUnits"
,
"strokeWidth"
)
.
attr
(
"markerWidth"
,
4
)
.
attr
(
"markerHeight"
,
4
)
.
attr
(
"orient"
,
"auto"
);
var
path
=
marker
.
append
(
"path"
)
.
attr
(
"d"
,
"M 0 0 L 10 5 L 0 10 z"
)
.
style
(
"fill"
,
edge
.
styleObj
.
stroke
);
dagreD3
.
util
.
applyStyle
(
path
,
edge
[
type
+
"Style"
]);
};
render
.
shapes
().
img
=
function
circle
(
parent
,
bbox
,
node
)
{
//var r = Math.max(bbox.width, bbox.height) / 2,
if
(
node
.
id
==
that
.
guid
)
{
var
currentNode
=
true
}
var
shapeSvg
=
parent
.
append
(
'circle'
)
.
attr
(
'fill'
,
'url(#img_'
+
node
.
id
+
')'
)
.
attr
(
'r'
,
'24px'
)
.
attr
(
'data-stroke'
,
node
.
id
)
.
attr
(
'stroke-width'
,
"2px"
)
.
attr
(
"class"
,
"nodeImage "
+
(
currentNode
?
"currentNode"
:
(
node
.
isProcess
?
"process"
:
"node"
)));
if
(
currentNode
)
{
shapeSvg
.
attr
(
"stroke"
,
"#fb4200"
)
}
if
(
node
.
isIncomplete
===
true
)
{
parent
.
attr
(
"class"
,
"node isIncomplete show"
);
}
else
{
parent
.
attr
(
"class"
,
"node isIncomplete"
);
}
parent
.
insert
(
"defs"
)
.
append
(
"pattern"
)
.
attr
(
"x"
,
"0%"
)
.
attr
(
"y"
,
"0%"
)
.
attr
(
"patternUnits"
,
"objectBoundingBox"
)
.
attr
(
"id"
,
"img_"
+
node
.
id
)
.
attr
(
"width"
,
"100%"
)
.
attr
(
"height"
,
"100%"
)
.
append
(
'image'
)
.
attr
(
"href"
,
function
(
d
)
{
var
that
=
this
;
if
(
node
)
{
var
imageIconPath
=
Utils
.
getEntityIconPath
({
entityData
:
node
});
var
getImageData
=
function
(
options
)
{
var
imagePath
=
options
.
imagePath
,
ajaxOptions
=
{
"url"
:
imagePath
,
"method"
:
"get"
,
"cache"
:
true
}
if
(
platform
.
name
!==
"IE"
)
{
ajaxOptions
[
"mimeType"
]
=
"text/plain; charset=x-user-defined"
;
}
shapeSvg
.
attr
(
"data-iconpath"
,
imagePath
);
$
.
ajax
(
ajaxOptions
)
.
always
(
function
(
data
,
status
,
xhr
)
{
if
(
data
.
status
==
404
)
{
getImageData
({
"imagePath"
:
Utils
.
getEntityIconPath
({
entityData
:
node
,
errorUrl
:
imagePath
})
});
}
else
if
(
data
)
{
if
(
platform
.
name
!==
"IE"
)
{
imageObject
[
imageIconPath
]
=
'data:image/png;base64,'
+
LineageUtils
.
base64Encode
({
"data"
:
data
});
}
else
{
imageObject
[
imageIconPath
]
=
imagePath
;
}
d3
.
select
(
that
).
attr
(
"xlink:href"
,
imageObject
[
imageIconPath
]);
if
(
imageIconPath
!==
shapeSvg
.
attr
(
"data-iconpath"
))
{
shapeSvg
.
attr
(
"data-iconpathorigin"
,
imageIconPath
);
}
}
});
}
getImageData
({
"imagePath"
:
imageIconPath
});
}
})
.
attr
(
"x"
,
"4"
)
.
attr
(
"y"
,
currentNode
?
"3"
:
"4"
).
attr
(
"width"
,
"40"
)
.
attr
(
"height"
,
"40"
);
parent
.
insert
(
"foreignObject"
)
.
attr
(
"x"
,
"-25"
)
.
attr
(
"y"
,
"-25"
)
.
attr
(
"width"
,
"50"
)
.
attr
(
"height"
,
"50"
)
.
append
(
"xhtml:div"
)
.
insert
(
"i"
)
.
attr
(
"class"
,
"fa fa-hourglass-half"
);
node
.
intersect
=
function
(
point
)
{
return
dagreD3
.
intersect
.
circle
(
node
,
currentNode
?
24
:
21
,
point
);
};
};
return
shapeSvg
;
// Render custom img inside shape
render
.
shapes
().
img
=
function
(
parent
,
bbox
,
node
)
{
return
LineageUtils
.
imgShapeRender
(
parent
,
bbox
,
node
,
{
guid
:
that
.
guid
,
dagreD3
:
dagreD3
,
imageObject
:
imageObject
,
$defs
:
that
.
svg
.
select
(
'defs'
)
});
};
};
// Set up an SVG group so that we can translate the final graph.
// Set up an SVG group so that we can translate the final graph.
if
(
this
.
$
(
"svg"
).
find
(
'.output'
).
length
)
{
if
(
this
.
$
(
"svg"
).
find
(
'.output'
).
length
)
{
...
@@ -643,6 +558,8 @@ define(['require',
...
@@ -643,6 +558,8 @@ define(['require',
.
attr
(
"viewBox"
,
"0 0 "
+
width
+
" "
+
height
)
.
attr
(
"viewBox"
,
"0 0 "
+
width
+
" "
+
height
)
.
attr
(
"enable-background"
,
"new 0 0 "
+
width
+
" "
+
height
),
.
attr
(
"enable-background"
,
"new 0 0 "
+
width
+
" "
+
height
),
svgGroup
=
svg
.
append
(
"g"
);
svgGroup
=
svg
.
append
(
"g"
);
// Append defs
svg
.
append
(
"defs"
);
var
zoom
=
this
.
zoom
=
d3
.
behavior
.
zoom
()
var
zoom
=
this
.
zoom
=
d3
.
behavior
.
zoom
()
.
center
([
width
/
2
,
height
/
2
])
.
center
([
width
/
2
,
height
/
2
])
.
scaleExtent
([
0.01
,
50
])
.
scaleExtent
([
0.01
,
50
])
...
@@ -702,8 +619,29 @@ define(['require',
...
@@ -702,8 +619,29 @@ define(['require',
// .on("wheel.zoom", null);
// .on("wheel.zoom", null);
//change text postion
//change text postion
svgGroup
.
selectAll
(
"g.nodes g.label"
)
svgGroup
.
selectAll
(
"g.nodes g.label"
)
.
attr
(
"transform"
,
"translate(2,-35)"
);
.
attr
(
"transform"
,
"translate(2,-35)"
)
var
waitForDoubleClick
=
null
;
.
on
(
'mouseenter'
,
function
(
d
)
{
d3
.
select
(
this
).
classed
(
"highlight"
,
true
);
})
.
on
(
'mouseleave'
,
function
(
d
)
{
d3
.
select
(
this
).
classed
(
"highlight"
,
false
);
})
.
on
(
'click'
,
function
(
d
)
{
d3
.
event
.
preventDefault
();
tooltip
.
hide
(
d
);
if
(
that
.
guid
==
d
)
{
Utils
.
notifyInfo
({
html
:
true
,
content
:
"You are already on "
+
"<b>"
+
that
.
entityName
+
"</b> detail page."
});
}
else
{
Utils
.
setUrl
({
url
:
'#!/detailPage/'
+
d
+
'?tabActive=lineage'
,
mergeBrowserUrl
:
false
,
trigger
:
true
});
}
});
svgGroup
.
selectAll
(
"g.nodes g.node"
)
svgGroup
.
selectAll
(
"g.nodes g.node"
)
.
on
(
'mouseenter'
,
function
(
d
)
{
.
on
(
'mouseenter'
,
function
(
d
)
{
that
.
activeNode
=
true
;
that
.
activeNode
=
true
;
...
@@ -773,33 +711,10 @@ define(['require',
...
@@ -773,33 +711,10 @@ define(['require',
var
el
=
this
;
var
el
=
this
;
if
(
d3
.
event
.
defaultPrevented
)
return
;
// ignore drag
if
(
d3
.
event
.
defaultPrevented
)
return
;
// ignore drag
d3
.
event
.
preventDefault
();
d3
.
event
.
preventDefault
();
if
(
waitForDoubleClick
!=
null
)
{
clearTimeout
(
waitForDoubleClick
)
waitForDoubleClick
=
null
;
tooltip
.
hide
(
d
);
if
(
that
.
guid
==
d
)
{
Utils
.
notifyInfo
({
html
:
true
,
content
:
"You are already on "
+
"<b>"
+
that
.
entityName
+
"</b> detail page."
});
}
else
{
Utils
.
setUrl
({
url
:
'#!/detailPage/'
+
d
+
'?tabActive=lineage'
,
mergeBrowserUrl
:
false
,
trigger
:
true
});
}
}
else
{
var
currentEvent
=
d3
.
event
waitForDoubleClick
=
setTimeout
(
function
()
{
tooltip
.
hide
(
d
);
tooltip
.
hide
(
d
);
that
.
onClickNodeToggler
({
obj
:
d
});
that
.
onClickNodeToggler
({
obj
:
d
});
$
(
el
).
find
(
'circle'
).
addClass
(
'node-detail-highlight'
);
$
(
el
).
find
(
'circle'
).
addClass
(
'node-detail-highlight'
);
that
.
updateRelationshipDetails
({
guid
:
d
});
that
.
updateRelationshipDetails
({
guid
:
d
});
waitForDoubleClick
=
null
;
},
170
)
}
});
});
svgGroup
.
selectAll
(
"g.edgePath path.path"
).
on
(
'click'
,
function
(
d
)
{
svgGroup
.
selectAll
(
"g.edgePath path.path"
).
on
(
'click'
,
function
(
d
)
{
...
@@ -853,27 +768,32 @@ define(['require',
...
@@ -853,27 +768,32 @@ define(['require',
}).
init
();
}).
init
();
},
},
renderLineageTypeSearch
:
function
()
{
renderLineageTypeSearch
:
function
()
{
var
that
=
this
,
var
that
=
this
;
lineageData
=
$
.
extend
(
true
,
{},
this
.
lineageData
),
return
new
Promise
(
function
(
resolve
,
reject
)
{
data
=
[],
try
{
var
data
=
[],
typeStr
=
'<option></option>'
;
typeStr
=
'<option></option>'
;
if
(
!
_
.
isEmpty
(
lineageData
))
{
if
(
!
_
.
isEmpty
(
that
.
lineageData
))
{
_
.
each
(
lineageData
.
guidEntityMap
,
function
(
obj
,
index
)
{
_
.
each
(
that
.
lineageData
.
guidEntityMap
,
function
(
obj
,
index
)
{
var
nodeData
=
that
.
fromToNodeData
[
obj
.
guid
];
var
nodeData
=
that
.
g
.
_nodes
[
obj
.
guid
];
if
(
that
.
filterObj
.
isProcessHideCheck
&&
nodeData
&&
nodeData
.
isProcess
)
{
if
((
that
.
filterObj
.
isProcessHideCheck
||
that
.
filterObj
.
isDeletedEntityHideCheck
)
&&
nodeData
&&
(
nodeData
.
isProcess
||
nodeData
.
isDeleted
)
)
{
return
;
return
;
}
else
if
(
that
.
filterObj
.
isDeletedEntityHideCheck
&&
nodeData
&&
nodeData
.
isDeleted
)
{
return
}
}
typeStr
+=
'<option value="'
+
obj
.
guid
+
'">'
+
obj
.
displayText
+
'</option>'
;
typeStr
+=
'<option value="'
+
obj
.
guid
+
'">'
+
obj
.
displayText
+
'</option>'
;
});
});
}
}
this
.
ui
.
lineageTypeSearch
.
html
(
typeStr
);
that
.
ui
.
lineageTypeSearch
.
html
(
typeStr
);
this
.
initilizelineageTypeSearch
();
that
.
initilizelineageTypeSearch
();
resolve
();
}
catch
(
e
)
{
console
.
log
(
e
);
reject
(
e
);
}
})
},
},
initilizelineageTypeSearch
:
function
()
{
initilizelineageTypeSearch
:
function
()
{
var
that
=
this
;
var
that
=
this
;
th
at
.
ui
.
lineageTypeSearch
.
select2
({
th
is
.
ui
.
lineageTypeSearch
.
select2
({
closeOnSelect
:
true
,
closeOnSelect
:
true
,
placeholder
:
'Select Node'
placeholder
:
'Select Node'
}).
on
(
'change.select2'
,
function
(
e
)
{
}).
on
(
'change.select2'
,
function
(
e
)
{
...
@@ -915,19 +835,18 @@ define(['require',
...
@@ -915,19 +835,18 @@ define(['require',
return
false
;
return
false
;
}
}
});
});
});
});
if
(
th
at
.
searchNodeObj
.
selectedNode
)
{
if
(
th
is
.
searchNodeObj
.
selectedNode
)
{
th
at
.
ui
.
lineageTypeSearch
.
val
(
that
.
searchNodeObj
.
selectedNode
);
th
is
.
ui
.
lineageTypeSearch
.
val
(
this
.
searchNodeObj
.
selectedNode
);
th
at
.
ui
.
lineageTypeSearch
.
trigger
(
"change.select2"
);
th
is
.
ui
.
lineageTypeSearch
.
trigger
(
"change.select2"
);
}
}
},
},
updateRelationshipDetails
:
function
(
options
)
{
updateRelationshipDetails
:
function
(
options
)
{
var
that
=
this
,
var
that
=
this
,
guid
=
options
.
guid
,
guid
=
options
.
guid
,
initialData
=
that
.
g
uidEntityMap
[
guid
],
initialData
=
that
.
g
.
_nodes
[
guid
],
typeName
=
initialData
.
typeName
||
guid
,
typeName
=
initialData
.
typeName
||
guid
,
attributeDefs
=
that
.
g
.
_nodes
[
guid
]
&&
that
.
g
.
_nodes
[
guid
].
entityDef
?
that
.
g
.
_nodes
[
guid
]
.
entityDef
.
attributeDefs
:
null
;
attributeDefs
=
initialData
&&
initialData
.
entityDef
?
initialData
.
entityDef
.
attributeDefs
:
null
;
this
.
$
(
"[data-id='typeName']"
).
text
(
typeName
);
this
.
$
(
"[data-id='typeName']"
).
text
(
typeName
);
this
.
entityModel
=
new
VEntity
({});
this
.
entityModel
=
new
VEntity
({});
var
config
=
{
var
config
=
{
...
@@ -959,109 +878,28 @@ define(['require',
...
@@ -959,109 +878,28 @@ define(['require',
}));
}));
},
},
onClickSaveSvg
:
function
(
e
,
a
)
{
onClickSaveSvg
:
function
(
e
,
a
)
{
var
that
=
this
;
var
that
=
this
,
var
loaderTargetDiv
=
$
(
e
.
currentTarget
).
find
(
'>i'
);
loaderTargetDiv
=
$
(
e
.
currentTarget
).
find
(
'>i'
);
if
(
loaderTargetDiv
.
hasClass
(
'fa-refresh'
))
{
if
(
loaderTargetDiv
.
hasClass
(
'fa-refresh'
))
{
Utils
.
notifyWarn
({
Utils
.
notifyWarn
({
content
:
"Please wait while the lineage gets downloaded"
content
:
"Please wait while the lineage gets downloaded"
});
});
return
false
;
// return if the lineage is not loaded.
return
false
;
// return if the lineage is not loaded.
}
}
this
.
toggleLoader
(
loaderTargetDiv
);
that
.
toggleLoader
(
loaderTargetDiv
);
Utils
.
notifyInfo
({
Utils
.
notifyInfo
({
content
:
"Lineage will be downloaded in a moment."
content
:
"Lineage will be downloaded in a moment."
});
});
setTimeout
(
function
()
{
var
entityAttributes
=
that
.
entity
&&
that
.
entity
.
attributes
;
var
svg
=
that
.
$
(
'svg'
)[
0
],
LineageUtils
.
SaveSvg
(
e
,
{
svgClone
=
svg
.
cloneNode
(
true
),
svg
:
that
.
$
(
'svg'
)[
0
],
scaleFactor
=
1
,
svgWidth
:
that
.
$
(
'svg'
).
width
(),
svgWidth
=
that
.
$
(
'svg'
).
width
(),
svgHeight
:
that
.
$
(
'svg'
).
height
(),
svgHeight
=
that
.
$
(
'svg'
).
height
();
toggleLoader
:
function
()
{
if
(
platform
.
name
===
"Firefox"
)
{
svgClone
.
setAttribute
(
'width'
,
svgWidth
);
svgClone
.
setAttribute
(
'height'
,
svgHeight
);
}
$
(
'.hidden-svg'
).
html
(
svgClone
);
$
(
svgClone
).
find
(
'>g'
).
attr
(
"transform"
,
"scale("
+
scaleFactor
+
")"
);
$
(
svgClone
).
find
(
"foreignObject"
).
remove
();
var
canvasOffset
=
{
x
:
150
,
y
:
150
},
setWidth
=
(
svgClone
.
getBBox
().
width
+
(
canvasOffset
.
x
)),
setHeight
=
(
svgClone
.
getBBox
().
height
+
(
canvasOffset
.
y
)),
xAxis
=
svgClone
.
getBBox
().
x
,
yAxis
=
svgClone
.
getBBox
().
y
;
svgClone
.
attributes
.
viewBox
.
value
=
xAxis
+
","
+
yAxis
+
","
+
setWidth
+
","
+
setHeight
;
var
createCanvas
=
document
.
createElement
(
'canvas'
);
createCanvas
.
id
=
"canvas"
;
createCanvas
.
style
.
display
=
'none'
;
var
body
=
$
(
'body'
).
append
(
createCanvas
),
canvas
=
$
(
'canvas'
)[
0
];
canvas
.
width
=
(
svgClone
.
getBBox
().
width
*
scaleFactor
)
+
canvasOffset
.
x
;
canvas
.
height
=
(
svgClone
.
getBBox
().
height
*
scaleFactor
)
+
canvasOffset
.
y
;
var
ctx
=
canvas
.
getContext
(
'2d'
),
data
=
(
new
XMLSerializer
()).
serializeToString
(
svgClone
),
DOMURL
=
window
.
URL
||
window
.
webkitURL
||
window
;
ctx
.
fillStyle
=
"#FFFFFF"
;
ctx
.
fillRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
ctx
.
strokeRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
ctx
.
restore
();
var
img
=
new
Image
(
canvas
.
width
,
canvas
.
height
);
var
svgBlob
=
new
Blob
([
data
],
{
type
:
'image/svg+xml;base64'
});
if
(
platform
.
name
===
"Safari"
)
{
svgBlob
=
new
Blob
([
data
],
{
type
:
'image/svg+xml'
});
}
var
url
=
DOMURL
.
createObjectURL
(
svgBlob
);
img
.
onload
=
function
()
{
try
{
var
a
=
document
.
createElement
(
"a"
),
entityAttributes
=
that
.
entity
&&
that
.
entity
.
attributes
;
a
.
download
=
((
entityAttributes
&&
(
entityAttributes
.
qualifiedName
||
entityAttributes
.
name
)
||
"lineage_export"
)
+
".png"
);
document
.
body
.
appendChild
(
a
);
ctx
.
drawImage
(
img
,
50
,
50
,
canvas
.
width
,
canvas
.
height
);
canvas
.
toBlob
(
function
(
blob
)
{
if
(
!
blob
)
{
Utils
.
notifyError
({
content
:
"There was an error in downloading Lineage!"
});
that
.
toggleLoader
(
loaderTargetDiv
);
return
;
}
a
.
href
=
DOMURL
.
createObjectURL
(
blob
);
if
(
blob
.
size
>
10000000
)
{
Utils
.
notifyWarn
({
content
:
"The Image size is huge, please open the image in a browser!"
});
}
a
.
click
();
that
.
toggleLoader
(
loaderTargetDiv
);
that
.
toggleLoader
(
loaderTargetDiv
);
if
(
platform
.
name
===
'Safari'
)
{
},
LineageUtils
.
refreshGraphForSafari
({
downloadFileName
:
((
entityAttributes
&&
(
entityAttributes
.
qualifiedName
||
entityAttributes
.
name
)
||
"lineage_export"
)
+
".png"
)
edgeEl
:
that
.
$
(
'svg g.node'
)
})
});
}
},
'image/png'
);
$
(
'.hidden-svg'
).
html
(
''
);
createCanvas
.
remove
();
}
catch
(
err
)
{
Utils
.
notifyError
({
content
:
"There was an error in downloading Lineage!"
});
that
.
toggleLoader
(
loaderTargetDiv
);
}
};
img
.
src
=
url
;
},
0
)
},
},
toggleLoader
:
function
(
element
)
{
toggleLoader
:
function
(
element
)
{
if
((
element
).
hasClass
(
'fa-camera'
))
{
if
((
element
).
hasClass
(
'fa-camera'
))
{
...
...
dashboardv2/public/js/views/graph/LineageUtils.js
View file @
ff1a9dc2
...
@@ -16,10 +16,10 @@
...
@@ -16,10 +16,10 @@
* limitations under the License.
* limitations under the License.
*/
*/
define
([
'require'
],
function
(
require
)
{
define
([
'require'
,
'utils/Utils'
],
function
(
require
,
Utils
)
{
'use strict'
;
'use strict'
;
var
Line
ga
eUtils
=
{};
var
Line
ag
eUtils
=
{};
Line
ga
eUtils
.
DragNode
=
function
(
options
)
{
Line
ag
eUtils
.
DragNode
=
function
(
options
)
{
var
that
=
this
,
var
that
=
this
,
g
=
options
.
g
,
g
=
options
.
g
,
svg
=
options
.
svg
,
svg
=
options
.
svg
,
...
@@ -99,7 +99,7 @@ define(['require'], function(require) {
...
@@ -99,7 +99,7 @@ define(['require'], function(require) {
}
}
}
}
});
});
Line
ga
eUtils
.
refreshGraphForIE
({
"edgeEl"
:
edgePathEl
})
Line
ag
eUtils
.
refreshGraphForIE
({
"edgeEl"
:
edgePathEl
})
},
},
translateEdge
:
function
(
e
,
dx
,
dy
)
{
translateEdge
:
function
(
e
,
dx
,
dy
)
{
e
.
points
.
forEach
(
function
(
p
)
{
e
.
points
.
forEach
(
function
(
p
)
{
...
@@ -158,7 +158,7 @@ define(['require'], function(require) {
...
@@ -158,7 +158,7 @@ define(['require'], function(require) {
},
},
}
}
}
}
Line
ga
eUtils
.
refreshGraphForSafari
=
function
(
options
)
{
Line
ag
eUtils
.
refreshGraphForSafari
=
function
(
options
)
{
var
edgePathEl
=
options
.
edgeEl
,
var
edgePathEl
=
options
.
edgeEl
,
IEGraphRenderDone
=
0
;
IEGraphRenderDone
=
0
;
edgePathEl
.
each
(
function
(
argument
)
{
edgePathEl
.
each
(
function
(
argument
)
{
...
@@ -169,7 +169,7 @@ define(['require'], function(require) {
...
@@ -169,7 +169,7 @@ define(['require'], function(require) {
},
500
);
},
500
);
});
});
}
}
Line
ga
eUtils
.
refreshGraphForIE
=
function
(
options
)
{
Line
ag
eUtils
.
refreshGraphForIE
=
function
(
options
)
{
var
edgePathEl
=
options
.
edgeEl
,
var
edgePathEl
=
options
.
edgeEl
,
IEGraphRenderDone
=
0
;
IEGraphRenderDone
=
0
;
edgePathEl
.
each
(
function
(
argument
)
{
edgePathEl
.
each
(
function
(
argument
)
{
...
@@ -187,7 +187,7 @@ define(['require'], function(require) {
...
@@ -187,7 +187,7 @@ define(['require'], function(require) {
},
1000
);
},
1000
);
});
});
}
}
Line
ga
eUtils
.
centerNode
=
function
(
options
)
{
Line
ag
eUtils
.
centerNode
=
function
(
options
)
{
var
nodeID
=
options
.
guid
,
var
nodeID
=
options
.
guid
,
svg
=
options
.
svg
,
svg
=
options
.
svg
,
g
=
options
.
g
,
g
=
options
.
g
,
...
@@ -232,12 +232,12 @@ define(['require'], function(require) {
...
@@ -232,12 +232,12 @@ define(['require'], function(require) {
zoom
.
scale
(
scale
);
zoom
.
scale
(
scale
);
afterCenterZoomed
({
newScale
:
scale
,
newTranslate
:
[
xa
,
ya
]
});
afterCenterZoomed
({
newScale
:
scale
,
newTranslate
:
[
xa
,
ya
]
});
if
(
platform
.
name
===
"IE"
)
{
if
(
platform
.
name
===
"IE"
)
{
Line
ga
eUtils
.
refreshGraphForIE
({
"edgeEl"
:
edgePathEl
})
Line
ag
eUtils
.
refreshGraphForIE
({
"edgeEl"
:
edgePathEl
})
}
}
}
}
}
}
}
}
Line
ga
eUtils
.
onHoverFade
=
function
(
options
)
{
Line
ag
eUtils
.
onHoverFade
=
function
(
options
)
{
var
opacity
=
options
.
opacity
,
var
opacity
=
options
.
opacity
,
d
=
options
.
selectedNode
,
d
=
options
.
selectedNode
,
nodesToHighlight
=
options
.
highlight
,
nodesToHighlight
=
options
.
highlight
,
...
@@ -271,7 +271,7 @@ define(['require'], function(require) {
...
@@ -271,7 +271,7 @@ define(['require'], function(require) {
}
}
}
}
Line
ga
eUtils
.
base64Encode
=
function
(
options
)
{
Line
ag
eUtils
.
base64Encode
=
function
(
options
)
{
var
str
=
options
.
data
,
var
str
=
options
.
data
,
CHARS
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
,
CHARS
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
,
out
=
""
,
out
=
""
,
...
@@ -302,5 +302,235 @@ define(['require'], function(require) {
...
@@ -302,5 +302,235 @@ define(['require'], function(require) {
}
}
return
out
;
return
out
;
}
}
return
LinegaeUtils
;
LineageUtils
.
imgShapeRender
=
function
(
parent
,
bbox
,
node
,
viewOptions
)
{
var
LineageUtilsRef
=
this
,
imageIconPath
=
Utils
.
getEntityIconPath
({
entityData
:
node
}),
imgName
=
imageIconPath
.
split
(
"/"
).
pop
(),
viewGuid
=
viewOptions
.
guid
,
dagreD3
=
viewOptions
.
dagreD3
,
imageObject
=
viewOptions
.
imageObject
,
$defs
=
viewOptions
.
$defs
;
if
(
node
.
isDeleted
)
{
imgName
=
"deleted_"
+
imgName
;
}
if
(
node
.
id
==
viewGuid
)
{
var
currentNode
=
true
}
var
shapeSvg
=
parent
.
append
(
'circle'
)
.
attr
(
'fill'
,
'url(#img_'
+
imgName
+
')'
)
.
attr
(
'r'
,
'24px'
)
.
attr
(
'data-stroke'
,
node
.
id
)
.
attr
(
'stroke-width'
,
"2px"
)
.
attr
(
"class"
,
"nodeImage "
+
(
currentNode
?
"currentNode"
:
(
node
.
isProcess
?
"process"
:
"node"
)));
if
(
currentNode
)
{
shapeSvg
.
attr
(
"stroke"
,
"#fb4200"
)
}
if
(
node
.
isIncomplete
===
true
)
{
parent
.
attr
(
"class"
,
"node isIncomplete show"
);
parent
.
insert
(
"foreignObject"
)
.
attr
(
"x"
,
"-25"
)
.
attr
(
"y"
,
"-25"
)
.
attr
(
"width"
,
"50"
)
.
attr
(
"height"
,
"50"
)
.
append
(
"xhtml:div"
)
.
insert
(
"i"
)
.
attr
(
"class"
,
"fa fa-hourglass-half"
);
}
if
(
$defs
.
select
(
'pattern[id="img_'
+
imgName
+
'"]'
).
empty
())
{
var
$pattern
=
$defs
.
append
(
"pattern"
)
.
attr
(
"x"
,
"0%"
)
.
attr
(
"y"
,
"0%"
)
.
attr
(
"patternUnits"
,
"objectBoundingBox"
)
.
attr
(
"id"
,
"img_"
+
imgName
)
.
attr
(
"width"
,
"100%"
)
.
attr
(
"height"
,
"100%"
)
.
append
(
'image'
)
.
attr
(
"href"
,
function
(
d
)
{
var
that
=
this
;
if
(
node
)
{
var
getImageData
=
function
(
options
)
{
var
imagePath
=
options
.
imagePath
,
ajaxOptions
=
{
"url"
:
imagePath
,
"method"
:
"get"
,
"cache"
:
true
}
if
(
platform
.
name
!==
"IE"
)
{
ajaxOptions
[
"mimeType"
]
=
"text/plain; charset=x-user-defined"
;
}
shapeSvg
.
attr
(
"data-iconpath"
,
imagePath
);
$
.
ajax
(
ajaxOptions
)
.
always
(
function
(
data
,
status
,
xhr
)
{
if
(
data
.
status
==
404
)
{
getImageData
({
"imagePath"
:
Utils
.
getEntityIconPath
({
entityData
:
node
,
errorUrl
:
imagePath
})
});
}
else
if
(
data
)
{
if
(
platform
.
name
!==
"IE"
)
{
imageObject
[
imageIconPath
]
=
'data:image/png;base64,'
+
LineageUtilsRef
.
base64Encode
({
"data"
:
data
});
}
else
{
imageObject
[
imageIconPath
]
=
imagePath
;
}
d3
.
select
(
that
).
attr
(
"xlink:href"
,
imageObject
[
imageIconPath
]);
if
(
imageIconPath
!==
shapeSvg
.
attr
(
"data-iconpath"
))
{
shapeSvg
.
attr
(
"data-iconpathorigin"
,
imageIconPath
);
}
}
});
}
getImageData
({
"imagePath"
:
imageIconPath
});
}
})
.
attr
(
"x"
,
"4"
)
.
attr
(
"y"
,
currentNode
?
"3"
:
"4"
).
attr
(
"width"
,
"40"
)
.
attr
(
"height"
,
"40"
);
}
node
.
intersect
=
function
(
point
)
{
return
dagreD3
.
intersect
.
circle
(
node
,
currentNode
?
24
:
21
,
point
);
};
return
shapeSvg
;
}
LineageUtils
.
arrowPointRender
=
function
(
parent
,
id
,
edge
,
type
,
viewOptions
)
{
var
node
=
parent
.
node
(),
parentNode
=
node
?
node
.
parentNode
:
parent
,
dagreD3
=
viewOptions
.
dagreD3
;
d3
.
select
(
parentNode
).
select
(
'path.path'
).
attr
(
'marker-end'
,
"url(#"
+
id
+
")"
);
var
marker
=
parent
.
append
(
"marker"
)
.
attr
(
"id"
,
id
)
.
attr
(
"viewBox"
,
"0 0 10 10"
)
.
attr
(
"refX"
,
8
)
.
attr
(
"refY"
,
5
)
.
attr
(
"markerUnits"
,
"strokeWidth"
)
.
attr
(
"markerWidth"
,
4
)
.
attr
(
"markerHeight"
,
4
)
.
attr
(
"orient"
,
"auto"
);
var
path
=
marker
.
append
(
"path"
)
.
attr
(
"d"
,
"M 0 0 L 10 5 L 0 10 z"
)
.
style
(
"fill"
,
edge
.
styleObj
.
stroke
);
dagreD3
.
util
.
applyStyle
(
path
,
edge
[
type
+
"Style"
]);
}
LineageUtils
.
BezierCurve
=
function
(
context
)
{
return
{
lineStart
:
function
()
{
this
.
data
=
[];
},
point
:
function
(
x
,
y
)
{
this
.
data
.
push
([
x
,
y
]);
},
lineEnd
:
function
()
{
var
x0
=
this
.
data
[
0
][
0
],
y0
=
this
.
data
[
0
][
1
],
cp1x
=
this
.
data
[
1
][
0
],
cp1y
=
this
.
data
[
1
][
1
],
cp2Obj
=
this
.
data
[
this
.
data
.
length
-
2
],
cp2x
=
cp2Obj
[
0
],
cp2y
=
cp2Obj
[
1
],
axisObj
=
this
.
data
[
this
.
data
.
length
-
1
],
x1
=
axisObj
[
0
],
y1
=
axisObj
[
1
];
context
.
moveTo
(
x0
,
y0
);
context
.
bezierCurveTo
(
cp1x
,
cp1y
,
cp2x
,
cp2y
,
x1
,
y1
);
}
}
}
LineageUtils
.
SaveSvg
=
function
(
e
,
viewOptions
)
{
var
that
=
this
,
svg
=
viewOptions
.
svg
,
svgWidth
=
viewOptions
.
svgWidth
,
svgHeight
=
viewOptions
.
svgHeight
,
downloadFileName
=
viewOptions
.
downloadFileName
,
toggleLoader
=
viewOptions
.
toggleLoader
,
svgClone
=
svg
.
cloneNode
(
true
),
scaleFactor
=
1
;
setTimeout
(
function
()
{
if
(
platform
.
name
===
"Firefox"
)
{
svgClone
.
setAttribute
(
'width'
,
svgWidth
);
svgClone
.
setAttribute
(
'height'
,
svgHeight
);
}
$
(
'.hidden-svg'
).
html
(
svgClone
);
$
(
svgClone
).
find
(
'>g'
).
attr
(
"transform"
,
"scale("
+
scaleFactor
+
")"
);
$
(
svgClone
).
find
(
"foreignObject"
).
remove
();
var
canvasOffset
=
{
x
:
150
,
y
:
150
},
setWidth
=
(
svgClone
.
getBBox
().
width
+
(
canvasOffset
.
x
)),
setHeight
=
(
svgClone
.
getBBox
().
height
+
(
canvasOffset
.
y
)),
xAxis
=
svgClone
.
getBBox
().
x
,
yAxis
=
svgClone
.
getBBox
().
y
;
svgClone
.
attributes
.
viewBox
.
value
=
xAxis
+
","
+
yAxis
+
","
+
setWidth
+
","
+
setHeight
;
var
createCanvas
=
document
.
createElement
(
'canvas'
);
createCanvas
.
id
=
"canvas"
;
createCanvas
.
style
.
display
=
'none'
;
var
body
=
$
(
'body'
).
append
(
createCanvas
),
canvas
=
$
(
'canvas'
)[
0
];
canvas
.
width
=
(
svgClone
.
getBBox
().
width
*
scaleFactor
)
+
canvasOffset
.
x
;
canvas
.
height
=
(
svgClone
.
getBBox
().
height
*
scaleFactor
)
+
canvasOffset
.
y
;
var
ctx
=
canvas
.
getContext
(
'2d'
),
data
=
(
new
XMLSerializer
()).
serializeToString
(
svgClone
),
DOMURL
=
window
.
URL
||
window
.
webkitURL
||
window
;
ctx
.
fillStyle
=
"#FFFFFF"
;
ctx
.
fillRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
ctx
.
strokeRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
ctx
.
restore
();
var
img
=
new
Image
(
canvas
.
width
,
canvas
.
height
);
var
svgBlob
=
new
Blob
([
data
],
{
type
:
'image/svg+xml;base64'
});
if
(
platform
.
name
===
"Safari"
)
{
svgBlob
=
new
Blob
([
data
],
{
type
:
'image/svg+xml'
});
}
var
url
=
DOMURL
.
createObjectURL
(
svgBlob
);
img
.
onload
=
function
()
{
try
{
var
a
=
document
.
createElement
(
"a"
);
a
.
download
=
downloadFileName
;
document
.
body
.
appendChild
(
a
);
ctx
.
drawImage
(
img
,
50
,
50
,
canvas
.
width
,
canvas
.
height
);
canvas
.
toBlob
(
function
(
blob
)
{
if
(
!
blob
)
{
Utils
.
notifyError
({
content
:
"There was an error in downloading Lineage!"
});
toggleLoader
();
return
;
}
a
.
href
=
DOMURL
.
createObjectURL
(
blob
);
if
(
blob
.
size
>
10000000
)
{
Utils
.
notifyWarn
({
content
:
"The Image size is huge, please open the image in a browser!"
});
}
a
.
click
();
toggleLoader
();
if
(
platform
.
name
===
'Safari'
)
{
that
.
refreshGraphForSafari
({
edgeEl
:
that
.
$
(
'svg g.node'
)
});
}
},
'image/png'
);
$
(
'.hidden-svg'
).
html
(
''
);
createCanvas
.
remove
();
}
catch
(
err
)
{
Utils
.
notifyError
({
content
:
"There was an error in downloading Lineage!"
});
toggleLoader
();
}
};
img
.
src
=
url
;
},
0
);
}
return
LineageUtils
;
});
});
\ No newline at end of file
dashboardv3/package-lock.json
View file @
ff1a9dc2
...
@@ -515,7 +515,6 @@
...
@@ -515,7 +515,6 @@
"version"
:
"2.9.0"
,
"version"
:
"2.9.0"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.9.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.9.0.tgz"
,
"integrity"
:
"sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q="
,
"integrity"
:
"sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q="
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"graceful-readlink"
:
">= 1.0.0"
"graceful-readlink"
:
">= 1.0.0"
}
}
...
@@ -625,6 +624,202 @@
...
@@ -625,6 +624,202 @@
"resolved"
:
"https://registry.npmjs.org/d3/-/d3-3.5.17.tgz"
,
"resolved"
:
"https://registry.npmjs.org/d3/-/d3-3.5.17.tgz"
,
"integrity"
:
"sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
"integrity"
:
"sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
},
},
"d3-array"
:
{
"version"
:
"1.2.4"
,
"resolved"
:
"https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz"
,
"integrity"
:
"sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
},
"d3-axis"
:
{
"version"
:
"1.0.12"
,
"resolved"
:
"https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz"
,
"integrity"
:
"sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ=="
},
"d3-brush"
:
{
"version"
:
"1.1.5"
,
"resolved"
:
"https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.5.tgz"
,
"integrity"
:
"sha512-rEaJ5gHlgLxXugWjIkolTA0OyMvw8UWU1imYXy1v642XyyswmI1ybKOv05Ft+ewq+TFmdliD3VuK0pRp1VT/5A=="
,
"requires"
:
{
"d3-dispatch"
:
"1"
,
"d3-drag"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-selection"
:
"1"
,
"d3-transition"
:
"1"
}
},
"d3-chord"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz"
,
"integrity"
:
"sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA=="
,
"requires"
:
{
"d3-array"
:
"1"
,
"d3-path"
:
"1"
}
},
"d3-collection"
:
{
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz"
,
"integrity"
:
"sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
},
"d3-color"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-color/-/d3-color-1.4.0.tgz"
,
"integrity"
:
"sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg=="
},
"d3-contour"
:
{
"version"
:
"1.3.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz"
,
"integrity"
:
"sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg=="
,
"requires"
:
{
"d3-array"
:
"^1.1.1"
}
},
"d3-dispatch"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz"
,
"integrity"
:
"sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA=="
},
"d3-drag"
:
{
"version"
:
"1.2.5"
,
"resolved"
:
"https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz"
,
"integrity"
:
"sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w=="
,
"requires"
:
{
"d3-dispatch"
:
"1"
,
"d3-selection"
:
"1"
}
},
"d3-dsv"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz"
,
"integrity"
:
"sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g=="
,
"requires"
:
{
"commander"
:
"2"
,
"iconv-lite"
:
"0.4"
,
"rw"
:
"1"
}
},
"d3-ease"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.6.tgz"
,
"integrity"
:
"sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ=="
},
"d3-fetch"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.1.2.tgz"
,
"integrity"
:
"sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA=="
,
"requires"
:
{
"d3-dsv"
:
"1"
}
},
"d3-force"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz"
,
"integrity"
:
"sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg=="
,
"requires"
:
{
"d3-collection"
:
"1"
,
"d3-dispatch"
:
"1"
,
"d3-quadtree"
:
"1"
,
"d3-timer"
:
"1"
}
},
"d3-format"
:
{
"version"
:
"1.4.4"
,
"resolved"
:
"https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz"
,
"integrity"
:
"sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw=="
},
"d3-geo"
:
{
"version"
:
"1.11.9"
,
"resolved"
:
"https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.9.tgz"
,
"integrity"
:
"sha512-9edcH6J3s/Aa3KJITWqFJbyB/8q3mMlA9Fi7z6yy+FAYMnRaxmC7jBhUnsINxVWD14GmqX3DK8uk7nV6/Ekt4A=="
,
"requires"
:
{
"d3-array"
:
"1"
}
},
"d3-hierarchy"
:
{
"version"
:
"1.1.9"
,
"resolved"
:
"https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz"
,
"integrity"
:
"sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ=="
},
"d3-interpolate"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz"
,
"integrity"
:
"sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA=="
,
"requires"
:
{
"d3-color"
:
"1"
}
},
"d3-path"
:
{
"version"
:
"1.0.9"
,
"resolved"
:
"https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz"
,
"integrity"
:
"sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
},
"d3-polygon"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz"
,
"integrity"
:
"sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ=="
},
"d3-quadtree"
:
{
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz"
,
"integrity"
:
"sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA=="
},
"d3-random"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz"
,
"integrity"
:
"sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ=="
},
"d3-scale"
:
{
"version"
:
"2.2.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz"
,
"integrity"
:
"sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw=="
,
"requires"
:
{
"d3-array"
:
"^1.2.0"
,
"d3-collection"
:
"1"
,
"d3-format"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-time"
:
"1"
,
"d3-time-format"
:
"2"
}
},
"d3-scale-chromatic"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz"
,
"integrity"
:
"sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg=="
,
"requires"
:
{
"d3-color"
:
"1"
,
"d3-interpolate"
:
"1"
}
},
"d3-selection"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.1.tgz"
,
"integrity"
:
"sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA=="
},
"d3-shape"
:
{
"version"
:
"1.3.7"
,
"resolved"
:
"https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz"
,
"integrity"
:
"sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="
,
"requires"
:
{
"d3-path"
:
"1"
}
},
"d3-time"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz"
,
"integrity"
:
"sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
},
"d3-time-format"
:
{
"version"
:
"2.2.3"
,
"resolved"
:
"https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz"
,
"integrity"
:
"sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA=="
,
"requires"
:
{
"d3-time"
:
"1"
}
},
"d3-timer"
:
{
"version"
:
"1.0.10"
,
"resolved"
:
"https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz"
,
"integrity"
:
"sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw=="
},
"d3-tip"
:
{
"d3-tip"
:
{
"version"
:
"0.6.8"
,
"version"
:
"0.6.8"
,
"resolved"
:
"https://registry.npmjs.org/d3-tip/-/d3-tip-0.6.8.tgz"
,
"resolved"
:
"https://registry.npmjs.org/d3-tip/-/d3-tip-0.6.8.tgz"
,
...
@@ -633,24 +828,94 @@
...
@@ -633,24 +828,94 @@
"d3"
:
"^3.5.5"
"d3"
:
"^3.5.5"
}
}
},
},
"d3-transition"
:
{
"version"
:
"1.3.2"
,
"resolved"
:
"https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz"
,
"integrity"
:
"sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA=="
,
"requires"
:
{
"d3-color"
:
"1"
,
"d3-dispatch"
:
"1"
,
"d3-ease"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-selection"
:
"^1.1.0"
,
"d3-timer"
:
"1"
}
},
"d3-voronoi"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz"
,
"integrity"
:
"sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg=="
},
"d3-zoom"
:
{
"version"
:
"1.8.3"
,
"resolved"
:
"https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz"
,
"integrity"
:
"sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ=="
,
"requires"
:
{
"d3-dispatch"
:
"1"
,
"d3-drag"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-selection"
:
"1"
,
"d3-transition"
:
"1"
}
},
"dagre"
:
{
"dagre"
:
{
"version"
:
"0.
7.4
"
,
"version"
:
"0.
8.5
"
,
"resolved"
:
"https://registry.npmjs.org/dagre/-/dagre-0.
7.4
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/dagre/-/dagre-0.
8.5
.tgz"
,
"integrity"
:
"sha
1-3nLw50pVDOEc5jjwoTb+1xI5gCI
="
,
"integrity"
:
"sha
512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw=
="
,
"requires"
:
{
"requires"
:
{
"graphlib"
:
"^
1.0.5
"
,
"graphlib"
:
"^
2.1.8
"
,
"lodash"
:
"^
3.10.0
"
"lodash"
:
"^
4.17.15
"
}
}
},
},
"dagre-d3"
:
{
"dagre-d3"
:
{
"version"
:
"0.
4.17
"
,
"version"
:
"0.
6.4
"
,
"resolved"
:
"https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.
4.17
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.
6.4
.tgz"
,
"integrity"
:
"sha
1-lTMYDQC6n/KLBM7hJ+k1ktnGChw
="
,
"integrity"
:
"sha
512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ=
="
,
"requires"
:
{
"requires"
:
{
"d3"
:
"^3.3.8"
,
"d3"
:
"^5.14"
,
"dagre"
:
"^0.7.3"
,
"dagre"
:
"^0.8.5"
,
"graphlib"
:
"^1.0.5"
,
"graphlib"
:
"^2.1.8"
,
"lodash"
:
"^3.10.0"
"lodash"
:
"^4.17.15"
},
"dependencies"
:
{
"d3"
:
{
"version"
:
"5.15.1"
,
"resolved"
:
"https://registry.npmjs.org/d3/-/d3-5.15.1.tgz"
,
"integrity"
:
"sha512-Xu9gT6Lm0jH3wWJJSRomFwqnGGi3YAfWIfxNFl4++YVgYOjo3F8V2idAG3nJBgpZOkD0/RHPZX6F4k6tzgOvYw=="
,
"requires"
:
{
"d3-array"
:
"1"
,
"d3-axis"
:
"1"
,
"d3-brush"
:
"1"
,
"d3-chord"
:
"1"
,
"d3-collection"
:
"1"
,
"d3-color"
:
"1"
,
"d3-contour"
:
"1"
,
"d3-dispatch"
:
"1"
,
"d3-drag"
:
"1"
,
"d3-dsv"
:
"1"
,
"d3-ease"
:
"1"
,
"d3-fetch"
:
"1"
,
"d3-force"
:
"1"
,
"d3-format"
:
"1"
,
"d3-geo"
:
"1"
,
"d3-hierarchy"
:
"1"
,
"d3-interpolate"
:
"1"
,
"d3-path"
:
"1"
,
"d3-polygon"
:
"1"
,
"d3-quadtree"
:
"1"
,
"d3-random"
:
"1"
,
"d3-scale"
:
"2"
,
"d3-scale-chromatic"
:
"1"
,
"d3-selection"
:
"1"
,
"d3-shape"
:
"1"
,
"d3-time"
:
"1"
,
"d3-time-format"
:
"2"
,
"d3-timer"
:
"1"
,
"d3-transition"
:
"1"
,
"d3-voronoi"
:
"1"
,
"d3-zoom"
:
"1"
}
}
}
}
},
},
"dashdash"
:
{
"dashdash"
:
{
...
@@ -709,9 +974,9 @@
...
@@ -709,9 +974,9 @@
"dev"
:
true
"dev"
:
true
},
},
"depd"
:
{
"depd"
:
{
"version"
:
"
1.1.2
"
,
"version"
:
"
2.0.0
"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-
1.1.2
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-
2.0.0
.tgz"
,
"integrity"
:
"sha
1-m81S4UwJd2PnSbJ0xDRu0uVgtak
="
,
"integrity"
:
"sha
512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=
="
,
"dev"
:
true
"dev"
:
true
},
},
"destroy"
:
{
"destroy"
:
{
...
@@ -1070,12 +1335,6 @@
...
@@ -1070,12 +1335,6 @@
"once"
:
"^1.3.0"
,
"once"
:
"^1.3.0"
,
"path-is-absolute"
:
"^1.0.0"
"path-is-absolute"
:
"^1.0.0"
}
}
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
}
},
},
...
@@ -1088,15 +1347,14 @@
...
@@ -1088,15 +1347,14 @@
"graceful-readlink"
:
{
"graceful-readlink"
:
{
"version"
:
"1.0.1"
,
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
,
"integrity"
:
"sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
,
"integrity"
:
"sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
"dev"
:
true
},
},
"graphlib"
:
{
"graphlib"
:
{
"version"
:
"
1.0.7
"
,
"version"
:
"
2.1.8
"
,
"resolved"
:
"https://registry.npmjs.org/graphlib/-/graphlib-
1.0.7
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/graphlib/-/graphlib-
2.1.8
.tgz"
,
"integrity"
:
"sha
1-DKst8P/mq+BwsmJb+h7bbslnuLE
="
,
"integrity"
:
"sha
512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A=
="
,
"requires"
:
{
"requires"
:
{
"lodash"
:
"^
3.10.0
"
"lodash"
:
"^
4.17.15
"
}
}
},
},
"grunt"
:
{
"grunt"
:
{
...
@@ -1356,12 +1614,6 @@
...
@@ -1356,12 +1614,6 @@
"requires"
:
{
"requires"
:
{
"lodash"
:
"^4.17.14"
"lodash"
:
"^4.17.14"
}
}
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
}
},
},
...
@@ -1381,14 +1633,6 @@
...
@@ -1381,14 +1633,6 @@
"grunt-legacy-log-utils"
:
"~2.0.0"
,
"grunt-legacy-log-utils"
:
"~2.0.0"
,
"hooker"
:
"~0.2.3"
,
"hooker"
:
"~0.2.3"
,
"lodash"
:
"~4.17.5"
"lodash"
:
"~4.17.5"
},
"dependencies"
:
{
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
},
},
"grunt-legacy-log-utils"
:
{
"grunt-legacy-log-utils"
:
{
...
@@ -1399,14 +1643,6 @@
...
@@ -1399,14 +1643,6 @@
"requires"
:
{
"requires"
:
{
"chalk"
:
"~2.4.1"
,
"chalk"
:
"~2.4.1"
,
"lodash"
:
"~4.17.10"
"lodash"
:
"~4.17.10"
},
"dependencies"
:
{
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
},
},
"grunt-legacy-util"
:
{
"grunt-legacy-util"
:
{
...
@@ -1422,14 +1658,6 @@
...
@@ -1422,14 +1658,6 @@
"lodash"
:
"~4.17.10"
,
"lodash"
:
"~4.17.10"
,
"underscore.string"
:
"~3.3.4"
,
"underscore.string"
:
"~3.3.4"
,
"which"
:
"~1.3.0"
"which"
:
"~1.3.0"
},
"dependencies"
:
{
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
}
}
}
},
},
"grunt-middleware-proxy"
:
{
"grunt-middleware-proxy"
:
{
...
@@ -1549,6 +1777,12 @@
...
@@ -1549,6 +1777,12 @@
"statuses"
:
">= 1.4.0 < 2"
"statuses"
:
">= 1.4.0 < 2"
},
},
"dependencies"
:
{
"dependencies"
:
{
"depd"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
,
"integrity"
:
"sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
,
"dev"
:
true
},
"inherits"
:
{
"inherits"
:
{
"version"
:
"2.0.3"
,
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
...
@@ -1584,15 +1818,14 @@
...
@@ -1584,15 +1818,14 @@
"version"
:
"0.4.24"
,
"version"
:
"0.4.24"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"integrity"
:
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
,
"integrity"
:
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
"safer-buffer"
:
">= 2.1.2 < 3"
}
}
},
},
"in-publish"
:
{
"in-publish"
:
{
"version"
:
"2.0.
0
"
,
"version"
:
"2.0.
1
"
,
"resolved"
:
"https://registry.npmjs.org/in-publish/-/in-publish-2.0.
0
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/in-publish/-/in-publish-2.0.
1
.tgz"
,
"integrity"
:
"sha
1-4g/146KvwmkDILbcVSaCqcf631E
="
,
"integrity"
:
"sha
512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ=
="
,
"dev"
:
true
"dev"
:
true
},
},
"indent-string"
:
{
"indent-string"
:
{
...
@@ -1860,9 +2093,9 @@
...
@@ -1860,9 +2093,9 @@
}
}
},
},
"lodash"
:
{
"lodash"
:
{
"version"
:
"
3.10.1
"
,
"version"
:
"
4.17.15
"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-
3.10.1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-
4.17.15
.tgz"
,
"integrity"
:
"sha
1-W/Rejkm6QYnhfUgnid/RW9FAt7Y
="
"integrity"
:
"sha
512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=
="
},
},
"longest"
:
{
"longest"
:
{
"version"
:
"1.0.1"
,
"version"
:
"1.0.1"
,
...
@@ -1995,26 +2228,18 @@
...
@@ -1995,26 +2228,18 @@
}
}
},
},
"minimist"
:
{
"minimist"
:
{
"version"
:
"1.2.
0
"
,
"version"
:
"1.2.
5
"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-1.2.
0
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-1.2.
5
.tgz"
,
"integrity"
:
"sha
1-o1AIsg9BOD7sH7kU9M1d95omQoQ
="
,
"integrity"
:
"sha
512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=
="
,
"dev"
:
true
"dev"
:
true
},
},
"mkdirp"
:
{
"mkdirp"
:
{
"version"
:
"0.5.
1
"
,
"version"
:
"0.5.
5
"
,
"resolved"
:
"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.
1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.
5
.tgz"
,
"integrity"
:
"sha
1-MAV0OOrGz3+MR2fzhkjWaX11yQM
="
,
"integrity"
:
"sha
512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ=
="
,
"dev"
:
true
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"minimist"
:
"0.0.8"
"minimist"
:
"^1.2.5"
},
"dependencies"
:
{
"minimist"
:
{
"version"
:
"0.0.8"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
,
"integrity"
:
"sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
,
"dev"
:
true
}
}
}
},
},
"moment"
:
{
"moment"
:
{
...
@@ -2031,16 +2256,16 @@
...
@@ -2031,16 +2256,16 @@
}
}
},
},
"morgan"
:
{
"morgan"
:
{
"version"
:
"1.
9.1
"
,
"version"
:
"1.
10.0
"
,
"resolved"
:
"https://registry.npmjs.org/morgan/-/morgan-1.
9.1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/morgan/-/morgan-1.
10.0
.tgz"
,
"integrity"
:
"sha512-
HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA
=="
,
"integrity"
:
"sha512-
AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ
=="
,
"dev"
:
true
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"basic-auth"
:
"~2.0.
0
"
,
"basic-auth"
:
"~2.0.
1
"
,
"debug"
:
"2.6.9"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~
1.1.2
"
,
"depd"
:
"~
2.0.0
"
,
"on-finished"
:
"~2.3.0"
,
"on-finished"
:
"~2.3.0"
,
"on-headers"
:
"~1.0.
1
"
"on-headers"
:
"~1.0.
2
"
}
}
},
},
"ms"
:
{
"ms"
:
{
...
@@ -2163,12 +2388,6 @@
...
@@ -2163,12 +2388,6 @@
"supports-color"
:
"^2.0.0"
"supports-color"
:
"^2.0.0"
}
}
},
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
},
"supports-color"
:
{
"supports-color"
:
{
"version"
:
"2.0.0"
,
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
,
...
@@ -2464,9 +2683,9 @@
...
@@ -2464,9 +2683,9 @@
"dev"
:
true
"dev"
:
true
},
},
"psl"
:
{
"psl"
:
{
"version"
:
"1.
7
.0"
,
"version"
:
"1.
8
.0"
,
"resolved"
:
"https://registry.npmjs.org/psl/-/psl-1.
7
.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/psl/-/psl-1.
8
.0.tgz"
,
"integrity"
:
"sha512-
5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJO
Q=="
,
"integrity"
:
"sha512-
RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjI
Q=="
,
"dev"
:
true
"dev"
:
true
},
},
"punycode"
:
{
"punycode"
:
{
...
@@ -2476,9 +2695,9 @@
...
@@ -2476,9 +2695,9 @@
"dev"
:
true
"dev"
:
true
},
},
"qs"
:
{
"qs"
:
{
"version"
:
"6.9.
1
"
,
"version"
:
"6.9.
3
"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.9.
1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.9.
3
.tgz"
,
"integrity"
:
"sha512-
Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA
=="
,
"integrity"
:
"sha512-
EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw
=="
,
"dev"
:
true
"dev"
:
true
},
},
"range-parser"
:
{
"range-parser"
:
{
...
@@ -2636,9 +2855,9 @@
...
@@ -2636,9 +2855,9 @@
"integrity"
:
"sha1-ExOHM2E/xEV7fhJH6Mt1HfeqVCk="
"integrity"
:
"sha1-ExOHM2E/xEV7fhJH6Mt1HfeqVCk="
},
},
"resolve"
:
{
"resolve"
:
{
"version"
:
"1.1
5.1
"
,
"version"
:
"1.1
6.0
"
,
"resolved"
:
"https://registry.npmjs.org/resolve/-/resolve-1.1
5.1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/resolve/-/resolve-1.1
6.0
.tgz"
,
"integrity"
:
"sha512-
84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w
=="
,
"integrity"
:
"sha512-
LarL/PIKJvc09k1jaeT4kQb/8/7P+qV4qSnN2K80AES+OHdfZELAKVOBjxsvtToT/uLOfFbvYvKfZmV8cee7nA
=="
,
"dev"
:
true
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"path-parse"
:
"^1.0.6"
"path-parse"
:
"^1.0.6"
...
@@ -2693,6 +2912,11 @@
...
@@ -2693,6 +2912,11 @@
}
}
}
}
},
},
"rw"
:
{
"version"
:
"1.3.3"
,
"resolved"
:
"https://registry.npmjs.org/rw/-/rw-1.3.3.tgz"
,
"integrity"
:
"sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
},
"rx"
:
{
"rx"
:
{
"version"
:
"4.1.0"
,
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/rx/-/rx-4.1.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/rx/-/rx-4.1.0.tgz"
,
...
@@ -2713,8 +2937,7 @@
...
@@ -2713,8 +2937,7 @@
"safer-buffer"
:
{
"safer-buffer"
:
{
"version"
:
"2.1.2"
,
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
,
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
"dev"
:
true
},
},
"sass-graph"
:
{
"sass-graph"
:
{
"version"
:
"2.2.4"
,
"version"
:
"2.2.4"
,
...
@@ -2745,12 +2968,6 @@
...
@@ -2745,12 +2968,6 @@
"wrap-ansi"
:
"^2.0.0"
"wrap-ansi"
:
"^2.0.0"
}
}
},
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
,
"dev"
:
true
},
"yargs"
:
{
"yargs"
:
{
"version"
:
"7.1.0"
,
"version"
:
"7.1.0"
,
"resolved"
:
"https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz"
,
...
@@ -2831,6 +3048,12 @@
...
@@ -2831,6 +3048,12 @@
"statuses"
:
"~1.5.0"
"statuses"
:
"~1.5.0"
},
},
"dependencies"
:
{
"dependencies"
:
{
"depd"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
,
"integrity"
:
"sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
,
"dev"
:
true
},
"http-errors"
:
{
"http-errors"
:
{
"version"
:
"1.7.3"
,
"version"
:
"1.7.3"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz"
,
...
@@ -2898,9 +3121,9 @@
...
@@ -2898,9 +3121,9 @@
"dev"
:
true
"dev"
:
true
},
},
"signal-exit"
:
{
"signal-exit"
:
{
"version"
:
"3.0.
2
"
,
"version"
:
"3.0.
3
"
,
"resolved"
:
"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.
2
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.
3
.tgz"
,
"integrity"
:
"sha
1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0
="
,
"integrity"
:
"sha
512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=
="
,
"dev"
:
true
"dev"
:
true
},
},
"source-map"
:
{
"source-map"
:
{
...
...
dashboardv3/package.json
View file @
ff1a9dc2
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
"bootstrap-daterangepicker"
:
"2.1.25"
,
"bootstrap-daterangepicker"
:
"2.1.25"
,
"d3"
:
"3.5.17"
,
"d3"
:
"3.5.17"
,
"d3-tip"
:
"0.6.8"
,
"d3-tip"
:
"0.6.8"
,
"dagre-d3"
:
"0.
4.17
"
,
"dagre-d3"
:
"0.
6.4
"
,
"dropzone"
:
"5.7.0"
,
"dropzone"
:
"5.7.0"
,
"font-awesome"
:
"4.7.0"
,
"font-awesome"
:
"4.7.0"
,
"jQuery-QueryBuilder"
:
"2.4.3"
,
"jQuery-QueryBuilder"
:
"2.4.3"
,
...
...
dashboardv3/public/css/scss/graph.scss
View file @
ff1a9dc2
...
@@ -41,6 +41,16 @@
...
@@ -41,6 +41,16 @@
.label
{
.label
{
fill
:
$color_suva_gray_approx
;
fill
:
$color_suva_gray_approx
;
&
.highlight
{
cursor
:
pointer
;
fill
:
$color_havelock_blue_approx
;
text-decoration
:
underline
;
tspan
{
font-weight
:
400
;
}
}
}
}
circle
{
circle
{
...
...
dashboardv3/public/css/scss/theme.scss
View file @
ff1a9dc2
...
@@ -759,7 +759,8 @@ td.searchTableName:hover {
...
@@ -759,7 +759,8 @@ td.searchTableName:hover {
}
}
}
}
image
{
image
,
circle
{
opacity
:
0
.2
;
opacity
:
0
.2
;
//animation: blink 2.5s infinite;
//animation: blink 2.5s infinite;
}
}
...
...
dashboardv3/public/js/main.js
View file @
ff1a9dc2
...
@@ -72,7 +72,7 @@ require.config({
...
@@ -72,7 +72,7 @@ require.config({
* @default 7 seconds
* @default 7 seconds
* @type {Number}
* @type {Number}
*/
*/
'waitSeconds'
:
3
0
,
'waitSeconds'
:
0
,
'shim'
:
{
'shim'
:
{
'backbone'
:
{
'backbone'
:
{
...
...
dashboardv3/public/js/views/graph/LineageLayoutView.js
View file @
ff1a9dc2
...
@@ -109,7 +109,6 @@ define(['require',
...
@@ -109,7 +109,6 @@ define(['require',
selectedNode
:
''
selectedNode
:
''
}
}
},
},
initializeGraph
:
function
()
{
initializeGraph
:
function
()
{
this
.
g
=
{};
this
.
g
=
{};
this
.
g
=
new
dagreD3
.
graphlib
.
Graph
()
this
.
g
=
new
dagreD3
.
graphlib
.
Graph
()
...
@@ -129,17 +128,15 @@ define(['require',
...
@@ -129,17 +128,15 @@ define(['require',
},
},
onRender
:
function
()
{
onRender
:
function
()
{
var
that
=
this
;
var
that
=
this
;
this
.
ui
.
searchToggler
.
prop
(
"disabled"
,
true
);
this
.
$graphButtonsEl
=
this
.
$
(
".graph-button-group button,select[data-id='selectDepth']"
)
this
.
fetchGraphData
();
this
.
fetchGraphData
();
if
(
platform
.
name
===
"IE"
)
{
if
(
platform
.
name
===
"IE"
)
{
this
.
$
(
'svg'
).
css
(
'opacity'
,
'0'
);
this
.
$
(
'svg'
).
css
(
'opacity'
,
'0'
);
}
}
if
(
platform
.
name
===
"Microsoft Edge"
||
platform
.
name
===
"IE"
)
{
if
(
platform
.
name
===
"Microsoft Edge"
||
platform
.
name
===
"IE"
)
{
$
(
that
.
ui
.
saveSvg
).
hide
();
$
(
that
.
ui
.
saveSvg
).
hide
();
}
}
if
(
this
.
layoutRendered
)
{
if
(
this
.
layoutRendered
)
{
this
.
layoutRendered
();
this
.
layoutRendered
();
...
@@ -175,32 +172,24 @@ define(['require',
...
@@ -175,32 +172,24 @@ define(['require',
icon
.
parent
(
'button'
).
attr
(
"data-original-title"
,
"Default View"
);
icon
.
parent
(
'button'
).
attr
(
"data-original-title"
,
"Default View"
);
}
}
panel
.
toggleClass
(
'fullscreen-mode'
);
panel
.
toggleClass
(
'fullscreen-mode'
);
this
.
slideBarToggle
(
panel
);
},
slideBarToggle
:
function
(
panel
)
{
var
sideBarCheck
=
$
(
".container-fluid.view-container"
).
hasClass
(
'slide-in'
),
sideBarContainer
=
$
(
".container-fluid.view-container"
),
sideBarWrapper
=
$
(
"#sidebar-wrapper,#page-wrapper"
);
sideBarWrapper
.
addClass
(
"animate-me"
);
panel
.
hasClass
(
'fullscreen-mode'
)
?
sideBarCheck
?
null
:
sideBarContainer
.
toggleClass
(
"slide-in"
)
:
sideBarCheck
?
sideBarContainer
.
toggleClass
(
"slide-in"
)
:
null
;
$
(
"#sidebar-wrapper,.search-browse-box,#page-wrapper"
).
removeAttr
(
"style"
);
setTimeout
(
function
()
{
sideBarWrapper
.
removeClass
(
"animate-me"
);
},
301
);
},
},
onCheckUnwantedEntity
:
function
(
e
)
{
onCheckUnwantedEntity
:
function
(
e
)
{
var
data
=
$
.
extend
(
true
,
{},
this
.
lineageData
);
var
that
=
this
;
//this.fromToNodeData = {};
this
.
initializeGraph
();
this
.
initializeGraph
();
if
(
$
(
e
.
target
).
data
(
"id"
)
===
"checkHideProcess"
)
{
if
(
$
(
e
.
target
).
data
(
"id"
)
===
"checkHideProcess"
)
{
this
.
filterObj
.
isProcessHideCheck
=
e
.
target
.
checked
;
this
.
filterObj
.
isProcessHideCheck
=
e
.
target
.
checked
;
}
else
{
}
else
{
this
.
filterObj
.
isDeletedEntityHideCheck
=
e
.
target
.
checked
;
this
.
filterObj
.
isDeletedEntityHideCheck
=
e
.
target
.
checked
;
}
}
this
.
generateData
({
"relationshipMap"
:
this
.
relationshipMap
,
"guidEntityMap"
:
this
.
guidEntityMap
});
that
.
toggleDisableState
({
"el"
:
that
.
$graphButtonsEl
});
this
.
generateData
(
this
.
lineageData
).
then
(
function
()
{
that
.
createGraph
();
that
.
toggleDisableState
({
"el"
:
that
.
$graphButtonsEl
});
});
},
},
toggleBoxPanel
:
function
(
options
)
{
toggleBoxPanel
:
function
(
options
)
{
var
el
=
options
&&
options
.
el
,
var
el
=
options
&&
options
.
el
,
...
@@ -229,11 +218,9 @@ define(['require',
...
@@ -229,11 +218,9 @@ define(['require',
this
.
filterObj
.
depthCount
=
e
.
currentTarget
.
value
;
this
.
filterObj
.
depthCount
=
e
.
currentTarget
.
value
;
this
.
fetchGraphData
({
queryParam
:
{
'depth'
:
this
.
filterObj
.
depthCount
}
});
this
.
fetchGraphData
({
queryParam
:
{
'depth'
:
this
.
filterObj
.
depthCount
}
});
},
},
fetchGraphData
:
function
(
options
)
{
fetchGraphData
:
function
(
options
)
{
var
that
=
this
,
var
that
=
this
,
queryParam
=
options
&&
options
.
queryParam
||
{};
queryParam
=
options
&&
options
.
queryParam
||
{};
this
.
fromToNodeData
=
{};
this
.
$
(
'.fontLoader'
).
show
();
this
.
$
(
'.fontLoader'
).
show
();
this
.
$
(
'svg>g'
).
hide
();
this
.
$
(
'svg>g'
).
hide
();
this
.
toggleDisableState
({
this
.
toggleDisableState
({
...
@@ -247,16 +234,18 @@ define(['require',
...
@@ -247,16 +234,18 @@ define(['require',
}
}
if
(
data
.
relations
.
length
)
{
if
(
data
.
relations
.
length
)
{
that
.
lineageData
=
$
.
extend
(
true
,
{},
data
);
that
.
lineageData
=
$
.
extend
(
true
,
{},
data
);
that
.
relationshipMap
=
that
.
crateLineageRelationshipHashMap
(
data
);
that
.
generateData
(
that
.
lineageData
).
then
(
function
(
graphObj
)
{
that
.
guidEntityMap
=
$
.
extend
(
true
,
{},
data
.
guidEntityMap
);
that
.
createGraph
();
that
.
generateData
({
"relationshipMap"
:
that
.
relationshipMap
,
"guidEntityMap"
:
that
.
guidEntityMap
});
that
.
toggleDisableState
({
that
.
toggleDisableState
({
"el"
:
that
.
$
(
".graph-button-group button,select[data-id='selectDepth']"
)
"el"
:
that
.
$graphButtonsEl
});
});
that
.
renderLineageTypeSearch
().
then
(
function
()
{
that
.
ui
.
searchToggler
.
prop
(
"disabled"
,
false
);
});
});
}
else
{
}
else
{
that
.
noLineage
();
that
.
noLineage
();
that
.
hideCheckForProcess
();
that
.
hideCheckForProcess
();
}
}
},
},
cust_error
:
function
(
model
,
response
)
{
cust_error
:
function
(
model
,
response
)
{
...
@@ -301,7 +290,6 @@ define(['require',
...
@@ -301,7 +290,6 @@ define(['require',
var
returnObj
=
{
var
returnObj
=
{
isProcess
:
(
isProcessHideCheck
&&
node
.
isProcess
),
isProcess
:
(
isProcessHideCheck
&&
node
.
isProcess
),
isDeleted
:
(
isDeletedEntityHideCheck
&&
node
.
isDeleted
)
isDeleted
:
(
isDeletedEntityHideCheck
&&
node
.
isDeleted
)
};
};
returnObj
[
"update"
]
=
returnObj
.
isProcess
||
returnObj
.
isDeleted
;
returnObj
[
"update"
]
=
returnObj
.
isProcess
||
returnObj
.
isDeleted
;
return
returnObj
;
return
returnObj
;
...
@@ -332,34 +320,46 @@ define(['require',
...
@@ -332,34 +320,46 @@ define(['require',
}
}
return
serviceType
;
return
serviceType
;
},
},
crateLineageRelationshipHashMap
:
function
(
data
)
{
generateData
:
function
(
options
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
try
{
var
that
=
this
,
var
that
=
this
,
relations
=
data
&&
data
.
relations
,
relations
=
options
&&
options
.
relations
||
{},
guidEntityMap
=
data
&&
data
.
guidEntityMap
,
guidEntityMap
=
options
&&
options
.
guidEntityMap
||
{},
isHideFilterOn
=
this
.
filterObj
.
isProcessHideCheck
||
this
.
filterObj
.
isDeletedEntityHideCheck
,
newHashMap
=
{},
styleObj
=
{
fill
:
'none'
,
stroke
:
'#ffb203'
,
width
:
3
},
makeNodeData
=
function
(
relationObj
)
{
makeNodeData
=
function
(
relationObj
)
{
var
obj
=
$
.
extend
(
true
,
{
if
(
relationObj
)
{
if
(
relationObj
.
updatedValues
)
{
return
relationObj
;
}
var
obj
=
_
.
extend
(
relationObj
,
{
shape
:
"img"
,
shape
:
"img"
,
updatedValues
:
true
,
label
:
relationObj
.
displayText
.
trunc
(
18
),
label
:
relationObj
.
displayText
.
trunc
(
18
),
toolTipLabel
:
relationObj
.
displayText
,
toolTipLabel
:
relationObj
.
displayText
,
id
:
relationObj
.
guid
,
id
:
relationObj
.
guid
,
isLineage
:
true
,
isLineage
:
true
,
isIncomplete
:
relationObj
.
isIncomplete
,
isIncomplete
:
relationObj
.
isIncomplete
,
entityDef
:
this
.
getEntityDef
(
relationObj
.
typeName
)
entityDef
:
that
.
getEntityDef
(
relationObj
.
typeName
)
},
relationObj
);
}
);
obj
[
"serviceType"
]
=
this
.
getServiceType
({
typeName
:
relationObj
.
typeName
,
entityDef
:
obj
.
entityDef
});
obj
[
"serviceType"
]
=
that
.
getServiceType
({
typeName
:
relationObj
.
typeName
,
entityDef
:
obj
.
entityDef
});
obj
[
"superTypes"
]
=
this
.
getNestedSuperTypes
({
entityDef
:
obj
.
entityDef
});
obj
[
"superTypes"
]
=
that
.
getNestedSuperTypes
({
entityDef
:
obj
.
entityDef
});
obj
[
'isProcess'
]
=
this
.
isProcess
(
obj
);
obj
[
'isProcess'
]
=
that
.
isProcess
(
obj
);
obj
[
'isDeleted'
]
=
this
.
isDeleted
(
obj
);
obj
[
'isDeleted'
]
=
that
.
isDeleted
(
obj
);
return
obj
;
return
obj
;
}.
bind
(
this
),
}
},
crateLineageRelationshipHashMap
=
function
(
data
)
{
var
that
=
this
,
relations
=
data
&&
data
.
relations
,
newHashMap
=
{};
newHashMap
=
{};
_
.
each
(
relations
,
function
(
obj
)
{
_
.
each
(
relations
,
function
(
obj
)
{
if
(
!
that
.
fromToNodeData
[
obj
.
fromEntityId
])
{
that
.
fromToNodeData
[
obj
.
fromEntityId
]
=
makeNodeData
(
guidEntityMap
[
obj
.
fromEntityId
]);
}
if
(
!
that
.
fromToNodeData
[
obj
.
toEntityId
])
{
that
.
fromToNodeData
[
obj
.
toEntityId
]
=
makeNodeData
(
guidEntityMap
[
obj
.
toEntityId
]);
}
if
(
newHashMap
[
obj
.
fromEntityId
])
{
if
(
newHashMap
[
obj
.
fromEntityId
])
{
newHashMap
[
obj
.
fromEntityId
].
push
(
obj
.
toEntityId
);
newHashMap
[
obj
.
fromEntityId
].
push
(
obj
.
toEntityId
);
}
else
{
}
else
{
...
@@ -368,25 +368,14 @@ define(['require',
...
@@ -368,25 +368,14 @@ define(['require',
});
});
return
newHashMap
;
return
newHashMap
;
},
},
generateData
:
function
(
options
)
{
var
that
=
this
,
relationshipMap
=
options
&&
$
.
extend
(
true
,
{},
options
.
relationshipMap
)
||
{},
guidEntityMap
=
options
&&
options
.
guidEntityMap
||
{},
styleObj
=
{
fill
:
'none'
,
stroke
:
'#ffb203'
,
width
:
3
},
getStyleObjStr
=
function
(
styleObj
)
{
getStyleObjStr
=
function
(
styleObj
)
{
return
'fill:'
+
styleObj
.
fill
+
';stroke:'
+
styleObj
.
stroke
+
';stroke-width:'
+
styleObj
.
width
;
return
'fill:'
+
styleObj
.
fill
+
';stroke:'
+
styleObj
.
stroke
+
';stroke-width:'
+
styleObj
.
width
;
},
},
filterRelationshipMap
=
relationshipMap
,
isHideFilterOn
=
this
.
filterObj
.
isProcessHideCheck
||
this
.
filterObj
.
isDeletedEntityHideCheck
,
getNewToNodeRelationship
=
function
(
toNodeGuid
)
{
getNewToNodeRelationship
=
function
(
toNodeGuid
)
{
if
(
toNodeGuid
&&
relationshipMap
[
toNodeGuid
])
{
if
(
toNodeGuid
&&
relationshipMap
[
toNodeGuid
])
{
var
newRelationship
=
[];
var
newRelationship
=
[];
_
.
each
(
relationshipMap
[
toNodeGuid
],
function
(
guid
)
{
_
.
each
(
relationshipMap
[
toNodeGuid
],
function
(
guid
)
{
var
nodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
that
.
fromToNodeData
[
guid
]
);
var
nodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
makeNodeData
(
guidEntityMap
[
guid
])
);
if
(
nodeToBeUpdated
.
update
)
{
if
(
nodeToBeUpdated
.
update
)
{
var
newRelation
=
getNewToNodeRelationship
(
guid
);
var
newRelation
=
getNewToNodeRelationship
(
guid
);
if
(
newRelation
)
{
if
(
newRelation
)
{
...
@@ -404,7 +393,7 @@ define(['require',
...
@@ -404,7 +393,7 @@ define(['require',
getToNodeRelation
=
function
(
toNodes
,
fromNodeToBeUpdated
)
{
getToNodeRelation
=
function
(
toNodes
,
fromNodeToBeUpdated
)
{
var
toNodeRelationship
=
[];
var
toNodeRelationship
=
[];
_
.
each
(
toNodes
,
function
(
toNodeGuid
)
{
_
.
each
(
toNodes
,
function
(
toNodeGuid
)
{
var
toNodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
that
.
fromToNodeData
[
toNodeGuid
]
);
var
toNodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
makeNodeData
(
guidEntityMap
[
toNodeGuid
])
);
if
(
toNodeToBeUpdated
.
update
)
{
if
(
toNodeToBeUpdated
.
update
)
{
// To node need to updated
// To node need to updated
if
(
pendingFromRelationship
[
toNodeGuid
])
{
if
(
pendingFromRelationship
[
toNodeGuid
])
{
...
@@ -422,11 +411,33 @@ define(['require',
...
@@ -422,11 +411,33 @@ define(['require',
});
});
return
toNodeRelationship
;
return
toNodeRelationship
;
},
},
setNode
=
function
(
guid
)
{
if
(
!
that
.
g
.
_nodes
[
guid
])
{
var
nodeData
=
makeNodeData
(
guidEntityMap
[
guid
]);
that
.
g
.
setNode
(
guid
,
nodeData
);
return
nodeData
;
}
else
{
return
that
.
g
.
_nodes
[
guid
];
}
},
setEdge
=
function
(
fromNodeGuid
,
toNodeGuid
)
{
that
.
g
.
setEdge
(
fromNodeGuid
,
toNodeGuid
,
{
"arrowhead"
:
'arrowPoint'
,
"curve"
:
LineageUtils
.
BezierCurve
,
"style"
:
getStyleObjStr
(
styleObj
),
"styleObj"
:
styleObj
});
},
setGraphData
=
function
(
fromEntityId
,
toEntityId
)
{
setNode
(
fromEntityId
);
setNode
(
toEntityId
);
setEdge
(
fromEntityId
,
toEntityId
);
},
pendingFromRelationship
=
{};
pendingFromRelationship
=
{};
if
(
isHideFilterOn
)
{
if
(
isHideFilterOn
)
{
filterRelationshipMap
=
{};
var
relationshipMap
=
crateLineageRelationshipHashMap
(
options
)
_
.
each
(
relationshipMap
,
function
(
toNodes
,
fromNodeGuid
)
{
_
.
each
(
relationshipMap
,
function
(
toNodes
,
fromNodeGuid
)
{
var
fromNodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
that
.
fromToNodeData
[
fromNodeGuid
]
),
var
fromNodeToBeUpdated
=
that
.
isNodeToBeUpdated
(
makeNodeData
(
guidEntityMap
[
fromNodeGuid
])
),
toNodeList
=
getToNodeRelation
(
toNodes
,
fromNodeToBeUpdated
);
toNodeList
=
getToNodeRelation
(
toNodes
,
fromNodeToBeUpdated
);
if
(
fromNodeToBeUpdated
.
update
)
{
if
(
fromNodeToBeUpdated
.
update
)
{
if
(
pendingFromRelationship
[
fromNodeGuid
])
{
if
(
pendingFromRelationship
[
fromNodeGuid
])
{
...
@@ -435,74 +446,58 @@ define(['require',
...
@@ -435,74 +446,58 @@ define(['require',
pendingFromRelationship
[
fromNodeGuid
]
=
toNodeList
;
pendingFromRelationship
[
fromNodeGuid
]
=
toNodeList
;
}
}
}
else
{
}
else
{
if
(
filterRelationshipMap
[
fromNodeGuid
])
{
_
.
each
(
toNodeList
,
function
(
toNodeGuid
)
{
filterRelationshipMap
[
fromNodeGuid
]
=
filterRelationshipMap
[
fromNodeGuid
].
concat
(
toNodeList
);
setGraphData
(
fromNodeGuid
,
toNodeGuid
);
}
else
{
});
filterRelationshipMap
[
fromNodeGuid
]
=
toNodeList
;
}
}
}
})
})
}
else
{
_
.
each
(
relations
,
function
(
obj
)
{
setGraphData
(
obj
.
fromEntityId
,
obj
.
toEntityId
);
});
}
}
if
(
this
.
g
.
_nodes
[
this
.
guid
])
{
_
.
each
(
filterRelationshipMap
,
function
(
toNodesList
,
fromNodeGuid
)
{
if
(
this
.
g
.
_nodes
[
this
.
guid
])
{
if
(
!
that
.
g
.
_nodes
[
fromNodeGuid
])
{
this
.
g
.
_nodes
[
this
.
guid
][
'isLineage'
]
=
false
;
that
.
g
.
setNode
(
fromNodeGuid
,
that
.
fromToNodeData
[
fromNodeGuid
]);
}
}
_
.
each
(
toNodesList
,
function
(
toNodeGuid
)
{
this
.
findImpactNodeAndUpdateData
({
"guid"
:
this
.
guid
,
"getStyleObjStr"
:
getStyleObjStr
});
if
(
!
that
.
g
.
_nodes
[
toNodeGuid
])
{
that
.
g
.
setNode
(
toNodeGuid
,
that
.
fromToNodeData
[
toNodeGuid
]);
}
}
that
.
g
.
setEdge
(
fromNodeGuid
,
toNodeGuid
,
{
resolve
(
this
.
g
);
"arrowhead"
:
'arrowPoint'
,
}
catch
(
e
)
{
"lineInterpolate"
:
'basis'
,
reject
(
e
)
"style"
:
getStyleObjStr
(
styleObj
),
'styleObj'
:
styleObj
});
})
})
//if no relations found
if
(
_
.
isEmpty
(
filterRelationshipMap
))
{
this
.
$
(
'svg'
).
html
(
'<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">No relations to display</text>'
);
}
}
}.
bind
(
this
));
if
(
this
.
fromToNodeData
[
this
.
guid
])
{
this
.
fromToNodeData
[
this
.
guid
][
'isLineage'
]
=
false
;
this
.
findImpactNodeAndUpdateData
({
"relationshipMap"
:
filterRelationshipMap
,
"guid"
:
this
.
guid
,
"getStyleObjStr"
:
getStyleObjStr
});
}
this
.
renderLineageTypeSearch
();
this
.
createGraph
();
},
},
findImpactNodeAndUpdateData
:
function
(
options
)
{
findImpactNodeAndUpdateData
:
function
(
options
)
{
var
that
=
this
,
var
that
=
this
,
relationshipMap
=
options
.
relationshipMap
,
guid
=
options
.
guid
,
fromNodeGuid
=
options
.
guid
,
getStyleObjStr
=
options
.
getStyleObjStr
,
getStyleObjStr
=
options
.
getStyleObjStr
,
toNodeList
=
relationshipMap
[
fromNodeGuid
];
traversedMap
=
{},
if
(
toNodeList
&&
toNodeList
.
length
)
{
styleObj
=
{
if
(
!
relationshipMap
[
fromNodeGuid
][
"traversed"
])
{
relationshipMap
[
fromNodeGuid
][
"traversed"
]
=
true
;
_
.
each
(
toNodeList
,
function
(
toNodeGuid
)
{
that
.
fromToNodeData
[
toNodeGuid
][
'isLineage'
]
=
false
;
var
styleObj
=
{
fill
:
'none'
,
fill
:
'none'
,
stroke
:
'#fb4200'
,
stroke
:
'#fb4200'
,
width
:
3
width
:
3
},
traversed
=
function
(
toNodeList
,
fromNodeGuid
)
{
if
(
!
_
.
isEmpty
(
toNodeList
))
{
if
(
!
traversedMap
[
fromNodeGuid
])
{
traversedMap
[
fromNodeGuid
]
=
true
;
_
.
each
(
toNodeList
,
function
(
val
,
toNodeGuid
)
{
if
(
that
.
g
.
_nodes
[
toNodeGuid
])
{
that
.
g
.
_nodes
[
toNodeGuid
][
'isLineage'
]
=
false
;
}
}
that
.
g
.
setEdge
(
fromNodeGuid
,
toNodeGuid
,
{
that
.
g
.
setEdge
(
fromNodeGuid
,
toNodeGuid
,
{
"arrowhead"
:
'arrowPoint'
,
"arrowhead"
:
'arrowPoint'
,
"lineInterpolate"
:
'basis'
,
"curve"
:
LineageUtils
.
BezierCurve
,
"style"
:
getStyleObjStr
(
styleObj
),
"style"
:
getStyleObjStr
(
styleObj
),
'styleObj'
:
styleObj
'styleObj'
:
styleObj
});
});
that
.
findImpactNodeAndUpdateData
({
traversed
(
that
.
g
.
_sucs
[
toNodeGuid
],
toNodeGuid
);
"relationshipMap"
:
relationshipMap
,
"guid"
:
toNodeGuid
,
"getStyleObjStr"
:
getStyleObjStr
});
});
});
}
}
}
}
};
traversed
(
this
.
g
.
_sucs
[
guid
],
guid
)
},
},
zoomed
:
function
(
that
)
{
zoomed
:
function
(
that
)
{
this
.
$
(
'svg'
).
find
(
'>g'
).
attr
(
"transform"
,
this
.
$
(
'svg'
).
find
(
'>g'
).
attr
(
"transform"
,
...
@@ -528,6 +523,10 @@ define(['require',
...
@@ -528,6 +523,10 @@ define(['require',
});
});
},
},
createGraph
:
function
()
{
createGraph
:
function
()
{
if
(
_
.
isEmpty
(
this
.
g
.
_nodes
))
{
this
.
$
(
'svg'
).
html
(
'<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">No relations to display</text>'
);
return
;
}
var
that
=
this
,
var
that
=
this
,
width
=
this
.
$
(
'svg'
).
width
(),
width
=
this
.
$
(
'svg'
).
width
(),
height
=
this
.
$
(
'svg'
).
height
(),
height
=
this
.
$
(
'svg'
).
height
(),
...
@@ -544,111 +543,12 @@ define(['require',
...
@@ -544,111 +543,12 @@ define(['require',
// Create the renderer
// Create the renderer
var
render
=
new
dagreD3
.
render
();
var
render
=
new
dagreD3
.
render
();
// Add our custom arrow (a hollow-point)
// Add our custom arrow (a hollow-point)
render
.
arrows
().
arrowPoint
=
function
normal
(
parent
,
id
,
edge
,
type
)
{
render
.
arrows
().
arrowPoint
=
function
(
parent
,
id
,
edge
,
type
)
{
var
parentNode
=
parent
&&
parent
[
0
]
&&
parent
[
0
][
0
]
&&
parent
[
0
][
0
].
parentNode
?
parent
[
0
][
0
].
parentNode
:
parent
;
return
LineageUtils
.
arrowPointRender
(
parent
,
id
,
edge
,
type
,
{
guid
:
that
.
guid
,
dagreD3
:
dagreD3
});
d3
.
select
(
parentNode
).
select
(
'path.path'
).
attr
(
'marker-end'
,
"url(#"
+
id
+
")"
);
var
marker
=
parent
.
append
(
"marker"
)
.
attr
(
"id"
,
id
)
.
attr
(
"viewBox"
,
"0 0 10 10"
)
.
attr
(
"refX"
,
8
)
.
attr
(
"refY"
,
5
)
.
attr
(
"markerUnits"
,
"strokeWidth"
)
.
attr
(
"markerWidth"
,
4
)
.
attr
(
"markerHeight"
,
4
)
.
attr
(
"orient"
,
"auto"
);
var
path
=
marker
.
append
(
"path"
)
.
attr
(
"d"
,
"M 0 0 L 10 5 L 0 10 z"
)
.
style
(
"fill"
,
edge
.
styleObj
.
stroke
);
dagreD3
.
util
.
applyStyle
(
path
,
edge
[
type
+
"Style"
]);
};
render
.
shapes
().
img
=
function
circle
(
parent
,
bbox
,
node
)
{
//var r = Math.max(bbox.width, bbox.height) / 2,
if
(
node
.
id
==
that
.
guid
)
{
var
currentNode
=
true
}
var
shapeSvg
=
parent
.
append
(
'circle'
)
.
attr
(
'fill'
,
'url(#img_'
+
node
.
id
+
')'
)
.
attr
(
'r'
,
'24px'
)
.
attr
(
'data-stroke'
,
node
.
id
)
.
attr
(
'stroke-width'
,
"2px"
)
.
attr
(
"class"
,
"nodeImage "
+
(
currentNode
?
"currentNode"
:
(
node
.
isProcess
?
"process"
:
"node"
)));
if
(
currentNode
)
{
shapeSvg
.
attr
(
"stroke"
,
"#fb4200"
)
}
if
(
node
.
isIncomplete
===
true
)
{
parent
.
attr
(
"class"
,
"node isIncomplete show"
);
}
else
{
parent
.
attr
(
"class"
,
"node isIncomplete"
);
}
parent
.
insert
(
"defs"
)
.
append
(
"pattern"
)
.
attr
(
"x"
,
"0%"
)
.
attr
(
"y"
,
"0%"
)
.
attr
(
"patternUnits"
,
"objectBoundingBox"
)
.
attr
(
"id"
,
"img_"
+
node
.
id
)
.
attr
(
"width"
,
"100%"
)
.
attr
(
"height"
,
"100%"
)
.
append
(
'image'
)
.
attr
(
"href"
,
function
(
d
)
{
var
that
=
this
;
if
(
node
)
{
var
imageIconPath
=
Utils
.
getEntityIconPath
({
entityData
:
node
});
var
getImageData
=
function
(
options
)
{
var
imagePath
=
options
.
imagePath
,
ajaxOptions
=
{
"url"
:
imagePath
,
"method"
:
"get"
,
"cache"
:
true
}
if
(
platform
.
name
!==
"IE"
)
{
ajaxOptions
[
"mimeType"
]
=
"text/plain; charset=x-user-defined"
;
}
shapeSvg
.
attr
(
"data-iconpath"
,
imagePath
);
$
.
ajax
(
ajaxOptions
)
.
always
(
function
(
data
,
status
,
xhr
)
{
if
(
data
.
status
==
404
)
{
getImageData
({
"imagePath"
:
Utils
.
getEntityIconPath
({
entityData
:
node
,
errorUrl
:
imagePath
})
});
}
else
if
(
data
)
{
if
(
platform
.
name
!==
"IE"
)
{
imageObject
[
imageIconPath
]
=
'data:image/png;base64,'
+
LineageUtils
.
base64Encode
({
"data"
:
data
});
}
else
{
imageObject
[
imageIconPath
]
=
imagePath
;
}
d3
.
select
(
that
).
attr
(
"xlink:href"
,
imageObject
[
imageIconPath
]);
if
(
imageIconPath
!==
shapeSvg
.
attr
(
"data-iconpath"
))
{
shapeSvg
.
attr
(
"data-iconpathorigin"
,
imageIconPath
);
}
}
});
}
getImageData
({
"imagePath"
:
imageIconPath
});
}
})
.
attr
(
"x"
,
"4"
)
.
attr
(
"y"
,
currentNode
?
"3"
:
"4"
).
attr
(
"width"
,
"40"
)
.
attr
(
"height"
,
"40"
);
parent
.
insert
(
"foreignObject"
)
.
attr
(
"x"
,
"-25"
)
.
attr
(
"y"
,
"-25"
)
.
attr
(
"width"
,
"50"
)
.
attr
(
"height"
,
"50"
)
.
append
(
"xhtml:div"
)
.
insert
(
"i"
)
.
attr
(
"class"
,
"fa fa-hourglass-half"
);
node
.
intersect
=
function
(
point
)
{
return
dagreD3
.
intersect
.
circle
(
node
,
currentNode
?
24
:
21
,
point
);
};
};
return
shapeSvg
;
// Render custom img inside shape
render
.
shapes
().
img
=
function
(
parent
,
bbox
,
node
)
{
return
LineageUtils
.
imgShapeRender
(
parent
,
bbox
,
node
,
{
guid
:
that
.
guid
,
dagreD3
:
dagreD3
,
imageObject
:
imageObject
,
$defs
:
that
.
svg
.
select
(
'defs'
)
});
};
};
// Set up an SVG group so that we can translate the final graph.
// Set up an SVG group so that we can translate the final graph.
if
(
this
.
$
(
"svg"
).
find
(
'.output'
).
length
)
{
if
(
this
.
$
(
"svg"
).
find
(
'.output'
).
length
)
{
...
@@ -658,6 +558,8 @@ define(['require',
...
@@ -658,6 +558,8 @@ define(['require',
.
attr
(
"viewBox"
,
"0 0 "
+
width
+
" "
+
height
)
.
attr
(
"viewBox"
,
"0 0 "
+
width
+
" "
+
height
)
.
attr
(
"enable-background"
,
"new 0 0 "
+
width
+
" "
+
height
),
.
attr
(
"enable-background"
,
"new 0 0 "
+
width
+
" "
+
height
),
svgGroup
=
svg
.
append
(
"g"
);
svgGroup
=
svg
.
append
(
"g"
);
// Append defs
svg
.
append
(
"defs"
);
var
zoom
=
this
.
zoom
=
d3
.
behavior
.
zoom
()
var
zoom
=
this
.
zoom
=
d3
.
behavior
.
zoom
()
.
center
([
width
/
2
,
height
/
2
])
.
center
([
width
/
2
,
height
/
2
])
.
scaleExtent
([
0.01
,
50
])
.
scaleExtent
([
0.01
,
50
])
...
@@ -717,8 +619,29 @@ define(['require',
...
@@ -717,8 +619,29 @@ define(['require',
// .on("wheel.zoom", null);
// .on("wheel.zoom", null);
//change text postion
//change text postion
svgGroup
.
selectAll
(
"g.nodes g.label"
)
svgGroup
.
selectAll
(
"g.nodes g.label"
)
.
attr
(
"transform"
,
"translate(2,-35)"
);
.
attr
(
"transform"
,
"translate(2,-35)"
)
var
waitForDoubleClick
=
null
;
.
on
(
'mouseenter'
,
function
(
d
)
{
d3
.
select
(
this
).
classed
(
"highlight"
,
true
);
})
.
on
(
'mouseleave'
,
function
(
d
)
{
d3
.
select
(
this
).
classed
(
"highlight"
,
false
);
})
.
on
(
'click'
,
function
(
d
)
{
d3
.
event
.
preventDefault
();
tooltip
.
hide
(
d
);
if
(
that
.
guid
==
d
)
{
Utils
.
notifyInfo
({
html
:
true
,
content
:
"You are already on "
+
"<b>"
+
that
.
entityName
+
"</b> detail page."
});
}
else
{
Utils
.
setUrl
({
url
:
'#!/detailPage/'
+
d
+
'?tabActive=lineage'
,
mergeBrowserUrl
:
false
,
trigger
:
true
});
}
});
svgGroup
.
selectAll
(
"g.nodes g.node"
)
svgGroup
.
selectAll
(
"g.nodes g.node"
)
.
on
(
'mouseenter'
,
function
(
d
)
{
.
on
(
'mouseenter'
,
function
(
d
)
{
that
.
activeNode
=
true
;
that
.
activeNode
=
true
;
...
@@ -788,33 +711,10 @@ define(['require',
...
@@ -788,33 +711,10 @@ define(['require',
var
el
=
this
;
var
el
=
this
;
if
(
d3
.
event
.
defaultPrevented
)
return
;
// ignore drag
if
(
d3
.
event
.
defaultPrevented
)
return
;
// ignore drag
d3
.
event
.
preventDefault
();
d3
.
event
.
preventDefault
();
if
(
waitForDoubleClick
!=
null
)
{
clearTimeout
(
waitForDoubleClick
)
waitForDoubleClick
=
null
;
tooltip
.
hide
(
d
);
if
(
that
.
guid
==
d
)
{
Utils
.
notifyInfo
({
html
:
true
,
content
:
"You are already on "
+
"<b>"
+
that
.
entityName
+
"</b> detail page."
});
}
else
{
Utils
.
setUrl
({
url
:
'#!/detailPage/'
+
d
+
'?tabActive=lineage'
,
mergeBrowserUrl
:
false
,
trigger
:
true
});
}
}
else
{
var
currentEvent
=
d3
.
event
waitForDoubleClick
=
setTimeout
(
function
()
{
tooltip
.
hide
(
d
);
tooltip
.
hide
(
d
);
that
.
onClickNodeToggler
({
obj
:
d
});
that
.
onClickNodeToggler
({
obj
:
d
});
$
(
el
).
find
(
'circle'
).
addClass
(
'node-detail-highlight'
);
$
(
el
).
find
(
'circle'
).
addClass
(
'node-detail-highlight'
);
that
.
updateRelationshipDetails
({
guid
:
d
});
that
.
updateRelationshipDetails
({
guid
:
d
});
waitForDoubleClick
=
null
;
},
170
)
}
});
});
svgGroup
.
selectAll
(
"g.edgePath path.path"
).
on
(
'click'
,
function
(
d
)
{
svgGroup
.
selectAll
(
"g.edgePath path.path"
).
on
(
'click'
,
function
(
d
)
{
...
@@ -868,27 +768,32 @@ define(['require',
...
@@ -868,27 +768,32 @@ define(['require',
}).
init
();
}).
init
();
},
},
renderLineageTypeSearch
:
function
()
{
renderLineageTypeSearch
:
function
()
{
var
that
=
this
,
var
that
=
this
;
lineageData
=
$
.
extend
(
true
,
{},
this
.
lineageData
),
return
new
Promise
(
function
(
resolve
,
reject
)
{
data
=
[],
try
{
var
data
=
[],
typeStr
=
'<option></option>'
;
typeStr
=
'<option></option>'
;
if
(
!
_
.
isEmpty
(
lineageData
))
{
if
(
!
_
.
isEmpty
(
that
.
lineageData
))
{
_
.
each
(
lineageData
.
guidEntityMap
,
function
(
obj
,
index
)
{
_
.
each
(
that
.
lineageData
.
guidEntityMap
,
function
(
obj
,
index
)
{
var
nodeData
=
that
.
fromToNodeData
[
obj
.
guid
];
var
nodeData
=
that
.
g
.
_nodes
[
obj
.
guid
];
if
(
that
.
filterObj
.
isProcessHideCheck
&&
nodeData
&&
nodeData
.
isProcess
)
{
if
((
that
.
filterObj
.
isProcessHideCheck
||
that
.
filterObj
.
isDeletedEntityHideCheck
)
&&
nodeData
&&
(
nodeData
.
isProcess
||
nodeData
.
isDeleted
)
)
{
return
;
return
;
}
else
if
(
that
.
filterObj
.
isDeletedEntityHideCheck
&&
nodeData
&&
nodeData
.
isDeleted
)
{
return
}
}
typeStr
+=
'<option value="'
+
obj
.
guid
+
'">'
+
obj
.
displayText
+
'</option>'
;
typeStr
+=
'<option value="'
+
obj
.
guid
+
'">'
+
obj
.
displayText
+
'</option>'
;
});
});
}
}
this
.
ui
.
lineageTypeSearch
.
html
(
typeStr
);
that
.
ui
.
lineageTypeSearch
.
html
(
typeStr
);
this
.
initilizelineageTypeSearch
();
that
.
initilizelineageTypeSearch
();
resolve
();
}
catch
(
e
)
{
console
.
log
(
e
);
reject
(
e
);
}
})
},
},
initilizelineageTypeSearch
:
function
()
{
initilizelineageTypeSearch
:
function
()
{
var
that
=
this
;
var
that
=
this
;
th
at
.
ui
.
lineageTypeSearch
.
select2
({
th
is
.
ui
.
lineageTypeSearch
.
select2
({
closeOnSelect
:
true
,
closeOnSelect
:
true
,
placeholder
:
'Select Node'
placeholder
:
'Select Node'
}).
on
(
'change.select2'
,
function
(
e
)
{
}).
on
(
'change.select2'
,
function
(
e
)
{
...
@@ -930,19 +835,18 @@ define(['require',
...
@@ -930,19 +835,18 @@ define(['require',
return
false
;
return
false
;
}
}
});
});
});
});
if
(
th
at
.
searchNodeObj
.
selectedNode
)
{
if
(
th
is
.
searchNodeObj
.
selectedNode
)
{
th
at
.
ui
.
lineageTypeSearch
.
val
(
that
.
searchNodeObj
.
selectedNode
);
th
is
.
ui
.
lineageTypeSearch
.
val
(
this
.
searchNodeObj
.
selectedNode
);
th
at
.
ui
.
lineageTypeSearch
.
trigger
(
"change.select2"
);
th
is
.
ui
.
lineageTypeSearch
.
trigger
(
"change.select2"
);
}
}
},
},
updateRelationshipDetails
:
function
(
options
)
{
updateRelationshipDetails
:
function
(
options
)
{
var
that
=
this
,
var
that
=
this
,
guid
=
options
.
guid
,
guid
=
options
.
guid
,
initialData
=
that
.
g
uidEntityMap
[
guid
],
initialData
=
that
.
g
.
_nodes
[
guid
],
typeName
=
initialData
.
typeName
||
guid
,
typeName
=
initialData
.
typeName
||
guid
,
attributeDefs
=
that
.
g
.
_nodes
[
guid
]
&&
that
.
g
.
_nodes
[
guid
].
entityDef
?
that
.
g
.
_nodes
[
guid
]
.
entityDef
.
attributeDefs
:
null
;
attributeDefs
=
initialData
&&
initialData
.
entityDef
?
initialData
.
entityDef
.
attributeDefs
:
null
;
this
.
$
(
"[data-id='typeName']"
).
text
(
typeName
);
this
.
$
(
"[data-id='typeName']"
).
text
(
typeName
);
this
.
entityModel
=
new
VEntity
({});
this
.
entityModel
=
new
VEntity
({});
var
config
=
{
var
config
=
{
...
@@ -974,109 +878,28 @@ define(['require',
...
@@ -974,109 +878,28 @@ define(['require',
}));
}));
},
},
onClickSaveSvg
:
function
(
e
,
a
)
{
onClickSaveSvg
:
function
(
e
,
a
)
{
var
that
=
this
;
var
that
=
this
,
var
loaderTargetDiv
=
$
(
e
.
currentTarget
).
find
(
'>i'
);
loaderTargetDiv
=
$
(
e
.
currentTarget
).
find
(
'>i'
);
if
(
loaderTargetDiv
.
hasClass
(
'fa-refresh'
))
{
if
(
loaderTargetDiv
.
hasClass
(
'fa-refresh'
))
{
Utils
.
notifyWarn
({
Utils
.
notifyWarn
({
content
:
"Please wait while the lineage gets downloaded"
content
:
"Please wait while the lineage gets downloaded"
});
});
return
false
;
// return if the lineage is not loaded.
return
false
;
// return if the lineage is not loaded.
}
}
this
.
toggleLoader
(
loaderTargetDiv
);
that
.
toggleLoader
(
loaderTargetDiv
);
Utils
.
notifyInfo
({
Utils
.
notifyInfo
({
content
:
"Lineage will be downloaded in a moment."
content
:
"Lineage will be downloaded in a moment."
});
});
setTimeout
(
function
()
{
var
entityAttributes
=
that
.
entity
&&
that
.
entity
.
attributes
;
var
svg
=
that
.
$
(
'svg'
)[
0
],
LineageUtils
.
SaveSvg
(
e
,
{
svgClone
=
svg
.
cloneNode
(
true
),
svg
:
that
.
$
(
'svg'
)[
0
],
scaleFactor
=
1
,
svgWidth
:
that
.
$
(
'svg'
).
width
(),
svgWidth
=
that
.
$
(
'svg'
).
width
(),
svgHeight
:
that
.
$
(
'svg'
).
height
(),
svgHeight
=
that
.
$
(
'svg'
).
height
();
toggleLoader
:
function
()
{
if
(
platform
.
name
===
"Firefox"
)
{
svgClone
.
setAttribute
(
'width'
,
svgWidth
);
svgClone
.
setAttribute
(
'height'
,
svgHeight
);
}
$
(
'.hidden-svg'
).
html
(
svgClone
);
$
(
svgClone
).
find
(
'>g'
).
attr
(
"transform"
,
"scale("
+
scaleFactor
+
")"
);
$
(
svgClone
).
find
(
"foreignObject"
).
remove
();
var
canvasOffset
=
{
x
:
150
,
y
:
150
},
setWidth
=
(
svgClone
.
getBBox
().
width
+
(
canvasOffset
.
x
)),
setHeight
=
(
svgClone
.
getBBox
().
height
+
(
canvasOffset
.
y
)),
xAxis
=
svgClone
.
getBBox
().
x
,
yAxis
=
svgClone
.
getBBox
().
y
;
svgClone
.
attributes
.
viewBox
.
value
=
xAxis
+
","
+
yAxis
+
","
+
setWidth
+
","
+
setHeight
;
var
createCanvas
=
document
.
createElement
(
'canvas'
);
createCanvas
.
id
=
"canvas"
;
createCanvas
.
style
.
display
=
'none'
;
var
body
=
$
(
'body'
).
append
(
createCanvas
),
canvas
=
$
(
'canvas'
)[
0
];
canvas
.
width
=
(
svgClone
.
getBBox
().
width
*
scaleFactor
)
+
canvasOffset
.
x
;
canvas
.
height
=
(
svgClone
.
getBBox
().
height
*
scaleFactor
)
+
canvasOffset
.
y
;
var
ctx
=
canvas
.
getContext
(
'2d'
),
data
=
(
new
XMLSerializer
()).
serializeToString
(
svgClone
),
DOMURL
=
window
.
URL
||
window
.
webkitURL
||
window
;
ctx
.
fillStyle
=
"#FFFFFF"
;
ctx
.
fillRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
ctx
.
strokeRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
ctx
.
restore
();
var
img
=
new
Image
(
canvas
.
width
,
canvas
.
height
);
var
svgBlob
=
new
Blob
([
data
],
{
type
:
'image/svg+xml;base64'
});
if
(
platform
.
name
===
"Safari"
)
{
svgBlob
=
new
Blob
([
data
],
{
type
:
'image/svg+xml'
});
}
var
url
=
DOMURL
.
createObjectURL
(
svgBlob
);
img
.
onload
=
function
()
{
try
{
var
a
=
document
.
createElement
(
"a"
),
entityAttributes
=
that
.
entity
&&
that
.
entity
.
attributes
;
a
.
download
=
((
entityAttributes
&&
(
entityAttributes
.
qualifiedName
||
entityAttributes
.
name
)
||
"lineage_export"
)
+
".png"
);
document
.
body
.
appendChild
(
a
);
ctx
.
drawImage
(
img
,
50
,
50
,
canvas
.
width
,
canvas
.
height
);
canvas
.
toBlob
(
function
(
blob
)
{
if
(
!
blob
)
{
Utils
.
notifyError
({
content
:
"There was an error in downloading Lineage!"
});
that
.
toggleLoader
(
loaderTargetDiv
);
return
;
}
a
.
href
=
DOMURL
.
createObjectURL
(
blob
);
if
(
blob
.
size
>
10000000
)
{
Utils
.
notifyWarn
({
content
:
"The Image size is huge, please open the image in a browser!"
});
}
a
.
click
();
that
.
toggleLoader
(
loaderTargetDiv
);
that
.
toggleLoader
(
loaderTargetDiv
);
if
(
platform
.
name
===
'Safari'
)
{
},
LineageUtils
.
refreshGraphForSafari
({
downloadFileName
:
((
entityAttributes
&&
(
entityAttributes
.
qualifiedName
||
entityAttributes
.
name
)
||
"lineage_export"
)
+
".png"
)
edgeEl
:
that
.
$
(
'svg g.node'
)
})
});
}
},
'image/png'
);
$
(
'.hidden-svg'
).
html
(
''
);
createCanvas
.
remove
();
}
catch
(
err
)
{
Utils
.
notifyError
({
content
:
"There was an error in downloading Lineage!"
});
that
.
toggleLoader
(
loaderTargetDiv
);
}
};
img
.
src
=
url
;
},
0
)
},
},
toggleLoader
:
function
(
element
)
{
toggleLoader
:
function
(
element
)
{
if
((
element
).
hasClass
(
'fa-camera'
))
{
if
((
element
).
hasClass
(
'fa-camera'
))
{
...
...
dashboardv3/public/js/views/graph/LineageUtils.js
View file @
ff1a9dc2
...
@@ -16,10 +16,10 @@
...
@@ -16,10 +16,10 @@
* limitations under the License.
* limitations under the License.
*/
*/
define
([
'require'
],
function
(
require
)
{
define
([
'require'
,
'utils/Utils'
],
function
(
require
,
Utils
)
{
'use strict'
;
'use strict'
;
var
Line
ga
eUtils
=
{};
var
Line
ag
eUtils
=
{};
Line
ga
eUtils
.
DragNode
=
function
(
options
)
{
Line
ag
eUtils
.
DragNode
=
function
(
options
)
{
var
that
=
this
,
var
that
=
this
,
g
=
options
.
g
,
g
=
options
.
g
,
svg
=
options
.
svg
,
svg
=
options
.
svg
,
...
@@ -99,7 +99,7 @@ define(['require'], function(require) {
...
@@ -99,7 +99,7 @@ define(['require'], function(require) {
}
}
}
}
});
});
Line
ga
eUtils
.
refreshGraphForIE
({
"edgeEl"
:
edgePathEl
})
Line
ag
eUtils
.
refreshGraphForIE
({
"edgeEl"
:
edgePathEl
})
},
},
translateEdge
:
function
(
e
,
dx
,
dy
)
{
translateEdge
:
function
(
e
,
dx
,
dy
)
{
e
.
points
.
forEach
(
function
(
p
)
{
e
.
points
.
forEach
(
function
(
p
)
{
...
@@ -158,7 +158,7 @@ define(['require'], function(require) {
...
@@ -158,7 +158,7 @@ define(['require'], function(require) {
},
},
}
}
}
}
Line
ga
eUtils
.
refreshGraphForSafari
=
function
(
options
)
{
Line
ag
eUtils
.
refreshGraphForSafari
=
function
(
options
)
{
var
edgePathEl
=
options
.
edgeEl
,
var
edgePathEl
=
options
.
edgeEl
,
IEGraphRenderDone
=
0
;
IEGraphRenderDone
=
0
;
edgePathEl
.
each
(
function
(
argument
)
{
edgePathEl
.
each
(
function
(
argument
)
{
...
@@ -169,7 +169,7 @@ define(['require'], function(require) {
...
@@ -169,7 +169,7 @@ define(['require'], function(require) {
},
500
);
},
500
);
});
});
}
}
Line
ga
eUtils
.
refreshGraphForIE
=
function
(
options
)
{
Line
ag
eUtils
.
refreshGraphForIE
=
function
(
options
)
{
var
edgePathEl
=
options
.
edgeEl
,
var
edgePathEl
=
options
.
edgeEl
,
IEGraphRenderDone
=
0
;
IEGraphRenderDone
=
0
;
edgePathEl
.
each
(
function
(
argument
)
{
edgePathEl
.
each
(
function
(
argument
)
{
...
@@ -187,7 +187,7 @@ define(['require'], function(require) {
...
@@ -187,7 +187,7 @@ define(['require'], function(require) {
},
1000
);
},
1000
);
});
});
}
}
Line
ga
eUtils
.
centerNode
=
function
(
options
)
{
Line
ag
eUtils
.
centerNode
=
function
(
options
)
{
var
nodeID
=
options
.
guid
,
var
nodeID
=
options
.
guid
,
svg
=
options
.
svg
,
svg
=
options
.
svg
,
g
=
options
.
g
,
g
=
options
.
g
,
...
@@ -232,12 +232,12 @@ define(['require'], function(require) {
...
@@ -232,12 +232,12 @@ define(['require'], function(require) {
zoom
.
scale
(
scale
);
zoom
.
scale
(
scale
);
afterCenterZoomed
({
newScale
:
scale
,
newTranslate
:
[
xa
,
ya
]
});
afterCenterZoomed
({
newScale
:
scale
,
newTranslate
:
[
xa
,
ya
]
});
if
(
platform
.
name
===
"IE"
)
{
if
(
platform
.
name
===
"IE"
)
{
Line
ga
eUtils
.
refreshGraphForIE
({
"edgeEl"
:
edgePathEl
})
Line
ag
eUtils
.
refreshGraphForIE
({
"edgeEl"
:
edgePathEl
})
}
}
}
}
}
}
}
}
Line
ga
eUtils
.
onHoverFade
=
function
(
options
)
{
Line
ag
eUtils
.
onHoverFade
=
function
(
options
)
{
var
opacity
=
options
.
opacity
,
var
opacity
=
options
.
opacity
,
d
=
options
.
selectedNode
,
d
=
options
.
selectedNode
,
nodesToHighlight
=
options
.
highlight
,
nodesToHighlight
=
options
.
highlight
,
...
@@ -271,7 +271,7 @@ define(['require'], function(require) {
...
@@ -271,7 +271,7 @@ define(['require'], function(require) {
}
}
}
}
Line
ga
eUtils
.
base64Encode
=
function
(
options
)
{
Line
ag
eUtils
.
base64Encode
=
function
(
options
)
{
var
str
=
options
.
data
,
var
str
=
options
.
data
,
CHARS
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
,
CHARS
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
,
out
=
""
,
out
=
""
,
...
@@ -302,5 +302,235 @@ define(['require'], function(require) {
...
@@ -302,5 +302,235 @@ define(['require'], function(require) {
}
}
return
out
;
return
out
;
}
}
return
LinegaeUtils
;
LineageUtils
.
imgShapeRender
=
function
(
parent
,
bbox
,
node
,
viewOptions
)
{
var
LineageUtilsRef
=
this
,
imageIconPath
=
Utils
.
getEntityIconPath
({
entityData
:
node
}),
imgName
=
imageIconPath
.
split
(
"/"
).
pop
(),
viewGuid
=
viewOptions
.
guid
,
dagreD3
=
viewOptions
.
dagreD3
,
imageObject
=
viewOptions
.
imageObject
,
$defs
=
viewOptions
.
$defs
;
if
(
node
.
isDeleted
)
{
imgName
=
"deleted_"
+
imgName
;
}
if
(
node
.
id
==
viewGuid
)
{
var
currentNode
=
true
}
var
shapeSvg
=
parent
.
append
(
'circle'
)
.
attr
(
'fill'
,
'url(#img_'
+
imgName
+
')'
)
.
attr
(
'r'
,
'24px'
)
.
attr
(
'data-stroke'
,
node
.
id
)
.
attr
(
'stroke-width'
,
"2px"
)
.
attr
(
"class"
,
"nodeImage "
+
(
currentNode
?
"currentNode"
:
(
node
.
isProcess
?
"process"
:
"node"
)));
if
(
currentNode
)
{
shapeSvg
.
attr
(
"stroke"
,
"#fb4200"
)
}
if
(
node
.
isIncomplete
===
true
)
{
parent
.
attr
(
"class"
,
"node isIncomplete show"
);
parent
.
insert
(
"foreignObject"
)
.
attr
(
"x"
,
"-25"
)
.
attr
(
"y"
,
"-25"
)
.
attr
(
"width"
,
"50"
)
.
attr
(
"height"
,
"50"
)
.
append
(
"xhtml:div"
)
.
insert
(
"i"
)
.
attr
(
"class"
,
"fa fa-hourglass-half"
);
}
if
(
$defs
.
select
(
'pattern[id="img_'
+
imgName
+
'"]'
).
empty
())
{
var
$pattern
=
$defs
.
append
(
"pattern"
)
.
attr
(
"x"
,
"0%"
)
.
attr
(
"y"
,
"0%"
)
.
attr
(
"patternUnits"
,
"objectBoundingBox"
)
.
attr
(
"id"
,
"img_"
+
imgName
)
.
attr
(
"width"
,
"100%"
)
.
attr
(
"height"
,
"100%"
)
.
append
(
'image'
)
.
attr
(
"href"
,
function
(
d
)
{
var
that
=
this
;
if
(
node
)
{
var
getImageData
=
function
(
options
)
{
var
imagePath
=
options
.
imagePath
,
ajaxOptions
=
{
"url"
:
imagePath
,
"method"
:
"get"
,
"cache"
:
true
}
if
(
platform
.
name
!==
"IE"
)
{
ajaxOptions
[
"mimeType"
]
=
"text/plain; charset=x-user-defined"
;
}
shapeSvg
.
attr
(
"data-iconpath"
,
imagePath
);
$
.
ajax
(
ajaxOptions
)
.
always
(
function
(
data
,
status
,
xhr
)
{
if
(
data
.
status
==
404
)
{
getImageData
({
"imagePath"
:
Utils
.
getEntityIconPath
({
entityData
:
node
,
errorUrl
:
imagePath
})
});
}
else
if
(
data
)
{
if
(
platform
.
name
!==
"IE"
)
{
imageObject
[
imageIconPath
]
=
'data:image/png;base64,'
+
LineageUtilsRef
.
base64Encode
({
"data"
:
data
});
}
else
{
imageObject
[
imageIconPath
]
=
imagePath
;
}
d3
.
select
(
that
).
attr
(
"xlink:href"
,
imageObject
[
imageIconPath
]);
if
(
imageIconPath
!==
shapeSvg
.
attr
(
"data-iconpath"
))
{
shapeSvg
.
attr
(
"data-iconpathorigin"
,
imageIconPath
);
}
}
});
}
getImageData
({
"imagePath"
:
imageIconPath
});
}
})
.
attr
(
"x"
,
"4"
)
.
attr
(
"y"
,
currentNode
?
"3"
:
"4"
).
attr
(
"width"
,
"40"
)
.
attr
(
"height"
,
"40"
);
}
node
.
intersect
=
function
(
point
)
{
return
dagreD3
.
intersect
.
circle
(
node
,
currentNode
?
24
:
21
,
point
);
};
return
shapeSvg
;
}
LineageUtils
.
arrowPointRender
=
function
(
parent
,
id
,
edge
,
type
,
viewOptions
)
{
var
node
=
parent
.
node
(),
parentNode
=
node
?
node
.
parentNode
:
parent
,
dagreD3
=
viewOptions
.
dagreD3
;
d3
.
select
(
parentNode
).
select
(
'path.path'
).
attr
(
'marker-end'
,
"url(#"
+
id
+
")"
);
var
marker
=
parent
.
append
(
"marker"
)
.
attr
(
"id"
,
id
)
.
attr
(
"viewBox"
,
"0 0 10 10"
)
.
attr
(
"refX"
,
8
)
.
attr
(
"refY"
,
5
)
.
attr
(
"markerUnits"
,
"strokeWidth"
)
.
attr
(
"markerWidth"
,
4
)
.
attr
(
"markerHeight"
,
4
)
.
attr
(
"orient"
,
"auto"
);
var
path
=
marker
.
append
(
"path"
)
.
attr
(
"d"
,
"M 0 0 L 10 5 L 0 10 z"
)
.
style
(
"fill"
,
edge
.
styleObj
.
stroke
);
dagreD3
.
util
.
applyStyle
(
path
,
edge
[
type
+
"Style"
]);
}
LineageUtils
.
BezierCurve
=
function
(
context
)
{
return
{
lineStart
:
function
()
{
this
.
data
=
[];
},
point
:
function
(
x
,
y
)
{
this
.
data
.
push
([
x
,
y
]);
},
lineEnd
:
function
()
{
var
x0
=
this
.
data
[
0
][
0
],
y0
=
this
.
data
[
0
][
1
],
cp1x
=
this
.
data
[
1
][
0
],
cp1y
=
this
.
data
[
1
][
1
],
cp2Obj
=
this
.
data
[
this
.
data
.
length
-
2
],
cp2x
=
cp2Obj
[
0
],
cp2y
=
cp2Obj
[
1
],
axisObj
=
this
.
data
[
this
.
data
.
length
-
1
],
x1
=
axisObj
[
0
],
y1
=
axisObj
[
1
];
context
.
moveTo
(
x0
,
y0
);
context
.
bezierCurveTo
(
cp1x
,
cp1y
,
cp2x
,
cp2y
,
x1
,
y1
);
}
}
}
LineageUtils
.
SaveSvg
=
function
(
e
,
viewOptions
)
{
var
that
=
this
,
svg
=
viewOptions
.
svg
,
svgWidth
=
viewOptions
.
svgWidth
,
svgHeight
=
viewOptions
.
svgHeight
,
downloadFileName
=
viewOptions
.
downloadFileName
,
toggleLoader
=
viewOptions
.
toggleLoader
,
svgClone
=
svg
.
cloneNode
(
true
),
scaleFactor
=
1
;
setTimeout
(
function
()
{
if
(
platform
.
name
===
"Firefox"
)
{
svgClone
.
setAttribute
(
'width'
,
svgWidth
);
svgClone
.
setAttribute
(
'height'
,
svgHeight
);
}
$
(
'.hidden-svg'
).
html
(
svgClone
);
$
(
svgClone
).
find
(
'>g'
).
attr
(
"transform"
,
"scale("
+
scaleFactor
+
")"
);
$
(
svgClone
).
find
(
"foreignObject"
).
remove
();
var
canvasOffset
=
{
x
:
150
,
y
:
150
},
setWidth
=
(
svgClone
.
getBBox
().
width
+
(
canvasOffset
.
x
)),
setHeight
=
(
svgClone
.
getBBox
().
height
+
(
canvasOffset
.
y
)),
xAxis
=
svgClone
.
getBBox
().
x
,
yAxis
=
svgClone
.
getBBox
().
y
;
svgClone
.
attributes
.
viewBox
.
value
=
xAxis
+
","
+
yAxis
+
","
+
setWidth
+
","
+
setHeight
;
var
createCanvas
=
document
.
createElement
(
'canvas'
);
createCanvas
.
id
=
"canvas"
;
createCanvas
.
style
.
display
=
'none'
;
var
body
=
$
(
'body'
).
append
(
createCanvas
),
canvas
=
$
(
'canvas'
)[
0
];
canvas
.
width
=
(
svgClone
.
getBBox
().
width
*
scaleFactor
)
+
canvasOffset
.
x
;
canvas
.
height
=
(
svgClone
.
getBBox
().
height
*
scaleFactor
)
+
canvasOffset
.
y
;
var
ctx
=
canvas
.
getContext
(
'2d'
),
data
=
(
new
XMLSerializer
()).
serializeToString
(
svgClone
),
DOMURL
=
window
.
URL
||
window
.
webkitURL
||
window
;
ctx
.
fillStyle
=
"#FFFFFF"
;
ctx
.
fillRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
ctx
.
strokeRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
ctx
.
restore
();
var
img
=
new
Image
(
canvas
.
width
,
canvas
.
height
);
var
svgBlob
=
new
Blob
([
data
],
{
type
:
'image/svg+xml;base64'
});
if
(
platform
.
name
===
"Safari"
)
{
svgBlob
=
new
Blob
([
data
],
{
type
:
'image/svg+xml'
});
}
var
url
=
DOMURL
.
createObjectURL
(
svgBlob
);
img
.
onload
=
function
()
{
try
{
var
a
=
document
.
createElement
(
"a"
);
a
.
download
=
downloadFileName
;
document
.
body
.
appendChild
(
a
);
ctx
.
drawImage
(
img
,
50
,
50
,
canvas
.
width
,
canvas
.
height
);
canvas
.
toBlob
(
function
(
blob
)
{
if
(
!
blob
)
{
Utils
.
notifyError
({
content
:
"There was an error in downloading Lineage!"
});
toggleLoader
();
return
;
}
a
.
href
=
DOMURL
.
createObjectURL
(
blob
);
if
(
blob
.
size
>
10000000
)
{
Utils
.
notifyWarn
({
content
:
"The Image size is huge, please open the image in a browser!"
});
}
a
.
click
();
toggleLoader
();
if
(
platform
.
name
===
'Safari'
)
{
that
.
refreshGraphForSafari
({
edgeEl
:
that
.
$
(
'svg g.node'
)
});
}
},
'image/png'
);
$
(
'.hidden-svg'
).
html
(
''
);
createCanvas
.
remove
();
}
catch
(
err
)
{
Utils
.
notifyError
({
content
:
"There was an error in downloading Lineage!"
});
toggleLoader
();
}
};
img
.
src
=
url
;
},
0
);
}
return
LineageUtils
;
});
});
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment