graphdb-workbench 2.1.2 → 2.1.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.
- package/dist/{0.1bd9b49fd9f95db7afda.bundle.js → 0.6f85dbec9122f837f5e7.bundle.js} +3 -3
- package/dist/0.6f85dbec9122f837f5e7.bundle.js.map +1 -0
- package/dist/{10.cabc799d9aabc46e7be7.bundle.js → 10.0d7e127640f8c0678145.bundle.js} +2 -2
- package/dist/{10.cabc799d9aabc46e7be7.bundle.js.map → 10.0d7e127640f8c0678145.bundle.js.map} +1 -1
- package/dist/{100.24bbc960b22ec8f26f68.bundle.js → 100.8a2c21d9df10d17f9291.bundle.js} +2 -2
- package/dist/{100.24bbc960b22ec8f26f68.bundle.js.map → 100.8a2c21d9df10d17f9291.bundle.js.map} +1 -1
- package/dist/{11.b2fd98471071348c3964.bundle.js → 11.c8ad938cfc97d57b4d9e.bundle.js} +2 -2
- package/dist/{11.b2fd98471071348c3964.bundle.js.map → 11.c8ad938cfc97d57b4d9e.bundle.js.map} +1 -1
- package/dist/{110.7419abdcd9b1e7b062ad.bundle.js → 110.4c6719423e79f089e594.bundle.js} +2 -2
- package/dist/{110.7419abdcd9b1e7b062ad.bundle.js.map → 110.4c6719423e79f089e594.bundle.js.map} +1 -1
- package/dist/{111.87635664a5306fc0c6bb.bundle.js → 111.93eb21f8bd85a9ef5d1b.bundle.js} +2 -2
- package/dist/{111.87635664a5306fc0c6bb.bundle.js.map → 111.93eb21f8bd85a9ef5d1b.bundle.js.map} +1 -1
- package/dist/{113.2a67bc73a80f0bbf6397.bundle.js → 113.b77f2a783cadc7a2d428.bundle.js} +2 -2
- package/dist/{113.2a67bc73a80f0bbf6397.bundle.js.map → 113.b77f2a783cadc7a2d428.bundle.js.map} +1 -1
- package/dist/114.db473421180e7bce6495.bundle.js +2 -0
- package/dist/114.db473421180e7bce6495.bundle.js.map +1 -0
- package/dist/{115.6751a154fb77d1efeec8.bundle.js → 115.00597ad4f535ccc61e03.bundle.js} +2 -2
- package/dist/{115.6751a154fb77d1efeec8.bundle.js.map → 115.00597ad4f535ccc61e03.bundle.js.map} +1 -1
- package/dist/{116.75f79d13526f131b61f0.bundle.js → 116.7a3c48b8b4348e54c7fd.bundle.js} +2 -2
- package/dist/{116.75f79d13526f131b61f0.bundle.js.map → 116.7a3c48b8b4348e54c7fd.bundle.js.map} +1 -1
- package/dist/{117.17c60bd040eada2f965d.bundle.js → 117.49b3141cc6594af99fbf.bundle.js} +2 -2
- package/dist/{117.17c60bd040eada2f965d.bundle.js.map → 117.49b3141cc6594af99fbf.bundle.js.map} +1 -1
- package/dist/{118.fc48834f75995ef9202f.bundle.js → 118.e1ebd5f3d7cf4f8e013a.bundle.js} +2 -2
- package/dist/{118.fc48834f75995ef9202f.bundle.js.map → 118.e1ebd5f3d7cf4f8e013a.bundle.js.map} +1 -1
- package/dist/{119.44cc6552449537efa8f5.bundle.js → 119.0427b867fee545388a66.bundle.js} +2 -2
- package/dist/{119.44cc6552449537efa8f5.bundle.js.map → 119.0427b867fee545388a66.bundle.js.map} +1 -1
- package/dist/{12.c008cc99a0d358fd58b7.bundle.js → 12.6bd2906fb955b8456713.bundle.js} +3 -3
- package/dist/{12.c008cc99a0d358fd58b7.bundle.js.map → 12.6bd2906fb955b8456713.bundle.js.map} +1 -1
- package/dist/{120.8f48d9b3f8071e4c42fd.bundle.js → 120.923b20db8c2c297742d8.bundle.js} +2 -2
- package/dist/{120.8f48d9b3f8071e4c42fd.bundle.js.map → 120.923b20db8c2c297742d8.bundle.js.map} +1 -1
- package/dist/13.d7290e4e69a54c71e974.bundle.js +3 -0
- package/dist/13.d7290e4e69a54c71e974.bundle.js.map +1 -0
- package/dist/136.3199d393576be61f53fd.bundle.js +1 -1
- package/dist/136.3199d393576be61f53fd.bundle.js.map +1 -1
- package/dist/14.638a884323fe9235b58f.bundle.js +2 -0
- package/dist/14.638a884323fe9235b58f.bundle.js.map +1 -0
- package/dist/{15.e870cbcf6346cc68bd66.bundle.js → 15.244542a39d9296cc4fd8.bundle.js} +2 -2
- package/dist/{15.e870cbcf6346cc68bd66.bundle.js.map → 15.244542a39d9296cc4fd8.bundle.js.map} +1 -1
- package/dist/{16.23e12f234078c8777ed0.bundle.js → 16.3b52e17f123523d84054.bundle.js} +2 -2
- package/dist/{16.23e12f234078c8777ed0.bundle.js.map → 16.3b52e17f123523d84054.bundle.js.map} +1 -1
- package/dist/{17.d1ac5f88f9ef9ee1c789.bundle.js → 17.a417430fca1e34e80912.bundle.js} +2 -2
- package/dist/{17.d1ac5f88f9ef9ee1c789.bundle.js.map → 17.a417430fca1e34e80912.bundle.js.map} +1 -1
- package/dist/{18.63478730d60e02069d90.bundle.js → 18.d6e541cf8e651a6d223e.bundle.js} +2 -2
- package/dist/{18.63478730d60e02069d90.bundle.js.map → 18.d6e541cf8e651a6d223e.bundle.js.map} +1 -1
- package/dist/19.b5b3699a309774176fc3.bundle.js +1 -1
- package/dist/19.b5b3699a309774176fc3.bundle.js.map +1 -1
- package/dist/{20.d707dfb57f695469ffaa.bundle.js → 20.a40b79082e0f2a9b3511.bundle.js} +2 -2
- package/dist/{20.d707dfb57f695469ffaa.bundle.js.map → 20.a40b79082e0f2a9b3511.bundle.js.map} +1 -1
- package/dist/{22.e1562d53daf95dd1fdca.bundle.js → 22.5f70a951e87768500861.bundle.js} +2 -2
- package/dist/{22.e1562d53daf95dd1fdca.bundle.js.map → 22.5f70a951e87768500861.bundle.js.map} +1 -1
- package/dist/{23.c1b822e6ccc61632355b.bundle.js → 23.3b94ee5770665e9f7ad6.bundle.js} +2 -2
- package/dist/{23.c1b822e6ccc61632355b.bundle.js.map → 23.3b94ee5770665e9f7ad6.bundle.js.map} +1 -1
- package/dist/{25.8c30b7bafb4875a3cc51.bundle.js → 25.7d9b6d389e1b3c30a2af.bundle.js} +2 -2
- package/dist/{25.8c30b7bafb4875a3cc51.bundle.js.map → 25.7d9b6d389e1b3c30a2af.bundle.js.map} +1 -1
- package/dist/26.176ffe2071a8d5d382b6.bundle.js +1 -1
- package/dist/26.176ffe2071a8d5d382b6.bundle.js.map +1 -1
- package/dist/{27.be71055c959c1ac75177.bundle.js → 27.5f249c88f0d56e478227.bundle.js} +2 -2
- package/dist/{27.be71055c959c1ac75177.bundle.js.map → 27.5f249c88f0d56e478227.bundle.js.map} +1 -1
- package/dist/{29.54cbff989a44a0f71dfd.bundle.js → 29.263746fd089adc12c9eb.bundle.js} +2 -2
- package/dist/{29.54cbff989a44a0f71dfd.bundle.js.map → 29.263746fd089adc12c9eb.bundle.js.map} +1 -1
- package/dist/31.4ecdb66b2c224a63525e.bundle.js +1 -1
- package/dist/31.4ecdb66b2c224a63525e.bundle.js.map +1 -1
- package/dist/{32.2582e2eccf29e8d5ec80.bundle.js → 32.31e5cd1ae5b1b26d0bc9.bundle.js} +2 -2
- package/dist/{32.2582e2eccf29e8d5ec80.bundle.js.map → 32.31e5cd1ae5b1b26d0bc9.bundle.js.map} +1 -1
- package/dist/34.024934549565ec56f905.bundle.js +2 -0
- package/dist/34.024934549565ec56f905.bundle.js.map +1 -0
- package/dist/{37.ef412d4cbc60967faa5e.bundle.js → 37.48944284f495dd519b6b.bundle.js} +2 -2
- package/dist/{37.ef412d4cbc60967faa5e.bundle.js.map → 37.48944284f495dd519b6b.bundle.js.map} +1 -1
- package/dist/{39.be2d8c75e4ab391ba984.bundle.js → 39.cd39b4ee76d8238325b0.bundle.js} +2 -2
- package/dist/{39.be2d8c75e4ab391ba984.bundle.js.map → 39.cd39b4ee76d8238325b0.bundle.js.map} +1 -1
- package/dist/{40.9272ebe1d2246ae3054f.bundle.js → 40.ba69b25514acd93c43c1.bundle.js} +2 -2
- package/dist/{40.9272ebe1d2246ae3054f.bundle.js.map → 40.ba69b25514acd93c43c1.bundle.js.map} +1 -1
- package/dist/{41.f69dd805b7e51756518f.bundle.js → 41.97280c0900f9b44ab8aa.bundle.js} +2 -2
- package/dist/{41.f69dd805b7e51756518f.bundle.js.map → 41.97280c0900f9b44ab8aa.bundle.js.map} +1 -1
- package/dist/43.166d4f55ba11d29b26ce.bundle.js +2 -0
- package/dist/43.166d4f55ba11d29b26ce.bundle.js.map +1 -0
- package/dist/46.c417c82de953a16f7489.bundle.js +2 -0
- package/dist/{46.a9d1c07290ab98930744.bundle.js.map → 46.c417c82de953a16f7489.bundle.js.map} +1 -1
- package/dist/{48.3c8d17c03f3fc081be89.bundle.js → 48.1c439f5ade00b986bb85.bundle.js} +2 -2
- package/dist/{48.3c8d17c03f3fc081be89.bundle.js.map → 48.1c439f5ade00b986bb85.bundle.js.map} +1 -1
- package/dist/{55.10bb020070b8c5910e4c.bundle.js → 55.80d6a899d8af7d382755.bundle.js} +2 -2
- package/dist/{55.10bb020070b8c5910e4c.bundle.js.map → 55.80d6a899d8af7d382755.bundle.js.map} +1 -1
- package/dist/{57.f432e4a7f6dbf5fa9e6e.bundle.js → 57.ff1a43af23df1c3e9eb6.bundle.js} +2 -2
- package/dist/{57.f432e4a7f6dbf5fa9e6e.bundle.js.map → 57.ff1a43af23df1c3e9eb6.bundle.js.map} +1 -1
- package/dist/{59.feebf4602360cb8257bb.bundle.js → 59.21763503ec43ce516ba9.bundle.js} +2 -2
- package/dist/{59.feebf4602360cb8257bb.bundle.js.map → 59.21763503ec43ce516ba9.bundle.js.map} +1 -1
- package/dist/{67.58d8539fcac19288b820.bundle.js → 67.d3301189c6f359502b7a.bundle.js} +2 -2
- package/dist/{67.58d8539fcac19288b820.bundle.js.map → 67.d3301189c6f359502b7a.bundle.js.map} +1 -1
- package/dist/{70.ede527b8438e19a67ebc.bundle.js → 70.bab18e599872f9ceb5bb.bundle.js} +2 -2
- package/dist/{70.ede527b8438e19a67ebc.bundle.js.map → 70.bab18e599872f9ceb5bb.bundle.js.map} +1 -1
- package/dist/{71.2ddcb945966fd051a3a1.bundle.js → 71.496a9c92cd02ea797086.bundle.js} +2 -2
- package/dist/{71.2ddcb945966fd051a3a1.bundle.js.map → 71.496a9c92cd02ea797086.bundle.js.map} +1 -1
- package/dist/{72.d2f8a53e83efcb8ab953.bundle.js → 72.e74783723284db9f1039.bundle.js} +2 -2
- package/dist/{72.d2f8a53e83efcb8ab953.bundle.js.map → 72.e74783723284db9f1039.bundle.js.map} +1 -1
- package/dist/{73.c29f06e5825684d56a9c.bundle.js → 73.c5ea427972a9d61d8bcf.bundle.js} +2 -2
- package/dist/{73.c29f06e5825684d56a9c.bundle.js.map → 73.c5ea427972a9d61d8bcf.bundle.js.map} +1 -1
- package/dist/{74.b50a23c1751e0fc30aec.bundle.js → 74.87400dce971708ada9bc.bundle.js} +2 -2
- package/dist/{74.b50a23c1751e0fc30aec.bundle.js.map → 74.87400dce971708ada9bc.bundle.js.map} +1 -1
- package/dist/{75.4f9197361b6427d97b6c.bundle.js → 75.f7026115ff4d35c53061.bundle.js} +2 -2
- package/dist/{75.4f9197361b6427d97b6c.bundle.js.map → 75.f7026115ff4d35c53061.bundle.js.map} +1 -1
- package/dist/{76.467d072ae323ab41fd3d.bundle.js → 76.7ed7e2f7802914105a2b.bundle.js} +2 -2
- package/dist/{76.467d072ae323ab41fd3d.bundle.js.map → 76.7ed7e2f7802914105a2b.bundle.js.map} +1 -1
- package/dist/{77.41a60a354d0fb3103b00.bundle.js → 77.8df8d6516be14b18a7c2.bundle.js} +2 -2
- package/dist/{77.41a60a354d0fb3103b00.bundle.js.map → 77.8df8d6516be14b18a7c2.bundle.js.map} +1 -1
- package/dist/{78.7de8a0f70f6dc1debd05.bundle.js → 78.3d0eba733bb5b528ee23.bundle.js} +2 -2
- package/dist/{78.7de8a0f70f6dc1debd05.bundle.js.map → 78.3d0eba733bb5b528ee23.bundle.js.map} +1 -1
- package/dist/{79.2f8b2ebcbd07d466c913.bundle.js → 79.f2adb62d49e1ff69c73d.bundle.js} +2 -2
- package/dist/{79.2f8b2ebcbd07d466c913.bundle.js.map → 79.f2adb62d49e1ff69c73d.bundle.js.map} +1 -1
- package/dist/{8.b21d6a5c1a9412deb34f.bundle.js → 8.fd2fec54b66b2afe1253.bundle.js} +2 -2
- package/dist/8.fd2fec54b66b2afe1253.bundle.js.map +1 -0
- package/dist/{80.8e71a1aaf3beb2320bf0.bundle.js → 80.40f6ab44b0f5a37f1f1b.bundle.js} +2 -2
- package/dist/{80.8e71a1aaf3beb2320bf0.bundle.js.map → 80.40f6ab44b0f5a37f1f1b.bundle.js.map} +1 -1
- package/dist/{81.2939c5d2b47cf48be6d5.bundle.js → 81.63bb784ce719c97dccc2.bundle.js} +2 -2
- package/dist/{81.2939c5d2b47cf48be6d5.bundle.js.map → 81.63bb784ce719c97dccc2.bundle.js.map} +1 -1
- package/dist/{82.69913e9f45a1dd96c6be.bundle.js → 82.f722c4f985e7c7375b7d.bundle.js} +2 -2
- package/dist/{82.69913e9f45a1dd96c6be.bundle.js.map → 82.f722c4f985e7c7375b7d.bundle.js.map} +1 -1
- package/dist/83.73515cde0a2215275d32.bundle.js +1 -1
- package/dist/83.73515cde0a2215275d32.bundle.js.map +1 -1
- package/dist/{84.5e89f3253c2c5885f662.bundle.js → 84.ed814bb2e6caa09eaf59.bundle.js} +2 -2
- package/dist/{84.5e89f3253c2c5885f662.bundle.js.map → 84.ed814bb2e6caa09eaf59.bundle.js.map} +1 -1
- package/dist/{85.f6ae072160876c4c5beb.bundle.js → 85.c1a85a647349f948774e.bundle.js} +2 -2
- package/dist/{85.f6ae072160876c4c5beb.bundle.js.map → 85.c1a85a647349f948774e.bundle.js.map} +1 -1
- package/dist/{88.4bfa7b74511d52c5c42f.bundle.js → 88.d3afc4e8e2613c803b60.bundle.js} +2 -2
- package/dist/{88.4bfa7b74511d52c5c42f.bundle.js.map → 88.d3afc4e8e2613c803b60.bundle.js.map} +1 -1
- package/dist/{89.6e767bc84921c435570c.bundle.js → 89.e206f700717532b86d4a.bundle.js} +2 -2
- package/dist/{89.6e767bc84921c435570c.bundle.js.map → 89.e206f700717532b86d4a.bundle.js.map} +1 -1
- package/dist/{90.5c5efc19e9053c029343.bundle.js → 90.192cdf37db2b7fe57457.bundle.js} +2 -2
- package/dist/{90.5c5efc19e9053c029343.bundle.js.map → 90.192cdf37db2b7fe57457.bundle.js.map} +1 -1
- package/dist/{92.b601c9bc8133fcf28163.bundle.js → 92.3adcb08e3ce3aa2196d9.bundle.js} +2 -2
- package/dist/{92.b601c9bc8133fcf28163.bundle.js.map → 92.3adcb08e3ce3aa2196d9.bundle.js.map} +1 -1
- package/dist/{94.4b1ada797602e279b977.bundle.js → 94.b7d4fbf7b903b58bbb9f.bundle.js} +2 -2
- package/dist/{94.4b1ada797602e279b977.bundle.js.map → 94.b7d4fbf7b903b58bbb9f.bundle.js.map} +1 -1
- package/dist/{95.95758068abd9eac4ed40.bundle.js → 95.4f4ec7e3bf1e54b69e22.bundle.js} +2 -2
- package/dist/{95.95758068abd9eac4ed40.bundle.js.map → 95.4f4ec7e3bf1e54b69e22.bundle.js.map} +1 -1
- package/dist/{98.8f1b6e94748a6049ed93.bundle.js → 98.46fcd4b9d0cee530a965.bundle.js} +2 -2
- package/dist/{98.8f1b6e94748a6049ed93.bundle.js.map → 98.46fcd4b9d0cee530a965.bundle.js.map} +1 -1
- package/dist/{bundle.595d7082ecc6c2683c9a.bundle.js → bundle.e02c0ceb3243288288de.bundle.js} +15 -15
- package/dist/bundle.e02c0ceb3243288288de.bundle.js.map +1 -0
- package/dist/css/yasr.custom.css +5 -1
- package/dist/index.html +4 -4
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/{main.96399f8393ca515638d2.bundle.js → main.e83e6336936d01c58d59.bundle.js} +2 -2
- package/dist/{main.96399f8393ca515638d2.bundle.js.map → main.e83e6336936d01c58d59.bundle.js.map} +1 -1
- package/dist/{main.c3519a595e24d0a69ccd.css → main.fa014240754b8b1655a9.css} +1 -1
- package/dist/pages/autocomplete.html +1 -1
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/cluster-management/clusterInfo.html +3 -3
- package/dist/pages/create-index.html +4 -4
- package/dist/pages/dependencies.html +1 -1
- package/dist/pages/domainRangeInfo.html +2 -2
- package/dist/pages/edit.html +1 -1
- package/dist/pages/explore.html +1 -1
- package/dist/pages/export.html +1 -1
- package/dist/pages/find.html +1 -1
- package/dist/pages/graph-config/saveGraphConfig.html +15 -15
- package/dist/pages/graphs-visualizations.html +14 -14
- package/dist/pages/guides.html +1 -1
- package/dist/pages/import.html +1 -1
- package/dist/pages/jdbc-create.html +5 -5
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +2 -2
- package/dist/pages/namespaces.html +4 -4
- package/dist/pages/plugins.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +7 -7
- package/dist/pages/rdfrank.html +2 -2
- package/dist/pages/repositories.html +2 -2
- package/dist/pages/repository.html +2 -2
- package/dist/pages/similarity-indexes.html +1 -1
- package/dist/pages/sparql-template-create.html +5 -5
- package/dist/pages/sparql.html +3 -3
- package/dist/pages/webapi.html +2 -2
- package/dist/res/swagger/index.html +27 -27
- package/dist/{vendor.31cf390ca240d8cd1ef3.bundle.js → vendor.7492dbcfefe195da8d15.bundle.js} +6 -6
- package/dist/{vendor.31cf390ca240d8cd1ef3.bundle.js.map → vendor.7492dbcfefe195da8d15.bundle.js.map} +1 -1
- package/package.json +1 -1
- package/dist/0.1bd9b49fd9f95db7afda.bundle.js.map +0 -1
- package/dist/114.ed2c2d1606cd75dbd7c6.bundle.js +0 -2
- package/dist/114.ed2c2d1606cd75dbd7c6.bundle.js.map +0 -1
- package/dist/13.9b9388352980715b16bb.bundle.js +0 -3
- package/dist/13.9b9388352980715b16bb.bundle.js.map +0 -1
- package/dist/14.c512cd1282fe7dec36bf.bundle.js +0 -2
- package/dist/14.c512cd1282fe7dec36bf.bundle.js.map +0 -1
- package/dist/34.100b126b4d89e99d4ac4.bundle.js +0 -2
- package/dist/34.100b126b4d89e99d4ac4.bundle.js.map +0 -1
- package/dist/43.f76be157f75bc7b3ea68.bundle.js +0 -2
- package/dist/43.f76be157f75bc7b3ea68.bundle.js.map +0 -1
- package/dist/46.a9d1c07290ab98930744.bundle.js +0 -2
- package/dist/8.b21d6a5c1a9412deb34f.bundle.js.map +0 -1
- package/dist/bundle.595d7082ecc6c2683c9a.bundle.js.map +0 -1
package/dist/{17.d1ac5f88f9ef9ee1c789.bundle.js.map → 17.a417430fca1e34e80912.bundle.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/angular/jdbc/app.js","webpack:///./src/js/angular/utils/notifications.js","webpack:///./src/js/angular/core/directives/queryeditor/sparql-tab.directive.js","webpack:///./src/js/angular/jdbc/controllers.js","webpack:///./src/js/angular/rest/jdbc.rest.service.js"],"names":["angular","module","Notifications","toastr","$translate","showToastMessageWithDelay","message","Promise","r","success","instant","setTimeout","factory","$inject","sparqlTabDirective","$rootScope","LocalStorageAdapter","LSKeys","ModalService","restrict","template","replace","controller","$scope","$element","getQueryID","element","$","attr","selectTab","id","tab","state","on","e","$broadcast","deleteTab","preventDefault","stopPropagation","tabs","length","warning","shiftKey","selectedTabId","openSimpleModal","title","result","then","filter","obj","set","TABS_STATE","idForDelete","isUndefined","idx","i","findTabIndexByID","splice","currentQuery","deleteTabByID","document","find","focus","editCurrentTab","editCurrentlySelectedOnly","$show","$editableButtons","children","addClass","$el","name","currentTarget","$$currentValue","removeClass","selectThisTab","isTabChangeOk","directive","JdbcListCtrl","$repositories","JdbcRestService","getSqlConfigurations","getActiveRepository","isActiveRepoOntopType","isActiveRepoFedXType","jdbcConfigurations","getJdbcConfigurations","data","error","msg","getError","$watch","deleteConfiguration","deleteJdbcConfiguration","JdbcCreateCtrl","$location","$window","$timeout","RDF4JRepositoriesRestService","SparqlRestService","search","getNamespaces","setLoader","getRepositoryNamespaces","usedPrefixes","results","bindings","forEach","prefix","value","namespace","namespaces","repositoryError","finally","loadTab","addKnownPrefixes","page","noPadding","paddingRight","paddingLeft","sqlTypes","currentTabConfig","orientationViewMode","newValue","oldValue","path","timer","goBack","history","back","locationChangeListener","$on","event","isPristine","confirm","window","removeEventListener","showBeforeunloadMessage","cancel","confirmExit","returnValue","addEventListener","defaultTabConfig","query","inference","sameAs","isNewConfiguration","isRunning","progressMessage","extraMessage","yasrInnerContainer","getElementById","queryIsRunning","queryStartTime","Date","now","countTimeouted","$$phase","$apply","tabsData","editor","setValue","queryType","resultsCount","offset","allResultsCount","pageSize","timeFinished","timeTook","sizeDelta","canWriteActiveRepo","options","readOnly","setQueryFromTabConfig","copy","resetYasqeYasr","setQuery","setDirty","JSON","stringify","getValue","isDefined","getSuggestions","validateQuery","getColumnNames","columns","getColumnsTypeSuggestion","columnTypes","suggestedColumns","_","columnName","push","column_name","column_type","nullable","sparql_type","viewMode","getCellContentSQL","yasr","plugin","sparqlVar","context","hasValidQuery","getQueryType","validateDefinition","containsUnknownColumns","validateColumns","resetCurrentTabConfig","saveTab","getJdbcConfiguration","config","goToPage","getColumnsSuggestions","save","createNewJdbcConfiguration","updateJdbcConfiguration","hasPrecision","columnType","containsColumnsWithPrecision","some","el","hasScale","containsColumnsWithScale","isLiteral","containsNonLiteralColumnsOnly","every","selectColumnType","prevColumnType","column","columnSuggestion","info","type","allowHtml","deleteColumn","index","getPreview","executedQueryTab","outputType","successCallback","textStatus","jqXhr","plugins","table","getCellContent","setResponse","setPreviewResult","failCallback","sqlView","getNewSqlTablePreview","done","fail","getExistingSqlTablePreview","getTypeLabel","indexOf","toUpperCase","$http","get","configuration","createConfiguration","delete","post","headers","Array","isArray","Error","method","url","column_names","limit","ajax","params","contentType","dataType","Accept","noCancelOnRouteChange"],"mappings":"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","file":"17.d1ac5f88f9ef9ee1c789.bundle.js","sourcesContent":["import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/resources/controllers';\nimport 'angular/core/services/repositories.service';\nimport 'angular/jdbc/controllers';\nimport 'angular/rest/jdbc.rest.service';\nimport 'angular/core/directives/queryeditor/sparql-tab.directive';\nimport 'angular/core/directives/queryeditor/query-editor.controller';\nimport 'angular/core/directives/queryeditor/query-editor.directive';\n\nconst modules = [\n 'toastr',\n 'ui.bootstrap',\n 'graphdb.framework.jdbc.controllers',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.core.directives',\n 'graphdb.framework.rest.jdbc.service',\n 'graphdb.framework.core.directives.queryeditor.controllers',\n 'graphdb.framework.core.directives.queryeditor.sparqltab',\n 'graphdb.framework.core.directives.queryeditor.queryeditor'\n\n];\n\nangular.module('graphdb.framework.jdbc', modules);\n\n","angular\n .module('graphdb.framework.utils.notifications', [])\n .factory('Notifications', Notifications);\n\nNotifications.$inject = ['toastr', '$translate'];\n\nfunction Notifications(toastr, $translate) {\n return {\n showToastMessageWithDelay\n };\n\n /**\n * This method will show message with tiny delay and only after completion\n * of latter redirection to \"graphs-visualizations\" page will happen.\n * @param {string} message The message to be displayed.\n * @return {Promise<any>}\n */\n function showToastMessageWithDelay(message) {\n return new Promise((r) => {\n toastr.success($translate.instant(message));\n setTimeout(r, 200);\n });\n }\n}\n","import 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.core.directives.queryeditor.sparqltab', [\n 'graphdb.framework.core',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .directive('sparqlTab', sparqlTabDirective);\n\nsparqlTabDirective.$inject = ['$rootScope', 'LocalStorageAdapter', 'LSKeys', 'ModalService'];\n\nfunction sparqlTabDirective($rootScope, LocalStorageAdapter, LSKeys, ModalService) {\n const SparqlTabCtrl = ['$scope', '$element', '$rootScope', 'ModalService', 'toastr', '$translate', function ($scope, $element, $rootScope, ModalService, toastr, $translate) {\n $scope.state = {};\n\n function getQueryID(element) {\n return $(element).attr('data-id');\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 $($element).on('shown.bs.tab', function (e) {\n $rootScope.$broadcast('tabAction', e);\n });\n\n $scope.deleteTab = deleteTab;\n $scope.editCurrentTab = editCurrentTab;\n $scope.selectThisTab = selectThisTab;\n\n function selectThisTab(e) {\n e.preventDefault();\n e.stopPropagation();\n if ($scope.isTabChangeOk(false)) {\n $($element).tab('show');\n }\n }\n\n function selectTab(id) {\n $('a[data-id = \"' + id + '\"]').tab('show');\n }\n\n function deleteTab(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if ($scope.tabs.length < 2) {\n toastr.warning($translate.instant('sparql.tab.directive.close.last.warning'));\n return;\n }\n\n if (e.shiftKey) {\n $scope.state.selectedTabId = getQueryID($element);\n\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm'),\n message: $translate.instant('sparql.tab.directive.delete.all.tabs.warning'),\n warning: true\n }).result.then(function () {\n deleteAllTabsExceptSelected($scope.state.selectedTabId);\n });\n } else {\n $scope.state.idForDelete = getQueryID($element);\n\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm'),\n message: $translate.instant('sparql.tab.directive.close.tab.warning'),\n warning: true\n }).result.then(function () {\n deleteTabByID($scope.state.idForDelete);\n });\n }\n angular.element(document).find('.CodeMirror textarea:first-child').focus();\n }\n\n function editCurrentTab() {\n if (getQueryID($element) !== $scope.currentQuery.id) {\n return;\n }\n $scope.editCurrentlySelectedOnly.$show();\n //fix for buttons for edit\n const $editableButtons = $(\".editable-buttons\");\n $editableButtons.children(\".btn.btn-primary\").addClass('btn-sm');\n $editableButtons.children(\".btn.btn-default\").addClass('btn-sm');\n $('.editable-controls .editable-input').addClass('form-control-sm').on('change', function ($el) {\n $scope.currentQuery.name = $el.currentTarget.$$currentValue;\n });\n //$('.editable-buttons').css('margin-top', '5px');\n //$('.editable-input.editable-has-buttons').css('width', '50%');\n $('.editable-buttons .glyphicon.glyphicon-ok')\n .removeClass('glyphicon glyphicon-ok')\n .addClass('fa fa-check');\n $('.editable-buttons .glyphicon.glyphicon-remove')\n .removeClass('glyphicon glyphicon-remove')\n .addClass('fa fa-close');\n }\n\n function deleteTabByID(id) {\n if (angular.isUndefined(id)) {\n throw 'Delete by id was called with undefined id';\n }\n const idx = findTabIndexByID(id);\n $scope.tabs.splice(idx, 1);\n\n if (id === $scope.currentQuery.id) {\n if ($scope.tabs.length > 0) {\n if (idx > 0) {\n // select previous tab if we deleted any but the first tab\n selectTab($scope.tabs[idx - 1].id);\n } else {\n // select first tab if we deleted the first tab\n selectTab($scope.tabs[0].id);\n }\n }\n }\n }\n\n function deleteAllTabsExceptSelected(id) {\n $scope.tabs = $scope.tabs.filter(function (obj) {\n if (obj.id === id) {\n return obj;\n }\n });\n selectTab($scope.tabs[0].id);\n LocalStorageAdapter.set(LSKeys.TABS_STATE, $scope.tabs);\n $rootScope.$broadcast('deleteAllexeptSelected', $scope.tabs);\n }\n }];\n\n return {\n restrict: 'AE',\n // for some reason when you extract this template in a file and use templateUrl it selects all tabs when editing the tab name, not only the currently selected one\n template: '<a class=\"nav-link\" role=\"tab\" data-toggle=\"tab\" blur=\"submit\" editable-text=\"tab.name\" e-form=\"editCurrentlySelectedOnly\" ng-click=\"selectThisTab($event)\" ng-dblclick=\"editCurrentTab()\" ><span ng-class=\"{\\'text-muted\\': !tab.name}\">{{ tab.name || \\'sparql.tab.directive.unnamed.tab.title\\' | translate}}</span><button type=\"button\" ng-click=\"deleteTab($event)\" class=\"btn btn-link btn-sm secondary delete-sparql-tab-btn\" title=\"Delete tab\"><i class=\"icon-close\"></i></button></a>',\n replace: true,\n controller: SparqlTabCtrl\n };\n}\n","import 'angular/core/services';\nimport 'angular/core/services/repositories.service';\nimport 'angular/rest/monitoring.rest.service';\nimport 'angular/utils/notifications';\n\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.rest.monitoring.service',\n 'toastr'\n];\n\nangular.module('graphdb.framework.jdbc.controllers', modules, [\n 'graphdb.framework.utils.notifications'\n])\n .controller('JdbcListCtrl', JdbcListCtrl)\n .controller('JdbcCreateCtrl', JdbcCreateCtrl);\n\nJdbcListCtrl.$inject = ['$scope', '$repositories', 'JdbcRestService', 'toastr', 'ModalService', '$translate'];\n\nfunction JdbcListCtrl($scope, $repositories, JdbcRestService, toastr, ModalService, $translate) {\n\n $scope.getSqlConfigurations = function () {\n // Only do this if there is an active repo that isn't an Ontop or FedX repo.\n // Ontop and FedX repos don't support JDBC.\n if ($repositories.getActiveRepository()\n && !$repositories.isActiveRepoOntopType()\n && !$repositories.isActiveRepoFedXType()) {\n JdbcRestService.getJdbcConfigurations().success(function (data) {\n $scope.jdbcConfigurations = data;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('jdbc.not.get.SQL.msg'));\n });\n } else {\n $scope.jdbcConfigurations = [];\n }\n };\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function () {\n $scope.getSqlConfigurations();\n });\n\n $scope.deleteConfiguration = function (name) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.warning'),\n message: $translate.instant('jdbc.delete.sql.table.warning.msg', {name: name}),\n warning: true\n }).result\n .then(function () {\n JdbcRestService.deleteJdbcConfiguration(name).success(function () {\n $scope.getSqlConfigurations();\n }).error(function(e) {\n toastr.error(getError(e), $translate.instant('jdbc.not.delete.sql.msg'));\n });\n });\n };\n}\n\nJdbcCreateCtrl.$inject = ['$scope', '$location', 'toastr', '$repositories', '$window', '$timeout', 'JdbcRestService', 'RDF4JRepositoriesRestService', 'SparqlRestService', 'ModalService', '$translate'];\n\nfunction JdbcCreateCtrl($scope, $location, toastr, $repositories, $window, $timeout, JdbcRestService, RDF4JRepositoriesRestService, SparqlRestService, ModalService, $translate) {\n\n $scope.name = $location.search().name || '';\n $scope.getNamespaces = getNamespaces;\n $scope.setLoader = setLoader;\n $scope.addKnownPrefixes = addKnownPrefixes;\n $scope.page = 1;\n $scope.noPadding = {paddingRight: 0, paddingLeft: 0};\n $scope.sqlTypes = ['string', 'iri', 'boolean', 'byte', 'short', 'int', 'long', 'float', 'double', 'decimal', 'date', 'time', 'timestamp', 'Get suggestion...'];\n $scope.currentTabConfig = {};\n // This property is obligatory in order to show YASQUE and YASR properly\n $scope.orientationViewMode = true;\n $scope.currentQuery = {};\n\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $location.path('jdbc');\n }\n });\n\n let timer = null;\n $scope.goBack = function () {\n timer = $timeout(function () {\n $window.history.back();\n }, 1000);\n };\n\n const locationChangeListener = $scope.$on('$locationChangeStart', function (event) {\n confirmExit(event);\n });\n\n window.addEventListener('beforeunload', showBeforeunloadMessage);\n\n function showBeforeunloadMessage(event) {\n if (!$scope.currentQuery.isPristine) {\n event.returnValue = true;\n }\n }\n\n function confirmExit(event) {\n if (!$scope.currentQuery.isPristine) {\n if (!confirm($translate.instant('jdbc.warning.unsaved.changes'))) {\n event.preventDefault();\n } else {\n window.removeEventListener('beforeunload', showBeforeunloadMessage);\n locationChangeListener();\n $timeout.cancel(timer);\n }\n }\n }\n\n $scope.$on('$destroy', function (event) {\n window.removeEventListener('beforeunload', showBeforeunloadMessage);\n locationChangeListener();\n $timeout.cancel(timer);\n });\n\n const defaultTabConfig = {\n id: '1',\n name: '',\n query: 'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\\n' +\n '\\n' +\n '# Selects two variables to use as columns\\n' +\n 'SELECT ?id ?label {\\n' +\n ' ?id rdfs:label ?label\\n' +\n ' # The following placeholder must be present in the query\\n' +\n ' #!filter\\n' +\n '}',\n inference: true,\n sameAs: true,\n isNewConfiguration: true,\n isPristine: true\n };\n\n $scope.resetCurrentTabConfig = function () {\n $scope.currentTabConfig = {\n pageSize: 100, // page limit 100 as this is only used for preview\n page: 1,\n allResultsCount: 0,\n resultsCount: 0,\n // Hide YASR by default, show on success in callback when needed\n queryType: ''\n };\n };\n\n $scope.saveTab = function () {\n };\n\n // Called when user clicks on a sample query\n $scope.setQuery = function (query) {\n // Hack for YASQE bug\n window.editor.setValue(query ? query : ' ');\n };\n\n if ($scope.name) {\n getJdbcConfiguration($scope.name);\n } else {\n setQueryFromTabConfig();\n }\n\n // FIXME: this is copy-pasted in graphs-config.controller.js and query-editor.controller.js. Find a way to avoid duplications\n function getNamespaces() {\n // Signals the namespaces are to be fetched => loader will be shown\n setLoader(true, $translate.instant('common.refreshing.namespaces'), $translate.instant('common.extra.message'));\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 loadTab();\n });\n }\n\n function setLoader(isRunning, progressMessage, extraMessage) {\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 yasrInnerContainer.addClass('hide');\n } else {\n $scope.progressMessage = '';\n $scope.extraMessage = '';\n yasrInnerContainer.removeClass('hide');\n }\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 loadTab() {\n $scope.tabsData = [$scope.currentQuery];\n\n const tab = $scope.currentQuery;\n\n if (!$scope.currentQuery.query) {\n // hack for YASQE bug\n window.editor.setValue(' ');\n } else {\n window.editor.setValue($scope.currentQuery.query);\n }\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.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.$apply();\n }, 0);\n\n if (!$scope.canWriteActiveRepo()) {\n window.editor.options.readOnly = true;\n }\n }\n\n $scope.goToPage = function (page) {\n $scope.page = page;\n const columns = $scope.currentQuery.columns;\n if (page === 2 && (!columns || columns.length === 0) && hasValidQuery()) {\n $scope.getColumnsSuggestions();\n }\n resetYasqeYasr();\n };\n\n function getJdbcConfiguration(name) {\n JdbcRestService.getJdbcConfiguration(name).success(function (config) {\n defaultTabConfig.query = config.query;\n defaultTabConfig.name = config.name;\n defaultTabConfig.columns = config.columns;\n\n defaultTabConfig.isNewConfiguration = !config.name;\n\n setQueryFromTabConfig();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('jdbc.not.get.sql.msg2'));\n });\n }\n\n function setQueryFromTabConfig() {\n $scope.tabsData = $scope.tabs = [defaultTabConfig];\n $scope.currentQuery = angular.copy(defaultTabConfig);\n\n resetYasqeYasr();\n\n if (window.editor) {\n $scope.setQuery($scope.currentQuery.query);\n loadTab();\n }\n\n $scope.$watch(function () {\n return $scope.currentQuery.query;\n }, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $scope.setDirty();\n }\n });\n }\n\n $scope.save = function () {\n if (!validateDefinition()) {\n return;\n }\n\n if (!$scope.currentQuery.name) {\n toastr.error($translate.instant('jdbc.required.configuration.name'));\n return;\n }\n\n if ($scope.currentQuery.isNewConfiguration) {\n JdbcRestService.createNewJdbcConfiguration($scope.currentQuery).success(function () {\n $scope.currentQuery.isPristine = true;\n $scope.currentQuery.isNewConfiguration = false;\n toastr.success($translate.instant('jdbc.saved.configuration'));\n $scope.goBack();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('jdbc.not.saved.configuration'));\n });\n } else {\n JdbcRestService.updateJdbcConfiguration($scope.currentQuery).success(function () {\n $scope.currentQuery.isPristine = true;\n $scope.currentQuery.isNewConfiguration = false;\n toastr.success($translate.instant('jdbc.configuration.updated'));\n $scope.goBack();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('jdbc.not.saved.configuration'));\n });\n }\n };\n\n $scope.hasPrecision = function (columnType) {\n return columnType === 'iri' || columnType === 'string' || columnType === 'decimal';\n };\n\n $scope.containsColumnsWithPrecision = function (columns) {\n return columns && columns.some((el) => $scope.hasPrecision(el.column_type));\n };\n\n $scope.hasScale = function (columnType) {\n return columnType === 'decimal';\n };\n\n $scope.containsColumnsWithScale = function (columns) {\n return columns && columns.some((el) => $scope.hasScale(el.column_type));\n };\n\n $scope.isLiteral = function (columnType) {\n return columnType !== 'iri' && columnType !== 'unknown';\n };\n\n $scope.containsNonLiteralColumnsOnly = function (columns) {\n return columns && columns.every((el) => !$scope.isLiteral(el.column_type));\n };\n\n $scope.containsUnknownColumns = function () {\n return $scope.currentQuery.columns && $scope.currentQuery.columns\n .find((el) => el.column_type === 'unknown');\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, $translate.instant('common.add.known.prefixes.error'));\n return true;\n });\n }\n\n $('textarea').on('paste', function () {\n $timeout(function () {\n addKnownPrefixes();\n }, 0);\n });\n\n $scope.selectColumnType = function (columnName, prevColumnType) {\n const column = _.find($scope.currentQuery.columns, function (column) {\n return column.column_name === columnName;\n });\n\n if (column.column_type === 'Get suggestion...') {\n JdbcRestService.getColumnsTypeSuggestion($scope.currentQuery.query, [columnName]).success(function (columnSuggestion) {\n column.column_type = columnSuggestion[columnName].column_type;\n if (column.column_type === prevColumnType) {\n toastr.info($translate.instant('jdbc.same.suggested.sql.type', {type: column.column_type}),\n $translate.instant('jdbc.suggest.sql.type'), {allowHtml: true});\n } else {\n toastr.success($translate.instant('jdbc.suggested.sql.type', {type: column.column_type}),\n $translate.instant('jdbc.suggest.sql.type'), {allowHtml: true});\n }\n column.sparql_type = columnSuggestion[columnName].sparql_type;\n }).error(function(e) {\n toastr.error(getError(e), $translate.instant('jdbc.not.suggest.column.type'));\n });\n }\n $scope.setDirty();\n };\n\n $scope.getColumnsSuggestions = function () {\n if ($scope.currentQuery.columns && $scope.currentQuery.columns.length > 0) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.warning'),\n message: $translate.instant('jdbc.warning.column.type.msg'),\n warning: true\n }).result\n .then(function () {\n getSuggestions();\n });\n } else {\n getSuggestions();\n }\n };\n\n function getSuggestions() {\n if (!validateQuery()) {\n return;\n }\n\n JdbcRestService.getColumnNames($scope.currentQuery.query).success(function (columns) {\n JdbcRestService.getColumnsTypeSuggestion($scope.currentQuery.query, columns).success(function (columnTypes) {\n const suggestedColumns = [];\n _.forEach(columns, function (columnName) {\n suggestedColumns.push({\n column_name: columnName,\n column_type: columnTypes[columnName].column_type,\n nullable: true,\n sparql_type: columnTypes[columnName].sparql_type\n });\n });\n $scope.currentQuery.columns = suggestedColumns;\n $scope.setDirty();\n }).error(function (e) {\n toastr.error(getError(e), $translate.instant('jdbc.not.suggest.column.types'));\n });\n }).error(function (e) {\n toastr.error(getError(e), $translate.instant('jdbc.not.suggest.column.names'));\n });\n }\n\n $scope.deleteColumn = function (columnName, index) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.warning'),\n message: $translate.instant('jdbc.warning.delete.column.msg', {columnName: columnName}),\n warning: true\n }).result\n .then(function () {\n $scope.currentQuery.columns.splice(index, 1);\n $scope.setDirty();\n });\n };\n\n $scope.getPreview = function () {\n if (!validateDefinition()) {\n return;\n }\n\n $scope.executedQueryTab = $scope.currentQuery;\n\n if (!$scope.queryIsRunning) {\n $scope.currentQuery.outputType = 'table';\n $scope.resetCurrentTabConfig();\n\n setLoader(true, $translate.instant('jdbc.preview.first.rows', {name: $scope.name}),\n $translate.instant('common.extra.message'));\n\n const successCallback = function (data, textStatus, jqXhr) {\n setPreviewResult(data, jqXhr, textStatus);\n setLoader(false);\n };\n\n const failCallback = function (data) {\n setLoader(false);\n toastr.error(getError(data, 0, 100), $translate.instant('jdbc.not.show.preview'));\n };\n\n if ($scope.canWriteActiveRepo()) {\n const sqlView = JSON.stringify({\n name: $scope.currentQuery.name,\n query: $scope.currentQuery.query,\n columns: $scope.currentQuery.columns || []\n });\n JdbcRestService.getNewSqlTablePreview(sqlView)\n .done(successCallback).fail(failCallback);\n } else {\n JdbcRestService.getExistingSqlTablePreview($scope.currentQuery.name)\n .done(successCallback).fail(failCallback);\n }\n }\n };\n\n $scope.setDirty = function () {\n $scope.currentQuery.isPristine = false;\n };\n\n $scope.getTypeLabel = function (type) {\n switch (type) {\n case 'iri':\n return 'VARCHAR: IRI';\n case 'string':\n return 'VARCHAR: String';\n default:\n return type.indexOf(' ') > 0 ? type : type.toUpperCase();\n }\n };\n\n function resetYasqeYasr() {\n if ($scope.page === 2) {\n $scope.viewMode = 'editor';\n } else {\n $scope.viewMode = 'none';\n }\n }\n\n function getCellContentSQL(yasr, plugin, bindings, sparqlVar, context) {\n let value = bindings[sparqlVar].value;\n value = value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n const entityHtml = \"<p class='nonUri' style='border: none; background-color: transparent; padding: 0; margin: 0'>\"\n + value + \"</p>\";\n return \"<div class = 'literal-cell'>\" + entityHtml + \"</div>\";\n }\n\n\n function setPreviewResult(data, jqXhr, textStatus) {\n if (!data.results || !data.results.bindings || !data.results.bindings.length) {\n // Hides YASR as it may contain previous results\n toastr.info($translate.instant('jdbc.table.definition'), $translate.instant('jdbc.preview.sql'));\n } else {\n // Custom content extractor that won't insert \" in SQL values (since we treat them as fake literals)\n window.yasr.plugins.table.options.getCellContent = getCellContentSQL;\n\n // Set query type so YASR shows the results\n $scope.currentTabConfig.queryType = 'SELECT';\n window.yasr.setResponse(jqXhr, textStatus, null);\n }\n }\n\n function hasValidQuery() {\n return window.editor && window.editor.getQueryType() === 'SELECT';\n }\n\n function validateDefinition() {\n return validateQuery() && validateColumns();\n }\n\n function validateQuery() {\n if (!hasValidQuery()) {\n toastr.error($translate.instant('jdbc.warning.invalid.query'), $translate.instant('jdbc.invalid.query)'));\n return false;\n }\n\n return true;\n }\n\n function validateColumns() {\n if (!$scope.currentQuery.columns || !$scope.currentQuery.columns.length) {\n toastr.error($translate.instant('jdbc.warning.one.column.msg'), $translate.instant('jdbc.invalid.columns'));\n return false;\n }\n\n if ($scope.containsUnknownColumns()) {\n toastr.error($translate.instant('jdbc.warning.all.column.msg'), $translate.instant('jdbc.invalid.columns'));\n return false;\n }\n\n return true;\n }\n}\n","angular\n .module('graphdb.framework.rest.jdbc.service', [])\n .factory('JdbcRestService', JdbcRestService);\n\nJdbcRestService.$inject = ['$http', '$repositories', '$translate'];\n\nconst JDBC_ENDPOINT = 'rest/sql-views';\n\nfunction JdbcRestService($http, $translate) {\n\n return {\n getJdbcConfigurations,\n getJdbcConfiguration,\n createNewJdbcConfiguration,\n updateJdbcConfiguration,\n deleteJdbcConfiguration,\n getColumnNames,\n getColumnsTypeSuggestion,\n getExistingSqlTablePreview,\n getNewSqlTablePreview\n };\n\n function getJdbcConfigurations() {\n return $http.get(`${JDBC_ENDPOINT}/tables`);\n }\n\n function getJdbcConfiguration(configuration) {\n return $http.get(`${JDBC_ENDPOINT}/tables/${configuration}`);\n }\n\n function createConfiguration(method, table, configuration) {\n return $http({\n method,\n url: `${JDBC_ENDPOINT}/tables/${table}`,\n noCancelOnRouteChange: true,\n data: {\n name: configuration.name,\n query: configuration.query,\n columns: configuration.columns || []\n }\n }\n );\n }\n\n function createNewJdbcConfiguration(configuration) {\n return createConfiguration('POST', '', configuration);\n }\n\n function updateJdbcConfiguration(configuration) {\n return createConfiguration('PUT', configuration.name, configuration);\n }\n\n function deleteJdbcConfiguration(name) {\n return $http.delete(`${JDBC_ENDPOINT}/tables/${name}`);\n }\n\n function getColumnNames(query) {\n const headers = {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'text/plain'\n }\n };\n\n return $http.post(`${JDBC_ENDPOINT}/columns`, query, headers);\n }\n\n function getColumnsTypeSuggestion(query, columns) {\n if (!Array.isArray(columns)) {\n throw new Error($translate.instant('jdbc.column.names.constraint'));\n }\n\n return $http({\n method: 'POST',\n url: `${JDBC_ENDPOINT}/types`,\n data: {\n query: query,\n column_names: columns\n }\n }\n );\n }\n function getExistingSqlTablePreview(name, limit) {\n // Limit in preview is optional. On backend default value is set to 100\n return $.ajax({\n method: 'GET',\n url: `rest/sql-views/preview/${name}`,\n params: {\n limit\n }\n })\n }\n\n function getNewSqlTablePreview(sqlView, limit) {\n // Limit in preview is optional. On backend default value is set to 100\n return $.ajax({\n method: 'POST',\n url: \"rest/sql-views/preview\",\n contentType: \"application/json; charset=utf-8\",\n dataType: 'json',\n data: sqlView,\n params: {\n limit\n },\n headers: {Accept: 'application/sparql-results+json'}\n })\n }\n}\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/js/angular/jdbc/app.js","webpack:///./src/js/angular/utils/notifications.js","webpack:///./src/js/angular/core/directives/queryeditor/sparql-tab.directive.js","webpack:///./src/js/angular/jdbc/controllers.js","webpack:///./src/js/angular/rest/jdbc.rest.service.js"],"names":["angular","module","Notifications","toastr","$translate","showToastMessageWithDelay","message","Promise","r","success","instant","setTimeout","factory","$inject","sparqlTabDirective","$rootScope","LocalStorageAdapter","LSKeys","ModalService","restrict","template","replace","controller","$scope","$element","getQueryID","element","$","attr","selectTab","id","tab","state","on","e","$broadcast","deleteTab","preventDefault","stopPropagation","tabs","length","warning","shiftKey","selectedTabId","openSimpleModal","title","result","then","filter","obj","set","TABS_STATE","idForDelete","isUndefined","idx","i","findTabIndexByID","splice","currentQuery","deleteTabByID","document","find","focus","editCurrentTab","editCurrentlySelectedOnly","$show","$editableButtons","children","addClass","$el","name","currentTarget","$$currentValue","removeClass","selectThisTab","isTabChangeOk","directive","JdbcListCtrl","$repositories","JdbcRestService","getSqlConfigurations","getActiveRepository","isActiveRepoOntopType","isActiveRepoFedXType","jdbcConfigurations","getJdbcConfigurations","data","error","msg","getError","$watch","deleteConfiguration","deleteJdbcConfiguration","JdbcCreateCtrl","$location","$window","$timeout","RDF4JRepositoriesRestService","SparqlRestService","search","getNamespaces","setLoader","getRepositoryNamespaces","usedPrefixes","results","bindings","forEach","prefix","value","namespace","namespaces","repositoryError","finally","loadTab","addKnownPrefixes","page","noPadding","paddingRight","paddingLeft","sqlTypes","currentTabConfig","orientationViewMode","newValue","oldValue","path","timer","goBack","history","back","locationChangeListener","$on","event","isPristine","confirm","window","removeEventListener","showBeforeunloadMessage","cancel","confirmExit","returnValue","addEventListener","defaultTabConfig","query","inference","sameAs","isNewConfiguration","isRunning","progressMessage","extraMessage","yasrInnerContainer","getElementById","queryIsRunning","queryStartTime","Date","now","countTimeouted","$$phase","$apply","tabsData","editor","setValue","queryType","resultsCount","offset","allResultsCount","pageSize","timeFinished","timeTook","sizeDelta","canWriteActiveRepo","options","readOnly","setQueryFromTabConfig","copy","resetYasqeYasr","setQuery","setDirty","JSON","stringify","getValue","isDefined","getSuggestions","validateQuery","getColumnNames","columns","getColumnsTypeSuggestion","columnTypes","suggestedColumns","_","columnName","push","column_name","column_type","nullable","sparql_type","viewMode","getCellContentSQL","yasr","plugin","sparqlVar","context","hasValidQuery","getQueryType","validateDefinition","containsUnknownColumns","validateColumns","resetCurrentTabConfig","saveTab","getJdbcConfiguration","config","goToPage","getColumnsSuggestions","save","createNewJdbcConfiguration","updateJdbcConfiguration","hasPrecision","columnType","containsColumnsWithPrecision","some","el","hasScale","containsColumnsWithScale","isLiteral","containsNonLiteralColumnsOnly","every","selectColumnType","prevColumnType","column","columnSuggestion","info","type","allowHtml","deleteColumn","index","getPreview","executedQueryTab","outputType","successCallback","textStatus","jqXhr","plugins","table","getCellContent","setResponse","setPreviewResult","failCallback","sqlView","getNewSqlTablePreview","done","fail","getExistingSqlTablePreview","getTypeLabel","indexOf","toUpperCase","$http","get","configuration","createConfiguration","delete","post","headers","Array","isArray","Error","method","url","column_names","limit","ajax","params","contentType","dataType","Accept","noCancelOnRouteChange"],"mappings":"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","file":"17.a417430fca1e34e80912.bundle.js","sourcesContent":["import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/resources/controllers';\nimport 'angular/core/services/repositories.service';\nimport 'angular/jdbc/controllers';\nimport 'angular/rest/jdbc.rest.service';\nimport 'angular/core/directives/queryeditor/sparql-tab.directive';\nimport 'angular/core/directives/queryeditor/query-editor.controller';\nimport 'angular/core/directives/queryeditor/query-editor.directive';\n\nconst modules = [\n 'toastr',\n 'ui.bootstrap',\n 'graphdb.framework.jdbc.controllers',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.core.directives',\n 'graphdb.framework.rest.jdbc.service',\n 'graphdb.framework.core.directives.queryeditor.controllers',\n 'graphdb.framework.core.directives.queryeditor.sparqltab',\n 'graphdb.framework.core.directives.queryeditor.queryeditor'\n\n];\n\nangular.module('graphdb.framework.jdbc', modules);\n\n","angular\n .module('graphdb.framework.utils.notifications', [])\n .factory('Notifications', Notifications);\n\nNotifications.$inject = ['toastr', '$translate'];\n\nfunction Notifications(toastr, $translate) {\n return {\n showToastMessageWithDelay\n };\n\n /**\n * This method will show message with tiny delay and only after completion\n * of latter redirection to \"graphs-visualizations\" page will happen.\n * @param {string} message The message to be displayed.\n * @return {Promise<any>}\n */\n function showToastMessageWithDelay(message) {\n return new Promise((r) => {\n toastr.success($translate.instant(message));\n setTimeout(r, 200);\n });\n }\n}\n","import 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.core.directives.queryeditor.sparqltab', [\n 'graphdb.framework.core',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .directive('sparqlTab', sparqlTabDirective);\n\nsparqlTabDirective.$inject = ['$rootScope', 'LocalStorageAdapter', 'LSKeys', 'ModalService'];\n\nfunction sparqlTabDirective($rootScope, LocalStorageAdapter, LSKeys, ModalService) {\n const SparqlTabCtrl = ['$scope', '$element', '$rootScope', 'ModalService', 'toastr', '$translate', function ($scope, $element, $rootScope, ModalService, toastr, $translate) {\n $scope.state = {};\n\n function getQueryID(element) {\n return $(element).attr('data-id');\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 $($element).on('shown.bs.tab', function (e) {\n $rootScope.$broadcast('tabAction', e);\n });\n\n $scope.deleteTab = deleteTab;\n $scope.editCurrentTab = editCurrentTab;\n $scope.selectThisTab = selectThisTab;\n\n function selectThisTab(e) {\n e.preventDefault();\n e.stopPropagation();\n if ($scope.isTabChangeOk(false)) {\n $($element).tab('show');\n }\n }\n\n function selectTab(id) {\n $('a[data-id = \"' + id + '\"]').tab('show');\n }\n\n function deleteTab(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if ($scope.tabs.length < 2) {\n toastr.warning($translate.instant('sparql.tab.directive.close.last.warning'));\n return;\n }\n\n if (e.shiftKey) {\n $scope.state.selectedTabId = getQueryID($element);\n\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm'),\n message: $translate.instant('sparql.tab.directive.delete.all.tabs.warning'),\n warning: true\n }).result.then(function () {\n deleteAllTabsExceptSelected($scope.state.selectedTabId);\n });\n } else {\n $scope.state.idForDelete = getQueryID($element);\n\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm'),\n message: $translate.instant('sparql.tab.directive.close.tab.warning'),\n warning: true\n }).result.then(function () {\n deleteTabByID($scope.state.idForDelete);\n });\n }\n angular.element(document).find('.CodeMirror textarea:first-child').focus();\n }\n\n function editCurrentTab() {\n if (getQueryID($element) !== $scope.currentQuery.id) {\n return;\n }\n $scope.editCurrentlySelectedOnly.$show();\n //fix for buttons for edit\n const $editableButtons = $(\".editable-buttons\");\n $editableButtons.children(\".btn.btn-primary\").addClass('btn-sm');\n $editableButtons.children(\".btn.btn-default\").addClass('btn-sm');\n $('.editable-controls .editable-input').addClass('form-control-sm').on('change', function ($el) {\n $scope.currentQuery.name = $el.currentTarget.$$currentValue;\n });\n //$('.editable-buttons').css('margin-top', '5px');\n //$('.editable-input.editable-has-buttons').css('width', '50%');\n $('.editable-buttons .glyphicon.glyphicon-ok')\n .removeClass('glyphicon glyphicon-ok')\n .addClass('fa fa-check');\n $('.editable-buttons .glyphicon.glyphicon-remove')\n .removeClass('glyphicon glyphicon-remove')\n .addClass('fa fa-close');\n }\n\n function deleteTabByID(id) {\n if (angular.isUndefined(id)) {\n throw 'Delete by id was called with undefined id';\n }\n const idx = findTabIndexByID(id);\n $scope.tabs.splice(idx, 1);\n\n if (id === $scope.currentQuery.id) {\n if ($scope.tabs.length > 0) {\n if (idx > 0) {\n // select previous tab if we deleted any but the first tab\n selectTab($scope.tabs[idx - 1].id);\n } else {\n // select first tab if we deleted the first tab\n selectTab($scope.tabs[0].id);\n }\n }\n }\n }\n\n function deleteAllTabsExceptSelected(id) {\n $scope.tabs = $scope.tabs.filter(function (obj) {\n if (obj.id === id) {\n return obj;\n }\n });\n selectTab($scope.tabs[0].id);\n LocalStorageAdapter.set(LSKeys.TABS_STATE, $scope.tabs);\n $rootScope.$broadcast('deleteAllexeptSelected', $scope.tabs);\n }\n }];\n\n return {\n restrict: 'AE',\n // for some reason when you extract this template in a file and use templateUrl it selects all tabs when editing the tab name, not only the currently selected one\n template: '<a class=\"nav-link\" role=\"tab\" data-toggle=\"tab\" blur=\"submit\" editable-text=\"tab.name\" e-form=\"editCurrentlySelectedOnly\" ng-click=\"selectThisTab($event)\" ng-dblclick=\"editCurrentTab()\" ><span ng-class=\"{\\'text-muted\\': !tab.name}\">{{ tab.name || \\'sparql.tab.directive.unnamed.tab.title\\' | translate}}</span><button type=\"button\" ng-click=\"deleteTab($event)\" class=\"btn btn-link btn-sm secondary delete-sparql-tab-btn\" title=\"Delete tab\"><i class=\"icon-close\"></i></button></a>',\n replace: true,\n controller: SparqlTabCtrl\n };\n}\n","import 'angular/core/services';\nimport 'angular/core/services/repositories.service';\nimport 'angular/rest/monitoring.rest.service';\nimport 'angular/utils/notifications';\n\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.rest.monitoring.service',\n 'toastr'\n];\n\nangular.module('graphdb.framework.jdbc.controllers', modules, [\n 'graphdb.framework.utils.notifications'\n])\n .controller('JdbcListCtrl', JdbcListCtrl)\n .controller('JdbcCreateCtrl', JdbcCreateCtrl);\n\nJdbcListCtrl.$inject = ['$scope', '$repositories', 'JdbcRestService', 'toastr', 'ModalService', '$translate'];\n\nfunction JdbcListCtrl($scope, $repositories, JdbcRestService, toastr, ModalService, $translate) {\n\n $scope.getSqlConfigurations = function () {\n // Only do this if there is an active repo that isn't an Ontop or FedX repo.\n // Ontop and FedX repos don't support JDBC.\n if ($repositories.getActiveRepository()\n && !$repositories.isActiveRepoOntopType()\n && !$repositories.isActiveRepoFedXType()) {\n JdbcRestService.getJdbcConfigurations().success(function (data) {\n $scope.jdbcConfigurations = data;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('jdbc.not.get.SQL.msg'));\n });\n } else {\n $scope.jdbcConfigurations = [];\n }\n };\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function () {\n $scope.getSqlConfigurations();\n });\n\n $scope.deleteConfiguration = function (name) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.warning'),\n message: $translate.instant('jdbc.delete.sql.table.warning.msg', {name: name}),\n warning: true\n }).result\n .then(function () {\n JdbcRestService.deleteJdbcConfiguration(name).success(function () {\n $scope.getSqlConfigurations();\n }).error(function(e) {\n toastr.error(getError(e), $translate.instant('jdbc.not.delete.sql.msg'));\n });\n });\n };\n}\n\nJdbcCreateCtrl.$inject = ['$scope', '$location', 'toastr', '$repositories', '$window', '$timeout', 'JdbcRestService', 'RDF4JRepositoriesRestService', 'SparqlRestService', 'ModalService', '$translate'];\n\nfunction JdbcCreateCtrl($scope, $location, toastr, $repositories, $window, $timeout, JdbcRestService, RDF4JRepositoriesRestService, SparqlRestService, ModalService, $translate) {\n\n $scope.name = $location.search().name || '';\n $scope.getNamespaces = getNamespaces;\n $scope.setLoader = setLoader;\n $scope.addKnownPrefixes = addKnownPrefixes;\n $scope.page = 1;\n $scope.noPadding = {paddingRight: 0, paddingLeft: 0};\n $scope.sqlTypes = ['string', 'iri', 'boolean', 'byte', 'short', 'int', 'long', 'float', 'double', 'decimal', 'date', 'time', 'timestamp', 'Get suggestion...'];\n $scope.currentTabConfig = {};\n // This property is obligatory in order to show YASQUE and YASR properly\n $scope.orientationViewMode = true;\n $scope.currentQuery = {};\n\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $location.path('jdbc');\n }\n });\n\n let timer = null;\n $scope.goBack = function () {\n timer = $timeout(function () {\n $window.history.back();\n }, 1000);\n };\n\n const locationChangeListener = $scope.$on('$locationChangeStart', function (event) {\n confirmExit(event);\n });\n\n window.addEventListener('beforeunload', showBeforeunloadMessage);\n\n function showBeforeunloadMessage(event) {\n if (!$scope.currentQuery.isPristine) {\n event.returnValue = true;\n }\n }\n\n function confirmExit(event) {\n if (!$scope.currentQuery.isPristine) {\n if (!confirm($translate.instant('jdbc.warning.unsaved.changes'))) {\n event.preventDefault();\n } else {\n window.removeEventListener('beforeunload', showBeforeunloadMessage);\n locationChangeListener();\n $timeout.cancel(timer);\n }\n }\n }\n\n $scope.$on('$destroy', function (event) {\n window.removeEventListener('beforeunload', showBeforeunloadMessage);\n locationChangeListener();\n $timeout.cancel(timer);\n });\n\n const defaultTabConfig = {\n id: '1',\n name: '',\n query: 'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\\n' +\n '\\n' +\n '# Selects two variables to use as columns\\n' +\n 'SELECT ?id ?label {\\n' +\n ' ?id rdfs:label ?label\\n' +\n ' # The following placeholder must be present in the query\\n' +\n ' #!filter\\n' +\n '}',\n inference: true,\n sameAs: true,\n isNewConfiguration: true,\n isPristine: true\n };\n\n $scope.resetCurrentTabConfig = function () {\n $scope.currentTabConfig = {\n pageSize: 100, // page limit 100 as this is only used for preview\n page: 1,\n allResultsCount: 0,\n resultsCount: 0,\n // Hide YASR by default, show on success in callback when needed\n queryType: ''\n };\n };\n\n $scope.saveTab = function () {\n };\n\n // Called when user clicks on a sample query\n $scope.setQuery = function (query) {\n // Hack for YASQE bug\n window.editor.setValue(query ? query : ' ');\n };\n\n if ($scope.name) {\n getJdbcConfiguration($scope.name);\n } else {\n setQueryFromTabConfig();\n }\n\n // FIXME: this is copy-pasted in graphs-config.controller.js and query-editor.controller.js. Find a way to avoid duplications\n function getNamespaces() {\n // Signals the namespaces are to be fetched => loader will be shown\n setLoader(true, $translate.instant('common.refreshing.namespaces'), $translate.instant('common.extra.message'));\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 loadTab();\n });\n }\n\n function setLoader(isRunning, progressMessage, extraMessage) {\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 yasrInnerContainer.addClass('hide');\n } else {\n $scope.progressMessage = '';\n $scope.extraMessage = '';\n yasrInnerContainer.removeClass('hide');\n }\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 loadTab() {\n $scope.tabsData = [$scope.currentQuery];\n\n const tab = $scope.currentQuery;\n\n if (!$scope.currentQuery.query) {\n // hack for YASQE bug\n window.editor.setValue(' ');\n } else {\n window.editor.setValue($scope.currentQuery.query);\n }\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.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.$apply();\n }, 0);\n\n if (!$scope.canWriteActiveRepo()) {\n window.editor.options.readOnly = true;\n }\n }\n\n $scope.goToPage = function (page) {\n $scope.page = page;\n const columns = $scope.currentQuery.columns;\n if (page === 2 && (!columns || columns.length === 0) && hasValidQuery()) {\n $scope.getColumnsSuggestions();\n }\n resetYasqeYasr();\n };\n\n function getJdbcConfiguration(name) {\n JdbcRestService.getJdbcConfiguration(name).success(function (config) {\n defaultTabConfig.query = config.query;\n defaultTabConfig.name = config.name;\n defaultTabConfig.columns = config.columns;\n\n defaultTabConfig.isNewConfiguration = !config.name;\n\n setQueryFromTabConfig();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('jdbc.not.get.sql.msg2'));\n });\n }\n\n function setQueryFromTabConfig() {\n $scope.tabsData = $scope.tabs = [defaultTabConfig];\n $scope.currentQuery = angular.copy(defaultTabConfig);\n\n resetYasqeYasr();\n\n if (window.editor) {\n $scope.setQuery($scope.currentQuery.query);\n loadTab();\n }\n\n $scope.$watch(function () {\n return $scope.currentQuery.query;\n }, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $scope.setDirty();\n }\n });\n }\n\n $scope.save = function () {\n if (!validateDefinition()) {\n return;\n }\n\n if (!$scope.currentQuery.name) {\n toastr.error($translate.instant('jdbc.required.configuration.name'));\n return;\n }\n\n if ($scope.currentQuery.isNewConfiguration) {\n JdbcRestService.createNewJdbcConfiguration($scope.currentQuery).success(function () {\n $scope.currentQuery.isPristine = true;\n $scope.currentQuery.isNewConfiguration = false;\n toastr.success($translate.instant('jdbc.saved.configuration'));\n $scope.goBack();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('jdbc.not.saved.configuration'));\n });\n } else {\n JdbcRestService.updateJdbcConfiguration($scope.currentQuery).success(function () {\n $scope.currentQuery.isPristine = true;\n $scope.currentQuery.isNewConfiguration = false;\n toastr.success($translate.instant('jdbc.configuration.updated'));\n $scope.goBack();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('jdbc.not.saved.configuration'));\n });\n }\n };\n\n $scope.hasPrecision = function (columnType) {\n return columnType === 'iri' || columnType === 'string' || columnType === 'decimal';\n };\n\n $scope.containsColumnsWithPrecision = function (columns) {\n return columns && columns.some((el) => $scope.hasPrecision(el.column_type));\n };\n\n $scope.hasScale = function (columnType) {\n return columnType === 'decimal';\n };\n\n $scope.containsColumnsWithScale = function (columns) {\n return columns && columns.some((el) => $scope.hasScale(el.column_type));\n };\n\n $scope.isLiteral = function (columnType) {\n return columnType !== 'iri' && columnType !== 'unknown';\n };\n\n $scope.containsNonLiteralColumnsOnly = function (columns) {\n return columns && columns.every((el) => !$scope.isLiteral(el.column_type));\n };\n\n $scope.containsUnknownColumns = function () {\n return $scope.currentQuery.columns && $scope.currentQuery.columns\n .find((el) => el.column_type === 'unknown');\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, $translate.instant('common.add.known.prefixes.error'));\n return true;\n });\n }\n\n $('textarea').on('paste', function () {\n $timeout(function () {\n addKnownPrefixes();\n }, 0);\n });\n\n $scope.selectColumnType = function (columnName, prevColumnType) {\n const column = _.find($scope.currentQuery.columns, function (column) {\n return column.column_name === columnName;\n });\n\n if (column.column_type === 'Get suggestion...') {\n JdbcRestService.getColumnsTypeSuggestion($scope.currentQuery.query, [columnName]).success(function (columnSuggestion) {\n column.column_type = columnSuggestion[columnName].column_type;\n if (column.column_type === prevColumnType) {\n toastr.info($translate.instant('jdbc.same.suggested.sql.type', {type: column.column_type}),\n $translate.instant('jdbc.suggest.sql.type'), {allowHtml: true});\n } else {\n toastr.success($translate.instant('jdbc.suggested.sql.type', {type: column.column_type}),\n $translate.instant('jdbc.suggest.sql.type'), {allowHtml: true});\n }\n column.sparql_type = columnSuggestion[columnName].sparql_type;\n }).error(function(e) {\n toastr.error(getError(e), $translate.instant('jdbc.not.suggest.column.type'));\n });\n }\n $scope.setDirty();\n };\n\n $scope.getColumnsSuggestions = function () {\n if ($scope.currentQuery.columns && $scope.currentQuery.columns.length > 0) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.warning'),\n message: $translate.instant('jdbc.warning.column.type.msg'),\n warning: true\n }).result\n .then(function () {\n getSuggestions();\n });\n } else {\n getSuggestions();\n }\n };\n\n function getSuggestions() {\n if (!validateQuery()) {\n return;\n }\n\n JdbcRestService.getColumnNames($scope.currentQuery.query).success(function (columns) {\n JdbcRestService.getColumnsTypeSuggestion($scope.currentQuery.query, columns).success(function (columnTypes) {\n const suggestedColumns = [];\n _.forEach(columns, function (columnName) {\n suggestedColumns.push({\n column_name: columnName,\n column_type: columnTypes[columnName].column_type,\n nullable: true,\n sparql_type: columnTypes[columnName].sparql_type\n });\n });\n $scope.currentQuery.columns = suggestedColumns;\n $scope.setDirty();\n }).error(function (e) {\n toastr.error(getError(e), $translate.instant('jdbc.not.suggest.column.types'));\n });\n }).error(function (e) {\n toastr.error(getError(e), $translate.instant('jdbc.not.suggest.column.names'));\n });\n }\n\n $scope.deleteColumn = function (columnName, index) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.warning'),\n message: $translate.instant('jdbc.warning.delete.column.msg', {columnName: columnName}),\n warning: true\n }).result\n .then(function () {\n $scope.currentQuery.columns.splice(index, 1);\n $scope.setDirty();\n });\n };\n\n $scope.getPreview = function () {\n if (!validateDefinition()) {\n return;\n }\n\n $scope.executedQueryTab = $scope.currentQuery;\n\n if (!$scope.queryIsRunning) {\n $scope.currentQuery.outputType = 'table';\n $scope.resetCurrentTabConfig();\n\n setLoader(true, $translate.instant('jdbc.preview.first.rows', {name: $scope.name}),\n $translate.instant('common.extra.message'));\n\n const successCallback = function (data, textStatus, jqXhr) {\n setPreviewResult(data, jqXhr, textStatus);\n setLoader(false);\n };\n\n const failCallback = function (data) {\n setLoader(false);\n toastr.error(getError(data, 0, 100), $translate.instant('jdbc.not.show.preview'));\n };\n\n if ($scope.canWriteActiveRepo()) {\n const sqlView = JSON.stringify({\n name: $scope.currentQuery.name,\n query: $scope.currentQuery.query,\n columns: $scope.currentQuery.columns || []\n });\n JdbcRestService.getNewSqlTablePreview(sqlView)\n .done(successCallback).fail(failCallback);\n } else {\n JdbcRestService.getExistingSqlTablePreview($scope.currentQuery.name)\n .done(successCallback).fail(failCallback);\n }\n }\n };\n\n $scope.setDirty = function () {\n $scope.currentQuery.isPristine = false;\n };\n\n $scope.getTypeLabel = function (type) {\n switch (type) {\n case 'iri':\n return 'VARCHAR: IRI';\n case 'string':\n return 'VARCHAR: String';\n default:\n return type.indexOf(' ') > 0 ? type : type.toUpperCase();\n }\n };\n\n function resetYasqeYasr() {\n if ($scope.page === 2) {\n $scope.viewMode = 'editor';\n } else {\n $scope.viewMode = 'none';\n }\n }\n\n function getCellContentSQL(yasr, plugin, bindings, sparqlVar, context) {\n let value = bindings[sparqlVar].value;\n value = value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n const entityHtml = \"<p class='nonUri' style='border: none; background-color: transparent; padding: 0; margin: 0'>\"\n + value + \"</p>\";\n return \"<div class = 'literal-cell'>\" + entityHtml + \"</div>\";\n }\n\n\n function setPreviewResult(data, jqXhr, textStatus) {\n if (!data.results || !data.results.bindings || !data.results.bindings.length) {\n // Hides YASR as it may contain previous results\n toastr.info($translate.instant('jdbc.table.definition'), $translate.instant('jdbc.preview.sql'));\n } else {\n // Custom content extractor that won't insert \" in SQL values (since we treat them as fake literals)\n window.yasr.plugins.table.options.getCellContent = getCellContentSQL;\n\n // Set query type so YASR shows the results\n $scope.currentTabConfig.queryType = 'SELECT';\n window.yasr.setResponse(jqXhr, textStatus, null);\n }\n }\n\n function hasValidQuery() {\n return window.editor && window.editor.getQueryType() === 'SELECT';\n }\n\n function validateDefinition() {\n return validateQuery() && validateColumns();\n }\n\n function validateQuery() {\n if (!hasValidQuery()) {\n toastr.error($translate.instant('jdbc.warning.invalid.query'), $translate.instant('jdbc.invalid.query)'));\n return false;\n }\n\n return true;\n }\n\n function validateColumns() {\n if (!$scope.currentQuery.columns || !$scope.currentQuery.columns.length) {\n toastr.error($translate.instant('jdbc.warning.one.column.msg'), $translate.instant('jdbc.invalid.columns'));\n return false;\n }\n\n if ($scope.containsUnknownColumns()) {\n toastr.error($translate.instant('jdbc.warning.all.column.msg'), $translate.instant('jdbc.invalid.columns'));\n return false;\n }\n\n return true;\n }\n}\n","angular\n .module('graphdb.framework.rest.jdbc.service', [])\n .factory('JdbcRestService', JdbcRestService);\n\nJdbcRestService.$inject = ['$http', '$repositories', '$translate'];\n\nconst JDBC_ENDPOINT = 'rest/sql-views';\n\nfunction JdbcRestService($http, $translate) {\n\n return {\n getJdbcConfigurations,\n getJdbcConfiguration,\n createNewJdbcConfiguration,\n updateJdbcConfiguration,\n deleteJdbcConfiguration,\n getColumnNames,\n getColumnsTypeSuggestion,\n getExistingSqlTablePreview,\n getNewSqlTablePreview\n };\n\n function getJdbcConfigurations() {\n return $http.get(`${JDBC_ENDPOINT}/tables`);\n }\n\n function getJdbcConfiguration(configuration) {\n return $http.get(`${JDBC_ENDPOINT}/tables/${configuration}`);\n }\n\n function createConfiguration(method, table, configuration) {\n return $http({\n method,\n url: `${JDBC_ENDPOINT}/tables/${table}`,\n noCancelOnRouteChange: true,\n data: {\n name: configuration.name,\n query: configuration.query,\n columns: configuration.columns || []\n }\n }\n );\n }\n\n function createNewJdbcConfiguration(configuration) {\n return createConfiguration('POST', '', configuration);\n }\n\n function updateJdbcConfiguration(configuration) {\n return createConfiguration('PUT', configuration.name, configuration);\n }\n\n function deleteJdbcConfiguration(name) {\n return $http.delete(`${JDBC_ENDPOINT}/tables/${name}`);\n }\n\n function getColumnNames(query) {\n const headers = {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'text/plain'\n }\n };\n\n return $http.post(`${JDBC_ENDPOINT}/columns`, query, headers);\n }\n\n function getColumnsTypeSuggestion(query, columns) {\n if (!Array.isArray(columns)) {\n throw new Error($translate.instant('jdbc.column.names.constraint'));\n }\n\n return $http({\n method: 'POST',\n url: `${JDBC_ENDPOINT}/types`,\n data: {\n query: query,\n column_names: columns\n }\n }\n );\n }\n function getExistingSqlTablePreview(name, limit) {\n // Limit in preview is optional. On backend default value is set to 100\n return $.ajax({\n method: 'GET',\n url: `rest/sql-views/preview/${name}`,\n params: {\n limit\n }\n })\n }\n\n function getNewSqlTablePreview(sqlView, limit) {\n // Limit in preview is optional. On backend default value is set to 100\n return $.ajax({\n method: 'POST',\n url: \"rest/sql-views/preview\",\n contentType: \"application/json; charset=utf-8\",\n dataType: 'json',\n data: sqlView,\n params: {\n limit\n },\n headers: {Accept: 'application/sparql-results+json'}\n })\n }\n}\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[18,44,52,109,122],{149:function(e,t,r){"use strict";r.r(t);r(4),r(11),r(52),r(10),r(94),r(91),r(42),r(43),r(44),r(13);angular.module("graphdb.framework.sparql-template",["toastr","ui.bootstrap","graphdb.framework.sparql-template.controllers","graphdb.framework.core.services.repositories","graphdb.framework.core.directives","graphdb.framework.rest.sparql-templates.service","graphdb.framework.core.directives.queryeditor.controllers","graphdb.framework.core.directives.queryeditor.sparqltab","graphdb.framework.core.directives.queryeditor.queryeditor","graphdb.framework.utils.uriutils"])},38:function(e,t){function r(e,t){return{showToastMessageWithDelay:function(r){return new Promise(n=>{e.success(t.instant(r)),setTimeout(n,200)})}}}angular.module("graphdb.framework.utils.notifications",[]).factory("Notifications",r),r.$inject=["toastr","$translate"]},42:function(e,t,r){"use strict";r.r(t);r(5);function n(e,t,r,n){return{restrict:"AE",template:'<a class="nav-link" role="tab" data-toggle="tab" blur="submit" editable-text="tab.name" e-form="editCurrentlySelectedOnly" ng-click="selectThisTab($event)" ng-dblclick="editCurrentTab()" ><span ng-class="{\'text-muted\': !tab.name}">{{ tab.name || \'sparql.tab.directive.unnamed.tab.title\' | translate}}</span><button type="button" ng-click="deleteTab($event)" class="btn btn-link btn-sm secondary delete-sparql-tab-btn" title="Delete tab"><i class="icon-close"></i></button></a>',replace:!0,controller:["$scope","$element","$rootScope","ModalService","toastr","$translate",function(e,n,a,s,i,o){function l(e){return $(e).attr("data-id")}function c(e){$('a[data-id = "'+e+'"]').tab("show")}e.state={},$(n).on("shown.bs.tab",(function(e){a.$broadcast("tabAction",e)})),e.deleteTab=function(u){if(u.preventDefault(),u.stopPropagation(),e.tabs.length<2)return void i.warning(o.instant("sparql.tab.directive.close.last.warning"));u.shiftKey?(e.state.selectedTabId=l(n),s.openSimpleModal({title:o.instant("common.confirm"),message:o.instant("sparql.tab.directive.delete.all.tabs.warning"),warning:!0}).result.then((function(){var n;n=e.state.selectedTabId,e.tabs=e.tabs.filter((function(e){if(e.id===n)return e})),c(e.tabs[0].id),t.set(r.TABS_STATE,e.tabs),a.$broadcast("deleteAllexeptSelected",e.tabs)}))):(e.state.idForDelete=l(n),s.openSimpleModal({title:o.instant("common.confirm"),message:o.instant("sparql.tab.directive.close.tab.warning"),warning:!0}).result.then((function(){!function(t){if(angular.isUndefined(t))throw"Delete by id was called with undefined id";const r=function(t){for(let r=0;r<e.tabs.length;r++){if(e.tabs[r].id===t)return r}}(t);e.tabs.splice(r,1),t===e.currentQuery.id&&e.tabs.length>0&&c(r>0?e.tabs[r-1].id:e.tabs[0].id)}(e.state.idForDelete)})));angular.element(document).find(".CodeMirror textarea:first-child").focus()},e.editCurrentTab=function(){if(l(n)!==e.currentQuery.id)return;e.editCurrentlySelectedOnly.$show();const t=$(".editable-buttons");t.children(".btn.btn-primary").addClass("btn-sm"),t.children(".btn.btn-default").addClass("btn-sm"),$(".editable-controls .editable-input").addClass("form-control-sm").on("change",(function(t){e.currentQuery.name=t.currentTarget.$$currentValue})),$(".editable-buttons .glyphicon.glyphicon-ok").removeClass("glyphicon glyphicon-ok").addClass("fa fa-check"),$(".editable-buttons .glyphicon.glyphicon-remove").removeClass("glyphicon glyphicon-remove").addClass("fa fa-close")},e.selectThisTab=function(t){t.preventDefault(),t.stopPropagation(),e.isTabChangeOk(!1)&&$(n).tab("show")}}]}}angular.module("graphdb.framework.core.directives.queryeditor.sparqltab",["graphdb.framework.core","graphdb.framework.utils.localstorageadapter"]).directive("sparqlTab",n),n.$inject=["$rootScope","LocalStorageAdapter","LSKeys","ModalService"]},91:function(e,t){angular.module("graphdb.framework.rest.sparql-templates.service",[]).factory("SparqlTemplatesRestService",r),r.$inject=["$http"];function r(e){return{getSparqlTemplates:function(t){return e.get(`rest/repositories/${t}/sparql-templates`)},getSparqlTemplate:function(t,r){return e.get(`rest/repositories/${r}/sparql-templates/configuration`,{params:{templateID:t}})},createSparqlTemplate:function(t,r){return e.post(`rest/repositories/${r}/sparql-templates`,{templateID:t.templateID,query:t.query})},updateSparqlTemplate:function(t,r){return e.put(`rest/repositories/${r}/sparql-templates`,t.query,{params:{templateID:t.templateID},headers:{"Content-Type":"text/plain"}})},deleteSparqlTemplate:function(t,r){return e.delete(`rest/repositories/${r}/sparql-templates`,{params:{templateID:t}})}}}},94:function(e,t,r){"use strict";r.r(t);r(4),r(10),r(14),r(38),r(13);var n=r(0);function a(e,t,r,n,a,s,i){e.pluginName="sparql-template",e.setPluginIsActive=function(t){e.pluginIsActive=t},e.getSparqlTemplates=function(){s.isLicenseValid()&&t.getActiveRepository()&&!t.isActiveRepoOntopType()&&!t.isActiveRepoFedXType()?r.getSparqlTemplates(t.getActiveRepository()).success((function(t){e.sparqlTemplateIds=t})).error((function(e){const t=getError(e);n.error(t,i.instant("sparql.template.get.templates.error"))})):e.sparqlTemplateIds=[]},e.$watch((function(){return t.getActiveRepository()}),(function(){e.getSparqlTemplates()})),e.deleteTemplate=function(s){a.openSimpleModal({title:i.instant("common.warning"),message:i.instant("sparql.template.delete.template.warning",{templateID:s}),warning:!0}).result.then((function(){r.deleteSparqlTemplate(s,t.getActiveRepository()).success((function(){n.success(s,i.instant("sparql.template.delete.template.success")),e.getSparqlTemplates()})).error((function(e){n.error(getError(e),i.instant("sparql.template.delete.template.failure",{templateID:s}))}))}))}}function s(e,t,r,a,s,i,o,l,c,u,p,d){const m=t.hash()||"";e.templateID=(t.search().templateID||"")+(m?"#"+m:""),e.title=(e.templateID?d.instant("edit"):d.instant("common.create.btn"))+" SPARQL Template",e.getNamespaces=function(){T(!0,d.instant("common.refreshing.namespaces"),d.instant("common.extra.message")),l.getRepositoryNamespaces().success((function(t){const r={};t.results.bindings.forEach((function(e){r[e.prefix.value]=e.namespace.value})),e.namespaces=r})).error((function(t){e.repositoryError=getError(t)})).finally((function(){T(!1),h()}))},e.setLoader=T,e.addKnownPrefixes=S,e.noPadding={paddingRight:0,paddingLeft:0},e.currentTabConfig={},e.orientationViewMode=!0,e.currentQuery={};let f=!1;e.$watch((function(){return a.getActiveRepository()}),(function(e,r){e!==r&&t.path("/sparql-templates")}));let g=null;e.goBack=function(){g=i((function(){s.history.back()}),1e3)};const b=e.$on("$locationChangeStart",(function(t){!function(t){e.currentQuery.isPristine||(confirm(d.instant("jdbc.warning.unsaved.changes"))?(window.removeEventListener("beforeunload",y),b(),i.cancel(g)):t.preventDefault())}(t)}));function y(t){e.currentQuery.isPristine||(t.returnValue=!0)}window.addEventListener("beforeunload",y),e.$on("$destroy",(function(e){window.removeEventListener("beforeunload",y),b(),i.cancel(g)}));const w={templateID:"",query:"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX ex: <http://example.com#>\nDELETE {\n ?subject ex:myPredicate ?oldValue .\n} INSERT {\n ?subject ex:myPredicate ?newValue .\n} WHERE {\n ?id rdf:type ex:MyType .\n ?subject ex:isRelatedTo ?id .\n}\n",inference:!0,sameAs:!0,isNewTemplate:!0,isPristine:!0};var q;function T(t,r,n){const a=angular.element(document.getElementById("yasr-inner"));e.queryIsRunning=t,t?(e.queryStartTime=Date.now(),e.countTimeouted=!1,e.progressMessage=r,e.extraMessage=n,a.addClass("hide")):(e.progressMessage="",e.extraMessage="",a.removeClass("hide")),null===e.$$phase&&e.$apply()}function h(){e.tabsData=[e.currentQuery];const t=e.currentQuery;e.currentQuery.query?window.editor.setValue(e.currentQuery.query):window.editor.setValue(" "),i((function(){e.currentTabConfig={},e.currentTabConfig.queryType=t.queryType,e.currentTabConfig.resultsCount=t.resultsCount,e.currentTabConfig.offset=t.offset,e.currentTabConfig.allResultsCount=t.allResultsCount,e.currentTabConfig.page=t.page,e.currentTabConfig.pageSize=t.pageSize,e.currentTabConfig.timeFinished=t.timeFinished,e.currentTabConfig.timeTook=t.timeTook,e.currentTabConfig.sizeDelta=t.sizeDelta,e.$apply()}),0),e.canWriteActiveRepo()||(window.editor.options.readOnly=!0)}function v(){e.tabsData=e.tabs=[w],e.currentQuery=angular.copy(w),window.editor&&(e.setQuery(e.currentQuery.query),h()),e.$watch((function(){return e.currentQuery.query}),(function(t,r){t!==r&&e.setDirty()}))}function S(){c.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 r.error(t,d.instant("common.add.known.prefixes.error")),!0}))}function D(){o.createSparqlTemplate(e.currentQuery,a.getActiveRepository()).success((function(){e.currentQuery.isPristine=!0,e.currentQuery.isNewTemplate=!1,r.success(e.currentQuery.templateID,d.instant("save.sparql.template.success.msg")),e.goBack()})).error((function(t){const n=getError(t);r.error(n,d.instant("save.sparql.template.failure.msg",{templateID:e.currentQuery.templateID}))}))}e.saveTab=function(){},e.setQuery=function(e){window.editor.setValue(e||" ")},e.templateID?(q=e.templateID,o.getSparqlTemplate(q,a.getActiveRepository()).success((function(e){w.query=e,w.templateID=q,w.isNewTemplate=!q,v()})).error((function(t){const n=getError(t);r.error(n,d.instant("sparql.template.get.template.error",{templateID:e.currentQuery.templateID})),e.repositoryError=n}))):v(),e.saveTemplate=function(){(function(){if(!window.editor||"update"!==window.editor.getQueryMode())return r.error(d.instant("sparql.template.query.constraint"),d.instant("jdbc.invalid.query")),!1;return!0})()&&(e.currentQuery.templateID?(e.isInvalidTemplateId=!u.isValidIri(e.currentQuery.templateID),e.isInvalidTemplateId||(e.currentQuery.isNewTemplate?o.getSparqlTemplates(a.getActiveRepository()).success((function(t){f=t.find(t=>t===e.currentQuery.templateID)})).error((function(e){const t=getError(e);r.error(t,d.instant("sparql.template.get.templates.error"))})).then(()=>{if(f){const t=Object(n.decodeHTML)(d.instant("sparql.template.existing.template.error",{templateID:e.currentQuery.templateID}));p.openSimpleModal({title:d.instant("common.confirm.save"),message:t,warning:!0}).result.then((function(){D()}))}else D()}):e.currentQuery.isPristine?e.goBack():o.updateSparqlTemplate(e.currentQuery,a.getActiveRepository()).success((function(){e.currentQuery.isPristine=!0,e.currentQuery.isNewTemplate=!1,r.success(e.currentQuery.templateID,d.instant("update.sparql.template.success.msg")),e.goBack()})).error((function(t){const n=getError(t);r.error(n,d.instant("save.sparql.template.failure.msg",{templateID:e.currentQuery.templateID}))})))):r.error(d.instant("sparql.template.iri.constraint")))},$("textarea").on("paste",(function(){i((function(){S()}),0)})),e.setDirty=function(){e.currentQuery.isPristine=!1}}angular.module("graphdb.framework.sparql-template.controllers",["ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.rest.monitoring.service","toastr"],["graphdb.framework.utils.notifications"]).controller("SparqlTemplatesCtrl",a).controller("SparqlTemplateCreateCtrl",s),a.$inject=["$scope","$repositories","SparqlTemplatesRestService","toastr","ModalService","$licenseService","$translate"],s.$inject=["$scope","$location","toastr","$repositories","$window","$timeout","SparqlTemplatesRestService","RDF4JRepositoriesRestService","SparqlRestService","UriUtils","ModalService","$translate"]}}]);
|
|
2
|
-
//# sourceMappingURL=18.
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[18,44,52,109,122],{150:function(e,t,r){"use strict";r.r(t);r(4),r(11),r(52),r(10),r(94),r(91),r(42),r(43),r(44),r(13);angular.module("graphdb.framework.sparql-template",["toastr","ui.bootstrap","graphdb.framework.sparql-template.controllers","graphdb.framework.core.services.repositories","graphdb.framework.core.directives","graphdb.framework.rest.sparql-templates.service","graphdb.framework.core.directives.queryeditor.controllers","graphdb.framework.core.directives.queryeditor.sparqltab","graphdb.framework.core.directives.queryeditor.queryeditor","graphdb.framework.utils.uriutils"])},38:function(e,t){function r(e,t){return{showToastMessageWithDelay:function(r){return new Promise(n=>{e.success(t.instant(r)),setTimeout(n,200)})}}}angular.module("graphdb.framework.utils.notifications",[]).factory("Notifications",r),r.$inject=["toastr","$translate"]},42:function(e,t,r){"use strict";r.r(t);r(5);function n(e,t,r,n){return{restrict:"AE",template:'<a class="nav-link" role="tab" data-toggle="tab" blur="submit" editable-text="tab.name" e-form="editCurrentlySelectedOnly" ng-click="selectThisTab($event)" ng-dblclick="editCurrentTab()" ><span ng-class="{\'text-muted\': !tab.name}">{{ tab.name || \'sparql.tab.directive.unnamed.tab.title\' | translate}}</span><button type="button" ng-click="deleteTab($event)" class="btn btn-link btn-sm secondary delete-sparql-tab-btn" title="Delete tab"><i class="icon-close"></i></button></a>',replace:!0,controller:["$scope","$element","$rootScope","ModalService","toastr","$translate",function(e,n,a,s,i,o){function l(e){return $(e).attr("data-id")}function c(e){$('a[data-id = "'+e+'"]').tab("show")}e.state={},$(n).on("shown.bs.tab",(function(e){a.$broadcast("tabAction",e)})),e.deleteTab=function(u){if(u.preventDefault(),u.stopPropagation(),e.tabs.length<2)return void i.warning(o.instant("sparql.tab.directive.close.last.warning"));u.shiftKey?(e.state.selectedTabId=l(n),s.openSimpleModal({title:o.instant("common.confirm"),message:o.instant("sparql.tab.directive.delete.all.tabs.warning"),warning:!0}).result.then((function(){var n;n=e.state.selectedTabId,e.tabs=e.tabs.filter((function(e){if(e.id===n)return e})),c(e.tabs[0].id),t.set(r.TABS_STATE,e.tabs),a.$broadcast("deleteAllexeptSelected",e.tabs)}))):(e.state.idForDelete=l(n),s.openSimpleModal({title:o.instant("common.confirm"),message:o.instant("sparql.tab.directive.close.tab.warning"),warning:!0}).result.then((function(){!function(t){if(angular.isUndefined(t))throw"Delete by id was called with undefined id";const r=function(t){for(let r=0;r<e.tabs.length;r++){if(e.tabs[r].id===t)return r}}(t);e.tabs.splice(r,1),t===e.currentQuery.id&&e.tabs.length>0&&c(r>0?e.tabs[r-1].id:e.tabs[0].id)}(e.state.idForDelete)})));angular.element(document).find(".CodeMirror textarea:first-child").focus()},e.editCurrentTab=function(){if(l(n)!==e.currentQuery.id)return;e.editCurrentlySelectedOnly.$show();const t=$(".editable-buttons");t.children(".btn.btn-primary").addClass("btn-sm"),t.children(".btn.btn-default").addClass("btn-sm"),$(".editable-controls .editable-input").addClass("form-control-sm").on("change",(function(t){e.currentQuery.name=t.currentTarget.$$currentValue})),$(".editable-buttons .glyphicon.glyphicon-ok").removeClass("glyphicon glyphicon-ok").addClass("fa fa-check"),$(".editable-buttons .glyphicon.glyphicon-remove").removeClass("glyphicon glyphicon-remove").addClass("fa fa-close")},e.selectThisTab=function(t){t.preventDefault(),t.stopPropagation(),e.isTabChangeOk(!1)&&$(n).tab("show")}}]}}angular.module("graphdb.framework.core.directives.queryeditor.sparqltab",["graphdb.framework.core","graphdb.framework.utils.localstorageadapter"]).directive("sparqlTab",n),n.$inject=["$rootScope","LocalStorageAdapter","LSKeys","ModalService"]},91:function(e,t){angular.module("graphdb.framework.rest.sparql-templates.service",[]).factory("SparqlTemplatesRestService",r),r.$inject=["$http"];function r(e){return{getSparqlTemplates:function(t){return e.get(`rest/repositories/${t}/sparql-templates`)},getSparqlTemplate:function(t,r){return e.get(`rest/repositories/${r}/sparql-templates/configuration`,{params:{templateID:t}})},createSparqlTemplate:function(t,r){return e.post(`rest/repositories/${r}/sparql-templates`,{templateID:t.templateID,query:t.query})},updateSparqlTemplate:function(t,r){return e.put(`rest/repositories/${r}/sparql-templates`,t.query,{params:{templateID:t.templateID},headers:{"Content-Type":"text/plain"}})},deleteSparqlTemplate:function(t,r){return e.delete(`rest/repositories/${r}/sparql-templates`,{params:{templateID:t}})}}}},94:function(e,t,r){"use strict";r.r(t);r(4),r(10),r(14),r(38),r(13);var n=r(0);function a(e,t,r,n,a,s,i){e.pluginName="sparql-template",e.setPluginIsActive=function(t){e.pluginIsActive=t},e.getSparqlTemplates=function(){s.isLicenseValid()&&t.getActiveRepository()&&!t.isActiveRepoOntopType()&&!t.isActiveRepoFedXType()?r.getSparqlTemplates(t.getActiveRepository()).success((function(t){e.sparqlTemplateIds=t})).error((function(e){const t=getError(e);n.error(t,i.instant("sparql.template.get.templates.error"))})):e.sparqlTemplateIds=[]},e.$watch((function(){return t.getActiveRepository()}),(function(){e.getSparqlTemplates()})),e.deleteTemplate=function(s){a.openSimpleModal({title:i.instant("common.warning"),message:i.instant("sparql.template.delete.template.warning",{templateID:s}),warning:!0}).result.then((function(){r.deleteSparqlTemplate(s,t.getActiveRepository()).success((function(){n.success(s,i.instant("sparql.template.delete.template.success")),e.getSparqlTemplates()})).error((function(e){n.error(getError(e),i.instant("sparql.template.delete.template.failure",{templateID:s}))}))}))}}function s(e,t,r,a,s,i,o,l,c,u,p,d){const m=t.hash()||"";e.templateID=(t.search().templateID||"")+(m?"#"+m:""),e.title=(e.templateID?d.instant("edit"):d.instant("common.create.btn"))+" SPARQL Template",e.getNamespaces=function(){T(!0,d.instant("common.refreshing.namespaces"),d.instant("common.extra.message")),l.getRepositoryNamespaces().success((function(t){const r={};t.results.bindings.forEach((function(e){r[e.prefix.value]=e.namespace.value})),e.namespaces=r})).error((function(t){e.repositoryError=getError(t)})).finally((function(){T(!1),h()}))},e.setLoader=T,e.addKnownPrefixes=S,e.noPadding={paddingRight:0,paddingLeft:0},e.currentTabConfig={},e.orientationViewMode=!0,e.currentQuery={};let f=!1;e.$watch((function(){return a.getActiveRepository()}),(function(e,r){e!==r&&t.path("/sparql-templates")}));let g=null;e.goBack=function(){g=i((function(){s.history.back()}),1e3)};const b=e.$on("$locationChangeStart",(function(t){!function(t){e.currentQuery.isPristine||(confirm(d.instant("jdbc.warning.unsaved.changes"))?(window.removeEventListener("beforeunload",y),b(),i.cancel(g)):t.preventDefault())}(t)}));function y(t){e.currentQuery.isPristine||(t.returnValue=!0)}window.addEventListener("beforeunload",y),e.$on("$destroy",(function(e){window.removeEventListener("beforeunload",y),b(),i.cancel(g)}));const w={templateID:"",query:"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX ex: <http://example.com#>\nDELETE {\n ?subject ex:myPredicate ?oldValue .\n} INSERT {\n ?subject ex:myPredicate ?newValue .\n} WHERE {\n ?id rdf:type ex:MyType .\n ?subject ex:isRelatedTo ?id .\n}\n",inference:!0,sameAs:!0,isNewTemplate:!0,isPristine:!0};var q;function T(t,r,n){const a=angular.element(document.getElementById("yasr-inner"));e.queryIsRunning=t,t?(e.queryStartTime=Date.now(),e.countTimeouted=!1,e.progressMessage=r,e.extraMessage=n,a.addClass("hide")):(e.progressMessage="",e.extraMessage="",a.removeClass("hide")),null===e.$$phase&&e.$apply()}function h(){e.tabsData=[e.currentQuery];const t=e.currentQuery;e.currentQuery.query?window.editor.setValue(e.currentQuery.query):window.editor.setValue(" "),i((function(){e.currentTabConfig={},e.currentTabConfig.queryType=t.queryType,e.currentTabConfig.resultsCount=t.resultsCount,e.currentTabConfig.offset=t.offset,e.currentTabConfig.allResultsCount=t.allResultsCount,e.currentTabConfig.page=t.page,e.currentTabConfig.pageSize=t.pageSize,e.currentTabConfig.timeFinished=t.timeFinished,e.currentTabConfig.timeTook=t.timeTook,e.currentTabConfig.sizeDelta=t.sizeDelta,e.$apply()}),0),e.canWriteActiveRepo()||(window.editor.options.readOnly=!0)}function v(){e.tabsData=e.tabs=[w],e.currentQuery=angular.copy(w),window.editor&&(e.setQuery(e.currentQuery.query),h()),e.$watch((function(){return e.currentQuery.query}),(function(t,r){t!==r&&e.setDirty()}))}function S(){c.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 r.error(t,d.instant("common.add.known.prefixes.error")),!0}))}function D(){o.createSparqlTemplate(e.currentQuery,a.getActiveRepository()).success((function(){e.currentQuery.isPristine=!0,e.currentQuery.isNewTemplate=!1,r.success(e.currentQuery.templateID,d.instant("save.sparql.template.success.msg")),e.goBack()})).error((function(t){const n=getError(t);r.error(n,d.instant("save.sparql.template.failure.msg",{templateID:e.currentQuery.templateID}))}))}e.saveTab=function(){},e.setQuery=function(e){window.editor.setValue(e||" ")},e.templateID?(q=e.templateID,o.getSparqlTemplate(q,a.getActiveRepository()).success((function(e){w.query=e,w.templateID=q,w.isNewTemplate=!q,v()})).error((function(t){const n=getError(t);r.error(n,d.instant("sparql.template.get.template.error",{templateID:e.currentQuery.templateID})),e.repositoryError=n}))):v(),e.saveTemplate=function(){(function(){if(!window.editor||"update"!==window.editor.getQueryMode())return r.error(d.instant("sparql.template.query.constraint"),d.instant("jdbc.invalid.query")),!1;return!0})()&&(e.currentQuery.templateID?(e.isInvalidTemplateId=!u.isValidIri(e.currentQuery.templateID),e.isInvalidTemplateId||(e.currentQuery.isNewTemplate?o.getSparqlTemplates(a.getActiveRepository()).success((function(t){f=t.find(t=>t===e.currentQuery.templateID)})).error((function(e){const t=getError(e);r.error(t,d.instant("sparql.template.get.templates.error"))})).then(()=>{if(f){const t=Object(n.decodeHTML)(d.instant("sparql.template.existing.template.error",{templateID:e.currentQuery.templateID}));p.openSimpleModal({title:d.instant("common.confirm.save"),message:t,warning:!0}).result.then((function(){D()}))}else D()}):e.currentQuery.isPristine?e.goBack():o.updateSparqlTemplate(e.currentQuery,a.getActiveRepository()).success((function(){e.currentQuery.isPristine=!0,e.currentQuery.isNewTemplate=!1,r.success(e.currentQuery.templateID,d.instant("update.sparql.template.success.msg")),e.goBack()})).error((function(t){const n=getError(t);r.error(n,d.instant("save.sparql.template.failure.msg",{templateID:e.currentQuery.templateID}))})))):r.error(d.instant("sparql.template.iri.constraint")))},$("textarea").on("paste",(function(){i((function(){S()}),0)})),e.setDirty=function(){e.currentQuery.isPristine=!1}}angular.module("graphdb.framework.sparql-template.controllers",["ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.rest.monitoring.service","toastr"],["graphdb.framework.utils.notifications"]).controller("SparqlTemplatesCtrl",a).controller("SparqlTemplateCreateCtrl",s),a.$inject=["$scope","$repositories","SparqlTemplatesRestService","toastr","ModalService","$licenseService","$translate"],s.$inject=["$scope","$location","toastr","$repositories","$window","$timeout","SparqlTemplatesRestService","RDF4JRepositoriesRestService","SparqlRestService","UriUtils","ModalService","$translate"]}}]);
|
|
2
|
+
//# sourceMappingURL=18.d6e541cf8e651a6d223e.bundle.js.map
|
package/dist/{18.63478730d60e02069d90.bundle.js.map → 18.d6e541cf8e651a6d223e.bundle.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/angular/sparql-template/app.js","webpack:///./src/js/angular/utils/notifications.js","webpack:///./src/js/angular/core/directives/queryeditor/sparql-tab.directive.js","webpack:///./src/js/angular/rest/sparql-templates.rest.service.js","webpack:///./src/js/angular/sparql-template/controllers.js"],"names":["angular","module","Notifications","toastr","$translate","showToastMessageWithDelay","message","Promise","r","success","instant","setTimeout","factory","$inject","sparqlTabDirective","$rootScope","LocalStorageAdapter","LSKeys","ModalService","restrict","template","replace","controller","$scope","$element","getQueryID","element","$","attr","selectTab","id","tab","state","on","e","$broadcast","deleteTab","preventDefault","stopPropagation","tabs","length","warning","shiftKey","selectedTabId","openSimpleModal","title","result","then","filter","obj","set","TABS_STATE","idForDelete","isUndefined","idx","i","findTabIndexByID","splice","currentQuery","deleteTabByID","document","find","focus","editCurrentTab","editCurrentlySelectedOnly","$show","$editableButtons","children","addClass","$el","name","currentTarget","$$currentValue","removeClass","selectThisTab","isTabChangeOk","directive","SparqlTemplatesRestService","$http","getSparqlTemplates","repositoryID","get","getSparqlTemplate","templateID","params","createSparqlTemplate","post","query","updateSparqlTemplate","put","headers","deleteSparqlTemplate","delete","SparqlTemplatesCtrl","$repositories","$licenseService","pluginName","setPluginIsActive","isPluginActive","pluginIsActive","isLicenseValid","getActiveRepository","isActiveRepoOntopType","isActiveRepoFedXType","data","sparqlTemplateIds","error","msg","getError","$watch","deleteTemplate","SparqlTemplateCreateCtrl","$location","$window","$timeout","RDF4JRepositoriesRestService","SparqlRestService","UriUtils","hash","search","getNamespaces","setLoader","getRepositoryNamespaces","usedPrefixes","results","bindings","forEach","prefix","value","namespace","namespaces","repositoryError","finally","loadTab","addKnownPrefixes","noPadding","paddingRight","paddingLeft","currentTabConfig","orientationViewMode","templateExist","newValue","oldValue","path","timer","goBack","history","back","locationChangeListener","$on","event","isPristine","confirm","window","removeEventListener","showBeforeunloadMessage","cancel","confirmExit","returnValue","addEventListener","defaultTabConfig","inference","sameAs","isNewTemplate","isRunning","progressMessage","extraMessage","yasrInnerContainer","getElementById","queryIsRunning","queryStartTime","Date","now","countTimeouted","$$phase","$apply","tabsData","editor","setValue","queryType","resultsCount","offset","allResultsCount","page","pageSize","timeFinished","timeTook","sizeDelta","canWriteActiveRepo","options","readOnly","setQueryFromTabConfig","copy","setQuery","setDirty","JSON","stringify","getValue","isDefined","saveNewTemplate","saveTab","templateContent","saveTemplate","getQueryMode","validateQuery","isInvalidTemplateId","isValidIri","templateId","modalMsg"],"mappings":"yGAAA,kEAwBAA,QAAQC,OAAO,oCAbC,CACZ,SACA,eACA,gDACA,+CACA,oCACA,kDACA,4DACA,0DACA,4DACA,sC,iBCfJ,SAASC,EAAcC,EAAQC,GAC3B,MAAO,CACHC,0BASJ,SAAmCC,GAC/B,OAAO,IAAIC,QAASC,IAChBL,EAAOM,QAAQL,EAAWM,QAAQJ,IAClCK,WAAWH,EAAG,SApB1BR,QACKC,OAAO,wCAAyC,IAChDW,QAAQ,gBAAiBV,GAE9BA,EAAcW,QAAU,CAAC,SAAU,e,gCCJnC,YAWA,SAASC,EAAmBC,EAAYC,EAAqBC,EAAQC,GA4HjE,MAAO,CACHC,SAAU,KAEVC,SAAU,meACVC,SAAS,EACTC,WAhIkB,CAAC,SAAU,WAAY,aAAc,eAAgB,SAAU,aAAc,SAAUC,EAAQC,EAAUT,EAAYG,EAAcf,EAAQC,GAG7J,SAASqB,EAAWC,GAChB,OAAOC,EAAED,GAASE,KAAK,WA4B3B,SAASC,EAAUC,GACfH,EAAE,gBAAkBG,EAAK,MAAMC,IAAI,QAhCvCR,EAAOS,MAAQ,GAefL,EAAEH,GAAUS,GAAG,gBAAgB,SAAUC,GACrCnB,EAAWoB,WAAW,YAAaD,MAGvCX,EAAOa,UAgBP,SAAmBF,GAIf,GAHAA,EAAEG,iBACFH,EAAEI,kBAEEf,EAAOgB,KAAKC,OAAS,EAErB,YADArC,EAAOsC,QAAQrC,EAAWM,QAAQ,4CAIlCwB,EAAEQ,UACFnB,EAAOS,MAAMW,cAAgBlB,EAAWD,GAExCN,EAAa0B,gBAAgB,CACzBC,MAAOzC,EAAWM,QAAQ,kBAC1BJ,QAASF,EAAWM,QAAQ,gDAC5B+B,SAAS,IACVK,OAAOC,MAAK,WA2DvB,IAAqCjB,IA1DGP,EAAOS,MAAMW,cA2DjDpB,EAAOgB,KAAOhB,EAAOgB,KAAKS,QAAO,SAAUC,GACvC,GAAIA,EAAInB,KAAOA,EACX,OAAOmB,KAGfpB,EAAUN,EAAOgB,KAAK,GAAGT,IACzBd,EAAoBkC,IAAIjC,EAAOkC,WAAY5B,EAAOgB,MAClDxB,EAAWoB,WAAW,yBAA0BZ,EAAOgB,WA/DnDhB,EAAOS,MAAMoB,YAAc3B,EAAWD,GAEtCN,EAAa0B,gBAAgB,CACzBC,MAAOzC,EAAWM,QAAQ,kBAC1BJ,QAASF,EAAWM,QAAQ,0CAC5B+B,SAAS,IACVK,OAAOC,MAAK,YA6BvB,SAAuBjB,GACnB,GAAI9B,QAAQqD,YAAYvB,GACpB,KAAM,4CAEV,MAAMwB,EAxFV,SAA0BxB,GACtB,IAAK,IAAIyB,EAAI,EAAGA,EAAIhC,EAAOgB,KAAKC,OAAQe,IAAK,CAEzC,GADYhC,EAAOgB,KAAKgB,GAChBzB,KAAOA,EACX,OAAOyB,GAoFHC,CAAiB1B,GAC7BP,EAAOgB,KAAKkB,OAAOH,EAAK,GAEpBxB,IAAOP,EAAOmC,aAAa5B,IACvBP,EAAOgB,KAAKC,OAAS,GAGjBX,EAFAyB,EAAM,EAEI/B,EAAOgB,KAAKe,EAAM,GAAGxB,GAGrBP,EAAOgB,KAAK,GAAGT,IA1C7B6B,CAAcpC,EAAOS,MAAMoB,iBAGnCpD,QAAQ0B,QAAQkC,UAAUC,KAAK,oCAAoCC,SA7CvEvC,EAAOwC,eAgDP,WACI,GAAItC,EAAWD,KAAcD,EAAOmC,aAAa5B,GAC7C,OAEJP,EAAOyC,0BAA0BC,QAEjC,MAAMC,EAAmBvC,EAAE,qBAC3BuC,EAAiBC,SAAS,oBAAoBC,SAAS,UACvDF,EAAiBC,SAAS,oBAAoBC,SAAS,UACvDzC,EAAE,sCAAsCyC,SAAS,mBAAmBnC,GAAG,UAAU,SAAUoC,GACvF9C,EAAOmC,aAAaY,KAAOD,EAAIE,cAAcC,kBAIjD7C,EAAE,6CACG8C,YAAY,0BACZL,SAAS,eACdzC,EAAE,iDACG8C,YAAY,8BACZL,SAAS,gBAlElB7C,EAAOmD,cAEP,SAAuBxC,GACnBA,EAAEG,iBACFH,EAAEI,kBACEf,EAAOoD,eAAc,IACrBhD,EAAEH,GAAUO,IAAI,YAtChC/B,QACKC,OAAO,0DAA2D,CAC/D,yBACA,gDAEH2E,UAAU,YAAa9D,GAE5BA,EAAmBD,QAAU,CAAC,aAAc,sBAAuB,SAAU,iB,iBCT7Eb,QACKC,OAAO,kDAAmD,IAC1DW,QAAQ,6BAA8BiE,GAE3CA,EAA2BhE,QAAU,CAAC,SAKtC,SAASgE,EAA2BC,GAChC,MAAO,CACHC,mBAOJ,SAA4BC,GACxB,OAAOF,EAAMG,IAAI,qBAA2BD,uBAP5CE,kBAUJ,SAA2BC,EAAYH,GACnC,OAAOF,EAAMG,IAAI,qBAA2BD,mCACxC,CACII,OAAS,CACL,WAAcD,MAb1BE,qBAkBJ,SAA8BjE,EAAU4D,GACpC,OAAOF,EAAMQ,KAAK,qBAA2BN,qBAAuC,CAChFG,WAAY/D,EAAS+D,WACrBI,MAAOnE,EAASmE,SApBpBC,qBAwBJ,SAA8BpE,EAAU4D,GACpC,OAAOF,EAAMW,IAAI,qBAA2BT,qBACxC5D,EAASmE,MACT,CACIH,OAAS,CACL,WAAchE,EAAS+D,YAE3BO,QAAS,CACL,eAAgB,iBA/B5BC,qBAoCJ,SAA8BR,EAAYH,GACtC,OAAOF,EAAMc,OAAO,qBAA2BZ,qBAC3C,CACII,OAAS,CACL,WAAcD,S,gCCvDlC,+CAsBA,SAASU,EAAoBtE,EAAQuE,EAAejB,EAA4B1E,EAAQe,EAAc6E,EAAiB3F,GAEnHmB,EAAOyE,WAAa,kBAEpBzE,EAAO0E,kBAAoB,SAAUC,GACjC3E,EAAO4E,eAAiBD,GAG5B3E,EAAOwD,mBAAqB,WAGpBgB,EAAgBK,kBAChBN,EAAcO,wBACNP,EAAcQ,0BACVR,EAAcS,uBAC1B1B,EAA2BE,mBAAmBe,EAAcO,uBAAuB5F,SAAQ,SAAU+F,GACjGjF,EAAOkF,kBAAoBD,KAC5BE,OAAM,SAAUF,GACf,MAAMG,EAAMC,SAASJ,GACrBrG,EAAOuG,MAAMC,EAAKvG,EAAWM,QAAQ,2CAGzCa,EAAOkF,kBAAoB,IAInClF,EAAOsF,QAAO,WACV,OAAOf,EAAcO,yBACtB,WACC9E,EAAOwD,wBAGXxD,EAAOuF,eAAiB,SAAU3B,GAC9BjE,EAAa0B,gBAAgB,CACzBC,MAAOzC,EAAWM,QAAQ,kBAC1BJ,QAASF,EAAWM,QAAQ,0CAA2C,CAACyE,WAAYA,IACpF1C,SAAS,IACVK,OACEC,MAAK,WACF8B,EAA2Bc,qBAAqBR,EAAYW,EAAcO,uBACrE5F,SAAQ,WACLN,EAAOM,QAAQ0E,EAAY/E,EAAWM,QAAQ,4CAC9Ca,EAAOwD,wBACR2B,OAAM,SAAUxE,GACnB/B,EAAOuG,MAAME,SAAS1E,GAAI9B,EAAWM,QAAQ,0CAA2C,CAACyE,WAAYA,YAQzH,SAAS4B,EAAyBxF,EAAQyF,EAAW7G,EAAQ2F,EAAemB,EAASC,EAAUrC,EAA4BsC,EAA8BC,EAAmBC,EAAUnG,EAAcd,GAEhM,MAAMkH,EAAON,EAAUM,QAAU,GACjC/F,EAAO4D,YAAc6B,EAAUO,SAASpC,YAAc,KAAOmC,EAAO,IAAKA,EAAU,IACnF/F,EAAOsB,OAAStB,EAAO4D,WAAa/E,EAAWM,QAAQ,QAAUN,EAAWM,QAAQ,sBAAwB,mBAC5Ga,EAAOiG,cA2FP,WAEIC,GAAU,EAAMrH,EAAWM,QAAQ,gCAAiCN,EAAWM,QAAQ,yBACvFyG,EAA6BO,0BACxBjH,SAAQ,SAAU+F,GACf,MAAMmB,EAAe,GACrBnB,EAAKoB,QAAQC,SAASC,SAAQ,SAAU5F,GACpCyF,EAAazF,EAAE6F,OAAOC,OAAS9F,EAAE+F,UAAUD,SAE/CzG,EAAO2G,WAAaP,KAEvBjB,OAAM,SAAUF,GACbjF,EAAO4G,gBAAkBvB,SAASJ,MAErC4B,SAAQ,WAELX,GAAU,GACVY,QA3GZ9G,EAAOkG,UAAYA,EACnBlG,EAAO+G,iBAAmBA,EAC1B/G,EAAOgH,UAAY,CAACC,aAAc,EAAGC,YAAa,GAClDlH,EAAOmH,iBAAmB,GAE1BnH,EAAOoH,qBAAsB,EAC7BpH,EAAOmC,aAAe,GACtB,IAAIkF,GAAgB,EAGpBrH,EAAOsF,QAAO,WACV,OAAOf,EAAcO,yBACtB,SAAUwC,EAAUC,GACfD,IAAaC,GACb9B,EAAU+B,KAAK,wBAIvB,IAAIC,EAAQ,KACZzH,EAAO0H,OAAS,WACZD,EAAQ9B,GAAS,WACbD,EAAQiC,QAAQC,SACjB,MAGP,MAAMC,EAAyB7H,EAAO8H,IAAI,wBAAwB,SAAUC,IAY5E,SAAqBA,GACZ/H,EAAOmC,aAAa6F,aAChBC,QAAQpJ,EAAWM,QAAQ,kCAG5B+I,OAAOC,oBAAoB,eAAgBC,GAC3CP,IACAlC,EAAS0C,OAAOZ,IAJhBM,EAAMjH,kBAddwH,CAAYP,MAKhB,SAASK,EAAwBL,GACxB/H,EAAOmC,aAAa6F,aACrBD,EAAMQ,aAAc,GAJ5BL,OAAOM,iBAAiB,eAAgBJ,GAoBxCpI,EAAO8H,IAAI,YAAY,SAAUC,GAC7BG,OAAOC,oBAAoB,eAAgBC,GAC3CP,IACAlC,EAAS0C,OAAOZ,MAGpB,MAAMgB,EAAmB,CACrB7E,WAAY,GACZI,MAAO,+QAUP0E,WAAW,EACXC,QAAQ,EACRC,eAAe,EACfZ,YAAY,GA+FhB,IAA2BpE,EAtD3B,SAASsC,EAAU2C,EAAWC,EAAiBC,GAC3C,MAAMC,EAAqBvK,QAAQ0B,QAAQkC,SAAS4G,eAAe,eACnEjJ,EAAOkJ,eAAiBL,EACpBA,GACA7I,EAAOmJ,eAAiBC,KAAKC,MAC7BrJ,EAAOsJ,gBAAiB,EACxBtJ,EAAO8I,gBAAkBA,EACzB9I,EAAO+I,aAAeA,EACtBC,EAAmBnG,SAAS,UAE5B7C,EAAO8I,gBAAkB,GACzB9I,EAAO+I,aAAe,GACtBC,EAAmB9F,YAAY,SAIZ,OAAnBlD,EAAOuJ,SACPvJ,EAAOwJ,SAIf,SAAS1C,IACL9G,EAAOyJ,SAAW,CAACzJ,EAAOmC,cAE1B,MAAM3B,EAAMR,EAAOmC,aAEdnC,EAAOmC,aAAa6B,MAIrBkE,OAAOwB,OAAOC,SAAS3J,EAAOmC,aAAa6B,OAF3CkE,OAAOwB,OAAOC,SAAS,KAK3BhE,GAAS,WACL3F,EAAOmH,iBAAmB,GAC1BnH,EAAOmH,iBAAiByC,UAAYpJ,EAAIoJ,UACxC5J,EAAOmH,iBAAiB0C,aAAerJ,EAAIqJ,aAE3C7J,EAAOmH,iBAAiB2C,OAAStJ,EAAIsJ,OACrC9J,EAAOmH,iBAAiB4C,gBAAkBvJ,EAAIuJ,gBAC9C/J,EAAOmH,iBAAiB6C,KAAOxJ,EAAIwJ,KACnChK,EAAOmH,iBAAiB8C,SAAWzJ,EAAIyJ,SAEvCjK,EAAOmH,iBAAiB+C,aAAe1J,EAAI0J,aAC3ClK,EAAOmH,iBAAiBgD,SAAW3J,EAAI2J,SACvCnK,EAAOmH,iBAAiBiD,UAAY5J,EAAI4J,UACxCpK,EAAOwJ,WACR,GAEExJ,EAAOqK,uBACRnC,OAAOwB,OAAOY,QAAQC,UAAW,GAmBzC,SAASC,IACLxK,EAAOyJ,SAAWzJ,EAAOgB,KAAO,CAACyH,GACjCzI,EAAOmC,aAAe1D,QAAQgM,KAAKhC,GAE/BP,OAAOwB,SACP1J,EAAO0K,SAAS1K,EAAOmC,aAAa6B,OACpC8C,KAGJ9G,EAAOsF,QAAO,WACV,OAAOtF,EAAOmC,aAAa6B,SAC5B,SAAUsD,EAAUC,GACfD,IAAaC,GACbvH,EAAO2K,cAyDnB,SAAS5D,IACLlB,EAAkBkB,iBAAiB6D,KAAKC,UAAU3C,OAAOwB,OAAOoB,aAC3D5L,SAAQ,SAAU+F,GACXxG,QAAQsM,UAAU7C,OAAOwB,SAAWjL,QAAQsM,UAAU9F,IAASA,IAASiD,OAAOwB,OAAOoB,YACtF5C,OAAOwB,OAAOC,SAAS1E,MAG9BE,OAAM,SAAUF,GACb,MAAMG,EAAMC,SAASJ,GAErB,OADArG,EAAOuG,MAAMC,EAAKvG,EAAWM,QAAQ,qCAC9B,KA+BnB,SAAS6L,IACL1H,EAA2BQ,qBAAqB9D,EAAOmC,aAAcoC,EAAcO,uBAAuB5F,SAAQ,WAC9Gc,EAAOmC,aAAa6F,YAAa,EACjChI,EAAOmC,aAAayG,eAAgB,EACpChK,EAAOM,QAAQc,EAAOmC,aAAayB,WAAY/E,EAAWM,QAAQ,qCAClEa,EAAO0H,YACRvC,OAAM,SAAUF,GACf,MAAMG,EAAMC,SAASJ,GACrBrG,EAAOuG,MAAMC,EAAKvG,EAAWM,QAAQ,mCAAoC,CAACyE,WAAY5D,EAAOmC,aAAayB,iBAlOlH5D,EAAOiL,QAAU,aAKjBjL,EAAO0K,SAAW,SAAU1G,GAExBkE,OAAOwB,OAAOC,SAAS3F,GAAgB,MAGvChE,EAAO4D,YAkFgBA,EAjFL5D,EAAO4D,WAkFzBN,EAA2BK,kBAAkBC,EAAYW,EAAcO,uBAAwB5F,SAAQ,SAAUgM,GAC7GzC,EAAiBzE,MAAQkH,EACzBzC,EAAiB7E,WAAaA,EAE9B6E,EAAiBG,eAAiBhF,EAElC4G,OACDrF,OAAM,SAAUF,GACf,MAAMG,EAAMC,SAASJ,GACrBrG,EAAOuG,MAAMC,EAAKvG,EAAWM,QAAQ,qCAAsC,CAACyE,WAAY5D,EAAOmC,aAAayB,cAC5G5D,EAAO4G,gBAAkBxB,MA1F7BoF,IAgHJxK,EAAOmL,aAAe,YAgFtB,WACI,IAJOjD,OAAOwB,QAA2C,WAAjCxB,OAAOwB,OAAO0B,eAMlC,OADAxM,EAAOuG,MAAMtG,EAAWM,QAAQ,oCAAqCN,EAAWM,QAAQ,wBACjF,EAGX,OAAO,GArFFkM,KAIArL,EAAOmC,aAAayB,YAqFzB5D,EAAOsL,qBAAuBxF,EAASyF,WAAWvL,EAAOmC,aAAayB,YAhF9D5D,EAAOsL,sBAKXtL,EAAOmC,aAAayG,cA2FjBtF,EACFE,mBAAmBe,EAAcO,uBAC7B5F,SAAQ,SAAU+F,GACfoC,EAAgBpC,EAAK3C,KAAMkJ,GAAeA,IAAexL,EAAOmC,aAAayB,eACtFuB,OAAM,SAAUF,GACf,MAAMG,EAAMC,SAASJ,GACrBrG,EAAOuG,MAAMC,EAAKvG,EAAWM,QAAQ,2CA/FhCqC,KAAK,KACF,GAAI6F,EAAe,CACf,MAAMoE,EAAW,qBAAW5M,EAAWM,QAAQ,0CAA2C,CAACyE,WAAY5D,EAAOmC,aAAayB,cAC3HjE,EAAa0B,gBAAgB,CACzBC,MAAOzC,EAAWM,QAAQ,uBAC1BJ,QAAS0M,EACTvK,SAAS,IACVK,OACEC,MAAK,WACFwJ,YAGRA,MAIPhL,EAAOmC,aAAa6F,WAYrBhI,EAAO0H,SAXPpE,EAA2BW,qBAAqBjE,EAAOmC,aAAcoC,EAAcO,uBAAuB5F,SAAQ,WAC9Gc,EAAOmC,aAAa6F,YAAa,EACjChI,EAAOmC,aAAayG,eAAgB,EACpChK,EAAOM,QAAQc,EAAOmC,aAAayB,WAAY/E,EAAWM,QAAQ,uCAClEa,EAAO0H,YACRvC,OAAM,SAAUF,GACf,MAAMG,EAAMC,SAASJ,GACrBrG,EAAOuG,MAAMC,EAAKvG,EAAWM,QAAQ,mCAAoC,CAACyE,WAAY5D,EAAOmC,aAAayB,mBAnClHhF,EAAOuG,MAAMtG,EAAWM,QAAQ,qCA4DxCiB,EAAE,YAAYM,GAAG,SAAS,WACtBiF,GAAS,WACLoB,MACD,MAGP/G,EAAO2K,SAAW,WACd3K,EAAOmC,aAAa6F,YAAa,GAjVzCvJ,QAAQC,OAAO,gDAPC,CACZ,eACA,+CACA,4CACA,UAGqE,CACrE,0CAECqB,WAAW,sBAAuBuE,GAClCvE,WAAW,2BAA4ByF,GAE5ClB,EAAoBhF,QAAU,CAAC,SAAU,gBAAiB,6BAA8B,SAAU,eAAgB,kBAAmB,cAoDrIkG,EAAyBlG,QAAU,CAAC,SAAU,YAAa,SAAU,gBAAiB,UAAW,WAAY,6BAA8B,+BAAgC,oBAAqB,WAAY,eAAgB","file":"18.63478730d60e02069d90.bundle.js","sourcesContent":["import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/resources/controllers';\nimport 'angular/core/services/repositories.service';\nimport 'angular/sparql-template/controllers';\nimport 'angular/rest/sparql-templates.rest.service';\nimport 'angular/core/directives/queryeditor/sparql-tab.directive';\nimport 'angular/core/directives/queryeditor/query-editor.controller';\nimport 'angular/core/directives/queryeditor/query-editor.directive';\nimport 'angular/utils/uri-utils';\n\nconst modules = [\n 'toastr',\n 'ui.bootstrap',\n 'graphdb.framework.sparql-template.controllers',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.core.directives',\n 'graphdb.framework.rest.sparql-templates.service',\n 'graphdb.framework.core.directives.queryeditor.controllers',\n 'graphdb.framework.core.directives.queryeditor.sparqltab',\n 'graphdb.framework.core.directives.queryeditor.queryeditor',\n 'graphdb.framework.utils.uriutils'\n];\n\nangular.module('graphdb.framework.sparql-template', modules);\n\n","angular\n .module('graphdb.framework.utils.notifications', [])\n .factory('Notifications', Notifications);\n\nNotifications.$inject = ['toastr', '$translate'];\n\nfunction Notifications(toastr, $translate) {\n return {\n showToastMessageWithDelay\n };\n\n /**\n * This method will show message with tiny delay and only after completion\n * of latter redirection to \"graphs-visualizations\" page will happen.\n * @param {string} message The message to be displayed.\n * @return {Promise<any>}\n */\n function showToastMessageWithDelay(message) {\n return new Promise((r) => {\n toastr.success($translate.instant(message));\n setTimeout(r, 200);\n });\n }\n}\n","import 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.core.directives.queryeditor.sparqltab', [\n 'graphdb.framework.core',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .directive('sparqlTab', sparqlTabDirective);\n\nsparqlTabDirective.$inject = ['$rootScope', 'LocalStorageAdapter', 'LSKeys', 'ModalService'];\n\nfunction sparqlTabDirective($rootScope, LocalStorageAdapter, LSKeys, ModalService) {\n const SparqlTabCtrl = ['$scope', '$element', '$rootScope', 'ModalService', 'toastr', '$translate', function ($scope, $element, $rootScope, ModalService, toastr, $translate) {\n $scope.state = {};\n\n function getQueryID(element) {\n return $(element).attr('data-id');\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 $($element).on('shown.bs.tab', function (e) {\n $rootScope.$broadcast('tabAction', e);\n });\n\n $scope.deleteTab = deleteTab;\n $scope.editCurrentTab = editCurrentTab;\n $scope.selectThisTab = selectThisTab;\n\n function selectThisTab(e) {\n e.preventDefault();\n e.stopPropagation();\n if ($scope.isTabChangeOk(false)) {\n $($element).tab('show');\n }\n }\n\n function selectTab(id) {\n $('a[data-id = \"' + id + '\"]').tab('show');\n }\n\n function deleteTab(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if ($scope.tabs.length < 2) {\n toastr.warning($translate.instant('sparql.tab.directive.close.last.warning'));\n return;\n }\n\n if (e.shiftKey) {\n $scope.state.selectedTabId = getQueryID($element);\n\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm'),\n message: $translate.instant('sparql.tab.directive.delete.all.tabs.warning'),\n warning: true\n }).result.then(function () {\n deleteAllTabsExceptSelected($scope.state.selectedTabId);\n });\n } else {\n $scope.state.idForDelete = getQueryID($element);\n\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm'),\n message: $translate.instant('sparql.tab.directive.close.tab.warning'),\n warning: true\n }).result.then(function () {\n deleteTabByID($scope.state.idForDelete);\n });\n }\n angular.element(document).find('.CodeMirror textarea:first-child').focus();\n }\n\n function editCurrentTab() {\n if (getQueryID($element) !== $scope.currentQuery.id) {\n return;\n }\n $scope.editCurrentlySelectedOnly.$show();\n //fix for buttons for edit\n const $editableButtons = $(\".editable-buttons\");\n $editableButtons.children(\".btn.btn-primary\").addClass('btn-sm');\n $editableButtons.children(\".btn.btn-default\").addClass('btn-sm');\n $('.editable-controls .editable-input').addClass('form-control-sm').on('change', function ($el) {\n $scope.currentQuery.name = $el.currentTarget.$$currentValue;\n });\n //$('.editable-buttons').css('margin-top', '5px');\n //$('.editable-input.editable-has-buttons').css('width', '50%');\n $('.editable-buttons .glyphicon.glyphicon-ok')\n .removeClass('glyphicon glyphicon-ok')\n .addClass('fa fa-check');\n $('.editable-buttons .glyphicon.glyphicon-remove')\n .removeClass('glyphicon glyphicon-remove')\n .addClass('fa fa-close');\n }\n\n function deleteTabByID(id) {\n if (angular.isUndefined(id)) {\n throw 'Delete by id was called with undefined id';\n }\n const idx = findTabIndexByID(id);\n $scope.tabs.splice(idx, 1);\n\n if (id === $scope.currentQuery.id) {\n if ($scope.tabs.length > 0) {\n if (idx > 0) {\n // select previous tab if we deleted any but the first tab\n selectTab($scope.tabs[idx - 1].id);\n } else {\n // select first tab if we deleted the first tab\n selectTab($scope.tabs[0].id);\n }\n }\n }\n }\n\n function deleteAllTabsExceptSelected(id) {\n $scope.tabs = $scope.tabs.filter(function (obj) {\n if (obj.id === id) {\n return obj;\n }\n });\n selectTab($scope.tabs[0].id);\n LocalStorageAdapter.set(LSKeys.TABS_STATE, $scope.tabs);\n $rootScope.$broadcast('deleteAllexeptSelected', $scope.tabs);\n }\n }];\n\n return {\n restrict: 'AE',\n // for some reason when you extract this template in a file and use templateUrl it selects all tabs when editing the tab name, not only the currently selected one\n template: '<a class=\"nav-link\" role=\"tab\" data-toggle=\"tab\" blur=\"submit\" editable-text=\"tab.name\" e-form=\"editCurrentlySelectedOnly\" ng-click=\"selectThisTab($event)\" ng-dblclick=\"editCurrentTab()\" ><span ng-class=\"{\\'text-muted\\': !tab.name}\">{{ tab.name || \\'sparql.tab.directive.unnamed.tab.title\\' | translate}}</span><button type=\"button\" ng-click=\"deleteTab($event)\" class=\"btn btn-link btn-sm secondary delete-sparql-tab-btn\" title=\"Delete tab\"><i class=\"icon-close\"></i></button></a>',\n replace: true,\n controller: SparqlTabCtrl\n };\n}\n","angular\n .module('graphdb.framework.rest.sparql-templates.service', [])\n .factory('SparqlTemplatesRestService', SparqlTemplatesRestService);\n\nSparqlTemplatesRestService.$inject = ['$http'];\n\nconst REPOSITORIES_BASE_URL = 'rest/repositories/';\nconst SPARQL_TEMPLATES_URL = '/sparql-templates';\n\nfunction SparqlTemplatesRestService($http) {\n return {\n getSparqlTemplates,\n getSparqlTemplate,\n createSparqlTemplate,\n updateSparqlTemplate,\n deleteSparqlTemplate\n };\n\n function getSparqlTemplates(repositoryID) {\n return $http.get(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}`);\n }\n\n function getSparqlTemplate(templateID, repositoryID) {\n return $http.get(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}/configuration`,\n {\n params : {\n 'templateID': templateID\n }\n });\n }\n\n function createSparqlTemplate(template, repositoryID) {\n return $http.post(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}`, {\n templateID: template.templateID,\n query: template.query\n });\n }\n\n function updateSparqlTemplate(template, repositoryID) {\n return $http.put(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}`,\n template.query,\n {\n params : {\n 'templateID': template.templateID\n },\n headers: {\n 'Content-Type': 'text/plain'\n }\n });\n }\n\n function deleteSparqlTemplate(templateID, repositoryID) {\n return $http.delete(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}`,\n {\n params : {\n 'templateID': templateID\n }\n });\n }\n}\n","import 'angular/core/services';\nimport 'angular/core/services/repositories.service';\nimport 'angular/rest/monitoring.rest.service';\nimport 'angular/utils/notifications';\nimport 'angular/utils/uri-utils';\nimport {decodeHTML} from \"../../../app\";\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.rest.monitoring.service',\n 'toastr'\n];\n\nangular.module('graphdb.framework.sparql-template.controllers', modules, [\n 'graphdb.framework.utils.notifications'\n])\n .controller('SparqlTemplatesCtrl', SparqlTemplatesCtrl)\n .controller('SparqlTemplateCreateCtrl', SparqlTemplateCreateCtrl);\n\nSparqlTemplatesCtrl.$inject = ['$scope', '$repositories', 'SparqlTemplatesRestService', 'toastr', 'ModalService', '$licenseService', '$translate'];\n\nfunction SparqlTemplatesCtrl($scope, $repositories, SparqlTemplatesRestService, toastr, ModalService, $licenseService, $translate) {\n\n $scope.pluginName = 'sparql-template';\n\n $scope.setPluginIsActive = function (isPluginActive) {\n $scope.pluginIsActive = isPluginActive;\n }\n\n $scope.getSparqlTemplates = function () {\n // Only do this if there is an active repo that isn't an Ontop repo.\n // Ontop repos doesn't support update operations.\n if ($licenseService.isLicenseValid() &&\n $repositories.getActiveRepository()\n && !$repositories.isActiveRepoOntopType()\n && !$repositories.isActiveRepoFedXType()) {\n SparqlTemplatesRestService.getSparqlTemplates($repositories.getActiveRepository()).success(function (data) {\n $scope.sparqlTemplateIds = data;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('sparql.template.get.templates.error'));\n });\n } else {\n $scope.sparqlTemplateIds = [];\n }\n };\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function () {\n $scope.getSparqlTemplates();\n });\n\n $scope.deleteTemplate = function (templateID) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.warning'),\n message: $translate.instant('sparql.template.delete.template.warning', {templateID: templateID}),\n warning: true\n }).result\n .then(function () {\n SparqlTemplatesRestService.deleteSparqlTemplate(templateID, $repositories.getActiveRepository())\n .success(function () {\n toastr.success(templateID, $translate.instant('sparql.template.delete.template.success'));\n $scope.getSparqlTemplates();\n }).error(function (e) {\n toastr.error(getError(e), $translate.instant('sparql.template.delete.template.failure', {templateID: templateID}));\n });\n });\n };\n}\n\nSparqlTemplateCreateCtrl.$inject = ['$scope', '$location', 'toastr', '$repositories', '$window', '$timeout', 'SparqlTemplatesRestService', 'RDF4JRepositoriesRestService', 'SparqlRestService', 'UriUtils', 'ModalService', '$translate'];\n\nfunction SparqlTemplateCreateCtrl($scope, $location, toastr, $repositories, $window, $timeout, SparqlTemplatesRestService, RDF4JRepositoriesRestService, SparqlRestService, UriUtils, ModalService, $translate) {\n\n const hash = $location.hash() || '';\n $scope.templateID = ($location.search().templateID || '') + (hash ? (`#${hash}`) : '');\n $scope.title = ($scope.templateID ? $translate.instant('edit') : $translate.instant('common.create.btn')) + ' SPARQL Template';\n $scope.getNamespaces = getNamespaces;\n $scope.setLoader = setLoader;\n $scope.addKnownPrefixes = addKnownPrefixes;\n $scope.noPadding = {paddingRight: 0, paddingLeft: 0};\n $scope.currentTabConfig = {};\n // This property is obligatory in order to show YASQUE and YASR properly\n $scope.orientationViewMode = true;\n $scope.currentQuery = {};\n let templateExist = false;\n\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $location.path('/sparql-templates');\n }\n });\n\n let timer = null;\n $scope.goBack = function () {\n timer = $timeout(function () {\n $window.history.back();\n }, 1000);\n };\n\n const locationChangeListener = $scope.$on('$locationChangeStart', function (event) {\n confirmExit(event);\n });\n\n window.addEventListener('beforeunload', showBeforeunloadMessage);\n\n function showBeforeunloadMessage(event) {\n if (!$scope.currentQuery.isPristine) {\n event.returnValue = true;\n }\n }\n\n function confirmExit(event) {\n if (!$scope.currentQuery.isPristine) {\n if (!confirm($translate.instant('jdbc.warning.unsaved.changes'))) {\n event.preventDefault();\n } else {\n window.removeEventListener('beforeunload', showBeforeunloadMessage);\n locationChangeListener();\n $timeout.cancel(timer);\n }\n }\n }\n\n $scope.$on('$destroy', function (event) {\n window.removeEventListener('beforeunload', showBeforeunloadMessage);\n locationChangeListener();\n $timeout.cancel(timer);\n });\n\n const defaultTabConfig = {\n templateID: '',\n query: 'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\\n' +\n 'PREFIX ex: <http://example.com#>\\n' +\n 'DELETE {\\n' +\n ' ?subject ex:myPredicate ?oldValue .\\n' +\n '} INSERT {\\n' +\n ' ?subject ex:myPredicate ?newValue .\\n' +\n '} WHERE {\\n' +\n ' ?id rdf:type ex:MyType .\\n' +\n ' ?subject ex:isRelatedTo ?id .\\n' +\n '}\\n',\n inference: true,\n sameAs: true,\n isNewTemplate: true,\n isPristine: true\n };\n\n $scope.saveTab = function () {\n // Should have this empty function in this view\n };\n\n // Called when user clicks on a sample query\n $scope.setQuery = function (query) {\n // Hack for YASQE bug\n window.editor.setValue(query ? query : ' ');\n };\n\n if ($scope.templateID) {\n getSparqlTemplate($scope.templateID);\n } else {\n setQueryFromTabConfig();\n }\n\n // FIXME: this is copy-pasted in graphs-config.controller.js and query-editor.controller.js. Find a way to avoid duplications\n function getNamespaces() {\n // Signals the namespaces are to be fetched => loader will be shown\n setLoader(true, $translate.instant('common.refreshing.namespaces'), $translate.instant('common.extra.message'));\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 loadTab();\n });\n }\n\n function setLoader(isRunning, progressMessage, extraMessage) {\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 yasrInnerContainer.addClass('hide');\n } else {\n $scope.progressMessage = '';\n $scope.extraMessage = '';\n yasrInnerContainer.removeClass('hide');\n }\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 loadTab() {\n $scope.tabsData = [$scope.currentQuery];\n\n const tab = $scope.currentQuery;\n\n if (!$scope.currentQuery.query) {\n // hack for YASQE bug\n window.editor.setValue(' ');\n } else {\n window.editor.setValue($scope.currentQuery.query);\n }\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.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.$apply();\n }, 0);\n\n if (!$scope.canWriteActiveRepo()) {\n window.editor.options.readOnly = true;\n }\n }\n\n function getSparqlTemplate(templateID) {\n SparqlTemplatesRestService.getSparqlTemplate(templateID, $repositories.getActiveRepository() ).success(function (templateContent) {\n defaultTabConfig.query = templateContent;\n defaultTabConfig.templateID = templateID;\n\n defaultTabConfig.isNewTemplate = !templateID;\n\n setQueryFromTabConfig();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('sparql.template.get.template.error', {templateID: $scope.currentQuery.templateID}));\n $scope.repositoryError = msg;\n });\n }\n\n function setQueryFromTabConfig() {\n $scope.tabsData = $scope.tabs = [defaultTabConfig];\n $scope.currentQuery = angular.copy(defaultTabConfig);\n\n if (window.editor) {\n $scope.setQuery($scope.currentQuery.query);\n loadTab();\n }\n\n $scope.$watch(function () {\n return $scope.currentQuery.query;\n }, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $scope.setDirty();\n }\n });\n }\n\n $scope.saveTemplate = function () {\n if (!validateQuery()) {\n return;\n }\n\n if (!$scope.currentQuery.templateID) {\n toastr.error($translate.instant('sparql.template.iri.constraint'));\n return;\n } else {\n validateTemplateID();\n if ($scope.isInvalidTemplateId) {\n return;\n }\n }\n\n if ($scope.currentQuery.isNewTemplate) {\n checkIfTemplateExists()\n .then(() => {\n if (templateExist) {\n const modalMsg = decodeHTML($translate.instant('sparql.template.existing.template.error', {templateID: $scope.currentQuery.templateID}));\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm.save'),\n message: modalMsg,\n warning: true\n }).result\n .then(function () {\n saveNewTemplate();\n });\n } else {\n saveNewTemplate();\n }\n });\n } else {\n if (!$scope.currentQuery.isPristine) {\n SparqlTemplatesRestService.updateSparqlTemplate($scope.currentQuery, $repositories.getActiveRepository()).success(function () {\n $scope.currentQuery.isPristine = true;\n $scope.currentQuery.isNewTemplate = false;\n toastr.success($scope.currentQuery.templateID, $translate.instant('update.sparql.template.success.msg'));\n $scope.goBack();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('save.sparql.template.failure.msg', {templateID: $scope.currentQuery.templateID}));\n });\n } else {\n // No changes to template query, go back to\n $scope.goBack();\n }\n }\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, $translate.instant('common.add.known.prefixes.error'));\n return true;\n });\n }\n\n $('textarea').on('paste', function () {\n $timeout(function () {\n addKnownPrefixes();\n }, 0);\n });\n\n $scope.setDirty = function () {\n $scope.currentQuery.isPristine = false;\n };\n\n function hasValidQuery() {\n return window.editor && window.editor.getQueryMode() === 'update';\n }\n\n function validateQuery() {\n if (!hasValidQuery()) {\n toastr.error($translate.instant('sparql.template.query.constraint'), $translate.instant('jdbc.invalid.query'));\n return false;\n }\n\n return true;\n }\n\n function validateTemplateID() {\n $scope.isInvalidTemplateId = !UriUtils.isValidIri($scope.currentQuery.templateID);\n }\n\n function saveNewTemplate() {\n SparqlTemplatesRestService.createSparqlTemplate($scope.currentQuery, $repositories.getActiveRepository()).success(function () {\n $scope.currentQuery.isPristine = true;\n $scope.currentQuery.isNewTemplate = false;\n toastr.success($scope.currentQuery.templateID, $translate.instant('save.sparql.template.success.msg'));\n $scope.goBack();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('save.sparql.template.failure.msg', {templateID: $scope.currentQuery.templateID}));\n });\n }\n\n function checkIfTemplateExists() {\n return SparqlTemplatesRestService\n .getSparqlTemplates($repositories.getActiveRepository())\n .success(function (data) {\n templateExist = data.find((templateId) => templateId === $scope.currentQuery.templateID);\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('sparql.template.get.templates.error'));\n });\n }\n}\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/js/angular/sparql-template/app.js","webpack:///./src/js/angular/utils/notifications.js","webpack:///./src/js/angular/core/directives/queryeditor/sparql-tab.directive.js","webpack:///./src/js/angular/rest/sparql-templates.rest.service.js","webpack:///./src/js/angular/sparql-template/controllers.js"],"names":["angular","module","Notifications","toastr","$translate","showToastMessageWithDelay","message","Promise","r","success","instant","setTimeout","factory","$inject","sparqlTabDirective","$rootScope","LocalStorageAdapter","LSKeys","ModalService","restrict","template","replace","controller","$scope","$element","getQueryID","element","$","attr","selectTab","id","tab","state","on","e","$broadcast","deleteTab","preventDefault","stopPropagation","tabs","length","warning","shiftKey","selectedTabId","openSimpleModal","title","result","then","filter","obj","set","TABS_STATE","idForDelete","isUndefined","idx","i","findTabIndexByID","splice","currentQuery","deleteTabByID","document","find","focus","editCurrentTab","editCurrentlySelectedOnly","$show","$editableButtons","children","addClass","$el","name","currentTarget","$$currentValue","removeClass","selectThisTab","isTabChangeOk","directive","SparqlTemplatesRestService","$http","getSparqlTemplates","repositoryID","get","getSparqlTemplate","templateID","params","createSparqlTemplate","post","query","updateSparqlTemplate","put","headers","deleteSparqlTemplate","delete","SparqlTemplatesCtrl","$repositories","$licenseService","pluginName","setPluginIsActive","isPluginActive","pluginIsActive","isLicenseValid","getActiveRepository","isActiveRepoOntopType","isActiveRepoFedXType","data","sparqlTemplateIds","error","msg","getError","$watch","deleteTemplate","SparqlTemplateCreateCtrl","$location","$window","$timeout","RDF4JRepositoriesRestService","SparqlRestService","UriUtils","hash","search","getNamespaces","setLoader","getRepositoryNamespaces","usedPrefixes","results","bindings","forEach","prefix","value","namespace","namespaces","repositoryError","finally","loadTab","addKnownPrefixes","noPadding","paddingRight","paddingLeft","currentTabConfig","orientationViewMode","templateExist","newValue","oldValue","path","timer","goBack","history","back","locationChangeListener","$on","event","isPristine","confirm","window","removeEventListener","showBeforeunloadMessage","cancel","confirmExit","returnValue","addEventListener","defaultTabConfig","inference","sameAs","isNewTemplate","isRunning","progressMessage","extraMessage","yasrInnerContainer","getElementById","queryIsRunning","queryStartTime","Date","now","countTimeouted","$$phase","$apply","tabsData","editor","setValue","queryType","resultsCount","offset","allResultsCount","page","pageSize","timeFinished","timeTook","sizeDelta","canWriteActiveRepo","options","readOnly","setQueryFromTabConfig","copy","setQuery","setDirty","JSON","stringify","getValue","isDefined","saveNewTemplate","saveTab","templateContent","saveTemplate","getQueryMode","validateQuery","isInvalidTemplateId","isValidIri","templateId","modalMsg"],"mappings":"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","file":"18.d6e541cf8e651a6d223e.bundle.js","sourcesContent":["import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/resources/controllers';\nimport 'angular/core/services/repositories.service';\nimport 'angular/sparql-template/controllers';\nimport 'angular/rest/sparql-templates.rest.service';\nimport 'angular/core/directives/queryeditor/sparql-tab.directive';\nimport 'angular/core/directives/queryeditor/query-editor.controller';\nimport 'angular/core/directives/queryeditor/query-editor.directive';\nimport 'angular/utils/uri-utils';\n\nconst modules = [\n 'toastr',\n 'ui.bootstrap',\n 'graphdb.framework.sparql-template.controllers',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.core.directives',\n 'graphdb.framework.rest.sparql-templates.service',\n 'graphdb.framework.core.directives.queryeditor.controllers',\n 'graphdb.framework.core.directives.queryeditor.sparqltab',\n 'graphdb.framework.core.directives.queryeditor.queryeditor',\n 'graphdb.framework.utils.uriutils'\n];\n\nangular.module('graphdb.framework.sparql-template', modules);\n\n","angular\n .module('graphdb.framework.utils.notifications', [])\n .factory('Notifications', Notifications);\n\nNotifications.$inject = ['toastr', '$translate'];\n\nfunction Notifications(toastr, $translate) {\n return {\n showToastMessageWithDelay\n };\n\n /**\n * This method will show message with tiny delay and only after completion\n * of latter redirection to \"graphs-visualizations\" page will happen.\n * @param {string} message The message to be displayed.\n * @return {Promise<any>}\n */\n function showToastMessageWithDelay(message) {\n return new Promise((r) => {\n toastr.success($translate.instant(message));\n setTimeout(r, 200);\n });\n }\n}\n","import 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.core.directives.queryeditor.sparqltab', [\n 'graphdb.framework.core',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .directive('sparqlTab', sparqlTabDirective);\n\nsparqlTabDirective.$inject = ['$rootScope', 'LocalStorageAdapter', 'LSKeys', 'ModalService'];\n\nfunction sparqlTabDirective($rootScope, LocalStorageAdapter, LSKeys, ModalService) {\n const SparqlTabCtrl = ['$scope', '$element', '$rootScope', 'ModalService', 'toastr', '$translate', function ($scope, $element, $rootScope, ModalService, toastr, $translate) {\n $scope.state = {};\n\n function getQueryID(element) {\n return $(element).attr('data-id');\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 $($element).on('shown.bs.tab', function (e) {\n $rootScope.$broadcast('tabAction', e);\n });\n\n $scope.deleteTab = deleteTab;\n $scope.editCurrentTab = editCurrentTab;\n $scope.selectThisTab = selectThisTab;\n\n function selectThisTab(e) {\n e.preventDefault();\n e.stopPropagation();\n if ($scope.isTabChangeOk(false)) {\n $($element).tab('show');\n }\n }\n\n function selectTab(id) {\n $('a[data-id = \"' + id + '\"]').tab('show');\n }\n\n function deleteTab(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if ($scope.tabs.length < 2) {\n toastr.warning($translate.instant('sparql.tab.directive.close.last.warning'));\n return;\n }\n\n if (e.shiftKey) {\n $scope.state.selectedTabId = getQueryID($element);\n\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm'),\n message: $translate.instant('sparql.tab.directive.delete.all.tabs.warning'),\n warning: true\n }).result.then(function () {\n deleteAllTabsExceptSelected($scope.state.selectedTabId);\n });\n } else {\n $scope.state.idForDelete = getQueryID($element);\n\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm'),\n message: $translate.instant('sparql.tab.directive.close.tab.warning'),\n warning: true\n }).result.then(function () {\n deleteTabByID($scope.state.idForDelete);\n });\n }\n angular.element(document).find('.CodeMirror textarea:first-child').focus();\n }\n\n function editCurrentTab() {\n if (getQueryID($element) !== $scope.currentQuery.id) {\n return;\n }\n $scope.editCurrentlySelectedOnly.$show();\n //fix for buttons for edit\n const $editableButtons = $(\".editable-buttons\");\n $editableButtons.children(\".btn.btn-primary\").addClass('btn-sm');\n $editableButtons.children(\".btn.btn-default\").addClass('btn-sm');\n $('.editable-controls .editable-input').addClass('form-control-sm').on('change', function ($el) {\n $scope.currentQuery.name = $el.currentTarget.$$currentValue;\n });\n //$('.editable-buttons').css('margin-top', '5px');\n //$('.editable-input.editable-has-buttons').css('width', '50%');\n $('.editable-buttons .glyphicon.glyphicon-ok')\n .removeClass('glyphicon glyphicon-ok')\n .addClass('fa fa-check');\n $('.editable-buttons .glyphicon.glyphicon-remove')\n .removeClass('glyphicon glyphicon-remove')\n .addClass('fa fa-close');\n }\n\n function deleteTabByID(id) {\n if (angular.isUndefined(id)) {\n throw 'Delete by id was called with undefined id';\n }\n const idx = findTabIndexByID(id);\n $scope.tabs.splice(idx, 1);\n\n if (id === $scope.currentQuery.id) {\n if ($scope.tabs.length > 0) {\n if (idx > 0) {\n // select previous tab if we deleted any but the first tab\n selectTab($scope.tabs[idx - 1].id);\n } else {\n // select first tab if we deleted the first tab\n selectTab($scope.tabs[0].id);\n }\n }\n }\n }\n\n function deleteAllTabsExceptSelected(id) {\n $scope.tabs = $scope.tabs.filter(function (obj) {\n if (obj.id === id) {\n return obj;\n }\n });\n selectTab($scope.tabs[0].id);\n LocalStorageAdapter.set(LSKeys.TABS_STATE, $scope.tabs);\n $rootScope.$broadcast('deleteAllexeptSelected', $scope.tabs);\n }\n }];\n\n return {\n restrict: 'AE',\n // for some reason when you extract this template in a file and use templateUrl it selects all tabs when editing the tab name, not only the currently selected one\n template: '<a class=\"nav-link\" role=\"tab\" data-toggle=\"tab\" blur=\"submit\" editable-text=\"tab.name\" e-form=\"editCurrentlySelectedOnly\" ng-click=\"selectThisTab($event)\" ng-dblclick=\"editCurrentTab()\" ><span ng-class=\"{\\'text-muted\\': !tab.name}\">{{ tab.name || \\'sparql.tab.directive.unnamed.tab.title\\' | translate}}</span><button type=\"button\" ng-click=\"deleteTab($event)\" class=\"btn btn-link btn-sm secondary delete-sparql-tab-btn\" title=\"Delete tab\"><i class=\"icon-close\"></i></button></a>',\n replace: true,\n controller: SparqlTabCtrl\n };\n}\n","angular\n .module('graphdb.framework.rest.sparql-templates.service', [])\n .factory('SparqlTemplatesRestService', SparqlTemplatesRestService);\n\nSparqlTemplatesRestService.$inject = ['$http'];\n\nconst REPOSITORIES_BASE_URL = 'rest/repositories/';\nconst SPARQL_TEMPLATES_URL = '/sparql-templates';\n\nfunction SparqlTemplatesRestService($http) {\n return {\n getSparqlTemplates,\n getSparqlTemplate,\n createSparqlTemplate,\n updateSparqlTemplate,\n deleteSparqlTemplate\n };\n\n function getSparqlTemplates(repositoryID) {\n return $http.get(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}`);\n }\n\n function getSparqlTemplate(templateID, repositoryID) {\n return $http.get(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}/configuration`,\n {\n params : {\n 'templateID': templateID\n }\n });\n }\n\n function createSparqlTemplate(template, repositoryID) {\n return $http.post(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}`, {\n templateID: template.templateID,\n query: template.query\n });\n }\n\n function updateSparqlTemplate(template, repositoryID) {\n return $http.put(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}`,\n template.query,\n {\n params : {\n 'templateID': template.templateID\n },\n headers: {\n 'Content-Type': 'text/plain'\n }\n });\n }\n\n function deleteSparqlTemplate(templateID, repositoryID) {\n return $http.delete(`${REPOSITORIES_BASE_URL}${repositoryID}${SPARQL_TEMPLATES_URL}`,\n {\n params : {\n 'templateID': templateID\n }\n });\n }\n}\n","import 'angular/core/services';\nimport 'angular/core/services/repositories.service';\nimport 'angular/rest/monitoring.rest.service';\nimport 'angular/utils/notifications';\nimport 'angular/utils/uri-utils';\nimport {decodeHTML} from \"../../../app\";\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.rest.monitoring.service',\n 'toastr'\n];\n\nangular.module('graphdb.framework.sparql-template.controllers', modules, [\n 'graphdb.framework.utils.notifications'\n])\n .controller('SparqlTemplatesCtrl', SparqlTemplatesCtrl)\n .controller('SparqlTemplateCreateCtrl', SparqlTemplateCreateCtrl);\n\nSparqlTemplatesCtrl.$inject = ['$scope', '$repositories', 'SparqlTemplatesRestService', 'toastr', 'ModalService', '$licenseService', '$translate'];\n\nfunction SparqlTemplatesCtrl($scope, $repositories, SparqlTemplatesRestService, toastr, ModalService, $licenseService, $translate) {\n\n $scope.pluginName = 'sparql-template';\n\n $scope.setPluginIsActive = function (isPluginActive) {\n $scope.pluginIsActive = isPluginActive;\n }\n\n $scope.getSparqlTemplates = function () {\n // Only do this if there is an active repo that isn't an Ontop repo.\n // Ontop repos doesn't support update operations.\n if ($licenseService.isLicenseValid() &&\n $repositories.getActiveRepository()\n && !$repositories.isActiveRepoOntopType()\n && !$repositories.isActiveRepoFedXType()) {\n SparqlTemplatesRestService.getSparqlTemplates($repositories.getActiveRepository()).success(function (data) {\n $scope.sparqlTemplateIds = data;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('sparql.template.get.templates.error'));\n });\n } else {\n $scope.sparqlTemplateIds = [];\n }\n };\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function () {\n $scope.getSparqlTemplates();\n });\n\n $scope.deleteTemplate = function (templateID) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.warning'),\n message: $translate.instant('sparql.template.delete.template.warning', {templateID: templateID}),\n warning: true\n }).result\n .then(function () {\n SparqlTemplatesRestService.deleteSparqlTemplate(templateID, $repositories.getActiveRepository())\n .success(function () {\n toastr.success(templateID, $translate.instant('sparql.template.delete.template.success'));\n $scope.getSparqlTemplates();\n }).error(function (e) {\n toastr.error(getError(e), $translate.instant('sparql.template.delete.template.failure', {templateID: templateID}));\n });\n });\n };\n}\n\nSparqlTemplateCreateCtrl.$inject = ['$scope', '$location', 'toastr', '$repositories', '$window', '$timeout', 'SparqlTemplatesRestService', 'RDF4JRepositoriesRestService', 'SparqlRestService', 'UriUtils', 'ModalService', '$translate'];\n\nfunction SparqlTemplateCreateCtrl($scope, $location, toastr, $repositories, $window, $timeout, SparqlTemplatesRestService, RDF4JRepositoriesRestService, SparqlRestService, UriUtils, ModalService, $translate) {\n\n const hash = $location.hash() || '';\n $scope.templateID = ($location.search().templateID || '') + (hash ? (`#${hash}`) : '');\n $scope.title = ($scope.templateID ? $translate.instant('edit') : $translate.instant('common.create.btn')) + ' SPARQL Template';\n $scope.getNamespaces = getNamespaces;\n $scope.setLoader = setLoader;\n $scope.addKnownPrefixes = addKnownPrefixes;\n $scope.noPadding = {paddingRight: 0, paddingLeft: 0};\n $scope.currentTabConfig = {};\n // This property is obligatory in order to show YASQUE and YASR properly\n $scope.orientationViewMode = true;\n $scope.currentQuery = {};\n let templateExist = false;\n\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $location.path('/sparql-templates');\n }\n });\n\n let timer = null;\n $scope.goBack = function () {\n timer = $timeout(function () {\n $window.history.back();\n }, 1000);\n };\n\n const locationChangeListener = $scope.$on('$locationChangeStart', function (event) {\n confirmExit(event);\n });\n\n window.addEventListener('beforeunload', showBeforeunloadMessage);\n\n function showBeforeunloadMessage(event) {\n if (!$scope.currentQuery.isPristine) {\n event.returnValue = true;\n }\n }\n\n function confirmExit(event) {\n if (!$scope.currentQuery.isPristine) {\n if (!confirm($translate.instant('jdbc.warning.unsaved.changes'))) {\n event.preventDefault();\n } else {\n window.removeEventListener('beforeunload', showBeforeunloadMessage);\n locationChangeListener();\n $timeout.cancel(timer);\n }\n }\n }\n\n $scope.$on('$destroy', function (event) {\n window.removeEventListener('beforeunload', showBeforeunloadMessage);\n locationChangeListener();\n $timeout.cancel(timer);\n });\n\n const defaultTabConfig = {\n templateID: '',\n query: 'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\\n' +\n 'PREFIX ex: <http://example.com#>\\n' +\n 'DELETE {\\n' +\n ' ?subject ex:myPredicate ?oldValue .\\n' +\n '} INSERT {\\n' +\n ' ?subject ex:myPredicate ?newValue .\\n' +\n '} WHERE {\\n' +\n ' ?id rdf:type ex:MyType .\\n' +\n ' ?subject ex:isRelatedTo ?id .\\n' +\n '}\\n',\n inference: true,\n sameAs: true,\n isNewTemplate: true,\n isPristine: true\n };\n\n $scope.saveTab = function () {\n // Should have this empty function in this view\n };\n\n // Called when user clicks on a sample query\n $scope.setQuery = function (query) {\n // Hack for YASQE bug\n window.editor.setValue(query ? query : ' ');\n };\n\n if ($scope.templateID) {\n getSparqlTemplate($scope.templateID);\n } else {\n setQueryFromTabConfig();\n }\n\n // FIXME: this is copy-pasted in graphs-config.controller.js and query-editor.controller.js. Find a way to avoid duplications\n function getNamespaces() {\n // Signals the namespaces are to be fetched => loader will be shown\n setLoader(true, $translate.instant('common.refreshing.namespaces'), $translate.instant('common.extra.message'));\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 loadTab();\n });\n }\n\n function setLoader(isRunning, progressMessage, extraMessage) {\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 yasrInnerContainer.addClass('hide');\n } else {\n $scope.progressMessage = '';\n $scope.extraMessage = '';\n yasrInnerContainer.removeClass('hide');\n }\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 loadTab() {\n $scope.tabsData = [$scope.currentQuery];\n\n const tab = $scope.currentQuery;\n\n if (!$scope.currentQuery.query) {\n // hack for YASQE bug\n window.editor.setValue(' ');\n } else {\n window.editor.setValue($scope.currentQuery.query);\n }\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.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.$apply();\n }, 0);\n\n if (!$scope.canWriteActiveRepo()) {\n window.editor.options.readOnly = true;\n }\n }\n\n function getSparqlTemplate(templateID) {\n SparqlTemplatesRestService.getSparqlTemplate(templateID, $repositories.getActiveRepository() ).success(function (templateContent) {\n defaultTabConfig.query = templateContent;\n defaultTabConfig.templateID = templateID;\n\n defaultTabConfig.isNewTemplate = !templateID;\n\n setQueryFromTabConfig();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('sparql.template.get.template.error', {templateID: $scope.currentQuery.templateID}));\n $scope.repositoryError = msg;\n });\n }\n\n function setQueryFromTabConfig() {\n $scope.tabsData = $scope.tabs = [defaultTabConfig];\n $scope.currentQuery = angular.copy(defaultTabConfig);\n\n if (window.editor) {\n $scope.setQuery($scope.currentQuery.query);\n loadTab();\n }\n\n $scope.$watch(function () {\n return $scope.currentQuery.query;\n }, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $scope.setDirty();\n }\n });\n }\n\n $scope.saveTemplate = function () {\n if (!validateQuery()) {\n return;\n }\n\n if (!$scope.currentQuery.templateID) {\n toastr.error($translate.instant('sparql.template.iri.constraint'));\n return;\n } else {\n validateTemplateID();\n if ($scope.isInvalidTemplateId) {\n return;\n }\n }\n\n if ($scope.currentQuery.isNewTemplate) {\n checkIfTemplateExists()\n .then(() => {\n if (templateExist) {\n const modalMsg = decodeHTML($translate.instant('sparql.template.existing.template.error', {templateID: $scope.currentQuery.templateID}));\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm.save'),\n message: modalMsg,\n warning: true\n }).result\n .then(function () {\n saveNewTemplate();\n });\n } else {\n saveNewTemplate();\n }\n });\n } else {\n if (!$scope.currentQuery.isPristine) {\n SparqlTemplatesRestService.updateSparqlTemplate($scope.currentQuery, $repositories.getActiveRepository()).success(function () {\n $scope.currentQuery.isPristine = true;\n $scope.currentQuery.isNewTemplate = false;\n toastr.success($scope.currentQuery.templateID, $translate.instant('update.sparql.template.success.msg'));\n $scope.goBack();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('save.sparql.template.failure.msg', {templateID: $scope.currentQuery.templateID}));\n });\n } else {\n // No changes to template query, go back to\n $scope.goBack();\n }\n }\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, $translate.instant('common.add.known.prefixes.error'));\n return true;\n });\n }\n\n $('textarea').on('paste', function () {\n $timeout(function () {\n addKnownPrefixes();\n }, 0);\n });\n\n $scope.setDirty = function () {\n $scope.currentQuery.isPristine = false;\n };\n\n function hasValidQuery() {\n return window.editor && window.editor.getQueryMode() === 'update';\n }\n\n function validateQuery() {\n if (!hasValidQuery()) {\n toastr.error($translate.instant('sparql.template.query.constraint'), $translate.instant('jdbc.invalid.query'));\n return false;\n }\n\n return true;\n }\n\n function validateTemplateID() {\n $scope.isInvalidTemplateId = !UriUtils.isValidIri($scope.currentQuery.templateID);\n }\n\n function saveNewTemplate() {\n SparqlTemplatesRestService.createSparqlTemplate($scope.currentQuery, $repositories.getActiveRepository()).success(function () {\n $scope.currentQuery.isPristine = true;\n $scope.currentQuery.isNewTemplate = false;\n toastr.success($scope.currentQuery.templateID, $translate.instant('save.sparql.template.success.msg'));\n $scope.goBack();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('save.sparql.template.failure.msg', {templateID: $scope.currentQuery.templateID}));\n });\n }\n\n function checkIfTemplateExists() {\n return SparqlTemplatesRestService\n .getSparqlTemplates($repositories.getActiveRepository())\n .success(function (data) {\n templateExist = data.find((templateId) => templateId === $scope.currentQuery.templateID);\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('sparql.template.get.templates.error'));\n });\n }\n}\n"],"sourceRoot":""}
|