graphdb-workbench 3.1.0-RC1 → 3.1.0-RC2
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/{12396.570b86fa82740a8f4cf0.bundle.js → 12396.4fdf116807d797858f95.bundle.js} +2 -2
- package/dist/{12396.570b86fa82740a8f4cf0.bundle.js.map → 12396.4fdf116807d797858f95.bundle.js.map} +1 -1
- package/dist/13813.05b5d070a554b6c7e7ba.bundle.js +2 -0
- package/dist/13813.05b5d070a554b6c7e7ba.bundle.js.map +1 -0
- package/dist/{15535.dcf11fd4ad321954e7cf.bundle.js → 15535.fefb8f244dce6a7ca1fb.bundle.js} +2 -2
- package/dist/{15535.dcf11fd4ad321954e7cf.bundle.js.map → 15535.fefb8f244dce6a7ca1fb.bundle.js.map} +1 -1
- package/dist/{16162.76872b6742277f5dafff.bundle.js → 16162.cbdf3c46c43ba7600b50.bundle.js} +2 -2
- package/dist/{16162.76872b6742277f5dafff.bundle.js.map → 16162.cbdf3c46c43ba7600b50.bundle.js.map} +1 -1
- package/dist/{20287.c776b31cf4005cf2077d.bundle.js → 20287.a204f018c9f943234596.bundle.js} +2 -2
- package/dist/{20287.c776b31cf4005cf2077d.bundle.js.map → 20287.a204f018c9f943234596.bundle.js.map} +1 -1
- package/dist/{21136.3130b12cebaa3aacb436.bundle.js → 21136.e9306ea2efaf14a36c3b.bundle.js} +2 -2
- package/dist/{21136.3130b12cebaa3aacb436.bundle.js.map → 21136.e9306ea2efaf14a36c3b.bundle.js.map} +1 -1
- package/dist/{21142.d7872f2ff6771019894e.bundle.js → 21142.3a4bdeb5b2f2d155c75a.bundle.js} +2 -2
- package/dist/{21142.d7872f2ff6771019894e.bundle.js.map → 21142.3a4bdeb5b2f2d155c75a.bundle.js.map} +1 -1
- package/dist/{21170.0f05e7448e7dc77bc4c9.bundle.js → 21170.893e67c611707d616bf7.bundle.js} +2 -2
- package/dist/{21170.0f05e7448e7dc77bc4c9.bundle.js.map → 21170.893e67c611707d616bf7.bundle.js.map} +1 -1
- package/dist/{21195.ca3cbeadf711db257bf9.bundle.js → 21195.798ad3b843f447dfb21f.bundle.js} +2 -2
- package/dist/{21195.ca3cbeadf711db257bf9.bundle.js.map → 21195.798ad3b843f447dfb21f.bundle.js.map} +1 -1
- package/dist/24785.61fe9894edbe9134227f.bundle.js +2 -0
- package/dist/24785.61fe9894edbe9134227f.bundle.js.map +1 -0
- package/dist/25090.6a4617fd1f7691354393.bundle.js +2 -0
- package/dist/25090.6a4617fd1f7691354393.bundle.js.map +1 -0
- package/dist/{25747.0be1625b9605c1de7436.bundle.js → 25747.dda12eb5bf953f506567.bundle.js} +2 -2
- package/dist/{25747.0be1625b9605c1de7436.bundle.js.map → 25747.dda12eb5bf953f506567.bundle.js.map} +1 -1
- package/dist/{27580.fae30be437019b1e84c7.bundle.js → 27580.c55447695a143a12534e.bundle.js} +2 -2
- package/dist/{27580.fae30be437019b1e84c7.bundle.js.map → 27580.c55447695a143a12534e.bundle.js.map} +1 -1
- package/dist/{31636.b07129d7aaa04be5ed91.bundle.js → 31636.8cc03a66e5acf918f13f.bundle.js} +2 -2
- package/dist/{31636.b07129d7aaa04be5ed91.bundle.js.map → 31636.8cc03a66e5acf918f13f.bundle.js.map} +1 -1
- package/dist/{32489.2e9b5a3bc16a826b6ef3.bundle.js → 32489.8966f0c1531899fb3f6f.bundle.js} +2 -2
- package/dist/{32489.2e9b5a3bc16a826b6ef3.bundle.js.map → 32489.8966f0c1531899fb3f6f.bundle.js.map} +1 -1
- package/dist/33489.33f615a0fd6b256f57b1.bundle.js +2 -0
- package/dist/33489.33f615a0fd6b256f57b1.bundle.js.map +1 -0
- package/dist/{34495.490740b936764f2b7a25.bundle.js → 34495.72f4c83624643514a443.bundle.js} +2 -2
- package/dist/{34495.490740b936764f2b7a25.bundle.js.map → 34495.72f4c83624643514a443.bundle.js.map} +1 -1
- package/dist/36737.3530b46d46f6b62b3feb.bundle.js +2 -0
- package/dist/36737.3530b46d46f6b62b3feb.bundle.js.map +1 -0
- package/dist/{38360.f141875f17da63b289c1.bundle.js → 38360.3fff9c67f4b88469cf0c.bundle.js} +2 -2
- package/dist/{38360.f141875f17da63b289c1.bundle.js.map → 38360.3fff9c67f4b88469cf0c.bundle.js.map} +1 -1
- package/dist/{38644.a5b9bd45a94cc952cde2.bundle.js → 38644.d233e462c17c5b2623f0.bundle.js} +2 -2
- package/dist/{38644.a5b9bd45a94cc952cde2.bundle.js.map → 38644.d233e462c17c5b2623f0.bundle.js.map} +1 -1
- package/dist/{38843.8dd2f08d8e0a8bc1084a.bundle.js → 38843.9e2d79203e4b3842ab8d.bundle.js} +2 -2
- package/dist/{38843.8dd2f08d8e0a8bc1084a.bundle.js.map → 38843.9e2d79203e4b3842ab8d.bundle.js.map} +1 -1
- package/dist/{38882.f2d9ab1552e16ca42c76.bundle.js → 38882.37d17ea61ecc8417b9a5.bundle.js} +2 -2
- package/dist/{38882.f2d9ab1552e16ca42c76.bundle.js.map → 38882.37d17ea61ecc8417b9a5.bundle.js.map} +1 -1
- package/dist/39448.8c337758264d7d2dfda1.bundle.js +2 -0
- package/dist/39448.8c337758264d7d2dfda1.bundle.js.map +1 -0
- package/dist/{39518.8e74d2578266a59f59ac.bundle.js → 39518.a67d8e7961bd59ede57e.bundle.js} +2 -2
- package/dist/{39518.8e74d2578266a59f59ac.bundle.js.map → 39518.a67d8e7961bd59ede57e.bundle.js.map} +1 -1
- package/dist/{39539.9bccf71d5a30ef245fb7.bundle.js → 39539.7ad91d9ed4809ec9fb9a.bundle.js} +2 -2
- package/dist/{39539.9bccf71d5a30ef245fb7.bundle.js.map → 39539.7ad91d9ed4809ec9fb9a.bundle.js.map} +1 -1
- package/dist/40782.be3e03cbac2f728f772a.bundle.js +2 -0
- package/dist/40782.be3e03cbac2f728f772a.bundle.js.map +1 -0
- package/dist/4125.d420acd2096f0f6aab87.bundle.js +2 -0
- package/dist/4125.d420acd2096f0f6aab87.bundle.js.map +1 -0
- package/dist/{41453.3aa5d98dc6cab79bb6d9.bundle.js → 41453.2a3d58b21913bf44a176.bundle.js} +2 -2
- package/dist/{41453.3aa5d98dc6cab79bb6d9.bundle.js.map → 41453.2a3d58b21913bf44a176.bundle.js.map} +1 -1
- package/dist/{42129.4b882ced853307f1347d.bundle.js → 42129.f3f723fc772268adb48e.bundle.js} +2 -2
- package/dist/{42129.4b882ced853307f1347d.bundle.js.map → 42129.f3f723fc772268adb48e.bundle.js.map} +1 -1
- package/dist/42143.f12edbbb0100feacf29b.bundle.js +2 -0
- package/dist/42143.f12edbbb0100feacf29b.bundle.js.map +1 -0
- package/dist/{44444.461b05b6085b7bc4872b.bundle.js → 44444.36d2d21aab260451b6dd.bundle.js} +2 -2
- package/dist/{44444.461b05b6085b7bc4872b.bundle.js.map → 44444.36d2d21aab260451b6dd.bundle.js.map} +1 -1
- package/dist/45843.5e71c4036a8027e6a420.bundle.js +2 -0
- package/dist/45843.5e71c4036a8027e6a420.bundle.js.map +1 -0
- package/dist/51087.6b58e2df75756078e5e5.bundle.js +2 -0
- package/dist/51087.6b58e2df75756078e5e5.bundle.js.map +1 -0
- package/dist/55217.0861938a673c019c7773.bundle.js +2 -0
- package/dist/55217.0861938a673c019c7773.bundle.js.map +1 -0
- package/dist/{55862.5616557be18b0e2b3c84.bundle.js → 55862.fcf3c364005214282148.bundle.js} +2 -2
- package/dist/{55862.5616557be18b0e2b3c84.bundle.js.map → 55862.fcf3c364005214282148.bundle.js.map} +1 -1
- package/dist/{58306.f1682bb1e9ae28a6f134.bundle.js → 58306.d812680bd30021f743de.bundle.js} +2 -2
- package/dist/{58306.f1682bb1e9ae28a6f134.bundle.js.map → 58306.d812680bd30021f743de.bundle.js.map} +1 -1
- package/dist/67232.66caf113352ccbeb01c1.bundle.js +2 -0
- package/dist/67232.66caf113352ccbeb01c1.bundle.js.map +1 -0
- package/dist/{67888.e52fe0a91ac03b5681df.bundle.js → 67888.ee399cd437756a8508f7.bundle.js} +2 -2
- package/dist/{67888.e52fe0a91ac03b5681df.bundle.js.map → 67888.ee399cd437756a8508f7.bundle.js.map} +1 -1
- package/dist/68685.35d8e1680f075fd2fe05.bundle.js +2 -0
- package/dist/68685.35d8e1680f075fd2fe05.bundle.js.map +1 -0
- package/dist/{70938.fd6dd4e05b512128a074.bundle.js → 70938.2a6dc0fd6e30355d5f8d.bundle.js} +2 -2
- package/dist/70938.2a6dc0fd6e30355d5f8d.bundle.js.map +1 -0
- package/dist/{72379.183a59fd5c367238208c.bundle.js → 72379.314257e7f57c739c40f5.bundle.js} +2 -2
- package/dist/{72379.183a59fd5c367238208c.bundle.js.map → 72379.314257e7f57c739c40f5.bundle.js.map} +1 -1
- package/dist/{73667.079ac089088560e0edd8.bundle.js → 73667.56bd2c4918758cf8e42e.bundle.js} +2 -2
- package/dist/{73667.079ac089088560e0edd8.bundle.js.map → 73667.56bd2c4918758cf8e42e.bundle.js.map} +1 -1
- package/dist/{73793.1a60be53c5894fe9b80b.bundle.js → 73793.da6f46e5bde0e6ebdaa5.bundle.js} +2 -2
- package/dist/{73793.1a60be53c5894fe9b80b.bundle.js.map → 73793.da6f46e5bde0e6ebdaa5.bundle.js.map} +1 -1
- package/dist/74106.6af2435921dee02fab7d.bundle.js +2 -0
- package/dist/74106.6af2435921dee02fab7d.bundle.js.map +1 -0
- package/dist/{75282.d0be6ee300507d2284d5.bundle.js → 75282.3a0960e6b8942608295f.bundle.js} +2 -2
- package/dist/{75282.d0be6ee300507d2284d5.bundle.js.map → 75282.3a0960e6b8942608295f.bundle.js.map} +1 -1
- package/dist/{75849.ab9691e3d9e094a79eab.bundle.js → 75849.943a44d58b66c17c25e6.bundle.js} +2 -2
- package/dist/{75849.ab9691e3d9e094a79eab.bundle.js.map → 75849.943a44d58b66c17c25e6.bundle.js.map} +1 -1
- package/dist/76013.3211939a02cf4fb2529e.bundle.js +2 -0
- package/dist/76013.3211939a02cf4fb2529e.bundle.js.map +1 -0
- package/dist/77286.368a522207b30d8435db.bundle.js +2 -0
- package/dist/77286.368a522207b30d8435db.bundle.js.map +1 -0
- package/dist/{78250.9904af48eac44a07f5de.bundle.js → 78250.4930579766a44d6bedaa.bundle.js} +2 -2
- package/dist/{78250.9904af48eac44a07f5de.bundle.js.map → 78250.4930579766a44d6bedaa.bundle.js.map} +1 -1
- package/dist/79329.2747569bb685c0848e45.bundle.js +2 -0
- package/dist/79329.2747569bb685c0848e45.bundle.js.map +1 -0
- package/dist/{82926.c4075de81bc80bbc7be8.bundle.js → 82926.86975fa94e7668237fa4.bundle.js} +2 -2
- package/dist/{82926.c4075de81bc80bbc7be8.bundle.js.map → 82926.86975fa94e7668237fa4.bundle.js.map} +1 -1
- package/dist/86142.b13c0e7a81e70b6a8f72.bundle.js +2 -0
- package/dist/86142.b13c0e7a81e70b6a8f72.bundle.js.map +1 -0
- package/dist/86639.9d00822b7af570d4b199.bundle.js +2 -0
- package/dist/86639.9d00822b7af570d4b199.bundle.js.map +1 -0
- package/dist/89695.169a6b498b7784206c67.bundle.js +2 -0
- package/dist/89695.169a6b498b7784206c67.bundle.js.map +1 -0
- package/dist/{9062.7fe80cc0b9697b6d184f.bundle.js → 9062.831ba4764a1c5ffa9fd3.bundle.js} +2 -2
- package/dist/{9062.7fe80cc0b9697b6d184f.bundle.js.map → 9062.831ba4764a1c5ffa9fd3.bundle.js.map} +1 -1
- package/dist/98860.03c6233a5dc864cc23e6.bundle.js +2 -0
- package/dist/98860.03c6233a5dc864cc23e6.bundle.js.map +1 -0
- package/dist/{99448.6c11d3ce4edb0ebd9ecb.bundle.js → 99448.eaa1d3d2b76811663e13.bundle.js} +2 -2
- package/dist/{99448.6c11d3ce4edb0ebd9ecb.bundle.js.map → 99448.eaa1d3d2b76811663e13.bundle.js.map} +1 -1
- package/dist/css/rdfrank.css +1 -1
- package/dist/css/repositories.css +1 -1
- package/dist/css/shepherd-custom.css +1 -1
- package/dist/i18n/locale-en.json +23 -2
- package/dist/i18n/locale-fr.json +23 -2
- package/dist/index.html +7 -7
- package/dist/js/angular/clustermanagement/templates/cluster-nodes-configuration.html +1 -1
- package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +1 -1
- package/dist/js/angular/core/directives/dynamic-form/templates/dynamic-form.html +1 -1
- package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +1 -1
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html +1 -1
- package/dist/js/angular/core/directives/yasgui-component/templates/yasgui-component.html +1 -1
- package/dist/js/angular/core/templates/cookie-policy/cookie-consent.html +1 -1
- package/dist/js/angular/core/templates/cookie-policy/cookie-policy.html +1 -1
- package/dist/js/angular/core/templates/core-errors.html +1 -1
- package/dist/js/angular/core/templates/editable-content/editable-content.html +1 -1
- package/dist/js/angular/core/templates/markdown-content/markdown-content.html +1 -1
- package/dist/js/angular/core/templates/search-resource-input.html +1 -1
- package/dist/js/angular/graphql/templates/create-graphql-endpoint.html +2 -2
- package/dist/js/angular/graphql/templates/graphql-endpoint-management.html +1 -1
- package/dist/js/angular/graphql/templates/graphql-playground.html +1 -1
- package/dist/js/angular/graphql/templates/modal/endpoint-configuration-modal.html +1 -1
- package/dist/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html +1 -1
- package/dist/js/angular/graphql/templates/modal/import-endpoint-definition-modal.html +1 -1
- package/dist/js/angular/security/templates/user.html +3 -3
- package/dist/js/angular/ttyg/templates/agent-list.html +1 -1
- package/dist/js/angular/ttyg/templates/agent-select-menu.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-item-detail.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-list.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-panel.html +1 -1
- package/dist/js/angular/ttyg/templates/iri-discovery-search.html +2 -2
- package/dist/js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html +1 -1
- package/dist/js/angular/ttyg/templates/modal/agent-settings-modal.html +11 -11
- package/dist/js/angular/ttyg/templates/modal/external-integration-configuration-modal.html +1 -1
- package/dist/js/angular/ttyg/templates/no-agents-view.html +1 -1
- package/dist/js/angular/ttyg/templates/ttyg.html +1 -1
- package/dist/legacyWorkbench.767d0ee29d83ec62733f.js +3 -0
- package/dist/{legacyWorkbench.41b49fd7ef69accd2156.js.map → legacyWorkbench.767d0ee29d83ec62733f.js.map} +1 -1
- package/dist/pages/aclmanagement.html +2 -2
- 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 +1 -1
- package/dist/pages/dependencies.html +6 -6
- 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 +8 -8
- package/dist/pages/graphs-visualizations.html +7 -7
- package/dist/pages/guides.html +1 -1
- package/dist/pages/import.html +2 -2
- package/dist/pages/jdbc-create.html +1 -1
- package/dist/pages/login.html +1 -1
- package/dist/pages/monitor/backup-and-restore.html +1 -1
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +1 -1
- package/dist/pages/namespaces.html +2 -2
- package/dist/pages/plugins.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +7 -7
- package/dist/pages/rdfrank.html +11 -9
- package/dist/pages/repositories.html +9 -5
- package/dist/pages/repository.html +1 -1
- package/dist/pages/similarity-indexes.html +1 -1
- package/dist/pages/sparql-editor.html +1 -1
- package/dist/pages/sparql-template-create.html +1 -1
- package/dist/pages/ux-test1.html +2 -2
- package/dist/pages/webapi.html +2 -2
- package/dist/plugins.js +1 -1
- package/dist/res/swagger5/index.html +11 -11
- package/package.json +1 -1
- package/dist/13813.84b8832e83dec53d66b9.bundle.js +0 -2
- package/dist/13813.84b8832e83dec53d66b9.bundle.js.map +0 -1
- package/dist/24785.ff0689efffa1540e2904.bundle.js +0 -2
- package/dist/24785.ff0689efffa1540e2904.bundle.js.map +0 -1
- package/dist/25090.a073fc84568f38c40d67.bundle.js +0 -2
- package/dist/25090.a073fc84568f38c40d67.bundle.js.map +0 -1
- package/dist/36737.9d37e743918e6d45c10b.bundle.js +0 -2
- package/dist/36737.9d37e743918e6d45c10b.bundle.js.map +0 -1
- package/dist/39448.ef810f815b486ec4b1c4.bundle.js +0 -2
- package/dist/39448.ef810f815b486ec4b1c4.bundle.js.map +0 -1
- package/dist/4125.fd7946ca01aa51acba15.bundle.js +0 -2
- package/dist/4125.fd7946ca01aa51acba15.bundle.js.map +0 -1
- package/dist/42143.1483a9470e09485cc4e4.bundle.js +0 -2
- package/dist/42143.1483a9470e09485cc4e4.bundle.js.map +0 -1
- package/dist/45843.2fb1782023f0992f82c1.bundle.js +0 -2
- package/dist/45843.2fb1782023f0992f82c1.bundle.js.map +0 -1
- package/dist/51087.2e79fab6ad7c1282ee52.bundle.js +0 -2
- package/dist/51087.2e79fab6ad7c1282ee52.bundle.js.map +0 -1
- package/dist/55217.a18a9c8614fe8ce9da14.bundle.js +0 -2
- package/dist/55217.a18a9c8614fe8ce9da14.bundle.js.map +0 -1
- package/dist/67232.5a23ef1e641a2ca030c6.bundle.js +0 -2
- package/dist/67232.5a23ef1e641a2ca030c6.bundle.js.map +0 -1
- package/dist/68685.3ec66ceae3e494eba19b.bundle.js +0 -2
- package/dist/68685.3ec66ceae3e494eba19b.bundle.js.map +0 -1
- package/dist/70938.fd6dd4e05b512128a074.bundle.js.map +0 -1
- package/dist/74106.f94ca66e9fc021789d6a.bundle.js +0 -2
- package/dist/74106.f94ca66e9fc021789d6a.bundle.js.map +0 -1
- package/dist/76013.4153e20caffdb5e3d2d5.bundle.js +0 -2
- package/dist/76013.4153e20caffdb5e3d2d5.bundle.js.map +0 -1
- package/dist/77286.472029f64b25f20ef415.bundle.js +0 -2
- package/dist/77286.472029f64b25f20ef415.bundle.js.map +0 -1
- package/dist/79329.d5f06fd8722179b4b644.bundle.js +0 -2
- package/dist/79329.d5f06fd8722179b4b644.bundle.js.map +0 -1
- package/dist/86142.3f4acbd124c99af11e48.bundle.js +0 -2
- package/dist/86142.3f4acbd124c99af11e48.bundle.js.map +0 -1
- package/dist/86639.5584db5b403656b75ad4.bundle.js +0 -2
- package/dist/86639.5584db5b403656b75ad4.bundle.js.map +0 -1
- package/dist/89695.9a36bd7b51d76634b902.bundle.js +0 -2
- package/dist/89695.9a36bd7b51d76634b902.bundle.js.map +0 -1
- package/dist/98860.5ade579c8f05a0df416b.bundle.js +0 -2
- package/dist/98860.5ade579c8f05a0df416b.bundle.js.map +0 -1
- package/dist/legacyWorkbench.41b49fd7ef69accd2156.js +0 -3
- /package/dist/{legacyWorkbench.41b49fd7ef69accd2156.js.LICENSE.txt → legacyWorkbench.767d0ee29d83ec62733f.js.LICENSE.txt} +0 -0
package/dist/{99448.6c11d3ce4edb0ebd9ecb.bundle.js.map → 99448.eaa1d3d2b76811663e13.bundle.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"99448.6c11d3ce4edb0ebd9ecb.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/lib/common/circle-packing.js","webpack://root-config/./packages/legacy-workbench/src/js/lib/common/svg-export.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/graphexplore/directives/rdf-class-hierarchy.directive.js"],"sourcesContent":["var CirclePacking = CirclePacking || {};\n\nCirclePacking.SingleChild = function () {\n /*\n Functions that enable single child circles to display properly, see\n http://stackoverflow.com/questions/22307486/d3-js-packed-circle-layout-how-to-adjust-child-radius\n */\n function addPlaceholders(node, first) {\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n addPlaceholders(child);\n }\n\n if (node.children.length === 1) {\n var placeholderSize = node.size * 1.2;\n if (first) {\n placeholderSize = node.children[0].size * 0.1;\n }\n node.children.push({\n name: 'placeholder', size: placeholderSize,\n // children: []\n });\n }\n }\n }\n\n function removePlaceholders(nodes) {\n for (var i = nodes.length - 1; i >= 0; i--) {\n var node = nodes[i];\n\n if (node.data.name === 'placeholder') {\n nodes.splice(i, 1);\n } else {\n if (node.children) {\n removePlaceholders(node.children);\n }\n }\n }\n }\n\n function centerNodes(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n\n if (node.children) {\n if (node.children.length === 1) {\n var offset = node.x - node.children[0].x;\n node.children[0].x += offset;\n reposition(node.children[0], offset);\n }\n }\n }\n\n function reposition(node, offset) {\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n node.children[i].x += offset;\n reposition(node.children[i], offset);\n }\n }\n }\n }\n\n function makePositionsRelativeToZero(nodes) {\n //use this to have vis centered at 0,0,0 (easier for positioning)\n var offsetX = nodes[0].x;\n var offsetY = nodes[0].y;\n\n for (var i = 0; i < nodes.length; i++) {\n\n var node = nodes[i];\n\n node.x -= offsetX;\n node.y -= offsetY;\n }\n }\n\n return {\n addPlaceholders: addPlaceholders,\n removePlaceholders: removePlaceholders,\n centerNodes: centerNodes,\n makePositionsRelativeToZero: makePositionsRelativeToZero\n }\n}();\n\nexport default CirclePacking;\n","import 'lib/d3.patch.js'\nimport {selectAll} from 'd3';\n\nconst d3 = {selectAll};\nvar SVG = SVG || {};\n\nSVG.Export = function () {\n function getCSSRules(cssSourceFilePath) {\n const cssRules = $('link[href=\"' + cssSourceFilePath + '\"]')[0].sheet.rules;\n let cssStr = \"\";\n _.each(cssRules, function (value) {\n cssStr += value.cssText;\n });\n return cssStr;\n }\n\n function generateBase64ImageSource(svgSelectorClass) {\n if (!svgSelectorClass) {\n svgSelectorClass = \"svg\";\n }\n // add needed xml namespace\n const exportSvg = d3.selectAll(svgSelectorClass)\n .attr(\"version\", \"1.1\")\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node().parentNode.innerHTML;\n\n // convert selected html to base64\n return \"data:image/svg+xml;charset=utf-8;base64,\" + btoa(unescape(encodeURIComponent(exportSvg)));\n }\n\n return {\n getCSSRules: getCSSRules,\n generateBase64ImageSource: generateBase64ImageSource\n };\n}();\n\nexport default SVG;\n","import d3tip from 'lib/d3-tip/d3-tip-patch';\nimport CirclePacking from 'lib/common/circle-packing';\nimport D3 from 'lib/common/d3-utils';\nimport * as d3 from 'd3';\nimport SVG from 'lib/common/svg-export';\nimport 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.graphexplore.directives.class', [\n 'graphdb.framework.graphexplore.controllers.class',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .constant(\"ZOOM_DURATION\", 500)\n .constant(\"ROOT_OBJ_NAME\", \"RDF Class Hierarchy\")\n .directive('rdfClassHierarchy', classHierarchyDirective);\n\nclassHierarchyDirective.$inject = ['$rootScope', '$location', 'GraphDataRestService', '$window', '$timeout', '$repositories', '$licenseService', 'toastr', 'ZOOM_DURATION', 'ROOT_OBJ_NAME', 'LocalStorageAdapter', 'LSKeys', '$translate'];\n\nfunction classHierarchyDirective($rootScope, $location, GraphDataRestService, $window, $timeout, $repositories, $licenseService, toastr, ZOOM_DURATION, ROOT_OBJ_NAME, LocalStorageAdapter, LSKeys, $translate) {\n return {\n restrict: 'AE',\n template: '<div id=\"classChart\"></div>',\n scope: {\n classHierarchyData: '=',\n flattenedClassNames: '=',\n selectedClass: '=',\n currentSliderValue: '=',\n showClassInfoPanel: '=',\n showExternalElements: '=',\n hidePrefixes: '=',\n currentBrowserLimit: '='\n },\n link: linkFunc\n };\n\n function linkFunc(scope, element, attrs) {\n renderCirclePacking(scope, element);\n }\n\n function renderCirclePacking(scope, element) {\n /**\n * A boolean flag that determines whether the opening of the side info panel\n * should be suppressed when focusing on the chart while a class is selected.\n */\n let suppressPanelOpen = false;\n\n var width = 800,\n height = 800,\n diameter = height,\n margin = 20,\n tip,\n rootHierarchy;\n\n var packLayout = d3.pack()\n .size([diameter - margin, diameter - margin]);\n\n var color = d3.scaleLinear()\n .domain([0, 4])\n .range([\"hsl(19, 70%, 90%)\", \"hsl(19, 70%, 50%)\"])\n .interpolate(d3.interpolateHcl);\n\n var svg = d3.select(\"#classChart\")\n .insert(\"svg:svg\", \"h2\")\n .attr(\"viewBox\", \"0 0 \" + width + \" \" + height)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\")\n .on(\"dblclick.zoom\", null);\n\n function appendMainGroup() {\n return svg.append(\"svg:g\")\n .attrs({\n id: \"main-group\",\n transform: \"translate(\" + width / 2 + \",\" + height / 2 + \")\"\n });\n }\n\n function savePrefixesState(hidePrefixes) {\n if (!angular.isUndefined(hidePrefixes)) {\n LocalStorageAdapter.set(LSKeys.CLASS_HIERARCHY_HIDE_PREFIXES, hidePrefixes);\n }\n }\n\n function getPrefixesState() {\n return LocalStorageAdapter.get(LSKeys.CLASS_HIERARCHY_HIDE_PREFIXES) === \"true\";\n }\n\n /*\n * Prepares SVG document image export by adding xml namespaces and\n * additional style information\n */\n function prepareForSVGImageExport() {\n // get css rules for the diagram\n var cssRules = SVG.Export.getCSSRules(\"css/rdf-class-hierarchy-labels.css?v=3.1.0-RC1\");\n // inline css rules in a defs tag\n d3.selectAll(\"#main-group\")\n .append(\"defs\");\n $(\"defs\").append('<style type=\"text/css\"><![CDATA[' + cssRules + ']]></style>');\n\n // switch opacity to visible\n d3.selectAll(\"g\")\n .style(\"opacity\", 1);\n\n // convert selected html to base64\n var imgSrc = SVG.Export.generateBase64ImageSource(\"#classChart svg\");\n\n // set the binary image and a name for the downloadable file on the export button\n d3.select(this).attrs({\n href: imgSrc,\n download: \"class-hierarchy-\" + $repositories.getActiveRepository() + \".svg\"\n });\n }\n\n scope.hidePrefixes = getPrefixesState();\n\n var g = appendMainGroup();\n\n if (!scope.classHierarchyData.classCount && $repositories.getActiveRepository() && !$repositories.isSystemRepository()) {\n $rootScope.loader = true;\n $rootScope.hierarchyError = false;\n const selGraphFromCache = LocalStorageAdapter.get(`classHierarchy-selectedGraph-${$repositories.getActiveRepository()}`);\n GraphDataRestService.getClassHierarchyData(selGraphFromCache !== null ? selGraphFromCache.contextID.uri : \"\")\n .success(function (response, status, headers) {\n $rootScope.loader = false;\n if (status === 207) {\n toastr.warning($translate.instant('graphexplore.update.diagram'), $translate.instant('graphexplore.repository.data.changed'));\n }\n scope.classHierarchyData = response;\n\n d3.select(\"#download-svg\")\n .on(\"mouseover\", prepareForSVGImageExport);\n\n }).error(function (response) {\n $rootScope.loader = false;\n $rootScope.hierarchyError = getError(response);\n toastr.error($translate.instant('graphexplore.error.request.failed', {name: ROOT_OBJ_NAME, error: getError(response)}));\n });\n }\n\n\n var autoZoomToPreviousState,\n doFocus;\n\n var focus,\n rootFocusEvent,\n classSearchEvent,\n flattenedClassData = {};\n\n function drawDiagram(root, config, newFocus, switchPrefixes) {\n if (rootFocusEvent) rootFocusEvent();\n if (classSearchEvent) classSearchEvent();\n // remove old group tag containing the diagram\n d3.selectAll(\"#main-group\").remove();\n\n // append new empty group tag in order to rerender new diagram\n g = appendMainGroup();\n\n // fix for single child classes\n CirclePacking.SingleChild.addPlaceholders(root, true);\n\n rootHierarchy = d3.hierarchy(root);\n rootHierarchy.sum(function (d) {\n return d.size;\n })\n focus = newFocus ? newFocus : rootHierarchy;\n\n packLayout(rootHierarchy)\n\n var nodes = rootHierarchy.descendants(),\n view;\n\n focus.isInFocusTransitive = true;\n\n // fixes for single child classes\n CirclePacking.SingleChild.removePlaceholders(nodes);\n CirclePacking.SingleChild.centerNodes(nodes);\n CirclePacking.SingleChild.makePositionsRelativeToZero(nodes);\n\n if (!tip) {\n tip = d3tip()\n .attr('class', 'd3-tip')\n .customPosition(function (d, event) {\n return {\n top: 'inherit',\n bottom: ($window.innerHeight - event.clientY) + 'px',\n right: ($window.innerWidth - event.clientX) + 'px'\n };\n })\n .html(function (d) {\n return d.data.name;\n });\n svg.call(tip);\n }\n\n var circleGroup = g.selectAll(\"circle\")\n .data(nodes)\n .enter().append(\"g\");\n\n if (config.doFade) {\n circleGroup.each(function (d) {\n D3.Transition.fadeIn(d3.select(this), 550);\n });\n }\n\n var flattenedClassNames = [];\n\n var circle = circleGroup\n .append(\"circle\")\n .attr(\"class\", function (d) {\n return d.data.role;\n })\n .attr(\"guide-selector\", function (d) {\n return \"class-\" + d.data.name;\n })\n .style(\"fill\", function (d) {\n //return colors[d.depth % 6];\n return d.children ? color(d.depth) : \"#E0D0D0\";\n })\n .each(function (d) {\n d.circle = d3.select(this);\n if (d.data.name !== ROOT_OBJ_NAME) {\n var key = d.data.name;\n flattenedClassNames.push({name: key});\n flattenedClassData[[key]] = d;\n\n d.circle.classed(\"rdf-class\", true);\n d.circle.on('mouseover', function (event) {\n if (config.noPrefixes) {\n tip.show(d, event);\n } else if (!d.textHidden) {\n tip.hide(d);\n } else {\n tip.show(d, event);\n }\n });\n d.circle.on('mouseout', tip.hide);\n }\n })\n // custom event used when user is following a guide\n .on(\"gdb-focus\", (event, d) => doFocus(d))\n .on(\"gdb-zoom\", (event, d) => zoom(d));\n\n\n if (flattenedClassNames) {\n flattenedClassNames = _.uniqBy(flattenedClassNames, 'name');\n scope.flattenedClassNames = flattenedClassNames;\n }\n\n var selectedClass;\n\n function getCurrentClassDataAndMarkSelected(obj) {\n d3.selectAll(\".selected\").classed(\"selected\", obj.selected = false);\n obj.circle.classed(\"selected\", obj.selected = true);\n selectedClass = obj;\n }\n\n function showClassInfoPanel() {\n scope.selectedClass = selectedClass;\n scope.showClassInfoPanel = true;\n }\n\n function closeClassInfoPanel() {\n scope.showClassInfoPanel = false;\n }\n\n function goToDomainRangeGraphView() {\n $rootScope.$broadcast('goToDomainRangeGraphView', selectedClass, focus);\n }\n\n var clickCancel = D3.Click.delayDblClick();\n d3.selectAll(\".parent, .topLevelParent, .child, .root\")\n .call(clickCancel);\n\n doFocus = function (obj) {\n zoom(obj);\n\n if (obj.data.name === ROOT_OBJ_NAME) {\n closeClassInfoPanel();\n d3.selectAll(\".selected\").classed(\"selected\", false);\n } else {\n getCurrentClassDataAndMarkSelected(obj);\n if (!suppressPanelOpen) {\n showClassInfoPanel();\n }\n\n // FIXME: is it ok to bind this event handler every time and not just once?\n scope.$on('sidePanelClosed', function (event) {\n d3.selectAll(\".selected\").classed(\"selected\", obj.selected = false);\n });\n }\n\n\n //do not stop event propagation here\n };\n\n clickCancel.on(\"click\", function (event, obj) {\n // add clicked class to browser history\n if (obj.data.id) {\n $window.history.pushState({id: obj.data.id}, \"classHierarchyPage\" + obj.data.id, \"hierarchy#\" + obj.data.id);\n }\n\n //hide current d3-tip tooltip\n tip.hide();\n\n doFocus(obj);\n });\n\n clickCancel.on(\"dblclick\", function (event, obj) {\n if (obj === root) {\n return;\n }\n // hide current d3-tip tooltip in order not to appear in the next view\n tip.hide();\n getCurrentClassDataAndMarkSelected(obj);\n goToDomainRangeGraphView();\n\n event.stopPropagation();\n });\n\n var lastTimeWheel = 0;\n svg.on('wheel', function (event) {\n // hide current d3-tip tooltip\n tip.hide();\n\n event.preventDefault();\n event.stopPropagation();\n\n // at least 100ms must have passed since last time we updated\n var now = new Date().getTime();\n if (now - lastTimeWheel > 100) {\n lastTimeWheel = now;\n } else {\n return;\n }\n\n var direction = '';\n if (event.deltaY <= -1) {\n direction = 'in';\n } else if (event.deltaY >= 1) {\n direction = 'out';\n }\n\n var obj = event.target.__data__;\n\n if (!obj) {\n // scroll outside the big circle\n obj = focus;\n }\n\n if (direction === 'in') {\n // determine object to zoom to\n\n if (obj !== focus) {\n // consider the object on which the scroll event occurred\n // and find the furthest parent that has no focused children\n while (obj.parent && !obj.parent.isInFocusTransitive) {\n obj = obj.parent;\n }\n if (obj.depth < focus.depth) {\n // however if that parent is of lower depth than the focus we ignore it\n obj = focus;\n }\n }\n\n if (obj === focus && obj.children) {\n // if object is in focus and it has children we zoom to its biggest child\n // TODO: sort children on backend\n var newobj = obj.children[0];\n for (var i = 1; i < obj.children.length; i++) {\n if (obj.children[i].sortingRank > newobj.sortingRank) {\n newobj = obj.children[i];\n }\n }\n if (newobj.children) {\n // Use the child only if it has children\n obj = newobj;\n }\n } else if (!obj.children) {\n // If node has no children use its parent instead\n obj = obj.parent;\n }\n\n zoom(obj, true);\n } else if (direction === 'out') {\n // zooming out simply goes one parent up\n obj = focus.parent;\n if (obj) {\n zoom(obj, true);\n }\n }\n\n if (focus.data.name === ROOT_OBJ_NAME) {\n $window.history.replaceState({id: 1}, \"classHierarchyPage1\", \"hierarchy#1\");\n }\n\n // redraw slider on zoom out\n sendSliderData();\n });\n\n var text = g.selectAll(\"text\")\n .data(nodes)\n .enter().append(\"text\")\n .attr(\"class\", function (d) {\n return d.children && d.children.length ? \"label\" : \"label child-label\";\n })\n .each(function (d) {\n d.textSel = d3.select(this);\n });\n\n function trimPrefixes(d) {\n var idx = d.data.name.indexOf(\":\");\n var absUriIdx = d.data.name.indexOf(\"http://\");\n if (absUriIdx > -1) {\n // if we have no prefix available ignore\n d.noPrefixName = d.data.name;\n } else if (idx > -1) {\n d.noPrefixName = d.data.name.substring(idx + 1);\n }\n }\n\n if (config.noPrefixes) {\n text.each(trimPrefixes);\n text\n .style(\"font-size\", function (d) {\n return D3.Text.calcFontSize(d.noPrefixName, d.r);\n })\n .text(function (d) {\n return D3.Text.getTextWithElipsisIfNeeded(d.noPrefixName, d.r / 3);\n });\n } else {\n text\n .style(\"font-size\", function (d) {\n return D3.Text.calcFontSize(d.data.name, d.r);\n })\n .text(function (d) {\n return D3.Text.getTextWithElipsisIfNeeded(d.data.name, d.r / 3);\n })\n }\n\n // TODO: make this use the full version (same as zoom)\n text.style(\"display\", function (d) {\n if (d.parent && d.parent.data === focus.data) {\n d.textHidden = this.textContent.indexOf(\"...\") + 3 === this.textContent.length;\n return null;\n } else {\n d.textHidden = true;\n return \"none\";\n }\n });\n\n if (config.doFade && !config.keepPrevState) {\n text.each(function (d) {\n D3.Transition.fadeIn(d3.select(this), 550);\n });\n }\n\n autoZoomToPreviousState = function () {\n function focusOnCurrentClass(focusHistoryId) {\n if (focusHistoryId) {\n circle.each(function (d) {\n if (+focusHistoryId === d.data.id) {\n doFocus(d);\n }\n });\n }\n }\n\n var focusHistoryId = $location.hash();\n\n $window.onpopstate = function (event) {\n if (event.state) {\n var focusHistoryId = event.state.id;\n focusOnCurrentClass(focusHistoryId);\n }\n };\n\n focusOnCurrentClass(focusHistoryId);\n };\n\n var node = g.selectAll(\"circle, text\");\n\n function zoomTo(v, switchPrefixes) {\n var k = diameter / v[2];\n view = v;\n\n node.attr(\"transform\", function (d) {\n return \"translate(\" + (d.x - v[0]) * k + \",\" + (d.y - v[1]) * k + \")\";\n });\n\n circle.attr(\"r\", function (d) {\n return d.r * k;\n });\n\n function switchPrefixesInPlace(d) {\n // if uris match with the topLevelParentUri of the focused element\n // or your focus is a top level parent hide its label and if it is not\n // a child element show all of its child labels. If it is a child element\n // only show its label.\n if (d.data.fullName === focus.data.topLevelParentUri || focus.data.topLevelParentUri === ROOT_OBJ_NAME) {\n d.textSel.style(\"display\", \"none\");\n if (focus.children && focus.children.length) {\n _.each(focus.children, function (c) {\n c.textSel.style(\"display\", \"inline\");\n });\n } else {\n focus.textSel.style(\"display\", \"inline\");\n }\n\n // in order to show prefixes of siblings check if the focused\n // element has a parent and show all of its children except\n // for the name of the focused element because you need to see\n // its children\n if (focus.parent) {\n _.each(focus.parent.children, function (c) {\n if (c.data.name !== focus.data.name) {\n c.textSel.style(\"display\", \"inline\");\n }\n });\n }\n }\n }\n\n if (switchPrefixes) {\n text.each(switchPrefixesInPlace);\n }\n\n text\n .style(\"font-size\", function (d) {\n if (config.noPrefixes) {\n return D3.Text.calcFontSize(d.noPrefixName, d.r * k);\n }\n return D3.Text.calcFontSize(d.data.name, d.r * k);\n })\n .text(function (d) {\n if (config.noPrefixes) {\n return D3.Text.getTextWithElipsisIfNeeded(d.noPrefixName, d.r * k / 3);\n }\n return D3.Text.getTextWithElipsisIfNeeded(d.data.name, d.r * k / 3);\n });\n }\n\n\n function adjustRadius(r) {\n var newr = r * 2 + margin;\n if (r * 2 / newr < 0.3) {\n // for very small circles we need to adjust\n newr = r * 2 + 2;\n }\n return newr;\n }\n\n zoomTo([focus.x, focus.y, adjustRadius(focus.r)], switchPrefixes);\n\n function textUpdate(d) {\n if (d.isInFocusTransitive || !(d.parent && d.parent.isInFocusTransitive)) {\n // hide labels of classes that are in focus (including children) OR whose parents aren't in focus\n d.textHidden = true;\n this.style.display = \"none\";\n } else {\n // show all other labels\n d.textHidden = this.textContent.indexOf(\"...\") + 3 === this.textContent.length;\n this.style.display = \"\";\n }\n }\n\n function zoom(d, shouldClosePanel) {\n // use empty timeout to force the following code to be executed on the next $digest cycle\n // in order to avoid '$digest in progress' error\n $timeout(function () {\n scope.showExternalElements = (d.data.name === ROOT_OBJ_NAME);\n });\n\n if (focus === d) {\n // Node is already zoomed to\n // Important to return before we modify the history, otherwise we choke the browser\n return;\n }\n\n if (d.data.id) {\n $window.history.replaceState({id: d.data.id}, \"classHierarchyPage\" + d.data.id, \"hierarchy#\" + d.data.id);\n }\n\n if (!d.children) {\n // No children - zoom to parent instead\n d = d.parent;\n if (focus === d) {\n // Parent is already zoomed to\n return;\n }\n }\n\n if (shouldClosePanel) {\n closeClassInfoPanel();\n d3.selectAll(\".selected\").classed(\"selected\", false);\n }\n\n if (focus.parent) {\n var p = focus;\n while (p) {\n p.isInFocusTransitive = false;\n p = p.parent;\n }\n }\n\n var p = d;\n while (p) {\n p.isInFocusTransitive = !!p.children;\n p = p.parent;\n }\n\n focus = d;\n\n var isVerySmallCircle = focus.r * 2 / (focus.r * 2 + margin) < 0.3;\n\n if (isVerySmallCircle || scope.currentSliderValue > scope.currentBrowserLimit) {\n // no fancy animation for slower browsers if above the limit or if zooming to a very small circle\n zoomTo([focus.x, focus.y, adjustRadius(focus.r)]);\n\n text.each(function (d) {\n textUpdate.call(this, d)\n });\n } else {\n // the fancy version for faster browsers\n var transition = d3.transition()\n .duration(ZOOM_DURATION)\n .tween(\"zoom\", function (d) {\n var i = d3.interpolateZoom(view, [focus.x, focus.y, adjustRadius(focus.r)]);\n return function (t) {\n zoomTo(i(t));\n };\n });\n\n transition.selectAll(\"text\")\n // Experimental: hide texts to be hidden on \"start\", show texts to be shown on \"end\"\n .each(textUpdate)\n }\n }\n\n rootFocusEvent = scope.$on('rootFocus', function () {\n $window.history.pushState({id: 1}, \"classHierarchyPage1\", \"hierarchy#1\");\n doFocus(rootHierarchy);\n });\n\n classSearchEvent = scope.$on('classSearch', function (selectedClass) {\n doFocus(selectedClass);\n });\n }\n\n function sendSliderData() {\n const currentClassCount = scope.classHierarchyData.classCount;\n let currentSliderValue = LocalStorageAdapter.get(LSKeys.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE);\n\n if (!currentSliderValue || currentSliderValue > currentClassCount) {\n currentSliderValue = currentClassCount;\n LocalStorageAdapter.set(LSKeys.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE, currentSliderValue);\n }\n\n $rootScope.$broadcast(\"classCount\", currentClassCount, currentSliderValue);\n }\n\n window.addEventListener('resize', sendSliderData);\n\n window.addEventListener('beforeunload', removeResizeListener);\n\n function removeResizeListener() {\n window.removeEventListener('resize', sendSliderData);\n window.removeEventListener('beforeunload', removeResizeListener);\n }\n\n var prefixesWatch,\n currentClassCountWatch,\n searchedClassBroadcast,\n onEnterClassSearchBroadcast;\n\n scope.$watch('classHierarchyData', function () {\n // when data changes unregister watchers by calling them\n if (prefixesWatch) prefixesWatch();\n if (currentClassCountWatch) currentClassCountWatch();\n if (searchedClassBroadcast) searchedClassBroadcast();\n if (onEnterClassSearchBroadcast) onEnterClassSearchBroadcast();\n\n // get initial state of prefixes (hidden or not) when changing repositories\n // in order to avoid triggering an unwanted prefixes watch\n var initialPrefixesState = getPrefixesState();\n\n if (scope.classHierarchyData.classCount) {\n sendSliderData();\n\n var rootData = _.cloneDeep(scope.classHierarchyData);\n\n var root = d3.hierarchy(rootData);\n\n function sortRoot(root) {\n // add all classes to a flat array, add parent information\n // and sort according to instancesCount DESC, depth ASC\n\n return root.descendants()\n .sort(function (a, b) {\n if (a.data.sortingRank > b.data.sortingRank) {\n return -1;\n } else if (a.data.sortingRank < b.data.sortingRank) {\n return 1;\n } else if (a.data.depth > b.data.depth) {\n return 1;\n } else if (a.data.depth < b.data.depth) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n var sortedChildren = sortRoot(root);\n\n // we start with an empty new rootData\n var filteredRootData;\n var noPrefixesGlobal;\n\n\n function restoreDiagramState(currentRootData, switchPrefixes) {\n const prefixesConfig = {\n keepPrevState: true,\n noPrefixes: getPrefixesState()\n };\n\n // get noPrefixes flag from drawDiagram configuration params\n noPrefixesGlobal = prefixesConfig.noPrefixes;\n\n if (filteredRootData) {\n drawDiagram(filteredRootData, prefixesConfig, focus, true);\n } else {\n drawDiagram(currentRootData, prefixesConfig, focus, true);\n }\n\n $timeout(() => {\n LocalStorageAdapter.set(LSKeys.CLASS_HIERARCHY_SWITCH_PREFIXES, switchPrefixes);\n autoZoomToPreviousState();\n // Need to set this to false to enable the info panel to work when selecting a class.\n // The panel opening will be suppressed only when the prefixes are toggled.\n suppressPanelOpen = false;\n }, 70);\n }\n\n function redrawFilteredDiagram(currentSliderValue, sortedChildrenArray, useSlider) {\n if (!currentSliderValue) {\n return;\n }\n\n LocalStorageAdapter.set(LSKeys.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE, currentSliderValue);\n\n filteredRootData = {\n name: ROOT_OBJ_NAME,\n children: []\n };\n\n // walk through the given count of (sortedChildrenArray) classes\n // - record the id of each class we've seen\n // - add the rootData level classes to the new rootData\n const addedIds = new Set();\n for (let k = 1; k <= currentSliderValue; k++) {\n addedIds.add(sortedChildrenArray[k].data.id);\n if (sortedChildrenArray[k].parent === sortedChildrenArray[0]) { // i.e. the parent is the \"class hierarchy\"\n filteredRootData.children.push(sortedChildrenArray[k].data);\n }\n }\n\n // walk through all the classes in the new rootData and only keep those that have an \"added id\"\n // we create separate copies of the arrays in order not to contaminate the original data\n // we also copy each class's object ($.extend ...) for the same reason\n function fixChildren(node) {\n if (!node.children) {\n return;\n }\n const newChildren = [];\n for (const child of node.children) {\n if (addedIds.has(child.id)) {\n newChildren.push($.extend({}, child));\n }\n }\n node.children = newChildren;\n for (const child of node.children) {\n fixChildren(child);\n }\n }\n\n fixChildren(filteredRootData);\n\n if (useSlider) {\n // redraw diagram when slider value changes and persist current state\n // in local storage\n noPrefixesGlobal = angular.isUndefined(noPrefixesGlobal) ? getPrefixesState() : noPrefixesGlobal;\n const redrawConfig = {\n noPrefixes: noPrefixesGlobal\n };\n drawDiagram(filteredRootData, redrawConfig);\n } else {\n // if the user returns to the diagram with back browser button\n // read the saved state (show/hide prefixes, current slider value)\n // from local storage and render the diagram according to the saved metrics\n restoreDiagramState(rootData);\n }\n }\n\n var currentSliderValue = LocalStorageAdapter.get(LSKeys.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE);\n if (currentSliderValue) {\n redrawFilteredDiagram(currentSliderValue, sortedChildren);\n } else {\n var basicConfig = {\n doFade: true,\n keepPrevState: true,\n noPrefixes: getPrefixesState()\n };\n drawDiagram(rootData, basicConfig);\n autoZoomToPreviousState();\n }\n\n prefixesWatch = scope.$watch('hidePrefixes', function (hidePrefixes) {\n if (angular.isUndefined(hidePrefixes) || initialPrefixesState) {\n initialPrefixesState = undefined;\n return;\n }\n // if digest overflows a possible fix might be wrapping this in $timeout\n $timeout(function () {\n suppressPanelOpen = true;\n savePrefixesState(hidePrefixes);\n restoreDiagramState(rootData, true);\n }, 50);\n }, true);\n\n currentClassCountWatch = scope.$watch('currentSliderValue', function (currentSliderValue) {\n redrawFilteredDiagram(currentSliderValue, sortedChildren, true);\n }, true);\n\n // we handle this event for the cases where we already have searched for a given class and\n // hit enter again on the already selected class in order again react and zoom to it again\n // if we are not at the moment\n var currentSearchedClass;\n onEnterClassSearchBroadcast = scope.$on('onEnterKeypressSearchAction', function (event) {\n if (currentSearchedClass) {\n doFocus(currentSearchedClass);\n }\n });\n\n searchedClassBroadcast = scope.$on('searchedClass', function (event, searchedClass) {\n currentSearchedClass = flattenedClassData[searchedClass.name];\n if (currentSearchedClass) {\n doFocus(currentSearchedClass);\n }\n });\n }\n }, true);\n }\n}\n"],"names":["CirclePacking","SingleChild","addPlaceholders","node","first","children","i","length","placeholderSize","size","push","name","removePlaceholders","nodes","data","splice","centerNodes","offset","x","reposition","makePositionsRelativeToZero","offsetX","offsetY","y","d3","selectAll","SVG","Export","getCSSRules","cssSourceFilePath","cssRules","$","sheet","rules","cssStr","_","each","value","cssText","generateBase64ImageSource","svgSelectorClass","exportSvg","attr","parentNode","innerHTML","btoa","unescape","encodeURIComponent","classHierarchyDirective","$rootScope","$location","GraphDataRestService","$window","$timeout","$repositories","$licenseService","toastr","ZOOM_DURATION","ROOT_OBJ_NAME","LocalStorageAdapter","LSKeys","$translate","restrict","template","scope","classHierarchyData","flattenedClassNames","selectedClass","currentSliderValue","showClassInfoPanel","showExternalElements","hidePrefixes","currentBrowserLimit","link","element","attrs","suppressPanelOpen","tip","rootHierarchy","packLayout","diameter","color","domain","range","interpolate","svg","insert","on","appendMainGroup","append","id","transform","getPrefixesState","get","CLASS_HIERARCHY_HIDE_PREFIXES","prepareForSVGImageExport","style","imgSrc","this","href","download","getActiveRepository","autoZoomToPreviousState","doFocus","g","classCount","isSystemRepository","loader","hierarchyError","selGraphFromCache","getClassHierarchyData","contextID","uri","success","response","status","headers","warning","instant","error","getError","focus","rootFocusEvent","classSearchEvent","prefixesWatch","currentClassCountWatch","searchedClassBroadcast","onEnterClassSearchBroadcast","flattenedClassData","drawDiagram","root","config","newFocus","switchPrefixes","remove","sum","d","view","descendants","isInFocusTransitive","d3tip","customPosition","event","top","bottom","innerHeight","clientY","right","innerWidth","clientX","html","call","circleGroup","enter","doFade","D3","Transition","fadeIn","circle","role","depth","key","classed","noPrefixes","textHidden","show","hide","zoom","getCurrentClassDataAndMarkSelected","obj","selected","closeClassInfoPanel","uniqBy","clickCancel","Click","delayDblClick","$on","history","pushState","$broadcast","stopPropagation","lastTimeWheel","preventDefault","now","Date","getTime","direction","deltaY","target","__data__","parent","newobj","sortingRank","replaceState","sendSliderData","text","textSel","idx","indexOf","noPrefixName","substring","Text","calcFontSize","r","getTextWithElipsisIfNeeded","textContent","keepPrevState","focusOnCurrentClass","focusHistoryId","hash","onpopstate","state","zoomTo","v","k","fullName","topLevelParentUri","c","adjustRadius","newr","textUpdate","display","shouldClosePanel","p","duration","tween","t","currentClassCount","CLASS_HIERARCHY_CURRENT_SLIDER_VALUE","set","window","addEventListener","removeResizeListener","removeEventListener","$watch","initialPrefixesState","rootData","cloneDeep","filteredRootData","noPrefixesGlobal","sortedChildren","sort","a","b","restoreDiagramState","currentRootData","prefixesConfig","CLASS_HIERARCHY_SWITCH_PREFIXES","redrawFilteredDiagram","sortedChildrenArray","useSlider","addedIds","Set","add","fixChildren","newChildren","child","has","extend","angular","isUndefined","currentSearchedClass","basicConfig","undefined","savePrefixesState","searchedClass","renderCirclePacking","module","constant","directive","$inject"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"99448.eaa1d3d2b76811663e13.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/lib/common/circle-packing.js","webpack://root-config/./packages/legacy-workbench/src/js/lib/common/svg-export.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/graphexplore/directives/rdf-class-hierarchy.directive.js"],"sourcesContent":["var CirclePacking = CirclePacking || {};\n\nCirclePacking.SingleChild = function () {\n /*\n Functions that enable single child circles to display properly, see\n http://stackoverflow.com/questions/22307486/d3-js-packed-circle-layout-how-to-adjust-child-radius\n */\n function addPlaceholders(node, first) {\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n addPlaceholders(child);\n }\n\n if (node.children.length === 1) {\n var placeholderSize = node.size * 1.2;\n if (first) {\n placeholderSize = node.children[0].size * 0.1;\n }\n node.children.push({\n name: 'placeholder', size: placeholderSize,\n // children: []\n });\n }\n }\n }\n\n function removePlaceholders(nodes) {\n for (var i = nodes.length - 1; i >= 0; i--) {\n var node = nodes[i];\n\n if (node.data.name === 'placeholder') {\n nodes.splice(i, 1);\n } else {\n if (node.children) {\n removePlaceholders(node.children);\n }\n }\n }\n }\n\n function centerNodes(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n\n if (node.children) {\n if (node.children.length === 1) {\n var offset = node.x - node.children[0].x;\n node.children[0].x += offset;\n reposition(node.children[0], offset);\n }\n }\n }\n\n function reposition(node, offset) {\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n node.children[i].x += offset;\n reposition(node.children[i], offset);\n }\n }\n }\n }\n\n function makePositionsRelativeToZero(nodes) {\n //use this to have vis centered at 0,0,0 (easier for positioning)\n var offsetX = nodes[0].x;\n var offsetY = nodes[0].y;\n\n for (var i = 0; i < nodes.length; i++) {\n\n var node = nodes[i];\n\n node.x -= offsetX;\n node.y -= offsetY;\n }\n }\n\n return {\n addPlaceholders: addPlaceholders,\n removePlaceholders: removePlaceholders,\n centerNodes: centerNodes,\n makePositionsRelativeToZero: makePositionsRelativeToZero\n }\n}();\n\nexport default CirclePacking;\n","import 'lib/d3.patch.js'\nimport {selectAll} from 'd3';\n\nconst d3 = {selectAll};\nvar SVG = SVG || {};\n\nSVG.Export = function () {\n function getCSSRules(cssSourceFilePath) {\n const cssRules = $('link[href=\"' + cssSourceFilePath + '\"]')[0].sheet.rules;\n let cssStr = \"\";\n _.each(cssRules, function (value) {\n cssStr += value.cssText;\n });\n return cssStr;\n }\n\n function generateBase64ImageSource(svgSelectorClass) {\n if (!svgSelectorClass) {\n svgSelectorClass = \"svg\";\n }\n // add needed xml namespace\n const exportSvg = d3.selectAll(svgSelectorClass)\n .attr(\"version\", \"1.1\")\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node().parentNode.innerHTML;\n\n // convert selected html to base64\n return \"data:image/svg+xml;charset=utf-8;base64,\" + btoa(unescape(encodeURIComponent(exportSvg)));\n }\n\n return {\n getCSSRules: getCSSRules,\n generateBase64ImageSource: generateBase64ImageSource\n };\n}();\n\nexport default SVG;\n","import d3tip from 'lib/d3-tip/d3-tip-patch';\nimport CirclePacking from 'lib/common/circle-packing';\nimport D3 from 'lib/common/d3-utils';\nimport * as d3 from 'd3';\nimport SVG from 'lib/common/svg-export';\nimport 'angular/utils/local-storage-adapter';\n\nangular\n .module('graphdb.framework.graphexplore.directives.class', [\n 'graphdb.framework.graphexplore.controllers.class',\n 'graphdb.framework.utils.localstorageadapter'\n ])\n .constant(\"ZOOM_DURATION\", 500)\n .constant(\"ROOT_OBJ_NAME\", \"RDF Class Hierarchy\")\n .directive('rdfClassHierarchy', classHierarchyDirective);\n\nclassHierarchyDirective.$inject = ['$rootScope', '$location', 'GraphDataRestService', '$window', '$timeout', '$repositories', '$licenseService', 'toastr', 'ZOOM_DURATION', 'ROOT_OBJ_NAME', 'LocalStorageAdapter', 'LSKeys', '$translate'];\n\nfunction classHierarchyDirective($rootScope, $location, GraphDataRestService, $window, $timeout, $repositories, $licenseService, toastr, ZOOM_DURATION, ROOT_OBJ_NAME, LocalStorageAdapter, LSKeys, $translate) {\n return {\n restrict: 'AE',\n template: '<div id=\"classChart\"></div>',\n scope: {\n classHierarchyData: '=',\n flattenedClassNames: '=',\n selectedClass: '=',\n currentSliderValue: '=',\n showClassInfoPanel: '=',\n showExternalElements: '=',\n hidePrefixes: '=',\n currentBrowserLimit: '='\n },\n link: linkFunc\n };\n\n function linkFunc(scope, element, attrs) {\n renderCirclePacking(scope, element);\n }\n\n function renderCirclePacking(scope, element) {\n /**\n * A boolean flag that determines whether the opening of the side info panel\n * should be suppressed when focusing on the chart while a class is selected.\n */\n let suppressPanelOpen = false;\n\n var width = 800,\n height = 800,\n diameter = height,\n margin = 20,\n tip,\n rootHierarchy;\n\n var packLayout = d3.pack()\n .size([diameter - margin, diameter - margin]);\n\n var color = d3.scaleLinear()\n .domain([0, 4])\n .range([\"hsl(19, 70%, 90%)\", \"hsl(19, 70%, 50%)\"])\n .interpolate(d3.interpolateHcl);\n\n var svg = d3.select(\"#classChart\")\n .insert(\"svg:svg\", \"h2\")\n .attr(\"viewBox\", \"0 0 \" + width + \" \" + height)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\")\n .on(\"dblclick.zoom\", null);\n\n function appendMainGroup() {\n return svg.append(\"svg:g\")\n .attrs({\n id: \"main-group\",\n transform: \"translate(\" + width / 2 + \",\" + height / 2 + \")\"\n });\n }\n\n function savePrefixesState(hidePrefixes) {\n if (!angular.isUndefined(hidePrefixes)) {\n LocalStorageAdapter.set(LSKeys.CLASS_HIERARCHY_HIDE_PREFIXES, hidePrefixes);\n }\n }\n\n function getPrefixesState() {\n return LocalStorageAdapter.get(LSKeys.CLASS_HIERARCHY_HIDE_PREFIXES) === \"true\";\n }\n\n /*\n * Prepares SVG document image export by adding xml namespaces and\n * additional style information\n */\n function prepareForSVGImageExport() {\n // get css rules for the diagram\n var cssRules = SVG.Export.getCSSRules(\"css/rdf-class-hierarchy-labels.css?v=3.1.0-RC2\");\n // inline css rules in a defs tag\n d3.selectAll(\"#main-group\")\n .append(\"defs\");\n $(\"defs\").append('<style type=\"text/css\"><![CDATA[' + cssRules + ']]></style>');\n\n // switch opacity to visible\n d3.selectAll(\"g\")\n .style(\"opacity\", 1);\n\n // convert selected html to base64\n var imgSrc = SVG.Export.generateBase64ImageSource(\"#classChart svg\");\n\n // set the binary image and a name for the downloadable file on the export button\n d3.select(this).attrs({\n href: imgSrc,\n download: \"class-hierarchy-\" + $repositories.getActiveRepository() + \".svg\"\n });\n }\n\n scope.hidePrefixes = getPrefixesState();\n\n var g = appendMainGroup();\n\n if (!scope.classHierarchyData.classCount && $repositories.getActiveRepository() && !$repositories.isSystemRepository()) {\n $rootScope.loader = true;\n $rootScope.hierarchyError = false;\n const selGraphFromCache = LocalStorageAdapter.get(`classHierarchy-selectedGraph-${$repositories.getActiveRepository()}`);\n GraphDataRestService.getClassHierarchyData(selGraphFromCache !== null ? selGraphFromCache.contextID.uri : \"\")\n .success(function (response, status, headers) {\n $rootScope.loader = false;\n if (status === 207) {\n toastr.warning($translate.instant('graphexplore.update.diagram'), $translate.instant('graphexplore.repository.data.changed'));\n }\n scope.classHierarchyData = response;\n\n d3.select(\"#download-svg\")\n .on(\"mouseover\", prepareForSVGImageExport);\n\n }).error(function (response) {\n $rootScope.loader = false;\n $rootScope.hierarchyError = getError(response);\n toastr.error($translate.instant('graphexplore.error.request.failed', {name: ROOT_OBJ_NAME, error: getError(response)}));\n });\n }\n\n\n var autoZoomToPreviousState,\n doFocus;\n\n var focus,\n rootFocusEvent,\n classSearchEvent,\n flattenedClassData = {};\n\n function drawDiagram(root, config, newFocus, switchPrefixes) {\n if (rootFocusEvent) rootFocusEvent();\n if (classSearchEvent) classSearchEvent();\n // remove old group tag containing the diagram\n d3.selectAll(\"#main-group\").remove();\n\n // append new empty group tag in order to rerender new diagram\n g = appendMainGroup();\n\n // fix for single child classes\n CirclePacking.SingleChild.addPlaceholders(root, true);\n\n rootHierarchy = d3.hierarchy(root);\n rootHierarchy.sum(function (d) {\n return d.size;\n })\n focus = newFocus ? newFocus : rootHierarchy;\n\n packLayout(rootHierarchy)\n\n var nodes = rootHierarchy.descendants(),\n view;\n\n focus.isInFocusTransitive = true;\n\n // fixes for single child classes\n CirclePacking.SingleChild.removePlaceholders(nodes);\n CirclePacking.SingleChild.centerNodes(nodes);\n CirclePacking.SingleChild.makePositionsRelativeToZero(nodes);\n\n if (!tip) {\n tip = d3tip()\n .attr('class', 'd3-tip')\n .customPosition(function (d, event) {\n return {\n top: 'inherit',\n bottom: ($window.innerHeight - event.clientY) + 'px',\n right: ($window.innerWidth - event.clientX) + 'px'\n };\n })\n .html(function (d) {\n return d.data.name;\n });\n svg.call(tip);\n }\n\n var circleGroup = g.selectAll(\"circle\")\n .data(nodes)\n .enter().append(\"g\");\n\n if (config.doFade) {\n circleGroup.each(function (d) {\n D3.Transition.fadeIn(d3.select(this), 550);\n });\n }\n\n var flattenedClassNames = [];\n\n var circle = circleGroup\n .append(\"circle\")\n .attr(\"class\", function (d) {\n return d.data.role;\n })\n .attr(\"guide-selector\", function (d) {\n return \"class-\" + d.data.name;\n })\n .style(\"fill\", function (d) {\n //return colors[d.depth % 6];\n return d.children ? color(d.depth) : \"#E0D0D0\";\n })\n .each(function (d) {\n d.circle = d3.select(this);\n if (d.data.name !== ROOT_OBJ_NAME) {\n var key = d.data.name;\n flattenedClassNames.push({name: key});\n flattenedClassData[[key]] = d;\n\n d.circle.classed(\"rdf-class\", true);\n d.circle.on('mouseover', function (event) {\n if (config.noPrefixes) {\n tip.show(d, event);\n } else if (!d.textHidden) {\n tip.hide(d);\n } else {\n tip.show(d, event);\n }\n });\n d.circle.on('mouseout', tip.hide);\n }\n })\n // custom event used when user is following a guide\n .on(\"gdb-focus\", (event, d) => doFocus(d))\n .on(\"gdb-zoom\", (event, d) => zoom(d));\n\n\n if (flattenedClassNames) {\n flattenedClassNames = _.uniqBy(flattenedClassNames, 'name');\n scope.flattenedClassNames = flattenedClassNames;\n }\n\n var selectedClass;\n\n function getCurrentClassDataAndMarkSelected(obj) {\n d3.selectAll(\".selected\").classed(\"selected\", obj.selected = false);\n obj.circle.classed(\"selected\", obj.selected = true);\n selectedClass = obj;\n }\n\n function showClassInfoPanel() {\n scope.selectedClass = selectedClass;\n scope.showClassInfoPanel = true;\n }\n\n function closeClassInfoPanel() {\n scope.showClassInfoPanel = false;\n }\n\n function goToDomainRangeGraphView() {\n $rootScope.$broadcast('goToDomainRangeGraphView', selectedClass, focus);\n }\n\n var clickCancel = D3.Click.delayDblClick();\n d3.selectAll(\".parent, .topLevelParent, .child, .root\")\n .call(clickCancel);\n\n doFocus = function (obj) {\n zoom(obj);\n\n if (obj.data.name === ROOT_OBJ_NAME) {\n closeClassInfoPanel();\n d3.selectAll(\".selected\").classed(\"selected\", false);\n } else {\n getCurrentClassDataAndMarkSelected(obj);\n if (!suppressPanelOpen) {\n showClassInfoPanel();\n }\n\n // FIXME: is it ok to bind this event handler every time and not just once?\n scope.$on('sidePanelClosed', function (event) {\n d3.selectAll(\".selected\").classed(\"selected\", obj.selected = false);\n });\n }\n\n\n //do not stop event propagation here\n };\n\n clickCancel.on(\"click\", function (event, obj) {\n // add clicked class to browser history\n if (obj.data.id) {\n $window.history.pushState({id: obj.data.id}, \"classHierarchyPage\" + obj.data.id, \"hierarchy#\" + obj.data.id);\n }\n\n //hide current d3-tip tooltip\n tip.hide();\n\n doFocus(obj);\n });\n\n clickCancel.on(\"dblclick\", function (event, obj) {\n if (obj === root) {\n return;\n }\n // hide current d3-tip tooltip in order not to appear in the next view\n tip.hide();\n getCurrentClassDataAndMarkSelected(obj);\n goToDomainRangeGraphView();\n\n event.stopPropagation();\n });\n\n var lastTimeWheel = 0;\n svg.on('wheel', function (event) {\n // hide current d3-tip tooltip\n tip.hide();\n\n event.preventDefault();\n event.stopPropagation();\n\n // at least 100ms must have passed since last time we updated\n var now = new Date().getTime();\n if (now - lastTimeWheel > 100) {\n lastTimeWheel = now;\n } else {\n return;\n }\n\n var direction = '';\n if (event.deltaY <= -1) {\n direction = 'in';\n } else if (event.deltaY >= 1) {\n direction = 'out';\n }\n\n var obj = event.target.__data__;\n\n if (!obj) {\n // scroll outside the big circle\n obj = focus;\n }\n\n if (direction === 'in') {\n // determine object to zoom to\n\n if (obj !== focus) {\n // consider the object on which the scroll event occurred\n // and find the furthest parent that has no focused children\n while (obj.parent && !obj.parent.isInFocusTransitive) {\n obj = obj.parent;\n }\n if (obj.depth < focus.depth) {\n // however if that parent is of lower depth than the focus we ignore it\n obj = focus;\n }\n }\n\n if (obj === focus && obj.children) {\n // if object is in focus and it has children we zoom to its biggest child\n // TODO: sort children on backend\n var newobj = obj.children[0];\n for (var i = 1; i < obj.children.length; i++) {\n if (obj.children[i].sortingRank > newobj.sortingRank) {\n newobj = obj.children[i];\n }\n }\n if (newobj.children) {\n // Use the child only if it has children\n obj = newobj;\n }\n } else if (!obj.children) {\n // If node has no children use its parent instead\n obj = obj.parent;\n }\n\n zoom(obj, true);\n } else if (direction === 'out') {\n // zooming out simply goes one parent up\n obj = focus.parent;\n if (obj) {\n zoom(obj, true);\n }\n }\n\n if (focus.data.name === ROOT_OBJ_NAME) {\n $window.history.replaceState({id: 1}, \"classHierarchyPage1\", \"hierarchy#1\");\n }\n\n // redraw slider on zoom out\n sendSliderData();\n });\n\n var text = g.selectAll(\"text\")\n .data(nodes)\n .enter().append(\"text\")\n .attr(\"class\", function (d) {\n return d.children && d.children.length ? \"label\" : \"label child-label\";\n })\n .each(function (d) {\n d.textSel = d3.select(this);\n });\n\n function trimPrefixes(d) {\n var idx = d.data.name.indexOf(\":\");\n var absUriIdx = d.data.name.indexOf(\"http://\");\n if (absUriIdx > -1) {\n // if we have no prefix available ignore\n d.noPrefixName = d.data.name;\n } else if (idx > -1) {\n d.noPrefixName = d.data.name.substring(idx + 1);\n }\n }\n\n if (config.noPrefixes) {\n text.each(trimPrefixes);\n text\n .style(\"font-size\", function (d) {\n return D3.Text.calcFontSize(d.noPrefixName, d.r);\n })\n .text(function (d) {\n return D3.Text.getTextWithElipsisIfNeeded(d.noPrefixName, d.r / 3);\n });\n } else {\n text\n .style(\"font-size\", function (d) {\n return D3.Text.calcFontSize(d.data.name, d.r);\n })\n .text(function (d) {\n return D3.Text.getTextWithElipsisIfNeeded(d.data.name, d.r / 3);\n })\n }\n\n // TODO: make this use the full version (same as zoom)\n text.style(\"display\", function (d) {\n if (d.parent && d.parent.data === focus.data) {\n d.textHidden = this.textContent.indexOf(\"...\") + 3 === this.textContent.length;\n return null;\n } else {\n d.textHidden = true;\n return \"none\";\n }\n });\n\n if (config.doFade && !config.keepPrevState) {\n text.each(function (d) {\n D3.Transition.fadeIn(d3.select(this), 550);\n });\n }\n\n autoZoomToPreviousState = function () {\n function focusOnCurrentClass(focusHistoryId) {\n if (focusHistoryId) {\n circle.each(function (d) {\n if (+focusHistoryId === d.data.id) {\n doFocus(d);\n }\n });\n }\n }\n\n var focusHistoryId = $location.hash();\n\n $window.onpopstate = function (event) {\n if (event.state) {\n var focusHistoryId = event.state.id;\n focusOnCurrentClass(focusHistoryId);\n }\n };\n\n focusOnCurrentClass(focusHistoryId);\n };\n\n var node = g.selectAll(\"circle, text\");\n\n function zoomTo(v, switchPrefixes) {\n var k = diameter / v[2];\n view = v;\n\n node.attr(\"transform\", function (d) {\n return \"translate(\" + (d.x - v[0]) * k + \",\" + (d.y - v[1]) * k + \")\";\n });\n\n circle.attr(\"r\", function (d) {\n return d.r * k;\n });\n\n function switchPrefixesInPlace(d) {\n // if uris match with the topLevelParentUri of the focused element\n // or your focus is a top level parent hide its label and if it is not\n // a child element show all of its child labels. If it is a child element\n // only show its label.\n if (d.data.fullName === focus.data.topLevelParentUri || focus.data.topLevelParentUri === ROOT_OBJ_NAME) {\n d.textSel.style(\"display\", \"none\");\n if (focus.children && focus.children.length) {\n _.each(focus.children, function (c) {\n c.textSel.style(\"display\", \"inline\");\n });\n } else {\n focus.textSel.style(\"display\", \"inline\");\n }\n\n // in order to show prefixes of siblings check if the focused\n // element has a parent and show all of its children except\n // for the name of the focused element because you need to see\n // its children\n if (focus.parent) {\n _.each(focus.parent.children, function (c) {\n if (c.data.name !== focus.data.name) {\n c.textSel.style(\"display\", \"inline\");\n }\n });\n }\n }\n }\n\n if (switchPrefixes) {\n text.each(switchPrefixesInPlace);\n }\n\n text\n .style(\"font-size\", function (d) {\n if (config.noPrefixes) {\n return D3.Text.calcFontSize(d.noPrefixName, d.r * k);\n }\n return D3.Text.calcFontSize(d.data.name, d.r * k);\n })\n .text(function (d) {\n if (config.noPrefixes) {\n return D3.Text.getTextWithElipsisIfNeeded(d.noPrefixName, d.r * k / 3);\n }\n return D3.Text.getTextWithElipsisIfNeeded(d.data.name, d.r * k / 3);\n });\n }\n\n\n function adjustRadius(r) {\n var newr = r * 2 + margin;\n if (r * 2 / newr < 0.3) {\n // for very small circles we need to adjust\n newr = r * 2 + 2;\n }\n return newr;\n }\n\n zoomTo([focus.x, focus.y, adjustRadius(focus.r)], switchPrefixes);\n\n function textUpdate(d) {\n if (d.isInFocusTransitive || !(d.parent && d.parent.isInFocusTransitive)) {\n // hide labels of classes that are in focus (including children) OR whose parents aren't in focus\n d.textHidden = true;\n this.style.display = \"none\";\n } else {\n // show all other labels\n d.textHidden = this.textContent.indexOf(\"...\") + 3 === this.textContent.length;\n this.style.display = \"\";\n }\n }\n\n function zoom(d, shouldClosePanel) {\n // use empty timeout to force the following code to be executed on the next $digest cycle\n // in order to avoid '$digest in progress' error\n $timeout(function () {\n scope.showExternalElements = (d.data.name === ROOT_OBJ_NAME);\n });\n\n if (focus === d) {\n // Node is already zoomed to\n // Important to return before we modify the history, otherwise we choke the browser\n return;\n }\n\n if (d.data.id) {\n $window.history.replaceState({id: d.data.id}, \"classHierarchyPage\" + d.data.id, \"hierarchy#\" + d.data.id);\n }\n\n if (!d.children) {\n // No children - zoom to parent instead\n d = d.parent;\n if (focus === d) {\n // Parent is already zoomed to\n return;\n }\n }\n\n if (shouldClosePanel) {\n closeClassInfoPanel();\n d3.selectAll(\".selected\").classed(\"selected\", false);\n }\n\n if (focus.parent) {\n var p = focus;\n while (p) {\n p.isInFocusTransitive = false;\n p = p.parent;\n }\n }\n\n var p = d;\n while (p) {\n p.isInFocusTransitive = !!p.children;\n p = p.parent;\n }\n\n focus = d;\n\n var isVerySmallCircle = focus.r * 2 / (focus.r * 2 + margin) < 0.3;\n\n if (isVerySmallCircle || scope.currentSliderValue > scope.currentBrowserLimit) {\n // no fancy animation for slower browsers if above the limit or if zooming to a very small circle\n zoomTo([focus.x, focus.y, adjustRadius(focus.r)]);\n\n text.each(function (d) {\n textUpdate.call(this, d)\n });\n } else {\n // the fancy version for faster browsers\n var transition = d3.transition()\n .duration(ZOOM_DURATION)\n .tween(\"zoom\", function (d) {\n var i = d3.interpolateZoom(view, [focus.x, focus.y, adjustRadius(focus.r)]);\n return function (t) {\n zoomTo(i(t));\n };\n });\n\n transition.selectAll(\"text\")\n // Experimental: hide texts to be hidden on \"start\", show texts to be shown on \"end\"\n .each(textUpdate)\n }\n }\n\n rootFocusEvent = scope.$on('rootFocus', function () {\n $window.history.pushState({id: 1}, \"classHierarchyPage1\", \"hierarchy#1\");\n doFocus(rootHierarchy);\n });\n\n classSearchEvent = scope.$on('classSearch', function (selectedClass) {\n doFocus(selectedClass);\n });\n }\n\n function sendSliderData() {\n const currentClassCount = scope.classHierarchyData.classCount;\n let currentSliderValue = LocalStorageAdapter.get(LSKeys.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE);\n\n if (!currentSliderValue || currentSliderValue > currentClassCount) {\n currentSliderValue = currentClassCount;\n LocalStorageAdapter.set(LSKeys.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE, currentSliderValue);\n }\n\n $rootScope.$broadcast(\"classCount\", currentClassCount, currentSliderValue);\n }\n\n window.addEventListener('resize', sendSliderData);\n\n window.addEventListener('beforeunload', removeResizeListener);\n\n function removeResizeListener() {\n window.removeEventListener('resize', sendSliderData);\n window.removeEventListener('beforeunload', removeResizeListener);\n }\n\n var prefixesWatch,\n currentClassCountWatch,\n searchedClassBroadcast,\n onEnterClassSearchBroadcast;\n\n scope.$watch('classHierarchyData', function () {\n // when data changes unregister watchers by calling them\n if (prefixesWatch) prefixesWatch();\n if (currentClassCountWatch) currentClassCountWatch();\n if (searchedClassBroadcast) searchedClassBroadcast();\n if (onEnterClassSearchBroadcast) onEnterClassSearchBroadcast();\n\n // get initial state of prefixes (hidden or not) when changing repositories\n // in order to avoid triggering an unwanted prefixes watch\n var initialPrefixesState = getPrefixesState();\n\n if (scope.classHierarchyData.classCount) {\n sendSliderData();\n\n var rootData = _.cloneDeep(scope.classHierarchyData);\n\n var root = d3.hierarchy(rootData);\n\n function sortRoot(root) {\n // add all classes to a flat array, add parent information\n // and sort according to instancesCount DESC, depth ASC\n\n return root.descendants()\n .sort(function (a, b) {\n if (a.data.sortingRank > b.data.sortingRank) {\n return -1;\n } else if (a.data.sortingRank < b.data.sortingRank) {\n return 1;\n } else if (a.data.depth > b.data.depth) {\n return 1;\n } else if (a.data.depth < b.data.depth) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n var sortedChildren = sortRoot(root);\n\n // we start with an empty new rootData\n var filteredRootData;\n var noPrefixesGlobal;\n\n\n function restoreDiagramState(currentRootData, switchPrefixes) {\n const prefixesConfig = {\n keepPrevState: true,\n noPrefixes: getPrefixesState()\n };\n\n // get noPrefixes flag from drawDiagram configuration params\n noPrefixesGlobal = prefixesConfig.noPrefixes;\n\n if (filteredRootData) {\n drawDiagram(filteredRootData, prefixesConfig, focus, true);\n } else {\n drawDiagram(currentRootData, prefixesConfig, focus, true);\n }\n\n $timeout(() => {\n LocalStorageAdapter.set(LSKeys.CLASS_HIERARCHY_SWITCH_PREFIXES, switchPrefixes);\n autoZoomToPreviousState();\n // Need to set this to false to enable the info panel to work when selecting a class.\n // The panel opening will be suppressed only when the prefixes are toggled.\n suppressPanelOpen = false;\n }, 70);\n }\n\n function redrawFilteredDiagram(currentSliderValue, sortedChildrenArray, useSlider) {\n if (!currentSliderValue) {\n return;\n }\n\n LocalStorageAdapter.set(LSKeys.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE, currentSliderValue);\n\n filteredRootData = {\n name: ROOT_OBJ_NAME,\n children: []\n };\n\n // walk through the given count of (sortedChildrenArray) classes\n // - record the id of each class we've seen\n // - add the rootData level classes to the new rootData\n const addedIds = new Set();\n for (let k = 1; k <= currentSliderValue; k++) {\n addedIds.add(sortedChildrenArray[k].data.id);\n if (sortedChildrenArray[k].parent === sortedChildrenArray[0]) { // i.e. the parent is the \"class hierarchy\"\n filteredRootData.children.push(sortedChildrenArray[k].data);\n }\n }\n\n // walk through all the classes in the new rootData and only keep those that have an \"added id\"\n // we create separate copies of the arrays in order not to contaminate the original data\n // we also copy each class's object ($.extend ...) for the same reason\n function fixChildren(node) {\n if (!node.children) {\n return;\n }\n const newChildren = [];\n for (const child of node.children) {\n if (addedIds.has(child.id)) {\n newChildren.push($.extend({}, child));\n }\n }\n node.children = newChildren;\n for (const child of node.children) {\n fixChildren(child);\n }\n }\n\n fixChildren(filteredRootData);\n\n if (useSlider) {\n // redraw diagram when slider value changes and persist current state\n // in local storage\n noPrefixesGlobal = angular.isUndefined(noPrefixesGlobal) ? getPrefixesState() : noPrefixesGlobal;\n const redrawConfig = {\n noPrefixes: noPrefixesGlobal\n };\n drawDiagram(filteredRootData, redrawConfig);\n } else {\n // if the user returns to the diagram with back browser button\n // read the saved state (show/hide prefixes, current slider value)\n // from local storage and render the diagram according to the saved metrics\n restoreDiagramState(rootData);\n }\n }\n\n var currentSliderValue = LocalStorageAdapter.get(LSKeys.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE);\n if (currentSliderValue) {\n redrawFilteredDiagram(currentSliderValue, sortedChildren);\n } else {\n var basicConfig = {\n doFade: true,\n keepPrevState: true,\n noPrefixes: getPrefixesState()\n };\n drawDiagram(rootData, basicConfig);\n autoZoomToPreviousState();\n }\n\n prefixesWatch = scope.$watch('hidePrefixes', function (hidePrefixes) {\n if (angular.isUndefined(hidePrefixes) || initialPrefixesState) {\n initialPrefixesState = undefined;\n return;\n }\n // if digest overflows a possible fix might be wrapping this in $timeout\n $timeout(function () {\n suppressPanelOpen = true;\n savePrefixesState(hidePrefixes);\n restoreDiagramState(rootData, true);\n }, 50);\n }, true);\n\n currentClassCountWatch = scope.$watch('currentSliderValue', function (currentSliderValue) {\n redrawFilteredDiagram(currentSliderValue, sortedChildren, true);\n }, true);\n\n // we handle this event for the cases where we already have searched for a given class and\n // hit enter again on the already selected class in order again react and zoom to it again\n // if we are not at the moment\n var currentSearchedClass;\n onEnterClassSearchBroadcast = scope.$on('onEnterKeypressSearchAction', function (event) {\n if (currentSearchedClass) {\n doFocus(currentSearchedClass);\n }\n });\n\n searchedClassBroadcast = scope.$on('searchedClass', function (event, searchedClass) {\n currentSearchedClass = flattenedClassData[searchedClass.name];\n if (currentSearchedClass) {\n doFocus(currentSearchedClass);\n }\n });\n }\n }, true);\n }\n}\n"],"names":["CirclePacking","SingleChild","addPlaceholders","node","first","children","i","length","placeholderSize","size","push","name","removePlaceholders","nodes","data","splice","centerNodes","offset","x","reposition","makePositionsRelativeToZero","offsetX","offsetY","y","d3","selectAll","SVG","Export","getCSSRules","cssSourceFilePath","cssRules","$","sheet","rules","cssStr","_","each","value","cssText","generateBase64ImageSource","svgSelectorClass","exportSvg","attr","parentNode","innerHTML","btoa","unescape","encodeURIComponent","classHierarchyDirective","$rootScope","$location","GraphDataRestService","$window","$timeout","$repositories","$licenseService","toastr","ZOOM_DURATION","ROOT_OBJ_NAME","LocalStorageAdapter","LSKeys","$translate","restrict","template","scope","classHierarchyData","flattenedClassNames","selectedClass","currentSliderValue","showClassInfoPanel","showExternalElements","hidePrefixes","currentBrowserLimit","link","element","attrs","suppressPanelOpen","tip","rootHierarchy","packLayout","diameter","color","domain","range","interpolate","svg","insert","on","appendMainGroup","append","id","transform","getPrefixesState","get","CLASS_HIERARCHY_HIDE_PREFIXES","prepareForSVGImageExport","style","imgSrc","this","href","download","getActiveRepository","autoZoomToPreviousState","doFocus","g","classCount","isSystemRepository","loader","hierarchyError","selGraphFromCache","getClassHierarchyData","contextID","uri","success","response","status","headers","warning","instant","error","getError","focus","rootFocusEvent","classSearchEvent","prefixesWatch","currentClassCountWatch","searchedClassBroadcast","onEnterClassSearchBroadcast","flattenedClassData","drawDiagram","root","config","newFocus","switchPrefixes","remove","sum","d","view","descendants","isInFocusTransitive","d3tip","customPosition","event","top","bottom","innerHeight","clientY","right","innerWidth","clientX","html","call","circleGroup","enter","doFade","D3","Transition","fadeIn","circle","role","depth","key","classed","noPrefixes","textHidden","show","hide","zoom","getCurrentClassDataAndMarkSelected","obj","selected","closeClassInfoPanel","uniqBy","clickCancel","Click","delayDblClick","$on","history","pushState","$broadcast","stopPropagation","lastTimeWheel","preventDefault","now","Date","getTime","direction","deltaY","target","__data__","parent","newobj","sortingRank","replaceState","sendSliderData","text","textSel","idx","indexOf","noPrefixName","substring","Text","calcFontSize","r","getTextWithElipsisIfNeeded","textContent","keepPrevState","focusOnCurrentClass","focusHistoryId","hash","onpopstate","state","zoomTo","v","k","fullName","topLevelParentUri","c","adjustRadius","newr","textUpdate","display","shouldClosePanel","p","duration","tween","t","currentClassCount","CLASS_HIERARCHY_CURRENT_SLIDER_VALUE","set","window","addEventListener","removeResizeListener","removeEventListener","$watch","initialPrefixesState","rootData","cloneDeep","filteredRootData","noPrefixesGlobal","sortedChildren","sort","a","b","restoreDiagramState","currentRootData","prefixesConfig","CLASS_HIERARCHY_SWITCH_PREFIXES","redrawFilteredDiagram","sortedChildrenArray","useSlider","addedIds","Set","add","fixChildren","newChildren","child","has","extend","angular","isUndefined","currentSearchedClass","basicConfig","undefined","savePrefixesState","searchedClass","renderCirclePacking","module","constant","directive","$inject"],"sourceRoot":""}
|
package/dist/css/rdfrank.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.templates .tag{cursor:pointer;font-size:100%}.autocomplete-loader{position:relative;z-index:100000}.autocomplete-loader .ot-loader-new-content{background-color:hsla(0,0%,100%,.66);height:calc(100vh - 120px);padding-top:calc(50vh - 150px);position:absolute;width:100%;z-index:100000}
|
|
1
|
+
.templates .tag{cursor:pointer;font-size:100%}.autocomplete-loader{position:relative;z-index:100000}.autocomplete-loader .ot-loader-new-content{background-color:hsla(0,0%,100%,.66);height:calc(100vh - 120px);padding-top:calc(50vh - 150px);position:absolute;width:100%;z-index:100000}#toggleFilterMode label,#toggleIncludeExplicit label,#toggleIncludeImplicit label{display:inline-block;height:1.2em;line-height:1.2em;margin-bottom:-2px;vertical-align:middle}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
#selectedRepositories{float:left;padding:0 1%;width:98%}#selectLocation{margin-bottom:8px}.form fieldset div label{font-weight:400;height:24px;line-height:24px;padding-right:8px;vertical-align:middle}.form fieldset div input{margin-left:0}.form fieldset{margin:8px 16px 16px;padding-bottom:16px}.form fieldset .checkbox-custom label{clear:left;width:35%}.form #configuration-fields{clear:both;float:left;overflow:hidden;padding-top:16px}.form div{display:block}.form div label{cursor:pointer;float:left;text-align:right;width:270px}.form div input{float:left;font-size:12px;margin:0 0 20px;padding:2px;width:316px}.form div input[type=checkbox]{font-size:12px;margin:4px 10px 20px 0;width:20px}.form div textarea{float:left;font-size:12px;height:100px;margin:0 0 20px 10px;padding:4px 2px;width:250px}.form div select{float:left;font-size:12px;margin:2px 0 20px;width:265px}.form .checkbox label{text-align:left;width:auto}.form button{clear:both}.form div.checkbox input[type=checkbox]{margin-left:265px}span.error{color:#d8000c;margin:10px;padding:5px 10px;position:relative;top:3px}form div label.error{color:#d8000c;text-align:left;text-indent:8px}#fedx-members{overflow:auto}#fedx-options{overflow:hidden;width:69%}.form-local-repos{border:1px solid;font-size:1.3em;height:8rem;margin-bottom:.5rem}.form-repo-members{font-size:1.3em}.fedx-no-members-message{background-color:#fcf8e3;border-radius:1rem;color:#c4781e;display:block;height:4rem;padding:1em;text-align:center}span.required{color:#d8000c}.repositoryFields .row .col-md-4 span,.repositoryFields .row .col-sm-4 span,.repositoryFields .row .col-xs-4 span{vertical-align:sub}.repositoryFields .selectFile:HOVER{text-decoration:none}.locationsContainer .locationsUL{border:1px solid #ddd;padding-right:0}.locationsContainer .locationsUL li{margin-left:0;margin-right:0;min-height:30px;padding-top:5px}.locationsContainer .locationsUL li div.firstcol{padding-left:0;padding-right:0}.locationsContainer .locationsUL li div.thirdcol{text-align:right}.locationsContainer .locationsUL li div.thirdcol i{cursor:pointer}.locationsContainer .locationsUL li:nth-child(2n){background-color:#f0f0f0}.locationsContainer .locationsUL li:nth-child(odd){margin-top:0;padding-top:8px}#sesameRepositories .repositoryMainContainer{padding:25px 10px}#sesameRepositories .repositoryMainContainer .repositoryContainer{text-align:center}#sesameRepositories .repositoryMainContainer .repositoryContainer .descriptionRow,#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow,#sesameRepositories .repositoryMainContainer .repositoryContainer .readRow,#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow,#sesameRepositories .repositoryMainContainer .repositoryContainer .writeRow{border:1px solid #e8e8e8;min-height:40px;padding-top:5px}#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow{background-color:#d1d1d1;color:var(--primary-color);font-size:20px;min-height:40px;padding-top:5px}#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow div{display:inline-block;word-wrap:break-word}#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow div.iconsContainer div{display:inline}#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow div.iconsContainer div i{color:var(--primary-color);cursor:pointer;font-size:16px;margin-left:5px}#sesameRepositories .repositoryMainContainer .repositoryContainer .descriptionRow{padding-top:9px;word-wrap:break-word}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow{background-color:#e8e8e8;font-size:16px}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow .connected{color:#2a8039}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow .disconnected{color:#c53e3e}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow .disconnected div{display:inline-block}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow .disconnected div i{cursor:pointer}#sesameRepositories .repositoryMainContainer .repositoryContainer .readRow i,#sesameRepositories .repositoryMainContainer .repositoryContainer .writeRow i{font-size:16px}#sesameRepositories .repositoryMainContainer .repositoryContainer .readRow i.icon-ok,#sesameRepositories .repositoryMainContainer .repositoryContainer .writeRow i.icon-ok{color:#27ae60}#sesameRepositories .repositoryMainContainer .repositoryContainer .readRow i.icon-remove,#sesameRepositories .repositoryMainContainer .repositoryContainer .writeRow i.icon-remove{color:#c53e3e}.ot-edit-input{position:absolute;right:5px}.ot-inline-block,.ot-unstyled-button{display:inline-block}.ot-unstyled-button{background:none;border:none;padding:0}.ot-owlim-ctrl .fa.fa-exclamation-triangle{color:#f09300}.ot-owlim-ctrl .fa.fa-cog,.ot-owlim-ctrl .fa.fa-cogs{-webkit-transition:all .5s;-moz-transition:all .5s;-ms-transition:all .5s;-o-transition:all .5s;transition:all .5s}.ot-owlim-ctrl .fa.fa-cog:hover,.ot-owlim-ctrl .fa.fa-cogs:hover{color:#000}span.label{margin-right:10px}.spinner-container.ot-loader{display:inline-block;margin-bottom:-3px;margin-left:-4px}.ot-repository-id{display:inline-block;max-width:70%!important;overflow:hidden;position:relative;text-overflow:ellipsis;top:5px;white-space:nowrap}#ot-loader{display:block;margin:200px auto}.popover{max-width:290px}.ruleset-warning{display:inline-block;position:absolute;top:2px}@media (min-width:768px){.ruleset-warning{right:0;top:2px}.indented-div{margin-left:20px}}.text-btn{background:none;border:none;color:#000;cursor:pointer;margin:0;padding-top:.1rem}.text-btn,.text-btn:focus{box-shadow:none;outline:none!important}.padding-label{padding-left:15px;padding-right:15px}#remoteLocationForm>.remote-location-radio-list{padding-left:0;padding-right:4px}.wrapper-div{display:inline-block;position:relative}.wrapper-div button[disabled],.wrapper-div select[disabled]{position:relative;z-index:-1}.fedx-repo-member-icon{color:var(--secondary-color)}.icon-import.active{color:var(--tertiary-color)}.checkbox-param-include-inferred{float:left;padding-left:15px;padding-right:15.15em;position:relative}.checkbox-param-padded{float:left;padding-left:15px;padding-right:20.4em;position:relative}.multilined{word-break:break-all}.table{border-bottom:0!important}.table td,.table th{border:1px!important}.fixed-table-container{border:0!important}.btns-all,.location-type-title,.ontopic-instances,.sparql-instances{padding:0 13px}.remote-location-type-title,.repository{padding:0}.repository:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.repository:hover{background-color:rgba(0,0,0,.075)}.repository>div{padding:.8rem}.repository .actions{flex-shrink:0}.location-item{align-items:center;display:flex;justify-content:flex-start;padding:2px;-webkit-user-select:none;user-select:none;word-break:break-all}.location-item.hoverable:hover{background-color:rgba(0,0,0,.05);cursor:pointer}.location-item a{width:100%}.attached-header{margin-bottom:.5em}.location-type,.repository-status{font-variant-caps:all-small-caps;font-weight:bolder}.location-url{font-size:1.1rem}
|
|
1
|
+
#selectedRepositories{float:left;padding:0 1%;width:98%}#selectLocation{margin-bottom:8px}.form fieldset div label{font-weight:400;height:24px;line-height:24px;padding-right:8px;vertical-align:middle}.form fieldset div input{margin-left:0}.form fieldset{margin:8px 16px 16px;padding-bottom:16px}.form fieldset .checkbox-custom label{clear:left;width:35%}.form #configuration-fields{clear:both;float:left;overflow:hidden;padding-top:16px}.form div{display:block}.form div label{cursor:pointer;float:left;text-align:right;width:270px}.form div input{float:left;font-size:12px;margin:0 0 20px;padding:2px;width:316px}.form div input[type=checkbox]{font-size:12px;margin:4px 10px 20px 0;width:20px}.form div textarea{float:left;font-size:12px;height:100px;margin:0 0 20px 10px;padding:4px 2px;width:250px}.form div select{float:left;font-size:12px;margin:2px 0 20px;width:265px}.form .checkbox label{text-align:left;width:auto}.form button{clear:both}.form div.checkbox input[type=checkbox]{margin-left:265px}span.error{color:#d8000c;margin:10px;padding:5px 10px;position:relative;top:3px}form div label.error{color:#d8000c;text-align:left;text-indent:8px}#fedx-members{overflow:auto}#fedx-options{overflow:hidden;width:69%}.form-local-repos{border:1px solid;font-size:1.3em;height:8rem;margin-bottom:.5rem}.form-repo-members{font-size:1.3em}.fedx-no-members-message{background-color:#fcf8e3;border-radius:1rem;color:#c4781e;display:block;height:4rem;padding:1em;text-align:center}span.required{color:#d8000c}.repositoryFields .row .col-md-4 span,.repositoryFields .row .col-sm-4 span,.repositoryFields .row .col-xs-4 span{vertical-align:sub}.repositoryFields .selectFile:HOVER{text-decoration:none}.locationsContainer .locationsUL{border:1px solid #ddd;padding-right:0}.locationsContainer .locationsUL li{margin-left:0;margin-right:0;min-height:30px;padding-top:5px}.locationsContainer .locationsUL li div.firstcol{padding-left:0;padding-right:0}.locationsContainer .locationsUL li div.thirdcol{text-align:right}.locationsContainer .locationsUL li div.thirdcol i{cursor:pointer}.locationsContainer .locationsUL li:nth-child(2n){background-color:#f0f0f0}.locationsContainer .locationsUL li:nth-child(odd){margin-top:0;padding-top:8px}#sesameRepositories .repositoryMainContainer{padding:25px 10px}#sesameRepositories .repositoryMainContainer .repositoryContainer{text-align:center}#sesameRepositories .repositoryMainContainer .repositoryContainer .descriptionRow,#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow,#sesameRepositories .repositoryMainContainer .repositoryContainer .readRow,#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow,#sesameRepositories .repositoryMainContainer .repositoryContainer .writeRow{border:1px solid #e8e8e8;min-height:40px;padding-top:5px}#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow{background-color:#d1d1d1;color:var(--primary-color);font-size:20px;min-height:40px;padding-top:5px}#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow div{display:inline-block;word-wrap:break-word}#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow div.iconsContainer div{display:inline}#sesameRepositories .repositoryMainContainer .repositoryContainer .nameRow div.iconsContainer div i{color:var(--primary-color);cursor:pointer;font-size:16px;margin-left:5px}#sesameRepositories .repositoryMainContainer .repositoryContainer .descriptionRow{padding-top:9px;word-wrap:break-word}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow{background-color:#e8e8e8;font-size:16px}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow .connected{color:#2a8039}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow .disconnected{color:#c53e3e}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow .disconnected div{display:inline-block}#sesameRepositories .repositoryMainContainer .repositoryContainer .statusRow .disconnected div i{cursor:pointer}#sesameRepositories .repositoryMainContainer .repositoryContainer .readRow i,#sesameRepositories .repositoryMainContainer .repositoryContainer .writeRow i{font-size:16px}#sesameRepositories .repositoryMainContainer .repositoryContainer .readRow i.icon-ok,#sesameRepositories .repositoryMainContainer .repositoryContainer .writeRow i.icon-ok{color:#27ae60}#sesameRepositories .repositoryMainContainer .repositoryContainer .readRow i.icon-remove,#sesameRepositories .repositoryMainContainer .repositoryContainer .writeRow i.icon-remove{color:#c53e3e}.ot-edit-input{position:absolute;right:5px}.ot-inline-block,.ot-unstyled-button{display:inline-block}.ot-unstyled-button{background:none;border:none;padding:0}.ot-owlim-ctrl .fa.fa-exclamation-triangle{color:#f09300}.ot-owlim-ctrl .fa.fa-cog,.ot-owlim-ctrl .fa.fa-cogs{-webkit-transition:all .5s;-moz-transition:all .5s;-ms-transition:all .5s;-o-transition:all .5s;transition:all .5s}.ot-owlim-ctrl .fa.fa-cog:hover,.ot-owlim-ctrl .fa.fa-cogs:hover{color:#000}span.label{margin-right:10px}.spinner-container.ot-loader{display:inline-block;margin-bottom:-3px;margin-left:-4px}.ot-repository-id{display:inline-block;max-width:70%!important;overflow:hidden;position:relative;text-overflow:ellipsis;top:5px;white-space:nowrap}#ot-loader{display:block;margin:200px auto}.popover{max-width:290px}.ruleset-warning{display:inline-block;position:absolute;top:2px}@media (min-width:768px){.ruleset-warning{right:0;top:2px}.indented-div{margin-left:20px}}.text-btn{background:none;border:none;color:#000;cursor:pointer;margin:0;padding-top:.1rem}.text-btn,.text-btn:focus{box-shadow:none;outline:none!important}.padding-label{padding-left:15px;padding-right:15px}#remoteLocationForm>.remote-location-radio-list{padding-left:0;padding-right:4px}.wrapper-div{display:inline-block;position:relative}.wrapper-div button[disabled],.wrapper-div select[disabled]{position:relative;z-index:-1}.fedx-repo-member-icon{color:var(--secondary-color)}.icon-import.active{color:var(--tertiary-color)}.checkbox-param-include-inferred{float:left;padding-left:15px;padding-right:15.15em;position:relative}.checkbox-param-padded{float:left;padding-left:15px;padding-right:20.4em;position:relative}.multilined{word-break:break-all}.table{border-bottom:0!important}.table td,.table th{border:1px!important}.fixed-table-container{border:0!important}.btns-all,.location-type-title,.ontopic-instances,.sparql-instances{padding:0 13px}.remote-location-type-title,.repository{padding:0}.repository:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.repository:hover{background-color:rgba(0,0,0,.075)}.repository>div{padding:.8rem}.repository .actions{flex-shrink:0}.repository .select-repository-button-wrapper{width:25px}.location-item{align-items:center;display:flex;justify-content:flex-start;padding:2px;-webkit-user-select:none;user-select:none;word-break:break-all}.location-item.hoverable:hover{background-color:rgba(0,0,0,.05);cursor:pointer}.location-item a{width:100%}.attached-header{margin-bottom:.5em}.location-type,.repository-status{font-variant-caps:all-small-caps;font-weight:bolder}.location-url{font-size:1.1rem}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.btn-primary.shepherd-button:hover{background-color:#d0460d}.btn-primary.shepherd-button[disabled]{opacity:.5}.btn-secondary.shepherd-button:hover{background-color:#dcdcdc;color:#003663}.shepherd-element{border-radius:0;max-width:500px}.shepherd-content,.shepherd-header{border-radius:0}.shepherd-header h3{padding-left:.5em}.shepherd-text{margin-top:10px;min-height:90px;text-align:center}.shepherd-text ol,.shepherd-text ul{text-align:left}.shepherd-text code{background-color:hsla(var(--tertiary-color-hsl),.3);color:var(--secondary-color);display:block;height:120px;margin-top:.5em;overflow:
|
|
1
|
+
.btn-primary.shepherd-button:hover{background-color:#d0460d}.btn-primary.shepherd-button[disabled]{opacity:.5}.btn-secondary.shepherd-button:hover{background-color:#dcdcdc;color:#003663}.shepherd-element{border-radius:0;max-width:500px}.shepherd-content,.shepherd-header{border-radius:0}.shepherd-header h3{padding-left:.5em}.shepherd-text{margin-top:10px;min-height:90px;text-align:center}.shepherd-text ol,.shepherd-text ul{text-align:left}.shepherd-text code{background-color:hsla(var(--tertiary-color-hsl),.3);color:var(--secondary-color);display:block;height:120px;margin-top:.5em;overflow:auto;text-align:left;white-space:pre-wrap}.shepherd-has-title .shepherd-content .shepherd-header{padding-bottom:.5em;padding-top:.5em}.shepherd-footer{padding-bottom:.5em}.shepherd-progress{display:block;font-size:.9em;padding-right:1em;text-align:right}.shepherd-code{position:relative}.shepherd-code button{bottom:5px;position:absolute;right:5px}.guide-dialog.shepherd-element[data-popper-placement=top]{margin-top:-12px}.guide-dialog.shepherd-element[data-popper-placement=right]{margin-left:12px}.guide-dialog.shepherd-element[data-popper-placement=bottom]{margin-top:12px}.guide-dialog.shepherd-element[data-popper-placement=left]{margin-left:-12px}.guide-dialog.shepherd-element.visual-graph-link-focus-guide-dialog{margin-top:-52px}
|
package/dist/i18n/locale-en.json
CHANGED
|
@@ -3193,6 +3193,7 @@
|
|
|
3193
3193
|
"guide.step-intro.table-graph": "The following steps show how to explore RDF data in tabular form without writing SPARQL queries. Click on the <b>{{iriLabel}}</b> IRI to explore it.",
|
|
3194
3194
|
"guide.step-intro.create-ttyg-agent": "The following steps show how to use the <b>{{viewName|translate}}</b> view to create an agent.",
|
|
3195
3195
|
"guide.step-intro.create-similarity-index": "The following steps show how to create a Similarity index for your dataset.",
|
|
3196
|
+
"guide.step-intro.class-relationships": "The following steps show how to use the <b>{{viewName|translate}}</b> view to explore how classes are connected and understand the relationships between different types of data in your dataset.",
|
|
3196
3197
|
"guide.step-help-info.create-similarity-index": "The similarity index is used for finding words which have been used in similar contexts to the one which you search for. For example, searching for \"ontology\" will return \"knowledge graph\", while a simple textual similarity could return \"oncology\". This is an alternative for full-text search.",
|
|
3197
3198
|
"guide.step-menu.click-menu": "Click on the <b>{{menuLabelKey|translate}}</b> menu.",
|
|
3198
3199
|
"guide.step-action.create-repository": "Create repository",
|
|
@@ -3212,6 +3213,9 @@
|
|
|
3212
3213
|
"guide.step-action.conversation-with-ttyg-agent": "Conversation with the agent",
|
|
3213
3214
|
"guide.step-action.edit-ttyg-agent": "Edit an agent",
|
|
3214
3215
|
"guide.step-action.create-similarity-index": "Create Similarity index",
|
|
3216
|
+
"guide.step-action.class-relationships": "Explore the class relationships",
|
|
3217
|
+
"guide.step_plugin.core-steps.copy-text-element.content": "Enter the following in the input: {{queryExplainMessageTranslated}}{{textAsHtmlCodeElement}}",
|
|
3218
|
+
"guide.step_plugin.core-steps.copy-text-element.copy-to-input": "Copy to input",
|
|
3215
3219
|
"guide.step_plugin.execute-sparql-query.query-editor.content": "Enter the following SPARQL query: {{queryExplainMessageTranslated}}{{queryAsHtmlCodeElement}}",
|
|
3216
3220
|
"guide.step_plugin.sparql-results-explain.content": "The table shows the results from executing the query.",
|
|
3217
3221
|
"guide.step_plugin.execute-sparql-query.run-sparql-query.content": "Click on the <b>{{'query.editor.run.btn'|translate}}</b> button.",
|
|
@@ -3238,7 +3242,8 @@
|
|
|
3238
3242
|
"guide.step_plugin.download-guide-resource.download.message.failure": "Failed to download the '{{resourceFile}}' file!",
|
|
3239
3243
|
"guide.step_plugin.choose-repository.content": "Click on the repository selection dropdown.",
|
|
3240
3244
|
"guide.step_plugin.select-repository.content": "Click on the <b>{{getRepositoryId()}}</b> repository button.",
|
|
3241
|
-
"guide.step_plugin.
|
|
3245
|
+
"guide.step_plugin.repositories.default-title": "Repositories",
|
|
3246
|
+
"guide.step_plugin.repositories.select-repository.content": "Click the connect repository icon.",
|
|
3242
3247
|
"guide.step_plugin.import_rdf_file.confirm_duplicate_files_dialog.content": "Click on the <b>{{'common.yes.btn'|translate}}</b> button to override the existing file.",
|
|
3243
3248
|
"guide.step_plugin.import_rdf_file.import-settings.import.button.content": "Click on the <b>{{'common.import'|translate}}</b> button.",
|
|
3244
3249
|
"guide.step_plugin.import_rdf_file.file-must-be-uploaded": "Upload the file <b>{{resourceFile}}</b> first",
|
|
@@ -3288,18 +3293,25 @@
|
|
|
3288
3293
|
"guide.step_plugin.ttyg.missing-key.content": "To use <b>Talk to Your Graph</b>, GraphDB must first be configured to work with LLM API. Please ensure that the necessary LLM API type, url and key are in place before starting. For detailed setup instructions, refer to the documentation or contact your administrator.",
|
|
3289
3294
|
"guide.step_plugin.create-ttyg-agent.create-agent": "Click on the create agent button to create a new agent.",
|
|
3290
3295
|
"guide.step_plugin.create-ttyg-agent.save-agent-settings": "Click to save the agent settings.",
|
|
3296
|
+
"guide.step_plugin.configure-top-p.info": "Sets the nucleus sampling of the agent. Upon retrieving a set of candidate values, this controls how many of those values to consider using. Takes a value between 0 and 1.<br>Set slider to <b>{{topP}}</b>",
|
|
3297
|
+
"guide.step_plugin.configure-temperature.info": "Sets the sampling temperature of the agent. Lower values result in more consistent, repetitive responses generated by the agent and higher values result in a wider variety of responses. This takes a value between 0 and 2, but values higher than 1 may result in unreliable and unpredictable answers and are not recommended.<br>Set slider to <b>{{temperature}}</b>",
|
|
3291
3298
|
"guide.step_plugin.sparql-search-method.content": "Enabling SPARQL search allows the agent to answers questions by performing a SPARQL query. This works well for datasets with good ontologies and performs well on closed-ended questions, including aggregations.",
|
|
3292
3299
|
"guide.step_plugin.sparql-search-method.enable-toggle": "Click on the toggle to enable SPARQL search query method.",
|
|
3293
3300
|
"guide.step_plugin.sparql-search-method.disable-toggle": "Click on the toggle to disable SPARQL search query method.",
|
|
3294
3301
|
"guide.step_plugin.sparql-search-method.enable-ontology-from-graph": "Click on the toggle to enable providing an ontology in a named graph.",
|
|
3302
|
+
"guide.step_plugin.sparql-search-method.enable-sparql-query": "Click on the toggle to enable to providing a SPARQL CONSTRUCT query that fetches the ontology.",
|
|
3303
|
+
"guide.step_plugin.sparql-search-method.add-missing-namespaces": "Check to automatically add missing namespaces.",
|
|
3295
3304
|
"guide.step_plugin.sparql-search-method.type-ontology-graph-name": "Type <b>{{ontologyGraph}}</b> as the named graph which contains the ontology.",
|
|
3296
3305
|
"guide.step_plugin.fts-search-method.content": "Enabling FTS search allows the agent to answer questions by using full-text search in literals and IRIs. Performs well on open-ended questions but not so well on providing aggregations.",
|
|
3297
3306
|
"guide.step_plugin.fts-search-method.enable-toggle": "Click on the toggle to enable FTS search query method.",
|
|
3298
3307
|
"guide.step_plugin.fts-search-method.disable-toggle": "Click on the toggle to disable FTS search query method.",
|
|
3308
|
+
"guide.step_plugin.fts-search-method.set-max-triples-per-call": "Type <b>{{maxTriplesPerCall}}</b> as the maximum number of triples to retrieve per call.",
|
|
3299
3309
|
"guide.step_plugin.similarity-search-method.content": "Enabling Similarity search allows the agent to answer questions by using Similarity search. Performs well on open-ended questions but not so well on providing aggregations.",
|
|
3300
3310
|
"guide.step_plugin.similarity-search-method.enable-toggle": "Click on the toggle to enable Similarity search query method.",
|
|
3301
3311
|
"guide.step_plugin.similarity-search-method.disable-toggle": "Click on the toggle to disable Similarity search query method.",
|
|
3302
3312
|
"guide.step_plugin.similarity-search-method.select-index": "Select the index to use for Similarity search.",
|
|
3313
|
+
"guide.step_plugin.iri-discovery-search.enable-toggle": "Click on the toggle to enable Full-text search in labels for IRI discovery. This method helps the model discover the IRIs for a particular incomplete query when it cannot answer general questions about the dataset on its own.",
|
|
3314
|
+
"guide.step_plugin.iri-discovery-search.disable-toggle": "Click on the toggle to disable Full-text search in labels for IRI discovery.",
|
|
3303
3315
|
"guide.step_plugin.select-ttyg-agent.info.title": "Select your agent",
|
|
3304
3316
|
"guide.step_plugin.select-ttyg-agent.info.content": "To talk to your graph, you need to select an agent first",
|
|
3305
3317
|
"guide.step_plugin.select-ttyg-agent.open-agent-dropdown": "Click on the agents dropdown to see available agents",
|
|
@@ -3321,7 +3333,16 @@
|
|
|
3321
3333
|
"guide.step_plugin.create-similarity-index.wait": "Wait for index to be created",
|
|
3322
3334
|
"guide.step_plugin.configure-agent.name-input": "Type a name for the agent. You will refer to it later.",
|
|
3323
3335
|
"guide.step_plugin.configure-agent.model-input": "Here you can type the name of the OpenAI model to be used.<br>Type: \"<b>{{model}}</b>\" to configure the agent to use this model",
|
|
3324
|
-
"guide.step_plugin.configure-agent.user-instructions-input": "
|
|
3336
|
+
"guide.step_plugin.configure-agent.user-instructions-input": "Those are additional instructions which will be passed to the agent.",
|
|
3337
|
+
"guide.step_plugin.class-relationships-intro.content": "This view shows how data instances from different classes are connected based on real RDF statements.",
|
|
3338
|
+
"guide.step_plugin.class-relationships-diagram-intro.content": "The diagram shows bundled connections between class pairs. Each connection represents multiple RDF links (subject–predicate–object) between instances of two classes.",
|
|
3339
|
+
"guide.step_plugin.class-relationships-digram-thickness-intro.content": "Each connection line varies in <b>thickness</b> based on the number of links, <b>color</b> based on the class with more incoming links, and <b>direction</b> as links may go both ways (from class A to class B and vice versa).",
|
|
3340
|
+
"guide.step_plugin.class-relationships-digram-predicates-intro.content": "Click on any connection line in the diagram to see the top predicates used between those two classes. This helps to understand what kind of relationships link them.",
|
|
3341
|
+
"guide.step_plugin.class-relationships-named-graph-selection.content": "If the repository contains more than one named graph, you can filter the view by opening the <b>All graphs</b> dropdown (next to the toolbar) and selecting the graph to explore.",
|
|
3342
|
+
"guide.step_plugin.class-relationships-class-list-intro.content": "The left panel shows all classes, sorted by number of links, displaying both incoming and outgoing connections.",
|
|
3343
|
+
"guide.step_plugin.class-relationships-class-list-background-intro.content": "A <b>green background</b> behind a class name in the list indicates that it is currently shown in the diagram.",
|
|
3344
|
+
"guide.step_plugin.class-relationships-class-list-selection.content": "Use the <b>+ / –</b> icons next to each class name to add or remove it from the diagram display.",
|
|
3345
|
+
"guide.step_plugin.rdf-rank-compute-fill.content": "Click on <b>Compute Full</b> to start the RDF Rank computation.",
|
|
3325
3346
|
"guide.confirm.cancel.message": "Are you sure you want to stop the guide?",
|
|
3326
3347
|
"guide.unexpected.error.message": "The guide was cancelled due to an unexpected error. Please run the guide again and if the problem persists contact the support.",
|
|
3327
3348
|
"guide.start.unexpected.error.message": "The guide cannot be started due to an unexpected error. Please try running the guide again and if the problem persists contact the support.",
|
package/dist/i18n/locale-fr.json
CHANGED
|
@@ -3191,6 +3191,7 @@
|
|
|
3191
3191
|
"guide.step-intro.table-graph": "Les étapes suivantes montrent comment explorer les données RDF sous forme de tableau sans écrire de requêtes SPARQL. Cliquez sur l'IRI <b>{{iriLabel}}</b> pour l'explorer.",
|
|
3192
3192
|
"guide.step-intro.create-ttyg-agent": "Les étapes suivantes montrent comment utiliser la vue <b>{{viewName|translate}}</b> pour créer un agent.",
|
|
3193
3193
|
"guide.step-intro.create-similarity-index": "Les étapes suivantes montrent comment créer un index de similarité pour votre ensemble de données.",
|
|
3194
|
+
"guide.step-intro.class-relationships": "Les étapes suivantes montrent comment utiliser la vue <b>{{viewName|translate}}</b> pour explorer comment les classes sont connectées et comprendre les relations entre différents types de données dans votre jeu de données.",
|
|
3194
3195
|
"guide.step-help-info.create-similarity-index": "L'indice de similarité est utilisé pour trouver des mots qui ont été utilisés dans des contextes similaires à celui que vous recherchez. Par exemple, la recherche de \"ontology\" renverra à \"knowledge graph\", tandis qu'une simple similarité textuelle renverra à \"oncology\". Il s'agit d'une alternative à la recherche en texte intégral.",
|
|
3195
3196
|
"guide.step-menu.click-menu": "Cliquez sur le menu <b>{{menuLabelKey|translate}}</b>.",
|
|
3196
3197
|
"guide.step-action.create-repository": "Créer un dépôt",
|
|
@@ -3210,6 +3211,9 @@
|
|
|
3210
3211
|
"guide.step-action.conversation-with-ttyg-agent": "Conversation avec l'agent",
|
|
3211
3212
|
"guide.step-action.edit-ttyg-agent": "Modifier un agent",
|
|
3212
3213
|
"guide.step-action.create-similarity-index": "Créer un indice de similitude",
|
|
3214
|
+
"guide.step-action.class-relationships": "Explorer les relations entre classes",
|
|
3215
|
+
"guide.step_plugin.core-steps.copy-text-element.content": "Saisissez ce qui suit dans le champ de saisie : {{queryExplainMessageTranslated}}{{textAsHtmlCodeElement}}",
|
|
3216
|
+
"guide.step_plugin.core-steps.copy-text-element.copy-to-input": "Copier dans la saisie",
|
|
3213
3217
|
"guide.step_plugin.execute-sparql-query.query-editor.content": "Entrez la requête SPARQL suivante : {{queryExplainMessageTranslated}}{{queryAsHtmlCodeElement}}",
|
|
3214
3218
|
"guide.step_plugin.sparql-results-explain.content": "Le tableau montre les résultats de l'exécution de la requête.",
|
|
3215
3219
|
"guide.step_plugin.execute-sparql-query.run-sparql-query.content": "Cliquez sur le bouton <b>{{'query.editor.run.btn'|translate}}</b>.",
|
|
@@ -3236,7 +3240,8 @@
|
|
|
3236
3240
|
"guide.step_plugin.download-guide-resource.download.message.failure": "Échec du téléchargement du fichier '{{resourceFile}}' !",
|
|
3237
3241
|
"guide.step_plugin.choose-repository.content": "Cliquez sur la liste déroulante de sélection du dépôt.",
|
|
3238
3242
|
"guide.step_plugin.select-repository.content": "Cliquez sur le bouton de dépôt <b>{{getRepositoryId()}}</b>.",
|
|
3239
|
-
"guide.step_plugin.
|
|
3243
|
+
"guide.step_plugin.repositories.default-title": "Dépôts",
|
|
3244
|
+
"guide.step_plugin.repositories.select-repository.content": "Cliquez sur l’icône de connexion au dépôt.",
|
|
3240
3245
|
"guide.step_plugin.import_rdf_file.confirm_duplicate_files_dialog.content": "Cliquez sur le bouton <b>{{'common.yes.btn'|translate}}</b> pour remplacer le fichier existant.",
|
|
3241
3246
|
"guide.step_plugin.import_rdf_file.import-settings.import.button.content": "Cliquez sur le bouton <b>{{'common.import'|translate}}</b>.",
|
|
3242
3247
|
"guide.step_plugin.import_rdf_file.file-must-be-uploaded": "Téléchargez d'abord le fichier <b>{{resourceFile}}</b>",
|
|
@@ -3286,18 +3291,25 @@
|
|
|
3286
3291
|
"guide.step_plugin.ttyg.missing-key.content": "Pour utiliser <b>Parlez à votre graphique</b>, GraphDB doit d'abord être configuré pour fonctionner avec l'API LLM. Veuillez vous assurer que le type d'API LLM requis, l'URL et la clé sont bien en place avant de commencer. Pour des instructions de configuration détaillées, reportez-vous à la documentation ou contactez votre administrateur.",
|
|
3287
3292
|
"guide.step_plugin.create-ttyg-agent.create-agent": "Cliquez sur le bouton Créer un agent pour créer un nouvel agent.",
|
|
3288
3293
|
"guide.step_plugin.create-ttyg-agent.save-agent-settings": "Cliquez sur pour enregistrer les paramètres de l'agent.",
|
|
3294
|
+
"guide.step_plugin.configure-top-p.info": "Définit l'échantillonnage du noyau de l'agent. Lors de la récupération d'un ensemble de valeurs candidates, cela contrôle combien de ces valeurs doivent être considérées pour utilisation. Prend une valeur entre 0 et 1.<br>Réglez le curseur sur <b>{{topP}}</b>",
|
|
3295
|
+
"guide.step_plugin.configure-temperature.info": "Définit la température d'échantillonnage de l'agent. Des valeurs plus faibles donnent des réponses plus cohérentes et répétitives générées par l'agent et des valeurs plus élevées donnent une plus grande variété de réponses. Cela prend une valeur entre 0 et 2, mais des valeurs supérieures à 1 peuvent donner des réponses peu fiables et imprévisibles et ne sont pas recommandées.<br>Réglez le curseur sur <b>{{temperature}}</b>",
|
|
3289
3296
|
"guide.step_plugin.sparql-search-method.content": "L'activation de la recherche SPARQL permet à l'agent de répondre aux questions en effectuant une requête SPARQL. Cette méthode fonctionne bien pour les ensembles de données dotés d'une bonne ontologie et donne de bons résultats pour les questions fermées, y compris les agrégations.",
|
|
3290
3297
|
"guide.step_plugin.sparql-search-method.enable-toggle": "Cliquez sur le bouton pour activer la méthode de recherche SPARQL.",
|
|
3291
3298
|
"guide.step_plugin.sparql-search-method.disable-toggle": "Cliquez sur le bouton pour désactiver la méthode de recherche SPARQL..",
|
|
3292
3299
|
"guide.step_plugin.sparql-search-method.enable-ontology-from-graph": "Cliquez sur la case à cocher pour activer la fourniture d'une ontologie dans un graphe nommé.",
|
|
3300
|
+
"guide.step_plugin.sparql-search-method.enable-sparql-query": "Cliquez sur le bouton bascule pour activer la fourniture d'une requête SPARQL CONSTRUCT qui récupère l'ontologie.",
|
|
3301
|
+
"guide.step_plugin.sparql-search-method.add-missing-namespaces": "Cochez pour ajouter automatiquement les espaces de noms manquants.",
|
|
3293
3302
|
"guide.step_plugin.sparql-search-method.type-ontology-graph-name": "Type <b>{{ontologyGraph}}</b> en tant que graphe nommé contenant l'ontologie.",
|
|
3294
3303
|
"guide.step_plugin.fts-search-method.content": "L'activation de la recherche FTS permet à l'agent de répondre aux questions en utilisant la recherche plein texte dans les littéraux et les IRI. Les résultats sont bons pour les questions ouvertes, mais moins bons pour la fourniture d'agrégations..",
|
|
3295
3304
|
"guide.step_plugin.fts-search-method.enable-toggle": "Cliquez sur le bouton pour activer la méthode de recherche FTS.",
|
|
3296
3305
|
"guide.step_plugin.fts-search-method.disable-toggle": "Cliquez sur le bouton pour désactiver la méthode de recherche FTS.",
|
|
3306
|
+
"guide.step_plugin.fts-search-method.set-max-triples-per-call": "Saisissez <b>{{maxTriplesPerCall}}</b> comme nombre maximum de triplets à récupérer par appel.",
|
|
3297
3307
|
"guide.step_plugin.similarity-search-method.content": "L'activation de la recherche par similarité permet à l'agent de répondre aux questions en utilisant la recherche par similarité. Les résultats sont bons pour les questions ouvertes, mais moins bons pour les agrégations.",
|
|
3298
3308
|
"guide.step_plugin.similarity-search-method.enable-toggle": "Cliquez sur la case à cocher pour activer la méthode de recherche par similarité.",
|
|
3299
3309
|
"guide.step_plugin.similarity-search-method.disable-toggle": "Cliquez sur le bouton pour désactiver la méthode de recherche par similarité.",
|
|
3300
3310
|
"guide.step_plugin.similarity-search-method.select-index": "Sélectionner l'index à utiliser pour la recherche de similarité.",
|
|
3311
|
+
"guide.step_plugin.iri-discovery-search.enable-toggle": "Cliquez sur le bouton pour activer la recherche textuelle complète dans les libellés pour la découverte d'IRI. Cette méthode aide le modèle à découvrir les IRI pour une requête incomplète particulière lorsqu'il ne peut pas répondre aux questions générales sur le jeu de données par lui-même.",
|
|
3312
|
+
"guide.step_plugin.iri-discovery-search.disable-toggle": "Cliquez sur le bouton pour désactiver la recherche textuelle complète dans les libellés pour la découverte d'IRI.",
|
|
3301
3313
|
"guide.step_plugin.select-ttyg-agent.info.title": "Sélectionnez votre agent",
|
|
3302
3314
|
"guide.step_plugin.select-ttyg-agent.info.content": "Pour parler à votre graphique, vous devez d'abord choisir un agent",
|
|
3303
3315
|
"guide.step_plugin.select-ttyg-agent.open-agent-dropdown": "Cliquez sur le menu déroulant des agents pour voir les agents disponibles",
|
|
@@ -3319,7 +3331,16 @@
|
|
|
3319
3331
|
"guide.step_plugin.create-similarity-index.wait": "Attendre la création de l'index",
|
|
3320
3332
|
"guide.step_plugin.configure-agent.name-input": "Saisissez un nom pour l'agent. Vous y ferez référence ultérieurement",
|
|
3321
3333
|
"guide.step_plugin.configure-agent.model-input": "Vous pouvez saisir ici le nom du modèle OpenAI à utiliser.<br>Type: \"<b>{{model}}</b>\" pour configurer l'agent afin qu'il utilise ce modèle.",
|
|
3322
|
-
"guide.step_plugin.configure-agent.user-instructions-input": "
|
|
3334
|
+
"guide.step_plugin.configure-agent.user-instructions-input": "Ce sont des instructions supplémentaires qui seront transmises à l'agent.",
|
|
3335
|
+
"guide.step_plugin.class-relationships-intro.content": "Cette vue montre comment les instances de données de différentes classes sont connectées basées sur de vraies déclarations RDF.",
|
|
3336
|
+
"guide.step_plugin.class-relationships-diagram-intro.content": "Le diagramme montre les connexions groupées entre paires de classes. Chaque connexion représente plusieurs liens RDF (sujet–prédicat–objet) entre instances de deux classes.",
|
|
3337
|
+
"guide.step_plugin.class-relationships-digram-thickness-intro.content": "Chaque ligne de connexion varie en <b>épaisseur</b> basée sur le nombre de liens, en <b>couleur</b> basée sur la classe avec le plus de liens entrants, et en <b>direction</b> car les liens peuvent aller dans les deux sens (de la classe A vers la classe B et vice versa).",
|
|
3338
|
+
"guide.step_plugin.class-relationships-digram-predicates-intro.content": "Cliquez sur n'importe quelle ligne de connexion dans le diagramme pour voir les principaux prédicats utilisés entre ces deux classes. Cela aide à comprendre quel type de relations les lie.",
|
|
3339
|
+
"guide.step_plugin.class-relationships-named-graph-selection.content": "Si le référentiel contient plus d'un graphe nommé, vous pouvez filtrer la vue en ouvrant le menu déroulant <b>Tous les graphes</b> (à côté de la barre d'outils) et en sélectionnant le graphe à explorer.",
|
|
3340
|
+
"guide.step_plugin.class-relationships-class-list-intro.content": "Le panneau de gauche montre toutes les classes, triées par nombre de liens, affichant les connexions entrantes et sortantes.",
|
|
3341
|
+
"guide.step_plugin.class-relationships-class-list-background-intro.content": "Un <b>arrière-plan vert</b> derrière un nom de classe dans la liste indique qu'elle est actuellement affichée dans le diagramme.",
|
|
3342
|
+
"guide.step_plugin.class-relationships-class-list-selection.content": "Utilisez les icônes <b>+ / –</b> à côté de chaque nom de classe pour l'ajouter ou la retirer de l'affichage du diagramme.",
|
|
3343
|
+
"guide.step_plugin.rdf-rank-compute-fill.content": "Cliquez sur <b>Calculer tout</b> pour lancer le calcul du RDF Rank.",
|
|
3323
3344
|
"guide.confirm.cancel.message": "Êtes-vous sûr de vouloir arrêter le guide?",
|
|
3324
3345
|
"guide.unexpected.error.message": "Le guide a été annulé en raison d'une erreur inattendue. Veuillez exécuter à nouveau le guide et si le problème persiste, contactez le support.",
|
|
3325
3346
|
"guide.start.unexpected.error.message": "Le guide ne peut pas être démarré en raison d'une erreur inattendue. Veuillez réessayer d'exécuter le guide et si le problème persiste, contactez le support.",
|
package/dist/index.html
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
const clean = pathname.slice(0, -1) + search + hash;
|
|
5
5
|
window.history.replaceState({}, '', clean);
|
|
6
6
|
}
|
|
7
|
-
})();</script><meta name="viewport" content="width=device-width,initial-scale=1"><meta http-equiv="X-UA-Compatible" content="ie=edge"><base href="/"><link rel="stylesheet" href="css/splash-screen.css?v=3.1.0-
|
|
7
|
+
})();</script><meta name="viewport" content="width=device-width,initial-scale=1"><meta http-equiv="X-UA-Compatible" content="ie=edge"><base href="/"><link rel="stylesheet" href="css/splash-screen.css?v=3.1.0-RC2"><link rel="icon" type="image/png" href="assets/images/favicon.png"/><link rel="apple-touch-icon-precomposed" href="assets/images/favicon.png"><title>GraphDB Workbench</title><script src="resources/runtime.js?v=3.1.0-RC2"></script><meta name="importmap-type" use-injector/><script src="plugin-registry.js?v=3.1.0-RC2"></script><script src="plugins.js?v=3.1.0-RC2"></script><script>window.wbDevMode = false;</script><script type="injector-importmap">{
|
|
8
8
|
"imports": {
|
|
9
|
-
"single-spa": "./resources/single-spa.min.js?v=3.1.0-
|
|
10
|
-
"@ontotext/workbench-api": "./api/ontotext-workbench-api.js?v=3.1.0-
|
|
9
|
+
"single-spa": "./resources/single-spa.min.js?v=3.1.0-RC2",
|
|
10
|
+
"@ontotext/workbench-api": "./api/ontotext-workbench-api.js?v=3.1.0-RC2",
|
|
11
11
|
"@ontotext/root-config": "./main.fa0b99f721588e894d1d.js",
|
|
12
|
-
"@ontotext/legacy-workbench": "./legacyWorkbench.
|
|
13
|
-
"@ontotext/workbench": "./workbench/workbench/workbenchApp.js?v=3.1.0-
|
|
12
|
+
"@ontotext/legacy-workbench": "./legacyWorkbench.767d0ee29d83ec62733f.js",
|
|
13
|
+
"@ontotext/workbench": "./workbench/workbench/workbenchApp.js?v=3.1.0-RC2"
|
|
14
14
|
}
|
|
15
|
-
}</script><meta name="import-map-overrides-domains" content="denylist:prod.example.com"/><script src="resources/import-map-overrides.js?v=3.1.0-
|
|
15
|
+
}</script><meta name="import-map-overrides-domains" content="denylist:prod.example.com"/><script src="resources/import-map-overrides.js?v=3.1.0-RC2"></script><script src="resources/import-map-injector.js?v=3.1.0-RC2"></script></head><body><noscript>You need to enable JavaScript to run this app.</noscript><script>window.importMapInjector.initPromise.then(() => {
|
|
16
16
|
import('@ontotext/root-config');
|
|
17
|
-
});</script><import-map-overrides-full show-when-local-storage="devtools" dev-libs></import-map-overrides-full><figure id="splash-screen"><img decoding="sync" src="assets/graphdb-splash.svg?v=3.1.0-
|
|
17
|
+
});</script><import-map-overrides-full show-when-local-storage="devtools" dev-libs></import-map-overrides-full><figure id="splash-screen"><img decoding="sync" src="assets/graphdb-splash.svg?v=3.1.0-RC2" alt="GraphDB Workbench is loading..."></figure></body></html>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link href="css/cluster-nodes-configuration.css?v=3.1.0-
|
|
1
|
+
<link href="css/cluster-nodes-configuration.css?v=3.1.0-RC2" rel="stylesheet"/>
|
|
2
2
|
|
|
3
3
|
<div onto-loader-new ng-if="loader" class="create-cluster-loader" message="getLoaderMessage" size="100"></div>
|
|
4
4
|
<div class="add-node-wrapper pull-right mb-1">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link href="css/operations-statuses-monitor.css?v=3.1.0-
|
|
1
|
+
<link href="css/operations-statuses-monitor.css?v=3.1.0-RC2" rel="stylesheet"/>
|
|
2
2
|
|
|
3
3
|
<div ng-if="activeOperations && activeOperations.operations && activeOperations.operations.length > 0"
|
|
4
4
|
class="operations-statuses btn-group">
|