graphdb-workbench 2.0.0-M3-RC3 → 2.0.0-RC2
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/{10.91f8aa0494201bb12b25.bundle.js → 10.eab0a417fa2f2831905e.bundle.js} +2 -2
- package/dist/10.eab0a417fa2f2831905e.bundle.js.map +1 -0
- package/dist/{104.42f8ece72006965c902d.bundle.js → 104.7e16b2863108db706fe7.bundle.js} +2 -2
- package/dist/104.7e16b2863108db706fe7.bundle.js.map +1 -0
- package/dist/{11.32f5a72d66bb699e9e8b.bundle.js → 11.3957302d7a301df30dd1.bundle.js} +2 -2
- package/dist/11.3957302d7a301df30dd1.bundle.js.map +1 -0
- package/dist/111.ceb781497f3c5dfd1446.bundle.js +2 -0
- package/dist/111.ceb781497f3c5dfd1446.bundle.js.map +1 -0
- package/dist/112.e34c26d9d3b4b6deae17.bundle.js +2 -0
- package/dist/112.e34c26d9d3b4b6deae17.bundle.js.map +1 -0
- package/dist/113.733877f9f73d3283f528.bundle.js +2 -0
- package/dist/113.733877f9f73d3283f528.bundle.js.map +1 -0
- package/dist/114.0e270e77a2a557167988.bundle.js +2 -0
- package/dist/114.0e270e77a2a557167988.bundle.js.map +1 -0
- package/dist/115.732830fed3ff34691def.bundle.js +2 -0
- package/dist/115.732830fed3ff34691def.bundle.js.map +1 -0
- package/dist/116.7e8b202c5d712bddaaec.bundle.js +2 -0
- package/dist/116.7e8b202c5d712bddaaec.bundle.js.map +1 -0
- package/dist/119.2d6b15bc87de2533599c.bundle.js +2 -0
- package/dist/119.2d6b15bc87de2533599c.bundle.js.map +1 -0
- package/dist/120.80843604737b7c260788.bundle.js +1 -1
- package/dist/120.80843604737b7c260788.bundle.js.map +1 -1
- package/dist/123.51ad0d8338eda5a93b06.bundle.js +2 -0
- package/dist/123.51ad0d8338eda5a93b06.bundle.js.map +1 -0
- package/dist/{128.ce61f3a6925ddbc8f612.bundle.js → 128.7dae6369a26090e10276.bundle.js} +2 -2
- package/dist/{128.ce61f3a6925ddbc8f612.bundle.js.map → 128.7dae6369a26090e10276.bundle.js.map} +1 -1
- package/dist/130.ecb7509cb6324abf4071.bundle.js +2 -0
- package/dist/130.ecb7509cb6324abf4071.bundle.js.map +1 -0
- package/dist/138.5375ebd499e5c4977038.bundle.js +2 -0
- package/dist/138.5375ebd499e5c4977038.bundle.js.map +1 -0
- package/dist/149.7089a654a1902207a2c8.bundle.js +2 -0
- package/dist/149.7089a654a1902207a2c8.bundle.js.map +1 -0
- package/dist/{151.2dae840b241433fbe1d8.bundle.js → 151.2104ac0782ac43e2e7d2.bundle.js} +2 -2
- package/dist/{151.2dae840b241433fbe1d8.bundle.js.map → 151.2104ac0782ac43e2e7d2.bundle.js.map} +1 -1
- package/dist/152.78baa98e298c18358c55.bundle.js +2 -0
- package/dist/152.78baa98e298c18358c55.bundle.js.map +1 -0
- package/dist/153.fd957ea6d6ea34d3feb2.bundle.js +2 -0
- package/dist/153.fd957ea6d6ea34d3feb2.bundle.js.map +1 -0
- package/dist/18.44723ea06155c72f46ae.bundle.js +1 -1
- package/dist/18.44723ea06155c72f46ae.bundle.js.map +1 -1
- package/dist/{2.3a65d34c46b96a708181.bundle.js → 2.6e340067f6eae14345cd.bundle.js} +2 -2
- package/dist/2.6e340067f6eae14345cd.bundle.js.map +1 -0
- package/dist/21.64fbe234fee75c83dda3.bundle.js +2 -0
- package/dist/21.64fbe234fee75c83dda3.bundle.js.map +1 -0
- package/dist/{23.9d969421ffc11412b35a.bundle.js → 23.acf56e52417b0fbca9f4.bundle.js} +2 -2
- package/dist/23.acf56e52417b0fbca9f4.bundle.js.map +1 -0
- package/dist/25.9e0925889b3a3f79c7fe.bundle.js +2 -0
- package/dist/25.9e0925889b3a3f79c7fe.bundle.js.map +1 -0
- package/dist/27.a53481ccfa58fbd0c801.bundle.js +2 -0
- package/dist/27.a53481ccfa58fbd0c801.bundle.js.map +1 -0
- package/dist/29.9bdb27c21d6eacac1341.bundle.js +1 -1
- package/dist/29.9bdb27c21d6eacac1341.bundle.js.map +1 -1
- package/dist/3.a1815b0ddb1630938d40.bundle.js +2 -0
- package/dist/3.a1815b0ddb1630938d40.bundle.js.map +1 -0
- package/dist/30.34b74ada583b1b0af913.bundle.js +2 -0
- package/dist/30.34b74ada583b1b0af913.bundle.js.map +1 -0
- package/dist/{44.dbb910f04027f51eeedd.bundle.js → 44.082e83be1a2eda5f197b.bundle.js} +2 -2
- package/dist/44.082e83be1a2eda5f197b.bundle.js.map +1 -0
- package/dist/48.f047a5ea62690543f8ad.bundle.js +2 -0
- package/dist/48.f047a5ea62690543f8ad.bundle.js.map +1 -0
- package/dist/5.1e4e7e36d894360b8d8f.bundle.js +2 -0
- package/dist/5.1e4e7e36d894360b8d8f.bundle.js.map +1 -0
- package/dist/67.3f75109fb8b71d88f6c7.bundle.js +2 -0
- package/dist/67.3f75109fb8b71d88f6c7.bundle.js.map +1 -0
- package/dist/68.e25480b7770a679a9654.bundle.js +1 -1
- package/dist/68.e25480b7770a679a9654.bundle.js.map +1 -1
- package/dist/8.5abe78e9d72cdbc2607f.bundle.js +3 -0
- package/dist/8.5abe78e9d72cdbc2607f.bundle.js.map +1 -0
- package/dist/{bundle.e65c5ca8080546fe24d7.bundle.js → bundle.7e4f5efd9843ba4c4905.bundle.js} +3 -3
- package/dist/bundle.7e4f5efd9843ba4c4905.bundle.js.map +1 -0
- package/dist/css/bootstrap-graphdb-theme.css +21 -3
- package/dist/css/clustermanagement.css +14 -1
- package/dist/css/fonts/icons.eot +0 -0
- package/dist/css/fonts/icons.svg +1 -0
- package/dist/css/fonts/icons.ttf +0 -0
- package/dist/css/fonts/icons.woff +0 -0
- package/dist/font/{icons.b601f6618abd131665211ff4ec9ad6b2.eot → icons.23e96f215ba03e98233de883d2c30b60.eot} +0 -0
- package/dist/img/{icons.6466330b5ada72a12e1aa10044720eec.svg → icons.ab6168834b8775f511d09c8fad540b27.svg} +1 -0
- package/dist/index.html +5 -5
- package/dist/js/angular/autocomplete/templates/modal/add-label.html +9 -8
- package/dist/js/angular/clustermanagement/templates/modal/add-nodes-dialog.html +17 -19
- package/dist/js/angular/clustermanagement/templates/modal/cluster-create-dialog.html +20 -21
- package/dist/js/angular/clustermanagement/templates/modal/cluster-delete-dialog.html +8 -9
- package/dist/js/angular/clustermanagement/templates/modal/cluster-edit-dialog.html +9 -8
- package/dist/js/angular/clustermanagement/templates/modal/remove-nodes-dialog.html +18 -19
- package/dist/js/angular/core/directives/queryeditor/templates/query-sample.html +10 -10
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/js/angular/core/templates/modal/copy-to-clipboard-modal.html +9 -10
- package/dist/js/angular/externalsync/templates/deleteConnector.html +4 -4
- package/dist/js/angular/graphexplore/templates/modal/save-graph.html +9 -10
- package/dist/js/angular/import/templates/settingsModal.html +231 -231
- package/dist/js/angular/settings/modal/location-settings.html +15 -16
- package/dist/js/angular/templates/modal/add-fedx-remote-repo.html +17 -15
- package/dist/js/angular/templates/modal/add-location.html +15 -15
- package/dist/js/angular/templates/modal/edit-location.html +8 -8
- package/dist/main.12e572893a7926387b80.css +1 -0
- 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 +5 -5
- package/dist/pages/createConnector.html +134 -137
- 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/home.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 +3 -3
- 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/plugins.js +3 -12
- package/dist/res/swagger/fonts/icons.woff +0 -0
- package/dist/res/swagger/index.html +27 -27
- package/package.json +1 -1
- package/dist/10.91f8aa0494201bb12b25.bundle.js.map +0 -1
- package/dist/104.42f8ece72006965c902d.bundle.js.map +0 -1
- package/dist/11.32f5a72d66bb699e9e8b.bundle.js.map +0 -1
- package/dist/111.a360abaec5e5926aae34.bundle.js +0 -2
- package/dist/111.a360abaec5e5926aae34.bundle.js.map +0 -1
- package/dist/112.83afabc13f11ea9e326e.bundle.js +0 -2
- package/dist/112.83afabc13f11ea9e326e.bundle.js.map +0 -1
- package/dist/113.9f4c896b53aa300a5f38.bundle.js +0 -2
- package/dist/113.9f4c896b53aa300a5f38.bundle.js.map +0 -1
- package/dist/114.afa49d7867c1ce3b08c2.bundle.js +0 -2
- package/dist/114.afa49d7867c1ce3b08c2.bundle.js.map +0 -1
- package/dist/115.bbf8829ee8f466f85862.bundle.js +0 -2
- package/dist/115.bbf8829ee8f466f85862.bundle.js.map +0 -1
- package/dist/116.a4460f77635888e013b1.bundle.js +0 -2
- package/dist/116.a4460f77635888e013b1.bundle.js.map +0 -1
- package/dist/119.e60f7d27cb5876b3a601.bundle.js +0 -2
- package/dist/119.e60f7d27cb5876b3a601.bundle.js.map +0 -1
- package/dist/123.207528c97d229de16991.bundle.js +0 -2
- package/dist/123.207528c97d229de16991.bundle.js.map +0 -1
- package/dist/130.c2f5c98e78bd22743ee4.bundle.js +0 -2
- package/dist/130.c2f5c98e78bd22743ee4.bundle.js.map +0 -1
- package/dist/138.84fb24a9535f4d6d8c59.bundle.js +0 -2
- package/dist/138.84fb24a9535f4d6d8c59.bundle.js.map +0 -1
- package/dist/149.8ca7b7242b61bd7a8363.bundle.js +0 -2
- package/dist/149.8ca7b7242b61bd7a8363.bundle.js.map +0 -1
- package/dist/152.bd0fd3cba70a2e267646.bundle.js +0 -2
- package/dist/152.bd0fd3cba70a2e267646.bundle.js.map +0 -1
- package/dist/153.9272a2423ac2aa6a148b.bundle.js +0 -2
- package/dist/153.9272a2423ac2aa6a148b.bundle.js.map +0 -1
- package/dist/2.3a65d34c46b96a708181.bundle.js.map +0 -1
- package/dist/21.111cc98aaf2436b81eea.bundle.js +0 -2
- package/dist/21.111cc98aaf2436b81eea.bundle.js.map +0 -1
- package/dist/23.9d969421ffc11412b35a.bundle.js.map +0 -1
- package/dist/25.fffc5233e718b047a34f.bundle.js +0 -2
- package/dist/25.fffc5233e718b047a34f.bundle.js.map +0 -1
- package/dist/27.357929bef6f5df788b8e.bundle.js +0 -2
- package/dist/27.357929bef6f5df788b8e.bundle.js.map +0 -1
- package/dist/3.36fe2e671f737648a477.bundle.js +0 -2
- package/dist/3.36fe2e671f737648a477.bundle.js.map +0 -1
- package/dist/30.e2cd19e99cf6ecdad6ac.bundle.js +0 -2
- package/dist/30.e2cd19e99cf6ecdad6ac.bundle.js.map +0 -1
- package/dist/44.dbb910f04027f51eeedd.bundle.js.map +0 -1
- package/dist/48.d1b4cfee2f0e084c1d73.bundle.js +0 -2
- package/dist/48.d1b4cfee2f0e084c1d73.bundle.js.map +0 -1
- package/dist/5.e112b0d6e101e0766cda.bundle.js +0 -2
- package/dist/5.e112b0d6e101e0766cda.bundle.js.map +0 -1
- package/dist/67.62375b1b4925fff2fe7c.bundle.js +0 -2
- package/dist/67.62375b1b4925fff2fe7c.bundle.js.map +0 -1
- package/dist/8.7f3059d43e0db8ff7dd5.bundle.js +0 -3
- package/dist/8.7f3059d43e0db8ff7dd5.bundle.js.map +0 -1
- package/dist/bundle.e65c5ca8080546fe24d7.bundle.js.map +0 -1
- package/dist/main.b9612509bb46028befd2.css +0 -1
|
@@ -0,0 +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","navigationBarWidthFull","navigationBarWidthCollapsed","navigationBarWidth","legendNodeRadius","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","legendPadding","nodesGroup","linksGroup","tooltipElement","min","labelKey","getBoundingClientRect","toolTip","showLegendTooltip","hideLegendTooltip","nodeStateLabelY","linkStateLabelY","legendNodes","getLegendNodes","legendLinks","getLegendLinks","customText","linkTypeText","linkTypeKey","translateLegendLinksAndNodes","nodeStateLabel","linkStateLabel","legendNodeData","on","stopPropagation","row","id","column","linkWidth","linksGroupY","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","config","$tooltipProvider","options","appendToBody","push","NO_CLUSTER"],"mappings":"iFAAA,UAQQ,EAAO,QAAW,0BAAP,EAWX,WAIJ,OAAO,WACH,IAAIA,EAoJJ,WAA8B,MAAO,KAnJjCC,EAoJJ,WAA2B,MAAO,CAAC,EAAG,IAnJlCC,EAoJJ,WAAyB,MAAO,KAnJ5BC,EAAYC,IACZC,EAAY,KACZC,EAAY,KACZC,EAAY,KACZC,EAAiB,KAErB,SAASC,EAAIC,GAyOb,IAAoBC,EAxOhBN,EA0OgC,SADhCM,GADgBA,EAxOCD,GAyOTP,QACFS,QAAQC,cACHF,EAEJA,EAAGG,gBA5OVR,EAAQD,EAAIU,iBACZC,SAASC,KAAKC,YAAYf,GAM9BM,EAAIU,KAAO,WACP,IAAIC,EAAOC,MAAMC,UAAUC,MAAMC,KAAKC,WACnCL,EAAKA,EAAKM,OAAS,aAAcC,aAAYpB,EAASa,EAAKQ,OAE9D,IAKIC,EALAC,EAAU5B,EAAK6B,MAAMC,KAAMZ,GAC3Ba,EAAUhC,EAAO8B,MAAMC,KAAMZ,GAC7Bc,EAAUlC,EAAU+B,MAAMC,KAAMZ,GAChCe,EAAUC,IACVC,EAAUC,EAAWZ,OAErBa,EAAavB,SAASwB,gBAAgBD,WAAavB,SAASC,KAAKsB,UACjEE,EAAazB,SAASwB,gBAAgBC,YAAczB,SAASC,KAAKwB,WAClEC,EAAYlC,EAAeuB,MAAMC,KAAMZ,GAK3C,IAHAe,EAAMjC,KAAK4B,GACNa,MAAM,CAAEC,QAAS,EAAG,iBAAkB,QAErCP,KAAKF,EAAMU,QAAQP,EAAWD,IAAI,GAYxC,OAXAR,EAASiB,EAAoBC,IAAIb,GAAKH,MAAMC,MAExCU,EACAP,EAAMQ,MAAMD,GAEZP,EAAMU,QAAQX,GAAK,GAAMS,MAAM,CAC3BK,IAAMnB,EAAOmB,IAAOf,EAAQ,GAAMM,EAAY,KAC9CU,KAAOpB,EAAOoB,KAAOhB,EAAQ,GAAMQ,EAAa,OAIjDhC,GAMXA,EAAIyC,KAAO,WAGP,OAFYd,IACNO,MAAM,CAAEC,QAAS,EAAG,iBAAkB,SACrCnC,GASXA,EAAI0C,KAAO,SAASC,EAAGC,GACnB,GAAI5B,UAAUC,OAAS,GAAkB,iBAAN0B,EAC/B,OAAOhB,IAAYe,KAAKC,GAExB,IAAIhC,EAAQC,MAAMC,UAAUC,MAAMC,KAAKC,WAI3C,OAHI6B,GAAGC,UAAUjC,UAAU6B,KAAKpB,MAAMK,IAAahB,GAG5CX,GASXA,EAAIkC,MAAQ,SAASS,EAAGC,GACpB,GAAI5B,UAAUC,OAAS,GAAkB,iBAAN0B,EAC/B,OAAOhB,IAAYO,MAAMS,GAEzB,IAAIhC,EAAQC,MAAMC,UAAUC,MAAMC,KAAKC,WAI3C,OAHI6B,GAAGC,UAAUjC,UAAUqB,MAAMZ,MAAMK,IAAahB,GAG7CX,GASXA,EAAIT,UAAY,SAASqD,GACrB,OAAK5B,UAAUC,QACf1B,EAAiB,MAALqD,EAAYA,EAAIC,GAAGE,QAAQH,GAEhC5C,GAHuBT,GAWlCS,EAAIR,OAAS,SAASoD,GAClB,OAAK5B,UAAUC,QACfzB,EAAc,MAALoD,EAAYA,EAAIC,GAAGE,QAAQH,GAE7B5C,GAHuBR,GAWlCQ,EAAIP,KAAO,SAASmD,GAChB,OAAK5B,UAAUC,QACfxB,EAAY,MAALmD,EAAYA,EAAIC,GAAGE,QAAQH,GAE3B5C,GAHuBP,GAMlCO,EAAID,eAAiB,SAAS6C,GAC1B,OAAK5B,UAAUC,QACflB,EAAsB,MAAL6C,EAAYA,EAAIC,GAAGE,QAAQH,GAErC5C,GAHuBD,GASlCC,EAAIgD,QAAU,WAKV,OAJGtD,IACCiC,IAAYsB,SACZvD,EAAO,MAEJM,GAOX,IAAIqC,EAAsBQ,GAAGK,IAAI,CACzBP,EAYR,WACI,IAAIQ,EAAOC,IACX,MAAO,CACHb,IAAMY,EAAKR,EAAEU,EAAI3D,EAAK4D,aACtBd,KAAMW,EAAKR,EAAEY,EAAI7D,EAAK8D,YAAc,IAfpCC,EAmBR,WACI,IAAIN,EAAOC,IACX,MAAO,CACHb,IAAMY,EAAKM,EAAEJ,EACbb,KAAMW,EAAKM,EAAEF,EAAI7D,EAAK8D,YAAc,IAtBpCE,EA0BR,WACI,IAAIP,EAAOC,IACX,MAAO,CACHb,IAAMY,EAAKO,EAAEL,EAAI3D,EAAK4D,aAAe,EACrCd,KAAMW,EAAKO,EAAEH,IA7BbI,EAiCR,WACI,IAAIR,EAAOC,IACX,MAAO,CACHb,IAAMY,EAAKQ,EAAEN,EAAI3D,EAAK4D,aAAe,EACrCd,KAAMW,EAAKQ,EAAEJ,EAAI7D,EAAK8D,cApCtBI,GAwCR,WACI,IAAIT,EAAOC,IACX,MAAO,CACHb,IAAMY,EAAKS,GAAGP,EAAI3D,EAAK4D,aACvBd,KAAMW,EAAKS,GAAGL,EAAI7D,EAAK8D,cA3CvBK,GA+CR,WACI,IAAIV,EAAOC,IACX,MAAO,CACHb,IAAMY,EAAKU,GAAGR,EAAI3D,EAAK4D,aACvBd,KAAMW,EAAKU,GAAGN,IAlDdO,GAsDR,WACI,IAAIX,EAAOC,IACX,MAAO,CACHb,IAAMY,EAAKW,GAAGT,EACdb,KAAMW,EAAKW,GAAGP,EAAI7D,EAAK8D,cAzDvBO,GA6DR,WACI,IAAIZ,EAAOC,IACX,MAAO,CACHb,IAAMY,EAAKY,GAAGV,EACdb,KAAMW,EAAKO,EAAEH,MA9DjB1B,EAAaQ,EAAoB2B,OAkErC,SAASrE,IACL,IAAID,EAAOmD,GAAGoB,OAAO1D,SAAS2D,cAAc,QAS5C,OARAxE,EAAKwC,MAAM,CACPiC,SAAU,WACV5B,IAAK,EACLJ,QAAS,EACT,iBAAkB,OAClB,aAAc,eAGXzC,EAAKA,OAWhB,SAASiC,IAML,OALY,OAATjC,IACCA,EAAOC,IAEPY,SAASC,KAAKC,YAAYf,IAEvBmD,GAAGoB,OAAOvE,GAgBrB,SAAS0D,IAGL,IAFA,IAAIgB,EAAatE,GAAU+C,GAAGwB,MAAMvE,YAE7B,IAAuBsE,EAASE,cAAgB,cAAgBF,EAASG,YAC5EH,EAAWA,EAASG,WAGxB,IAAIpB,EAAa,GACbqB,EAAaJ,EAASE,eACtBG,EAAaL,EAASM,UACtBC,EAAaF,EAAME,MACnBC,EAAaH,EAAMG,OACnBrB,EAAakB,EAAMlB,EACnBF,EAAaoB,EAAMpB,EAqBvB,OAnBAxD,EAAM0D,EAAIA,EACV1D,EAAMwD,EAAIA,EACVF,EAAKS,GAAK/D,EAAMgF,gBAAgBL,GAChC3E,EAAM0D,GAAKoB,EACXxB,EAAKU,GAAKhE,EAAMgF,gBAAgBL,GAChC3E,EAAMwD,GAAKuB,EACXzB,EAAKY,GAAKlE,EAAMgF,gBAAgBL,GAChC3E,EAAM0D,GAAKoB,EACXxB,EAAKW,GAAKjE,EAAMgF,gBAAgBL,GAChC3E,EAAMwD,GAAKuB,EAAS,EACpBzB,EAAKQ,EAAK9D,EAAMgF,gBAAgBL,GAChC3E,EAAM0D,GAAKoB,EACXxB,EAAKO,EAAI7D,EAAMgF,gBAAgBL,GAC/B3E,EAAM0D,GAAKoB,EAAQ,EACnB9E,EAAMwD,GAAKuB,EAAS,EACpBzB,EAAKR,EAAI9C,EAAMgF,gBAAgBL,GAC/B3E,EAAMwD,GAAKuB,EACXzB,EAAKM,EAAI5D,EAAMgF,gBAAgBL,GAExBrB,EAGX,OAAOnD,KArUW,gC,gCCR1B,yoBAEO,MAAM8E,EAAgB,CACzBC,WAAY,qBACZC,SAAU,mBACVC,UAAW,oBACXC,SAAU,oBAGP,SAASC,EAAwBC,GACpC,OAAOvC,GAAGoB,OAAOmB,GACZC,OAAO,OAGT,SAASC,EAAkBC,GAC9B,MAAMC,EAAcD,EAAOF,OAAO,KAMlC,OALAG,EACKH,OAAO,UACPjD,QAAQ,gBAAgB,GACxBF,MAAM,OAAQ,eACdA,MAAM,eAAgB,KACpBsD,EAGJ,SAASC,EAAqBC,EAAYF,EAAaG,GAK1D,GAJAH,EACKvB,OAAO,iBACP7B,QAAQ,cAAesD,GAExBA,EACAF,EAAYI,UAAU,oBAAoB3C,aACvC,CACH,MAAM4C,EAAYL,EACbH,OAAO,KACP3C,KAAK,KAAM,mBAChBmD,EACKR,OAAO,QACP3C,KAAK,KAAM,oBACXoD,KAAKH,EAAgBI,uBAAyB,+BAC9CrD,KAAK,KAAM,IACXN,QAAQ,MAAM,GACdF,MAAM,cAAe,UAC1B2D,EAAUR,OAAO,QACZ3C,KAAK,KAAM,wBACXN,QAAQ,MAAM,GACd0D,KAAKH,EAAgBK,oBAAsB,kCAC3C9D,MAAM,cAAe,UAC1B2D,EAAUR,OAAO,QACZ3C,KAAK,IAAK,KACVA,KAAK,QAAS,iBACdA,KAAK,OAAQoC,EAAcC,YAC3B7C,MAAM,cAAe,UACrBE,QAAQ,iBAAiB,GACzB0D,KAAK,MAIX,SAASG,EAAwBP,EAAYF,EAAaG,GACzDD,IAGJF,EAAYvB,OAAO,sCACd6B,KAAKH,EAAgBI,uBAC1BP,EAAYvB,OAAO,0CACd6B,KAAKH,EAAgBK,qBAGvB,SAASE,EAAYd,EAAS7B,EAAGF,GACpC+B,EAAQ1C,KAAK,YAAa,IACf,aAAaa,MAAMF,MAI3B,SAAS8C,EAAYC,EAAkBC,EAAYC,GACtD,MAAMC,EAAYH,EAAiBI,QAC9BnB,OAAO,KACP3C,KAAK,KAAM,cACXN,QAAQ,SAAUkE,IA+K3B,SAAuBC,EAAWE,GAC9B,MAAMC,EAAQC,KAAKC,KAAK,GAAK,EAGvBC,EAAS,CAAC,CAACJ,EAFH,EACA,GAC2B,CAACA,EAAS,EAFrC,EAEgDA,EAASC,EADzD,GACwE,EAAED,EAAS,EAFnF,EAE8FA,EAASC,EADvG,GAEV,CAHU,EAGRD,EAFQ,GAGV,EAAEA,EAAS,EAJD,GAIaA,EAASC,EAHtB,GAGqC,CAACD,EAAS,EAJ/C,GAI2DA,EAASC,EAHpE,GAGmF,CAACD,EAJpF,EACA,GAIV,CAACA,EAAS,EALA,EAKWA,EAASC,EAJpB,IAKPH,EACFX,UAAU,aACVkB,KAAK,CAACD,IACNL,QACAnB,OAAO,QACP3C,KAAK,QAAS,eACdA,KAAK,IAAKG,GAAGjD,IAAImH,QA3LtBC,CAAcT,EAAWF,GACzBD,EAAiBa,OAAOhE,SAExBsD,EACKlB,OAAO,QACP3C,KAAK,QAAS,sBAKvB,SAA4BwE,EAAcb,EAAYC,GAClD,MAAMa,EAAeD,EAAa7B,OAAO,KAErCiB,EACAa,EAAa9B,OAAO,iBACf3C,KAAK,IAAK2D,GACV3D,KAAK,KAAM2D,GACX3D,KAAK,QAAsB,EAAb2D,GACd3D,KAAK,SAAU,IACfA,KAAK,QAAS,iBACd2C,OAAO,aACP3C,KAAK,QAAS,eAEnByE,EACK9B,OAAO,QACP3C,KAAK,QAAS,sBACdA,KAAK,KAAM,GAEhByE,EACK9B,OAAO,QACP3C,KAAK,IAAK2D,EAAa,IACvB3D,KAAK,QAAS,cACdR,MAAM,cAAe,WAzB9BkF,CAAmBb,EAAWF,EAAYC,GA6BvC,SAASe,EAAYC,IAmB5B,SAAyBA,GACrBA,EACKrD,OAAO,uBACP6B,KAAKyB,GArBVC,CAAgBF,GAKpB,SAA4BA,GACxBA,EACKrD,OAAO,gBACP7B,QAAQ,SAAW1C,GAASA,EAAK+H,YAAc,YAAUC,QACzDtF,QAAQ,WAAa1C,GAASA,EAAK+H,YAAc,YAAUE,UAC3DvF,QAAQ,YAAc1C,GAASA,EAAK+H,YAAc,YAAUG,WAC5DxF,QAAQ,QAAU1C,GACRA,EAAK+H,YAAc,YAAUC,QAChChI,EAAK+H,YAAc,YAAUE,UAC7BjI,EAAK+H,YAAc,YAAUG,WAbzCC,CAAmBP,GA0CvB,SAAiCA,GAC7BA,EACKrD,OAAO,eACP6D,MAAK,SAAUC,GACZA,EAAEC,UAAYzG,QAEjBuE,MAAK,SAAUiC,GACZ,OAAOA,EAAEE,YAIjBX,EACKrD,OAAO,uBACPvB,KAAK,SAAS,SAAUqF,GACrB,OAAOlF,GAAGoB,OAAO8D,EAAEC,WAAWtI,OAAOgF,UAAUC,MAAQ,MAE1DjC,KAAK,UAAU,SAAUqF,GACtB,OAAOlF,GAAGoB,OAAO8D,EAAEC,WAAWtI,OAAOgF,UAAUE,OAAS,KAE3DlC,KAAK,KAAK,SAAUqF,GACjB,OAAOlF,GAAGoB,OAAO8D,EAAEC,WAAWtI,OAAOgF,UAAUnB,EAAI,KAEtDb,KAAK,KAAK,SAAUqF,GACjB,OAAOlF,GAAGoB,OAAO8D,EAAEC,WAAWtI,OAAOgF,UAAUrB,EAAI,KAEtDX,KAAK,OAAQ,WAlElBwF,CAAwBZ,GAsB5B,SAASC,EAAgB7H,GACrB,OAAIA,EAAK+H,YAAc,YAAUC,OACtB,IACAhI,EAAK+H,YAAc,YAAUE,SAC7B,IACAjI,EAAK+H,YAAc,YAAUG,UAC7B,IACAlI,EAAK+H,YAAc,YAAUU,cAC7B,IACAzI,EAAK+H,YAAc,YAAUW,YAC7B,IACA1I,EAAK+H,YAAc,YAAUY,UAC7B,IACA3I,EAAK+H,YAAc,YAAUa,WAC7B,IAEJ,GA+BJ,SAASC,EAAYC,GACxBA,EAAiBhC,QACZnB,OAAO,QACPjD,QAAQ,QAAQ,GAErBoG,EAAiBvB,OAAOhE,SAGrB,SAASwF,EAAYD,EAAkBlB,GAC1CkB,EACK9F,KAAK,SAAUgG,GACfxG,MAAM,mBAAoByG,GAC1BjG,KAAK,IAAMkG,IAmBpB,SAA4BA,EAAMtB,GAC9B,MAAMuB,EAASvB,EAAMwB,KAAMpJ,GAASA,EAAKqJ,UAAYH,EAAKC,QACpD/I,EAASwH,EAAMwB,KAAMpJ,GAASA,EAAKqJ,UAAYH,EAAK9I,QAEpDkJ,EAASlJ,EAAOyD,EAAIsF,EAAOtF,EAC3B0F,EAASnJ,EAAOuD,EAAIwF,EAAOxF,EAC3B6F,EAAOvC,KAAKC,KAAKoC,EAASA,EAASC,EAASA,GAC5CE,EAAQH,EAASE,EACjBE,EAAQH,EAASC,EAKjBG,EAAUR,EAAOtF,EAFD,GAEsB4F,EACtCG,EAAUT,EAAOxF,EAHD,GAGsB+F,EACtCG,EAAUzJ,EAAOyD,EAHD,GAGsB4F,EACtCK,EAAU1J,EAAOuD,EAJD,GAIsB+F,EAC5C,MAAO,IAAMC,EAAU,IAAMC,EAAU,IAAMC,EAAU,IAAMC,GApCpCC,CAAmBb,EAAMtB,IAG/C,SAASoB,EAAaE,GACzB,OAAIA,EAAKc,SAAW,YAAUC,SAAWf,EAAKc,SAAW,YAAUE,QACxD9E,EAAcG,UACd2D,EAAKc,SAAW,YAAUtB,YAC1BtD,EAAcI,SAElB,OAGJ,SAASyD,EAAaC,GACzB,OAAIA,EAAKc,SAAW,YAAUtB,aAAeQ,EAAKc,SAAW,YAAUE,QAC5D,QAEJ,OAuBJ,SAASC,EAA2BvC,EAAOwC,EAAcC,EAAcC,GAC1E1C,EACK5E,KAAK,YAAa,CAAChD,EAAMuK,KAGtB,MAAMC,EAAQ,EAAIvD,KAAKwD,GAAKF,EAAQ3C,EAAM,GAAGrG,OAC7C,IAAIsC,EAAIuG,EAAenD,KAAKyD,IAAIF,GAASF,EACrC3G,EAAI0G,EAAepD,KAAK0D,IAAIH,GAASF,EAGzC,OAFAtK,EAAK6D,EAAIA,EACT7D,EAAK2D,EAAIA,EACF,aAAaE,MAAMF,S,gCCxPtC,kDAMA,MAAMiH,EAAyB,IACzBC,EAA8B,GACpC,IAAIC,EAAqBF,EAEzB,MAAMjE,EAAa,GACboE,EAAmB,GAEnBC,EAA8BC,QAAQC,OAAO,iDAAkD,CACjG,gDAGEjF,EAAkB,CACpBI,sBAAuB,GACvBC,mBAAoB,GACpB6E,kBAAmB,GACnBC,kBAAmB,GACnBC,kBAAmB,SACnBC,oBAAqB,WACrBC,qBAAsB,YACtBC,sBAAuB,aACvBC,uBAAwB,cACxBC,yBAA0B,gBAC1BC,qBAAsB,YACtBC,sBAAuB,aACvBC,mBAAoB,UACpBC,mBAAoB,UACpBC,uBAAwB,eAGtBC,EAAsB,CACxBC,WAAY,oBACZC,WAAY,qBAGhBlB,EAA4BmB,UAAU,uBAAwB,CAAC,UAAW,sBAAuB,SAAU,WAAY,aAAc,aACjI,SAAUC,EAASC,EAAqBC,EAAQC,EAAUC,EAAYC,GAClE,MAAO,CACHC,SAAU,IACVxD,KAAM,SAAUyD,EAAOjH,GASnB,SAASkH,IACLC,OAAOvI,KAAK2B,GAAiB6G,QAASC,IAClC9G,EAAgB8G,GAAOP,EAAWQ,QAAQ,6CAA+CD,KAIjG,SAASE,IACL,MAAMC,EAA2D,kBAA/Cb,EAAoBzJ,IAAI0J,EAAOa,YAGjD,OAFArC,EAAqBoC,EAAYrC,EAA8BD,EAExD3D,KAAKmG,IAAInG,KAAKoG,MAAkD,KAA3CjB,EAAQkB,WAAaxC,IAA6B,KAGlF,SAASyC,IAEL,OAAOtG,KAAKmG,IAAmC,KAA7BhB,EAAQoB,YAAc,KAAc,KAG1D,IAAIC,EACAC,EACAC,EA5BJhB,EAAMiB,YAAa,EACnBnB,EAAWoB,IAAI,2BAA2B,WACtCjB,IAkDJ,WACI,0BAA4B5G,EAAYF,EAAaG,GACrD4G,OAAOvI,KAAK0H,GAAqBc,QAASgB,IACtC3K,GAAGoB,OAAO,IAAIuJ,KAAa1H,KAAK2H,EAAYD,MAE5CL,GACAA,EAAiBlK,SAErByK,IACAC,IA1DAC,MAEJvB,EAAMkB,IAAI,YAAY,WAClBM,EAAc7K,aAuBlB,MAAM8K,EAAgB,GAEtB,IAKIpI,EAWA9F,EACA4F,EACAuI,EACAC,EAuDAC,EA1EAtJ,EAAQgI,IACR/H,EAASqI,IACTjD,EAAoBrD,KAAKuH,IAAIvJ,EAAOC,GAAU,EAAI,IAClDkF,EAAenF,EAAQ,EACvBoF,EAAenF,EAAS,EAsC5B,SAAS6I,EAAYD,GACjB,MAAMW,EAAWzC,EAAoB8B,GACrC,OAAO7H,EAAgBwI,GAwB3B,SAAST,IACLP,EAAmBvN,EAAIyF,OAAO,KAAK3C,KAAK,KAAM,gBACzCN,QAAQ,UAAWiK,EAAMiB,YACzBlL,QAAQ,gBAAgB,GAhEjCiK,EAAM1H,MAAQ,WACV,OAAOA,GAGX0H,EAAMzH,OAAS,WACX,OAAOA,GA+DX,MAAMiJ,EAAgB,MACjBnL,KAAK,QAAS,UACd3C,gBAAe,WACZ,MAAMoD,EAAO8K,EAAeG,wBACtBtM,EAAYvB,SAASwB,gBAAgBD,WAAavB,SAASC,KAAKsB,UAChEE,EAAazB,SAASwB,gBAAgBC,YAAczB,SAASC,KAAKwB,WAExE,MAAO,CACHQ,KAAMW,EAAKX,KAAOR,EAAa,KAC/BO,IAAMY,EAAKZ,IAAM,GAAMT,EAAY,SAG1CrC,MAAK,SAAUsI,GACZ,OAAOA,EAAEsG,WAIXC,EAAoB,SAAUvG,EAAG3C,GACnC6I,EAAiB7I,EACjByI,EAAcnN,KAAKqH,EAAGkG,IAIpBM,EAAoB,WACtBN,EAAiB,KACjBJ,EAAcpL,QAGlB,SAASkL,IACL,MAEMa,EAAkBV,EAFQ,GAG1BW,EAAkBD,EAAkC,EAAhBV,EAAuC,EAAnBrD,EAMxDiE,EAAcC,IACdC,EAAcC,KAjFxB,SAAsCH,EAAaE,GAC/CF,EAAYlC,QAAS9M,IACjBA,EAAK2O,QAAU3O,EAAKuI,SAAWtC,EAAgBjG,EAAKoP,cAExDF,EAAYpC,QAAS5D,IACjBA,EAAKyF,QAAUzF,EAAKmG,aAAepJ,EAAgBiD,EAAKoG,eA6E5DC,CAA6BP,EAAaE,GAE1CzB,EAAiB9H,OAAO,QACnB3C,KAAK,KAAM,qBACXA,KAAK,QAAS,qBACdA,KAAK,OAAQ,WAElB,MAAMwM,EAAiB/B,EAClB9H,OAAO,QACP3C,KAAK,KAAM,cACXA,KAAK,QAAS,cACdA,KAAK,IAAkB,EAAb2D,GACV3D,KAAK,IAAK8L,GACV1I,KAAK2H,EAAY,eAEhB0B,EAAiBhC,EAClB9H,OAAO,QACP3C,KAAK,KAAM,cACXA,KAAK,QAAS,cACdA,KAAK,IAAkB,EAAb2D,GACV3D,KAAK,IAAK+L,GACV3I,KAAK2H,EAAY,eAEhB2B,EAAiBjC,EAAiBvH,UAAU,eAAekB,KAAK4H,GACtE,cAAgBU,EAAgB3E,GAAkB,GAClD,cAAgB2E,GAEhBA,EAAenL,OAAO,gBACjBoL,GAAG,aAAa,SAAUtH,GACvBlF,GAAGwB,MAAMiL,kBACThB,EAAkBvG,EAAGxG,SAExB8N,GAAG,WAAYd,GAEpBa,EACK1M,KAAK,aAAa,SAAUqF,GACzB,MAAMwH,EAAM5I,KAAKoG,MAAMhF,EAAEyH,GA1CX,GA2CRC,EAAS1H,EAAEyH,GA3CH,EA+Cd,MAAO,aAHG1B,EAAgBrD,GA3CZ,GA2CmE,EAAnBA,GAAwBgF,MAC5D,EAAhB3B,EAlDc,GAkDgCrD,GA3C1C,GA4CR,EADsFA,GACjF8E,QAInBpC,EACKpM,MAAK,WACFqM,EAAc7L,KAAK7B,OAAOgF,UAAUC,SAI5CuK,EAAexM,KAAK,IAAKoL,EAAgBV,EAAc,GACvD+B,EAAezM,KAAK,IAAKoL,EAAgBV,EAAc,GAGvD,MAAMsC,EAAYtC,EAAc,EAE1BY,EAAab,EAAiB9H,OAAO,KAAK3C,KAAK,KAAM,eACrDiN,EAAclB,EAAkBX,EACtCE,EAAWtL,KAAK,YAAa,aAAaoL,MAAkB6B,MAE5Df,EAAYpC,QAAQ,CAAC5D,EAAMqB,KACvB,MAEM2F,EAAOF,EAFO,EAIdG,EAAQ7B,EACT3I,OAAO,KACPjD,QAAQ,QAAQ,GAChBA,QAAQ,UAAU,GAClBM,KAAK,YAAa,KAEf,MAAO,aADGuH,EAAQyF,UAI1BG,EACKxK,OAAO,QACPjD,QAAQ,QAAQ,GAChBM,KAAK,mBAAoB,IAAM,eAAiBkG,IAChDlG,KAAK,SAAU,IAAM,eAAiBkG,IACtClG,KAAK,IAAK,IACA,QAAgBkN,OAG/BC,EAAMxK,OAAO,iBACR3C,KAAK,IAAK,IACVA,KAAK,IAAK,GACVA,KAAK,QAASgN,EAAY,IAC1BhN,KAAK,SAAU,IACfA,KAAK,QAAS,iBACd2C,OAAO,aACP3C,KAAK,QAAS,cACdR,MAAM,YAAa,OACnBzC,KAAKmJ,EAAKmG,cAEfc,EACKR,GAAG,aAAa,WACbxM,GAAGwB,MAAMiL,kBACThB,EAAkB1F,EAAMrH,SAE3B8N,GAAG,WAAYd,KAIxBpB,EACKpM,MAAK,SAAUgH,GACZsF,EAAe9L,KAAK7B,OAAOgF,UAAUE,OACrCwI,EAAc7L,KAAK7B,OAAOgF,UAAUC,SAG5CwI,EAAiBlJ,OAAO,sBACnBvB,KAAK,SAAU2K,EAA+B,EAAhBS,GAC9BpL,KAAK,QAAS0K,EAA8B,EAAhBU,GAC5BpL,KAAK,KAAM,KAEhBoN,IAGJ,SAASA,IACL,MAAMzM,EAAIuB,GAAUyI,EAA+B,EAAhBS,EAAoB,IACvD,cAAgBX,EAAkB,EAAG9J,GAmDzC,SAAS0M,IASL/F,EAAoBrD,KAAKuH,IAAIvJ,EAAOC,GAAU,EAAI,IAClDkF,EAAenF,EAAQ,EACvBoF,EAAenF,EAAS,EATxB,cAAgBY,EAAasE,EAAcC,GAC3CvE,EACKvB,OAAO,iBACPvB,KAAK,IAAKsH,GAuBnB,SAASgG,IACLD,IACIrK,IAAe2G,EAAM4D,aAAavK,aAClCA,IAAe2G,EAAM4D,aAAavK,WAjB1C,SAA4BA,GAExB,IAAIwK,EADJ,uBAAyBxK,EAAYF,EAAaG,GAE7CD,IACDwK,EAAkB,KACd7D,EAAM8D,QAAO,WACT9D,EAAM+D,+BAIlB5K,EACK6J,GAAG,UAAWa,GAOfG,CAAmB3K,IAEvB,MAAM4B,EAAQgJ,EAAEC,UAAUlE,EAAM4D,aAAa3I,QAAU,GACjDkJ,EAAQF,EAAEC,UAAUlE,EAAM4D,aAAaO,QAAU,IAnF3D,SAAqBlJ,GACjBA,EAAMkF,QAAS9M,GAASA,EAAKuI,SAAWgE,EAASwE,WAAW/Q,EAAKgR,WACjE,MAAMC,EAAW5C,EAAWnI,UAAU,eAAekB,KAAKQ,EAAQ5H,GAASA,EAAKqJ,SAChF4H,EACKtB,GAAG,QAAUtH,IACVsE,EAAMuE,aAAaC,WAAW9I,GAG9B,MAAM+I,EAAUjO,GAAGoB,OAAO,gBACpB8M,EAAcC,EAAEC,QAAQtM,QAC1B9B,GAAGwB,MAAM6M,MAAQH,EAAc,GAE/BD,EAAQ5O,MAAM,OAAQW,GAAGwB,MAAM6M,MAAQ,MACvCJ,EAAQ5O,MAAM,QAAS,MAGvB4O,EAAQ5O,MAAM,OAAQ,IACtB4O,EAAQ5O,MAAM,QAAU6O,EAAclO,GAAGwB,MAAM6M,MAAS,OAE5DJ,EAAQ5O,MAAM,MAAQW,GAAGwB,MAAM8M,MAAQ,GAAM,QAErD,cAAgBR,EAAUtK,GAC1B,cAAgBsK,GAChB,6BAA+BA,EAAU7G,EAAcC,EAAcC,GA6DrE7D,CAAYmB,GA1DhB,SAAmBkJ,EAAOlJ,GACtB,MAAM8J,EAAYpD,EAAWpI,UAAU,SAASkB,KAAK0J,EAAQ5H,GAASA,EAAK4G,IAC3E,cAAgB4B,GAChB,cAAgBA,EAAW9J,GAwD3B+J,CAAUb,EAAOlJ,GApDrB+E,EAAMuE,aAAaU,OAAStB,EAC5B3D,EAAMuE,aAAaW,OAAS,WAExB5M,EAAQgI,IACR/H,EAASqI,IACTrN,EAAI8C,KAAK,QAASiC,GAClB/E,EAAI8C,KAAK,SAAUkC,GACnBoL,IACAF,KAEJzD,EAAMuE,aAAaY,aAAe,KAC9BnF,EAAMiB,YAAcjB,EAAMiB,WAC1BH,EAAiB/K,QAAQ,UAAWiK,EAAMiB,aA1O1ChB,IAOJ,SAA2B5G,GACvB9F,EAAM,0BAA4BwF,EAAQ,IACrC1C,KAAK,QAASiC,GACdjC,KAAK,SAAUkC,GACpBhF,EAAImB,KAAK8M,GAETrI,EAAc,oBAAsB5F,EAAK8F,GAEzCsI,EAAapO,EAAIyF,OAAO,KAAK3C,KAAK,KAAM,eACxCqL,EAAanO,EAAIyF,OAAO,KAAK3C,KAAK,KAAM,eACxCgL,IAfApI,IADsB+G,EAAM4D,aAAa3I,QAAS+E,EAAM4D,aAAa3I,MAAMrG,SAE3E0M,IACAqC,SAsRfyB,OAAO,CAAC,mBAAoB,SAAUC,GACvCA,EAAiBC,QAAQ,CAACC,cAAc,OAI5C,MAAMjD,EAAiB,WACnB,MAAMD,EAAc,GAUpB,OATAA,EAAYmD,KAAK,CAACpK,UAAW,YAAUC,OAAQoH,WAAY,sBAC3DJ,EAAYmD,KAAK,CAACpK,UAAW,YAAUE,SAAUmH,WAAY,wBAC7DJ,EAAYmD,KAAK,CAACpK,UAAW,YAAUG,UAAWkH,WAAY,yBAC9DJ,EAAYmD,KAAK,CAACpK,UAAW,YAAUqK,WAAYhD,WAAY,0BAC/DJ,EAAYmD,KAAK,CAACpK,UAAW,YAAUW,YAAa0G,WAAY,2BAChEJ,EAAYmD,KAAK,CAACpK,UAAW,YAAUU,cAAe2G,WAAY,6BAClEJ,EAAYmD,KAAK,CAACpK,UAAW,YAAUY,UAAWyG,WAAY,yBAC9DJ,EAAYmD,KAAK,CAACpK,UAAW,YAAUa,WAAYwG,WAAY,0BAC/DJ,EAAYlC,QAAQ,CAAC9M,EAAMuK,IAAUvK,EAAK8P,GAAKvF,GACxCyE,GAGLG,EAAiB,WACnB,MAAM2B,EAAQ,GAKd,OAJAA,EAAMqB,KAAK,CAACnI,OAAQ,YAAUC,QAASqF,YAAa,uBACpDwB,EAAMqB,KAAK,CAACnI,OAAQ,YAAUE,QAASoF,YAAa,uBACpDwB,EAAMqB,KAAK,CAACnI,OAAQ,YAAUtB,YAAa4G,YAAa,2BACxDwB,EAAMhE,QAAQ,CAAC5D,EAAMqB,IAAUrB,EAAK4G,GAAKvF,GAClCuG","file":"27.a53481ccfa58fbd0c801.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 .config(['$tooltipProvider', function ($tooltipProvider) {\n $tooltipProvider.options({appendToBody: true});\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([[29],{221: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},222: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},67:function(t,e,r){"use strict";r.r(e);var a=r(222),n=r(221);r(4);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=1200,h=p/18,y=p/110,x=y/2,m=p/90,v=p/1e3,k=p/600,b=d3.layout.force().size([p,600]).charge(-900),w=b.drag().on("dragstart",(function(t){d3.select(this).classed("selected",t.selected=!0)})),E=d3.select("#domain-range").append("svg").attr("viewBox","0 0 "+p+" 600").attr("preserveAspectRatio","xMidYMid meet").on("dblclick.zoom",null),N=E.append("defs");N.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"}),N.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"}),N.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.0.0-M3-RC3");$("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 R=p/7,C=1.2*R,T=d3.select(".legend-container").append("svg").attr("viewBox","0 0 "+R+" "+C).attr("preserveAspectRatio","xMidYMid meet");T.append("rect").attr({width:R,height:C}).style("fill","rgba(235, 235, 235, 0.9)");var A=p/75,L=p/40,_=A+h/2.5,M=L,U=_+p/90,P=m/1.1,j=L,O=(T.append("circle").attr({class:"legend-class-node",cx:(A+_)/2,cy:j,r:h/4.5}),M+p/370);T.append("text").attr({x:U,y:O}).style("font-size",P+"px").text("main class node");var I=j+p/30;T.append("circle").attr({class:"legend-object-node",cx:(A+_)/2,cy:I,r:y/1.25});var S=O+p/30;T.append("text").attr({x:U,y:S}).style("font-size",P+"px").text("class node");var D=I+p/45;T.append("circle").attr({class:"legend-datatype-node",cx:(A+_)/2,cy:D,r:x});var F=S+p/45;T.append("text").attr({x:U,y:F}).style("font-size",P+"px").text("datatype node");var B=D+p/45;d3.select(".legend-class-node");T.append("line").attr({class:"property-arrow",x1:A,y1:B,x2:_,y2:B}).style("stroke-width",v).attr("marker-end","url("+s.absUrl()+"#arrow)"),T.append("text").attr({x:U,y:B+p/370}).style("font-size",P+"px").text("explicit property");var z=B+p/45;T.append("line").attr({class:"implicit-property-arrow",x1:A,y1:z,x2:_,y2:z}).style("stroke-width",v).attr("marker-end","url("+s.absUrl()+"#arrow)"),T.append("text").attr({x:U,y:z+p/370}).style("font-size",P+"px").text("implicit property");var G=z+p/45;T.append("line").attr({class:"collapsed-property-arrow",x1:A,y1:G,x2:_,y2:G}).style("stroke-width",k).attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)"),T.append("text").attr({x:U,y:G+p/370}).style("font-size",P+"px").text("collapsed property");var W=E,H=s.search().uri,X=s.search().name,Y=s.search().collapsed;o.getDomainRangeData(H,Y).success((function(t,e,r){u.domainRangeGraphData=t})).error((function(t){d.error("Request for "+X+" 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:H,name:X,collapsed:e})}(u.collapseEdges),i.remove(c.DOMAIN_RANGE_WENT_BACK))})),u.$watch("domainRangeGraphData",(function(){if(u.domainRangeGraphData){var r=angular.copy(u.domainRangeGraphData);b.nodes(r.nodes).links(r.links);var a=W.selectAll(".link").data(r.links).enter().append("g");function o(t){t.style("stroke",f),t.style("stroke-width",k),t.attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)")}var i,c,d=0;a.each((function(t){if(t.objectPropNodeClassUri!==H)i=a.append("line").attr({class:"link","marker-end":"url("+s.absUrl()+"#arrow)"}).style("stroke-width",v).each((function(t){switch(t.propertyType){case"objectLeft":t.targetRadius=h;break;case"objectRight":t.targetRadius=y;break;case"datatype":t.targetRadius=x;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)){var e=h/2;c=d3.select(this).append("path").attr({d:"M 0 0 A "+e+" "+e+" 0 1 1 0 "+e,class:"loop-link",fill:"none","marker-end":"url("+s.absUrl()+"#arrow-loop)"}).style("stroke-width",v)}(d+=t.targetNodeEdgeCount)>1&&o(d3.select(".loop-link"))}}));var E={};function N(){$.isEmptyObject(E)||(E.text.style("fill","black"),E.background.style("fill","#f0f0f0"))}function R(t){N(),E.text=d3.select(this),E.background=d3.select(this.previousSibling),E.text.style("fill","white"),E.background.style("fill",f),l((function(){u.showPredicatesInfoPanel=!0,u.selectedPredicate=t})),d3.event.stopPropagation()}$("document").ready((function(){$("#domain-range").bind("click",N)}));var C=a.append("text").attr("class",(function(t){return t.objectPropNodeClassUri===H?"loop-link-property-name":"property-name"})).attr("dx",(function(t){return h/2*("objectLeft"===t.propertyType?1:-1)})).style("text-anchor",(function(t){return"objectLeft"===t.propertyType?"end":"start"})).style("font-size",m).text((function(t){return t.targetNodeEdgeCount>1?t.targetNodeEdgeCount+" predicates":t.name}));C.each((function(t){var r=d3.select(this);/\d\spredicates/.test(r.text())?r.style("font-weight","bold").on("click",R):r.on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.uri),"_blank")}))}));var T=p/600,A=a.append("rect").attr("class",(function(t){return t.objectPropNodeClassUri!==H?"link-background":"loop-link-background"})).attr("width",(function(t){return t.calculatedWidth=this.previousSibling.getBBox().width,t.calculatedWidth+2*T})).attr("height",(function(t){return t.calculatedHeight=this.previousSibling.getBBox().height,t.calculatedHeight+T})).attr("transform",(function(t){var e=T-h/2*("objectLeft"===t.propertyType?1:-1);return"objectLeft"===t.propertyType&&(e+=t.calculatedWidth),"translate(-"+e+",-"+(T+t.calculatedHeight/2)+")"})).on("click",(function(t){d3.event.stopPropagation()})),L=W.selectAll(".node").data(r.nodes).enter().append("g"),_=L.filter((function(t){return t.objectPropClassUri!==H})).append("circle").each((function(t){var e=d3.select(this);"main"===t.classPosition?e.attr({class:"class-node",r:h}).attr("marker-end","url("+s.absUrl()+"#loop-link)"):null===t.objectPropClassName?e.attr({class:"datatype-node",r:x}):e.attr({class:"object-prop-node",r:y})})).call(w);d3.selectAll(".object-prop-node").on("dblclick",(function(e,r){u.$apply((function(){t.$broadcast("reloadDomainRangeGraphView",e,r)}))})),L.filter((function(t){return t.objectPropClassName&&t.objectPropClassUri!==H})).append("text").attr("class",(function(t){return t.classPosition+"-class-label"})).style("font-size",m).text((function(t){return t.objectPropClassName})).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.objectPropClassUri),"_blank")}));var M=L.select("text");W.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(X,h)})).text(X).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(H),"_blank")}))}));var U=W.select(".class-node + text"),P=d3.select(".class-node"),j=d3.selectAll(".loop-link-background"),O=d3.selectAll(".loop-link-property-name");if(C=d3.selectAll(".property-name"),!angular.isUndefined(c)){var I=[];j.each((function(t,e){d3.select(this);I.push({idx:e,width:t.calculatedWidth,height:t.calculatedHeight})}))}b.on("tick",(function(t){var e=8*t.alpha;function r(t){var e=t.x+2*h,r=t.y-h/1.9;var a=[];j.each((function(n,o){a.push(n),o<g?function(a,n){var o=$.grep(I,(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",R),d3.select(".view-more-preds-rect").attr("height",e+2*T)}(a)}i.filter((function(t){return t.objectPropNodeClassUri!==H})).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})),_.each((function(t){"main"!==t.classPosition||angular.isUndefined(c)||(!function(t){var e=t.x+.96*h,r=t.y-h/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(I,(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-2.1*h-n;e.attr({x:o,y:s}).moveToFront()}O.each((function(t,r){var a=d3.select(this),n=O.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!==H&&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=P.attr("cx")-p/2,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}))})),U.attr("x",(function(t){return t.x})).attr("y",(function(t){return t.y})).moveToFront(),A.filter((function(t){return t.objectPropNodeClassUri!==H})).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 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(),M.attr("x",(function(t){return"right"===t.classPosition?t.x+1.2*y:t.x-1.2*y})).attr("y",(function(t){return t.y})).moveToFront()})).linkDistance(p/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"]}}]);
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{221: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},222: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},67:function(t,e,r){"use strict";r.r(e);var a=r(222),n=r(221);r(4);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=1200,h=p/18,y=p/110,x=y/2,m=p/90,v=p/1e3,k=p/600,b=d3.layout.force().size([p,600]).charge(-900),w=b.drag().on("dragstart",(function(t){d3.select(this).classed("selected",t.selected=!0)})),E=d3.select("#domain-range").append("svg").attr("viewBox","0 0 "+p+" 600").attr("preserveAspectRatio","xMidYMid meet").on("dblclick.zoom",null),N=E.append("defs");N.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"}),N.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"}),N.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.0.0-RC2");$("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 R=p/7,C=1.2*R,T=d3.select(".legend-container").append("svg").attr("viewBox","0 0 "+R+" "+C).attr("preserveAspectRatio","xMidYMid meet");T.append("rect").attr({width:R,height:C}).style("fill","rgba(235, 235, 235, 0.9)");var A=p/75,L=p/40,_=A+h/2.5,M=L,U=_+p/90,P=m/1.1,j=L,O=(T.append("circle").attr({class:"legend-class-node",cx:(A+_)/2,cy:j,r:h/4.5}),M+p/370);T.append("text").attr({x:U,y:O}).style("font-size",P+"px").text("main class node");var I=j+p/30;T.append("circle").attr({class:"legend-object-node",cx:(A+_)/2,cy:I,r:y/1.25});var S=O+p/30;T.append("text").attr({x:U,y:S}).style("font-size",P+"px").text("class node");var D=I+p/45;T.append("circle").attr({class:"legend-datatype-node",cx:(A+_)/2,cy:D,r:x});var F=S+p/45;T.append("text").attr({x:U,y:F}).style("font-size",P+"px").text("datatype node");var B=D+p/45;d3.select(".legend-class-node");T.append("line").attr({class:"property-arrow",x1:A,y1:B,x2:_,y2:B}).style("stroke-width",v).attr("marker-end","url("+s.absUrl()+"#arrow)"),T.append("text").attr({x:U,y:B+p/370}).style("font-size",P+"px").text("explicit property");var z=B+p/45;T.append("line").attr({class:"implicit-property-arrow",x1:A,y1:z,x2:_,y2:z}).style("stroke-width",v).attr("marker-end","url("+s.absUrl()+"#arrow)"),T.append("text").attr({x:U,y:z+p/370}).style("font-size",P+"px").text("implicit property");var G=z+p/45;T.append("line").attr({class:"collapsed-property-arrow",x1:A,y1:G,x2:_,y2:G}).style("stroke-width",k).attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)"),T.append("text").attr({x:U,y:G+p/370}).style("font-size",P+"px").text("collapsed property");var W=E,H=s.search().uri,X=s.search().name,Y=s.search().collapsed;o.getDomainRangeData(H,Y).success((function(t,e,r){u.domainRangeGraphData=t})).error((function(t){d.error("Request for "+X+" 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:H,name:X,collapsed:e})}(u.collapseEdges),i.remove(c.DOMAIN_RANGE_WENT_BACK))})),u.$watch("domainRangeGraphData",(function(){if(u.domainRangeGraphData){var r=angular.copy(u.domainRangeGraphData);b.nodes(r.nodes).links(r.links);var a=W.selectAll(".link").data(r.links).enter().append("g");function o(t){t.style("stroke",f),t.style("stroke-width",k),t.attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)")}var i,c,d=0;a.each((function(t){if(t.objectPropNodeClassUri!==H)i=a.append("line").attr({class:"link","marker-end":"url("+s.absUrl()+"#arrow)"}).style("stroke-width",v).each((function(t){switch(t.propertyType){case"objectLeft":t.targetRadius=h;break;case"objectRight":t.targetRadius=y;break;case"datatype":t.targetRadius=x;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)){var e=h/2;c=d3.select(this).append("path").attr({d:"M 0 0 A "+e+" "+e+" 0 1 1 0 "+e,class:"loop-link",fill:"none","marker-end":"url("+s.absUrl()+"#arrow-loop)"}).style("stroke-width",v)}(d+=t.targetNodeEdgeCount)>1&&o(d3.select(".loop-link"))}}));var E={};function N(){$.isEmptyObject(E)||(E.text.style("fill","black"),E.background.style("fill","#f0f0f0"))}function R(t){N(),E.text=d3.select(this),E.background=d3.select(this.previousSibling),E.text.style("fill","white"),E.background.style("fill",f),l((function(){u.showPredicatesInfoPanel=!0,u.selectedPredicate=t})),d3.event.stopPropagation()}$("document").ready((function(){$("#domain-range").bind("click",N)}));var C=a.append("text").attr("class",(function(t){return t.objectPropNodeClassUri===H?"loop-link-property-name":"property-name"})).attr("dx",(function(t){return h/2*("objectLeft"===t.propertyType?1:-1)})).style("text-anchor",(function(t){return"objectLeft"===t.propertyType?"end":"start"})).style("font-size",m).text((function(t){return t.targetNodeEdgeCount>1?t.targetNodeEdgeCount+" predicates":t.name}));C.each((function(t){var r=d3.select(this);/\d\spredicates/.test(r.text())?r.style("font-weight","bold").on("click",R):r.on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.uri),"_blank")}))}));var T=p/600,A=a.append("rect").attr("class",(function(t){return t.objectPropNodeClassUri!==H?"link-background":"loop-link-background"})).attr("width",(function(t){return t.calculatedWidth=this.previousSibling.getBBox().width,t.calculatedWidth+2*T})).attr("height",(function(t){return t.calculatedHeight=this.previousSibling.getBBox().height,t.calculatedHeight+T})).attr("transform",(function(t){var e=T-h/2*("objectLeft"===t.propertyType?1:-1);return"objectLeft"===t.propertyType&&(e+=t.calculatedWidth),"translate(-"+e+",-"+(T+t.calculatedHeight/2)+")"})).on("click",(function(t){d3.event.stopPropagation()})),L=W.selectAll(".node").data(r.nodes).enter().append("g"),_=L.filter((function(t){return t.objectPropClassUri!==H})).append("circle").each((function(t){var e=d3.select(this);"main"===t.classPosition?e.attr({class:"class-node",r:h}).attr("marker-end","url("+s.absUrl()+"#loop-link)"):null===t.objectPropClassName?e.attr({class:"datatype-node",r:x}):e.attr({class:"object-prop-node",r:y})})).call(w);d3.selectAll(".object-prop-node").on("dblclick",(function(e,r){u.$apply((function(){t.$broadcast("reloadDomainRangeGraphView",e,r)}))})),L.filter((function(t){return t.objectPropClassName&&t.objectPropClassUri!==H})).append("text").attr("class",(function(t){return t.classPosition+"-class-label"})).style("font-size",m).text((function(t){return t.objectPropClassName})).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.objectPropClassUri),"_blank")}));var M=L.select("text");W.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(X,h)})).text(X).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(H),"_blank")}))}));var U=W.select(".class-node + text"),P=d3.select(".class-node"),j=d3.selectAll(".loop-link-background"),O=d3.selectAll(".loop-link-property-name");if(C=d3.selectAll(".property-name"),!angular.isUndefined(c)){var I=[];j.each((function(t,e){d3.select(this);I.push({idx:e,width:t.calculatedWidth,height:t.calculatedHeight})}))}b.on("tick",(function(t){var e=8*t.alpha;function r(t){var e=t.x+2*h,r=t.y-h/1.9;var a=[];j.each((function(n,o){a.push(n),o<g?function(a,n){var o=$.grep(I,(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",R),d3.select(".view-more-preds-rect").attr("height",e+2*T)}(a)}i.filter((function(t){return t.objectPropNodeClassUri!==H})).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})),_.each((function(t){"main"!==t.classPosition||angular.isUndefined(c)||(!function(t){var e=t.x+.96*h,r=t.y-h/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(I,(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-2.1*h-n;e.attr({x:o,y:s}).moveToFront()}O.each((function(t,r){var a=d3.select(this),n=O.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!==H&&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=P.attr("cx")-p/2,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}))})),U.attr("x",(function(t){return t.x})).attr("y",(function(t){return t.y})).moveToFront(),A.filter((function(t){return t.objectPropNodeClassUri!==H})).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 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(),M.attr("x",(function(t){return"right"===t.classPosition?t.x+1.2*y:t.x-1.2*y})).attr("y",(function(t){return t.y})).moveToFront()})).linkDistance(p/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
2
|
//# sourceMappingURL=29.9bdb27c21d6eacac1341.bundle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/lib/common/d3-utils.js","webpack:///./src/js/lib/common/svg-export.js","webpack:///./src/js/angular/graphexplore/directives/domain-range-graph.directive.js"],"names":["D3","Text","calcFontSizeRaw","text","radius","minimumSize","isMultiline","textSize","substring","length","match","Math","round","calcFontSize","getTextWithElipsisIfNeeded","str","threshold","Transition","fadeIn","sel","duration","style","transition","fadeOut","Click","delayDblClick","event","d3","dispatch","rebind","selection","down","wait","on","mouse","document","body","Date","d","a","b","sqrt","pow","window","clearTimeout","dblclick","setTimeout","click","SVG","Export","getCSSRules","cssSourceFilePath","cssRules","$","sheet","rules","cssStr","_","each","value","cssText","generateBase64ImageSource","exportSvg","selectAll","attr","version","xmlns","node","parentNode","innerHTML","btoa","unescape","encodeURIComponent","domainRangeGraphDirective","$rootScope","$window","$repositories","GraphDataRestService","$location","LocalStorageAdapter","LSKeys","$timeout","toastr","ONTO_RED","ONTO_GREEN","ONTO_BLUE","NON_COLLAPSED_REFLEXIVE_LINK_LIMIT","restrict","template","scope","showPredicatesInfoPanel","selectedPredicate","collapseEdges","link","timer","prototype","moveToFront","this","select","appendChild","moveToBack","firstChild","insertBefore","width","mainClassSize","otherClassSize","datatypeSize","labelFontSize","basicArrowStrokeWidth","collapsedArrowStrokeWidth","force","layout","size","charge","drag","classed","selected","svg","append","defs","id","viewBox","refX","refY","markerUnits","markerWidth","markerHeight","orient","fill","class","imgSrc","href","download","getActiveRepository","legendBackgroundWidth","legendBackgroundHeight","legendCellGroup","height","sourceX","sourceY","targetX","targetY","legendTextX","legendLabelFontSize","classNodeY","classNodeTextY","cx","cy","r","x","y","objectNodeY","objectNodeTextY","datatypeNodeY","datatypeNodeTextY","basicPropertyArrowY","x1","y1","x2","y2","absUrl","implicitPropArrowY","collapsedPropArrowY","g","selectedRdfUri","search","uri","classNodeLabel","name","collapsed","getDomainRangeData","success","response","status","headers","domainRangeGraphData","error","set","DOMAIN_RANGE_WENT_BACK","onpopstate","state","$broadcast","$watch","angular","isUndefined","DOMAIN_RANGE_COLLAPSE_EDGES","get","switchEdgeMode","remove","graph","copy","nodes","links","linkGroup","data","enter","styleArrowsInCollapsedMode","loopLink","loopLinkEdgeCount","objectPropNodeClassUri","propertyType","targetRadius","targetNodeEdgeCount","implicit","loopLinkSize","previousPropertyNameSelection","disableCollapsedPredicateLabelHightlighting","isEmptyObject","background","onCollapsedPropertyNameClick","previousSibling","stopPropagation","ready","bind","propertyNames","test","open","textPadding","linkRect","calculatedWidth","getBBox","calculatedHeight","translateX","nodeGroup","filter","objectPropClassUri","classPosition","objectPropClassName","call","$apply","rdfClassName","classNode","loopLinkBackgroundSel","loopLinkPropertyName","loopLinkBackgroundProps","i","push","idx","e","k","alpha","positionLoopLinkBackgrounds","loopLinkBackgroundY","loopLinkBackgroundX","allLoopLinkEdges","dd","foundLoopLinkBackgroundProps","grep","obj","parseFloat","transform","reposition","viewMoreTextWidth","target","allEdges","getComputedTextLength","adjustViewMorePredicatesLabel","source","pushEdgesToLeftAndRight","angle","atan2","cos","sin","loopTranslateX","loopTranslateY","positionLoopLink","currentBackgroundHeight","loopLinkLabelX","loopLinkLabelY","predicatesLeft","labelSel","backgroundSel","nextSibling","createViewMorePredicatesLabel","positionLoopLinkLabels","log10","log","LN10","absDiff","logOffset","abs","centerClassNode","linkDistance","start","renderDomainRangeGraph","$on","cancel","module","constant","directive","$inject"],"mappings":"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","file":"29.9bdb27c21d6eacac1341.bundle.js","sourcesContent":["var D3 = D3 || {};\n\nD3.Text = function () {\n function calcFontSizeRaw(text, radius, minimumSize, isMultiline) {\n minimumSize = minimumSize || 10;\n\n var textSize = radius / 3;\n if (typeof text === \"string\") {\n var len = text.substring(0, radius / 3).length + 1.5;\n textSize *= 10 / len;\n textSize += 1;\n // experimental alternative method:\n // var textSize = 3.3 * radius / text.length;\n\n // Tweak for Indian scripts and CJK ones\n if (text.match(/[\\u0900-\\u0DFF\\u1100-\\u11FF\\u2E80-\\u2EFF\\u3000-\\u9FFF]/)) {\n textSize *= 0.6;\n }\n\n if (textSize < minimumSize) {\n textSize = minimumSize;\n }\n\n /* Disabled for the time being, better without this\n if (isMultiline) {\n var numWords = text.split(/\\s+/).length;\n if (numWords > 1) {\n if (numWords > 4) {\n numWords = 4;\n }\n textSize += textSize * (4 - numWords) * 0.1;\n }\n }\n */\n\n return Math.round(textSize);\n }\n\n if (textSize < minimumSize) {\n textSize = minimumSize;\n }\n\n return Math.round(textSize);\n }\n\n function calcFontSize(text, radius, minimumSize, isMultiline) {\n return calcFontSizeRaw(text, radius, minimumSize, isMultiline) + 'px';\n }\n\n function getTextWithElipsisIfNeeded(str, threshold) {\n if (typeof str === \"string\") {\n if (str.length > threshold) {\n return str.substring(0, threshold - 3) + \"...\";\n }\n }\n return str;\n }\n\n return {\n calcFontSizeRaw: calcFontSizeRaw,\n calcFontSize: calcFontSize,\n getTextWithElipsisIfNeeded: getTextWithElipsisIfNeeded\n };\n}();\n\nD3.Transition = function () {\n function fadeIn(sel, duration) {\n sel.style(\"opacity\", 0.0)\n .transition()\n .duration(duration)\n .style(\"opacity\", 1.0);\n }\n\n function fadeOut(sel, duration) {\n sel.style(\"opacity\", 1.0)\n .transition()\n .duration(duration)\n .style(\"opacity\", 0.0);\n }\n\n return {\n fadeIn: fadeIn,\n fadeOut: fadeOut\n };\n}();\n\nD3.Click = function () {\n function delayDblClick() {\n var event = d3.dispatch('click', 'dblclick');\n\n function cc(selection) {\n var down,\n tolerance = 5,\n last,\n wait = null;\n\n // euclidean distance\n function dist(a, b) {\n return Math.sqrt(Math.pow(a[0] - b[0], 2), Math.pow(a[1] - b[1], 2));\n }\n\n selection.on('mousedown', function () {\n down = d3.mouse(document.body);\n last = +new Date();\n });\n selection.on('mouseup', function (d) {\n if (dist(down, d3.mouse(document.body)) > tolerance) {\n return;\n } else {\n if (wait) {\n window.clearTimeout(wait);\n wait = null;\n event.dblclick(d);\n } else {\n wait = window.setTimeout((function (e) {\n return function () {\n event.click(d);\n wait = null;\n };\n })(d3.event), 250);\n }\n }\n });\n }\n\n return d3.rebind(cc, event, 'on');\n }\n\n return {\n delayDblClick: delayDblClick\n };\n}();\n\nexport default D3;\n","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","import SVG from 'lib/common/svg-export';\nimport D3 from 'lib/common/d3-utils';\nimport 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.graphexplore.directives.domainrange', [\n 'graphdb.framework.graphexplore.controllers.domainrange',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .constant('ONTO_RED', 'var(--onto-orange)')\n .constant('ONTO_GREEN', 'var(--onto-green)')\n .constant('ONTO_BLUE', 'var(--onto-blue)')\n .constant('NON_COLLAPSED_REFLEXIVE_LINK_LIMIT', 6)\n .directive('domainRangeGraph', domainRangeGraphDirective);\n\ndomainRangeGraphDirective.$inject = ['$rootScope', '$window', '$repositories', 'GraphDataRestService', '$location', 'LocalStorageAdapter', 'LSKeys', '$timeout', 'toastr', 'ONTO_RED', 'ONTO_GREEN', 'ONTO_BLUE', 'NON_COLLAPSED_REFLEXIVE_LINK_LIMIT'];\n\nfunction domainRangeGraphDirective($rootScope, $window, $repositories, GraphDataRestService, $location, LocalStorageAdapter, LSKeys, $timeout, toastr, ONTO_RED, ONTO_GREEN, ONTO_BLUE, NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n return {\n restrict: 'AE',\n template: '<div id=\"domain-range\"></div>',\n scope: {\n showPredicatesInfoPanel: '=',\n selectedPredicate: '=',\n collapseEdges: '='\n },\n link: linkFunc\n };\n\n function linkFunc(scope) {\n const timer = $timeout(function () {\n renderDomainRangeGraph(scope);\n }, 50);\n\n scope.$on(\"$destroy\", function () {\n $timeout.cancel(timer);\n });\n }\n\n function renderDomainRangeGraph(scope) {\n d3.selection.prototype.moveToFront = function () {\n return this.each(function () {\n d3.select(this.parentNode.appendChild(this));\n });\n };\n\n d3.selection.prototype.moveToBack = function () {\n return this.each(function () {\n const firstChild = this.parentNode.firstChild;\n if (firstChild) {\n this.parentNode.insertBefore(this, firstChild);\n }\n });\n };\n\n var width = 1200,\n height = 600;\n\n var mainClassSize = width / 18,\n otherClassSize = width / 110,\n datatypeSize = otherClassSize / 2,\n labelFontSize = width / 90,\n basicArrowStrokeWidth = width / 1000,\n collapsedArrowStrokeWidth = width / 600;\n\n\n var force = d3.layout.force()\n .size([width, height])\n .charge(-900);\n\n var drag = force.drag()\n .on(\"dragstart\", dragstart);\n\n var svg = d3.select(\"#domain-range\")\n .append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + width + \" \" + height)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\")\n .on(\"dblclick.zoom\", null);\n\n var defs = svg.append(\"defs\");\n\n defs.append(\"marker\")\n .attr({\n id: \"arrow\",\n viewBox: \"0 -5 10 10\",\n refX: 10,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 5,\n markerHeight: 5,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attr({\n id: \"collapsed-arrow\",\n viewBox: \"0 -5 10 10\",\n refX: 9,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 4,\n markerHeight: 4,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attr({\n id: \"arrow-loop\",\n viewBox: \"0 -5 10 10\",\n refX: 7,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 5,\n markerHeight: 5,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n /*\n * Prepares SVG document image export by adding xml namespaces and\n * additional style information\n */\n function prepareForSVGImageExport() {\n // get css rules for the diagram\n var cssRules = SVG.Export.getCSSRules(\"css/domain-range-graph.css?v=2.0.0-M3-RC3\");\n\n // inline css rules in a defs tag\n $(\"defs\").append('<style type=\"text/css\"><![CDATA[' + cssRules + ']]></style>');\n\n // convert selected html to base64\n var 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: \"domain-range-graph-\" + $repositories.getActiveRepository() + \".svg\"\n });\n }\n\n d3.select(\"#download-svg\")\n .on(\"mouseover\", prepareForSVGImageExport);\n\n // start of code for legend\n var legendBackgroundWidth = width / 7;\n var legendBackgroundHeight = legendBackgroundWidth * 1.2;\n\n var svgLegend = d3.select(\".legend-container\")\n .append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + legendBackgroundWidth + \" \" + legendBackgroundHeight)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\");\n\n var legendCellGroup = svgLegend;\n\n legendCellGroup.append(\"rect\")\n .attr({\n width: legendBackgroundWidth,\n height: legendBackgroundHeight\n })\n .style(\"fill\", \"rgba(235, 235, 235, 0.9)\");\n\n var sourceX = width / 75;\n var sourceY = width / 40;\n var targetX = sourceX + mainClassSize / 2.5;\n var targetY = sourceY;\n\n var legendTextX = targetX + width / 90;\n var legendLabelFontSize = labelFontSize / 1.1;\n\n var classNodeY = sourceY;\n var legendClassNode = legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-class-node\",\n cx: (sourceX + targetX) / 2,\n cy: classNodeY,\n r: mainClassSize / 4.5\n });\n\n var classNodeTextY = targetY + width / 370;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: classNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"main class node\");\n\n var objectNodeY = classNodeY + width / 30;\n legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-object-node\",\n cx: (sourceX + targetX) / 2,\n cy: objectNodeY,\n r: otherClassSize / 1.25\n });\n\n var objectNodeTextY = classNodeTextY + width / 30;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: objectNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"class node\");\n\n var datatypeNodeY = objectNodeY + width / 45;\n legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-datatype-node\",\n cx: (sourceX + targetX) / 2,\n cy: datatypeNodeY,\n r: datatypeSize\n });\n\n var datatypeNodeTextY = objectNodeTextY + width / 45;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: datatypeNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"datatype node\");\n\n var basicPropertyArrowY = datatypeNodeY + width / 45;\n var classNodeSel = d3.select('.legend-class-node');\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"property-arrow\",\n x1: sourceX,\n y1: basicPropertyArrowY,\n x2: targetX,\n y2: basicPropertyArrowY\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: basicPropertyArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"explicit property\");\n\n var implicitPropArrowY = basicPropertyArrowY + width / 45;\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"implicit-property-arrow\",\n x1: sourceX,\n y1: implicitPropArrowY,\n x2: targetX,\n y2: implicitPropArrowY\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: implicitPropArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"implicit property\");\n\n var collapsedPropArrowY = implicitPropArrowY + width / 45;\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"collapsed-property-arrow\",\n x1: sourceX,\n y1: collapsedPropArrowY,\n x2: targetX,\n y2: collapsedPropArrowY\n })\n .style(\"stroke-width\", collapsedArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#collapsed-arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: collapsedPropArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"collapsed property\");\n // end of code for legend\n\n // there doesn't seem to be a need for a separate group\n var g = svg; //svg.append(\"g\");\n\n var selectedRdfUri = $location.search().uri;\n var classNodeLabel = $location.search().name;\n var collapsed = $location.search().collapsed;\n\n GraphDataRestService.getDomainRangeData(selectedRdfUri, collapsed)\n .success(function (response, status, headers) {\n scope.domainRangeGraphData = response;\n }).error(function (response) {\n toastr.error(\"Request for \" + classNodeLabel + \" failed!\");\n });\n\n function switchEdgeMode(collapsed) {\n $rootScope.$broadcast('switchEdgeMode', {\n uri: selectedRdfUri,\n name: classNodeLabel,\n collapsed: collapsed\n });\n }\n\n // intercept back button press and set action to local storage\n $(window).on('popstate', function () {\n LocalStorageAdapter.set(LSKeys.DOMAIN_RANGE_WENT_BACK, true);\n });\n\n $window.onpopstate = function (event) {\n if (event.state) {\n $rootScope.$broadcast(\"changeCollapsedEdgesState\", event.state.collapsed);\n }\n };\n\n scope.$watch('collapseEdges', function () {\n if (!angular.isUndefined(scope.collapseEdges)) {\n LocalStorageAdapter.set(LSKeys.DOMAIN_RANGE_COLLAPSE_EDGES, scope.collapseEdges);\n\n // if the back button has not been pressed, then switch to collapsed or non collapsed mode\n // otherwise skip, because back button will not function properly and will not pop the entire\n // history stack\n if (LocalStorageAdapter.get(LSKeys.DOMAIN_RANGE_WENT_BACK) !== \"true\") {\n switchEdgeMode(scope.collapseEdges);\n }\n\n // after back button status has been checked, remove the action from local storage in order\n // to be clean for next check\n LocalStorageAdapter.remove(LSKeys.DOMAIN_RANGE_WENT_BACK);\n }\n });\n\n scope.$watch('domainRangeGraphData', function () {\n if (scope.domainRangeGraphData) {\n var graph = angular.copy(scope.domainRangeGraphData);\n\n force\n .nodes(graph.nodes)\n .links(graph.links);\n\n var linkGroup = g.selectAll(\".link\")\n .data(graph.links)\n .enter()\n .append(\"g\");\n\n function styleArrowsInCollapsedMode(sel) {\n sel.style(\"stroke\", ONTO_BLUE);\n sel.style(\"stroke-width\", collapsedArrowStrokeWidth);\n sel.attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#collapsed-arrow)\");\n }\n\n var link,\n loopLink,\n loopLinkEdgeCount = 0;\n\n\n linkGroup\n .each(function (d) {\n if (d.objectPropNodeClassUri !== selectedRdfUri) {\n link = linkGroup\n .append(\"line\")\n .attr({\n class: \"link\",\n // absolute url needed because angular inserts a <base> tag\n \"marker-end\": \"url(\" + $location.absUrl() + \"#arrow)\"\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .each(function (d) {\n switch (d.propertyType) {\n case \"objectLeft\":\n d.targetRadius = mainClassSize;\n break;\n case \"objectRight\":\n d.targetRadius = otherClassSize;\n break;\n case \"datatype\":\n d.targetRadius = datatypeSize;\n break;\n default:\n d.targetRadius = 0;\n }\n var sel = d3.select(this);\n if (d.targetNodeEdgeCount > 1) {\n styleArrowsInCollapsedMode(sel);\n } else if (d.implicit) {\n sel.style(\"stroke-dasharray\", \"3, 3\");\n }\n });\n } else {\n if (angular.isUndefined(loopLink)) {\n var loopLinkSize = mainClassSize / 2;\n loopLink = d3.select(this)\n .append(\"path\")\n .attr({\n d: \"M 0 0 A \" + loopLinkSize + \" \" + loopLinkSize + \" 0 1 1 0 \" + loopLinkSize,\n class: \"loop-link\",\n fill: \"none\",\n \"marker-end\": \"url(\" + $location.absUrl() + \"#arrow-loop)\"\n })\n .style(\"stroke-width\", basicArrowStrokeWidth);\n }\n\n loopLinkEdgeCount += d.targetNodeEdgeCount;\n if (loopLinkEdgeCount > 1) {\n styleArrowsInCollapsedMode(d3.select(\".loop-link\"));\n }\n }\n });\n\n var previousPropertyNameSelection = {};\n\n function disableCollapsedPredicateLabelHightlighting() {\n if (!$.isEmptyObject(previousPropertyNameSelection)) {\n previousPropertyNameSelection.text.style(\"fill\", \"black\");\n previousPropertyNameSelection.background.style(\"fill\", \"#f0f0f0\");\n }\n }\n\n // when clicking anywhere else but the collapsed labels disable highlighting\n // of the currently selected one\n $(\"document\").ready(function () {\n $(\"#domain-range\").bind(\"click\", disableCollapsedPredicateLabelHightlighting);\n });\n\n function onCollapsedPropertyNameClick(d) {\n disableCollapsedPredicateLabelHightlighting();\n previousPropertyNameSelection.text = d3.select(this);\n\n previousPropertyNameSelection.background = d3.select(this.previousSibling);\n previousPropertyNameSelection.text.style(\"fill\", \"white\");\n\n previousPropertyNameSelection.background.style(\"fill\", ONTO_BLUE);\n $timeout(function () {\n scope.showPredicatesInfoPanel = true;\n scope.selectedPredicate = d;\n });\n d3.event.stopPropagation();\n }\n\n\n var propertyNames = linkGroup\n .append(\"text\")\n .attr(\"class\", function (d) {\n return d.objectPropNodeClassUri === selectedRdfUri ? \"loop-link-property-name\" : \"property-name\";\n })\n .attr(\"dx\", function (d) {\n // offset text more towards the main class\n return mainClassSize / 2 * (d.propertyType === \"objectLeft\" ? 1 : -1);\n })\n .style(\"text-anchor\", function (d) {\n return d.propertyType === \"objectLeft\" ? \"end\" : \"start\";\n })\n .style(\"font-size\", labelFontSize)\n .text(function (d) {\n return d.targetNodeEdgeCount > 1 ? d.targetNodeEdgeCount + \" predicates\" : d.name;\n });\n\n\n propertyNames\n .each(function (d) {\n var sel = d3.select(this);\n var isCompoundEdge = /\\d\\spredicates/.test(sel.text());\n\n // handle collapsed predicates by making their font bold, make them highlight when clicked\n // and make them trigger the side panel to display the collapsed edges\n if (isCompoundEdge) {\n sel\n .style(\"font-weight\", \"bold\")\n .on(\"click\", onCollapsedPropertyNameClick);\n } else {\n // for regular predicate labels just attach a link to the \"Resources\" view\n // for more helpful information regarding them\n sel.on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.uri), \"_blank\");\n });\n }\n });\n var textPadding = width / 600;\n\n\n var linkRect = linkGroup\n .append(\"rect\")\n .attr(\"class\", function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri ? \"link-background\" : \"loop-link-background\"\n })\n .attr(\"width\", function (d) {\n d.calculatedWidth = this.previousSibling.getBBox().width;\n return d.calculatedWidth + textPadding * 2;\n })\n .attr(\"height\", function (d) {\n d.calculatedHeight = this.previousSibling.getBBox().height;\n return d.calculatedHeight + textPadding;\n })\n .attr(\"transform\", function (d) {\n // offset rect by the same amount as text (besides the padding)\n var translateX = textPadding - mainClassSize / 2 * (d.propertyType === \"objectLeft\" ? 1 : -1);\n if (d.propertyType === \"objectLeft\") {\n translateX += d.calculatedWidth;\n }\n return \"translate(-\" + translateX + \",-\" + (textPadding + d.calculatedHeight / 2) + \")\";\n })\n .on(\"click\", function (d) {\n d3.event.stopPropagation();\n });\n\n\n var nodeGroup = g.selectAll(\".node\")\n .data(graph.nodes)\n .enter()\n .append(\"g\");\n\n var node = nodeGroup\n .filter(function (d) {\n return d.objectPropClassUri !== selectedRdfUri;\n })\n .append(\"circle\")\n .each(function (d) {\n var sel = d3.select(this);\n if (d.classPosition === \"main\") {\n sel.attr({\n class: \"class-node\",\n r: mainClassSize\n })\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#loop-link)\");\n } else if (d.objectPropClassName === null) {\n sel.attr({\n class: \"datatype-node\",\n r: datatypeSize\n });\n } else {\n sel.attr({\n class: \"object-prop-node\",\n r: otherClassSize\n });\n }\n })\n .call(drag);\n\n\n function reloadDomainRangeGraphView(d, collapsed) {\n scope.$apply(function () {\n $rootScope.$broadcast('reloadDomainRangeGraphView', d, collapsed);\n });\n }\n\n d3.selectAll(\".object-prop-node\")\n .on(\"dblclick\", reloadDomainRangeGraphView);\n\n\n nodeGroup\n .filter(function (d) {\n return d.objectPropClassName && d.objectPropClassUri !== selectedRdfUri;\n })\n .append(\"text\")\n .attr(\"class\", function (d) {\n return d.classPosition + \"-class-label\";\n })\n .style(\"font-size\", labelFontSize)\n .text(function (d) {\n return d.objectPropClassName;\n })\n .on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.objectPropClassUri), \"_blank\");\n });\n\n var objectPropClassName = nodeGroup.select(\"text\");\n\n g.select(\".class-node\")\n .each(function () {\n d3.select(this.parentNode)\n .append(\"text\")\n .attr(\"class\", \"rdf-class-label\")\n .style(\"font-size\", function (d) {\n return D3.Text.calcFontSize(classNodeLabel, mainClassSize)\n })\n .text(classNodeLabel)\n .on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(selectedRdfUri), \"_blank\");\n });\n });\n\n\n var rdfClassName = g.select(\".class-node + text\"),\n classNode = d3.select(\".class-node\"),\n loopLinkBackgroundSel = d3.selectAll(\".loop-link-background\"),\n loopLinkPropertyName = d3.selectAll(\".loop-link-property-name\");\n\n propertyNames = d3.selectAll(\".property-name\");\n\n if (!angular.isUndefined(loopLink)) {\n var loopLinkBackgroundProps = [];\n\n loopLinkBackgroundSel.each(function (d, i) {\n var sel = d3.select(this);\n loopLinkBackgroundProps.push({\n idx: i,\n width: d.calculatedWidth,\n height: d.calculatedHeight\n });\n });\n }\n\n function tick(e) {\n var k = 8 * e.alpha;\n\n function pushEdgesToLeftAndRight(d) {\n if (d.propertyType === \"objectLeft\") {\n d.source.x -= 8 * k;\n d.source.y -= k / 9;\n } else {\n d.target.x += 8 * k;\n d.target.y -= k / 9;\n }\n }\n\n link\n .filter(function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri;\n })\n .attr(\"x1\", function (d) {\n return d.source.x;\n })\n .attr(\"y1\", function (d) {\n return d.source.y;\n })\n .attr(\"x2\", function (d) {\n return d.targetX;\n })\n .attr(\"y2\", function (d) {\n return d.targetY;\n })\n .each(function (d) {\n pushEdgesToLeftAndRight(d);\n\n // shortens the line to compensate for the circle at the target\n var angle = Math.atan2(d.target.y - d.source.y, d.target.x - d.source.x);\n d.targetX = d.target.x - Math.cos(angle) * d.targetRadius;\n d.targetY = d.target.y - Math.sin(angle) * d.targetRadius;\n });\n\n function positionLoopLink(d) {\n var loopTranslateX = d.x + mainClassSize * 0.96,\n loopTranslateY = d.y - mainClassSize / 5.7 - 5;\n loopLink.attr(\"transform\", \"rotate(270, \" + d.x + \",\" + d.y + \") translate(\" + loopTranslateX + \",\" + loopTranslateY + \")\");\n }\n\n function positionLoopLinkLabels(d) {\n function reposition(sel, i) {\n var foundLoopLinkBackgroundProps =\n $.grep(loopLinkBackgroundProps, function (obj) {\n return obj.idx == i;\n });\n var currentBackgroundHeight = 0;\n if (i > 0) {\n currentBackgroundHeight = parseFloat(2 * i * (foundLoopLinkBackgroundProps[0].height / 1.4));\n }\n\n var loopLinkLabelX = d.x,\n loopLinkLabelY = d.y - mainClassSize * 2.1 - currentBackgroundHeight;\n\n sel\n .attr({\n x: loopLinkLabelX,\n y: loopLinkLabelY\n })\n .moveToFront();\n }\n\n /**\n * Create a \"View more\" label to depict that the are more reflexive link labels\n * left that could be seen in the side panel when clicking this label.\n *\n * @param labelSel\n * d3 selection of the text label\n * @param backgroundSel\n * d3 selection of the rectangle element background\n * @param predicatesLeft\n * number of predicates left that are collapsed\n */\n function createViewMorePredicatesLabel(labelSel, backgroundSel, predicatesLeft) {\n labelSel\n .classed(\"view-more-preds-label\", true)\n .text(predicatesLeft + \" predicates more ...\");\n if (this.nextSibling !== null) {\n backgroundSel\n .classed(\"view-more-preds-rect\", true);\n }\n }\n\n loopLinkPropertyName.each(function (dd, i) {\n var sel = d3.select(this);\n\n var predicatesLeft = loopLinkPropertyName.size() - NON_COLLAPSED_REFLEXIVE_LINK_LIMIT;\n if (predicatesLeft < 0) {\n reposition(sel, i);\n } else {\n if (i == 0 && !scope.collapseEdges && predicatesLeft > 1) {\n createViewMorePredicatesLabel(sel, d3.select(this.nextSibling), predicatesLeft);\n reposition(sel, i);\n }\n\n if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n reposition(sel, i);\n } else {\n sel.remove();\n }\n }\n });\n // loopLinkPropertyName.each(function (dd, i) {\n // var sel = d3.select(this);\n // if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n // reposition(sel, i);\n // } else if (i == NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n // createViewMorePredicatesLabel(sel, d3.select(this.nextSibling));\n // reposition(sel, i);\n // } else {\n // sel.remove();\n // }\n // });\n }\n\n function positionLoopLinkBackgrounds(d) {\n var loopLinkBackgroundY = d.x + mainClassSize * 2,\n loopLinkBackgroundX = d.y - mainClassSize / 1.9;\n\n function reposition(sel, i) {\n var foundLoopLinkBackgroundProps =\n $.grep(loopLinkBackgroundProps, function (obj) {\n return obj.idx == i;\n });\n if (i > 0) {\n loopLinkBackgroundY += parseFloat(i * (foundLoopLinkBackgroundProps[0].height / (i / 1.4)));\n }\n\n sel\n .attr({\n transform: \"rotate(270, \" + d.x + \",\" + d.y + \") translate(\" + loopLinkBackgroundY + \",\" + loopLinkBackgroundX + \")\",\n width: foundLoopLinkBackgroundProps[0].height,\n height: foundLoopLinkBackgroundProps[0].width\n });\n }\n\n /**\n * Adjust new width of \"View more\" label background and add all reflexive link metadata the this\n * label in order to render them in the side panel.\n *\n * @param allLoopLinkEdges\n * all reflexive links to the current class\n */\n function adjustViewMorePredicatesLabel(allLoopLinkEdges) {\n var viewMoreTextWidth;\n d3.select(\".view-more-preds-label\")\n // make label bold to resemble a collapsed label\n .style(\"font-weight\", \"bold\")\n .each(function (d) {\n // attach all reflexive links to the \"view more\" collapsed predicate\n // because in non collapsed mode the backend does not provide them\n d.target.allEdges = allLoopLinkEdges;\n\n // calculate text width in pixels in order to adjust background width accordingly\n viewMoreTextWidth = this.getComputedTextLength();\n })\n .on(\"click\", onCollapsedPropertyNameClick);\n\n d3.select(\".view-more-preds-rect\")\n // we modify height property instead of width because they are reversed\n // when we repositioned loop link labels\n .attr(\"height\", viewMoreTextWidth + 2 * textPadding);\n }\n\n var allLoopLinkEdges = [];\n loopLinkBackgroundSel.each(function (dd, i) {\n allLoopLinkEdges.push(dd);\n if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n reposition(d3.select(this), i);\n } else {\n d3.select(this).remove();\n }\n });\n\n adjustViewMorePredicatesLabel(allLoopLinkEdges);\n }\n\n\n function centerClassNode(d) {\n if (!(window.ActiveXObject) && \"ActiveXObject\" in window) {\n Math.log10 = function (x) {\n return Math.log(x) / Math.LN10;\n };\n }\n var absDiff = classNode.attr(\"cx\") - width / 2,\n logOffset = Math.log10(Math.abs(absDiff)) * 0.5;\n d.x += absDiff > 0 ? -logOffset : logOffset;\n return d.x;\n }\n\n node\n .each(function (d) {\n if (d.classPosition === \"main\" && !angular.isUndefined(loopLink)) {\n positionLoopLink(d);\n positionLoopLinkLabels(d);\n positionLoopLinkBackgrounds(d);\n }\n\n if (d.objectPropClassUri !== selectedRdfUri) {\n d3.select(this)\n .attr(\"cx\", function (d) {\n // pushes the main class circle to the centre\n if (d.classPosition === \"main\") {\n return centerClassNode(d);\n }\n return d.x;\n })\n .attr(\"cy\", function (d) {\n return d.y;\n });\n }\n });\n\n\n rdfClassName\n .attr(\"x\", function (d) {\n return d.x;\n })\n .attr(\"y\", function (d) {\n return d.y;\n })\n .moveToFront();\n\n\n linkRect\n .filter(function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri;\n })\n .attr(\"x\", function (d) {\n if (d.target.x > d.source.x) {\n return (d.source.x + (d.target.x - d.source.x) / 2);\n } else {\n return (d.target.x + (d.source.x - d.target.x) / 2);\n }\n })\n .attr(\"y\", function (d) {\n if (d.target.y > d.source.y) {\n return (d.source.y + (d.target.y - d.source.y) / 2);\n } else {\n return (d.target.y + (d.source.y - d.target.y) / 2);\n }\n })\n .moveToFront();\n\n\n propertyNames\n .attr(\"x\", function (d) {\n if (d.target.x > d.source.x) {\n return (d.source.x + (d.target.x - d.source.x) / 2);\n } else {\n return (d.target.x + (d.source.x - d.target.x) / 2);\n }\n })\n .attr(\"y\", function (d) {\n if (d.target.y > d.source.y) {\n return (d.source.y + (d.target.y - d.source.y) / 2);\n } else {\n return (d.target.y + (d.source.y - d.target.y) / 2);\n }\n })\n .moveToFront();\n\n\n objectPropClassName\n .attr(\"x\", function (d) {\n if (d.classPosition === \"right\") {\n return d.x + otherClassSize * 1.2;\n } else {\n return d.x - otherClassSize * 1.2;\n }\n })\n .attr(\"y\", function (d) {\n return d.y;\n })\n .moveToFront();\n }\n\n\n force\n .on(\"tick\", tick)\n .linkDistance(width / 3.5)\n .start();\n\n }\n });\n\n function dragstart(d) {\n d3.select(this)\n .classed(\"selected\", d.selected = true);\n }\n }\n}\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/js/lib/common/d3-utils.js","webpack:///./src/js/lib/common/svg-export.js","webpack:///./src/js/angular/graphexplore/directives/domain-range-graph.directive.js"],"names":["D3","Text","calcFontSizeRaw","text","radius","minimumSize","isMultiline","textSize","substring","length","match","Math","round","calcFontSize","getTextWithElipsisIfNeeded","str","threshold","Transition","fadeIn","sel","duration","style","transition","fadeOut","Click","delayDblClick","event","d3","dispatch","rebind","selection","down","wait","on","mouse","document","body","Date","d","a","b","sqrt","pow","window","clearTimeout","dblclick","setTimeout","click","SVG","Export","getCSSRules","cssSourceFilePath","cssRules","$","sheet","rules","cssStr","_","each","value","cssText","generateBase64ImageSource","exportSvg","selectAll","attr","version","xmlns","node","parentNode","innerHTML","btoa","unescape","encodeURIComponent","domainRangeGraphDirective","$rootScope","$window","$repositories","GraphDataRestService","$location","LocalStorageAdapter","LSKeys","$timeout","toastr","ONTO_RED","ONTO_GREEN","ONTO_BLUE","NON_COLLAPSED_REFLEXIVE_LINK_LIMIT","restrict","template","scope","showPredicatesInfoPanel","selectedPredicate","collapseEdges","link","timer","prototype","moveToFront","this","select","appendChild","moveToBack","firstChild","insertBefore","width","mainClassSize","otherClassSize","datatypeSize","labelFontSize","basicArrowStrokeWidth","collapsedArrowStrokeWidth","force","layout","size","charge","drag","classed","selected","svg","append","defs","id","viewBox","refX","refY","markerUnits","markerWidth","markerHeight","orient","fill","class","imgSrc","href","download","getActiveRepository","legendBackgroundWidth","legendBackgroundHeight","legendCellGroup","height","sourceX","sourceY","targetX","targetY","legendTextX","legendLabelFontSize","classNodeY","classNodeTextY","cx","cy","r","x","y","objectNodeY","objectNodeTextY","datatypeNodeY","datatypeNodeTextY","basicPropertyArrowY","x1","y1","x2","y2","absUrl","implicitPropArrowY","collapsedPropArrowY","g","selectedRdfUri","search","uri","classNodeLabel","name","collapsed","getDomainRangeData","success","response","status","headers","domainRangeGraphData","error","set","DOMAIN_RANGE_WENT_BACK","onpopstate","state","$broadcast","$watch","angular","isUndefined","DOMAIN_RANGE_COLLAPSE_EDGES","get","switchEdgeMode","remove","graph","copy","nodes","links","linkGroup","data","enter","styleArrowsInCollapsedMode","loopLink","loopLinkEdgeCount","objectPropNodeClassUri","propertyType","targetRadius","targetNodeEdgeCount","implicit","loopLinkSize","previousPropertyNameSelection","disableCollapsedPredicateLabelHightlighting","isEmptyObject","background","onCollapsedPropertyNameClick","previousSibling","stopPropagation","ready","bind","propertyNames","test","open","textPadding","linkRect","calculatedWidth","getBBox","calculatedHeight","translateX","nodeGroup","filter","objectPropClassUri","classPosition","objectPropClassName","call","$apply","rdfClassName","classNode","loopLinkBackgroundSel","loopLinkPropertyName","loopLinkBackgroundProps","i","push","idx","e","k","alpha","positionLoopLinkBackgrounds","loopLinkBackgroundY","loopLinkBackgroundX","allLoopLinkEdges","dd","foundLoopLinkBackgroundProps","grep","obj","parseFloat","transform","reposition","viewMoreTextWidth","target","allEdges","getComputedTextLength","adjustViewMorePredicatesLabel","source","pushEdgesToLeftAndRight","angle","atan2","cos","sin","loopTranslateX","loopTranslateY","positionLoopLink","currentBackgroundHeight","loopLinkLabelX","loopLinkLabelY","predicatesLeft","labelSel","backgroundSel","nextSibling","createViewMorePredicatesLabel","positionLoopLinkLabels","log10","log","LN10","absDiff","logOffset","abs","centerClassNode","linkDistance","start","renderDomainRangeGraph","$on","cancel","module","constant","directive","$inject"],"mappings":"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","file":"29.9bdb27c21d6eacac1341.bundle.js","sourcesContent":["var D3 = D3 || {};\n\nD3.Text = function () {\n function calcFontSizeRaw(text, radius, minimumSize, isMultiline) {\n minimumSize = minimumSize || 10;\n\n var textSize = radius / 3;\n if (typeof text === \"string\") {\n var len = text.substring(0, radius / 3).length + 1.5;\n textSize *= 10 / len;\n textSize += 1;\n // experimental alternative method:\n // var textSize = 3.3 * radius / text.length;\n\n // Tweak for Indian scripts and CJK ones\n if (text.match(/[\\u0900-\\u0DFF\\u1100-\\u11FF\\u2E80-\\u2EFF\\u3000-\\u9FFF]/)) {\n textSize *= 0.6;\n }\n\n if (textSize < minimumSize) {\n textSize = minimumSize;\n }\n\n /* Disabled for the time being, better without this\n if (isMultiline) {\n var numWords = text.split(/\\s+/).length;\n if (numWords > 1) {\n if (numWords > 4) {\n numWords = 4;\n }\n textSize += textSize * (4 - numWords) * 0.1;\n }\n }\n */\n\n return Math.round(textSize);\n }\n\n if (textSize < minimumSize) {\n textSize = minimumSize;\n }\n\n return Math.round(textSize);\n }\n\n function calcFontSize(text, radius, minimumSize, isMultiline) {\n return calcFontSizeRaw(text, radius, minimumSize, isMultiline) + 'px';\n }\n\n function getTextWithElipsisIfNeeded(str, threshold) {\n if (typeof str === \"string\") {\n if (str.length > threshold) {\n return str.substring(0, threshold - 3) + \"...\";\n }\n }\n return str;\n }\n\n return {\n calcFontSizeRaw: calcFontSizeRaw,\n calcFontSize: calcFontSize,\n getTextWithElipsisIfNeeded: getTextWithElipsisIfNeeded\n };\n}();\n\nD3.Transition = function () {\n function fadeIn(sel, duration) {\n sel.style(\"opacity\", 0.0)\n .transition()\n .duration(duration)\n .style(\"opacity\", 1.0);\n }\n\n function fadeOut(sel, duration) {\n sel.style(\"opacity\", 1.0)\n .transition()\n .duration(duration)\n .style(\"opacity\", 0.0);\n }\n\n return {\n fadeIn: fadeIn,\n fadeOut: fadeOut\n };\n}();\n\nD3.Click = function () {\n function delayDblClick() {\n var event = d3.dispatch('click', 'dblclick');\n\n function cc(selection) {\n var down,\n tolerance = 5,\n last,\n wait = null;\n\n // euclidean distance\n function dist(a, b) {\n return Math.sqrt(Math.pow(a[0] - b[0], 2), Math.pow(a[1] - b[1], 2));\n }\n\n selection.on('mousedown', function () {\n down = d3.mouse(document.body);\n last = +new Date();\n });\n selection.on('mouseup', function (d) {\n if (dist(down, d3.mouse(document.body)) > tolerance) {\n return;\n } else {\n if (wait) {\n window.clearTimeout(wait);\n wait = null;\n event.dblclick(d);\n } else {\n wait = window.setTimeout((function (e) {\n return function () {\n event.click(d);\n wait = null;\n };\n })(d3.event), 250);\n }\n }\n });\n }\n\n return d3.rebind(cc, event, 'on');\n }\n\n return {\n delayDblClick: delayDblClick\n };\n}();\n\nexport default D3;\n","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","import SVG from 'lib/common/svg-export';\nimport D3 from 'lib/common/d3-utils';\nimport 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.graphexplore.directives.domainrange', [\n 'graphdb.framework.graphexplore.controllers.domainrange',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .constant('ONTO_RED', 'var(--onto-orange)')\n .constant('ONTO_GREEN', 'var(--onto-green)')\n .constant('ONTO_BLUE', 'var(--onto-blue)')\n .constant('NON_COLLAPSED_REFLEXIVE_LINK_LIMIT', 6)\n .directive('domainRangeGraph', domainRangeGraphDirective);\n\ndomainRangeGraphDirective.$inject = ['$rootScope', '$window', '$repositories', 'GraphDataRestService', '$location', 'LocalStorageAdapter', 'LSKeys', '$timeout', 'toastr', 'ONTO_RED', 'ONTO_GREEN', 'ONTO_BLUE', 'NON_COLLAPSED_REFLEXIVE_LINK_LIMIT'];\n\nfunction domainRangeGraphDirective($rootScope, $window, $repositories, GraphDataRestService, $location, LocalStorageAdapter, LSKeys, $timeout, toastr, ONTO_RED, ONTO_GREEN, ONTO_BLUE, NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n return {\n restrict: 'AE',\n template: '<div id=\"domain-range\"></div>',\n scope: {\n showPredicatesInfoPanel: '=',\n selectedPredicate: '=',\n collapseEdges: '='\n },\n link: linkFunc\n };\n\n function linkFunc(scope) {\n const timer = $timeout(function () {\n renderDomainRangeGraph(scope);\n }, 50);\n\n scope.$on(\"$destroy\", function () {\n $timeout.cancel(timer);\n });\n }\n\n function renderDomainRangeGraph(scope) {\n d3.selection.prototype.moveToFront = function () {\n return this.each(function () {\n d3.select(this.parentNode.appendChild(this));\n });\n };\n\n d3.selection.prototype.moveToBack = function () {\n return this.each(function () {\n const firstChild = this.parentNode.firstChild;\n if (firstChild) {\n this.parentNode.insertBefore(this, firstChild);\n }\n });\n };\n\n var width = 1200,\n height = 600;\n\n var mainClassSize = width / 18,\n otherClassSize = width / 110,\n datatypeSize = otherClassSize / 2,\n labelFontSize = width / 90,\n basicArrowStrokeWidth = width / 1000,\n collapsedArrowStrokeWidth = width / 600;\n\n\n var force = d3.layout.force()\n .size([width, height])\n .charge(-900);\n\n var drag = force.drag()\n .on(\"dragstart\", dragstart);\n\n var svg = d3.select(\"#domain-range\")\n .append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + width + \" \" + height)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\")\n .on(\"dblclick.zoom\", null);\n\n var defs = svg.append(\"defs\");\n\n defs.append(\"marker\")\n .attr({\n id: \"arrow\",\n viewBox: \"0 -5 10 10\",\n refX: 10,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 5,\n markerHeight: 5,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attr({\n id: \"collapsed-arrow\",\n viewBox: \"0 -5 10 10\",\n refX: 9,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 4,\n markerHeight: 4,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attr({\n id: \"arrow-loop\",\n viewBox: \"0 -5 10 10\",\n refX: 7,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 5,\n markerHeight: 5,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n /*\n * Prepares SVG document image export by adding xml namespaces and\n * additional style information\n */\n function prepareForSVGImageExport() {\n // get css rules for the diagram\n var cssRules = SVG.Export.getCSSRules(\"css/domain-range-graph.css?v=2.0.0-RC2\");\n\n // inline css rules in a defs tag\n $(\"defs\").append('<style type=\"text/css\"><![CDATA[' + cssRules + ']]></style>');\n\n // convert selected html to base64\n var 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: \"domain-range-graph-\" + $repositories.getActiveRepository() + \".svg\"\n });\n }\n\n d3.select(\"#download-svg\")\n .on(\"mouseover\", prepareForSVGImageExport);\n\n // start of code for legend\n var legendBackgroundWidth = width / 7;\n var legendBackgroundHeight = legendBackgroundWidth * 1.2;\n\n var svgLegend = d3.select(\".legend-container\")\n .append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + legendBackgroundWidth + \" \" + legendBackgroundHeight)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\");\n\n var legendCellGroup = svgLegend;\n\n legendCellGroup.append(\"rect\")\n .attr({\n width: legendBackgroundWidth,\n height: legendBackgroundHeight\n })\n .style(\"fill\", \"rgba(235, 235, 235, 0.9)\");\n\n var sourceX = width / 75;\n var sourceY = width / 40;\n var targetX = sourceX + mainClassSize / 2.5;\n var targetY = sourceY;\n\n var legendTextX = targetX + width / 90;\n var legendLabelFontSize = labelFontSize / 1.1;\n\n var classNodeY = sourceY;\n var legendClassNode = legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-class-node\",\n cx: (sourceX + targetX) / 2,\n cy: classNodeY,\n r: mainClassSize / 4.5\n });\n\n var classNodeTextY = targetY + width / 370;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: classNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"main class node\");\n\n var objectNodeY = classNodeY + width / 30;\n legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-object-node\",\n cx: (sourceX + targetX) / 2,\n cy: objectNodeY,\n r: otherClassSize / 1.25\n });\n\n var objectNodeTextY = classNodeTextY + width / 30;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: objectNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"class node\");\n\n var datatypeNodeY = objectNodeY + width / 45;\n legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-datatype-node\",\n cx: (sourceX + targetX) / 2,\n cy: datatypeNodeY,\n r: datatypeSize\n });\n\n var datatypeNodeTextY = objectNodeTextY + width / 45;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: datatypeNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"datatype node\");\n\n var basicPropertyArrowY = datatypeNodeY + width / 45;\n var classNodeSel = d3.select('.legend-class-node');\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"property-arrow\",\n x1: sourceX,\n y1: basicPropertyArrowY,\n x2: targetX,\n y2: basicPropertyArrowY\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: basicPropertyArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"explicit property\");\n\n var implicitPropArrowY = basicPropertyArrowY + width / 45;\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"implicit-property-arrow\",\n x1: sourceX,\n y1: implicitPropArrowY,\n x2: targetX,\n y2: implicitPropArrowY\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: implicitPropArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"implicit property\");\n\n var collapsedPropArrowY = implicitPropArrowY + width / 45;\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"collapsed-property-arrow\",\n x1: sourceX,\n y1: collapsedPropArrowY,\n x2: targetX,\n y2: collapsedPropArrowY\n })\n .style(\"stroke-width\", collapsedArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#collapsed-arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: collapsedPropArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"collapsed property\");\n // end of code for legend\n\n // there doesn't seem to be a need for a separate group\n var g = svg; //svg.append(\"g\");\n\n var selectedRdfUri = $location.search().uri;\n var classNodeLabel = $location.search().name;\n var collapsed = $location.search().collapsed;\n\n GraphDataRestService.getDomainRangeData(selectedRdfUri, collapsed)\n .success(function (response, status, headers) {\n scope.domainRangeGraphData = response;\n }).error(function (response) {\n toastr.error(\"Request for \" + classNodeLabel + \" failed!\");\n });\n\n function switchEdgeMode(collapsed) {\n $rootScope.$broadcast('switchEdgeMode', {\n uri: selectedRdfUri,\n name: classNodeLabel,\n collapsed: collapsed\n });\n }\n\n // intercept back button press and set action to local storage\n $(window).on('popstate', function () {\n LocalStorageAdapter.set(LSKeys.DOMAIN_RANGE_WENT_BACK, true);\n });\n\n $window.onpopstate = function (event) {\n if (event.state) {\n $rootScope.$broadcast(\"changeCollapsedEdgesState\", event.state.collapsed);\n }\n };\n\n scope.$watch('collapseEdges', function () {\n if (!angular.isUndefined(scope.collapseEdges)) {\n LocalStorageAdapter.set(LSKeys.DOMAIN_RANGE_COLLAPSE_EDGES, scope.collapseEdges);\n\n // if the back button has not been pressed, then switch to collapsed or non collapsed mode\n // otherwise skip, because back button will not function properly and will not pop the entire\n // history stack\n if (LocalStorageAdapter.get(LSKeys.DOMAIN_RANGE_WENT_BACK) !== \"true\") {\n switchEdgeMode(scope.collapseEdges);\n }\n\n // after back button status has been checked, remove the action from local storage in order\n // to be clean for next check\n LocalStorageAdapter.remove(LSKeys.DOMAIN_RANGE_WENT_BACK);\n }\n });\n\n scope.$watch('domainRangeGraphData', function () {\n if (scope.domainRangeGraphData) {\n var graph = angular.copy(scope.domainRangeGraphData);\n\n force\n .nodes(graph.nodes)\n .links(graph.links);\n\n var linkGroup = g.selectAll(\".link\")\n .data(graph.links)\n .enter()\n .append(\"g\");\n\n function styleArrowsInCollapsedMode(sel) {\n sel.style(\"stroke\", ONTO_BLUE);\n sel.style(\"stroke-width\", collapsedArrowStrokeWidth);\n sel.attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#collapsed-arrow)\");\n }\n\n var link,\n loopLink,\n loopLinkEdgeCount = 0;\n\n\n linkGroup\n .each(function (d) {\n if (d.objectPropNodeClassUri !== selectedRdfUri) {\n link = linkGroup\n .append(\"line\")\n .attr({\n class: \"link\",\n // absolute url needed because angular inserts a <base> tag\n \"marker-end\": \"url(\" + $location.absUrl() + \"#arrow)\"\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .each(function (d) {\n switch (d.propertyType) {\n case \"objectLeft\":\n d.targetRadius = mainClassSize;\n break;\n case \"objectRight\":\n d.targetRadius = otherClassSize;\n break;\n case \"datatype\":\n d.targetRadius = datatypeSize;\n break;\n default:\n d.targetRadius = 0;\n }\n var sel = d3.select(this);\n if (d.targetNodeEdgeCount > 1) {\n styleArrowsInCollapsedMode(sel);\n } else if (d.implicit) {\n sel.style(\"stroke-dasharray\", \"3, 3\");\n }\n });\n } else {\n if (angular.isUndefined(loopLink)) {\n var loopLinkSize = mainClassSize / 2;\n loopLink = d3.select(this)\n .append(\"path\")\n .attr({\n d: \"M 0 0 A \" + loopLinkSize + \" \" + loopLinkSize + \" 0 1 1 0 \" + loopLinkSize,\n class: \"loop-link\",\n fill: \"none\",\n \"marker-end\": \"url(\" + $location.absUrl() + \"#arrow-loop)\"\n })\n .style(\"stroke-width\", basicArrowStrokeWidth);\n }\n\n loopLinkEdgeCount += d.targetNodeEdgeCount;\n if (loopLinkEdgeCount > 1) {\n styleArrowsInCollapsedMode(d3.select(\".loop-link\"));\n }\n }\n });\n\n var previousPropertyNameSelection = {};\n\n function disableCollapsedPredicateLabelHightlighting() {\n if (!$.isEmptyObject(previousPropertyNameSelection)) {\n previousPropertyNameSelection.text.style(\"fill\", \"black\");\n previousPropertyNameSelection.background.style(\"fill\", \"#f0f0f0\");\n }\n }\n\n // when clicking anywhere else but the collapsed labels disable highlighting\n // of the currently selected one\n $(\"document\").ready(function () {\n $(\"#domain-range\").bind(\"click\", disableCollapsedPredicateLabelHightlighting);\n });\n\n function onCollapsedPropertyNameClick(d) {\n disableCollapsedPredicateLabelHightlighting();\n previousPropertyNameSelection.text = d3.select(this);\n\n previousPropertyNameSelection.background = d3.select(this.previousSibling);\n previousPropertyNameSelection.text.style(\"fill\", \"white\");\n\n previousPropertyNameSelection.background.style(\"fill\", ONTO_BLUE);\n $timeout(function () {\n scope.showPredicatesInfoPanel = true;\n scope.selectedPredicate = d;\n });\n d3.event.stopPropagation();\n }\n\n\n var propertyNames = linkGroup\n .append(\"text\")\n .attr(\"class\", function (d) {\n return d.objectPropNodeClassUri === selectedRdfUri ? \"loop-link-property-name\" : \"property-name\";\n })\n .attr(\"dx\", function (d) {\n // offset text more towards the main class\n return mainClassSize / 2 * (d.propertyType === \"objectLeft\" ? 1 : -1);\n })\n .style(\"text-anchor\", function (d) {\n return d.propertyType === \"objectLeft\" ? \"end\" : \"start\";\n })\n .style(\"font-size\", labelFontSize)\n .text(function (d) {\n return d.targetNodeEdgeCount > 1 ? d.targetNodeEdgeCount + \" predicates\" : d.name;\n });\n\n\n propertyNames\n .each(function (d) {\n var sel = d3.select(this);\n var isCompoundEdge = /\\d\\spredicates/.test(sel.text());\n\n // handle collapsed predicates by making their font bold, make them highlight when clicked\n // and make them trigger the side panel to display the collapsed edges\n if (isCompoundEdge) {\n sel\n .style(\"font-weight\", \"bold\")\n .on(\"click\", onCollapsedPropertyNameClick);\n } else {\n // for regular predicate labels just attach a link to the \"Resources\" view\n // for more helpful information regarding them\n sel.on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.uri), \"_blank\");\n });\n }\n });\n var textPadding = width / 600;\n\n\n var linkRect = linkGroup\n .append(\"rect\")\n .attr(\"class\", function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri ? \"link-background\" : \"loop-link-background\"\n })\n .attr(\"width\", function (d) {\n d.calculatedWidth = this.previousSibling.getBBox().width;\n return d.calculatedWidth + textPadding * 2;\n })\n .attr(\"height\", function (d) {\n d.calculatedHeight = this.previousSibling.getBBox().height;\n return d.calculatedHeight + textPadding;\n })\n .attr(\"transform\", function (d) {\n // offset rect by the same amount as text (besides the padding)\n var translateX = textPadding - mainClassSize / 2 * (d.propertyType === \"objectLeft\" ? 1 : -1);\n if (d.propertyType === \"objectLeft\") {\n translateX += d.calculatedWidth;\n }\n return \"translate(-\" + translateX + \",-\" + (textPadding + d.calculatedHeight / 2) + \")\";\n })\n .on(\"click\", function (d) {\n d3.event.stopPropagation();\n });\n\n\n var nodeGroup = g.selectAll(\".node\")\n .data(graph.nodes)\n .enter()\n .append(\"g\");\n\n var node = nodeGroup\n .filter(function (d) {\n return d.objectPropClassUri !== selectedRdfUri;\n })\n .append(\"circle\")\n .each(function (d) {\n var sel = d3.select(this);\n if (d.classPosition === \"main\") {\n sel.attr({\n class: \"class-node\",\n r: mainClassSize\n })\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#loop-link)\");\n } else if (d.objectPropClassName === null) {\n sel.attr({\n class: \"datatype-node\",\n r: datatypeSize\n });\n } else {\n sel.attr({\n class: \"object-prop-node\",\n r: otherClassSize\n });\n }\n })\n .call(drag);\n\n\n function reloadDomainRangeGraphView(d, collapsed) {\n scope.$apply(function () {\n $rootScope.$broadcast('reloadDomainRangeGraphView', d, collapsed);\n });\n }\n\n d3.selectAll(\".object-prop-node\")\n .on(\"dblclick\", reloadDomainRangeGraphView);\n\n\n nodeGroup\n .filter(function (d) {\n return d.objectPropClassName && d.objectPropClassUri !== selectedRdfUri;\n })\n .append(\"text\")\n .attr(\"class\", function (d) {\n return d.classPosition + \"-class-label\";\n })\n .style(\"font-size\", labelFontSize)\n .text(function (d) {\n return d.objectPropClassName;\n })\n .on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.objectPropClassUri), \"_blank\");\n });\n\n var objectPropClassName = nodeGroup.select(\"text\");\n\n g.select(\".class-node\")\n .each(function () {\n d3.select(this.parentNode)\n .append(\"text\")\n .attr(\"class\", \"rdf-class-label\")\n .style(\"font-size\", function (d) {\n return D3.Text.calcFontSize(classNodeLabel, mainClassSize)\n })\n .text(classNodeLabel)\n .on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(selectedRdfUri), \"_blank\");\n });\n });\n\n\n var rdfClassName = g.select(\".class-node + text\"),\n classNode = d3.select(\".class-node\"),\n loopLinkBackgroundSel = d3.selectAll(\".loop-link-background\"),\n loopLinkPropertyName = d3.selectAll(\".loop-link-property-name\");\n\n propertyNames = d3.selectAll(\".property-name\");\n\n if (!angular.isUndefined(loopLink)) {\n var loopLinkBackgroundProps = [];\n\n loopLinkBackgroundSel.each(function (d, i) {\n var sel = d3.select(this);\n loopLinkBackgroundProps.push({\n idx: i,\n width: d.calculatedWidth,\n height: d.calculatedHeight\n });\n });\n }\n\n function tick(e) {\n var k = 8 * e.alpha;\n\n function pushEdgesToLeftAndRight(d) {\n if (d.propertyType === \"objectLeft\") {\n d.source.x -= 8 * k;\n d.source.y -= k / 9;\n } else {\n d.target.x += 8 * k;\n d.target.y -= k / 9;\n }\n }\n\n link\n .filter(function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri;\n })\n .attr(\"x1\", function (d) {\n return d.source.x;\n })\n .attr(\"y1\", function (d) {\n return d.source.y;\n })\n .attr(\"x2\", function (d) {\n return d.targetX;\n })\n .attr(\"y2\", function (d) {\n return d.targetY;\n })\n .each(function (d) {\n pushEdgesToLeftAndRight(d);\n\n // shortens the line to compensate for the circle at the target\n var angle = Math.atan2(d.target.y - d.source.y, d.target.x - d.source.x);\n d.targetX = d.target.x - Math.cos(angle) * d.targetRadius;\n d.targetY = d.target.y - Math.sin(angle) * d.targetRadius;\n });\n\n function positionLoopLink(d) {\n var loopTranslateX = d.x + mainClassSize * 0.96,\n loopTranslateY = d.y - mainClassSize / 5.7 - 5;\n loopLink.attr(\"transform\", \"rotate(270, \" + d.x + \",\" + d.y + \") translate(\" + loopTranslateX + \",\" + loopTranslateY + \")\");\n }\n\n function positionLoopLinkLabels(d) {\n function reposition(sel, i) {\n var foundLoopLinkBackgroundProps =\n $.grep(loopLinkBackgroundProps, function (obj) {\n return obj.idx == i;\n });\n var currentBackgroundHeight = 0;\n if (i > 0) {\n currentBackgroundHeight = parseFloat(2 * i * (foundLoopLinkBackgroundProps[0].height / 1.4));\n }\n\n var loopLinkLabelX = d.x,\n loopLinkLabelY = d.y - mainClassSize * 2.1 - currentBackgroundHeight;\n\n sel\n .attr({\n x: loopLinkLabelX,\n y: loopLinkLabelY\n })\n .moveToFront();\n }\n\n /**\n * Create a \"View more\" label to depict that the are more reflexive link labels\n * left that could be seen in the side panel when clicking this label.\n *\n * @param labelSel\n * d3 selection of the text label\n * @param backgroundSel\n * d3 selection of the rectangle element background\n * @param predicatesLeft\n * number of predicates left that are collapsed\n */\n function createViewMorePredicatesLabel(labelSel, backgroundSel, predicatesLeft) {\n labelSel\n .classed(\"view-more-preds-label\", true)\n .text(predicatesLeft + \" predicates more ...\");\n if (this.nextSibling !== null) {\n backgroundSel\n .classed(\"view-more-preds-rect\", true);\n }\n }\n\n loopLinkPropertyName.each(function (dd, i) {\n var sel = d3.select(this);\n\n var predicatesLeft = loopLinkPropertyName.size() - NON_COLLAPSED_REFLEXIVE_LINK_LIMIT;\n if (predicatesLeft < 0) {\n reposition(sel, i);\n } else {\n if (i == 0 && !scope.collapseEdges && predicatesLeft > 1) {\n createViewMorePredicatesLabel(sel, d3.select(this.nextSibling), predicatesLeft);\n reposition(sel, i);\n }\n\n if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n reposition(sel, i);\n } else {\n sel.remove();\n }\n }\n });\n // loopLinkPropertyName.each(function (dd, i) {\n // var sel = d3.select(this);\n // if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n // reposition(sel, i);\n // } else if (i == NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n // createViewMorePredicatesLabel(sel, d3.select(this.nextSibling));\n // reposition(sel, i);\n // } else {\n // sel.remove();\n // }\n // });\n }\n\n function positionLoopLinkBackgrounds(d) {\n var loopLinkBackgroundY = d.x + mainClassSize * 2,\n loopLinkBackgroundX = d.y - mainClassSize / 1.9;\n\n function reposition(sel, i) {\n var foundLoopLinkBackgroundProps =\n $.grep(loopLinkBackgroundProps, function (obj) {\n return obj.idx == i;\n });\n if (i > 0) {\n loopLinkBackgroundY += parseFloat(i * (foundLoopLinkBackgroundProps[0].height / (i / 1.4)));\n }\n\n sel\n .attr({\n transform: \"rotate(270, \" + d.x + \",\" + d.y + \") translate(\" + loopLinkBackgroundY + \",\" + loopLinkBackgroundX + \")\",\n width: foundLoopLinkBackgroundProps[0].height,\n height: foundLoopLinkBackgroundProps[0].width\n });\n }\n\n /**\n * Adjust new width of \"View more\" label background and add all reflexive link metadata the this\n * label in order to render them in the side panel.\n *\n * @param allLoopLinkEdges\n * all reflexive links to the current class\n */\n function adjustViewMorePredicatesLabel(allLoopLinkEdges) {\n var viewMoreTextWidth;\n d3.select(\".view-more-preds-label\")\n // make label bold to resemble a collapsed label\n .style(\"font-weight\", \"bold\")\n .each(function (d) {\n // attach all reflexive links to the \"view more\" collapsed predicate\n // because in non collapsed mode the backend does not provide them\n d.target.allEdges = allLoopLinkEdges;\n\n // calculate text width in pixels in order to adjust background width accordingly\n viewMoreTextWidth = this.getComputedTextLength();\n })\n .on(\"click\", onCollapsedPropertyNameClick);\n\n d3.select(\".view-more-preds-rect\")\n // we modify height property instead of width because they are reversed\n // when we repositioned loop link labels\n .attr(\"height\", viewMoreTextWidth + 2 * textPadding);\n }\n\n var allLoopLinkEdges = [];\n loopLinkBackgroundSel.each(function (dd, i) {\n allLoopLinkEdges.push(dd);\n if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n reposition(d3.select(this), i);\n } else {\n d3.select(this).remove();\n }\n });\n\n adjustViewMorePredicatesLabel(allLoopLinkEdges);\n }\n\n\n function centerClassNode(d) {\n if (!(window.ActiveXObject) && \"ActiveXObject\" in window) {\n Math.log10 = function (x) {\n return Math.log(x) / Math.LN10;\n };\n }\n var absDiff = classNode.attr(\"cx\") - width / 2,\n logOffset = Math.log10(Math.abs(absDiff)) * 0.5;\n d.x += absDiff > 0 ? -logOffset : logOffset;\n return d.x;\n }\n\n node\n .each(function (d) {\n if (d.classPosition === \"main\" && !angular.isUndefined(loopLink)) {\n positionLoopLink(d);\n positionLoopLinkLabels(d);\n positionLoopLinkBackgrounds(d);\n }\n\n if (d.objectPropClassUri !== selectedRdfUri) {\n d3.select(this)\n .attr(\"cx\", function (d) {\n // pushes the main class circle to the centre\n if (d.classPosition === \"main\") {\n return centerClassNode(d);\n }\n return d.x;\n })\n .attr(\"cy\", function (d) {\n return d.y;\n });\n }\n });\n\n\n rdfClassName\n .attr(\"x\", function (d) {\n return d.x;\n })\n .attr(\"y\", function (d) {\n return d.y;\n })\n .moveToFront();\n\n\n linkRect\n .filter(function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri;\n })\n .attr(\"x\", function (d) {\n if (d.target.x > d.source.x) {\n return (d.source.x + (d.target.x - d.source.x) / 2);\n } else {\n return (d.target.x + (d.source.x - d.target.x) / 2);\n }\n })\n .attr(\"y\", function (d) {\n if (d.target.y > d.source.y) {\n return (d.source.y + (d.target.y - d.source.y) / 2);\n } else {\n return (d.target.y + (d.source.y - d.target.y) / 2);\n }\n })\n .moveToFront();\n\n\n propertyNames\n .attr(\"x\", function (d) {\n if (d.target.x > d.source.x) {\n return (d.source.x + (d.target.x - d.source.x) / 2);\n } else {\n return (d.target.x + (d.source.x - d.target.x) / 2);\n }\n })\n .attr(\"y\", function (d) {\n if (d.target.y > d.source.y) {\n return (d.source.y + (d.target.y - d.source.y) / 2);\n } else {\n return (d.target.y + (d.source.y - d.target.y) / 2);\n }\n })\n .moveToFront();\n\n\n objectPropClassName\n .attr(\"x\", function (d) {\n if (d.classPosition === \"right\") {\n return d.x + otherClassSize * 1.2;\n } else {\n return d.x - otherClassSize * 1.2;\n }\n })\n .attr(\"y\", function (d) {\n return d.y;\n })\n .moveToFront();\n }\n\n\n force\n .on(\"tick\", tick)\n .linkDistance(width / 3.5)\n .start();\n\n }\n });\n\n function dragstart(d) {\n d3.select(this)\n .classed(\"selected\", d.selected = true);\n }\n }\n}\n"],"sourceRoot":""}
|