graphdb-workbench 2.2.3 → 2.2.4-TR2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{102.7141102a059ef5eba1ea.bundle.js → 102.d52dc777ce7b5de1a30a.bundle.js} +2 -2
- package/dist/{102.7141102a059ef5eba1ea.bundle.js.map → 102.d52dc777ce7b5de1a30a.bundle.js.map} +1 -1
- package/dist/{104.ecd04b9cba294e159ca5.bundle.js → 104.09c8b5802e53cd9dced9.bundle.js} +2 -2
- package/dist/{104.ecd04b9cba294e159ca5.bundle.js.map → 104.09c8b5802e53cd9dced9.bundle.js.map} +1 -1
- package/dist/{107.5972b71755d2f24f6f44.bundle.js → 107.481f84627ac231f49e56.bundle.js} +2 -2
- package/dist/{107.5972b71755d2f24f6f44.bundle.js.map → 107.481f84627ac231f49e56.bundle.js.map} +1 -1
- package/dist/108.d61b0e4a54e1d0e6550d.bundle.js +2 -0
- package/dist/{108.162ea156d1fc4ad2525f.bundle.js.map → 108.d61b0e4a54e1d0e6550d.bundle.js.map} +1 -1
- package/dist/{11.f7cb87be309f6bd00aa5.bundle.js → 11.89d3de4f2e80e373ecf2.bundle.js} +3 -3
- package/dist/{11.f7cb87be309f6bd00aa5.bundle.js.map → 11.89d3de4f2e80e373ecf2.bundle.js.map} +1 -1
- package/dist/{115.abb22e52d5886ed645c1.bundle.js → 115.36a12f5a0804f33cb569.bundle.js} +2 -2
- package/dist/{115.abb22e52d5886ed645c1.bundle.js.map → 115.36a12f5a0804f33cb569.bundle.js.map} +1 -1
- package/dist/{117.ed07ffe3ff3bead9b43b.bundle.js → 117.9c58e6155d7467c45284.bundle.js} +2 -2
- package/dist/{117.ed07ffe3ff3bead9b43b.bundle.js.map → 117.9c58e6155d7467c45284.bundle.js.map} +1 -1
- package/dist/{118.57c922b04fbcf0d65d1c.bundle.js → 118.7cdbf2a7be83e4cdc7e2.bundle.js} +2 -2
- package/dist/{118.57c922b04fbcf0d65d1c.bundle.js.map → 118.7cdbf2a7be83e4cdc7e2.bundle.js.map} +1 -1
- package/dist/{119.7b75484ef37c16039937.bundle.js → 119.f7c106efa2582220baa7.bundle.js} +2 -2
- package/dist/{119.7b75484ef37c16039937.bundle.js.map → 119.f7c106efa2582220baa7.bundle.js.map} +1 -1
- package/dist/{12.eb41e4af80fee51d893c.bundle.js → 12.b4ac6d1ff3d669d3e63f.bundle.js} +2 -2
- package/dist/{12.eb41e4af80fee51d893c.bundle.js.map → 12.b4ac6d1ff3d669d3e63f.bundle.js.map} +1 -1
- package/dist/{120.0f42d5a0967c1f4636ca.bundle.js → 120.d20d9e20e2d3c5476f8d.bundle.js} +2 -2
- package/dist/{120.0f42d5a0967c1f4636ca.bundle.js.map → 120.d20d9e20e2d3c5476f8d.bundle.js.map} +1 -1
- package/dist/{121.f85253eb7e057efdb05d.bundle.js → 121.dc96efcaf4dc5e63f58d.bundle.js} +2 -2
- package/dist/{121.f85253eb7e057efdb05d.bundle.js.map → 121.dc96efcaf4dc5e63f58d.bundle.js.map} +1 -1
- package/dist/{126.349ebcea493c77fecf7e.bundle.js → 126.4c2fb40676d2508bbc65.bundle.js} +2 -2
- package/dist/{126.349ebcea493c77fecf7e.bundle.js.map → 126.4c2fb40676d2508bbc65.bundle.js.map} +1 -1
- package/dist/{13.bc3607638ad1e2068125.bundle.js → 13.f6b8f9a2288e2485ee20.bundle.js} +2 -2
- package/dist/{13.bc3607638ad1e2068125.bundle.js.map → 13.f6b8f9a2288e2485ee20.bundle.js.map} +1 -1
- package/dist/148.45985ae23de642595544.bundle.js +1 -1
- package/dist/148.45985ae23de642595544.bundle.js.map +1 -1
- package/dist/16.2ca98f5bec0fae221cef.bundle.js +3 -0
- package/dist/{16.cd06772f9e031d37db03.bundle.js.map → 16.2ca98f5bec0fae221cef.bundle.js.map} +1 -1
- package/dist/{17.45b5c34f6c73bde1113d.bundle.js → 17.b19a2d3870590d21e8e9.bundle.js} +2 -2
- package/dist/{17.45b5c34f6c73bde1113d.bundle.js.map → 17.b19a2d3870590d21e8e9.bundle.js.map} +1 -1
- package/dist/{19.92f27dd146df127e8d6e.bundle.js → 19.34c180252e48207f01b4.bundle.js} +3 -3
- package/dist/{19.92f27dd146df127e8d6e.bundle.js.map → 19.34c180252e48207f01b4.bundle.js.map} +1 -1
- package/dist/20.9e9e388a98851c65f8f7.bundle.js +2 -0
- package/dist/{20.4eb25ede434dc329ecf1.bundle.js.map → 20.9e9e388a98851c65f8f7.bundle.js.map} +1 -1
- package/dist/21.8434e1ecb6fcfa06e1f1.bundle.js +2 -0
- package/dist/21.8434e1ecb6fcfa06e1f1.bundle.js.map +1 -0
- package/dist/{23.16fc17b0a8983ce3d809.bundle.js → 23.22e3720d741ee87c8108.bundle.js} +2 -2
- package/dist/{23.16fc17b0a8983ce3d809.bundle.js.map → 23.22e3720d741ee87c8108.bundle.js.map} +1 -1
- package/dist/{24.04d84edbd8f93d036633.bundle.js → 24.63acd0fc451fc797ff79.bundle.js} +2 -2
- package/dist/{24.04d84edbd8f93d036633.bundle.js.map → 24.63acd0fc451fc797ff79.bundle.js.map} +1 -1
- package/dist/{26.3a642e64c7803f3b32f1.bundle.js → 26.194b2d09daa679b7e09c.bundle.js} +2 -2
- package/dist/{26.3a642e64c7803f3b32f1.bundle.js.map → 26.194b2d09daa679b7e09c.bundle.js.map} +1 -1
- package/dist/27.35fe33bb9622c2e29c43.bundle.js +2 -0
- package/dist/{27.fef157d9275358c9f1a0.bundle.js.map → 27.35fe33bb9622c2e29c43.bundle.js.map} +1 -1
- package/dist/{29.a1b30610d7960a86b1cb.bundle.js → 29.e4eadb676659c5d6e44b.bundle.js} +3 -3
- package/dist/{29.a1b30610d7960a86b1cb.bundle.js.map → 29.e4eadb676659c5d6e44b.bundle.js.map} +1 -1
- package/dist/{30.3a05504ff287ca6df711.bundle.js → 30.0fb90b3cdf78fcde6251.bundle.js} +2 -2
- package/dist/{30.3a05504ff287ca6df711.bundle.js.map → 30.0fb90b3cdf78fcde6251.bundle.js.map} +1 -1
- package/dist/{31.13d5a8e9834cd5db589c.bundle.js → 31.8dd9fe71d36bd04a0433.bundle.js} +2 -2
- package/dist/{31.13d5a8e9834cd5db589c.bundle.js.map → 31.8dd9fe71d36bd04a0433.bundle.js.map} +1 -1
- package/dist/{32.59a7369287d15e8b9ab6.bundle.js → 32.8e1c25a47debdf5145d8.bundle.js} +2 -2
- package/dist/{32.59a7369287d15e8b9ab6.bundle.js.map → 32.8e1c25a47debdf5145d8.bundle.js.map} +1 -1
- package/dist/33.89b51420b48880728b96.bundle.js +2 -0
- package/dist/33.89b51420b48880728b96.bundle.js.map +1 -0
- package/dist/{35.fe688fc32270724c391d.bundle.js → 35.a9846fba95e98a294957.bundle.js} +2 -2
- package/dist/{35.fe688fc32270724c391d.bundle.js.map → 35.a9846fba95e98a294957.bundle.js.map} +1 -1
- package/dist/{36.7da22f08c8e850885cc5.bundle.js → 36.4dbd0f9007404b0adbe2.bundle.js} +2 -2
- package/dist/{36.7da22f08c8e850885cc5.bundle.js.map → 36.4dbd0f9007404b0adbe2.bundle.js.map} +1 -1
- package/dist/37.ac99eb00fe71266c5bff.bundle.js +2 -0
- package/dist/{37.8a9855206d5ae5eba9be.bundle.js.map → 37.ac99eb00fe71266c5bff.bundle.js.map} +1 -1
- package/dist/{39.0eebc4b972cff879c1c9.bundle.js → 39.8f8ae5c232bd2f023e7c.bundle.js} +2 -2
- package/dist/{39.0eebc4b972cff879c1c9.bundle.js.map → 39.8f8ae5c232bd2f023e7c.bundle.js.map} +1 -1
- package/dist/4.5391679fa01c55e842cc.bundle.js +2 -0
- package/dist/4.5391679fa01c55e842cc.bundle.js.map +1 -0
- package/dist/{40.10f42e3f6d8d87bd3221.bundle.js → 40.50f010a0a0ce99da5092.bundle.js} +2 -2
- package/dist/{40.10f42e3f6d8d87bd3221.bundle.js.map → 40.50f010a0a0ce99da5092.bundle.js.map} +1 -1
- package/dist/{41.368780c518c3f6cab4b7.bundle.js → 41.d09e0f01eac3492e3376.bundle.js} +2 -2
- package/dist/{41.368780c518c3f6cab4b7.bundle.js.map → 41.d09e0f01eac3492e3376.bundle.js.map} +1 -1
- package/dist/{42.1a48ae582180fa6374f9.bundle.js → 42.9561ff9cd77df0f86a91.bundle.js} +2 -2
- package/dist/{42.1a48ae582180fa6374f9.bundle.js.map → 42.9561ff9cd77df0f86a91.bundle.js.map} +1 -1
- package/dist/{43.64268be8880acd392fee.bundle.js → 43.0400aae23dac518b78ec.bundle.js} +2 -2
- package/dist/{43.64268be8880acd392fee.bundle.js.map → 43.0400aae23dac518b78ec.bundle.js.map} +1 -1
- package/dist/{53.58a23efc22865c67d57d.bundle.js → 53.54b20545d5504efa8958.bundle.js} +2 -2
- package/dist/{53.58a23efc22865c67d57d.bundle.js.map → 53.54b20545d5504efa8958.bundle.js.map} +1 -1
- package/dist/{54.1e2e99cd8cdf20b99a4f.bundle.js → 54.81f97307e31f5eabb5f0.bundle.js} +2 -2
- package/dist/{54.1e2e99cd8cdf20b99a4f.bundle.js.map → 54.81f97307e31f5eabb5f0.bundle.js.map} +1 -1
- package/dist/{55.693c1a0dd775181e1e29.bundle.js → 55.e8df33b84ca578a9a633.bundle.js} +2 -2
- package/dist/{55.693c1a0dd775181e1e29.bundle.js.map → 55.e8df33b84ca578a9a633.bundle.js.map} +1 -1
- package/dist/{56.62459de7af529d956b75.bundle.js → 56.d765faad673f618d41b0.bundle.js} +2 -2
- package/dist/{56.62459de7af529d956b75.bundle.js.map → 56.d765faad673f618d41b0.bundle.js.map} +1 -1
- package/dist/{60.2cb24e628b92cb3e0210.bundle.js → 60.f13766507ec5f29fde78.bundle.js} +2 -2
- package/dist/{60.2cb24e628b92cb3e0210.bundle.js.map → 60.f13766507ec5f29fde78.bundle.js.map} +1 -1
- package/dist/{65.6c12c48ac0d6f57a5079.bundle.js → 65.aa9736b7aad2582ca7ea.bundle.js} +2 -2
- package/dist/{65.6c12c48ac0d6f57a5079.bundle.js.map → 65.aa9736b7aad2582ca7ea.bundle.js.map} +1 -1
- package/dist/{67.5ae0610f77a1455ce92b.bundle.js → 67.e7bd652fadf93be1fbae.bundle.js} +2 -2
- package/dist/{67.5ae0610f77a1455ce92b.bundle.js.map → 67.e7bd652fadf93be1fbae.bundle.js.map} +1 -1
- package/dist/{69.90776e70cb361d1ac6d5.bundle.js → 69.6b915e6a7a9c36a78e2b.bundle.js} +2 -2
- package/dist/{69.90776e70cb361d1ac6d5.bundle.js.map → 69.6b915e6a7a9c36a78e2b.bundle.js.map} +1 -1
- package/dist/{71.3e927496e6e4175a3127.bundle.js → 71.624ca936339bf337e46a.bundle.js} +2 -2
- package/dist/{71.3e927496e6e4175a3127.bundle.js.map → 71.624ca936339bf337e46a.bundle.js.map} +1 -1
- package/dist/{72.bc99fbec188b4e49aa53.bundle.js → 72.3a5620a182219e9ea05d.bundle.js} +2 -2
- package/dist/{72.bc99fbec188b4e49aa53.bundle.js.map → 72.3a5620a182219e9ea05d.bundle.js.map} +1 -1
- package/dist/{73.40b5cbae08c7f3a58438.bundle.js → 73.f162e544378754078826.bundle.js} +2 -2
- package/dist/{73.40b5cbae08c7f3a58438.bundle.js.map → 73.f162e544378754078826.bundle.js.map} +1 -1
- package/dist/{74.cc42a1dcef7e9b830354.bundle.js → 74.7595755907badb1a99b8.bundle.js} +2 -2
- package/dist/{74.cc42a1dcef7e9b830354.bundle.js.map → 74.7595755907badb1a99b8.bundle.js.map} +1 -1
- package/dist/{75.31d1a4766c80c90b2afc.bundle.js → 75.4cc7ff534d56a05c578a.bundle.js} +2 -2
- package/dist/{75.31d1a4766c80c90b2afc.bundle.js.map → 75.4cc7ff534d56a05c578a.bundle.js.map} +1 -1
- package/dist/{76.89d209ce08efa7429e87.bundle.js → 76.cd0cfea4c96e88230dbe.bundle.js} +2 -2
- package/dist/{76.89d209ce08efa7429e87.bundle.js.map → 76.cd0cfea4c96e88230dbe.bundle.js.map} +1 -1
- package/dist/{77.64c49e9e99b0ae3fbbca.bundle.js → 77.df7767b1a0a3a0efa202.bundle.js} +2 -2
- package/dist/{77.64c49e9e99b0ae3fbbca.bundle.js.map → 77.df7767b1a0a3a0efa202.bundle.js.map} +1 -1
- package/dist/{79.0fbaedffc1f583a6064f.bundle.js → 79.4d64b377b0308809136f.bundle.js} +2 -2
- package/dist/{79.0fbaedffc1f583a6064f.bundle.js.map → 79.4d64b377b0308809136f.bundle.js.map} +1 -1
- package/dist/{80.6d489af9482e358c8dd8.bundle.js → 80.36e424031127d1743f20.bundle.js} +2 -2
- package/dist/{80.6d489af9482e358c8dd8.bundle.js.map → 80.36e424031127d1743f20.bundle.js.map} +1 -1
- package/dist/{94.94158487a9024ff3a623.bundle.js → 94.b1ccdd207229ae57569f.bundle.js} +2 -2
- package/dist/{94.94158487a9024ff3a623.bundle.js.map → 94.b1ccdd207229ae57569f.bundle.js.map} +1 -1
- package/dist/{97.48e14b67906b4d61a1b1.bundle.js → 97.951e03ffd2d5a10f868d.bundle.js} +2 -2
- package/dist/{97.48e14b67906b4d61a1b1.bundle.js.map → 97.951e03ffd2d5a10f868d.bundle.js.map} +1 -1
- package/dist/{98.cc7086155b76601af017.bundle.js → 98.745b4c457214d4189d7a.bundle.js} +2 -2
- package/dist/{98.cc7086155b76601af017.bundle.js.map → 98.745b4c457214d4189d7a.bundle.js.map} +1 -1
- package/dist/{bundle.d34ddcc40dd190254f1c.bundle.js → bundle.651116fe2383a66f32c9.bundle.js} +21 -21
- package/dist/{bundle.d34ddcc40dd190254f1c.bundle.js.map → bundle.651116fe2383a66f32c9.bundle.js.map} +1 -1
- package/dist/index.html +3 -3
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/pages/autocomplete.html +1 -1
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/cluster-management/clusterInfo.html +3 -3
- package/dist/pages/create-index.html +4 -4
- package/dist/pages/dependencies.html +1 -1
- package/dist/pages/domainRangeInfo.html +2 -2
- package/dist/pages/edit.html +1 -1
- package/dist/pages/explore.html +1 -1
- package/dist/pages/export.html +1 -1
- package/dist/pages/find.html +1 -1
- package/dist/pages/graph-config/saveGraphConfig.html +11 -11
- package/dist/pages/graphs-visualizations.html +7 -7
- package/dist/pages/guides.html +1 -1
- package/dist/pages/import.html +1 -1
- package/dist/pages/jdbc-create.html +5 -5
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +2 -2
- package/dist/pages/namespaces.html +2 -2
- package/dist/pages/plugins.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +7 -7
- package/dist/pages/rdfrank.html +2 -2
- package/dist/pages/repositories.html +2 -2
- package/dist/pages/repository.html +2 -2
- package/dist/pages/similarity-indexes.html +1 -1
- package/dist/pages/sparql-template-create.html +5 -5
- package/dist/pages/sparql.html +3 -3
- package/dist/pages/webapi.html +2 -2
- package/dist/res/swagger/index.html +27 -27
- package/package.json +1 -1
- package/dist/108.162ea156d1fc4ad2525f.bundle.js +0 -2
- package/dist/16.cd06772f9e031d37db03.bundle.js +0 -3
- package/dist/20.4eb25ede434dc329ecf1.bundle.js +0 -2
- package/dist/21.5586732af2e5cec0d05a.bundle.js +0 -2
- package/dist/21.5586732af2e5cec0d05a.bundle.js.map +0 -1
- package/dist/27.fef157d9275358c9f1a0.bundle.js +0 -2
- package/dist/33.fde8076c81c87c25c367.bundle.js +0 -2
- package/dist/33.fde8076c81c87c25c367.bundle.js.map +0 -1
- package/dist/37.8a9855206d5ae5eba9be.bundle.js +0 -2
- package/dist/4.ca3eb6b5da0890c0abe0.bundle.js +0 -2
- package/dist/4.ca3eb6b5da0890c0abe0.bundle.js.map +0 -1
package/dist/{30.3a05504ff287ca6df711.bundle.js.map → 30.0fb90b3cdf78fcde6251.bundle.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/lib/d3-tip/d3-tip-patch.js","webpack:///./src/js/angular/clustermanagement/cluster-drawing.service.js","webpack:///./src/js/angular/clustermanagement/directives.js"],"names":["direction","offset","html","node","initNode","svg","point","target","customPosition","tip","vis","el","tagName","toLowerCase","ownerSVGElement","createSVGPoint","document","body","appendChild","show","args","Array","prototype","slice","call","arguments","length","SVGElement","pop","coords","content","apply","this","poffset","dir","nodel","getNodeEl","i","directions","scrollTop","documentElement","scrollLeft","customPos","style","opacity","classed","direction_callbacks","get","top","left","hide","attr","n","v","d3","selection","functor","destroy","remove","map","bbox","getScreenBBox","y","offsetHeight","x","offsetWidth","s","e","w","nw","ne","sw","se","keys","select","createElement","position","targetel","event","getScreenCTM","parentNode","matrix","tbbox","getBBox","width","height","matrixTransform","clusterColors","ontoOrange","ontoBlue","ontoGreen","ontoGrey","createClusterSvgElement","element","append","createClusterZone","parent","clusterZone","setCreateClusterZone","hasCluster","translationsMap","selectAll","textGroup","text","no_cluster_configured","create_cluster_btn","updateClusterZoneLabels","moveElement","createNodes","nodesDataBinding","nodeRadius","isLegend","nodeGroup","enter","radius","_s32","Math","sqrt","points","data","line","createHexagon","exit","nodeElements","nodeTextHost","addHostnameToNodes","updateNodes","nodes","getNodeIconType","updateNodesIcon","nodeState","LEADER","FOLLOWER","CANDIDATE","updateNodesClasses","each","d","labelNode","hostname","updateNodesHostnameText","NO_CONNECTION","OUT_OF_SYNC","READ_ONLY","RESTRICTED","createLinks","linksDataBinding","updateLinks","setLinkColor","setLinkStyle","link","source","find","address","deltaX","deltaY","dist","normX","normY","sourceX","sourceY","targetX","targetY","getLinkCoordinates","status","IN_SYNC","SYNCING","positionNodesOnClusterZone","clusterZoneX","clusterZoneY","clusterZoneRadius","index","theta","PI","cos","sin","navigationBarWidth","clusterManagementDirectives","angular","module","legend_node_state","legend_link_state","node_state_leader","node_state_follower","node_state_candidate","node_state_no_cluster","node_state_out_of_sync","node_state_no_connection","node_state_read_only","node_state_restricted","link_state_in_sync","link_state_syncing","link_state_out_of_sync","idTranslationKeyMap","node_state","link_state","directive","$window","LocalStorageAdapter","LSKeys","UriUtils","$translate","$rootScope","restrict","scope","updateTranslations","Object","forEach","key","instant","getWindowWidth","collapsed","MENU_STATE","max","floor","innerWidth","getWindowHeight","innerHeight","legendNodesGroup","legendWidth","legendHeight","showLegend","$on","elementId","getLabelFor","createLegendGroup","createClusterLegend","updateLabels","legendTooltip","nodesGroup","linksGroup","tooltipElement","min","getBoundingClientRect","toolTip","showLegendTooltip","hideLegendTooltip","legendNodes","getLegendNodes","legendLinks","getLegendLinks","customText","linkTypeText","linkTypeKey","translateLegendLinksAndNodes","nodeStateLabel","legendPadding","linkStateLabel","nodeStateLabelY","legendNodeData","on","stopPropagation","row","id","linkWidth","endX","linkG","positionLegend","resizeClusterComponent","plot","clusterModel","mouseupCallback","$apply","showCreateClusterDialog","setClusterZoneType","_","cloneDeep","links","shortenIri","endpoint","nodeData","childContext","selectNode","tooltip","windowWidth","$","window","pageX","pageY","linksData","drawLinks","redraw","resize","toggleLegend","push","NO_CLUSTER"],"mappings":"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","file":"30.3a05504ff287ca6df711.bundle.js","sourcesContent":["// d3.tip\n// Copyright (c) 2013 Justin Palmer\n//\n// Tooltips for d3.js SVG visualizations\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module with d3 as a dependency.\n define([], factory)\n } else if (typeof module === 'object' && module.exports) {\n // CommonJS\n module.exports = function(d3) {\n d3.tip = factory(d3)\n return d3.tip\n }\n } else {\n // Browser global.\n root.d3.tip = factory(root.d3)\n }\n}(this, function () {\n // Public - contructs a new tooltip\n //\n // Returns a tip\n return function() {\n var direction = d3_tip_direction,\n offset = d3_tip_offset,\n html = d3_tip_html,\n node = initNode(),\n svg = null,\n point = null,\n target = null,\n customPosition = null\n\n function tip(vis) {\n svg = getSVGNode(vis)\n point = svg.createSVGPoint()\n document.body.appendChild(node)\n }\n\n // Public - show the tooltip on the screen\n //\n // Returns a tip\n tip.show = function() {\n var args = Array.prototype.slice.call(arguments)\n if(args[args.length - 1] instanceof SVGElement) target = args.pop()\n\n var content = html.apply(this, args),\n poffset = offset.apply(this, args),\n dir = direction.apply(this, args),\n nodel = getNodeEl(),\n i = directions.length,\n coords,\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft,\n customPos = customPosition.apply(this, args)\n\n nodel.html(content)\n .style({ opacity: 1, 'pointer-events': 'all' })\n\n while(i--) nodel.classed(directions[i], false)\n coords = direction_callbacks.get(dir).apply(this)\n\n if (customPos) {\n nodel.style(customPos)\n } else {\n nodel.classed(dir, true).style({\n top: (coords.top + poffset[0]) + scrollTop + 'px',\n left: (coords.left + poffset[1]) + scrollLeft + 'px'\n })\n }\n\n return tip\n }\n\n // Public - hide the tooltip\n //\n // Returns a tip\n tip.hide = function() {\n var nodel = getNodeEl()\n nodel.style({ opacity: 0, 'pointer-events': 'none' })\n return tip\n }\n\n // Public: Proxy attr calls to the d3 tip container. Sets or gets attribute value.\n //\n // n - name of the attribute\n // v - value of the attribute\n //\n // Returns tip or attribute value\n tip.attr = function(n, v) {\n if (arguments.length < 2 && typeof n === 'string') {\n return getNodeEl().attr(n)\n } else {\n var args = Array.prototype.slice.call(arguments)\n d3.selection.prototype.attr.apply(getNodeEl(), args)\n }\n\n return tip\n }\n\n // Public: Proxy style calls to the d3 tip container. Sets or gets a style value.\n //\n // n - name of the property\n // v - value of the property\n //\n // Returns tip or style property value\n tip.style = function(n, v) {\n if (arguments.length < 2 && typeof n === 'string') {\n return getNodeEl().style(n)\n } else {\n var args = Array.prototype.slice.call(arguments)\n d3.selection.prototype.style.apply(getNodeEl(), args)\n }\n\n return tip\n }\n\n // Public: Set or get the direction of the tooltip\n //\n // v - One of n(north), s(south), e(east), or w(west), nw(northwest),\n // sw(southwest), ne(northeast) or se(southeast)\n //\n // Returns tip or direction\n tip.direction = function(v) {\n if (!arguments.length) return direction\n direction = v == null ? v : d3.functor(v)\n\n return tip\n }\n\n // Public: Sets or gets the offset of the tip\n //\n // v - Array of [x, y] offset\n //\n // Returns offset or\n tip.offset = function(v) {\n if (!arguments.length) return offset\n offset = v == null ? v : d3.functor(v)\n\n return tip\n }\n\n // Public: sets or gets the html value of the tooltip\n //\n // v - String value of the tip\n //\n // Returns html value or tip\n tip.html = function(v) {\n if (!arguments.length) return html\n html = v == null ? v : d3.functor(v)\n\n return tip\n }\n\n tip.customPosition = function(v) {\n if (!arguments.length) return customPosition\n customPosition = v == null ? v : d3.functor(v)\n\n return tip\n }\n\n // Public: destroys the tooltip and removes it from the DOM\n //\n // Returns a tip\n tip.destroy = function() {\n if(node) {\n getNodeEl().remove();\n node = null;\n }\n return tip;\n }\n\n function d3_tip_direction() { return 'n' }\n function d3_tip_offset() { return [0, 0] }\n function d3_tip_html() { return ' ' }\n\n var direction_callbacks = d3.map({\n n: direction_n,\n s: direction_s,\n e: direction_e,\n w: direction_w,\n nw: direction_nw,\n ne: direction_ne,\n sw: direction_sw,\n se: direction_se\n }),\n\n directions = direction_callbacks.keys()\n\n function direction_n() {\n var bbox = getScreenBBox()\n return {\n top: bbox.n.y - node.offsetHeight,\n left: bbox.n.x - node.offsetWidth / 2\n }\n }\n\n function direction_s() {\n var bbox = getScreenBBox()\n return {\n top: bbox.s.y,\n left: bbox.s.x - node.offsetWidth / 2\n }\n }\n\n function direction_e() {\n var bbox = getScreenBBox()\n return {\n top: bbox.e.y - node.offsetHeight / 2,\n left: bbox.e.x\n }\n }\n\n function direction_w() {\n var bbox = getScreenBBox()\n return {\n top: bbox.w.y - node.offsetHeight / 2,\n left: bbox.w.x - node.offsetWidth\n }\n }\n\n function direction_nw() {\n var bbox = getScreenBBox()\n return {\n top: bbox.nw.y - node.offsetHeight,\n left: bbox.nw.x - node.offsetWidth\n }\n }\n\n function direction_ne() {\n var bbox = getScreenBBox()\n return {\n top: bbox.ne.y - node.offsetHeight,\n left: bbox.ne.x\n }\n }\n\n function direction_sw() {\n var bbox = getScreenBBox()\n return {\n top: bbox.sw.y,\n left: bbox.sw.x - node.offsetWidth\n }\n }\n\n function direction_se() {\n var bbox = getScreenBBox()\n return {\n top: bbox.se.y,\n left: bbox.e.x\n }\n }\n\n function initNode() {\n var node = d3.select(document.createElement('div'))\n node.style({\n position: 'absolute',\n top: 0,\n opacity: 0,\n 'pointer-events': 'none',\n 'box-sizing': 'border-box'\n })\n\n return node.node()\n }\n\n function getSVGNode(el) {\n el = el.node()\n if(el.tagName.toLowerCase() === 'svg')\n return el\n\n return el.ownerSVGElement\n }\n\n function getNodeEl() {\n if(node === null) {\n node = initNode();\n // re-add node to DOM\n document.body.appendChild(node);\n };\n return d3.select(node);\n }\n\n // Private - gets the screen coordinates of a shape\n //\n // Given a shape on the screen, will return an SVGPoint for the directions\n // n(north), s(south), e(east), w(west), ne(northeast), se(southeast), nw(northwest),\n // sw(southwest).\n //\n // +-+-+\n // | |\n // + +\n // | |\n // +-+-+\n //\n // Returns an Object {n, s, e, w, nw, sw, ne, se}\n function getScreenBBox() {\n var targetel = target || d3.event.target;\n\n while ('undefined' === typeof targetel.getScreenCTM && 'undefined' === targetel.parentNode) {\n targetel = targetel.parentNode;\n }\n\n var bbox = {},\n matrix = targetel.getScreenCTM(),\n tbbox = targetel.getBBox(),\n width = tbbox.width,\n height = tbbox.height,\n x = tbbox.x,\n y = tbbox.y\n\n point.x = x\n point.y = y\n bbox.nw = point.matrixTransform(matrix)\n point.x += width\n bbox.ne = point.matrixTransform(matrix)\n point.y += height\n bbox.se = point.matrixTransform(matrix)\n point.x -= width\n bbox.sw = point.matrixTransform(matrix)\n point.y -= height / 2\n bbox.w = point.matrixTransform(matrix)\n point.x += width\n bbox.e = point.matrixTransform(matrix)\n point.x -= width / 2\n point.y -= height / 2\n bbox.n = point.matrixTransform(matrix)\n point.y += height\n bbox.s = point.matrixTransform(matrix)\n\n return bbox\n }\n\n return tip\n };\n\n}));","import {LinkState, NodeState} from \"./controllers\";\n\nexport const clusterColors = {\n ontoOrange: 'var(--onto-orange)',\n ontoBlue: 'var(--onto-blue)',\n ontoGreen: 'var(--onto-green)',\n ontoGrey: 'var(--onto-grey)'\n};\n\nexport function createClusterSvgElement(element) {\n return d3.select(element)\n .append('svg');\n}\n\nexport function createClusterZone(parent) {\n const clusterZone = parent.append('g');\n clusterZone\n .append(\"circle\")\n .classed('cluster-zone', true)\n .style('fill', 'transparent')\n .style('stroke-width', '2');\n return clusterZone;\n}\n\nexport function setCreateClusterZone(hasCluster, clusterZone, translationsMap) {\n clusterZone\n .select('.cluster-zone')\n .classed('no-cluster', !hasCluster);\n\n if (hasCluster) {\n clusterZone.selectAll('#no-cluster-zone').remove();\n } else {\n const textGroup = clusterZone\n .append('g')\n .attr(\"id\", \"no-cluster-zone\");\n textGroup\n .append('text')\n .attr('id', 'no-cluster-label')\n .text(translationsMap.no_cluster_configured || 'No cluster group configured')\n .attr('y', -50)\n .classed('h2', true)\n .style('text-anchor', \"middle\");\n textGroup.append('text')\n .attr('id', 'create-cluster-label')\n .classed('h3', true)\n .text(translationsMap.create_cluster_btn || 'Click here to create a cluster')\n .style('text-anchor', \"middle\");\n textGroup.append('text')\n .attr('y', 130)\n .attr('class', 'icon-any repo')\n .attr('fill', clusterColors.ontoOrange)\n .style('text-anchor', \"middle\")\n .classed('settings-icon', true)\n .text(\"\\ue92b\");\n }\n}\n\nexport function updateClusterZoneLabels(hasCluster, clusterZone, translationsMap) {\n if (hasCluster) {\n return;\n }\n clusterZone.select('#no-cluster-zone #no-cluster-label')\n .text(translationsMap.no_cluster_configured);\n clusterZone.select('#no-cluster-zone #create-cluster-label')\n .text(translationsMap.create_cluster_btn);\n}\n\nexport function moveElement(element, x, y) {\n element.attr('transform', () => {\n return `translate(${x}, ${y})`;\n });\n}\n\nexport function createNodes(nodesDataBinding, nodeRadius, isLegend) {\n const nodeGroup = nodesDataBinding.enter()\n .append('g')\n .attr('id', 'node-group')\n .classed('legend', isLegend);\n\n createHexagon(nodeGroup, nodeRadius);\n nodesDataBinding.exit().remove();\n\n nodeGroup\n .append('text')\n .attr('class', 'icon-any node-icon');\n\n addHostnameToNodes(nodeGroup, nodeRadius, isLegend);\n}\n\nfunction addHostnameToNodes(nodeElements, nodeRadius, isLegend) {\n const nodeTextHost = nodeElements.append('g');\n\n if (isLegend) {\n nodeTextHost.append('foreignObject')\n .attr('y', nodeRadius)\n .attr('x', -nodeRadius)\n .attr('width', nodeRadius * 2)\n .attr('height', 10)\n .attr('class', 'label-wrapper')\n .append('xhtml:div')\n .attr('class', 'id id-host');\n } else {\n nodeTextHost\n .append('rect')\n .attr('class', 'id-host-background')\n .attr('rx', 6);\n\n nodeTextHost\n .append('text')\n .attr('y', nodeRadius + 10)\n .attr('class', 'id id-host')\n .style('text-anchor', 'middle');\n }\n}\n\nexport function updateNodes(nodes) {\n updateNodesIcon(nodes);\n updateNodesClasses(nodes);\n updateNodesHostnameText(nodes);\n}\n\nfunction updateNodesClasses(nodes) {\n nodes\n .select('.node.member')\n .classed('leader', (node) => node.nodeState === NodeState.LEADER)\n .classed('follower', (node) => node.nodeState === NodeState.FOLLOWER)\n .classed('candidate', (node) => node.nodeState === NodeState.CANDIDATE)\n .classed('other', (node) => {\n return node.nodeState !== NodeState.LEADER &&\n node.nodeState !== NodeState.FOLLOWER &&\n node.nodeState !== NodeState.CANDIDATE;\n });\n}\n\nfunction updateNodesIcon(nodes) {\n nodes\n .select('.icon-any.node-icon')\n .text(getNodeIconType);\n}\n\nfunction getNodeIconType(node) {\n if (node.nodeState === NodeState.LEADER) {\n return '\\ue935';\n } else if (node.nodeState === NodeState.FOLLOWER) {\n return '\\ue963';\n } else if (node.nodeState === NodeState.CANDIDATE) {\n return '\\ue914';\n } else if (node.nodeState === NodeState.NO_CONNECTION) {\n return '\\ue931';\n } else if (node.nodeState === NodeState.OUT_OF_SYNC) {\n return '\\ue920';\n } else if (node.nodeState === NodeState.READ_ONLY) {\n return '\\ue95c';\n } else if (node.nodeState === NodeState.RESTRICTED) {\n return '\\ue933';\n }\n return '';\n}\n\nfunction updateNodesHostnameText(nodes) {\n nodes\n .select('.id.id-host')\n .each(function (d) {\n d.labelNode = this;\n })\n .text(function (d) {\n return d.hostname;\n });\n\n // Add padding styling to text background. left/right +5. top/bottom +1\n nodes\n .select('.id-host-background')\n .attr('width', function (d) {\n return d3.select(d.labelNode).node().getBBox().width + 10;\n })\n .attr('height', function (d) {\n return d3.select(d.labelNode).node().getBBox().height + 2;\n })\n .attr('x', function (d) {\n return d3.select(d.labelNode).node().getBBox().x - 5;\n })\n .attr('y', function (d) {\n return d3.select(d.labelNode).node().getBBox().y - 1;\n })\n .attr('fill', '#EEEEEE');\n}\n\nexport function createLinks(linksDataBinding) {\n linksDataBinding.enter()\n .append('path')\n .classed('link', true);\n\n linksDataBinding.exit().remove();\n}\n\nexport function updateLinks(linksDataBinding, nodes) {\n linksDataBinding\n .attr('stroke', setLinkColor)\n .style('stroke-dasharray', setLinkStyle)\n .attr('d', (link) => getLinkCoordinates(link, nodes));\n}\n\nexport function setLinkColor(link) {\n if (link.status === LinkState.IN_SYNC || link.status === LinkState.SYNCING) {\n return clusterColors.ontoGreen;\n } else if (link.status === LinkState.OUT_OF_SYNC) {\n return clusterColors.ontoGrey;\n }\n return 'none';\n}\n\nexport function setLinkStyle(link) {\n if (link.status === LinkState.OUT_OF_SYNC || link.status === LinkState.SYNCING) {\n return '10 10';\n }\n return 'none';\n}\n\nfunction getLinkCoordinates(link, nodes) {\n const source = nodes.find((node) => node.address === link.source);\n const target = nodes.find((node) => node.address === link.target);\n\n const deltaX = target.x - source.x;\n const deltaY = target.y - source.y;\n const dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const normX = deltaX / dist;\n const normY = deltaY / dist;\n\n // Padding from node center point\n const sourcePadding = 55;\n const targetPadding = 55;\n const sourceX = source.x + (sourcePadding * normX);\n const sourceY = source.y + (sourcePadding * normY);\n const targetX = target.x - (targetPadding * normX);\n const targetY = target.y - (targetPadding * normY);\n return 'M' + sourceX + ',' + sourceY + 'L' + targetX + ',' + targetY;\n}\n\nexport function positionNodesOnClusterZone(nodes, clusterZoneX, clusterZoneY, clusterZoneRadius) {\n nodes\n .attr('transform', (node, index) => {\n // Calculate initial positions for the new nodes based on\n // spreading them evenly on a circle around the center of the page.\n const theta = 2 * Math.PI * index / nodes[0].length;\n var x = clusterZoneX + Math.cos(theta) * clusterZoneRadius;\n var y = clusterZoneY + Math.sin(theta) * clusterZoneRadius;\n node.x = x;\n node.y = y;\n return `translate(${x}, ${y})`;\n });\n}\n\nfunction createHexagon(nodeGroup, radius) {\n const _s32 = (Math.sqrt(3) / 2);\n const xDiff = 0;\n const yDiff = 0;\n const points = [[radius + xDiff, yDiff], [radius / 2 + xDiff, radius * _s32 + yDiff], [-radius / 2 + xDiff, radius * _s32 + yDiff],\n [-radius + xDiff, yDiff],\n [-radius / 2 + xDiff, -radius * _s32 + yDiff], [radius / 2 + xDiff, -radius * _s32 + yDiff], [radius + xDiff, yDiff],\n [radius / 2 + xDiff, radius * _s32 + yDiff]];\n return nodeGroup\n .selectAll(\"path.area\")\n .data([points])\n .enter()\n .append(\"path\")\n .attr('class', 'node member')\n .attr(\"d\", d3.svg.line());\n}\n","import 'angular/utils/local-storage-adapter';\nimport * as CDS from \"./cluster-drawing.service\";\nimport {LinkState, NodeState} from \"./controllers\";\nimport d3tip from 'lib/d3-tip/d3-tip-patch';\n\n\nconst navigationBarWidthFull = 240;\nconst navigationBarWidthCollapsed = 70;\nlet navigationBarWidth = navigationBarWidthFull;\n\nconst nodeRadius = 50;\nconst legendNodeRadius = 25;\n\nconst clusterManagementDirectives = angular.module('graphdb.framework.clustermanagement.directives', [\n 'graphdb.framework.utils.localstorageadapter'\n]);\n\nconst translationsMap = {\n no_cluster_configured: '',\n create_cluster_btn: '',\n legend_node_state: '',\n legend_link_state: '',\n node_state_leader: \"Leader\",\n node_state_follower: \"Follower\",\n node_state_candidate: \"Candidate\",\n node_state_no_cluster: \"No cluster\",\n node_state_out_of_sync: \"Out of sync\",\n node_state_no_connection: \"No connection\",\n node_state_read_only: \"Read only\",\n node_state_restricted: \"Restricted\",\n link_state_in_sync: \"In sync\",\n link_state_syncing: \"Syncing\",\n link_state_out_of_sync: \"Out of sync\"\n};\n\nconst idTranslationKeyMap = {\n node_state: 'legend_node_state',\n link_state: 'legend_link_state'\n};\n\nclusterManagementDirectives.directive('clusterGraphicalView', ['$window', 'LocalStorageAdapter', 'LSKeys', 'UriUtils', '$translate', '$rootScope',\n function ($window, LocalStorageAdapter, LSKeys, UriUtils, $translate, $rootScope) {\n return {\n restrict: 'A',\n link: function (scope, element) {\n scope.showLegend = false;\n $rootScope.$on('$translateChangeSuccess', function () {\n updateTranslations();\n updateLabels();\n });\n scope.$on(\"$destroy\", function () {\n legendTooltip.destroy();\n });\n function updateTranslations() {\n Object.keys(translationsMap).forEach((key) => {\n translationsMap[key] = $translate.instant('cluster_management.cluster_graphical_view.' + key);\n });\n }\n\n function getWindowWidth() {\n const collapsed = LocalStorageAdapter.get(LSKeys.MENU_STATE) === 'collapsedMenu';\n navigationBarWidth = collapsed ? navigationBarWidthCollapsed : navigationBarWidthFull;\n // 95% avoids horizontal scrollbars and adds some margin\n return Math.max(Math.floor(($window.innerWidth - navigationBarWidth) * 0.95), 600);\n }\n\n function getWindowHeight() {\n // 95% avoids horizontal scrollbars and adds some margin\n return Math.max((($window.innerHeight - 250) * 0.95), 600);\n }\n\n let legendNodesGroup;\n let legendWidth;\n let legendHeight;\n const legendPadding = 10;\n\n let width = getWindowWidth();\n let height = getWindowHeight();\n let clusterZoneRadius = Math.min(width, height) / 2 - 100;\n let clusterZoneX = width / 2;\n let clusterZoneY = height / 2;\n let hasCluster;\n\n scope.width = function () {\n return width;\n };\n\n scope.height = function () {\n return height;\n };\n\n // SVG components\n let svg;\n let clusterZone;\n let nodesGroup;\n let linksGroup;\n\n function updateLabels() {\n CDS.updateClusterZoneLabels(hasCluster, clusterZone, translationsMap);\n Object.keys(idTranslationKeyMap).forEach((elementId) => {\n d3.select(`#${elementId}`).text(getLabelFor(elementId));\n });\n if (legendNodesGroup) {\n legendNodesGroup.remove();\n }\n createLegendGroup();\n createClusterLegend();\n }\n\n function translateLegendLinksAndNodes(legendNodes, legendLinks) {\n legendNodes.forEach((node) => {\n node.toolTip = node.hostname = translationsMap[node.customText];\n });\n legendLinks.forEach((link) => {\n link.toolTip = link.linkTypeText = translationsMap[link.linkTypeKey];\n });\n }\n\n function getLabelFor(elementId) {\n const labelKey = idTranslationKeyMap[elementId];\n return translationsMap[labelKey];\n }\n\n function initialize() {\n updateTranslations();\n const hasCluster = !!(scope.clusterModel.nodes && scope.clusterModel.nodes.length);\n createClusterZone(hasCluster);\n createClusterLegend();\n plot();\n }\n\n function createClusterZone(hasCluster) {\n svg = CDS.createClusterSvgElement(element[0])\n .attr('width', width)\n .attr('height', height);\n svg.call(legendTooltip);\n\n clusterZone = CDS.createClusterZone(svg, hasCluster);\n\n linksGroup = svg.append('g').attr('id', 'links-group');\n nodesGroup = svg.append('g').attr('id', 'nodes-group');\n createLegendGroup();\n }\n\n function createLegendGroup() {\n legendNodesGroup = svg.append('g').attr('id', 'legend-group')\n .classed('hidden', !scope.showLegend)\n .classed('legend-group', true);\n }\n\n let tooltipElement;\n const legendTooltip = d3tip()\n .attr('class', 'd3-tip')\n .customPosition(function () {\n const bbox = tooltipElement.getBoundingClientRect();\n const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n const scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;\n\n return {\n left: bbox.left + scrollLeft + 'px',\n top: (bbox.top - 30) + scrollTop + 'px'\n };\n })\n .html(function (d) {\n return d.toolTip;\n });\n\n // Shows tooltip with legend node or link state\n const showLegendTooltip = function (d, element) {\n tooltipElement = element;\n legendTooltip.show(d, tooltipElement);\n };\n\n // Hides the tooltip with legend node or link state\n const hideLegendTooltip = function () {\n tooltipElement = null;\n legendTooltip.hide();\n };\n\n function createClusterLegend() {\n const nodeLinkStateTextHeight = 14;\n\n const nodeStateLabelY = legendPadding + nodeLinkStateTextHeight;\n const linkStateLabelY = nodeStateLabelY + legendPadding * 3 + legendNodeRadius * 5;\n\n const legendColumns = 4;\n const nodesXPadding = 15;\n const nodesYPadding = 15;\n\n const legendNodes = getLegendNodes();\n const legendLinks = getLegendLinks();\n translateLegendLinksAndNodes(legendNodes, legendLinks);\n\n legendNodesGroup.append('rect')\n .attr('id', 'legend-background')\n .attr('class', 'legend-background')\n .attr('fill', '#EEEEEE');\n\n const nodeStateLabel = legendNodesGroup\n .append('text')\n .attr('id', 'node_state')\n .attr('class', 'id id-host')\n .attr('x', nodeRadius * 4)\n .attr('y', nodeStateLabelY)\n .text(getLabelFor('node_state'));\n\n const linkStateLabel = legendNodesGroup\n .append('text')\n .attr('id', 'link_state')\n .attr('class', 'id id-host')\n .attr('x', nodeRadius * 4)\n .attr('y', linkStateLabelY)\n .text(getLabelFor('link_state'));\n\n const legendNodeData = legendNodesGroup.selectAll('#node-group').data(legendNodes);\n CDS.createNodes(legendNodeData, legendNodeRadius, true);\n CDS.updateNodes(legendNodeData);\n\n legendNodeData.select('.node.member')\n .on(\"mouseover\", function (d) {\n d3.event.stopPropagation();\n showLegendTooltip(d, this);\n })\n .on('mouseout', hideLegendTooltip);\n\n legendNodeData\n .attr('transform', function (d) {\n const row = Math.floor(d.id / legendColumns);\n const column = d.id % legendColumns;\n const x = legendPadding + legendNodeRadius + (nodesXPadding + legendNodeRadius * 2) * column;\n const y = legendPadding * 2 + nodeLinkStateTextHeight + legendNodeRadius + (nodesYPadding + legendNodeRadius\n * 2) * row;\n return `translate(${x}, ${y})`;\n });\n\n legendNodesGroup\n .call(function () {\n legendWidth = this.node().getBBox().width;\n });\n\n // Position node/link state labels\n nodeStateLabel.attr('x', legendPadding + legendWidth / 2);\n linkStateLabel.attr('x', legendPadding + legendWidth / 2);\n\n\n const linkWidth = legendWidth / 3;\n\n const linksGroup = legendNodesGroup.append('g').attr('id', 'links-group');\n const linksGroupY = linkStateLabelY + legendPadding;\n linksGroup.attr('transform', `translate(${legendPadding}, ${linksGroupY})`);\n\n legendLinks.forEach((link, index) => {\n const linkPadding = 5;\n const startX = linkPadding;\n const endX = linkWidth - linkPadding;\n\n const linkG = linksGroup\n .append('g')\n .classed('link', true)\n .classed('legend', true)\n .attr('transform', () => {\n const x = index * linkWidth;\n return `translate(${x}, 0)`;\n });\n\n linkG\n .append('path')\n .classed('link', true)\n .attr('stroke-dasharray', () => CDS.setLinkStyle(link))\n .attr('stroke', () => CDS.setLinkColor(link))\n .attr('d', () => {\n return `M${startX},0,${endX},0`;\n });\n\n linkG.append('foreignObject')\n .attr('y', 10)\n .attr('x', 5)\n .attr('width', linkWidth - 10)\n .attr('height', 10)\n .attr('class', 'label-wrapper')\n .append('xhtml:div')\n .attr('class', 'id id-host')\n .style(\"font-size\", \"9px\")\n .html(link.linkTypeText);\n\n linkG\n .on('mouseover', function () {\n d3.event.stopPropagation();\n showLegendTooltip(link, this);\n })\n .on('mouseout', hideLegendTooltip);\n });\n\n\n legendNodesGroup\n .call(function (d) {\n legendHeight = this.node().getBBox().height;\n legendWidth = this.node().getBBox().width;\n });\n\n legendNodesGroup.select('.legend-background')\n .attr('height', legendHeight + legendPadding * 4)\n .attr('width', legendWidth + legendPadding * 2)\n .attr('rx', '6');\n\n positionLegend();\n }\n\n function positionLegend() {\n const y = height - (legendHeight + legendPadding * 3 + 50);\n CDS.moveElement(legendNodesGroup, 0, y);\n }\n\n function createNodes(nodes) {\n nodes.forEach((node) => node.hostname = UriUtils.shortenIri(node.endpoint));\n const nodeData = nodesGroup.selectAll('#node-group').data(nodes, (node) => node.address);\n nodeData\n .on('click', (d) => {\n scope.childContext.selectNode(d);\n\n // position the tooltip according to the node!\n const tooltip = d3.select('.nodetooltip');\n const windowWidth = $(window).width();\n if (d3.event.pageX < windowWidth / 2) {\n // left\n tooltip.style(\"left\", d3.event.pageX + \"px\");\n tooltip.style(\"right\", \"\");\n } else {\n // right\n tooltip.style(\"left\", \"\");\n tooltip.style(\"right\", (windowWidth - d3.event.pageX) + \"px\");\n }\n tooltip.style(\"top\", (d3.event.pageY - 28) + \"px\");\n });\n CDS.createNodes(nodeData, nodeRadius);\n CDS.updateNodes(nodeData);\n CDS.positionNodesOnClusterZone(nodeData, clusterZoneX, clusterZoneY, clusterZoneRadius);\n }\n\n function drawLinks(links, nodes) {\n const linksData = linksGroup.selectAll('.link').data(links, (link) => link.id);\n CDS.createLinks(linksData);\n CDS.updateLinks(linksData, nodes);\n }\n\n // Properties and functions that can be used by parent\n scope.childContext.redraw = plot;\n scope.childContext.resize = function () {\n // recalculates with new screen width\n width = getWindowWidth();\n height = getWindowHeight();\n svg.attr(\"width\", width);\n svg.attr(\"height\", height);\n plot();\n positionLegend();\n };\n scope.childContext.toggleLegend = () => {\n scope.showLegend = !scope.showLegend;\n legendNodesGroup.classed('hidden', !scope.showLegend);\n };\n\n function resizeClusterComponent() {\n calculateClusterZoneProperties();\n CDS.moveElement(clusterZone, clusterZoneX, clusterZoneY);\n clusterZone\n .select('.cluster-zone')\n .attr('r', clusterZoneRadius);\n }\n\n function calculateClusterZoneProperties() {\n clusterZoneRadius = Math.min(width, height) / 2 - 100;\n clusterZoneX = width / 2;\n clusterZoneY = height / 2;\n }\n\n function setClusterZoneType(hasCluster) {\n CDS.setCreateClusterZone(hasCluster, clusterZone, translationsMap);\n let mouseupCallback;\n if (!hasCluster) {\n mouseupCallback = () => {\n scope.$apply(function () {\n scope.showCreateClusterDialog();\n });\n };\n }\n clusterZone\n .on('mouseup', mouseupCallback);\n }\n\n function plot() {\n resizeClusterComponent();\n if (hasCluster !== scope.clusterModel.hasCluster) {\n hasCluster = !!scope.clusterModel.hasCluster;\n setClusterZoneType(hasCluster);\n }\n const nodes = _.cloneDeep(scope.clusterModel.nodes) || [];\n const links = _.cloneDeep(scope.clusterModel.links) || [];\n createNodes(nodes);\n drawLinks(links, nodes);\n }\n\n initialize();\n }\n };\n }\n]);\n\n\nconst getLegendNodes = function () {\n const legendNodes = [];\n legendNodes.push({nodeState: NodeState.LEADER, customText: 'node_state_leader'});\n legendNodes.push({nodeState: NodeState.FOLLOWER, customText: 'node_state_follower'});\n legendNodes.push({nodeState: NodeState.CANDIDATE, customText: 'node_state_candidate'});\n legendNodes.push({nodeState: NodeState.NO_CLUSTER, customText: 'node_state_no_cluster'});\n legendNodes.push({nodeState: NodeState.OUT_OF_SYNC, customText: 'node_state_out_of_sync'});\n legendNodes.push({nodeState: NodeState.NO_CONNECTION, customText: 'node_state_no_connection'});\n legendNodes.push({nodeState: NodeState.READ_ONLY, customText: 'node_state_read_only'});\n legendNodes.push({nodeState: NodeState.RESTRICTED, customText: 'node_state_restricted'});\n legendNodes.forEach((node, index) => node.id = index);\n return legendNodes;\n};\n\nconst getLegendLinks = function () {\n const links = [];\n links.push({status: LinkState.IN_SYNC, linkTypeKey: 'link_state_in_sync'});\n links.push({status: LinkState.SYNCING, linkTypeKey: 'link_state_syncing'});\n links.push({status: LinkState.OUT_OF_SYNC, linkTypeKey: 'link_state_out_of_sync'});\n links.forEach((link, index) => link.id = index);\n return links;\n};\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/js/lib/d3-tip/d3-tip-patch.js","webpack:///./src/js/angular/clustermanagement/cluster-drawing.service.js","webpack:///./src/js/angular/clustermanagement/directives.js"],"names":["direction","offset","html","node","initNode","svg","point","target","customPosition","tip","vis","el","tagName","toLowerCase","ownerSVGElement","createSVGPoint","document","body","appendChild","show","args","Array","prototype","slice","call","arguments","length","SVGElement","pop","coords","content","apply","this","poffset","dir","nodel","getNodeEl","i","directions","scrollTop","documentElement","scrollLeft","customPos","style","opacity","classed","direction_callbacks","get","top","left","hide","attr","n","v","d3","selection","functor","destroy","remove","map","bbox","getScreenBBox","y","offsetHeight","x","offsetWidth","s","e","w","nw","ne","sw","se","keys","select","createElement","position","targetel","event","getScreenCTM","parentNode","matrix","tbbox","getBBox","width","height","matrixTransform","clusterColors","ontoOrange","ontoBlue","ontoGreen","ontoGrey","createClusterSvgElement","element","append","createClusterZone","parent","clusterZone","setCreateClusterZone","hasCluster","translationsMap","selectAll","textGroup","text","no_cluster_configured","create_cluster_btn","updateClusterZoneLabels","moveElement","createNodes","nodesDataBinding","nodeRadius","isLegend","nodeGroup","enter","radius","_s32","Math","sqrt","points","data","line","createHexagon","exit","nodeElements","nodeTextHost","addHostnameToNodes","updateNodes","nodes","getNodeIconType","updateNodesIcon","nodeState","LEADER","FOLLOWER","CANDIDATE","updateNodesClasses","each","d","labelNode","hostname","updateNodesHostnameText","NO_CONNECTION","OUT_OF_SYNC","READ_ONLY","RESTRICTED","createLinks","linksDataBinding","updateLinks","setLinkColor","setLinkStyle","link","source","find","address","deltaX","deltaY","dist","normX","normY","sourceX","sourceY","targetX","targetY","getLinkCoordinates","status","IN_SYNC","SYNCING","positionNodesOnClusterZone","clusterZoneX","clusterZoneY","clusterZoneRadius","index","theta","PI","cos","sin","navigationBarWidth","clusterManagementDirectives","angular","module","legend_node_state","legend_link_state","node_state_leader","node_state_follower","node_state_candidate","node_state_no_cluster","node_state_out_of_sync","node_state_no_connection","node_state_read_only","node_state_restricted","link_state_in_sync","link_state_syncing","link_state_out_of_sync","idTranslationKeyMap","node_state","link_state","directive","$window","LocalStorageAdapter","LSKeys","UriUtils","$translate","$rootScope","restrict","scope","updateTranslations","Object","forEach","key","instant","getWindowWidth","collapsed","MENU_STATE","max","floor","innerWidth","getWindowHeight","innerHeight","legendNodesGroup","legendWidth","legendHeight","showLegend","$on","elementId","getLabelFor","createLegendGroup","createClusterLegend","updateLabels","legendTooltip","nodesGroup","linksGroup","tooltipElement","min","getBoundingClientRect","toolTip","showLegendTooltip","hideLegendTooltip","legendNodes","getLegendNodes","legendLinks","getLegendLinks","customText","linkTypeText","linkTypeKey","translateLegendLinksAndNodes","nodeStateLabel","legendPadding","linkStateLabel","nodeStateLabelY","legendNodeData","on","stopPropagation","row","id","linkWidth","endX","linkG","positionLegend","resizeClusterComponent","plot","clusterModel","mouseupCallback","$apply","showCreateClusterDialog","setClusterZoneType","_","cloneDeep","links","shortenIri","endpoint","nodeData","childContext","selectNode","tooltip","windowWidth","$","window","pageX","pageY","linksData","drawLinks","redraw","resize","toggleLegend","push","NO_CLUSTER"],"mappings":"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","file":"30.0fb90b3cdf78fcde6251.bundle.js","sourcesContent":["// d3.tip\n// Copyright (c) 2013 Justin Palmer\n//\n// Tooltips for d3.js SVG visualizations\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module with d3 as a dependency.\n define([], factory)\n } else if (typeof module === 'object' && module.exports) {\n // CommonJS\n module.exports = function(d3) {\n d3.tip = factory(d3)\n return d3.tip\n }\n } else {\n // Browser global.\n root.d3.tip = factory(root.d3)\n }\n}(this, function () {\n // Public - contructs a new tooltip\n //\n // Returns a tip\n return function() {\n var direction = d3_tip_direction,\n offset = d3_tip_offset,\n html = d3_tip_html,\n node = initNode(),\n svg = null,\n point = null,\n target = null,\n customPosition = null\n\n function tip(vis) {\n svg = getSVGNode(vis)\n point = svg.createSVGPoint()\n document.body.appendChild(node)\n }\n\n // Public - show the tooltip on the screen\n //\n // Returns a tip\n tip.show = function() {\n var args = Array.prototype.slice.call(arguments)\n if(args[args.length - 1] instanceof SVGElement) target = args.pop()\n\n var content = html.apply(this, args),\n poffset = offset.apply(this, args),\n dir = direction.apply(this, args),\n nodel = getNodeEl(),\n i = directions.length,\n coords,\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft,\n customPos = customPosition.apply(this, args)\n\n nodel.html(content)\n .style({ opacity: 1, 'pointer-events': 'all' })\n\n while(i--) nodel.classed(directions[i], false)\n coords = direction_callbacks.get(dir).apply(this)\n\n if (customPos) {\n nodel.style(customPos)\n } else {\n nodel.classed(dir, true).style({\n top: (coords.top + poffset[0]) + scrollTop + 'px',\n left: (coords.left + poffset[1]) + scrollLeft + 'px'\n })\n }\n\n return tip\n }\n\n // Public - hide the tooltip\n //\n // Returns a tip\n tip.hide = function() {\n var nodel = getNodeEl()\n nodel.style({ opacity: 0, 'pointer-events': 'none' })\n return tip\n }\n\n // Public: Proxy attr calls to the d3 tip container. Sets or gets attribute value.\n //\n // n - name of the attribute\n // v - value of the attribute\n //\n // Returns tip or attribute value\n tip.attr = function(n, v) {\n if (arguments.length < 2 && typeof n === 'string') {\n return getNodeEl().attr(n)\n } else {\n var args = Array.prototype.slice.call(arguments)\n d3.selection.prototype.attr.apply(getNodeEl(), args)\n }\n\n return tip\n }\n\n // Public: Proxy style calls to the d3 tip container. Sets or gets a style value.\n //\n // n - name of the property\n // v - value of the property\n //\n // Returns tip or style property value\n tip.style = function(n, v) {\n if (arguments.length < 2 && typeof n === 'string') {\n return getNodeEl().style(n)\n } else {\n var args = Array.prototype.slice.call(arguments)\n d3.selection.prototype.style.apply(getNodeEl(), args)\n }\n\n return tip\n }\n\n // Public: Set or get the direction of the tooltip\n //\n // v - One of n(north), s(south), e(east), or w(west), nw(northwest),\n // sw(southwest), ne(northeast) or se(southeast)\n //\n // Returns tip or direction\n tip.direction = function(v) {\n if (!arguments.length) return direction\n direction = v == null ? v : d3.functor(v)\n\n return tip\n }\n\n // Public: Sets or gets the offset of the tip\n //\n // v - Array of [x, y] offset\n //\n // Returns offset or\n tip.offset = function(v) {\n if (!arguments.length) return offset\n offset = v == null ? v : d3.functor(v)\n\n return tip\n }\n\n // Public: sets or gets the html value of the tooltip\n //\n // v - String value of the tip\n //\n // Returns html value or tip\n tip.html = function(v) {\n if (!arguments.length) return html\n html = v == null ? v : d3.functor(v)\n\n return tip\n }\n\n tip.customPosition = function(v) {\n if (!arguments.length) return customPosition\n customPosition = v == null ? v : d3.functor(v)\n\n return tip\n }\n\n // Public: destroys the tooltip and removes it from the DOM\n //\n // Returns a tip\n tip.destroy = function() {\n if(node) {\n getNodeEl().remove();\n node = null;\n }\n return tip;\n }\n\n function d3_tip_direction() { return 'n' }\n function d3_tip_offset() { return [0, 0] }\n function d3_tip_html() { return ' ' }\n\n var direction_callbacks = d3.map({\n n: direction_n,\n s: direction_s,\n e: direction_e,\n w: direction_w,\n nw: direction_nw,\n ne: direction_ne,\n sw: direction_sw,\n se: direction_se\n }),\n\n directions = direction_callbacks.keys()\n\n function direction_n() {\n var bbox = getScreenBBox()\n return {\n top: bbox.n.y - node.offsetHeight,\n left: bbox.n.x - node.offsetWidth / 2\n }\n }\n\n function direction_s() {\n var bbox = getScreenBBox()\n return {\n top: bbox.s.y,\n left: bbox.s.x - node.offsetWidth / 2\n }\n }\n\n function direction_e() {\n var bbox = getScreenBBox()\n return {\n top: bbox.e.y - node.offsetHeight / 2,\n left: bbox.e.x\n }\n }\n\n function direction_w() {\n var bbox = getScreenBBox()\n return {\n top: bbox.w.y - node.offsetHeight / 2,\n left: bbox.w.x - node.offsetWidth\n }\n }\n\n function direction_nw() {\n var bbox = getScreenBBox()\n return {\n top: bbox.nw.y - node.offsetHeight,\n left: bbox.nw.x - node.offsetWidth\n }\n }\n\n function direction_ne() {\n var bbox = getScreenBBox()\n return {\n top: bbox.ne.y - node.offsetHeight,\n left: bbox.ne.x\n }\n }\n\n function direction_sw() {\n var bbox = getScreenBBox()\n return {\n top: bbox.sw.y,\n left: bbox.sw.x - node.offsetWidth\n }\n }\n\n function direction_se() {\n var bbox = getScreenBBox()\n return {\n top: bbox.se.y,\n left: bbox.e.x\n }\n }\n\n function initNode() {\n var node = d3.select(document.createElement('div'))\n node.style({\n position: 'absolute',\n top: 0,\n opacity: 0,\n 'pointer-events': 'none',\n 'box-sizing': 'border-box'\n })\n\n return node.node()\n }\n\n function getSVGNode(el) {\n el = el.node()\n if(el.tagName.toLowerCase() === 'svg')\n return el\n\n return el.ownerSVGElement\n }\n\n function getNodeEl() {\n if(node === null) {\n node = initNode();\n // re-add node to DOM\n document.body.appendChild(node);\n };\n return d3.select(node);\n }\n\n // Private - gets the screen coordinates of a shape\n //\n // Given a shape on the screen, will return an SVGPoint for the directions\n // n(north), s(south), e(east), w(west), ne(northeast), se(southeast), nw(northwest),\n // sw(southwest).\n //\n // +-+-+\n // | |\n // + +\n // | |\n // +-+-+\n //\n // Returns an Object {n, s, e, w, nw, sw, ne, se}\n function getScreenBBox() {\n var targetel = target || d3.event.target;\n\n while ('undefined' === typeof targetel.getScreenCTM && 'undefined' === targetel.parentNode) {\n targetel = targetel.parentNode;\n }\n\n var bbox = {},\n matrix = targetel.getScreenCTM(),\n tbbox = targetel.getBBox(),\n width = tbbox.width,\n height = tbbox.height,\n x = tbbox.x,\n y = tbbox.y\n\n point.x = x\n point.y = y\n bbox.nw = point.matrixTransform(matrix)\n point.x += width\n bbox.ne = point.matrixTransform(matrix)\n point.y += height\n bbox.se = point.matrixTransform(matrix)\n point.x -= width\n bbox.sw = point.matrixTransform(matrix)\n point.y -= height / 2\n bbox.w = point.matrixTransform(matrix)\n point.x += width\n bbox.e = point.matrixTransform(matrix)\n point.x -= width / 2\n point.y -= height / 2\n bbox.n = point.matrixTransform(matrix)\n point.y += height\n bbox.s = point.matrixTransform(matrix)\n\n return bbox\n }\n\n return tip\n };\n\n}));","import {LinkState, NodeState} from \"./controllers\";\n\nexport const clusterColors = {\n ontoOrange: 'var(--onto-orange)',\n ontoBlue: 'var(--onto-blue)',\n ontoGreen: 'var(--onto-green)',\n ontoGrey: 'var(--onto-grey)'\n};\n\nexport function createClusterSvgElement(element) {\n return d3.select(element)\n .append('svg');\n}\n\nexport function createClusterZone(parent) {\n const clusterZone = parent.append('g');\n clusterZone\n .append(\"circle\")\n .classed('cluster-zone', true)\n .style('fill', 'transparent')\n .style('stroke-width', '2');\n return clusterZone;\n}\n\nexport function setCreateClusterZone(hasCluster, clusterZone, translationsMap) {\n clusterZone\n .select('.cluster-zone')\n .classed('no-cluster', !hasCluster);\n\n if (hasCluster) {\n clusterZone.selectAll('#no-cluster-zone').remove();\n } else {\n const textGroup = clusterZone\n .append('g')\n .attr(\"id\", \"no-cluster-zone\");\n textGroup\n .append('text')\n .attr('id', 'no-cluster-label')\n .text(translationsMap.no_cluster_configured || 'No cluster group configured')\n .attr('y', -50)\n .classed('h2', true)\n .style('text-anchor', \"middle\");\n textGroup.append('text')\n .attr('id', 'create-cluster-label')\n .classed('h3', true)\n .text(translationsMap.create_cluster_btn || 'Click here to create a cluster')\n .style('text-anchor', \"middle\");\n textGroup.append('text')\n .attr('y', 130)\n .attr('class', 'icon-any repo')\n .attr('fill', clusterColors.ontoOrange)\n .style('text-anchor', \"middle\")\n .classed('settings-icon', true)\n .text(\"\\ue92b\");\n }\n}\n\nexport function updateClusterZoneLabels(hasCluster, clusterZone, translationsMap) {\n if (hasCluster) {\n return;\n }\n clusterZone.select('#no-cluster-zone #no-cluster-label')\n .text(translationsMap.no_cluster_configured);\n clusterZone.select('#no-cluster-zone #create-cluster-label')\n .text(translationsMap.create_cluster_btn);\n}\n\nexport function moveElement(element, x, y) {\n element.attr('transform', () => {\n return `translate(${x}, ${y})`;\n });\n}\n\nexport function createNodes(nodesDataBinding, nodeRadius, isLegend) {\n const nodeGroup = nodesDataBinding.enter()\n .append('g')\n .attr('id', 'node-group')\n .classed('legend', isLegend);\n\n createHexagon(nodeGroup, nodeRadius);\n nodesDataBinding.exit().remove();\n\n nodeGroup\n .append('text')\n .attr('class', 'icon-any node-icon');\n\n addHostnameToNodes(nodeGroup, nodeRadius, isLegend);\n}\n\nfunction addHostnameToNodes(nodeElements, nodeRadius, isLegend) {\n const nodeTextHost = nodeElements.append('g');\n\n if (isLegend) {\n nodeTextHost.append('foreignObject')\n .attr('y', nodeRadius)\n .attr('x', -nodeRadius)\n .attr('width', nodeRadius * 2)\n .attr('height', 10)\n .attr('class', 'label-wrapper')\n .append('xhtml:div')\n .attr('class', 'id id-host');\n } else {\n nodeTextHost\n .append('rect')\n .attr('class', 'id-host-background')\n .attr('rx', 6);\n\n nodeTextHost\n .append('text')\n .attr('y', nodeRadius + 10)\n .attr('class', 'id id-host')\n .style('text-anchor', 'middle');\n }\n}\n\nexport function updateNodes(nodes) {\n updateNodesIcon(nodes);\n updateNodesClasses(nodes);\n updateNodesHostnameText(nodes);\n}\n\nfunction updateNodesClasses(nodes) {\n nodes\n .select('.node.member')\n .classed('leader', (node) => node.nodeState === NodeState.LEADER)\n .classed('follower', (node) => node.nodeState === NodeState.FOLLOWER)\n .classed('candidate', (node) => node.nodeState === NodeState.CANDIDATE)\n .classed('other', (node) => {\n return node.nodeState !== NodeState.LEADER &&\n node.nodeState !== NodeState.FOLLOWER &&\n node.nodeState !== NodeState.CANDIDATE;\n });\n}\n\nfunction updateNodesIcon(nodes) {\n nodes\n .select('.icon-any.node-icon')\n .text(getNodeIconType);\n}\n\nfunction getNodeIconType(node) {\n if (node.nodeState === NodeState.LEADER) {\n return '\\ue935';\n } else if (node.nodeState === NodeState.FOLLOWER) {\n return '\\ue963';\n } else if (node.nodeState === NodeState.CANDIDATE) {\n return '\\ue914';\n } else if (node.nodeState === NodeState.NO_CONNECTION) {\n return '\\ue931';\n } else if (node.nodeState === NodeState.OUT_OF_SYNC) {\n return '\\ue920';\n } else if (node.nodeState === NodeState.READ_ONLY) {\n return '\\ue95c';\n } else if (node.nodeState === NodeState.RESTRICTED) {\n return '\\ue933';\n }\n return '';\n}\n\nfunction updateNodesHostnameText(nodes) {\n nodes\n .select('.id.id-host')\n .each(function (d) {\n d.labelNode = this;\n })\n .text(function (d) {\n return d.hostname;\n });\n\n // Add padding styling to text background. left/right +5. top/bottom +1\n nodes\n .select('.id-host-background')\n .attr('width', function (d) {\n return d3.select(d.labelNode).node().getBBox().width + 10;\n })\n .attr('height', function (d) {\n return d3.select(d.labelNode).node().getBBox().height + 2;\n })\n .attr('x', function (d) {\n return d3.select(d.labelNode).node().getBBox().x - 5;\n })\n .attr('y', function (d) {\n return d3.select(d.labelNode).node().getBBox().y - 1;\n })\n .attr('fill', '#EEEEEE');\n}\n\nexport function createLinks(linksDataBinding) {\n linksDataBinding.enter()\n .append('path')\n .classed('link', true);\n\n linksDataBinding.exit().remove();\n}\n\nexport function updateLinks(linksDataBinding, nodes) {\n linksDataBinding\n .attr('stroke', setLinkColor)\n .style('stroke-dasharray', setLinkStyle)\n .attr('d', (link) => getLinkCoordinates(link, nodes));\n}\n\nexport function setLinkColor(link) {\n if (link.status === LinkState.IN_SYNC || link.status === LinkState.SYNCING) {\n return clusterColors.ontoGreen;\n } else if (link.status === LinkState.OUT_OF_SYNC) {\n return clusterColors.ontoGrey;\n }\n return 'none';\n}\n\nexport function setLinkStyle(link) {\n if (link.status === LinkState.OUT_OF_SYNC || link.status === LinkState.SYNCING) {\n return '10 10';\n }\n return 'none';\n}\n\nfunction getLinkCoordinates(link, nodes) {\n const source = nodes.find((node) => node.address === link.source);\n const target = nodes.find((node) => node.address === link.target);\n\n const deltaX = target.x - source.x;\n const deltaY = target.y - source.y;\n const dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const normX = deltaX / dist;\n const normY = deltaY / dist;\n\n // Padding from node center point\n const sourcePadding = 55;\n const targetPadding = 55;\n const sourceX = source.x + (sourcePadding * normX);\n const sourceY = source.y + (sourcePadding * normY);\n const targetX = target.x - (targetPadding * normX);\n const targetY = target.y - (targetPadding * normY);\n return 'M' + sourceX + ',' + sourceY + 'L' + targetX + ',' + targetY;\n}\n\nexport function positionNodesOnClusterZone(nodes, clusterZoneX, clusterZoneY, clusterZoneRadius) {\n nodes\n .attr('transform', (node, index) => {\n // Calculate initial positions for the new nodes based on\n // spreading them evenly on a circle around the center of the page.\n const theta = 2 * Math.PI * index / nodes[0].length;\n var x = clusterZoneX + Math.cos(theta) * clusterZoneRadius;\n var y = clusterZoneY + Math.sin(theta) * clusterZoneRadius;\n node.x = x;\n node.y = y;\n return `translate(${x}, ${y})`;\n });\n}\n\nfunction createHexagon(nodeGroup, radius) {\n const _s32 = (Math.sqrt(3) / 2);\n const xDiff = 0;\n const yDiff = 0;\n const points = [[radius + xDiff, yDiff], [radius / 2 + xDiff, radius * _s32 + yDiff], [-radius / 2 + xDiff, radius * _s32 + yDiff],\n [-radius + xDiff, yDiff],\n [-radius / 2 + xDiff, -radius * _s32 + yDiff], [radius / 2 + xDiff, -radius * _s32 + yDiff], [radius + xDiff, yDiff],\n [radius / 2 + xDiff, radius * _s32 + yDiff]];\n return nodeGroup\n .selectAll(\"path.area\")\n .data([points])\n .enter()\n .append(\"path\")\n .attr('class', 'node member')\n .attr(\"d\", d3.svg.line());\n}\n","import 'angular/utils/local-storage-adapter';\nimport * as CDS from \"./cluster-drawing.service\";\nimport {LinkState, NodeState} from \"./controllers\";\nimport d3tip from 'lib/d3-tip/d3-tip-patch';\n\n\nconst navigationBarWidthFull = 240;\nconst navigationBarWidthCollapsed = 70;\nlet navigationBarWidth = navigationBarWidthFull;\n\nconst nodeRadius = 50;\nconst legendNodeRadius = 25;\n\nconst clusterManagementDirectives = angular.module('graphdb.framework.clustermanagement.directives', [\n 'graphdb.framework.utils.localstorageadapter'\n]);\n\nconst translationsMap = {\n no_cluster_configured: '',\n create_cluster_btn: '',\n legend_node_state: '',\n legend_link_state: '',\n node_state_leader: \"Leader\",\n node_state_follower: \"Follower\",\n node_state_candidate: \"Candidate\",\n node_state_no_cluster: \"No cluster\",\n node_state_out_of_sync: \"Out of sync\",\n node_state_no_connection: \"No connection\",\n node_state_read_only: \"Read only\",\n node_state_restricted: \"Restricted\",\n link_state_in_sync: \"In sync\",\n link_state_syncing: \"Syncing\",\n link_state_out_of_sync: \"Out of sync\"\n};\n\nconst idTranslationKeyMap = {\n node_state: 'legend_node_state',\n link_state: 'legend_link_state'\n};\n\nclusterManagementDirectives.directive('clusterGraphicalView', ['$window', 'LocalStorageAdapter', 'LSKeys', 'UriUtils', '$translate', '$rootScope',\n function ($window, LocalStorageAdapter, LSKeys, UriUtils, $translate, $rootScope) {\n return {\n restrict: 'A',\n link: function (scope, element) {\n scope.showLegend = false;\n $rootScope.$on('$translateChangeSuccess', function () {\n updateTranslations();\n updateLabels();\n });\n scope.$on(\"$destroy\", function () {\n legendTooltip.destroy();\n });\n function updateTranslations() {\n Object.keys(translationsMap).forEach((key) => {\n translationsMap[key] = $translate.instant('cluster_management.cluster_graphical_view.' + key);\n });\n }\n\n function getWindowWidth() {\n const collapsed = LocalStorageAdapter.get(LSKeys.MENU_STATE) === 'collapsedMenu';\n navigationBarWidth = collapsed ? navigationBarWidthCollapsed : navigationBarWidthFull;\n // 95% avoids horizontal scrollbars and adds some margin\n return Math.max(Math.floor(($window.innerWidth - navigationBarWidth) * 0.95), 600);\n }\n\n function getWindowHeight() {\n // 95% avoids horizontal scrollbars and adds some margin\n return Math.max((($window.innerHeight - 250) * 0.95), 600);\n }\n\n let legendNodesGroup;\n let legendWidth;\n let legendHeight;\n const legendPadding = 10;\n\n let width = getWindowWidth();\n let height = getWindowHeight();\n let clusterZoneRadius = Math.min(width, height) / 2 - 100;\n let clusterZoneX = width / 2;\n let clusterZoneY = height / 2;\n let hasCluster;\n\n scope.width = function () {\n return width;\n };\n\n scope.height = function () {\n return height;\n };\n\n // SVG components\n let svg;\n let clusterZone;\n let nodesGroup;\n let linksGroup;\n\n function updateLabels() {\n CDS.updateClusterZoneLabels(hasCluster, clusterZone, translationsMap);\n Object.keys(idTranslationKeyMap).forEach((elementId) => {\n d3.select(`#${elementId}`).text(getLabelFor(elementId));\n });\n if (legendNodesGroup) {\n legendNodesGroup.remove();\n }\n createLegendGroup();\n createClusterLegend();\n }\n\n function translateLegendLinksAndNodes(legendNodes, legendLinks) {\n legendNodes.forEach((node) => {\n node.toolTip = node.hostname = translationsMap[node.customText];\n });\n legendLinks.forEach((link) => {\n link.toolTip = link.linkTypeText = translationsMap[link.linkTypeKey];\n });\n }\n\n function getLabelFor(elementId) {\n const labelKey = idTranslationKeyMap[elementId];\n return translationsMap[labelKey];\n }\n\n function initialize() {\n updateTranslations();\n const hasCluster = !!(scope.clusterModel.nodes && scope.clusterModel.nodes.length);\n createClusterZone(hasCluster);\n createClusterLegend();\n plot();\n }\n\n function createClusterZone(hasCluster) {\n svg = CDS.createClusterSvgElement(element[0])\n .attr('width', width)\n .attr('height', height);\n svg.call(legendTooltip);\n\n clusterZone = CDS.createClusterZone(svg, hasCluster);\n\n linksGroup = svg.append('g').attr('id', 'links-group');\n nodesGroup = svg.append('g').attr('id', 'nodes-group');\n createLegendGroup();\n }\n\n function createLegendGroup() {\n legendNodesGroup = svg.append('g').attr('id', 'legend-group')\n .classed('hidden', !scope.showLegend)\n .classed('legend-group', true);\n }\n\n let tooltipElement;\n const legendTooltip = d3tip()\n .attr('class', 'd3-tip')\n .customPosition(function () {\n const bbox = tooltipElement.getBoundingClientRect();\n const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n const scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;\n\n return {\n left: bbox.left + scrollLeft + 'px',\n top: (bbox.top - 30) + scrollTop + 'px'\n };\n })\n .html(function (d) {\n return d.toolTip;\n });\n\n // Shows tooltip with legend node or link state\n const showLegendTooltip = function (d, element) {\n tooltipElement = element;\n legendTooltip.show(d, tooltipElement);\n };\n\n // Hides the tooltip with legend node or link state\n const hideLegendTooltip = function () {\n tooltipElement = null;\n legendTooltip.hide();\n };\n\n function createClusterLegend() {\n const nodeLinkStateTextHeight = 14;\n\n const nodeStateLabelY = legendPadding + nodeLinkStateTextHeight;\n const linkStateLabelY = nodeStateLabelY + legendPadding * 3 + legendNodeRadius * 5;\n\n const legendColumns = 4;\n const nodesXPadding = 15;\n const nodesYPadding = 15;\n\n const legendNodes = getLegendNodes();\n const legendLinks = getLegendLinks();\n translateLegendLinksAndNodes(legendNodes, legendLinks);\n\n legendNodesGroup.append('rect')\n .attr('id', 'legend-background')\n .attr('class', 'legend-background')\n .attr('fill', '#EEEEEE');\n\n const nodeStateLabel = legendNodesGroup\n .append('text')\n .attr('id', 'node_state')\n .attr('class', 'id id-host')\n .attr('x', nodeRadius * 4)\n .attr('y', nodeStateLabelY)\n .text(getLabelFor('node_state'));\n\n const linkStateLabel = legendNodesGroup\n .append('text')\n .attr('id', 'link_state')\n .attr('class', 'id id-host')\n .attr('x', nodeRadius * 4)\n .attr('y', linkStateLabelY)\n .text(getLabelFor('link_state'));\n\n const legendNodeData = legendNodesGroup.selectAll('#node-group').data(legendNodes);\n CDS.createNodes(legendNodeData, legendNodeRadius, true);\n CDS.updateNodes(legendNodeData);\n\n legendNodeData.select('.node.member')\n .on(\"mouseover\", function (d) {\n d3.event.stopPropagation();\n showLegendTooltip(d, this);\n })\n .on('mouseout', hideLegendTooltip);\n\n legendNodeData\n .attr('transform', function (d) {\n const row = Math.floor(d.id / legendColumns);\n const column = d.id % legendColumns;\n const x = legendPadding + legendNodeRadius + (nodesXPadding + legendNodeRadius * 2) * column;\n const y = legendPadding * 2 + nodeLinkStateTextHeight + legendNodeRadius + (nodesYPadding + legendNodeRadius\n * 2) * row;\n return `translate(${x}, ${y})`;\n });\n\n legendNodesGroup\n .call(function () {\n legendWidth = this.node().getBBox().width;\n });\n\n // Position node/link state labels\n nodeStateLabel.attr('x', legendPadding + legendWidth / 2);\n linkStateLabel.attr('x', legendPadding + legendWidth / 2);\n\n\n const linkWidth = legendWidth / 3;\n\n const linksGroup = legendNodesGroup.append('g').attr('id', 'links-group');\n const linksGroupY = linkStateLabelY + legendPadding;\n linksGroup.attr('transform', `translate(${legendPadding}, ${linksGroupY})`);\n\n legendLinks.forEach((link, index) => {\n const linkPadding = 5;\n const startX = linkPadding;\n const endX = linkWidth - linkPadding;\n\n const linkG = linksGroup\n .append('g')\n .classed('link', true)\n .classed('legend', true)\n .attr('transform', () => {\n const x = index * linkWidth;\n return `translate(${x}, 0)`;\n });\n\n linkG\n .append('path')\n .classed('link', true)\n .attr('stroke-dasharray', () => CDS.setLinkStyle(link))\n .attr('stroke', () => CDS.setLinkColor(link))\n .attr('d', () => {\n return `M${startX},0,${endX},0`;\n });\n\n linkG.append('foreignObject')\n .attr('y', 10)\n .attr('x', 5)\n .attr('width', linkWidth - 10)\n .attr('height', 10)\n .attr('class', 'label-wrapper')\n .append('xhtml:div')\n .attr('class', 'id id-host')\n .style(\"font-size\", \"9px\")\n .html(link.linkTypeText);\n\n linkG\n .on('mouseover', function () {\n d3.event.stopPropagation();\n showLegendTooltip(link, this);\n })\n .on('mouseout', hideLegendTooltip);\n });\n\n\n legendNodesGroup\n .call(function (d) {\n legendHeight = this.node().getBBox().height;\n legendWidth = this.node().getBBox().width;\n });\n\n legendNodesGroup.select('.legend-background')\n .attr('height', legendHeight + legendPadding * 4)\n .attr('width', legendWidth + legendPadding * 2)\n .attr('rx', '6');\n\n positionLegend();\n }\n\n function positionLegend() {\n const y = height - (legendHeight + legendPadding * 3 + 50);\n CDS.moveElement(legendNodesGroup, 0, y);\n }\n\n function createNodes(nodes) {\n nodes.forEach((node) => node.hostname = UriUtils.shortenIri(node.endpoint));\n const nodeData = nodesGroup.selectAll('#node-group').data(nodes, (node) => node.address);\n nodeData\n .on('click', (d) => {\n scope.childContext.selectNode(d);\n\n // position the tooltip according to the node!\n const tooltip = d3.select('.nodetooltip');\n const windowWidth = $(window).width();\n if (d3.event.pageX < windowWidth / 2) {\n // left\n tooltip.style(\"left\", d3.event.pageX + \"px\");\n tooltip.style(\"right\", \"\");\n } else {\n // right\n tooltip.style(\"left\", \"\");\n tooltip.style(\"right\", (windowWidth - d3.event.pageX) + \"px\");\n }\n tooltip.style(\"top\", (d3.event.pageY - 28) + \"px\");\n });\n CDS.createNodes(nodeData, nodeRadius);\n CDS.updateNodes(nodeData);\n CDS.positionNodesOnClusterZone(nodeData, clusterZoneX, clusterZoneY, clusterZoneRadius);\n }\n\n function drawLinks(links, nodes) {\n const linksData = linksGroup.selectAll('.link').data(links, (link) => link.id);\n CDS.createLinks(linksData);\n CDS.updateLinks(linksData, nodes);\n }\n\n // Properties and functions that can be used by parent\n scope.childContext.redraw = plot;\n scope.childContext.resize = function () {\n // recalculates with new screen width\n width = getWindowWidth();\n height = getWindowHeight();\n svg.attr(\"width\", width);\n svg.attr(\"height\", height);\n plot();\n positionLegend();\n };\n scope.childContext.toggleLegend = () => {\n scope.showLegend = !scope.showLegend;\n legendNodesGroup.classed('hidden', !scope.showLegend);\n };\n\n function resizeClusterComponent() {\n calculateClusterZoneProperties();\n CDS.moveElement(clusterZone, clusterZoneX, clusterZoneY);\n clusterZone\n .select('.cluster-zone')\n .attr('r', clusterZoneRadius);\n }\n\n function calculateClusterZoneProperties() {\n clusterZoneRadius = Math.min(width, height) / 2 - 100;\n clusterZoneX = width / 2;\n clusterZoneY = height / 2;\n }\n\n function setClusterZoneType(hasCluster) {\n CDS.setCreateClusterZone(hasCluster, clusterZone, translationsMap);\n let mouseupCallback;\n if (!hasCluster) {\n mouseupCallback = () => {\n scope.$apply(function () {\n scope.showCreateClusterDialog();\n });\n };\n }\n clusterZone\n .on('mouseup', mouseupCallback);\n }\n\n function plot() {\n resizeClusterComponent();\n if (hasCluster !== scope.clusterModel.hasCluster) {\n hasCluster = !!scope.clusterModel.hasCluster;\n setClusterZoneType(hasCluster);\n }\n const nodes = _.cloneDeep(scope.clusterModel.nodes) || [];\n const links = _.cloneDeep(scope.clusterModel.links) || [];\n createNodes(nodes);\n drawLinks(links, nodes);\n }\n\n initialize();\n }\n };\n }\n]);\n\n\nconst getLegendNodes = function () {\n const legendNodes = [];\n legendNodes.push({nodeState: NodeState.LEADER, customText: 'node_state_leader'});\n legendNodes.push({nodeState: NodeState.FOLLOWER, customText: 'node_state_follower'});\n legendNodes.push({nodeState: NodeState.CANDIDATE, customText: 'node_state_candidate'});\n legendNodes.push({nodeState: NodeState.NO_CLUSTER, customText: 'node_state_no_cluster'});\n legendNodes.push({nodeState: NodeState.OUT_OF_SYNC, customText: 'node_state_out_of_sync'});\n legendNodes.push({nodeState: NodeState.NO_CONNECTION, customText: 'node_state_no_connection'});\n legendNodes.push({nodeState: NodeState.READ_ONLY, customText: 'node_state_read_only'});\n legendNodes.push({nodeState: NodeState.RESTRICTED, customText: 'node_state_restricted'});\n legendNodes.forEach((node, index) => node.id = index);\n return legendNodes;\n};\n\nconst getLegendLinks = function () {\n const links = [];\n links.push({status: LinkState.IN_SYNC, linkTypeKey: 'link_state_in_sync'});\n links.push({status: LinkState.SYNCING, linkTypeKey: 'link_state_syncing'});\n links.push({status: LinkState.OUT_OF_SYNC, linkTypeKey: 'link_state_out_of_sync'});\n links.forEach((link, index) => link.id = index);\n return links;\n};\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[31,36,61],{123:function(e,i,a){"use strict";a.r(i);a(
|
|
2
|
-
//# sourceMappingURL=31.
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[31,36,61],{123:function(e,i,a){"use strict";a.r(i);a(91);angular.module("graphdb.framework.guides",["ui.bootstrap","graphdb.framework.guides.controllers"])},44:function(e,i){angular.module("graphdb.framework.core.directives.paginations",[]).directive("paginations",(function(){return{template:'<uib-pagination class="nav navbar-right" total-items="matchedElements.length" items-per-page="pageSize" ng-model="page" ng-change="changePagination()" direction-links="false" boundary-links="true" max-size="5" rotate="true"></uib-pagination>'}}))},91:function(e,i,a){"use strict";a.r(i);a(20),a(44);var t=a(1);function n(e,i,a,n,s,r){e.guides=[],e.pageSizeOptions=[10,20,50,100],e.page=1,e.pageSize=e.pageSizeOptions[0],e.translationSubscription=void 0,e.init=function(){a.getGuides().then(i=>{e.guides=n("orderBy")(i,"guideOrder"),e.guides.forEach(e=>{switch(e.translatedGuideName=t.GuideUtils.translateLocalMessage(s,r,e.guideName),e.translatedGuideDescription=t.GuideUtils.translateLocalMessage(s,r,e.guideDescription),e.guideLevel){case void 0:case 0:e.guideLevelLabel="view.guides.level.beginner";break;case 1:e.guideLevelLabel="view.guides.level.intermediate";break;default:e.guideLevelLabel="view.guides.level.advanced"}}),e.matchedElements=e.guides,e.changePagination()})},e.startGuide=function(e){a.startGuide(e)},this.translationSubscription||(this.translationSubscription=i.$on("$translateChangeSuccess",()=>{e.init()})),e.changePagination=function(){angular.isDefined(e.guides)&&(e.displayedGuides=e.guides.slice(e.pageSize*(e.page-1),e.pageSize*e.page))},e.changePageSize=function(i){e.page=1,e.pageSize=i||e.pageSizeOptions[0],e.changePagination()},e.init()}angular.module("graphdb.framework.guides.controllers",["ui.bootstrap","graphdb.framework.guides.services","graphdb.framework.core.directives.paginations"]).controller("GuidesCtrl",n),n.$inject=["$scope","$rootScope","GuidesService","$filter","$translate","$interpolate"]}}]);
|
|
2
|
+
//# sourceMappingURL=31.8dd9fe71d36bd04a0433.bundle.js.map
|
package/dist/{31.13d5a8e9834cd5db589c.bundle.js.map → 31.8dd9fe71d36bd04a0433.bundle.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/angular/guides/app.js","webpack:///./src/js/angular/core/directives/paginations.js","webpack:///./src/js/angular/guides/controllers.js"],"names":["angular","module","directive","template","GuidesCtrl","$scope","$rootScope","GuidesService","$filter","$translate","$interpolate","guides","pageSizeOptions","page","pageSize","translationSubscription","undefined","init","getGuides","then","forEach","guide","translatedGuideName","translateLocalMessage","guideName","translatedGuideDescription","guideDescription","guideLevel","guideLevelLabel","matchedElements","changePagination","startGuide","this","$on","isDefined","displayedGuides","slice","changePageSize","size","controller","$inject"],"mappings":"iGAAA,aAOAA,QAAQC,OAAO,2BALC,CACZ,eACA,0C,iBCJJD,QAAQC,OAAO,gDAAiD,IAC3DC,UAAU,eAAe,WACtB,MAAO,CACHC,SAAU,yP,gCCHtB,8BAgBA,SAASC,EAAWC,EAAQC,EAAYC,EAAeC,EAASC,EAAYC,GAExEL,EAAOM,OAAS,GAChBN,EAAOO,gBAAkB,CAAC,GAAI,GAAI,GAAI,KACtCP,EAAOQ,KAAO,EACdR,EAAOS,SAAWT,EAAOO,gBAAgB,GACzCP,EAAOU,6BAA0BC,EAEjCX,EAAOY,KAAO,WACVV,EAAcW,YACTC,KAAKR,IACFN,EAAOM,OAASH,EAAQ,UAARA,CAAmBG,EAAQ,cAC3CN,EAAOM,OAAOS,QAAQC,IAGlB,OAFAA,EAAMC,oBAAsB,aAAWC,sBAAsBd,EAAYC,EAAcW,EAAMG,WAC7FH,EAAMI,2BAA6B,aAAWF,sBAAsBd,EAAYC,EAAcW,EAAMK,kBAC5FL,EAAMM,YACV,UAAKX,EACL,KAAK,EACDK,EAAMO,gBAAkB,6BACxB,MACJ,KAAK,EACDP,EAAMO,gBAAkB,iCACxB,MACJ,QACIP,EAAMO,gBAAkB,gCAGpCvB,EAAOwB,gBAAkBxB,EAAOM,OAChCN,EAAOyB,sBAInBzB,EAAO0B,WAAa,SAAUV,GAC1Bd,EAAcwB,WAAWV,IAGxBW,KAAKjB,0BACNiB,KAAKjB,wBAA0BT,EAAW2B,IAAI,0BAA2B,KACrE5B,EAAOY,UAIfZ,EAAOyB,iBAAmB,WAClB9B,QAAQkC,UAAU7B,EAAOM,UACzBN,EAAO8B,gBAAkB9B,EAAOM,OAAOyB,MAAM/B,EAAOS,UAAYT,EAAOQ,KAAO,GAAIR,EAAOS,SAAWT,EAAOQ,QAInHR,EAAOgC,eAAiB,SAAUC,GAC9BjC,EAAOQ,KAAO,EAEVR,EAAOS,SADPwB,GAGkBjC,EAAOO,gBAAgB,GAE7CP,EAAOyB,oBAGXzB,EAAOY,OAhEXjB,QACKC,OAAO,uCAPI,CACZ,eACA,oCACA,kDAKCsC,WAAW,aAAcnC,GAE9BA,EAAWoC,QAAU,CAAC,SAAU,aAAc,gBAAiB,UAAW,aAAc","file":"31.
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/js/angular/guides/app.js","webpack:///./src/js/angular/core/directives/paginations.js","webpack:///./src/js/angular/guides/controllers.js"],"names":["angular","module","directive","template","GuidesCtrl","$scope","$rootScope","GuidesService","$filter","$translate","$interpolate","guides","pageSizeOptions","page","pageSize","translationSubscription","undefined","init","getGuides","then","forEach","guide","translatedGuideName","translateLocalMessage","guideName","translatedGuideDescription","guideDescription","guideLevel","guideLevelLabel","matchedElements","changePagination","startGuide","this","$on","isDefined","displayedGuides","slice","changePageSize","size","controller","$inject"],"mappings":"iGAAA,aAOAA,QAAQC,OAAO,2BALC,CACZ,eACA,0C,iBCJJD,QAAQC,OAAO,gDAAiD,IAC3DC,UAAU,eAAe,WACtB,MAAO,CACHC,SAAU,yP,gCCHtB,8BAgBA,SAASC,EAAWC,EAAQC,EAAYC,EAAeC,EAASC,EAAYC,GAExEL,EAAOM,OAAS,GAChBN,EAAOO,gBAAkB,CAAC,GAAI,GAAI,GAAI,KACtCP,EAAOQ,KAAO,EACdR,EAAOS,SAAWT,EAAOO,gBAAgB,GACzCP,EAAOU,6BAA0BC,EAEjCX,EAAOY,KAAO,WACVV,EAAcW,YACTC,KAAKR,IACFN,EAAOM,OAASH,EAAQ,UAARA,CAAmBG,EAAQ,cAC3CN,EAAOM,OAAOS,QAAQC,IAGlB,OAFAA,EAAMC,oBAAsB,aAAWC,sBAAsBd,EAAYC,EAAcW,EAAMG,WAC7FH,EAAMI,2BAA6B,aAAWF,sBAAsBd,EAAYC,EAAcW,EAAMK,kBAC5FL,EAAMM,YACV,UAAKX,EACL,KAAK,EACDK,EAAMO,gBAAkB,6BACxB,MACJ,KAAK,EACDP,EAAMO,gBAAkB,iCACxB,MACJ,QACIP,EAAMO,gBAAkB,gCAGpCvB,EAAOwB,gBAAkBxB,EAAOM,OAChCN,EAAOyB,sBAInBzB,EAAO0B,WAAa,SAAUV,GAC1Bd,EAAcwB,WAAWV,IAGxBW,KAAKjB,0BACNiB,KAAKjB,wBAA0BT,EAAW2B,IAAI,0BAA2B,KACrE5B,EAAOY,UAIfZ,EAAOyB,iBAAmB,WAClB9B,QAAQkC,UAAU7B,EAAOM,UACzBN,EAAO8B,gBAAkB9B,EAAOM,OAAOyB,MAAM/B,EAAOS,UAAYT,EAAOQ,KAAO,GAAIR,EAAOS,SAAWT,EAAOQ,QAInHR,EAAOgC,eAAiB,SAAUC,GAC9BjC,EAAOQ,KAAO,EAEVR,EAAOS,SADPwB,GAGkBjC,EAAOO,gBAAgB,GAE7CP,EAAOyB,oBAGXzB,EAAOY,OAhEXjB,QACKC,OAAO,uCAPI,CACZ,eACA,oCACA,kDAKCsC,WAAW,aAAcnC,GAE9BA,EAAWoC,QAAU,CAAC,SAAU,aAAc,gBAAiB,UAAW,aAAc","file":"31.8dd9fe71d36bd04a0433.bundle.js","sourcesContent":["import 'angular/guides/controllers';\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.guides.controllers'\n];\n\nangular.module('graphdb.framework.guides', modules);\n","angular.module('graphdb.framework.core.directives.paginations', [])\n .directive('paginations', function () {\n return {\n template: '<uib-pagination class=\"nav navbar-right\" total-items=\"matchedElements.length\" items-per-page=\"pageSize\" ng-model=\"page\" ng-change=\"changePagination()\" direction-links=\"false\" boundary-links=\"true\" max-size=\"5\" rotate=\"true\"></uib-pagination>',\n };\n });\n","import 'angular/guides/guides.service';\nimport 'angular/core/directives/paginations';\nimport {GuideUtils} from \"./guide-utils\";\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.guides.services',\n 'graphdb.framework.core.directives.paginations'\n];\n\nangular\n .module('graphdb.framework.guides.controllers', modules)\n .controller('GuidesCtrl', GuidesCtrl);\n\nGuidesCtrl.$inject = ['$scope', '$rootScope', 'GuidesService', '$filter', '$translate', '$interpolate'];\n\nfunction GuidesCtrl($scope, $rootScope, GuidesService, $filter, $translate, $interpolate) {\n\n $scope.guides = [];\n $scope.pageSizeOptions = [10, 20, 50, 100];\n $scope.page = 1;\n $scope.pageSize = $scope.pageSizeOptions[0];\n $scope.translationSubscription = undefined;\n\n $scope.init = function () {\n GuidesService.getGuides()\n .then(guides => {\n $scope.guides = $filter('orderBy')(guides, 'guideOrder');\n $scope.guides.forEach(guide => {\n guide.translatedGuideName = GuideUtils.translateLocalMessage($translate, $interpolate, guide.guideName);\n guide.translatedGuideDescription = GuideUtils.translateLocalMessage($translate, $interpolate, guide.guideDescription);\n switch (guide.guideLevel) {\n case undefined:\n case 0:\n guide.guideLevelLabel = 'view.guides.level.beginner';\n break;\n case 1:\n guide.guideLevelLabel = 'view.guides.level.intermediate';\n break;\n default: // 2 and above\n guide.guideLevelLabel = 'view.guides.level.advanced';\n }\n });\n $scope.matchedElements = $scope.guides;\n $scope.changePagination();\n });\n };\n\n $scope.startGuide = function (guide) {\n GuidesService.startGuide(guide);\n };\n\n if (!this.translationSubscription) {\n this.translationSubscription = $rootScope.$on('$translateChangeSuccess', () => {\n $scope.init();\n });\n }\n\n $scope.changePagination = function () {\n if (angular.isDefined($scope.guides)) {\n $scope.displayedGuides = $scope.guides.slice($scope.pageSize * ($scope.page - 1), $scope.pageSize * $scope.page);\n }\n };\n\n $scope.changePageSize = function (size) {\n $scope.page = 1;\n if (size) {\n $scope.pageSize = size;\n } else {\n $scope.pageSize = $scope.pageSizeOptions[0];\n }\n $scope.changePagination();\n };\n\n $scope.init();\n}\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[32,116],{257:function(e,t,n){"use strict";var r=r||{};r.Export={getCSSRules:function(e){var t=$('link[href="'+e+'"]')[0].sheet.rules,n="";return _.each(t,(function(e){n+=e.cssText})),n},generateBase64ImageSource:function(){var e=d3.selectAll("svg").attr({version:"1.1",xmlns:"http://www.w3.org/2000/svg"}).node().parentNode.innerHTML;return"data:image/svg+xml;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(e)))}},t.a=r},63:function(e,t){angular.module("graphdb.framework.rest.graphexplore.data.service",[]).factory("GraphDataRestService",n),n.$inject=["$http"];function n(e){return{getClassHierarchyData:function(t){return e.get("rest/class-hierarchy",{params:{graphURI:t}})},reloadClassHierarchy:function(t){return e.get("rest/class-hierarchy",{params:{doReload:!0,graphURI:t}})},getClassInstances:function(t){return e.get("rest/class-hierarchy/class-instances",{params:{targetUri:t}})},getDomainRangeData:function(t,n){return e.get("rest/domain-range",{params:{targetUri:t,collapsed:n}})},checkDomainRangeData:function(t){return e.head("rest/domain-range",{params:{targetUri:t}})},getRelationshipsData:function(t,n,r){return e.get("rest/dependencies/matrix",{params:{mode:n,classes:_.map(t,(function(e){return e.name})),graphURI:r}})},getRelationshipsClasses:function(t,n){return e.get("rest/dependencies/classes",{params:{mode:t,graphURI:n}})},getRelationshipsStatus:function(t){return e.get("rest/dependencies/status",{params:{graphURI:t}})},calculateRelationships:function(t){return e.get("rest/dependencies/update",{params:{graphURI:t}})},getPredicates:function(t,n,r){return e.get("rest/dependencies/predicates",{params:{from:t,to:n,mode:"all",graphURI:r}})},getInstanceNode:function(t){return e.get("rest/explore-graph/node",{params:{iri:t}})},getInstanceNodeLinks:function(t){return e.get("rest/explore-graph/links",{params:{iri:t}})},getRdfsLabelAndComment:function(t,n,r){const a=r||{};return e({url:"rest/explore/details",method:"GET",params:_.extend(a,{uri:t,languages:n}),headers:{Accept:"application/json"}})}}}},
|
|
2
|
-
//# sourceMappingURL=32.
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[32,116],{257:function(e,t,n){"use strict";var r=r||{};r.Export={getCSSRules:function(e){var t=$('link[href="'+e+'"]')[0].sheet.rules,n="";return _.each(t,(function(e){n+=e.cssText})),n},generateBase64ImageSource:function(){var e=d3.selectAll("svg").attr({version:"1.1",xmlns:"http://www.w3.org/2000/svg"}).node().parentNode.innerHTML;return"data:image/svg+xml;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(e)))}},t.a=r},63:function(e,t){angular.module("graphdb.framework.rest.graphexplore.data.service",[]).factory("GraphDataRestService",n),n.$inject=["$http"];function n(e){return{getClassHierarchyData:function(t){return e.get("rest/class-hierarchy",{params:{graphURI:t}})},reloadClassHierarchy:function(t){return e.get("rest/class-hierarchy",{params:{doReload:!0,graphURI:t}})},getClassInstances:function(t){return e.get("rest/class-hierarchy/class-instances",{params:{targetUri:t}})},getDomainRangeData:function(t,n){return e.get("rest/domain-range",{params:{targetUri:t,collapsed:n}})},checkDomainRangeData:function(t){return e.head("rest/domain-range",{params:{targetUri:t}})},getRelationshipsData:function(t,n,r){return e.get("rest/dependencies/matrix",{params:{mode:n,classes:_.map(t,(function(e){return e.name})),graphURI:r}})},getRelationshipsClasses:function(t,n){return e.get("rest/dependencies/classes",{params:{mode:t,graphURI:n}})},getRelationshipsStatus:function(t){return e.get("rest/dependencies/status",{params:{graphURI:t}})},calculateRelationships:function(t){return e.get("rest/dependencies/update",{params:{graphURI:t}})},getPredicates:function(t,n,r){return e.get("rest/dependencies/predicates",{params:{from:t,to:n,mode:"all",graphURI:r}})},getInstanceNode:function(t){return e.get("rest/explore-graph/node",{params:{iri:t}})},getInstanceNodeLinks:function(t){return e.get("rest/explore-graph/links",{params:{iri:t}})},getRdfsLabelAndComment:function(t,n,r){const a=r||{};return e({url:"rest/explore/details",method:"GET",params:_.extend(a,{uri:t,languages:n}),headers:{Accept:"application/json"}})}}}},88:function(e,t,n){"use strict";n.r(t);var r=n(257);n(63);function a(e,t){return{restrict:"A",template:'<div id="dependencies-chord"></div>',scope:{dependenciesData:"="},link:function(n){n.$watch("dependenciesData",(function(){if(n.dependenciesData){const a=n.dependenciesData;!function(a,s){if(function(){let e=!0;for(const t of a){if(t.some(e=>0!==e)){e=!1;break}}return e}())return;const i=d3.scale.category20(),o=d3.select("body").append("div").attr("class","tooltip").style("opacity",0);d3.select("body").on("click",(function(){o.style("opacity",0)}));const c=Math.min(800,800)/2.8,d=c-24,l=d3.svg.arc().innerRadius(d).outerRadius(c),p=d3.layout.chord().padding(.04).sortSubgroups(d3.descending).sortChords(d3.ascending),u=d3.svg.chord().radius(d),g=d3.select("#dependencies-chord").append("svg").attr("viewBox","0 0 800 800").attr("preserveAspectRatio","xMidYMid meet").style("font","10px sans-serif").append("g").attr("id","circle").attr("transform","translate(400,400)");g.append("circle").attr("r",c).style("fill","none"),p.matrix(a);const f=g.selectAll(".group").data(p.groups).enter().append("g").attr("class","group").on("mouseover",(function(e,t){h.classed("fade",(function(e){return e.source.index!==t&&e.target.index!==t}))}));f.append("title").text((function(e,t){return s[t]})),f.append("path").attr("id",(function(e,t){return"group"+t})).attr("d",l).style("fill",(function(e,t){return i(t)})),f.append("text").each((function(e){e.angle=(e.startAngle+e.endAngle)/2})).attr("dy",".35em").attr("transform",(function(e){return"rotate("+(180*e.angle/Math.PI-90)+")translate("+(d+26)+")"+(e.angle>Math.PI?"rotate(180)":"")})).style("text-anchor",(function(e){return e.angle>Math.PI?"end":null})).text((function(e){return s[e.index]}));const h=g.selectAll(".chord").data(p.chords).enter().append("path").attr("class","chord").style("fill",(function(e){return i(e.target.index)})).style("fill-opacity",".67").style("stroke","#000").style("stroke-width",".25px").style("cursor","pointer").attr("d",u);h.on("mouseover",(function(){d3.select(this).style({"fill-opacity":"1"})})),h.on("mouseout",(function(){d3.select(this).style({"fill-opacity":".67"})})),h.on("click",(function(e){const r=s[e.source.index],a=s[e.target.index],i=d3.event.pageX,c=d3.event.pageY;t.getPredicates(r,a,n.selectedGraph&&n.selectedGraph.contextID.uri).success((function(e){let t="<div class='dependencies-tooltip'>"+("<div class='row'>"+r+" <i class='fa fa-exchange'></i> "+a+"</div>")+_.map(e.slice(0,10),(function(e){const t=" <i class='fa fa-long-arrow-"+("out"===e.direction?"right":"left")+"'></i>";return"<div class='row'>"+e.predicate+" : "+e.weight+t+" </div>"})).join("");e.length>10?t=t+"<div class='pull-right'>And "+(e.length-10).toString()+" more...</div></div>":t+="</div>",o.html(t).style("left",i+"px").style("top",c+"px")})),o.transition().duration(200).style("opacity",1)})),d3.select("#circle").on("mouseleave",(function(){g.selectAll(".chord").classed("fade",!1)})),d3.select("#download-svg").on("mouseover",(function(){const t=r.a.Export.generateBase64ImageSource();d3.select(this).attr({href:t,download:"dependencies-"+e.getActiveRepository()+".svg"})}))}(a.matrix,a.nodes,a.direction)}}))}}}angular.module("graphdb.framework.graphexplore.directives.dependencies",["graphdb.framework.graphexplore.controllers.dependencies","graphdb.framework.rest.graphexplore.data.service"]).directive("dependenciesChord",a),a.$inject=["$repositories","GraphDataRestService"]}}]);
|
|
2
|
+
//# sourceMappingURL=32.8e1c25a47debdf5145d8.bundle.js.map
|
package/dist/{32.59a7369287d15e8b9ab6.bundle.js.map → 32.8e1c25a47debdf5145d8.bundle.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/lib/common/svg-export.js","webpack:///./src/js/angular/rest/graph-data.rest.service.js","webpack:///./src/js/angular/graphexplore/directives/dependencies-chord.directive.js"],"names":["SVG","Export","getCSSRules","cssSourceFilePath","cssRules","$","sheet","rules","cssStr","_","each","value","cssText","generateBase64ImageSource","exportSvg","d3","selectAll","attr","version","xmlns","node","parentNode","innerHTML","btoa","unescape","encodeURIComponent","angular","module","factory","GraphDataRestService","$inject","$http","getClassHierarchyData","graphURI","get","params","reloadClassHierarchy","doReload","getClassInstances","targetUri","getDomainRangeData","collapsed","checkDomainRangeData","head","getRelationshipsData","selectedClasses","direction","map","c","name","getRelationshipsClasses","getRelationshipsStatus","calculateRelationships","getPredicates","sourceClass","destinationClass","getInstanceNode","iri","getInstanceNodeLinks","getRdfsLabelAndComment","languages","extraParams","requestParams","url","method","extend","uri","headers","dependenciesChordDirective","$repositories","restrict","template","scope","dependenciesData","link","$watch","data","matrix","nodes","zeroMatrix","arr","some","item","isZeroMatrix","fill","scale","category20","tooltip","select","append","style","on","outerRadius","Math","min","innerRadius","arc","svg","layout","chord","padding","sortSubgroups","descending","sortChords","ascending","path","radius","group","groups","enter","d","i","classed","p","source","index","target","text","angle","startAngle","endAngle","PI","chords","this","px","event","pageX","py","pageY","selectedGraph","contextID","success","predicatesData","tooltipContent","slice","icon","predicate","weight","join","length","toString","html","transition","duration","imgSrc","href","download","getActiveRepository","drawChord","directive"],"mappings":"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","file":"32.59a7369287d15e8b9ab6.bundle.js","sourcesContent":["var SVG = SVG || {};\n\nSVG.Export = function () {\n function getCSSRules(cssSourceFilePath) {\n var cssRules = $('link[href=\"' + cssSourceFilePath + '\"]')[0].sheet.rules;\n var cssStr = \"\";\n _.each(cssRules, function (value) {\n cssStr += value.cssText;\n });\n return cssStr;\n }\n\n function generateBase64ImageSource() {\n // add needed xml namespace\n var exportSvg = d3.selectAll(\"svg\")\n .attr({\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n })\n .node().parentNode.innerHTML;\n\n // convert selected html to base64\n return \"data:image/svg+xml;charset=utf-8;base64,\" + btoa(unescape(encodeURIComponent(exportSvg)));\n }\n\n return {\n getCSSRules: getCSSRules,\n generateBase64ImageSource: generateBase64ImageSource\n };\n}();\n\nexport default SVG;\n","angular\n .module('graphdb.framework.rest.graphexplore.data.service', [])\n .factory('GraphDataRestService', GraphDataRestService);\n\nGraphDataRestService.$inject = ['$http'];\n\nconst CLASS_HIERARCHY_ENDPOINT = 'rest/class-hierarchy';\nconst DOMAIN_RANGE_ENDPOINT = 'rest/domain-range';\nconst DEPENDENCIES_ENDPOINT = 'rest/dependencies/';\nconst EXPORE_GRAPH_ENDPOINT = 'rest/explore-graph/';\n\nfunction GraphDataRestService($http) {\n return {\n // class hierarchy\n getClassHierarchyData,\n reloadClassHierarchy,\n getClassInstances,\n\n // domain-range graph\n getDomainRangeData,\n checkDomainRangeData,\n\n // class relationships\n getRelationshipsData,\n getRelationshipsClasses,\n getRelationshipsStatus,\n calculateRelationships,\n getPredicates,\n\n // instances graph\n getInstanceNode,\n getInstanceNodeLinks,\n\n // common\n getRdfsLabelAndComment\n };\n\n function getClassHierarchyData(graphURI) {\n return $http.get(CLASS_HIERARCHY_ENDPOINT, {\n params: {\n graphURI: graphURI\n }\n });\n }\n\n function reloadClassHierarchy(graphURI) {\n return $http.get(CLASS_HIERARCHY_ENDPOINT, {\n params: {\n doReload: true,\n graphURI: graphURI\n }\n });\n }\n\n function getClassInstances(targetUri) {\n return $http.get(`${CLASS_HIERARCHY_ENDPOINT}/class-instances`, {\n params: {\n targetUri\n }\n });\n }\n\n function checkDomainRangeData(targetUri) {\n return $http.head(DOMAIN_RANGE_ENDPOINT, {\n params: {\n targetUri\n }\n });\n }\n\n function getDomainRangeData(targetUri, collapsed) {\n return $http.get(DOMAIN_RANGE_ENDPOINT, {\n params: {\n targetUri,\n collapsed\n }\n });\n }\n\n function getRelationshipsData(selectedClasses, direction, graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}matrix`, {\n params: {\n 'mode': direction,\n 'classes': _.map(selectedClasses, function (c) {\n return c.name;\n }),\n 'graphURI': graphURI\n }\n });\n }\n\n function getRelationshipsClasses(direction, graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}classes`, {\n params: {\n 'mode': direction,\n 'graphURI': graphURI\n }\n });\n }\n\n function getRelationshipsStatus(graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}status`, {\n params: {\n graphURI: graphURI\n }\n });\n }\n\n function calculateRelationships(graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}update`, {\n params: {\n graphURI: graphURI\n }\n });\n }\n\n function getPredicates(sourceClass, destinationClass, graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}predicates`, {\n params: {\n 'from': sourceClass,\n 'to': destinationClass,\n 'mode': 'all',\n graphURI: graphURI\n }\n });\n }\n\n function getInstanceNode(iri) {\n return $http.get(`${EXPORE_GRAPH_ENDPOINT}node`, {\n params: {\n iri\n }\n });\n }\n\n function getInstanceNodeLinks(iri) {\n return $http.get(`${EXPORE_GRAPH_ENDPOINT}links`, {\n params: {\n iri\n }\n });\n }\n\n function getRdfsLabelAndComment(targetUri, languages, extraParams) {\n const requestParams = extraParams || {};\n return $http({\n url: 'rest/explore/details',\n method: 'GET',\n params: _.extend(requestParams, {uri: targetUri, languages}),\n headers: {\n 'Accept': 'application/json'\n }\n });\n }\n}\n","import SVG from 'lib/common/svg-export';\nimport 'angular/rest/graph-data.rest.service';\n\nangular\n .module('graphdb.framework.graphexplore.directives.dependencies', [\n 'graphdb.framework.graphexplore.controllers.dependencies',\n 'graphdb.framework.rest.graphexplore.data.service'\n ])\n .directive('dependenciesChord', dependenciesChordDirective);\n\ndependenciesChordDirective.$inject = ['$repositories', 'GraphDataRestService'];\n\nfunction dependenciesChordDirective($repositories, GraphDataRestService) {\n return {\n restrict: 'A',\n template: '<div id=\"dependencies-chord\"></div>',\n scope: {\n dependenciesData: '='\n },\n link: linkFunc\n };\n\n function linkFunc(scope) {\n // Used http://bost.ocks.org/mike/uberdata/\n\n const drawChord = function (matrix, nodes) {\n\n // Don't try to draw chord for zero matrix\n if (isZeroMatrix()) {\n return;\n }\n\n const fill = d3.scale.category20();\n\n const tooltip = d3.select(\"body\").append(\"div\")\n .attr(\"class\", \"tooltip\")\n .style(\"opacity\", 0);\n d3.select(\"body\").on(\"click\", function () {\n tooltip.style(\"opacity\", 0);\n });\n\n const width = 800;\n const height = 800;\n const outerRadius = Math.min(width, height) / 2.8;\n const innerRadius = outerRadius - 24;\n\n const arc = d3.svg.arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius);\n\n const layout = d3.layout.chord()\n .padding(.04)\n .sortSubgroups(d3.descending)\n .sortChords(d3.ascending);\n\n const path = d3.svg.chord()\n .radius(innerRadius);\n\n const svg = d3.select(\"#dependencies-chord\").append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + width + \" \" + height)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\")\n .style(\"font\", \"10px sans-serif\")\n .append(\"g\")\n .attr(\"id\", \"circle\")\n .attr(\"transform\", \"translate(\" + width / 2 + \",\" + height / 2 + \")\");\n\n svg.append(\"circle\")\n .attr(\"r\", outerRadius)\n .style(\"fill\", \"none\");\n\n // Compute the chord layout.\n layout.matrix(matrix);\n\n // Add a group per neighborhood.\n const group = svg.selectAll(\".group\")\n .data(layout.groups)\n .enter().append(\"g\")\n .attr(\"class\", \"group\")\n .on(\"mouseover\", mouseover);\n\n // Add a mouseover title.\n group.append(\"title\").text(function (d, i) {\n return nodes[i];\n });\n\n // Add the group arc.\n group.append(\"path\")\n .attr(\"id\", function (d, i) {\n return \"group\" + i;\n })\n .attr(\"d\", arc)\n .style(\"fill\", function (d, i) {\n return fill(i);\n });\n\n group.append(\"text\")\n .each(function (d) {\n d.angle = (d.startAngle + d.endAngle) / 2;\n })\n .attr(\"dy\", \".35em\")\n .attr(\"transform\", function (d) {\n return \"rotate(\" + (d.angle * 180 / Math.PI - 90) + \")\"\n + \"translate(\" + (innerRadius + 26) + \")\"\n + (d.angle > Math.PI ? \"rotate(180)\" : \"\");\n })\n .style(\"text-anchor\", function (d) {\n return d.angle > Math.PI ? \"end\" : null;\n })\n .text(function (d) {\n return nodes[d.index];\n });\n\n // Add the chords.\n const chord = svg.selectAll(\".chord\")\n .data(layout.chords)\n .enter().append(\"path\")\n .attr(\"class\", \"chord\")\n .style(\"fill\", function (d) {\n return fill(d.target.index);\n })\n .style(\"fill-opacity\", \".67\")\n .style(\"stroke\", \"#000\")\n .style(\"stroke-width\", \".25px\")\n .style(\"cursor\", \"pointer\")\n .attr(\"d\", path);\n\n chord.on(\"mouseover\", function () {\n d3.select(this).style({\"fill-opacity\": \"1\"});\n });\n\n chord.on(\"mouseout\", function () {\n d3.select(this).style({\"fill-opacity\": \".67\"});\n });\n\n chord.on(\"click\", function (d) {\n const sourceClass = nodes[d.source.index];\n const destinationClass = nodes[d.target.index];\n const px = d3.event.pageX;\n const py = d3.event.pageY;\n\n GraphDataRestService.getPredicates(sourceClass, destinationClass, scope.selectedGraph && scope.selectedGraph.contextID.uri)\n .success(function (predicatesData) {\n const directionIcon = \" <i class='fa fa-exchange'></i> \";\n const header = \"<div class='row'>\" + sourceClass + directionIcon + destinationClass + \"</div>\";\n const predicatesList = _.map(predicatesData.slice(0, 10), function (p) {\n const icon = \" <i class='fa fa-long-arrow-\" + (p.direction === \"out\" ? \"right\" : \"left\") + \"'></i>\";\n return \"<div class='row'>\" + p.predicate + \" : \" + p.weight + icon + \" </div>\";\n }).join(\"\");\n\n let tooltipContent = \"<div class='dependencies-tooltip'>\" + header + predicatesList;\n if (predicatesData.length > 10) {\n tooltipContent = tooltipContent + \"<div class='pull-right'>And \" + (predicatesData.length - 10).toString() + \" more...</div></div>\";\n } else {\n tooltipContent = tooltipContent + \"</div>\";\n }\n tooltip.html(tooltipContent)\n .style(\"left\", (px) + \"px\").style(\"top\", (py) + \"px\");\n });\n\n tooltip.transition()\n .duration(200)\n .style(\"opacity\", 1);\n });\n\n function mouseover(d, i) {\n chord.classed(\"fade\", function (p) {\n return p.source.index !== i\n && p.target.index !== i;\n });\n }\n\n /**\n * Checks if all values of the returned matrix are zero\n * @returns false if non zero value is found, true otherwise\n */\n function isZeroMatrix() {\n let zeroMatrix = true;\n\n for (const arr of matrix) {\n const nonZeroFound = arr.some(item => item !== 0);\n if (nonZeroFound) {\n zeroMatrix = false;\n break;\n }\n }\n\n return zeroMatrix;\n }\n\n d3.select(\"#circle\").on(\"mouseleave\", function () {\n svg.selectAll(\".chord\").classed(\"fade\", false);\n });\n\n /*\n * Prepares SVG document image export by adding xml namespaces and\n * additional style information\n */\n function prepareForSVGImageExport() {\n // convert selected html to base64\n const imgSrc = SVG.Export.generateBase64ImageSource();\n\n // set the binary image and a name for the downloadable file on the export button\n d3.select(this).attr({\n href: imgSrc,\n download: \"dependencies-\" + $repositories.getActiveRepository() + \".svg\"\n });\n }\n\n d3.select(\"#download-svg\")\n .on(\"mouseover\", prepareForSVGImageExport);\n };\n\n scope.$watch('dependenciesData', function () {\n if (scope.dependenciesData) {\n const data = scope.dependenciesData;\n drawChord(data.matrix, data.nodes, data.direction);\n }\n });\n }\n\n}\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/js/lib/common/svg-export.js","webpack:///./src/js/angular/rest/graph-data.rest.service.js","webpack:///./src/js/angular/graphexplore/directives/dependencies-chord.directive.js"],"names":["SVG","Export","getCSSRules","cssSourceFilePath","cssRules","$","sheet","rules","cssStr","_","each","value","cssText","generateBase64ImageSource","exportSvg","d3","selectAll","attr","version","xmlns","node","parentNode","innerHTML","btoa","unescape","encodeURIComponent","angular","module","factory","GraphDataRestService","$inject","$http","getClassHierarchyData","graphURI","get","params","reloadClassHierarchy","doReload","getClassInstances","targetUri","getDomainRangeData","collapsed","checkDomainRangeData","head","getRelationshipsData","selectedClasses","direction","map","c","name","getRelationshipsClasses","getRelationshipsStatus","calculateRelationships","getPredicates","sourceClass","destinationClass","getInstanceNode","iri","getInstanceNodeLinks","getRdfsLabelAndComment","languages","extraParams","requestParams","url","method","extend","uri","headers","dependenciesChordDirective","$repositories","restrict","template","scope","dependenciesData","link","$watch","data","matrix","nodes","zeroMatrix","arr","some","item","isZeroMatrix","fill","scale","category20","tooltip","select","append","style","on","outerRadius","Math","min","innerRadius","arc","svg","layout","chord","padding","sortSubgroups","descending","sortChords","ascending","path","radius","group","groups","enter","d","i","classed","p","source","index","target","text","angle","startAngle","endAngle","PI","chords","this","px","event","pageX","py","pageY","selectedGraph","contextID","success","predicatesData","tooltipContent","slice","icon","predicate","weight","join","length","toString","html","transition","duration","imgSrc","href","download","getActiveRepository","drawChord","directive"],"mappings":"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","file":"32.8e1c25a47debdf5145d8.bundle.js","sourcesContent":["var SVG = SVG || {};\n\nSVG.Export = function () {\n function getCSSRules(cssSourceFilePath) {\n var cssRules = $('link[href=\"' + cssSourceFilePath + '\"]')[0].sheet.rules;\n var cssStr = \"\";\n _.each(cssRules, function (value) {\n cssStr += value.cssText;\n });\n return cssStr;\n }\n\n function generateBase64ImageSource() {\n // add needed xml namespace\n var exportSvg = d3.selectAll(\"svg\")\n .attr({\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n })\n .node().parentNode.innerHTML;\n\n // convert selected html to base64\n return \"data:image/svg+xml;charset=utf-8;base64,\" + btoa(unescape(encodeURIComponent(exportSvg)));\n }\n\n return {\n getCSSRules: getCSSRules,\n generateBase64ImageSource: generateBase64ImageSource\n };\n}();\n\nexport default SVG;\n","angular\n .module('graphdb.framework.rest.graphexplore.data.service', [])\n .factory('GraphDataRestService', GraphDataRestService);\n\nGraphDataRestService.$inject = ['$http'];\n\nconst CLASS_HIERARCHY_ENDPOINT = 'rest/class-hierarchy';\nconst DOMAIN_RANGE_ENDPOINT = 'rest/domain-range';\nconst DEPENDENCIES_ENDPOINT = 'rest/dependencies/';\nconst EXPORE_GRAPH_ENDPOINT = 'rest/explore-graph/';\n\nfunction GraphDataRestService($http) {\n return {\n // class hierarchy\n getClassHierarchyData,\n reloadClassHierarchy,\n getClassInstances,\n\n // domain-range graph\n getDomainRangeData,\n checkDomainRangeData,\n\n // class relationships\n getRelationshipsData,\n getRelationshipsClasses,\n getRelationshipsStatus,\n calculateRelationships,\n getPredicates,\n\n // instances graph\n getInstanceNode,\n getInstanceNodeLinks,\n\n // common\n getRdfsLabelAndComment\n };\n\n function getClassHierarchyData(graphURI) {\n return $http.get(CLASS_HIERARCHY_ENDPOINT, {\n params: {\n graphURI: graphURI\n }\n });\n }\n\n function reloadClassHierarchy(graphURI) {\n return $http.get(CLASS_HIERARCHY_ENDPOINT, {\n params: {\n doReload: true,\n graphURI: graphURI\n }\n });\n }\n\n function getClassInstances(targetUri) {\n return $http.get(`${CLASS_HIERARCHY_ENDPOINT}/class-instances`, {\n params: {\n targetUri\n }\n });\n }\n\n function checkDomainRangeData(targetUri) {\n return $http.head(DOMAIN_RANGE_ENDPOINT, {\n params: {\n targetUri\n }\n });\n }\n\n function getDomainRangeData(targetUri, collapsed) {\n return $http.get(DOMAIN_RANGE_ENDPOINT, {\n params: {\n targetUri,\n collapsed\n }\n });\n }\n\n function getRelationshipsData(selectedClasses, direction, graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}matrix`, {\n params: {\n 'mode': direction,\n 'classes': _.map(selectedClasses, function (c) {\n return c.name;\n }),\n 'graphURI': graphURI\n }\n });\n }\n\n function getRelationshipsClasses(direction, graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}classes`, {\n params: {\n 'mode': direction,\n 'graphURI': graphURI\n }\n });\n }\n\n function getRelationshipsStatus(graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}status`, {\n params: {\n graphURI: graphURI\n }\n });\n }\n\n function calculateRelationships(graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}update`, {\n params: {\n graphURI: graphURI\n }\n });\n }\n\n function getPredicates(sourceClass, destinationClass, graphURI) {\n return $http.get(`${DEPENDENCIES_ENDPOINT}predicates`, {\n params: {\n 'from': sourceClass,\n 'to': destinationClass,\n 'mode': 'all',\n graphURI: graphURI\n }\n });\n }\n\n function getInstanceNode(iri) {\n return $http.get(`${EXPORE_GRAPH_ENDPOINT}node`, {\n params: {\n iri\n }\n });\n }\n\n function getInstanceNodeLinks(iri) {\n return $http.get(`${EXPORE_GRAPH_ENDPOINT}links`, {\n params: {\n iri\n }\n });\n }\n\n function getRdfsLabelAndComment(targetUri, languages, extraParams) {\n const requestParams = extraParams || {};\n return $http({\n url: 'rest/explore/details',\n method: 'GET',\n params: _.extend(requestParams, {uri: targetUri, languages}),\n headers: {\n 'Accept': 'application/json'\n }\n });\n }\n}\n","import SVG from 'lib/common/svg-export';\nimport 'angular/rest/graph-data.rest.service';\n\nangular\n .module('graphdb.framework.graphexplore.directives.dependencies', [\n 'graphdb.framework.graphexplore.controllers.dependencies',\n 'graphdb.framework.rest.graphexplore.data.service'\n ])\n .directive('dependenciesChord', dependenciesChordDirective);\n\ndependenciesChordDirective.$inject = ['$repositories', 'GraphDataRestService'];\n\nfunction dependenciesChordDirective($repositories, GraphDataRestService) {\n return {\n restrict: 'A',\n template: '<div id=\"dependencies-chord\"></div>',\n scope: {\n dependenciesData: '='\n },\n link: linkFunc\n };\n\n function linkFunc(scope) {\n // Used http://bost.ocks.org/mike/uberdata/\n\n const drawChord = function (matrix, nodes) {\n\n // Don't try to draw chord for zero matrix\n if (isZeroMatrix()) {\n return;\n }\n\n const fill = d3.scale.category20();\n\n const tooltip = d3.select(\"body\").append(\"div\")\n .attr(\"class\", \"tooltip\")\n .style(\"opacity\", 0);\n d3.select(\"body\").on(\"click\", function () {\n tooltip.style(\"opacity\", 0);\n });\n\n const width = 800;\n const height = 800;\n const outerRadius = Math.min(width, height) / 2.8;\n const innerRadius = outerRadius - 24;\n\n const arc = d3.svg.arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius);\n\n const layout = d3.layout.chord()\n .padding(.04)\n .sortSubgroups(d3.descending)\n .sortChords(d3.ascending);\n\n const path = d3.svg.chord()\n .radius(innerRadius);\n\n const svg = d3.select(\"#dependencies-chord\").append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + width + \" \" + height)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\")\n .style(\"font\", \"10px sans-serif\")\n .append(\"g\")\n .attr(\"id\", \"circle\")\n .attr(\"transform\", \"translate(\" + width / 2 + \",\" + height / 2 + \")\");\n\n svg.append(\"circle\")\n .attr(\"r\", outerRadius)\n .style(\"fill\", \"none\");\n\n // Compute the chord layout.\n layout.matrix(matrix);\n\n // Add a group per neighborhood.\n const group = svg.selectAll(\".group\")\n .data(layout.groups)\n .enter().append(\"g\")\n .attr(\"class\", \"group\")\n .on(\"mouseover\", mouseover);\n\n // Add a mouseover title.\n group.append(\"title\").text(function (d, i) {\n return nodes[i];\n });\n\n // Add the group arc.\n group.append(\"path\")\n .attr(\"id\", function (d, i) {\n return \"group\" + i;\n })\n .attr(\"d\", arc)\n .style(\"fill\", function (d, i) {\n return fill(i);\n });\n\n group.append(\"text\")\n .each(function (d) {\n d.angle = (d.startAngle + d.endAngle) / 2;\n })\n .attr(\"dy\", \".35em\")\n .attr(\"transform\", function (d) {\n return \"rotate(\" + (d.angle * 180 / Math.PI - 90) + \")\"\n + \"translate(\" + (innerRadius + 26) + \")\"\n + (d.angle > Math.PI ? \"rotate(180)\" : \"\");\n })\n .style(\"text-anchor\", function (d) {\n return d.angle > Math.PI ? \"end\" : null;\n })\n .text(function (d) {\n return nodes[d.index];\n });\n\n // Add the chords.\n const chord = svg.selectAll(\".chord\")\n .data(layout.chords)\n .enter().append(\"path\")\n .attr(\"class\", \"chord\")\n .style(\"fill\", function (d) {\n return fill(d.target.index);\n })\n .style(\"fill-opacity\", \".67\")\n .style(\"stroke\", \"#000\")\n .style(\"stroke-width\", \".25px\")\n .style(\"cursor\", \"pointer\")\n .attr(\"d\", path);\n\n chord.on(\"mouseover\", function () {\n d3.select(this).style({\"fill-opacity\": \"1\"});\n });\n\n chord.on(\"mouseout\", function () {\n d3.select(this).style({\"fill-opacity\": \".67\"});\n });\n\n chord.on(\"click\", function (d) {\n const sourceClass = nodes[d.source.index];\n const destinationClass = nodes[d.target.index];\n const px = d3.event.pageX;\n const py = d3.event.pageY;\n\n GraphDataRestService.getPredicates(sourceClass, destinationClass, scope.selectedGraph && scope.selectedGraph.contextID.uri)\n .success(function (predicatesData) {\n const directionIcon = \" <i class='fa fa-exchange'></i> \";\n const header = \"<div class='row'>\" + sourceClass + directionIcon + destinationClass + \"</div>\";\n const predicatesList = _.map(predicatesData.slice(0, 10), function (p) {\n const icon = \" <i class='fa fa-long-arrow-\" + (p.direction === \"out\" ? \"right\" : \"left\") + \"'></i>\";\n return \"<div class='row'>\" + p.predicate + \" : \" + p.weight + icon + \" </div>\";\n }).join(\"\");\n\n let tooltipContent = \"<div class='dependencies-tooltip'>\" + header + predicatesList;\n if (predicatesData.length > 10) {\n tooltipContent = tooltipContent + \"<div class='pull-right'>And \" + (predicatesData.length - 10).toString() + \" more...</div></div>\";\n } else {\n tooltipContent = tooltipContent + \"</div>\";\n }\n tooltip.html(tooltipContent)\n .style(\"left\", (px) + \"px\").style(\"top\", (py) + \"px\");\n });\n\n tooltip.transition()\n .duration(200)\n .style(\"opacity\", 1);\n });\n\n function mouseover(d, i) {\n chord.classed(\"fade\", function (p) {\n return p.source.index !== i\n && p.target.index !== i;\n });\n }\n\n /**\n * Checks if all values of the returned matrix are zero\n * @returns false if non zero value is found, true otherwise\n */\n function isZeroMatrix() {\n let zeroMatrix = true;\n\n for (const arr of matrix) {\n const nonZeroFound = arr.some(item => item !== 0);\n if (nonZeroFound) {\n zeroMatrix = false;\n break;\n }\n }\n\n return zeroMatrix;\n }\n\n d3.select(\"#circle\").on(\"mouseleave\", function () {\n svg.selectAll(\".chord\").classed(\"fade\", false);\n });\n\n /*\n * Prepares SVG document image export by adding xml namespaces and\n * additional style information\n */\n function prepareForSVGImageExport() {\n // convert selected html to base64\n const imgSrc = SVG.Export.generateBase64ImageSource();\n\n // set the binary image and a name for the downloadable file on the export button\n d3.select(this).attr({\n href: imgSrc,\n download: \"dependencies-\" + $repositories.getActiveRepository() + \".svg\"\n });\n }\n\n d3.select(\"#download-svg\")\n .on(\"mouseover\", prepareForSVGImageExport);\n };\n\n scope.$watch('dependenciesData', function () {\n if (scope.dependenciesData) {\n const data = scope.dependenciesData;\n drawChord(data.matrix, data.nodes, data.direction);\n }\n });\n }\n\n}\n"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{256:function(t,e,r){"use strict";var a=a||{};a.Text=function(){function t(t,e,r,a){r=r||10;var n=e/3;return"string"==typeof t?(n*=10/(t.substring(0,e/3).length+1.5),n+=1,t.match(/[\u0900-\u0DFF\u1100-\u11FF\u2E80-\u2EFF\u3000-\u9FFF]/)&&(n*=.6),n<r&&(n=r),Math.round(n)):(n<r&&(n=r),Math.round(n))}return{calcFontSizeRaw:t,calcFontSize:function(e,r,a,n){return t(e,r,a)+"px"},getTextWithElipsisIfNeeded:function(t,e){return"string"==typeof t&&t.length>e?t.substring(0,e-3)+"...":t}}}(),a.Transition={fadeIn:function(t,e){t.style("opacity",0).transition().duration(e).style("opacity",1)},fadeOut:function(t,e){t.style("opacity",1).transition().duration(e).style("opacity",0)}},a.Click={delayDblClick:function(){var t=d3.dispatch("click","dblclick");return d3.rebind((function(e){var r,a=null;e.on("mousedown",(function(){r=d3.mouse(document.body),new Date})),e.on("mouseup",(function(e){var n,o;n=r,o=d3.mouse(document.body),Math.sqrt(Math.pow(n[0]-o[0],2),Math.pow(n[1]-o[1],2))>5||(a?(window.clearTimeout(a),a=null,t.dblclick(e)):a=window.setTimeout((d3.event,function(){t.click(e),a=null}),250))}))}),t,"on")}},e.a=a},257:function(t,e,r){"use strict";var a=a||{};a.Export={getCSSRules:function(t){var e=$('link[href="'+t+'"]')[0].sheet.rules,r="";return _.each(e,(function(t){r+=t.cssText})),r},generateBase64ImageSource:function(){var t=d3.selectAll("svg").attr({version:"1.1",xmlns:"http://www.w3.org/2000/svg"}).node().parentNode.innerHTML;return"data:image/svg+xml;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(t)))}},e.a=a},85:function(t,e,r){"use strict";r.r(e);var a=r(257),n=r(256);r(5);function o(t,e,r,o,s,i,c,l,d,u,p,f,g){return{restrict:"AE",template:'<div id="domain-range"></div>',scope:{showPredicatesInfoPanel:"=",selectedPredicate:"=",collapseEdges:"="},link:function(u){const p=l((function(){!function(u){d3.selection.prototype.moveToFront=function(){return this.each((function(){d3.select(this.parentNode.appendChild(this))}))},d3.selection.prototype.moveToBack=function(){return this.each((function(){const t=this.parentNode.firstChild;t&&this.parentNode.insertBefore(this,t)}))};var p=d3.layout.force().size([1200,600]).charge(-900),h=p.drag().on("dragstart",(function(t){d3.select(this).classed("selected",t.selected=!0)})),y=d3.select("#domain-range").append("svg").attr("viewBox","0 0 1200 600").attr("preserveAspectRatio","xMidYMid meet").on("dblclick.zoom",null),x=y.append("defs");x.append("marker").attr({id:"arrow",viewBox:"0 -5 10 10",refX:10,refY:0,markerUnits:"strokeWidth",markerWidth:5,markerHeight:5,orient:"auto",fill:f}).append("path").attr({d:"M0,-5L10,0L0,5",class:"arrowHead"}),x.append("marker").attr({id:"collapsed-arrow",viewBox:"0 -5 10 10",refX:9,refY:0,markerUnits:"strokeWidth",markerWidth:4,markerHeight:4,orient:"auto",fill:f}).append("path").attr({d:"M0,-5L10,0L0,5",class:"arrowHead"}),x.append("marker").attr({id:"arrow-loop",viewBox:"0 -5 10 10",refX:7,refY:0,markerUnits:"strokeWidth",markerWidth:5,markerHeight:5,orient:"auto",fill:f}).append("path").attr({d:"M0,-5L10,0L0,5",class:"arrowHead"}),d3.select("#download-svg").on("mouseover",(function(){var t=a.a.Export.getCSSRules("css/domain-range-graph.css?v=2.2.4-TR2");$("defs").append('<style type="text/css"><![CDATA['+t+"]]></style>");var e=a.a.Export.generateBase64ImageSource();d3.select(this).attr({href:e,download:"domain-range-graph-"+r.getActiveRepository()+".svg"})}));var m=d3.select(".legend-container").append("svg").attr("viewBox","0 0 "+1200/7+" "+1200/7*1.2).attr("preserveAspectRatio","xMidYMid meet");m.append("rect").attr({width:1200/7,height:1200/7*1.2}).style("fill","rgba(235, 235, 235, 0.9)");var v=16+1200/18/2.5,k=v+1200/90;m.append("circle").attr({class:"legend-class-node",cx:(16+v)/2,cy:30,r:1200/18/4.5});m.append("text").attr({x:k,y:30+1200/370}).style("font-size",1200/90/1.1+"px").text("main class node");m.append("circle").attr({class:"legend-object-node",cx:(16+v)/2,cy:70,r:1200/110/1.25});m.append("text").attr({x:k,y:30+1200/370+40}).style("font-size",1200/90/1.1+"px").text("class node");m.append("circle").attr({class:"legend-datatype-node",cx:(16+v)/2,cy:70+1200/45,r:1200/110/2});m.append("text").attr({x:k,y:99.90990990990991}).style("font-size",1200/90/1.1+"px").text("datatype node");d3.select(".legend-class-node");m.append("line").attr({class:"property-arrow",x1:16,y1:123.33333333333334,x2:v,y2:123.33333333333334}).style("stroke-width",1.2).attr("marker-end","url("+s.absUrl()+"#arrow)"),m.append("text").attr({x:k,y:126.57657657657658}).style("font-size",1200/90/1.1+"px").text("explicit property");m.append("line").attr({class:"implicit-property-arrow",x1:16,y1:150,x2:v,y2:150}).style("stroke-width",1.2).attr("marker-end","url("+s.absUrl()+"#arrow)"),m.append("text").attr({x:k,y:150+1200/370}).style("font-size",1200/90/1.1+"px").text("implicit property");m.append("line").attr({class:"collapsed-property-arrow",x1:16,y1:150+1200/45,x2:v,y2:150+1200/45}).style("stroke-width",2).attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)"),m.append("text").attr({x:k,y:179.9099099099099}).style("font-size",1200/90/1.1+"px").text("collapsed property");var b=y,w=s.search().uri,E=s.search().name,N=s.search().collapsed;o.getDomainRangeData(w,N).success((function(t,e,r){u.domainRangeGraphData=t})).error((function(t){d.error("Request for "+E+" failed!")})),$(window).on("popstate",(function(){i.set(c.DOMAIN_RANGE_WENT_BACK,!0)})),e.onpopstate=function(e){e.state&&t.$broadcast("changeCollapsedEdgesState",e.state.collapsed)},u.$watch("collapseEdges",(function(){angular.isUndefined(u.collapseEdges)||(i.set(c.DOMAIN_RANGE_COLLAPSE_EDGES,u.collapseEdges),"true"!==i.get(c.DOMAIN_RANGE_WENT_BACK)&&function(e){t.$broadcast("switchEdgeMode",{uri:w,name:E,collapsed:e})}(u.collapseEdges),i.remove(c.DOMAIN_RANGE_WENT_BACK))})),u.$watch("domainRangeGraphData",(function(){if(u.domainRangeGraphData){var r=angular.copy(u.domainRangeGraphData);p.nodes(r.nodes).links(r.links);var a=b.selectAll(".link").data(r.links).enter().append("g");function o(t){t.style("stroke",f),t.style("stroke-width",2),t.attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)")}var i,c,d=0;a.each((function(t){if(t.objectPropNodeClassUri!==w)i=a.append("line").attr({class:"link","marker-end":"url("+s.absUrl()+"#arrow)"}).style("stroke-width",1.2).each((function(t){switch(t.propertyType){case"objectLeft":t.targetRadius=1200/18;break;case"objectRight":t.targetRadius=1200/110;break;case"datatype":t.targetRadius=1200/110/2;break;default:t.targetRadius=0}var e=d3.select(this);t.targetNodeEdgeCount>1?o(e):t.implicit&&e.style("stroke-dasharray","3, 3")}));else{if(angular.isUndefined(c)){c=d3.select(this).append("path").attr({d:"M 0 0 A "+1200/18/2+" "+1200/18/2+" 0 1 1 0 "+1200/18/2,class:"loop-link",fill:"none","marker-end":"url("+s.absUrl()+"#arrow-loop)"}).style("stroke-width",1.2)}(d+=t.targetNodeEdgeCount)>1&&o(d3.select(".loop-link"))}}));var y={};function x(){$.isEmptyObject(y)||(y.text.style("fill","black"),y.background.style("fill","#f0f0f0"))}function m(t){x(),y.text=d3.select(this),y.background=d3.select(this.previousSibling),y.text.style("fill","white"),y.background.style("fill",f),l((function(){u.showPredicatesInfoPanel=!0,u.selectedPredicate=t})),d3.event.stopPropagation()}$("document").ready((function(){$("#domain-range").bind("click",x)}));var v=a.append("text").attr("class",(function(t){return t.objectPropNodeClassUri===w?"loop-link-property-name":"property-name"})).attr("dx",(function(t){return 1200/18/2*("objectLeft"===t.propertyType?1:-1)})).style("text-anchor",(function(t){return"objectLeft"===t.propertyType?"end":"start"})).style("font-size",1200/90).text((function(t){return t.targetNodeEdgeCount>1?t.targetNodeEdgeCount+" predicates":t.name}));v.each((function(t){var r=d3.select(this);/\d\spredicates/.test(r.text())?r.style("font-weight","bold").on("click",m):r.on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.uri),"_blank")}))}));var k=a.append("rect").attr("class",(function(t){return t.objectPropNodeClassUri!==w?"link-background":"loop-link-background"})).attr("width",(function(t){return t.calculatedWidth=this.previousSibling.getBBox().width,t.calculatedWidth+4})).attr("height",(function(t){return t.calculatedHeight=this.previousSibling.getBBox().height,t.calculatedHeight+2})).attr("transform",(function(t){var e=2-1200/18/2*("objectLeft"===t.propertyType?1:-1);return"objectLeft"===t.propertyType&&(e+=t.calculatedWidth),"translate(-"+e+",-"+(2+t.calculatedHeight/2)+")"})).on("click",(function(t){d3.event.stopPropagation()})),N=b.selectAll(".node").data(r.nodes).enter().append("g"),R=N.filter((function(t){return t.objectPropClassUri!==w})).append("circle").each((function(t){var e=d3.select(this);"main"===t.classPosition?e.attr({class:"class-node",r:1200/18}).attr("marker-end","url("+s.absUrl()+"#loop-link)"):null===t.objectPropClassName?e.attr({class:"datatype-node",r:1200/110/2}):e.attr({class:"object-prop-node",r:1200/110})})).call(h);d3.selectAll(".object-prop-node").on("dblclick",(function(e,r){u.$apply((function(){t.$broadcast("reloadDomainRangeGraphView",e,r)}))})),N.filter((function(t){return t.objectPropClassName&&t.objectPropClassUri!==w})).append("text").attr("class",(function(t){return t.classPosition+"-class-label"})).style("font-size",1200/90).text((function(t){return t.objectPropClassName})).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.objectPropClassUri),"_blank")}));var C=N.select("text");b.select(".class-node").each((function(){d3.select(this.parentNode).append("text").attr("class","rdf-class-label").style("font-size",(function(t){return n.a.Text.calcFontSize(E,1200/18)})).text(E).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(w),"_blank")}))}));var T=b.select(".class-node + text"),A=d3.select(".class-node"),L=d3.selectAll(".loop-link-background"),_=d3.selectAll(".loop-link-property-name");if(v=d3.selectAll(".property-name"),!angular.isUndefined(c)){var M=[];L.each((function(t,e){d3.select(this);M.push({idx:e,width:t.calculatedWidth,height:t.calculatedHeight})}))}p.on("tick",(function(t){var e=8*t.alpha;function r(t){var e=t.x+1200/18*2,r=t.y-1200/18/1.9;var a=[];L.each((function(n,o){a.push(n),o<g?function(a,n){var o=$.grep(M,(function(t){return t.idx==n}));n>0&&(e+=parseFloat(n*(o[0].height/(n/1.4)))),a.attr({transform:"rotate(270, "+t.x+","+t.y+") translate("+e+","+r+")",width:o[0].height,height:o[0].width})}(d3.select(this),o):d3.select(this).remove()})),function(t){var e;d3.select(".view-more-preds-label").style("font-weight","bold").each((function(r){r.target.allEdges=t,e=this.getComputedTextLength()})).on("click",m),d3.select(".view-more-preds-rect").attr("height",e+4)}(a)}i.filter((function(t){return t.objectPropNodeClassUri!==w})).attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.targetX})).attr("y2",(function(t){return t.targetY})).each((function(t){!function(t){"objectLeft"===t.propertyType?(t.source.x-=8*e,t.source.y-=e/9):(t.target.x+=8*e,t.target.y-=e/9)}(t);var r=Math.atan2(t.target.y-t.source.y,t.target.x-t.source.x);t.targetX=t.target.x-Math.cos(r)*t.targetRadius,t.targetY=t.target.y-Math.sin(r)*t.targetRadius})),R.each((function(t){"main"!==t.classPosition||angular.isUndefined(c)||(!function(t){var e=t.x+64,r=t.y-1200/18/5.7-5;c.attr("transform","rotate(270, "+t.x+","+t.y+") translate("+e+","+r+")")}(t),function(t){function e(e,r){var a=$.grep(M,(function(t){return t.idx==r})),n=0;r>0&&(n=parseFloat(2*r*(a[0].height/1.4)));var o=t.x,s=t.y-1200/18*2.1-n;e.attr({x:o,y:s}).moveToFront()}_.each((function(t,r){var a=d3.select(this),n=_.size()-g;n<0?e(a,r):(0==r&&!u.collapseEdges&&n>1&&(!function(t,e,r){t.classed("view-more-preds-label",!0).text(r+" predicates more ..."),null!==this.nextSibling&&e.classed("view-more-preds-rect",!0)}(a,d3.select(this.nextSibling),n),e(a,r)),r<g?e(a,r):a.remove())}))}(t),r(t)),t.objectPropClassUri!==w&&d3.select(this).attr("cx",(function(t){return"main"===t.classPosition?function(t){!window.ActiveXObject&&"ActiveXObject"in window&&(Math.log10=function(t){return Math.log(t)/Math.LN10});var e=A.attr("cx")-600,r=.5*Math.log10(Math.abs(e));return t.x+=e>0?-r:r,t.x}(t):t.x})).attr("cy",(function(t){return t.y}))})),T.attr("x",(function(t){return t.x})).attr("y",(function(t){return t.y})).moveToFront(),k.filter((function(t){return t.objectPropNodeClassUri!==w})).attr("x",(function(t){return t.target.x>t.source.x?t.source.x+(t.target.x-t.source.x)/2:t.target.x+(t.source.x-t.target.x)/2})).attr("y",(function(t){return t.target.y>t.source.y?t.source.y+(t.target.y-t.source.y)/2:t.target.y+(t.source.y-t.target.y)/2})).moveToFront(),v.attr("x",(function(t){return t.target.x>t.source.x?t.source.x+(t.target.x-t.source.x)/2:t.target.x+(t.source.x-t.target.x)/2})).attr("y",(function(t){return t.target.y>t.source.y?t.source.y+(t.target.y-t.source.y)/2:t.target.y+(t.source.y-t.target.y)/2})).moveToFront(),C.attr("x",(function(t){return"right"===t.classPosition?t.x+1200/110*1.2:t.x-1200/110*1.2})).attr("y",(function(t){return t.y})).moveToFront()})).linkDistance(1200/3.5).start()}}))}(u)}),50);u.$on("$destroy",(function(){l.cancel(p)}))}}}angular.module("graphdb.framework.graphexplore.directives.domainrange",["graphdb.framework.graphexplore.controllers.domainrange","graphdb.framework.utils.localstorageadapter"]).constant("ONTO_RED","var(--onto-orange)").constant("ONTO_GREEN","var(--onto-green)").constant("ONTO_BLUE","var(--onto-blue)").constant("NON_COLLAPSED_REFLEXIVE_LINK_LIMIT",6).directive("domainRangeGraph",o),o.$inject=["$rootScope","$window","$repositories","GraphDataRestService","$location","LocalStorageAdapter","LSKeys","$timeout","toastr","ONTO_RED","ONTO_GREEN","ONTO_BLUE","NON_COLLAPSED_REFLEXIVE_LINK_LIMIT"]}}]);
|
|
2
|
+
//# sourceMappingURL=33.89b51420b48880728b96.bundle.js.map
|