graphdb-workbench 2.1.0 → 2.1.1-TR2

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.
Files changed (80) hide show
  1. package/dist/{10.018ca946a702a519142b.bundle.js → 10.5c9aa6773dd62b4ed854.bundle.js} +2 -2
  2. package/dist/10.5c9aa6773dd62b4ed854.bundle.js.map +1 -0
  3. package/dist/{11.52641542d9a31c527b7c.bundle.js → 11.8983e1d1c930328e9b0d.bundle.js} +2 -2
  4. package/dist/11.8983e1d1c930328e9b0d.bundle.js.map +1 -0
  5. package/dist/135.c1de0deb98c8a45a4b21.bundle.js +1 -1
  6. package/dist/135.c1de0deb98c8a45a4b21.bundle.js.map +1 -1
  7. package/dist/{15.510970e84b3d1a7768c2.bundle.js → 15.9ce4fa5c14638d63736a.bundle.js} +2 -2
  8. package/dist/{15.510970e84b3d1a7768c2.bundle.js.map → 15.9ce4fa5c14638d63736a.bundle.js.map} +1 -1
  9. package/dist/162.7c19d57c3792c9ca08d0.bundle.js +2 -0
  10. package/dist/162.7c19d57c3792c9ca08d0.bundle.js.map +1 -0
  11. package/dist/18.201bf87e7629b325646c.bundle.js +1 -1
  12. package/dist/18.201bf87e7629b325646c.bundle.js.map +1 -1
  13. package/dist/25.42f3d944b5ec15e01ceb.bundle.js +2 -0
  14. package/dist/25.42f3d944b5ec15e01ceb.bundle.js.map +1 -0
  15. package/dist/{3.1b96b660b1d11c328e50.bundle.js → 3.0a892888d711fa9009b7.bundle.js} +2 -2
  16. package/dist/3.0a892888d711fa9009b7.bundle.js.map +1 -0
  17. package/dist/30.4b987e71408e0643680a.bundle.js +1 -1
  18. package/dist/30.4b987e71408e0643680a.bundle.js.map +1 -1
  19. package/dist/31.5af5b75cd1ac5d00370e.bundle.js +1 -1
  20. package/dist/31.5af5b75cd1ac5d00370e.bundle.js.map +1 -1
  21. package/dist/36.618ccd9d5a8d4d11cb47.bundle.js +2 -0
  22. package/dist/36.618ccd9d5a8d4d11cb47.bundle.js.map +1 -0
  23. package/dist/39.88a2db4f9ab5946bf2cd.bundle.js +2 -0
  24. package/dist/39.88a2db4f9ab5946bf2cd.bundle.js.map +1 -0
  25. package/dist/55.5b44653775bb1592cb26.bundle.js +2 -0
  26. package/dist/55.5b44653775bb1592cb26.bundle.js.map +1 -0
  27. package/dist/83.73515cde0a2215275d32.bundle.js +1 -1
  28. package/dist/83.73515cde0a2215275d32.bundle.js.map +1 -1
  29. package/dist/93.d4fb5fe720a8d95b2b37.bundle.js +2 -0
  30. package/dist/93.d4fb5fe720a8d95b2b37.bundle.js.map +1 -0
  31. package/dist/{bundle.2b813785fc0b4f08d48c.bundle.js → bundle.d68a2441048bc7e965e6.bundle.js} +3 -3
  32. package/dist/bundle.d68a2441048bc7e965e6.bundle.js.map +1 -0
  33. package/dist/index.html +3 -3
  34. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
  35. package/dist/js/angular/security/templates/user.html +4 -2
  36. package/dist/pages/autocomplete.html +1 -1
  37. package/dist/pages/choose-repository-type.html +1 -1
  38. package/dist/pages/cluster-management/clusterInfo.html +3 -3
  39. package/dist/pages/create-index.html +4 -4
  40. package/dist/pages/dependencies.html +1 -1
  41. package/dist/pages/domainRangeInfo.html +2 -2
  42. package/dist/pages/edit.html +1 -1
  43. package/dist/pages/explore.html +1 -1
  44. package/dist/pages/export.html +1 -1
  45. package/dist/pages/find.html +1 -1
  46. package/dist/pages/graph-config/saveGraphConfig.html +11 -11
  47. package/dist/pages/graphs-visualizations.html +7 -7
  48. package/dist/pages/guides.html +1 -1
  49. package/dist/pages/import.html +1 -1
  50. package/dist/pages/jdbc-create.html +5 -5
  51. package/dist/pages/monitor/queries.html +2 -3
  52. package/dist/pages/monitor/resources.html +2 -2
  53. package/dist/pages/namespaces.html +2 -2
  54. package/dist/pages/plugins.html +1 -1
  55. package/dist/pages/rdfClassHierarchyInfo.html +7 -7
  56. package/dist/pages/rdfrank.html +2 -2
  57. package/dist/pages/repositories.html +2 -2
  58. package/dist/pages/repository.html +2 -2
  59. package/dist/pages/similarity-indexes.html +1 -1
  60. package/dist/pages/sparql-template-create.html +5 -5
  61. package/dist/pages/sparql.html +3 -3
  62. package/dist/pages/webapi.html +2 -2
  63. package/dist/res/swagger/index.html +27 -27
  64. package/package.json +1 -1
  65. package/dist/10.018ca946a702a519142b.bundle.js.map +0 -1
  66. package/dist/11.52641542d9a31c527b7c.bundle.js.map +0 -1
  67. package/dist/162.611f7dba5a7f2ab9fa7b.bundle.js +0 -2
  68. package/dist/162.611f7dba5a7f2ab9fa7b.bundle.js.map +0 -1
  69. package/dist/25.9c19fb9c35fcd792dff5.bundle.js +0 -2
  70. package/dist/25.9c19fb9c35fcd792dff5.bundle.js.map +0 -1
  71. package/dist/3.1b96b660b1d11c328e50.bundle.js.map +0 -1
  72. package/dist/36.991eae8184e7b5fa5cbf.bundle.js +0 -2
  73. package/dist/36.991eae8184e7b5fa5cbf.bundle.js.map +0 -1
  74. package/dist/39.3f07a4be36e81e42c86e.bundle.js +0 -2
  75. package/dist/39.3f07a4be36e81e42c86e.bundle.js.map +0 -1
  76. package/dist/55.975653547fd9764a2a71.bundle.js +0 -2
  77. package/dist/55.975653547fd9764a2a71.bundle.js.map +0 -1
  78. package/dist/93.5f0ae85fb24657fd13c5.bundle.js +0 -2
  79. package/dist/93.5f0ae85fb24657fd13c5.bundle.js.map +0 -1
  80. package/dist/bundle.2b813785fc0b4f08d48c.bundle.js.map +0 -1
