graphdb-workbench 2.0.0-M3-RC3 → 2.0.0-M3-RC4
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/{104.42f8ece72006965c902d.bundle.js → 104.7e16b2863108db706fe7.bundle.js} +2 -2
- package/dist/104.7e16b2863108db706fe7.bundle.js.map +1 -0
- package/dist/11.32f5a72d66bb699e9e8b.bundle.js +1 -1
- package/dist/11.32f5a72d66bb699e9e8b.bundle.js.map +1 -1
- package/dist/120.80843604737b7c260788.bundle.js +1 -1
- package/dist/120.80843604737b7c260788.bundle.js.map +1 -1
- package/dist/18.44723ea06155c72f46ae.bundle.js +1 -1
- package/dist/18.44723ea06155c72f46ae.bundle.js.map +1 -1
- package/dist/25.fffc5233e718b047a34f.bundle.js +1 -1
- package/dist/25.fffc5233e718b047a34f.bundle.js.map +1 -1
- package/dist/29.9bdb27c21d6eacac1341.bundle.js +1 -1
- package/dist/29.9bdb27c21d6eacac1341.bundle.js.map +1 -1
- package/dist/{3.36fe2e671f737648a477.bundle.js → 3.05b11b64e7a5a996a0dc.bundle.js} +2 -2
- package/dist/3.05b11b64e7a5a996a0dc.bundle.js.map +1 -0
- package/dist/30.e2cd19e99cf6ecdad6ac.bundle.js +1 -1
- package/dist/30.e2cd19e99cf6ecdad6ac.bundle.js.map +1 -1
- package/dist/5.f64fe1c133cf7c3726a8.bundle.js +2 -0
- package/dist/5.f64fe1c133cf7c3726a8.bundle.js.map +1 -0
- package/dist/68.e25480b7770a679a9654.bundle.js +1 -1
- package/dist/68.e25480b7770a679a9654.bundle.js.map +1 -1
- package/dist/{bundle.e65c5ca8080546fe24d7.bundle.js → bundle.caab550307cb547ae255.bundle.js} +3 -3
- package/dist/bundle.caab550307cb547ae255.bundle.js.map +1 -0
- package/dist/index.html +3 -3
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/pages/autocomplete.html +1 -1
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/cluster-management/clusterInfo.html +3 -3
- package/dist/pages/create-index.html +5 -5
- package/dist/pages/dependencies.html +1 -1
- package/dist/pages/domainRangeInfo.html +2 -2
- package/dist/pages/edit.html +1 -1
- package/dist/pages/explore.html +1 -1
- package/dist/pages/export.html +1 -1
- package/dist/pages/find.html +1 -1
- package/dist/pages/graph-config/saveGraphConfig.html +11 -11
- package/dist/pages/graphs-visualizations.html +7 -7
- package/dist/pages/import.html +1 -1
- package/dist/pages/jdbc-create.html +5 -5
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +2 -2
- package/dist/pages/namespaces.html +2 -2
- package/dist/pages/plugins.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +7 -7
- package/dist/pages/rdfrank.html +2 -2
- package/dist/pages/repositories.html +2 -2
- package/dist/pages/repository.html +2 -2
- package/dist/pages/similarity-indexes.html +3 -3
- package/dist/pages/sparql-template-create.html +5 -5
- package/dist/pages/sparql.html +3 -3
- package/dist/pages/webapi.html +2 -2
- package/dist/plugins.js +3 -12
- package/dist/res/swagger/index.html +27 -27
- package/package.json +1 -1
- package/dist/104.42f8ece72006965c902d.bundle.js.map +0 -1
- package/dist/3.36fe2e671f737648a477.bundle.js.map +0 -1
- package/dist/5.e112b0d6e101e0766cda.bundle.js +0 -2
- package/dist/5.e112b0d6e101e0766cda.bundle.js.map +0 -1
- package/dist/bundle.e65c5ca8080546fe24d7.bundle.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{221:function(t,e,r){"use strict";var a=a||{};a.Text=function(){function t(t,e,r,a){r=r||10;var n=e/3;return"string"==typeof t?(n*=10/(t.substring(0,e/3).length+1.5),n+=1,t.match(/[\u0900-\u0DFF\u1100-\u11FF\u2E80-\u2EFF\u3000-\u9FFF]/)&&(n*=.6),n<r&&(n=r),Math.round(n)):(n<r&&(n=r),Math.round(n))}return{calcFontSizeRaw:t,calcFontSize:function(e,r,a,n){return t(e,r,a)+"px"},getTextWithElipsisIfNeeded:function(t,e){return"string"==typeof t&&t.length>e?t.substring(0,e-3)+"...":t}}}(),a.Transition={fadeIn:function(t,e){t.style("opacity",0).transition().duration(e).style("opacity",1)},fadeOut:function(t,e){t.style("opacity",1).transition().duration(e).style("opacity",0)}},a.Click={delayDblClick:function(){var t=d3.dispatch("click","dblclick");return d3.rebind((function(e){var r,a=null;e.on("mousedown",(function(){r=d3.mouse(document.body),new Date})),e.on("mouseup",(function(e){var n,o;n=r,o=d3.mouse(document.body),Math.sqrt(Math.pow(n[0]-o[0],2),Math.pow(n[1]-o[1],2))>5||(a?(window.clearTimeout(a),a=null,t.dblclick(e)):a=window.setTimeout((d3.event,function(){t.click(e),a=null}),250))}))}),t,"on")}},e.a=a},222:function(t,e,r){"use strict";var a=a||{};a.Export={getCSSRules:function(t){var e=$('link[href="'+t+'"]')[0].sheet.rules,r="";return _.each(e,(function(t){r+=t.cssText})),r},generateBase64ImageSource:function(){var t=d3.selectAll("svg").attr({version:"1.1",xmlns:"http://www.w3.org/2000/svg"}).node().parentNode.innerHTML;return"data:image/svg+xml;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(t)))}},e.a=a},67:function(t,e,r){"use strict";r.r(e);var a=r(222),n=r(221);r(4);function o(t,e,r,o,s,i,c,l,d,u,p,f,g){return{restrict:"AE",template:'<div id="domain-range"></div>',scope:{showPredicatesInfoPanel:"=",selectedPredicate:"=",collapseEdges:"="},link:function(u){const p=l((function(){!function(u){d3.selection.prototype.moveToFront=function(){return this.each((function(){d3.select(this.parentNode.appendChild(this))}))},d3.selection.prototype.moveToBack=function(){return this.each((function(){const t=this.parentNode.firstChild;t&&this.parentNode.insertBefore(this,t)}))};var p=1200,h=p/18,y=p/110,x=y/2,m=p/90,v=p/1e3,k=p/600,b=d3.layout.force().size([p,600]).charge(-900),w=b.drag().on("dragstart",(function(t){d3.select(this).classed("selected",t.selected=!0)})),E=d3.select("#domain-range").append("svg").attr("viewBox","0 0 "+p+" 600").attr("preserveAspectRatio","xMidYMid meet").on("dblclick.zoom",null),N=E.append("defs");N.append("marker").attr({id:"arrow",viewBox:"0 -5 10 10",refX:10,refY:0,markerUnits:"strokeWidth",markerWidth:5,markerHeight:5,orient:"auto",fill:f}).append("path").attr({d:"M0,-5L10,0L0,5",class:"arrowHead"}),N.append("marker").attr({id:"collapsed-arrow",viewBox:"0 -5 10 10",refX:9,refY:0,markerUnits:"strokeWidth",markerWidth:4,markerHeight:4,orient:"auto",fill:f}).append("path").attr({d:"M0,-5L10,0L0,5",class:"arrowHead"}),N.append("marker").attr({id:"arrow-loop",viewBox:"0 -5 10 10",refX:7,refY:0,markerUnits:"strokeWidth",markerWidth:5,markerHeight:5,orient:"auto",fill:f}).append("path").attr({d:"M0,-5L10,0L0,5",class:"arrowHead"}),d3.select("#download-svg").on("mouseover",(function(){var t=a.a.Export.getCSSRules("css/domain-range-graph.css?v=2.0.0-M3-RC3");$("defs").append('<style type="text/css"><![CDATA['+t+"]]></style>");var e=a.a.Export.generateBase64ImageSource();d3.select(this).attr({href:e,download:"domain-range-graph-"+r.getActiveRepository()+".svg"})}));var R=p/7,C=1.2*R,T=d3.select(".legend-container").append("svg").attr("viewBox","0 0 "+R+" "+C).attr("preserveAspectRatio","xMidYMid meet");T.append("rect").attr({width:R,height:C}).style("fill","rgba(235, 235, 235, 0.9)");var A=p/75,L=p/40,_=A+h/2.5,M=L,U=_+p/90,P=m/1.1,j=L,O=(T.append("circle").attr({class:"legend-class-node",cx:(A+_)/2,cy:j,r:h/4.5}),M+p/370);T.append("text").attr({x:U,y:O}).style("font-size",P+"px").text("main class node");var I=j+p/30;T.append("circle").attr({class:"legend-object-node",cx:(A+_)/2,cy:I,r:y/1.25});var S=O+p/30;T.append("text").attr({x:U,y:S}).style("font-size",P+"px").text("class node");var D=I+p/45;T.append("circle").attr({class:"legend-datatype-node",cx:(A+_)/2,cy:D,r:x});var F=S+p/45;T.append("text").attr({x:U,y:F}).style("font-size",P+"px").text("datatype node");var B=D+p/45;d3.select(".legend-class-node");T.append("line").attr({class:"property-arrow",x1:A,y1:B,x2:_,y2:B}).style("stroke-width",v).attr("marker-end","url("+s.absUrl()+"#arrow)"),T.append("text").attr({x:U,y:B+p/370}).style("font-size",P+"px").text("explicit property");var z=B+p/45;T.append("line").attr({class:"implicit-property-arrow",x1:A,y1:z,x2:_,y2:z}).style("stroke-width",v).attr("marker-end","url("+s.absUrl()+"#arrow)"),T.append("text").attr({x:U,y:z+p/370}).style("font-size",P+"px").text("implicit property");var G=z+p/45;T.append("line").attr({class:"collapsed-property-arrow",x1:A,y1:G,x2:_,y2:G}).style("stroke-width",k).attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)"),T.append("text").attr({x:U,y:G+p/370}).style("font-size",P+"px").text("collapsed property");var W=E,H=s.search().uri,X=s.search().name,Y=s.search().collapsed;o.getDomainRangeData(H,Y).success((function(t,e,r){u.domainRangeGraphData=t})).error((function(t){d.error("Request for "+X+" failed!")})),$(window).on("popstate",(function(){i.set(c.DOMAIN_RANGE_WENT_BACK,!0)})),e.onpopstate=function(e){e.state&&t.$broadcast("changeCollapsedEdgesState",e.state.collapsed)},u.$watch("collapseEdges",(function(){angular.isUndefined(u.collapseEdges)||(i.set(c.DOMAIN_RANGE_COLLAPSE_EDGES,u.collapseEdges),"true"!==i.get(c.DOMAIN_RANGE_WENT_BACK)&&function(e){t.$broadcast("switchEdgeMode",{uri:H,name:X,collapsed:e})}(u.collapseEdges),i.remove(c.DOMAIN_RANGE_WENT_BACK))})),u.$watch("domainRangeGraphData",(function(){if(u.domainRangeGraphData){var r=angular.copy(u.domainRangeGraphData);b.nodes(r.nodes).links(r.links);var a=W.selectAll(".link").data(r.links).enter().append("g");function o(t){t.style("stroke",f),t.style("stroke-width",k),t.attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)")}var i,c,d=0;a.each((function(t){if(t.objectPropNodeClassUri!==H)i=a.append("line").attr({class:"link","marker-end":"url("+s.absUrl()+"#arrow)"}).style("stroke-width",v).each((function(t){switch(t.propertyType){case"objectLeft":t.targetRadius=h;break;case"objectRight":t.targetRadius=y;break;case"datatype":t.targetRadius=x;break;default:t.targetRadius=0}var e=d3.select(this);t.targetNodeEdgeCount>1?o(e):t.implicit&&e.style("stroke-dasharray","3, 3")}));else{if(angular.isUndefined(c)){var e=h/2;c=d3.select(this).append("path").attr({d:"M 0 0 A "+e+" "+e+" 0 1 1 0 "+e,class:"loop-link",fill:"none","marker-end":"url("+s.absUrl()+"#arrow-loop)"}).style("stroke-width",v)}(d+=t.targetNodeEdgeCount)>1&&o(d3.select(".loop-link"))}}));var E={};function N(){$.isEmptyObject(E)||(E.text.style("fill","black"),E.background.style("fill","#f0f0f0"))}function R(t){N(),E.text=d3.select(this),E.background=d3.select(this.previousSibling),E.text.style("fill","white"),E.background.style("fill",f),l((function(){u.showPredicatesInfoPanel=!0,u.selectedPredicate=t})),d3.event.stopPropagation()}$("document").ready((function(){$("#domain-range").bind("click",N)}));var C=a.append("text").attr("class",(function(t){return t.objectPropNodeClassUri===H?"loop-link-property-name":"property-name"})).attr("dx",(function(t){return h/2*("objectLeft"===t.propertyType?1:-1)})).style("text-anchor",(function(t){return"objectLeft"===t.propertyType?"end":"start"})).style("font-size",m).text((function(t){return t.targetNodeEdgeCount>1?t.targetNodeEdgeCount+" predicates":t.name}));C.each((function(t){var r=d3.select(this);/\d\spredicates/.test(r.text())?r.style("font-weight","bold").on("click",R):r.on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.uri),"_blank")}))}));var T=p/600,A=a.append("rect").attr("class",(function(t){return t.objectPropNodeClassUri!==H?"link-background":"loop-link-background"})).attr("width",(function(t){return t.calculatedWidth=this.previousSibling.getBBox().width,t.calculatedWidth+2*T})).attr("height",(function(t){return t.calculatedHeight=this.previousSibling.getBBox().height,t.calculatedHeight+T})).attr("transform",(function(t){var e=T-h/2*("objectLeft"===t.propertyType?1:-1);return"objectLeft"===t.propertyType&&(e+=t.calculatedWidth),"translate(-"+e+",-"+(T+t.calculatedHeight/2)+")"})).on("click",(function(t){d3.event.stopPropagation()})),L=W.selectAll(".node").data(r.nodes).enter().append("g"),_=L.filter((function(t){return t.objectPropClassUri!==H})).append("circle").each((function(t){var e=d3.select(this);"main"===t.classPosition?e.attr({class:"class-node",r:h}).attr("marker-end","url("+s.absUrl()+"#loop-link)"):null===t.objectPropClassName?e.attr({class:"datatype-node",r:x}):e.attr({class:"object-prop-node",r:y})})).call(w);d3.selectAll(".object-prop-node").on("dblclick",(function(e,r){u.$apply((function(){t.$broadcast("reloadDomainRangeGraphView",e,r)}))})),L.filter((function(t){return t.objectPropClassName&&t.objectPropClassUri!==H})).append("text").attr("class",(function(t){return t.classPosition+"-class-label"})).style("font-size",m).text((function(t){return t.objectPropClassName})).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.objectPropClassUri),"_blank")}));var M=L.select("text");W.select(".class-node").each((function(){d3.select(this.parentNode).append("text").attr("class","rdf-class-label").style("font-size",(function(t){return n.a.Text.calcFontSize(X,h)})).text(X).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(H),"_blank")}))}));var U=W.select(".class-node + text"),P=d3.select(".class-node"),j=d3.selectAll(".loop-link-background"),O=d3.selectAll(".loop-link-property-name");if(C=d3.selectAll(".property-name"),!angular.isUndefined(c)){var I=[];j.each((function(t,e){d3.select(this);I.push({idx:e,width:t.calculatedWidth,height:t.calculatedHeight})}))}b.on("tick",(function(t){var e=8*t.alpha;function r(t){var e=t.x+2*h,r=t.y-h/1.9;var a=[];j.each((function(n,o){a.push(n),o<g?function(a,n){var o=$.grep(I,(function(t){return t.idx==n}));n>0&&(e+=parseFloat(n*(o[0].height/(n/1.4)))),a.attr({transform:"rotate(270, "+t.x+","+t.y+") translate("+e+","+r+")",width:o[0].height,height:o[0].width})}(d3.select(this),o):d3.select(this).remove()})),function(t){var e;d3.select(".view-more-preds-label").style("font-weight","bold").each((function(r){r.target.allEdges=t,e=this.getComputedTextLength()})).on("click",R),d3.select(".view-more-preds-rect").attr("height",e+2*T)}(a)}i.filter((function(t){return t.objectPropNodeClassUri!==H})).attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.targetX})).attr("y2",(function(t){return t.targetY})).each((function(t){!function(t){"objectLeft"===t.propertyType?(t.source.x-=8*e,t.source.y-=e/9):(t.target.x+=8*e,t.target.y-=e/9)}(t);var r=Math.atan2(t.target.y-t.source.y,t.target.x-t.source.x);t.targetX=t.target.x-Math.cos(r)*t.targetRadius,t.targetY=t.target.y-Math.sin(r)*t.targetRadius})),_.each((function(t){"main"!==t.classPosition||angular.isUndefined(c)||(!function(t){var e=t.x+.96*h,r=t.y-h/5.7-5;c.attr("transform","rotate(270, "+t.x+","+t.y+") translate("+e+","+r+")")}(t),function(t){function e(e,r){var a=$.grep(I,(function(t){return t.idx==r})),n=0;r>0&&(n=parseFloat(2*r*(a[0].height/1.4)));var o=t.x,s=t.y-2.1*h-n;e.attr({x:o,y:s}).moveToFront()}O.each((function(t,r){var a=d3.select(this),n=O.size()-g;n<0?e(a,r):(0==r&&!u.collapseEdges&&n>1&&(!function(t,e,r){t.classed("view-more-preds-label",!0).text(r+" predicates more ..."),null!==this.nextSibling&&e.classed("view-more-preds-rect",!0)}(a,d3.select(this.nextSibling),n),e(a,r)),r<g?e(a,r):a.remove())}))}(t),r(t)),t.objectPropClassUri!==H&&d3.select(this).attr("cx",(function(t){return"main"===t.classPosition?function(t){!window.ActiveXObject&&"ActiveXObject"in window&&(Math.log10=function(t){return Math.log(t)/Math.LN10});var e=P.attr("cx")-p/2,r=.5*Math.log10(Math.abs(e));return t.x+=e>0?-r:r,t.x}(t):t.x})).attr("cy",(function(t){return t.y}))})),U.attr("x",(function(t){return t.x})).attr("y",(function(t){return t.y})).moveToFront(),A.filter((function(t){return t.objectPropNodeClassUri!==H})).attr("x",(function(t){return t.target.x>t.source.x?t.source.x+(t.target.x-t.source.x)/2:t.target.x+(t.source.x-t.target.x)/2})).attr("y",(function(t){return t.target.y>t.source.y?t.source.y+(t.target.y-t.source.y)/2:t.target.y+(t.source.y-t.target.y)/2})).moveToFront(),C.attr("x",(function(t){return t.target.x>t.source.x?t.source.x+(t.target.x-t.source.x)/2:t.target.x+(t.source.x-t.target.x)/2})).attr("y",(function(t){return t.target.y>t.source.y?t.source.y+(t.target.y-t.source.y)/2:t.target.y+(t.source.y-t.target.y)/2})).moveToFront(),M.attr("x",(function(t){return"right"===t.classPosition?t.x+1.2*y:t.x-1.2*y})).attr("y",(function(t){return t.y})).moveToFront()})).linkDistance(p/3.5).start()}}))}(u)}),50);u.$on("$destroy",(function(){l.cancel(p)}))}}}angular.module("graphdb.framework.graphexplore.directives.domainrange",["graphdb.framework.graphexplore.controllers.domainrange","graphdb.framework.utils.localstorageadapter"]).constant("ONTO_RED","var(--onto-orange)").constant("ONTO_GREEN","var(--onto-green)").constant("ONTO_BLUE","var(--onto-blue)").constant("NON_COLLAPSED_REFLEXIVE_LINK_LIMIT",6).directive("domainRangeGraph",o),o.$inject=["$rootScope","$window","$repositories","GraphDataRestService","$location","LocalStorageAdapter","LSKeys","$timeout","toastr","ONTO_RED","ONTO_GREEN","ONTO_BLUE","NON_COLLAPSED_REFLEXIVE_LINK_LIMIT"]}}]);
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{221:function(t,e,r){"use strict";var a=a||{};a.Text=function(){function t(t,e,r,a){r=r||10;var n=e/3;return"string"==typeof t?(n*=10/(t.substring(0,e/3).length+1.5),n+=1,t.match(/[\u0900-\u0DFF\u1100-\u11FF\u2E80-\u2EFF\u3000-\u9FFF]/)&&(n*=.6),n<r&&(n=r),Math.round(n)):(n<r&&(n=r),Math.round(n))}return{calcFontSizeRaw:t,calcFontSize:function(e,r,a,n){return t(e,r,a)+"px"},getTextWithElipsisIfNeeded:function(t,e){return"string"==typeof t&&t.length>e?t.substring(0,e-3)+"...":t}}}(),a.Transition={fadeIn:function(t,e){t.style("opacity",0).transition().duration(e).style("opacity",1)},fadeOut:function(t,e){t.style("opacity",1).transition().duration(e).style("opacity",0)}},a.Click={delayDblClick:function(){var t=d3.dispatch("click","dblclick");return d3.rebind((function(e){var r,a=null;e.on("mousedown",(function(){r=d3.mouse(document.body),new Date})),e.on("mouseup",(function(e){var n,o;n=r,o=d3.mouse(document.body),Math.sqrt(Math.pow(n[0]-o[0],2),Math.pow(n[1]-o[1],2))>5||(a?(window.clearTimeout(a),a=null,t.dblclick(e)):a=window.setTimeout((d3.event,function(){t.click(e),a=null}),250))}))}),t,"on")}},e.a=a},222:function(t,e,r){"use strict";var a=a||{};a.Export={getCSSRules:function(t){var e=$('link[href="'+t+'"]')[0].sheet.rules,r="";return _.each(e,(function(t){r+=t.cssText})),r},generateBase64ImageSource:function(){var t=d3.selectAll("svg").attr({version:"1.1",xmlns:"http://www.w3.org/2000/svg"}).node().parentNode.innerHTML;return"data:image/svg+xml;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(t)))}},e.a=a},67:function(t,e,r){"use strict";r.r(e);var a=r(222),n=r(221);r(4);function o(t,e,r,o,s,i,c,l,d,u,p,f,g){return{restrict:"AE",template:'<div id="domain-range"></div>',scope:{showPredicatesInfoPanel:"=",selectedPredicate:"=",collapseEdges:"="},link:function(u){const p=l((function(){!function(u){d3.selection.prototype.moveToFront=function(){return this.each((function(){d3.select(this.parentNode.appendChild(this))}))},d3.selection.prototype.moveToBack=function(){return this.each((function(){const t=this.parentNode.firstChild;t&&this.parentNode.insertBefore(this,t)}))};var p=1200,h=p/18,y=p/110,x=y/2,m=p/90,v=p/1e3,k=p/600,b=d3.layout.force().size([p,600]).charge(-900),w=b.drag().on("dragstart",(function(t){d3.select(this).classed("selected",t.selected=!0)})),E=d3.select("#domain-range").append("svg").attr("viewBox","0 0 "+p+" 600").attr("preserveAspectRatio","xMidYMid meet").on("dblclick.zoom",null),N=E.append("defs");N.append("marker").attr({id:"arrow",viewBox:"0 -5 10 10",refX:10,refY:0,markerUnits:"strokeWidth",markerWidth:5,markerHeight:5,orient:"auto",fill:f}).append("path").attr({d:"M0,-5L10,0L0,5",class:"arrowHead"}),N.append("marker").attr({id:"collapsed-arrow",viewBox:"0 -5 10 10",refX:9,refY:0,markerUnits:"strokeWidth",markerWidth:4,markerHeight:4,orient:"auto",fill:f}).append("path").attr({d:"M0,-5L10,0L0,5",class:"arrowHead"}),N.append("marker").attr({id:"arrow-loop",viewBox:"0 -5 10 10",refX:7,refY:0,markerUnits:"strokeWidth",markerWidth:5,markerHeight:5,orient:"auto",fill:f}).append("path").attr({d:"M0,-5L10,0L0,5",class:"arrowHead"}),d3.select("#download-svg").on("mouseover",(function(){var t=a.a.Export.getCSSRules("css/domain-range-graph.css?v=2.0.0-M3-RC4");$("defs").append('<style type="text/css"><![CDATA['+t+"]]></style>");var e=a.a.Export.generateBase64ImageSource();d3.select(this).attr({href:e,download:"domain-range-graph-"+r.getActiveRepository()+".svg"})}));var R=p/7,C=1.2*R,T=d3.select(".legend-container").append("svg").attr("viewBox","0 0 "+R+" "+C).attr("preserveAspectRatio","xMidYMid meet");T.append("rect").attr({width:R,height:C}).style("fill","rgba(235, 235, 235, 0.9)");var A=p/75,L=p/40,_=A+h/2.5,M=L,U=_+p/90,P=m/1.1,j=L,O=(T.append("circle").attr({class:"legend-class-node",cx:(A+_)/2,cy:j,r:h/4.5}),M+p/370);T.append("text").attr({x:U,y:O}).style("font-size",P+"px").text("main class node");var I=j+p/30;T.append("circle").attr({class:"legend-object-node",cx:(A+_)/2,cy:I,r:y/1.25});var S=O+p/30;T.append("text").attr({x:U,y:S}).style("font-size",P+"px").text("class node");var D=I+p/45;T.append("circle").attr({class:"legend-datatype-node",cx:(A+_)/2,cy:D,r:x});var F=S+p/45;T.append("text").attr({x:U,y:F}).style("font-size",P+"px").text("datatype node");var B=D+p/45;d3.select(".legend-class-node");T.append("line").attr({class:"property-arrow",x1:A,y1:B,x2:_,y2:B}).style("stroke-width",v).attr("marker-end","url("+s.absUrl()+"#arrow)"),T.append("text").attr({x:U,y:B+p/370}).style("font-size",P+"px").text("explicit property");var z=B+p/45;T.append("line").attr({class:"implicit-property-arrow",x1:A,y1:z,x2:_,y2:z}).style("stroke-width",v).attr("marker-end","url("+s.absUrl()+"#arrow)"),T.append("text").attr({x:U,y:z+p/370}).style("font-size",P+"px").text("implicit property");var G=z+p/45;T.append("line").attr({class:"collapsed-property-arrow",x1:A,y1:G,x2:_,y2:G}).style("stroke-width",k).attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)"),T.append("text").attr({x:U,y:G+p/370}).style("font-size",P+"px").text("collapsed property");var W=E,H=s.search().uri,X=s.search().name,Y=s.search().collapsed;o.getDomainRangeData(H,Y).success((function(t,e,r){u.domainRangeGraphData=t})).error((function(t){d.error("Request for "+X+" failed!")})),$(window).on("popstate",(function(){i.set(c.DOMAIN_RANGE_WENT_BACK,!0)})),e.onpopstate=function(e){e.state&&t.$broadcast("changeCollapsedEdgesState",e.state.collapsed)},u.$watch("collapseEdges",(function(){angular.isUndefined(u.collapseEdges)||(i.set(c.DOMAIN_RANGE_COLLAPSE_EDGES,u.collapseEdges),"true"!==i.get(c.DOMAIN_RANGE_WENT_BACK)&&function(e){t.$broadcast("switchEdgeMode",{uri:H,name:X,collapsed:e})}(u.collapseEdges),i.remove(c.DOMAIN_RANGE_WENT_BACK))})),u.$watch("domainRangeGraphData",(function(){if(u.domainRangeGraphData){var r=angular.copy(u.domainRangeGraphData);b.nodes(r.nodes).links(r.links);var a=W.selectAll(".link").data(r.links).enter().append("g");function o(t){t.style("stroke",f),t.style("stroke-width",k),t.attr("marker-end","url("+s.absUrl()+"#collapsed-arrow)")}var i,c,d=0;a.each((function(t){if(t.objectPropNodeClassUri!==H)i=a.append("line").attr({class:"link","marker-end":"url("+s.absUrl()+"#arrow)"}).style("stroke-width",v).each((function(t){switch(t.propertyType){case"objectLeft":t.targetRadius=h;break;case"objectRight":t.targetRadius=y;break;case"datatype":t.targetRadius=x;break;default:t.targetRadius=0}var e=d3.select(this);t.targetNodeEdgeCount>1?o(e):t.implicit&&e.style("stroke-dasharray","3, 3")}));else{if(angular.isUndefined(c)){var e=h/2;c=d3.select(this).append("path").attr({d:"M 0 0 A "+e+" "+e+" 0 1 1 0 "+e,class:"loop-link",fill:"none","marker-end":"url("+s.absUrl()+"#arrow-loop)"}).style("stroke-width",v)}(d+=t.targetNodeEdgeCount)>1&&o(d3.select(".loop-link"))}}));var E={};function N(){$.isEmptyObject(E)||(E.text.style("fill","black"),E.background.style("fill","#f0f0f0"))}function R(t){N(),E.text=d3.select(this),E.background=d3.select(this.previousSibling),E.text.style("fill","white"),E.background.style("fill",f),l((function(){u.showPredicatesInfoPanel=!0,u.selectedPredicate=t})),d3.event.stopPropagation()}$("document").ready((function(){$("#domain-range").bind("click",N)}));var C=a.append("text").attr("class",(function(t){return t.objectPropNodeClassUri===H?"loop-link-property-name":"property-name"})).attr("dx",(function(t){return h/2*("objectLeft"===t.propertyType?1:-1)})).style("text-anchor",(function(t){return"objectLeft"===t.propertyType?"end":"start"})).style("font-size",m).text((function(t){return t.targetNodeEdgeCount>1?t.targetNodeEdgeCount+" predicates":t.name}));C.each((function(t){var r=d3.select(this);/\d\spredicates/.test(r.text())?r.style("font-weight","bold").on("click",R):r.on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.uri),"_blank")}))}));var T=p/600,A=a.append("rect").attr("class",(function(t){return t.objectPropNodeClassUri!==H?"link-background":"loop-link-background"})).attr("width",(function(t){return t.calculatedWidth=this.previousSibling.getBBox().width,t.calculatedWidth+2*T})).attr("height",(function(t){return t.calculatedHeight=this.previousSibling.getBBox().height,t.calculatedHeight+T})).attr("transform",(function(t){var e=T-h/2*("objectLeft"===t.propertyType?1:-1);return"objectLeft"===t.propertyType&&(e+=t.calculatedWidth),"translate(-"+e+",-"+(T+t.calculatedHeight/2)+")"})).on("click",(function(t){d3.event.stopPropagation()})),L=W.selectAll(".node").data(r.nodes).enter().append("g"),_=L.filter((function(t){return t.objectPropClassUri!==H})).append("circle").each((function(t){var e=d3.select(this);"main"===t.classPosition?e.attr({class:"class-node",r:h}).attr("marker-end","url("+s.absUrl()+"#loop-link)"):null===t.objectPropClassName?e.attr({class:"datatype-node",r:x}):e.attr({class:"object-prop-node",r:y})})).call(w);d3.selectAll(".object-prop-node").on("dblclick",(function(e,r){u.$apply((function(){t.$broadcast("reloadDomainRangeGraphView",e,r)}))})),L.filter((function(t){return t.objectPropClassName&&t.objectPropClassUri!==H})).append("text").attr("class",(function(t){return t.classPosition+"-class-label"})).style("font-size",m).text((function(t){return t.objectPropClassName})).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(t.objectPropClassUri),"_blank")}));var M=L.select("text");W.select(".class-node").each((function(){d3.select(this.parentNode).append("text").attr("class","rdf-class-label").style("font-size",(function(t){return n.a.Text.calcFontSize(X,h)})).text(X).on("click",(function(t){e.open("resource?uri="+encodeURIComponent(H),"_blank")}))}));var U=W.select(".class-node + text"),P=d3.select(".class-node"),j=d3.selectAll(".loop-link-background"),O=d3.selectAll(".loop-link-property-name");if(C=d3.selectAll(".property-name"),!angular.isUndefined(c)){var I=[];j.each((function(t,e){d3.select(this);I.push({idx:e,width:t.calculatedWidth,height:t.calculatedHeight})}))}b.on("tick",(function(t){var e=8*t.alpha;function r(t){var e=t.x+2*h,r=t.y-h/1.9;var a=[];j.each((function(n,o){a.push(n),o<g?function(a,n){var o=$.grep(I,(function(t){return t.idx==n}));n>0&&(e+=parseFloat(n*(o[0].height/(n/1.4)))),a.attr({transform:"rotate(270, "+t.x+","+t.y+") translate("+e+","+r+")",width:o[0].height,height:o[0].width})}(d3.select(this),o):d3.select(this).remove()})),function(t){var e;d3.select(".view-more-preds-label").style("font-weight","bold").each((function(r){r.target.allEdges=t,e=this.getComputedTextLength()})).on("click",R),d3.select(".view-more-preds-rect").attr("height",e+2*T)}(a)}i.filter((function(t){return t.objectPropNodeClassUri!==H})).attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.targetX})).attr("y2",(function(t){return t.targetY})).each((function(t){!function(t){"objectLeft"===t.propertyType?(t.source.x-=8*e,t.source.y-=e/9):(t.target.x+=8*e,t.target.y-=e/9)}(t);var r=Math.atan2(t.target.y-t.source.y,t.target.x-t.source.x);t.targetX=t.target.x-Math.cos(r)*t.targetRadius,t.targetY=t.target.y-Math.sin(r)*t.targetRadius})),_.each((function(t){"main"!==t.classPosition||angular.isUndefined(c)||(!function(t){var e=t.x+.96*h,r=t.y-h/5.7-5;c.attr("transform","rotate(270, "+t.x+","+t.y+") translate("+e+","+r+")")}(t),function(t){function e(e,r){var a=$.grep(I,(function(t){return t.idx==r})),n=0;r>0&&(n=parseFloat(2*r*(a[0].height/1.4)));var o=t.x,s=t.y-2.1*h-n;e.attr({x:o,y:s}).moveToFront()}O.each((function(t,r){var a=d3.select(this),n=O.size()-g;n<0?e(a,r):(0==r&&!u.collapseEdges&&n>1&&(!function(t,e,r){t.classed("view-more-preds-label",!0).text(r+" predicates more ..."),null!==this.nextSibling&&e.classed("view-more-preds-rect",!0)}(a,d3.select(this.nextSibling),n),e(a,r)),r<g?e(a,r):a.remove())}))}(t),r(t)),t.objectPropClassUri!==H&&d3.select(this).attr("cx",(function(t){return"main"===t.classPosition?function(t){!window.ActiveXObject&&"ActiveXObject"in window&&(Math.log10=function(t){return Math.log(t)/Math.LN10});var e=P.attr("cx")-p/2,r=.5*Math.log10(Math.abs(e));return t.x+=e>0?-r:r,t.x}(t):t.x})).attr("cy",(function(t){return t.y}))})),U.attr("x",(function(t){return t.x})).attr("y",(function(t){return t.y})).moveToFront(),A.filter((function(t){return t.objectPropNodeClassUri!==H})).attr("x",(function(t){return t.target.x>t.source.x?t.source.x+(t.target.x-t.source.x)/2:t.target.x+(t.source.x-t.target.x)/2})).attr("y",(function(t){return t.target.y>t.source.y?t.source.y+(t.target.y-t.source.y)/2:t.target.y+(t.source.y-t.target.y)/2})).moveToFront(),C.attr("x",(function(t){return t.target.x>t.source.x?t.source.x+(t.target.x-t.source.x)/2:t.target.x+(t.source.x-t.target.x)/2})).attr("y",(function(t){return t.target.y>t.source.y?t.source.y+(t.target.y-t.source.y)/2:t.target.y+(t.source.y-t.target.y)/2})).moveToFront(),M.attr("x",(function(t){return"right"===t.classPosition?t.x+1.2*y:t.x-1.2*y})).attr("y",(function(t){return t.y})).moveToFront()})).linkDistance(p/3.5).start()}}))}(u)}),50);u.$on("$destroy",(function(){l.cancel(p)}))}}}angular.module("graphdb.framework.graphexplore.directives.domainrange",["graphdb.framework.graphexplore.controllers.domainrange","graphdb.framework.utils.localstorageadapter"]).constant("ONTO_RED","var(--onto-orange)").constant("ONTO_GREEN","var(--onto-green)").constant("ONTO_BLUE","var(--onto-blue)").constant("NON_COLLAPSED_REFLEXIVE_LINK_LIMIT",6).directive("domainRangeGraph",o),o.$inject=["$rootScope","$window","$repositories","GraphDataRestService","$location","LocalStorageAdapter","LSKeys","$timeout","toastr","ONTO_RED","ONTO_GREEN","ONTO_BLUE","NON_COLLAPSED_REFLEXIVE_LINK_LIMIT"]}}]);
|
|
2
2
|
//# sourceMappingURL=29.9bdb27c21d6eacac1341.bundle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/lib/common/d3-utils.js","webpack:///./src/js/lib/common/svg-export.js","webpack:///./src/js/angular/graphexplore/directives/domain-range-graph.directive.js"],"names":["D3","Text","calcFontSizeRaw","text","radius","minimumSize","isMultiline","textSize","substring","length","match","Math","round","calcFontSize","getTextWithElipsisIfNeeded","str","threshold","Transition","fadeIn","sel","duration","style","transition","fadeOut","Click","delayDblClick","event","d3","dispatch","rebind","selection","down","wait","on","mouse","document","body","Date","d","a","b","sqrt","pow","window","clearTimeout","dblclick","setTimeout","click","SVG","Export","getCSSRules","cssSourceFilePath","cssRules","$","sheet","rules","cssStr","_","each","value","cssText","generateBase64ImageSource","exportSvg","selectAll","attr","version","xmlns","node","parentNode","innerHTML","btoa","unescape","encodeURIComponent","domainRangeGraphDirective","$rootScope","$window","$repositories","GraphDataRestService","$location","LocalStorageAdapter","LSKeys","$timeout","toastr","ONTO_RED","ONTO_GREEN","ONTO_BLUE","NON_COLLAPSED_REFLEXIVE_LINK_LIMIT","restrict","template","scope","showPredicatesInfoPanel","selectedPredicate","collapseEdges","link","timer","prototype","moveToFront","this","select","appendChild","moveToBack","firstChild","insertBefore","width","mainClassSize","otherClassSize","datatypeSize","labelFontSize","basicArrowStrokeWidth","collapsedArrowStrokeWidth","force","layout","size","charge","drag","classed","selected","svg","append","defs","id","viewBox","refX","refY","markerUnits","markerWidth","markerHeight","orient","fill","class","imgSrc","href","download","getActiveRepository","legendBackgroundWidth","legendBackgroundHeight","legendCellGroup","height","sourceX","sourceY","targetX","targetY","legendTextX","legendLabelFontSize","classNodeY","classNodeTextY","cx","cy","r","x","y","objectNodeY","objectNodeTextY","datatypeNodeY","datatypeNodeTextY","basicPropertyArrowY","x1","y1","x2","y2","absUrl","implicitPropArrowY","collapsedPropArrowY","g","selectedRdfUri","search","uri","classNodeLabel","name","collapsed","getDomainRangeData","success","response","status","headers","domainRangeGraphData","error","set","DOMAIN_RANGE_WENT_BACK","onpopstate","state","$broadcast","$watch","angular","isUndefined","DOMAIN_RANGE_COLLAPSE_EDGES","get","switchEdgeMode","remove","graph","copy","nodes","links","linkGroup","data","enter","styleArrowsInCollapsedMode","loopLink","loopLinkEdgeCount","objectPropNodeClassUri","propertyType","targetRadius","targetNodeEdgeCount","implicit","loopLinkSize","previousPropertyNameSelection","disableCollapsedPredicateLabelHightlighting","isEmptyObject","background","onCollapsedPropertyNameClick","previousSibling","stopPropagation","ready","bind","propertyNames","test","open","textPadding","linkRect","calculatedWidth","getBBox","calculatedHeight","translateX","nodeGroup","filter","objectPropClassUri","classPosition","objectPropClassName","call","$apply","rdfClassName","classNode","loopLinkBackgroundSel","loopLinkPropertyName","loopLinkBackgroundProps","i","push","idx","e","k","alpha","positionLoopLinkBackgrounds","loopLinkBackgroundY","loopLinkBackgroundX","allLoopLinkEdges","dd","foundLoopLinkBackgroundProps","grep","obj","parseFloat","transform","reposition","viewMoreTextWidth","target","allEdges","getComputedTextLength","adjustViewMorePredicatesLabel","source","pushEdgesToLeftAndRight","angle","atan2","cos","sin","loopTranslateX","loopTranslateY","positionLoopLink","currentBackgroundHeight","loopLinkLabelX","loopLinkLabelY","predicatesLeft","labelSel","backgroundSel","nextSibling","createViewMorePredicatesLabel","positionLoopLinkLabels","log10","log","LN10","absDiff","logOffset","abs","centerClassNode","linkDistance","start","renderDomainRangeGraph","$on","cancel","module","constant","directive","$inject"],"mappings":"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","file":"29.9bdb27c21d6eacac1341.bundle.js","sourcesContent":["var D3 = D3 || {};\n\nD3.Text = function () {\n function calcFontSizeRaw(text, radius, minimumSize, isMultiline) {\n minimumSize = minimumSize || 10;\n\n var textSize = radius / 3;\n if (typeof text === \"string\") {\n var len = text.substring(0, radius / 3).length + 1.5;\n textSize *= 10 / len;\n textSize += 1;\n // experimental alternative method:\n // var textSize = 3.3 * radius / text.length;\n\n // Tweak for Indian scripts and CJK ones\n if (text.match(/[\\u0900-\\u0DFF\\u1100-\\u11FF\\u2E80-\\u2EFF\\u3000-\\u9FFF]/)) {\n textSize *= 0.6;\n }\n\n if (textSize < minimumSize) {\n textSize = minimumSize;\n }\n\n /* Disabled for the time being, better without this\n if (isMultiline) {\n var numWords = text.split(/\\s+/).length;\n if (numWords > 1) {\n if (numWords > 4) {\n numWords = 4;\n }\n textSize += textSize * (4 - numWords) * 0.1;\n }\n }\n */\n\n return Math.round(textSize);\n }\n\n if (textSize < minimumSize) {\n textSize = minimumSize;\n }\n\n return Math.round(textSize);\n }\n\n function calcFontSize(text, radius, minimumSize, isMultiline) {\n return calcFontSizeRaw(text, radius, minimumSize, isMultiline) + 'px';\n }\n\n function getTextWithElipsisIfNeeded(str, threshold) {\n if (typeof str === \"string\") {\n if (str.length > threshold) {\n return str.substring(0, threshold - 3) + \"...\";\n }\n }\n return str;\n }\n\n return {\n calcFontSizeRaw: calcFontSizeRaw,\n calcFontSize: calcFontSize,\n getTextWithElipsisIfNeeded: getTextWithElipsisIfNeeded\n };\n}();\n\nD3.Transition = function () {\n function fadeIn(sel, duration) {\n sel.style(\"opacity\", 0.0)\n .transition()\n .duration(duration)\n .style(\"opacity\", 1.0);\n }\n\n function fadeOut(sel, duration) {\n sel.style(\"opacity\", 1.0)\n .transition()\n .duration(duration)\n .style(\"opacity\", 0.0);\n }\n\n return {\n fadeIn: fadeIn,\n fadeOut: fadeOut\n };\n}();\n\nD3.Click = function () {\n function delayDblClick() {\n var event = d3.dispatch('click', 'dblclick');\n\n function cc(selection) {\n var down,\n tolerance = 5,\n last,\n wait = null;\n\n // euclidean distance\n function dist(a, b) {\n return Math.sqrt(Math.pow(a[0] - b[0], 2), Math.pow(a[1] - b[1], 2));\n }\n\n selection.on('mousedown', function () {\n down = d3.mouse(document.body);\n last = +new Date();\n });\n selection.on('mouseup', function (d) {\n if (dist(down, d3.mouse(document.body)) > tolerance) {\n return;\n } else {\n if (wait) {\n window.clearTimeout(wait);\n wait = null;\n event.dblclick(d);\n } else {\n wait = window.setTimeout((function (e) {\n return function () {\n event.click(d);\n wait = null;\n };\n })(d3.event), 250);\n }\n }\n });\n }\n\n return d3.rebind(cc, event, 'on');\n }\n\n return {\n delayDblClick: delayDblClick\n };\n}();\n\nexport default D3;\n","var SVG = SVG || {};\n\nSVG.Export = function () {\n function getCSSRules(cssSourceFilePath) {\n var cssRules = $('link[href=\"' + cssSourceFilePath + '\"]')[0].sheet.rules;\n var cssStr = \"\";\n _.each(cssRules, function (value) {\n cssStr += value.cssText;\n });\n return cssStr;\n }\n\n function generateBase64ImageSource() {\n // add needed xml namespace\n var exportSvg = d3.selectAll(\"svg\")\n .attr({\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n })\n .node().parentNode.innerHTML;\n\n // convert selected html to base64\n return \"data:image/svg+xml;charset=utf-8;base64,\" + btoa(unescape(encodeURIComponent(exportSvg)));\n }\n\n return {\n getCSSRules: getCSSRules,\n generateBase64ImageSource: generateBase64ImageSource\n };\n}();\n\nexport default SVG;\n","import SVG from 'lib/common/svg-export';\nimport D3 from 'lib/common/d3-utils';\nimport 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.graphexplore.directives.domainrange', [\n 'graphdb.framework.graphexplore.controllers.domainrange',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .constant('ONTO_RED', 'var(--onto-orange)')\n .constant('ONTO_GREEN', 'var(--onto-green)')\n .constant('ONTO_BLUE', 'var(--onto-blue)')\n .constant('NON_COLLAPSED_REFLEXIVE_LINK_LIMIT', 6)\n .directive('domainRangeGraph', domainRangeGraphDirective);\n\ndomainRangeGraphDirective.$inject = ['$rootScope', '$window', '$repositories', 'GraphDataRestService', '$location', 'LocalStorageAdapter', 'LSKeys', '$timeout', 'toastr', 'ONTO_RED', 'ONTO_GREEN', 'ONTO_BLUE', 'NON_COLLAPSED_REFLEXIVE_LINK_LIMIT'];\n\nfunction domainRangeGraphDirective($rootScope, $window, $repositories, GraphDataRestService, $location, LocalStorageAdapter, LSKeys, $timeout, toastr, ONTO_RED, ONTO_GREEN, ONTO_BLUE, NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n return {\n restrict: 'AE',\n template: '<div id=\"domain-range\"></div>',\n scope: {\n showPredicatesInfoPanel: '=',\n selectedPredicate: '=',\n collapseEdges: '='\n },\n link: linkFunc\n };\n\n function linkFunc(scope) {\n const timer = $timeout(function () {\n renderDomainRangeGraph(scope);\n }, 50);\n\n scope.$on(\"$destroy\", function () {\n $timeout.cancel(timer);\n });\n }\n\n function renderDomainRangeGraph(scope) {\n d3.selection.prototype.moveToFront = function () {\n return this.each(function () {\n d3.select(this.parentNode.appendChild(this));\n });\n };\n\n d3.selection.prototype.moveToBack = function () {\n return this.each(function () {\n const firstChild = this.parentNode.firstChild;\n if (firstChild) {\n this.parentNode.insertBefore(this, firstChild);\n }\n });\n };\n\n var width = 1200,\n height = 600;\n\n var mainClassSize = width / 18,\n otherClassSize = width / 110,\n datatypeSize = otherClassSize / 2,\n labelFontSize = width / 90,\n basicArrowStrokeWidth = width / 1000,\n collapsedArrowStrokeWidth = width / 600;\n\n\n var force = d3.layout.force()\n .size([width, height])\n .charge(-900);\n\n var drag = force.drag()\n .on(\"dragstart\", dragstart);\n\n var svg = d3.select(\"#domain-range\")\n .append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + width + \" \" + height)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\")\n .on(\"dblclick.zoom\", null);\n\n var defs = svg.append(\"defs\");\n\n defs.append(\"marker\")\n .attr({\n id: \"arrow\",\n viewBox: \"0 -5 10 10\",\n refX: 10,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 5,\n markerHeight: 5,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attr({\n id: \"collapsed-arrow\",\n viewBox: \"0 -5 10 10\",\n refX: 9,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 4,\n markerHeight: 4,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attr({\n id: \"arrow-loop\",\n viewBox: \"0 -5 10 10\",\n refX: 7,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 5,\n markerHeight: 5,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n /*\n * Prepares SVG document image export by adding xml namespaces and\n * additional style information\n */\n function prepareForSVGImageExport() {\n // get css rules for the diagram\n var cssRules = SVG.Export.getCSSRules(\"css/domain-range-graph.css?v=2.0.0-M3-RC3\");\n\n // inline css rules in a defs tag\n $(\"defs\").append('<style type=\"text/css\"><![CDATA[' + cssRules + ']]></style>');\n\n // convert selected html to base64\n var imgSrc = SVG.Export.generateBase64ImageSource();\n\n // set the binary image and a name for the downloadable file on the export button\n d3.select(this).attr({\n href: imgSrc,\n download: \"domain-range-graph-\" + $repositories.getActiveRepository() + \".svg\"\n });\n }\n\n d3.select(\"#download-svg\")\n .on(\"mouseover\", prepareForSVGImageExport);\n\n // start of code for legend\n var legendBackgroundWidth = width / 7;\n var legendBackgroundHeight = legendBackgroundWidth * 1.2;\n\n var svgLegend = d3.select(\".legend-container\")\n .append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + legendBackgroundWidth + \" \" + legendBackgroundHeight)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\");\n\n var legendCellGroup = svgLegend;\n\n legendCellGroup.append(\"rect\")\n .attr({\n width: legendBackgroundWidth,\n height: legendBackgroundHeight\n })\n .style(\"fill\", \"rgba(235, 235, 235, 0.9)\");\n\n var sourceX = width / 75;\n var sourceY = width / 40;\n var targetX = sourceX + mainClassSize / 2.5;\n var targetY = sourceY;\n\n var legendTextX = targetX + width / 90;\n var legendLabelFontSize = labelFontSize / 1.1;\n\n var classNodeY = sourceY;\n var legendClassNode = legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-class-node\",\n cx: (sourceX + targetX) / 2,\n cy: classNodeY,\n r: mainClassSize / 4.5\n });\n\n var classNodeTextY = targetY + width / 370;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: classNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"main class node\");\n\n var objectNodeY = classNodeY + width / 30;\n legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-object-node\",\n cx: (sourceX + targetX) / 2,\n cy: objectNodeY,\n r: otherClassSize / 1.25\n });\n\n var objectNodeTextY = classNodeTextY + width / 30;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: objectNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"class node\");\n\n var datatypeNodeY = objectNodeY + width / 45;\n legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-datatype-node\",\n cx: (sourceX + targetX) / 2,\n cy: datatypeNodeY,\n r: datatypeSize\n });\n\n var datatypeNodeTextY = objectNodeTextY + width / 45;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: datatypeNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"datatype node\");\n\n var basicPropertyArrowY = datatypeNodeY + width / 45;\n var classNodeSel = d3.select('.legend-class-node');\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"property-arrow\",\n x1: sourceX,\n y1: basicPropertyArrowY,\n x2: targetX,\n y2: basicPropertyArrowY\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: basicPropertyArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"explicit property\");\n\n var implicitPropArrowY = basicPropertyArrowY + width / 45;\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"implicit-property-arrow\",\n x1: sourceX,\n y1: implicitPropArrowY,\n x2: targetX,\n y2: implicitPropArrowY\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: implicitPropArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"implicit property\");\n\n var collapsedPropArrowY = implicitPropArrowY + width / 45;\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"collapsed-property-arrow\",\n x1: sourceX,\n y1: collapsedPropArrowY,\n x2: targetX,\n y2: collapsedPropArrowY\n })\n .style(\"stroke-width\", collapsedArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#collapsed-arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: collapsedPropArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"collapsed property\");\n // end of code for legend\n\n // there doesn't seem to be a need for a separate group\n var g = svg; //svg.append(\"g\");\n\n var selectedRdfUri = $location.search().uri;\n var classNodeLabel = $location.search().name;\n var collapsed = $location.search().collapsed;\n\n GraphDataRestService.getDomainRangeData(selectedRdfUri, collapsed)\n .success(function (response, status, headers) {\n scope.domainRangeGraphData = response;\n }).error(function (response) {\n toastr.error(\"Request for \" + classNodeLabel + \" failed!\");\n });\n\n function switchEdgeMode(collapsed) {\n $rootScope.$broadcast('switchEdgeMode', {\n uri: selectedRdfUri,\n name: classNodeLabel,\n collapsed: collapsed\n });\n }\n\n // intercept back button press and set action to local storage\n $(window).on('popstate', function () {\n LocalStorageAdapter.set(LSKeys.DOMAIN_RANGE_WENT_BACK, true);\n });\n\n $window.onpopstate = function (event) {\n if (event.state) {\n $rootScope.$broadcast(\"changeCollapsedEdgesState\", event.state.collapsed);\n }\n };\n\n scope.$watch('collapseEdges', function () {\n if (!angular.isUndefined(scope.collapseEdges)) {\n LocalStorageAdapter.set(LSKeys.DOMAIN_RANGE_COLLAPSE_EDGES, scope.collapseEdges);\n\n // if the back button has not been pressed, then switch to collapsed or non collapsed mode\n // otherwise skip, because back button will not function properly and will not pop the entire\n // history stack\n if (LocalStorageAdapter.get(LSKeys.DOMAIN_RANGE_WENT_BACK) !== \"true\") {\n switchEdgeMode(scope.collapseEdges);\n }\n\n // after back button status has been checked, remove the action from local storage in order\n // to be clean for next check\n LocalStorageAdapter.remove(LSKeys.DOMAIN_RANGE_WENT_BACK);\n }\n });\n\n scope.$watch('domainRangeGraphData', function () {\n if (scope.domainRangeGraphData) {\n var graph = angular.copy(scope.domainRangeGraphData);\n\n force\n .nodes(graph.nodes)\n .links(graph.links);\n\n var linkGroup = g.selectAll(\".link\")\n .data(graph.links)\n .enter()\n .append(\"g\");\n\n function styleArrowsInCollapsedMode(sel) {\n sel.style(\"stroke\", ONTO_BLUE);\n sel.style(\"stroke-width\", collapsedArrowStrokeWidth);\n sel.attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#collapsed-arrow)\");\n }\n\n var link,\n loopLink,\n loopLinkEdgeCount = 0;\n\n\n linkGroup\n .each(function (d) {\n if (d.objectPropNodeClassUri !== selectedRdfUri) {\n link = linkGroup\n .append(\"line\")\n .attr({\n class: \"link\",\n // absolute url needed because angular inserts a <base> tag\n \"marker-end\": \"url(\" + $location.absUrl() + \"#arrow)\"\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .each(function (d) {\n switch (d.propertyType) {\n case \"objectLeft\":\n d.targetRadius = mainClassSize;\n break;\n case \"objectRight\":\n d.targetRadius = otherClassSize;\n break;\n case \"datatype\":\n d.targetRadius = datatypeSize;\n break;\n default:\n d.targetRadius = 0;\n }\n var sel = d3.select(this);\n if (d.targetNodeEdgeCount > 1) {\n styleArrowsInCollapsedMode(sel);\n } else if (d.implicit) {\n sel.style(\"stroke-dasharray\", \"3, 3\");\n }\n });\n } else {\n if (angular.isUndefined(loopLink)) {\n var loopLinkSize = mainClassSize / 2;\n loopLink = d3.select(this)\n .append(\"path\")\n .attr({\n d: \"M 0 0 A \" + loopLinkSize + \" \" + loopLinkSize + \" 0 1 1 0 \" + loopLinkSize,\n class: \"loop-link\",\n fill: \"none\",\n \"marker-end\": \"url(\" + $location.absUrl() + \"#arrow-loop)\"\n })\n .style(\"stroke-width\", basicArrowStrokeWidth);\n }\n\n loopLinkEdgeCount += d.targetNodeEdgeCount;\n if (loopLinkEdgeCount > 1) {\n styleArrowsInCollapsedMode(d3.select(\".loop-link\"));\n }\n }\n });\n\n var previousPropertyNameSelection = {};\n\n function disableCollapsedPredicateLabelHightlighting() {\n if (!$.isEmptyObject(previousPropertyNameSelection)) {\n previousPropertyNameSelection.text.style(\"fill\", \"black\");\n previousPropertyNameSelection.background.style(\"fill\", \"#f0f0f0\");\n }\n }\n\n // when clicking anywhere else but the collapsed labels disable highlighting\n // of the currently selected one\n $(\"document\").ready(function () {\n $(\"#domain-range\").bind(\"click\", disableCollapsedPredicateLabelHightlighting);\n });\n\n function onCollapsedPropertyNameClick(d) {\n disableCollapsedPredicateLabelHightlighting();\n previousPropertyNameSelection.text = d3.select(this);\n\n previousPropertyNameSelection.background = d3.select(this.previousSibling);\n previousPropertyNameSelection.text.style(\"fill\", \"white\");\n\n previousPropertyNameSelection.background.style(\"fill\", ONTO_BLUE);\n $timeout(function () {\n scope.showPredicatesInfoPanel = true;\n scope.selectedPredicate = d;\n });\n d3.event.stopPropagation();\n }\n\n\n var propertyNames = linkGroup\n .append(\"text\")\n .attr(\"class\", function (d) {\n return d.objectPropNodeClassUri === selectedRdfUri ? \"loop-link-property-name\" : \"property-name\";\n })\n .attr(\"dx\", function (d) {\n // offset text more towards the main class\n return mainClassSize / 2 * (d.propertyType === \"objectLeft\" ? 1 : -1);\n })\n .style(\"text-anchor\", function (d) {\n return d.propertyType === \"objectLeft\" ? \"end\" : \"start\";\n })\n .style(\"font-size\", labelFontSize)\n .text(function (d) {\n return d.targetNodeEdgeCount > 1 ? d.targetNodeEdgeCount + \" predicates\" : d.name;\n });\n\n\n propertyNames\n .each(function (d) {\n var sel = d3.select(this);\n var isCompoundEdge = /\\d\\spredicates/.test(sel.text());\n\n // handle collapsed predicates by making their font bold, make them highlight when clicked\n // and make them trigger the side panel to display the collapsed edges\n if (isCompoundEdge) {\n sel\n .style(\"font-weight\", \"bold\")\n .on(\"click\", onCollapsedPropertyNameClick);\n } else {\n // for regular predicate labels just attach a link to the \"Resources\" view\n // for more helpful information regarding them\n sel.on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.uri), \"_blank\");\n });\n }\n });\n var textPadding = width / 600;\n\n\n var linkRect = linkGroup\n .append(\"rect\")\n .attr(\"class\", function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri ? \"link-background\" : \"loop-link-background\"\n })\n .attr(\"width\", function (d) {\n d.calculatedWidth = this.previousSibling.getBBox().width;\n return d.calculatedWidth + textPadding * 2;\n })\n .attr(\"height\", function (d) {\n d.calculatedHeight = this.previousSibling.getBBox().height;\n return d.calculatedHeight + textPadding;\n })\n .attr(\"transform\", function (d) {\n // offset rect by the same amount as text (besides the padding)\n var translateX = textPadding - mainClassSize / 2 * (d.propertyType === \"objectLeft\" ? 1 : -1);\n if (d.propertyType === \"objectLeft\") {\n translateX += d.calculatedWidth;\n }\n return \"translate(-\" + translateX + \",-\" + (textPadding + d.calculatedHeight / 2) + \")\";\n })\n .on(\"click\", function (d) {\n d3.event.stopPropagation();\n });\n\n\n var nodeGroup = g.selectAll(\".node\")\n .data(graph.nodes)\n .enter()\n .append(\"g\");\n\n var node = nodeGroup\n .filter(function (d) {\n return d.objectPropClassUri !== selectedRdfUri;\n })\n .append(\"circle\")\n .each(function (d) {\n var sel = d3.select(this);\n if (d.classPosition === \"main\") {\n sel.attr({\n class: \"class-node\",\n r: mainClassSize\n })\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#loop-link)\");\n } else if (d.objectPropClassName === null) {\n sel.attr({\n class: \"datatype-node\",\n r: datatypeSize\n });\n } else {\n sel.attr({\n class: \"object-prop-node\",\n r: otherClassSize\n });\n }\n })\n .call(drag);\n\n\n function reloadDomainRangeGraphView(d, collapsed) {\n scope.$apply(function () {\n $rootScope.$broadcast('reloadDomainRangeGraphView', d, collapsed);\n });\n }\n\n d3.selectAll(\".object-prop-node\")\n .on(\"dblclick\", reloadDomainRangeGraphView);\n\n\n nodeGroup\n .filter(function (d) {\n return d.objectPropClassName && d.objectPropClassUri !== selectedRdfUri;\n })\n .append(\"text\")\n .attr(\"class\", function (d) {\n return d.classPosition + \"-class-label\";\n })\n .style(\"font-size\", labelFontSize)\n .text(function (d) {\n return d.objectPropClassName;\n })\n .on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.objectPropClassUri), \"_blank\");\n });\n\n var objectPropClassName = nodeGroup.select(\"text\");\n\n g.select(\".class-node\")\n .each(function () {\n d3.select(this.parentNode)\n .append(\"text\")\n .attr(\"class\", \"rdf-class-label\")\n .style(\"font-size\", function (d) {\n return D3.Text.calcFontSize(classNodeLabel, mainClassSize)\n })\n .text(classNodeLabel)\n .on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(selectedRdfUri), \"_blank\");\n });\n });\n\n\n var rdfClassName = g.select(\".class-node + text\"),\n classNode = d3.select(\".class-node\"),\n loopLinkBackgroundSel = d3.selectAll(\".loop-link-background\"),\n loopLinkPropertyName = d3.selectAll(\".loop-link-property-name\");\n\n propertyNames = d3.selectAll(\".property-name\");\n\n if (!angular.isUndefined(loopLink)) {\n var loopLinkBackgroundProps = [];\n\n loopLinkBackgroundSel.each(function (d, i) {\n var sel = d3.select(this);\n loopLinkBackgroundProps.push({\n idx: i,\n width: d.calculatedWidth,\n height: d.calculatedHeight\n });\n });\n }\n\n function tick(e) {\n var k = 8 * e.alpha;\n\n function pushEdgesToLeftAndRight(d) {\n if (d.propertyType === \"objectLeft\") {\n d.source.x -= 8 * k;\n d.source.y -= k / 9;\n } else {\n d.target.x += 8 * k;\n d.target.y -= k / 9;\n }\n }\n\n link\n .filter(function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri;\n })\n .attr(\"x1\", function (d) {\n return d.source.x;\n })\n .attr(\"y1\", function (d) {\n return d.source.y;\n })\n .attr(\"x2\", function (d) {\n return d.targetX;\n })\n .attr(\"y2\", function (d) {\n return d.targetY;\n })\n .each(function (d) {\n pushEdgesToLeftAndRight(d);\n\n // shortens the line to compensate for the circle at the target\n var angle = Math.atan2(d.target.y - d.source.y, d.target.x - d.source.x);\n d.targetX = d.target.x - Math.cos(angle) * d.targetRadius;\n d.targetY = d.target.y - Math.sin(angle) * d.targetRadius;\n });\n\n function positionLoopLink(d) {\n var loopTranslateX = d.x + mainClassSize * 0.96,\n loopTranslateY = d.y - mainClassSize / 5.7 - 5;\n loopLink.attr(\"transform\", \"rotate(270, \" + d.x + \",\" + d.y + \") translate(\" + loopTranslateX + \",\" + loopTranslateY + \")\");\n }\n\n function positionLoopLinkLabels(d) {\n function reposition(sel, i) {\n var foundLoopLinkBackgroundProps =\n $.grep(loopLinkBackgroundProps, function (obj) {\n return obj.idx == i;\n });\n var currentBackgroundHeight = 0;\n if (i > 0) {\n currentBackgroundHeight = parseFloat(2 * i * (foundLoopLinkBackgroundProps[0].height / 1.4));\n }\n\n var loopLinkLabelX = d.x,\n loopLinkLabelY = d.y - mainClassSize * 2.1 - currentBackgroundHeight;\n\n sel\n .attr({\n x: loopLinkLabelX,\n y: loopLinkLabelY\n })\n .moveToFront();\n }\n\n /**\n * Create a \"View more\" label to depict that the are more reflexive link labels\n * left that could be seen in the side panel when clicking this label.\n *\n * @param labelSel\n * d3 selection of the text label\n * @param backgroundSel\n * d3 selection of the rectangle element background\n * @param predicatesLeft\n * number of predicates left that are collapsed\n */\n function createViewMorePredicatesLabel(labelSel, backgroundSel, predicatesLeft) {\n labelSel\n .classed(\"view-more-preds-label\", true)\n .text(predicatesLeft + \" predicates more ...\");\n if (this.nextSibling !== null) {\n backgroundSel\n .classed(\"view-more-preds-rect\", true);\n }\n }\n\n loopLinkPropertyName.each(function (dd, i) {\n var sel = d3.select(this);\n\n var predicatesLeft = loopLinkPropertyName.size() - NON_COLLAPSED_REFLEXIVE_LINK_LIMIT;\n if (predicatesLeft < 0) {\n reposition(sel, i);\n } else {\n if (i == 0 && !scope.collapseEdges && predicatesLeft > 1) {\n createViewMorePredicatesLabel(sel, d3.select(this.nextSibling), predicatesLeft);\n reposition(sel, i);\n }\n\n if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n reposition(sel, i);\n } else {\n sel.remove();\n }\n }\n });\n // loopLinkPropertyName.each(function (dd, i) {\n // var sel = d3.select(this);\n // if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n // reposition(sel, i);\n // } else if (i == NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n // createViewMorePredicatesLabel(sel, d3.select(this.nextSibling));\n // reposition(sel, i);\n // } else {\n // sel.remove();\n // }\n // });\n }\n\n function positionLoopLinkBackgrounds(d) {\n var loopLinkBackgroundY = d.x + mainClassSize * 2,\n loopLinkBackgroundX = d.y - mainClassSize / 1.9;\n\n function reposition(sel, i) {\n var foundLoopLinkBackgroundProps =\n $.grep(loopLinkBackgroundProps, function (obj) {\n return obj.idx == i;\n });\n if (i > 0) {\n loopLinkBackgroundY += parseFloat(i * (foundLoopLinkBackgroundProps[0].height / (i / 1.4)));\n }\n\n sel\n .attr({\n transform: \"rotate(270, \" + d.x + \",\" + d.y + \") translate(\" + loopLinkBackgroundY + \",\" + loopLinkBackgroundX + \")\",\n width: foundLoopLinkBackgroundProps[0].height,\n height: foundLoopLinkBackgroundProps[0].width\n });\n }\n\n /**\n * Adjust new width of \"View more\" label background and add all reflexive link metadata the this\n * label in order to render them in the side panel.\n *\n * @param allLoopLinkEdges\n * all reflexive links to the current class\n */\n function adjustViewMorePredicatesLabel(allLoopLinkEdges) {\n var viewMoreTextWidth;\n d3.select(\".view-more-preds-label\")\n // make label bold to resemble a collapsed label\n .style(\"font-weight\", \"bold\")\n .each(function (d) {\n // attach all reflexive links to the \"view more\" collapsed predicate\n // because in non collapsed mode the backend does not provide them\n d.target.allEdges = allLoopLinkEdges;\n\n // calculate text width in pixels in order to adjust background width accordingly\n viewMoreTextWidth = this.getComputedTextLength();\n })\n .on(\"click\", onCollapsedPropertyNameClick);\n\n d3.select(\".view-more-preds-rect\")\n // we modify height property instead of width because they are reversed\n // when we repositioned loop link labels\n .attr(\"height\", viewMoreTextWidth + 2 * textPadding);\n }\n\n var allLoopLinkEdges = [];\n loopLinkBackgroundSel.each(function (dd, i) {\n allLoopLinkEdges.push(dd);\n if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n reposition(d3.select(this), i);\n } else {\n d3.select(this).remove();\n }\n });\n\n adjustViewMorePredicatesLabel(allLoopLinkEdges);\n }\n\n\n function centerClassNode(d) {\n if (!(window.ActiveXObject) && \"ActiveXObject\" in window) {\n Math.log10 = function (x) {\n return Math.log(x) / Math.LN10;\n };\n }\n var absDiff = classNode.attr(\"cx\") - width / 2,\n logOffset = Math.log10(Math.abs(absDiff)) * 0.5;\n d.x += absDiff > 0 ? -logOffset : logOffset;\n return d.x;\n }\n\n node\n .each(function (d) {\n if (d.classPosition === \"main\" && !angular.isUndefined(loopLink)) {\n positionLoopLink(d);\n positionLoopLinkLabels(d);\n positionLoopLinkBackgrounds(d);\n }\n\n if (d.objectPropClassUri !== selectedRdfUri) {\n d3.select(this)\n .attr(\"cx\", function (d) {\n // pushes the main class circle to the centre\n if (d.classPosition === \"main\") {\n return centerClassNode(d);\n }\n return d.x;\n })\n .attr(\"cy\", function (d) {\n return d.y;\n });\n }\n });\n\n\n rdfClassName\n .attr(\"x\", function (d) {\n return d.x;\n })\n .attr(\"y\", function (d) {\n return d.y;\n })\n .moveToFront();\n\n\n linkRect\n .filter(function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri;\n })\n .attr(\"x\", function (d) {\n if (d.target.x > d.source.x) {\n return (d.source.x + (d.target.x - d.source.x) / 2);\n } else {\n return (d.target.x + (d.source.x - d.target.x) / 2);\n }\n })\n .attr(\"y\", function (d) {\n if (d.target.y > d.source.y) {\n return (d.source.y + (d.target.y - d.source.y) / 2);\n } else {\n return (d.target.y + (d.source.y - d.target.y) / 2);\n }\n })\n .moveToFront();\n\n\n propertyNames\n .attr(\"x\", function (d) {\n if (d.target.x > d.source.x) {\n return (d.source.x + (d.target.x - d.source.x) / 2);\n } else {\n return (d.target.x + (d.source.x - d.target.x) / 2);\n }\n })\n .attr(\"y\", function (d) {\n if (d.target.y > d.source.y) {\n return (d.source.y + (d.target.y - d.source.y) / 2);\n } else {\n return (d.target.y + (d.source.y - d.target.y) / 2);\n }\n })\n .moveToFront();\n\n\n objectPropClassName\n .attr(\"x\", function (d) {\n if (d.classPosition === \"right\") {\n return d.x + otherClassSize * 1.2;\n } else {\n return d.x - otherClassSize * 1.2;\n }\n })\n .attr(\"y\", function (d) {\n return d.y;\n })\n .moveToFront();\n }\n\n\n force\n .on(\"tick\", tick)\n .linkDistance(width / 3.5)\n .start();\n\n }\n });\n\n function dragstart(d) {\n d3.select(this)\n .classed(\"selected\", d.selected = true);\n }\n }\n}\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/js/lib/common/d3-utils.js","webpack:///./src/js/lib/common/svg-export.js","webpack:///./src/js/angular/graphexplore/directives/domain-range-graph.directive.js"],"names":["D3","Text","calcFontSizeRaw","text","radius","minimumSize","isMultiline","textSize","substring","length","match","Math","round","calcFontSize","getTextWithElipsisIfNeeded","str","threshold","Transition","fadeIn","sel","duration","style","transition","fadeOut","Click","delayDblClick","event","d3","dispatch","rebind","selection","down","wait","on","mouse","document","body","Date","d","a","b","sqrt","pow","window","clearTimeout","dblclick","setTimeout","click","SVG","Export","getCSSRules","cssSourceFilePath","cssRules","$","sheet","rules","cssStr","_","each","value","cssText","generateBase64ImageSource","exportSvg","selectAll","attr","version","xmlns","node","parentNode","innerHTML","btoa","unescape","encodeURIComponent","domainRangeGraphDirective","$rootScope","$window","$repositories","GraphDataRestService","$location","LocalStorageAdapter","LSKeys","$timeout","toastr","ONTO_RED","ONTO_GREEN","ONTO_BLUE","NON_COLLAPSED_REFLEXIVE_LINK_LIMIT","restrict","template","scope","showPredicatesInfoPanel","selectedPredicate","collapseEdges","link","timer","prototype","moveToFront","this","select","appendChild","moveToBack","firstChild","insertBefore","width","mainClassSize","otherClassSize","datatypeSize","labelFontSize","basicArrowStrokeWidth","collapsedArrowStrokeWidth","force","layout","size","charge","drag","classed","selected","svg","append","defs","id","viewBox","refX","refY","markerUnits","markerWidth","markerHeight","orient","fill","class","imgSrc","href","download","getActiveRepository","legendBackgroundWidth","legendBackgroundHeight","legendCellGroup","height","sourceX","sourceY","targetX","targetY","legendTextX","legendLabelFontSize","classNodeY","classNodeTextY","cx","cy","r","x","y","objectNodeY","objectNodeTextY","datatypeNodeY","datatypeNodeTextY","basicPropertyArrowY","x1","y1","x2","y2","absUrl","implicitPropArrowY","collapsedPropArrowY","g","selectedRdfUri","search","uri","classNodeLabel","name","collapsed","getDomainRangeData","success","response","status","headers","domainRangeGraphData","error","set","DOMAIN_RANGE_WENT_BACK","onpopstate","state","$broadcast","$watch","angular","isUndefined","DOMAIN_RANGE_COLLAPSE_EDGES","get","switchEdgeMode","remove","graph","copy","nodes","links","linkGroup","data","enter","styleArrowsInCollapsedMode","loopLink","loopLinkEdgeCount","objectPropNodeClassUri","propertyType","targetRadius","targetNodeEdgeCount","implicit","loopLinkSize","previousPropertyNameSelection","disableCollapsedPredicateLabelHightlighting","isEmptyObject","background","onCollapsedPropertyNameClick","previousSibling","stopPropagation","ready","bind","propertyNames","test","open","textPadding","linkRect","calculatedWidth","getBBox","calculatedHeight","translateX","nodeGroup","filter","objectPropClassUri","classPosition","objectPropClassName","call","$apply","rdfClassName","classNode","loopLinkBackgroundSel","loopLinkPropertyName","loopLinkBackgroundProps","i","push","idx","e","k","alpha","positionLoopLinkBackgrounds","loopLinkBackgroundY","loopLinkBackgroundX","allLoopLinkEdges","dd","foundLoopLinkBackgroundProps","grep","obj","parseFloat","transform","reposition","viewMoreTextWidth","target","allEdges","getComputedTextLength","adjustViewMorePredicatesLabel","source","pushEdgesToLeftAndRight","angle","atan2","cos","sin","loopTranslateX","loopTranslateY","positionLoopLink","currentBackgroundHeight","loopLinkLabelX","loopLinkLabelY","predicatesLeft","labelSel","backgroundSel","nextSibling","createViewMorePredicatesLabel","positionLoopLinkLabels","log10","log","LN10","absDiff","logOffset","abs","centerClassNode","linkDistance","start","renderDomainRangeGraph","$on","cancel","module","constant","directive","$inject"],"mappings":"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","file":"29.9bdb27c21d6eacac1341.bundle.js","sourcesContent":["var D3 = D3 || {};\n\nD3.Text = function () {\n function calcFontSizeRaw(text, radius, minimumSize, isMultiline) {\n minimumSize = minimumSize || 10;\n\n var textSize = radius / 3;\n if (typeof text === \"string\") {\n var len = text.substring(0, radius / 3).length + 1.5;\n textSize *= 10 / len;\n textSize += 1;\n // experimental alternative method:\n // var textSize = 3.3 * radius / text.length;\n\n // Tweak for Indian scripts and CJK ones\n if (text.match(/[\\u0900-\\u0DFF\\u1100-\\u11FF\\u2E80-\\u2EFF\\u3000-\\u9FFF]/)) {\n textSize *= 0.6;\n }\n\n if (textSize < minimumSize) {\n textSize = minimumSize;\n }\n\n /* Disabled for the time being, better without this\n if (isMultiline) {\n var numWords = text.split(/\\s+/).length;\n if (numWords > 1) {\n if (numWords > 4) {\n numWords = 4;\n }\n textSize += textSize * (4 - numWords) * 0.1;\n }\n }\n */\n\n return Math.round(textSize);\n }\n\n if (textSize < minimumSize) {\n textSize = minimumSize;\n }\n\n return Math.round(textSize);\n }\n\n function calcFontSize(text, radius, minimumSize, isMultiline) {\n return calcFontSizeRaw(text, radius, minimumSize, isMultiline) + 'px';\n }\n\n function getTextWithElipsisIfNeeded(str, threshold) {\n if (typeof str === \"string\") {\n if (str.length > threshold) {\n return str.substring(0, threshold - 3) + \"...\";\n }\n }\n return str;\n }\n\n return {\n calcFontSizeRaw: calcFontSizeRaw,\n calcFontSize: calcFontSize,\n getTextWithElipsisIfNeeded: getTextWithElipsisIfNeeded\n };\n}();\n\nD3.Transition = function () {\n function fadeIn(sel, duration) {\n sel.style(\"opacity\", 0.0)\n .transition()\n .duration(duration)\n .style(\"opacity\", 1.0);\n }\n\n function fadeOut(sel, duration) {\n sel.style(\"opacity\", 1.0)\n .transition()\n .duration(duration)\n .style(\"opacity\", 0.0);\n }\n\n return {\n fadeIn: fadeIn,\n fadeOut: fadeOut\n };\n}();\n\nD3.Click = function () {\n function delayDblClick() {\n var event = d3.dispatch('click', 'dblclick');\n\n function cc(selection) {\n var down,\n tolerance = 5,\n last,\n wait = null;\n\n // euclidean distance\n function dist(a, b) {\n return Math.sqrt(Math.pow(a[0] - b[0], 2), Math.pow(a[1] - b[1], 2));\n }\n\n selection.on('mousedown', function () {\n down = d3.mouse(document.body);\n last = +new Date();\n });\n selection.on('mouseup', function (d) {\n if (dist(down, d3.mouse(document.body)) > tolerance) {\n return;\n } else {\n if (wait) {\n window.clearTimeout(wait);\n wait = null;\n event.dblclick(d);\n } else {\n wait = window.setTimeout((function (e) {\n return function () {\n event.click(d);\n wait = null;\n };\n })(d3.event), 250);\n }\n }\n });\n }\n\n return d3.rebind(cc, event, 'on');\n }\n\n return {\n delayDblClick: delayDblClick\n };\n}();\n\nexport default D3;\n","var SVG = SVG || {};\n\nSVG.Export = function () {\n function getCSSRules(cssSourceFilePath) {\n var cssRules = $('link[href=\"' + cssSourceFilePath + '\"]')[0].sheet.rules;\n var cssStr = \"\";\n _.each(cssRules, function (value) {\n cssStr += value.cssText;\n });\n return cssStr;\n }\n\n function generateBase64ImageSource() {\n // add needed xml namespace\n var exportSvg = d3.selectAll(\"svg\")\n .attr({\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n })\n .node().parentNode.innerHTML;\n\n // convert selected html to base64\n return \"data:image/svg+xml;charset=utf-8;base64,\" + btoa(unescape(encodeURIComponent(exportSvg)));\n }\n\n return {\n getCSSRules: getCSSRules,\n generateBase64ImageSource: generateBase64ImageSource\n };\n}();\n\nexport default SVG;\n","import SVG from 'lib/common/svg-export';\nimport D3 from 'lib/common/d3-utils';\nimport 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.graphexplore.directives.domainrange', [\n 'graphdb.framework.graphexplore.controllers.domainrange',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .constant('ONTO_RED', 'var(--onto-orange)')\n .constant('ONTO_GREEN', 'var(--onto-green)')\n .constant('ONTO_BLUE', 'var(--onto-blue)')\n .constant('NON_COLLAPSED_REFLEXIVE_LINK_LIMIT', 6)\n .directive('domainRangeGraph', domainRangeGraphDirective);\n\ndomainRangeGraphDirective.$inject = ['$rootScope', '$window', '$repositories', 'GraphDataRestService', '$location', 'LocalStorageAdapter', 'LSKeys', '$timeout', 'toastr', 'ONTO_RED', 'ONTO_GREEN', 'ONTO_BLUE', 'NON_COLLAPSED_REFLEXIVE_LINK_LIMIT'];\n\nfunction domainRangeGraphDirective($rootScope, $window, $repositories, GraphDataRestService, $location, LocalStorageAdapter, LSKeys, $timeout, toastr, ONTO_RED, ONTO_GREEN, ONTO_BLUE, NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n return {\n restrict: 'AE',\n template: '<div id=\"domain-range\"></div>',\n scope: {\n showPredicatesInfoPanel: '=',\n selectedPredicate: '=',\n collapseEdges: '='\n },\n link: linkFunc\n };\n\n function linkFunc(scope) {\n const timer = $timeout(function () {\n renderDomainRangeGraph(scope);\n }, 50);\n\n scope.$on(\"$destroy\", function () {\n $timeout.cancel(timer);\n });\n }\n\n function renderDomainRangeGraph(scope) {\n d3.selection.prototype.moveToFront = function () {\n return this.each(function () {\n d3.select(this.parentNode.appendChild(this));\n });\n };\n\n d3.selection.prototype.moveToBack = function () {\n return this.each(function () {\n const firstChild = this.parentNode.firstChild;\n if (firstChild) {\n this.parentNode.insertBefore(this, firstChild);\n }\n });\n };\n\n var width = 1200,\n height = 600;\n\n var mainClassSize = width / 18,\n otherClassSize = width / 110,\n datatypeSize = otherClassSize / 2,\n labelFontSize = width / 90,\n basicArrowStrokeWidth = width / 1000,\n collapsedArrowStrokeWidth = width / 600;\n\n\n var force = d3.layout.force()\n .size([width, height])\n .charge(-900);\n\n var drag = force.drag()\n .on(\"dragstart\", dragstart);\n\n var svg = d3.select(\"#domain-range\")\n .append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + width + \" \" + height)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\")\n .on(\"dblclick.zoom\", null);\n\n var defs = svg.append(\"defs\");\n\n defs.append(\"marker\")\n .attr({\n id: \"arrow\",\n viewBox: \"0 -5 10 10\",\n refX: 10,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 5,\n markerHeight: 5,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attr({\n id: \"collapsed-arrow\",\n viewBox: \"0 -5 10 10\",\n refX: 9,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 4,\n markerHeight: 4,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n defs.append(\"marker\")\n .attr({\n id: \"arrow-loop\",\n viewBox: \"0 -5 10 10\",\n refX: 7,\n refY: 0,\n markerUnits: \"strokeWidth\",\n markerWidth: 5,\n markerHeight: 5,\n orient: \"auto\",\n fill: ONTO_BLUE\n })\n .append(\"path\")\n .attr({\n d: \"M0,-5L10,0L0,5\",\n class: \"arrowHead\"\n });\n\n /*\n * Prepares SVG document image export by adding xml namespaces and\n * additional style information\n */\n function prepareForSVGImageExport() {\n // get css rules for the diagram\n var cssRules = SVG.Export.getCSSRules(\"css/domain-range-graph.css?v=2.0.0-M3-RC4\");\n\n // inline css rules in a defs tag\n $(\"defs\").append('<style type=\"text/css\"><![CDATA[' + cssRules + ']]></style>');\n\n // convert selected html to base64\n var imgSrc = SVG.Export.generateBase64ImageSource();\n\n // set the binary image and a name for the downloadable file on the export button\n d3.select(this).attr({\n href: imgSrc,\n download: \"domain-range-graph-\" + $repositories.getActiveRepository() + \".svg\"\n });\n }\n\n d3.select(\"#download-svg\")\n .on(\"mouseover\", prepareForSVGImageExport);\n\n // start of code for legend\n var legendBackgroundWidth = width / 7;\n var legendBackgroundHeight = legendBackgroundWidth * 1.2;\n\n var svgLegend = d3.select(\".legend-container\")\n .append(\"svg\")\n .attr(\"viewBox\", \"0 0 \" + legendBackgroundWidth + \" \" + legendBackgroundHeight)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\");\n\n var legendCellGroup = svgLegend;\n\n legendCellGroup.append(\"rect\")\n .attr({\n width: legendBackgroundWidth,\n height: legendBackgroundHeight\n })\n .style(\"fill\", \"rgba(235, 235, 235, 0.9)\");\n\n var sourceX = width / 75;\n var sourceY = width / 40;\n var targetX = sourceX + mainClassSize / 2.5;\n var targetY = sourceY;\n\n var legendTextX = targetX + width / 90;\n var legendLabelFontSize = labelFontSize / 1.1;\n\n var classNodeY = sourceY;\n var legendClassNode = legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-class-node\",\n cx: (sourceX + targetX) / 2,\n cy: classNodeY,\n r: mainClassSize / 4.5\n });\n\n var classNodeTextY = targetY + width / 370;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: classNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"main class node\");\n\n var objectNodeY = classNodeY + width / 30;\n legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-object-node\",\n cx: (sourceX + targetX) / 2,\n cy: objectNodeY,\n r: otherClassSize / 1.25\n });\n\n var objectNodeTextY = classNodeTextY + width / 30;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: objectNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"class node\");\n\n var datatypeNodeY = objectNodeY + width / 45;\n legendCellGroup\n .append(\"circle\")\n .attr({\n class: \"legend-datatype-node\",\n cx: (sourceX + targetX) / 2,\n cy: datatypeNodeY,\n r: datatypeSize\n });\n\n var datatypeNodeTextY = objectNodeTextY + width / 45;\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: datatypeNodeTextY\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"datatype node\");\n\n var basicPropertyArrowY = datatypeNodeY + width / 45;\n var classNodeSel = d3.select('.legend-class-node');\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"property-arrow\",\n x1: sourceX,\n y1: basicPropertyArrowY,\n x2: targetX,\n y2: basicPropertyArrowY\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: basicPropertyArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"explicit property\");\n\n var implicitPropArrowY = basicPropertyArrowY + width / 45;\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"implicit-property-arrow\",\n x1: sourceX,\n y1: implicitPropArrowY,\n x2: targetX,\n y2: implicitPropArrowY\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: implicitPropArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"implicit property\");\n\n var collapsedPropArrowY = implicitPropArrowY + width / 45;\n legendCellGroup\n .append(\"line\")\n .attr({\n class: \"collapsed-property-arrow\",\n x1: sourceX,\n y1: collapsedPropArrowY,\n x2: targetX,\n y2: collapsedPropArrowY\n })\n .style(\"stroke-width\", collapsedArrowStrokeWidth)\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#collapsed-arrow)\");\n\n legendCellGroup\n .append(\"text\")\n .attr({\n x: legendTextX,\n y: collapsedPropArrowY + (width / 370)\n })\n .style('font-size', legendLabelFontSize + 'px')\n .text(\"collapsed property\");\n // end of code for legend\n\n // there doesn't seem to be a need for a separate group\n var g = svg; //svg.append(\"g\");\n\n var selectedRdfUri = $location.search().uri;\n var classNodeLabel = $location.search().name;\n var collapsed = $location.search().collapsed;\n\n GraphDataRestService.getDomainRangeData(selectedRdfUri, collapsed)\n .success(function (response, status, headers) {\n scope.domainRangeGraphData = response;\n }).error(function (response) {\n toastr.error(\"Request for \" + classNodeLabel + \" failed!\");\n });\n\n function switchEdgeMode(collapsed) {\n $rootScope.$broadcast('switchEdgeMode', {\n uri: selectedRdfUri,\n name: classNodeLabel,\n collapsed: collapsed\n });\n }\n\n // intercept back button press and set action to local storage\n $(window).on('popstate', function () {\n LocalStorageAdapter.set(LSKeys.DOMAIN_RANGE_WENT_BACK, true);\n });\n\n $window.onpopstate = function (event) {\n if (event.state) {\n $rootScope.$broadcast(\"changeCollapsedEdgesState\", event.state.collapsed);\n }\n };\n\n scope.$watch('collapseEdges', function () {\n if (!angular.isUndefined(scope.collapseEdges)) {\n LocalStorageAdapter.set(LSKeys.DOMAIN_RANGE_COLLAPSE_EDGES, scope.collapseEdges);\n\n // if the back button has not been pressed, then switch to collapsed or non collapsed mode\n // otherwise skip, because back button will not function properly and will not pop the entire\n // history stack\n if (LocalStorageAdapter.get(LSKeys.DOMAIN_RANGE_WENT_BACK) !== \"true\") {\n switchEdgeMode(scope.collapseEdges);\n }\n\n // after back button status has been checked, remove the action from local storage in order\n // to be clean for next check\n LocalStorageAdapter.remove(LSKeys.DOMAIN_RANGE_WENT_BACK);\n }\n });\n\n scope.$watch('domainRangeGraphData', function () {\n if (scope.domainRangeGraphData) {\n var graph = angular.copy(scope.domainRangeGraphData);\n\n force\n .nodes(graph.nodes)\n .links(graph.links);\n\n var linkGroup = g.selectAll(\".link\")\n .data(graph.links)\n .enter()\n .append(\"g\");\n\n function styleArrowsInCollapsedMode(sel) {\n sel.style(\"stroke\", ONTO_BLUE);\n sel.style(\"stroke-width\", collapsedArrowStrokeWidth);\n sel.attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#collapsed-arrow)\");\n }\n\n var link,\n loopLink,\n loopLinkEdgeCount = 0;\n\n\n linkGroup\n .each(function (d) {\n if (d.objectPropNodeClassUri !== selectedRdfUri) {\n link = linkGroup\n .append(\"line\")\n .attr({\n class: \"link\",\n // absolute url needed because angular inserts a <base> tag\n \"marker-end\": \"url(\" + $location.absUrl() + \"#arrow)\"\n })\n .style(\"stroke-width\", basicArrowStrokeWidth)\n .each(function (d) {\n switch (d.propertyType) {\n case \"objectLeft\":\n d.targetRadius = mainClassSize;\n break;\n case \"objectRight\":\n d.targetRadius = otherClassSize;\n break;\n case \"datatype\":\n d.targetRadius = datatypeSize;\n break;\n default:\n d.targetRadius = 0;\n }\n var sel = d3.select(this);\n if (d.targetNodeEdgeCount > 1) {\n styleArrowsInCollapsedMode(sel);\n } else if (d.implicit) {\n sel.style(\"stroke-dasharray\", \"3, 3\");\n }\n });\n } else {\n if (angular.isUndefined(loopLink)) {\n var loopLinkSize = mainClassSize / 2;\n loopLink = d3.select(this)\n .append(\"path\")\n .attr({\n d: \"M 0 0 A \" + loopLinkSize + \" \" + loopLinkSize + \" 0 1 1 0 \" + loopLinkSize,\n class: \"loop-link\",\n fill: \"none\",\n \"marker-end\": \"url(\" + $location.absUrl() + \"#arrow-loop)\"\n })\n .style(\"stroke-width\", basicArrowStrokeWidth);\n }\n\n loopLinkEdgeCount += d.targetNodeEdgeCount;\n if (loopLinkEdgeCount > 1) {\n styleArrowsInCollapsedMode(d3.select(\".loop-link\"));\n }\n }\n });\n\n var previousPropertyNameSelection = {};\n\n function disableCollapsedPredicateLabelHightlighting() {\n if (!$.isEmptyObject(previousPropertyNameSelection)) {\n previousPropertyNameSelection.text.style(\"fill\", \"black\");\n previousPropertyNameSelection.background.style(\"fill\", \"#f0f0f0\");\n }\n }\n\n // when clicking anywhere else but the collapsed labels disable highlighting\n // of the currently selected one\n $(\"document\").ready(function () {\n $(\"#domain-range\").bind(\"click\", disableCollapsedPredicateLabelHightlighting);\n });\n\n function onCollapsedPropertyNameClick(d) {\n disableCollapsedPredicateLabelHightlighting();\n previousPropertyNameSelection.text = d3.select(this);\n\n previousPropertyNameSelection.background = d3.select(this.previousSibling);\n previousPropertyNameSelection.text.style(\"fill\", \"white\");\n\n previousPropertyNameSelection.background.style(\"fill\", ONTO_BLUE);\n $timeout(function () {\n scope.showPredicatesInfoPanel = true;\n scope.selectedPredicate = d;\n });\n d3.event.stopPropagation();\n }\n\n\n var propertyNames = linkGroup\n .append(\"text\")\n .attr(\"class\", function (d) {\n return d.objectPropNodeClassUri === selectedRdfUri ? \"loop-link-property-name\" : \"property-name\";\n })\n .attr(\"dx\", function (d) {\n // offset text more towards the main class\n return mainClassSize / 2 * (d.propertyType === \"objectLeft\" ? 1 : -1);\n })\n .style(\"text-anchor\", function (d) {\n return d.propertyType === \"objectLeft\" ? \"end\" : \"start\";\n })\n .style(\"font-size\", labelFontSize)\n .text(function (d) {\n return d.targetNodeEdgeCount > 1 ? d.targetNodeEdgeCount + \" predicates\" : d.name;\n });\n\n\n propertyNames\n .each(function (d) {\n var sel = d3.select(this);\n var isCompoundEdge = /\\d\\spredicates/.test(sel.text());\n\n // handle collapsed predicates by making their font bold, make them highlight when clicked\n // and make them trigger the side panel to display the collapsed edges\n if (isCompoundEdge) {\n sel\n .style(\"font-weight\", \"bold\")\n .on(\"click\", onCollapsedPropertyNameClick);\n } else {\n // for regular predicate labels just attach a link to the \"Resources\" view\n // for more helpful information regarding them\n sel.on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.uri), \"_blank\");\n });\n }\n });\n var textPadding = width / 600;\n\n\n var linkRect = linkGroup\n .append(\"rect\")\n .attr(\"class\", function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri ? \"link-background\" : \"loop-link-background\"\n })\n .attr(\"width\", function (d) {\n d.calculatedWidth = this.previousSibling.getBBox().width;\n return d.calculatedWidth + textPadding * 2;\n })\n .attr(\"height\", function (d) {\n d.calculatedHeight = this.previousSibling.getBBox().height;\n return d.calculatedHeight + textPadding;\n })\n .attr(\"transform\", function (d) {\n // offset rect by the same amount as text (besides the padding)\n var translateX = textPadding - mainClassSize / 2 * (d.propertyType === \"objectLeft\" ? 1 : -1);\n if (d.propertyType === \"objectLeft\") {\n translateX += d.calculatedWidth;\n }\n return \"translate(-\" + translateX + \",-\" + (textPadding + d.calculatedHeight / 2) + \")\";\n })\n .on(\"click\", function (d) {\n d3.event.stopPropagation();\n });\n\n\n var nodeGroup = g.selectAll(\".node\")\n .data(graph.nodes)\n .enter()\n .append(\"g\");\n\n var node = nodeGroup\n .filter(function (d) {\n return d.objectPropClassUri !== selectedRdfUri;\n })\n .append(\"circle\")\n .each(function (d) {\n var sel = d3.select(this);\n if (d.classPosition === \"main\") {\n sel.attr({\n class: \"class-node\",\n r: mainClassSize\n })\n .attr(\"marker-end\", \"url(\" + $location.absUrl() + \"#loop-link)\");\n } else if (d.objectPropClassName === null) {\n sel.attr({\n class: \"datatype-node\",\n r: datatypeSize\n });\n } else {\n sel.attr({\n class: \"object-prop-node\",\n r: otherClassSize\n });\n }\n })\n .call(drag);\n\n\n function reloadDomainRangeGraphView(d, collapsed) {\n scope.$apply(function () {\n $rootScope.$broadcast('reloadDomainRangeGraphView', d, collapsed);\n });\n }\n\n d3.selectAll(\".object-prop-node\")\n .on(\"dblclick\", reloadDomainRangeGraphView);\n\n\n nodeGroup\n .filter(function (d) {\n return d.objectPropClassName && d.objectPropClassUri !== selectedRdfUri;\n })\n .append(\"text\")\n .attr(\"class\", function (d) {\n return d.classPosition + \"-class-label\";\n })\n .style(\"font-size\", labelFontSize)\n .text(function (d) {\n return d.objectPropClassName;\n })\n .on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(d.objectPropClassUri), \"_blank\");\n });\n\n var objectPropClassName = nodeGroup.select(\"text\");\n\n g.select(\".class-node\")\n .each(function () {\n d3.select(this.parentNode)\n .append(\"text\")\n .attr(\"class\", \"rdf-class-label\")\n .style(\"font-size\", function (d) {\n return D3.Text.calcFontSize(classNodeLabel, mainClassSize)\n })\n .text(classNodeLabel)\n .on(\"click\", function (d) {\n $window.open(\"resource?uri=\" + encodeURIComponent(selectedRdfUri), \"_blank\");\n });\n });\n\n\n var rdfClassName = g.select(\".class-node + text\"),\n classNode = d3.select(\".class-node\"),\n loopLinkBackgroundSel = d3.selectAll(\".loop-link-background\"),\n loopLinkPropertyName = d3.selectAll(\".loop-link-property-name\");\n\n propertyNames = d3.selectAll(\".property-name\");\n\n if (!angular.isUndefined(loopLink)) {\n var loopLinkBackgroundProps = [];\n\n loopLinkBackgroundSel.each(function (d, i) {\n var sel = d3.select(this);\n loopLinkBackgroundProps.push({\n idx: i,\n width: d.calculatedWidth,\n height: d.calculatedHeight\n });\n });\n }\n\n function tick(e) {\n var k = 8 * e.alpha;\n\n function pushEdgesToLeftAndRight(d) {\n if (d.propertyType === \"objectLeft\") {\n d.source.x -= 8 * k;\n d.source.y -= k / 9;\n } else {\n d.target.x += 8 * k;\n d.target.y -= k / 9;\n }\n }\n\n link\n .filter(function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri;\n })\n .attr(\"x1\", function (d) {\n return d.source.x;\n })\n .attr(\"y1\", function (d) {\n return d.source.y;\n })\n .attr(\"x2\", function (d) {\n return d.targetX;\n })\n .attr(\"y2\", function (d) {\n return d.targetY;\n })\n .each(function (d) {\n pushEdgesToLeftAndRight(d);\n\n // shortens the line to compensate for the circle at the target\n var angle = Math.atan2(d.target.y - d.source.y, d.target.x - d.source.x);\n d.targetX = d.target.x - Math.cos(angle) * d.targetRadius;\n d.targetY = d.target.y - Math.sin(angle) * d.targetRadius;\n });\n\n function positionLoopLink(d) {\n var loopTranslateX = d.x + mainClassSize * 0.96,\n loopTranslateY = d.y - mainClassSize / 5.7 - 5;\n loopLink.attr(\"transform\", \"rotate(270, \" + d.x + \",\" + d.y + \") translate(\" + loopTranslateX + \",\" + loopTranslateY + \")\");\n }\n\n function positionLoopLinkLabels(d) {\n function reposition(sel, i) {\n var foundLoopLinkBackgroundProps =\n $.grep(loopLinkBackgroundProps, function (obj) {\n return obj.idx == i;\n });\n var currentBackgroundHeight = 0;\n if (i > 0) {\n currentBackgroundHeight = parseFloat(2 * i * (foundLoopLinkBackgroundProps[0].height / 1.4));\n }\n\n var loopLinkLabelX = d.x,\n loopLinkLabelY = d.y - mainClassSize * 2.1 - currentBackgroundHeight;\n\n sel\n .attr({\n x: loopLinkLabelX,\n y: loopLinkLabelY\n })\n .moveToFront();\n }\n\n /**\n * Create a \"View more\" label to depict that the are more reflexive link labels\n * left that could be seen in the side panel when clicking this label.\n *\n * @param labelSel\n * d3 selection of the text label\n * @param backgroundSel\n * d3 selection of the rectangle element background\n * @param predicatesLeft\n * number of predicates left that are collapsed\n */\n function createViewMorePredicatesLabel(labelSel, backgroundSel, predicatesLeft) {\n labelSel\n .classed(\"view-more-preds-label\", true)\n .text(predicatesLeft + \" predicates more ...\");\n if (this.nextSibling !== null) {\n backgroundSel\n .classed(\"view-more-preds-rect\", true);\n }\n }\n\n loopLinkPropertyName.each(function (dd, i) {\n var sel = d3.select(this);\n\n var predicatesLeft = loopLinkPropertyName.size() - NON_COLLAPSED_REFLEXIVE_LINK_LIMIT;\n if (predicatesLeft < 0) {\n reposition(sel, i);\n } else {\n if (i == 0 && !scope.collapseEdges && predicatesLeft > 1) {\n createViewMorePredicatesLabel(sel, d3.select(this.nextSibling), predicatesLeft);\n reposition(sel, i);\n }\n\n if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n reposition(sel, i);\n } else {\n sel.remove();\n }\n }\n });\n // loopLinkPropertyName.each(function (dd, i) {\n // var sel = d3.select(this);\n // if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n // reposition(sel, i);\n // } else if (i == NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n // createViewMorePredicatesLabel(sel, d3.select(this.nextSibling));\n // reposition(sel, i);\n // } else {\n // sel.remove();\n // }\n // });\n }\n\n function positionLoopLinkBackgrounds(d) {\n var loopLinkBackgroundY = d.x + mainClassSize * 2,\n loopLinkBackgroundX = d.y - mainClassSize / 1.9;\n\n function reposition(sel, i) {\n var foundLoopLinkBackgroundProps =\n $.grep(loopLinkBackgroundProps, function (obj) {\n return obj.idx == i;\n });\n if (i > 0) {\n loopLinkBackgroundY += parseFloat(i * (foundLoopLinkBackgroundProps[0].height / (i / 1.4)));\n }\n\n sel\n .attr({\n transform: \"rotate(270, \" + d.x + \",\" + d.y + \") translate(\" + loopLinkBackgroundY + \",\" + loopLinkBackgroundX + \")\",\n width: foundLoopLinkBackgroundProps[0].height,\n height: foundLoopLinkBackgroundProps[0].width\n });\n }\n\n /**\n * Adjust new width of \"View more\" label background and add all reflexive link metadata the this\n * label in order to render them in the side panel.\n *\n * @param allLoopLinkEdges\n * all reflexive links to the current class\n */\n function adjustViewMorePredicatesLabel(allLoopLinkEdges) {\n var viewMoreTextWidth;\n d3.select(\".view-more-preds-label\")\n // make label bold to resemble a collapsed label\n .style(\"font-weight\", \"bold\")\n .each(function (d) {\n // attach all reflexive links to the \"view more\" collapsed predicate\n // because in non collapsed mode the backend does not provide them\n d.target.allEdges = allLoopLinkEdges;\n\n // calculate text width in pixels in order to adjust background width accordingly\n viewMoreTextWidth = this.getComputedTextLength();\n })\n .on(\"click\", onCollapsedPropertyNameClick);\n\n d3.select(\".view-more-preds-rect\")\n // we modify height property instead of width because they are reversed\n // when we repositioned loop link labels\n .attr(\"height\", viewMoreTextWidth + 2 * textPadding);\n }\n\n var allLoopLinkEdges = [];\n loopLinkBackgroundSel.each(function (dd, i) {\n allLoopLinkEdges.push(dd);\n if (i < NON_COLLAPSED_REFLEXIVE_LINK_LIMIT) {\n reposition(d3.select(this), i);\n } else {\n d3.select(this).remove();\n }\n });\n\n adjustViewMorePredicatesLabel(allLoopLinkEdges);\n }\n\n\n function centerClassNode(d) {\n if (!(window.ActiveXObject) && \"ActiveXObject\" in window) {\n Math.log10 = function (x) {\n return Math.log(x) / Math.LN10;\n };\n }\n var absDiff = classNode.attr(\"cx\") - width / 2,\n logOffset = Math.log10(Math.abs(absDiff)) * 0.5;\n d.x += absDiff > 0 ? -logOffset : logOffset;\n return d.x;\n }\n\n node\n .each(function (d) {\n if (d.classPosition === \"main\" && !angular.isUndefined(loopLink)) {\n positionLoopLink(d);\n positionLoopLinkLabels(d);\n positionLoopLinkBackgrounds(d);\n }\n\n if (d.objectPropClassUri !== selectedRdfUri) {\n d3.select(this)\n .attr(\"cx\", function (d) {\n // pushes the main class circle to the centre\n if (d.classPosition === \"main\") {\n return centerClassNode(d);\n }\n return d.x;\n })\n .attr(\"cy\", function (d) {\n return d.y;\n });\n }\n });\n\n\n rdfClassName\n .attr(\"x\", function (d) {\n return d.x;\n })\n .attr(\"y\", function (d) {\n return d.y;\n })\n .moveToFront();\n\n\n linkRect\n .filter(function (d) {\n return d.objectPropNodeClassUri !== selectedRdfUri;\n })\n .attr(\"x\", function (d) {\n if (d.target.x > d.source.x) {\n return (d.source.x + (d.target.x - d.source.x) / 2);\n } else {\n return (d.target.x + (d.source.x - d.target.x) / 2);\n }\n })\n .attr(\"y\", function (d) {\n if (d.target.y > d.source.y) {\n return (d.source.y + (d.target.y - d.source.y) / 2);\n } else {\n return (d.target.y + (d.source.y - d.target.y) / 2);\n }\n })\n .moveToFront();\n\n\n propertyNames\n .attr(\"x\", function (d) {\n if (d.target.x > d.source.x) {\n return (d.source.x + (d.target.x - d.source.x) / 2);\n } else {\n return (d.target.x + (d.source.x - d.target.x) / 2);\n }\n })\n .attr(\"y\", function (d) {\n if (d.target.y > d.source.y) {\n return (d.source.y + (d.target.y - d.source.y) / 2);\n } else {\n return (d.target.y + (d.source.y - d.target.y) / 2);\n }\n })\n .moveToFront();\n\n\n objectPropClassName\n .attr(\"x\", function (d) {\n if (d.classPosition === \"right\") {\n return d.x + otherClassSize * 1.2;\n } else {\n return d.x - otherClassSize * 1.2;\n }\n })\n .attr(\"y\", function (d) {\n return d.y;\n })\n .moveToFront();\n }\n\n\n force\n .on(\"tick\", tick)\n .linkDistance(width / 3.5)\n .start();\n\n }\n });\n\n function dragstart(d) {\n d3.select(this)\n .classed(\"selected\", d.selected = true);\n }\n }\n}\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[3,86],{40:function(e,t,n){"use strict";n.r(t),n.d(t,"NodeState",(function(){return o})),n.d(t,"LinkState",(function(){return r}));n(3),n(50);angular.module("graphdb.framework.clustermanagement.controllers",["ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.rest.repositories.service","graphdb.framework.rest.cluster.service","toastr","pageslide-directive"]).controller("ClusterManagementCtrl",s).controller("CreateClusterCtrl",l).controller("DeleteClusterCtrl",c).controller("EditClusterCtrl",d).controller("AddLocationFromClusterCtrl",u).controller("AddNodesDialogCtrl",f).controller("RemoveNodesDialogCtrl",m).factory("RemoteLocationsService",i);const o={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",DELETED:"DELETED"},r={IN_SYNC:"IN_SYNC",OUT_OF_SYNC:"OUT_OF_SYNC",SYNCING:"SYNCING",NO_CONNECTION:"NO_CONNECTION"};function s(e,t,n,s,a,l,c,i,u,d,g,f,m,p,C){function h(t){e.getClusterStatus().then(()=>{if(t||!e.clusterConfiguration)return e.getClusterConfiguration()}).then(()=>{if(!e.currentNode||e.leaderChanged)return e.getCurrentNodeStatus()}).finally(()=>e.childContext.redraw())}function _(){return C.getLocationsWithRpcAddresses().then(t=>{const n=t.find(e=>e.isLocal);n&&(n.endpoint=e.currentNode.endpoint,n.rpcAddress=e.currentNode.address),e.clusterModel.locations=t})}function N(t){s.success(t),e.getClusterConfiguration()}function L(e,t,n){let o=e.message||e;400===t&&Array.isArray(e)?o=e.reduce((e,t)=>e+=`<div>${t}</div>`,""):412===t&&(o=Object.keys(e).reduce((t,n)=>t+=`<div>${n} - ${e[n]}</div>`,"")),s.error(o,n,{allowHtml:!0})}e.loader=!0,e.isLeader=!1,e.currentNode=null,e.clusterModel={},e.NodeState=o,e.leaderChanged=!1,e.currentLeader=null,e.childContext={},e.shouldShowClusterSettingsPanel=!1,e.onopen=e.onclose=()=>angular.noop(),e.toggleSidePanel=()=>{e.shouldShowClusterSettingsPanel=!e.shouldShowClusterSettingsPanel},e.toggleLegend=()=>{e.childContext.toggleLegend&&e.childContext.toggleLegend()},e.setLoader=function(t,n){g.cancel(e.loaderTimeout),t?(e.loaderMessage=n,e.loaderTimeout=g((function(){e.loader=t}),50)):e.loader=!1},e.childContext.selectNode=function(t){e.selectedNode!==t?e.selectedNode=t:e.selectedNode=null,e.$apply()},e.getLoaderMessage=function(){return e.loaderMessage||p.instant("common.loading")},e.getClusterConfiguration=()=>f.getClusterConfig().then(t=>{if(e.clusterConfiguration=t.data,!e.currentNode)return e.getCurrentNodeStatus()}).catch(()=>{e.clusterConfiguration=null}),e.getClusterStatus=function(){return f.getClusterStatus().then((function(t){const n=t.data.slice(),s=n.find(e=>e.nodeState===o.LEADER);var a,l;a=e.currentLeader,(l=s)&&a&&a.address===l.address||(e.currentLeader=s,e.leaderChanged=!0),e.currentNode=n.find(t=>t.address===e.currentNode.address);const c=[];s&&Object.keys(s.syncStatus).forEach(e=>{const t=s.syncStatus[e];t!==r.NO_CONNECTION&&c.push({id:`${s.address}-${e}`,source:s.address,target:e,status:t})}),e.clusterModel.hasCluster=!0,e.clusterModel.nodes=n,e.clusterModel.links=c})).catch((function(t){404===t.status&&(e.clusterModel.hasCluster=!1,e.clusterModel.nodes=[],e.clusterModel.links=[],e.clusterConfiguration=null)}))},e.showCreateClusterDialog=function(){l.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-create-dialog.html",controller:"CreateClusterCtrl",size:"lg",resolve:{data:function(){return{clusterModel:e.clusterModel}}}}).result.finally((function(){_(),h(!0)}))},e.showDeleteDialog=()=>{l.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-delete-dialog.html",controller:"DeleteClusterCtrl"}).result.then((function(t){const n=p.instant("cluster_management.delete_cluster_dialog.loader_message");e.setLoader(!0,n),f.deleteCluster(t).then(t=>{if(Object.values(t.data).every(e=>e===o.DELETED)){const e=p.instant("cluster_management.delete_cluster_dialog.notifications.success_delete");s.success(e)}else{const e=p.instant("cluster_management.delete_cluster_dialog.notifications.success_delete_partial"),n=Object.keys(t.data).reduce((e,n)=>e+=`<div>${n} - ${t.data[n]}</div>`,"");s.success(n,e,{allowHtml:!0})}e.getClusterConfiguration()}).catch(e=>{const t=p.instant("cluster_management.delete_cluster_dialog.notifications.fail_delete"),n=Object.keys(e.data).reduce((t,n)=>t+=`<div>${n} - ${e.data[n]}</div>`,"");s.error(n,t,{allowHtml:!0})}).finally(()=>{e.setLoader(!1),h(!0)})}))},e.showEditConfigurationDialog=()=>{l.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-edit-dialog.html",controller:"EditClusterCtrl",size:"lg",resolve:{data:function(){return{clusterConfiguration:e.clusterConfiguration}}}}).result.finally((function(){h(!0)}))},e.getCurrentNodeStatus=()=>f.getNodeStatus().then(t=>{e.leaderChanged=!1,e.currentNode=t.data}).catch(t=>{e.currentNode=t.data,e.clusterModel.hasCluster=!1}).then(()=>_()),e.showAddNodeToClusterDialog=()=>{l.open({templateUrl:"js/angular/clustermanagement/templates/modal/add-nodes-dialog.html",controller:"AddNodesDialogCtrl",size:"lg",resolve:{data:function(){return{clusterModel:e.clusterModel,clusterConfiguration:e.clusterConfiguration}}}}).result.then((function(t){const n=p.instant("cluster_management.cluster_page.add_nodes_loader");e.setLoader(!0,n);const o=t.map(e=>e.rpcAddress);f.addNodesToCluster(o).then(()=>{N(p.instant("cluster_management.cluster_page.notifications.add_nodes_success"))}).catch(e=>{const t=p.instant("cluster_management.cluster_page.notifications.add_nodes_fail");L(e.data,e.status,t)}).finally(()=>{e.setLoader(!1),h(!0)})})).finally(()=>_())},e.showRemoveNodesFromClusterDialog=()=>{l.open({templateUrl:"js/angular/clustermanagement/templates/modal/remove-nodes-dialog.html",controller:"RemoveNodesDialogCtrl",size:"lg",resolve:{data:function(){return{clusterModel:e.clusterModel}}}}).result.then((function(t){const n=p.instant("cluster_management.cluster_page.remove_nodes_loader");e.setLoader(!0,n);const o=t.map(e=>e.address);f.removeNodesFromCluster(o).then(()=>{N(p.instant("cluster_management.cluster_page.notifications.remove_nodes_success"))}).catch(e=>{const t=p.instant("cluster_management.cluster_page.notifications.remove_nodes_fail");L(e.data,e.status,t)}).finally(()=>{e.setLoader(!1),h(!0)})}))},(e.loader=!0,e.getCurrentNodeStatus().then(()=>e.getClusterConfiguration()).then(()=>e.getClusterStatus()).finally(()=>{e.setLoader(!1)})).finally(()=>{const t=u((function(){h()}),1e3);e.$on("$destroy",(function(){u.cancel(t)}))});const $=angular.element(i),v=function(){e.childContext.resize()};$.bind("resize",v);const S=function(t){const n=t.target,o=document.getElementById("nodeTooltip");e.selectedNode&&o!==n&&!o.contains(n)&&e.childContext.selectNode(null)};$.bind("mousedown",S),e.$on("$destroy",(function(){$.unbind("resize",v),$.unbind("mousedown",S)}))}s.$inject=["$scope","$http","$q","toastr","$repositories","$modal","$sce","$window","$interval","ModalService","$timeout","ClusterRestService","$location","$translate","RemoteLocationsService"];const a=function(){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"};function l(e,t,n,o,r,s,l,c,i){e.pageTitle=s.instant("cluster_management.cluster_page.create_page_title"),e.autofocusId="autofocus",e.errors=[],e.clusterConfiguration={electionMinTimeout:2e4,electionRangeTimeout:1e4,heartbeatInterval:2e3,messageSizeKB:64,verificationTimeout:1500,nodes:[]},e.locations=l.clusterModel.locations.filter(e=>!e.isLocal),e.selectedLocations=l.clusterModel.locations.filter(e=>e.isLocal),e.loader=!1,e.getAdvancedOptionsClass=a,e.createCluster=function(){return e.setLoader(!0,s.instant("cluster_management.cluster_page.creating_cluster_loader")),e.clusterConfiguration.nodes=e.selectedLocations.map(e=>e.rpcAddress),o.createCluster(e.clusterConfiguration).then(()=>{r.success(s.instant("cluster_management.cluster_page.notifications.create_success")),t.close()}).catch((function(t){!function(t,n){delete e.preconditionErrors,r.error(s.instant("cluster_management.cluster_page.notifications.create_failed")),e.errors.splice(0),412===n?e.preconditionErrors=Object.keys(t).map(e=>`${e} - ${t[e]}`):400===n?e.errors.push(...t):409===n&&e.errors.push(t)}(t.data,t.status)})).finally(()=>e.setLoader(!1))},e.isClusterConfigurationValid=()=>{const t=!e.clusterConfigurationForm.$invalid,n=e.selectedLocations&&e.selectedLocations.length>=2;return t&&n},e.setLoader=function(t,o){n.cancel(e.loaderTimeout),t?e.loaderTimeout=n((function(){e.loader=t,e.loaderMessage=o}),300):e.loader=!1},e.addNodeToList=function(t){t.rpcAddress&&(e.selectedLocations.push(t),e.locations=e.locations.filter(e=>e.endpoint!==t.endpoint))},e.removeNodeFromList=function(t,n){e.selectedLocations.splice(t,1),e.locations.push(n)},e.addLocation=function(){i.addLocation().then(t=>{t&&e.locations.push(t)})},e.ok=function(){e.isClusterConfigurationValid()?e.createCluster():r.warning(s.instant("cluster_management.cluster_page.notifications.form_invalid"))},e.cancel=function(){t.dismiss("cancel")}}function c(e,t){e.forceDelete=!1,e.ok=function(){t.close(e.forceDelete)},e.cancel=function(){t.dismiss("cancel")}}function i(e,t,n,o,r){return{addLocation:function(){let e;return n.open({templateUrl:"js/angular/templates/modal/add-location.html",windowClass:"addLocationDialog",controller:"AddLocationFromClusterCtrl"}).result.then(n=>(e=n,e.isLocal=!1,e.endpoint=e.uri,function(e){let n;return o.addLocation(e).catch(e=>{const n=getError(e.data,e.status);return t.error(n,r.instant("common.error")),!1}).then(e=>!!e&&s()).then(t=>{if(!1!==t)return n=t.find(t=>t.endpoint===e.uri),n})}(e)))},getLocationsWithRpcAddresses:s};function s(){return o.getLocations().then((function(e){return e.data.map(e=>({isLocal:e.local,endpoint:e.uri,rpcAddress:e.rpcAddress||"",error:e.errorMsg}))})).catch((function(e){const n=getError(e.data,e.status);t.error(n,r.instant("common.error"))})).then(e=>{if(e)return function(e){const t=e.filter(e=>!e.isLocal&&!e.error).map(e=>(function(e){return o.getLocationRpcAddress(e.endpoint)})(e).then(t=>(e.rpcAddress=t.data,e.isAvailable=!0,e)).catch(t=>{e.isAvailable=!1,e.error=getError(t.data,t.status)}));return Promise.allSettled(t).then(()=>e)}(e)})}}function u(e,t,n,o,r){e.newLocation={uri:"",authType:"signature",username:"",password:"",active:!1},e.docBase=g(o),e.isValidLocation=function(){return(e.newLocation.uri.length<6||0===e.newLocation.uri.indexOf("http:")||0===e.newLocation.uri.indexOf("https:"))&&e.newLocation.uri.indexOf("/repositories")<=-1},e.ok=function(){e.newLocation?t.close(e.newLocation):n.error(r.instant("location.cannot.be.empty.error"))},e.cancel=function(){t.dismiss("cancel")}}function d(e,t,n,o,r,s,a){e.pageTitle=s.instant("cluster_management.cluster_page.edit_page_title"),e.errors=[],e.clusterConfiguration=angular.copy(a.clusterConfiguration),e.loader=!1,e.updateCluster=function(){return e.setLoader(!0,s.instant("cluster_management.cluster_page.updating_cluster_loader")),o.updateCluster(e.clusterConfiguration).then(()=>{r.success(s.instant("cluster_management.cluster_page.notifications.update_success")),t.close()}).catch((function(t){!function(t,n){delete e.preconditionErrors,r.error(s.instant("cluster_management.cluster_page.notifications.update_failed")),e.errors.splice(0),409===n||"string"==typeof t?e.errors.push(t):412===n?e.preconditionErrors=Object.keys(t).map(e=>`${e} - ${t[e]}`):400===n&&e.errors.push(...t)}(t.data,t.status)})).finally(()=>e.setLoader(!1))},e.isClusterConfigurationValid=()=>!e.clusterConfigurationForm.$invalid,e.setLoader=function(t,o){n.cancel(e.loaderTimeout),t?e.loaderTimeout=n((function(){e.loader=t,e.loaderMessage=o}),300):e.loader=!1},e.ok=function(){e.isClusterConfigurationValid()?e.updateCluster():r.warning(s.instant("cluster_management.cluster_page.notifications.form_invalid"))},e.cancel=function(){t.dismiss("cancel")}}l.$inject=["$scope","$modalInstance","$timeout","ClusterRestService","toastr","$translate","data","$modal","RemoteLocationsService"],c.$inject=["$scope","$modalInstance"],i.$inject=["$http","toastr","$modal","LocationsRestService","$translate"],u.$inject=["$scope","$modalInstance","toastr","productInfo","$translate"],d.$inject=["$scope","$modalInstance","$timeout","ClusterRestService","toastr","$translate","data"];const g=function(e){return`https://graphdb.ontotext.com/documentation/${e.productShortVersion}/${e.productType}`};function f(e,t,n,o,r){const s=angular.copy(n.clusterConfiguration),a=angular.copy(n.clusterModel);e.nodes=[],e.clusterNodes=a.locations.filter(e=>s.nodes.includes(e.rpcAddress)),e.locations=a.locations.filter(t=>!e.clusterNodes.includes(t)),e.locations.forEach(e=>e.isNew=!0),e.addNodeToList=function(t){t.rpcAddress&&(e.nodes.push(t),e.locations=e.locations.filter(e=>e.endpoint!==t.endpoint))},e.removeNodeFromList=function(t,n){e.nodes.splice(t,1),e.locations.push(n)},e.addLocation=function(){r.addLocation().then(t=>{t&&e.locations.push(t)})},e.ok=function(){t.close(e.nodes)},e.cancel=function(){t.dismiss("cancel")}}function m(e,t,n){const o=angular.copy(n.clusterModel);e.clusterNodes=o.nodes,e.clusterNodes.forEach(e=>e.shouldRemove=!1),e.nodesToRemoveCount=0,e.leftNodesLessThanTwo=!1,e.toggleNode=function(t,n){n.shouldRemove=!n.shouldRemove,n.shouldRemove?e.nodesToRemoveCount++:e.nodesToRemoveCount--,e.leftNodesLessThanTwo=e.clusterNodes.length-e.nodesToRemoveCount<2},e.ok=function(){const n=e.clusterNodes.filter(e=>e.shouldRemove);t.close(n)},e.cancel=function(){t.dismiss("cancel")}}f.$inject=["$scope","$modalInstance","data","$modal","RemoteLocationsService"],m.$inject=["$scope","$modalInstance","data"]},50:function(e,t){angular.module("graphdb.framework.rest.cluster.service",[]).factory("ClusterRestService",o),o.$inject=["$http"];const n="rest/cluster";function o(e){return{getClusterConfig:function(){return e.get(`${n}/config`)},createCluster:function(t){return e.post(`${n}/config`,t)},updateCluster:function(t){t.nodes&&delete t.nodes;return e.patch(`${n}/config`,t)},deleteCluster:function(t){const o=$.param({force:t});return e.delete(`${n}/config?${o}`)},addNodesToCluster:function(t){return e.post(`${n}/config/node`,{nodes:t})},removeNodesFromCluster:function(t){return e.delete(`${n}/config/node`,{data:{nodes:t},headers:{"Content-Type":"application/json"}})},getClusterStatus:function(){return e.get(`${n}/group/status`)},getNodeStatus:function(){return e.get(`${n}/node/status`)}}}}}]);
|
|
2
|
-
//# sourceMappingURL=3.
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[3,86],{40:function(e,t,n){"use strict";n.r(t),n.d(t,"NodeState",(function(){return o})),n.d(t,"LinkState",(function(){return r}));n(3),n(50);angular.module("graphdb.framework.clustermanagement.controllers",["ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.rest.repositories.service","graphdb.framework.rest.cluster.service","toastr","pageslide-directive"]).controller("ClusterManagementCtrl",s).controller("CreateClusterCtrl",l).controller("DeleteClusterCtrl",c).controller("EditClusterCtrl",d).controller("AddLocationFromClusterCtrl",u).controller("AddNodesDialogCtrl",f).controller("RemoveNodesDialogCtrl",m).factory("RemoteLocationsService",i);const o={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",DELETED:"DELETED"},r={IN_SYNC:"IN_SYNC",OUT_OF_SYNC:"OUT_OF_SYNC",SYNCING:"SYNCING",NO_CONNECTION:"NO_CONNECTION"};function s(e,t,n,s,a,l,c,i,u,d,g,f,m,p,C){function h(t){e.getClusterStatus().then(()=>{if(t||!e.clusterConfiguration)return e.getClusterConfiguration()}).then(()=>{if(!e.currentNode||e.leaderChanged)return e.getCurrentNodeStatus()}).finally(()=>e.childContext.redraw())}function _(){return C.getLocationsWithRpcAddresses().then(t=>{const n=t.find(e=>e.isLocal);n&&(n.endpoint=e.currentNode.endpoint,n.rpcAddress=e.currentNode.address),e.clusterModel.locations=t})}function N(t){s.success(t),e.getClusterConfiguration()}function L(e,t,n){let o=e.message||e;400===t&&Array.isArray(e)?o=e.reduce((e,t)=>e+=`<div>${t}</div>`,""):412===t&&(o=Object.keys(e).reduce((t,n)=>t+=`<div>${n} - ${e[n]}</div>`,"")),s.error(o,n,{allowHtml:!0})}e.loader=!0,e.isLeader=!1,e.currentNode=null,e.clusterModel={},e.NodeState=o,e.leaderChanged=!1,e.currentLeader=null,e.childContext={},e.shouldShowClusterSettingsPanel=!1,e.onopen=e.onclose=()=>angular.noop(),e.toggleSidePanel=()=>{e.shouldShowClusterSettingsPanel=!e.shouldShowClusterSettingsPanel},e.toggleLegend=()=>{e.childContext.toggleLegend&&e.childContext.toggleLegend()},e.setLoader=function(t,n){g.cancel(e.loaderTimeout),t?(e.loaderMessage=n,e.loaderTimeout=g((function(){e.loader=t}),50)):e.loader=!1},e.childContext.selectNode=function(t){e.selectedNode!==t?e.selectedNode=t:e.selectedNode=null,e.$apply()},e.getLoaderMessage=function(){return e.loaderMessage||p.instant("common.loading")},e.getClusterConfiguration=()=>f.getClusterConfig().then(t=>{if(e.clusterConfiguration=t.data,!e.currentNode)return e.getCurrentNodeStatus()}).catch(()=>{e.clusterConfiguration=null}),e.getClusterStatus=function(){return f.getClusterStatus().then((function(t){const n=t.data.slice(),s=n.find(e=>e.nodeState===o.LEADER);var a,l;a=e.currentLeader,(l=s)&&a&&a.address===l.address||(e.currentLeader=s,e.leaderChanged=!0),e.currentNode=n.find(t=>t.address===e.currentNode.address);const c=[];s&&Object.keys(s.syncStatus).forEach(e=>{const t=s.syncStatus[e];t!==r.NO_CONNECTION&&c.push({id:`${s.address}-${e}`,source:s.address,target:e,status:t})}),e.clusterModel.hasCluster=!0,e.clusterModel.nodes=n,e.clusterModel.links=c})).catch((function(t){404===t.status&&(e.clusterModel.hasCluster=!1,e.clusterModel.nodes=[],e.clusterModel.links=[],e.clusterConfiguration=null)}))},e.showCreateClusterDialog=function(){l.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-create-dialog.html",controller:"CreateClusterCtrl",size:"lg",resolve:{data:function(){return{clusterModel:e.clusterModel}}}}).result.finally((function(){_(),h(!0)}))},e.showDeleteDialog=()=>{l.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-delete-dialog.html",controller:"DeleteClusterCtrl"}).result.then((function(t){const n=p.instant("cluster_management.delete_cluster_dialog.loader_message");e.setLoader(!0,n),f.deleteCluster(t).then(t=>{if(Object.values(t.data).every(e=>e===o.DELETED)){const e=p.instant("cluster_management.delete_cluster_dialog.notifications.success_delete");s.success(e)}else{const e=p.instant("cluster_management.delete_cluster_dialog.notifications.success_delete_partial"),n=Object.keys(t.data).reduce((e,n)=>e+=`<div>${n} - ${t.data[n]}</div>`,"");s.success(n,e,{allowHtml:!0})}e.getClusterConfiguration()}).catch(e=>{const t=p.instant("cluster_management.delete_cluster_dialog.notifications.fail_delete"),n=Object.keys(e.data).reduce((t,n)=>t+=`<div>${n} - ${e.data[n]}</div>`,"");s.error(n,t,{allowHtml:!0})}).finally(()=>{e.setLoader(!1),h(!0)})}))},e.showEditConfigurationDialog=()=>{l.open({templateUrl:"js/angular/clustermanagement/templates/modal/cluster-edit-dialog.html",controller:"EditClusterCtrl",size:"lg",resolve:{data:function(){return{clusterConfiguration:e.clusterConfiguration}}}}).result.finally((function(){h(!0)}))},e.getCurrentNodeStatus=()=>f.getNodeStatus().then(t=>{e.leaderChanged=!1,e.currentNode=t.data}).catch(t=>{e.currentNode=t.data,e.clusterModel.hasCluster=!1}).then(()=>_()),e.showAddNodeToClusterDialog=()=>{l.open({templateUrl:"js/angular/clustermanagement/templates/modal/add-nodes-dialog.html",controller:"AddNodesDialogCtrl",size:"lg",resolve:{data:function(){return{clusterModel:e.clusterModel,clusterConfiguration:e.clusterConfiguration}}}}).result.then((function(t){const n=p.instant("cluster_management.cluster_page.add_nodes_loader");e.setLoader(!0,n);const o=t.map(e=>e.rpcAddress);f.addNodesToCluster(o).then(()=>{N(p.instant("cluster_management.cluster_page.notifications.add_nodes_success"))}).catch(e=>{const t=p.instant("cluster_management.cluster_page.notifications.add_nodes_fail");L(e.data,e.status,t)}).finally(()=>{e.setLoader(!1),h(!0)})})).finally(()=>_())},e.showRemoveNodesFromClusterDialog=()=>{l.open({templateUrl:"js/angular/clustermanagement/templates/modal/remove-nodes-dialog.html",controller:"RemoveNodesDialogCtrl",size:"lg",resolve:{data:function(){return{clusterModel:e.clusterModel}}}}).result.then((function(t){const n=p.instant("cluster_management.cluster_page.remove_nodes_loader");e.setLoader(!0,n);const o=t.map(e=>e.address);f.removeNodesFromCluster(o).then(()=>{N(p.instant("cluster_management.cluster_page.notifications.remove_nodes_success"))}).catch(e=>{const t=p.instant("cluster_management.cluster_page.notifications.remove_nodes_fail");L(e.data,e.status,t)}).finally(()=>{e.setLoader(!1),h(!0)})}))},(e.loader=!0,e.getCurrentNodeStatus().then(()=>e.getClusterConfiguration()).then(()=>e.getClusterStatus()).finally(()=>{e.setLoader(!1)})).finally(()=>{const t=u((function(){h()}),1e3);e.$on("$destroy",(function(){u.cancel(t)}))});const $=angular.element(i),v=function(){e.childContext.resize()};$.bind("resize",v);const S=function(t){const n=t.target,o=document.getElementById("nodeTooltip");e.selectedNode&&o!==n&&!o.contains(n)&&e.childContext.selectNode(null)};$.bind("mousedown",S),e.$on("$destroy",(function(){$.unbind("resize",v),$.unbind("mousedown",S)}))}s.$inject=["$scope","$http","$q","toastr","$repositories","$modal","$sce","$window","$interval","ModalService","$timeout","ClusterRestService","$location","$translate","RemoteLocationsService"];const a=function(){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"};function l(e,t,n,o,r,s,l,c,i){e.pageTitle=s.instant("cluster_management.cluster_page.create_page_title"),e.autofocusId="autofocus",e.errors=[],e.clusterConfiguration={electionMinTimeout:2e4,electionRangeTimeout:1e4,heartbeatInterval:2e3,messageSizeKB:64,verificationTimeout:1500,nodes:[]},e.locations=l.clusterModel.locations.filter(e=>!e.isLocal),e.selectedLocations=l.clusterModel.locations.filter(e=>e.isLocal),e.loader=!1,e.getAdvancedOptionsClass=a,e.createCluster=function(){return e.setLoader(!0,s.instant("cluster_management.cluster_page.creating_cluster_loader")),e.clusterConfiguration.nodes=e.selectedLocations.map(e=>e.rpcAddress),o.createCluster(e.clusterConfiguration).then(()=>{r.success(s.instant("cluster_management.cluster_page.notifications.create_success")),t.close()}).catch((function(t){!function(t,n){delete e.preconditionErrors,r.error(s.instant("cluster_management.cluster_page.notifications.create_failed")),e.errors.splice(0),412===n?e.preconditionErrors=Object.keys(t).map(e=>`${e} - ${t[e]}`):400===n?e.errors.push(...t):409===n&&e.errors.push(t)}(t.data,t.status)})).finally(()=>e.setLoader(!1))},e.isClusterConfigurationValid=()=>{const t=!e.clusterConfigurationForm.$invalid,n=e.selectedLocations&&e.selectedLocations.length>=2;return t&&n},e.setLoader=function(t,o){n.cancel(e.loaderTimeout),t?e.loaderTimeout=n((function(){e.loader=t,e.loaderMessage=o}),300):e.loader=!1},e.addNodeToList=function(t){t.rpcAddress&&(e.selectedLocations.push(t),e.locations=e.locations.filter(e=>e.endpoint!==t.endpoint))},e.removeNodeFromList=function(t,n){e.selectedLocations.splice(t,1),e.locations.push(n)},e.addLocation=function(){i.addLocation().then(t=>{t&&e.locations.push(t)})},e.ok=function(){e.isClusterConfigurationValid()?e.createCluster():r.warning(s.instant("cluster_management.cluster_page.notifications.form_invalid"))},e.cancel=function(){t.dismiss("cancel")}}function c(e,t){e.forceDelete=!1,e.ok=function(){t.close(e.forceDelete)},e.cancel=function(){t.dismiss("cancel")}}function i(e,t,n,o,r){return{addLocation:function(){let e;return n.open({templateUrl:"js/angular/templates/modal/add-location.html",windowClass:"addLocationDialog",controller:"AddLocationFromClusterCtrl"}).result.then(n=>(e=n,e.isLocal=!1,e.endpoint=e.uri,function(e){let n;return o.addLocation(e).catch(e=>{const n=getError(e.data,e.status);return t.error(n,r.instant("common.error")),!1}).then(e=>!!e&&s()).then(t=>{if(!1!==t)return n=t.find(t=>t.endpoint===e.uri),n})}(e)))},getLocationsWithRpcAddresses:s};function s(){return o.getLocations().then((function(e){return e.data.map(e=>({isLocal:e.local,endpoint:e.uri,rpcAddress:e.rpcAddress||"",error:e.errorMsg}))})).catch((function(e){const n=getError(e.data,e.status);t.error(n,r.instant("common.error"))})).then(e=>{if(e)return function(e){const t=e.filter(e=>!e.isLocal&&!e.error).map(e=>(function(e){return o.getLocationRpcAddress(e.endpoint)})(e).then(t=>(e.rpcAddress=t.data,e.isAvailable=!0,e)).catch(t=>{e.isAvailable=!1,e.error=getError(t.data,t.status)}));return Promise.allSettled(t).then(()=>e)}(e)})}}function u(e,t,n,o,r){e.newLocation={uri:"",authType:"signature",username:"",password:"",active:!1},e.docBase=g(o),e.isValidLocation=function(){return(e.newLocation.uri.length<6||0===e.newLocation.uri.indexOf("http:")||0===e.newLocation.uri.indexOf("https:"))&&e.newLocation.uri.indexOf("/repositories")<=-1},e.ok=function(){e.newLocation?t.close(e.newLocation):n.error(r.instant("location.cannot.be.empty.error"))},e.cancel=function(){t.dismiss("cancel")}}function d(e,t,n,o,r,s,a){e.pageTitle=s.instant("cluster_management.cluster_page.edit_page_title"),e.errors=[],e.clusterConfiguration=angular.copy(a.clusterConfiguration),e.loader=!1,e.updateCluster=function(){return e.setLoader(!0,s.instant("cluster_management.cluster_page.updating_cluster_loader")),o.updateCluster(e.clusterConfiguration).then(()=>{r.success(s.instant("cluster_management.cluster_page.notifications.update_success")),t.close()}).catch((function(t){!function(t,n){delete e.preconditionErrors,r.error(s.instant("cluster_management.cluster_page.notifications.update_failed")),e.errors.splice(0),409===n||"string"==typeof t?e.errors.push(t):412===n?e.preconditionErrors=Object.keys(t).map(e=>`${e} - ${t[e]}`):400===n&&e.errors.push(...t)}(t.data,t.status)})).finally(()=>e.setLoader(!1))},e.isClusterConfigurationValid=()=>!e.clusterConfigurationForm.$invalid,e.setLoader=function(t,o){n.cancel(e.loaderTimeout),t?e.loaderTimeout=n((function(){e.loader=t,e.loaderMessage=o}),300):e.loader=!1},e.ok=function(){e.isClusterConfigurationValid()?e.updateCluster():r.warning(s.instant("cluster_management.cluster_page.notifications.form_invalid"))},e.cancel=function(){t.dismiss("cancel")}}l.$inject=["$scope","$modalInstance","$timeout","ClusterRestService","toastr","$translate","data","$modal","RemoteLocationsService"],c.$inject=["$scope","$modalInstance"],i.$inject=["$http","toastr","$modal","LocationsRestService","$translate"],u.$inject=["$scope","$modalInstance","toastr","productInfo","$translate"],d.$inject=["$scope","$modalInstance","$timeout","ClusterRestService","toastr","$translate","data"];const g=function(e){return`https://graphdb.ontotext.com/documentation/${e.productShortVersion}`};function f(e,t,n,o,r){const s=angular.copy(n.clusterConfiguration),a=angular.copy(n.clusterModel);e.nodes=[],e.clusterNodes=a.locations.filter(e=>s.nodes.includes(e.rpcAddress)),e.locations=a.locations.filter(t=>!e.clusterNodes.includes(t)),e.locations.forEach(e=>e.isNew=!0),e.addNodeToList=function(t){t.rpcAddress&&(e.nodes.push(t),e.locations=e.locations.filter(e=>e.endpoint!==t.endpoint))},e.removeNodeFromList=function(t,n){e.nodes.splice(t,1),e.locations.push(n)},e.addLocation=function(){r.addLocation().then(t=>{t&&e.locations.push(t)})},e.ok=function(){t.close(e.nodes)},e.cancel=function(){t.dismiss("cancel")}}function m(e,t,n){const o=angular.copy(n.clusterModel);e.clusterNodes=o.nodes,e.clusterNodes.forEach(e=>e.shouldRemove=!1),e.nodesToRemoveCount=0,e.leftNodesLessThanTwo=!1,e.toggleNode=function(t,n){n.shouldRemove=!n.shouldRemove,n.shouldRemove?e.nodesToRemoveCount++:e.nodesToRemoveCount--,e.leftNodesLessThanTwo=e.clusterNodes.length-e.nodesToRemoveCount<2},e.ok=function(){const n=e.clusterNodes.filter(e=>e.shouldRemove);t.close(n)},e.cancel=function(){t.dismiss("cancel")}}f.$inject=["$scope","$modalInstance","data","$modal","RemoteLocationsService"],m.$inject=["$scope","$modalInstance","data"]},50:function(e,t){angular.module("graphdb.framework.rest.cluster.service",[]).factory("ClusterRestService",o),o.$inject=["$http"];const n="rest/cluster";function o(e){return{getClusterConfig:function(){return e.get(`${n}/config`)},createCluster:function(t){return e.post(`${n}/config`,t)},updateCluster:function(t){t.nodes&&delete t.nodes;return e.patch(`${n}/config`,t)},deleteCluster:function(t){const o=$.param({force:t});return e.delete(`${n}/config?${o}`)},addNodesToCluster:function(t){return e.post(`${n}/config/node`,{nodes:t})},removeNodesFromCluster:function(t){return e.delete(`${n}/config/node`,{data:{nodes:t},headers:{"Content-Type":"application/json"}})},getClusterStatus:function(){return e.get(`${n}/group/status`)},getNodeStatus:function(){return e.get(`${n}/node/status`)}}}}}]);
|
|
2
|
+
//# sourceMappingURL=3.05b11b64e7a5a996a0dc.bundle.js.map
|