graphdb-workbench 2.3.0-TR7 → 2.3.0-TR9
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/{108.112426f55d9e34a78ab3.bundle.js → 108.7199f12abac98c8182cd.bundle.js} +1 -1
- package/dist/{108.112426f55d9e34a78ab3.bundle.js.map → 108.7199f12abac98c8182cd.bundle.js.map} +1 -1
- package/dist/11.4928d8d13ff46f3872bb.bundle.js +1 -1
- package/dist/11.4928d8d13ff46f3872bb.bundle.js.map +1 -1
- package/dist/148.45985ae23de642595544.bundle.js +1 -1
- package/dist/148.45985ae23de642595544.bundle.js.map +1 -1
- package/dist/20.4eb25ede434dc329ecf1.bundle.js +1 -1
- package/dist/20.4eb25ede434dc329ecf1.bundle.js.map +1 -1
- package/dist/{21.62777310f384dd7b71a4.bundle.js → 21.b8c57ce9c9688adcf29c.bundle.js} +1 -1
- package/dist/{21.62777310f384dd7b71a4.bundle.js.map → 21.b8c57ce9c9688adcf29c.bundle.js.map} +1 -1
- package/dist/27.fef157d9275358c9f1a0.bundle.js +1 -1
- package/dist/27.fef157d9275358c9f1a0.bundle.js.map +1 -1
- package/dist/33.fde8076c81c87c25c367.bundle.js +1 -1
- package/dist/33.fde8076c81c87c25c367.bundle.js.map +1 -1
- package/dist/4.ca3eb6b5da0890c0abe0.bundle.js +2 -0
- package/dist/4.ca3eb6b5da0890c0abe0.bundle.js.map +1 -0
- package/dist/40.10f42e3f6d8d87bd3221.bundle.js +1 -1
- package/dist/40.10f42e3f6d8d87bd3221.bundle.js.map +1 -1
- package/dist/5.5e565a2f6404b3c60148.bundle.js +2 -0
- package/dist/5.5e565a2f6404b3c60148.bundle.js.map +1 -0
- package/dist/94.94158487a9024ff3a623.bundle.js +1 -1
- package/dist/94.94158487a9024ff3a623.bundle.js.map +1 -1
- package/dist/{bundle.896281e5e7a26024597b.bundle.js → bundle.fc6270520d9d001d0ec0.bundle.js} +3 -3
- package/dist/{bundle.896281e5e7a26024597b.bundle.js.map → bundle.fc6270520d9d001d0ec0.bundle.js.map} +1 -1
- package/dist/i18n/locale-en.json +1 -1
- package/dist/i18n/locale-fr.json +1 -1
- package/dist/index.html +3 -3
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/pages/autocomplete.html +1 -1
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/cluster-management/clusterInfo.html +5 -5
- package/dist/pages/create-index.html +4 -4
- package/dist/pages/dependencies.html +1 -1
- package/dist/pages/domainRangeInfo.html +2 -2
- package/dist/pages/edit.html +1 -1
- package/dist/pages/explore.html +1 -1
- package/dist/pages/export.html +1 -1
- package/dist/pages/find.html +1 -1
- package/dist/pages/graph-config/saveGraphConfig.html +11 -11
- package/dist/pages/graphs-visualizations.html +7 -7
- package/dist/pages/guides.html +1 -1
- package/dist/pages/import.html +1 -1
- package/dist/pages/jdbc-create.html +5 -5
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +2 -2
- package/dist/pages/namespaces.html +2 -2
- package/dist/pages/plugins.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +7 -7
- package/dist/pages/rdfrank.html +2 -2
- package/dist/pages/repositories.html +2 -2
- package/dist/pages/repository.html +2 -2
- package/dist/pages/similarity-indexes.html +1 -1
- package/dist/pages/sparql-template-create.html +5 -5
- package/dist/pages/sparql.html +3 -3
- package/dist/pages/webapi.html +2 -2
- package/dist/res/swagger/index.html +27 -27
- package/package.json +1 -1
- package/dist/4.9bdad67508aabe526dcc.bundle.js +0 -2
- package/dist/4.9bdad67508aabe526dcc.bundle.js.map +0 -1
- package/dist/5.b0829613ef25834bf1ab.bundle.js +0 -2
- package/dist/5.b0829613ef25834bf1ab.bundle.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/angular/rest/cluster.rest.service.js","webpack:///./src/js/angular/clustermanagement/controllers.js"],"names":["angular","module","factory","ClusterRestService","$inject","$http","getClusterConfig","get","createCluster","groupConfiguration","post","updateCluster","nodes","patch","deleteCluster","forceDelete","data","$","param","force","delete","addNodesToCluster","nodesArray","removeNodesFromCluster","headers","getClusterStatus","getNodeStatus","controller","ClusterManagementCtrl","CreateClusterCtrl","DeleteClusterCtrl","EditClusterCtrl","AddLocationFromClusterCtrl","AddNodesDialogCtrl","RemoveNodesDialogCtrl","RemoteLocationsService","NodeState","LEADER","FOLLOWER","CANDIDATE","OUT_OF_SYNC","NO_CONNECTION","READ_ONLY","RESTRICTED","NO_CLUSTER","DELETED","LinkState","IN_SYNC","SYNCING","$scope","$q","toastr","$repositories","$uibModal","$sce","$window","$interval","ModalService","$timeout","$location","$translate","$rootScope","updateRequest","then","clusterConfiguration","getClusterConfiguration","currentNode","leaderChanged","getCurrentNodeStatus","finally","childContext","redraw","getLocationsWithRpcAddresses","locations","localNode","find","location","isLocal","endpoint","rpcAddress","address","clusterModel","onAddRemoveSuccess","message","success","handleAddRemoveErrors","status","title","failMessage","Array","isArray","reduce","acc","error","Object","keys","key","allowHtml","loader","isLeader","currentLeader","shouldShowClusterSettingsPanel","onopen","onclose","noop","toggleSidePanel","toggleLegend","setLoader","cancel","loaderTimeout","loaderMessage","selectNode","node","selectedNode","$apply","getLoaderMessage","instant","response","catch","slice","leader","nodeState","newLeader","links","syncStatus","forEach","push","id","source","target","hasCluster","showCreateClusterDialog","open","templateUrl","size","resolve","result","showDeleteDialog","values","every","successMessage","failedNodesList","$broadcast","showEditConfigurationDialog","showAddNodeToClusterDialog","nodesRpcAddress","map","failMessageTitle","showRemoveNodesFromClusterDialog","timer","$on","w","element","resize","bind","mousedown","event","nodeTooltipElement","document","getElementById","contains","unbind","getAdvancedOptionsClass","optionsModule","isAriaExpanded","getAttribute","$uibModalInstance","pageTitle","autofocusId","errors","electionMinTimeout","electionRangeTimeout","heartbeatInterval","messageSizeKB","verificationTimeout","filter","selectedLocations","close","preconditionErrors","splice","handleErrors","isClusterConfigurationValid","isFormValid","clusterConfigurationForm","$invalid","nodesListValid","length","addNodeToList","loc","removeNodeFromList","index","addLocation","newLocation","ok","warning","dismiss","LocationsRestService","windowClass","dataAddLocation","uri","locationData","msg","getError","locationAdded","addLocationHttp","getLocations","local","errorMsg","locationsArray","rpcAddressFetchers","getLocationRpcAddress","isAvailable","Promise","allSettled","getRemoteLocationsRpcAddresses","productInfo","docBase","getDocBase","isValidLocation","indexOf","copy","productShortVersion","clusterNodes","includes","isNew","shouldRemove","nodesToRemoveCount","leftNodesLessThanTwo","toggleNode","nodesToRemove"],"mappings":"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","file":"4.9bdad67508aabe526dcc.bundle.js","sourcesContent":["angular\n .module('graphdb.framework.rest.cluster.service', [])\n .factory('ClusterRestService', ClusterRestService);\n\nClusterRestService.$inject = ['$http'];\n\nconst CLUSTER_GROUP_ENDPOINT = 'rest/cluster';\n\nfunction ClusterRestService($http) {\n return {\n getClusterConfig,\n createCluster,\n updateCluster,\n deleteCluster,\n addNodesToCluster,\n removeNodesFromCluster,\n getClusterStatus,\n getNodeStatus\n };\n\n function getClusterConfig() {\n return $http.get(`${CLUSTER_GROUP_ENDPOINT}/config`);\n }\n\n function createCluster(groupConfiguration) {\n return $http.post(`${CLUSTER_GROUP_ENDPOINT}/config`, groupConfiguration);\n }\n\n function updateCluster(groupConfiguration) {\n if (groupConfiguration.nodes) {\n delete groupConfiguration.nodes;\n }\n return $http.patch(`${CLUSTER_GROUP_ENDPOINT}/config`, groupConfiguration);\n }\n\n function deleteCluster(forceDelete) {\n const data = $.param({\n force: forceDelete\n });\n return $http.delete(`${CLUSTER_GROUP_ENDPOINT}/config?${data}`);\n }\n\n function addNodesToCluster(nodesArray) {\n return $http.post(`${CLUSTER_GROUP_ENDPOINT}/config/node`, {nodes: nodesArray});\n }\n\n function removeNodesFromCluster(nodesArray) {\n return $http.delete(`${CLUSTER_GROUP_ENDPOINT}/config/node`, {data: {nodes: nodesArray}, headers: {'Content-Type': 'application/json'}});\n }\n\n function getClusterStatus() {\n return $http.get(`${CLUSTER_GROUP_ENDPOINT}/group/status`);\n }\n\n function getNodeStatus() {\n return $http.get(`${CLUSTER_GROUP_ENDPOINT}/node/status`);\n }\n}\n","import 'angular/core/services';\nimport 'angular/rest/cluster.rest.service';\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.rest.repositories.service',\n 'graphdb.framework.rest.cluster.service',\n 'toastr',\n 'pageslide-directive'\n];\n\nangular\n .module('graphdb.framework.clustermanagement.controllers', modules)\n .controller('ClusterManagementCtrl', ClusterManagementCtrl)\n .controller('CreateClusterCtrl', CreateClusterCtrl)\n .controller('DeleteClusterCtrl', DeleteClusterCtrl)\n .controller('EditClusterCtrl', EditClusterCtrl)\n .controller('AddLocationFromClusterCtrl', AddLocationFromClusterCtrl)\n .controller('AddNodesDialogCtrl', AddNodesDialogCtrl)\n .controller('RemoveNodesDialogCtrl', RemoveNodesDialogCtrl)\n .factory('RemoteLocationsService', RemoteLocationsService);\n\nexport const NodeState = {\n LEADER: 'LEADER',\n FOLLOWER: 'FOLLOWER',\n CANDIDATE: 'CANDIDATE',\n OUT_OF_SYNC: 'OUT_OF_SYNC',\n NO_CONNECTION: 'NO_CONNECTION',\n READ_ONLY: 'READ_ONLY',\n RESTRICTED: 'RESTRICTED',\n NO_CLUSTER: 'NO_CLUSTER',\n DELETED: 'DELETED'\n};\nexport const LinkState = {\n IN_SYNC: 'IN_SYNC',\n OUT_OF_SYNC: 'OUT_OF_SYNC',\n SYNCING: 'SYNCING',\n NO_CONNECTION: 'NO_CONNECTION'\n};\n\nClusterManagementCtrl.$inject = ['$scope', '$http', '$q', 'toastr', '$repositories', '$uibModal', '$sce',\n '$window', '$interval', 'ModalService', '$timeout', 'ClusterRestService', '$location', '$translate', 'RemoteLocationsService', '$rootScope'];\n\nfunction ClusterManagementCtrl($scope, $http, $q, toastr, $repositories, $uibModal, $sce,\n $window, $interval, ModalService, $timeout, ClusterRestService, $location, $translate, RemoteLocationsService, $rootScope) {\n $scope.loader = true;\n $scope.isLeader = false;\n $scope.currentNode = null;\n $scope.clusterModel = {};\n $scope.NodeState = NodeState;\n $scope.leaderChanged = false;\n $scope.currentLeader = null;\n\n // Holds child context\n $scope.childContext = {};\n\n $scope.shouldShowClusterSettingsPanel = false;\n $scope.onopen = $scope.onclose = () => angular.noop();\n\n $scope.toggleSidePanel = () => {\n $scope.shouldShowClusterSettingsPanel = !$scope.shouldShowClusterSettingsPanel;\n };\n\n $scope.toggleLegend = () => {\n if ($scope.childContext.toggleLegend) {\n $scope.childContext.toggleLegend();\n }\n };\n\n // TODO: Similar function is declared multiple times in different components. Find out how to avoid it!\n $scope.setLoader = function (loader, message) {\n $timeout.cancel($scope.loaderTimeout);\n if (loader) {\n $scope.loaderMessage = message;\n $scope.loaderTimeout = $timeout(function () {\n $scope.loader = loader;\n }, 50);\n } else {\n $scope.loader = false;\n }\n };\n\n function selectNode(node) {\n if ($scope.selectedNode !== node) {\n $scope.selectedNode = node;\n } else {\n $scope.selectedNode = null;\n }\n $scope.$apply();\n }\n\n $scope.childContext.selectNode = selectNode;\n\n function initialize() {\n $scope.loader = true;\n\n return $scope.getCurrentNodeStatus()\n .then(() => {\n return $scope.getClusterConfiguration();\n })\n .then(() => {\n return $scope.getClusterStatus();\n })\n .finally(() => {\n $scope.setLoader(false);\n });\n }\n\n let updateRequest;\n function updateCluster(force) {\n if (updateRequest) {\n return;\n }\n\n updateRequest = $scope.getClusterStatus()\n .then(() => {\n if (force || !$scope.clusterConfiguration) {\n return $scope.getClusterConfiguration();\n }\n })\n .then(() => {\n if (!$scope.currentNode || $scope.leaderChanged) {\n return $scope.getCurrentNodeStatus();\n }\n })\n .finally(() => {\n updateRequest = null;\n $scope.childContext.redraw();\n });\n }\n\n $scope.getLoaderMessage = function () {\n return $scope.loaderMessage || $translate.instant('common.loading');\n };\n\n $scope.getClusterConfiguration = () => {\n return ClusterRestService.getClusterConfig()\n .then((response) => {\n $scope.clusterConfiguration = response.data;\n if (!$scope.currentNode) {\n return $scope.getCurrentNodeStatus();\n }\n })\n .catch(() => {\n $scope.clusterConfiguration = null;\n });\n };\n\n function isLeaderChanged(currentLeader, newLeader) {\n if (!newLeader) {\n // If election is in place and there is no leader yet, consider it as leader change\n return true;\n }\n return !currentLeader || currentLeader.address !== newLeader.address;\n }\n\n $scope.getClusterStatus = function () {\n return ClusterRestService.getClusterStatus()\n .then(function (response) {\n const nodes = response.data.slice();\n const leader = nodes.find((node) => node.nodeState === NodeState.LEADER);\n\n if (isLeaderChanged($scope.currentLeader, leader)) {\n $scope.currentLeader = leader;\n $scope.leaderChanged = true;\n }\n $scope.currentNode = nodes.find((node) => node.address === $scope.currentNode.address);\n\n const links = [];\n if (leader) {\n Object.keys(leader.syncStatus).forEach((node) => {\n const status = leader.syncStatus[node];\n if (status !== LinkState.NO_CONNECTION) {\n links.push({\n id: `${leader.address}-${node}`,\n source: leader.address,\n target: node,\n status\n });\n }\n });\n }\n $scope.clusterModel.hasCluster = true;\n $scope.clusterModel.nodes = nodes;\n $scope.clusterModel.links = links;\n })\n .catch(function (error) {\n if (error.status === 404) {\n $scope.clusterModel.hasCluster = false;\n $scope.clusterModel.nodes = [];\n $scope.clusterModel.links = [];\n $scope.clusterConfiguration = null;\n }\n });\n };\n\n $scope.showCreateClusterDialog = function () {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/clustermanagement/templates/modal/cluster-create-dialog.html',\n controller: 'CreateClusterCtrl',\n size: 'lg',\n resolve: {\n data: function () {\n return {\n clusterModel: $scope.clusterModel\n };\n }\n }\n });\n\n modalInstance.result.finally(function () {\n getLocationsWithRpcAddresses();\n updateCluster(true);\n });\n };\n\n $scope.showDeleteDialog = () => {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/clustermanagement/templates/modal/cluster-delete-dialog.html',\n controller: 'DeleteClusterCtrl'\n });\n\n modalInstance.result.then(function (forceDelete) {\n const loaderMessage = $translate.instant('cluster_management.delete_cluster_dialog.loader_message');\n $scope.setLoader(true, loaderMessage);\n ClusterRestService.deleteCluster(forceDelete)\n .then((response) => {\n const allNodesDeleted = Object.values(response.data).every((nodeState) => nodeState === NodeState.DELETED);\n if (allNodesDeleted) {\n const successMessage = $translate.instant('cluster_management.delete_cluster_dialog.notifications.success_delete');\n toastr.success(successMessage);\n } else {\n const successMessage = $translate.instant(\n 'cluster_management.delete_cluster_dialog.notifications.success_delete_partial');\n const failedNodesList = Object.keys(response.data)\n .reduce((message, key) => message += `<div>${key} - ${response.data[key]}</div>`, '');\n toastr.success(failedNodesList, successMessage, {allowHtml: true});\n }\n $scope.getClusterConfiguration();\n })\n .catch((error) => {\n const failMessage = $translate.instant('cluster_management.delete_cluster_dialog.notifications.fail_delete');\n const failedNodesList = Object.keys(error.data)\n .reduce((message, key) => message += `<div>${key} - ${error.data[key]}</div>`, '');\n toastr.error(failedNodesList, failMessage, {allowHtml: true});\n })\n .finally(() => {\n $scope.setLoader(false);\n updateCluster(true);\n $rootScope.$broadcast('reloadLocations');\n });\n });\n };\n\n $scope.showEditConfigurationDialog = () => {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/clustermanagement/templates/modal/cluster-edit-dialog.html',\n controller: 'EditClusterCtrl',\n size: 'lg',\n resolve: {\n data: function () {\n return {\n clusterConfiguration: $scope.clusterConfiguration\n };\n }\n }\n });\n\n modalInstance.result.finally(function () {\n updateCluster(true);\n });\n };\n\n $scope.getCurrentNodeStatus = () => {\n return ClusterRestService.getNodeStatus()\n .then((response) => {\n $scope.leaderChanged = false;\n $scope.currentNode = response.data;\n })\n .catch((error) => {\n $scope.currentNode = error.data;\n $scope.clusterModel.hasCluster = false;\n })\n .then(() => getLocationsWithRpcAddresses());\n };\n\n function getLocationsWithRpcAddresses() {\n return RemoteLocationsService.getLocationsWithRpcAddresses()\n .then((locations) => {\n const localNode = locations.find((location) => location.isLocal);\n if (localNode) {\n localNode.endpoint = $scope.currentNode.endpoint;\n localNode.rpcAddress = $scope.currentNode.address;\n }\n $scope.clusterModel.locations = locations;\n });\n }\n\n $scope.showAddNodeToClusterDialog = () => {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/clustermanagement/templates/modal/add-nodes-dialog.html',\n controller: 'AddNodesDialogCtrl',\n size: 'lg',\n resolve: {\n data: function () {\n return {\n clusterModel: $scope.clusterModel,\n clusterConfiguration: $scope.clusterConfiguration\n };\n }\n }\n });\n\n modalInstance.result.then(function (nodes) {\n const loaderMessage = $translate.instant('cluster_management.cluster_page.add_nodes_loader');\n $scope.setLoader(true, loaderMessage);\n\n const nodesRpcAddress = nodes.map((node) => node.rpcAddress);\n ClusterRestService.addNodesToCluster(nodesRpcAddress)\n .then(() => {\n const successMessage = $translate.instant(\n 'cluster_management.cluster_page.notifications.add_nodes_success');\n onAddRemoveSuccess(successMessage);\n })\n .catch((error) => {\n const failMessageTitle = $translate.instant('cluster_management.cluster_page.notifications.add_nodes_fail');\n handleAddRemoveErrors(error.data, error.status, failMessageTitle);\n })\n .finally(() => {\n $scope.setLoader(false);\n updateCluster(true);\n });\n })\n .finally(() => getLocationsWithRpcAddresses());\n };\n\n $scope.showRemoveNodesFromClusterDialog = () => {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/clustermanagement/templates/modal/remove-nodes-dialog.html',\n controller: 'RemoveNodesDialogCtrl',\n size: 'lg',\n resolve: {\n data: function () {\n return {\n clusterModel: $scope.clusterModel\n };\n }\n }\n });\n\n modalInstance.result.then(function (nodes) {\n const loaderMessage = $translate.instant('cluster_management.cluster_page.remove_nodes_loader');\n $scope.setLoader(true, loaderMessage);\n\n const nodesRpcAddress = nodes.map((node) => node.address);\n ClusterRestService.removeNodesFromCluster(nodesRpcAddress)\n .then(() => {\n const successMessage = $translate.instant('cluster_management.cluster_page.notifications.remove_nodes_success');\n onAddRemoveSuccess(successMessage);\n })\n .catch((error) => {\n const failMessageTitle = $translate.instant('cluster_management.cluster_page.notifications.remove_nodes_fail');\n handleAddRemoveErrors(error.data, error.status, failMessageTitle);\n })\n .finally(() => {\n $scope.setLoader(false);\n updateCluster(true);\n });\n });\n };\n\n function onAddRemoveSuccess(message) {\n toastr.success(message);\n $scope.getClusterConfiguration();\n }\n\n function handleAddRemoveErrors(data, status, title) {\n let failMessage = data.message || data;\n\n if (status === 400 && Array.isArray(data)) {\n failMessage = data.reduce((acc, error) => acc += `<div>${error}</div>`, '');\n } else if (status === 412) {\n failMessage = Object.keys(data)\n .reduce((message, key) => message += `<div>${key} - ${data[key]}</div>`, '');\n }\n toastr.error(failMessage, title, {allowHtml: true});\n }\n\n initialize()\n .finally(() => {\n const timer = $interval(function () {\n updateCluster();\n }, 1000);\n\n $scope.$on(\"$destroy\", function () {\n $interval.cancel(timer);\n });\n });\n\n // track window resizing and window mousedown\n const w = angular.element($window);\n const resize = function () {\n $scope.childContext.resize();\n };\n w.bind('resize', resize);\n\n const mousedown = function (event) {\n const target = event.target;\n const nodeTooltipElement = document.getElementById('nodeTooltip');\n if ($scope.selectedNode && nodeTooltipElement !== target && !nodeTooltipElement.contains(target)) {\n $scope.childContext.selectNode(null);\n }\n };\n w.bind('mousedown', mousedown);\n $scope.$on('$destroy', function () {\n w.unbind('resize', resize);\n w.unbind('mousedown', mousedown);\n });\n}\n\nconst getAdvancedOptionsClass = function () {\n const optionsModule = document.getElementById('advancedOptions');\n\n if (optionsModule) {\n const isAriaExpanded = optionsModule.getAttribute('aria-expanded');\n if (isAriaExpanded && isAriaExpanded === 'true') {\n return 'fa fa-angle-down';\n }\n }\n return 'fa fa-angle-right';\n};\n\nCreateClusterCtrl.$inject = ['$scope', '$uibModalInstance', '$timeout', 'ClusterRestService', 'toastr', '$translate', 'data', '$uibModal',\n 'RemoteLocationsService', '$rootScope'];\n\nfunction CreateClusterCtrl($scope, $uibModalInstance, $timeout, ClusterRestService, toastr, $translate, data, $uibModal, RemoteLocationsService, $rootScope) {\n $scope.pageTitle = $translate.instant('cluster_management.cluster_page.create_page_title');\n $scope.autofocusId = 'autofocus';\n $scope.errors = [];\n $scope.clusterConfiguration = {\n electionMinTimeout: 8000,\n electionRangeTimeout: 6000,\n heartbeatInterval: 2000,\n messageSizeKB: 64,\n verificationTimeout: 1500,\n nodes: []\n };\n\n $scope.locations = data.clusterModel.locations.filter((location) => !location.isLocal);\n $scope.selectedLocations = data.clusterModel.locations.filter((location) => location.isLocal);\n\n $scope.loader = false;\n\n $scope.getAdvancedOptionsClass = getAdvancedOptionsClass;\n\n $scope.createCluster = function () {\n $scope.setLoader(true, $translate.instant('cluster_management.cluster_page.creating_cluster_loader'));\n $scope.clusterConfiguration.nodes = $scope.selectedLocations.map((node) => node.rpcAddress);\n return ClusterRestService.createCluster($scope.clusterConfiguration)\n .then(() => {\n toastr.success($translate.instant('cluster_management.cluster_page.notifications.create_success'));\n $uibModalInstance.close();\n })\n .catch(function (error) {\n handleErrors(error.data, error.status);\n })\n .finally(() => {\n $scope.setLoader(false);\n $rootScope.$broadcast('reloadLocations');\n });\n };\n\n function handleErrors(data, status) {\n delete $scope.preconditionErrors;\n toastr.error($translate.instant('cluster_management.cluster_page.notifications.create_failed'));\n $scope.errors.splice(0);\n if (status === 412) {\n $scope.preconditionErrors = Object.keys(data).map((key) => `${key} - ${data[key]}`);\n } else if (status === 400) {\n $scope.errors.push(...data);\n } else if (status === 409) {\n $scope.errors.push(data);\n }\n }\n\n $scope.isClusterConfigurationValid = () => {\n const isFormValid = !$scope.clusterConfigurationForm.$invalid;\n const nodesListValid = $scope.selectedLocations && $scope.selectedLocations.length >= 2;\n return isFormValid && nodesListValid;\n };\n\n $scope.setLoader = function (loader, message) {\n $timeout.cancel($scope.loaderTimeout);\n if (loader) {\n $scope.loaderTimeout = $timeout(function () {\n $scope.loader = loader;\n $scope.loaderMessage = message;\n }, 300);\n } else {\n $scope.loader = false;\n }\n };\n\n $scope.addNodeToList = function (location) {\n if (!location.rpcAddress) {\n return;\n }\n $scope.selectedLocations.push(location);\n $scope.locations = $scope.locations.filter((loc) => loc.endpoint !== location.endpoint);\n };\n\n $scope.removeNodeFromList = function (index, node) {\n if (node.isLocal) {\n return;\n }\n $scope.selectedLocations.splice(index, 1);\n $scope.locations.push(node);\n };\n\n $scope.addLocation = function () {\n RemoteLocationsService.addLocation()\n .then((newLocation) => {\n if (newLocation) {\n $scope.locations.push(newLocation);\n }\n });\n };\n\n $scope.ok = function () {\n if (!$scope.isClusterConfigurationValid()) {\n toastr.warning($translate.instant('cluster_management.cluster_page.notifications.form_invalid'));\n return;\n }\n $scope.createCluster();\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nDeleteClusterCtrl.$inject = ['$scope', '$uibModalInstance'];\n\nfunction DeleteClusterCtrl($scope, $uibModalInstance) {\n $scope.forceDelete = false;\n\n $scope.ok = function () {\n $uibModalInstance.close($scope.forceDelete);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nRemoteLocationsService.$inject = ['$http', 'toastr', '$uibModal', 'LocationsRestService', '$translate'];\n\nfunction RemoteLocationsService($http, toastr, $uibModal, LocationsRestService, $translate) {\n return {\n addLocation: addLocation,\n getLocationsWithRpcAddresses: getLocationsWithRpcAddresses\n };\n\n function getLocationsWithRpcAddresses() {\n return getLocations()\n .then((locations) => {\n if (locations) {\n return getRemoteLocationsRpcAddresses(locations);\n }\n });\n }\n\n /**\n * Sets multiple remote locations' rpc addresses. Skips local location and locations with errors\n * @param {any[]} locationsArray\n * @return {Promise<[]>} locationArray with filled rpc addresses\n */\n function getRemoteLocationsRpcAddresses(locationsArray) {\n const rpcAddressFetchers = locationsArray.filter((location) => !location.isLocal && !location.error).map((location) => {\n return getLocationRpcAddress(location)\n .then((response) => {\n location.rpcAddress = response.data;\n location.isAvailable = true;\n return location;\n })\n .catch((error) => {\n location.isAvailable = false;\n location.error = getError(error.data, error.status);\n });\n });\n return Promise.allSettled(rpcAddressFetchers).then(() => locationsArray);\n }\n\n /**\n * Fetch locations and map them to a location model\n *\n * @return {*} all remote locations mapped to a location model\n */\n function getLocations() {\n return LocationsRestService.getLocations()\n .then(function (response) {\n return response.data.map((loc) => {\n return {\n isLocal: loc.local,\n endpoint: loc.uri,\n rpcAddress: loc.rpcAddress || '',\n error: loc.errorMsg\n };\n });\n })\n .catch(function (error) {\n const msg = getError(error.data, error.status);\n toastr.error(msg, $translate.instant('common.error'));\n });\n }\n\n /**\n * Fetch rpc address of a remote location\n * @param {*} location the remote location\n * @return {Promise<String>} the rpc address of the location\n */\n function getLocationRpcAddress(location) {\n return LocationsRestService.getLocationRpcAddress(location.endpoint);\n\n }\n\n function addLocation() {\n let newLocation;\n return $uibModal.open({\n templateUrl: 'js/angular/templates/modal/add-location.html',\n windowClass: 'addLocationDialog',\n controller: 'AddLocationFromClusterCtrl'\n }).result\n .then((dataAddLocation) => {\n newLocation = dataAddLocation;\n newLocation.isLocal = false;\n newLocation.endpoint = newLocation.uri;\n return addLocationHttp(newLocation);\n });\n }\n\n function addLocationHttp(locationData) {\n let newLocation;\n return LocationsRestService.addLocation(locationData)\n .catch((error) => {\n const msg = getError(error.data, error.status);\n toastr.error(msg, $translate.instant('common.error'));\n return false;\n })\n .then((locationAdded) => {\n if (locationAdded) {\n return getLocationsWithRpcAddresses();\n }\n return false;\n })\n .then((locations) => {\n if (locations === false) {\n return;\n }\n newLocation = locations.find((location) => location.endpoint === locationData.uri);\n return newLocation;\n });\n }\n}\n\nAddLocationFromClusterCtrl.$inject = ['$scope', '$uibModalInstance', 'toastr', 'productInfo', '$translate'];\n\nfunction AddLocationFromClusterCtrl($scope, $uibModalInstance, toastr, productInfo, $translate) {\n //TODO: This, along with the view are duplicated from repositories page. Must be extracted for re-usability.\n $scope.newLocation = {\n 'uri': '',\n 'authType': 'signature',\n 'username': '',\n 'password': '',\n 'active': false\n };\n $scope.docBase = getDocBase(productInfo);\n\n $scope.isValidLocation = function () {\n return ($scope.newLocation.uri.length < 6 ||\n $scope.newLocation.uri.indexOf('http:') === 0 || $scope.newLocation.uri.indexOf('https:') === 0)\n && $scope.newLocation.uri.indexOf('/repositories') <= -1;\n };\n\n $scope.ok = function () {\n if (!$scope.newLocation) {\n toastr.error($translate.instant('location.cannot.be.empty.error'));\n return;\n }\n $uibModalInstance.close($scope.newLocation);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nEditClusterCtrl.$inject = ['$scope', '$uibModalInstance', '$timeout', 'ClusterRestService', 'toastr', '$translate', 'data'];\n\nfunction EditClusterCtrl($scope, $uibModalInstance, $timeout, ClusterRestService, toastr, $translate, data) {\n $scope.pageTitle = $translate.instant('cluster_management.cluster_page.edit_page_title');\n $scope.errors = [];\n $scope.clusterConfiguration = angular.copy(data.clusterConfiguration);\n $scope.loader = false;\n\n $scope.updateCluster = function () {\n $scope.setLoader(true, $translate.instant('cluster_management.cluster_page.updating_cluster_loader'));\n return ClusterRestService.updateCluster($scope.clusterConfiguration)\n .then(() => {\n toastr.success($translate.instant('cluster_management.cluster_page.notifications.update_success'));\n $uibModalInstance.close();\n })\n .catch(function (response) {\n handleErrors(response.data, response.status);\n })\n .finally(() => $scope.setLoader(false));\n };\n\n function handleErrors(data, status) {\n delete $scope.preconditionErrors;\n toastr.error($translate.instant('cluster_management.cluster_page.notifications.update_failed'));\n $scope.errors.splice(0);\n\n if (status === 409 || typeof data === 'string') {\n $scope.errors.push(data);\n } else if (status === 412) {\n $scope.preconditionErrors = Object.keys(data).map((key) => `${key} - ${data[key]}`);\n } else if (status === 400) {\n $scope.errors.push(...data);\n }\n }\n\n $scope.isClusterConfigurationValid = () => {\n return !$scope.clusterConfigurationForm.$invalid;\n };\n\n $scope.setLoader = function (loader, message) {\n $timeout.cancel($scope.loaderTimeout);\n if (loader) {\n $scope.loaderTimeout = $timeout(function () {\n $scope.loader = loader;\n $scope.loaderMessage = message;\n }, 300);\n } else {\n $scope.loader = false;\n }\n };\n\n $scope.ok = function () {\n if (!$scope.isClusterConfigurationValid()) {\n toastr.warning($translate.instant('cluster_management.cluster_page.notifications.form_invalid'));\n return;\n }\n $scope.updateCluster();\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nconst getDocBase = function (productInfo) {\n return `https://graphdb.ontotext.com/documentation/${productInfo.productShortVersion}`;\n};\n\nAddNodesDialogCtrl.$inject = ['$scope', '$uibModalInstance', 'data', '$uibModal', 'RemoteLocationsService'];\n\nfunction AddNodesDialogCtrl($scope, $uibModalInstance, data, $uibModal, RemoteLocationsService) {\n const clusterConfiguration = angular.copy(data.clusterConfiguration);\n const clusterModel = angular.copy(data.clusterModel);\n $scope.nodes = [];\n\n $scope.clusterNodes = clusterModel.nodes.map((node) => ({rpcAddress: node.address, endpoint: node.endpoint}));\n $scope.locations = clusterModel.locations.filter((location) => !clusterConfiguration.nodes.includes(location.rpcAddress));\n $scope.locations.forEach((location) => location.isNew = true);\n\n $scope.addNodeToList = function (location) {\n if (!location.rpcAddress) {\n return;\n }\n $scope.nodes.push(location);\n $scope.locations = $scope.locations.filter((loc) => loc.endpoint !== location.endpoint);\n };\n\n $scope.removeNodeFromList = function (index, node) {\n $scope.nodes.splice(index, 1);\n $scope.locations.push(node);\n };\n\n $scope.addLocation = function () {\n RemoteLocationsService.addLocation()\n .then((newLocation) => {\n if (newLocation) {\n $scope.locations.push(newLocation);\n }\n });\n };\n\n $scope.ok = function () {\n $uibModalInstance.close($scope.nodes);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nRemoveNodesDialogCtrl.$inject = ['$scope', '$uibModalInstance', 'data'];\n\nfunction RemoveNodesDialogCtrl($scope, $uibModalInstance, data) {\n const clusterModel = angular.copy(data.clusterModel);\n\n $scope.clusterNodes = clusterModel.nodes;\n $scope.clusterNodes.forEach((node) => node.shouldRemove = false);\n $scope.nodesToRemoveCount = 0;\n $scope.leftNodesLessThanTwo = false;\n\n $scope.toggleNode = function (index, node) {\n node.shouldRemove = !node.shouldRemove;\n if (node.shouldRemove) {\n $scope.nodesToRemoveCount++;\n } else {\n $scope.nodesToRemoveCount--;\n }\n $scope.leftNodesLessThanTwo = $scope.clusterNodes.length - $scope.nodesToRemoveCount < 2;\n };\n\n $scope.ok = function () {\n const nodesToRemove = $scope.clusterNodes.filter((node) => node.shouldRemove);\n $uibModalInstance.close(nodesToRemove);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[5,110],{61:function(e,t,o){"use strict";o.r(t),o.d(t,"STATIC_RULESETS",(function(){return i})),o.d(t,"REPOSITORY_TYPES",(function(){return n})),o.d(t,"FILENAME_PATTERN",(function(){return r})),o.d(t,"NUMBER_PATTERN",(function(){return a}));const i=[{id:"empty",name:"No inference"},{id:"rdfs-optimized",name:"RDFS (Optimized)"},{id:"rdfs",name:"RDFS"},{id:"rdfsplus-optimized",name:"RDFS-Plus (Optimized)"},{id:"owl-horst-optimized",name:"OWL-Horst (Optimized)"},{id:"owl-horst",name:"OWL-Horst"},{id:"owl2-ql-optimized",name:"OWL2-QL (Optimized)"},{id:"owl2-ql",name:"OWL2-QL"},{id:"owl-max-optimized",name:"OWL-Max (Optimized)"},{id:"owl-max",name:"OWL-Max"},{id:"owl2-rl-optimized",name:"OWL2-RL (Optimized)"},{id:"owl2-rl",name:"OWL2-RL"}],n={graphdbRepo:"graphdb",free:"free",eeWorker:"worker",eeMaster:"master",ontop:"ontop",se:"se",fedx:"fedx"},r=new RegExp("^[a-zA-Z0-9-_]+$"),a=new RegExp("^[0-9]+$")},66:function(e,t,o){"use strict";o.r(t),o.d(t,"getFileName",(function(){return r}));var i=o(61),n=o(0);const r=function(e){let t=e.lastIndexOf("/");-1===t&&(t=e.lastIndexOf("\\"));let o=e;return-1!==t&&(o=o.substring(t+1)),o},a=function(e){e&&(e.queryTimeout&&(e.queryTimeout.value=parseInt(e.queryTimeout.value)),e.queryLimitResults&&e.validationResultsLimitTotal&&e.validationResultsLimitPerConstraint?(e.queryLimitResults.value=parseInt(e.queryLimitResults.value),e.validationResultsLimitTotal.value=parseInt(e.validationResultsLimitTotal.value),e.validationResultsLimitPerConstraint.value=parseInt(e.validationResultsLimitPerConstraint.value)):e.leftJoinWorkerThreads&&e.boundJoinBlockSize&&e.joinWorkerThreads&&e.unionWorkerThreads&&(e.leftJoinWorkerThreads.value=parseInt(e.leftJoinWorkerThreads.value),e.boundJoinBlockSize.value=parseInt(e.boundJoinBlockSize.value),e.joinWorkerThreads.value=parseInt(e.joinWorkerThreads.value),e.unionWorkerThreads.value=parseInt(e.unionWorkerThreads.value)))},s=function(){const e=document.getElementById("shaclOptions");if(e){const t=e.getAttribute("aria-expanded");if(t&&"true"===t)return"fa fa-angle-down"}return"fa fa-angle-right"},l=function(e,t){e.queryTimeout&&(t.isInvalidQueryTimeout=!i.NUMBER_PATTERN.test(e.queryTimeout.value)),e.validationResultsLimitTotal&&e.validationResultsLimitPerConstraint&&e.queryLimitResults?(t.isInvalidValidationResultsLimitTotal=!i.NUMBER_PATTERN.test(e.validationResultsLimitTotal.value),t.isInvalidValidationResultsLimitPerConstraint=!i.NUMBER_PATTERN.test(e.validationResultsLimitPerConstraint.value),t.isInvalidQueryLimit=!i.NUMBER_PATTERN.test(e.queryLimitResults.value)):e.leftJoinWorkerThreads&&e.boundJoinBlockSize&&e.joinWorkerThreads&&e.unionWorkerThreads&&(t.isInvalidLeftJoinWorkerThreads=!i.NUMBER_PATTERN.test(e.leftJoinWorkerThreads.value),t.isInvalidBoundJoinBlockSize=!i.NUMBER_PATTERN.test(e.boundJoinBlockSize.value),t.isInvalidJoinWorkerThreads=!i.NUMBER_PATTERN.test(e.joinWorkerThreads.value),t.isInvalidUnionWorkerThreads=!i.NUMBER_PATTERN.test(e.unionWorkerThreads.value))},c=function(e,t){return"isInvalidQueryLimit"===e?t.instant("invalid.query.limit"):"isInvalidQueryTimeout"===e?t.instant("invalid.query.timeout"):"isInvalidValidationResultsLimitTotal"===e?t.instant("invalid.validation.results.limit.total"):"isInvalidValidationResultsLimitPerConstraint"===e?t.instant("invalid.validation.results.limit.per.constraint"):"isInvalidJoinWorkerThreads"===e?t.instant("invalid.join.worker.threads"):"isInvalidLeftJoinWorkerThreads"===e?t.instant("invalid.left.join.worker.threads"):"isInvalidUnionWorkerThreads"===e?t.instant("invalid.union.worker.threads"):"isInvalidBoundJoinBlockSize"===e?t.instant("invalid.bound.join.block.size"):void 0},d=function(e,t){const o=Object.keys(e),i=Object.values(e);for(let e=0;e<o.length;e++)if(i[e])return c(o[e],t);return""},u=function(e){return"https://graphdb.ontotext.com/documentation/"+e.productShortVersion},p=function(e){return e.getLocations().then(e=>e.filter(e=>!e.errorMsg&&!e.degradedReason))};function f(e,t,o,r,a,s,l,c,d,u,p,f,m){e.loader=!0,e.isLocationInactive=function(t){return!t.active||!e.hasActiveLocation()};const v=f.defer();function y(){return a.getLocations(v).then(t=>{e.locations=t}).finally(()=>e.loader=!1)}e.hasActiveLocation=function(){return a.hasActiveLocation()},e.getActiveLocation=function(){return a.getActiveLocation()},e.getLocationError=function(){return a.getLocationError()},e.getDegradedReason=function(){return a.getDegradedReason()},e.getRepositories=function(){return a.getRepositories()},e.isRepoActive=function(e){return a.isRepoActive(e)},e.deleteLocation=function(t){s.openSimpleModal({title:p.instant("location.confirm.detach"),message:p.instant("location.confirm.detach.warning",{uri:t}),warning:!0}).result.then((function(){e.loader=!0,a.deleteLocation(t).finally(()=>y())}))},e.addLocationHttp=function(t){e.loader=!0,c.addLocation(t).success((function(){a.init()})).error((function(e){const t=getError(e);r.error(t,p.instant("common.error"))})).finally(()=>y())},e.addLocation=function(){o.open({templateUrl:"js/angular/templates/modal/add-location.html",windowClass:"addLocationDialog",controller:"AddLocationCtrl"}).result.then((function(t){e.addLocationHttp(t)}))},e.editLocationHttp=function(t){e.loader=!0,c.editLocation(t).success((function(){a.init()})).error((function(e){const t=getError(e);r.error(t,p.instant("common.error"))})).finally(()=>y())},e.editLocation=function(t){o.open({templateUrl:"js/angular/templates/modal/edit-location.html",controller:"EditLocationCtrl",resolve:{location:function(){return t}}}).result.then((function(t){e.editLocationHttp(t)}),(function(){}))},e.setRepository=function(e){a.setRepository(e)},e.deleteRepository=function(t){s.openSimpleModal({title:p.instant("common.confirm.delete"),message:Object(n.decodeHTML)(p.instant("delete.repo.warning.msg",{repositoryId:t.id})),warning:!0}).result.then((function(){e.loader=!0,a.deleteRepository(t).finally(()=>{y(),e.loader=!1}),function(e){const t="dependencies-selectedGraph-"+e.id,o="classHierarchy-selectedGraph-"+e.id;angular.forEach(d.keys(),(function(e){(e.startsWith(o)||e.startsWith(t))&&d.remove(e)}))}(t)}))},e.restartRepository=function(t){s.openSimpleModal({title:p.instant("confirm.restart.repo"),message:Object(n.decodeHTML)(p.instant("confirm.restart.repo.warning.msg",{repositoryId:t.id})),warning:!0}).result.then((function(){e.loader=!0,a.restartRepository(t).finally(()=>y())}))},e.toggleDefaultRepository=function(t){e.getDefaultRepository()===t?a.setDefaultRepository(null):a.setDefaultRepository(t)},e.getDefaultRepository=function(){return a.getDefaultRepository()},e.getRepositoryDownloadLink=function(e){let t=`rest/repositories/${e.id}${e.type===i.REPOSITORY_TYPES.ontop?"/download-zip":"/download-ttl"}?location=${e.location}`;const o=l.getAuthToken();return o&&(t=`${t}&authToken=${encodeURIComponent(o)}`),t},e.copyToClipboard=function(e){s.openCopyToClipboardModal(e)},e.fromFile=function(){o.open({templateUrl:"js/angular/templates/modal/upload-repository-config.html",controller:"UploadRepositoryConfigCtrl"}).result.then((function(){a.init()}))},e.openActiveLocationSettings=function(){o.open({templateUrl:"js/angular/settings/modal/location-settings.html",controller:"ActiveLocationSettingsCtrl"})},y();const R=u((function(){m.isActive()&&!t.guidePaused||(a.initQuick(),y())}),5e3);e.$on("$destroy",(function(){u.cancel(R),v&&v.resolve()})),e.getRepositoriesFromLocation=function(e){return a.getRepositoriesFromLocation(e)}}function m(e,t,o,i,n){e.upload=function(t){t&&t.length&&(e.uploadFile=t[0])},e.ok=function(){e.uploadFile&&(e.uploadFileLoader=!0,o.upload({url:"rest/repositories",method:"POST",data:{config:e.uploadFile}}).success((function(){e.uploadFileLoader=!1,t.close()})).error((function(t){const o=getError(t);i.error(o,n.instant("common.error")),e.uploadFileLoader=!1})))},e.cancel=function(){t.dismiss("cancel")}}function v(e,t,o,i,n){e.newLocation={uri:"",authType:"none",username:"",password:"",active:!1},e.docBase=u(i),e.isValidLocation=function(){return(e.newLocation.uri.length<6||0===e.newLocation.uri.indexOf("http:")||0===e.newLocation.uri.indexOf("https:"))&&e.newLocation.uri.indexOf("/repositories")<=-1},e.ok=function(){e.newLocation?t.close(e.newLocation):o.error(n.instant("location.cannot.be.empty.error"))},e.cancel=function(){t.dismiss("cancel")}}function y(e,t,o,i){e.editedLocation=angular.copy(o),e.docBase=u(i),e.ok=function(){t.close(e.editedLocation)},e.cancel=function(){t.dismiss("cancel")}}function R(e,t){e.repositoryTypes=i.REPOSITORY_TYPES,e.chooseRepositoryType=function(e){t.path(`${t.path()}/${e}`)}}function T(e,t,o,n,r,c,u,f,m){var v;e.rulesets=i.STATIC_RULESETS.slice(),e.repositoryTypes=i.REPOSITORY_TYPES,e.params=u,e.repositoryType=u.repositoryType,e.enable=!0,e.loader=!0,e.pageTitle=m.instant("view.create.repo.title"),e.repositoryInfo={id:"",params:{},title:"",type:"",location:""},e.invalidValues={isInvalidQueryTimeout:!1,isInvalidQueryLimit:!1,isInvalidLeftJoinWorkerThreads:!1,isInvalidBoundJoinBlockSize:!1,isInvalidJoinWorkerThreads:!1,isInvalidUnionWorkerThreads:!1,isInvalidValidationResultsLimitPerConstraint:!1,isInvalidValidationResultsLimitTotal:!1},p(o).then(t=>{e.locations=t}),e.changedLocation=function(){e.$broadcast("changedLocation")},e.getConfig=function(o){f.getRepositoryConfiguration(o).then((function(t){const o=t.data;var i;e.repositoryInfo.params=o.params,e.repositoryInfo.type=o.type,a(e.repositoryInfo.params),(i=e.repositoryInfo.params)&&i.member&&(i.member.value=[]),e.loader=!1,r((function(){angular.element(document).find("#id").focus()}),50)})).catch((function(o){const i=getError(o);t.error(i,m.instant("common.error")),e.loader=!1}))},e.repositoryType&&(function(t){return e.isEnterprise()&&t===i.REPOSITORY_TYPES.graphdbRepo}(v=e.repositoryType)||function(t){return!e.isFreeEdition()&&!e.isEnterprise()&&t===i.REPOSITORY_TYPES.graphdbRepo}(v)||function(t){return e.isFreeEdition()&&t===i.REPOSITORY_TYPES.graphdbRepo}(v)||function(e){return e===i.REPOSITORY_TYPES.ontop}(v)||function(e){return e===i.REPOSITORY_TYPES.fedx}(v))?(e.repositoryInfo.type=e.repositoryType,e.getConfig(e.repositoryType),function(t){switch(t){case i.REPOSITORY_TYPES.graphdbRepo:e.pageTitle=m.instant("view.create.repo.title",{repoType:"GraphDB"});break;case i.REPOSITORY_TYPES.ontop:e.pageTitle=m.instant("view.create.repo.title",{repoType:"Ontop Virtual SPARQL"});break;case i.REPOSITORY_TYPES.fedx:e.pageTitle=m.instant("view.create.repo.title",{repoType:"FedX Virtual SPARQL"})}}(e.repositoryType)):n.path("/repository/create"),e.hasActiveLocation=function(){return o.hasActiveLocation()},e.activeLocation=function(){return o.getActiveLocation()};let y=!1;e.uploadRuleset=function(o){o&&o.length&&(e.uploadFile=o[0],e.uploadFileLoader=!0,c.upload({url:"rest/repositories/ruleset/upload",data:{ruleset:e.uploadFile,location:e.repositoryInfo.location}}).progress((function(e){})).success((function(o){if(o.success){const t=e.uploadFile.name,i={id:o.fileLocation,name:"Custom: "+t};e.rulesetPie?e.rulesets[0]=i:e.rulesets.unshift(i),e.rulesetPie=o.fileLocation,e.rulesetPieFile=t,e.repositoryInfo.params.ruleset.value=e.rulesetPie}else t.error(o.errorMessage),y=!0;e.uploadFileLoader=!1})).error((function(o){const i=getError(o);t.error(i,m.instant("common.error")),e.uploadFile="",e.uploadFileLoader=!1})))},e.noMembersError=function(){t.error(m.instant("fedx.create.repo.no.members.warning"))},e.goBackToPreviousLocation=function(){angular.isDefined(u.previous)?(delete n.$$search.previous,n.path("/")):n.path("/repository")},e.createRepoHttp=function(){e.loader=!0,f.createRepository(e.repositoryInfo).then((function(){return t.success(m.instant("created.repo.success.msg",{repoId:e.repositoryInfo.id})),o.init()})).then(()=>e.goBackToPreviousLocation()).catch((function(e){const o=getError(e.data);t.error(o,m.instant("common.error"))})).finally(()=>{e.loader=!1})},e.createRepo=function(){if(!e.repositoryInfo.id)return void t.error(m.instant("empty.repoid.warning"));e.isInvalidRepoName=!i.FILENAME_PATTERN.test(e.repositoryInfo.id),l(e.repositoryInfo.params,e.invalidValues);const o=d(e.invalidValues,m);y?t.error(m.instant("invalid.ruleset.file.error")):e.isInvalidRepoName?t.error(m.instant("wrong.repo.name.error")):"fedx"===e.repositoryType&&0===e.repositoryInfo.params.member.value.length?e.noMembersError():o?t.error(o):e.createRepoHttp()},e.rulesetWarning=function(){const t=e.repositoryInfo.params;return void 0===t||void 0===t.ruleset||void 0===t.disableSameAs?"":0===t.ruleset.value.indexOf("owl")&&"true"===t.disableSameAs.value?m.instant("repoTooltips.rulesetWarnings.needsSameAs"):0===t.ruleset.value.indexOf("rdfs")&&"false"===t.disableSameAs.value?m.instant("repoTooltips.rulesetWarnings.doesntNeedSameAs"):t.ruleset.value===e.rulesetPie?m.instant("repoTooltips.rulesetWarnings.customRuleset"):""},e.validateNumberInput=function(){l(e.repositoryInfo.params,e.invalidValues)},e.getShaclOptionsClass=function(){return s()},e.autofocusId="autofocus"}function g(e,t,o,i,n,r){i&&o.getRepositoryFileContent(i).success((function(t){e.fileContent=t})).error((function(e){const t=getError(e);n.error(t,r.instant("common.error"))})),e.ok=function(){t.close({content:e.fileContent,fileLocation:i})},e.cancel=function(){t.dismiss("cancel")}}function I(e,t,o,c,u,f,m,v){e.rulesets=i.STATIC_RULESETS.slice(),e.repositoryTypes=i.REPOSITORY_TYPES,e.editRepoPage=!0,e.canEditRepoId=!1,e.params=t,e.loader=!0,e.repositoryInfo={},e.repositoryInfo.id=e.params.repositoryId,e.repositoryInfo.location=e.params.location,e.repositoryInfo.restartRequested=!1,e.repositoryType="",e.saveRepoId=e.params.repositoryId,e.pageTitle=v.instant("view.edit.repo.title",{repositoryId:e.params.repositoryId}),e.invalidValues={isInvalidQueryTimeout:!1,isInvalidQueryLimit:!1,isInvalidLeftJoinWorkerThreads:!1,isInvalidBoundJoinBlockSize:!1,isInvalidJoinWorkerThreads:!1,isInvalidUnionWorkerThreads:!1,isInvalidValidationResultsLimitPerConstraint:!1,isInvalidValidationResultsLimitTotal:!1},e.hasActiveLocation=function(){return c.hasActiveLocation()},e.$watch(e.hasActiveLocation,(function(){e.hasActiveLocation&&p(c).then(t=>(e.locations=t,m.getRepository(e.repositoryInfo))).then((function(t){const o=t.data;if(angular.isDefined(o.params.ruleset)){let t=!1;if(angular.forEach(e.rulesets,(function(e){e.id===o.params.ruleset.value&&(t=!0)})),o.params.ruleset&&!t){const t=r(o.params.ruleset.value);e.rulesets.unshift({id:o.params.ruleset.value,name:"Custom: "+t})}}e.repositoryInfo=o,e.setRepositoryType(o.type),a(e.repositoryInfo.params),e.repositoryInfo.saveId=e.saveRepoId,e.loader=!1})).catch((function(i){const r=i.data,a=i.status,s=t.repositoryId;let l;l=404===a&&"system"!==s?Object(n.decodeHTML)(v.instant("edit.repo.error.not.exists",{repositoryId:s})):404===a&&"system"===s?Object(n.decodeHTML)(v.instant("edit.system.repo.warning")):getError(r),o.error(l,v.instant("common.error"),{allowHtml:!0}),404===a?setTimeout((function(){e.loader=!1,u.path("repository")}),1e3):e.loader=!1}))})),e.setRepositoryType=function(t){e.repositoryType=t},e.noMembersError=function(){o.error(v.instant("fedx.create.repo.no.members.warning"))},e.editRepoHttp=function(){e.loader=!0,m.editRepository(e.repositoryInfo.saveId,e.repositoryInfo).success((function(){o.success(v.instant("edit.repo.success.msg",{saveId:e.repositoryInfo.saveId})),c.init().finally(()=>e.goBackToPreviousLocation()),e.repositoryInfo.saveId===e.repositoryInfo.id&&e.repositoryInfo.restartRequested&&c.restartRepository(e.repositoryInfo)})).error((function(t){const i=getError(t);o.error(i,v.instant("common.error")),e.loader=!1}))},e.editRepository=function(){e.isInvalidRepoName=!i.FILENAME_PATTERN.test(e.repositoryInfo.id),l(e.repositoryInfo.params,e.invalidValues);const t=d(e.invalidValues,v);let r=Object(n.decodeHTML)(v.instant("edit.repo.save.changes.msg",{repoId:e.repositoryInfo.id}));e.repositoryInfo.saveId!==e.repositoryInfo.id?r+=Object(n.decodeHTML)(v.instant("edit.repo.rename.changes.msg")):e.repositoryInfo.restartRequested?r+=Object(n.decodeHTML)(v.instant("edit.repo.restart.requested.msg")):r+=Object(n.decodeHTML)(v.instant("edit.repo.restart.needed.msg")),e.isInvalidRepoName?o.error(v.instant("wrong.repo.name.error")):"fedx"===e.repositoryType&&0===e.repositoryInfo.params.member.value.length?e.noMembersError():t?o.error(t):f.openSimpleModal({title:v.instant("common.confirm.save"),message:r,warning:!0}).result.then((function(){e.editRepoHttp()}))},e.editRepositoryId=function(){let t=Object(n.decodeHTML)(v.instant("edit.repo.id.warning.msg"));e.isEnterprise()&&(t+=Object(n.decodeHTML)(v.instant("edit.repo.id.cluster.warning.msg"))),f.openSimpleModal({title:v.instant("confirm.enable.edit"),message:t,warning:!0}).result.then((function(){e.canEditRepoId=!0}))},e.goBackToPreviousLocation=function(){angular.isDefined(t.previous)?(delete u.$$search.previous,u.path("/")):u.path("/repository")},e.validateNumberInput=function(){l(e.repositoryInfo.params,e.invalidValues)},e.getShaclOptionsClass=function(){return s()}}angular.module("graphdb.framework.repositories.controllers",["ngCookies","ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.utils.localstorageadapter","toastr","ngFileUpload"]).controller("LocationsAndRepositoriesCtrl",f).controller("AddLocationCtrl",v).controller("EditLocationCtrl",y).controller("ChooseRepositoryCtrl",R).controller("AddRepositoryCtrl",T).controller("EditRepositoryCtrl",I).controller("EditRepositoryFileCtrl",g).controller("UploadRepositoryConfigCtrl",m),f.$inject=["$scope","$rootScope","$uibModal","toastr","$repositories","ModalService","$jwtAuth","LocationsRestService","LocalStorageAdapter","$interval","$translate","$q","GuidesService"],m.$inject=["$scope","$uibModalInstance","Upload","toastr","$translate"],v.$inject=["$scope","$uibModalInstance","toastr","productInfo","$translate"],y.$inject=["$scope","$uibModalInstance","location","productInfo"],R.$inject=["$scope","$location"],T.$inject=["$scope","toastr","$repositories","$location","$timeout","Upload","$routeParams","RepositoriesRestService","$translate"],g.$inject=["$scope","$uibModalInstance","RepositoriesRestService","file","toastr","$translate"],I.$inject=["$scope","$routeParams","toastr","$repositories","$location","ModalService","RepositoriesRestService","$translate"]}}]);
|
|
2
|
-
//# sourceMappingURL=5.b0829613ef25834bf1ab.bundle.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/angular/repositories/repository.constants.js","webpack:///./src/js/angular/repositories/controllers.js"],"names":["STATIC_RULESETS","id","name","REPOSITORY_TYPES","graphdbRepo","free","eeWorker","eeMaster","ontop","se","fedx","FILENAME_PATTERN","RegExp","NUMBER_PATTERN","getFileName","path","lastIdx","lastIndexOf","substring","parseNumberParamsIfNeeded","params","queryTimeout","value","parseInt","queryLimitResults","validationResultsLimitTotal","validationResultsLimitPerConstraint","leftJoinWorkerThreads","boundJoinBlockSize","joinWorkerThreads","unionWorkerThreads","getShaclOptionsClass","optionsModule","document","getElementById","isAriaExpanded","getAttribute","validateNumberFields","invalidValues","isInvalidQueryTimeout","test","isInvalidValidationResultsLimitTotal","isInvalidValidationResultsLimitPerConstraint","isInvalidQueryLimit","isInvalidLeftJoinWorkerThreads","isInvalidBoundJoinBlockSize","isInvalidJoinWorkerThreads","isInvalidUnionWorkerThreads","getInvalidParameterErrorMessage","param","$translate","instant","checkInvalidValues","invalidValuesKeys","Object","keys","invalidValuesVal","values","i","length","getDocBase","productInfo","productShortVersion","getFilteredLocations","$repositories","getLocations","then","locations","filter","location","errorMsg","degradedReason","LocationsAndRepositoriesCtrl","$scope","$rootScope","$uibModal","toastr","ModalService","$jwtAuth","LocationsRestService","LocalStorageAdapter","$interval","$q","GuidesService","loader","isLocationInactive","active","hasActiveLocation","getLocationsAbortRequestPromise","defer","finally","getActiveLocation","getLocationError","getDegradedReason","getRepositories","isRepoActive","repo","deleteLocation","uri","openSimpleModal","title","message","warning","result","addLocationHttp","dataAddLocation","addLocation","success","init","error","data","msg","getError","open","templateUrl","windowClass","controller","editLocationHttp","dataEditLocation","editLocation","resolve","setRepository","deleteRepository","repository","repositoryId","cashedDependenciesGraphPrefix","cashedClassHierarchyGraphPrefix","angular","forEach","key","startsWith","remove","removeCachedGraphsOnDelete","restartRepository","toggleDefaultRepository","getDefaultRepository","setDefaultRepository","getRepositoryDownloadLink","url","type","token","getAuthToken","encodeURIComponent","copyToClipboard","openCopyToClipboardModal","fromFile","openActiveLocationSettings","timer","isActive","guidePaused","initQuick","$on","cancel","getRepositoriesFromLocation","locationId","UploadRepositoryConfigCtrl","$uibModalInstance","Upload","upload","files","uploadFile","ok","uploadFileLoader","method","config","close","dismiss","AddLocationCtrl","newLocation","docBase","isValidLocation","indexOf","EditLocationCtrl","editedLocation","copy","ChooseRepositoryCtrl","$location","repositoryTypes","chooseRepositoryType","repoType","AddRepositoryCtrl","$timeout","$routeParams","RepositoriesRestService","repositoryType","rulesets","slice","enable","pageTitle","repositoryInfo","changedLocation","$broadcast","getConfig","getRepositoryConfiguration","resp","member","element","find","focus","catch","isEnterprise","isValidEERepository","isFreeEdition","isValidSERepository","isValidFRRepository","isValidOntopRepository","isValidFedXRepository","setPageTitle","activeLocation","isInvalidPieFile","uploadRuleset","ruleset","progress","evt","fileName","newValue","fileLocation","rulesetPie","unshift","rulesetPieFile","errorMessage","noMembersError","goBackToPreviousLocation","isDefined","previous","$$search","createRepoHttp","createRepository","repoId","createRepo","isInvalidRepoName","rulesetWarning","pp","undefined","disableSameAs","validateNumberInput","autofocusId","EditRepositoryFileCtrl","file","getRepositoryFileContent","fileContent","content","EditRepositoryCtrl","editRepoPage","canEditRepoId","restartRequested","saveRepoId","$watch","getRepository","response","ifRulesetExists","item","setRepositoryType","saveId","status","toastrMsg","allowHtml","setTimeout","editRepoHttp","editRepository","modalMsg","editRepositoryId","module","$inject"],"mappings":"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","file":"5.b0829613ef25834bf1ab.bundle.js","sourcesContent":["export const STATIC_RULESETS = [\n {id: 'empty', name: 'No inference'},\n {id: 'rdfs-optimized', name: 'RDFS (Optimized)'},\n {id: 'rdfs', name: 'RDFS'},\n {id: 'rdfsplus-optimized', name: 'RDFS-Plus (Optimized)'},\n {id: 'owl-horst-optimized', name: 'OWL-Horst (Optimized)'},\n {id: 'owl-horst', name: 'OWL-Horst'},\n {id: 'owl2-ql-optimized', name: 'OWL2-QL (Optimized)'},\n {id: 'owl2-ql', name: 'OWL2-QL'},\n {id: 'owl-max-optimized', name: 'OWL-Max (Optimized)'},\n {id: 'owl-max', name: 'OWL-Max'},\n {id: 'owl2-rl-optimized', name: 'OWL2-RL (Optimized)'},\n {id: 'owl2-rl', name: 'OWL2-RL'},\n\n];\n\nexport const REPOSITORY_TYPES = {graphdbRepo: 'graphdb', free: 'free', eeWorker: 'worker', eeMaster: 'master', ontop: 'ontop', se: 'se', fedx: 'fedx'};\nexport const FILENAME_PATTERN = new RegExp('^[a-zA-Z0-9-_]+$');\nexport const NUMBER_PATTERN = new RegExp('^[0-9]+$');\n","import {\n FILENAME_PATTERN,\n NUMBER_PATTERN,\n REPOSITORY_TYPES,\n STATIC_RULESETS\n} from \"./repository.constants\";\nimport {decodeHTML} from \"../../../app\";\n\nexport const getFileName = function (path) {\n let lastIdx = path.lastIndexOf('/');\n if (lastIdx === -1) {\n lastIdx = path.lastIndexOf('\\\\');\n }\n let name = path;\n if (lastIdx !== -1) {\n name = name.substring(lastIdx + 1);\n }\n return name;\n};\n\nconst parseNumberParamsIfNeeded = function (params) {\n if (params) {\n if (params.queryTimeout) {\n params.queryTimeout.value = parseInt(params.queryTimeout.value);\n }\n if (params.queryLimitResults && params.validationResultsLimitTotal && params.validationResultsLimitPerConstraint) {\n // Parse parameters properly to number\n params.queryLimitResults.value = parseInt(params.queryLimitResults.value);\n params.validationResultsLimitTotal.value = parseInt(params.validationResultsLimitTotal.value);\n params.validationResultsLimitPerConstraint.value = parseInt(params.validationResultsLimitPerConstraint.value);\n } else if (params.leftJoinWorkerThreads && params.boundJoinBlockSize && params.joinWorkerThreads && params.unionWorkerThreads) {\n params.leftJoinWorkerThreads.value = parseInt(params.leftJoinWorkerThreads.value);\n params.boundJoinBlockSize.value = parseInt(params.boundJoinBlockSize.value);\n params.joinWorkerThreads.value = parseInt(params.joinWorkerThreads.value);\n params.unionWorkerThreads.value = parseInt(params.unionWorkerThreads.value);\n }\n }\n};\n\nconst parseMemberParamIfNeeded = function (param) {\n if (param && param.member) {\n param.member.value = [];\n }\n};\n\nconst getShaclOptionsClass = function () {\n const optionsModule = document.getElementById('shaclOptions');\n\n if (optionsModule) {\n const isAriaExpanded = optionsModule.getAttribute('aria-expanded');\n if (isAriaExpanded && isAriaExpanded === 'true') {\n return 'fa fa-angle-down';\n }\n }\n return 'fa fa-angle-right';\n};\n\nconst validateNumberFields = function (params, invalidValues) {\n if (params.queryTimeout) {\n invalidValues.isInvalidQueryTimeout = !NUMBER_PATTERN.test(params.queryTimeout.value);\n }\n if (params.validationResultsLimitTotal && params.validationResultsLimitPerConstraint && params.queryLimitResults) {\n invalidValues.isInvalidValidationResultsLimitTotal = !NUMBER_PATTERN.test(params.validationResultsLimitTotal.value);\n invalidValues.isInvalidValidationResultsLimitPerConstraint = !NUMBER_PATTERN.test(params.validationResultsLimitPerConstraint.value);\n invalidValues.isInvalidQueryLimit = !NUMBER_PATTERN.test(params.queryLimitResults.value);\n } else if (params.leftJoinWorkerThreads && params.boundJoinBlockSize && params.joinWorkerThreads\n && params.unionWorkerThreads) {\n invalidValues.isInvalidLeftJoinWorkerThreads = !NUMBER_PATTERN.test(params.leftJoinWorkerThreads.value);\n invalidValues.isInvalidBoundJoinBlockSize = !NUMBER_PATTERN.test(params.boundJoinBlockSize.value);\n invalidValues.isInvalidJoinWorkerThreads = !NUMBER_PATTERN.test(params.joinWorkerThreads.value);\n invalidValues.isInvalidUnionWorkerThreads = !NUMBER_PATTERN.test(params.unionWorkerThreads.value);\n }\n};\n\nconst getInvalidParameterErrorMessage = function (param, $translate) {\n if (param === \"isInvalidQueryLimit\") {\n return $translate.instant('invalid.query.limit');\n } else if (param === \"isInvalidQueryTimeout\") {\n return $translate.instant('invalid.query.timeout');\n } else if (param === \"isInvalidValidationResultsLimitTotal\") {\n return $translate.instant('invalid.validation.results.limit.total');\n } else if (param === \"isInvalidValidationResultsLimitPerConstraint\") {\n return $translate.instant('invalid.validation.results.limit.per.constraint');\n } else if (param === \"isInvalidJoinWorkerThreads\") {\n return $translate.instant('invalid.join.worker.threads');\n } else if (param === \"isInvalidLeftJoinWorkerThreads\") {\n return $translate.instant('invalid.left.join.worker.threads');\n } else if (param === \"isInvalidUnionWorkerThreads\") {\n return $translate.instant('invalid.union.worker.threads');\n } else if (param === \"isInvalidBoundJoinBlockSize\") {\n return $translate.instant('invalid.bound.join.block.size');\n }\n};\n\nconst checkInvalidValues = function (invalidValues, $translate) {\n const invalidValuesKeys = Object.keys(invalidValues);\n const invalidValuesVal = Object.values(invalidValues);\n\n for (let i = 0; i < invalidValuesKeys.length; i++) {\n if (invalidValuesVal[i]) {\n return getInvalidParameterErrorMessage(invalidValuesKeys[i], $translate);\n }\n }\n return '';\n};\n\nconst getDocBase = function (productInfo) {\n return `https://graphdb.ontotext.com/documentation/${productInfo.productShortVersion}`;\n};\nconst filterLocations = function (result) {\n return result.filter((location) => !location.errorMsg && !location.degradedReason);\n};\n\n/**\n * Gets the remote locations that are error free and without degraded reason\n * @param {*} $repositories the repositories service\n * @return {[] | Promise} returns the locations as array or a promise of the array\n */\nconst getFilteredLocations = function ($repositories) {\n // Don't allow the user to create repository on location with error or degradeded reason\n return $repositories.getLocations().then((locations) => filterLocations(locations));\n};\n\nconst modules = [\n 'ngCookies',\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.utils.localstorageadapter',\n 'toastr',\n 'ngFileUpload'\n];\n\nangular.module('graphdb.framework.repositories.controllers', modules)\n .controller('LocationsAndRepositoriesCtrl', LocationsAndRepositoriesCtrl)\n .controller('AddLocationCtrl', AddLocationCtrl)\n .controller('EditLocationCtrl', EditLocationCtrl)\n .controller('ChooseRepositoryCtrl', ChooseRepositoryCtrl)\n .controller('AddRepositoryCtrl', AddRepositoryCtrl)\n .controller('EditRepositoryCtrl', EditRepositoryCtrl)\n .controller('EditRepositoryFileCtrl', EditRepositoryFileCtrl)\n .controller('UploadRepositoryConfigCtrl', UploadRepositoryConfigCtrl);\n\nLocationsAndRepositoriesCtrl.$inject = ['$scope', '$rootScope', '$uibModal', 'toastr', '$repositories', 'ModalService', '$jwtAuth', 'LocationsRestService',\n 'LocalStorageAdapter', '$interval', '$translate', '$q', 'GuidesService'];\n\nfunction LocationsAndRepositoriesCtrl($scope, $rootScope, $uibModal, toastr, $repositories, ModalService, $jwtAuth, LocationsRestService,\n LocalStorageAdapter, $interval, $translate, $q, GuidesService) {\n $scope.loader = true;\n\n $scope.isLocationInactive = function (location) {\n return !location.active || !$scope.hasActiveLocation();\n };\n\n const getLocationsAbortRequestPromise = $q.defer();\n //Get locations\n function getLocations() {\n return $repositories.getLocations(getLocationsAbortRequestPromise)\n .then((locations) => {\n $scope.locations = locations;\n })\n .finally(() => $scope.loader = false);\n }\n\n $scope.hasActiveLocation = function () {\n return $repositories.hasActiveLocation();\n };\n\n $scope.getActiveLocation = function () {\n return $repositories.getActiveLocation();\n };\n\n $scope.getLocationError = function () {\n return $repositories.getLocationError();\n };\n\n $scope.getDegradedReason = function () {\n return $repositories.getDegradedReason();\n };\n\n $scope.getRepositories = function () {\n return $repositories.getRepositories();\n };\n\n $scope.isRepoActive = function (repo) {\n return $repositories.isRepoActive(repo);\n };\n\n //Delete location\n $scope.deleteLocation = function (uri) {\n ModalService.openSimpleModal({\n title: $translate.instant('location.confirm.detach'),\n message: $translate.instant('location.confirm.detach.warning', {uri: uri}),\n warning: true\n }).result\n .then(function () {\n $scope.loader = true;\n $repositories.deleteLocation(uri).finally(() => getLocations());\n });\n };\n\n //Add new location\n\n $scope.addLocationHttp = function (dataAddLocation) {\n $scope.loader = true;\n LocationsRestService.addLocation(dataAddLocation)\n .success(function () {\n //Reload locations and repositories\n $repositories.init();\n })\n .error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n })\n .finally(() => getLocations());\n };\n\n $scope.addLocation = function () {\n $uibModal.open({\n templateUrl: 'js/angular/templates/modal/add-location.html',\n windowClass: 'addLocationDialog',\n controller: 'AddLocationCtrl'\n }).result\n .then(function (dataAddLocation) {\n $scope.addLocationHttp(dataAddLocation);\n });\n };\n\n //Edit location\n $scope.editLocationHttp = function (dataEditLocation) {\n $scope.loader = true;\n LocationsRestService.editLocation(dataEditLocation)\n .success(function () {\n //Reload locations and repositories\n $repositories.init();\n })\n .error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n })\n .finally(() => getLocations());\n };\n\n $scope.editLocation = function (location) {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/edit-location.html',\n controller: 'EditLocationCtrl',\n resolve: {\n location: function () {\n return location;\n }\n }\n });\n\n modalInstance.result.then(function (dataEditLocation) {\n $scope.editLocationHttp(dataEditLocation);\n }, function () {\n });\n };\n\n //Change repository\n $scope.setRepository = function (repo) {\n $repositories.setRepository(repo);\n };\n\n //Delete repository\n $scope.deleteRepository = function (repository) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm.delete'),\n message: decodeHTML($translate.instant('delete.repo.warning.msg', {repositoryId: repository.id})),\n warning: true\n }).result\n .then(function () {\n $scope.loader = true;\n $repositories.deleteRepository(repository)\n .finally(() => {\n getLocations();\n $scope.loader = false;\n });\n removeCachedGraphsOnDelete(repository);\n });\n };\n\n $scope.restartRepository = function (repository) {\n ModalService.openSimpleModal({\n title: $translate.instant('confirm.restart.repo'),\n message: decodeHTML($translate.instant('confirm.restart.repo.warning.msg', {repositoryId: repository.id})),\n warning: true\n }).result\n .then(function () {\n $scope.loader = true;\n $repositories.restartRepository(repository).finally(() => getLocations());\n });\n };\n\n $scope.toggleDefaultRepository = function (repositoryId) {\n if ($scope.getDefaultRepository() === repositoryId) {\n // unset\n $repositories.setDefaultRepository(null);\n } else {\n // set\n $repositories.setDefaultRepository(repositoryId);\n }\n };\n\n $scope.getDefaultRepository = function () {\n return $repositories.getDefaultRepository();\n };\n\n /* Unused, data urls don't behave well in all browsers, avoid them when possible\n $scope.getRepoTurtleConfig = function (repository) {\n function downloadRepoConfig(repoTurtleConfig, repository) {\n $('.download-turtle-config')\n .mouseup(function () {\n $(this)\n .attr('href', repoTurtleConfig)\n .attr('download', repository.id + '-config.ttl')\n });\n }\n\n $repositories.getRepositoryTurtleConfig(repository)\n .success(function (response) {\n var repoTurtleConfigDownload = 'data:application/octet-stream;charset=utf-8;base64,'\n + btoa(unescape(encodeURIComponent(response)));\n downloadRepoConfig(repoTurtleConfigDownload, repository);\n })\n .error(function () {\n toastr.error('Error getting repository configuration for '' + repository.id + ''');\n });\n };\n */\n\n $scope.getRepositoryDownloadLink = function (repository) {\n let url = `rest/repositories/${repository.id}${(repository.type === REPOSITORY_TYPES.ontop ? '/download-zip'\n : '/download-ttl')}?location=${repository.location}`;\n const token = $jwtAuth.getAuthToken();\n if (token) {\n url = `${url}&authToken=${encodeURIComponent(token)}`;\n }\n return url;\n };\n\n ///Copy to clipboard popover options\n $scope.copyToClipboard = function (uri) {\n ModalService.openCopyToClipboardModal(uri);\n };\n\n $scope.fromFile = function () {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/upload-repository-config.html',\n controller: 'UploadRepositoryConfigCtrl'\n });\n modalInstance.result.then(function () {\n $repositories.init();\n });\n };\n\n //Delete repository\n $scope.openActiveLocationSettings = function () {\n $uibModal.open({\n templateUrl: 'js/angular/settings/modal/location-settings.html',\n controller: 'ActiveLocationSettingsCtrl'\n });\n };\n\n getLocations();\n const timer = $interval(function () {\n if (GuidesService.isActive() && !$rootScope.guidePaused) {\n // Don't refresh list while a guide is active\n return;\n }\n\n // Update repositories state\n $repositories.initQuick();\n getLocations();\n }, 5000);\n\n $scope.$on('$destroy', function () {\n $interval.cancel(timer);\n // If there is a getLocations request in progress, abort it so the service can properly clear flags\n if (getLocationsAbortRequestPromise) {\n getLocationsAbortRequestPromise.resolve();\n }\n });\n\n function removeCachedGraphsOnDelete(repo) {\n const cashedDependenciesGraphPrefix = `dependencies-selectedGraph-${repo.id}`;\n const cashedClassHierarchyGraphPrefix = `classHierarchy-selectedGraph-${repo.id}`;\n angular.forEach(LocalStorageAdapter.keys(), function (key) {\n // remove everything but the hide prefixes setting, it should always persist\n if (key.startsWith(cashedClassHierarchyGraphPrefix) || key.startsWith(cashedDependenciesGraphPrefix)) {\n LocalStorageAdapter.remove(key);\n }\n });\n }\n\n $scope.getRepositoriesFromLocation = function (locationId) {\n return $repositories.getRepositoriesFromLocation(locationId);\n };\n}\n\nUploadRepositoryConfigCtrl.$inject = ['$scope', '$uibModalInstance', 'Upload', 'toastr', '$translate'];\n\nfunction UploadRepositoryConfigCtrl($scope, $uibModalInstance, Upload, toastr, $translate) {\n $scope.upload = function (files) {\n if (files && files.length) {\n $scope.uploadFile = files[0];\n }\n };\n $scope.ok = function () {\n if ($scope.uploadFile) {\n $scope.uploadFileLoader = true;\n Upload.upload({\n url: 'rest/repositories',\n method: 'POST',\n data: {config: $scope.uploadFile}\n })\n .success(function () {\n $scope.uploadFileLoader = false;\n $uibModalInstance.close();\n })\n .error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.uploadFileLoader = false;\n });\n }\n };\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nAddLocationCtrl.$inject = ['$scope', '$uibModalInstance', 'toastr', 'productInfo', '$translate'];\n\nfunction AddLocationCtrl($scope, $uibModalInstance, toastr, productInfo, $translate) {\n\n $scope.newLocation = {\n 'uri': '',\n 'authType': 'none',\n 'username': '',\n 'password': '',\n 'active': false\n };\n $scope.docBase = getDocBase(productInfo);\n\n $scope.isValidLocation = function () {\n return ($scope.newLocation.uri.length < 6 ||\n $scope.newLocation.uri.indexOf('http:') === 0 || $scope.newLocation.uri.indexOf('https:') === 0)\n && $scope.newLocation.uri.indexOf('/repositories') <= -1;\n };\n\n $scope.ok = function () {\n if (!$scope.newLocation) {\n toastr.error($translate.instant('location.cannot.be.empty.error'));\n return;\n }\n $uibModalInstance.close($scope.newLocation);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nEditLocationCtrl.$inject = ['$scope', '$uibModalInstance', 'location', 'productInfo'];\n\nfunction EditLocationCtrl($scope, $uibModalInstance, location, productInfo) {\n\n $scope.editedLocation = angular.copy(location);\n $scope.docBase = getDocBase(productInfo);\n\n $scope.ok = function () {\n $uibModalInstance.close($scope.editedLocation);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nChooseRepositoryCtrl.$inject = ['$scope', '$location'];\n\nfunction ChooseRepositoryCtrl($scope, $location) {\n $scope.repositoryTypes = REPOSITORY_TYPES;\n $scope.chooseRepositoryType = function (repoType) {\n $location.path(`${$location.path()}/${repoType}`);\n };\n}\n\nAddRepositoryCtrl.$inject = ['$scope', 'toastr', '$repositories', '$location', '$timeout', 'Upload', '$routeParams',\n 'RepositoriesRestService', '$translate'];\n\nfunction AddRepositoryCtrl($scope, toastr, $repositories, $location, $timeout, Upload, $routeParams, RepositoriesRestService, $translate) {\n $scope.rulesets = STATIC_RULESETS.slice();\n $scope.repositoryTypes = REPOSITORY_TYPES;\n $scope.params = $routeParams;\n $scope.repositoryType = $routeParams.repositoryType;\n $scope.enable = true;\n\n $scope.loader = true;\n $scope.pageTitle = $translate.instant('view.create.repo.title');\n $scope.repositoryInfo = {\n id: '',\n params: {},\n title: '',\n type: '',\n location: ''\n };\n\n $scope.invalidValues = {\n isInvalidQueryTimeout: false,\n isInvalidQueryLimit: false,\n isInvalidLeftJoinWorkerThreads: false,\n isInvalidBoundJoinBlockSize: false,\n isInvalidJoinWorkerThreads: false,\n isInvalidUnionWorkerThreads: false,\n isInvalidValidationResultsLimitPerConstraint: false,\n isInvalidValidationResultsLimitTotal: false\n };\n\n getFilteredLocations($repositories)\n .then((locations) => {\n $scope.locations = locations;\n });\n\n $scope.changedLocation = function () {\n $scope.$broadcast('changedLocation');\n };\n\n function isValidEERepository(repositoryType) {\n return $scope.isEnterprise() && (repositoryType === REPOSITORY_TYPES.graphdbRepo);\n }\n\n function isValidSERepository(repositoryType) {\n return !$scope.isFreeEdition() && !$scope.isEnterprise() && repositoryType === REPOSITORY_TYPES.graphdbRepo;\n }\n\n function isValidFRRepository(repositoryType) {\n return $scope.isFreeEdition() && repositoryType === REPOSITORY_TYPES.graphdbRepo;\n }\n\n function isValidOntopRepository(repositoryType) {\n return repositoryType === REPOSITORY_TYPES.ontop;\n }\n\n function isValidFedXRepository(repositoryType) {\n return repositoryType === REPOSITORY_TYPES.fedx;\n }\n\n function isRepositoryTypeValid(repositoryType) {\n return isValidEERepository(repositoryType) || isValidSERepository(repositoryType)\n || isValidFRRepository(repositoryType) || isValidOntopRepository(repositoryType)\n || isValidFedXRepository(repositoryType);\n }\n\n function setPageTitle(repositoryType) {\n switch (repositoryType) {\n case REPOSITORY_TYPES.graphdbRepo:\n $scope.pageTitle = $translate.instant('view.create.repo.title', {repoType: 'GraphDB'});\n break;\n case REPOSITORY_TYPES.ontop:\n $scope.pageTitle = $translate.instant('view.create.repo.title', {repoType: 'Ontop Virtual SPARQL'});\n break;\n case REPOSITORY_TYPES.fedx:\n $scope.pageTitle = $translate.instant('view.create.repo.title', {repoType: 'FedX Virtual SPARQL'});\n break;\n }\n }\n\n $scope.getConfig = function (repoType) {\n RepositoriesRestService.getRepositoryConfiguration(repoType).then(function (resp) {\n const data = resp.data;\n $scope.repositoryInfo.params = data.params;\n $scope.repositoryInfo.type = data.type;\n parseNumberParamsIfNeeded($scope.repositoryInfo.params);\n parseMemberParamIfNeeded($scope.repositoryInfo.params);\n $scope.loader = false;\n // The clean way is the \"autofocus\" attribute and we use it but it doesn't seem to\n // work in all browsers because of the way dynamic content is handled so give it another\n // try here.\n $timeout(function () {\n // Focus the ID field\n angular.element(document).find('#id').focus();\n }, 50);\n }).catch(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.loader = false;\n });\n };\n\n if ($scope.repositoryType && isRepositoryTypeValid($scope.repositoryType)) {\n $scope.repositoryInfo.type = $scope.repositoryType;\n $scope.getConfig($scope.repositoryType);\n setPageTitle($scope.repositoryType);\n } else {\n $location.path('/repository/create');\n }\n\n $scope.hasActiveLocation = function () {\n return $repositories.hasActiveLocation();\n };\n\n $scope.activeLocation = function () {\n return $repositories.getActiveLocation();\n };\n\n let isInvalidPieFile = false;\n $scope.uploadRuleset = function (files) {\n if (files && files.length) {\n $scope.uploadFile = files[0];\n $scope.uploadFileLoader = true;\n Upload.upload({\n url: 'rest/repositories/ruleset/upload',\n data: {ruleset: $scope.uploadFile, location: $scope.repositoryInfo.location}\n }).progress(function (evt) {\n /*\t\t\t\t\t\tvar progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);*/\n }).success(function (data) {\n if (!data.success) {\n toastr.error(data.errorMessage);\n isInvalidPieFile = true;\n } else {\n const fileName = $scope.uploadFile.name;\n const newValue = {id: data.fileLocation, name: 'Custom: ' + fileName};\n if ($scope.rulesetPie) {\n // file was previously uploaded\n $scope.rulesets[0] = newValue;\n } else {\n // file uploaded for the first time\n $scope.rulesets.unshift(newValue);\n }\n $scope.rulesetPie = data.fileLocation;\n $scope.rulesetPieFile = fileName;\n $scope.repositoryInfo.params.ruleset.value = $scope.rulesetPie;\n }\n $scope.uploadFileLoader = false;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.uploadFile = '';\n $scope.uploadFileLoader = false;\n });\n }\n };\n\n $scope.noMembersError = function () {\n toastr.error($translate.instant('fedx.create.repo.no.members.warning'));\n };\n\n $scope.goBackToPreviousLocation = function () {\n if (angular.isDefined($routeParams.previous)) {\n delete $location.$$search.previous;\n $location.path('/');\n } else {\n $location.path('/repository');\n }\n };\n\n $scope.createRepoHttp = function () {\n $scope.loader = true;\n RepositoriesRestService.createRepository($scope.repositoryInfo)\n .then(function () {\n toastr.success($translate.instant('created.repo.success.msg', {repoId: $scope.repositoryInfo.id}));\n return $repositories.init();\n })\n .then(() => $scope.goBackToPreviousLocation())\n .catch(function (error) {\n const msg = getError(error.data);\n toastr.error(msg, $translate.instant('common.error'));\n })\n .finally(() => {\n $scope.loader = false;\n });\n };\n\n $scope.createRepo = function () {\n if (!$scope.repositoryInfo.id) {\n toastr.error($translate.instant('empty.repoid.warning'));\n return;\n }\n\n $scope.isInvalidRepoName = !FILENAME_PATTERN.test($scope.repositoryInfo.id);\n validateNumberFields($scope.repositoryInfo.params, $scope.invalidValues);\n const invalidValues = checkInvalidValues($scope.invalidValues, $translate);\n\n if (isInvalidPieFile) {\n toastr.error($translate.instant('invalid.ruleset.file.error'));\n } else if ($scope.isInvalidRepoName) {\n toastr.error($translate.instant('wrong.repo.name.error'));\n } else if ($scope.repositoryType === \"fedx\" && $scope.repositoryInfo.params.member.value.length === 0) {\n $scope.noMembersError();\n } else if (invalidValues) {\n toastr.error(invalidValues);\n } else {\n $scope.createRepoHttp();\n }\n };\n\n $scope.rulesetWarning = function () {\n const pp = $scope.repositoryInfo.params;\n if (pp === undefined || pp.ruleset === undefined || pp.disableSameAs === undefined) {\n return '';\n }\n\n if (pp.ruleset.value.indexOf('owl') === 0 && pp.disableSameAs.value === 'true') {\n return $translate.instant('repoTooltips.rulesetWarnings.needsSameAs');\n } else if (pp.ruleset.value.indexOf('rdfs') === 0 && pp.disableSameAs.value === 'false') {\n return $translate.instant('repoTooltips.rulesetWarnings.doesntNeedSameAs');\n } else if (pp.ruleset.value === $scope.rulesetPie) {\n return $translate.instant('repoTooltips.rulesetWarnings.customRuleset');\n } else {\n return '';\n }\n };\n\n $scope.validateNumberInput = function () {\n validateNumberFields($scope.repositoryInfo.params, $scope.invalidValues);\n };\n\n $scope.getShaclOptionsClass = function () {\n return getShaclOptionsClass();\n };\n //TODO - check if repositoryID exist\n\n // Request auto-focus of the ID input when creating a repo (but not when editing)\n $scope.autofocusId = 'autofocus';\n}\n\nEditRepositoryFileCtrl.$inject = ['$scope', '$uibModalInstance', 'RepositoriesRestService', 'file', 'toastr', '$translate'];\n\nfunction EditRepositoryFileCtrl($scope, $uibModalInstance, RepositoriesRestService, file, toastr, $translate) {\n\n if (file) {\n RepositoriesRestService.getRepositoryFileContent(file).success(function (data) {\n $scope.fileContent = data;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n });\n }\n\n $scope.ok = function () {\n $uibModalInstance.close({\n content: $scope.fileContent,\n fileLocation: file\n });\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nEditRepositoryCtrl.$inject = ['$scope', '$routeParams', 'toastr', '$repositories', '$location', 'ModalService', 'RepositoriesRestService',\n '$translate'];\n\nfunction EditRepositoryCtrl($scope, $routeParams, toastr, $repositories, $location, ModalService, RepositoriesRestService, $translate) {\n\n $scope.rulesets = STATIC_RULESETS.slice();\n $scope.repositoryTypes = REPOSITORY_TYPES;\n\n $scope.editRepoPage = true;\n $scope.canEditRepoId = false;\n $scope.params = $routeParams;\n $scope.loader = true;\n $scope.repositoryInfo = {};\n $scope.repositoryInfo.id = $scope.params.repositoryId;\n $scope.repositoryInfo.location = $scope.params.location;\n $scope.repositoryInfo.restartRequested = false;\n $scope.repositoryType = '';\n $scope.saveRepoId = $scope.params.repositoryId;\n $scope.pageTitle = $translate.instant('view.edit.repo.title', {repositoryId: $scope.params.repositoryId});\n $scope.invalidValues = {\n isInvalidQueryTimeout: false,\n isInvalidQueryLimit: false,\n isInvalidLeftJoinWorkerThreads: false,\n isInvalidBoundJoinBlockSize: false,\n isInvalidJoinWorkerThreads: false,\n isInvalidUnionWorkerThreads: false,\n isInvalidValidationResultsLimitPerConstraint: false,\n isInvalidValidationResultsLimitTotal: false\n };\n $scope.hasActiveLocation = function () {\n return $repositories.hasActiveLocation();\n };\n\n $scope.$watch($scope.hasActiveLocation, function () {\n if ($scope.hasActiveLocation) {\n // Should get locations before getting repository info\n getFilteredLocations($repositories).then((locations) => {\n $scope.locations = locations;\n return RepositoriesRestService.getRepository($scope.repositoryInfo);\n })\n .then(function (response) {\n const data = response.data;\n if (angular.isDefined(data.params.ruleset)) {\n let ifRulesetExists = false;\n angular.forEach($scope.rulesets, function (item) {\n if (item.id === data.params.ruleset.value) {\n ifRulesetExists = true;\n }\n });\n if (data.params.ruleset && !ifRulesetExists) {\n const name = getFileName(data.params.ruleset.value);\n $scope.rulesets.unshift({id: data.params.ruleset.value, name: 'Custom: ' + name});\n }\n }\n $scope.repositoryInfo = data;\n $scope.setRepositoryType(data.type);\n parseNumberParamsIfNeeded($scope.repositoryInfo.params);\n $scope.repositoryInfo.saveId = $scope.saveRepoId;\n $scope.loader = false;\n })\n .catch(function (response) {\n const data = response.data;\n const status = response.status;\n const repositoryId = $routeParams.repositoryId;\n let toastrMsg;\n\n if (status === 404 && repositoryId !== 'system') {\n toastrMsg = decodeHTML($translate.instant('edit.repo.error.not.exists', {repositoryId}));\n } else if (status === 404 && repositoryId === 'system') {\n toastrMsg = decodeHTML($translate.instant('edit.system.repo.warning'));\n } else {\n toastrMsg = getError(data);\n }\n\n toastr.error(toastrMsg, $translate.instant('common.error'), {allowHtml: true});\n\n if (status === 404) {\n setTimeout(function () {\n $scope.loader = false;\n $location.path('repository');\n }, 1000);\n } else {\n $scope.loader = false;\n }\n });\n }\n });\n\n $scope.setRepositoryType = function (type) {\n $scope.repositoryType = type;\n };\n\n $scope.noMembersError = function () {\n toastr.error($translate.instant('fedx.create.repo.no.members.warning'));\n };\n\n $scope.editRepoHttp = function () {\n $scope.loader = true;\n RepositoriesRestService.editRepository($scope.repositoryInfo.saveId, $scope.repositoryInfo)\n .success(function () {\n toastr.success($translate.instant('edit.repo.success.msg', {saveId: $scope.repositoryInfo.saveId}));\n $repositories.init().finally(() => $scope.goBackToPreviousLocation());\n if ($scope.repositoryInfo.saveId === $scope.repositoryInfo.id && $scope.repositoryInfo.restartRequested) {\n $repositories.restartRepository($scope.repositoryInfo);\n }\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.loader = false;\n });\n };\n\n $scope.editRepository = function () {\n $scope.isInvalidRepoName = !FILENAME_PATTERN.test($scope.repositoryInfo.id);\n validateNumberFields($scope.repositoryInfo.params, $scope.invalidValues);\n const invalidValues = checkInvalidValues($scope.invalidValues, $translate);\n let modalMsg = decodeHTML($translate.instant('edit.repo.save.changes.msg', {repoId: $scope.repositoryInfo.id}));\n if ($scope.repositoryInfo.saveId !== $scope.repositoryInfo.id) {\n modalMsg += decodeHTML($translate.instant('edit.repo.rename.changes.msg'));\n } else if ($scope.repositoryInfo.restartRequested) {\n modalMsg += decodeHTML($translate.instant('edit.repo.restart.requested.msg'));\n } else {\n modalMsg += decodeHTML($translate.instant('edit.repo.restart.needed.msg'));\n }\n if ($scope.isInvalidRepoName) {\n toastr.error($translate.instant('wrong.repo.name.error'));\n } else if ($scope.repositoryType === \"fedx\" && $scope.repositoryInfo.params.member.value.length === 0) {\n $scope.noMembersError();\n } else if (invalidValues) {\n toastr.error(invalidValues);\n } else {\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm.save'),\n message: modalMsg,\n warning: true\n }).result\n .then(function () {\n $scope.editRepoHttp();\n });\n }\n };\n\n $scope.editRepositoryId = function () {\n let msg = decodeHTML($translate.instant('edit.repo.id.warning.msg'));\n if ($scope.isEnterprise()) {\n msg += decodeHTML($translate.instant('edit.repo.id.cluster.warning.msg'));\n }\n ModalService.openSimpleModal({\n title: $translate.instant('confirm.enable.edit'),\n message: msg,\n warning: true\n }).result.then(function () {\n $scope.canEditRepoId = true;\n });\n };\n\n $scope.goBackToPreviousLocation = function () {\n if (angular.isDefined($routeParams.previous)) {\n delete $location.$$search.previous;\n $location.path('/');\n } else {\n $location.path('/repository');\n }\n };\n\n $scope.validateNumberInput = function () {\n validateNumberFields($scope.repositoryInfo.params, $scope.invalidValues);\n };\n\n $scope.getShaclOptionsClass = function () {\n return getShaclOptionsClass();\n };\n}\n"],"sourceRoot":""}
|