graphdb-workbench 1.11.2 → 1.11.3-TR1

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 (273) hide show
  1. package/dist/10.94e753e068396d6b6ec9.bundle.js +2 -0
  2. package/dist/10.94e753e068396d6b6ec9.bundle.js.map +1 -0
  3. package/dist/11.043e8d20764e39c10e31.bundle.js +2 -0
  4. package/dist/11.043e8d20764e39c10e31.bundle.js.map +1 -0
  5. package/dist/111.73819c3722ceee587ce7.bundle.js +2 -0
  6. package/dist/111.73819c3722ceee587ce7.bundle.js.map +1 -0
  7. package/dist/112.b48a6ea437c1c3ddd7b5.bundle.js +2 -0
  8. package/dist/112.b48a6ea437c1c3ddd7b5.bundle.js.map +1 -0
  9. package/dist/113.09a0a17c31bfc387c352.bundle.js +2 -0
  10. package/dist/113.09a0a17c31bfc387c352.bundle.js.map +1 -0
  11. package/dist/{114.edebb3161ce52d4ca2e1.bundle.js → 114.dcc909bf7059e08fad2a.bundle.js} +2 -2
  12. package/dist/{114.edebb3161ce52d4ca2e1.bundle.js.map → 114.dcc909bf7059e08fad2a.bundle.js.map} +1 -1
  13. package/dist/119.08aed6d34851afdefac5.bundle.js +2 -0
  14. package/dist/119.08aed6d34851afdefac5.bundle.js.map +1 -0
  15. package/dist/12.bb55709d82da219afedf.bundle.js +2 -0
  16. package/dist/12.bb55709d82da219afedf.bundle.js.map +1 -0
  17. package/dist/121.574db48a413271cafc2e.bundle.js +2 -0
  18. package/dist/121.574db48a413271cafc2e.bundle.js.map +1 -0
  19. package/dist/123.9ba8fea15f3fcddc734d.bundle.js +2 -0
  20. package/dist/123.9ba8fea15f3fcddc734d.bundle.js.map +1 -0
  21. package/dist/125.4ffda62ed511df3132f6.bundle.js +2 -0
  22. package/dist/125.4ffda62ed511df3132f6.bundle.js.map +1 -0
  23. package/dist/126.c5fd3ba65878ffcc3c03.bundle.js +2 -0
  24. package/dist/126.c5fd3ba65878ffcc3c03.bundle.js.map +1 -0
  25. package/dist/129.5d023d0fbbb2c517932c.bundle.js +2 -0
  26. package/dist/129.5d023d0fbbb2c517932c.bundle.js.map +1 -0
  27. package/dist/131.e7a34e7f2b2e5898249d.bundle.js +2 -0
  28. package/dist/131.e7a34e7f2b2e5898249d.bundle.js.map +1 -0
  29. package/dist/132.b98cc245bf2c668b2ffd.bundle.js +2 -0
  30. package/dist/132.b98cc245bf2c668b2ffd.bundle.js.map +1 -0
  31. package/dist/134.72b76429fe72a9fc5119.bundle.js +2 -0
  32. package/dist/134.72b76429fe72a9fc5119.bundle.js.map +1 -0
  33. package/dist/136.991f41ef4565f68c31a7.bundle.js +2 -0
  34. package/dist/136.991f41ef4565f68c31a7.bundle.js.map +1 -0
  35. package/dist/137.b62f0afcb15c29764c04.bundle.js +2 -0
  36. package/dist/137.b62f0afcb15c29764c04.bundle.js.map +1 -0
  37. package/dist/138.fba22be7b3b98750e0c3.bundle.js +2 -0
  38. package/dist/138.fba22be7b3b98750e0c3.bundle.js.map +1 -0
  39. package/dist/{14.0c709b039159410b0b91.bundle.js → 14.6f8b993e972dee32e159.bundle.js} +2 -2
  40. package/dist/14.6f8b993e972dee32e159.bundle.js.map +1 -0
  41. package/dist/140.b4777706146b1ac867ed.bundle.js +2 -0
  42. package/dist/140.b4777706146b1ac867ed.bundle.js.map +1 -0
  43. package/dist/141.4464fb26b1893e0dbc7a.bundle.js +2 -0
  44. package/dist/141.4464fb26b1893e0dbc7a.bundle.js.map +1 -0
  45. package/dist/142.4d4fdae663dbeb2df310.bundle.js +2 -0
  46. package/dist/142.4d4fdae663dbeb2df310.bundle.js.map +1 -0
  47. package/dist/145.c9ab7d2a56005326406c.bundle.js +2 -0
  48. package/dist/145.c9ab7d2a56005326406c.bundle.js.map +1 -0
  49. package/dist/146.f5efcb8ef74bf52d3daf.bundle.js +2 -0
  50. package/dist/146.f5efcb8ef74bf52d3daf.bundle.js.map +1 -0
  51. package/dist/{147.0798c61ee5472e70b552.bundle.js → 147.fa44265c07ea2c3c5615.bundle.js} +2 -2
  52. package/dist/{147.0798c61ee5472e70b552.bundle.js.map → 147.fa44265c07ea2c3c5615.bundle.js.map} +1 -1
  53. package/dist/148.8b1e910543c6c25b2f0b.bundle.js +2 -0
  54. package/dist/148.8b1e910543c6c25b2f0b.bundle.js.map +1 -0
  55. package/dist/15.eb562ad073aa0fcd725f.bundle.js +2 -0
  56. package/dist/15.eb562ad073aa0fcd725f.bundle.js.map +1 -0
  57. package/dist/16.0a3c03f05a4bbdfe83ef.bundle.js +2 -0
  58. package/dist/16.0a3c03f05a4bbdfe83ef.bundle.js.map +1 -0
  59. package/dist/18.c3e44ed00a2532402729.bundle.js +3 -0
  60. package/dist/18.c3e44ed00a2532402729.bundle.js.map +1 -0
  61. package/dist/20.264daf29beccbf7de84a.bundle.js +2 -0
  62. package/dist/20.264daf29beccbf7de84a.bundle.js.map +1 -0
  63. package/dist/22.e85ffde858c596437b7a.bundle.js +1 -1
  64. package/dist/22.e85ffde858c596437b7a.bundle.js.map +1 -1
  65. package/dist/23.c58eff831306fad29d42.bundle.js +2 -0
  66. package/dist/23.c58eff831306fad29d42.bundle.js.map +1 -0
  67. package/dist/25.8c10d875bf32c8648157.bundle.js +2 -0
  68. package/dist/25.8c10d875bf32c8648157.bundle.js.map +1 -0
  69. package/dist/{26.57526f30f6b3c581334d.bundle.js → 26.c59631eb4bc0bf8d26b2.bundle.js} +2 -2
  70. package/dist/26.c59631eb4bc0bf8d26b2.bundle.js.map +1 -0
  71. package/dist/27.ed9e0cc8aaa3a12c1fa2.bundle.js +2 -0
  72. package/dist/27.ed9e0cc8aaa3a12c1fa2.bundle.js.map +1 -0
  73. package/dist/28.8f5d9fc8ee46db2a6357.bundle.js +2 -0
  74. package/dist/28.8f5d9fc8ee46db2a6357.bundle.js.map +1 -0
  75. package/dist/30.d341c7532759bc79f41a.bundle.js +1 -1
  76. package/dist/30.d341c7532759bc79f41a.bundle.js.map +1 -1
  77. package/dist/{32.ba5b5ca3e4b7dcf5bd15.bundle.js → 32.1059e272ed99ba3db699.bundle.js} +2 -2
  78. package/dist/32.1059e272ed99ba3db699.bundle.js.map +1 -0
  79. package/dist/{35.b8c8d16a8707c20a1fcb.bundle.js → 35.1f53c71368afc468cc10.bundle.js} +2 -2
  80. package/dist/35.1f53c71368afc468cc10.bundle.js.map +1 -0
  81. package/dist/{36.d96e6ee811e8340ae320.bundle.js → 36.aced0c9768c16e4d29ef.bundle.js} +2 -2
  82. package/dist/36.aced0c9768c16e4d29ef.bundle.js.map +1 -0
  83. package/dist/37.dcbe2e4e1f86ca2da209.bundle.js +1 -1
  84. package/dist/37.dcbe2e4e1f86ca2da209.bundle.js.map +1 -1
  85. package/dist/38.171aa543e807777b4f29.bundle.js +1 -1
  86. package/dist/38.171aa543e807777b4f29.bundle.js.map +1 -1
  87. package/dist/40.f660048c67e9b6d478dc.bundle.js +2 -0
  88. package/dist/40.f660048c67e9b6d478dc.bundle.js.map +1 -0
  89. package/dist/{42.190f8880ee8f3a97a042.bundle.js → 42.9bbccd6cb2c263d7b873.bundle.js} +2 -2
  90. package/dist/42.9bbccd6cb2c263d7b873.bundle.js.map +1 -0
  91. package/dist/{43.899bf21ce1de203ace21.bundle.js → 43.6f609ec150488009b166.bundle.js} +2 -2
  92. package/dist/43.6f609ec150488009b166.bundle.js.map +1 -0
  93. package/dist/{44.c649782fa0755b53a62c.bundle.js → 44.8be8b582a97146d3ad6f.bundle.js} +2 -2
  94. package/dist/44.8be8b582a97146d3ad6f.bundle.js.map +1 -0
  95. package/dist/47.b94dca10f70c70009f46.bundle.js +2 -0
  96. package/dist/47.b94dca10f70c70009f46.bundle.js.map +1 -0
  97. package/dist/{48.52c5b13ab244c45a8c43.bundle.js → 48.10699147cdbee9af3c2b.bundle.js} +2 -2
  98. package/dist/48.10699147cdbee9af3c2b.bundle.js.map +1 -0
  99. package/dist/{5.21d2da4b4bc2b26e2534.bundle.js → 5.275d1f74283aff0821f2.bundle.js} +2 -2
  100. package/dist/5.275d1f74283aff0821f2.bundle.js.map +1 -0
  101. package/dist/{56.ce399f5788c0f5fe937b.bundle.js → 56.dae3cb719fcb013d7a06.bundle.js} +2 -2
  102. package/dist/56.dae3cb719fcb013d7a06.bundle.js.map +1 -0
  103. package/dist/68.5fa639981e7ce624fb73.bundle.js +2 -0
  104. package/dist/68.5fa639981e7ce624fb73.bundle.js.map +1 -0
  105. package/dist/{7.a0f5ec224bebd08058f4.bundle.js → 7.9946929545b7635857ac.bundle.js} +2 -2
  106. package/dist/7.9946929545b7635857ac.bundle.js.map +1 -0
  107. package/dist/75.3dd1e0c0ad0cf40ed6a1.bundle.js +2 -0
  108. package/dist/75.3dd1e0c0ad0cf40ed6a1.bundle.js.map +1 -0
  109. package/dist/78.6caec59329b53bb098ee.bundle.js +2 -0
  110. package/dist/78.6caec59329b53bb098ee.bundle.js.map +1 -0
  111. package/dist/{79.f4a2c3ec71bed08d61b9.bundle.js → 79.0f7567cb18c210d45806.bundle.js} +2 -2
  112. package/dist/79.0f7567cb18c210d45806.bundle.js.map +1 -0
  113. package/dist/{9.c9fc88a79b7990e29e04.bundle.js → 9.c4b55fc1e3fc858be626.bundle.js} +2 -2
  114. package/dist/9.c4b55fc1e3fc858be626.bundle.js.map +1 -0
  115. package/dist/{94.3efcd047d4d4e506cbd7.bundle.js → 94.afe4c166f07dbf1bc30f.bundle.js} +2 -2
  116. package/dist/94.afe4c166f07dbf1bc30f.bundle.js.map +1 -0
  117. package/dist/{96.754454264340bc9d9a70.bundle.js → 96.f7d3f181e8860ce2bd8b.bundle.js} +2 -2
  118. package/dist/96.f7d3f181e8860ce2bd8b.bundle.js.map +1 -0
  119. package/dist/bundle.48ae48a008439cff2323.bundle.js +79 -0
  120. package/dist/bundle.48ae48a008439cff2323.bundle.js.map +1 -0
  121. package/dist/index.html +7 -7
  122. package/dist/js/angular/core/directives/queryeditor/templates/query-editor.html +18 -18
  123. package/dist/js/angular/core/directives/queryeditor/templates/query-sample.html +1 -1
  124. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +3 -3
  125. package/dist/js/angular/core/templates/core-errors.html +1 -1
  126. package/dist/js/angular/core/templates/search-resource-input.html +3 -3
  127. package/dist/js/angular/externalsync/templates/deleteConnector.html +1 -1
  128. package/dist/js/angular/graphexplore/templates/modal/save-graph.html +1 -1
  129. package/dist/js/angular/graphexplore/templates/rdfsCommentLabelTemplate.html +3 -3
  130. package/dist/js/angular/graphexplore/templates/searchIconInputTemplate.html +3 -3
  131. package/dist/js/angular/import/templates/filesTable.html +12 -12
  132. package/dist/js/angular/import/templates/settingsModal.html +19 -19
  133. package/dist/js/angular/import/templates/textSnippet.html +4 -4
  134. package/dist/js/angular/import/templates/urlImport.html +4 -4
  135. package/dist/js/angular/repositories/templates/fedx-repo.html +28 -19
  136. package/dist/js/angular/repositories/templates/ontop-repo.html +8 -8
  137. package/dist/js/angular/security/templates/modal/default-authorities.html +3 -3
  138. package/dist/js/angular/security/templates/user.html +12 -12
  139. package/dist/js/angular/security/templates/users.html +11 -11
  140. package/dist/js/angular/settings/modal/location-settings.html +5 -5
  141. package/dist/js/angular/templates/modal/add-location.html +3 -3
  142. package/dist/js/angular/templates/modal/edit-location.html +3 -3
  143. package/dist/js/angular/templates/modal/editRepoFile.html +1 -1
  144. package/dist/js/angular/templates/modal/upload-repository-config.html +2 -2
  145. package/dist/pages/autocomplete.html +8 -8
  146. package/dist/pages/choose-repository-type.html +1 -1
  147. package/dist/pages/clusterInfo.html +2 -2
  148. package/dist/pages/connectorsInfo.html +5 -5
  149. package/dist/pages/create-index.html +16 -16
  150. package/dist/pages/createConnector.html +22 -22
  151. package/dist/pages/dependencies.html +12 -12
  152. package/dist/pages/domainRangeInfo.html +4 -4
  153. package/dist/pages/edit.html +7 -7
  154. package/dist/pages/explore.html +10 -10
  155. package/dist/pages/export.html +14 -14
  156. package/dist/pages/find.html +2 -2
  157. package/dist/pages/graph-config/saveGraphConfig.html +28 -40
  158. package/dist/pages/graphs-visualizations.html +46 -46
  159. package/dist/pages/home.html +10 -10
  160. package/dist/pages/import.html +7 -7
  161. package/dist/pages/info.html +16 -16
  162. package/dist/pages/jdbc-create.html +20 -20
  163. package/dist/pages/jdbc.html +3 -3
  164. package/dist/pages/licenseInfo.html +1 -1
  165. package/dist/pages/login.html +2 -2
  166. package/dist/pages/monitor/queries.html +6 -6
  167. package/dist/pages/monitor/resources.html +3 -3
  168. package/dist/pages/namespaces.html +14 -14
  169. package/dist/pages/ontorefine.html +1 -1
  170. package/dist/pages/rdfClassHierarchyInfo.html +16 -16
  171. package/dist/pages/rdfrank.html +17 -17
  172. package/dist/pages/registerLicenseInfo.html +3 -3
  173. package/dist/pages/repositories.html +22 -22
  174. package/dist/pages/repository.html +28 -28
  175. package/dist/pages/similarity-indexes.html +15 -15
  176. package/dist/pages/sparql-template-create.html +9 -9
  177. package/dist/pages/sparql-templates.html +3 -3
  178. package/dist/pages/sparql.html +8 -8
  179. package/dist/pages/webapi.html +3 -3
  180. package/dist/res/swagger/index.html +25 -25
  181. package/package.json +5 -4
  182. package/dist/10.f0277e5092cea150b5a8.bundle.js +0 -2
  183. package/dist/10.f0277e5092cea150b5a8.bundle.js.map +0 -1
  184. package/dist/11.bdd794940dcfd5daa9a1.bundle.js +0 -2
  185. package/dist/11.bdd794940dcfd5daa9a1.bundle.js.map +0 -1
  186. package/dist/111.056eb71072bfd8f6551b.bundle.js +0 -2
  187. package/dist/111.056eb71072bfd8f6551b.bundle.js.map +0 -1
  188. package/dist/112.50fd62c66c6594e055a3.bundle.js +0 -2
  189. package/dist/112.50fd62c66c6594e055a3.bundle.js.map +0 -1
  190. package/dist/113.2c059fa7d06fd04149eb.bundle.js +0 -2
  191. package/dist/113.2c059fa7d06fd04149eb.bundle.js.map +0 -1
  192. package/dist/119.dfdf8b9afa2c31b90232.bundle.js +0 -2
  193. package/dist/119.dfdf8b9afa2c31b90232.bundle.js.map +0 -1
  194. package/dist/12.a3762f9fba854a28c1cb.bundle.js +0 -2
  195. package/dist/12.a3762f9fba854a28c1cb.bundle.js.map +0 -1
  196. package/dist/121.aa10886f87136602a6cf.bundle.js +0 -2
  197. package/dist/121.aa10886f87136602a6cf.bundle.js.map +0 -1
  198. package/dist/123.318a247a0939300080aa.bundle.js +0 -2
  199. package/dist/123.318a247a0939300080aa.bundle.js.map +0 -1
  200. package/dist/125.4978d60a14b65499a047.bundle.js +0 -2
  201. package/dist/125.4978d60a14b65499a047.bundle.js.map +0 -1
  202. package/dist/126.4a830f0d18f079b1dca7.bundle.js +0 -2
  203. package/dist/126.4a830f0d18f079b1dca7.bundle.js.map +0 -1
  204. package/dist/129.7ca4a0a32cacb6feb225.bundle.js +0 -2
  205. package/dist/129.7ca4a0a32cacb6feb225.bundle.js.map +0 -1
  206. package/dist/131.087611adf6562e7e1b00.bundle.js +0 -2
  207. package/dist/131.087611adf6562e7e1b00.bundle.js.map +0 -1
  208. package/dist/132.b1ed3e4c9238c5b6303b.bundle.js +0 -2
  209. package/dist/132.b1ed3e4c9238c5b6303b.bundle.js.map +0 -1
  210. package/dist/134.653804476f9803033cbe.bundle.js +0 -2
  211. package/dist/134.653804476f9803033cbe.bundle.js.map +0 -1
  212. package/dist/136.5d60eb9d8d66581003ce.bundle.js +0 -2
  213. package/dist/136.5d60eb9d8d66581003ce.bundle.js.map +0 -1
  214. package/dist/137.0cfdd5934c6a400ab990.bundle.js +0 -2
  215. package/dist/137.0cfdd5934c6a400ab990.bundle.js.map +0 -1
  216. package/dist/138.611df35cbfdfec860909.bundle.js +0 -2
  217. package/dist/138.611df35cbfdfec860909.bundle.js.map +0 -1
  218. package/dist/14.0c709b039159410b0b91.bundle.js.map +0 -1
  219. package/dist/140.b0310ba39e9c3237f48a.bundle.js +0 -2
  220. package/dist/140.b0310ba39e9c3237f48a.bundle.js.map +0 -1
  221. package/dist/141.5d76be84a3151e69fc9d.bundle.js +0 -2
  222. package/dist/141.5d76be84a3151e69fc9d.bundle.js.map +0 -1
  223. package/dist/142.a4094b510036aaf72b0b.bundle.js +0 -2
  224. package/dist/142.a4094b510036aaf72b0b.bundle.js.map +0 -1
  225. package/dist/145.6536295098a4f2e030e3.bundle.js +0 -2
  226. package/dist/145.6536295098a4f2e030e3.bundle.js.map +0 -1
  227. package/dist/146.ee9db0da29c25ec7fbf9.bundle.js +0 -2
  228. package/dist/146.ee9db0da29c25ec7fbf9.bundle.js.map +0 -1
  229. package/dist/148.0ce4968734a80e71b2b9.bundle.js +0 -2
  230. package/dist/148.0ce4968734a80e71b2b9.bundle.js.map +0 -1
  231. package/dist/15.fc7c799455b5aec64393.bundle.js +0 -2
  232. package/dist/15.fc7c799455b5aec64393.bundle.js.map +0 -1
  233. package/dist/16.005766c64d76f95231b1.bundle.js +0 -2
  234. package/dist/16.005766c64d76f95231b1.bundle.js.map +0 -1
  235. package/dist/18.2ddbba81e5b663db1894.bundle.js +0 -3
  236. package/dist/18.2ddbba81e5b663db1894.bundle.js.map +0 -1
  237. package/dist/20.a35d80fb5e80ae3874ce.bundle.js +0 -2
  238. package/dist/20.a35d80fb5e80ae3874ce.bundle.js.map +0 -1
  239. package/dist/23.102a20601f717ba91551.bundle.js +0 -2
  240. package/dist/23.102a20601f717ba91551.bundle.js.map +0 -1
  241. package/dist/25.bd69d5c4040e1547800b.bundle.js +0 -2
  242. package/dist/25.bd69d5c4040e1547800b.bundle.js.map +0 -1
  243. package/dist/26.57526f30f6b3c581334d.bundle.js.map +0 -1
  244. package/dist/27.ab75434b1389b977291c.bundle.js +0 -2
  245. package/dist/27.ab75434b1389b977291c.bundle.js.map +0 -1
  246. package/dist/28.b2180a7cba95d9328e1a.bundle.js +0 -2
  247. package/dist/28.b2180a7cba95d9328e1a.bundle.js.map +0 -1
  248. package/dist/32.ba5b5ca3e4b7dcf5bd15.bundle.js.map +0 -1
  249. package/dist/35.b8c8d16a8707c20a1fcb.bundle.js.map +0 -1
  250. package/dist/36.d96e6ee811e8340ae320.bundle.js.map +0 -1
  251. package/dist/40.c754ab2b3b35c2acb854.bundle.js +0 -2
  252. package/dist/40.c754ab2b3b35c2acb854.bundle.js.map +0 -1
  253. package/dist/42.190f8880ee8f3a97a042.bundle.js.map +0 -1
  254. package/dist/43.899bf21ce1de203ace21.bundle.js.map +0 -1
  255. package/dist/44.c649782fa0755b53a62c.bundle.js.map +0 -1
  256. package/dist/47.421938875d2461427ae3.bundle.js +0 -2
  257. package/dist/47.421938875d2461427ae3.bundle.js.map +0 -1
  258. package/dist/48.52c5b13ab244c45a8c43.bundle.js.map +0 -1
  259. package/dist/5.21d2da4b4bc2b26e2534.bundle.js.map +0 -1
  260. package/dist/56.ce399f5788c0f5fe937b.bundle.js.map +0 -1
  261. package/dist/68.6b887fe6160e5bd8742b.bundle.js +0 -2
  262. package/dist/68.6b887fe6160e5bd8742b.bundle.js.map +0 -1
  263. package/dist/7.a0f5ec224bebd08058f4.bundle.js.map +0 -1
  264. package/dist/75.dbd9915663de96056138.bundle.js +0 -2
  265. package/dist/75.dbd9915663de96056138.bundle.js.map +0 -1
  266. package/dist/78.608f8074bef29a89d68b.bundle.js +0 -2
  267. package/dist/78.608f8074bef29a89d68b.bundle.js.map +0 -1
  268. package/dist/79.f4a2c3ec71bed08d61b9.bundle.js.map +0 -1
  269. package/dist/9.c9fc88a79b7990e29e04.bundle.js.map +0 -1
  270. package/dist/94.3efcd047d4d4e506cbd7.bundle.js.map +0 -1
  271. package/dist/96.754454264340bc9d9a70.bundle.js.map +0 -1
  272. package/dist/bundle.ac70985c70f7da448f2d.bundle.js +0 -79
  273. package/dist/bundle.ac70985c70f7da448f2d.bundle.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[10,28,35,48,84],{29:function(e,t){angular.module("graphdb.framework.rest.connectors.service",[]).factory("ConnectorsRestService",r),r.$inject=["$http"];const n="rest/connectors";function r(e){return{getConnectors:function(){return e.get(n)},initConnector:function(t){return e.get(`${n}/options?prefix=${t}`)},hasConnector:function(t){return e.get(`${n}/existing?prefix=${t}`)},checkConnector:function(t){return e.post(`${n}/check`,t,{headers:{"Content-Type":"text/plain"}})}}}},32:function(e,t,n){"use strict";n.r(t);n(10),n(29);function r(e){const t=[];return Object.keys(e).forEach((function(n){t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]))})),t.join("&")}function o(e,t){for(let r=0;r<t.length;r++){const o=t[r];if("StringArray"===o.__type)e[o.__name]||(e[o.__name]=[""]);else if("OptionArray"===o.__type)if(e[o.__name])for(let t=0;t<o.__childOptions.length;t++){const n=o.__childOptions[t];if("Boolean"===n.__type)for(let t=0;t<e[o.__name].length;t++){const r=e[o.__name][t];!r.hasOwnProperty([n.__name])&&angular.isDefined(n.__defaultValue)&&(r[n.__name]=n.__defaultValue)}}else{e[o.__name]=[];const t={};for(let e=0;e<o.__childOptions.length;e++){const n=o.__childOptions[e];"StringArray"===n.__type?t[n.__name]=[""]:t[n.__name]=angular.isUndefined(n.__defaultValue)?"":n.__defaultValue}e[o.__name].push(t)}else"Map"===o.__type?e[o.__name]?e[o.__name]=(n=e[o.__name],_.map(n,(function(e,t){return{key:t,value:e}}))):e[o.__name]=[]:"JsonString"===o.__type?!e[o.__name]||e[o.__name]instanceof String||"string"==typeof e[o.__name]||(e[o.__name]=angular.toJson(e[o.__name],2)):angular.isUndefined(e[o.__name])&&(e[o.__name]=angular.isUndefined(o.__defaultValue)?"":o.__defaultValue)}var n;return e}function a(e,t,n){return e.post("repositories/"+t,r({query:n}),{headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/sparql-results+json","X-GraphDB-Local-Consistency":"updating"}})}function i(e){return e.substring(0,e.length-1)+"/instance#"}function s(e,t,n,r,o){const a=function e(t,n){const r={};return _.each(n,(function(n){angular.isDefined(t[n.__name])&&("OptionArray"===n.__type?(r[n.__name]=[],_.each(t[n.__name],(function(t){r[n.__name].push(e(t,n.__childOptions))}))):r[n.__name]=angular.copy(t[n.__name]))})),r}(n,r);for(let e=0;e<r.length;e++)try{"Map"===r[e].__type?a[r[e].__name]=(s=a[r[e].__name],_.reduce(s,(function(e,t){if(""===t.key&&""===t.value);else{if(""===t.key)throw new Error('Key may not be empty with value "'+t.value+'"');if(e.hasOwnProperty(t.key))throw new Error("Duplicate key "+t.key);e[t.key]=t.value}return e}),{})):"JsonString"===r[e].__type&&(a[r[e].__name]=angular.fromJson(a[r[e].__name]))}catch(t){return o(r[e].__label,t.message),null}var s;!function e(t){Array.isArray(t)&&(t=_.filter(t,(function(e){return null!==e&&(!e.trim||""!==e.trim())})));return Object.keys(t).forEach((function(n){""!==t[n]&&null!=t[n]||!1===t[n]?"object"==typeof t[n]&&(t[n]=e(t[n])):delete t[n]})),t}(a);let u="";return u+="PREFIX :<"+t+">\n",u+="PREFIX inst:<"+i(t)+">\n",u+="INSERT DATA {\n",u+="\tinst:"+e+" :createConnector '''\n",u+=angular.toJson(a,2),u+="\n''' .\n}\n",u=u.replace(/\\/g,"\\\\\\"),u}function u(e,t,n,u,c,l,d,p,g){function f(t){e.beingBuiltConnector={percentDone:0,status:{processedEntities:0,estimatedEntities:0,indexedEntities:0,entitiesPerSecond:0},actionName:t?"Repairing":"Creating",waitOnRepairStartOnce:!!t,eta:"-",inline:!1,iri:null}}function y(t,n,r){return f(r),$.extend(e.beingBuiltConnector,{iri:i(t)+n,name:n,inline:!1,doneCallback:function(){e.beingBuiltConnector.modalInstance.dismiss("cancel")}}),e.beingBuiltConnector.modalInstance=u.open({templateUrl:"pages/connectorProgress.html",controller:"CreateProgressCtrl",size:"lg",backdrop:"static",scope:e}),e.beingBuiltConnector.modalInstance}function m(t,o,a){const i=y(t.value,o.name,!1);p.addStatements(n.getActiveRepository(),r({update:o.query})).then((function(){g.getConnectors().then((function(){g.hasConnector(encodeURIComponent(t.value)).then((function(n){e.existing[t.key]=n.data}))})),c.success("Created connector "+o.name)}),(function(e){c.error(getError(e)),a()})).finally((function(){i.dismiss("cancel")}))}e.loader=!1,e.controllers=[],e.existing={},e.definitions={},e.getLoaderMessage=function(){const t=(Date.now()-e.loaderStartTime)/1e3,n=e.getHumanReadableSeconds(t);let r="";return r=e.progressMessage?e.progressMessage+"... "+n:"Running operation..."+n,e.extraMessage&&t>10&&(r+="\n"+e.extraMessage),r},e.setLoader=function(t,n,r){t?(e.loader=!0,e.loaderStartTime=Date.now(),e.progressMessage=n,e.extraMessage=r):(e.loader=!1,e.progressMessage="",e.extraMessage="")},e.initConnector=function(t){return g.initConnector(encodeURIComponent(t.value)).then((function(n){return e.definitions[t.key]=n.data,g.hasConnector(encodeURIComponent(t.value)).then((function(n){e.existing[t.key]=n.data}))}))},e.getConnectors=function(){e.canWriteActiveRepo()&&(e.setLoader(!0,"Fetching connectors","Normally this is a fast operation but it may take longer if a bigger repository needs to be initialised first."),g.getConnectors().then((function(r){e.connectors=Object.keys(r.data).map((function(e){return{key:e,value:r.data[e]}})),d.all(_.map(e.connectors,(function(t){return e.initConnector(t)}))).finally((function(){f();const r=function(e){const t=_.map(e,(function(e){return"<"+e.value+"connectorStatus>"})).join("|");return t?"SELECT ?connector ?status { ?connector "+t+" ?status }":null}(e.connectors);r?function(e){return a(t,n.getActiveRepository(),e)}(r).then((function(t){const n=function(e){if(e.bindings)for(let t=0;t<e.bindings.length;t++)try{const n=JSON.parse(e.bindings[t].status.value);if("BUILDING"===n.status)return{connector:e.bindings[t].connector.value,status:n}}catch(e){console.error(e)}return{}}(t.data.results);if(n.connector){const t=n.connector.split(/#/);t[0]=t[0].replace(/\/instance$/,"#"),r=t[0],o=t[1],f(),$.extend(e.beingBuiltConnector,{iri:i(r)+o,name:o,inline:!0,doneCallback:function(){e.beingBuiltConnector.inline=!1}})}var r,o})).finally((function(){e.setLoader(!1)})):e.setLoader(!1)}))})).catch((function(t){e.setLoader(!1),c.error(getError(t),"Could not get connectors")})),e.existing={})},e.getOptions=function(t){return e.definitions[t.key]},e.isEmpty=function(e){return angular.isObject(e)&&0===Object.keys(e).length},e.toPrettyJson=function(e){return angular.toJson(e,2)},e.$watch((function(){return n.getActiveRepository()}),e.getConnectors),e.$watch((function(){return n.getActiveLocation()}),e.getConnectors),e.copyConnector=function(t,n){let r;angular.isUndefined(n)||(r=angular.copy(n),r.name=r.name+"-copy"),u.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return t},values:function(){return angular.isUndefined(r)?{name:"",values:{}}:r},options:function(){return e.getOptions(t)}}}).result.then((function(n){m(t,n,(function(){n.skipConversion=!0,e.newConnector(t,n)}))}))},e.newConnector=function(t,n){u.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return t},values:function(){return angular.isUndefined(n)?{name:"",values:{}}:n},options:function(){return e.getOptions(t)}}}).result.then((function(n){m(t,n,(function(){n.skipConversion=!0,e.newConnector(t,n)}))}))},e.repair=function(t,o){l.openSimpleModal({title:"Confirm repair",message:"Are you sure you want to repair this connector?<br>Note that repair means delete + recreate with the same settings.",warning:!0}).result.then((function(){const a=y(o.value,t.name,!0),s=(u=t.name,"PREFIX prefix:<"+(l=o.value)+">\nINSERT DATA {\n\t<"+i(l)+u+'> prefix:repairConnector ""\n}');var u,l;p.addStatements(n.getActiveRepository(),r({update:s})).then((function(){g.getConnectors().then((function(){g.hasConnector(encodeURIComponent(o.value)).then((function(t){e.existing[o.key]=t.data}))})),c.success("Repaired connector "+t.name)}),(function(e){c.error(getError(e))})).finally((function(){a.dismiss("cancel")}))}))},e.delete=function(t,o){const a=o.key.indexOf("Elastic")>=0||o.key.indexOf("Solr")>=0;u.open({templateUrl:"js/angular/externalsync/templates/deleteConnector.html",controller:"DeleteConnectorCtrl",resolve:{type:function(){return o.key},isExternal:function(){return a}}}).result.then((function(i){e.setLoader(!0,"Deleting connector "+t.name,"This is usually a fast operation but it might take a while.");const s=function(e,t,n){const r=t.substring(0,t.length-1)+"/instance#";return"PREFIX prefix:<"+t+">\nINSERT DATA {\n\t<"+r+e+'> prefix:dropConnector "'+(n?"force":"")+'"\n}'}(t.name,o.value,i);p.addStatements(n.getActiveRepository(),r({update:s})).then((function(){g.getConnectors().then((function(){g.hasConnector(encodeURIComponent(o.value)).then((function(t){e.existing[o.key]=t.data}))})),i?(c.success("Deleted (with force) connector "+t.name),a&&c.warning("You may have to remove the index manually from "+o.key)):c.success("Deleted connector "+t.name)}),(function(e){c.error(getError(e))})).finally((function(){e.setLoader(!1)}))}))},e.viewQuery=function(t,n){u.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){const r=e.getOptions(t);return s(n.name,t.value,o(n.values,r),r)}}})}}function c(e,t,n,r){e.force=!1,e.type=n,e.isExternal=r,e.ok=function(){t.close(e.force)},e.cancel=function(){t.dismiss()}}function l(e,t,n,r,o){function a(){return s(e.name,n.value,e.values,e.options,(function(e,t){o.error(t,e)}))}e.connector=n,e.addField=function(t,n){const r=angular.copy(e.defaultValues[n][0]);e.values[n].splice(t+1,0,r)},e.addOption=function(e,t){t.splice(e+1,0,"")},e.deleteOption=function(e,t){t.splice(e,1)},e.addMapOption=function(e,t){t.splice(e+1,0,{key:"",value:""})},e.deleteMapOption=function(e,t){t.splice(e,1)},e.ok=function(){if(e.form.$valid){const n=a();n&&t.close({name:e.name,values:e.values,options:e.options,query:n})}},e.viewQuery=function(){const e=a();e&&r.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){return e}}})},e.cancel=function(){t.dismiss("cancel")}}function d(e,t,n,r,a,i,s,u){angular.extend(this,t("ExtendNewConnectorCtrl",{$scope:e,$uibModalInstance:r,connector:a,$uibModal:i})),e.values=s.values,e.options=u,e.name=s.name,s.skipConversion||(e.values=o(e.values,e.options)),e.defaultValues=angular.copy(e.values)}function p(e,t,n,r){function o(){const o=function(e){const t=e.replace(/\/instance#.+$/,"#connectorStatus");let n="";return n+="SELECT ?status {\n",n+="\t<"+e+"> <"+t+"> ?status",n+="\n}",n}(e.beingBuiltConnector.iri);e.beingBuiltConnector.iri=null,e.progressInterval=t((function(){(function(e){return a(n,r.getActiveRepository(),e)})(o).then((function(n){const r=function(e){if(e.bindings&&e.bindings.length>0)try{return JSON.parse(e.bindings[0].status.value)}catch(e){console.error(e)}return{}}(n.data.results);"BUILDING"===r.status?(e.beingBuiltConnector.status=r,e.beingBuiltConnector.percentDone=(100*r.processedEntities/r.estimatedEntities).toFixed(0),e.beingBuiltConnector.eta=e.getHumanReadableSeconds(r.etaSeconds),e.beingBuiltConnector.actionName=r.repair?"Repairing":"Creating",e.beingBuiltConnector.waitOnRepairStartOnce=!1):"BUILT"!==r.status||e.beingBuiltConnector.waitOnRepairStartOnce||(t.cancel(e.progressInterval),e.beingBuiltConnector.doneCallback&&e.beingBuiltConnector.doneCallback())}))}),1e3),e.$on("$destroy",(function(){t.cancel(e.progressInterval)}))}e.beingBuiltConnector=e.beingBuiltConnector||{},!e.beingBuiltConnector.inline&&e.beingBuiltConnector.iri&&o(),e.$watch("beingBuiltConnector.iri",(function(t){e.beingBuiltConnector.inline&&t&&o()}))}angular.module("graphdb.framework.externalsync.controllers",["graphdb.framework.rest.rdf4j.repositories.service","graphdb.framework.rest.connectors.service"]).controller("ConnectorsCtrl",u).controller("ExtendNewConnectorCtrl",l).controller("CreateConnectorCtrl",d).controller("CreateProgressCtrl",p).controller("DeleteConnectorCtrl",c).filter("ceil",(function(){return function(e){return Math.ceil(e)}})),u.$inject=["$scope","$http","$repositories","$uibModal","toastr","ModalService","$q","RDF4JRepositoriesRestService","ConnectorsRestService"],c.$inject=["$scope","$uibModalInstance","type","isExternal"],l.$inject=["$scope","$uibModalInstance","connector","$uibModal","toastr"],d.$inject=["$scope","$controller","$http","$uibModalInstance","connector","$uibModal","values","options"],p.$inject=["$scope","$interval","$http","$repositories"]},33:function(e,t,n){"use strict";n.r(t);n(4),n(12);function r(e,t,n,r,o,a,i,s,u,c,l,d,p,g){const f={id:"1",name:"",query:"select * where { \n\t?s ?p ?o .\n} limit 100 \n",inference:!0,sameAs:!0};let y,m=c.getPrincipal();function h(e,t){f.inference=t.appSettings.DEFAULT_INFERENCE,f.sameAs=t.appSettings.DEFAULT_SAMEAS,e.skipCountQuery=!t.appSettings.EXECUTE_COUNT,e.ignoreSharedQueries=t.appSettings.IGNORE_SHARED_QUERIES,e.tabsData=e.tabs=p.get(g.TABS_STATE)||[f],e.$watchCollection("[currentQuery.inference, currentQuery.sameAs]",(function(e,t,n){C(n.currentQuery)})),e.$on("repositoryIsSet",v)}function C(t){!function(){if(r.isActiveRepoOntopType())return;const t=document.getElementById("sameAs");!t||e.currentQuery.inference||t.disabled?e.currentQuery.inference&&t.disabled&&(t.removeAttribute("disabled"),e.currentQuery.sameAs=m.appSettings.DEFAULT_SAMEAS):(t.disabled=!0,e.currentQuery.sameAs=!1)}(),e.tabs.forEach((function(n,o){n.id===t.id&&(e.tabs[o].query=t.query,r.isActiveRepoOntopType()||(e.tabs[o].inference=t.inference,e.tabs[o].sameAs=t.sameAs))})),p.set(g.TABS_STATE,e.tabs)}function b(t,n,r,o){const a=angular.element(document.getElementById("yasr-inner"));e.queryIsRunning=t,t?(e.queryStartTime=Date.now(),e.countTimeouted=!1,e.progressMessage=n,e.extraMessage=r,e.noLoaderTimer=o,a.addClass("hide")):(e.progressMessage="",e.extraMessage="",e.noLoaderTimer=!1,e.currentTrackAlias=null,e.abortRequested=!1,a.removeClass("hide")),null===e.$$phase&&e.$apply()}function T(n){function r(){return window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||0}if(e.orientationViewMode){if("yasr"===e.viewMode){let e=r()-document.querySelector(".CodeMirror-wrap").getBoundingClientRect().top;e-=40,document.querySelector(".CodeMirror-wrap").style.height=e+"px"}else e.noPadding={},document.querySelector(".CodeMirror-wrap").style.height="";document.getElementById("yasr").style.minHeight=""}else if(e.noPadding={paddingRight:15,paddingLeft:0},window.editor&&document.querySelector(".CodeMirror-wrap")){let e=r()-document.querySelector(".CodeMirror-wrap").getBoundingClientRect().top;e-=40,document.querySelector(".CodeMirror-wrap").style.height=e+"px",document.getElementById("yasr").style.minHeight=e+"px"}else{let r;r=t(n?function(){e.fixSizesOnHorizontalViewModeSwitch(n)}:e.fixSizesOnHorizontalViewModeSwitch,100),e.$on("$destroy",(function(){t.cancel(r)}))}window.yasr&&window.yasr.container&&t((function(){window.yasr.container.resize()}),100)}function w(){T(!0)}function v(t,n){n.newRepo&&(e.tabsData=p.get(g.TABS_STATE),e.tabsData.forEach((function(e){e.yasrData=void 0,e.queryType=void 0,e.resultsCount=0,e.allResultsCount=0,e.sizeDelta=void 0})),p.set(g.TABS_STATE,e.tabsData),e.tabs=e.tabsData,e.currentQuery={},e.errorMessage=null,e.repositoryError=null)}function S(e){t((function(){$('a[data-id = "'+e+'"]').tab("show")}),0)}function E(o,a){if(e.executedQueryTab=e.currentQuery,a){if("SELECT"!==window.editor.getQueryType()&&"CONSTRUCT"!==window.editor.getQueryType())return void n.warning("Explain only works with SELECT or CONSTRUCT queries.");if(r.isActiveRepoOntopType())return void n.warning("Explain not supported for Virtual repositories.")}if(e.explainRequested=a,!e.queryIsRunning){if(o?e.currentTabConfig.resultsCount=0:e.resetCurrentTabConfig(),e.lastRunQueryMode=window.editor.getQueryMode(),"update"===e.lastRunQueryMode&&r.isActiveRepoOntopType())return void n.warning("Updates are not supported for Virtual repositories.");if(b(!0,"update"===e.lastRunQueryMode?"Executing update":"Evaluating query"),"none"!==e.viewMode){e.viewMode="none",e.orientationViewMode&&e.fixSizesOnHorizontalViewModeSwitch();const n=t(window.editor.query,500);e.$on("$destroy",(function(){t.cancel(n)}))}else window.editor.query()}}function R(){e.showSampleQueries=!e.showSampleQueries,e.showSampleQueries?i.getSavedQueries().success((function(t){e.sampleQueries=t,$("#sampleQueriesCollapse").collapse("show").width("300px")})).error((function(e){const t=getError(e);n.error(t,"Error! Could not get saved queries")})):$("#sampleQueriesCollapse").collapse("hide")}function _(t){let n=void 0;return e.tabsData.forEach((function(e){if(e.name===t.name&&e.query===t.body)return n=e.id,e})),n}function A(t){return function(n,r,o){e.savedQuery={name:n,query:r||window.editor.getValue(),shared:o},$(t).modal("show")}}function Q(t){for(let n=0;n<e.tabsData.length;n++){if(e.tabsData[n].id===t)return n}}m?h(e,m):e.$on("securityInit",(function(e){m=c.getPrincipal(),h(e.currentScope,m)})),this.hint=document.createElement("span"),this.hint.innerHTML='Hint: "abC" matches "abC*", "ab c*" and "ab-c*"',this.hint.style.fontSize="12px",this.hint.style.color="gray",this.hint.style.backgroundColor="white",this.hint.style.position="absolute",this.hint.style.zIndex="3",this.hint.style.paddingLeft="12px",e.$watch((function(){return angular.element(".CodeMirror-hints").length}),e=>{if(e){const e=angular.element(".CodeMirror-hints")[0].getBoundingClientRect();document.body.appendChild(this.hint),this.hint.style.top=e.top-20+"px",this.hint.style.left=e.right-this.hint.offsetWidth-12+"px"}else this.hint&&this.hint.parentNode&&this.hint.parentNode.removeChild(this.hint)}),e.resetCurrentTabConfig=function(){e.currentTabConfig={pageSize:1e3,page:1,allResultsCount:0,resultsCount:0}},e.queryExists=!1,e.resetCurrentTabConfig(),e.saveTab=function(t){const n=Q(t);if(void 0===n)return{};const r=e.tabsData[n];return e.saveQueryToLocal(r),r},e.loadTab=function(n){e.tabsData=p.get(g.TABS_STATE)||[f];const o=Q(n),a=e.tabsData[o];a.yasrData&&b(!0,"Rendering results",null,!0);t((function(){""===e.currentQuery.query&&(e.currentQuery.query=" "),t((function(){window.editor.setValue(e.currentQuery.query),e.yasr.updateDownloadDropdown(),e.$broadcast("tabLoaded",e.currentQuery.id),e.yasr.options.output=a.outputType,a.yasrData&&(a.yasrData.customError?(e.yasr.results={getException:function(){return a.yasrData.customError}},b(!1)):t((function(){e.setYasrResponse(a.yasrData,a.textStatus,a.jqXhrOrErrorString),b(!1),$(".yasr_btnGroup li:nth-child(2)").hasClass("active")&&t((function(){$(".yasr_btnGroup li:nth-child(2) a").get(0).click()}),0)}),0))}),0)}),0),p.set(g.TABS_STATE_CURRENT_ID,n),e.currentQuery=a,t((function(){e.currentTabConfig={},e.currentTabConfig.queryType=a.queryType,e.currentTabConfig.resultsCount=a.resultsCount,e.currentTabConfig.offset=a.offset,e.currentTabConfig.allResultsCount=a.allResultsCount,e.currentTabConfig.allResultsCountExact=a.allResultsCountExact,e.currentTabConfig.page=a.page,e.currentTabConfig.pageSize=a.pageSize,e.currentTabConfig.timeFinished=a.timeFinished,e.currentTabConfig.timeTook=a.timeTook,e.currentTabConfig.sizeDelta=a.sizeDelta,e.currentTabConfig.customUpdateMessage=a.customUpdateMessage,e.currentTabConfig.errorMessage=a.errorMessage,e.currentTabConfig.warningMessage=a.warningMessage,e.$apply()}),0),$("#yasr").css("padding","0"),y||(y=setInterval(M,200));!function(){const t=r.isActiveRepoOntopType(),n=r.isActiveRepoFedXType();(function(e){const t=document.getElementById("sameAs"),n=document.getElementById("inference");t&&(t.disabled=!!e);n&&(n.disabled=!!e)})(t),e.nocount=!(!t&&!n)||!m.appSettings.EXECUTE_COUNT,t&&(e.currentQuery.inference=!0,e.currentQuery.sameAs=!0)}()},e.addNewTab=function(n,r,o){if(!D(!0))return;let a;a=r||o?{id:"1",name:r,query:o,inference:m.appSettings.DEFAULT_INFERENCE,sameAs:m.appSettings.DEFAULT_SAMEAS}:{id:"1",name:"",query:"select * where { \n\t?s ?p ?o .\n} limit 100 \n",inference:m.appSettings.DEFAULT_INFERENCE,sameAs:m.appSettings.DEFAULT_SAMEAS};q++;const i=""+q;e.tabsData=e.tabs;const s=a;s.id=i,e.tabsData.push(s),p.set(g.TABS_STATE_MAXID,q),p.set(g.TABS_STATE,e.tabsData);const u=Array.prototype.slice.call(arguments,1);t((function(){e.$apply(),S(i),n&&n.apply(this,u)}),0),e.tabs=e.tabsData},e.isTabChangeOk=D,e.runQuery=E,e.abortCurrentQuery=function(){d.abortQueryByAlias(e.currentTrackAlias).success((function(){e.abortRequested=!0}))},e.editQuery=function(t){o.open({templateUrl:"js/angular/core/directives/queryeditor/templates/query-sample.html",controller:"QuerySampleModalCtrl",resolve:{data:function(){return{title:'Edit Saved Query: "'+t.name+'"',query:t,edit:!0,okButtonText:"Save"}}}}).result.then((function(r){const o={name:r.name,body:r.body,shared:r.shared};t.name!==r.name?i.addNewSavedQuery(o).success((function(){e.deleteQueryHttp(t.name,!0)})).error((function(e){const t=getError(e);n.error(t,"Error! Cannot edit saved query")})):i.editSavedQuery(o).success((function(){$("#editQueryContainer").modal("hide"),e.toggleSampleQueries(),n.success("Saved query "+t.name+" was edited.")})).error((function(e){const t=getError(e);n.error(t,"Error! Cannot edit Saved query")}))}))},e.getNamespaces=function(){b(!0,"Refreshing namespaces","Normally this is a fast operation but it may take longer if a bigger repository needs to be initialised first."),e.namespacesLoading=!0,l.getRepositoryNamespaces().success((function(t){const n={};t.results.bindings.forEach((function(e){n[e.prefix.value]=e.namespace.value})),e.namespaces=n})).error((function(t){e.repositoryError=getError(t)})).finally((function(){b(!1),e.namespacesLoading=!1}))},e.changePagination=function(){E(!0,e.explainRequested)},e.toggleSampleQueries=R,e.addKnownPrefixes=function(){i.addKnownPrefixes(JSON.stringify(window.editor.getValue())).success((function(e){angular.isDefined(window.editor)&&angular.isDefined(e)&&e!==window.editor.getValue()&&window.editor.setValue(e)})).error((function(e){const t=getError(e);return n.error(t,"Error! Could not add known prefixes"),!0}))},e.getExistingTabId=_,e.querySelected=function(t){const n=_(t);e.toggleSampleQueries(),e.isTabChangeOk(!1)&&(e.highlightNextTabChange=!0,angular.isDefined(n)?S(n):e.addNewTab(null,t.name,t.body))},e.deleteQuery=function(t){a.openSimpleModal({title:"Confirm",message:"Are you sure you want to delete the saved query '"+t+"'?",warning:!0}).result.then((function(){e.deleteQueryHttp(t)}))},e.deleteQueryHttp=function(t,r){i.deleteSavedQuery(t).success((function(){e.toggleSampleQueries(),r||n.success("Saved query: "+t+" was deleted.")})).error((function(e){const t=getError(e);n.error(t,"Error! Cannot delete saved query")}))},e.saveQuery=function(t,n){o.open({templateUrl:"js/angular/core/directives/queryeditor/templates/query-sample.html",controller:"QuerySampleModalCtrl",resolve:{data:function(){return{title:"Create New Saved Query",query:{name:t.name,body:t.query,shared:t.shared},edit:!1,okButtonText:"Create",queryExists:n}}}}).result.then((function(t){e.saveQueryHttp(t)}),(function(){}))},e.saveQueryHttp=function(t){i.addNewSavedQuery(t).success((function(){n.success("Saved query "+t.name+" was saved.")})).error((function(r){let o=getError(r);if(n.error(o,"Error! Cannot create saved query"),o="Query '"+t.name+"' already exists!"){t.query=t.body;const n=!0;e.saveQuery(t,n)}}))},e.saveQueryToLocal=C,e.setLoader=b,e.getLoaderMessage=function(){const t=(Date.now()-e.queryStartTime)/1e3;let n="",r="";e.noLoaderTimer||(n=e.getHumanReadableSeconds(t));r=e.progressMessage?e.progressMessage+"... "+n:"Running operation... "+n;e.extraMessage&&t>10&&(r+="\n"+e.extraMessage);return r},e.fixSizesOnHorizontalViewModeSwitch=T,e.changeViewMode=function(){e.viewMode="none",e.orientationViewMode=!e.orientationViewMode,p.set(g.VIEW_MODE,e.orientationViewMode),T()},e.showHideEditor=w,e.focusQueryEditor=function(){angular.element(document).find(".editable-input").is(":focus")||angular.element(document).find(".CodeMirror textarea:first-child").focus()},e.orientationViewMode=!p.get(g.VIEW_MODE)||"true"===p.get(g.VIEW_MODE),e.viewMode="none",e.getActiveRepository=function(){return r.getActiveRepository()},e.getActiveRepositoryNoError=function(){if(!e.repositoryError)return r.getActiveRepository()},e.orientationViewMode||w(),window.onbeforeunload=function(){e.currentQuery&&e.saveTab(e.currentQuery.id),p.set(g.TABS_STATE,e.tabs)},e.$on("$destroy",(function(){e.currentQuery&&e.saveTab(e.currentQuery.id),p.set(g.TABS_STATE,e.tabs),clearInterval(y)})),e.$on("$destroy",(function(){clearInterval(y),window.editor=null,window.yasr=null})),$(document).mouseup((function(t){const n=$("#sampleQueriesCollapse");!n.is(t.target)&&0===n.has(t.target).length&&e.showSampleQueries&&R()}));let q=p.get(g.TABS_STATE_MAXID)||1;function x(e){return $(e).attr("data-id")}function M(){if(e.currentTabConfig.resultsCount>=0){const e=$(".saveAsDropDown");e.length>0&&!window.editor.queryValid?yasr.header.find(".saveAsDropDown").remove():0===e.length&&window.editor.queryValid&&yasr.updateDownloadDropdown()}}function D(t){return!(e.queryIsRunning&&!e.namespacesLoading)||(t?n.info("New tabs may not be opened while query or update is running."):n.info("Tabs may not be switched while query or update is running."),!1)}e.highlightNextTabChange=!1,e.$on("tabAction",(function(n,r){r.relatedTarget&&(t.cancel(r.relatedTarget.timer),$(r.relatedTarget).css("color",""),e.saveTab(x(r.relatedTarget))),e.loadTab(x(r.target));const o=["#ED4F2F","","#ED4F2F"],a=[400,400,400];if(e.highlightNextTabChange){e.highlightNextTabChange=!1;let n=0;$(r.target).css("color",o[n]);const i=function(){n++,n<o.length?($(r.target).css("color",o[n]),r.target.timer=t(i,a[n])):$(r.target).css("color","")};t(i,a[n])}})),e.$on("deleteAllexeptSelected",(function(t,n){e.tabsData=n,e.tabs=n})),e.currentQuery={},e.showSampleQueries=!1,e.savedQuery={},e.sampleQueries={},e.editQueryModal=A("#editQueryContainer"),e.deleteQueryModal=A("#confirmDeleteContainer"),e.saveQueryModal=A("#saveQueryContainer"),e.getResultsDescription=function(){let t;if(0===e.currentTabConfig.resultsCount)t="No results.";else{const n=(e.currentTabConfig.page-1)*e.currentTabConfig.pageSize+Math.min(e.currentTabConfig.resultsCount,e.currentTabConfig.pageSize);t="Showing results from "+s("currency")(e.currentTabConfig.offset,"",0)+" to "+s("currency")(n,"",0),e.currentTabConfig.allResultsCount>0&&(t+=e.currentTabConfig.allResultsCountExact?" of ":" of at least ",t+=s("currency")(e.currentTabConfig.allResultsCount,"",0)),t+="."}return t},e.getUpdateDescription=function(){return e.currentTabConfig.customUpdateMessage?e.currentTabConfig.customUpdateMessage:void 0===e.currentTabConfig.sizeDelta?"":e.currentTabConfig.sizeDelta<0?"Removed "+Math.abs(e.currentTabConfig.sizeDelta)+" statements.":e.currentTabConfig.sizeDelta>0?"Added "+e.currentTabConfig.sizeDelta+" statements.":"The number of statements did not change."},e.getStaleWarningMessage=function(){const t=60*Math.round((Date.now()-e.currentTabConfig.timeFinished)/6e4);if(t>=3600)return"Possibly stale result (obtained "+e.getHumanReadableSeconds(t)+" ago)."};const k=function(){};angular.element(u).bind("resize",k),e.$on("$destroy",(function(){angular.element(u).unbind("resize",k)}))}function o(e,t,n){n.queryExists&&(e.queryExists=!0),e.query=angular.copy(n.query),e.title=n.title,e.edit=n.edit,e.okButtonText=n.okButtonText,e.ok=function(){e.form.$valid&&t.close(e.query)},e.cancel=function(){t.dismiss("cancel")}}angular.module("graphdb.framework.core.directives.queryeditor.controllers",["graphdb.framework.utils.localstorageadapter","graphdb.framework.rest.sparql.service"]).controller("QueryEditorCtrl",r).controller("QuerySampleModalCtrl",o),r.$inject=["$scope","$timeout","toastr","$repositories","$uibModal","ModalService","SparqlRestService","$filter","$window","$jwtAuth","RDF4JRepositoriesRestService","MonitoringRestService","LocalStorageAdapter","LSKeys"],o.$inject=["$scope","$uibModalInstance","data"]},34:function(e,t,n){"use strict";n.r(t);n(29),n(4),n(32);var r=n(210),o=n.n(r),a=n(208),i=n.n(a);function s(e,t,n,r,a,s,u,c,l,d,p,g){let f;return{restrict:"AE",scope:!1,templateUrl:"js/angular/core/directives/queryeditor/templates/query-editor.html",link:function(y,m,h){y.nostorage=h.hasOwnProperty("nostorage"),y.notabs=h.hasOwnProperty("notabs"),y.notoolbar=h.hasOwnProperty("notoolbar"),y.notoolbarSaved=h.hasOwnProperty("notoolbarSaved"),y.notoolbarCopy=h.hasOwnProperty("notoolbarCopy"),y.notoolbarInference=h.hasOwnProperty("notoolbarInference"),y.notoolbarSameAs=h.hasOwnProperty("notoolbarSameAs"),y.nostatus=h.hasOwnProperty("nostatus"),y.norun=h.hasOwnProperty("norun"),y.runButtonName="Run",h.runButtonName&&(y.runButtonName=h.runButtonName);if(y.nocount="true"===h.nocount,h.callbackOnChange){const e=y[h.callbackOnChange];"function"==typeof e&&(f=e)}e((function(){!function(y){function m(){angular.element("#wb-sparql-saveQuery")[0].click()}function h(){y.runQuery(!1,!1)}function C(){y.runQuery(!1,!0)}function b(){if(y.tabs.length<2||!y.currentQuery.id||!y.isTabChangeOk(!1))return;let e=D(y.currentQuery.id);e=(e+1)%y.tabs.length,w(y.tabs[e].id)}function T(){if(y.tabs.length<2||!y.currentQuery.id||!y.isTabChangeOk(!1))return;let e=D(y.currentQuery.id);e--,-1===e&&(e=y.tabs.length-1),w(y.tabs[e].id)}function w(t){e((function(){let e=$('a[data-id = "'+t+'"]');0===e.length&&(e=$("a[data-id]").first()),e.tab("show")}),0)}y.changePagination=function(){y.runQuery(!0,y.explainRequested)},window.editor=o.a.fromTextArea(document.getElementById("query"),{persistent:null,value:"",indentUnit:4,createShareLink:null,cursorHeight:1,sparql:{showQueryButton:!1,acceptHeaderGraph:"application/x-graphdb-table-results+json, application/rdf+json;q=0.9, */*;q=0.8",acceptHeaderSelect:"application/x-sparqlstar-results+json, application/sparql-results+json;q=0.9, */*;q=0.8"},extraKeys:{"Ctrl-Enter":h,"Cmd-Enter":h,"Shift-Ctrl-Enter":C,"Shift-Cmd-Enter":C,"Ctrl-Alt-T":y.addNewTab,"Cmd-Alt-T":y.addNewTab,"Ctrl-S":m,"Cmd-S":m,"Ctrl-Alt-Left":T,"Cmd-Alt-Left":T,"Ctrl-Alt-Right":b,"Cmd-Alt-Right":b}}),window.editor.toastBuildIndex=function(){n.warning("",'<div class="autocomplete-toast"><a href="autocomplete">Autocomplete is OFF<br>Go to Setup -> Autocomplete</a></div>',{allowHtml:!0})},window.editor.toastError=function(e){n.error("Cannot execute autocomplete query. "+getError(e))},window.editor.on("changes",(function(){angular.element(".CodeMirror-linenumbers").css("width","1px"),angular.element(".CodeMirror-sizer").css("margin-left","0px"),clearTimeout(y.changesTimeout);const e=!window.editor.queryValid;y.changesTimeout=setTimeout(f?f():function(){const t=D(y.currentQuery.id)+1;$('a[data-id = "'+t+'"]').toggleClass("query-has-error",e).attr("title",e?"Query contains a syntax error. See the relevant line for more information.":"")},200),y.currentQuery.query=window.editor.getValue(),y.currentQuery.queryType=window.editor.getQueryType()})),$(".fullscreenToggleBtns").hide();const v=function(e){$(e.target).removeClass("fa-link").addClass("fa-check").blur(),setTimeout((function(){$(e.target).removeClass("fa-check").addClass("fa-link")}),1e3)};window.onbeforeunload=function(){y.nostorage||p.set(g.TABS_STATE,y.tabs),y.saveTab(y.currentQuery.id)};const S=o.a.executeQuery,E=o.a.getUrlArguments;function R(e,t,n){return{status:e,statusText:t,responseText:n}}let A,Q;y.$on("$destroy",(function(){y.nostorage||p.set(g.TABS_STATE,y.tabs),o.a.executeQuery=S,o.a.getUrlArguments=E,y.saveTab(y.currentQuery.id)})),o.a.drawButtons=function(e){e.buttons=$("#yasqe_buttons_mocked")},o.a.getActiveRepository=function(){return r.getActiveRepository()},o.a.getUrlArguments=function(e,t){const n=E(e,t),r=window.editor.getQueryType();return"SELECT"!==r&&"CONSTRUCT"!==r&&"DESCRIBE"!==r||(n.push({name:"limit",value:y.currentTabConfig.pageSize+1}),y.currentTabConfig.offset=(y.currentTabConfig.page-1)*y.currentTabConfig.pageSize+1,n.push({name:"offset",value:y.currentTabConfig.offset-1})),!y.explainRequested||"SELECT"!==r&&"CONSTRUCT"!==r||n.push({name:"explain",value:"true"}),n},o.a.executeQuery=function(e){if(Q&&$(Q.resultsContainer).length&&$(Q.resultsContainer).empty(),e.options.sparql.headers["X-GraphDB-Catch"]=y.currentTabConfig.pageSize+"; throw",y.currentTrackAlias="query-editor-"+performance.now()+"-"+Date.now(),e.options.sparql.headers["X-GraphDB-Track-Alias"]=y.currentTrackAlias,y.countTimeouted=!1,"query"===e.getQueryMode()?e.options.sparql.endpoint="repositories/"+r.getActiveRepository():"update"===e.getQueryMode()&&(e.options.sparql.endpoint="repositories/"+r.getActiveRepository()+"/statements"),e.options.sparql.args=[{name:"infer",value:y.currentQuery.inference},{name:"sameAs",value:y.currentQuery.sameAs}],y.currentTabConfig.customUpdateMessage="","update"!==window.editor.getQueryMode()){const t=y.currentTabConfig,n=y.executedQueryTab.id;return window.editor.options.sparql.handlers.countCallback=function(e,r,o){if(200===e.status){const a=y.tabs[D(n)];a&&(Q.setResultsCount(e,r,o),t.allResultsCount=Q.allCount,a.allResultsCount=Q.allCount,t.allResultsCountExact=!0,a.allResultsCountExact=!0,y.saveTab(a.id))}else t.countTimeouted=!0},null!=y.currentQuery.outputType?Q.options.output=y.currentQuery.outputType:Q.options.output="table",y.currentTabConfig.queryType=window.editor.getQueryType(),y.queryStartTime=(new Date).getTime(),S(e,{setQueryLimit:function(e){return"CONSTRUCT"===y.currentTabConfig.queryType&&r.isActiveRepoOntopType()?window.editor.getValueWithoutComments():e}})}{const t=function(){y.currentTabConfig.queryType="UPDATE",l.getRepositorySize().success((function(t){return y.repoSize=parseInt(t),y.queryStartTime=(new Date).getTime(),S(e,{})})).error((function(t){return n.warning("Could not get repository size for: "+r.getActiveRepository()+"; "+getError(t)),y.queryStartTime=(new Date).getTime(),S(e,{})}))};d.checkConnector(window.editor.getValue()).then((function(e){if(e.data.command&&!e.data.hasSupport){y.currentTabConfig.queryType="ERROR",y.currentTabConfig.timeFinished=Date.now(),y.currentTabConfig.timeTook=(y.currentTabConfig.timeFinished-y.queryStartTime)/1e3;const t=R(-1,"No support for "+e.data.connectorName,e.data.connectorName+" connectors are not supported because the plugin "+e.data.pluginName+" is not active.");return Q.results={getException:function(){return t}},y.setLoader(!1),void x({customError:t},"",null)}if("create"===e.data.command||"repair"===e.data.command){const t="repair"===e.data.command;t?(y.setLoader(!0,"Repairing connector "+e.data.name),y.currentTabConfig.customUpdateMessage="Repaired connector "+e.data.name+"."):(y.setLoader(!0,"Creating connector "+e.data.name),y.currentTabConfig.customUpdateMessage="Created connector "+e.data.name+".");const n=y.$new(!0);n.beingBuiltConnector={percentDone:0,status:{processedEntities:0,estimatedEntities:0,indexedEntities:0,entitiesPerSecond:0},actionName:t?"Repairing":"Creating",eta:"-",inline:!1,iri:e.data.iri,name:e.data.name,doneCallback:function(){A.dismiss("cancel")}},n.getHumanReadableSeconds=y.getHumanReadableSeconds,A=u.open({templateUrl:"pages/connectorProgress.html",controller:"CreateProgressCtrl",size:"lg",backdrop:"static",scope:n})}else"drop"===e.data.command&&(y.setLoader(!0,"Deleting connector "+e.data.name),y.currentTabConfig.customUpdateMessage="Deleted connector "+e.data.name+".");t()}),(function(){t()}))}};const q=o.a.getAjaxConfig;function x(e,t,n){e.getResponseHeader&&e.getResponseHeader("content-type")&&(e.contentType=e.getResponseHeader("content-type")),delete e.response;const r=D(y.executedQueryTab.id),o=y.tabs[r],a={queryType:y.currentTabConfig.queryType,yasrData:e,textStatus:t,jqXhrOrErrorString:n,page:y.currentTabConfig.page,pageSize:y.currentTabConfig.pageSize,allResultsCount:y.currentTabConfig.allResultsCount,allResultsCountExact:y.currentTabConfig.allResultsCountExact,resultsCount:y.currentTabConfig.resultsCount,offset:y.currentTabConfig.offset,timeTook:y.currentTabConfig.timeTook,timeFinished:y.currentTabConfig.timeFinished,sizeDelta:y.currentTabConfig.sizeDelta,customUpdateMessage:y.currentTabConfig.customUpdateMessage,errorMessage:y.currentTabConfig.errorMessage,warningMessage:y.currentTabConfig.warningMessage};"ERROR"!==y.currentTabConfig.queryType&&"UPDATE"!==y.currentTabConfig.queryType&&"ASK"!==y.currentTabConfig.queryType&&(a.outputType=y.yasr.options.output),angular.extend(y.currentQuery,a),angular.extend(o,a),y.nostorage||p.set(g.TABS_STATE,y.tabs),$('a[data-id = "'+y.executedQueryTab.id+'"]').tab("show")}function M(){var e=Q.results.getBindings(),t=Q.results.getVariables(),n=e[0],r=t[0];if(1===t.length&&1===e.length&&"plan"===r&&n[r].value.includes("# NOTE: Optimization groups")){var a=document.getElementsByClassName("nonUri")[0];a.classList.add("cm-s-default"),a.setAttribute("id","highlighted_output");var i=a.innerText.substring(1,a.innerText.length-1);a.innerHTML="",o.a.runMode(i,"sparql11",document.getElementById("highlighted_output"))}}function D(e){for(let t=0;t<y.tabs.length;t++){if(y.tabs[t].id===e)return t}}function k(e){return angular.isDefined(e)&&"false"!==e}function O(e,n,r){const o=y.getExistingTabId(e),a=y.$on("tabLoaded",(function(){angular.isDefined(n)&&(y.currentQuery.inference=k(n)),angular.isDefined(r)&&(y.currentQuery.sameAs=k(r)),k(t.search().execute)&&("update"===window.editor.getQueryMode()?s.openSimpleModal({title:"Confirm execute",message:"This is an update and it may change the data in the repository.<br>Are you sure you want to execute it automatically?",warning:!0}).result.then((function(){y.runQuery(!1)})):y.runQuery(!1)),a()}));y.highlightNextTabChange=!0,angular.isDefined(o)?w(o):y.addNewTab(null,e.name,e.body)}function B(){if(t.search().savedQueryName)e=t.search().savedQueryName,r=t.search().owner,o=t.search().infer,i=t.search().sameAs,a.getSavedQuery(e,r).success((function(e){O(e,o,i)})).error((function(t){n.error("Could not get data for saved query: "+e+"; "+getError(t))}));else if(t.search().query){O({name:t.search().name,body:t.search().query},t.search().infer,t.search().sameAs)}else{w(p.get(g.TABS_STATE_CURRENT_ID))}var e,r,o,i}function N(){y.getNamespaces(),o.a.signal(window.editor,"repositoryOrAuthorizationChanged",r.getActiveRepository(),c.getAuthToken()),B()}o.a.getAjaxConfig=function(e,t){const n=q(e,t);return _.extend(n.headers,{Authorization:c.getAuthToken()}),n},y.copyToClipboardQuery=function(e,t){s.openCopyToClipboardModal(function(e,t){let n=[location.protocol,"//",location.host,location.pathname].join("");e?(n=n+"?savedQueryName="+encodeURIComponent(e),null!=t&&(n+="&owner="+encodeURIComponent(t))):n=n+"?"+$.param({name:y.currentQuery.name,infer:y.currentQuery.inference,sameAs:y.currentQuery.sameAs,query:window.editor.getValue()});return n}(e,t))},y.copyToClipboardResult=function(e){s.openCopyToClipboardModal(e)},y.goToVisual=function(){const e={query:window.editor.getValue(),sameAs:y.currentQuery.sameAs,inference:y.currentQuery.inference};t.path("graphs-visualizations").search(e)},$("textarea").on("paste",(function(){e((function(){y.addKnownPrefixes()}),0)})),Q=i()(document.getElementById("yasr"),{getUsedPrefixes:{},persistency:!1}),window.yasr=Q,Q.afterCopy=v,Q.getQueryResultsAsFormat=function(e){const t=$("#wb-download");t.attr("action","repositories/"+r.getActiveRepository()),$("#wb-download-query").val(y.currentQuery.query),window.editor.getValue()!==y.currentQuery.query&&n.warning("The query in your editor does not match the query results. Download will save the results from the last executed query."),$("#wb-download-infer").val(y.currentQuery.inference),$("#wb-download-sameAs").val(y.currentQuery.sameAs);const o=localStorage.getItem("com.ontotext.graphdb.auth");o&&$("#wb-auth-token").val(o),$("#wb-download-accept").val(e),t.submit()},window.editor.options.sparql.handlers.complete=function(t,r,o){function a(){x(t,r,o)}if(A&&A.dismiss("cancel"),null===window.editor)return void y.setLoader(!1);if(y.currentTabConfig.errorMessage=t.getResponseHeader("X-GraphDB-Error"),y.currentTabConfig.warningMessage=t.getResponseHeader("X-GraphDB-Warning"),Q.currentQuery=y.currentQuery,y.currentTabConfig.timeFinished=Date.now(),y.currentTabConfig.timeTook=(y.currentTabConfig.timeFinished-y.queryStartTime)/1e3,t.status>=400)return t.responseText=t.responseText.replace(/^([^: ]+: )+/,""),y.currentTabConfig.queryType="ERROR",a(),y.setYasrResponse(t,r,o),void y.setLoader(!1);if(0===t.status){y.currentTabConfig.queryType="ERROR";const e=R(-1,"Request was aborted","The request has been aborted. There are no results to show.");return Q.results={getException:function(){return e}},y.setLoader(!1),void x({customError:e},"",null)}let i;if(y.setLoader(!1),"update"===window.editor.getQueryMode())i=function(){l.getRepositorySize().success((function(e){let t;void 0!==y.repoSize&&(t=Number(e)-y.repoSize),y.currentTabConfig.sizeDelta=t,a()})).error((function(e){n.warning("Could not get repository size for: "+y.getActiveRepository()+"; "+getError(e)),y.currentTabConfig.sizeDelta=void 0,a()}))};else{if(200===t.status){const e=t.getResponseHeader("Content-Type");0!==e.indexOf("application/sparql-results+json")&&0!==e.indexOf("application/x-sparqlstar-results+json")&&0!==e.indexOf("application/x-graphdb-table-results+json")||t.responseJSON.results&&(y.currentTabConfig.resultsCount=t.responseJSON.results.bindings.length,t.responseJSON.results.bindings.length>y.currentTabConfig.pageSize&&(t.responseJSON.results.bindings.length=y.currentTabConfig.pageSize),y.currentTabConfig.allResultsCountExact||((y.nocount||y.countTimeouted||y.currentTabConfig.resultsCount<=y.currentTabConfig.pageSize)&&(t.status=204),y.currentTabConfig.allResultsCount=Math.max(y.currentTabConfig.allResultsCount,y.currentTabConfig.pageSize*(y.currentTabConfig.page-1)+y.currentTabConfig.resultsCount),y.currentTabConfig.resultsCount<=y.currentTabConfig.pageSize&&(y.currentTabConfig.allResultsCountExact=!0)))}y.setLoader(!0,"Rendering results",null,!0),i=function(){y.setYasrResponse(t,r,o),a(),y.setLoader(!1)}}e((function(){i(),"CONSTRUCT"!==window.editor.getQueryType()?($(".yasr_btnGroup.nav.nav-tabs li a.disabled").removeClass("disabled").css("font-weight","400"),$(".yasr_btnGroup.nav.nav-tabs li.disabled a").addClass("disabled").css("font-weight","200"),"DESCRIBE"===window.editor.getQueryType()&&$(".yasr_btnGroup.nav.nav-tabs li a").removeClass("disabled").css("font-weight","400")):"CONSTRUCT"===window.editor.getQueryType()&&$(".yasr_btnGroup.nav.nav-tabs li a.disabled").removeClass("disabled").css("font-weight","400"),$("#yasr").css("padding","0"),$(".yasr_btnGroup li:nth-child(2)").hasClass("active")&&e((function(){$(".yasr_btnGroup li:nth-child(2) a").get(0).click()}),100),$("#wb-sparql-addNewTab").click((function(){$(".dataTables_filter").hide(),$(".resultsTable").hide()}))}),100)},window.editor.options.sparql.handlers.resetResults=function(){},y.yasr=Q,y.setYasrResponse=function(e,t,n){e.responseJSON&&(e.response=e.responseJSON,e.responseText=void 0),window.yasr.plugins.table.options.highlightLiteralCellResult=M,Q.setResponse(e,t,n)},y.$watch("yasr.options.output",(function(e){if(e&&"UPDATE"!==y.currentTabConfig.queryType&&"ASK"!==y.currentTabConfig.queryType){const t=y.tabs[D(y.currentQuery.id)];angular.isDefined(t)&&y.currentTabConfig.queryType&&t.outputType!==e&&(t.outputType=y.currentQuery.outputType=e,y.saveTab(t.id))}})),void y.$watch("namespaces",(function(){y.namespaces&&(Q&&Q.options&&y.namespaces&&(Q.options.getUsedPrefixes=y.namespaces),o.a.signal(window.editor,"namespacesChanged",y.namespaces))})),$(document).mouseup((function(e){const t=$("#sampleQueriesCollapse");!t.is(e.target)&&0===t.has(e.target).length&&y.showSampleQueries&&y.toggleSampleQueries()})),r.getActiveRepository()&&N();y.$on("repositoryIsSet",(function(){r.getActiveRepository()&&N()})),e((function(){angular.element(document).find(".CodeMirror textarea:first-child").focus()}),50)}(y)}),150)}}}angular.module("graphdb.framework.core.directives.queryeditor.queryeditor",["ngCookies","graphdb.framework.externalsync.controllers","graphdb.framework.rest.connectors.service","graphdb.framework.utils.localstorageadapter"]).directive("queryEditor",s),s.$inject=["$timeout","$location","toastr","$repositories","SparqlRestService","ModalService","$uibModal","$jwtAuth","RDF4JRepositoriesRestService","ConnectorsRestService","LocalStorageAdapter","LSKeys"]}}]);
2
+ //# sourceMappingURL=10.94e753e068396d6b6ec9.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/js/angular/rest/connectors.rest.service.js","webpack:///./src/js/angular/externalsync/controllers.js","webpack:///./src/js/angular/core/directives/queryeditor/query-editor.controller.js","webpack:///./src/js/angular/core/directives/queryeditor/query-editor.directive.js"],"names":["angular","module","factory","ConnectorsRestService","$inject","CONNECTORS_ENDPOINT","$http","getConnectors","get","initConnector","prefix","hasConnector","checkConnector","data","post","headers","jsonToFormData","str","Object","keys","forEach","key","push","encodeURIComponent","join","mapCreateValuesToUiValues","values","options","i","length","option","__type","__name","j","__childOptions","child","k","valueK","hasOwnProperty","isDefined","__defaultValue","optionEl","isUndefined","map","_","value","String","toJson","_evaluateSparqlQuery","http","repository","query","buildNamePrefix","substring","createConnectorQuery","name","fields","reportError","fcopy","sortObject","obj","newObject","each","childOption","copy","arrayMap","reduce","acc","Error","fromJson","e","__label","message","removeEmptyValues","Array","isArray","filter","item","trim","finalString","replace","ConnectorsCtrl","$scope","$repositories","$uibModal","toastr","ModalService","$q","RDF4JRepositoriesRestService","resetProgress","repair","beingBuiltConnector","percentDone","status","processedEntities","estimatedEntities","indexedEntities","entitiesPerSecond","actionName","waitOnRepairStartOnce","eta","inline","iri","openProgressModal","$","extend","doneCallback","modalInstance","dismiss","open","templateUrl","controller","size","backdrop","scope","executeCreate","connector","errorCallback","modal","addStatements","getActiveRepository","update","then","res","existing","success","err","error","getError","finally","loader","controllers","definitions","getLoaderMessage","timeSeconds","Date","now","loaderStartTime","timeHuman","getHumanReadableSeconds","progressMessage","extraMessage","setLoader","isRunning","canWriteActiveRepo","connectors","all","connectorIris","createStatusQueryForAny","evaluateSparqlQuery","results","bindings","statusObject","JSON","parse","console","parseFirstBuildingResult","d","split","catch","getOptions","isEmpty","isObject","toPrettyJson","$watch","getActiveLocation","copyConnector","newValues","resolve","result","skipConversion","newConnector","inst","type","openSimpleModal","title","warning","delete","isExternal","indexOf","force","namePrefix","deleteConnectorQuery","viewQuery","DeleteConnectorCtrl","$uibModalInstance","ok","close","cancel","ExtendNewConnectorCtrl","toQuery","label","addField","index","optionName","newField","defaultValues","splice","addOption","array","deleteOption","addMapOption","deleteMapOption","form","$valid","CreateConnectorCtrl","$controller","this","CreateProgressCtrl","$interval","initProgress","statusIri","createStatusQueryForIri","progressInterval","getFirstStatusFromResult","toFixed","etaSeconds","$on","input","Math","ceil","QueryEditorCtrl","$timeout","SparqlRestService","$filter","$window","$jwtAuth","MonitoringRestService","LocalStorageAdapter","LSKeys","defaultTabConfig","id","inference","sameAs","checkQueryIntervalId","principal","getPrincipal","initTabs","appSettings","DEFAULT_INFERENCE","DEFAULT_SAMEAS","skipCountQuery","EXECUTE_COUNT","ignoreSharedQueries","IGNORE_SHARED_QUERIES","tabsData","tabs","TABS_STATE","$watchCollection","newVal","oldVal","saveQueryToLocal","currentQuery","deleteCachedSparqlResults","currentQueryTab","isActiveRepoOntopType","sameAsBtn","document","getElementById","disabled","removeAttribute","shouldDisableSameAs","tab","set","noTimer","yasrInnerContainer","element","queryIsRunning","queryStartTime","countTimeouted","noLoaderTimer","addClass","currentTrackAlias","abortRequested","removeClass","$$phase","$apply","fixSizesOnHorizontalViewModeSwitch","verticalView","visibleWindowHeight","window","innerHeight","documentElement","clientHeight","body","orientationViewMode","viewMode","newHeight","querySelector","getBoundingClientRect","style","height","noPadding","minHeight","paddingRight","paddingLeft","editor","timer","yasr","container","resize","showHideEditor","foo","params","newRepo","yasrData","undefined","queryType","resultsCount","allResultsCount","sizeDelta","errorMessage","repositoryError","selectTab","runQuery","changePage","explain","executedQueryTab","getQueryType","explainRequested","currentTabConfig","resetCurrentTabConfig","lastRunQueryMode","getQueryMode","toggleSampleQueries","showSampleQueries","getSavedQueries","sampleQueries","collapse","width","msg","getExistingTabId","existingTabId","showModal","modalSelector","shared","savedQuery","getValue","findTabIndexByID","currentScope","hint","createElement","innerHTML","fontSize","color","backgroundColor","position","zIndex","newValue","elRect","appendChild","top","left","right","offsetWidth","parentNode","removeChild","pageSize","page","queryExists","saveTab","idx","loadTab","setValue","updateDownloadDropdown","$broadcast","output","outputType","customError","getException","setYasrResponse","textStatus","jqXhrOrErrorString","hasClass","click","TABS_STATE_CURRENT_ID","offset","allResultsCountExact","timeFinished","timeTook","customUpdateMessage","warningMessage","css","setInterval","showOrHideSaveAsDropDown","isOntop","isFedX","isActiveRepoFedXType","inferenceBtn","handleSameAsAndInferenceBtns","nocount","overrideSameAsInferenceAndNoCountIfNeeded","addNewTab","callback","tabName","isTabChangeOk","maxID","newID","newTab","TABS_STATE_MAXID","callbackArgs","prototype","slice","call","arguments","apply","abortCurrentQuery","abortQueryByAlias","editQuery","edit","okButtonText","queryModal","addNewSavedQuery","deleteQueryHttp","editSavedQuery","getNamespaces","namespacesLoading","getRepositoryNamespaces","usedPrefixes","namespace","namespaces","changePagination","addKnownPrefixes","stringify","querySelected","tabId","highlightNextTabChange","deleteQuery","savedQueryName","deleteSavedQuery","saveQuery","saveQueryHttp","changeViewMode","VIEW_MODE","focusQueryEditor","find","is","focus","getActiveRepositoryNoError","onbeforeunload","clearInterval","mouseup","event","target","has","getQueryID","attr","$saveAsDropDown","queryValid","header","remove","isNew","info","tabEvent","relatedTarget","colors","times","highlightFun","editQueryModal","deleteQueryModal","saveQueryModal","getResultsDescription","desc","currentPageEnd","min","getUpdateDescription","abs","getStaleWarningMessage","secondsAgo","round","bind","unbind","QuerySampleModalCtrl","queryEditorDirective","$location","callbackOnChange","restrict","link","attrs","nostorage","notabs","notoolbar","notoolbarSaved","notoolbarCopy","notoolbarInference","notoolbarSameAs","nostatus","norun","runButtonName","saveQueryAction","runQueryAction","explainQueryAction","goToNextTabAction","goToPreviousTabAction","requestedTab","first","fromTextArea","persistent","indentUnit","createShareLink","cursorHeight","sparql","showQueryButton","acceptHeaderGraph","acceptHeaderSelect","extraKeys","toastBuildIndex","allowHtml","toastError","on","clearTimeout","changesTimeout","hasError","setTimeout","toggleClass","hide","afterCopy","blur","originalExecuteQuery","executeQuery","originalGetUrlArguments","getUrlArguments","createCustomError","statusText","responseText","connectorProgressModal","drawButtons","yasqe","buttons","config","qType","cm","resultsContainer","empty","performance","endpoint","args","thisTabConfig","thisTabId","handlers","countCallback","dataOrJqXhr","setResultsCount","allCount","getTime","setQueryLimit","getValueWithoutComments","doExecute","getRepositorySize","repoSize","parseInt","command","hasSupport","connectorName","pluginName","setNewTabState","progressScope","$new","originalGetAjaxConfig","getAjaxConfig","getResponseHeader","contentType","response","executedQueryTabIdx","queryResultState","highlightExplainPlan","getBindings","vars","getVariables","singleBinding","planVar","includes","queryResultElement","getElementsByClassName","classList","add","setAttribute","queryResultValue","innerText","runMode","toBoolean","v","loadQueryIntoExistingOrNewTab","infer","onHandler","search","execute","addTabWithQueryIfNeeded","owner","getSavedQuery","updateRepositoryAndSecurity","signal","getAuthToken","callbackOrConfig","copyToClipboardQuery","openCopyToClipboardModal","url","location","protocol","host","pathname","param","createQueryURL","copyToClipboardResult","resultURI","goToVisual","paramsToParse","path","getUsedPrefixes","persistency","getQueryResultsAsFormat","downloadFormat","$wbDownload","val","auth","localStorage","getItem","submit","complete","setNewTabStateForThis","updateResultsCallback","repoSizeDiff","Number","responseJSON","max","resetResults","plugins","table","highlightLiteralCellResult","setResponse","drawQueryEditor","directive"],"mappings":"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","file":"10.94e753e068396d6b6ec9.bundle.js","sourcesContent":["angular\n .module('graphdb.framework.rest.connectors.service', [])\n .factory('ConnectorsRestService', ConnectorsRestService);\n\nConnectorsRestService.$inject = ['$http'];\n\nconst CONNECTORS_ENDPOINT = 'rest/connectors';\n\nfunction ConnectorsRestService($http) {\n\n return {\n getConnectors,\n initConnector,\n hasConnector,\n checkConnector\n };\n\n function getConnectors() {\n return $http.get(CONNECTORS_ENDPOINT);\n }\n\n function initConnector(prefix) {\n return $http.get(`${CONNECTORS_ENDPOINT}/options?prefix=${prefix}`);\n }\n\n function hasConnector(prefix) {\n return $http.get(`${CONNECTORS_ENDPOINT}/existing?prefix=${prefix}`);\n }\n\n function checkConnector(data) {\n return $http.post(`${CONNECTORS_ENDPOINT}/check`, data, {\n headers: {\n 'Content-Type': 'text/plain'\n }\n });\n }\n}\n","import 'angular/rest/rdf4j.repositories.rest.service';\nimport 'angular/rest/connectors.rest.service';\n\nconst modules = [\n 'graphdb.framework.rest.rdf4j.repositories.service',\n 'graphdb.framework.rest.connectors.service'\n];\n\nangular\n .module('graphdb.framework.externalsync.controllers', modules)\n .controller('ConnectorsCtrl', ConnectorsCtrl)\n .controller('ExtendNewConnectorCtrl', ExtendNewConnectorCtrl)\n .controller('CreateConnectorCtrl', CreateConnectorCtrl)\n .controller('CreateProgressCtrl', CreateProgressCtrl)\n .controller('DeleteConnectorCtrl', DeleteConnectorCtrl)\n .filter('ceil', ceil);\n\nfunction jsonToFormData(data) {\n const str = [];\n Object.keys(data).forEach(function (key) {\n str.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));\n });\n return str.join('&');\n}\n\nfunction toArrayMap(map) {\n return _.map(map, function (value, key) {\n return {key: key, value: value};\n });\n}\n\nfunction fromArrayMap(arrayMap) {\n return _.reduce(arrayMap, function (acc, value) {\n if (value.key === '' && value.value === '') {\n // empty pair, skip it\n } else if (value.key === '') {\n throw new Error('Key may not be empty with value \"' + value.value + '\"');\n } else if (acc.hasOwnProperty(value.key)) {\n throw new Error('Duplicate key ' + value.key);\n } else {\n acc[value.key] = value.value;\n }\n return acc;\n }, {});\n}\n\nfunction mapCreateValuesToUiValues(values, options) {\n for (let i = 0; i < options.length; i++) {\n const option = options[i];\n if (option.__type === 'StringArray') {\n if (!values[option.__name]) {\n values[option.__name] = [''];\n }\n } else if (option.__type === 'OptionArray') {\n if (!values[option.__name]) { // values has no entry for this option\n values[option.__name] = [];\n const optionEl = {};\n for (let j = 0; j < option.__childOptions.length; j++) {\n const child = option.__childOptions[j];\n if (child.__type === 'StringArray') {\n optionEl[child.__name] = [''];\n } else {\n optionEl[child.__name] = (!angular.isUndefined(child.__defaultValue) ? child.__defaultValue : '');\n }\n }\n values[option.__name].push(optionEl);\n } else { // values already has en entry for this option\n // Copies the default value for Boolean child options if no explicit value is set\n for (let j = 0; j < option.__childOptions.length; j++) {\n const child = option.__childOptions[j];\n if (child.__type === 'Boolean') {\n for (let k = 0; k < values[option.__name].length; k++) {\n const valueK = values[option.__name][k];\n if (!valueK.hasOwnProperty([child.__name]) && angular.isDefined(child.__defaultValue)) {\n valueK[child.__name] = child.__defaultValue;\n }\n }\n }\n }\n }\n } else if (option.__type === 'Map') {\n if (!values[option.__name]) {\n values[option.__name] = [];\n } else {\n values[option.__name] = toArrayMap(values[option.__name]);\n }\n } else if (option.__type === 'JsonString') {\n if (values[option.__name] && !(values[option.__name] instanceof String) && typeof values[option.__name] !== 'string') {\n values[option.__name] = angular.toJson(values[option.__name], 2);\n }\n } else {\n if (angular.isUndefined(values[option.__name])) {\n values[option.__name] = (!angular.isUndefined(option.__defaultValue) ? option.__defaultValue : '');\n }\n }\n }\n\n return values;\n}\n\nfunction _evaluateSparqlQuery(http, repository, query) {\n return http.post('repositories/' + repository, jsonToFormData({query: query}),\n {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/sparql-results+json',\n 'X-GraphDB-Local-Consistency': 'updating'\n }\n });\n}\n\nfunction buildNamePrefix(prefix) {\n return prefix.substring(0, prefix.length - 1) + '/instance#';\n}\n\nfunction createConnectorQuery(name, prefix, fields, options, reportError) {\n // Returns a copy of the parameter obj sorted according to the order in options\n function sortObject(obj, options) {\n const newObject = {};\n _.each(options, function (option) {\n if (angular.isDefined(obj[option.__name])) {\n if (option.__type === 'OptionArray') {\n newObject[option.__name] = [];\n _.each(obj[option.__name], function (childOption) {\n newObject[option.__name].push(sortObject(childOption, option.__childOptions));\n });\n } else {\n newObject[option.__name] = angular.copy(obj[option.__name]);\n }\n }\n });\n return newObject;\n }\n\n const fcopy = sortObject(fields, options);\n\n for (let i = 0; i < options.length; i++) {\n try {\n if (options[i].__type === 'Map') {\n fcopy[options[i].__name] = fromArrayMap(fcopy[options[i].__name]);\n } else if (options[i].__type === 'JsonString') {\n fcopy[options[i].__name] = angular.fromJson(fcopy[options[i].__name]);\n }\n } catch (e) {\n reportError(options[i].__label, e.message);\n return null;\n }\n }\n\n removeEmptyValues(fcopy);\n //escapeValues(fields);\n let finalString = '';\n finalString += 'PREFIX :<' + prefix + '>\\n';\n const namePrefix = buildNamePrefix(prefix);\n finalString += 'PREFIX inst:<' + namePrefix + '>\\n';\n finalString += 'INSERT DATA {\\n';\n finalString += \"\\tinst:\" + name + \" :createConnector '''\\n\"; // eslint-disable-line quotes\n finalString += angular.toJson(fcopy, 2);\n finalString += \"\\n''' .\\n}\\n\"; // eslint-disable-line quotes\n finalString = finalString.replace(/\\\\/g, '\\\\\\\\\\\\');\n return finalString;\n}\n\nfunction createStatusQueryForIri(iri) {\n const statusIri = iri.replace(/\\/instance#.+$/, '#connectorStatus');\n let finalString = '';\n finalString += 'SELECT ?status {\\n';\n finalString += '\\t<' + iri + '> <' + statusIri + '> ?status';\n finalString += '\\n}';\n return finalString;\n}\n\nfunction createStatusQueryForAny(connectors) {\n const connectorIris = _.map(connectors,\n function (k) {\n return '<' + k.value + 'connectorStatus' + '>';\n }).join('|');\n\n if (connectorIris) {\n return 'SELECT ?connector ?status { ?connector ' + connectorIris + ' ?status }';\n }\n\n return null;\n}\n\nfunction repairConnectorQuery(name, prefix) {\n const namePrefix = buildNamePrefix(prefix);\n return 'PREFIX prefix:<' + prefix + '>\\n' +\n 'INSERT DATA {\\n' +\n '\\t<' + namePrefix + name + '> prefix:repairConnector \"\"\\n' +\n '}';\n}\n\nfunction deleteConnectorQuery(name, prefix, force) {\n const namePrefix = prefix.substring(0, prefix.length - 1) + \"/instance#\";\n return 'PREFIX prefix:<' + prefix + '>\\n' +\n 'INSERT DATA {\\n' +\n '\\t<' + namePrefix + name + '> prefix:dropConnector \"' + (force ? \"force\" : \"\") + '\"\\n' +\n '}';\n}\n\nfunction removeEmptyValues(data) {\n // remove empty values from array\n if (Array.isArray(data)) {\n data = _.filter(data, function (item) {\n return item !== null && (!item.trim || item.trim() !== '');\n });\n }\n // remove empty values from object values\n Object.keys(data).forEach(function (key) {\n if ((data[key] === '' || data[key] == null) && data[key] !== false) {\n delete data[key];\n } else if (typeof data[key] === 'object') {\n data[key] = removeEmptyValues(data[key]);\n }\n });\n return data;\n}\n\nfunction parseFirstBuildingResult(results) {\n if (results.bindings) {\n for (let i = 0; i < results.bindings.length; i++) {\n try {\n const statusObject = JSON.parse(results.bindings[i].status.value);\n if (statusObject.status === 'BUILDING') {\n return {\n connector: results.bindings[i].connector.value,\n status: statusObject\n };\n }\n } catch (e) {\n console.error(e); // eslint-disable-line no-console\n }\n }\n }\n\n return {};\n}\n\nConnectorsCtrl.$inject = ['$scope', '$http', '$repositories', '$uibModal', 'toastr', 'ModalService', '$q', 'RDF4JRepositoriesRestService', 'ConnectorsRestService'];\n\nfunction ConnectorsCtrl($scope, $http, $repositories, $uibModal, toastr, ModalService, $q, RDF4JRepositoriesRestService, ConnectorsRestService) {\n $scope.loader = false;\n\n $scope.controllers = [];\n\n $scope.existing = {};\n\n $scope.definitions = {};\n\n $scope.getLoaderMessage = function () {\n const timeSeconds = (Date.now() - $scope.loaderStartTime) / 1000;\n const timeHuman = $scope.getHumanReadableSeconds(timeSeconds);\n let message = '';\n if ($scope.progressMessage) {\n message = $scope.progressMessage + '... ' + timeHuman;\n } else {\n message = 'Running operation...' + timeHuman;\n }\n if ($scope.extraMessage && timeSeconds > 10) {\n message += '\\n' + $scope.extraMessage;\n }\n\n return message;\n };\n\n $scope.setLoader = function (isRunning, progressMessage, extraMessage) {\n if (isRunning) {\n $scope.loader = true;\n $scope.loaderStartTime = Date.now();\n $scope.progressMessage = progressMessage;\n $scope.extraMessage = extraMessage;\n } else {\n $scope.loader = false;\n $scope.progressMessage = '';\n $scope.extraMessage = '';\n }\n };\n\n $scope.initConnector = function (connector) {\n return ConnectorsRestService.initConnector(encodeURIComponent(connector.value))\n .then(function (res) {\n $scope.definitions[connector.key] = res.data;\n\n return ConnectorsRestService.hasConnector(encodeURIComponent(connector.value))\n .then(function (res) {\n $scope.existing[connector.key] = res.data;\n\n });\n });\n };\n\n $scope.getConnectors = function () {\n if (!$scope.canWriteActiveRepo()) {\n return;\n }\n\n $scope.setLoader(true, 'Fetching connectors', 'Normally this is a fast operation but it may take longer if a bigger repository needs to be initialised first.');\n\n ConnectorsRestService.getConnectors()\n .then(function (res) {\n $scope.connectors = Object.keys(res.data).map(function (key) {\n return {key: key, value: res.data[key]};\n });\n\n $q.all(_.map($scope.connectors, function (connector) {\n return $scope.initConnector(connector);\n })).finally(function () {\n resetProgress();\n\n const query = createStatusQueryForAny($scope.connectors);\n\n if (query) {\n evaluateSparqlQuery(query)\n .then(function (res) {\n const status = parseFirstBuildingResult(res.data.results);\n if (status.connector) {\n // has a building connector, open progress indicator\n const d = status.connector.split(/#/);\n d[0] = d[0].replace(/\\/instance$/, '#');\n showProgress(d[0], d[1]);\n }\n })\n .finally(function () {\n $scope.setLoader(false);\n });\n } else {\n $scope.setLoader(false);\n }\n });\n }).catch(function (e) {\n $scope.setLoader(false);\n toastr.error(getError(e), 'Could not get connectors');\n });\n\n $scope.existing = {};\n };\n\n $scope.getOptions = function (connector) {\n return $scope.definitions[connector.key];\n };\n\n $scope.isEmpty = function (value) {\n return angular.isObject(value) && Object.keys(value).length === 0;\n };\n\n $scope.toPrettyJson = function (value) {\n return angular.toJson(value, 2);\n };\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, $scope.getConnectors);\n\n $scope.$watch(function () {\n return $repositories.getActiveLocation();\n }, $scope.getConnectors);\n\n function evaluateSparqlQuery(query) {\n return _evaluateSparqlQuery($http, $repositories.getActiveRepository(), query);\n }\n\n function resetProgress(repair) {\n $scope.beingBuiltConnector = {\n percentDone: 0,\n status: {\n processedEntities: 0,\n estimatedEntities: 0,\n indexedEntities: 0,\n entitiesPerSecond: 0\n },\n actionName: repair ? 'Repairing' : 'Creating',\n waitOnRepairStartOnce: !!repair,\n eta: '-',\n inline: false,\n iri: null\n };\n }\n\n function openProgressModal(prefix, name, repair) {\n resetProgress(repair);\n\n $.extend($scope.beingBuiltConnector, {\n iri: buildNamePrefix(prefix) + name,\n name: name,\n inline: false,\n doneCallback: function () {\n $scope.beingBuiltConnector.modalInstance.dismiss('cancel');\n }\n });\n\n $scope.beingBuiltConnector.modalInstance = $uibModal.open({\n templateUrl: 'pages/connectorProgress.html',\n controller: 'CreateProgressCtrl',\n size: 'lg',\n backdrop: 'static',\n scope: $scope\n });\n\n return $scope.beingBuiltConnector.modalInstance;\n }\n\n function showProgress(prefix, name) {\n resetProgress();\n\n $.extend($scope.beingBuiltConnector, {\n iri: buildNamePrefix(prefix) + name,\n name: name,\n inline: true,\n doneCallback: function () {\n $scope.beingBuiltConnector.inline = false;\n }\n });\n }\n\n function executeCreate(connector, obj, errorCallback) {\n const modal = openProgressModal(connector.value, obj.name, false);\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: obj.query}))\n .then(function () {\n ConnectorsRestService.getConnectors().then(function () {\n ConnectorsRestService.hasConnector(encodeURIComponent(connector.value)).then(function (res) {\n $scope.existing[connector.key] = res.data;\n });\n });\n toastr.success('Created connector ' + obj.name);\n }, function (err) {\n toastr.error(getError(err));\n errorCallback();\n }).finally(function () {\n modal.dismiss('cancel');\n });\n }\n\n $scope.copyConnector = function (connector, values) {\n let newValues;\n if (!angular.isUndefined(values)) {\n newValues = angular.copy(values);\n newValues.name = newValues.name + '-copy';\n }\n const modal = $uibModal.open({\n templateUrl: 'pages/createConnector.html',\n controller: 'CreateConnectorCtrl',\n size: 'lg',\n backdrop: 'static',\n resolve: {\n connector: function () {\n return connector;\n },\n values: function () {\n return angular.isUndefined(newValues) ? {name: '', values: {}} : newValues;\n },\n options: function () {\n return $scope.getOptions(connector);\n }\n }\n });\n\n modal.result.then(function (obj) {\n executeCreate(connector, obj, function () {\n obj.skipConversion = true;\n $scope.newConnector(connector, obj);\n });\n });\n };\n\n $scope.newConnector = function (connector, values) {\n const modal = $uibModal.open({\n templateUrl: 'pages/createConnector.html',\n controller: 'CreateConnectorCtrl',\n size: 'lg',\n backdrop: 'static',\n resolve: {\n connector: function () {\n return connector;\n },\n values: function () {\n return angular.isUndefined(values) ? {name: '', values: {}} : values;\n },\n options: function () {\n return $scope.getOptions(connector);\n }\n }\n });\n\n modal.result.then(function (obj) {\n executeCreate(connector, obj, function () {\n obj.skipConversion = true;\n $scope.newConnector(connector, obj);\n });\n });\n };\n\n $scope.repair = function (inst, type) {\n ModalService.openSimpleModal({\n title: 'Confirm repair',\n message: 'Are you sure you want to repair this connector?<br>Note that repair means delete + recreate with the same settings.',\n warning: true\n }).result\n .then(function () {\n const modal = openProgressModal(type.value, inst.name, true);\n\n const query = repairConnectorQuery(inst.name, type.value);\n\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: query}))\n .then(function () {\n ConnectorsRestService.getConnectors().then(function () {\n ConnectorsRestService.hasConnector(encodeURIComponent(type.value)).then(function (res) {\n $scope.existing[type.key] = res.data;\n });\n });\n toastr.success('Repaired connector ' + inst.name);\n }, function (err) {\n toastr.error(getError(err));\n }).finally(function () {\n modal.dismiss('cancel');\n });\n });\n };\n\n $scope.delete = function (inst, type) {\n const isExternal = type.key.indexOf(\"Elastic\") >= 0 || type.key.indexOf(\"Solr\") >= 0;\n\n $uibModal.open({\n templateUrl: 'js/angular/externalsync/templates/deleteConnector.html',\n controller: 'DeleteConnectorCtrl',\n resolve: {\n type: function () {\n return type.key;\n },\n isExternal: function () {\n return isExternal;\n }\n }\n }).result\n .then(function(force) {\n $scope.setLoader(true, 'Deleting connector ' + inst.name, 'This is usually a fast operation but it might take a while.');\n\n const query = deleteConnectorQuery(inst.name, type.value, force);\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: query}))\n .then(function () {\n ConnectorsRestService.getConnectors().then(function () {\n ConnectorsRestService.hasConnector(encodeURIComponent(type.value)).then(function (res) {\n $scope.existing[type.key] = res.data;\n });\n });\n if (force) {\n toastr.success(\"Deleted (with force) connector \" + inst.name);\n if (isExternal) {\n toastr.warning(\"You may have to remove the index manually from \" + type.key);\n }\n } else {\n toastr.success(\"Deleted connector \" + inst.name);\n }\n }, function (err) {\n toastr.error(getError(err));\n }).finally(function() {\n $scope.setLoader(false);\n });\n });\n };\n\n $scope.viewQuery = function (connector, inst) {\n $uibModal.open({\n templateUrl: 'pages/viewQuery.html',\n controller: 'ViewQueryCtrl',\n resolve: {\n query: function () {\n const options = $scope.getOptions(connector);\n return createConnectorQuery(inst.name, connector.value,\n mapCreateValuesToUiValues(inst.values, options), options);\n }\n }\n });\n };\n}\n\nDeleteConnectorCtrl.$inject = ['$scope', '$uibModalInstance', 'type', 'isExternal'];\nfunction DeleteConnectorCtrl($scope, $uibModalInstance, type, isExternal) {\n $scope.force = false;\n $scope.type = type;\n $scope.isExternal = isExternal;\n\n $scope.ok = function () {\n $uibModalInstance.close($scope.force);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss();\n };\n}\n\nExtendNewConnectorCtrl.$inject = ['$scope', '$uibModalInstance', 'connector', '$uibModal', 'toastr'];\nfunction ExtendNewConnectorCtrl($scope, $uibModalInstance, connector, $uibModal, toastr) {\n\n $scope.connector = connector;\n\n $scope.addField = function (index, optionName) {\n const newField = angular.copy($scope.defaultValues[optionName][0]);\n $scope.values[optionName].splice(index + 1, 0, newField);\n };\n\n $scope.addOption = function (index, array) {\n array.splice(index + 1, 0, '');\n };\n\n $scope.deleteOption = function (index, array) {\n array.splice(index, 1);\n };\n\n $scope.addMapOption = function (index, array) {\n array.splice(index + 1, 0, {key: '', value: ''});\n };\n\n $scope.deleteMapOption = function (index, array) {\n array.splice(index, 1);\n };\n\n function toQuery() {\n return createConnectorQuery($scope.name, connector.value, $scope.values, $scope.options,\n function (label, error) {\n toastr.error(error, label);\n });\n }\n\n $scope.ok = function () {\n if ($scope.form.$valid) {\n const query = toQuery();\n\n if (query) {\n $uibModalInstance.close({name: $scope.name, values: $scope.values, options: $scope.options, query: query});\n }\n }\n };\n\n $scope.viewQuery = function () {\n const query = toQuery();\n\n if (query) {\n $uibModal.open({\n templateUrl: 'pages/viewQuery.html',\n controller: 'ViewQueryCtrl',\n resolve: {\n query: function () {\n return query;\n }\n }\n });\n }\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nCreateConnectorCtrl.$inject = ['$scope', '$controller', '$http', '$uibModalInstance', 'connector', '$uibModal', 'values', 'options'];\n\nfunction CreateConnectorCtrl($scope, $controller, $http, $uibModalInstance, connector, $uibModal, values, options) {\n angular.extend(this, $controller('ExtendNewConnectorCtrl', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n connector: connector,\n $uibModal: $uibModal\n }));\n $scope.values = values.values;\n $scope.options = options;\n $scope.name = values.name;\n if (!values.skipConversion) {\n $scope.values = mapCreateValuesToUiValues($scope.values, $scope.options);\n }\n $scope.defaultValues = angular.copy($scope.values);\n}\n\n// Note that this is a fancy controller: it's used both for a modal and for a directive.\n// This means you can't rely on custom injection through resolve in the modal and the scope\n// must be shared with the main connectors controller.\nCreateProgressCtrl.$inject = ['$scope', '$interval', '$http', '$repositories'];\n\nfunction CreateProgressCtrl($scope, $interval, $http, $repositories) {\n function evaluateSparqlQuery(query) {\n return _evaluateSparqlQuery($http, $repositories.getActiveRepository(), query);\n }\n\n function initProgress() {\n const query = createStatusQueryForIri($scope.beingBuiltConnector.iri);\n\n // reset iri value so that watch will fire again when we do something with the same connector\n $scope.beingBuiltConnector.iri = null;\n\n $scope.progressInterval = $interval(function () {\n function getFirstStatusFromResult(results) {\n if (results.bindings) {\n if (results.bindings.length > 0) {\n try {\n return JSON.parse(results.bindings[0].status.value);\n } catch (e) {\n console.error(e); // eslint-disable-line no-console\n }\n }\n }\n\n return {};\n }\n\n evaluateSparqlQuery(query)\n .then(function (res) {\n const status = getFirstStatusFromResult(res.data.results);\n if (status.status === 'BUILDING') {\n $scope.beingBuiltConnector.status = status;\n $scope.beingBuiltConnector.percentDone = (100 * status.processedEntities / status.estimatedEntities).toFixed(0);\n $scope.beingBuiltConnector.eta = $scope.getHumanReadableSeconds(status.etaSeconds);\n $scope.beingBuiltConnector.actionName = status.repair ? 'Repairing' : 'Creating';\n $scope.beingBuiltConnector.waitOnRepairStartOnce = false;\n } else if (status.status === 'BUILT' && !$scope.beingBuiltConnector.waitOnRepairStartOnce) {\n // done\n $interval.cancel($scope.progressInterval);\n if ($scope.beingBuiltConnector.doneCallback) {\n $scope.beingBuiltConnector.doneCallback();\n }\n }\n });\n }, 1000);\n\n $scope.$on('$destroy', function () {\n $interval.cancel($scope.progressInterval);\n });\n }\n\n $scope.beingBuiltConnector = $scope.beingBuiltConnector || {};\n\n // for modal instance we get the iri before hand and can start progress now\n if (!$scope.beingBuiltConnector.inline && $scope.beingBuiltConnector.iri) {\n initProgress();\n }\n\n // for inline progress we need to watch for the iri value\n $scope.$watch('beingBuiltConnector.iri', function (value) {\n if ($scope.beingBuiltConnector.inline && value) {\n initProgress();\n }\n });\n}\n\nfunction ceil() {\n return function (input) {\n return Math.ceil(input);\n };\n}\n","import 'angular/utils/local-storage-adapter';\nimport 'angular/rest/sparql.rest.service';\n\nangular\n .module('graphdb.framework.core.directives.queryeditor.controllers', [\n 'graphdb.framework.utils.localstorageadapter',\n 'graphdb.framework.rest.sparql.service'\n ])\n .controller('QueryEditorCtrl', QueryEditorCtrl)\n .controller('QuerySampleModalCtrl', QuerySampleModalCtrl);\n\nQueryEditorCtrl.$inject = ['$scope', '$timeout', 'toastr', '$repositories', '$uibModal', 'ModalService', 'SparqlRestService', '$filter', '$window', '$jwtAuth', 'RDF4JRepositoriesRestService', 'MonitoringRestService', 'LocalStorageAdapter', 'LSKeys'];\n\nfunction QueryEditorCtrl($scope, $timeout, toastr, $repositories, $uibModal, ModalService, SparqlRestService, $filter, $window, $jwtAuth, RDF4JRepositoriesRestService, MonitoringRestService, LocalStorageAdapter, LSKeys) {\n const defaultTabConfig = {\n id: \"1\",\n name: '',\n query: 'select * where { \\n' +\n '\\t?s ?p ?o .\\n' +\n '} limit 100 \\n',\n inference: true,\n sameAs: true\n };\n\n let principal = $jwtAuth.getPrincipal();\n let checkQueryIntervalId;\n if (principal) {\n initTabs($scope, principal);\n // principal is not yet set, wait for its initialization\n } else {\n $scope.$on('securityInit', function (scope) {\n principal = $jwtAuth.getPrincipal();\n initTabs(scope.currentScope, principal);\n });\n }\n\n function initTabs(scope, principal) {\n defaultTabConfig.inference = principal.appSettings.DEFAULT_INFERENCE;\n defaultTabConfig.sameAs = principal.appSettings.DEFAULT_SAMEAS;\n\n scope.skipCountQuery = !principal.appSettings.EXECUTE_COUNT;\n scope.ignoreSharedQueries = principal.appSettings.IGNORE_SHARED_QUERIES;\n scope.tabsData = scope.tabs = LocalStorageAdapter.get(LSKeys.TABS_STATE) || [defaultTabConfig];\n\n scope.$watchCollection('[currentQuery.inference, currentQuery.sameAs]', function (newVal, oldVal, scope) {\n saveQueryToLocal(scope.currentQuery);\n });\n\n scope.$on('repositoryIsSet', deleteCachedSparqlResults);\n }\n\n this.hint = document.createElement(\"span\");\n this.hint.innerHTML = \"Hint: \\\"abC\\\" matches \\\"abC*\\\", \\\"ab c*\\\" and \\\"ab-c*\\\"\";\n this.hint.style.fontSize = \"12px\";\n this.hint.style.color = \"gray\";\n this.hint.style.backgroundColor = \"white\";\n this.hint.style.position = \"absolute\";\n this.hint.style.zIndex = \"3\";\n this.hint.style.paddingLeft = 12 + \"px\";\n\n $scope.$watch(function() {\n return angular.element('.CodeMirror-hints').length;\n }, (newValue) => {\n if (newValue) {\n const elRect = angular.element('.CodeMirror-hints')[0].getBoundingClientRect();\n document.body.appendChild(this.hint);\n this.hint.style.top = elRect.top - 20 + \"px\";\n this.hint.style.left = elRect.right - this.hint.offsetWidth - 12 + \"px\";\n } else {\n this.hint && this.hint.parentNode && this.hint.parentNode.removeChild(this.hint);\n }\n });\n\n $scope.resetCurrentTabConfig = function () {\n $scope.currentTabConfig = {\n pageSize: 1000,\n page: 1,\n allResultsCount: 0,\n resultsCount: 0\n };\n };\n\n $scope.queryExists = false;\n\n $scope.resetCurrentTabConfig();\n\n // query tab operations\n $scope.saveTab = saveTab;\n $scope.loadTab = loadTab;\n $scope.addNewTab = addNewTab;\n $scope.isTabChangeOk = isTabChangeOk;\n\n // query operations\n $scope.runQuery = runQuery;\n $scope.abortCurrentQuery = abortCurrentQuery;\n $scope.editQuery = editQuery;\n $scope.getNamespaces = getNamespaces;\n $scope.changePagination = changePagination;\n $scope.toggleSampleQueries = toggleSampleQueries;\n $scope.addKnownPrefixes = addKnownPrefixes;\n $scope.getExistingTabId = getExistingTabId;\n $scope.querySelected = querySelected;\n $scope.deleteQuery = deleteQuery;\n $scope.deleteQueryHttp = deleteQueryHttp;\n $scope.saveQuery = saveQuery;\n $scope.saveQueryHttp = saveQueryHttp;\n $scope.saveQueryToLocal = saveQueryToLocal;\n\n $scope.setLoader = setLoader;\n $scope.getLoaderMessage = getLoaderMessage;\n\n // query editor and results orientation\n $scope.fixSizesOnHorizontalViewModeSwitch = fixSizesOnHorizontalViewModeSwitch;\n $scope.changeViewMode = changeViewMode;\n $scope.showHideEditor = showHideEditor;\n $scope.focusQueryEditor = focusQueryEditor;\n $scope.orientationViewMode = LocalStorageAdapter.get(LSKeys.VIEW_MODE) ? LocalStorageAdapter.get(LSKeys.VIEW_MODE) === \"true\" : true;\n $scope.viewMode = 'none';\n\n // start of repository actions\n // FIXME: do we need this??\n // $scope.getActiveRepository();\n $scope.getActiveRepository = function () {\n // same as getActiveRepository() but takes into account repo errors\n return $repositories.getActiveRepository();\n };\n\n $scope.getActiveRepositoryNoError = function () {\n if (!$scope.repositoryError) {\n return $repositories.getActiveRepository();\n }\n };\n\n function saveQueryToLocal(currentQueryTab) {\n shouldDisableSameAs();\n $scope.tabs.forEach(function (tab, index) {\n if (tab.id === currentQueryTab.id) {\n $scope.tabs[index].query = currentQueryTab.query;\n // Don't store inference and sameAs values for Ontop repository,\n // because they are overridden afterwards to true\n if (!$repositories.isActiveRepoOntopType()) {\n $scope.tabs[index].inference = currentQueryTab.inference;\n $scope.tabs[index].sameAs = currentQueryTab.sameAs;\n }\n }\n });\n LocalStorageAdapter.set(LSKeys.TABS_STATE, $scope.tabs);\n }\n\n function setLoader(isRunning, progressMessage, extraMessage, noTimer) {\n const yasrInnerContainer = angular.element(document.getElementById(\"yasr-inner\"));\n $scope.queryIsRunning = isRunning;\n if (isRunning) {\n $scope.queryStartTime = Date.now();\n $scope.countTimeouted = false;\n $scope.progressMessage = progressMessage;\n $scope.extraMessage = extraMessage;\n $scope.noLoaderTimer = noTimer;\n yasrInnerContainer.addClass(\"hide\");\n } else {\n $scope.progressMessage = \"\";\n $scope.extraMessage = \"\";\n $scope.noLoaderTimer = false;\n $scope.currentTrackAlias = null;\n $scope.abortRequested = false;\n yasrInnerContainer.removeClass(\"hide\");\n }\n // We might call this from angular or outside angular so take care of applying the scope.\n if ($scope.$$phase === null) {\n $scope.$apply();\n }\n }\n\n function getLoaderMessage() {\n const timeSeconds = (Date.now() - $scope.queryStartTime) / 1000;\n let timeHuman = \"\";\n let message = \"\";\n\n if (!$scope.noLoaderTimer) {\n timeHuman = $scope.getHumanReadableSeconds(timeSeconds);\n }\n\n if ($scope.progressMessage) {\n message = $scope.progressMessage + \"... \" + timeHuman;\n } else {\n message = \"Running operation... \" + timeHuman;\n }\n if ($scope.extraMessage && timeSeconds > 10) {\n message += \"\\n\" + $scope.extraMessage;\n }\n\n return message;\n }\n\n // start of query editor results orientation operations\n function fixSizesOnHorizontalViewModeSwitch(verticalView) {\n function visibleWindowHeight() {\n return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;\n }\n\n if (!$scope.orientationViewMode) {\n $scope.noPadding = {paddingRight: 15, paddingLeft: 0};\n\n // window.editor is undefined if no repo is selected\n if (window.editor && document.querySelector('.CodeMirror-wrap')) {\n let newHeight = visibleWindowHeight() - (document.querySelector('.CodeMirror-wrap').getBoundingClientRect().top);\n newHeight -= 40;\n document.querySelector('.CodeMirror-wrap').style.height = newHeight + 'px';\n document.getElementById('yasr').style.minHeight = newHeight + 'px';\n //window.editor.refresh();\n } else {\n let timer;\n if (verticalView) {\n timer = $timeout(function () {\n $scope.fixSizesOnHorizontalViewModeSwitch(verticalView);\n }, 100);\n } else {\n timer = $timeout($scope.fixSizesOnHorizontalViewModeSwitch, 100);\n }\n\n $scope.$on(\"$destroy\", function () {\n $timeout.cancel(timer);\n });\n }\n } else {\n if ($scope.viewMode === 'yasr') {\n let newHeight = visibleWindowHeight() - (document.querySelector('.CodeMirror-wrap').getBoundingClientRect().top);\n newHeight -= 40;\n document.querySelector('.CodeMirror-wrap').style.height = newHeight + 'px';\n //window.editor.refresh();\n } else {\n $scope.noPadding = {};\n document.querySelector('.CodeMirror-wrap').style.height = '';\n //window.editor.refresh();\n }\n document.getElementById('yasr').style.minHeight = '';\n }\n if (window.yasr && window.yasr.container) {\n $timeout(function () {\n window.yasr.container.resize();\n }, 100);\n }\n }\n\n if (!$scope.orientationViewMode) {\n showHideEditor();\n }\n\n function changeViewMode() {\n $scope.viewMode = 'none';\n $scope.orientationViewMode = !$scope.orientationViewMode;\n LocalStorageAdapter.set(LSKeys.VIEW_MODE, $scope.orientationViewMode);\n fixSizesOnHorizontalViewModeSwitch();\n }\n\n function showHideEditor() {\n fixSizesOnHorizontalViewModeSwitch(true);\n }\n\n function focusQueryEditor() {\n if (!angular.element(document).find('.editable-input').is(\":focus\")) {\n angular.element(document).find('.CodeMirror textarea:first-child').focus();\n }\n }\n\n // end of query editor results orientation operations\n\n function deleteCachedSparqlResults(foo, params) {\n if (params.newRepo) {\n $scope.tabsData = LocalStorageAdapter.get(LSKeys.TABS_STATE);\n $scope.tabsData.forEach(function (item) {\n item.yasrData = undefined;\n item.queryType = undefined;\n item.resultsCount = 0;\n item.allResultsCount = 0;\n item.sizeDelta = undefined;\n });\n\n LocalStorageAdapter.set(LSKeys.TABS_STATE, $scope.tabsData);\n $scope.tabs = $scope.tabsData;\n\n // The repository is changed. Remove error messages as well, if any\n $scope.currentQuery = {};\n $scope.errorMessage = null;\n $scope.repositoryError = null;\n }\n }\n\n function selectTab(id) {\n $timeout(function () {\n $('a[data-id = \"' + id + '\"]').tab('show');\n }, 0);\n }\n\n window.onbeforeunload = function () {\n if ($scope.currentQuery) {\n $scope.saveTab($scope.currentQuery.id);\n }\n LocalStorageAdapter.set(LSKeys.TABS_STATE, $scope.tabs);\n };\n\n $scope.$on('$destroy', function () {\n if ($scope.currentQuery) {\n $scope.saveTab($scope.currentQuery.id);\n }\n LocalStorageAdapter.set(LSKeys.TABS_STATE, $scope.tabs);\n clearInterval(checkQueryIntervalId);\n });\n\n // start of query operations\n function runQuery(changePage, explain) {\n $scope.executedQueryTab = $scope.currentQuery;\n if (explain) {\n if (!(window.editor.getQueryType() === 'SELECT' || window.editor.getQueryType() === 'CONSTRUCT')) {\n toastr.warning('Explain only works with SELECT or CONSTRUCT queries.');\n return;\n }\n\n if ($repositories.isActiveRepoOntopType()) {\n toastr.warning('Explain not supported for Virtual repositories.');\n return;\n }\n }\n\n $scope.explainRequested = explain;\n if (!$scope.queryIsRunning) {\n if (changePage) {\n $scope.currentTabConfig.resultsCount = 0;\n } else {\n $scope.resetCurrentTabConfig();\n }\n\n $scope.lastRunQueryMode = window.editor.getQueryMode();\n\n if ($scope.lastRunQueryMode === 'update' && $repositories.isActiveRepoOntopType()) {\n toastr.warning('Updates are not supported for Virtual repositories.');\n return;\n }\n\n setLoader(true, $scope.lastRunQueryMode === 'update' ? 'Executing update' : 'Evaluating query');\n if ($scope.viewMode !== 'none') {\n $scope.viewMode = 'none';\n if ($scope.orientationViewMode) {\n $scope.fixSizesOnHorizontalViewModeSwitch();\n }\n const timer = $timeout(window.editor.query, 500);\n $scope.$on('$destroy', function () {\n $timeout.cancel(timer);\n });\n } else {\n window.editor.query();\n }\n }\n }\n\n function abortCurrentQuery() {\n MonitoringRestService.abortQueryByAlias($scope.currentTrackAlias)\n .success(function () {\n $scope.abortRequested = true;\n });\n }\n\n function getNamespaces() {\n // Signals the namespaces are to be fetched => loader will be shown\n setLoader(true, 'Refreshing namespaces', 'Normally this is a fast operation but it may take longer if a bigger repository needs to be initialised first.');\n $scope.namespacesLoading = true;\n\n RDF4JRepositoriesRestService.getRepositoryNamespaces()\n .success(function (data) {\n const usedPrefixes = {};\n data.results.bindings.forEach(function (e) {\n usedPrefixes[e.prefix.value] = e.namespace.value;\n });\n $scope.namespaces = usedPrefixes;\n })\n .error(function (data) {\n $scope.repositoryError = getError(data);\n })\n .finally(function () {\n // Signals namespaces were fetched => loader will be hidden\n setLoader(false);\n $scope.namespacesLoading = false;\n });\n }\n\n function changePagination() {\n runQuery(true, $scope.explainRequested);\n }\n\n $scope.$on(\"$destroy\", function () {\n clearInterval(checkQueryIntervalId);\n window.editor = null;\n window.yasr = null;\n });\n\n function toggleSampleQueries() {\n $scope.showSampleQueries = !$scope.showSampleQueries;\n if ($scope.showSampleQueries) {\n SparqlRestService.getSavedQueries()\n .success(function (data) {\n $scope.sampleQueries = data;\n $('#sampleQueriesCollapse').collapse('show').width('300px');\n })\n .error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error! Could not get saved queries');\n });\n } else {\n $('#sampleQueriesCollapse').collapse('hide');\n }\n }\n\n // Hide the sample queries when the user clicks somewhere else in the UI.\n $(document).mouseup(function (event) {\n const container = $('#sampleQueriesCollapse');\n if (!container.is(event.target) // if the target of the click isn't the container..\n && container.has(event.target).length === 0 //... nor a descendant of the container\n && $scope.showSampleQueries) {\n toggleSampleQueries();\n }\n });\n\n // Add known prefixes\n function addKnownPrefixes() {\n SparqlRestService.addKnownPrefixes(JSON.stringify(window.editor.getValue()))\n .success(function (data) {\n if (angular.isDefined(window.editor) && angular.isDefined(data) && data !== window.editor.getValue()) {\n window.editor.setValue(data);\n }\n })\n .error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error! Could not add known prefixes');\n return true;\n });\n }\n\n function querySelected(query) {\n const tabId = getExistingTabId(query);\n $scope.toggleSampleQueries();\n\n if ($scope.isTabChangeOk(false)) {\n $scope.highlightNextTabChange = true;\n if (!angular.isDefined(tabId)) {\n $scope.addNewTab(null, query.name, query.body);\n } else {\n selectTab(tabId);\n }\n }\n }\n\n function getExistingTabId(query) {\n let existingTabId = undefined;\n $scope.tabsData.forEach(function (item) {\n if (item.name === query.name && item.query === query.body) {\n existingTabId = item.id;\n return item;\n }\n });\n return existingTabId;\n }\n\n function editQuery(query) {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/core/directives/queryeditor/templates/query-sample.html',\n controller: 'QuerySampleModalCtrl',\n resolve: {\n data: function () {\n return {\n title: 'Edit Saved Query: \"' + query.name + '\"',\n query: query,\n edit: true,\n okButtonText: 'Save'\n };\n }\n }\n });\n\n modalInstance.result.then(function (queryModal) {\n const data = {\n name: queryModal.name,\n body: queryModal.body,\n shared: queryModal.shared\n };\n if (query.name !== queryModal.name) {\n SparqlRestService.addNewSavedQuery(data)\n .success(function () {\n $scope.deleteQueryHttp(query.name, true);\n })\n .error(function (error) {\n const msg = getError(error);\n toastr.error(msg, 'Error! Cannot edit saved query');\n });\n } else {\n SparqlRestService.editSavedQuery(data)\n .success(function () {\n $('#editQueryContainer').modal('hide');\n $scope.toggleSampleQueries();\n toastr.success('Saved query ' + query.name + ' was edited.');\n })\n .error(function (error) {\n const msg = getError(error);\n toastr.error(msg, 'Error! Cannot edit Saved query');\n });\n }\n });\n }\n\n function deleteQueryHttp(savedQueryName, edit) {\n SparqlRestService.deleteSavedQuery(savedQueryName)\n .success(function () {\n $scope.toggleSampleQueries();\n if (!edit) {\n toastr.success('Saved query: ' + savedQueryName + ' was deleted.');\n }\n })\n .error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error! Cannot delete saved query');\n });\n }\n\n function deleteQuery(savedQueryName) {\n ModalService.openSimpleModal({\n title: 'Confirm',\n message: 'Are you sure you want to delete the saved query ' + '\\'' + savedQueryName + '\\'?',\n warning: true\n }).result\n .then(function () {\n $scope.deleteQueryHttp(savedQueryName);\n });\n }\n\n function saveQueryHttp(query) {\n SparqlRestService.addNewSavedQuery(query)\n .success(function () {\n toastr.success('Saved query ' + query.name + ' was saved.');\n })\n .error(function (data) {\n let msg = getError(data);\n toastr.error(msg, 'Error! Cannot create saved query');\n // TODO: This condition will always be true\n if (msg = \"Query '\" + query.name + \"' already exists!\") {\n query.query = query.body;\n const queryExists = true;\n $scope.saveQuery(query, queryExists);\n }\n });\n }\n\n function saveQuery(query, queryExists) {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/core/directives/queryeditor/templates/query-sample.html',\n controller: 'QuerySampleModalCtrl',\n resolve: {\n data: function () {\n return {\n title: 'Create New Saved Query',\n query: {name: query.name, body: query.query, shared: query.shared},\n edit: false,\n okButtonText: 'Create',\n queryExists: queryExists\n };\n }\n }\n });\n\n modalInstance.result.then(function (query) {\n $scope.saveQueryHttp(query);\n }, function () {\n });\n }\n\n // end of query operations\n\n function showModal(modalSelector) {\n return function (name, query, shared) {\n $scope.savedQuery = {\n name: name,\n query: query || window.editor.getValue(),\n shared: shared\n };\n $(modalSelector).modal('show');\n };\n }\n\n\n // start of query tab operations\n function findTabIndexByID(id) {\n for (let i = 0; i < $scope.tabsData.length; i++) {\n const tab = $scope.tabsData[i];\n if (tab.id === id) {\n return i;\n }\n }\n }\n\n function saveTab(id) {\n const idx = findTabIndexByID(id);\n // Tab was deleted, don't try to save it's state\n if (idx === undefined) {\n return {};\n }\n const tab = $scope.tabsData[idx];\n //tab.query = window.editor.getValue();\n $scope.saveQueryToLocal(tab);\n return tab;\n }\n\n let maxID = LocalStorageAdapter.get(LSKeys.TABS_STATE_MAXID) || 1;\n\n function addNewTab(callback, tabName, savedQuery) { // optional callback to call after tab has been added\n if (!isTabChangeOk(true)) {\n return;\n }\n let defaultTabConfig;\n if (tabName || savedQuery) {\n defaultTabConfig = {\n id: \"1\",\n name: tabName,\n query: savedQuery,\n inference: principal.appSettings.DEFAULT_INFERENCE,\n sameAs: principal.appSettings.DEFAULT_SAMEAS\n };\n } else {\n defaultTabConfig = {\n id: \"1\",\n name: '',\n query: 'select * where { \\n' +\n '\\t?s ?p ?o .\\n' +\n '} limit 100 \\n',\n inference: principal.appSettings.DEFAULT_INFERENCE,\n sameAs: principal.appSettings.DEFAULT_SAMEAS\n };\n }\n\n maxID++;\n const newID = '' + maxID;\n $scope.tabsData = $scope.tabs;\n\n const newTab = defaultTabConfig;\n newTab.id = newID;\n\n $scope.tabsData.push(newTab);\n\n LocalStorageAdapter.set(LSKeys.TABS_STATE_MAXID, maxID);\n LocalStorageAdapter.set(LSKeys.TABS_STATE, $scope.tabsData);\n const callbackArgs = Array.prototype.slice.call(arguments, 1); // skip one argument, i.e. the callback itself\n $timeout(function () {\n $scope.$apply();\n selectTab(newID);\n if (callback) {\n callback.apply(this, callbackArgs);\n }\n }, 0);\n $scope.tabs = $scope.tabsData;\n }\n\n function loadTab(id) {\n $scope.tabsData = LocalStorageAdapter.get(LSKeys.TABS_STATE) || [defaultTabConfig];\n\n // find available tab\n const idx = findTabIndexByID(id);\n const tab = $scope.tabsData[idx];\n\n if (tab.yasrData) {\n setLoader(true, 'Rendering results', null, true);\n }\n\n // set query in editor available on the current tab\n $timeout(function () {\n if ($scope.currentQuery.query === '') {\n $scope.currentQuery.query = \" \";\n }\n $timeout(function () {\n window.editor.setValue($scope.currentQuery.query);\n $scope.yasr.updateDownloadDropdown();\n $scope.$broadcast('tabLoaded', $scope.currentQuery.id);\n\n // set query results in query results sections after\n // previous query execution. Yasr response rendering depends on the\n // query type of window.editor!\n $scope.yasr.options.output = tab.outputType; // this may be undefined, that's fine!\n if (tab.yasrData) {\n if (tab.yasrData.customError) {\n // Our injected custom (not real HTTP) error\n $scope.yasr.results = {\n getException: function () {\n return tab.yasrData.customError;\n }\n };\n setLoader(false);\n } else {\n // Real YASR result\n $timeout(function () {\n $scope.setYasrResponse(tab.yasrData, tab.textStatus, tab.jqXhrOrErrorString);\n setLoader(false);\n if ($('.yasr_btnGroup li:nth-child(2)').hasClass(\"active\")) {\n $timeout(function () {\n $('.yasr_btnGroup li:nth-child(2) a').get(0).click();\n }, 0);\n }\n }, 0);\n }\n }\n }, 0);\n }, 0);\n\n\n // persist current tab id in local storage\n LocalStorageAdapter.set(LSKeys.TABS_STATE_CURRENT_ID, id);\n\n $scope.currentQuery = tab;\n\n $timeout(function () {\n $scope.currentTabConfig = {};\n $scope.currentTabConfig.queryType = tab.queryType;\n $scope.currentTabConfig.resultsCount = tab.resultsCount;\n\n $scope.currentTabConfig.offset = tab.offset;\n $scope.currentTabConfig.allResultsCount = tab.allResultsCount;\n $scope.currentTabConfig.allResultsCountExact = tab.allResultsCountExact;\n $scope.currentTabConfig.page = tab.page;\n $scope.currentTabConfig.pageSize = tab.pageSize;\n\n $scope.currentTabConfig.timeFinished = tab.timeFinished;\n $scope.currentTabConfig.timeTook = tab.timeTook;\n $scope.currentTabConfig.sizeDelta = tab.sizeDelta;\n $scope.currentTabConfig.customUpdateMessage = tab.customUpdateMessage;\n $scope.currentTabConfig.errorMessage = tab.errorMessage;\n $scope.currentTabConfig.warningMessage = tab.warningMessage;\n\n $scope.$apply();\n }, 0);\n\n //Remove paddign of yasr so it will be aligned with sparql editor\n $('#yasr').css('padding', '0');\n\n if (!checkQueryIntervalId) {\n checkQueryIntervalId = setInterval(showOrHideSaveAsDropDown, 200);\n }\n overrideSameAsInferenceAndNoCountIfNeeded();\n }\n\n function getQueryID(element) {\n return $(element).attr('data-id');\n }\n\n function showOrHideSaveAsDropDown() {\n // If selected tab has results and query in editor controller is invalid save as\n // dropdown menu will be removed and on fixing query latter will be added\n if ($scope.currentTabConfig.resultsCount >= 0) {\n const $saveAsDropDown = $('.saveAsDropDown');\n if ($saveAsDropDown.length > 0 && !window.editor.queryValid) {\n yasr.header.find('.saveAsDropDown').remove();\n } else if ($saveAsDropDown.length === 0 && window.editor.queryValid) {\n yasr.updateDownloadDropdown();\n }\n }\n }\n\n function isTabChangeOk(isNew) {\n if ($scope.queryIsRunning && !$scope.namespacesLoading) {\n if (isNew) {\n toastr.info('New tabs may not be opened while query or update is running.');\n } else {\n toastr.info('Tabs may not be switched while query or update is running.');\n }\n\n return false;\n }\n\n return true;\n }\n\n // Raise this flag to provide visual feedback to the user the next time a tab changes\n // (either manually or by the system). See GDB-1983.\n $scope.highlightNextTabChange = false;\n $scope.$on('tabAction', function (e, tabEvent) {\n if (tabEvent.relatedTarget) {\n // Cancel any highlight timer that might have been left by the last highlight\n $timeout.cancel(tabEvent.relatedTarget.timer);\n $(tabEvent.relatedTarget).css('color', '');\n\n $scope.saveTab(getQueryID(tabEvent.relatedTarget));\n }\n\n $scope.loadTab(getQueryID(tabEvent.target));\n\n // These arrays define how the tab change will be visually enhanced.\n // colors contains the colors to set to the tab name,\n // while times defines the times in milliseconds to keep each color.\n // Once we cycle through the arrays we restore the default color.\n const colors = ['#ED4F2F', '', '#ED4F2F'];\n const times = [400, 400, 400];\n if ($scope.highlightNextTabChange) {\n $scope.highlightNextTabChange = false;\n let index = 0;\n $(tabEvent.target).css('color', colors[index]);\n const highlightFun = function () {\n index++;\n if (index < colors.length) {\n $(tabEvent.target).css('color', colors[index]);\n tabEvent.target.timer = $timeout(highlightFun, times[index]);\n } else {\n $(tabEvent.target).css('color', '');\n }\n };\n $timeout(highlightFun, times[index]);\n }\n });\n\n $scope.$on('deleteAllexeptSelected', function (e, tabs) {\n $scope.tabsData = tabs;\n $scope.tabs = tabs;\n });\n // end of query tab operations\n\n $scope.currentQuery = {};\n // $scope.state = {};\n $scope.showSampleQueries = false;\n $scope.savedQuery = {};\n $scope.sampleQueries = {};\n $scope.editQueryModal = showModal('#editQueryContainer');\n $scope.deleteQueryModal = showModal('#confirmDeleteContainer');\n $scope.saveQueryModal = showModal('#saveQueryContainer');\n\n $scope.getResultsDescription = function () {\n let desc;\n if ($scope.currentTabConfig.resultsCount === 0) {\n desc = \"No results.\";\n } else {\n const currentPageEnd = ($scope.currentTabConfig.page - 1) * $scope.currentTabConfig.pageSize\n + Math.min($scope.currentTabConfig.resultsCount, $scope.currentTabConfig.pageSize);\n desc = \"Showing results from \" + $filter('currency')($scope.currentTabConfig.offset, '', 0)\n + \" to \" + $filter('currency')(currentPageEnd, '', 0);\n if ($scope.currentTabConfig.allResultsCount > 0) {\n // Unsure total results count \"of at least\" happens if counting timed out or\n // counting was disabled and we got at least $pageSize + 1 results for the current page.\n // It may reset become exact when we navigate and reach the end of results.\n desc += $scope.currentTabConfig.allResultsCountExact\n ? \" of \" : \" of at least \";\n desc += $filter('currency')($scope.currentTabConfig.allResultsCount, '', 0);\n }\n desc += \".\";\n }\n\n return desc;\n };\n\n $scope.getUpdateDescription = function () {\n if ($scope.currentTabConfig.customUpdateMessage) {\n return $scope.currentTabConfig.customUpdateMessage;\n } else if ($scope.currentTabConfig.sizeDelta === undefined) {\n return '';\n } else if ($scope.currentTabConfig.sizeDelta < 0) {\n return 'Removed ' + Math.abs($scope.currentTabConfig.sizeDelta) + ' statements.';\n } else if ($scope.currentTabConfig.sizeDelta > 0) {\n return 'Added ' + $scope.currentTabConfig.sizeDelta + ' statements.';\n } else {\n return 'The number of statements did not change.';\n }\n };\n\n $scope.getStaleWarningMessage = function () {\n const secondsAgo = Math.round((Date.now() - $scope.currentTabConfig.timeFinished) / 60000) * 60;\n if (secondsAgo >= 3600) { // must be at least an hour\n return \"Possibly stale result (obtained \" + $scope.getHumanReadableSeconds(secondsAgo) + \" ago).\";\n }\n };\n\n const resize = function () {\n // $scope.fixSizesOnHorizontalViewModeSwitch();\n };\n\n angular.element($window).bind('resize', resize);\n\n $scope.$on('$destroy', function () {\n angular.element($window).unbind('resize', resize);\n });\n\n /**\n * In case of Ontop repository, sameAs, inference and nocount are\n * overridden to true and #sameAs and #inference buttons are disabled, In case of FedX repo nocount is overridden\n */\n function overrideSameAsInferenceAndNoCountIfNeeded() {\n const isOntop = $repositories.isActiveRepoOntopType();\n const isFedX = $repositories.isActiveRepoFedXType();\n handleSameAsAndInferenceBtns(isOntop);\n\n $scope.nocount = (isOntop || isFedX) ? true : !principal.appSettings.EXECUTE_COUNT;\n if (isOntop) {\n $scope.currentQuery.inference = true;\n $scope.currentQuery.sameAs = true;\n }\n }\n\n function handleSameAsAndInferenceBtns(isOntop) {\n const sameAsBtn = document.getElementById('sameAs');\n const inferenceBtn = document.getElementById('inference');\n\n if (sameAsBtn) {\n sameAsBtn.disabled = !!isOntop;\n }\n\n if (inferenceBtn) {\n inferenceBtn.disabled = !!isOntop;\n }\n }\n\n // The sameAs is meaningless without inference.\n // Set its value to false and disable button\n function shouldDisableSameAs() {\n // don't try to override sameAs if repository is Ontop type\n if ($repositories.isActiveRepoOntopType()) {\n return;\n }\n const sameAsBtn = document.getElementById('sameAs');\n if (sameAsBtn && !$scope.currentQuery.inference && !sameAsBtn.disabled) {\n sameAsBtn.disabled = true;\n $scope.currentQuery.sameAs = false;\n } else if ($scope.currentQuery.inference && sameAsBtn.disabled) {\n sameAsBtn.removeAttribute('disabled');\n $scope.currentQuery.sameAs = principal.appSettings.DEFAULT_SAMEAS;\n }\n }\n}\n\nQuerySampleModalCtrl.$inject = ['$scope', '$uibModalInstance', 'data'];\n\nfunction QuerySampleModalCtrl($scope, $uibModalInstance, data) {\n if (data.queryExists) {\n $scope.queryExists = true;\n }\n $scope.query = angular.copy(data.query);\n $scope.title = data.title;\n $scope.edit = data.edit;\n $scope.okButtonText = data.okButtonText;\n $scope.ok = function () {\n if ($scope.form.$valid) {\n $uibModalInstance.close($scope.query);\n }\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n","import 'angular/rest/connectors.rest.service';\nimport 'angular/utils/local-storage-adapter';\nimport 'angular/externalsync/controllers';\nimport YASQE from 'lib/yasqe.bundled';\nimport YASR from 'lib/yasr.bundled';\n\nangular\n .module('graphdb.framework.core.directives.queryeditor.queryeditor', [\n 'ngCookies',\n 'graphdb.framework.externalsync.controllers',\n 'graphdb.framework.rest.connectors.service',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .directive('queryEditor', queryEditorDirective);\n\nqueryEditorDirective.$inject = ['$timeout', '$location', 'toastr', '$repositories', 'SparqlRestService', 'ModalService', '$uibModal', '$jwtAuth', 'RDF4JRepositoriesRestService', 'ConnectorsRestService', 'LocalStorageAdapter', 'LSKeys'];\n\nfunction queryEditorDirective($timeout, $location, toastr, $repositories, SparqlRestService, ModalService, $uibModal, $jwtAuth, RDF4JRepositoriesRestService, ConnectorsRestService, LocalStorageAdapter, LSKeys) {\n\n let callbackOnChange;\n\n return {\n restrict: 'AE',\n scope: false,\n templateUrl: 'js/angular/core/directives/queryeditor/templates/query-editor.html',\n link: linkFunc\n };\n\n //function updateLineGutter() in Yasqe receive wrong data and line numbers div have width 100%\n // magic value 150 seems to work well (including Safari), smaller values work on other browsers but not always on Safari\n function linkFunc(scope, element, attrs) {\n // Doesn't store anything in local storage\n scope.nostorage = attrs.hasOwnProperty('nostorage');\n // Doesn't allow multiple tabs in the editor, only a single tab is active\n scope.notabs = attrs.hasOwnProperty('notabs');\n // Hides all the vertical toolbar inside the editor\n scope.notoolbar = attrs.hasOwnProperty('notoolbar');\n // Hides the saved queries icons in the toolbar\n scope.notoolbarSaved = attrs.hasOwnProperty('notoolbarSaved');\n // Hides the copy query link icon in the toolbar\n scope.notoolbarCopy = attrs.hasOwnProperty('notoolbarCopy');\n // Hides the inference icon in the toolbar\n scope.notoolbarInference = attrs.hasOwnProperty('notoolbarInference');\n // Hides the sameAs icon in the toolbar\n scope.notoolbarSameAs = attrs.hasOwnProperty('notoolbarSameAs');\n // Doesn't show any status messages in YASR (e.g. no results, query took that many seconds, etc)\n scope.nostatus = attrs.hasOwnProperty('nostatus');\n // Doesn't show the run button\n scope.norun = attrs.hasOwnProperty('norun');\n // Name of the Run button in the editor\n scope.runButtonName = \"Run\";\n if (attrs.runButtonName) {\n scope.runButtonName = attrs.runButtonName;\n }\n // Doesn't execute the count query\n scope.nocount = attrs.nocount === \"true\";\n\n // Custom callback to call when the content changes (fired within timeout of 200)\n if (attrs.callbackOnChange) {\n const callback = scope[attrs.callbackOnChange];\n if (typeof callback === 'function') {\n callbackOnChange = callback;\n }\n }\n\n $timeout(function () {\n drawQueryEditor(scope);\n }, 150);\n }\n\n function drawQueryEditor(scope) {\n scope.changePagination = changePagination;\n\n // start of keyboard shortcut actions\n function saveQueryAction() {\n angular.element('#wb-sparql-saveQuery')[0].click();\n }\n\n function runQueryAction() {\n scope.runQuery(false, false);\n }\n\n function explainQueryAction() {\n scope.runQuery(false, true);\n }\n\n function goToNextTabAction() {\n if (scope.tabs.length < 2 || !scope.currentQuery.id || !scope.isTabChangeOk(false)) {\n return;\n }\n let idx = findTabIndexByID(scope.currentQuery.id);\n idx = (idx + 1) % scope.tabs.length;\n const tab = scope.tabs[idx];\n selectTab(tab.id);\n }\n\n function goToPreviousTabAction() {\n if (scope.tabs.length < 2 || !scope.currentQuery.id || !scope.isTabChangeOk(false)) {\n return;\n }\n let idx = findTabIndexByID(scope.currentQuery.id);\n idx--;\n if (idx === -1) {\n idx = scope.tabs.length - 1;\n }\n const tab = scope.tabs[idx];\n selectTab(tab.id);\n }\n\n window.editor = YASQE.fromTextArea(\n document.getElementById(\"query\"), {\n persistent: null,\n value: \"\",\n indentUnit: 4,\n createShareLink: null,\n cursorHeight: 1.0,\n sparql: {\n showQueryButton: false,\n acceptHeaderGraph: \"application/x-graphdb-table-results+json, application/rdf+json;q=0.9, */*;q=0.8\",\n acceptHeaderSelect: \"application/x-sparqlstar-results+json, application/sparql-results+json;q=0.9, */*;q=0.8\"\n },\n // We provide a wrapper for executeQuery so we have to redefine those here\n extraKeys: {\n \"Ctrl-Enter\": runQueryAction,\n \"Cmd-Enter\": runQueryAction,\n \"Shift-Ctrl-Enter\": explainQueryAction,\n \"Shift-Cmd-Enter\": explainQueryAction,\n \"Ctrl-Alt-T\": scope.addNewTab,\n \"Cmd-Alt-T\": scope.addNewTab,\n \"Ctrl-S\": saveQueryAction,\n \"Cmd-S\": saveQueryAction,\n \"Ctrl-Alt-Left\": goToPreviousTabAction,\n \"Cmd-Alt-Left\": goToPreviousTabAction,\n \"Ctrl-Alt-Right\": goToNextTabAction,\n \"Cmd-Alt-Right\": goToNextTabAction\n }\n }\n );\n\n window.editor.toastBuildIndex = function () {\n toastr.warning('', '<div class=\"autocomplete-toast\"><a href=\"autocomplete\">Autocomplete is OFF<br>Go to Setup -> Autocomplete</a></div>',\n {allowHtml: true});\n };\n\n window.editor.toastError = function (data) {\n toastr.error('Cannot execute autocomplete query. ' + getError(data));\n };\n\n window.editor.on(\"changes\", function () {\n angular.element('.CodeMirror-linenumbers').css('width', '1px');\n angular.element('.CodeMirror-sizer').css('margin-left', '0px');\n clearTimeout(scope.changesTimeout);\n const hasError = !window.editor.queryValid;\n scope.changesTimeout = setTimeout(callbackOnChange ? callbackOnChange() : function () {\n const idx = findTabIndexByID(scope.currentQuery.id) + 1;\n $('a[data-id = \"' + idx + '\"]')\n .toggleClass('query-has-error', hasError)\n .attr('title', hasError ?\n 'Query contains a syntax error. See the relevant line for more information.' :\n '');\n }, 200);\n scope.currentQuery.query = window.editor.getValue();\n scope.currentQuery.queryType = window.editor.getQueryType();\n });\n\n\n function selectTab(id) {\n $timeout(function () {\n let requestedTab = $('a[data-id = \"' + id + '\"]');\n if (requestedTab.length === 0) {\n // tab has been deleted in another browser window or something else occurred,\n // select first tab instead\n requestedTab = $('a[data-id]').first();\n }\n requestedTab.tab('show');\n }, 0);\n }\n\n // hide unneeded yasqe fullscreen button\n $(\".fullscreenToggleBtns\").hide();\n\n const afterCopy = function (event) {\n $(event.target).removeClass('fa-link').addClass('fa-check').blur();\n setTimeout(function () {\n $(event.target).removeClass('fa-check').addClass('fa-link');\n }, 1000);\n };\n\n window.onbeforeunload = function () {\n if (!scope.nostorage) {\n LocalStorageAdapter.set(LSKeys.TABS_STATE, scope.tabs);\n }\n scope.saveTab(scope.currentQuery.id);\n };\n\n /*\n * Patch the execute query to take into account the inference\n * and the same as options\n */\n const originalExecuteQuery = YASQE.executeQuery;\n const originalGetUrlArguments = YASQE.getUrlArguments;\n\n scope.$on('$destroy', function () {\n if (!scope.nostorage) {\n LocalStorageAdapter.set(LSKeys.TABS_STATE, scope.tabs);\n }\n YASQE.executeQuery = originalExecuteQuery;\n YASQE.getUrlArguments = originalGetUrlArguments;\n scope.saveTab(scope.currentQuery.id);\n });\n\n /*\n * Add our own buttons\n */\n YASQE.drawButtons = function (yasqe) {\n // Define this property because otherwise there are errors in yasgui's code.\n yasqe.buttons = $(\"#yasqe_buttons_mocked\");\n };\n\n YASQE.getActiveRepository = function () {\n return $repositories.getActiveRepository();\n };\n\n YASQE.getUrlArguments = function (yasqe, config) {\n const data = originalGetUrlArguments(yasqe, config);\n const qType = window.editor.getQueryType();\n if ('SELECT' === qType || 'CONSTRUCT' === qType || 'DESCRIBE' === qType) {\n // We request pageSize + 1 to know if there are more pages when total count isn't known\n data.push({name: 'limit', value: scope.currentTabConfig.pageSize + 1});\n scope.currentTabConfig.offset = (scope.currentTabConfig.page - 1) * scope.currentTabConfig.pageSize + 1;\n data.push({name: 'offset', value: scope.currentTabConfig.offset - 1});\n }\n // even though we have explainRequested in our scope too it doesn't always contain a fresh value\n if (scope.explainRequested && ('SELECT' === qType || 'CONSTRUCT' === qType)) {\n data.push({name: 'explain', value: 'true'});\n }\n return data;\n };\n\n function createCustomError(status, statusText, responseText) {\n return {\n status: status,\n statusText: statusText,\n responseText: responseText\n };\n }\n\n // Generates a new tracking alias for queries based on time\n function newTrackAlias() {\n return \"query-editor-\" + performance.now() + \"-\" + Date.now();\n }\n\n let connectorProgressModal;\n let yasr;\n\n YASQE.executeQuery = function (cm) {\n if (yasr && $(yasr.resultsContainer).length) {\n $(yasr.resultsContainer).empty();\n }\n // Request extra error/warning handling\n cm.options.sparql.headers['X-GraphDB-Catch'] = scope.currentTabConfig.pageSize + '; throw';\n scope.currentTrackAlias = newTrackAlias();\n cm.options.sparql.headers['X-GraphDB-Track-Alias'] = scope.currentTrackAlias;\n scope.countTimeouted = false;\n if (cm.getQueryMode() === 'query') {\n cm.options.sparql.endpoint = 'repositories/' + $repositories.getActiveRepository();\n } else if (cm.getQueryMode() === 'update') {\n cm.options.sparql.endpoint = 'repositories/' + $repositories.getActiveRepository() + '/statements';\n }\n cm.options.sparql.args = [{\n name: 'infer',\n value: scope.currentQuery.inference\n },\n {\n name: 'sameAs',\n value: scope.currentQuery.sameAs\n }];\n\n scope.currentTabConfig.customUpdateMessage = \"\";\n\n if (window.editor.getQueryMode() === \"update\") {\n const doExecute = function () {\n scope.currentTabConfig.queryType = \"UPDATE\";\n\n RDF4JRepositoriesRestService.getRepositorySize()\n .success(function (data) {\n scope.repoSize = parseInt(data);\n scope.queryStartTime = new Date().getTime();\n return originalExecuteQuery(cm, {});\n })\n .error(function (data) {\n toastr.warning('Could not get repository size for: ' + $repositories.getActiveRepository() + '; ' + getError(data));\n scope.queryStartTime = new Date().getTime();\n return originalExecuteQuery(cm, {});\n });\n };\n\n ConnectorsRestService.checkConnector(window.editor.getValue())\n .then(function (res) {\n if (res.data.command && !res.data.hasSupport) {\n // it's a connector query but the relevant plugin isn't active, stop executing and warn the user\n scope.currentTabConfig.queryType = 'ERROR';\n scope.currentTabConfig.timeFinished = Date.now();\n scope.currentTabConfig.timeTook = (scope.currentTabConfig.timeFinished - scope.queryStartTime) / 1000;\n\n const customError = createCustomError(-1, 'No support for ' + res.data.connectorName, res.data.connectorName\n + ' connectors are not supported because the plugin ' + res.data.pluginName + ' is not active.');\n\n yasr.results = {\n getException: function () {\n return customError;\n }\n };\n\n scope.setLoader(false);\n\n setNewTabState({customError: customError}, '', null);\n\n return;\n }\n\n if (res.data.command === 'create' || res.data.command === 'repair') {\n const repair = res.data.command === 'repair';\n if (repair) {\n scope.setLoader(true, 'Repairing connector ' + res.data.name);\n scope.currentTabConfig.customUpdateMessage = 'Repaired connector ' + res.data.name + '.';\n } else {\n scope.setLoader(true, 'Creating connector ' + res.data.name);\n scope.currentTabConfig.customUpdateMessage = 'Created connector ' + res.data.name + '.';\n }\n\n const progressScope = scope.$new(true);\n\n // This duplicates code in the externalsync module but we can't get it from there\n progressScope.beingBuiltConnector = {\n percentDone: 0,\n status: {\n processedEntities: 0,\n estimatedEntities: 0,\n indexedEntities: 0,\n entitiesPerSecond: 0\n },\n actionName: repair ? 'Repairing' : 'Creating',\n eta: \"-\",\n inline: false,\n iri: res.data.iri,\n name: res.data.name,\n doneCallback: function () {\n connectorProgressModal.dismiss('cancel');\n }\n };\n progressScope.getHumanReadableSeconds = scope.getHumanReadableSeconds;\n\n connectorProgressModal = $uibModal.open({\n templateUrl: 'pages/connectorProgress.html',\n controller: 'CreateProgressCtrl',\n size: 'lg',\n backdrop: 'static',\n scope: progressScope\n });\n } else if (res.data.command === 'drop') {\n scope.setLoader(true, 'Deleting connector ' + res.data.name);\n scope.currentTabConfig.customUpdateMessage = 'Deleted connector ' + res.data.name + '.';\n }\n\n doExecute();\n }, function () {\n // for some reason we couldn't check if this is a connector update, so just execute it\n doExecute();\n });\n\n } else {\n const thisTabConfig = scope.currentTabConfig;\n const thisTabId = scope.executedQueryTab.id;\n\n // Assign a fresh callback function so that we can associate the count result\n // with the right tab (or lack of tab).\n window.editor.options.sparql.handlers.countCallback = function (dataOrJqXhr, textStatus, jqXhrOrErrorString) {\n if (dataOrJqXhr.status === 200) {\n const tab = scope.tabs[findTabIndexByID(thisTabId)];\n if (tab) {\n yasr.setResultsCount(dataOrJqXhr, textStatus, jqXhrOrErrorString);\n thisTabConfig.allResultsCount = yasr.allCount;\n tab.allResultsCount = yasr.allCount;\n thisTabConfig.allResultsCountExact = true;\n tab.allResultsCountExact = true;\n scope.saveTab(tab.id);\n } // Else tab was closed while we wait for the count, ignore result\n } else {\n // count query timed out or something else went wrong\n thisTabConfig.countTimeouted = true;\n }\n };\n\n // Tell YASR what format we want, or else it will mess it up when switching between tabs.\n if (scope.currentQuery.outputType != null) {\n yasr.options.output = scope.currentQuery.outputType;\n } else { // Default to table if no format has been configured yet.\n yasr.options.output = \"table\";\n }\n scope.currentTabConfig.queryType = window.editor.getQueryType();\n scope.queryStartTime = new Date().getTime();\n return originalExecuteQuery(cm, {\n setQueryLimit: function (query) {\n // Until weird conversion of CONSTRUCT queries is fixed\n // in Ontop project, comments should be removed from them\n // TODO: Remove this check when ${link https://github.com/ontop/ontop/issues/362} is fixed\n if (scope.currentTabConfig.queryType === 'CONSTRUCT' && $repositories.isActiveRepoOntopType()) {\n return window.editor.getValueWithoutComments();\n }\n // For all types of queries we handle limit/offset in our RepositoriesController.\n // TODO: Get rid of this method\n return query;\n }\n });\n }\n\n };\n\n // Override yasqe's getAjaxConfig() so we can inject our authorization header\n const originalGetAjaxConfig = YASQE.getAjaxConfig;\n YASQE.getAjaxConfig = function (yasqe, callbackOrConfig) {\n const config = originalGetAjaxConfig(yasqe, callbackOrConfig);\n\n _.extend(config.headers, {\n 'Authorization': $jwtAuth.getAuthToken()\n });\n\n return config;\n };\n\n function createQueryURL(savedQueryName, owner) {\n let url = [location.protocol, '//', location.host, location.pathname].join('');\n if (savedQueryName) {\n url = url + '?savedQueryName=' + encodeURIComponent(savedQueryName);\n if (owner != null) {\n url += '&owner=' + encodeURIComponent(owner);\n }\n } else {\n url = url + '?' + $.param({\n name: scope.currentQuery.name,\n infer: scope.currentQuery.inference,\n sameAs: scope.currentQuery.sameAs,\n query: window.editor.getValue()\n });\n }\n return url;\n }\n\n scope.copyToClipboardQuery = function (savedQueryName, owner) {\n ModalService.openCopyToClipboardModal(createQueryURL(savedQueryName, owner));\n };\n\n scope.copyToClipboardResult = function (resultURI) {\n ModalService.openCopyToClipboardModal(resultURI);\n };\n\n scope.goToVisual = function () {\n const paramsToParse = {\n query: window.editor.getValue(),\n sameAs: scope.currentQuery.sameAs,\n inference: scope.currentQuery.inference\n };\n\n $location.path('graphs-visualizations').search(paramsToParse);\n };\n\n // Adds prefixes when the user pastes a query. This was in the controller before and it stopped working\n // (needs to happen to after YASQE adds the textarea), see GDB-1936\n $('textarea').on('paste', function () {\n $timeout(function () {\n scope.addKnownPrefixes();\n }, 0);\n });\n\n function setNewTabState(dataOrJqXhr, textStatus, jqXhrOrErrorString) {\n // store explicitly the contentType\n if (dataOrJqXhr.getResponseHeader && dataOrJqXhr.getResponseHeader(\"content-type\")) {\n dataOrJqXhr.contentType = dataOrJqXhr.getResponseHeader(\"content-type\");\n }\n\n // We use this when we set YASR results to avoid double JSON parsing and to enforce\n // using the modified responseJSON. We'll save responseJSON instead (no need to save both).\n delete dataOrJqXhr.response;\n\n const executedQueryTabIdx = findTabIndexByID(scope.executedQueryTab.id);\n const executedQueryTab = scope.tabs[executedQueryTabIdx];\n const queryResultState = {\n queryType: scope.currentTabConfig.queryType,\n yasrData: dataOrJqXhr,\n textStatus: textStatus,\n jqXhrOrErrorString: jqXhrOrErrorString,\n page: scope.currentTabConfig.page,\n pageSize: scope.currentTabConfig.pageSize,\n allResultsCount: scope.currentTabConfig.allResultsCount,\n allResultsCountExact: scope.currentTabConfig.allResultsCountExact,\n resultsCount: scope.currentTabConfig.resultsCount,\n offset: scope.currentTabConfig.offset,\n timeTook: scope.currentTabConfig.timeTook,\n timeFinished: scope.currentTabConfig.timeFinished,\n sizeDelta: scope.currentTabConfig.sizeDelta,\n customUpdateMessage: scope.currentTabConfig.customUpdateMessage,\n errorMessage: scope.currentTabConfig.errorMessage,\n warningMessage: scope.currentTabConfig.warningMessage\n };\n\n // Save the output type only if it isn't an update or an ask query.\n // This way we preserve the existing output type when we execute an update and then\n // execute a non-ask query.\n if (scope.currentTabConfig.queryType !== \"ERROR\" && scope.currentTabConfig.queryType !== \"UPDATE\"\n && scope.currentTabConfig.queryType !== \"ASK\") {\n queryResultState.outputType = scope.yasr.options.output;\n }\n\n // merge query results state with the tab object\n angular.extend(scope.currentQuery, queryResultState);\n\n angular.extend(executedQueryTab, queryResultState);\n if (!scope.nostorage) {\n LocalStorageAdapter.set(LSKeys.TABS_STATE, scope.tabs);\n }\n $('a[data-id = \"' + scope.executedQueryTab.id + '\"]').tab('show');\n }\n\n function initYasr() {\n yasr = YASR(document.getElementById(\"yasr\"), { // eslint-disable-line new-cap\n getUsedPrefixes: {}, // initially blank, populated when we fetch the namespaces\n persistency: false\n });\n window.yasr = yasr;\n yasr.afterCopy = afterCopy;\n yasr.getQueryResultsAsFormat = function (downloadFormat) {\n // Simple cross-browser download with a form\n const $wbDownload = $('#wb-download');\n $wbDownload.attr('action', 'repositories/' + $repositories.getActiveRepository());\n $('#wb-download-query').val(scope.currentQuery.query);\n if (window.editor.getValue() !== scope.currentQuery.query) {\n toastr.warning('The query in your editor does not match the query results. Download will save the results from the last executed query.');\n }\n $('#wb-download-infer').val(scope.currentQuery.inference);\n $('#wb-download-sameAs').val(scope.currentQuery.sameAs);\n const auth = localStorage.getItem('com.ontotext.graphdb.auth');\n if (auth) {\n $('#wb-auth-token').val(auth);\n }\n $('#wb-download-accept').val(downloadFormat);\n $wbDownload.submit();\n };\n window.editor.options.sparql.handlers.complete = function (dataOrJqXhr, textStatus, jqXhrOrErrorString) {\n function setNewTabStateForThis() {\n setNewTabState(dataOrJqXhr, textStatus, jqXhrOrErrorString);\n }\n\n if (connectorProgressModal) {\n connectorProgressModal.dismiss('cancel');\n }\n\n // If yasqe was destroyed when scope was destroyed, do nothing\n if (null === window.editor) {\n scope.setLoader(false);\n\n return;\n }\n\n // Extra error/warning through headers\n scope.currentTabConfig.errorMessage = dataOrJqXhr.getResponseHeader('X-GraphDB-Error');\n scope.currentTabConfig.warningMessage = dataOrJqXhr.getResponseHeader('X-GraphDB-Warning');\n\n yasr.currentQuery = scope.currentQuery;\n\n scope.currentTabConfig.timeFinished = Date.now();\n scope.currentTabConfig.timeTook = (scope.currentTabConfig.timeFinished - scope.queryStartTime) / 1000;\n\n if (dataOrJqXhr.status >= 400) {\n // Removes useless com.blah.whatever.FooException: ... from the error message\n dataOrJqXhr.responseText = dataOrJqXhr.responseText.replace(/^([^: ]+: )+/, '');\n\n scope.currentTabConfig.queryType = 'ERROR';\n setNewTabStateForThis();\n scope.setYasrResponse(dataOrJqXhr, textStatus, jqXhrOrErrorString);\n\n scope.setLoader(false);\n\n return;\n }\n\n if (dataOrJqXhr.status === 0) {\n // Query was aborted, typically through window.editor.xhr.abort()\n\n scope.currentTabConfig.queryType = 'ERROR';\n\n const customError = createCustomError(-1, 'Request was aborted', 'The request has been aborted. There are no results to show.');\n\n yasr.results = {\n getException: function () {\n return customError;\n }\n };\n\n scope.setLoader(false);\n\n setNewTabState({customError: customError}, '', null);\n\n return;\n }\n\n scope.setLoader(false);\n\n let updateResultsCallback;\n\n if (window.editor.getQueryMode() === \"update\") {\n updateResultsCallback = function () {\n RDF4JRepositoriesRestService.getRepositorySize()\n .success(function (data) {\n let repoSizeDiff;\n if (scope.repoSize !== undefined) {\n repoSizeDiff = Number(data) - scope.repoSize;\n }\n scope.currentTabConfig.sizeDelta = repoSizeDiff;\n setNewTabStateForThis();\n }).error(function (data) {\n toastr.warning('Could not get repository size for: ' + scope.getActiveRepository() + '; ' + getError(data));\n scope.currentTabConfig.sizeDelta = undefined;\n setNewTabStateForThis();\n });\n };\n } else {\n if (dataOrJqXhr.status === 200) {\n const contentType = dataOrJqXhr.getResponseHeader('Content-Type');\n\n if (contentType.indexOf('application/sparql-results+json') === 0\n || contentType.indexOf('application/x-sparqlstar-results+json') === 0\n || contentType.indexOf('application/x-graphdb-table-results+json') === 0) {\n if (dataOrJqXhr.responseJSON.results) {\n // SELECT results in one of the standard formats or\n // CONSTRUCT or DESCRIBE results in our custom format that looks\n // like a SELECT result.\n scope.currentTabConfig.resultsCount = dataOrJqXhr.responseJSON.results.bindings.length;\n if (dataOrJqXhr.responseJSON.results.bindings.length > scope.currentTabConfig.pageSize) {\n // The results are more than the page size (because we request +1), truncate to page size\n // and raise flag to know we have at least one page more.\n dataOrJqXhr.responseJSON.results.bindings.length = scope.currentTabConfig.pageSize;\n }\n if (!scope.currentTabConfig.allResultsCountExact) {\n if (scope.nocount || scope.countTimeouted\n || scope.currentTabConfig.resultsCount <= scope.currentTabConfig.pageSize) {\n // No count requested or count timed out or the results are less than the pageSize + 1 buffer\n // In all of these cases it doesn't make sense to run\n // the counting query so we tweak the status to signal that to YASQE.\n dataOrJqXhr.status = 204; // 204 is no content, YASQE counts only if status is 200\n }\n\n // Calculate an \"at least\" all results count, i.e. at least what we have until now + 1.\n // The number will increase when we go to the next page eventually reaching the exact count.\n // A count query may also provide the exact count asynchronously.\n scope.currentTabConfig.allResultsCount = Math.max(scope.currentTabConfig.allResultsCount,\n scope.currentTabConfig.pageSize * (scope.currentTabConfig.page - 1) + scope.currentTabConfig.resultsCount);\n\n // We know we reached the end and the count is exact now.\n if (scope.currentTabConfig.resultsCount <= scope.currentTabConfig.pageSize) {\n scope.currentTabConfig.allResultsCountExact = true;\n }\n }\n }\n }\n }\n\n // The following long-running code needs to be in timeout to get the updated loader message\n scope.setLoader(true, 'Rendering results', null, true);\n\n updateResultsCallback = function () {\n scope.setYasrResponse(dataOrJqXhr, textStatus, jqXhrOrErrorString);\n\n setNewTabStateForThis();\n scope.setLoader(false);\n };\n }\n\n // By having this in timeout we manage to get the updated loader message\n $timeout(function () {\n updateResultsCallback();\n\n // Move disabled class to a, and clean from the li\n if (window.editor.getQueryType() !== \"CONSTRUCT\") {\n $('.yasr_btnGroup.nav.nav-tabs li a.disabled').removeClass('disabled').css('font-weight', '400');\n $('.yasr_btnGroup.nav.nav-tabs li.disabled a').addClass('disabled').css('font-weight', '200');\n if (window.editor.getQueryType() === \"DESCRIBE\") {\n $('.yasr_btnGroup.nav.nav-tabs li a').removeClass('disabled').css('font-weight', '400');\n }\n } else if (window.editor.getQueryType() === \"CONSTRUCT\") {\n $('.yasr_btnGroup.nav.nav-tabs li a.disabled').removeClass('disabled').css('font-weight', '400');\n }\n\n\n //Remove paddign of yasr so it will be aligned with sparql editor\n $('#yasr').css('padding', '0');\n\n if ($('.yasr_btnGroup li:nth-child(2)').hasClass(\"active\")) {\n $timeout(function () {\n $('.yasr_btnGroup li:nth-child(2) a').get(0).click();\n }, 100);\n }\n\n //\n $('#wb-sparql-addNewTab').click(function () {\n $('.dataTables_filter').hide();\n $('.resultsTable').hide();\n });\n }, 100);\n };\n\n window.editor.options.sparql.handlers.resetResults = function () {\n };\n\n scope.yasr = yasr;\n\n scope.setYasrResponse = function(dataOrJqXhr, textStatus, jqXhrOrErrorString) {\n // If YASR doesn't see a \"response\" property it will parse the textual JSON in \"responseText\".\n // This is both slow and interferes with the +1 result per page policy when we truncate responseJSON.\n if (dataOrJqXhr.responseJSON) {\n dataOrJqXhr.response = dataOrJqXhr.responseJSON;\n dataOrJqXhr.responseText = undefined;\n }\n window.yasr.plugins.table.options.highlightLiteralCellResult = highlightExplainPlan;\n yasr.setResponse(dataOrJqXhr, textStatus, jqXhrOrErrorString);\n };\n\n // Track changes in the output type (tab in yasr) so that we can save this together with\n // the rest of the tab's data.\n scope.$watch('yasr.options.output', function (value) {\n // Save the output type only if it isn't an update or an ask query (see comment where we save all properties).\n if (value && scope.currentTabConfig.queryType !== \"UPDATE\" && scope.currentTabConfig.queryType !== \"ASK\") {\n const tab = scope.tabs[findTabIndexByID(scope.currentQuery.id)];\n // Do not save tab on default yasr initalization since default table overrides saved value\n if (angular.isDefined(tab) && scope.currentTabConfig.queryType) {\n if (tab.outputType !== value) {\n tab.outputType = scope.currentQuery.outputType = value;\n scope.saveTab(tab.id);\n }\n }\n }\n });\n\n scope.$watch('namespaces', function () {\n if (scope.namespaces) {\n if (yasr && yasr.options && scope.namespaces) {\n // this way, the URLs in the results are prettified using the defined prefixes\n yasr.options.getUsedPrefixes = scope.namespaces;\n }\n\n // Notify YASQE about the new namespaces\n YASQE.signal(window.editor, 'namespacesChanged', scope.namespaces);\n }\n });\n }\n\n initYasr();\n\n function changePagination() {\n scope.runQuery(true, scope.explainRequested);\n }\n\n function highlightExplainPlan() {\n var bindings = yasr.results.getBindings();\n var vars = yasr.results.getVariables();\n var singleBinding = bindings[0];\n var planVar = vars[0];\n if (vars.length === 1 && bindings.length === 1 && planVar === \"plan\" && singleBinding[planVar].value.includes(\"# NOTE: Optimization groups\")) {\n var queryResultElement = document.getElementsByClassName('nonUri')[0];\n queryResultElement.classList.add(\"cm-s-default\");\n queryResultElement.setAttribute(\"id\", \"highlighted_output\");\n var queryResultValue = queryResultElement.innerText.substring(1, queryResultElement.innerText.length - 1);\n queryResultElement.innerHTML = \"\";\n YASQE.runMode(queryResultValue, \"sparql11\", document.getElementById(\"highlighted_output\"));\n }\n }\n\n // Hide the sample queries when the user clicks somewhere else in the UI.\n $(document).mouseup(function (event) {\n const container = $('#sampleQueriesCollapse');\n if (!container.is(event.target) // if the target of the click isn't the container..\n && container.has(event.target).length === 0 //... nor a descendant of the container\n && scope.showSampleQueries) {\n scope.toggleSampleQueries();\n }\n });\n\n function findTabIndexByID(id) {\n for (let i = 0; i < scope.tabs.length; i++) {\n const tab = scope.tabs[i];\n if (tab.id === id) {\n return i;\n }\n }\n }\n\n // functions to load query param or saved queries\n function toBoolean(v) {\n return angular.isDefined(v) && v !== 'false';\n }\n\n function autoexecuteQueryIfRequested() {\n const isRequested = toBoolean($location.search().execute);\n\n if (isRequested) {\n if (window.editor.getQueryMode() === 'update') {\n ModalService.openSimpleModal({\n title: 'Confirm execute',\n message: 'This is an update and it may change the data in the repository.<br>Are you sure you want to execute it automatically?',\n warning: true\n }).result\n .then(function () {\n scope.runQuery(false);\n });\n } else {\n scope.runQuery(false);\n }\n }\n }\n\n function loadQueryIntoExistingOrNewTab(query, infer, sameAs) {\n const tabId = scope.getExistingTabId(query);\n // Ah, the joys of non-synchronous events\n const onHandler = scope.$on('tabLoaded', function () {\n if (angular.isDefined(infer)) {\n scope.currentQuery.inference = toBoolean(infer);\n }\n if (angular.isDefined(sameAs)) {\n scope.currentQuery.sameAs = toBoolean(sameAs);\n }\n autoexecuteQueryIfRequested();\n onHandler();\n });\n\n // See comment about this flag in controller. It's a good idea to be consistent and do this\n // every time a tab changes without the user clicking on it.\n scope.highlightNextTabChange = true;\n\n if (!angular.isDefined(tabId)) {\n scope.addNewTab(null, query.name, query.body);\n } else {\n selectTab(tabId);\n }\n }\n\n function loadSavedQueryIntoExistingOrNewTab(savedQueryName, owner, infer, sameAs) {\n SparqlRestService.getSavedQuery(savedQueryName, owner)\n .success(function (data) {\n loadQueryIntoExistingOrNewTab(data, infer, sameAs);\n })\n .error(function (data) {\n toastr.error('Could not get data for saved query: ' + savedQueryName + '; ' + getError(data));\n });\n }\n\n function addTabWithQueryIfNeeded() {\n if ($location.search().savedQueryName) {\n // new way\n loadSavedQueryIntoExistingOrNewTab($location.search().savedQueryName, $location.search().owner,\n $location.search().infer, $location.search().sameAs);\n } else if ($location.search().query) {\n const query = {name: $location.search().name, body: $location.search().query};\n loadQueryIntoExistingOrNewTab(query, $location.search().infer, $location.search().sameAs);\n } else {\n // Restore the previous tab after the dom has loaded\n const currentid = LocalStorageAdapter.get(LSKeys.TABS_STATE_CURRENT_ID);\n selectTab(currentid);\n }\n }\n\n function updateRepositoryAndSecurity() {\n scope.getNamespaces();\n YASQE.signal(window.editor, \"repositoryOrAuthorizationChanged\",\n $repositories.getActiveRepository(), $jwtAuth.getAuthToken());\n addTabWithQueryIfNeeded();\n }\n\n if ($repositories.getActiveRepository()) {\n updateRepositoryAndSecurity();\n }\n\n // When no repo is selected (editor hidden) and the user selects a repo the SPARQL params should be handled\n scope.$on('repositoryIsSet', function () {\n if ($repositories.getActiveRepository()) {\n updateRepositoryAndSecurity();\n }\n });\n // end of repository actions\n\n // focus the editor\n $timeout(function () {\n angular.element(document).find('.CodeMirror textarea:first-child').focus();\n }, 50);\n\n }\n}\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[11,105],{30:function(t,e){let u;angular.module("graphdb.framework.utils.uriutils",[]).factory("UriUtils",(function(){return{isValidIri:function(t){return void 0!==t&&!!t.match(u)},validateRdfUri:function(t){const e=t.indexOf("<")>=0&&t.indexOf(">")>=0,u=-1===t.indexOf("<")&&-1===t.lastIndexOf(">"),n=/^<?(http|urn).*>?/.test(t)&&(e||u);let r=!1;if(n)if(t.indexOf("http")>=0){const e=t.indexOf("//");r=e>4&&t.substring(e+2).length>0}else t.indexOf("urn")>=0&&(r=t.substring(4).length>0);return n&&r}}}));try{u=new RegExp("^[a-z](?:[-a-z0-9\\+\\.])*:(?:\\/\\/(?:(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=:])*@)?(?:\\[(?:(?:(?:[0-9a-f]{1,4}:){6}(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|::(?:[0-9a-f]{1,4}:){5}(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9a-f]{1,4}:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|v[0-9a-f]+[-a-z0-9\\._~!\\$&'\\(\\)\\*\\+,;=:]+)\\]|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}|(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=@])*)(?::[0-9]*)?(?:\\/(?:(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=:@]))*)*|\\/(?:(?:(?:(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=:@]))+)(?:\\/(?:(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=:@]))*)*)?|(?:(?:(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=:@]))+)(?:\\/(?:(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=:@]))*)*|(?!(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=:@])))(?:\\?(?:(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=:@])|[\\u{E000}-\\u{F8FF}\\u{F0000}-\\u{FFFFD}\\u{100000}-\\u{10FFFD}\\/\\?])*)?(?:#(?:(?:%[0-9a-f][0-9a-f]|[-a-z0-9\\._~\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}!\\$&'\\(\\)\\*\\+,;=:@])|[\\/\\?])*)?$","ui")}catch(t){u=new RegExp("^[a-z](?:[-a-z0-9\\+\\.])*:","i")}},84:function(t,e,u){"use strict";u.r(e);u(2),u(30);const n="UPLOADING",r="PENDING",a="ERROR",i="DONE",F="NONE",s=angular.module("graphdb.framework.impex.import.controllers",["ui.bootstrap","toastr","graphdb.framework.core.services.repositories","graphdb.framework.utils.uriutils"]);s.controller("CommonCtrl",["$scope","$http","toastr","$interval","$repositories","$uibModal","$filter","$jwtAuth","$location","LicenseRestService",function(t,e,u,n,r,F,s,o,l,c){t.files=[],t.fileChecked={},t.checkAll=!1,t.popoverTemplateUrl="settingsPopoverTemplate.html",t.fileQuery="",t.getAppData=function(){c.getInfo().success((function(e){t.appData={},t.appData.properties={};for(let u=0;u<e.length;u++)t.appData.properties[e[u].key]={source:e[u].source,value:e[u].value};t.maxUploadFileSizeMB=t.appData.properties["graphdb.workbench.maxUploadSize"].value/1048576})).error((function(t){const e=getError(t);u.error(e,"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"})),u=_.map(t.fileFormats,(function(t){return"."+t}));t.fileFormatsExtended=_.reduce(_.union(e,u,[".zip"]),(function(t,e){return t+", "+e})),t.fileFormatsHuman=_.reduce(u,(function(t,e){return t+" "+e}))+", as well as their .gz versions and .zip archives",t.textFileFormatsHuman=_.reduce(_.filter(u,(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(u){const n=_.find(e,_.matches({name:u.name}));u.status&&n&&_.assign(u,n),u.type||(u.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===i||t.status===a})).length>0,t.savedSettings=_.mapKeys(_.filter(t.files,"parserSettings"),"name"),t.loader=!1})).error((function(e){u.warning("Could not get files; "+getError(e)),t.loader=!1}))},t.$watch((function(){return $(t.tabId).is(":visible")}),(function(){$(t.tabId).is(":visible")&&(t.updateListHttp(!1),l.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 s("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,u){return u||_.isEmpty(e)||_.isEmpty(t.savedSettings[e])?angular.copy(t.defaultSettings):t.savedSettings[e]},t.setSettingsFor=function(e,u){t.settingsFor=e,t.settings=t.getSettingsFor(e,u),F.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,u){t.settingsFor=e,t.settings=t.getSettingsFor(e,u),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){u.warning("Could not stop import; "+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(u){e[u.name]=t.fileChecked[u.name],t.batch|=t.fileChecked[u.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 u=t.getSelectedFiles(),n=function(){const r=u.shift();r&&(e&&(t.settings=t.getSettingsFor(r)),t.importFile(r,!0,n))};n()};const f=function(n,r){e({method:"DELETE",url:t.getBaseUrl()+"/status",params:{remove:r},data:n,headers:{"Content-type":"application/json;charset=utf-8"}}).success((function(){t.updateList(!0)})).error((function(t){u.warning("Could not clear status; "+getError(t))}))};t.resetStatus=function(t){f(t,!1)},t.resetStatusSelected=function(){t.resetStatus(t.getSelectedFiles())},t.removeEntry=function(t){f(t,!0)},t.removeEntrySelected=function(){t.removeEntry(t.getSelectedFiles())},t.isLocalLocation=function(){const t=r.getActiveLocation();return t&&t.local},t.filterSettings=function(e){let u=_.omitBy(t.savedSettings[e],_.isNull);return u=_.omit(u,["repoLocationHash","status","message","name","data","type","format","fileNames","$$hashKey"]),_.map(_.keys(u),(function(t){return[t,u[t]]}))},t.getSettings=function(){t.canWriteActiveRepo()&&e({method:"GET",url:"rest/data/import/settings/default"}).success((function(e){t.defaultSettings=e})).error((function(t){u.warning("Could not get default settings; "+getError(t))}))},t.getBaseUrl=function(){return"rest/data/import/"+t.viewUrl+"/"+r.getActiveRepository()},t.pritifySettings=function(t){return JSON.stringify(t,null," ")},t.toTitleCase=function(t){return t?_.upperFirst(t.toLowerCase()):t}}]),s.controller("ImportCtrl",["$scope","$http","toastr","$controller",function(t,e,u,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 r=function(n,r){t.canWriteActiveRepo()&&e({method:"POST",url:t.getBaseUrl(),data:{importSettings:r?null:t.settings,fileNames:n}}).success((function(){t.updateList(),t.batch=!1,t.fileChecked={}})).error((function(t){u.error("Could not send file for import; "+getError(t))}))};t.importSelected=function(e){const u=t.getSelectedFiles();r(u,e)},t.importFile=function(t){r([t])},t.init()}]),s.controller("UploadCtrl",["$scope","Upload","$http","toastr","$controller","$uibModal",function(t,e,u,i,s,o){t.loader=!0,angular.extend(this,s("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,u,n,r){r.length>0&&r.forEach((function(t){i.warning("File "+t.name+" too big "+Math.floor(t.size/1048576)+" MB. Use Server Files import.")}))},t.$watchCollection("currentFiles",(function(){t.currentFiles&&t.currentFiles.forEach((function(e){if("bz2"===e.name.substr(e.name.lastIndexOf(".")+1)){const u=t.currentFiles.indexOf(e);u>-1&&t.currentFiles.splice(u,1),i.error("Could not upload file "+e.name+". BZip2 archives are not supported.")}})),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(F,s,o){const l=_.findIndex(t.files,{name:F});if(l<0)i.warning("No such file; "+F);else{const F=t.files[l];if("text"===F.type)t.settings.name=F.name,t.settings.type=F.type,t.settings.data=F.data,t.settings.format=F.format,F.status=r,u({method:"POST",url:t.getBaseUrl()+(s?"":"/update")+"/text",data:t.settings}).success((function(){t.updateList()})).error((function(t){i.error("Could not send data for import; "+getError(t)),F.status=a,F.message=getError(t)})).finally(o||function(){});else if("url"===F.type)t.settings.name=F.name,t.settings.type=F.type,t.settings.data=F.data,t.settings.format=F.format,F.status=r,u({method:"POST",url:t.getBaseUrl()+(s?"":"/update")+"/url",data:t.settings}).success((function(){t.updateList()})).error((function(t){i.error("Could not send url for import; "+getError(t))})).finally(o||function(){});else{let u;t.settings.name=F.name,u=F.file?{file:F.file,importSettings:e.jsonBlob(t.settings)}:{importSettings:e.jsonBlob(t.settings)},e.upload({url:t.getBaseUrl()+(s?"":"/update")+"/file",data:u}).progress((function(t){if(F.file?(F.file=null,F.status=n):F.status!==n&&(F.status=r),F.status===n){const e=parseInt(100*t.loaded/t.total);F.message=e+"% uploaded"}})).success((function(){t.updateList()})).error((function(t){i.error("Could not upload file; "+getError(t)),F.status=a,F.message=getError(t)})).finally(o||function(){})}}},t.updateTextImport=function(e){t.updating=!0,u({method:"POST",url:t.getBaseUrl()+"/update/text",data:e}).success((function(t){})).error((function(t){i.error("Could not update text import; "+getError(t))})).finally((function(){t.updating=!1}))},t.pastedDataIdx=1;const l=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,o.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(u){e?(e.data===u.text&&e.format===u.format||e.status===F||(e.status=F,e.message="Text snippet was edited but has not been imported again."),e.data=u.text,e.format=u.format,t.updateTextImport(e)):(e={type:"text",name:"Text snippet "+l(),format:u.format,data:u.text},t.files.unshift(e),t.updateImport(e.name)),u.startImport&&t.setSettingsFor(e.name)}))},t.rdfDataFromURL=function(){o.open({templateUrl:"js/angular/import/templates/urlImport.html",controller:"UrlCtrl",scope:t}).result.then((function(e){const u=_.find(t.files,{type:"url",name:e.url});u?u.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()}]),s.controller("UrlCtrl",["$scope","$uibModalInstance","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})}}]),s.controller("TextCtrl",["$scope","$uibModalInstance","text","format",function(t,e,u,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=u,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})}}]),s.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"}]),s.controller("SettingsModalCtrl",["$scope","$uibModalInstance","toastr","UriUtils","settings","hasParserSettings","defaultSettings","isMultiple",function(t,e,u,n,r,a,i,F){t.hasError=function(t,e){return _.find(t,(function(t){return e===t.$name}))},t.settings=r,t.hasParserSettings=a,t.settings.context?"default"===t.settings.context?(t.target="default",t.settings.context=""):t.target="named":t.target="data",t.isMultiple=F,t.enableReplace=!(!t.settings.replaceGraphs||!t.settings.replaceGraphs.length);const s=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&&(s(),e.close(t.settings))},t.cancel=function(){s(),e.dismiss(t.settings)},t.reset=function(){t.settings=angular.copy(i),t.target="data"},t.addReplaceGraph=function(e){let r=!0;"default"!==e&&(r=n.isValidIri(e)),t.settingsForm.replaceGraph.$setTouched(),t.settingsForm.replaceGraph.$setValidity("replaceGraph",r),t.settingsForm.replaceGraph.$valid&&(t.settings.replaceGraphs=t.settings.replaceGraphs||[],-1===_.indexOf(t.settings.replaceGraphs,e)?(t.replaceGraph="",t.settings.replaceGraphs.push(e)):u.warning("This graph is already in the list."))},t.checkEnterReplaceGraph=function(e,u){13===e.keyCode&&(e.preventDefault(),t.addReplaceGraph(u))},t.showAdvancedSettings=!1,t.switchParserSettings=function(){t.showAdvancedSettings=!t.showAdvancedSettings}}])}}]);
2
+ //# sourceMappingURL=11.043e8d20764e39c10e31.bundle.js.map