graphdb-workbench 3.5.1-TR3 → 3.5.1
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.fba061d1e333d77d2644.bundle.js} +2 -2
- package/dist/{64709.d6d3d413c90077b5d0cc.bundle.js.map → 64709.fba061d1e333d77d2644.bundle.js.map} +1 -1
- package/dist/65677.646a9ee2a63ba19c0fd3.bundle.js +2 -0
- package/dist/65677.646a9ee2a63ba19c0fd3.bundle.js.map +1 -0
- package/dist/73334.1487d58b7e885510d107.bundle.js +2 -0
- package/dist/73334.1487d58b7e885510d107.bundle.js.map +1 -0
- package/dist/80933.542ad26ccd92fdc2c05d.bundle.js +2 -0
- package/dist/80933.542ad26ccd92fdc2c05d.bundle.js.map +1 -0
- package/dist/82917.020f840fc63c2066169e.bundle.js +2 -0
- package/dist/{82917.c97f7cec0372ff2f6fdd.bundle.js.map → 82917.020f840fc63c2066169e.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.959943bc458a7ef148e9.bundle.js +2 -0
- package/dist/86099.959943bc458a7ef148e9.bundle.js.map +1 -0
- 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.22aacd4da951e43b2876.js +3 -0
- package/dist/{legacyWorkbench.cdb2fb6bc573f9a9b49d.js.map → legacyWorkbench.22aacd4da951e43b2876.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/65677.0e8ab27737300e991c60.bundle.js +0 -2
- package/dist/65677.0e8ab27737300e991c60.bundle.js.map +0 -1
- package/dist/73334.1b0e8bb637fbd1ce73ef.bundle.js +0 -2
- package/dist/73334.1b0e8bb637fbd1ce73ef.bundle.js.map +0 -1
- package/dist/80933.bd439bb6f5fad66637ac.bundle.js +0 -2
- package/dist/80933.bd439bb6f5fad66637ac.bundle.js.map +0 -1
- package/dist/82917.c97f7cec0372ff2f6fdd.bundle.js +0 -2
- package/dist/85698.ee9962969a310107ccf8.bundle.js +0 -2
- package/dist/85698.ee9962969a310107ccf8.bundle.js.map +0 -1
- package/dist/86099.ab3779d6538a6648b2b7.bundle.js +0 -2
- package/dist/86099.ab3779d6538a6648b2b7.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 +0 -3
- /package/dist/{legacyWorkbench.cdb2fb6bc573f9a9b49d.js.LICENSE.txt → legacyWorkbench.22aacd4da951e43b2876.js.LICENSE.txt} +0 -0
- /package/dist/{main.8dd8af071ff43504a729.js.LICENSE.txt → main.3665e695a5c0d2e9b4c0.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"65677.646a9ee2a63ba19c0fd3.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\");\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,a=!0){const s=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?s[o[n].__name]=c(s[o[n].__name],$translate):"JsonString"===o[n].__type?s[o[n].__name]=angular.fromJson(s[o[n].__name]):a&&!0===o[n].__sensitive&&s[o[n].__name]&&(s[o[n].__name]=r)}catch(e){return i(o[n].__label,e.message),null}f(s);let l="";return l+="PREFIX :<"+e+">\n",l+="PREFIX inst:<"+u(e)+">\n",l+="INSERT DATA {\n",l+="\tinst:"+n+" :createConnector '''\n",l+=angular.toJson(s,2),l=l.replaceAll(`"${r}"`,r),l+="\n''' .\n}\n",l=l.replace(/\\/g,"\\\\\\"),l}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(e=!0){return p(n.name,t.value,n.values,n.options,function(n,e){r.error(e,n)},e)}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(!1);t&&e.close({name:n.name,values:n.values,options:n.options,query:t})}},n.viewQuery=function(){const n=i(!0);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.1487d58b7e885510d107.bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"73334.1487d58b7e885510d107.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, maskSensitiveFields = true) {\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 (maskSensitiveFields && 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(maskSensitiveFields = true) {\n return createConnectorQuery($scope.name, connector.value, $scope.values, $scope.options,\n function(label, error) {\n toastr.error(error, label);\n }, maskSensitiveFields);\n }\n\n $scope.ok = function() {\n if ($scope.form.$valid) {\n const query = toQuery(false);\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(true);\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","maskSensitiveFields","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":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_id__=80933;export const __webpack_esm_ids__=[28662,64709,78469,80933,83847];export const __webpack_esm_modules__={80933(e,r,o){o(22742),o(33136),o(41559),o(83847),o(64709),o(72953),o(75752),o(21146),o(63030),angular.module("graphdb.framework.impex.import",["toastr","ngRoute","ngFileUpload","ui.bootstrap","graphdb.framework.impex.import.controllers","graphdb.framework.core.services.repositories","graphdb.framework.import.directives.validate-uri","graphdb.framework.import.directives.import-progress-indicator","graphdb.framework.import.directives.import-resource-tree"])},78469(e,r,o){var t=o(71315);angular.module("graphdb.framework.impex.import.controllers.import-resource-message-dialog",[]).controller("ImportResourceMessageDialogController",i),i.$inject=["$scope","$uibModalInstance","$translate","toastr","message"];const s=t.I.logger;function i(e,r,o,t,i){e.message=i,e.close=()=>{r.dismiss()},e.copyToClipboard=()=>{navigator.clipboard.writeText(e.message).then(()=>{t.success(o.instant("import.help.messages.copied_to_clipboard")),e.close()},e=>{s.error("Could not copy text: ",e)})}}},64709(){function e(){return{link:function(e,r,o){e.$watch("file.status",function(){"IMPORTING"!==e.file.status&&"UPLOADING"!==e.file.status||!$(r).has("object").length>0&&$(r).append('<object width="'+o.size+'" height="'+o.size+'" data="js/angular/templates/loader/ot-loader.svg?v=3.5.1">{{\'common.loading\' | translate}}</object>')})}}}angular.module("graphdb.framework.import.directives.import-progress-indicator",[]).directive("ImportProgressIndicator",e),e.$inject=[]},60016(e,r,o){o(78469);var t=o(2998),s=o(35195);function i(e){return{restrict:"E",templateUrl:"js/angular/import/templates/import-resource-message.html",scope:{resource:"="},link:r=>{r.ImportResourceStatus=t.I,r.toTitleCase=e=>s.Sn(e),r.showMessage=r=>{e.open({templateUrl:"js/angular/import/templates/import-resource-message-dialog.html",controller:"ImportResourceMessageDialogController",size:"lg",windowClass:"import-resource-message-dialog",backdrop:"static",resolve:{message:function(){return r?r.importResource.message:""}}})}}}}angular.module("graphdb.framework.import.directives.import-resource-message",["graphdb.framework.impex.import.controllers.import-resource-message-dialog"]).directive("importResourceMessage",i),i.$inject=["$uibModal"]},28662(){function e(e,r){return{restrict:"E",templateUrl:"js/angular/import/templates/import-resource-status-info.html",scope:{resource:"="},link:o=>{const t=[];o.popoverTemplate="resourceStatusInfoTemplate.html",o.popoverIsOpen=!1,o.context=o.resource.importResource.context,o.replaceGraphs=o.resource.importResource.replaceGraphs,o.baseUrl=decodeURIComponent(o.resource.importResource.baseURI),o.forceSerial=o.resource.importResource.forceSerial,o.importedOn=o.resource.importResource.importedOn,o.parserSettings=o.resource.importResource.parserSettings,o.open=()=>{o.closeAllDialogs(),o.popoverIsOpen=!0},o.closeAllDialogs=()=>{e.$broadcast("closePopovers")},o.close=()=>{o.popoverIsOpen=!1};const s=e=>{"Escape"===e.key&&o.$apply(()=>{o.close()})};t.push(o.$on("closePopovers",o.close)),r.on("keydown",s),o.$on("$destroy",()=>{r.off("keydown",s),t.forEach(e=>e())})}}}angular.module("graphdb.framework.import.directives.import-resource-status-info",[]).directive("importResourceStatusInfo",e),e.$inject=["$rootScope","$document"]},72953(e,r,o){var t=o(2998),s=(o(60016),o(28662),o(66256)),i=o(71609),c=o(59601),a=o(33757),l=o(57154);const p={FILE:"FILE",DIRECTORY:"DIRECTORY",ALL:"ALL"},n={ALL:"ALL",NONE:"NONE",IMPORTED:"IMPORTED",NOT_IMPORTED:"NOT_IMPORTED"};function u(e,r){return{restrict:"E",templateUrl:"js/angular/import/templates/import-resource-tree.html",scope:{columnKeys:"=",showTypeFilter:"=",sortBy:"=",asc:"=",onImport:"&",onImportAll:"&",onReset:"&",onRemove:"&",onStopImport:"&",onEditResource:"&"},link:(o,u,m)=>{o.resources=new i.k,o.displayResources=[],o.TYPE_FILTER_OPTIONS=p,o.filterByType=p.ALL,o.filterByFileName="",o.STATUS_OPTIONS=n,o.selectedByStatus=void 0,o.areAllDisplayedImportResourcesSelected=!1,o.areAllDisplayedImportResourcesPartialSelected=!1,o.ImportResourceStatus=t.I,o.canRemoveResource=angular.isDefined(m.onRemove),o.canResetSelectedResources=!1,o.SORTING_TYPES=s.R,o.sortAsc=!angular.isDefined(m.asc)||o.asc,o.sortedBy=o.sortBy,o.showLoader=r.getShowLoader(),o.hasSelection=!1,o.selectionChanged=e=>{e.setSelection(e.selected),I(),d(),g()},o.selectResourceWithStatus=e=>{o.selectedByStatus=e,o.resources.setSelection(!1),n.ALL===o.selectedByStatus?o.resources.setSelection(!0):n.IMPORTED===o.selectedByStatus?o.resources.selectAllWithStatus([t.I.DONE]):n.NOT_IMPORTED===o.selectedByStatus&&o.resources.selectAllWithStatus([t.I.IMPORTING,t.I.NONE,t.I.ERROR,t.I.PENDING,t.I.INTERRUPTING]),R(),d()},o.filterByTypeChanged=e=>{o.filterByType=e,R()},o.filterByFileNameChanged=e=>{o.filterByFileName=e,N(R,100)},o.onResetStatus=()=>{const e=o.resources.getAllSelected().map(e=>e.path);e.length>0&&o.onReset({resources:e})},o.resetStatus=e=>{o.onReset({resources:[e.path]})},o.onRemoveResources=()=>{const e=o.resources.getAllSelected();e&&e.length>0&&o.onRemove({resources:e})},o.removeResource=e=>{o.onRemove({resources:[e]})},o.importAll=e=>{const r=o.resources.getAllSelectedForImport();r.length>0&&o.onImportAll({selectedResources:r,withoutChangingSettings:e})},o.stopImport=e=>{o.onStopImport({resource:e})},o.sort=e=>{o.sortedBy===e?o.sortAsc=!o.sortAsc:o.sortAsc=!0,o.sortedBy=e,R()},o.editResource=e=>{o.onEditResource({resource:e})};const d=()=>{o.canResetSelectedResources=o.resources.getSelectedImportedResources()},R=()=>{o.resources.getRoot().updateSelectionState(),y(),o.displayResources=o.resources.toList().filter(A).filter(E),g(),I()},g=()=>{const e=o.resources.getAllSelectedFilesNames();o.hasSelection=e.length>0,r.updateSelectedFilesNames(e)},I=()=>{const e=o.displayResources.some(e=>!e.selected),r=o.displayResources.some(e=>e.selected);o.areAllDisplayedImportResourcesSelected=r&&!e,o.areAllDisplayedImportResourcesPartialSelected=r&&e},y=()=>{s.R.NAME===o.sortedBy?o.resources.sort(f(o.sortAsc)):s.R.SIZE===o.sortedBy?o.resources.sort(h(o.sortAsc)):s.R.MODIFIED===o.sortedBy?o.resources.sort(S(o.sortAsc)):s.R.IMPORTED===o.sortedBy?o.resources.sort(T(o.sortAsc)):s.R.CONTEXT===o.sortedBy&&o.resources.sort(v(o.sortAsc))},f=e=>(r,o)=>e?r.importResource.name.localeCompare(o.importResource.name):o.importResource.name.localeCompare(r.importResource.name),h=e=>(r,o)=>{const t=l.ByteUtils.convertToBytes(r.importResource.size),s=l.ByteUtils.convertToBytes(o.importResource.size);return e?t-s:s-t},S=e=>(r,o)=>{const t=r.importResource.modifiedOn||Number.MAX_VALUE,s=o.importResource.modifiedOn||Number.MAX_VALUE;return e?t-s:s-t},T=e=>(r,o)=>{const t=r.importResource.importedOn||Number.MAX_VALUE,s=o.importResource.importedOn||Number.MAX_VALUE;return e?t-s:s-t},v=e=>(r,o)=>e?r.importResource.context.localeCompare(o.importResource.context):o.importResource.context.localeCompare(r.importResource.context),A=e=>p.ALL===o.filterByType||(o.filterByType===p.FILE?e.isFile():o.filterByType===p.DIRECTORY&&e.isDirectory()),E=e=>!o.filterByFileName||(o.filterByType===p.DIRECTORY?e.hasTextInDirectoriesName(o.filterByFileName):o.filterByType===p.FILE?e.hasTextInFilesName(o.filterByFileName):e.hasTextInResourcesName(o.filterByFileName));let O;const N=(r,o)=>{O&&e.cancel(O),O=e(r,o)},b=[];b.push(r.onResourcesUpdated((e=[])=>{const t=c.D.USER===r.getActiveTabId();o.resources.isEmpty()?(o.resources=a.Fp.toImportResourceTree(e,t),t&&(o.sortedBy=s.R.MODIFIED)):a.Fp.mergeResourceTree(o.resources,e,t),a.Fp.calculateElementIndent(o.resources),a.Fp.setupAfterTreeInitProperties(o.resources),R(),d()})),b.push(r.onShowLoaderUpdated(e=>o.showLoader=e)),b.push(r.onActiveTabIdUpdated(()=>o.resources=new i.k)),o.$on("$destroy",()=>{b.forEach(e=>e())})}}}angular.module("graphdb.framework.import.directives.import-resource-tree",["graphdb.framework.import.directives.import-resource-message","graphdb.framework.import.directives.import-resource-status-info"]).directive("importResourceTree",u),u.$inject=["$timeout","ImportContextService"]},83847(){function e(e){return{restrict:"A",require:"ngModel",link:function(r,o,t,s){s.$parsers.unshift(function(r){if(s.$setValidity("validateUri",!0),!s.$isEmpty(r)){const o=e.isValidIri(r,r.toString());s.$setValidity("validateUri",o)}return r})}}}angular.module("graphdb.framework.import.directives.validate-uri",[]).directive("validateUri",e),e.$inject=["UriUtils"]}};
|
|
2
|
+
//# sourceMappingURL=80933.542ad26ccd92fdc2c05d.bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"80933.542ad26ccd92fdc2c05d.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/import/app.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/import/controllers/import-resource-message-dialog.controller.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/import/directives/import-progress-indicator.directive.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/import/directives/import-resource-message.directive.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/import/directives/import-resource-status-info.directive.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/import/directives/import-resource-tree.directive.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/import/directives/validate-uri.directive.js"],"sourcesContent":["import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/import/controllers/import-view.controller';\nimport 'angular/import/directives/validate-uri.directive';\nimport 'angular/import/directives/import-progress-indicator.directive';\nimport 'angular/import/directives/import-resource-tree.directive';\nimport 'angular/core/services/repositories.service';\nimport 'ng-file-upload/dist/ng-file-upload.min';\nimport 'ng-file-upload/dist/ng-file-upload-shim.min';\n\nconst modules = [\n 'toastr',\n 'ngRoute',\n 'ngFileUpload',\n 'ui.bootstrap',\n 'graphdb.framework.impex.import.controllers',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.import.directives.validate-uri',\n 'graphdb.framework.import.directives.import-progress-indicator',\n 'graphdb.framework.import.directives.import-resource-tree'\n];\n\nangular.module('graphdb.framework.impex.import', modules);\n","import {LoggerProvider} from \"../../core/services/logger-provider\";\n\nangular\n .module('graphdb.framework.impex.import.controllers.import-resource-message-dialog', [])\n .controller('ImportResourceMessageDialogController', ImportResourceMessageDialogController);\n\nImportResourceMessageDialogController.$inject = ['$scope', '$uibModalInstance', '$translate', 'toastr', 'message'];\n\nconst logger = LoggerProvider.logger;\n\nfunction ImportResourceMessageDialogController($scope, $uibModalInstance, $translate, toastr, message) {\n $scope.message = message;\n\n\n $scope.close = () => {\n $uibModalInstance.dismiss();\n };\n\n $scope.copyToClipboard = () => {\n navigator.clipboard.writeText($scope.message)\n .then(() => {\n toastr.success($translate.instant('import.help.messages.copied_to_clipboard'));\n $scope.close();\n }, (err) => {\n logger.error('Could not copy text: ', err);\n });\n };\n}\n","const modules = [];\n\nangular\n .module('graphdb.framework.import.directives.import-progress-indicator', modules)\n .directive('ImportProgressIndicator', ImportProgressIndicator);\n\nImportProgressIndicator.$inject = [];\n\n// importDirectives.directive('filesOntoLoader',\nfunction ImportProgressIndicator() {\n return {\n link: function (scope, element, attr) {\n scope.$watch('file.status', function () {\n if (scope.file.status === 'IMPORTING' || scope.file.status === 'UPLOADING') {\n if (!$(element).has('object').length > 0) {\n $(element).append('<object width=\"' + attr.size + '\" height=\"' + attr.size + '\" data=\"js/angular/templates/loader/ot-loader.svg?v=3.5.1\">{{\\'common.loading\\' | translate}}</object>');\n }\n }\n });\n }\n };\n}\n","import 'angular/import/controllers/import-resource-message-dialog.controller';\nimport {ImportResourceStatus} from \"../../models/import/import-resource-status\";\nimport * as stringUtils from \"../../utils/string-utils\";\n\nconst modules = ['graphdb.framework.impex.import.controllers.import-resource-message-dialog'];\n\nangular\n .module('graphdb.framework.import.directives.import-resource-message', modules)\n .directive('importResourceMessage', importResourceMessageDirective);\n\nimportResourceMessageDirective.$inject = ['$uibModal'];\n\nfunction importResourceMessageDirective($uibModal) {\n return {\n restrict: 'E',\n templateUrl: 'js/angular/import/templates/import-resource-message.html',\n scope: {\n resource: '='\n },\n link: ($scope) => {\n $scope.ImportResourceStatus = ImportResourceStatus;\n $scope.toTitleCase = (str) => stringUtils.toTitleCase(str);\n\n /**\n *\n * @param {ImportResourceTreeElement} resourceTreeElement\n */\n $scope.showMessage = (resourceTreeElement) => {\n $uibModal.open({\n templateUrl: 'js/angular/import/templates/import-resource-message-dialog.html',\n controller: 'ImportResourceMessageDialogController',\n size: 'lg',\n windowClass: 'import-resource-message-dialog',\n backdrop: 'static',\n resolve: {\n message: function () {\n return resourceTreeElement ? resourceTreeElement.importResource.message : '';\n }\n }\n });\n }\n }\n };\n}\n","const modules = [];\n\nangular\n .module('graphdb.framework.import.directives.import-resource-status-info', modules)\n .directive('importResourceStatusInfo', importResourceStatusInfoDirective);\n\nimportResourceStatusInfoDirective.$inject = ['$rootScope', '$document'];\n\nfunction importResourceStatusInfoDirective($rootScope, $document) {\n return {\n restrict: 'E',\n templateUrl: 'js/angular/import/templates/import-resource-status-info.html',\n scope: {\n resource: '='\n },\n link: ($scope) => {\n const subscribers = [];\n\n // =========================\n // Public variables\n // =========================\n $scope.popoverTemplate = 'resourceStatusInfoTemplate.html';\n $scope.popoverIsOpen = false;\n $scope.context = $scope.resource.importResource.context;\n $scope.replaceGraphs = $scope.resource.importResource.replaceGraphs;\n $scope.baseUrl = decodeURIComponent($scope.resource.importResource.baseURI);\n $scope.forceSerial = $scope.resource.importResource.forceSerial;\n $scope.importedOn = $scope.resource.importResource.importedOn;\n $scope.parserSettings = $scope.resource.importResource.parserSettings;\n\n // =========================\n // Public functions\n // =========================\n $scope.open = () => {\n $scope.closeAllDialogs();\n $scope.popoverIsOpen = true;\n };\n\n $scope.closeAllDialogs = () => {\n $rootScope.$broadcast('closePopovers');\n };\n\n $scope.close = () => {\n $scope.popoverIsOpen = false;\n };\n\n const handleEscapeKeyPress = (event) => {\n if (event.key === 'Escape') {\n $scope.$apply(() => {\n $scope.close();\n });\n }\n };\n\n const removeAllSubscribers = () => {\n subscribers.forEach((subscriber) => subscriber());\n };\n\n // =========================\n // Subscriptions\n // =========================\n\n subscribers.push($scope.$on('closePopovers', $scope.close));\n $document.on('keydown', handleEscapeKeyPress);\n\n $scope.$on('$destroy', () => {\n $document.off('keydown', handleEscapeKeyPress);\n removeAllSubscribers();\n });\n }\n };\n}\n","import {ImportResourceStatus} from \"../../models/import/import-resource-status\";\nimport 'angular/import/directives/import-resource-message.directive';\nimport 'angular/import/directives/import-resource-status-info.directive';\nimport {SortingType} from \"../../models/import/sorting-type\";\nimport {ImportResourceTreeElement} from \"../../models/import/import-resource-tree-element\";\nimport {TABS} from \"../services/import-context.service\";\nimport {ImportResourceTreeService} from \"../services/import-resource-tree.service\";\nimport {\n ByteUtils,\n} from \"@ontotext/workbench-api\";\n\nconst TYPE_FILTER_OPTIONS = {\n 'FILE': 'FILE',\n 'DIRECTORY': 'DIRECTORY',\n 'ALL': 'ALL',\n};\n\nconst STATUS_OPTIONS = {\n 'ALL': 'ALL',\n 'NONE': 'NONE',\n 'IMPORTED': 'IMPORTED',\n 'NOT_IMPORTED': 'NOT_IMPORTED',\n};\n\nconst modules = [\n 'graphdb.framework.import.directives.import-resource-message',\n 'graphdb.framework.import.directives.import-resource-status-info',\n];\n\nangular\n .module('graphdb.framework.import.directives.import-resource-tree', modules)\n .directive('importResourceTree', importResourceTreeDirective);\n\nimportResourceTreeDirective.$inject = ['$timeout', 'ImportContextService'];\n\nfunction importResourceTreeDirective($timeout, ImportContextService) {\n return {\n restrict: 'E',\n templateUrl: 'js/angular/import/templates/import-resource-tree.html',\n scope: {\n /**\n * Contains mapping of the column names to label keys. Should contain\n * keys for: name, size, imported, modified, context column names.\n */\n columnKeys: '=',\n /**\n * If the type filter buttons should be visible.\n */\n showTypeFilter: '=',\n /**\n * The default field to sort the resources by.\n */\n sortBy: '=',\n asc: '=',\n onImport: '&',\n onImportAll: '&',\n onReset: '&',\n onRemove: '&',\n onStopImport: '&',\n onEditResource: '&',\n },\n link: ($scope, element, attrs) => {\n // =========================\n // Public variables\n // =========================\n $scope.resources = new ImportResourceTreeElement();\n $scope.displayResources = [];\n $scope.TYPE_FILTER_OPTIONS = TYPE_FILTER_OPTIONS;\n $scope.filterByType = TYPE_FILTER_OPTIONS.ALL;\n $scope.filterByFileName = '';\n $scope.STATUS_OPTIONS = STATUS_OPTIONS;\n $scope.selectedByStatus = undefined;\n $scope.areAllDisplayedImportResourcesSelected = false;\n $scope.areAllDisplayedImportResourcesPartialSelected = false;\n $scope.ImportResourceStatus = ImportResourceStatus;\n $scope.canRemoveResource = angular.isDefined(attrs.onRemove);\n $scope.canResetSelectedResources = false;\n $scope.SORTING_TYPES = SortingType;\n $scope.sortAsc = angular.isDefined(attrs.asc) ? $scope.asc : true;\n $scope.sortedBy = $scope.sortBy;\n $scope.showLoader = ImportContextService.getShowLoader();\n $scope.hasSelection = false;\n\n // =========================\n // Public functions\n // =========================\n\n /**\n * Updates the selection model when a resource is selected or unselected.\n * @param {ImportResourceTreeElement} resource The resource that was selected or unselected.\n */\n $scope.selectionChanged = ((resource) => {\n resource.setSelection(resource.selected);\n updateSelectByStateDropdownModel();\n setCanResetResourcesFlag();\n updateHasSelection();\n });\n\n $scope.selectResourceWithStatus = (resourceStatus) => {\n $scope.selectedByStatus = resourceStatus;\n $scope.resources.setSelection(false);\n\n if (STATUS_OPTIONS.ALL === $scope.selectedByStatus) {\n $scope.resources.setSelection(true);\n } else if (STATUS_OPTIONS.IMPORTED === $scope.selectedByStatus) {\n $scope.resources.selectAllWithStatus([ImportResourceStatus.DONE]);\n } else if (STATUS_OPTIONS.NOT_IMPORTED === $scope.selectedByStatus) {\n $scope.resources.selectAllWithStatus([ImportResourceStatus.IMPORTING, ImportResourceStatus.NONE, ImportResourceStatus.ERROR, ImportResourceStatus.PENDING, ImportResourceStatus.INTERRUPTING]);\n }\n\n updateListedImportResources();\n setCanResetResourcesFlag();\n };\n\n $scope.filterByTypeChanged = (newType) => {\n $scope.filterByType = newType;\n updateListedImportResources();\n };\n\n $scope.filterByFileNameChanged = (filterByFileName) => {\n $scope.filterByFileName = filterByFileName;\n debounce(updateListedImportResources, 100);\n };\n\n /**\n * Resets the status of the selected resources.\n */\n $scope.onResetStatus = () => {\n const resourcesNames = $scope.resources.getAllSelected()\n .map((resource) => resource.path);\n if (resourcesNames.length > 0) {\n $scope.onReset({resources: resourcesNames});\n }\n };\n\n /**\n * Resets the status of the given resource.\n * @param {ImportResourceTreeElement} importResource\n */\n $scope.resetStatus = (importResource) => {\n $scope.onReset({resources: [importResource.path]});\n };\n\n $scope.onRemoveResources = () => {\n const selectedResources = $scope.resources.getAllSelected();\n if (selectedResources && selectedResources.length > 0) {\n $scope.onRemove({resources: selectedResources});\n }\n };\n\n $scope.removeResource = (resource) => {\n $scope.onRemove({resources: [resource]});\n };\n\n $scope.importAll = (withoutChangingSettings) => {\n const selectedResources = $scope.resources.getAllSelectedForImport();\n if (selectedResources.length > 0) {\n $scope.onImportAll({selectedResources: selectedResources, withoutChangingSettings});\n }\n };\n\n $scope.stopImport = (importResource) => {\n $scope.onStopImport({resource: importResource});\n };\n\n /**\n * Sorts resources by provided sorting type.\n * @param {SortingType} sortedBy The sorting type to use.\n */\n $scope.sort = (sortedBy) => {\n if ($scope.sortedBy === sortedBy) {\n $scope.sortAsc = !$scope.sortAsc;\n } else {\n $scope.sortAsc = true;\n }\n $scope.sortedBy = sortedBy;\n updateListedImportResources();\n };\n\n $scope.editResource = (resource) => {\n $scope.onEditResource({resource});\n };\n\n // =========================\n // Private functions\n // =========================\n\n /**\n * Sets the flag showing if any of the selected resources is already imported\n * and can have their states reset.\n */\n const setCanResetResourcesFlag = () => {\n $scope.canResetSelectedResources = $scope.resources.getSelectedImportedResources();\n };\n\n const updateListedImportResources = () => {\n $scope.resources.getRoot().updateSelectionState();\n sortResources();\n $scope.displayResources = $scope.resources.toList()\n .filter(filterByType)\n .filter(filterByName);\n\n updateHasSelection();\n updateSelectByStateDropdownModel();\n };\n\n const updateHasSelection = () => {\n const allSelectedFilesNames = $scope.resources.getAllSelectedFilesNames();\n $scope.hasSelection = allSelectedFilesNames.length > 0;\n ImportContextService.updateSelectedFilesNames(allSelectedFilesNames);\n };\n\n const updateSelectByStateDropdownModel = () => {\n const hasUnselectedDisplayedImportResource = $scope.displayResources.some((resource) => !resource.selected);\n const hasSelectedDisplayedImportResource = $scope.displayResources.some((resource) => resource.selected);\n $scope.areAllDisplayedImportResourcesSelected = hasSelectedDisplayedImportResource && !hasUnselectedDisplayedImportResource;\n $scope.areAllDisplayedImportResourcesPartialSelected = hasSelectedDisplayedImportResource && hasUnselectedDisplayedImportResource;\n };\n\n const sortResources = () => {\n if (SortingType.NAME === $scope.sortedBy) {\n $scope.resources.sort(compareByName($scope.sortAsc));\n } else if (SortingType.SIZE === $scope.sortedBy) {\n $scope.resources.sort(compareBySize($scope.sortAsc));\n } else if (SortingType.MODIFIED === $scope.sortedBy) {\n $scope.resources.sort(compareByModified($scope.sortAsc));\n } else if (SortingType.IMPORTED === $scope.sortedBy) {\n $scope.resources.sort(compareByImportedOn($scope.sortAsc));\n } else if (SortingType.CONTEXT === $scope.sortedBy) {\n $scope.resources.sort(compareByContext($scope.sortAsc));\n }\n };\n\n const compareByName = (acs) => (r1, r2) => {\n return acs ? r1.importResource.name.localeCompare(r2.importResource.name) : r2.importResource.name.localeCompare(r1.importResource.name);\n };\n\n const compareBySize = (acs) => (r1, r2) => {\n // The format of size returned by the backend has changed, but we need to keep the old format for backward compatibility.\n // Therefore, we convert the size to always be in bytes.\n const r1Size = ByteUtils.convertToBytes(r1.importResource.size);\n const r2Size = ByteUtils.convertToBytes(r2.importResource.size);\n return acs ? r1Size - r2Size : r2Size - r1Size;\n };\n\n const compareByModified = (acs) => (r1, r2) => {\n const r1ModifiedOn = r1.importResource.modifiedOn || Number.MAX_VALUE;\n const r2ModifiedOn = r2.importResource.modifiedOn || Number.MAX_VALUE;\n return acs ? r1ModifiedOn - r2ModifiedOn : r2ModifiedOn - r1ModifiedOn;\n };\n\n const compareByImportedOn = (acs) => (r1, r2) => {\n const r1ImportedOn = r1.importResource.importedOn || Number.MAX_VALUE;\n const r2ImportedOn = r2.importResource.importedOn || Number.MAX_VALUE;\n return acs ? r1ImportedOn - r2ImportedOn : r2ImportedOn - r1ImportedOn;\n };\n\n const compareByContext = (acs) => (r1, r2) => {\n return acs ? r1.importResource.context.localeCompare(r2.importResource.context) : r2.importResource.context.localeCompare(r1.importResource.context);\n };\n\n const filterByType = (resource) => {\n if (TYPE_FILTER_OPTIONS.ALL === $scope.filterByType) {\n return true;\n }\n\n if ($scope.filterByType === TYPE_FILTER_OPTIONS.FILE) {\n return resource.isFile();\n }\n\n if ($scope.filterByType === TYPE_FILTER_OPTIONS.DIRECTORY) {\n return resource.isDirectory();\n }\n\n return false;\n };\n\n const filterByName = (resource) => {\n if (!$scope.filterByFileName) {\n return true;\n }\n\n if ($scope.filterByType === TYPE_FILTER_OPTIONS.DIRECTORY) {\n return resource.hasTextInDirectoriesName($scope.filterByFileName);\n }\n\n if ($scope.filterByType === TYPE_FILTER_OPTIONS.FILE) {\n return resource.hasTextInFilesName($scope.filterByFileName);\n }\n return resource.hasTextInResourcesName($scope.filterByFileName);\n };\n\n let debounceTimeout;\n const debounce = (func, delay) => {\n // Clear previous timeout\n if (debounceTimeout) {\n $timeout.cancel(debounceTimeout);\n }\n\n // Set new timeout\n debounceTimeout = $timeout(func, delay);\n };\n\n // =========================\n // Subscription handlers\n // =========================\n\n const onResourcesUpdatedHandler = (newResources = []) => {\n const isUserImport = TABS.USER === ImportContextService.getActiveTabId();\n if ($scope.resources.isEmpty()) {\n $scope.resources = ImportResourceTreeService.toImportResourceTree(newResources, isUserImport);\n if (isUserImport) {\n $scope.sortedBy = SortingType.MODIFIED;\n }\n } else {\n ImportResourceTreeService.mergeResourceTree($scope.resources, newResources, isUserImport);\n }\n ImportResourceTreeService.calculateElementIndent($scope.resources);\n ImportResourceTreeService.setupAfterTreeInitProperties($scope.resources);\n updateListedImportResources();\n setCanResetResourcesFlag();\n };\n\n // =========================\n // Subscriptions\n // =========================\n const subscriptions = [];\n\n subscriptions.push(ImportContextService.onResourcesUpdated(onResourcesUpdatedHandler));\n subscriptions.push(ImportContextService.onShowLoaderUpdated((showLoader) => $scope.showLoader = showLoader));\n subscriptions.push(ImportContextService.onActiveTabIdUpdated(() => $scope.resources = new ImportResourceTreeElement()));\n\n const removeAllSubscribers = () => {\n subscriptions.forEach((subscription) => subscription());\n };\n\n // Deregister the watcher when the scope/directive is destroyed\n $scope.$on('$destroy', removeAllSubscribers);\n },\n };\n}\n","/**\n * This AngularJS directive validates whether an input value is a valid URI (IRI).\n *\n * @directive validateUri\n * @restrict A (Attribute)\n * @requires ngModel\n *\n * @example\n * <input type=\"text\" name=\"url\" ng-model=\"url\" validate-uri>\n */\nconst modules = [];\n\nangular\n .module('graphdb.framework.import.directives.validate-uri', modules)\n .directive('validateUri', validateUri);\n\nvalidateUri.$inject = ['UriUtils'];\n\n/**\n * @function validateUri\n * @param {UriUtils} UriUtils - Service for URI validation.\n */\nfunction validateUri(UriUtils) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, element, attr, ctrl) {\n ctrl.$parsers.unshift(function (value) {\n ctrl.$setValidity('validateUri', true);\n if (!ctrl.$isEmpty(value)) {\n const valid = UriUtils.isValidIri(value, value.toString());\n ctrl.$setValidity('validateUri', valid);\n }\n return value;\n });\n }\n };\n}\n"],"names":["angular","module","controller","ImportResourceMessageDialogController","$inject","logger","LoggerProvider","$scope","$uibModalInstance","$translate","toastr","message","close","dismiss","copyToClipboard","navigator","clipboard","writeText","then","success","instant","err","error","ImportProgressIndicator","link","scope","element","attr","$watch","file","status","$","has","length","append","size","directive","importResourceMessageDirective","$uibModal","restrict","templateUrl","resource","ImportResourceStatus","toTitleCase","str","stringUtils","showMessage","resourceTreeElement","open","windowClass","backdrop","resolve","importResource","importResourceStatusInfoDirective","$rootScope","$document","subscribers","popoverTemplate","popoverIsOpen","context","replaceGraphs","baseUrl","decodeURIComponent","baseURI","forceSerial","importedOn","parserSettings","closeAllDialogs","$broadcast","handleEscapeKeyPress","event","key","$apply","push","$on","on","off","forEach","subscriber","TYPE_FILTER_OPTIONS","STATUS_OPTIONS","importResourceTreeDirective","$timeout","ImportContextService","columnKeys","showTypeFilter","sortBy","asc","onImport","onImportAll","onReset","onRemove","onStopImport","onEditResource","attrs","resources","ImportResourceTreeElement","displayResources","filterByType","ALL","filterByFileName","selectedByStatus","undefined","areAllDisplayedImportResourcesSelected","areAllDisplayedImportResourcesPartialSelected","canRemoveResource","isDefined","canResetSelectedResources","SORTING_TYPES","SortingType","sortAsc","sortedBy","showLoader","getShowLoader","hasSelection","selectionChanged","setSelection","selected","updateSelectByStateDropdownModel","setCanResetResourcesFlag","updateHasSelection","selectResourceWithStatus","resourceStatus","IMPORTED","selectAllWithStatus","DONE","NOT_IMPORTED","IMPORTING","NONE","ERROR","PENDING","INTERRUPTING","updateListedImportResources","filterByTypeChanged","newType","filterByFileNameChanged","debounce","onResetStatus","resourcesNames","getAllSelected","map","path","resetStatus","onRemoveResources","selectedResources","removeResource","importAll","withoutChangingSettings","getAllSelectedForImport","stopImport","sort","editResource","getSelectedImportedResources","getRoot","updateSelectionState","sortResources","toList","filter","filterByName","allSelectedFilesNames","getAllSelectedFilesNames","updateSelectedFilesNames","hasUnselectedDisplayedImportResource","some","hasSelectedDisplayedImportResource","NAME","compareByName","SIZE","compareBySize","MODIFIED","compareByModified","compareByImportedOn","CONTEXT","compareByContext","acs","r1","r2","name","localeCompare","r1Size","ByteUtils","convertToBytes","r2Size","r1ModifiedOn","modifiedOn","Number","MAX_VALUE","r2ModifiedOn","r1ImportedOn","r2ImportedOn","FILE","isFile","DIRECTORY","isDirectory","hasTextInDirectoriesName","hasTextInFilesName","hasTextInResourcesName","debounceTimeout","func","delay","cancel","subscriptions","onResourcesUpdated","onResourcesUpdatedHandler","newResources","isUserImport","TABS","USER","getActiveTabId","isEmpty","ImportResourceTreeService","toImportResourceTree","mergeResourceTree","calculateElementIndent","setupAfterTreeInitProperties","onShowLoaderUpdated","onActiveTabIdUpdated","removeAllSubscribers","subscription","validateUri","UriUtils","require","ctrl","$parsers","unshift","value","$setValidity","$isEmpty","valid","isValidIri","toString"],"sourceRoot":""}
|