graphdb-workbench 3.5.1-TR3 → 3.5.1-TR4
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/{31415.aba4cdda066690a2769d.bundle.js → 31415.8d180c0aaafea01d84c5.bundle.js} +2 -2
- package/dist/31415.8d180c0aaafea01d84c5.bundle.js.map +1 -0
- package/dist/3395.0a62c93740e681cddba2.bundle.js +2 -0
- package/dist/3395.0a62c93740e681cddba2.bundle.js.map +1 -0
- package/dist/{64709.d6d3d413c90077b5d0cc.bundle.js → 64709.9433b8aa61531902cee9.bundle.js} +2 -2
- package/dist/{64709.d6d3d413c90077b5d0cc.bundle.js.map → 64709.9433b8aa61531902cee9.bundle.js.map} +1 -1
- package/dist/{65677.0e8ab27737300e991c60.bundle.js → 65677.fb750199607b82ff2f52.bundle.js} +2 -2
- package/dist/{65677.0e8ab27737300e991c60.bundle.js.map → 65677.fb750199607b82ff2f52.bundle.js.map} +1 -1
- package/dist/73334.b9c87ecb49eff4f5195d.bundle.js +2 -0
- package/dist/{73334.1b0e8bb637fbd1ce73ef.bundle.js.map → 73334.b9c87ecb49eff4f5195d.bundle.js.map} +1 -1
- package/dist/{80933.bd439bb6f5fad66637ac.bundle.js → 80933.1705b752b9fb200aaf8a.bundle.js} +2 -2
- package/dist/{80933.bd439bb6f5fad66637ac.bundle.js.map → 80933.1705b752b9fb200aaf8a.bundle.js.map} +1 -1
- package/dist/{82917.c97f7cec0372ff2f6fdd.bundle.js → 82917.5bcc9ce4983bd3504d90.bundle.js} +2 -2
- package/dist/{82917.c97f7cec0372ff2f6fdd.bundle.js.map → 82917.5bcc9ce4983bd3504d90.bundle.js.map} +1 -1
- package/dist/85698.b186c57a2d0edee24110.bundle.js +2 -0
- package/dist/85698.b186c57a2d0edee24110.bundle.js.map +1 -0
- package/dist/{86099.ab3779d6538a6648b2b7.bundle.js → 86099.78a5aa1d9ca2b9a1e45c.bundle.js} +2 -2
- package/dist/{86099.ab3779d6538a6648b2b7.bundle.js.map → 86099.78a5aa1d9ca2b9a1e45c.bundle.js.map} +1 -1
- package/dist/8981.cb785cbc13b19f924ebc.bundle.js +2 -0
- package/dist/8981.cb785cbc13b19f924ebc.bundle.js.map +1 -0
- package/dist/assets/i18n/language-config.json +1 -1
- package/dist/css/cluster-configuration/multi-region.css +1 -1
- package/dist/css/clustermanagement.css +1 -1
- package/dist/css/lib/ontotext-yasgui-web-component.css +1 -1
- package/dist/index.html +9 -9
- package/dist/js/angular/clustermanagement/templates/cluster-configuration/cluster-configuration.html +1 -1
- package/dist/js/angular/clustermanagement/templates/cluster-configuration/multi-region.html +6 -6
- package/dist/js/angular/clustermanagement/templates/cluster-nodes-configuration.html +1 -1
- package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +1 -1
- package/dist/js/angular/core/directives/dynamic-form/templates/dynamic-form.html +1 -1
- package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +1 -1
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html +1 -1
- package/dist/js/angular/core/directives/yasgui-component/templates/yasgui-component.html +2 -2
- package/dist/js/angular/core/templates/cookie-policy/cookie-consent.html +1 -1
- package/dist/js/angular/core/templates/cookie-policy/cookie-policy.html +1 -1
- package/dist/js/angular/core/templates/editable-content/editable-content.html +1 -1
- package/dist/js/angular/core/templates/markdown-content/markdown-content.html +1 -1
- package/dist/js/angular/core/templates/search-resource-input.html +1 -1
- package/dist/js/angular/graphql/templates/create-graphql-endpoint.html +2 -2
- package/dist/js/angular/graphql/templates/graphql-endpoint-management.html +1 -1
- package/dist/js/angular/graphql/templates/graphql-playground.html +2 -2
- package/dist/js/angular/graphql/templates/modal/endpoint-configuration-modal.html +1 -1
- package/dist/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html +1 -1
- package/dist/js/angular/graphql/templates/modal/import-endpoint-definition-modal.html +1 -1
- package/dist/js/angular/security/templates/user.html +2 -2
- package/dist/js/angular/security/templates/users.html +1 -1
- package/dist/js/angular/ttyg/templates/agent-list.html +1 -1
- package/dist/js/angular/ttyg/templates/agent-select-menu.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-item-detail.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-list.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-panel.html +1 -1
- package/dist/js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html +1 -1
- package/dist/js/angular/ttyg/templates/modal/agent-settings-modal.html +3 -3
- package/dist/js/angular/ttyg/templates/modal/external-integration-configuration-modal.html +1 -1
- package/dist/js/angular/ttyg/templates/no-agents-view.html +1 -1
- package/dist/js/angular/ttyg/templates/ttyg.html +1 -1
- package/dist/{legacyWorkbench.cdb2fb6bc573f9a9b49d.js → legacyWorkbench.8e74ed3afa48571d1e83.js} +3 -3
- package/dist/{legacyWorkbench.cdb2fb6bc573f9a9b49d.js.map → legacyWorkbench.8e74ed3afa48571d1e83.js.map} +1 -1
- package/dist/license-checker.json +19 -32
- package/dist/{main.8dd8af071ff43504a729.js → main.3665e695a5c0d2e9b4c0.js} +3 -3
- package/dist/{main.8dd8af071ff43504a729.js.map → main.3665e695a5c0d2e9b4c0.js.map} +1 -1
- package/dist/pages/aclmanagement.html +1 -1
- package/dist/pages/autocomplete.html +1 -1
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/cluster-management/clusterInfo.html +2 -2
- package/dist/pages/create-index.html +1 -1
- 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 +8 -8
- package/dist/pages/graphs-visualizations.html +7 -7
- package/dist/pages/guides.html +1 -1
- package/dist/pages/home.html +1 -1
- package/dist/pages/import.html +2 -2
- package/dist/pages/jdbc-create.html +1 -1
- package/dist/pages/jdbc.html +1 -1
- package/dist/pages/monitor/backup-and-restore.html +1 -1
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +1 -1
- 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 +1 -1
- package/dist/pages/repository.html +1 -1
- package/dist/pages/similarity-indexes.html +1 -1
- package/dist/pages/sparql-editor.html +1 -1
- package/dist/pages/sparql-template-create.html +1 -1
- package/dist/pages/sparql-templates.html +1 -1
- package/dist/pages/ux-test1.html +2 -2
- package/dist/pages/webapi.html +2 -2
- package/dist/res/swagger5/index.html +11 -11
- package/dist/workbench/license-checker.json +17 -17
- package/dist/workbench/workbench/{166.2aacf63cc15a20ef.js → 166.2447618295f9f57e.js} +1 -1
- package/dist/workbench/workbench/workbenchApp.js +1 -1
- package/package.json +1 -1
- package/dist/31415.aba4cdda066690a2769d.bundle.js.map +0 -1
- package/dist/3395.ded80bae10361d1d4573.bundle.js +0 -2
- package/dist/3395.ded80bae10361d1d4573.bundle.js.map +0 -1
- package/dist/73334.1b0e8bb637fbd1ce73ef.bundle.js +0 -2
- package/dist/85698.ee9962969a310107ccf8.bundle.js +0 -2
- package/dist/85698.ee9962969a310107ccf8.bundle.js.map +0 -1
- package/dist/8981.ebd2159613630a2daf7e.bundle.js +0 -2
- package/dist/8981.ebd2159613630a2daf7e.bundle.js.map +0 -1
- /package/dist/{legacyWorkbench.cdb2fb6bc573f9a9b49d.js.LICENSE.txt → legacyWorkbench.8e74ed3afa48571d1e83.js.LICENSE.txt} +0 -0
- /package/dist/{main.8dd8af071ff43504a729.js.LICENSE.txt → main.3665e695a5c0d2e9b4c0.js.LICENSE.txt} +0 -0
package/dist/{65677.0e8ab27737300e991c60.bundle.js.map → 65677.fb750199607b82ff2f52.bundle.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"65677.0e8ab27737300e991c60.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/graphexplore/directives/domain-range-graph.directive.js"],"sourcesContent":["import SVG from 'lib/common/svg-export';\nimport D3 from 'lib/common/d3-utils';\nimport 'angular/utils/local-storage-adapter';\nimport * as d3 from 'd3';\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(--gw-primary-base)')\n .constant('ONTO_GREEN', 'var(--gw-tertiary-base)')\n .constant('ONTO_BLUE', 'var(--gw-secondary-base)')\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 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 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 force = d3.forceSimulation();\n\n var drag = d3.drag()\n .subject(function (d) {\n return d;\n })\n .on(\"start\", dragStart)\n .on(\"end\", dragEnd)\n .on(\"drag\", dragged);\n\n var defs = svg.append(\"defs\");\n generateMarkers(defs);\n\n function generateMarkers(defElement) {\n defs.append(\"marker\")\n .attrs({\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 .attrs({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attrs({\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 .attrs({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attrs({\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 .attrs({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\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=3.5.1-TR3\");\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(\"#domain-range svg\");\n\n // set the binary image and a name for the downloadable file on the export button\n d3.select(this).attrs({\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 generateLegend();\n\n function generateLegend() {\n // start of code for legend\n\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 legendCellGroup\n .append(\"line\")\n .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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\n var selectedRdfUri = $location.search().uri;\n var classNodeLabel = $location.search().name;\n const collapsed = $location.search().collapsed;\n\n getDomainRangeData(selectedRdfUri, collapsed);\n\n function getDomainRangeData(selectedRdfUri, collapsed) {\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\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 = _.cloneDeep(scope.domainRangeGraphData);\n\n const nodes = graph.nodes;\n const links = graph.links;\n\n force.nodes(nodes)\n .force('x', d3.forceX(width / 2))\n .force('y', d3.forceY(height / 2))\n .force(\"charge\", d3.forceManyBody().strength(-800))\n .force(\"link\", d3.forceLink(links).distance(width / 3.5))\n\n var linkGroup = svg.selectAll(\".link\")\n .data(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 .attrs({\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 .attrs({\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(event, 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 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 (event, 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 (event) {\n event.stopPropagation();\n });\n\n\n var nodeGroup = svg.selectAll(\".node\")\n .data(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.attrs({\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.attrs({\n class: \"datatype-node\",\n r: datatypeSize\n });\n } else {\n sel.attrs({\n class: \"object-prop-node\",\n r: otherClassSize\n });\n }\n })\n .call(drag);\n\n\n function reloadDomainRangeGraphView(event, 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 (event, d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.objectPropClassUri), \"_blank\");\n });\n\n var objectPropClassName = nodeGroup.select(\"text\");\n\n svg.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 () {\n $window.open(\"resource?uri=\" + encodeURIComponent(selectedRdfUri), \"_blank\");\n });\n });\n\n\n var rdfClassName = svg.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 * force.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 .attrs({\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 .attrs({\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 force.on(\"tick\", tick)\n\n }\n });\n\n let isDragged = false;\n\n function dragStart(event, d) {\n force.stop();\n d.fx = event.x;\n d.fy = event.y;\n d3.select(this).classed(\"selected\", true);\n\n }\n\n // Update the subject (dragged node) position during drag.\n function dragged(event, d) {\n isDragged = true;\n\n force.alphaTarget(0).restart();\n d.fx = event.x;\n d.fy = event.y;\n }\n\n // Restore the target alpha so the simulation cools after dragging ends.\n // Unfix the subject position now that it’s no longer being dragged.\n function dragEnd(event, d) {\n d.fx = null;\n d.fy = null;\n d3.select(this).classed(\"selected\", false);\n if (isDragged) {\n force.alpha(0.2).restart();\n isDragged = false;\n } else {\n force.restart();\n }\n }\n\n }\n}\n"],"names":["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","width","mainClassSize","otherClassSize","datatypeSize","labelFontSize","basicArrowStrokeWidth","svg","d3","append","attr","on","force","drag","subject","d","event","stop","fx","x","fy","y","this","classed","isDragged","alpha","restart","alphaTarget","defs","attrs","id","viewBox","refX","refY","markerUnits","markerWidth","markerHeight","orient","fill","class","cssRules","SVG","Export","getCSSRules","$","imgSrc","generateBase64ImageSource","href","download","getActiveRepository","legendBackgroundWidth","legendBackgroundHeight","legendCellGroup","height","style","sourceX","targetX","legendTextX","legendLabelFontSize","classNodeTextY","cx","cy","r","text","classNodeY","objectNodeTextY","datatypeNodeY","datatypeNodeTextY","basicPropertyArrowY","x1","y1","x2","y2","absUrl","implicitPropArrowY","collapsedPropArrowY","generateLegend","selectedRdfUri","search","uri","classNodeLabel","name","collapsed","getDomainRangeData","success","response","status","headers","domainRangeGraphData","error","window","set","DOMAIN_RANGE_WENT_BACK","onpopstate","state","$broadcast","$watch","angular","isUndefined","DOMAIN_RANGE_COLLAPSE_EDGES","get","switchEdgeMode","remove","graph","_","cloneDeep","nodes","links","strength","distance","linkGroup","selectAll","data","enter","styleArrowsInCollapsedMode","sel","loopLink","loopLinkEdgeCount","each","objectPropNodeClassUri","propertyType","targetRadius","targetNodeEdgeCount","implicit","loopLinkSize","previousPropertyNameSelection","disableCollapsedPredicateLabelHightlighting","isEmptyObject","background","onCollapsedPropertyNameClick","previousSibling","stopPropagation","ready","bind","propertyNames","test","open","encodeURIComponent","linkRect","calculatedWidth","getBBox","textPadding","calculatedHeight","translateX","nodeGroup","node","filter","objectPropClassUri","classPosition","objectPropClassName","call","reloadDomainRangeGraphView","$apply","select","parentNode","D3","Text","calcFontSize","rdfClassName","classNode","loopLinkBackgroundSel","loopLinkPropertyName","loopLinkBackgroundProps","i","push","idx","tick","e","k","positionLoopLinkBackgrounds","loopLinkBackgroundY","loopLinkBackgroundX","allLoopLinkEdges","dd","foundLoopLinkBackgroundProps","grep","obj","parseFloat","transform","reposition","viewMoreTextWidth","target","allEdges","getComputedTextLength","adjustViewMorePredicatesLabel","source","targetY","pushEdgesToLeftAndRight","angle","Math","atan2","cos","sin","loopTranslateX","loopTranslateY","positionLoopLink","currentBackgroundHeight","loopLinkLabelX","loopLinkLabelY","moveToFront","predicatesLeft","size","labelSel","backgroundSel","nextSibling","createViewMorePredicatesLabel","positionLoopLinkLabels","ActiveXObject","log10","log","LN10","absDiff","logOffset","abs","centerClassNode","renderDomainRangeGraph","$on","cancel","module","constant","directive","$inject"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"65677.fb750199607b82ff2f52.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/graphexplore/directives/domain-range-graph.directive.js"],"sourcesContent":["import SVG from 'lib/common/svg-export';\nimport D3 from 'lib/common/d3-utils';\nimport 'angular/utils/local-storage-adapter';\nimport * as d3 from 'd3';\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(--gw-primary-base)')\n .constant('ONTO_GREEN', 'var(--gw-tertiary-base)')\n .constant('ONTO_BLUE', 'var(--gw-secondary-base)')\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 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 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 force = d3.forceSimulation();\n\n var drag = d3.drag()\n .subject(function (d) {\n return d;\n })\n .on(\"start\", dragStart)\n .on(\"end\", dragEnd)\n .on(\"drag\", dragged);\n\n var defs = svg.append(\"defs\");\n generateMarkers(defs);\n\n function generateMarkers(defElement) {\n defs.append(\"marker\")\n .attrs({\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 .attrs({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attrs({\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 .attrs({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attrs({\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 .attrs({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\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=3.5.1-TR4\");\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(\"#domain-range svg\");\n\n // set the binary image and a name for the downloadable file on the export button\n d3.select(this).attrs({\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 generateLegend();\n\n function generateLegend() {\n // start of code for legend\n\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 legendCellGroup\n .append(\"line\")\n .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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 .attrs({\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\n var selectedRdfUri = $location.search().uri;\n var classNodeLabel = $location.search().name;\n const collapsed = $location.search().collapsed;\n\n getDomainRangeData(selectedRdfUri, collapsed);\n\n function getDomainRangeData(selectedRdfUri, collapsed) {\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\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 = _.cloneDeep(scope.domainRangeGraphData);\n\n const nodes = graph.nodes;\n const links = graph.links;\n\n force.nodes(nodes)\n .force('x', d3.forceX(width / 2))\n .force('y', d3.forceY(height / 2))\n .force(\"charge\", d3.forceManyBody().strength(-800))\n .force(\"link\", d3.forceLink(links).distance(width / 3.5))\n\n var linkGroup = svg.selectAll(\".link\")\n .data(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 .attrs({\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 .attrs({\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(event, 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 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 (event, 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 (event) {\n event.stopPropagation();\n });\n\n\n var nodeGroup = svg.selectAll(\".node\")\n .data(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.attrs({\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.attrs({\n class: \"datatype-node\",\n r: datatypeSize\n });\n } else {\n sel.attrs({\n class: \"object-prop-node\",\n r: otherClassSize\n });\n }\n })\n .call(drag);\n\n\n function reloadDomainRangeGraphView(event, 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 (event, d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.objectPropClassUri), \"_blank\");\n });\n\n var objectPropClassName = nodeGroup.select(\"text\");\n\n svg.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 () {\n $window.open(\"resource?uri=\" + encodeURIComponent(selectedRdfUri), \"_blank\");\n });\n });\n\n\n var rdfClassName = svg.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 * force.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 .attrs({\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 .attrs({\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 force.on(\"tick\", tick)\n\n }\n });\n\n let isDragged = false;\n\n function dragStart(event, d) {\n force.stop();\n d.fx = event.x;\n d.fy = event.y;\n d3.select(this).classed(\"selected\", true);\n\n }\n\n // Update the subject (dragged node) position during drag.\n function dragged(event, d) {\n isDragged = true;\n\n force.alphaTarget(0).restart();\n d.fx = event.x;\n d.fy = event.y;\n }\n\n // Restore the target alpha so the simulation cools after dragging ends.\n // Unfix the subject position now that it’s no longer being dragged.\n function dragEnd(event, d) {\n d.fx = null;\n d.fy = null;\n d3.select(this).classed(\"selected\", false);\n if (isDragged) {\n force.alpha(0.2).restart();\n isDragged = false;\n } else {\n force.restart();\n }\n }\n\n }\n}\n"],"names":["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","width","mainClassSize","otherClassSize","datatypeSize","labelFontSize","basicArrowStrokeWidth","svg","d3","append","attr","on","force","drag","subject","d","event","stop","fx","x","fy","y","this","classed","isDragged","alpha","restart","alphaTarget","defs","attrs","id","viewBox","refX","refY","markerUnits","markerWidth","markerHeight","orient","fill","class","cssRules","SVG","Export","getCSSRules","$","imgSrc","generateBase64ImageSource","href","download","getActiveRepository","legendBackgroundWidth","legendBackgroundHeight","legendCellGroup","height","style","sourceX","targetX","legendTextX","legendLabelFontSize","classNodeTextY","cx","cy","r","text","classNodeY","objectNodeTextY","datatypeNodeY","datatypeNodeTextY","basicPropertyArrowY","x1","y1","x2","y2","absUrl","implicitPropArrowY","collapsedPropArrowY","generateLegend","selectedRdfUri","search","uri","classNodeLabel","name","collapsed","getDomainRangeData","success","response","status","headers","domainRangeGraphData","error","window","set","DOMAIN_RANGE_WENT_BACK","onpopstate","state","$broadcast","$watch","angular","isUndefined","DOMAIN_RANGE_COLLAPSE_EDGES","get","switchEdgeMode","remove","graph","_","cloneDeep","nodes","links","strength","distance","linkGroup","selectAll","data","enter","styleArrowsInCollapsedMode","sel","loopLink","loopLinkEdgeCount","each","objectPropNodeClassUri","propertyType","targetRadius","targetNodeEdgeCount","implicit","loopLinkSize","previousPropertyNameSelection","disableCollapsedPredicateLabelHightlighting","isEmptyObject","background","onCollapsedPropertyNameClick","previousSibling","stopPropagation","ready","bind","propertyNames","test","open","encodeURIComponent","linkRect","calculatedWidth","getBBox","textPadding","calculatedHeight","translateX","nodeGroup","node","filter","objectPropClassUri","classPosition","objectPropClassName","call","reloadDomainRangeGraphView","$apply","select","parentNode","D3","Text","calcFontSize","rdfClassName","classNode","loopLinkBackgroundSel","loopLinkPropertyName","loopLinkBackgroundProps","i","push","idx","tick","e","k","positionLoopLinkBackgrounds","loopLinkBackgroundY","loopLinkBackgroundX","allLoopLinkEdges","dd","foundLoopLinkBackgroundProps","grep","obj","parseFloat","transform","reposition","viewMoreTextWidth","target","allEdges","getComputedTextLength","adjustViewMorePredicatesLabel","source","targetY","pushEdgesToLeftAndRight","angle","Math","atan2","cos","sin","loopTranslateX","loopTranslateY","positionLoopLink","currentBackgroundHeight","loopLinkLabelX","loopLinkLabelY","moveToFront","predicatesLeft","size","labelSel","backgroundSel","nextSibling","createViewMorePredicatesLabel","positionLoopLinkLabels","ActiveXObject","log10","log","LN10","absDiff","logOffset","abs","centerClassNode","renderDomainRangeGraph","$on","cancel","module","constant","directive","$inject"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_id__=73334;export const __webpack_esm_ids__=[73334,85256];export const __webpack_esm_modules__={73334(n,e,t){t(10500),t(85256);const o=t(71315).I.logger,r="MASKED_SENSITIVE_FIELD";function i(n){const e=[];return Object.keys(n).forEach(function(t){e.push(encodeURIComponent(t)+"="+encodeURIComponent(n[t]))}),e.join("&")}function a(n){return _.map(n,function(n,e){return{key:e,value:n}})}function c(n,e){return _.reduce(n,function(n,t){if(""===t.key&&""===t.value);else{if(""===t.key)throw new Error(e.instant("externalsync.empty.value.key.error",{value:t.value}));if(n.hasOwnProperty(t.key))throw new Error(e.instant("externalsync.duplicate.key.error",{key:t.key}));n[t.key]=t.value}return n},{})}function s(n,e){for(let t=0;t<e.length;t++){const o=e[t];if("StringArray"===o.__type)n[o.__name]||(n[o.__name]=[""]);else if("OptionArray"===o.__type)if(n[o.__name])for(let e=0;e<o.__childOptions.length;e++){const t=o.__childOptions[e];if("Boolean"===t.__type)for(let e=0;e<n[o.__name].length;e++){const r=n[o.__name][e];!r.hasOwnProperty([t.__name])&&angular.isDefined(t.__defaultValue)&&(r[t.__name]=t.__defaultValue)}}else{n[o.__name]=[];const e={};for(let n=0;n<o.__childOptions.length;n++){const t=o.__childOptions[n];"StringArray"===t.__type?e[t.__name]=[""]:e[t.__name]=angular.isUndefined(t.__defaultValue)?"":t.__defaultValue}n[o.__name].push(e)}else"Map"===o.__type?n[o.__name]?n[o.__name]=a(n[o.__name]):n[o.__name]=[]:"JsonString"===o.__type?!n[o.__name]||n[o.__name]instanceof String||"string"==typeof n[o.__name]||(n[o.__name]=angular.toJson(n[o.__name],2)):angular.isUndefined(n[o.__name])&&(n[o.__name]=angular.isUndefined(o.__defaultValue)?"":o.__defaultValue)}return n}function l(n,e,t){return n.post("repositories/"+e,i({query:t}),{headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/sparql-results+json","X-GraphDB-Local-Consistency":"updating"}})}function u(n){return n.substring(0,n.length-1)+"/instance#"}function p(n,e,t,o,i){const a=function n(e,t){const o={};return _.each(t,function(t){angular.isDefined(e[t.__name])&&("OptionArray"===t.__type?(o[t.__name]=[],_.each(e[t.__name],function(e){o[t.__name].push(n(e,t.__childOptions))})):o[t.__name]=_.cloneDeep(e[t.__name]))}),o}(t,o);for(let n=0;n<o.length;n++)try{"Map"===o[n].__type?a[o[n].__name]=c(a[o[n].__name],$translate):"JsonString"===o[n].__type?a[o[n].__name]=angular.fromJson(a[o[n].__name]):!0===o[n].__sensitive&&a[o[n].__name]&&(a[o[n].__name]=r)}catch(e){return i(o[n].__label,e.message),null}f(a);let s="";return s+="PREFIX :<"+e+">\n",s+="PREFIX inst:<"+u(e)+">\n",s+="INSERT DATA {\n",s+="\tinst:"+n+" :createConnector '''\n",s+=angular.toJson(a,2),s=s.replaceAll(`"${r}"`,r),s+="\n''' .\n}\n",s=s.replace(/\\/g,"\\\\\\"),s}function f(n){return Array.isArray(n)&&(n=_.filter(n,function(n){return null!==n&&(!n.trim||""!==n.trim())})),Object.keys(n).forEach(function(e){""!==n[e]&&null!==n[e]&&void 0!==n[e]||!1===n[e]?"object"==typeof n[e]&&(n[e]=f(n[e])):delete n[e]}),n}function d(n,e,t,r,a,c,f,d,g,m){function y(e){n.beingBuiltConnector={percentDone:0,status:{processedEntities:0,estimatedEntities:0,indexedEntities:0,entitiesPerSecond:0},actionName:e?m.instant("externalsync.repairing"):m.instant("externalsync.creating"),waitOnRepairStartOnce:!!e,eta:"-",inline:!1,iri:null}}function C(e,t,o){return y(o),$.extend(n.beingBuiltConnector,{iri:u(e)+t,name:t,inline:!1,doneCallback:function(){n.beingBuiltConnector.modalInstance.dismiss("cancel")}}),n.beingBuiltConnector.modalInstance=r.open({templateUrl:"pages/connectorProgress.html",controller:"CreateProgressCtrl",size:"lg",backdrop:"static",scope:n}),n.beingBuiltConnector.modalInstance}function h(e,o,r){const c=C(e.value,o.name,!1);d.addStatements(t.getActiveRepository(),i({update:o.query})).then(function(){g.getConnectors().then(function(){g.hasConnector(encodeURIComponent(e.value)).then(function(t){n.existing[e.key]=t.data})}),a.success(m.instant("created.connector",{name:o.name}))},function(n){a.error(getError(n)),r()}).finally(function(){c.dismiss("cancel")})}n.loader=!1,n.controllers=[],n.existing={},n.definitions={},n.getLoaderMessage=function(){const e=(Date.now()-n.loaderStartTime)/1e3,t=n.getHumanReadableSeconds(e);let o="";return o=n.progressMessage?n.progressMessage+"... "+t:m.instant("common.running.operation",{timeHuman:t}),n.extraMessage&&e>10&&(o+="\n"+n.extraMessage),o},n.setLoader=function(e,t,o){e?(n.loader=!0,n.loaderStartTime=Date.now(),n.progressMessage=t,n.extraMessage=o):(n.loader=!1,n.progressMessage="",n.extraMessage="")},n.initConnector=function(e){return g.initConnector(encodeURIComponent(e.value)).then(function(t){return n.definitions[e.key]=t.data,g.hasConnector(encodeURIComponent(e.value)).then(function(t){n.existing[e.key]=t.data})})},n.getConnectors=function(){n.isLicenseValid()&&n.canWriteActiveRepo()&&(n.setLoader(!0,m.instant("externalsync.fetching.connectors"),m.instant("common.extra.message")),g.getConnectors().then(function(r){n.connectors=Object.keys(r.data).map(function(n){return{key:n,value:r.data[n]}}),f.all(_.map(n.connectors,function(e){return n.initConnector(e)})).finally(function(){y();const r=function(n){const e=_.map(n,function(n){return"<"+n.value+"connectorStatus>"}).join("|");return e?"SELECT ?connector ?status { ?connector "+e+" ?status }":null}(n.connectors);r?function(n){return l(e,t.getActiveRepository(),n)}(r).then(function(e){const t=function(n){if(n.bindings)for(let e=0;e<n.bindings.length;e++)try{const t=JSON.parse(n.bindings[e].status.value);if("BUILDING"===t.status)return{connector:n.bindings[e].connector.value,status:t}}catch(n){o.error(n)}return{}}(e.data.results);if(t.connector){const e=t.connector.split(/#/);e[0]=e[0].replace(/\/instance$/,"#"),r=e[0],i=e[1],y(),$.extend(n.beingBuiltConnector,{iri:u(r)+i,name:i,inline:!0,doneCallback:function(){n.beingBuiltConnector.inline=!1}})}var r,i}).finally(function(){n.setLoader(!1)}):n.setLoader(!1)})}).catch(function(e){n.setLoader(!1),a.error(getError(e),m.instant("externalsync.could.not.get.connectors.error"))}),n.existing={})},n.getOptions=function(e){return n.definitions[e.key]},n.isEmpty=function(n){return angular.isObject(n)&&0===Object.keys(n).length},n.toPrettyJson=function(n){return angular.toJson(n,2)},n.$watch(function(){return t.getActiveRepository()},n.getConnectors),n.$watch(function(){return t.getActiveLocation()},n.getConnectors),n.copyConnector=function(e,t){let o;angular.isUndefined(t)||(o=_.cloneDeep(t),o.name=o.name+"-copy"),r.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return e},values:function(){return angular.isUndefined(o)?{name:"",values:{}}:o},options:function(){return n.getOptions(e)}}}).result.then(function(t){h(e,t,function(){t.skipConversion=!0,n.newConnector(e,t)})})},n.newConnector=function(e,t){r.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return e},values:function(){return angular.isUndefined(t)?{name:"",values:{}}:t},options:function(){return n.getOptions(e)}}}).result.then(function(t){h(e,t,function(){t.skipConversion=!0,n.newConnector(e,t)})})},n.repair=function(e,o){c.openSimpleModal({title:m.instant("externalsync.confirm.repair"),message:m.instant("externalsync.repair.warning.msg"),warning:!0}).result.then(function(){const r=C(o.value,e.name,!0),c=(s=e.name,"PREFIX prefix:<"+(l=o.value)+">\nINSERT DATA {\n\t<"+u(l)+s+'> prefix:repairConnector ""\n}');var s,l;d.addStatements(t.getActiveRepository(),i({update:c})).then(function(){g.getConnectors().then(function(){g.hasConnector(encodeURIComponent(o.value)).then(function(e){n.existing[o.key]=e.data})}),a.success(m.instant("externalsync.repair.success.msg",{name:e.name}))},function(n){a.error(getError(n))}).finally(function(){r.dismiss("cancel")})})},n.delete=function(e,o){const c=o.key.indexOf("Elastic")>=0||o.key.indexOf("Solr")>=0;r.open({templateUrl:"js/angular/externalsync/templates/deleteConnector.html",controller:"DeleteConnectorCtrl",resolve:{popoverMsg:function(){return c?m.instant("delete.connector.conditional",{type:o.key}):""}}}).result.then(function(r){n.setLoader(!0,m.instant("externalsync.delete.progress.msg",{name:e.name}),m.instant("externalsync.extra.message.warning"));const s=function(n,e,t){const o=e.substring(0,e.length-1)+"/instance#";return"PREFIX prefix:<"+e+">\nINSERT DATA {\n\t<"+o+n+'> prefix:dropConnector "'+(t?"force":"")+'"\n}'}(e.name,o.value,r);d.addStatements(t.getActiveRepository(),i({update:s})).then(function(){g.getConnectors().then(function(){g.hasConnector(encodeURIComponent(o.value)).then(function(e){n.existing[o.key]=e.data})}),r?(a.success(m.instant("externalsync.delete.force.success.msg",{name:e.name})),c&&a.warning(m.instant("externalsync.delete.remote.warning",{key:o.key}))):a.success(m.instant("externalsync.delete.success.msg",{name:e.name}))},function(n){a.error(getError(n))}).finally(function(){n.setLoader(!1)})})},n.viewQuery=function(e,t){r.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){const o=n.getOptions(e);return p(t.name,e.value,s(t.values,o),o)}}})}}function g(n,e,t){n.force=!1,n.popoverMsg=t,n.ok=function(){e.close(n.force)},n.cancel=function(){e.dismiss()}}function m(n,e,t,o,r){function i(){return p(n.name,t.value,n.values,n.options,function(n,e){r.error(e,n)})}n.connector=t,n.addField=function(e,t){const o=_.cloneDeep(n.defaultValues[t][0]);n.values[t].splice(e+1,0,o)},n.addOption=function(n,e){e.splice(n+1,0,"")},n.deleteOption=function(n,e){e.splice(n,1)},n.addMapOption=function(n,e){e.splice(n+1,0,{key:"",value:""})},n.deleteMapOption=function(n,e){e.splice(n,1)},n.ok=function(){if(n.form.$valid){const t=i();t&&e.close({name:n.name,values:n.values,options:n.options,query:t})}},n.viewQuery=function(){const n=i();n&&o.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){return n}}})},n.cancel=function(){e.dismiss("cancel")}}function y(n,e,t,o,r,i,a,c){angular.extend(this,e("ExtendNewConnectorCtrl",{$scope:n,$uibModalInstance:o,connector:r,$uibModal:i})),n.values=a.values,n.options=c,n.name=a.name,a.skipConversion||(n.values=s(n.values,n.options)),n.defaultValues=_.cloneDeep(n.values)}function C(n,e,t,r,i){function a(){const a=function(n){const e=n.replace(/\/instance#.+$/,"#connectorStatus");let t="";return t+="SELECT ?status {\n",t+="\t<"+n+"> <"+e+"> ?status",t+="\n}",t}(n.beingBuiltConnector.iri);n.beingBuiltConnector.iri=null,n.progressInterval=e(function(){(function(n){return l(t,r.getActiveRepository(),n)})(a).then(function(t){const r=function(n){if(n.bindings&&n.bindings.length>0)try{return JSON.parse(n.bindings[0].status.value)}catch(n){o.error(n)}return{}}(t.data.results);"BUILDING"===r.status?(n.beingBuiltConnector.status=r,n.beingBuiltConnector.percentDone=(100*r.processedEntities/r.estimatedEntities).toFixed(0),n.beingBuiltConnector.eta=n.getHumanReadableSeconds(r.etaSeconds),n.beingBuiltConnector.actionName=r.repair?i.instant("externalsync.repairing"):i.instant("externalsync.creating"),n.beingBuiltConnector.waitOnRepairStartOnce=!1):"BUILT"!==r.status||n.beingBuiltConnector.waitOnRepairStartOnce||(e.cancel(n.progressInterval),n.beingBuiltConnector.doneCallback&&n.beingBuiltConnector.doneCallback())})},1e3),n.$on("$destroy",function(){e.cancel(n.progressInterval)})}n.beingBuiltConnector=n.beingBuiltConnector||{},!n.beingBuiltConnector.inline&&n.beingBuiltConnector.iri&&a(),n.$watch("beingBuiltConnector.iri",function(e){n.beingBuiltConnector.inline&&e&&a()})}angular.module("graphdb.framework.externalsync.controllers",["graphdb.framework.rest.rdf4j.repositories.service","graphdb.framework.rest.connectors.service"]).controller("ConnectorsCtrl",d).controller("ExtendNewConnectorCtrl",m).controller("CreateConnectorCtrl",y).controller("CreateProgressCtrl",C).controller("DeleteConnectorCtrl",g).filter("ceil",function(){return function(n){return Math.ceil(n)}}),d.$inject=["$scope","$http","$repositories","$uibModal","toastr","ModalService","$q","RDF4JRepositoriesRestService","ConnectorsRestService","$translate"],g.$inject=["$scope","$uibModalInstance","popoverMsg"],m.$inject=["$scope","$uibModalInstance","connector","$uibModal","toastr"],y.$inject=["$scope","$controller","$http","$uibModalInstance","connector","$uibModal","values","options"],C.$inject=["$scope","$interval","$http","$repositories","$translate"]},85256(){angular.module("graphdb.framework.rest.connectors.service",[]).factory("ConnectorsRestService",e),e.$inject=["$http"];const n="rest/connectors";function e(e){return{getConnectors:function(t,o){return t?e.get(n,{headers:{"X-GraphDB-Repository":t,"X-GraphDB-Repository-Location":o}}):e.get(n)},initConnector:function(t){return e.get(`${n}/options?prefix=${t}`)},hasConnector:function(t,o,r){return o?e.get(`${n}/existing?prefix=${t}`,{headers:{"X-GraphDB-Repository":o,"X-GraphDB-Repository-Location":r}}):e.get(`${n}/existing?prefix=${t}`)},checkConnector:function(t){return e.post(`${n}/check`,t,{headers:{"Content-Type":"text/plain"}})}}}}};
|
|
2
|
+
//# sourceMappingURL=73334.b9c87ecb49eff4f5195d.bundle.js.map
|
package/dist/{73334.1b0e8bb637fbd1ce73ef.bundle.js.map → 73334.b9c87ecb49eff4f5195d.bundle.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"73334.1b0e8bb637fbd1ce73ef.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/externalsync/controllers.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/rest/connectors.rest.service.js"],"sourcesContent":["import 'angular/rest/rdf4j.repositories.rest.service';\nimport 'angular/rest/connectors.rest.service';\nimport {LoggerProvider} from \"../core/services/logger-provider\";\n\nconst modules = [\n 'graphdb.framework.rest.rdf4j.repositories.service',\n 'graphdb.framework.rest.connectors.service',\n];\n\nconst logger = LoggerProvider.logger;\n\nangular\n .module('graphdb.framework.externalsync.controllers', modules)\n .controller('ConnectorsCtrl', ConnectorsCtrl)\n .controller('ExtendNewConnectorCtrl', ExtendNewConnectorCtrl)\n .controller('CreateConnectorCtrl', CreateConnectorCtrl)\n .controller('CreateProgressCtrl', CreateProgressCtrl)\n .controller('DeleteConnectorCtrl', DeleteConnectorCtrl)\n .filter('ceil', ceil);\n\nfunction jsonToFormData(data) {\n const str = [];\n Object.keys(data).forEach(function(key) {\n str.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));\n });\n return str.join('&');\n}\n\nfunction toArrayMap(map) {\n return _.map(map, function(value, key) {\n return {key: key, value: value};\n });\n}\n\nfunction fromArrayMap(arrayMap, $translate) {\n return _.reduce(arrayMap, function(acc, value) {\n if (value.key === '' && value.value === '') {\n // empty pair, skip it\n } else if (value.key === '') {\n throw new Error($translate.instant('externalsync.empty.value.key.error', {value: value.value}));\n } else if (acc.hasOwnProperty(value.key)) {\n throw new Error($translate.instant('externalsync.duplicate.key.error', {key: value.key}));\n } else {\n acc[value.key] = value.value;\n }\n return acc;\n }, {});\n}\n\nfunction mapCreateValuesToUiValues(values, options) {\n for (let i = 0; i < options.length; i++) {\n const option = options[i];\n if (option.__type === 'StringArray') {\n if (!values[option.__name]) {\n values[option.__name] = [''];\n }\n } else if (option.__type === 'OptionArray') {\n if (!values[option.__name]) { // values has no entry for this option\n values[option.__name] = [];\n const optionEl = {};\n for (let j = 0; j < option.__childOptions.length; j++) {\n const child = option.__childOptions[j];\n if (child.__type === 'StringArray') {\n optionEl[child.__name] = [''];\n } else {\n optionEl[child.__name] = (!angular.isUndefined(child.__defaultValue) ? child.__defaultValue : '');\n }\n }\n values[option.__name].push(optionEl);\n } else { // values already has en entry for this option\n // Copies the default value for Boolean child options if no explicit value is set\n for (let j = 0; j < option.__childOptions.length; j++) {\n const child = option.__childOptions[j];\n if (child.__type === 'Boolean') {\n for (let k = 0; k < values[option.__name].length; k++) {\n const valueK = values[option.__name][k];\n if (!valueK.hasOwnProperty([child.__name]) && angular.isDefined(child.__defaultValue)) {\n valueK[child.__name] = child.__defaultValue;\n }\n }\n }\n }\n }\n } else if (option.__type === 'Map') {\n if (!values[option.__name]) {\n values[option.__name] = [];\n } else {\n values[option.__name] = toArrayMap(values[option.__name]);\n }\n } else if (option.__type === 'JsonString') {\n if (values[option.__name] && !(values[option.__name] instanceof String) && typeof values[option.__name] !== 'string') {\n values[option.__name] = angular.toJson(values[option.__name], 2);\n }\n } else {\n if (angular.isUndefined(values[option.__name])) {\n values[option.__name] = (!angular.isUndefined(option.__defaultValue) ? option.__defaultValue : '');\n }\n }\n }\n\n return values;\n}\n\nfunction _evaluateSparqlQuery(http, repository, query) {\n return http.post('repositories/' + repository, jsonToFormData({query: query}),\n {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/sparql-results+json',\n 'X-GraphDB-Local-Consistency': 'updating',\n },\n });\n}\n\nfunction buildNamePrefix(prefix) {\n return prefix.substring(0, prefix.length - 1) + '/instance#';\n}\n\nfunction createConnectorQuery(name, prefix, fields, options, reportError) {\n // Returns a copy of the parameter obj sorted according to the order in options\n function sortObject(obj, options) {\n const newObject = {};\n _.each(options, function(option) {\n if (angular.isDefined(obj[option.__name])) {\n if (option.__type === 'OptionArray') {\n newObject[option.__name] = [];\n _.each(obj[option.__name], function(childOption) {\n newObject[option.__name].push(sortObject(childOption, option.__childOptions));\n });\n } else {\n newObject[option.__name] = _.cloneDeep(obj[option.__name]);\n }\n }\n });\n return newObject;\n }\n\n const fcopy = sortObject(fields, options);\n\n for (let i = 0; i < options.length; i++) {\n try {\n if (options[i].__type === 'Map') {\n fcopy[options[i].__name] = fromArrayMap(fcopy[options[i].__name], $translate);\n } else if (options[i].__type === 'JsonString') {\n fcopy[options[i].__name] = angular.fromJson(fcopy[options[i].__name]);\n }\n } catch (e) {\n reportError(options[i].__label, e.message);\n return null;\n }\n }\n\n removeEmptyValues(fcopy);\n //escapeValues(fields);\n let finalString = '';\n finalString += 'PREFIX :<' + prefix + '>\\n';\n const namePrefix = buildNamePrefix(prefix);\n finalString += 'PREFIX inst:<' + namePrefix + '>\\n';\n finalString += 'INSERT DATA {\\n';\n finalString += \"\\tinst:\" + name + \" :createConnector '''\\n\";\n finalString += angular.toJson(fcopy, 2);\n finalString += \"\\n''' .\\n}\\n\";\n finalString = finalString.replace(/\\\\/g, '\\\\\\\\\\\\');\n return finalString;\n}\n\nfunction createStatusQueryForIri(iri) {\n const statusIri = iri.replace(/\\/instance#.+$/, '#connectorStatus');\n let finalString = '';\n finalString += 'SELECT ?status {\\n';\n finalString += '\\t<' + iri + '> <' + statusIri + '> ?status';\n finalString += '\\n}';\n return finalString;\n}\n\nfunction createStatusQueryForAny(connectors) {\n const connectorIris = _.map(connectors,\n function(k) {\n return '<' + k.value + 'connectorStatus' + '>';\n }).join('|');\n\n if (connectorIris) {\n return 'SELECT ?connector ?status { ?connector ' + connectorIris + ' ?status }';\n }\n\n return null;\n}\n\nfunction repairConnectorQuery(name, prefix) {\n const namePrefix = buildNamePrefix(prefix);\n return 'PREFIX prefix:<' + prefix + '>\\n' +\n 'INSERT DATA {\\n' +\n '\\t<' + namePrefix + name + '> prefix:repairConnector \"\"\\n' +\n '}';\n}\n\nfunction deleteConnectorQuery(name, prefix, force) {\n const namePrefix = prefix.substring(0, prefix.length - 1) + \"/instance#\";\n return 'PREFIX prefix:<' + prefix + '>\\n' +\n 'INSERT DATA {\\n' +\n '\\t<' + namePrefix + name + '> prefix:dropConnector \"' + (force ? \"force\" : \"\") + '\"\\n' +\n '}';\n}\n\nfunction removeEmptyValues(data) {\n // remove empty values from array\n if (Array.isArray(data)) {\n data = _.filter(data, function(item) {\n return item !== null && (!item.trim || item.trim() !== '');\n });\n }\n // remove empty values from object values\n Object.keys(data).forEach(function(key) {\n if ((data[key] === '' || data[key] === null || data[key] === undefined) && data[key] !== false) {\n delete data[key];\n } else if (typeof data[key] === 'object') {\n data[key] = removeEmptyValues(data[key]);\n }\n });\n return data;\n}\n\nfunction parseFirstBuildingResult(results) {\n if (results.bindings) {\n for (let i = 0; i < results.bindings.length; i++) {\n try {\n const statusObject = JSON.parse(results.bindings[i].status.value);\n if (statusObject.status === 'BUILDING') {\n return {\n connector: results.bindings[i].connector.value,\n status: statusObject,\n };\n }\n } catch (e) {\n logger.error(e);\n }\n }\n }\n\n return {};\n}\n\nConnectorsCtrl.$inject = ['$scope', '$http', '$repositories', '$uibModal', 'toastr', 'ModalService', '$q', 'RDF4JRepositoriesRestService', 'ConnectorsRestService', '$translate'];\n\nfunction ConnectorsCtrl($scope, $http, $repositories, $uibModal, toastr, ModalService, $q, RDF4JRepositoriesRestService, ConnectorsRestService, $translate) {\n $scope.loader = false;\n\n $scope.controllers = [];\n\n $scope.existing = {};\n\n $scope.definitions = {};\n\n $scope.getLoaderMessage = function() {\n const timeSeconds = (Date.now() - $scope.loaderStartTime) / 1000;\n const timeHuman = $scope.getHumanReadableSeconds(timeSeconds);\n let message = '';\n if ($scope.progressMessage) {\n message = $scope.progressMessage + '... ' + timeHuman;\n } else {\n message = $translate.instant('common.running.operation', {timeHuman: timeHuman});\n }\n if ($scope.extraMessage && timeSeconds > 10) {\n message += '\\n' + $scope.extraMessage;\n }\n\n return message;\n };\n\n $scope.setLoader = function(isRunning, progressMessage, extraMessage) {\n if (isRunning) {\n $scope.loader = true;\n $scope.loaderStartTime = Date.now();\n $scope.progressMessage = progressMessage;\n $scope.extraMessage = extraMessage;\n } else {\n $scope.loader = false;\n $scope.progressMessage = '';\n $scope.extraMessage = '';\n }\n };\n\n $scope.initConnector = function(connector) {\n return ConnectorsRestService.initConnector(encodeURIComponent(connector.value))\n .then(function(res) {\n $scope.definitions[connector.key] = res.data;\n\n return ConnectorsRestService.hasConnector(encodeURIComponent(connector.value))\n .then(function(res) {\n $scope.existing[connector.key] = res.data;\n });\n });\n };\n\n $scope.getConnectors = function() {\n if (!$scope.isLicenseValid()) {\n return;\n }\n if (!$scope.canWriteActiveRepo()) {\n return;\n }\n\n $scope.setLoader(true, $translate.instant('externalsync.fetching.connectors'), $translate.instant('common.extra.message'));\n\n ConnectorsRestService.getConnectors()\n .then(function(res) {\n $scope.connectors = Object.keys(res.data).map(function(key) {\n return {key: key, value: res.data[key]};\n });\n\n $q.all(_.map($scope.connectors, function(connector) {\n return $scope.initConnector(connector);\n })).finally(function() {\n resetProgress();\n\n const query = createStatusQueryForAny($scope.connectors);\n\n if (query) {\n evaluateSparqlQuery(query)\n .then(function(res) {\n const status = parseFirstBuildingResult(res.data.results);\n if (status.connector) {\n // has a building connector, open progress indicator\n const d = status.connector.split(/#/);\n d[0] = d[0].replace(/\\/instance$/, '#');\n showProgress(d[0], d[1]);\n }\n })\n .finally(function() {\n $scope.setLoader(false);\n });\n } else {\n $scope.setLoader(false);\n }\n });\n }).catch(function(e) {\n $scope.setLoader(false);\n toastr.error(getError(e), $translate.instant('externalsync.could.not.get.connectors.error'));\n });\n\n $scope.existing = {};\n };\n\n $scope.getOptions = function(connector) {\n return $scope.definitions[connector.key];\n };\n\n $scope.isEmpty = function(value) {\n return angular.isObject(value) && Object.keys(value).length === 0;\n };\n\n $scope.toPrettyJson = function(value) {\n return angular.toJson(value, 2);\n };\n\n $scope.$watch(function() {\n return $repositories.getActiveRepository();\n }, $scope.getConnectors);\n\n $scope.$watch(function() {\n return $repositories.getActiveLocation();\n }, $scope.getConnectors);\n\n function evaluateSparqlQuery(query) {\n return _evaluateSparqlQuery($http, $repositories.getActiveRepository(), query);\n }\n\n function resetProgress(repair) {\n $scope.beingBuiltConnector = {\n percentDone: 0,\n status: {\n processedEntities: 0,\n estimatedEntities: 0,\n indexedEntities: 0,\n entitiesPerSecond: 0,\n },\n actionName: repair ? $translate.instant('externalsync.repairing') : $translate.instant('externalsync.creating'),\n waitOnRepairStartOnce: !!repair,\n eta: '-',\n inline: false,\n iri: null,\n };\n }\n\n function openProgressModal(prefix, name, repair) {\n resetProgress(repair);\n\n $.extend($scope.beingBuiltConnector, {\n iri: buildNamePrefix(prefix) + name,\n name: name,\n inline: false,\n doneCallback: function() {\n $scope.beingBuiltConnector.modalInstance.dismiss('cancel');\n },\n });\n\n $scope.beingBuiltConnector.modalInstance = $uibModal.open({\n templateUrl: 'pages/connectorProgress.html',\n controller: 'CreateProgressCtrl',\n size: 'lg',\n backdrop: 'static',\n scope: $scope,\n });\n\n return $scope.beingBuiltConnector.modalInstance;\n }\n\n function showProgress(prefix, name) {\n resetProgress();\n\n $.extend($scope.beingBuiltConnector, {\n iri: buildNamePrefix(prefix) + name,\n name: name,\n inline: true,\n doneCallback: function() {\n $scope.beingBuiltConnector.inline = false;\n },\n });\n }\n\n function executeCreate(connector, obj, errorCallback) {\n const modal = openProgressModal(connector.value, obj.name, false);\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: obj.query}))\n .then(function() {\n ConnectorsRestService.getConnectors().then(function() {\n ConnectorsRestService.hasConnector(encodeURIComponent(connector.value)).then(function(res) {\n $scope.existing[connector.key] = res.data;\n });\n });\n toastr.success($translate.instant('created.connector', {name: obj.name}));\n }, function(err) {\n toastr.error(getError(err));\n errorCallback();\n }).finally(function() {\n modal.dismiss('cancel');\n });\n }\n\n $scope.copyConnector = function(connector, values) {\n let newValues;\n if (!angular.isUndefined(values)) {\n newValues = _.cloneDeep(values);\n newValues.name = newValues.name + '-copy';\n }\n const modal = $uibModal.open({\n templateUrl: 'pages/createConnector.html',\n controller: 'CreateConnectorCtrl',\n size: 'lg',\n backdrop: 'static',\n resolve: {\n connector: function() {\n return connector;\n },\n values: function() {\n return angular.isUndefined(newValues) ? {name: '', values: {}} : newValues;\n },\n options: function() {\n return $scope.getOptions(connector);\n },\n },\n });\n\n modal.result.then(function(obj) {\n executeCreate(connector, obj, function() {\n obj.skipConversion = true;\n $scope.newConnector(connector, obj);\n });\n });\n };\n\n $scope.newConnector = function(connector, values) {\n const modal = $uibModal.open({\n templateUrl: 'pages/createConnector.html',\n controller: 'CreateConnectorCtrl',\n size: 'lg',\n backdrop: 'static',\n resolve: {\n connector: function() {\n return connector;\n },\n values: function() {\n return angular.isUndefined(values) ? {name: '', values: {}} : values;\n },\n options: function() {\n return $scope.getOptions(connector);\n },\n },\n });\n\n modal.result.then(function(obj) {\n executeCreate(connector, obj, function() {\n obj.skipConversion = true;\n $scope.newConnector(connector, obj);\n });\n });\n };\n\n $scope.repair = function(inst, type) {\n ModalService.openSimpleModal({\n title: $translate.instant('externalsync.confirm.repair'),\n message: $translate.instant('externalsync.repair.warning.msg'),\n warning: true,\n }).result\n .then(function() {\n const modal = openProgressModal(type.value, inst.name, true);\n\n const query = repairConnectorQuery(inst.name, type.value);\n\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: query}))\n .then(function() {\n ConnectorsRestService.getConnectors().then(function() {\n ConnectorsRestService.hasConnector(encodeURIComponent(type.value)).then(function(res) {\n $scope.existing[type.key] = res.data;\n });\n });\n toastr.success($translate.instant('externalsync.repair.success.msg', {name: inst.name}));\n }, function(err) {\n toastr.error(getError(err));\n }).finally(function() {\n modal.dismiss('cancel');\n });\n });\n };\n\n $scope.delete = function(inst, type) {\n const isExternal = type.key.indexOf(\"Elastic\") >= 0 || type.key.indexOf(\"Solr\") >= 0;\n\n $uibModal.open({\n templateUrl: 'js/angular/externalsync/templates/deleteConnector.html',\n controller: 'DeleteConnectorCtrl',\n resolve: {\n popoverMsg: function() {\n return isExternal ? $translate.instant('delete.connector.conditional', {type: type.key}) : '';\n },\n },\n }).result\n .then(function(force) {\n $scope.setLoader(true, $translate.instant('externalsync.delete.progress.msg', {name: inst.name}),\n $translate.instant('externalsync.extra.message.warning'));\n\n const query = deleteConnectorQuery(inst.name, type.value, force);\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: query}))\n .then(function() {\n ConnectorsRestService.getConnectors().then(function() {\n ConnectorsRestService.hasConnector(encodeURIComponent(type.value)).then(function(res) {\n $scope.existing[type.key] = res.data;\n });\n });\n if (force) {\n toastr.success($translate.instant('externalsync.delete.force.success.msg', {name: inst.name}));\n if (isExternal) {\n toastr.warning($translate.instant('externalsync.delete.remote.warning', {key: type.key}));\n }\n } else {\n toastr.success($translate.instant('externalsync.delete.success.msg', {name: inst.name}));\n }\n }, function(err) {\n toastr.error(getError(err));\n }).finally(function() {\n $scope.setLoader(false);\n });\n });\n };\n\n $scope.viewQuery = function(connector, inst) {\n $uibModal.open({\n templateUrl: 'pages/viewQuery.html',\n controller: 'ViewQueryCtrl',\n resolve: {\n query: function() {\n const options = $scope.getOptions(connector);\n return createConnectorQuery(inst.name, connector.value,\n mapCreateValuesToUiValues(inst.values, options), options);\n },\n },\n });\n };\n}\n\nDeleteConnectorCtrl.$inject = ['$scope', '$uibModalInstance', 'popoverMsg'];\nfunction DeleteConnectorCtrl($scope, $uibModalInstance, popoverMsg) {\n $scope.force = false;\n $scope.popoverMsg = popoverMsg;\n\n $scope.ok = function() {\n $uibModalInstance.close($scope.force);\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss();\n };\n}\n\nExtendNewConnectorCtrl.$inject = ['$scope', '$uibModalInstance', 'connector', '$uibModal', 'toastr'];\nfunction ExtendNewConnectorCtrl($scope, $uibModalInstance, connector, $uibModal, toastr) {\n $scope.connector = connector;\n\n $scope.addField = function(index, optionName) {\n const newField = _.cloneDeep($scope.defaultValues[optionName][0]);\n $scope.values[optionName].splice(index + 1, 0, newField);\n };\n\n $scope.addOption = function(index, array) {\n array.splice(index + 1, 0, '');\n };\n\n $scope.deleteOption = function(index, array) {\n array.splice(index, 1);\n };\n\n $scope.addMapOption = function(index, array) {\n array.splice(index + 1, 0, {key: '', value: ''});\n };\n\n $scope.deleteMapOption = function(index, array) {\n array.splice(index, 1);\n };\n\n function toQuery() {\n return createConnectorQuery($scope.name, connector.value, $scope.values, $scope.options,\n function(label, error) {\n toastr.error(error, label);\n });\n }\n\n $scope.ok = function() {\n if ($scope.form.$valid) {\n const query = toQuery();\n\n if (query) {\n $uibModalInstance.close({name: $scope.name, values: $scope.values, options: $scope.options, query: query});\n }\n }\n };\n\n $scope.viewQuery = function() {\n const query = toQuery();\n\n if (query) {\n $uibModal.open({\n templateUrl: 'pages/viewQuery.html',\n controller: 'ViewQueryCtrl',\n resolve: {\n query: function() {\n return query;\n },\n },\n });\n }\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nCreateConnectorCtrl.$inject = ['$scope', '$controller', '$http', '$uibModalInstance', 'connector', '$uibModal', 'values', 'options'];\n\nfunction CreateConnectorCtrl($scope, $controller, $http, $uibModalInstance, connector, $uibModal, values, options) {\n angular.extend(this, $controller('ExtendNewConnectorCtrl', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n connector: connector,\n $uibModal: $uibModal,\n }));\n $scope.values = values.values;\n $scope.options = options;\n $scope.name = values.name;\n if (!values.skipConversion) {\n $scope.values = mapCreateValuesToUiValues($scope.values, $scope.options);\n }\n $scope.defaultValues = _.cloneDeep($scope.values);\n}\n\n// Note that this is a fancy controller: it's used both for a modal and for a directive.\n// This means you can't rely on custom injection through resolve in the modal and the scope\n// must be shared with the main connectors controller.\nCreateProgressCtrl.$inject = ['$scope', '$interval', '$http', '$repositories', '$translate'];\n\nfunction CreateProgressCtrl($scope, $interval, $http, $repositories, $translate) {\n function evaluateSparqlQuery(query) {\n return _evaluateSparqlQuery($http, $repositories.getActiveRepository(), query);\n }\n\n function initProgress() {\n const query = createStatusQueryForIri($scope.beingBuiltConnector.iri);\n\n // reset iri value so that watch will fire again when we do something with the same connector\n $scope.beingBuiltConnector.iri = null;\n\n $scope.progressInterval = $interval(function() {\n function getFirstStatusFromResult(results) {\n if (results.bindings) {\n if (results.bindings.length > 0) {\n try {\n return JSON.parse(results.bindings[0].status.value);\n } catch (e) {\n logger.error(e);\n }\n }\n }\n\n return {};\n }\n\n evaluateSparqlQuery(query)\n .then(function(res) {\n const status = getFirstStatusFromResult(res.data.results);\n if (status.status === 'BUILDING') {\n $scope.beingBuiltConnector.status = status;\n $scope.beingBuiltConnector.percentDone = (100 * status.processedEntities / status.estimatedEntities).toFixed(0);\n $scope.beingBuiltConnector.eta = $scope.getHumanReadableSeconds(status.etaSeconds);\n $scope.beingBuiltConnector.actionName = status.repair ? $translate.instant('externalsync.repairing') : $translate.instant('externalsync.creating');\n $scope.beingBuiltConnector.waitOnRepairStartOnce = false;\n } else if (status.status === 'BUILT' && !$scope.beingBuiltConnector.waitOnRepairStartOnce) {\n // done\n $interval.cancel($scope.progressInterval);\n if ($scope.beingBuiltConnector.doneCallback) {\n $scope.beingBuiltConnector.doneCallback();\n }\n }\n });\n }, 1000);\n\n $scope.$on('$destroy', function() {\n $interval.cancel($scope.progressInterval);\n });\n }\n\n $scope.beingBuiltConnector = $scope.beingBuiltConnector || {};\n\n // for modal instance we get the iri before hand and can start progress now\n if (!$scope.beingBuiltConnector.inline && $scope.beingBuiltConnector.iri) {\n initProgress();\n }\n\n // for inline progress we need to watch for the iri value\n $scope.$watch('beingBuiltConnector.iri', function(value) {\n if ($scope.beingBuiltConnector.inline && value) {\n initProgress();\n }\n });\n}\n\nfunction ceil() {\n return function(input) {\n return Math.ceil(input);\n };\n}\n","angular\n .module('graphdb.framework.rest.connectors.service', [])\n .factory('ConnectorsRestService', ConnectorsRestService);\n\nConnectorsRestService.$inject = ['$http'];\n\nconst CONNECTORS_ENDPOINT = 'rest/connectors';\n\nfunction ConnectorsRestService($http) {\n\n return {\n getConnectors,\n initConnector,\n hasConnector,\n checkConnector\n };\n\n /**\n * Fetches all connectors for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code>.\n * If the repository ID and repository location are not provided, the values persisted in local storage will be used {@see authentication.interceptor.js}.\n *\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {*} The similarity indexes for the specified repository.\n */\n function getConnectors(repositoryId, repositoryLocation) {\n if (repositoryId) {\n return $http.get(CONNECTORS_ENDPOINT, {\n headers: {\n 'X-GraphDB-Repository': repositoryId,\n 'X-GraphDB-Repository-Location': repositoryLocation\n }\n });\n }\n return $http.get(CONNECTORS_ENDPOINT);\n }\n\n function initConnector(prefix) {\n return $http.get(`${CONNECTORS_ENDPOINT}/options?prefix=${prefix}`);\n }\n\n /**\n * Fetches all connectors of a specific type defined by the prefix for the repository with id <code>repositoryId</code>\n * and location <code>repositoryLocation</code>. If the repository ID and repository location are not provided, the currently selected repository will be used.\n * @param {string} prefix\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<ConnectorListModel>}\n */\n function hasConnector(prefix, repositoryId, repositoryLocation) {\n if (repositoryId) {\n return $http.get(`${CONNECTORS_ENDPOINT}/existing?prefix=${prefix}`, {\n headers: {\n 'X-GraphDB-Repository': repositoryId,\n 'X-GraphDB-Repository-Location': repositoryLocation\n }\n });\n }\n return $http.get(`${CONNECTORS_ENDPOINT}/existing?prefix=${prefix}`);\n }\n\n function checkConnector(data) {\n return $http.post(`${CONNECTORS_ENDPOINT}/check`, data, {\n headers: {\n 'Content-Type': 'text/plain'\n }\n });\n }\n}\n"],"names":["logger","LoggerProvider","jsonToFormData","data","str","Object","keys","forEach","key","push","encodeURIComponent","join","toArrayMap","map","_","value","fromArrayMap","arrayMap","$translate","reduce","acc","Error","instant","hasOwnProperty","mapCreateValuesToUiValues","values","options","i","length","option","__type","__name","j","__childOptions","child","k","valueK","angular","isDefined","__defaultValue","optionEl","isUndefined","String","toJson","_evaluateSparqlQuery","http","repository","query","post","headers","buildNamePrefix","prefix","substring","createConnectorQuery","name","fields","reportError","fcopy","sortObject","obj","newObject","each","childOption","cloneDeep","fromJson","e","__label","message","removeEmptyValues","finalString","replace","Array","isArray","filter","item","trim","undefined","ConnectorsCtrl","$scope","$http","$repositories","$uibModal","toastr","ModalService","$q","RDF4JRepositoriesRestService","ConnectorsRestService","resetProgress","repair","beingBuiltConnector","percentDone","status","processedEntities","estimatedEntities","indexedEntities","entitiesPerSecond","actionName","waitOnRepairStartOnce","eta","inline","iri","openProgressModal","$","extend","doneCallback","modalInstance","dismiss","open","templateUrl","controller","size","backdrop","scope","executeCreate","connector","errorCallback","modal","addStatements","getActiveRepository","update","then","getConnectors","hasConnector","res","existing","success","err","error","getError","finally","loader","controllers","definitions","getLoaderMessage","timeSeconds","Date","now","loaderStartTime","timeHuman","getHumanReadableSeconds","progressMessage","extraMessage","setLoader","isRunning","initConnector","isLicenseValid","canWriteActiveRepo","connectors","all","connectorIris","createStatusQueryForAny","evaluateSparqlQuery","results","bindings","statusObject","JSON","parse","parseFirstBuildingResult","d","split","catch","getOptions","isEmpty","isObject","toPrettyJson","$watch","getActiveLocation","copyConnector","newValues","resolve","result","skipConversion","newConnector","inst","type","openSimpleModal","title","warning","delete","isExternal","indexOf","popoverMsg","force","namePrefix","deleteConnectorQuery","viewQuery","DeleteConnectorCtrl","$uibModalInstance","ok","close","cancel","ExtendNewConnectorCtrl","toQuery","label","addField","index","optionName","newField","defaultValues","splice","addOption","array","deleteOption","addMapOption","deleteMapOption","form","$valid","CreateConnectorCtrl","$controller","this","CreateProgressCtrl","$interval","initProgress","statusIri","createStatusQueryForIri","progressInterval","getFirstStatusFromResult","toFixed","etaSeconds","$on","module","input","Math","ceil","$inject","factory","CONNECTORS_ENDPOINT","repositoryId","repositoryLocation","get","checkConnector"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"73334.b9c87ecb49eff4f5195d.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/externalsync/controllers.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/rest/connectors.rest.service.js"],"sourcesContent":["import 'angular/rest/rdf4j.repositories.rest.service';\nimport 'angular/rest/connectors.rest.service';\nimport {LoggerProvider} from \"../core/services/logger-provider\";\n\nconst modules = [\n 'graphdb.framework.rest.rdf4j.repositories.service',\n 'graphdb.framework.rest.connectors.service',\n];\n\nconst logger = LoggerProvider.logger;\nconst SENSITIVE_FIELD_MASK = 'MASKED_SENSITIVE_FIELD';\n\nangular\n .module('graphdb.framework.externalsync.controllers', modules)\n .controller('ConnectorsCtrl', ConnectorsCtrl)\n .controller('ExtendNewConnectorCtrl', ExtendNewConnectorCtrl)\n .controller('CreateConnectorCtrl', CreateConnectorCtrl)\n .controller('CreateProgressCtrl', CreateProgressCtrl)\n .controller('DeleteConnectorCtrl', DeleteConnectorCtrl)\n .filter('ceil', ceil);\n\nfunction jsonToFormData(data) {\n const str = [];\n Object.keys(data).forEach(function(key) {\n str.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));\n });\n return str.join('&');\n}\n\nfunction toArrayMap(map) {\n return _.map(map, function(value, key) {\n return {key: key, value: value};\n });\n}\n\nfunction fromArrayMap(arrayMap, $translate) {\n return _.reduce(arrayMap, function(acc, value) {\n if (value.key === '' && value.value === '') {\n // empty pair, skip it\n } else if (value.key === '') {\n throw new Error($translate.instant('externalsync.empty.value.key.error', {value: value.value}));\n } else if (acc.hasOwnProperty(value.key)) {\n throw new Error($translate.instant('externalsync.duplicate.key.error', {key: value.key}));\n } else {\n acc[value.key] = value.value;\n }\n return acc;\n }, {});\n}\n\nfunction mapCreateValuesToUiValues(values, options) {\n for (let i = 0; i < options.length; i++) {\n const option = options[i];\n if (option.__type === 'StringArray') {\n if (!values[option.__name]) {\n values[option.__name] = [''];\n }\n } else if (option.__type === 'OptionArray') {\n if (!values[option.__name]) { // values has no entry for this option\n values[option.__name] = [];\n const optionEl = {};\n for (let j = 0; j < option.__childOptions.length; j++) {\n const child = option.__childOptions[j];\n if (child.__type === 'StringArray') {\n optionEl[child.__name] = [''];\n } else {\n optionEl[child.__name] = (!angular.isUndefined(child.__defaultValue) ? child.__defaultValue : '');\n }\n }\n values[option.__name].push(optionEl);\n } else { // values already has en entry for this option\n // Copies the default value for Boolean child options if no explicit value is set\n for (let j = 0; j < option.__childOptions.length; j++) {\n const child = option.__childOptions[j];\n if (child.__type === 'Boolean') {\n for (let k = 0; k < values[option.__name].length; k++) {\n const valueK = values[option.__name][k];\n if (!valueK.hasOwnProperty([child.__name]) && angular.isDefined(child.__defaultValue)) {\n valueK[child.__name] = child.__defaultValue;\n }\n }\n }\n }\n }\n } else if (option.__type === 'Map') {\n if (!values[option.__name]) {\n values[option.__name] = [];\n } else {\n values[option.__name] = toArrayMap(values[option.__name]);\n }\n } else if (option.__type === 'JsonString') {\n if (values[option.__name] && !(values[option.__name] instanceof String) && typeof values[option.__name] !== 'string') {\n values[option.__name] = angular.toJson(values[option.__name], 2);\n }\n } else {\n if (angular.isUndefined(values[option.__name])) {\n values[option.__name] = (!angular.isUndefined(option.__defaultValue) ? option.__defaultValue : '');\n }\n }\n }\n\n return values;\n}\n\nfunction _evaluateSparqlQuery(http, repository, query) {\n return http.post('repositories/' + repository, jsonToFormData({query: query}),\n {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/sparql-results+json',\n 'X-GraphDB-Local-Consistency': 'updating',\n },\n });\n}\n\nfunction buildNamePrefix(prefix) {\n return prefix.substring(0, prefix.length - 1) + '/instance#';\n}\n\nfunction createConnectorQuery(name, prefix, fields, options, reportError) {\n // Returns a copy of the parameter obj sorted according to the order in options\n function sortObject(obj, options) {\n const newObject = {};\n _.each(options, function(option) {\n if (angular.isDefined(obj[option.__name])) {\n if (option.__type === 'OptionArray') {\n newObject[option.__name] = [];\n _.each(obj[option.__name], function(childOption) {\n newObject[option.__name].push(sortObject(childOption, option.__childOptions));\n });\n } else {\n newObject[option.__name] = _.cloneDeep(obj[option.__name]);\n }\n }\n });\n return newObject;\n }\n\n const fcopy = sortObject(fields, options);\n\n for (let i = 0; i < options.length; i++) {\n try {\n if (options[i].__type === 'Map') {\n fcopy[options[i].__name] = fromArrayMap(fcopy[options[i].__name], $translate);\n } else if (options[i].__type === 'JsonString') {\n fcopy[options[i].__name] = angular.fromJson(fcopy[options[i].__name]);\n } else if (options[i].__sensitive === true && fcopy[options[i].__name]) {\n fcopy[options[i].__name] = SENSITIVE_FIELD_MASK;\n }\n } catch (e) {\n reportError(options[i].__label, e.message);\n return null;\n }\n }\n\n removeEmptyValues(fcopy);\n //escapeValues(fields);\n let finalString = '';\n finalString += 'PREFIX :<' + prefix + '>\\n';\n const namePrefix = buildNamePrefix(prefix);\n finalString += 'PREFIX inst:<' + namePrefix + '>\\n';\n finalString += 'INSERT DATA {\\n';\n finalString += \"\\tinst:\" + name + \" :createConnector '''\\n\";\n finalString += angular.toJson(fcopy, 2);\n finalString = finalString.replaceAll(`\"${SENSITIVE_FIELD_MASK}\"`, SENSITIVE_FIELD_MASK);\n finalString += \"\\n''' .\\n}\\n\";\n finalString = finalString.replace(/\\\\/g, '\\\\\\\\\\\\');\n return finalString;\n}\n\nfunction createStatusQueryForIri(iri) {\n const statusIri = iri.replace(/\\/instance#.+$/, '#connectorStatus');\n let finalString = '';\n finalString += 'SELECT ?status {\\n';\n finalString += '\\t<' + iri + '> <' + statusIri + '> ?status';\n finalString += '\\n}';\n return finalString;\n}\n\nfunction createStatusQueryForAny(connectors) {\n const connectorIris = _.map(connectors,\n function(k) {\n return '<' + k.value + 'connectorStatus' + '>';\n }).join('|');\n\n if (connectorIris) {\n return 'SELECT ?connector ?status { ?connector ' + connectorIris + ' ?status }';\n }\n\n return null;\n}\n\nfunction repairConnectorQuery(name, prefix) {\n const namePrefix = buildNamePrefix(prefix);\n return 'PREFIX prefix:<' + prefix + '>\\n' +\n 'INSERT DATA {\\n' +\n '\\t<' + namePrefix + name + '> prefix:repairConnector \"\"\\n' +\n '}';\n}\n\nfunction deleteConnectorQuery(name, prefix, force) {\n const namePrefix = prefix.substring(0, prefix.length - 1) + \"/instance#\";\n return 'PREFIX prefix:<' + prefix + '>\\n' +\n 'INSERT DATA {\\n' +\n '\\t<' + namePrefix + name + '> prefix:dropConnector \"' + (force ? \"force\" : \"\") + '\"\\n' +\n '}';\n}\n\nfunction removeEmptyValues(data) {\n // remove empty values from array\n if (Array.isArray(data)) {\n data = _.filter(data, function(item) {\n return item !== null && (!item.trim || item.trim() !== '');\n });\n }\n // remove empty values from object values\n Object.keys(data).forEach(function(key) {\n if ((data[key] === '' || data[key] === null || data[key] === undefined) && data[key] !== false) {\n delete data[key];\n } else if (typeof data[key] === 'object') {\n data[key] = removeEmptyValues(data[key]);\n }\n });\n return data;\n}\n\nfunction parseFirstBuildingResult(results) {\n if (results.bindings) {\n for (let i = 0; i < results.bindings.length; i++) {\n try {\n const statusObject = JSON.parse(results.bindings[i].status.value);\n if (statusObject.status === 'BUILDING') {\n return {\n connector: results.bindings[i].connector.value,\n status: statusObject,\n };\n }\n } catch (e) {\n logger.error(e);\n }\n }\n }\n\n return {};\n}\n\nConnectorsCtrl.$inject = ['$scope', '$http', '$repositories', '$uibModal', 'toastr', 'ModalService', '$q', 'RDF4JRepositoriesRestService', 'ConnectorsRestService', '$translate'];\n\nfunction ConnectorsCtrl($scope, $http, $repositories, $uibModal, toastr, ModalService, $q, RDF4JRepositoriesRestService, ConnectorsRestService, $translate) {\n $scope.loader = false;\n\n $scope.controllers = [];\n\n $scope.existing = {};\n\n $scope.definitions = {};\n\n $scope.getLoaderMessage = function() {\n const timeSeconds = (Date.now() - $scope.loaderStartTime) / 1000;\n const timeHuman = $scope.getHumanReadableSeconds(timeSeconds);\n let message = '';\n if ($scope.progressMessage) {\n message = $scope.progressMessage + '... ' + timeHuman;\n } else {\n message = $translate.instant('common.running.operation', {timeHuman: timeHuman});\n }\n if ($scope.extraMessage && timeSeconds > 10) {\n message += '\\n' + $scope.extraMessage;\n }\n\n return message;\n };\n\n $scope.setLoader = function(isRunning, progressMessage, extraMessage) {\n if (isRunning) {\n $scope.loader = true;\n $scope.loaderStartTime = Date.now();\n $scope.progressMessage = progressMessage;\n $scope.extraMessage = extraMessage;\n } else {\n $scope.loader = false;\n $scope.progressMessage = '';\n $scope.extraMessage = '';\n }\n };\n\n $scope.initConnector = function(connector) {\n return ConnectorsRestService.initConnector(encodeURIComponent(connector.value))\n .then(function(res) {\n $scope.definitions[connector.key] = res.data;\n\n return ConnectorsRestService.hasConnector(encodeURIComponent(connector.value))\n .then(function(res) {\n $scope.existing[connector.key] = res.data;\n });\n });\n };\n\n $scope.getConnectors = function() {\n if (!$scope.isLicenseValid()) {\n return;\n }\n if (!$scope.canWriteActiveRepo()) {\n return;\n }\n\n $scope.setLoader(true, $translate.instant('externalsync.fetching.connectors'), $translate.instant('common.extra.message'));\n\n ConnectorsRestService.getConnectors()\n .then(function(res) {\n $scope.connectors = Object.keys(res.data).map(function(key) {\n return {key: key, value: res.data[key]};\n });\n\n $q.all(_.map($scope.connectors, function(connector) {\n return $scope.initConnector(connector);\n })).finally(function() {\n resetProgress();\n\n const query = createStatusQueryForAny($scope.connectors);\n\n if (query) {\n evaluateSparqlQuery(query)\n .then(function(res) {\n const status = parseFirstBuildingResult(res.data.results);\n if (status.connector) {\n // has a building connector, open progress indicator\n const d = status.connector.split(/#/);\n d[0] = d[0].replace(/\\/instance$/, '#');\n showProgress(d[0], d[1]);\n }\n })\n .finally(function() {\n $scope.setLoader(false);\n });\n } else {\n $scope.setLoader(false);\n }\n });\n }).catch(function(e) {\n $scope.setLoader(false);\n toastr.error(getError(e), $translate.instant('externalsync.could.not.get.connectors.error'));\n });\n\n $scope.existing = {};\n };\n\n $scope.getOptions = function(connector) {\n return $scope.definitions[connector.key];\n };\n\n $scope.isEmpty = function(value) {\n return angular.isObject(value) && Object.keys(value).length === 0;\n };\n\n $scope.toPrettyJson = function(value) {\n return angular.toJson(value, 2);\n };\n\n $scope.$watch(function() {\n return $repositories.getActiveRepository();\n }, $scope.getConnectors);\n\n $scope.$watch(function() {\n return $repositories.getActiveLocation();\n }, $scope.getConnectors);\n\n function evaluateSparqlQuery(query) {\n return _evaluateSparqlQuery($http, $repositories.getActiveRepository(), query);\n }\n\n function resetProgress(repair) {\n $scope.beingBuiltConnector = {\n percentDone: 0,\n status: {\n processedEntities: 0,\n estimatedEntities: 0,\n indexedEntities: 0,\n entitiesPerSecond: 0,\n },\n actionName: repair ? $translate.instant('externalsync.repairing') : $translate.instant('externalsync.creating'),\n waitOnRepairStartOnce: !!repair,\n eta: '-',\n inline: false,\n iri: null,\n };\n }\n\n function openProgressModal(prefix, name, repair) {\n resetProgress(repair);\n\n $.extend($scope.beingBuiltConnector, {\n iri: buildNamePrefix(prefix) + name,\n name: name,\n inline: false,\n doneCallback: function() {\n $scope.beingBuiltConnector.modalInstance.dismiss('cancel');\n },\n });\n\n $scope.beingBuiltConnector.modalInstance = $uibModal.open({\n templateUrl: 'pages/connectorProgress.html',\n controller: 'CreateProgressCtrl',\n size: 'lg',\n backdrop: 'static',\n scope: $scope,\n });\n\n return $scope.beingBuiltConnector.modalInstance;\n }\n\n function showProgress(prefix, name) {\n resetProgress();\n\n $.extend($scope.beingBuiltConnector, {\n iri: buildNamePrefix(prefix) + name,\n name: name,\n inline: true,\n doneCallback: function() {\n $scope.beingBuiltConnector.inline = false;\n },\n });\n }\n\n function executeCreate(connector, obj, errorCallback) {\n const modal = openProgressModal(connector.value, obj.name, false);\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: obj.query}))\n .then(function() {\n ConnectorsRestService.getConnectors().then(function() {\n ConnectorsRestService.hasConnector(encodeURIComponent(connector.value)).then(function(res) {\n $scope.existing[connector.key] = res.data;\n });\n });\n toastr.success($translate.instant('created.connector', {name: obj.name}));\n }, function(err) {\n toastr.error(getError(err));\n errorCallback();\n }).finally(function() {\n modal.dismiss('cancel');\n });\n }\n\n $scope.copyConnector = function(connector, values) {\n let newValues;\n if (!angular.isUndefined(values)) {\n newValues = _.cloneDeep(values);\n newValues.name = newValues.name + '-copy';\n }\n const modal = $uibModal.open({\n templateUrl: 'pages/createConnector.html',\n controller: 'CreateConnectorCtrl',\n size: 'lg',\n backdrop: 'static',\n resolve: {\n connector: function() {\n return connector;\n },\n values: function() {\n return angular.isUndefined(newValues) ? {name: '', values: {}} : newValues;\n },\n options: function() {\n return $scope.getOptions(connector);\n },\n },\n });\n\n modal.result.then(function(obj) {\n executeCreate(connector, obj, function() {\n obj.skipConversion = true;\n $scope.newConnector(connector, obj);\n });\n });\n };\n\n $scope.newConnector = function(connector, values) {\n const modal = $uibModal.open({\n templateUrl: 'pages/createConnector.html',\n controller: 'CreateConnectorCtrl',\n size: 'lg',\n backdrop: 'static',\n resolve: {\n connector: function() {\n return connector;\n },\n values: function() {\n return angular.isUndefined(values) ? {name: '', values: {}} : values;\n },\n options: function() {\n return $scope.getOptions(connector);\n },\n },\n });\n\n modal.result.then(function(obj) {\n executeCreate(connector, obj, function() {\n obj.skipConversion = true;\n $scope.newConnector(connector, obj);\n });\n });\n };\n\n $scope.repair = function(inst, type) {\n ModalService.openSimpleModal({\n title: $translate.instant('externalsync.confirm.repair'),\n message: $translate.instant('externalsync.repair.warning.msg'),\n warning: true,\n }).result\n .then(function() {\n const modal = openProgressModal(type.value, inst.name, true);\n\n const query = repairConnectorQuery(inst.name, type.value);\n\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: query}))\n .then(function() {\n ConnectorsRestService.getConnectors().then(function() {\n ConnectorsRestService.hasConnector(encodeURIComponent(type.value)).then(function(res) {\n $scope.existing[type.key] = res.data;\n });\n });\n toastr.success($translate.instant('externalsync.repair.success.msg', {name: inst.name}));\n }, function(err) {\n toastr.error(getError(err));\n }).finally(function() {\n modal.dismiss('cancel');\n });\n });\n };\n\n $scope.delete = function(inst, type) {\n const isExternal = type.key.indexOf(\"Elastic\") >= 0 || type.key.indexOf(\"Solr\") >= 0;\n\n $uibModal.open({\n templateUrl: 'js/angular/externalsync/templates/deleteConnector.html',\n controller: 'DeleteConnectorCtrl',\n resolve: {\n popoverMsg: function() {\n return isExternal ? $translate.instant('delete.connector.conditional', {type: type.key}) : '';\n },\n },\n }).result\n .then(function(force) {\n $scope.setLoader(true, $translate.instant('externalsync.delete.progress.msg', {name: inst.name}),\n $translate.instant('externalsync.extra.message.warning'));\n\n const query = deleteConnectorQuery(inst.name, type.value, force);\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: query}))\n .then(function() {\n ConnectorsRestService.getConnectors().then(function() {\n ConnectorsRestService.hasConnector(encodeURIComponent(type.value)).then(function(res) {\n $scope.existing[type.key] = res.data;\n });\n });\n if (force) {\n toastr.success($translate.instant('externalsync.delete.force.success.msg', {name: inst.name}));\n if (isExternal) {\n toastr.warning($translate.instant('externalsync.delete.remote.warning', {key: type.key}));\n }\n } else {\n toastr.success($translate.instant('externalsync.delete.success.msg', {name: inst.name}));\n }\n }, function(err) {\n toastr.error(getError(err));\n }).finally(function() {\n $scope.setLoader(false);\n });\n });\n };\n\n $scope.viewQuery = function(connector, inst) {\n $uibModal.open({\n templateUrl: 'pages/viewQuery.html',\n controller: 'ViewQueryCtrl',\n resolve: {\n query: function() {\n const options = $scope.getOptions(connector);\n return createConnectorQuery(inst.name, connector.value,\n mapCreateValuesToUiValues(inst.values, options), options);\n },\n },\n });\n };\n}\n\nDeleteConnectorCtrl.$inject = ['$scope', '$uibModalInstance', 'popoverMsg'];\nfunction DeleteConnectorCtrl($scope, $uibModalInstance, popoverMsg) {\n $scope.force = false;\n $scope.popoverMsg = popoverMsg;\n\n $scope.ok = function() {\n $uibModalInstance.close($scope.force);\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss();\n };\n}\n\nExtendNewConnectorCtrl.$inject = ['$scope', '$uibModalInstance', 'connector', '$uibModal', 'toastr'];\nfunction ExtendNewConnectorCtrl($scope, $uibModalInstance, connector, $uibModal, toastr) {\n $scope.connector = connector;\n\n $scope.addField = function(index, optionName) {\n const newField = _.cloneDeep($scope.defaultValues[optionName][0]);\n $scope.values[optionName].splice(index + 1, 0, newField);\n };\n\n $scope.addOption = function(index, array) {\n array.splice(index + 1, 0, '');\n };\n\n $scope.deleteOption = function(index, array) {\n array.splice(index, 1);\n };\n\n $scope.addMapOption = function(index, array) {\n array.splice(index + 1, 0, {key: '', value: ''});\n };\n\n $scope.deleteMapOption = function(index, array) {\n array.splice(index, 1);\n };\n\n function toQuery() {\n return createConnectorQuery($scope.name, connector.value, $scope.values, $scope.options,\n function(label, error) {\n toastr.error(error, label);\n });\n }\n\n $scope.ok = function() {\n if ($scope.form.$valid) {\n const query = toQuery();\n\n if (query) {\n $uibModalInstance.close({name: $scope.name, values: $scope.values, options: $scope.options, query: query});\n }\n }\n };\n\n $scope.viewQuery = function() {\n const query = toQuery();\n\n if (query) {\n $uibModal.open({\n templateUrl: 'pages/viewQuery.html',\n controller: 'ViewQueryCtrl',\n resolve: {\n query: function() {\n return query;\n },\n },\n });\n }\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nCreateConnectorCtrl.$inject = ['$scope', '$controller', '$http', '$uibModalInstance', 'connector', '$uibModal', 'values', 'options'];\n\nfunction CreateConnectorCtrl($scope, $controller, $http, $uibModalInstance, connector, $uibModal, values, options) {\n angular.extend(this, $controller('ExtendNewConnectorCtrl', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n connector: connector,\n $uibModal: $uibModal,\n }));\n $scope.values = values.values;\n $scope.options = options;\n $scope.name = values.name;\n if (!values.skipConversion) {\n $scope.values = mapCreateValuesToUiValues($scope.values, $scope.options);\n }\n $scope.defaultValues = _.cloneDeep($scope.values);\n}\n\n// Note that this is a fancy controller: it's used both for a modal and for a directive.\n// This means you can't rely on custom injection through resolve in the modal and the scope\n// must be shared with the main connectors controller.\nCreateProgressCtrl.$inject = ['$scope', '$interval', '$http', '$repositories', '$translate'];\n\nfunction CreateProgressCtrl($scope, $interval, $http, $repositories, $translate) {\n function evaluateSparqlQuery(query) {\n return _evaluateSparqlQuery($http, $repositories.getActiveRepository(), query);\n }\n\n function initProgress() {\n const query = createStatusQueryForIri($scope.beingBuiltConnector.iri);\n\n // reset iri value so that watch will fire again when we do something with the same connector\n $scope.beingBuiltConnector.iri = null;\n\n $scope.progressInterval = $interval(function() {\n function getFirstStatusFromResult(results) {\n if (results.bindings) {\n if (results.bindings.length > 0) {\n try {\n return JSON.parse(results.bindings[0].status.value);\n } catch (e) {\n logger.error(e);\n }\n }\n }\n\n return {};\n }\n\n evaluateSparqlQuery(query)\n .then(function(res) {\n const status = getFirstStatusFromResult(res.data.results);\n if (status.status === 'BUILDING') {\n $scope.beingBuiltConnector.status = status;\n $scope.beingBuiltConnector.percentDone = (100 * status.processedEntities / status.estimatedEntities).toFixed(0);\n $scope.beingBuiltConnector.eta = $scope.getHumanReadableSeconds(status.etaSeconds);\n $scope.beingBuiltConnector.actionName = status.repair ? $translate.instant('externalsync.repairing') : $translate.instant('externalsync.creating');\n $scope.beingBuiltConnector.waitOnRepairStartOnce = false;\n } else if (status.status === 'BUILT' && !$scope.beingBuiltConnector.waitOnRepairStartOnce) {\n // done\n $interval.cancel($scope.progressInterval);\n if ($scope.beingBuiltConnector.doneCallback) {\n $scope.beingBuiltConnector.doneCallback();\n }\n }\n });\n }, 1000);\n\n $scope.$on('$destroy', function() {\n $interval.cancel($scope.progressInterval);\n });\n }\n\n $scope.beingBuiltConnector = $scope.beingBuiltConnector || {};\n\n // for modal instance we get the iri before hand and can start progress now\n if (!$scope.beingBuiltConnector.inline && $scope.beingBuiltConnector.iri) {\n initProgress();\n }\n\n // for inline progress we need to watch for the iri value\n $scope.$watch('beingBuiltConnector.iri', function(value) {\n if ($scope.beingBuiltConnector.inline && value) {\n initProgress();\n }\n });\n}\n\nfunction ceil() {\n return function(input) {\n return Math.ceil(input);\n };\n}\n","angular\n .module('graphdb.framework.rest.connectors.service', [])\n .factory('ConnectorsRestService', ConnectorsRestService);\n\nConnectorsRestService.$inject = ['$http'];\n\nconst CONNECTORS_ENDPOINT = 'rest/connectors';\n\nfunction ConnectorsRestService($http) {\n\n return {\n getConnectors,\n initConnector,\n hasConnector,\n checkConnector\n };\n\n /**\n * Fetches all connectors for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code>.\n * If the repository ID and repository location are not provided, the values persisted in local storage will be used {@see authentication.interceptor.js}.\n *\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {*} The similarity indexes for the specified repository.\n */\n function getConnectors(repositoryId, repositoryLocation) {\n if (repositoryId) {\n return $http.get(CONNECTORS_ENDPOINT, {\n headers: {\n 'X-GraphDB-Repository': repositoryId,\n 'X-GraphDB-Repository-Location': repositoryLocation\n }\n });\n }\n return $http.get(CONNECTORS_ENDPOINT);\n }\n\n function initConnector(prefix) {\n return $http.get(`${CONNECTORS_ENDPOINT}/options?prefix=${prefix}`);\n }\n\n /**\n * Fetches all connectors of a specific type defined by the prefix for the repository with id <code>repositoryId</code>\n * and location <code>repositoryLocation</code>. If the repository ID and repository location are not provided, the currently selected repository will be used.\n * @param {string} prefix\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<ConnectorListModel>}\n */\n function hasConnector(prefix, repositoryId, repositoryLocation) {\n if (repositoryId) {\n return $http.get(`${CONNECTORS_ENDPOINT}/existing?prefix=${prefix}`, {\n headers: {\n 'X-GraphDB-Repository': repositoryId,\n 'X-GraphDB-Repository-Location': repositoryLocation\n }\n });\n }\n return $http.get(`${CONNECTORS_ENDPOINT}/existing?prefix=${prefix}`);\n }\n\n function checkConnector(data) {\n return $http.post(`${CONNECTORS_ENDPOINT}/check`, data, {\n headers: {\n 'Content-Type': 'text/plain'\n }\n });\n }\n}\n"],"names":["logger","LoggerProvider","SENSITIVE_FIELD_MASK","jsonToFormData","data","str","Object","keys","forEach","key","push","encodeURIComponent","join","toArrayMap","map","_","value","fromArrayMap","arrayMap","$translate","reduce","acc","Error","instant","hasOwnProperty","mapCreateValuesToUiValues","values","options","i","length","option","__type","__name","j","__childOptions","child","k","valueK","angular","isDefined","__defaultValue","optionEl","isUndefined","String","toJson","_evaluateSparqlQuery","http","repository","query","post","headers","buildNamePrefix","prefix","substring","createConnectorQuery","name","fields","reportError","fcopy","sortObject","obj","newObject","each","childOption","cloneDeep","fromJson","__sensitive","e","__label","message","removeEmptyValues","finalString","replaceAll","replace","Array","isArray","filter","item","trim","undefined","ConnectorsCtrl","$scope","$http","$repositories","$uibModal","toastr","ModalService","$q","RDF4JRepositoriesRestService","ConnectorsRestService","resetProgress","repair","beingBuiltConnector","percentDone","status","processedEntities","estimatedEntities","indexedEntities","entitiesPerSecond","actionName","waitOnRepairStartOnce","eta","inline","iri","openProgressModal","$","extend","doneCallback","modalInstance","dismiss","open","templateUrl","controller","size","backdrop","scope","executeCreate","connector","errorCallback","modal","addStatements","getActiveRepository","update","then","getConnectors","hasConnector","res","existing","success","err","error","getError","finally","loader","controllers","definitions","getLoaderMessage","timeSeconds","Date","now","loaderStartTime","timeHuman","getHumanReadableSeconds","progressMessage","extraMessage","setLoader","isRunning","initConnector","isLicenseValid","canWriteActiveRepo","connectors","all","connectorIris","createStatusQueryForAny","evaluateSparqlQuery","results","bindings","statusObject","JSON","parse","parseFirstBuildingResult","d","split","catch","getOptions","isEmpty","isObject","toPrettyJson","$watch","getActiveLocation","copyConnector","newValues","resolve","result","skipConversion","newConnector","inst","type","openSimpleModal","title","warning","delete","isExternal","indexOf","popoverMsg","force","namePrefix","deleteConnectorQuery","viewQuery","DeleteConnectorCtrl","$uibModalInstance","ok","close","cancel","ExtendNewConnectorCtrl","toQuery","label","addField","index","optionName","newField","defaultValues","splice","addOption","array","deleteOption","addMapOption","deleteMapOption","form","$valid","CreateConnectorCtrl","$controller","this","CreateProgressCtrl","$interval","initProgress","statusIri","createStatusQueryForIri","progressInterval","getFirstStatusFromResult","toFixed","etaSeconds","$on","module","input","Math","ceil","$inject","factory","CONNECTORS_ENDPOINT","repositoryId","repositoryLocation","get","checkConnector"],"sourceRoot":""}
|