graphdb-workbench 2.8.0-RC1 → 2.8.0-RC3
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/{105.647434fb577715a0cbf0.bundle.js → 105.f1f5759395f8ba9fff6f.bundle.js} +1 -1
- package/dist/182.dfcc20ae89193db499d9.bundle.js +1 -1
- package/dist/22.673ef35a23421e7dffcb.bundle.js +1 -1
- package/dist/{265.7fc757395a64fed907fc.bundle.js → 265.d128932eb1a7be270b66.bundle.js} +1 -1
- package/dist/27.2e7f5c9f8f4a670b3984.bundle.js +1 -0
- package/dist/33.d4d571fa95fe4279e91a.bundle.js +1 -0
- package/dist/341.40c87b67067473b65948.bundle.js +1 -1
- package/dist/347.9da36037aa6cf847fca9.bundle.js +1 -1
- package/dist/350.98af5dc7b011f3bb0cea.bundle.js +1 -1
- package/dist/351.4b24b91033c1f2ff99bc.bundle.js +1 -1
- package/dist/352.95aa115bee7aac6ad664.bundle.js +1 -1
- package/dist/353.23320eb168ae4ae33394.bundle.js +1 -1
- package/dist/354.979dc4d4d8495191a364.bundle.js +1 -1
- package/dist/384.5538193bdeac0703bc47.bundle.js +1 -1
- package/dist/396.c5a25717c4fc949419a7.bundle.js +1 -1
- package/dist/397.33463b93b02b13a80453.bundle.js +1 -1
- package/dist/{398.42f0bbe65197ac4cee74.bundle.js → 398.b83b6410f7cceec4fc3f.bundle.js} +1 -1
- package/dist/399.0916866cffd7814843af.bundle.js +1 -1
- package/dist/400.1ce74b220dacdb1ab34c.bundle.js +1 -1
- package/dist/402.61aaab5f119f02d6a6c4.bundle.js +1 -1
- package/dist/403.203cccb77544e449317a.bundle.js +1 -1
- package/dist/404.b921697f6552cc581aac.bundle.js +1 -1
- package/dist/405.3e17362183cfe674af25.bundle.js +1 -1
- package/dist/41.edbd16a2fc60a997c1ee.bundle.js +1 -1
- package/dist/42.f76e5e500efcc079a9c7.bundle.js +1 -1
- package/dist/48.49ca75d24206ea496ef5.bundle.js +1 -0
- package/dist/49.32ed550dc99d64e69f20.bundle.js +1 -0
- package/dist/{53.55925fb9fea11ab046d3.bundle.js → 53.a429006d4cd89ca07d7f.bundle.js} +1 -1
- package/dist/59.69785f5f7ae1e65841ff.bundle.js +1 -1
- package/dist/6.1143a99a77f0463b21b0.bundle.js +1 -0
- package/dist/64.2f87215d70caab13c80d.bundle.js +1 -0
- package/dist/70.4e944a1170802f15dc71.bundle.js +1 -1
- package/dist/77.c518fffc84eb04d570a9.bundle.js +1 -0
- package/dist/{bundle.a3c65cb24062525b5dd1.bundle.js → bundle.debfe2fd949a59877cbe.bundle.js} +2 -2
- package/dist/css/ttyg/chat-item-details.css +1 -0
- package/dist/i18n/locale-en.json +6 -3
- package/dist/i18n/locale-fr.json +6 -3
- package/dist/index.html +3 -3
- package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.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/yasgui-component/templates/yasgui-component.html +1 -1
- 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/security/templates/user.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 +4 -3
- 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 +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/license-checker.json +2 -2
- package/dist/pages/aclmanagement.html +2 -2
- package/dist/pages/autocomplete.html +1 -1
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/cluster-management/clusterInfo.html +3 -3
- package/dist/pages/create-index.html +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 +8 -8
- package/dist/pages/guides.html +1 -1
- package/dist/pages/import.html +2 -2
- package/dist/pages/jdbc-create.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/ux-test1.html +2 -2
- package/dist/pages/webapi.html +2 -2
- package/dist/res/swagger5/index.html +12 -12
- package/package.json +1 -1
- package/dist/27.0bef4e8a2036ac558363.bundle.js +0 -1
- package/dist/33.af2c6f75cf2552a3673a.bundle.js +0 -1
- package/dist/48.3f307ccfc9f7fdb4493a.bundle.js +0 -1
- package/dist/49.cb3092e45da0b746f614.bundle.js +0 -1
- package/dist/6.f0a3eb64b7f08f563a1e.bundle.js +0 -1
- package/dist/64.d22107a2323b4f530473.bundle.js +0 -1
- package/dist/77.8ec067adfbc7ace36ba9.bundle.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[265],{108:function(t,s
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[265],{108:function(t,e,s){"use strict";s.r(e),s.d(e,"ChatAnswerModel",(function(){return n})),s.d(e,"ContinueChatRun",(function(){return a}));class n{constructor(t={}){this._chatId=t.chatId,this._chatName=t.chatName||"",this._timestamp=t.timestamp,this._messages=t.messages||[],this._continueRunId=t.continueRunId}get chatId(){return this._chatId}set chatId(t){this._chatId=t}get chatName(){return this._chatName}set chatName(t){this._chatName=t}get timestamp(){return this._timestamp}set timestamp(t){this._timestamp=t}get messages(){return this._messages}set messages(t){this._messages=t}get continueRunId(){return this._continueRunId}set continueRunId(t){this._continueRunId=t}}class a{constructor(t,e){this._chatItem=t,this._runId=e}get chatId(){return this._chatItem.chatId}toContinueRunRequestPayload(){return{conversationId:this.chatId,runId:this._runId,agentId:this._chatItem.agentId,tzOffset:-(new Date).getTimezoneOffset()}}}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[27,92,132,138,141,144,323],{104:function(e,t,n){"use strict";n.r(t),n.d(t,"UrlUtils",(function(){return i}));const r=/^(h|ht|htt|http|https|http:|https:|http:\/|https:\/|http:\/\/|https:\/\/|https?:\/\/[\S]*)$/i,o=/^(f|ft|ftp|ftps|ftp:|ftps:|ftp:\/|ftps:\/|ftp:\/\/|ftps:\/\/[\S]*)$/i;class i{static isValidUrl(e){return r.test(e)||o.test(e)}static doesNotContain(e,t){return!new RegExp(t).test(e)}static doesNotUseProtocol(e,t){return!new RegExp("^("+t.join("|")+")://","i").test(e)}}},121:function(e,t,n){"use strict";n.r(t);var r=n(104);angular.module("graphdb.framework.core.directives.validate-url",[]).directive("validateUrl",(function(){return{restrict:"A",require:"ngModel",link:function(e,t,n,o){o.$validators.validUrl=function(e,t){if(o.$isEmpty(t))return"false"!==n.allowEmpty;if(!r.UrlUtils.isValidUrl(t))return!1;if(n.exclude&&!r.UrlUtils.doesNotContain(t,n.exclude))return!1;if(n.excludeProtocol){const e=n.excludeProtocol.split(",");if(!r.UrlUtils.doesNotUseProtocol(t,e))return!1}return!0}}}}))},122:function(e,t){angular.module("graphdb.framework.core.directives.ascii-validator",[]).directive("asciiValidator",(function(){return{restrict:"A",require:"ngModel",link:function(e,t,n,r){function o(e){const t=/^[\x21-\x7E]*$/.test(e);return r.$setValidity("asciiValidator",t),e}r.$parsers.push(o),r.$formatters.push(o)}}}))},123:function(e,t){angular.module("graphdb.framework.core.directives.length-validator",[]).directive("lengthValidator",(function(){return{restrict:"A",require:"ngModel",link:function(e,t,n,r){function o(e){const t=n.minLength?parseInt(n.minLength,10):0,o=n.maxLength?parseInt(n.maxLength,10):1/0,i=e&&e.length>=t&&e.length<=o;return r.$setValidity("lengthValidator",i),e}r.$parsers.push(o),r.$formatters.push(o)}}}))},145:function(e,t,n){"use strict";n.r(t);var r=n(96);function o(e,t){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-configuration/cluster-properties.html",scope:{currentNode:"=",clusterModel:"=",clusterConfiguration:"="},link:n=>{n.isAdmin=!1,n.showEditConfigurationDialog=()=>{t.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-edit-dialog.html",controller:"EditClusterCtrl",size:"lg",resolve:{data:()=>({clusterConfiguration:n.clusterConfiguration})}}).result.finally((function(){n.$emit(r.UPDATE_CLUSTER,{force:!0})}))},n.showDeleteDialog=()=>{t.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-delete-dialog.html",controller:"DeleteClusterCtrl"}).result.then(e=>{n.$emit(r.DELETE_CLUSTER,{force:e})})};n.isAdmin=e.isAuthenticated()&&e.isAdmin()}}}angular.module("graphdb.framework.clustermanagement.directives.cluster-configuration.cluster-properties",[]).directive("clusterProperties",o),o.$inject=["$jwtAuth","$uibModal"]},146:function(e,t){function n(){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-configuration/cluster-nodes.html",scope:{currentNode:"=",clusterModel:"="}}}angular.module("graphdb.framework.clustermanagement.directives.cluster-configuration.cluster-nodes",[]).directive("clusterNodes",n),n.$inject=[]},147:function(e,t,n){"use strict";n.r(t);n(122),n(123);var r=n(95),o=n(85);const i={minLen:"3",maxLen:"255"};function a(e,t,n,a,s,l,c){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-configuration/multi-region.html",scope:{clusterModel:"=",clusterConfiguration:"="},link:u=>{const d=[];u.topology=void 0,u.TopologyState=o.TopologyState,u.isAdmin=!1,u.addingTag=!1,u.loaderTimeout=void 0,u.secondaryTag=void 0,u.TagLengthConstraints=i,u.add=()=>{u.addingTag=!0},u.cancel=()=>{u.addingTag=!1},u.createTag=e=>{const n={tag:e};return p(!0),l.addCusterTag(n).then(()=>{a.success(t.instant("cluster_management.cluster_configuration_multi_region.created_tag",{tag:e}))}).catch(e=>{const n=getError(e);a.error(n,t.instant("cluster_management.cluster_configuration_multi_region.error.creating"))}).finally(()=>{u.addingTag=!1,p(!1)})},u.deleteTag=e=>{s.openSimpleModal({title:t.instant("cluster_management.cluster_configuration_multi_region.confirm.delete",{tag:e}),message:t.instant("cluster_management.cluster_configuration_multi_region.confirm.warning"),warning:!0,backdrop:"static",stopPropagation:!0}).result.then(()=>(p(!0),l.deleteClusterTag(e))).then(()=>a.success(t.instant("cluster_management.cluster_configuration_multi_region.deleted_tag",{tag:e}))).catch(e=>{if("cancel"===e||"escape key press"===e)return;const n=getError(e);a.error(n,t.instant("cluster_management.cluster_configuration_multi_region.error.deleting"))}).finally(()=>p(!1))},u.enableSecondaryMode=()=>{u.addingTag=!1;const e={title:t.instant("cluster_management.cluster_configuration_multi_region.confirm.enable_secondary"),message:t.instant("cluster_management.cluster_configuration_multi_region.confirm.enable_secondary_warning"),warning:!0,backdrop:"static",confirmButtonKey:"common.ok.btn",stopPropagation:!0};s.openSimpleModal(e).result.then(()=>g()).then(e=>(p(!0),l.enableSecondaryMode(e))).then(()=>a.success(t.instant("cluster_management.cluster_configuration_multi_region.secondary_enabled"))).catch(e=>{if("cancel"===e||"escape key press"===e)return;const n=getError(e);a.error(n,t.instant("cluster_management.cluster_configuration_multi_region.error.secondary"))}).finally(()=>p(!1))},u.disableSecondaryMode=()=>{s.openSimpleModal({title:t.instant("cluster_management.cluster_configuration_multi_region.confirm.disable_secondary_mode"),message:t.instant("cluster_management.cluster_configuration_multi_region.confirm.disable_secondary_mode_warning"),warning:!0,backdrop:"static",stopPropagation:!0}).result.then(()=>(p(!0),l.disableSecondaryMode())).then(()=>a.success(t.instant("cluster_management.cluster_configuration_multi_region.disabled_secondary_mode"))).catch(e=>{if("cancel"===e||"escape key press"===e)return;const n=getError(e);a.error(n,t.instant("cluster_management.cluster_configuration_multi_region.error.disabling"))}).finally(()=>p(!1))};const g=()=>{const e={title:t.instant("cluster_management.cluster_configuration_multi_region.secondary_cluster_settings"),templateUrl:"js/angular/clustermanagement/templates/modal/secondary-mode-modal.html",controller:["$scope","$uibModalInstance","config",function(e,t,n){e.rpcAddress="",e.tag="",e.title=n.title,e.onClick=e=>e.stopPropagation(),e.ok=()=>{t.close({primaryNode:e.rpcAddress,tag:e.tag})},e.cancel=()=>{t.dismiss("cancel")}}],size:"lg",warning:!0,backdrop:"static"};return s.openCustomModal(e).result},m=e=>{p(!0),l.getClusterConfig().then(t=>{u.secondaryTag=r.ClusterConfiguration.fromJSON(t.data).secondaryTag,(e=>{const t=e.nodes.find(e=>e.nodeState===o.NodeState.LEADER);u.topology=t.topologyStatus})(r.ClusterModel.fromJSON(e))}).catch(e=>{const n=getError(e);a.error(n,t.instant("cluster_management.cluster_configuration_multi_region.error.disabling"))}).finally(()=>p(!1))},f=e=>{e||(u.addingTag=!1)},p=(e,t)=>{n.cancel(u.loaderTimeout),e?(u.loaderMessage=t,u.loaderTimeout=n(()=>{u.loader=e},150)):u.loader=!1};u.$on("$destroy",(function(){d.forEach(e=>e())}));u.isAdmin=e.isAuthenticated()&&e.isAdmin(),d.push(u.$watch("clusterModel",(function(e,t){e!==t&&m(e)}),!0)),d.push(c.onShowClusterConfigurationPanel(f)),m(u.clusterModel)}}}angular.module("graphdb.framework.clustermanagement.directives.cluster-configuration.multi-region",["graphdb.framework.core.directives.ascii-validator","graphdb.framework.core.directives.length-validator"]).directive("multiRegion",a),a.$inject=["$jwtAuth","$translate","$timeout","toastr","ModalService","ClusterRestService","ClusterViewContextService"]},208:function(e,t,n){"use strict";n.r(t);n(11),n(209);var r=n(113),o=n(31),i=n(96);let a=240;const s={no_cluster_configured:"",create_cluster_btn:"",legend_node_state:"",legend_link_state:"",node_state_leader:"Leader",node_state_follower:"Follower",node_state_candidate:"Candidate",node_state_no_cluster:"No cluster",node_state_out_of_sync:"Out of sync",node_state_no_connection:"No connection",node_state_read_only:"Read only",node_state_restricted:"Restricted",link_state_in_sync:"In sync",link_state_syncing:"Syncing",link_state_out_of_sync:"Out of sync",recovery_state:{searching_for_node:"Searching for node",waiting_for_snapshot:"Waiting for snapshot from node",receiving_snapshot:"Receiving a snapshot from node",applying_snapshot:"Applying a snapshot",building_snapshot:"Building a snapshot for node",sending_snapshot:"Sending a snapshot to node",recovery_operation_failure_warning:"Node unable to recover. Action required"}},l={node_state:"legend_node_state",link_state:"legend_link_state"};angular.module("graphdb.framework.clustermanagement.directives.cluster-graphical-view",["graphdb.framework.utils.localstorageadapter","graphdb.framework.clustermanagement.directives.cluster-legend"]).directive("clusterGraphicalView",["$window","LocalStorageAdapter","LSKeys","UriUtils","$translate","$jwtAuth","$rootScope","ClusterViewContextService",function(e,t,n,c,u,d,g,m){return{restrict:"E",scope:{clusterModel:"="},link:function(f,p){const h=angular.element(e),_=[];let w,v,C,y,b,E=L(),S=U(),k=Math.min(E,S)/2-100,N=E/2,M=S/2;function T(){const e=m.getClusterViewD3Container();E=L(),S=U(),e.attr("width",E),e.attr("height",S),j()}function A(e,t=""){Object.keys(e).forEach(n=>{let r="";t&&(r+=t),r+="."+n;const o=e[n];"string"==typeof o?e[n]=u.instant("cluster_management.cluster_graphical_view"+r):"object"==typeof o&&A(o,r)})}function L(){const r="collapsedMenu"===t.get(n.MENU_STATE);return a=r?70:240,Math.max(Math.floor(.95*(e.innerWidth-a)),600)}function U(){return Math.max(.95*(e.innerHeight-250),675)}function x(){r.updateClusterZoneLabels(v,C,s),Object.keys(l).forEach(e=>{d3.select("#"+e).text(function(e){return s[l[e]]}(e))})}function R(){k=Math.min(E,S)/2-100,N=E/2,M=S/2,r.moveElement(C,N,M),C.select(".cluster-zone").attr("r",k)}function I(e){f.$emit(i.CLICK_IN_VIEW,e.target)}function j(){R(),v!==f.clusterModel.hasCluster&&(v=!!f.clusterModel.hasCluster,function(e){r.setCreateClusterZone(e,C,s,w),!e&&w&&C.on("mouseup",()=>{f.$emit(i.CREATE_CLUSTER)})}(v));const e=function(){const e=Object(o.cloneDeep)(f.clusterModel.nodes)||[];return e.forEach(e=>{if(e.hostname=c.shortenIri(e.endpoint),!Object(o.isEmpty)(e.recoveryStatus)){let t="cluster_management.cluster_graphical_view.recovery_state."+e.recoveryStatus.state.toLowerCase();e.recoveryStatus.affectedNodes&&e.recoveryStatus.affectedNodes.length>0&&(t+="_with_affected_node"),e.recoveryStatus.message=u.instant(t,{node:e.recoveryStatus.affectedNodes.join(", ")})}}),e}();!function(e){const t=y.selectAll("#node-group").data(e,e=>e.address),n=r.createNodes(t,45);n.on("click",(e,t)=>{f.$emit(i.NODE_SELECTED,t);const n=d3.select(".nodetooltip"),r=$(window).width();e.pageX<r/2?(n.style("left",e.pageX+"px"),n.style("right","")):(n.style("left",""),n.style("right",r-e.pageX+"px")),n.style("top",e.pageY-28+"px")}),r.updateNodes(n),r.positionNodesOnClusterZone(n,N,M,k)}(e);!function(e,t){const n=b.selectAll(".link").data(e,e=>e.id);r.createLinks(n),r.updateLinks(n,t)}(Object(o.cloneDeep)(f.clusterModel.links)||[],e)}f.width=function(){return E},f.height=function(){return S};f.$on("$destroy",(function(){h.unbind("resize",T),h.unbind("mousedown",I),r.removeEventListeners(),_.forEach(e=>e())})),w=d.isAdmin(),h.bind("resize",T),h.bind("mousedown",I),_.push(g.$on("$translateChangeSuccess",(function(){A(s),x()}))),_.push(f.$on(i.MODEL_UPDATED,(function(){j()}))),A(s),function(e){const t=r.createClusterSvgElement(p[0]).attr("width",E).attr("height",S);C=r.createClusterZone(t,e),b=t.append("g").attr("id","links-group"),y=t.append("g").attr("id","nodes-group"),r.addArrowHead(t,r.ARROW_CONFIG.BIG),r.addArrowHead(t,r.ARROW_CONFIG.SMALL),m.updateClusterViewD3Container(t)}(!(!f.clusterModel.nodes||!f.clusterModel.nodes.length)),j()}}}])},211:function(e,t,n){"use strict";n.r(t);n(145),n(146),n(147);angular.module("graphdb.framework.clustermanagement.directives.cluster-configuration",["graphdb.framework.clustermanagement.directives.cluster-configuration.cluster-properties","graphdb.framework.clustermanagement.directives.cluster-configuration.cluster-nodes","graphdb.framework.clustermanagement.directives.cluster-configuration.multi-region"]).directive("clusterConfiguration",o),o.$inject=["$jwtAuth","$uibModal","$translate","toastr","ClusterViewContextService"];const r={PROPERTIES:"properties",NODES:"nodes",MULTI_REGION:"multi_region"};function o(e,t,n,o,i){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-configuration/cluster-configuration.html",scope:{currentNode:"=",clusterModel:"=",clusterConfiguration:"="},link:e=>{const t=[];e.CONFIGURATION_TABS=r,e.activeTab=r.PROPERTIES,e.closeClusterConfigurationPanel=()=>{i.hideClusterConfigurationPanel()},e.switchTab=(t,n)=>{e.activeTab=n};e.$on("$destroy",(function(){t.forEach(e=>e()),e.closeClusterConfigurationPanel()}));t.push(i.onShowClusterConfigurationPanel(t=>{t||(e.activeTab=r.PROPERTIES)}))}}}},212:function(e,t,n){"use strict";n.r(t);var r=n(95);function o(e,t,n,o,i,a,s){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-nodes-configuration.html",link:n=>{const o=[];n.rowHeights={},n.editedNodeIndex=void 0,n.allSuggestions=[],n.loader=!1,n.errors=[],n.addNewLocation=!1,n.hasCluster=!1,n.addNode=()=>{n.addNewLocation=!0,n.newLocation=new r.Location},n.filterSuggestions=e=>{const t=e.endpoint&&e.endpoint.toLowerCase();t?(n.suggestions=n.allSuggestions.filter(e=>e.toLowerCase().includes(t)),n.showDropdown=!0):(n.suggestions=[],n.showDropdown=!1)},n.selectSuggestion=(e,t)=>{e.endpoint=t,n.suggestions=[],n.showDropdown=!1},n.hideSuggestions=()=>{t(()=>{n.showDropdown=!1},200)},n.saveNode=e=>{const t=a.getAvailable(!0);!function(e,t){t?a.replace(t,e):a.addLocation(e);i()}(a.findByEndpoint(t,e)||new r.Location(e),a.getPendingReplace())},n.deleteNode=(t,n)=>{s.openSimpleModal({title:e.instant("location.confirm.detach"),message:e.instant("location.confirm.detach.warning",{uri:n.endpoint}),warning:!0}).result.then(()=>{a.deleteFromCluster(n.item)})},n.replaceNode=(t,r)=>{s.openSimpleModal({title:e.instant("location.change.confirm"),message:e.instant("location.change.confirm.warning"),warning:!0}).result.then(()=>{a.setPendingReplace(r.item),n.editedNodeIndex=t})},n.isClusterConfigurationValid=()=>{const e=void 0===n.editedNodeIndex,t=!1===n.addNewLocation,r=a.hasValidNodesCount(),o=n.form.$valid;return e&&t&&r&&o},n.setLoader=(e,r)=>{t.cancel(n.loaderTimeout),e?n.loaderTimeout=t(()=>{n.loader=e,n.loaderMessage=r},300):n.loader=!1},n.getAdvancedOptionsClass=()=>{const e=document.getElementById("advancedOptions");if(e){const t=e.getAttribute("aria-expanded");if(t&&"true"===t)return"fa fa-angle-down"}return"fa fa-angle-right"},n.cancel=()=>{n.editedNodeIndex=void 0,n.addNewLocation=!1,a.emitUpdateClusterView()},n.restoreNode=e=>{a.restoreNode(e.item)};const i=()=>{a.setPendingReplace(void 0),n.editedNodeIndex=void 0,n.addNewLocation=!1},l=n.$watchGroup(["editedNodeIndex","addNewLocation","clusterConfiguration.electionMinTimeout","clusterConfiguration.electionRangeTimeout","clusterConfiguration.heartbeatInterval","clusterConfiguration.messageSizeKB","clusterConfiguration.verificationTimeout","clusterConfiguration.transactionLogMaximumSizeGB"],(e,t)=>{const r=n.isClusterConfigurationValid();a.updateClusterValidity(r)});o.push(l),o.push(a.onClusterViewChanged(e=>{n.hasCluster=a.hasCluster(),n.viewModel=a.getViewModel(),n.clusterNodesEndpoints=n.viewModel.map(e=>e.endpoint),n.clusterConfiguration=a.getClusterConfiguration(),n.allSuggestions=a.getAvailableNodeEndpoints(),n.canDeleteNode=a.canDeleteNode()})),n.$on("$destroy",()=>{o.forEach(e=>e())})}}}angular.module("graphdb.framework.clustermanagement.directives.cluster-nodes-configuration",[]).directive("clusterNodesConfiguration",o),o.$inject=["$translate","$timeout","productInfo","toastr","RemoteLocationsService","ClusterContextService","ModalService"]},213:function(e,t){angular.module("graphdb.framework.core.directives.validate-duplicate-url",[]).directive("validateDuplicateUrl",(function(){return{restrict:"A",require:"ngModel",scope:{excludedUrls:"="},link:function(e,t,n,r){r.$validators.duplicateUrl=function(t,n){return e.excludedUrls&&e.excludedUrls.includes(n)?(r.$setValidity("duplicateUrl",!1),!1):(r.$setValidity("duplicateUrl",!0),!0)}}}}))},312:function(e,t,n){"use strict";n.r(t);n(7),n(32),n(299),n(208),n(211),n(212),n(33),n(519),n(297),n(121),n(213);angular.module("graphdb.framework.clustermanagement",["ngAnimate","toastr","graphdb.framework.clustermanagement.controllers.cluster-management","graphdb.framework.clustermanagement.directives.cluster-graphical-view","graphdb.framework.clustermanagement.directives.cluster-configuration","graphdb.framework.clustermanagement.directives.cluster-nodes-configuration","graphdb.framework.core.directives.validate-url","graphdb.framework.core.directives.validate-duplicate-url"])},519:function(e,t,n){var r,o;r=[n(527)],void 0===(o=function(){function e(e,t){return e.each((function(){var e=t.apply(this,arguments),n=select(this);for(var r in e)n.attr(r,e[r])}))}function t(e,t){for(var n in t)e.attr(n,t[n]);return e}return"undefined"==typeof d3&&(d3=n(527)),d3.selection.prototype.attrs=function(n){return("function"==typeof n?e:t)(this,n)},d3.selection.prototype.moveToFront=function(){return this.each((function(){d3.select(this.parentNode.appendChild(this))}))},d3.selection.prototype.moveToBack=function(){return this.each((function(){const e=this.parentNode.firstChild;e&&this.parentNode.insertBefore(this,e)}))},d3}.apply(t,r))||(e.exports=o)}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[33,49,86,132,133,138,141,187,190,191],{122:function(t,e){angular.module("graphdb.framework.core.directives.ascii-validator",[]).directive("asciiValidator",(function(){return{restrict:"A",require:"ngModel",link:function(t,e,r,n){function i(t){const e=/^[\x21-\x7E]*$/.test(t);return n.$setValidity("asciiValidator",e),t}n.$parsers.push(i),n.$formatters.push(i)}}}))},123:function(t,e){angular.module("graphdb.framework.core.directives.length-validator",[]).directive("lengthValidator",(function(){return{restrict:"A",require:"ngModel",link:function(t,e,r,n){function i(t){const e=r.minLength?parseInt(r.minLength,10):0,i=r.maxLength?parseInt(r.maxLength,10):1/0,s=t&&t.length>=e&&t.length<=i;return n.$setValidity("lengthValidator",s),t}n.$parsers.push(i),n.$formatters.push(i)}}}))},145:function(t,e,r){"use strict";r.r(e);var n=r(96);function i(t,e){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-configuration/cluster-properties.html",scope:{currentNode:"=",clusterModel:"=",clusterConfiguration:"="},link:r=>{r.isAdmin=!1,r.showEditConfigurationDialog=()=>{e.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-edit-dialog.html",controller:"EditClusterCtrl",size:"lg",resolve:{data:()=>({clusterConfiguration:r.clusterConfiguration})}}).result.finally((function(){r.$emit(n.UPDATE_CLUSTER,{force:!0})}))},r.showDeleteDialog=()=>{e.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-delete-dialog.html",controller:"DeleteClusterCtrl"}).result.then(t=>{r.$emit(n.DELETE_CLUSTER,{force:t})})};r.isAdmin=t.isAuthenticated()&&t.isAdmin()}}}angular.module("graphdb.framework.clustermanagement.directives.cluster-configuration.cluster-properties",[]).directive("clusterProperties",i),i.$inject=["$jwtAuth","$uibModal"]},146:function(t,e){function r(){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-configuration/cluster-nodes.html",scope:{currentNode:"=",clusterModel:"="}}}angular.module("graphdb.framework.clustermanagement.directives.cluster-configuration.cluster-nodes",[]).directive("clusterNodes",r),r.$inject=[]},147:function(t,e,r){"use strict";r.r(e);r(122),r(123);var n=r(95),i=r(85);const s={minLen:"3",maxLen:"255"};function o(t,e,r,o,a,l,u){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-configuration/multi-region.html",scope:{clusterModel:"=",clusterConfiguration:"="},link:c=>{const d=[];c.topology=void 0,c.TopologyState=i.TopologyState,c.isAdmin=!1,c.addingTag=!1,c.loaderTimeout=void 0,c.secondaryTag=void 0,c.TagLengthConstraints=s,c.add=()=>{c.addingTag=!0},c.cancel=()=>{c.addingTag=!1},c.createTag=t=>{const r={tag:t};return h(!0),l.addCusterTag(r).then(()=>{o.success(e.instant("cluster_management.cluster_configuration_multi_region.created_tag",{tag:t}))}).catch(t=>{const r=getError(t);o.error(r,e.instant("cluster_management.cluster_configuration_multi_region.error.creating"))}).finally(()=>{c.addingTag=!1,h(!1)})},c.deleteTag=t=>{a.openSimpleModal({title:e.instant("cluster_management.cluster_configuration_multi_region.confirm.delete",{tag:t}),message:e.instant("cluster_management.cluster_configuration_multi_region.confirm.warning"),warning:!0,backdrop:"static",stopPropagation:!0}).result.then(()=>(h(!0),l.deleteClusterTag(t))).then(()=>o.success(e.instant("cluster_management.cluster_configuration_multi_region.deleted_tag",{tag:t}))).catch(t=>{if("cancel"===t||"escape key press"===t)return;const r=getError(t);o.error(r,e.instant("cluster_management.cluster_configuration_multi_region.error.deleting"))}).finally(()=>h(!1))},c.enableSecondaryMode=()=>{c.addingTag=!1;const t={title:e.instant("cluster_management.cluster_configuration_multi_region.confirm.enable_secondary"),message:e.instant("cluster_management.cluster_configuration_multi_region.confirm.enable_secondary_warning"),warning:!0,backdrop:"static",confirmButtonKey:"common.ok.btn",stopPropagation:!0};a.openSimpleModal(t).result.then(()=>g()).then(t=>(h(!0),l.enableSecondaryMode(t))).then(()=>o.success(e.instant("cluster_management.cluster_configuration_multi_region.secondary_enabled"))).catch(t=>{if("cancel"===t||"escape key press"===t)return;const r=getError(t);o.error(r,e.instant("cluster_management.cluster_configuration_multi_region.error.secondary"))}).finally(()=>h(!1))},c.disableSecondaryMode=()=>{a.openSimpleModal({title:e.instant("cluster_management.cluster_configuration_multi_region.confirm.disable_secondary_mode"),message:e.instant("cluster_management.cluster_configuration_multi_region.confirm.disable_secondary_mode_warning"),warning:!0,backdrop:"static",stopPropagation:!0}).result.then(()=>(h(!0),l.disableSecondaryMode())).then(()=>o.success(e.instant("cluster_management.cluster_configuration_multi_region.disabled_secondary_mode"))).catch(t=>{if("cancel"===t||"escape key press"===t)return;const r=getError(t);o.error(r,e.instant("cluster_management.cluster_configuration_multi_region.error.disabling"))}).finally(()=>h(!1))};const g=()=>{const t={title:e.instant("cluster_management.cluster_configuration_multi_region.secondary_cluster_settings"),templateUrl:"js/angular/clustermanagement/templates/modal/secondary-mode-modal.html",controller:["$scope","$uibModalInstance","config",function(t,e,r){t.rpcAddress="",t.tag="",t.title=r.title,t.onClick=t=>t.stopPropagation(),t.ok=()=>{e.close({primaryNode:t.rpcAddress,tag:t.tag})},t.cancel=()=>{e.dismiss("cancel")}}],size:"lg",warning:!0,backdrop:"static"};return a.openCustomModal(t).result},_=t=>{h(!0),l.getClusterConfig().then(e=>{c.secondaryTag=n.ClusterConfiguration.fromJSON(e.data).secondaryTag,(t=>{const e=t.nodes.find(t=>t.nodeState===i.NodeState.LEADER);c.topology=e.topologyStatus})(n.ClusterModel.fromJSON(t))}).catch(t=>{const r=getError(t);o.error(r,e.instant("cluster_management.cluster_configuration_multi_region.error.disabling"))}).finally(()=>h(!1))},m=t=>{t||(c.addingTag=!1)},h=(t,e)=>{r.cancel(c.loaderTimeout),t?(c.loaderMessage=e,c.loaderTimeout=r(()=>{c.loader=t},150)):c.loader=!1};c.$on("$destroy",(function(){d.forEach(t=>t())}));c.isAdmin=t.isAuthenticated()&&t.isAdmin(),d.push(c.$watch("clusterModel",(function(t,e){t!==e&&_(t)}),!0)),d.push(u.onShowClusterConfigurationPanel(m)),_(c.clusterModel)}}}angular.module("graphdb.framework.clustermanagement.directives.cluster-configuration.multi-region",["graphdb.framework.core.directives.ascii-validator","graphdb.framework.core.directives.length-validator"]).directive("multiRegion",o),o.$inject=["$jwtAuth","$translate","$timeout","toastr","ModalService","ClusterRestService","ClusterViewContextService"]},211:function(t,e,r){"use strict";r.r(e);r(145),r(146),r(147);angular.module("graphdb.framework.clustermanagement.directives.cluster-configuration",["graphdb.framework.clustermanagement.directives.cluster-configuration.cluster-properties","graphdb.framework.clustermanagement.directives.cluster-configuration.cluster-nodes","graphdb.framework.clustermanagement.directives.cluster-configuration.multi-region"]).directive("clusterConfiguration",i),i.$inject=["$jwtAuth","$uibModal","$translate","toastr","ClusterViewContextService"];const n={PROPERTIES:"properties",NODES:"nodes",MULTI_REGION:"multi_region"};function i(t,e,r,i,s){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-configuration/cluster-configuration.html",scope:{currentNode:"=",clusterModel:"=",clusterConfiguration:"="},link:t=>{const e=[];t.CONFIGURATION_TABS=n,t.activeTab=n.PROPERTIES,t.closeClusterConfigurationPanel=()=>{s.hideClusterConfigurationPanel()},t.switchTab=(e,r)=>{t.activeTab=r};t.$on("$destroy",(function(){e.forEach(t=>t()),t.closeClusterConfigurationPanel()}));e.push(s.onShowClusterConfigurationPanel(e=>{e||(t.activeTab=n.PROPERTIES)}))}}}},85:function(t,e,r){"use strict";r.r(e),r.d(e,"NodeState",(function(){return n})),r.d(e,"RecoveryState",(function(){return i})),r.d(e,"LinkState",(function(){return s})),r.d(e,"TopologyState",(function(){return o}));const n={LEADER:"LEADER",FOLLOWER:"FOLLOWER",CANDIDATE:"CANDIDATE",OUT_OF_SYNC:"OUT_OF_SYNC",NO_CONNECTION:"NO_CONNECTION",READ_ONLY:"READ_ONLY",RESTRICTED:"RESTRICTED",NO_CLUSTER:"NO_CLUSTER"},i={SEARCHING_FOR_NODE:"SEARCHING_FOR_NODE",WAITING_FOR_SNAPSHOT:"WAITING_FOR_SNAPSHOT",RECEIVING_SNAPSHOT:"RECEIVING_SNAPSHOT",APPLYING_SNAPSHOT:"APPLYING_SNAPSHOT",BUILDING_SNAPSHOT:"BUILDING_SNAPSHOT",SENDING_SNAPSHOT:"SENDING_SNAPSHOT",RECOVERY_OPERATION_FAILURE_WARNING:"RECOVERY_OPERATION_FAILURE_WARNING"},s={IN_SYNC:"IN_SYNC",OUT_OF_SYNC:"OUT_OF_SYNC",SYNCING:"SYNCING",NO_CONNECTION:"NO_CONNECTION",RECEIVING_SNAPSHOT:"RECEIVING_SNAPSHOT"},o={PRIMARY_NODE:"PRIMARY_NODE",SECONDARY_NODE:"SECONDARY_NODE"}},95:function(t,e,r){"use strict";r.r(e),r.d(e,"Location",(function(){return n})),r.d(e,"Node",(function(){return i})),r.d(e,"TopologyStatus",(function(){return s})),r.d(e,"Link",(function(){return o})),r.d(e,"ClusterModel",(function(){return a})),r.d(e,"ClusterViewModel",(function(){return l})),r.d(e,"ClusterItemViewModel",(function(){return u})),r.d(e,"ClusterConfiguration",(function(){return c}));class n{constructor(t,e=null,r=null,n=!1,i=!1){this._endpoint=t,this._rpcAddress=e,this._error=r,this._isAvailable=n,this._isLocal=i}get isLocal(){return this._isLocal}get endpoint(){return this._endpoint}get rpcAddress(){return this._rpcAddress}get error(){return this._error}get isAvailable(){return this._isAvailable}set endpoint(t){this._endpoint=t}set rpcAddress(t){this._rpcAddress=t}set error(t){this._error=t}set isAvailable(t){this._isAvailable=t}set isLocal(t){this._isLocal=t}static fromJSON({endpoint:t,rpcAddress:e,error:r=null,isAvailable:i=!1,isLocal:s=!1}){return new n(t,e,r,i,s)}}class i{constructor(t,e,r,n,i,o,a,l,u){this._address=t,this._nodeState=e,this._term=r,this._syncStatus=n,this._lastLogTerm=i,this._lastLogIndex=o,this._endpoint=a,this._recoveryStatus=l,this._topologyStatus=s.fromJSON(u)}get address(){return this._address}get nodeState(){return this._nodeState}get term(){return this._term}get syncStatus(){return this._syncStatus}get lastLogTerm(){return this._lastLogTerm}get lastLogIndex(){return this._lastLogIndex}get endpoint(){return this._endpoint}get recoveryStatus(){return this._recoveryStatus}set address(t){this._address=t}set nodeState(t){this._nodeState=t}set term(t){this._term=t}set syncStatus(t){this._syncStatus=t}set lastLogTerm(t){this._lastLogTerm=t}set lastLogIndex(t){this._lastLogIndex=t}set endpoint(t){this._endpoint=t}set recoveryStatus(t){this._recoveryStatus=t}get topologyStatus(){return this._topologyStatus}set topologyStatus(t){return this._topologyStatus=t}static fromJSON({address:t,nodeState:e,term:r,syncStatus:n,lastLogTerm:s,lastLogIndex:o,endpoint:a,recoveryStatus:l,topologyStatus:u}){return new i(t,e,r,n,s,o,a,l,u)}}class s{constructor(t,e=new Map,r,n){this._state=t,this._primaryTags=e,this._primaryIndex=r,this._primaryLeader=n}get state(){return this._state}get primaryTags(){return this._primaryTags}get primaryIndex(){return this._primaryIndex}get primaryLeader(){return this._primaryLeader}static fromJSON({state:t,primaryTags:e={},primaryIndex:r,primaryLeader:n}){const i=Object.entries(e);return new s(t,i,r,n)}}class o{constructor(t,e,r,n){this._id=t,this._source=e,this._target=r,this._status=n}static fromJSON({id:t,source:e,target:r,status:n}){return new o(t,e,r,n)}}class a{constructor(t,e,r,n){this._locations=t,this._hasCluster=e,this._nodes=r,this._links=n}get locations(){return this._locations}set locations(t){this._locations=t}get hasCluster(){return this._hasCluster}set hasCluster(t){this._hasCluster=t}get nodes(){return this._nodes}set nodes(t){this._nodes=t}get links(){return this._links}set links(t){this._links=t}static fromJSON(t){const e=t.locations.map(n.fromJSON),r=t.nodes.map(i.fromJSON),s=t.links.map(o.fromJSON);return new a(e,t.hasCluster,r,s)}}class l{constructor(t){this._clusterModel=a.fromJSON(t),this._addToCluster=new Map,this._deleteFromCluster=new Map,this._currentNodesCount=0,this._clusterConfiguration=new c,this._localNodeEndpoint=t.locations.find(t=>t.isLocal).endpoint,this.MINIMUM_NODES_REQUIRED=2}getAttached(){const t=this._clusterModel.nodes.concat(Array.from(this._addToCluster.values()));return this._currentNodesCount=t.filter(t=>!this._deleteFromCluster.has(t.endpoint)).length,t}getViewModel(){let t=0;return this.getAttached().map(e=>{const r=new u(e);return this._deleteFromCluster.has(e.endpoint)?r.isDeleted=!0:r.index=t++,this._localNodeEndpoint===e.endpoint&&(r.isLocal=!0),r})}getAvailable(t=!1){const e=this._clusterModel.nodes;return this._clusterModel.locations.filter(r=>{const n=!this.isPresentInList(e,r.endpoint),i=r.isAvailable,s=!this._addToCluster.has(r.endpoint),o=!!t||!this._deleteFromCluster.has(r.endpoint);return n&&i&&o&&s})}getAvailableNodeEndpoints(){return this.getAvailable().map(t=>t.endpoint)}getLocalNode(){return this._clusterModel.locations.find(t=>t.isLocal)}addToCluster(t){const e=t.endpoint;t.endpoint&&this.addToLocations(t),this._deleteFromCluster.has(e)?this._deleteFromCluster.delete(e):this._addToCluster.set(e,t)}addToLocations(t){const e=d.findIndexByEndpoint(this._clusterModel.locations,t.endpoint);-1===e?this._clusterModel.locations.push(t):this._clusterModel.locations.splice(e,1)}deleteFromCluster(t){const e=t.endpoint;this._addToCluster.has(e)?this._addToCluster.delete(e):this._deleteFromCluster.set(e,t)}getDeleteFromCluster(){return Array.from(this._deleteFromCluster.values())}getUpdateActions(){const t=Array.from(this._addToCluster.values()).map(t=>t.endpoint),e={addNodes:t,removeNodes:Array.from(this._deleteFromCluster.values()).map(t=>t.endpoint)},r=this.updateClusterConfiguration(t);return r&&(e.clusterConfiguration=r),e}updateClusterConfiguration(t){return this.hasCluster()?null:(this._clusterConfiguration.nodes=t,this._clusterConfiguration.toJSON())}getClusterConfiguration(){return this._clusterConfiguration}restoreFromDeletion(t){this._deleteFromCluster.delete(t.endpoint)}isChanged(){return this._addToCluster.size>0||this._deleteFromCluster.size>0}isPresentInList(t,e){return d.isPresentInList(t,e)}findByEndpoint(t,e){return d.findByEndpoint(t,e)}findIndexByEndpoint(t,e){return d.findIndexByEndpoint(t,e)}hasValidNodesCount(){return this._currentNodesCount>=this.MINIMUM_NODES_REQUIRED}canDeleteNode(){const t=Math.floor(this._clusterModel.nodes.length/2);return this._deleteFromCluster.size<t}hasCluster(){return this._clusterModel.hasCluster}}class u{constructor(t){this._item=t,this._endpoint=t.endpoint,this._isDeleted=!1,this._index=void 0,this._isLocal=!1}getEndPoint(){return this._item.endpoint}getAddress(){return void 0!==this._item._address?this._item._address:void 0!==this._item.rpcAddress?this._item.rpcAddress:null}isNode(){return void 0!==this._item._address}isLocation(){return void 0===this._item._address}getNodeState(){return this.isNode()?this._item._nodeState:null}getIsAvailable(){return this.isNode()?null:this._item.isAvailable}getTerm(){return this.isNode()?this._item.term:null}getSyncStatus(){return this.isNode()?this._item.syncStatus:null}getIsLocal(){return this.isNode()?null:this._item.isLocal}get item(){return this._item}get endpoint(){return this._endpoint}set endpoint(t){return this._endpoint=t}get isDeleted(){return this._isDeleted}set isDeleted(t){this._isDeleted=t}get index(){return this._index}set index(t){this._index=t}get isLocal(){return this._isLocal}set isLocal(t){this._isLocal=t}}class c{constructor({electionMinTimeout:t=8e3,electionRangeTimeout:e=6e3,heartbeatInterval:r=2e3,messageSizeKB:n=64,verificationTimeout:i=1500,transactionLogMaximumSizeGB:s=50,batchUpdateInterval:o=5e3,nodes:a=[],secondaryTag:l,primaryNodes:u}={}){this._electionMinTimeout=t,this._electionRangeTimeout=e,this._heartbeatInterval=r,this._messageSizeKB=n,this._verificationTimeout=i,this._transactionLogMaximumSizeGB=s,this._batchUpdateInterval=o,this._nodes=a,this._secondaryTag=l,this._primaryNodes=u}static fromJSON(t){return new c(t)}get electionMinTimeout(){return this._electionMinTimeout}set electionMinTimeout(t){this._electionMinTimeout=t}get electionRangeTimeout(){return this._electionRangeTimeout}set electionRangeTimeout(t){this._electionRangeTimeout=t}get heartbeatInterval(){return this._heartbeatInterval}set heartbeatInterval(t){this._heartbeatInterval=t}get messageSizeKB(){return this._messageSizeKB}set messageSizeKB(t){this._messageSizeKB=t}get verificationTimeout(){return this._verificationTimeout}set verificationTimeout(t){this._verificationTimeout=t}get transactionLogMaximumSizeGB(){return this._transactionLogMaximumSizeGB}set transactionLogMaximumSizeGB(t){this._transactionLogMaximumSizeGB=t}get nodes(){return this._nodes}set nodes(t){this._nodes=t}get batchUpdateInterval(){return this._batchUpdateInterval}set batchUpdateInterval(t){this._batchUpdateInterval=t}get secondaryTag(){return this._secondaryTag}set secondaryTag(t){this._secondaryTag=t}get primaryNodes(){return this._primaryNodes}set primaryNodes(t){this._primaryNodes=t}toJSON(){const t={electionMinTimeout:this._electionMinTimeout,electionRangeTimeout:this._electionRangeTimeout,heartbeatInterval:this._heartbeatInterval,messageSizeKB:this._messageSizeKB,verificationTimeout:this._verificationTimeout,transactionLogMaximumSizeGB:this._transactionLogMaximumSizeGB,batchUpdateInterval:this._batchUpdateInterval,nodes:this._nodes};return void 0!==this._secondaryTag&&(t.secondaryTag=this._secondaryTag),void 0!==this._primaryNodes&&(t.primaryNodes=this._primaryNodes),t}}class d{static isPresentInList(t,e){return t.some(t=>t.endpoint===e)}static findByEndpoint(t,e){return t.find(t=>t.endpoint===e)}static findIndexByEndpoint(t,e){return t.findIndex(t=>t.endpoint===e)}}},96:function(t,e,r){"use strict";r.r(e),r.d(e,"UPDATE_CLUSTER",(function(){return n})),r.d(e,"DELETE_CLUSTER",(function(){return i})),r.d(e,"CLICK_IN_VIEW",(function(){return s})),r.d(e,"NODE_SELECTED",(function(){return o})),r.d(e,"CREATE_CLUSTER",(function(){return a})),r.d(e,"MODEL_UPDATED",(function(){return l}));const n="updateCluster",i="deleteCluster",s="clickInView",o="nodeSelected",a="createCluster",l="modelUpdated"}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[341],{448:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/cluster-nodes-configuration.css?v=2.8.0-RC1" rel="stylesheet"/>\n\n<div onto-loader-new ng-if="loader" class="create-cluster-loader" message="getLoaderMessage" size="100"></div>\n<div class="add-node-wrapper pull-right mb-1">\n <button ng-click="addNode()" ng-disabled="editedNodeIndex !== undefined"\n class="btn btn-primary add-node-btn"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.add_node_tooltip\' | translate}}">\n <i class="fa-regular fa-plus"></i> {{\'cluster_management.update_cluster_group_dialog.actions.add_node\' |\n translate}}\n </button>\n</div>\n<div class="table-responsive">\n <form name="form" id="updateClusterGroupForm">\n <table class="cluster-group table table-striped table-hover cluster-group-table" aria-describedby="cluster group table">\n <thead>\n <tr class="labels-row">\n <th scope="col" class="index-column">\n {{\'cluster_management.update_cluster_group_dialog.column.index\' | translate}}\n </th>\n <th scope="col" class="location-column">\n {{\'cluster_management.update_cluster_group_dialog.column.location\' | translate}}\n </th>\n <th scope="col" class="info-column">\n {{\'cluster_management.update_cluster_group_dialog.column.info\' | translate}}\n </th>\n <th scope="col" class="status-column">\n {{\'cluster_management.update_cluster_group_dialog.column.status\' | translate}}\n </th>\n <th scope="col" class="empty-column"></th>\n <th scope="col" class="actions-column"></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if="!viewModel.length">\n <td colspan="5" class="no-data">\n {{\'cluster_management.update_cluster_group_dialog.messages.no_cluster\' | translate}}\n </td>\n </tr>\n\n <tr ng-repeat-start="node in viewModel track by $index" ng-if="0"></tr>\n <tr ng-if="$index !== editedNodeIndex" class="node preview-node-row" data-endpoint="{{node.endpoint}}"\n capture-height="$index"\n ng-class="{\'selected\': $index === selectedNode || $index === editedNodeIndex}">\n <td class="index-cell"><span ng-if="!node.isDeleted">{{node.index + 1}}</span></td>\n <td class="location-cell data" ng-class="{\'deleting\': node.isDeleted, \'adding\': !node.item.address}">\n <div class="location-item">\n {{node.item.endpoint}}\n </div>\n </td>\n <td class="info-cell data">\n <span ng-if="node.isLocal">\n {{\'cluster_management.update_cluster_group_dialog.current_node\' | translate}}<span ng-if="node.item.nodeState">, </span>\n </span>\n\n <span ng-if="node.item.nodeState">\n {{ (\'cluster_management.update_cluster_group_dialog.\' + node.item.nodeState.toLowerCase()) |\n translate }}\n </span>\n </td>\n <td class="status-cell data">\n <div ng-if="!node.item.address" class="adding">\n <i class="fa-regular fa-circle-check status-icon"></i>\n {{\'cluster_management.update_cluster_group_dialog.new_node\' | translate}}\n </div>\n <div ng-if="node.isDeleted" class="deleting">\n <i class="fa-regular fa-xmark status-icon"></i>\n {{\'cluster_management.update_cluster_group_dialog.deleted_node\' | translate}}\n </div>\n </td>\n <td class="empty-cell"></td>\n <td class="actions-cell">\n <div ng-if="editedNodeIndex === undefined && !node.isDeleted" class="actions-group">\n <button ng-click="deleteNode($index, node)" ng-disabled="!canDeleteNode"\n class="btn btn-link delete-node-btn secondary"\n gdb-tooltip="{{ canDeleteNode ? (\'cluster_management.update_cluster_group_dialog.actions.delete_node\' | translate) : (\'cluster_management.update_cluster_group_dialog.actions.cannot_delete_node\' | translate) }}"\n title-class="delete-node-tooltip">\n <i class="fa-regular fa-xmark"></i>\n </button>\n <button ng-click="replaceNode($index, node)" class="btn btn-link replace-node-btn"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.replace_node\' | translate}}">\n <i class="fa-regular fa-arrow-right-arrow-left"></i>\n </button>\n </div>\n <div ng-if="editedNodeIndex === undefined && node.isDeleted" class="actions-group">\n <button ng-click="restoreNode(node)"\n class="btn btn-link restore-node-btn secondary"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.restore_node\' | translate}}">\n <i class="fa-regular fa-rotate-left"></i>\n </button>\n </div>\n </td>\n </tr>\n <tr ng-if="$index === editedNodeIndex" class="node edit-node-row" data-endpoint="{{node.endpoint}}"\n style="{{getRowHeight}}"\n ng-class="{\'selected table-info\': $index === editedNodeIndex}">\n <td class="index-cell"><span ng-if="!node.isDeleted">{{node.index + 1}}</span></td>\n <td class="data location-cell">\n <div class="autocomplete-container">\n <textarea type="text" name="location" required\n ng-model="node.endpoint"\n ng-change="filterSuggestions(node)"\n ng-blur="hideSuggestions(node)"\n ng-click="filterSuggestions(node)"\n auto-grow\n validate-url exclude="/repositories" exclude-protocol="ftp,ftps"\n validate-duplicate-url excluded-urls="clusterNodesEndpoints"\n allow-empty="false"\n autocomplete="off"\n class="form-control form-control-sm textarea-edit"\n uib-tooltip="{{\'remote.location.enter.url.msg\' | translate}}"\n tooltip-placement="top"\n placeholder="{{\'cluster_management.update_cluster_group_dialog.field_placeholders.location\' | translate}}">\n </textarea>\n <ul ng-show="suggestions.length > 0 && showDropdown" class="autocomplete-dropdown">\n <li ng-repeat="suggestion in suggestions"\n ng-mouseup="selectSuggestion(node, suggestion)">\n {{ suggestion }}\n </li>\n </ul>\n </div>\n </td>\n <td class="info-cell data">\n <span ng-if="node.isLocal">\n {{\'cluster_management.update_cluster_group_dialog.current_node\' | translate}}<span ng-if="node.item.nodeState">, </span>\n </span>\n\n <span ng-if="node.item.nodeState">\n {{ (\'cluster_management.update_cluster_group_dialog.\' + node.item.nodeState.toLowerCase()) |\n translate }}\n </span>\n </td>\n <td class="status-cell"></td>\n <td class="empty-cell"></td>\n <td class="actions-cell">\n <div class="crud-actions-group">\n <button ng-click="cancel()"\n class="btn btn-link cancel-node-replace-btn secondary"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.cancel\' | translate}}">\n <i class="fa-regular fa-xmark"></i>\n </button>\n <button ng-click="saveNode(node.endpoint)"\n class="btn btn-link save-rule-btn"\n ng-disabled="!form.location.$valid"\n gdb-tooltip="{{form.location.$valid ? \'cluster_management.update_cluster_group_dialog.actions.add_node\' : \'cluster_management.update_cluster_group_dialog.messages.invalid_form\' | translate}}">\n <i class="fa-regular fa-check"></i>\n </button>\n </div>\n </td>\n </tr>\n <tr ng-repeat-end ng-if="0"></tr>\n <tr ng-if="addNewLocation" class="node edit-node-row">\n <td class="index-cell"></td>\n <td class="data location-cell">\n <div class="autocomplete-container">\n <textarea type="text" name="location" required\n ng-model="newLocation.endpoint"\n ng-change="filterSuggestions(newLocation)"\n ng-blur="hideSuggestions(newLocation)"\n ng-click="filterSuggestions(newLocation)"\n auto-grow\n validate-url exclude="/repositories" exclude-protocol="ftp,ftps"\n validate-duplicate-url excluded-urls="clusterNodesEndpoints"\n allow-empty="false"\n autocomplete="off"\n class="form-control form-control-sm textarea-edit"\n uib-tooltip="{{\'remote.location.enter.url.msg\' | translate}}"\n tooltip-placement="top"\n placeholder="{{\'cluster_management.update_cluster_group_dialog.field_placeholders.location\' | translate}}">\n </textarea>\n <ul ng-show="suggestions.length > 0 && showDropdown" class="autocomplete-dropdown">\n <li ng-repeat="suggestion in suggestions"\n ng-mouseup="selectSuggestion(newLocation, suggestion)">\n {{ suggestion }}\n </li>\n </ul>\n </div>\n </td>\n <td class="info-cell data"></td>\n <td class="status-cell"></td>\n <td class="empty-cell"></td>\n <td class="actions-cell">\n <div class="crud-actions-group">\n <button ng-click="cancel()"\n class="btn btn-link cancel-node-replace-btn secondary"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.cancel\' | translate}}">\n <i class="fa-regular fa-xmark"></i>\n </button>\n <button ng-click="saveNode(newLocation.endpoint)"\n class="btn btn-link save-rule-btn"\n ng-disabled="!form.location.$valid"\n gdb-tooltip="{{form.location.$valid ? \'cluster_management.update_cluster_group_dialog.actions.add_node\' : \'cluster_management.update_cluster_group_dialog.messages.invalid_form\' | translate}}">\n <i class="fa-regular fa-check"></i>\n </button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <div class="errors">\n <div class="error-message"\n ng-show="form.location.$error.validUrl && !form.location.$pristine">\n * {{\'valid.remote.location.warning\' | translate}} http://server.example.com:7200/.\n </div>\n <div class="error-message"\n ng-show="form.location.$error.duplicateUrl && !form.location.$pristine">\n * {{\'duplicate.remote.location.warning\' | translate}}\n </div>\n <div ng-repeat="error in errors" class="error-message">\n {{error}}\n </div>\n </div>\n <div class="form-horizontal" ng-if="!hasCluster">\n <div class="form-group">\n <div class="indented-div">\n <span class="padding-label wrapper-div"\n gdb-tooltip="{{\'cluster_management.cluster_page.advanced_options_tooltip\' | translate}}">\n <button type="button"\n class="text-btn advanced-options-btn text-left"\n data-toggle="collapse"\n data-target="#advancedOptions">\n <i class="{{getAdvancedOptionsClass()}} advanced-options-toggle" aria-hidden="true"></i>\n {{\'cluster_management.cluster_page.advanced_options\' | translate}}\n </button>\n </span>\n </div>\n\n <div id="advancedOptions" class="collapse pb-1 pl-2">\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.electionMinTimeout.$invalid}">\n <label for="election-minimum-timeout" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.election_min_timeout\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.election_min_timeout_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.electionMinTimeout"\n required id="election-minimum-timeout" min="0" pattern="[0-9]+"\n name="electionMinTimeout">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.electionMinTimeout.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.electionMinTimeout.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.electionRangeTimeout.$invalid}">\n <label for="election-range-timeout" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.election_range_timeout\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.election_range_timeout_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.electionRangeTimeout"\n required id="election-range-timeout" min="0" pattern="[0-9]+"\n name="electionRangeTimeout">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.electionRangeTimeout.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.electionRangeTimeout.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.heartbeatInterval.$invalid}">\n <label for="heartbeat-interval" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.heartbeat_interval\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.heartbeat_interval_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.heartbeatInterval"\n required id="heartbeat-interval" min="0" pattern="[0-9]+"\n name="heartbeatInterval">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.heartbeatInterval.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.heartbeatInterval.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.messageSizeKB.$invalid}">\n <label for="message-size" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.message_size_kb\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.message_size_kb_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.messageSizeKB"\n required id="message-size" min="0" pattern="[0-9]+" name="messageSizeKB">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.messageSizeKB.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.messageSizeKB.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.verificationTimeout.$invalid}">\n <label for="verification-timeout" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.verification_timeout\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.verification_timeout_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.verificationTimeout"\n required id="verification-timeout" min="0" pattern="[0-9]+"\n name="verificationTimeout">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.verificationTimeout.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.verificationTimeout.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.transactionLogMaximumSizeGB.$invalid}">\n <label for="verification-timeout" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.transaction_log_maximum_size_gb\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.transaction_log_maximum_size_gb_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.transactionLogMaximumSizeGB"\n required id="transaction-log-maximum-size-gb"\n pattern="-?[1-9][0-9]*(\\.[0-9]+)?" name="transaction_log_maximum_size_gb">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.transactionLogMaximumSizeGB.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.transactionLogMaximumSizeGB.$error.pattern">\n {{\'cluster_management.cluster_page.errors.small_transaction_log_max_size\' |\n translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="form-group">\n <div class="input-group" ng-class="{\'has-danger\': clusterConfigurationForm.batchUpdateInterval.$invalid}">\n <label for="batch-update-interval" class="col-xs-4 col-form-label">\n {{\'cluster_management.cluster_configuration_properties.batch_update_interval\' | translate}}*\n </label>\n <div class="col-xs-8" gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.batch_update_interval_tooltip\' | translate}}">\n <input\n class="form-control"\n placeholder="{{\'required.field\' | translate}}"\n type="number"\n ng-model="clusterConfiguration.batchUpdateInterval"\n required\n id="batch-update-interval"\n min="0"\n name="batchUpdateInterval">\n <div class="form-control-feedback" ng-show="clusterConfigurationForm.batchUpdateInterval.$error.required">\n {{\'required.field\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>\n';return __p}}}]);
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[341],{448:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/cluster-nodes-configuration.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div onto-loader-new ng-if="loader" class="create-cluster-loader" message="getLoaderMessage" size="100"></div>\n<div class="add-node-wrapper pull-right mb-1">\n <button ng-click="addNode()" ng-disabled="editedNodeIndex !== undefined"\n class="btn btn-primary add-node-btn"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.add_node_tooltip\' | translate}}">\n <i class="fa-regular fa-plus"></i> {{\'cluster_management.update_cluster_group_dialog.actions.add_node\' |\n translate}}\n </button>\n</div>\n<div class="table-responsive">\n <form name="form" id="updateClusterGroupForm">\n <table class="cluster-group table table-striped table-hover cluster-group-table" aria-describedby="cluster group table">\n <thead>\n <tr class="labels-row">\n <th scope="col" class="index-column">\n {{\'cluster_management.update_cluster_group_dialog.column.index\' | translate}}\n </th>\n <th scope="col" class="location-column">\n {{\'cluster_management.update_cluster_group_dialog.column.location\' | translate}}\n </th>\n <th scope="col" class="info-column">\n {{\'cluster_management.update_cluster_group_dialog.column.info\' | translate}}\n </th>\n <th scope="col" class="status-column">\n {{\'cluster_management.update_cluster_group_dialog.column.status\' | translate}}\n </th>\n <th scope="col" class="empty-column"></th>\n <th scope="col" class="actions-column"></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if="!viewModel.length">\n <td colspan="5" class="no-data">\n {{\'cluster_management.update_cluster_group_dialog.messages.no_cluster\' | translate}}\n </td>\n </tr>\n\n <tr ng-repeat-start="node in viewModel track by $index" ng-if="0"></tr>\n <tr ng-if="$index !== editedNodeIndex" class="node preview-node-row" data-endpoint="{{node.endpoint}}"\n capture-height="$index"\n ng-class="{\'selected\': $index === selectedNode || $index === editedNodeIndex}">\n <td class="index-cell"><span ng-if="!node.isDeleted">{{node.index + 1}}</span></td>\n <td class="location-cell data" ng-class="{\'deleting\': node.isDeleted, \'adding\': !node.item.address}">\n <div class="location-item">\n {{node.item.endpoint}}\n </div>\n </td>\n <td class="info-cell data">\n <span ng-if="node.isLocal">\n {{\'cluster_management.update_cluster_group_dialog.current_node\' | translate}}<span ng-if="node.item.nodeState">, </span>\n </span>\n\n <span ng-if="node.item.nodeState">\n {{ (\'cluster_management.update_cluster_group_dialog.\' + node.item.nodeState.toLowerCase()) |\n translate }}\n </span>\n </td>\n <td class="status-cell data">\n <div ng-if="!node.item.address" class="adding">\n <i class="fa-regular fa-circle-check status-icon"></i>\n {{\'cluster_management.update_cluster_group_dialog.new_node\' | translate}}\n </div>\n <div ng-if="node.isDeleted" class="deleting">\n <i class="fa-regular fa-xmark status-icon"></i>\n {{\'cluster_management.update_cluster_group_dialog.deleted_node\' | translate}}\n </div>\n </td>\n <td class="empty-cell"></td>\n <td class="actions-cell">\n <div ng-if="editedNodeIndex === undefined && !node.isDeleted" class="actions-group">\n <button ng-click="deleteNode($index, node)" ng-disabled="!canDeleteNode"\n class="btn btn-link delete-node-btn secondary"\n gdb-tooltip="{{ canDeleteNode ? (\'cluster_management.update_cluster_group_dialog.actions.delete_node\' | translate) : (\'cluster_management.update_cluster_group_dialog.actions.cannot_delete_node\' | translate) }}"\n title-class="delete-node-tooltip">\n <i class="fa-regular fa-xmark"></i>\n </button>\n <button ng-click="replaceNode($index, node)" class="btn btn-link replace-node-btn"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.replace_node\' | translate}}">\n <i class="fa-regular fa-arrow-right-arrow-left"></i>\n </button>\n </div>\n <div ng-if="editedNodeIndex === undefined && node.isDeleted" class="actions-group">\n <button ng-click="restoreNode(node)"\n class="btn btn-link restore-node-btn secondary"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.restore_node\' | translate}}">\n <i class="fa-regular fa-rotate-left"></i>\n </button>\n </div>\n </td>\n </tr>\n <tr ng-if="$index === editedNodeIndex" class="node edit-node-row" data-endpoint="{{node.endpoint}}"\n style="{{getRowHeight}}"\n ng-class="{\'selected table-info\': $index === editedNodeIndex}">\n <td class="index-cell"><span ng-if="!node.isDeleted">{{node.index + 1}}</span></td>\n <td class="data location-cell">\n <div class="autocomplete-container">\n <textarea type="text" name="location" required\n ng-model="node.endpoint"\n ng-change="filterSuggestions(node)"\n ng-blur="hideSuggestions(node)"\n ng-click="filterSuggestions(node)"\n auto-grow\n validate-url exclude="/repositories" exclude-protocol="ftp,ftps"\n validate-duplicate-url excluded-urls="clusterNodesEndpoints"\n allow-empty="false"\n autocomplete="off"\n class="form-control form-control-sm textarea-edit"\n uib-tooltip="{{\'remote.location.enter.url.msg\' | translate}}"\n tooltip-placement="top"\n placeholder="{{\'cluster_management.update_cluster_group_dialog.field_placeholders.location\' | translate}}">\n </textarea>\n <ul ng-show="suggestions.length > 0 && showDropdown" class="autocomplete-dropdown">\n <li ng-repeat="suggestion in suggestions"\n ng-mouseup="selectSuggestion(node, suggestion)">\n {{ suggestion }}\n </li>\n </ul>\n </div>\n </td>\n <td class="info-cell data">\n <span ng-if="node.isLocal">\n {{\'cluster_management.update_cluster_group_dialog.current_node\' | translate}}<span ng-if="node.item.nodeState">, </span>\n </span>\n\n <span ng-if="node.item.nodeState">\n {{ (\'cluster_management.update_cluster_group_dialog.\' + node.item.nodeState.toLowerCase()) |\n translate }}\n </span>\n </td>\n <td class="status-cell"></td>\n <td class="empty-cell"></td>\n <td class="actions-cell">\n <div class="crud-actions-group">\n <button ng-click="cancel()"\n class="btn btn-link cancel-node-replace-btn secondary"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.cancel\' | translate}}">\n <i class="fa-regular fa-xmark"></i>\n </button>\n <button ng-click="saveNode(node.endpoint)"\n class="btn btn-link save-rule-btn"\n ng-disabled="!form.location.$valid"\n gdb-tooltip="{{form.location.$valid ? \'cluster_management.update_cluster_group_dialog.actions.add_node\' : \'cluster_management.update_cluster_group_dialog.messages.invalid_form\' | translate}}">\n <i class="fa-regular fa-check"></i>\n </button>\n </div>\n </td>\n </tr>\n <tr ng-repeat-end ng-if="0"></tr>\n <tr ng-if="addNewLocation" class="node edit-node-row">\n <td class="index-cell"></td>\n <td class="data location-cell">\n <div class="autocomplete-container">\n <textarea type="text" name="location" required\n ng-model="newLocation.endpoint"\n ng-change="filterSuggestions(newLocation)"\n ng-blur="hideSuggestions(newLocation)"\n ng-click="filterSuggestions(newLocation)"\n auto-grow\n validate-url exclude="/repositories" exclude-protocol="ftp,ftps"\n validate-duplicate-url excluded-urls="clusterNodesEndpoints"\n allow-empty="false"\n autocomplete="off"\n class="form-control form-control-sm textarea-edit"\n uib-tooltip="{{\'remote.location.enter.url.msg\' | translate}}"\n tooltip-placement="top"\n placeholder="{{\'cluster_management.update_cluster_group_dialog.field_placeholders.location\' | translate}}">\n </textarea>\n <ul ng-show="suggestions.length > 0 && showDropdown" class="autocomplete-dropdown">\n <li ng-repeat="suggestion in suggestions"\n ng-mouseup="selectSuggestion(newLocation, suggestion)">\n {{ suggestion }}\n </li>\n </ul>\n </div>\n </td>\n <td class="info-cell data"></td>\n <td class="status-cell"></td>\n <td class="empty-cell"></td>\n <td class="actions-cell">\n <div class="crud-actions-group">\n <button ng-click="cancel()"\n class="btn btn-link cancel-node-replace-btn secondary"\n gdb-tooltip="{{\'cluster_management.update_cluster_group_dialog.actions.cancel\' | translate}}">\n <i class="fa-regular fa-xmark"></i>\n </button>\n <button ng-click="saveNode(newLocation.endpoint)"\n class="btn btn-link save-rule-btn"\n ng-disabled="!form.location.$valid"\n gdb-tooltip="{{form.location.$valid ? \'cluster_management.update_cluster_group_dialog.actions.add_node\' : \'cluster_management.update_cluster_group_dialog.messages.invalid_form\' | translate}}">\n <i class="fa-regular fa-check"></i>\n </button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <div class="errors">\n <div class="error-message"\n ng-show="form.location.$error.validUrl && !form.location.$pristine">\n * {{\'valid.remote.location.warning\' | translate}} http://server.example.com:7200/.\n </div>\n <div class="error-message"\n ng-show="form.location.$error.duplicateUrl && !form.location.$pristine">\n * {{\'duplicate.remote.location.warning\' | translate}}\n </div>\n <div ng-repeat="error in errors" class="error-message">\n {{error}}\n </div>\n </div>\n <div class="form-horizontal" ng-if="!hasCluster">\n <div class="form-group">\n <div class="indented-div">\n <span class="padding-label wrapper-div"\n gdb-tooltip="{{\'cluster_management.cluster_page.advanced_options_tooltip\' | translate}}">\n <button type="button"\n class="text-btn advanced-options-btn text-left"\n data-toggle="collapse"\n data-target="#advancedOptions">\n <i class="{{getAdvancedOptionsClass()}} advanced-options-toggle" aria-hidden="true"></i>\n {{\'cluster_management.cluster_page.advanced_options\' | translate}}\n </button>\n </span>\n </div>\n\n <div id="advancedOptions" class="collapse pb-1 pl-2">\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.electionMinTimeout.$invalid}">\n <label for="election-minimum-timeout" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.election_min_timeout\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.election_min_timeout_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.electionMinTimeout"\n required id="election-minimum-timeout" min="0" pattern="[0-9]+"\n name="electionMinTimeout">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.electionMinTimeout.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.electionMinTimeout.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.electionRangeTimeout.$invalid}">\n <label for="election-range-timeout" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.election_range_timeout\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.election_range_timeout_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.electionRangeTimeout"\n required id="election-range-timeout" min="0" pattern="[0-9]+"\n name="electionRangeTimeout">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.electionRangeTimeout.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.electionRangeTimeout.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.heartbeatInterval.$invalid}">\n <label for="heartbeat-interval" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.heartbeat_interval\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.heartbeat_interval_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.heartbeatInterval"\n required id="heartbeat-interval" min="0" pattern="[0-9]+"\n name="heartbeatInterval">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.heartbeatInterval.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.heartbeatInterval.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.messageSizeKB.$invalid}">\n <label for="message-size" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.message_size_kb\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.message_size_kb_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.messageSizeKB"\n required id="message-size" min="0" pattern="[0-9]+" name="messageSizeKB">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.messageSizeKB.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.messageSizeKB.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.verificationTimeout.$invalid}">\n <label for="verification-timeout" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.verification_timeout\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.verification_timeout_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.verificationTimeout"\n required id="verification-timeout" min="0" pattern="[0-9]+"\n name="verificationTimeout">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.verificationTimeout.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.verificationTimeout.$error.pattern">\n {{\'cluster_management.cluster_page.errors.only_positive_integers\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="form-group">\n <div class="input-group"\n ng-class="{\'has-danger\': clusterConfigurationForm.transactionLogMaximumSizeGB.$invalid}">\n <label for="verification-timeout" class="col-xs-4 col-form-label">{{\'cluster_management.cluster_configuration_properties.transaction_log_maximum_size_gb\'\n | translate}}*</label>\n <div class="col-xs-8"\n gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.transaction_log_maximum_size_gb_tooltip\' | translate}}">\n <input class="form-control" placeholder="{{\'required.field\' | translate}}"\n type="number" ng-model="clusterConfiguration.transactionLogMaximumSizeGB"\n required id="transaction-log-maximum-size-gb"\n pattern="-?[1-9][0-9]*(\\.[0-9]+)?" name="transaction_log_maximum_size_gb">\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.transactionLogMaximumSizeGB.$error.required">\n {{\'required.field\' | translate}}\n </div>\n <div class="form-control-feedback"\n ng-show="clusterConfigurationForm.transactionLogMaximumSizeGB.$error.pattern">\n {{\'cluster_management.cluster_page.errors.small_transaction_log_max_size\' |\n translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="form-group">\n <div class="input-group" ng-class="{\'has-danger\': clusterConfigurationForm.batchUpdateInterval.$invalid}">\n <label for="batch-update-interval" class="col-xs-4 col-form-label">\n {{\'cluster_management.cluster_configuration_properties.batch_update_interval\' | translate}}*\n </label>\n <div class="col-xs-8" gdb-tooltip="{{\'cluster_management.cluster_configuration_properties.batch_update_interval_tooltip\' | translate}}">\n <input\n class="form-control"\n placeholder="{{\'required.field\' | translate}}"\n type="number"\n ng-model="clusterConfiguration.batchUpdateInterval"\n required\n id="batch-update-interval"\n min="0"\n name="batchUpdateInterval">\n <div class="form-control-feedback" ng-show="clusterConfigurationForm.batchUpdateInterval.$error.required">\n {{\'required.field\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[347],{454:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/autocomplete-select.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[347],{454:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/autocomplete-select.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div class="autocomplete-select-wrapper">\n <div class="autocomplete-select">\n <div ng-hide="isMultiline">\n <input type="text" ng-model="searchInput" ng-change="onChange()" ng-keydown="onKeyDown($event)"\n ng-blur="onBlur()" ng-required="required"\n class="autocomplete-input autocomplete-editable" ng-class="styleClass" placeholder="{{placeholder}}">\n </div>\n <div ng-show="isMultiline">\n <textarea\n ng-model="searchInput"\n ng-change="onChange()"\n ng-keydown="onKeyDown($event)"\n ng-blur="onBlur()"\n ng-required="required"\n class="autocomplete-textarea autocomplete-editable" ng-class="styleClass"\n placeholder="{{placeholder}}"\n rows="{{initialRows}}">\n </textarea>\n </div>\n </div>\n <div class="autocomplete-results-wrapper card">\n <div ng-repeat="autoCompleteUriResult in autoCompleteUriResults track by $index"\n ng-click="selectResource(autoCompleteUriResult)"\n ng-mousemove="setActiveItemIndex($index)"\n ng-class="{active: activeSearchElm === $index, selected: selectedElementIndex === $index}"\n class="result-item">\n <p ng-bind-html="getResultItemHtml(autoCompleteUriResult)"></p>\n </div>\n </div>\n</div>\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[350],{457:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/operations-statuses-monitor.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[350],{457:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/operations-statuses-monitor.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div ng-if="activeOperations && activeOperations.operations && activeOperations.operations.length > 0"\n class="operations-statuses btn-group">\n <button type="button"\n class="btn btn-secondary operations-statuses-dropdown-toggle dropdown-toggle" data-toggle="dropdown"\n ng-if="operationsSummary && operationsSummary.length > 0"\n ng-class="{\n \'btn-fade-danger\': OPERATION_STATUS.CRITICAL === activeOperations.status,\n \'btn-fade-warning\': OPERATION_STATUS.WARNING === activeOperations.status\n }">\n <div class="operation-status-header" ng-repeat="operationGroup in operationsSummary">\n <div ng-class="{\n \'icon-import\': OPERATION_GROUP_TYPE.IMPORT_OPERATION === operationGroup.type,\n \'icon-exchange\': OPERATION_GROUP_TYPE.QUERIES_OPERATION === operationGroup.type,\n \'fa fa-archive\': OPERATION_GROUP_TYPE.BACKUP_AND_RESTORE_OPERATION === operationGroup.type,\n \'fa fa-sitemap\': OPERATION_GROUP_TYPE.CLUSTER_OPERATION === operationGroup.type,\n \'status-critical\': OPERATION_STATUS.CRITICAL === operationGroup.status,\n \'status-information\': OPERATION_STATUS.INFORMATION === operationGroup.status,\n \'status-warning\': OPERATION_STATUS.WARNING === operationGroup.status}">\n </div>\n <span ng-if="operationGroup.runningOperations" class="running-operation-count">\n <sup class="tag-info">{{operationGroup.runningOperations}}</sup>\n </span>\n </div>\n <span class="caret"></span>\n </button>\n <ul role="menu" class="dropdown-menu dropdown-menu-right">\n <div class="operations-statuses-content">\n <li ng-repeat="operationStatus in activeOperations.operations">\n <a class="operation-status-content btn btn-secondary row" target="_blank" ng-attr-href="{{operationStatus.monitoringViewUrl}}"\n ng-class="{\n \'status-critical\': OPERATION_STATUS.CRITICAL === operationStatus.status,\n \'status-information\': OPERATION_STATUS.INFORMATION === operationStatus.status,\n \'status-warning\': OPERATION_STATUS.WARNING === operationStatus.status\n }">\n <div class="operation-icon col-sm-1" ng-style="noPadding">\n <div ng-class="{\n \'icon-import\': OPERATION_TYPE.IMPORTS === operationStatus.type,\n \'icon-exchange\': OPERATION_TYPE.QUERIES === operationStatus.type || OPERATION_TYPE.UPDATES === operationStatus.type,\n \'fa fa-archive\': OPERATION_TYPE.BACKUP_RESTORE === operationStatus.type,\n \'fa fa-sitemap\': OPERATION_TYPE.CLUSTER_STATUS === operationStatus.type}">\n </div>\n </div>\n <div class="col-sm-8 operation-status-label">\n {{ \'global.operations_statuses.\' + operationStatus.titleLabelKey + \'.title\' | translate }}\n </div>\n <div class="operation-number col-sm-3">\n <div ng-if="operationStatus.runningOperationCount" class="operation-status-running-operation-count tag-info">\n {{operationStatus.runningOperationCount}}\n </div>\n </div>\n </a>\n </li>\n </div>\n </ul>\n</div>\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[351],{458:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/rdf-resource-search.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[351],{458:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/rdf-resource-search.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div ng-cloak>\n <div id="search-box"\n class="card search-rdf-input"\n ng-class="{\'show-rdf-search-box-visible\': showRdfSearchInput, \'show-rdf-search-box-invisible\': !showRdfSearchInput}"\n ng-keydown="onKeyDown($event)">\n <div class="card-block">\n <search-resource-input namespacespromise="getNamespacesPromise"\n autocompletepromisestatus="getAutocompletePromise"\n empty="empty"\n open-in-new-tab="true"\n preserve-search="true"\n radio-buttons="true"\n clear-input-icon="true">\n </search-resource-input>\n <button class="btn btn-link close-rdf-search-btn"\n gdb-tooltip="{{\'search.resource.close.msg\' | translate}}" tooltip-placement="bottom"\n ng-click="hideInput()">\n <i class="icon-close icon-2x" aria-hidden="true"></i>\n </button>\n </div>\n </div>\n <button class="btn btn-link search-rdf-btn"\n ng-if="!showRdfSearchInput"\n gdb-tooltip="{{\'search.resources.msg\' | translate}}"\n tooltip-placement="bottom"\n ng-click="showInput()">\n <i class="icon-search" aria-hidden="true"></i>\n </button>\n</div>\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[352],{459:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/lib/ontotext-yasgui-web-component.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[352],{459:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/lib/ontotext-yasgui-web-component.css?v=2.8.0-RC3" rel="stylesheet">\n\n<ontotext-yasgui\n class="{{classToApply}}"\n ng-custom-element\n ngce-prop-config="ontotextYasguiConfig"\n ngce-prop-saved_query_config="savedQueryConfig"\n ngce-prop-language="language"\n ngce-on-create_saved_query="createSavedQuery($event)"\n ngce-on-update_saved_query="updateSavedQuery($event)"\n ngce-on-delete_saved_query="deleteSavedQuery($event)"\n ngce-on-share_saved_query="shareSavedQuery($event)"\n ngce-on-share_query="shareQuery($event)"\n ngce-on-query_share_link_copied="queryShareLinkCopied()"\n ngce-on-load_saved_queries="loadSavedQueries($event)"\n ngce-on-save_query_opened="saveQueryOpened($event)"\n ngce-on-output="output($event)">\n</ontotext-yasgui>\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[353],{460:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/cookie-policy.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[353],{460:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/cookie-policy.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div class="cookie-consent-modal" ng-show="showCookieConsent">\n <div class="cookie-consent-content">\n <span>{{\'cookie.cookie_consent\' | translate}} <a href="#" ng-click="showCookiePolicy()">{{\'cookie.cookie_policy_url_label\' | translate}}</a>.</span>\n <button class="btn btn-primary" ng-click="acceptConsent()">{{\'common.agree.btn\' | translate}}</button>\n </div>\n</div>\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[354],{461:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/cookie-policy.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[354],{461:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/cookie-policy.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div class="cookie-policy-modal">\n <div class="title">{{\'cookie.policy.title\' | translate}}</div>\n\n <div class="heading">{{\'cookie.policy.purpose_heading\' | translate}}</div>\n <div class="text">{{\'cookie.policy.purpose_text\' | translate}}</div>\n\n <div class="heading">{{\'cookie.policy.who_are_we_heading\' | translate}}</div>\n <div class="text">{{\'cookie.policy.who_are_we_text\' | translate}}</div>\n\n <div class="heading">{{\'cookie.policy.cookies_heading\' | translate}}</div>\n <div class="text">{{\'cookie.policy.cookies_text\' | translate}}</div>\n\n <div class="heading">{{\'cookie.policy.privacy_commitment_heading\' | translate}}</div>\n <div class="text">{{\'cookie.policy.privacy_commitment_text\' | translate}}</div>\n <ul>\n <li>{{\'cookie.policy.privacy_commitment_1\' | translate}}</li>\n <li>{{\'cookie.policy.privacy_commitment_2\' | translate}}</li>\n </ul>\n\n <div class="heading">{{\'cookie.policy.how_collect_heading\' | translate}}</div>\n <div class="text">{{\'cookie.policy.how_collect_text\' | translate}}</div>\n\n <div class="heading">{{\'cookie.policy.what_collect_heading\' | translate}}</div>\n <ul>\n <li>{{\'cookie.policy.what_collect_text_1\' | translate}}</li>\n <li>{{\'cookie.policy.what_collect_text_2\' | translate}}</li>\n </ul>\n\n <div class="heading">{{\'cookie.policy.third_party_cookies_heading\' | translate}}</div>\n <div class="text">{{\'cookie.policy.third_party_cookies_text\' | translate}}</div>\n\n <div class="subheading">{{\'cookie.policy.google_analytics_heading\' | translate}}</div>\n <div class="text">\n {{\'cookie.policy.google_analytics_opt_out_text\' | translate}}\n <a href="https://tools.google.com/dlpage/gaoptout/" target="_blank">{{\'cookie.policy.google_analytics_opt_out_link_text\' | translate}}</a>\n {{\'cookie.policy.google_analytics_text\' | translate}}\n </div>\n\n <div class="heading">{{\'cookie.policy.changes_heading\' | translate}}</div>\n <div class="text">{{\'cookie.policy.changes_text\' | translate}}</div>\n\n <div class="heading">{{\'cookie.policy.contact_heading\' | translate}}</div>\n <div class="text">{{\'cookie.policy.contact_text\' | translate}}</div>\n\n <div class="text-right">\n <button class="btn btn-primary" ng-click="close()">{{\'common.agree.btn\' | translate}}</button>\n </div>\n</div>\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[384],{491:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<script type="text/ng-template" id="popover-content-user.html">\n\t<h5>{{\'security.user.may\' | translate}}</h5>\n\t<ul>\n <li>{{\'security.use.gdb\' | translate}}</li>\n\t <li>{{\'security.grant.read.access\' | translate}}</li>\n\t\t<li>{{\'security.grant.read.write.access\' | translate}}</li>\n </ul>\n<\/script>\n\n<script type="text/ng-template" id="popover-content-repo-manager.html">\n\t<h5>{{\'security.repo.manager.may\' | translate}}</h5>\n\t<ul>\n\t\t<li>{{\'security.use.gdb\' | translate}}</li>\n\t\t<li>{{\'security.read.write.all.repos\' | translate}}</li>\n\t\t<li>{{\'security.create.edit.delete.repos\' | translate}}</li>\n\t\t<li>{{\'security.access.monitoring\' | translate}}</li>\n\t</ul>\n<\/script>\n\n<script type="text/ng-template" id="popover-content-admin.html">\n\t<h5>{{\'security.admin.may\' | translate}}</h5>\n\t<ul>\n\t\t<li>{{\'security.use.gdb\' | translate}}</li>\n\t\t<li>{{\'security.read.write.all.repos\' | translate}}</li>\n\t\t<li>{{\'security.create.edit.delete.repos\' | translate}}</li>\n\t\t<li>{{\'security.access.monitoring\' | translate}}</li>\n\t\t<li>{{\'security.attach.remote.locations\' | translate}}</li>\n\t\t<li>{{\'security.manage.users.access\' | translate}}</li>\n\t\t<li>{{\'security.manage.cluster\' | translate}}</li>\n\t\t<li>{{\'security.view.sys.info\' | translate}}</li>\n\t</ul>\n<\/script>\n\n<link href="css/lib/ng-tags-input/ng-tags-input.min.css?v=2.8.0-RC1" rel="stylesheet"/>\n\n<h1>\n {{pageTitle}}\n <page-info-tooltip></page-info-tooltip>\n</h1>\n\n<div id="wb-user" ng-hide="loader">\n\t<form name="form" class="form newUserForm userForm editUserContainer" ng-submit="submit()" novalidate>\n\t\t<div class="row">\n\t\t\t<div class="col-md-6 us-left-col">\n\t\t\t\t<div class="card login-credentials" ng-hide="isOverrideAuth() || !isLocalAuthentication()">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'view.login.title\' | translate}}</h3>\n\t\t\t\t\t\t<div class="form-group" ng-class="{\'has-danger\': usernameError}">\n\t\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t\t<span class="input-group-addon" gdb-tooltip="{{\'security.table.username\' | translate}}"><em class="icon-user icon-2x text-muted"></em></span>\n\t\t\t\t\t\t\t\t<input id="wb-user-username" placeholder="{{\'security.table.username\' | translate}}" name="username" class="form-control form-control-lg" type="text" ng-model="user.username" ng-readonly="mode !== \'add\'">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div ng-show="usernameError" class="form-control-feedback">{{usernameError}}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="form-group" ng-class="{\'has-danger\': passwordError}">\n\t\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t\t<span class="input-group-addon" gdb-tooltip="{{\'security.password.placeholder\' | translate}}"><em class="icon-lock icon-2x text-muted"></em></span>\n\t\t\t\t\t\t\t\t<input id="wb-user-password" placeholder="{{passwordPlaceholder | translate}}" name="password" class="form-control form-control-lg" type="password"\tng-model="user.password" ng-hide="user.external || hasExternalAuthUser()" ng-readonly="noPassword">\n\t\t\t\t\t\t\t\t<span ng-show="user.external || hasExternalAuthUser()">{{\'security.auth.from.external.module\' | translate}}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div ng-show="passwordError" class="form-control-feedback">{{passwordError}}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="form-group" ng-class="{\'has-danger\': confirmPasswordError}" ng-hide="user.external || hasExternalAuthUser()">\n\t\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t\t<span class="input-group-addon" gdb-tooltip="{{\'security.password.confirm\' | translate}}"><em class="icon-lock icon-2x text-muted"></em></span>\n\t\t\t\t\t\t\t\t<input id="wb-user-confirmpassword" placeholder="{{\'security.password.confirm\' | translate}}" name="password_confirm" class="form-control form-control-lg" type="password" ng-model="user.confirmpassword" ng-readonly="noPassword">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div ng-show="confirmPasswordError" class="form-control-feedback">{{confirmPasswordError}}</div>\n\t\t\t\t\t\t</div>\n <div>\n <label class="d-block">\n <input type="checkbox" id="noPassword" ng-model="noPassword" ng-change="setNoPassword()">\n <span ng-show="mode === \'add\'">{{\'security.dont.set.password\' | translate}} </span>\n <span ng-show="mode !== \'add\'">{{\'security.unset.password\' | translate}} </span>\n </label>\n </div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class="card sparql-editor-settings" id="user-settings">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'security.user.settings\' | translate}}</h3>\n\n\t\t\t\t\t\t<div id="sameas-on" class="mb-1">\n\t\t\t\t\t\t\t<span class="sameas-label">\n\t\t\t\t\t\t\t\t{{\'security.expand.sameAs.is\' | translate}}\n\t\t\t\t\t\t\t\t<span class="tag {{user.appSettings.DEFAULT_SAMEAS ? \'tag-primary\' : \'tag-default\'}}">\n\t\t\t\t\t\t\t\t\t{{user.appSettings.DEFAULT_SAMEAS ? \'common.on.btn\' : \'common.off.btn\' | translate}}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span gdb-tooltip="{{shouldDisableSameAs() ? \'core.require.inferred\' : \'security.tooltip.click.me\' | translate}}" tooltip-placement="top"\n\t\t\t\t\t\t\t\t ng-click="user.appSettings.DEFAULT_SAMEAS = !user.appSettings.DEFAULT_SAMEAS"\n\t\t\t\t\t\t\t\t class="switch mr-0">\n\t\t\t\t\t\t\t\t<input id="sameAsCheck" type="checkbox" class="switch"\n ng-checked="user.appSettings.DEFAULT_SAMEAS"\n ng-disabled="shouldDisableSameAs()"/>\n\t\t\t\t\t\t\t\t<label for="sameas-on"></label>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{{\'security.default.editor.graph\' | translate}}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div id="inference-on" class="mb-1">\n\t\t\t\t\t\t\t<span class="inference-label">\n\t\t\t\t\t\t\t\t{{\'security.inference.is\' | translate}}\n\t\t\t\t\t\t\t\t<span class="tag {{user.appSettings.DEFAULT_INFERENCE ? \'tag-primary\' : \'tag-default\'}}">\n\t\t\t\t\t\t\t\t\t{{user.appSettings.DEFAULT_INFERENCE ? \'common.on.btn\' : \'common.off.btn\' | translate}}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span gdb-tooltip="{{\'security.tooltip.click.me\' | translate}}" tooltip-placement="top"\n\t\t\t\t\t\t\t\t ng-click="user.appSettings.DEFAULT_INFERENCE = !user.appSettings.DEFAULT_INFERENCE"\n\t\t\t\t\t\t\t\t class="switch mr-0">\n\t\t\t\t\t\t\t\t<input type="checkbox" class="switch" ng-checked="user.appSettings.DEFAULT_INFERENCE"/>\n\t\t\t\t\t\t\t\t<label for="inference-on"></label>\n\t\t\t\t\t\t\t</span>\n {{\'security.default.editor.graph\' | translate}}\n\t\t\t\t\t\t</div>\n\n <div id="schema-on" class="mb-1">\n\t\t\t\t\t\t\t<span class="schema-label">\n\t\t\t\t\t\t\t\t{{\'security.show.schema\' | translate}}\n\t\t\t\t\t\t\t\t<span class="tag {{user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA ? \'tag-primary\' : \'tag-default\'}}">\n\t\t\t\t\t\t\t\t\t{{user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA ? \'common.on.btn\' : \'common.off.btn\' | translate}}\n\t\t\t\t\t\t\t\t</span>\n <span gdb-tooltip="{{\'security.tooltip.click.me\' | translate}}" tooltip-placement="top"\n ng-click="user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA = !user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA"\n class="switch mr-0">\n\t\t\t\t\t\t\t\t<input type="checkbox" class="switch" ng-checked="user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA"/>\n\t\t\t\t\t\t\t\t<label for="schema-on"></label>\n\t\t\t\t\t\t\t</span>\n {{\'security.default.visual.graph\' | translate}}\n\t\t\t\t\t\t\t</span>\n </div>\n\n\t\t\t\t\t\t<label class="d-block">\n\t\t\t\t\t\t\t<input type="checkbox" ng-model="user.appSettings.EXECUTE_COUNT" id="defaultCount" checked="appSettings.EXECUTE_COUNT">\n\t\t\t\t\t\t\t{{\'security.count.total.results\' | translate}}\n\t\t\t\t\t\t</label>\n\n\t\t\t\t\t\t<label class="d-block">\n\t\t\t\t\t\t\t<input type="checkbox" ng-model="user.appSettings.IGNORE_SHARED_QUERIES" id="ignore-shared" checked="appSettings.IGNORE_SHARED_QUERIES">\n\t\t\t\t\t\t\t{{\'security.ignore.shared.queries\' | translate}}\n\t\t\t\t\t\t</label>\n\n <label class="d-block cookie-policy-link" ng-if="showCookiePolicyLink">\n <a href="#" ng-click="showCookiePolicy()">{{\'cookie.cookie_policy_url_label\' | translate}}</a>\n </label>\n\n </div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class="card" id="workbench-settings" ng-if="showWorkbenchSettings">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'security.workbench.settings.title\' | translate}}\n\t\t\t\t\t\t\t<em class="icon-info text-tertiary small" gdb-tooltip="{{\'security.workbench.settings.theme.tooltip\' | translate}}"></em></h3>\n\t\t\t\t\t\t<div>\n <div class="form-group">\n <label class="col-lg-2">{{\'security.workbench.settings.theme.label\' | translate}}</label>\n <div class="btn-group theme-selector-dropdown" uib-dropdown>\n <button type="button" class="btn btn-sm btn-secondary dropdown-toggle theme-selector-dropdown-btn" uib-dropdown-toggle>\n {{selectedTheme.label}}\n </button>\n <ul class="dropdown-menu" role="menu">\n <li ng-repeat="theme in themes">\n <a ng-click="setTheme(theme)" class="dropdown-item">{{theme.label}}</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class="form-group">\n <label class="col-lg-2">{{\'security.workbench.settings.theme.mode.label\' | translate}}</label>\n <div class="radio">\n <label class="px-1">\n <input type="radio" value="light" ng-model="workbenchSettings.mode" ng-change="setThemeMode()"/>\n {{\'security.workbench.settings.theme.mode.light\' | translate}}\n </label>\n <label class="px-1">\n <input type="radio" value="dark" ng-model="workbenchSettings.mode" ng-change="setThemeMode()"/>\n {{\'security.workbench.settings.theme.mode.dark\' | translate}}\n </label>\n </div>\n </div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="col-md-6 us-right-col" ng-hide="!isLocalAuthentication()">\n\t\t\t\t<div class="card user-role" id="user-roles">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'security.user.role\' | translate}}</h3>\n\t\t\t\t\t\t<label class="mr-1"\n\t\t\t\t\t\t\t uib-popover-template="\'popover-content-user.html\'"\n\t\t\t\t\t\t\t popover-trigger="mouseenter"\n\t\t\t\t\t\t\t popover-placement="bottom">\n\t\t\t\t\t\t\t<input type="radio" ng-model="userType" id="roleUser" value="user" ng-disabled="hasEditRestrictions()" >\n\t\t\t\t\t\t\t{{\'security.user.label\' | translate}}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<label class="mr-1"\n\t\t\t\t\t\t\t uib-popover-template="\'popover-content-repo-manager.html\'"\n\t\t\t\t\t\t\t popover-trigger="mouseenter"\n\t\t\t\t\t\t\t popover-placement="bottom">\n\t\t\t\t\t\t\t<input type="radio" ng-model="userType" id="roleRepoAdmin" value="repoManager" ng-disabled="hasEditRestrictions()">\n\t\t\t\t\t\t\t{{\'security.repo.manager.label\' | translate}}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<label uib-popover-template="\'popover-content-admin.html\'"\n\t\t\t\t\t\t\t popover-trigger="mouseenter"\n\t\t\t\t\t\t\t popover-placement="bottom">\n\t\t\t\t\t\t\t<input type="radio" ng-model="userType" id="roleAdmin" value="admin" ng-disabled="hasEditRestrictions()">\n\t\t\t\t\t\t\t{{\'security.admin.label\' | translate}}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n <div class="card user-custom-roles" id="user-custom-roles">\n <div class="card-block">\n <h3>{{\'security.user.custom_role\' | translate}}</h3>\n <div class="input-group">\n <tags-input name="customRoleTag" class="wb-tags-input" ng-model="customRoles" min-length="1"\n ng-disabled="!isUser() || mode === \'settings\'"\n use-strings="true"\n add-on-space="true"\n add-on-comma="true"\n add-on-paste="true"\n replace-spaces-with-dashes="false"\n paste-split-pattern="[\\s+]"\n on-tag-adding="isCustomRoleValid($tag)"\n on-tag-added="addCustomRole($tag)"\n ng-keydown="checkUserInput($event)"\n ng-cut="removeErrorOnCut()"\n placeholder="{{\'security.user.add.custom_role.msg\' | translate}}"\n custom-role-prefix></tags-input>\n <div class="small" ng-hide="isRoleValid">\n <small>{{\'security.user.role.too.short\' | translate}}</small>\n </div>\n <div class="small prefix-warning" ng-if="form.customRoleTag.$warning">\n <small>{{\'acl_management.rulestable.custom_prefix_warning.text\' | translate}}</small>\n </div>\n </div>\n </div>\n </div>\n\n\t\t\t\t<div id="user-repos" class="card user-repositories">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'security.repo.rights\' | translate}}</h3>\n\t\t\t\t\t\t<div class="has-danger">\n\t\t\t\t\t\t\t<p ng-show="repositoryCheckError" class="form-control-feedback">\n\t\t\t\t\t\t\t\t{{\'security.user.rights\' | translate}}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n <div class="scrollable-table">\n <table class="table table-hover table-sm" aria-describedby="User rights table">\n <thead>\n <tr>\n <th id="repositoryIdColumn">{{\'security.repository.title\' | translate}}</th>\n <th id="readRightsColumn" class="text-xs-center"><em class="icon-eye icon-lg" gdb-tooltip="{{\'security.tooltip.read\' | translate}}"></em></th>\n <th id="writeRightColumn" class="text-xs-center"><em class="icon-edit icon-lg" gdb-tooltip="{{\'security.tooltip.write\' | translate}}"></em></th>\n </tr>\n <tr>\n <th>{{\'security.any.data.repo\' | translate}}\n <em class="icon-info text-tertiary" gdb-tooltip="{{\'security.data.repos\' | translate}}"></em>\n </th>\n <th class="text-xs-center">\n <input class="read" type="checkbox" ng-model="grantedAuthorities.READ_REPO[\'*\']" ng-checked="hasReadPermission(\'*\')" ng-disabled="readCheckDisabled(\'*\')" ng-click="setGrantedAuthorities()">\n </th>\n <th class="text-xs-center">\n <input class="write" type="checkbox" ng-model="grantedAuthorities.WRITE_REPO[\'*\']" ng-checked="hasWritePermission(\'*\')" ng-disabled="writeCheckDisabled(\'*\')" ng-click="setGrantedAuthorities()">\n </th>\n </tr>\n </thead>\n <tbody>\n <div>\n <tr ng-repeat="repository in getReadableRepositories() | orderBy: [\'location\', \'id\']">\n <td class="repository-name">{{repository.id}}<small> · {{repository.location ? repository.location : \'Local\'}}</small></td>\n <td class="text-xs-center read-rights"><input class="read" type="checkbox" ng-model="grantedAuthorities.READ_REPO[createUniqueKey(repository)]" ng-checked="hasReadPermission(repository)" ng-disabled="readCheckDisabled(repository)" ng-click="setGrantedAuthorities()"></td>\n <td class="text-xs-center write-rights"><input class="write" type="checkbox" ng-model="grantedAuthorities.WRITE_REPO[createUniqueKey(repository)]" ng-checked="hasWritePermission(repository)" ng-disabled="writeCheckDisabled(repository)" ng-click="setGrantedAuthorities()"></td>\n </tr>\n </div>\n </tbody>\n </table>\n </div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n </div>\n\t\t</div>\n\n\t\t<div class="text-right">\n <button id="wb-user-goBack" class="btn btn-secondary" type="button" ng-click="goBack()">{{\'common.cancel.btn\' | translate}}</button>\n <button id="wb-user-submit" class="btn btn-primary" type="submit" ng-disabled="!isRoleValid">{{saveButtonText}}</button>\n\t\t</div>\n\t</form>\n</div>\n<div class="ot-loader ot-main-loader" onto-loader size="50" ng-show="loader"></div>\n\n\n\n';return __p}}}]);
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[384],{491:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<script type="text/ng-template" id="popover-content-user.html">\n\t<h5>{{\'security.user.may\' | translate}}</h5>\n\t<ul>\n <li>{{\'security.use.gdb\' | translate}}</li>\n\t <li>{{\'security.grant.read.access\' | translate}}</li>\n\t\t<li>{{\'security.grant.read.write.access\' | translate}}</li>\n </ul>\n<\/script>\n\n<script type="text/ng-template" id="popover-content-repo-manager.html">\n\t<h5>{{\'security.repo.manager.may\' | translate}}</h5>\n\t<ul>\n\t\t<li>{{\'security.use.gdb\' | translate}}</li>\n\t\t<li>{{\'security.read.write.all.repos\' | translate}}</li>\n\t\t<li>{{\'security.create.edit.delete.repos\' | translate}}</li>\n\t\t<li>{{\'security.access.monitoring\' | translate}}</li>\n\t</ul>\n<\/script>\n\n<script type="text/ng-template" id="popover-content-admin.html">\n\t<h5>{{\'security.admin.may\' | translate}}</h5>\n\t<ul>\n\t\t<li>{{\'security.use.gdb\' | translate}}</li>\n\t\t<li>{{\'security.read.write.all.repos\' | translate}}</li>\n\t\t<li>{{\'security.create.edit.delete.repos\' | translate}}</li>\n\t\t<li>{{\'security.access.monitoring\' | translate}}</li>\n\t\t<li>{{\'security.attach.remote.locations\' | translate}}</li>\n\t\t<li>{{\'security.manage.users.access\' | translate}}</li>\n\t\t<li>{{\'security.manage.cluster\' | translate}}</li>\n\t\t<li>{{\'security.view.sys.info\' | translate}}</li>\n\t</ul>\n<\/script>\n\n<link href="css/lib/ng-tags-input/ng-tags-input.min.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<h1>\n {{pageTitle}}\n <page-info-tooltip></page-info-tooltip>\n</h1>\n\n<div id="wb-user" ng-hide="loader">\n\t<form name="form" class="form newUserForm userForm editUserContainer" ng-submit="submit()" novalidate>\n\t\t<div class="row">\n\t\t\t<div class="col-md-6 us-left-col">\n\t\t\t\t<div class="card login-credentials" ng-hide="isOverrideAuth() || !isLocalAuthentication()">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'view.login.title\' | translate}}</h3>\n\t\t\t\t\t\t<div class="form-group" ng-class="{\'has-danger\': usernameError}">\n\t\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t\t<span class="input-group-addon" gdb-tooltip="{{\'security.table.username\' | translate}}"><em class="icon-user icon-2x text-muted"></em></span>\n\t\t\t\t\t\t\t\t<input id="wb-user-username" placeholder="{{\'security.table.username\' | translate}}" name="username" class="form-control form-control-lg" type="text" ng-model="user.username" ng-readonly="mode !== \'add\'">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div ng-show="usernameError" class="form-control-feedback">{{usernameError}}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="form-group" ng-class="{\'has-danger\': passwordError}">\n\t\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t\t<span class="input-group-addon" gdb-tooltip="{{\'security.password.placeholder\' | translate}}"><em class="icon-lock icon-2x text-muted"></em></span>\n\t\t\t\t\t\t\t\t<input id="wb-user-password" placeholder="{{passwordPlaceholder | translate}}" name="password" class="form-control form-control-lg" type="password"\tng-model="user.password" ng-hide="user.external || hasExternalAuthUser()" ng-readonly="noPassword">\n\t\t\t\t\t\t\t\t<span ng-show="user.external || hasExternalAuthUser()">{{\'security.auth.from.external.module\' | translate}}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div ng-show="passwordError" class="form-control-feedback">{{passwordError}}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="form-group" ng-class="{\'has-danger\': confirmPasswordError}" ng-hide="user.external || hasExternalAuthUser()">\n\t\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t\t<span class="input-group-addon" gdb-tooltip="{{\'security.password.confirm\' | translate}}"><em class="icon-lock icon-2x text-muted"></em></span>\n\t\t\t\t\t\t\t\t<input id="wb-user-confirmpassword" placeholder="{{\'security.password.confirm\' | translate}}" name="password_confirm" class="form-control form-control-lg" type="password" ng-model="user.confirmpassword" ng-readonly="noPassword">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div ng-show="confirmPasswordError" class="form-control-feedback">{{confirmPasswordError}}</div>\n\t\t\t\t\t\t</div>\n <div>\n <label class="d-block">\n <input type="checkbox" id="noPassword" ng-model="noPassword" ng-change="setNoPassword()">\n <span ng-show="mode === \'add\'">{{\'security.dont.set.password\' | translate}} </span>\n <span ng-show="mode !== \'add\'">{{\'security.unset.password\' | translate}} </span>\n </label>\n </div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class="card sparql-editor-settings" id="user-settings">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'security.user.settings\' | translate}}</h3>\n\n\t\t\t\t\t\t<div id="sameas-on" class="mb-1">\n\t\t\t\t\t\t\t<span class="sameas-label">\n\t\t\t\t\t\t\t\t{{\'security.expand.sameAs.is\' | translate}}\n\t\t\t\t\t\t\t\t<span class="tag {{user.appSettings.DEFAULT_SAMEAS ? \'tag-primary\' : \'tag-default\'}}">\n\t\t\t\t\t\t\t\t\t{{user.appSettings.DEFAULT_SAMEAS ? \'common.on.btn\' : \'common.off.btn\' | translate}}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span gdb-tooltip="{{shouldDisableSameAs() ? \'core.require.inferred\' : \'security.tooltip.click.me\' | translate}}" tooltip-placement="top"\n\t\t\t\t\t\t\t\t ng-click="user.appSettings.DEFAULT_SAMEAS = !user.appSettings.DEFAULT_SAMEAS"\n\t\t\t\t\t\t\t\t class="switch mr-0">\n\t\t\t\t\t\t\t\t<input id="sameAsCheck" type="checkbox" class="switch"\n ng-checked="user.appSettings.DEFAULT_SAMEAS"\n ng-disabled="shouldDisableSameAs()"/>\n\t\t\t\t\t\t\t\t<label for="sameas-on"></label>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{{\'security.default.editor.graph\' | translate}}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div id="inference-on" class="mb-1">\n\t\t\t\t\t\t\t<span class="inference-label">\n\t\t\t\t\t\t\t\t{{\'security.inference.is\' | translate}}\n\t\t\t\t\t\t\t\t<span class="tag {{user.appSettings.DEFAULT_INFERENCE ? \'tag-primary\' : \'tag-default\'}}">\n\t\t\t\t\t\t\t\t\t{{user.appSettings.DEFAULT_INFERENCE ? \'common.on.btn\' : \'common.off.btn\' | translate}}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span gdb-tooltip="{{\'security.tooltip.click.me\' | translate}}" tooltip-placement="top"\n\t\t\t\t\t\t\t\t ng-click="user.appSettings.DEFAULT_INFERENCE = !user.appSettings.DEFAULT_INFERENCE"\n\t\t\t\t\t\t\t\t class="switch mr-0">\n\t\t\t\t\t\t\t\t<input type="checkbox" class="switch" ng-checked="user.appSettings.DEFAULT_INFERENCE"/>\n\t\t\t\t\t\t\t\t<label for="inference-on"></label>\n\t\t\t\t\t\t\t</span>\n {{\'security.default.editor.graph\' | translate}}\n\t\t\t\t\t\t</div>\n\n <div id="schema-on" class="mb-1">\n\t\t\t\t\t\t\t<span class="schema-label">\n\t\t\t\t\t\t\t\t{{\'security.show.schema\' | translate}}\n\t\t\t\t\t\t\t\t<span class="tag {{user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA ? \'tag-primary\' : \'tag-default\'}}">\n\t\t\t\t\t\t\t\t\t{{user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA ? \'common.on.btn\' : \'common.off.btn\' | translate}}\n\t\t\t\t\t\t\t\t</span>\n <span gdb-tooltip="{{\'security.tooltip.click.me\' | translate}}" tooltip-placement="top"\n ng-click="user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA = !user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA"\n class="switch mr-0">\n\t\t\t\t\t\t\t\t<input type="checkbox" class="switch" ng-checked="user.appSettings.DEFAULT_VIS_GRAPH_SCHEMA"/>\n\t\t\t\t\t\t\t\t<label for="schema-on"></label>\n\t\t\t\t\t\t\t</span>\n {{\'security.default.visual.graph\' | translate}}\n\t\t\t\t\t\t\t</span>\n </div>\n\n\t\t\t\t\t\t<label class="d-block">\n\t\t\t\t\t\t\t<input type="checkbox" ng-model="user.appSettings.EXECUTE_COUNT" id="defaultCount" checked="appSettings.EXECUTE_COUNT">\n\t\t\t\t\t\t\t{{\'security.count.total.results\' | translate}}\n\t\t\t\t\t\t</label>\n\n\t\t\t\t\t\t<label class="d-block">\n\t\t\t\t\t\t\t<input type="checkbox" ng-model="user.appSettings.IGNORE_SHARED_QUERIES" id="ignore-shared" checked="appSettings.IGNORE_SHARED_QUERIES">\n\t\t\t\t\t\t\t{{\'security.ignore.shared.queries\' | translate}}\n\t\t\t\t\t\t</label>\n\n <label class="d-block cookie-policy-link" ng-if="showCookiePolicyLink">\n <a href="#" ng-click="showCookiePolicy()">{{\'cookie.cookie_policy_url_label\' | translate}}</a>\n </label>\n\n </div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class="card" id="workbench-settings" ng-if="showWorkbenchSettings">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'security.workbench.settings.title\' | translate}}\n\t\t\t\t\t\t\t<em class="icon-info text-tertiary small" gdb-tooltip="{{\'security.workbench.settings.theme.tooltip\' | translate}}"></em></h3>\n\t\t\t\t\t\t<div>\n <div class="form-group">\n <label class="col-lg-2">{{\'security.workbench.settings.theme.label\' | translate}}</label>\n <div class="btn-group theme-selector-dropdown" uib-dropdown>\n <button type="button" class="btn btn-sm btn-secondary dropdown-toggle theme-selector-dropdown-btn" uib-dropdown-toggle>\n {{selectedTheme.label}}\n </button>\n <ul class="dropdown-menu" role="menu">\n <li ng-repeat="theme in themes">\n <a ng-click="setTheme(theme)" class="dropdown-item">{{theme.label}}</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class="form-group">\n <label class="col-lg-2">{{\'security.workbench.settings.theme.mode.label\' | translate}}</label>\n <div class="radio">\n <label class="px-1">\n <input type="radio" value="light" ng-model="workbenchSettings.mode" ng-change="setThemeMode()"/>\n {{\'security.workbench.settings.theme.mode.light\' | translate}}\n </label>\n <label class="px-1">\n <input type="radio" value="dark" ng-model="workbenchSettings.mode" ng-change="setThemeMode()"/>\n {{\'security.workbench.settings.theme.mode.dark\' | translate}}\n </label>\n </div>\n </div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="col-md-6 us-right-col" ng-hide="!isLocalAuthentication()">\n\t\t\t\t<div class="card user-role" id="user-roles">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'security.user.role\' | translate}}</h3>\n\t\t\t\t\t\t<label class="mr-1"\n\t\t\t\t\t\t\t uib-popover-template="\'popover-content-user.html\'"\n\t\t\t\t\t\t\t popover-trigger="mouseenter"\n\t\t\t\t\t\t\t popover-placement="bottom">\n\t\t\t\t\t\t\t<input type="radio" ng-model="userType" id="roleUser" value="user" ng-disabled="hasEditRestrictions()" >\n\t\t\t\t\t\t\t{{\'security.user.label\' | translate}}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<label class="mr-1"\n\t\t\t\t\t\t\t uib-popover-template="\'popover-content-repo-manager.html\'"\n\t\t\t\t\t\t\t popover-trigger="mouseenter"\n\t\t\t\t\t\t\t popover-placement="bottom">\n\t\t\t\t\t\t\t<input type="radio" ng-model="userType" id="roleRepoAdmin" value="repoManager" ng-disabled="hasEditRestrictions()">\n\t\t\t\t\t\t\t{{\'security.repo.manager.label\' | translate}}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<label uib-popover-template="\'popover-content-admin.html\'"\n\t\t\t\t\t\t\t popover-trigger="mouseenter"\n\t\t\t\t\t\t\t popover-placement="bottom">\n\t\t\t\t\t\t\t<input type="radio" ng-model="userType" id="roleAdmin" value="admin" ng-disabled="hasEditRestrictions()">\n\t\t\t\t\t\t\t{{\'security.admin.label\' | translate}}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n <div class="card user-custom-roles" id="user-custom-roles">\n <div class="card-block">\n <h3>{{\'security.user.custom_role\' | translate}}</h3>\n <div class="input-group">\n <tags-input name="customRoleTag" class="wb-tags-input" ng-model="customRoles" min-length="1"\n ng-disabled="!isUser() || mode === \'settings\'"\n use-strings="true"\n add-on-space="true"\n add-on-comma="true"\n add-on-paste="true"\n replace-spaces-with-dashes="false"\n paste-split-pattern="[\\s+]"\n on-tag-adding="isCustomRoleValid($tag)"\n on-tag-added="addCustomRole($tag)"\n ng-keydown="checkUserInput($event)"\n ng-cut="removeErrorOnCut()"\n placeholder="{{\'security.user.add.custom_role.msg\' | translate}}"\n custom-role-prefix></tags-input>\n <div class="small" ng-hide="isRoleValid">\n <small>{{\'security.user.role.too.short\' | translate}}</small>\n </div>\n <div class="small prefix-warning" ng-if="form.customRoleTag.$warning">\n <small>{{\'acl_management.rulestable.custom_prefix_warning.text\' | translate}}</small>\n </div>\n </div>\n </div>\n </div>\n\n\t\t\t\t<div id="user-repos" class="card user-repositories">\n\t\t\t\t\t<div class="card-block">\n\t\t\t\t\t\t<h3>{{\'security.repo.rights\' | translate}}</h3>\n\t\t\t\t\t\t<div class="has-danger">\n\t\t\t\t\t\t\t<p ng-show="repositoryCheckError" class="form-control-feedback">\n\t\t\t\t\t\t\t\t{{\'security.user.rights\' | translate}}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n <div class="scrollable-table">\n <table class="table table-hover table-sm" aria-describedby="User rights table">\n <thead>\n <tr>\n <th id="repositoryIdColumn">{{\'security.repository.title\' | translate}}</th>\n <th id="readRightsColumn" class="text-xs-center"><em class="icon-eye icon-lg" gdb-tooltip="{{\'security.tooltip.read\' | translate}}"></em></th>\n <th id="writeRightColumn" class="text-xs-center"><em class="icon-edit icon-lg" gdb-tooltip="{{\'security.tooltip.write\' | translate}}"></em></th>\n </tr>\n <tr>\n <th>{{\'security.any.data.repo\' | translate}}\n <em class="icon-info text-tertiary" gdb-tooltip="{{\'security.data.repos\' | translate}}"></em>\n </th>\n <th class="text-xs-center">\n <input class="read" type="checkbox" ng-model="grantedAuthorities.READ_REPO[\'*\']" ng-checked="hasReadPermission(\'*\')" ng-disabled="readCheckDisabled(\'*\')" ng-click="setGrantedAuthorities()">\n </th>\n <th class="text-xs-center">\n <input class="write" type="checkbox" ng-model="grantedAuthorities.WRITE_REPO[\'*\']" ng-checked="hasWritePermission(\'*\')" ng-disabled="writeCheckDisabled(\'*\')" ng-click="setGrantedAuthorities()">\n </th>\n </tr>\n </thead>\n <tbody>\n <div>\n <tr ng-repeat="repository in getReadableRepositories() | orderBy: [\'location\', \'id\']">\n <td class="repository-name">{{repository.id}}<small> · {{repository.location ? repository.location : \'Local\'}}</small></td>\n <td class="text-xs-center read-rights"><input class="read" type="checkbox" ng-model="grantedAuthorities.READ_REPO[createUniqueKey(repository)]" ng-checked="hasReadPermission(repository)" ng-disabled="readCheckDisabled(repository)" ng-click="setGrantedAuthorities()"></td>\n <td class="text-xs-center write-rights"><input class="write" type="checkbox" ng-model="grantedAuthorities.WRITE_REPO[createUniqueKey(repository)]" ng-checked="hasWritePermission(repository)" ng-disabled="writeCheckDisabled(repository)" ng-click="setGrantedAuthorities()"></td>\n </tr>\n </div>\n </tbody>\n </table>\n </div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n </div>\n\t\t</div>\n\n\t\t<div class="text-right">\n <button id="wb-user-goBack" class="btn btn-secondary" type="button" ng-click="goBack()">{{\'common.cancel.btn\' | translate}}</button>\n <button id="wb-user-submit" class="btn btn-primary" type="submit" ng-disabled="!isRoleValid">{{saveButtonText}}</button>\n\t\t</div>\n\t</form>\n</div>\n<div class="ot-loader ot-main-loader" onto-loader size="50" ng-show="loader"></div>\n\n\n\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[396],{505:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/ttyg/agent-list.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[396],{505:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/ttyg/agent-list.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div class="agent-list-component">\n <div class="agents-filter-dropdown btn-group" uib-dropdown>\n <button type="button" uib-dropdown-toggle class="btn btn-outline-primary dropdown-toggle">\n <i class="fa-kit fa-gdb-repo-graphdb mr-1"></i>\n <span class="selected-filter">{{selectedAgentsFilter.label}}</span>\n <i class="fa-regular fa-filter" gdb-tooltip="{{\'ttyg.agent.btn.filter.tooltip\' | translate}}"></i>\n </button>\n <ul class="dropdown-menu" role="menu">\n <li ng-repeat="filterModel in agentListFilterModel">\n <button type="button" class="dropdown-item" ng-click="onAgentsFilterChange(filterModel)"\n data-value="{{filterModel.label}}">\n {{filterModel.label}}\n </button>\n </li>\n </ul>\n </div>\n\n <div class="agent-list">\n <div ng-if="!agentList.agents.length" class="alert alert-warning">\n {{\'ttyg.agent.messages.no_agents\' | translate}}\n </div>\n\n <div ng-repeat="agent in agentList.filterableAgents">\n <div ng-if="!deletingAgent || deletingAgent.agentId !== agent.id" class="agent-item"\n ng-class="{\'selected\': agent.id === selectedAgent.id}">\n <div class="agent-info">\n <div class="agent-name">{{agent.name}}</div>\n <div class="related-repository">\n <i ng-if="!agent.isRepositoryDeleted" class="fa-kit fa-gdb-repo-graphdb"></i>\n <i ng-if="agent.isRepositoryDeleted"\n class="fa-regular fa-triangle-exclamation text-warning agent-with-deleted-repository"\n gdb-tooltip="{{\'ttyg.agent.deleted_repository\' | translate}}">\n </i>\n {{agent.repositoryId}}\n </div>\n </div>\n <div class="btn-group">\n <button class="btn btn-link secondary btn-sm open-agent-actions-btn"\n data-toggle="dropdown" aria-expanded="false"\n ng-if="true"\n ng-click="openAgentActionMenu()"\n ng-disabled="false">\n <i class="fa-regular fa-ellipsis"></i>\n </button>\n <div class="dropdown-menu dropdown-menu-right agent-actions-menu">\n <button class="dropdown-item edit-agent-btn" type="button" ng-click="onEditAgent(agent)">\n <i class="fa-regular fa-gear"></i>\n <span>{{\'ttyg.agent.btn.edit_agent.label\' | translate}}</span>\n </button>\n <button class="dropdown-item clone-agent-btn" type="button" ng-click="onCloneAgent(agent)">\n <i class="fa-regular fa-clone"></i>\n <span>{{\'ttyg.agent.btn.clone_agent.label\' | translate}}</span>\n </button>\n <div class="dropdown-divider"></div>\n <button class="dropdown-item delete-agent-btn" type="button" ng-click="onDeleteAgent(agent)">\n <i class="fa-regular fa-trash-can"></i>\n <span>{{\'ttyg.agent.btn.delete_agent.label\' | translate}}</span>\n </button>\n </div>\n </div>\n </div>\n\n <div class="deleting-agent-loader" ng-if="deletingAgent.agentId === agent.id && deletingAgent.inProgress"\n onto-loader-fancy message="{{\'ttyg.agent.deleting_agent\' | translate}}"\n size="25"></div>\n </div>\n </div>\n</div>\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[397],{506:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/ttyg/agent-select-menu.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[397],{506:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/ttyg/agent-select-menu.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div class="btn-group agent-select-menu" uib-dropdown>\n <button type="button" class="btn dropdown-toggle-btn" uib-dropdown-toggle\n ng-attr-title="{{selectedAgent && !selectedAgent.isDeleted ? (selectedAgent.name + \' · \' + selectedAgent.repositoryId) : null}}">\n <span ng-if="!selectedAgent">{{\'ttyg.agent.agent_select_menu.no_selection_label\' | translate}}</span>\n <span ng-if="selectedAgent && !selectedAgent.isDeleted">\n <span class="agent-name">{{selectedAgent.name}}</span> ·\n <i ng-if="selectedAgent.isRepositoryDeleted"\n class="fa-regular fa-triangle-exclamation text-warning agent-with-deleted-repository"\n gdb-tooltip="{{\'ttyg.agent.deleted_repository\' | translate}}">\n </i>\n {{selectedAgent.repositoryId}}\n </span>\n <span ng-if="selectedAgent && selectedAgent.isDeleted" class="text-warning">\n <i class="fa-regular fa-triangle-exclamation"></i>\n {{\'ttyg.agent.agent_select_menu.deleted_agent\' | translate}}\n </span>\n <span class="caret"></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button">\n <li ng-repeat="agentOption in agentOptionsList" role="menuitem" class="agent-menu-item"\n ng-class="{\'selected\': agentOption.selected}">\n <a href="#"\n ng-click="onAgentSelected(agentOption.data.agent)">\n <span class="agent-name">{{agentOption.label}}</span> ·\n <i ng-if="agentOption.data.agent.isRepositoryDeleted"\n class="fa-regular fa-triangle-exclamation text-warning agent-with-deleted-repository"\n gdb-tooltip="{{\'ttyg.agent.deleted_repository\' | translate}}">\n </i>\n <span class="repository-id">{{agentOption.data.agent.repositoryId}}</span>\n </a>\n </li>\n </ul>\n</div>\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[398],{507:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/ttyg/chat-item-details.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[398],{507:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/ttyg/chat-item-details.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div class="chat-detail">\n <div class="user-message" ng-if="chatItemDetail.question">\n <div class="question alert-help"\n gdb-tooltip="{{ \'ttyg.chat_panel.labels.question_asked\' | translate : { date: getHumanReadableQuestionTimestamp(chatItemDetail.question.timestamp), time: (chatItemDetail.question.timestamp | date:\'HH:mm\') } }}">\n {{ chatItemDetail.question.message }}\n </div>\n </div>\n <div class="answers" ng-repeat="answer in chatItemDetail.answers">\n <div class="assistant">\n <div class="assistant-icon alert-help"\n gdb-tooltip="{{\'ttyg.chat_panel.labels.agent_name\' | translate : { agentName: agentNameByIdMap[chatItemDetail.agentId], date: getHumanReadableQuestionTimestamp(chatItemDetail.question.timestamp), time: (chatItemDetail.question.timestamp | date:\'HH:mm\') } }}">\n <i class="fa-regular fa-message-bot"></i>\n </div>\n <div class="assistant-message">\n <markdown-content class="answer" content="{{answer.message}}" options="markdownContentOptions"></markdown-content>\n <div class="actions" ng-class="{\'hidden-actions\': !explainResponseModel[answer.id].expanded && (!showActions || !$last)}">\n <button class="btn btn-link btn-sm regenerate-question-btn"\n ng-click="regenerateQuestion()"\n ng-disabled="disabled"\n gdb-tooltip="{{\'ttyg.chat_panel.btn.regenerate.tooltip\' | translate}}">\n <i class="fa-regular fa-arrows-rotate"></i>\n </button>\n <copy-to-clipboard class="btn-sm" tooltip-text="ttyg.chat_panel.btn.copy_answer.tooltip"\n text-to-copy="{{answer.message}}"></copy-to-clipboard>\n <button class="btn btn-link btn-link-only-icons btn-sm explain-response-btn"\n ng-click="explainResponse(answer.id)"\n ng-disabled="disabled && !explainResponseModel[answer.id]"\n gdb-tooltip="{{\'ttyg.chat_panel.btn.explain_response.tooltip\' | translate}}">\n <i class="fa-regular fa-wand-magic-sparkles"></i>\n <i class="fa-regular fa-chevron-up toggle-explain-response-icon"\n ng-class="{expanded: explainResponseModel[answer.id] && explainResponseModel[answer.id].expanded}"></i>\n </button>\n </div>\n <div class="derived-answer-hint"\n ng-if="showActions && $last && explainResponseModel[answer.id].expanded">\n <div ng-bind-html="\'ttyg.chat_panel.btn.derive_answer.hint\' | translate | trustAsHtml"></div>\n <button class="btn btn-secondary deliver-answer-btn" ng-click="onAskHowAnswerWasDerived()">\n {{ \'ttyg.chat_panel.btn.derive_answer.label\' | translate }}\n </button>\n </div>\n <div ng-if="loadingExplainResponse[answer.id]" onto-loader-new size="40"></div>\n <div class="explain-responses" ng-if="explainResponseModel[answer.id] && explainResponseModel[answer.id].expanded">\n <div ng-if="!explainResponseModel[answer.id].queryMethods.items.length"\n class="explain-response">\n {{ \'ttyg.chat_panel.labels.explain_no_methods\' | translate }}\n </div>\n <div ng-if="explainResponseModel[answer.id].queryMethods.items"\n class="explain-response"\n ng-repeat="queryMethod in explainResponseModel[answer.id].queryMethods.items">\n <div class="explain-call">\n <div class="header" gdb-tooltip="">\n <div class="label">\n <span class="query-method" ng-bind-html="\'ttyg.chat_panel.labels.called\' | translate:{name: queryMethod.name} | trustAsHtml">\n </span>{{ \'ttyg.chat_panel.query_colon\' | translate }}\n <span class="query-method-details" ng-bind="(\'ttyg.chat_panel.query_desc.\' + queryMethod.name) | translate">\n </span>\n </div>\n <div ng-if="queryMethod.query" class="actions">\n <open-in-sparql-editor\n ng-if="queryMethod.queryType === ExplainQueryType.SPARQL"\n execute-query="{{!queryMethod.errorMessage}}"\n repository-id="{{repositoryId}}"\n query="{{queryMethod.query}}">\n </open-in-sparql-editor>\n <copy-to-clipboard tooltip-text="ttyg.chat_panel.btn.copy_{{ queryMethod.queryType }}.tooltip"\n text-to-copy="{{queryMethod.query}}"></copy-to-clipboard>\n </div>\n </div>\n <div class="query">\n <div ng-if="!queryMethod.query" class="mb-1">{{ \'ttyg.chat_panel.labels.no_query\' | translate }}</code></div>\n <pre ng-if="queryMethod.query"><code>{{queryMethod.query}}</code></pre>\n </div>\n <div ng-if="showRawQuery(queryMethod)" class="raw-query">\n <span class="label">{{\'ttyg.chat_panel.labels.raw_query\' | translate}}:</span>\n <span class="content">{{queryMethod.rawQuery}}</span>\n <copy-to-clipboard class="copy-to-clipboard-btn" tooltip-text="ttyg.chat_panel.btn.copy_raw_query.tooltip"\n text-to-copy="{{queryMethod.rawQuery}}"></copy-to-clipboard>\n </div>\n <div ng-if="queryMethod.errorMessage" class="alert no-icon alert-warning error-message">\n <div class="error-header">\n <div class="label">{{\'ttyg.chat_panel.labels.error_message\' | translate}}:</div>\n <copy-to-clipboard class="copy-to-clipboard-btn" tooltip-text="ttyg.chat_panel.btn.copy_error_message.tooltip"\n text-to-copy="{{queryMethod.errorMessage}}"></copy-to-clipboard>\n </div>\n <div class="error-content">{{queryMethod.errorMessage}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div ng-if="asking" onto-loader-new size="40"></div>\n</div>\n\n';return __p}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[399],{508:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/ttyg/chat-list.css?v=2.8.0-
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[399],{508:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<link href="css/ttyg/chat-list.css?v=2.8.0-RC3" rel="stylesheet"/>\n\n<div class="chat-list-component">\n <div class="chat-list">\n <div ng-repeat="chatGroup in chatList.chatsByDay" class="chat-group">\n <label>{{ getHumanReadableChatGroupTimestamp(chatGroup.timestamp) }}</label>\n <ul>\n <li ng-repeat="chat in chatGroup.chats track by chat.hash" class="chat-item"\n ng-class="{\'selected\': chat.id === selectedChat.id, \'edited\': renamedChat && chat.id === renamedChat.id}">\n <div ng-if="!deletingChat || deletingChat.chatId !== chat.id" class="chat-detail">\n <div class="chat-name">\n <inline-editable-text\n field-name="name"\n source="chat"\n is-editing="chat.id && renamedChat && chat.id === renamedChat.id"\n on-save="onRenameChat(newText, source)"\n on-cancel="onCancelChatRenaming()"\n on-dblclick="onSelectChatForRenaming(chat)"\n on-click="onSelectChat(source)">\n </inline-editable-text>\n </div>\n <div ng-if="chat.id && (!renamedChat || chat.id !== renamedChat.id)" class="btn-group">\n <button class="btn btn-link secondary btn-sm open-chat-actions-btn"\n data-toggle="dropdown" aria-expanded="false"\n ng-if="true"\n ng-click="openChatActionMenu()"\n ng-disabled="false">\n <i class="fa-regular fa-ellipsis"></i>\n </button>\n <div class="dropdown-menu dropdown-menu-right chat-actions-menu">\n <button class="dropdown-item export-chat-btn" type="button" ng-click="onExportChat(chat)">\n <i class="fa-regular fa-arrow-down-to-line"></i>\n <span>{{\'ttyg.chat.btn.export_chat.label\' | translate}}</span>\n </button>\n <button class="dropdown-item rename-chat-btn" type="button" ng-click="onSelectChatForRenaming(chat)">\n <i class="fa-regular fa-pen"></i>\n <span>{{\'ttyg.chat.btn.rename_chat.label\' | translate}}</span>\n </button>\n <div class="dropdown-divider"></div>\n <button class="dropdown-item delete-chat-btn" type="button" ng-click="onDeleteChat(chat)">\n <i class="fa-regular fa-trash-can"></i>\n <span>{{\'ttyg.chat.btn.delete_chat.label\' | translate}}</span>\n </button>\n </div>\n </div>\n </div>\n\n <div class="deleting-chat-loader" ng-if="deletingChat && deletingChat.chatId === chat.id && deletingChat.inProgress"\n onto-loader-fancy message="{{\'ttyg.chat.deleting_chat\' | translate}}"\n size="25"></div>\n </li>\n </ul>\n </div>\n </div>\n</div>\n';return __p}}}]);
|