@@ -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","force","layout","size","charge","drag","classed","selected","svg","append","defs","id","viewBox","refX","refY","markerUnits","markerWidth","markerHeight","orient","fill","class","imgSrc","href","download","getActiveRepository","legendCellGroup","width","height","targetX","legendTextX","cx","cy","r","x","y","classNodeY","objectNodeTextY","x1","y1","datatypeNodeY","x2","y2","absUrl","basicPropertyArrowY","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","previousPropertyNameSelection","disableCollapsedPredicateLabelHightlighting","isEmptyObject","background","onCollapsedPropertyNameClick","previousSibling","stopPropagation","ready","bind","propertyNames","test","open","linkRect","calculatedWidth","getBBox","textPadding","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","targetY","pushEdgesToLeftAndRight","angle","atan2","cos","sin","loopTranslateX","mainClassSize","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":"30.4b987e71408e0643680a.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.1.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","force","layout","size","charge","drag","classed","selected","svg","append","defs","id","viewBox","refX","refY","markerUnits","markerWidth","markerHeight","orient","fill","class","imgSrc","href","download","getActiveRepository","legendCellGroup","width","height","targetX","legendTextX","cx","cy","r","x","y","classNodeY","objectNodeTextY","x1","y1","datatypeNodeY","x2","y2","absUrl","basicPropertyArrowY","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","previousPropertyNameSelection","disableCollapsedPredicateLabelHightlighting","isEmptyObject","background","onCollapsedPropertyNameClick","previousSibling","stopPropagation","ready","bind","propertyNames","test","open","linkRect","calculatedWidth","getBBox","textPadding","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","targetY","pushEdgesToLeftAndRight","angle","atan2","cos","sin","loopTranslateX","mainClassSize","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":"2FAAA,IAAIA,EAAKA,GAAM,GAEfA,EAAGC,KAAO,WACN,SAASC,EAAgBC,EAAMC,EAAQC,EAAaC,GAChDD,EAAcA,GAAe,GAE7B,IAAIE,EAAWH,EAAS,EACxB,MAAoB,iBAATD,GAEPI,GAAY,IADFJ,EAAKK,UAAU,EAAGJ,EAAS,GAAGK,OAAS,KAEjDF,GAAY,EAKRJ,EAAKO,MAAM,4DACXH,GAAY,IAGZA,EAAWF,IACXE,EAAWF,GAeRM,KAAKC,MAAML,KAGlBA,EAAWF,IACXE,EAAWF,GAGRM,KAAKC,MAAML,IAgBtB,MAAO,CACHL,gBAAiBA,EACjBW,aAfJ,SAAsBV,EAAMC,EAAQC,EAAaC,GAC7C,OAAOJ,EAAgBC,EAAMC,EAAQC,GAA4B,MAejES,2BAZJ,SAAoCC,EAAKC,GACrC,MAAmB,iBAARD,GACHA,EAAIN,OAASO,EACND,EAAIP,UAAU,EAAGQ,EAAY,GAAK,MAG1CD,IArDL,GA+DVf,EAAGiB,WAeQ,CACHC,OAfJ,SAAgBC,EAAKC,GACjBD,EAAIE,MAAM,UAAW,GAChBC,aACAF,SAASA,GACTC,MAAM,UAAW,IAYtBE,QATJ,SAAiBJ,EAAKC,GAClBD,EAAIE,MAAM,UAAW,GAChBC,aACAF,SAASA,GACTC,MAAM,UAAW,KAS9BrB,EAAGwB,MA0CQ,CACHC,cA1CJ,WACI,IAAIC,EAAQC,GAAGC,SAAS,QAAS,YAqCjC,OAAOD,GAAGE,QAnCV,SAAYC,GACR,IAAIC,EAGAC,EAAO,KAOXF,EAAUG,GAAG,aAAa,WACtBF,EAAOJ,GAAGO,MAAMC,SAASC,MACjB,IAAIC,QAEhBP,EAAUG,GAAG,WAAW,SAAUK,GARlC,IAAcC,EAAGC,EAAHD,EASDR,EATIS,EASEb,GAAGO,MAAMC,SAASC,MAR1BzB,KAAK8B,KAAK9B,KAAK+B,IAAIH,EAAE,GAAKC,EAAE,GAAI,GAAI7B,KAAK+B,IAAIH,EAAE,GAAKC,EAAE,GAAI,IANrD,IAiBJR,GACAW,OAAOC,aAAaZ,GACpBA,EAAO,KACPN,EAAMmB,SAASP,IAEfN,EAAOW,OAAOG,YAKXnB,GAAGD,MAJK,WACHA,EAAMqB,MAAMT,GACZN,EAAO,OAED,WAMTN,EAAO,QAQrB,O,iCCrIf,IAAIsB,EAAMA,GAAO,GAEjBA,EAAIC,OAuBO,CACHC,YAvBJ,SAAqBC,GACjB,IAAIC,EAAWC,EAAE,cAAgBF,EAAoB,MAAM,GAAGG,MAAMC,MAChEC,EAAS,GAIb,OAHAC,EAAEC,KAAKN,GAAU,SAAUO,GACvBH,GAAUG,EAAMC,WAEbJ,GAkBPK,0BAfJ,WAEI,IAAIC,EAAYnC,GAAGoC,UAAU,OACxBC,KAAK,CACFC,QAAS,MACTC,MAAO,+BAEVC,OAAOC,WAAWC,UAGvB,MAAO,2CAA6CC,KAAKC,SAASC,mBAAmBV,OAS9E,O,gCC/Bf,kCAiBA,SAASW,EAA0BC,EAAYC,EAASC,EAAeC,EAAsBC,EAAWC,EAAqBC,EAAQC,EAAUC,EAAQC,EAAUC,EAAYC,EAAWC,GACpL,MAAO,CACHC,SAAU,KACVC,SAAU,gCACVC,MAAO,CACHC,wBAAyB,IACzBC,kBAAmB,IACnBC,cAAe,KAEnBC,KAGJ,SAAkBJ,GACd,MAAMK,EAAQb,GAAS,YAS3B,SAAgCQ,GAC5B9D,GAAGG,UAAUiE,UAAUC,YAAc,WACjC,OAAOC,KAAKvC,MAAK,WACb/B,GAAGuE,OAAOD,KAAK7B,WAAW+B,YAAYF,WAI9CtE,GAAGG,UAAUiE,UAAUK,WAAa,WAChC,OAAOH,KAAKvC,MAAK,WACb,MAAM2C,EAAaJ,KAAK7B,WAAWiC,WAC/BA,GACAJ,KAAK7B,WAAWkC,aAAaL,KAAMI,OAK/C,IAWIE,EAAQ5E,GAAG6E,OAAOD,QACjBE,KAAK,CAZE,KACC,MAYRC,QAAQ,KAETC,EAAOJ,EAAMI,OACZ1E,GAAG,aAo1BR,SAAmBK,GACfX,GAAGuE,OAAOD,MACLW,QAAQ,WAAYtE,EAAEuE,UAAW,MAp1BtCC,EAAMnF,GAAGuE,OAAO,iBACfa,OAAO,OACP/C,KAAK,UAAW,gBAChBA,KAAK,sBAAuB,iBAC5B/B,GAAG,gBAAiB,MAErB+E,EAAOF,EAAIC,OAAO,QAEtBC,EAAKD,OAAO,UACP/C,KAAK,CACFiD,GAAI,QACJC,QAAS,aACTC,KAAM,GACNC,KAAM,EACNC,YAAa,cACbC,YAAa,EACbC,aAAc,EACdC,OAAQ,OACRC,KAAMpC,IAET0B,OAAO,QACP/C,KAAK,CACF1B,EAAG,iBACHoF,MAAO,cAGfV,EAAKD,OAAO,UACP/C,KAAK,CACFiD,GAAI,kBACJC,QAAS,aACTC,KAAM,EACNC,KAAM,EACNC,YAAa,cACbC,YAAa,EACbC,aAAc,EACdC,OAAQ,OACRC,KAAMpC,IAET0B,OAAO,QACP/C,KAAK,CACF1B,EAAG,iBACHoF,MAAO,cAGfV,EAAKD,OAAO,UACP/C,KAAK,CACFiD,GAAI,aACJC,QAAS,aACTC,KAAM,EACNC,KAAM,EACNC,YAAa,cACbC,YAAa,EACbC,aAAc,EACdC,OAAQ,OACRC,KAAMpC,IAET0B,OAAO,QACP/C,KAAK,CACF1B,EAAG,iBACHoF,MAAO,cAwBf/F,GAAGuE,OAAO,iBACLjE,GAAG,aAlBR,WAEI,IAAImB,EAAW,IAAIH,OAAOC,YAAY,qDAGtCG,EAAE,QAAQ0D,OAAO,mCAAqC3D,EAAW,eAGjE,IAAIuE,EAAS,IAAI1E,OAAOY,4BAGxBlC,GAAGuE,OAAOD,MAAMjC,KAAK,CACjB4D,KAAMD,EACNE,SAAU,sBAAwBjD,EAAckD,sBAAwB,YAQhF,IAQIC,EALYpG,GAAGuE,OAAO,qBACrBa,OAAO,OACP/C,KAAK,UAAW,OA9GT,KAyGwB,EAKkB,IA9G1C,KAyGwB,EACiB,KAKhDA,KAAK,sBAAuB,iBAIjC+D,EAAgBhB,OAAO,QAClB/C,KAAK,CACFgE,MArHI,KAyGwB,EAa5BC,OAtHI,KAyGwB,EACiB,MAchD5G,MAAM,OAAQ,4BAEnB,IAEI6G,EAFUF,GA1HF,KAGgB,GAyHY,IAGpCG,EAAcD,EA/HN,KA+HwB,GAIdH,EACjBhB,OAAO,UACP/C,KAAK,CACF0D,MAAO,oBACPU,IAbMJ,GAaSE,GAAW,EAC1BG,GAbML,GAcNM,EAzII,KAGgB,GAsID,MAI3BP,EACKhB,OAAO,QACP/C,KAAK,CACFuE,EAAGJ,EACHK,EAtBMR,GA3HF,KA4I2B,MAOlC3G,MAAM,YAnJC,KAMgB,GA0Hc,IAmBI,MACzClB,KAAK,mBAGV4H,EACKhB,OAAO,UACP/C,KAAK,CACF0D,MAAO,qBACPU,IAjCMJ,GAiCSE,GAAW,EAC1BG,GANUI,GAOVH,EA7JI,KAIiB,IAyJD,OAI5BP,EACKhB,OAAO,QACP/C,KAAK,CACFuE,EAAGJ,EACHK,EA1CMR,GA3HF,KA4I2B,IAoBAA,KAOlC3G,MAAM,YAvKC,KAMgB,GA0Hc,IAuCI,MACzClB,KAAK,cAGV4H,EACKhB,OAAO,UACP/C,KAAK,CACF0D,MAAO,uBACPU,IArDMJ,GAqDSE,GAAW,EAC1BG,GA1BUI,GAtJN,KA0K8B,GAOlCH,EAjLI,KAIiB,IACO,IAgLpCP,EACKhB,OAAO,QACP/C,KAAK,CACFuE,EAAGJ,EACHK,EALgBE,oBAOnBrH,MAAM,YA3LC,KAMgB,GA0Hc,IA2DI,MACzClB,KAAK,iBAGSwB,GAAGuE,OAAO,sBAC7B6B,EACKhB,OAAO,QACP/C,KAAK,CACF0D,MAAO,iBACPiB,GA1EMX,GA2ENY,GAPkBC,mBAQlBC,GAAIZ,EACJa,GATkBF,qBAWrBxH,MAAM,eAlMiB2G,KAmMvBhE,KAAK,aAAc,OAASc,EAAUkE,SAAW,WAEtDjB,EACKhB,OAAO,QACP/C,KAAK,CACFuE,EAAGJ,EACHK,EAAGS,qBAEN5H,MAAM,YAlNC,KAMgB,GA0Hc,IAkFI,MACzClB,KAAK,qBAGV4H,EACKhB,OAAO,QACP/C,KAAK,CACF0D,MAAO,0BACPiB,GAhGMX,GAiGNY,GANiBK,IAOjBH,GAAIZ,EACJa,GARiBE,MAUpB5H,MAAM,eAxNiB2G,KAyNvBhE,KAAK,aAAc,OAASc,EAAUkE,SAAW,WAEtDjB,EACKhB,OAAO,QACP/C,KAAK,CACFuE,EAAGJ,EACHK,EAjBiBS,IArNb,KAsO6B,MAEpC5H,MAAM,YAxOC,KAMgB,GA0Hc,IAwGI,MACzClB,KAAK,qBAGV4H,EACKhB,OAAO,QACP/C,KAAK,CACF0D,MAAO,2BACPiB,GAtHMX,GAuHNY,GA5BiBK,IArNb,KA2O2C,GAO/CH,GAAIZ,EACJa,GA9BiBE,IArNb,KA2O2C,KAUlD5H,MAAM,eA7OqB2G,GA8O3BhE,KAAK,aAAc,OAASc,EAAUkE,SAAW,qBAEtDjB,EACKhB,OAAO,QACP/C,KAAK,CACFuE,EAAGJ,EACHK,EAAGU,oBAEN7H,MAAM,YA9PC,KAMgB,GA0Hc,IA8HI,MACzClB,KAAK,sBAIV,IAAIgJ,EAAIrC,EAEJsC,EAAiBtE,EAAUuE,SAASC,IACpCC,EAAiBzE,EAAUuE,SAASG,KACpCC,EAAY3E,EAAUuE,SAASI,UAEnC5E,EAAqB6E,mBAAmBN,EAAgBK,GACnDE,SAAQ,SAAUC,EAAUC,EAAQC,GACjCrE,EAAMsE,qBAAuBH,KAC9BI,OAAM,SAAUJ,GACnB1E,EAAO8E,MAAM,eAAiBT,EAAiB,eAYnDlG,EAAEV,QAAQV,GAAG,YAAY,WACrB8C,EAAoBkF,IAAIjF,EAAOkF,wBAAwB,MAG3DvF,EAAQwF,WAAa,SAAUzI,GACvBA,EAAM0I,OACN1F,EAAW2F,WAAW,4BAA6B3I,EAAM0I,MAAMX,YAIvEhE,EAAM6E,OAAO,iBAAiB,WACrBC,QAAQC,YAAY/E,EAAMG,iBAC3Bb,EAAoBkF,IAAIjF,EAAOyF,4BAA6BhF,EAAMG,eAKH,SAA3Db,EAAoB2F,IAAI1F,EAAOkF,yBA1B3C,SAAwBT,GACpB/E,EAAW2F,WAAW,iBAAkB,CACpCf,IAAKF,EACLI,KAAMD,EACNE,UAAWA,IAuBPkB,CAAelF,EAAMG,eAKzBb,EAAoB6F,OAAO5F,EAAOkF,4BAI1CzE,EAAM6E,OAAO,wBAAwB,WACjC,GAAI7E,EAAMsE,qBAAsB,CAC5B,IAAIc,EAAQN,QAAQO,KAAKrF,EAAMsE,sBAE/BxD,EACKwE,MAAMF,EAAME,OACZC,MAAMH,EAAMG,OAEjB,IAAIC,EAAY9B,EAAEpF,UAAU,SACvBmH,KAAKL,EAAMG,OACXG,QACApE,OAAO,KAEZ,SAASqE,EAA2BjK,GAChCA,EAAIE,MAAM,SAAUgE,GACpBlE,EAAIE,MAAM,eA3TU2G,GA4TpB7G,EAAI6C,KAAK,aAAc,OAASc,EAAUkE,SAAW,qBAGzD,IAAInD,EACAwF,EACAC,EAAoB,EAGxBL,EACKvH,MAAK,SAAUpB,GACZ,GAAIA,EAAEiJ,yBAA2BnC,EAC7BvD,EAAOoF,EACFlE,OAAO,QACP/C,KAAK,CACF0D,MAAO,OAEP,aAAc,OAAS5C,EAAUkE,SAAW,YAE/C3H,MAAM,eA/UH2G,KAgVHtE,MAAK,SAAUpB,GACZ,OAAQA,EAAEkJ,cACN,IAAK,aACDlJ,EAAEmJ,aA1V1B,KAGgB,GAwVQ,MACJ,IAAK,cACDnJ,EAAEmJ,aA7V1B,KAIiB,IA0VO,MACJ,IAAK,WACDnJ,EAAEmJ,aAhW1B,KAIiB,IACO,EA4VA,MACJ,QACInJ,EAAEmJ,aAAe,EAEzB,IAAItK,EAAMQ,GAAGuE,OAAOD,MAChB3D,EAAEoJ,oBAAsB,EACxBN,EAA2BjK,GACpBmB,EAAEqJ,UACTxK,EAAIE,MAAM,mBAAoB,eAGvC,CACH,GAAIkJ,QAAQC,YAAYa,GAAW,CAE/BA,EAAW1J,GAAGuE,OAAOD,MAChBc,OAAO,QACP/C,KAAK,CACF1B,EAAG,WAlXvB,KAGgB,GA2W+B,EAII,IAlXnD,KAGgB,GA2W+B,EAIyB,YAlXxE,KAGgB,GA2W+B,EAK3BoF,MAAO,YACPD,KAAM,OACN,aAAc,OAAS3C,EAAUkE,SAAW,iBAE/C3H,MAAM,eAhXP2G,MAmXRsD,GAAqBhJ,EAAEoJ,qBACC,GACpBN,EAA2BzJ,GAAGuE,OAAO,mBAKrD,IAAI0F,EAAgC,GAEpC,SAASC,IACAxI,EAAEyI,cAAcF,KACjBA,EAA8BzL,KAAKkB,MAAM,OAAQ,SACjDuK,EAA8BG,WAAW1K,MAAM,OAAQ,YAU/D,SAAS2K,EAA6B1J,GAClCuJ,IACAD,EAA8BzL,KAAOwB,GAAGuE,OAAOD,MAE/C2F,EAA8BG,WAAapK,GAAGuE,OAAOD,KAAKgG,iBAC1DL,EAA8BzL,KAAKkB,MAAM,OAAQ,SAEjDuK,EAA8BG,WAAW1K,MAAM,OAAQgE,GACvDJ,GAAS,WACLQ,EAAMC,yBAA0B,EAChCD,EAAME,kBAAoBrD,KAE9BX,GAAGD,MAAMwK,kBAhBb7I,EAAE,YAAY8I,OAAM,WAChB9I,EAAE,iBAAiB+I,KAAK,QAASP,MAmBrC,IAAIQ,EAAgBpB,EACflE,OAAO,QACP/C,KAAK,SAAS,SAAU1B,GACrB,OAAOA,EAAEiJ,yBAA2BnC,EAAiB,0BAA4B,mBAEpFpF,KAAK,MAAM,SAAU1B,GAElB,OAvaJ,KAGgB,GAoaW,GAAwB,eAAnBA,EAAEkJ,aAAgC,GAAK,MAEtEnK,MAAM,eAAe,SAAUiB,GAC5B,MAA0B,eAAnBA,EAAEkJ,aAAgC,MAAQ,WAEpDnK,MAAM,YA5aP,KAMgB,IAuaflB,MAAK,SAAUmC,GACZ,OAAOA,EAAEoJ,oBAAsB,EAAIpJ,EAAEoJ,oBAAsB,cAAgBpJ,EAAEkH,QAIrF6C,EACK3I,MAAK,SAAUpB,GACZ,IAAInB,EAAMQ,GAAGuE,OAAOD,MACC,iBAAiBqG,KAAKnL,EAAIhB,QAK3CgB,EACKE,MAAM,cAAe,QACrBY,GAAG,QAAS+J,GAIjB7K,EAAIc,GAAG,SAAS,SAAUK,GACtBqC,EAAQ4H,KAAK,gBAAkB/H,mBAAmBlC,EAAEgH,KAAM,gBAI1E,IAGIkD,EAAWvB,EACVlE,OAAO,QACP/C,KAAK,SAAS,SAAU1B,GACrB,OAAOA,EAAEiJ,yBAA2BnC,EAAiB,kBAAoB,0BAE5EpF,KAAK,SAAS,SAAU1B,GAErB,OADAA,EAAEmK,gBAAkBxG,KAAKgG,gBAAgBS,UAAU1E,MAC5C1F,EAAEmK,gBAAkBE,KAE9B3I,KAAK,UAAU,SAAU1B,GAEtB,OADAA,EAAEsK,iBAAmB3G,KAAKgG,gBAAgBS,UAAUzE,OAC7C3F,EAAEsK,iBAdC5E,KAgBbhE,KAAK,aAAa,SAAU1B,GAEzB,IAAIuK,EAlBM7E,EArcd,KAGgB,GAodmC,GAAwB,eAAnB1F,EAAEkJ,aAAgC,GAAK,GAI3F,MAHuB,eAAnBlJ,EAAEkJ,eACFqB,GAAcvK,EAAEmK,iBAEb,cAAgBI,EAAa,MAtB1B7E,EAsBgD1F,EAAEsK,iBAAmB,GAAK,OAEvF3K,GAAG,SAAS,SAAUK,GACnBX,GAAGD,MAAMwK,qBAIbY,EAAY3D,EAAEpF,UAAU,SACvBmH,KAAKL,EAAME,OACXI,QACApE,OAAO,KAER5C,EAAO2I,EACNC,QAAO,SAAUzK,GACd,OAAOA,EAAE0K,qBAAuB5D,KAEnCrC,OAAO,UACPrD,MAAK,SAAUpB,GACZ,IAAInB,EAAMQ,GAAGuE,OAAOD,MACI,SAApB3D,EAAE2K,cACF9L,EAAI6C,KAAK,CACL0D,MAAO,aACPY,EAjfZ,KAGgB,KAgfHtE,KAAK,aAAc,OAASc,EAAUkE,SAAW,eACrB,OAA1B1G,EAAE4K,oBACT/L,EAAI6C,KAAK,CACL0D,MAAO,gBACPY,EAvfZ,KAIiB,IACO,IAqfhBnH,EAAI6C,KAAK,CACL0D,MAAO,mBACPY,EA5fZ,KAIiB,SA4fhB6E,KAAKxG,GASVhF,GAAGoC,UAAU,qBACR9B,GAAG,YAPR,SAAoCK,EAAGmH,GACnChE,EAAM2H,QAAO,WACT1I,EAAW2F,WAAW,6BAA8B/H,EAAGmH,SAQ/DqD,EACKC,QAAO,SAAUzK,GACd,OAAOA,EAAE4K,qBAAuB5K,EAAE0K,qBAAuB5D,KAE5DrC,OAAO,QACP/C,KAAK,SAAS,SAAU1B,GACrB,OAAOA,EAAE2K,cAAgB,kBAE5B5L,MAAM,YArhBP,KAMgB,IAghBflB,MAAK,SAAUmC,GACZ,OAAOA,EAAE4K,uBAEZjL,GAAG,SAAS,SAAUK,GACnBqC,EAAQ4H,KAAK,gBAAkB/H,mBAAmBlC,EAAE0K,oBAAqB,aAGjF,IAAIE,EAAsBJ,EAAU5G,OAAO,QAE3CiD,EAAEjD,OAAO,eACJxC,MAAK,WACF/B,GAAGuE,OAAOD,KAAK7B,YACV2C,OAAO,QACP/C,KAAK,QAAS,mBACd3C,MAAM,aAAa,SAAUiB,GAC1B,OAAO,IAAGrC,KAAKY,aAAa0I,EAriBxC,KAGgB,OAoiBPpJ,KAAKoJ,GACLtH,GAAG,SAAS,SAAUK,GACnBqC,EAAQ4H,KAAK,gBAAkB/H,mBAAmB4E,GAAiB,gBAKnF,IAAIiE,EAAelE,EAAEjD,OAAO,sBACxBoH,EAAY3L,GAAGuE,OAAO,eACtBqH,EAAwB5L,GAAGoC,UAAU,yBACrCyJ,EAAuB7L,GAAGoC,UAAU,4BAIxC,GAFAsI,EAAgB1K,GAAGoC,UAAU,mBAExBwG,QAAQC,YAAYa,GAAW,CAChC,IAAIoC,EAA0B,GAE9BF,EAAsB7J,MAAK,SAAUpB,EAAGoL,GAC1B/L,GAAGuE,OAAOD,MACpBwH,EAAwBE,KAAK,CACzBC,IAAKF,EACL1F,MAAO1F,EAAEmK,gBACTxE,OAAQ3F,EAAEsK,sBA+RtBrG,EACKtE,GAAG,QA3RR,SAAc4L,GACV,IAAIC,EAAI,EAAID,EAAEE,MAsHd,SAASC,EAA4B1L,GACjC,IAAI2L,EAAsB3L,EAAEiG,EA1rBhC,KAGgB,GAurBoC,EAC5C2F,EAAsB5L,EAAEkG,EA3rBhC,KAGgB,GAwrBoC,IA+ChD,IAAI2F,EAAmB,GACvBZ,EAAsB7J,MAAK,SAAU0K,EAAIV,GACrCS,EAAiBR,KAAKS,GAClBV,EAAIpI,EAhDZ,SAAoBnE,EAAKuM,GACrB,IAAIW,EACAhL,EAAEiL,KAAKb,GAAyB,SAAUc,GACtC,OAAOA,EAAIX,KAAOF,KAEtBA,EAAI,IACJO,GAAuBO,WAAWd,GAAKW,EAA6B,GAAGpG,QAAUyF,EAAI,QAGzFvM,EACK6C,KAAK,CACFyK,UAAW,eAAiBnM,EAAEiG,EAAI,IAAMjG,EAAEkG,EAAI,eAAiByF,EAAsB,IAAMC,EAAsB,IACjHlG,MAAOqG,EAA6B,GAAGpG,OACvCA,OAAQoG,EAA6B,GAAGrG,QAoC5C0G,CAAW/M,GAAGuE,OAAOD,MAAOyH,GAE5B/L,GAAGuE,OAAOD,MAAM2E,YA3BxB,SAAuCuD,GACnC,IAAIQ,EACJhN,GAAGuE,OAAO,0BAEL7E,MAAM,cAAe,QACrBqC,MAAK,SAAUpB,GAGZA,EAAEsM,OAAOC,SAAWV,EAGpBQ,EAAoB1I,KAAK6I,2BAE5B7M,GAAG,QAAS+J,GAEjBrK,GAAGuE,OAAO,yBAGLlC,KAAK,SAAU2K,EAAoB,GAa5CI,CAA8BZ,GArKlCtI,EACKkH,QAAO,SAAUzK,GACd,OAAOA,EAAEiJ,yBAA2BnC,KAEvCpF,KAAK,MAAM,SAAU1B,GAClB,OAAOA,EAAE0M,OAAOzG,KAEnBvE,KAAK,MAAM,SAAU1B,GAClB,OAAOA,EAAE0M,OAAOxG,KAEnBxE,KAAK,MAAM,SAAU1B,GAClB,OAAOA,EAAE4F,WAEZlE,KAAK,MAAM,SAAU1B,GAClB,OAAOA,EAAE2M,WAEZvL,MAAK,SAAUpB,IA1BpB,SAAiCA,GACN,eAAnBA,EAAEkJ,cACFlJ,EAAE0M,OAAOzG,GAAK,EAAIuF,EAClBxL,EAAE0M,OAAOxG,GAAKsF,EAAI,IAElBxL,EAAEsM,OAAOrG,GAAK,EAAIuF,EAClBxL,EAAEsM,OAAOpG,GAAKsF,EAAI,GAqBlBoB,CAAwB5M,GAGxB,IAAI6M,EAAQxO,KAAKyO,MAAM9M,EAAEsM,OAAOpG,EAAIlG,EAAE0M,OAAOxG,EAAGlG,EAAEsM,OAAOrG,EAAIjG,EAAE0M,OAAOzG,GACtEjG,EAAE4F,QAAU5F,EAAEsM,OAAOrG,EAAI5H,KAAK0O,IAAIF,GAAS7M,EAAEmJ,aAC7CnJ,EAAE2M,QAAU3M,EAAEsM,OAAOpG,EAAI7H,KAAK2O,IAAIH,GAAS7M,EAAEmJ,gBA+JrDtH,EACKT,MAAK,SAAUpB,GACY,SAApBA,EAAE2K,eAA6B1C,QAAQC,YAAYa,MA9J/D,SAA0B/I,GACtB,IAAIiN,EAAiBjN,EAAEiG,EAAIiH,GACvBC,EAAiBnN,EAAEkG,EA1mB3B,KAGgB,GAumB+B,IAAM,EACjD6C,EAASrH,KAAK,YAAa,eAAiB1B,EAAEiG,EAAI,IAAMjG,EAAEkG,EAAI,eAAiB+G,EAAiB,IAAME,EAAiB,KA4J/GC,CAAiBpN,GAzJ7B,SAAgCA,GAC5B,SAASoM,EAAWvN,EAAKuM,GACrB,IAAIW,EACAhL,EAAEiL,KAAKb,GAAyB,SAAUc,GACtC,OAAOA,EAAIX,KAAOF,KAEtBiC,EAA0B,EAC1BjC,EAAI,IACJiC,EAA0BnB,WAAW,EAAId,GAAKW,EAA6B,GAAGpG,OAAS,OAG3F,IAAI2H,EAAiBtN,EAAEiG,EACnBsH,EAAiBvN,EAAEkG,EA1nB/B,KAGgB,GAunBmC,IAAMmH,EAEjDxO,EACK6C,KAAK,CACFuE,EAAGqH,EACHpH,EAAGqH,IAEN7J,cAwBTwH,EAAqB9J,MAAK,SAAU0K,EAAIV,GACpC,IAAIvM,EAAMQ,GAAGuE,OAAOD,MAEhB6J,EAAiBtC,EAAqB/G,OAASnB,EAC/CwK,EAAiB,EACjBpB,EAAWvN,EAAKuM,IAEP,GAALA,IAAWjI,EAAMG,eAAiBkK,EAAiB,KAjB/D,SAAuCC,EAAUC,EAAeF,GAC5DC,EACKnJ,QAAQ,yBAAyB,GACjCzG,KAAK2P,EAAiB,wBACF,OAArB7J,KAAKgK,aACLD,EACKpJ,QAAQ,wBAAwB,GAYjCsJ,CAA8B/O,EAAKQ,GAAGuE,OAAOD,KAAKgK,aAAcH,GAChEpB,EAAWvN,EAAKuM,IAGhBA,EAAIpI,EACJoJ,EAAWvN,EAAKuM,GAEhBvM,EAAIyJ,aAgGRuF,CAAuB7N,GACvB0L,EAA4B1L,IAG5BA,EAAE0K,qBAAuB5D,GACzBzH,GAAGuE,OAAOD,MACLjC,KAAK,MAAM,SAAU1B,GAElB,MAAwB,SAApBA,EAAE2K,cAxB1B,SAAyB3K,IACfK,OAAoB,eAAK,kBAAmBA,SAC9ChC,KAAKyP,MAAQ,SAAU7H,GACnB,OAAO5H,KAAK0P,IAAI9H,GAAK5H,KAAK2P,OAGlC,IAAIC,EAAUjD,EAAUtJ,KAAK,MAAQgE,IACjCwI,EAA4C,GAAhC7P,KAAKyP,MAAMzP,KAAK8P,IAAIF,IAEpC,OADAjO,EAAEiG,GAAKgI,EAAU,GAAKC,EAAYA,EAC3BlO,EAAEiG,EAgBkBmI,CAAgBpO,GAEpBA,EAAEiG,KAEZvE,KAAK,MAAM,SAAU1B,GAClB,OAAOA,EAAEkG,QAM7B6E,EACKrJ,KAAK,KAAK,SAAU1B,GACjB,OAAOA,EAAEiG,KAEZvE,KAAK,KAAK,SAAU1B,GACjB,OAAOA,EAAEkG,KAEZxC,cAGLwG,EACKO,QAAO,SAAUzK,GACd,OAAOA,EAAEiJ,yBAA2BnC,KAEvCpF,KAAK,KAAK,SAAU1B,GACjB,OAAIA,EAAEsM,OAAOrG,EAAIjG,EAAE0M,OAAOzG,EACdjG,EAAE0M,OAAOzG,GAAKjG,EAAEsM,OAAOrG,EAAIjG,EAAE0M,OAAOzG,GAAK,EAEzCjG,EAAEsM,OAAOrG,GAAKjG,EAAE0M,OAAOzG,EAAIjG,EAAEsM,OAAOrG,GAAK,KAGxDvE,KAAK,KAAK,SAAU1B,GACjB,OAAIA,EAAEsM,OAAOpG,EAAIlG,EAAE0M,OAAOxG,EACdlG,EAAE0M,OAAOxG,GAAKlG,EAAEsM,OAAOpG,EAAIlG,EAAE0M,OAAOxG,GAAK,EAEzClG,EAAEsM,OAAOpG,GAAKlG,EAAE0M,OAAOxG,EAAIlG,EAAEsM,OAAOpG,GAAK,KAGxDxC,cAGLqG,EACKrI,KAAK,KAAK,SAAU1B,GACjB,OAAIA,EAAEsM,OAAOrG,EAAIjG,EAAE0M,OAAOzG,EACdjG,EAAE0M,OAAOzG,GAAKjG,EAAEsM,OAAOrG,EAAIjG,EAAE0M,OAAOzG,GAAK,EAEzCjG,EAAEsM,OAAOrG,GAAKjG,EAAE0M,OAAOzG,EAAIjG,EAAEsM,OAAOrG,GAAK,KAGxDvE,KAAK,KAAK,SAAU1B,GACjB,OAAIA,EAAEsM,OAAOpG,EAAIlG,EAAE0M,OAAOxG,EACdlG,EAAE0M,OAAOxG,GAAKlG,EAAEsM,OAAOpG,EAAIlG,EAAE0M,OAAOxG,GAAK,EAEzClG,EAAEsM,OAAOpG,GAAKlG,EAAE0M,OAAOxG,EAAIlG,EAAEsM,OAAOpG,GAAK,KAGxDxC,cAGLkH,EACKlJ,KAAK,KAAK,SAAU1B,GACjB,MAAwB,UAApBA,EAAE2K,cACK3K,EAAEiG,EAh1BrB,KAIiB,IA40ByB,IAEvBjG,EAAEiG,EAl1BrB,KAIiB,IA80ByB,OAGrCvE,KAAK,KAAK,SAAU1B,GACjB,OAAOA,EAAEkG,KAEZxC,iBAMJ2K,aA91BD,KA81BsB,KACrBC,YAv3BTC,CAAuBpL,KACxB,IAEHA,EAAMqL,IAAI,YAAY,WAClB7L,EAAS8L,OAAOjL,QA/B5ByE,QACKyG,OAAO,wDAAyD,CAC7D,yDACA,gDAEHC,SAAS,WAAY,sBACrBA,SAAS,aAAc,qBACvBA,SAAS,YAAa,oBACtBA,SAAS,qCAAsC,GAC/CC,UAAU,mBAAoBzM,GAEnCA,EAA0B0M,QAAU,CAAC,aAAc,UAAW,gBAAiB,uBAAwB,YAAa,sBAAuB,SAAU,WAAY,SAAU,WAAY,aAAc,YAAa","file":"30.4b987e71408e0643680a.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.1.1-TR2\");\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([[31,82,83],{123:function(t,e,r){"use strict";r.r(e);r(4),r(11),r(78),r(79),r(10),r(34),r(35);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"])},78:function(t,e,r){"use strict";r.r(e);r(4),r(13);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}}])},79:function(t,e,r){"use strict";r.r(e);r(4),r(13);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.1.0">{{\'common.loading\' | translate}}</object>')}))}}}))}}]);
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[31,82,83],{123:function(t,e,r){"use strict";r.r(e);r(4),r(11),r(78),r(79),r(10),r(34),r(35);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"])},78:function(t,e,r){"use strict";r.r(e);r(4),r(13);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}}])},79:function(t,e,r){"use strict";r.r(e);r(4),r(13);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.1.1-TR2">{{\'common.loading\' | translate}}</object>')}))}}}))}}]);
2
2
  //# sourceMappingURL=31.5af5b75cd1ac5d00370e.bundle.js.map