graphdb-workbench 2.0.0 → 2.0.2
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/10.f63a9f9189528238aa8f.bundle.js +2 -0
- package/dist/10.f63a9f9189528238aa8f.bundle.js.map +1 -0
- package/dist/11.3957302d7a301df30dd1.bundle.js +1 -1
- package/dist/11.3957302d7a301df30dd1.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.9e0925889b3a3f79c7fe.bundle.js +1 -1
- package/dist/25.9e0925889b3a3f79c7fe.bundle.js.map +1 -1
- package/dist/29.9bdb27c21d6eacac1341.bundle.js +1 -1
- package/dist/29.9bdb27c21d6eacac1341.bundle.js.map +1 -1
- package/dist/30.34b74ada583b1b0af913.bundle.js +1 -1
- package/dist/30.34b74ada583b1b0af913.bundle.js.map +1 -1
- package/dist/68.e25480b7770a679a9654.bundle.js +1 -1
- package/dist/68.e25480b7770a679a9654.bundle.js.map +1 -1
- package/dist/{bundle.a8677c75aad1ad7b3b6a.bundle.js → bundle.7d5dd8e4d7cb8ed01086.bundle.js} +3 -3
- package/dist/bundle.7d5dd8e4d7cb8ed01086.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 +4 -4
- package/dist/pages/dependencies.html +1 -1
- package/dist/pages/domainRangeInfo.html +2 -2
- package/dist/pages/edit.html +1 -1
- package/dist/pages/explore.html +1 -1
- package/dist/pages/export.html +1 -1
- package/dist/pages/find.html +1 -1
- package/dist/pages/graph-config/saveGraphConfig.html +11 -11
- package/dist/pages/graphs-visualizations.html +7 -7
- package/dist/pages/import.html +1 -1
- package/dist/pages/jdbc-create.html +5 -5
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +2 -2
- package/dist/pages/namespaces.html +2 -2
- package/dist/pages/plugins.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +7 -7
- package/dist/pages/rdfrank.html +2 -2
- package/dist/pages/repositories.html +2 -2
- package/dist/pages/repository.html +2 -2
- package/dist/pages/similarity-indexes.html +1 -1
- package/dist/pages/sparql-template-create.html +5 -5
- package/dist/pages/sparql.html +3 -3
- package/dist/pages/webapi.html +2 -2
- package/dist/res/swagger/index.html +27 -27
- package/package.json +1 -1
- package/dist/10.eab0a417fa2f2831905e.bundle.js +0 -2
- package/dist/10.eab0a417fa2f2831905e.bundle.js.map +0 -1
- package/dist/bundle.a8677c75aad1ad7b3b6a.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");$("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.2");$("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\");\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.2\");\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([[30,67,68],{104:function(t,e,r){"use strict";r.r(e);r(3),r(9),r(73),r(74),r(8),r(30),r(31);angular.module("graphdb.framework.impex.import",["toastr","ngRoute","ngFileUpload","ui.bootstrap","graphdb.framework.impex.import.directives","graphdb.framework.impex.import.controllers","graphdb.framework.core.services.repositories","graphdb.framework.core.directives"])},73:function(t,e,r){"use strict";r.r(e);r(3),r(11);const n="UPLOADING",i="PENDING",a="ERROR",s="DONE",o="NONE",l=angular.module("graphdb.framework.impex.import.controllers",["ui.bootstrap","toastr","graphdb.framework.core.services.repositories","graphdb.framework.utils.uriutils"]);l.controller("CommonCtrl",["$scope","$http","toastr","$interval","$repositories","$modal","$filter","$jwtAuth","$location","$translate","LicenseRestService",function(t,e,r,n,i,o,l,c,u,p,f){t.files=[],t.fileChecked={},t.checkAll=!1,t.popoverTemplateUrl="settingsPopoverTemplate.html",t.fileQuery="",t.getAppData=function(){f.getInfo().success((function(e){t.appData={},t.appData.properties={};for(let r=0;r<e.length;r++)t.appData.properties[e[r].key]={source:e[r].source,value:e[r].value};t.maxUploadFileSizeMB=t.appData.properties["graphdb.workbench.maxUploadSize"].value/1048576})).error((function(t){const e=getError(t);r.error(e,p.instant("common.error"))}))},t.getAppData(),t.fileFormats=["ttl","ttls","rdf","rj","n3","nt","nq","trig","trigs","trix","brf","owl","jsonld"];{const e=_.map(t.fileFormats,(function(t){return"."+t+".gz"})),r=_.map(t.fileFormats,(function(t){return"."+t}));t.fileFormatsExtended=_.reduce(_.union(e,r,[".zip"]),(function(t,e){return t+", "+e})),t.fileFormatsHuman=_.reduce(r,(function(t,e){return t+" "+e}))+p.instant("import.gz.zip"),t.textFileFormatsHuman=_.reduce(_.filter(r,(function(t){return".brf"!==t})),(function(t,e){return t+" "+e}))}t.updateListHttp=function(n){e({method:"GET",url:t.getBaseUrl()}).success((function(e){0===t.files.length||n?(t.files=e,_.forEach(t.files,(function(e){e.type||(e.type=t.defaultType)})),t.rebatch()):t.files.forEach((function(r){const n=_.find(e,_.matches({name:r.name}));r.status&&n&&_.assign(r,n),r.type||(r.type=t.defaultType)})),n&&"user"===t.viewType&&(t.files=_.filter(t.files,(function(t){return void 0!==t.status}))),t.showClearStatuses=_.filter(t.files,(function(t){return t.status===s||t.status===a})).length>0,t.savedSettings=_.mapKeys(_.filter(t.files,"parserSettings"),"name"),t.loader=!1})).error((function(e){r.warning(p.instant("import.error.could.not.get.files",{data:getError(e)})),t.loader=!1}))},t.$watch((function(){return $(t.tabId).is(":visible")}),(function(){$(t.tabId).is(":visible")&&(t.updateListHttp(!1),u.hash(t.viewType))})),t.updateList=function(e){t.canWriteActiveRepo()&&$(t.tabId).is(":visible")&&t.updateListHttp(e)},t.init=function(){t.setRestricted(),t.isRestricted||(t.updateList(!0),t.getSettings())},t.$on("repositoryIsSet",t.init),t.pullList=function(){const e=n((function(){t.updating||t.updateList(!1)}),4e3);t.$on("$destroy",(function(){n.cancel(e)}))},t.getVisibleFiles=function(){return l("filter")(t.files,{name:t.fileQuery,type:t.getTypeFilter()})},t.getTypeFilter=function(){return"server"!==t.viewType||"file"!==t.showItems&&"directory"!==t.showItems?"":t.showItems},t.selectAllFiles=function(){t.getVisibleFiles().forEach((function(e){t.fileChecked[e.name]=t.checkAll&&t.importable(e)}))},t.getSettingsFor=function(e,r){return r||_.isEmpty(e)||_.isEmpty(t.savedSettings[e])?angular.copy(t.defaultSettings):t.savedSettings[e]},t.setSettingsFor=function(e,r){t.settingsFor=e,t.settings=t.getSettingsFor(e,r),o.open({templateUrl:"js/angular/import/templates/settingsModal.html",controller:"SettingsModalCtrl",resolve:{settings:function(){return angular.copy(t.settings)},hasParserSettings:t.isLocalLocation,defaultSettings:function(){return t.defaultSettings},isMultiple:function(){return!e}},size:"lg"}).result.then((function(e){t.settings=e,""===t.settingsFor?t.importSelected():t.importFile(t.settingsFor,!0)}),(function(e){t.settings=e}))},t.updateImport=function(e,r){t.settingsFor=e,t.settings=t.getSettingsFor(e,r),t.importFile(e,!1)},t.stopImport=function(n){e({method:"DELETE",url:t.getBaseUrl(),params:{name:n.name,type:n.type}}).success((function(){t.updateList()})).error((function(t){r.warning(p.instant("import.error.could.not.stop",{data:getError(t)}))}))},t.importable=function(){return!0},t.hasImportable=function(){return _.filter(t.files,(function(e){return t.importable(e)})).length>0},t.showTable=function(){const e=t.files.length>0&&("user"===t.viewType||"server"===t.viewType);return t.checkAll&&t.switchBatch(!0),e},t.switchBatch=function(e){e?t.selectAllFiles():t.checkAll&&(t.checkAll=!1),t.batch=_.map(_.filter(t.files,(function(e){return t.fileChecked[e.name]&&t.importable(e)})),"name").length>0},t.rebatch=function(){const e={};t.batch=!1,_.each(t.files,(function(r){e[r.name]=t.fileChecked[r.name],t.batch|=t.fileChecked[r.name]})),t.batch||(t.checkAll=!1),t.fileChecked=e},t.getSelectedFiles=function(){return _.map(_.filter(t.getVisibleFiles(),(function(e){return t.fileChecked[e.name]&&t.importable(e)})),"name")},t.importSelected=function(e){const r=t.getSelectedFiles(),n=function(){const i=r.shift();i&&(e&&(t.settings=t.getSettingsFor(i)),t.importFile(i,!0,n))};n()};const m=function(n,i){e({method:"DELETE",url:t.getBaseUrl()+"/status",params:{remove:i},data:n,headers:{"Content-type":"application/json;charset=utf-8"}}).success((function(){t.updateList(!0)})).error((function(t){r.warning(p.instant("import.error.could.not.clear",{data:getError(t)}))}))};t.resetStatus=function(t){m(t,!1)},t.resetStatusSelected=function(){t.resetStatus(t.getSelectedFiles())},t.removeEntry=function(t){m(t,!0)},t.removeEntrySelected=function(){t.removeEntry(t.getSelectedFiles())},t.isLocalLocation=function(){const t=i.getActiveLocation();return t&&t.local},t.filterSettings=function(e){let r=_.omitBy(t.savedSettings[e],_.isNull);return r=_.omit(r,["repoLocationHash","status","message","name","data","type","format","fileNames","$$hashKey"]),_.map(_.keys(r),(function(t){return[t,r[t]]}))},t.getSettings=function(){t.canWriteActiveRepo()&&e({method:"GET",url:"rest/repositories/"+i.getActiveRepository()+"/import/settings/default"}).success((function(e){t.defaultSettings=e})).error((function(t){r.warning(p.instant("import.error.default.settings",{data:getError(t)}))}))},t.getBaseUrl=function(){return"rest/repositories/"+i.getActiveRepository()+"/import/"+t.viewUrl},t.pritifySettings=function(t){return JSON.stringify(t,null," ")},t.toTitleCase=function(t){return t?_.upperFirst(t.toLowerCase()):t}}]),l.controller("ImportCtrl",["$scope","$http","toastr","$controller",function(t,e,r,n){t.loader=!0,angular.extend(this,n("CommonCtrl",{$scope:t})),t.viewUrl="server",t.defaultType="server",t.tabId="#import-server",t.showItems="all",t.pullList();const i=function(n,i){t.canWriteActiveRepo()&&e({method:"POST",url:t.getBaseUrl(),data:{importSettings:i?null:t.settings,fileNames:n}}).success((function(){t.updateList(),t.batch=!1,t.fileChecked={}})).error((function(t){r.error($translate.instant("import.could.not.send.file",{data:getError(t)}))}))};t.importSelected=function(e){const r=t.getSelectedFiles();i(r,e)},t.importFile=function(t){i([t])},t.init()}]),l.controller("UploadCtrl",["$scope","Upload","$http","toastr","$controller","$modal","$translate",function(t,e,r,s,l,c,u){t.loader=!0,angular.extend(this,l("CommonCtrl",{$scope:t})),t.viewUrl="upload",t.defaultType="file",t.tabId="#import-user",t.pullList(),t.currentFiles=[],t.importable=function(){return!0},t.fileSelected=function(t,e,r,n,i){i.length>0&&i.forEach((function(t){s.warning(u.instant("import.large.file",{name:t.name,size:Math.floor(t.size/1048576)}))}))},t.$watchCollection("currentFiles",(function(){t.currentFiles&&t.currentFiles.forEach((function(e){if("bz2"===e.name.substr(e.name.lastIndexOf(".")+1)){const r=t.currentFiles.indexOf(e);r>-1&&t.currentFiles.splice(r,1),s.error(u.instant("import.could.not.upload",{name:e.name}))}})),t.files=_.uniqBy(_.union(_.map(t.currentFiles,(function(t){return{name:t.name,type:"file",file:t}})),t.files),(function(t){return t.name})),t.savedSettings=_.mapKeys(_.filter(t.files,"parserSettings"),"name"),_.each(t.currentFiles,(function(e){t.updateImport(e.name)}))})),t.importFile=function(o,l,c){const p=_.findIndex(t.files,{name:o});if(p<0)s.warning(u.instant("import.no.such.file",{name:o}));else{const o=t.files[p];if("text"===o.type)t.settings.name=o.name,t.settings.type=o.type,t.settings.data=o.data,t.settings.format=o.format,o.status=i,r({method:"POST",url:t.getBaseUrl()+(l?"":"/update")+"/text",data:t.settings}).success((function(){t.updateList()})).error((function(t){s.error(u.instant("import.could.not.send.data",{data:getError(t)})),o.status=a,o.message=getError(t)})).finally(c||function(){});else if("url"===o.type)t.settings.name=o.name,t.settings.type=o.type,t.settings.data=o.data,t.settings.format=o.format,o.status=i,r({method:"POST",url:t.getBaseUrl()+(l?"":"/update")+"/url",data:t.settings}).success((function(){t.updateList()})).error((function(t){s.error(u.instant("import.could.not.send.url",{data:getError(t)}))})).finally(c||function(){});else{let r;t.settings.name=o.name,r=o.file?{file:o.file,importSettings:e.jsonBlob(t.settings)}:{importSettings:e.jsonBlob(t.settings)},e.upload({url:t.getBaseUrl()+(l?"":"/update")+"/file",data:r}).progress((function(t){if(o.file?(o.file=null,o.status=n):o.status!==n&&(o.status=i),o.status===n){const e=parseInt(100*t.loaded/t.total);o.message=e+"% uploaded"}})).success((function(){t.updateList()})).error((function(t){s.error(u.instant("import.could.not.upload.file",{data:getError(t)})),o.status=a,o.message=getError(t)})).finally(c||function(){})}}},t.updateTextImport=function(e){t.updating=!0,r({method:"POST",url:t.getBaseUrl()+"/update/text",data:e}).success((function(t){})).error((function(t){s.error(u.instant("import.could.not.update.text",{data:getError(t)}))})).finally((function(){t.updating=!1}))},t.pastedDataIdx=1;const p=function(){const t=new Date;return t.getFullYear()+"-"+_.padStart(t.getMonth()+1,2,"0")+"-"+_.padStart(t.getDate(),2,"0")+" "+_.padStart(t.getHours(),2,"0")+":"+_.padStart(t.getMinutes(),2,"0")+":"+_.padStart(t.getSeconds(),2,"0")+"."+_.padStart(t.getMilliseconds(),3,"0")};t.pasteData=function(e){e&&e.data,c.open({templateUrl:"js/angular/import/templates/textSnippet.html",controller:"TextCtrl",resolve:{text:function(){return e?e.data:""},format:function(){return e?e.format:"text/turtle"}}}).result.then((function(r){e?(e.data===r.text&&e.format===r.format||e.status===o||(e.status=o,e.message=u.instant("import.text.snippet.not.imported")),e.data=r.text,e.format=r.format,t.updateTextImport(e)):(e={type:"text",name:"Text snippet "+p(),format:r.format,data:r.text},t.files.unshift(e),t.updateImport(e.name)),r.startImport&&t.setSettingsFor(e.name)}))},t.rdfDataFromURL=function(){c.open({templateUrl:"js/angular/import/templates/urlImport.html",controller:"UrlCtrl",scope:t}).result.then((function(e){const r=_.find(t.files,{type:"url",name:e.url});r?r.format=e.format:t.files.unshift({type:"url",name:e.url,format:e.format,data:e.url}),t.updateImport(e.url,!0),e.startImport&&t.setSettingsFor(e.url,!0)}))},t.init()}]),l.controller("UrlCtrl",["$scope","$modalInstance","toastr",function(t,e){t.importFormat={name:"Auto",type:""},t.startImport=!0,t.cancel=function(){e.dismiss()},t.ok=function(){e.close({url:t.dataUrl,format:t.importFormat.type,startImport:t.startImport})}}]),l.controller("TextCtrl",["$scope","$modalInstance","text","format",function(t,e,r,n){t.importFormats=[{name:"RDF/JSON",type:"application/rdf+json"},{name:"JSON-LD",type:"application/ld+json"},{name:"RDF/XML",type:"application/rdf+xml"},{name:"N3",type:"text/rdf+n3"},{name:"N-Triples",type:"text/plain"},{name:"N-Quads",type:"text/x-nquads"},{name:"Turtle",type:"text/turtle"},{name:"Turtle*",type:"application/x-turtlestar"},{name:"TriX",type:"application/trix"},{name:"TriG",type:"application/x-trig"},{name:"TriG*",type:"application/x-trigstar"}],t.rdfText=r,t.importFormat=_.find(t.importFormats,{type:n}),t.startImport=!0,t.setFormat=function(e){t.importFormat=e},t.cancel=function(){e.dismiss()},t.ok=function(){e.close({text:t.rdfText,format:t.importFormat.type,startImport:t.startImport})}}]),l.controller("TabCtrl",["$scope","$location",function(t,e){t.viewType=e.hash(),"user"!==t.viewType&&"server"!==t.viewType&&(t.viewType="user"),t.isCollapsed=!1,"user"===t.viewType?t.templateUrl="js/angular/import/templates/uploadInfo.html":t.templateUrl="js/angular/import/templates/importInfo.html",t.changeHelpTemplate=function(e){t.templateUrl="js/angular/import/templates/"+e},t.commonUrl="js/angular/import/templates/commonInfo.html"}]),l.controller("SettingsModalCtrl",["$scope","$modalInstance","toastr","UriUtils","settings","hasParserSettings","defaultSettings","isMultiple","$translate",function(t,e,r,n,i,a,s,o,l){t.hasError=function(t,e){return _.find(t,(function(t){return e===t.$name}))},t.settings=i,t.hasParserSettings=a,t.settings.context?"default"===t.settings.context?(t.target="default",t.settings.context=""):t.target="named":t.target="data",t.isMultiple=o,t.enableReplace=!(!t.settings.replaceGraphs||!t.settings.replaceGraphs.length);const c=function(){"default"===t.target?t.settings.context="default":"data"===t.target&&(t.settings.context=""),t.enableReplace?"default"!==t.target&&"named"!==t.target||(t.settings.replaceGraphs=[t.settings.context]):t.settings.replaceGraphs=[]};t.ok=function(){t.settingsForm.replaceGraph.$setValidity("replaceGraph",!0),t.settingsForm.$valid&&(c(),e.close(t.settings))},t.cancel=function(){c(),e.dismiss(t.settings)},t.reset=function(){t.settings=angular.copy(s),t.target="data"},t.addReplaceGraph=function(e){let i=!0;"default"!==e&&(i=n.isValidIri(e)),t.settingsForm.replaceGraph.$setTouched(),t.settingsForm.replaceGraph.$setValidity("replaceGraph",i),t.settingsForm.replaceGraph.$valid&&(t.settings.replaceGraphs=t.settings.replaceGraphs||[],-1===_.indexOf(t.settings.replaceGraphs,e)?(t.replaceGraph="",t.settings.replaceGraphs.push(e)):r.warning(l.instant("import.graph.already.in.list")))},t.checkEnterReplaceGraph=function(e,r){13===e.keyCode&&(e.preventDefault(),t.addReplaceGraph(r))},t.showAdvancedSettings=!1,t.switchParserSettings=function(){t.showAdvancedSettings=!t.showAdvancedSettings}}])},74:function(t,e,r){"use strict";r.r(e);r(3),r(11);const n=angular.module("graphdb.framework.impex.import.directives",["graphdb.framework.utils.uriutils"]);n.directive("validateUri",["UriUtils",function(t){return{restrict:"A",require:"ngModel",link:function(e,r,n,i){i.$parsers.unshift((function(r){let n=!0;return"named"===e.target&&(n=t.isValidIri(r)),i.$setValidity("validateUri",n),r}))}}}]),n.directive("filesTable",(function(){return{restrict:"A",templateUrl:"js/angular/import/templates/filesTable.html"}})),n.directive("filesOntoLoader",(function(){return{link:function(t,e,r){t.$watch("file.status",(function(){"IMPORTING"!==t.file.status&&"UPLOADING"!==t.file.status||!$(e).has("object").length>0&&$(e).append('<object width="'+r.size+'" height="'+r.size+'" data="js/angular/templates/loader/ot-loader.svg?v=2.0.0">{{\'common.loading\' | translate}}</object>')}))}}}))}}]);
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[30,67,68],{104:function(t,e,r){"use strict";r.r(e);r(3),r(9),r(73),r(74),r(8),r(30),r(31);angular.module("graphdb.framework.impex.import",["toastr","ngRoute","ngFileUpload","ui.bootstrap","graphdb.framework.impex.import.directives","graphdb.framework.impex.import.controllers","graphdb.framework.core.services.repositories","graphdb.framework.core.directives"])},73:function(t,e,r){"use strict";r.r(e);r(3),r(11);const n="UPLOADING",i="PENDING",a="ERROR",s="DONE",o="NONE",l=angular.module("graphdb.framework.impex.import.controllers",["ui.bootstrap","toastr","graphdb.framework.core.services.repositories","graphdb.framework.utils.uriutils"]);l.controller("CommonCtrl",["$scope","$http","toastr","$interval","$repositories","$modal","$filter","$jwtAuth","$location","$translate","LicenseRestService",function(t,e,r,n,i,o,l,c,u,p,f){t.files=[],t.fileChecked={},t.checkAll=!1,t.popoverTemplateUrl="settingsPopoverTemplate.html",t.fileQuery="",t.getAppData=function(){f.getInfo().success((function(e){t.appData={},t.appData.properties={};for(let r=0;r<e.length;r++)t.appData.properties[e[r].key]={source:e[r].source,value:e[r].value};t.maxUploadFileSizeMB=t.appData.properties["graphdb.workbench.maxUploadSize"].value/1048576})).error((function(t){const e=getError(t);r.error(e,p.instant("common.error"))}))},t.getAppData(),t.fileFormats=["ttl","ttls","rdf","rj","n3","nt","nq","trig","trigs","trix","brf","owl","jsonld"];{const e=_.map(t.fileFormats,(function(t){return"."+t+".gz"})),r=_.map(t.fileFormats,(function(t){return"."+t}));t.fileFormatsExtended=_.reduce(_.union(e,r,[".zip"]),(function(t,e){return t+", "+e})),t.fileFormatsHuman=_.reduce(r,(function(t,e){return t+" "+e}))+p.instant("import.gz.zip"),t.textFileFormatsHuman=_.reduce(_.filter(r,(function(t){return".brf"!==t})),(function(t,e){return t+" "+e}))}t.updateListHttp=function(n){e({method:"GET",url:t.getBaseUrl()}).success((function(e){0===t.files.length||n?(t.files=e,_.forEach(t.files,(function(e){e.type||(e.type=t.defaultType)})),t.rebatch()):t.files.forEach((function(r){const n=_.find(e,_.matches({name:r.name}));r.status&&n&&_.assign(r,n),r.type||(r.type=t.defaultType)})),n&&"user"===t.viewType&&(t.files=_.filter(t.files,(function(t){return void 0!==t.status}))),t.showClearStatuses=_.filter(t.files,(function(t){return t.status===s||t.status===a})).length>0,t.savedSettings=_.mapKeys(_.filter(t.files,"parserSettings"),"name"),t.loader=!1})).error((function(e){r.warning(p.instant("import.error.could.not.get.files",{data:getError(e)})),t.loader=!1}))},t.$watch((function(){return $(t.tabId).is(":visible")}),(function(){$(t.tabId).is(":visible")&&(t.updateListHttp(!1),u.hash(t.viewType))})),t.updateList=function(e){t.canWriteActiveRepo()&&$(t.tabId).is(":visible")&&t.updateListHttp(e)},t.init=function(){t.setRestricted(),t.isRestricted||(t.updateList(!0),t.getSettings())},t.$on("repositoryIsSet",t.init),t.pullList=function(){const e=n((function(){t.updating||t.updateList(!1)}),4e3);t.$on("$destroy",(function(){n.cancel(e)}))},t.getVisibleFiles=function(){return l("filter")(t.files,{name:t.fileQuery,type:t.getTypeFilter()})},t.getTypeFilter=function(){return"server"!==t.viewType||"file"!==t.showItems&&"directory"!==t.showItems?"":t.showItems},t.selectAllFiles=function(){t.getVisibleFiles().forEach((function(e){t.fileChecked[e.name]=t.checkAll&&t.importable(e)}))},t.getSettingsFor=function(e,r){return r||_.isEmpty(e)||_.isEmpty(t.savedSettings[e])?angular.copy(t.defaultSettings):t.savedSettings[e]},t.setSettingsFor=function(e,r){t.settingsFor=e,t.settings=t.getSettingsFor(e,r),o.open({templateUrl:"js/angular/import/templates/settingsModal.html",controller:"SettingsModalCtrl",resolve:{settings:function(){return angular.copy(t.settings)},hasParserSettings:t.isLocalLocation,defaultSettings:function(){return t.defaultSettings},isMultiple:function(){return!e}},size:"lg"}).result.then((function(e){t.settings=e,""===t.settingsFor?t.importSelected():t.importFile(t.settingsFor,!0)}),(function(e){t.settings=e}))},t.updateImport=function(e,r){t.settingsFor=e,t.settings=t.getSettingsFor(e,r),t.importFile(e,!1)},t.stopImport=function(n){e({method:"DELETE",url:t.getBaseUrl(),params:{name:n.name,type:n.type}}).success((function(){t.updateList()})).error((function(t){r.warning(p.instant("import.error.could.not.stop",{data:getError(t)}))}))},t.importable=function(){return!0},t.hasImportable=function(){return _.filter(t.files,(function(e){return t.importable(e)})).length>0},t.showTable=function(){const e=t.files.length>0&&("user"===t.viewType||"server"===t.viewType);return t.checkAll&&t.switchBatch(!0),e},t.switchBatch=function(e){e?t.selectAllFiles():t.checkAll&&(t.checkAll=!1),t.batch=_.map(_.filter(t.files,(function(e){return t.fileChecked[e.name]&&t.importable(e)})),"name").length>0},t.rebatch=function(){const e={};t.batch=!1,_.each(t.files,(function(r){e[r.name]=t.fileChecked[r.name],t.batch|=t.fileChecked[r.name]})),t.batch||(t.checkAll=!1),t.fileChecked=e},t.getSelectedFiles=function(){return _.map(_.filter(t.getVisibleFiles(),(function(e){return t.fileChecked[e.name]&&t.importable(e)})),"name")},t.importSelected=function(e){const r=t.getSelectedFiles(),n=function(){const i=r.shift();i&&(e&&(t.settings=t.getSettingsFor(i)),t.importFile(i,!0,n))};n()};const m=function(n,i){e({method:"DELETE",url:t.getBaseUrl()+"/status",params:{remove:i},data:n,headers:{"Content-type":"application/json;charset=utf-8"}}).success((function(){t.updateList(!0)})).error((function(t){r.warning(p.instant("import.error.could.not.clear",{data:getError(t)}))}))};t.resetStatus=function(t){m(t,!1)},t.resetStatusSelected=function(){t.resetStatus(t.getSelectedFiles())},t.removeEntry=function(t){m(t,!0)},t.removeEntrySelected=function(){t.removeEntry(t.getSelectedFiles())},t.isLocalLocation=function(){const t=i.getActiveLocation();return t&&t.local},t.filterSettings=function(e){let r=_.omitBy(t.savedSettings[e],_.isNull);return r=_.omit(r,["repoLocationHash","status","message","name","data","type","format","fileNames","$$hashKey"]),_.map(_.keys(r),(function(t){return[t,r[t]]}))},t.getSettings=function(){t.canWriteActiveRepo()&&e({method:"GET",url:"rest/repositories/"+i.getActiveRepository()+"/import/settings/default"}).success((function(e){t.defaultSettings=e})).error((function(t){r.warning(p.instant("import.error.default.settings",{data:getError(t)}))}))},t.getBaseUrl=function(){return"rest/repositories/"+i.getActiveRepository()+"/import/"+t.viewUrl},t.pritifySettings=function(t){return JSON.stringify(t,null," ")},t.toTitleCase=function(t){return t?_.upperFirst(t.toLowerCase()):t}}]),l.controller("ImportCtrl",["$scope","$http","toastr","$controller",function(t,e,r,n){t.loader=!0,angular.extend(this,n("CommonCtrl",{$scope:t})),t.viewUrl="server",t.defaultType="server",t.tabId="#import-server",t.showItems="all",t.pullList();const i=function(n,i){t.canWriteActiveRepo()&&e({method:"POST",url:t.getBaseUrl(),data:{importSettings:i?null:t.settings,fileNames:n}}).success((function(){t.updateList(),t.batch=!1,t.fileChecked={}})).error((function(t){r.error($translate.instant("import.could.not.send.file",{data:getError(t)}))}))};t.importSelected=function(e){const r=t.getSelectedFiles();i(r,e)},t.importFile=function(t){i([t])},t.init()}]),l.controller("UploadCtrl",["$scope","Upload","$http","toastr","$controller","$modal","$translate",function(t,e,r,s,l,c,u){t.loader=!0,angular.extend(this,l("CommonCtrl",{$scope:t})),t.viewUrl="upload",t.defaultType="file",t.tabId="#import-user",t.pullList(),t.currentFiles=[],t.importable=function(){return!0},t.fileSelected=function(t,e,r,n,i){i.length>0&&i.forEach((function(t){s.warning(u.instant("import.large.file",{name:t.name,size:Math.floor(t.size/1048576)}))}))},t.$watchCollection("currentFiles",(function(){t.currentFiles&&t.currentFiles.forEach((function(e){if("bz2"===e.name.substr(e.name.lastIndexOf(".")+1)){const r=t.currentFiles.indexOf(e);r>-1&&t.currentFiles.splice(r,1),s.error(u.instant("import.could.not.upload",{name:e.name}))}})),t.files=_.uniqBy(_.union(_.map(t.currentFiles,(function(t){return{name:t.name,type:"file",file:t}})),t.files),(function(t){return t.name})),t.savedSettings=_.mapKeys(_.filter(t.files,"parserSettings"),"name"),_.each(t.currentFiles,(function(e){t.updateImport(e.name)}))})),t.importFile=function(o,l,c){const p=_.findIndex(t.files,{name:o});if(p<0)s.warning(u.instant("import.no.such.file",{name:o}));else{const o=t.files[p];if("text"===o.type)t.settings.name=o.name,t.settings.type=o.type,t.settings.data=o.data,t.settings.format=o.format,o.status=i,r({method:"POST",url:t.getBaseUrl()+(l?"":"/update")+"/text",data:t.settings}).success((function(){t.updateList()})).error((function(t){s.error(u.instant("import.could.not.send.data",{data:getError(t)})),o.status=a,o.message=getError(t)})).finally(c||function(){});else if("url"===o.type)t.settings.name=o.name,t.settings.type=o.type,t.settings.data=o.data,t.settings.format=o.format,o.status=i,r({method:"POST",url:t.getBaseUrl()+(l?"":"/update")+"/url",data:t.settings}).success((function(){t.updateList()})).error((function(t){s.error(u.instant("import.could.not.send.url",{data:getError(t)}))})).finally(c||function(){});else{let r;t.settings.name=o.name,r=o.file?{file:o.file,importSettings:e.jsonBlob(t.settings)}:{importSettings:e.jsonBlob(t.settings)},e.upload({url:t.getBaseUrl()+(l?"":"/update")+"/file",data:r}).progress((function(t){if(o.file?(o.file=null,o.status=n):o.status!==n&&(o.status=i),o.status===n){const e=parseInt(100*t.loaded/t.total);o.message=e+"% uploaded"}})).success((function(){t.updateList()})).error((function(t){s.error(u.instant("import.could.not.upload.file",{data:getError(t)})),o.status=a,o.message=getError(t)})).finally(c||function(){})}}},t.updateTextImport=function(e){t.updating=!0,r({method:"POST",url:t.getBaseUrl()+"/update/text",data:e}).success((function(t){})).error((function(t){s.error(u.instant("import.could.not.update.text",{data:getError(t)}))})).finally((function(){t.updating=!1}))},t.pastedDataIdx=1;const p=function(){const t=new Date;return t.getFullYear()+"-"+_.padStart(t.getMonth()+1,2,"0")+"-"+_.padStart(t.getDate(),2,"0")+" "+_.padStart(t.getHours(),2,"0")+":"+_.padStart(t.getMinutes(),2,"0")+":"+_.padStart(t.getSeconds(),2,"0")+"."+_.padStart(t.getMilliseconds(),3,"0")};t.pasteData=function(e){e&&e.data,c.open({templateUrl:"js/angular/import/templates/textSnippet.html",controller:"TextCtrl",resolve:{text:function(){return e?e.data:""},format:function(){return e?e.format:"text/turtle"}}}).result.then((function(r){e?(e.data===r.text&&e.format===r.format||e.status===o||(e.status=o,e.message=u.instant("import.text.snippet.not.imported")),e.data=r.text,e.format=r.format,t.updateTextImport(e)):(e={type:"text",name:"Text snippet "+p(),format:r.format,data:r.text},t.files.unshift(e),t.updateImport(e.name)),r.startImport&&t.setSettingsFor(e.name)}))},t.rdfDataFromURL=function(){c.open({templateUrl:"js/angular/import/templates/urlImport.html",controller:"UrlCtrl",scope:t}).result.then((function(e){const r=_.find(t.files,{type:"url",name:e.url});r?r.format=e.format:t.files.unshift({type:"url",name:e.url,format:e.format,data:e.url}),t.updateImport(e.url,!0),e.startImport&&t.setSettingsFor(e.url,!0)}))},t.init()}]),l.controller("UrlCtrl",["$scope","$modalInstance","toastr",function(t,e){t.importFormat={name:"Auto",type:""},t.startImport=!0,t.cancel=function(){e.dismiss()},t.ok=function(){e.close({url:t.dataUrl,format:t.importFormat.type,startImport:t.startImport})}}]),l.controller("TextCtrl",["$scope","$modalInstance","text","format",function(t,e,r,n){t.importFormats=[{name:"RDF/JSON",type:"application/rdf+json"},{name:"JSON-LD",type:"application/ld+json"},{name:"RDF/XML",type:"application/rdf+xml"},{name:"N3",type:"text/rdf+n3"},{name:"N-Triples",type:"text/plain"},{name:"N-Quads",type:"text/x-nquads"},{name:"Turtle",type:"text/turtle"},{name:"Turtle*",type:"application/x-turtlestar"},{name:"TriX",type:"application/trix"},{name:"TriG",type:"application/x-trig"},{name:"TriG*",type:"application/x-trigstar"}],t.rdfText=r,t.importFormat=_.find(t.importFormats,{type:n}),t.startImport=!0,t.setFormat=function(e){t.importFormat=e},t.cancel=function(){e.dismiss()},t.ok=function(){e.close({text:t.rdfText,format:t.importFormat.type,startImport:t.startImport})}}]),l.controller("TabCtrl",["$scope","$location",function(t,e){t.viewType=e.hash(),"user"!==t.viewType&&"server"!==t.viewType&&(t.viewType="user"),t.isCollapsed=!1,"user"===t.viewType?t.templateUrl="js/angular/import/templates/uploadInfo.html":t.templateUrl="js/angular/import/templates/importInfo.html",t.changeHelpTemplate=function(e){t.templateUrl="js/angular/import/templates/"+e},t.commonUrl="js/angular/import/templates/commonInfo.html"}]),l.controller("SettingsModalCtrl",["$scope","$modalInstance","toastr","UriUtils","settings","hasParserSettings","defaultSettings","isMultiple","$translate",function(t,e,r,n,i,a,s,o,l){t.hasError=function(t,e){return _.find(t,(function(t){return e===t.$name}))},t.settings=i,t.hasParserSettings=a,t.settings.context?"default"===t.settings.context?(t.target="default",t.settings.context=""):t.target="named":t.target="data",t.isMultiple=o,t.enableReplace=!(!t.settings.replaceGraphs||!t.settings.replaceGraphs.length);const c=function(){"default"===t.target?t.settings.context="default":"data"===t.target&&(t.settings.context=""),t.enableReplace?"default"!==t.target&&"named"!==t.target||(t.settings.replaceGraphs=[t.settings.context]):t.settings.replaceGraphs=[]};t.ok=function(){t.settingsForm.replaceGraph.$setValidity("replaceGraph",!0),t.settingsForm.$valid&&(c(),e.close(t.settings))},t.cancel=function(){c(),e.dismiss(t.settings)},t.reset=function(){t.settings=angular.copy(s),t.target="data"},t.addReplaceGraph=function(e){let i=!0;"default"!==e&&(i=n.isValidIri(e)),t.settingsForm.replaceGraph.$setTouched(),t.settingsForm.replaceGraph.$setValidity("replaceGraph",i),t.settingsForm.replaceGraph.$valid&&(t.settings.replaceGraphs=t.settings.replaceGraphs||[],-1===_.indexOf(t.settings.replaceGraphs,e)?(t.replaceGraph="",t.settings.replaceGraphs.push(e)):r.warning(l.instant("import.graph.already.in.list")))},t.checkEnterReplaceGraph=function(e,r){13===e.keyCode&&(e.preventDefault(),t.addReplaceGraph(r))},t.showAdvancedSettings=!1,t.switchParserSettings=function(){t.showAdvancedSettings=!t.showAdvancedSettings}}])},74:function(t,e,r){"use strict";r.r(e);r(3),r(11);const n=angular.module("graphdb.framework.impex.import.directives",["graphdb.framework.utils.uriutils"]);n.directive("validateUri",["UriUtils",function(t){return{restrict:"A",require:"ngModel",link:function(e,r,n,i){i.$parsers.unshift((function(r){let n=!0;return"named"===e.target&&(n=t.isValidIri(r)),i.$setValidity("validateUri",n),r}))}}}]),n.directive("filesTable",(function(){return{restrict:"A",templateUrl:"js/angular/import/templates/filesTable.html"}})),n.directive("filesOntoLoader",(function(){return{link:function(t,e,r){t.$watch("file.status",(function(){"IMPORTING"!==t.file.status&&"UPLOADING"!==t.file.status||!$(e).has("object").length>0&&$(e).append('<object width="'+r.size+'" height="'+r.size+'" data="js/angular/templates/loader/ot-loader.svg?v=2.0.2">{{\'common.loading\' | translate}}</object>')}))}}}))}}]);
|
|
2
2
|
//# sourceMappingURL=30.34b74ada583b1b0af913.bundle.js.map
|