graphdb-workbench 2.1.0-RC1 → 2.1.0-RC3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/{11.7d07164f552bc27c327e.bundle.js → 11.7e4dcae789c43fc6131e.bundle.js} +2 -2
  2. package/dist/11.7e4dcae789c43fc6131e.bundle.js.map +1 -0
  3. package/dist/134.674fc334ea03aadba240.bundle.js +1 -1
  4. package/dist/134.674fc334ea03aadba240.bundle.js.map +1 -1
  5. package/dist/18.b39247b09bf69883801d.bundle.js +1 -1
  6. package/dist/18.b39247b09bf69883801d.bundle.js.map +1 -1
  7. package/dist/{25.e39c618ca1d1636339cf.bundle.js → 25.4aee6f444ae15b393a95.bundle.js} +2 -2
  8. package/dist/25.4aee6f444ae15b393a95.bundle.js.map +1 -0
  9. package/dist/30.aa58eb05e16cb046b2bc.bundle.js +1 -1
  10. package/dist/30.aa58eb05e16cb046b2bc.bundle.js.map +1 -1
  11. package/dist/31.27bb6cb77874c106bdf3.bundle.js +1 -1
  12. package/dist/31.27bb6cb77874c106bdf3.bundle.js.map +1 -1
  13. package/dist/{5.53c0a20d56d6828fa504.bundle.js → 5.e6ebc1c858a5b922c8fb.bundle.js} +2 -2
  14. package/dist/5.e6ebc1c858a5b922c8fb.bundle.js.map +1 -0
  15. package/dist/70.9a3a49005f2f0f088bf0.bundle.js +2 -0
  16. package/dist/70.9a3a49005f2f0f088bf0.bundle.js.map +1 -0
  17. package/dist/71.997880006015b3f246cc.bundle.js +2 -0
  18. package/dist/71.997880006015b3f246cc.bundle.js.map +1 -0
  19. package/dist/73.2f485c964b689f1e927a.bundle.js +2 -0
  20. package/dist/73.2f485c964b689f1e927a.bundle.js.map +1 -0
  21. package/dist/75.7e5798d90571469de255.bundle.js +2 -0
  22. package/dist/75.7e5798d90571469de255.bundle.js.map +1 -0
  23. package/dist/77.4e84abd9b025b1812617.bundle.js +2 -0
  24. package/dist/77.4e84abd9b025b1812617.bundle.js.map +1 -0
  25. package/dist/78.931509bfe1d61d91eb06.bundle.js +2 -0
  26. package/dist/78.931509bfe1d61d91eb06.bundle.js.map +1 -0
  27. package/dist/79.ac5cb425c55f53b96a37.bundle.js +2 -0
  28. package/dist/79.ac5cb425c55f53b96a37.bundle.js.map +1 -0
  29. package/dist/{80.6dd83199b3a62951ba72.bundle.js → 80.e250a6936fcc15642e07.bundle.js} +1 -1
  30. package/dist/80.e250a6936fcc15642e07.bundle.js.map +1 -0
  31. package/dist/82.5546d65e41f31a410b86.bundle.js +1 -1
  32. package/dist/82.5546d65e41f31a410b86.bundle.js.map +1 -1
  33. package/dist/{bundle.cca41098c7f6b7b6d221.bundle.js → bundle.22ecad5921060aa35ed6.bundle.js} +11 -11
  34. package/dist/bundle.22ecad5921060aa35ed6.bundle.js.map +1 -0
  35. package/dist/i18n/locale-en.json +18 -10
  36. package/dist/i18n/locale-fr.json +7 -6
  37. package/dist/index.html +3 -3
  38. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
  39. package/dist/pages/autocomplete.html +1 -1
  40. package/dist/pages/choose-repository-type.html +1 -1
  41. package/dist/pages/cluster-management/clusterInfo.html +3 -3
  42. package/dist/pages/create-index.html +4 -4
  43. package/dist/pages/dependencies.html +1 -1
  44. package/dist/pages/domainRangeInfo.html +2 -2
  45. package/dist/pages/edit.html +1 -1
  46. package/dist/pages/explore.html +1 -1
  47. package/dist/pages/export.html +1 -1
  48. package/dist/pages/find.html +1 -1
  49. package/dist/pages/graph-config/saveGraphConfig.html +11 -11
  50. package/dist/pages/graphs-visualizations.html +7 -7
  51. package/dist/pages/guides.html +1 -1
  52. package/dist/pages/import.html +1 -1
  53. package/dist/pages/jdbc-create.html +5 -5
  54. package/dist/pages/monitor/queries.html +1 -1
  55. package/dist/pages/monitor/resources.html +2 -2
  56. package/dist/pages/namespaces.html +2 -2
  57. package/dist/pages/plugins.html +1 -1
  58. package/dist/pages/rdfClassHierarchyInfo.html +8 -7
  59. package/dist/pages/rdfrank.html +2 -2
  60. package/dist/pages/repositories.html +2 -2
  61. package/dist/pages/repository.html +42 -11
  62. package/dist/pages/similarity-indexes.html +1 -1
  63. package/dist/pages/sparql-template-create.html +5 -5
  64. package/dist/pages/sparql.html +3 -3
  65. package/dist/pages/webapi.html +2 -2
  66. package/dist/plugins.js +172 -61
  67. package/dist/res/swagger/index.html +27 -27
  68. package/package.json +1 -1
  69. package/dist/11.7d07164f552bc27c327e.bundle.js.map +0 -1
  70. package/dist/25.e39c618ca1d1636339cf.bundle.js.map +0 -1
  71. package/dist/5.53c0a20d56d6828fa504.bundle.js.map +0 -1
  72. package/dist/70.24c74a3f706feb476c62.bundle.js +0 -2
  73. package/dist/70.24c74a3f706feb476c62.bundle.js.map +0 -1
  74. package/dist/71.0ab35e02331bebfd8b68.bundle.js +0 -2
  75. package/dist/71.0ab35e02331bebfd8b68.bundle.js.map +0 -1
  76. package/dist/73.cc31681a2d4d7c0fe2ba.bundle.js +0 -2
  77. package/dist/73.cc31681a2d4d7c0fe2ba.bundle.js.map +0 -1
  78. package/dist/75.f3535bf8818b4fe6d4ba.bundle.js +0 -2
  79. package/dist/75.f3535bf8818b4fe6d4ba.bundle.js.map +0 -1
  80. package/dist/77.4c80919e2b84b3b99cb9.bundle.js +0 -2
  81. package/dist/77.4c80919e2b84b3b99cb9.bundle.js.map +0 -1
  82. package/dist/78.be1f229c9fa413560a77.bundle.js +0 -2
  83. package/dist/78.be1f229c9fa413560a77.bundle.js.map +0 -1
  84. package/dist/79.58a71128203d7abe5973.bundle.js +0 -2
  85. package/dist/79.58a71128203d7abe5973.bundle.js.map +0 -1
  86. package/dist/80.6dd83199b3a62951ba72.bundle.js.map +0 -1
  87. package/dist/bundle.cca41098c7f6b7b6d221.bundle.js.map +0 -1
package/dist/plugins.js CHANGED
@@ -299,8 +299,8 @@ PluginRegistry.add('guide.step', [
299
299
  content: '',
300
300
  extraContent: options.introExtraContent,
301
301
  url: '/hierarchy',
302
- elementSelector: '#classChart',
303
- placement: 'top'
302
+ elementSelector: '#classChart #main-group',
303
+ placement: 'left'
304
304
  }, options)
305
305
  });
306
306
  }
@@ -313,6 +313,7 @@ PluginRegistry.add('guide.step', [
313
313
  options: angular.extend({}, {
314
314
  content: 'guide.step_plugin.class_hierarchy_zoom.content',
315
315
  url: '/hierarchy',
316
+ placement: 'left',
316
317
  elementSelector: selector,
317
318
  onNextClick: (guide, step) => {
318
319
  GuideUtils.classHierarchyZoom(step.elementSelector);
@@ -327,6 +328,8 @@ PluginRegistry.add('guide.step', [
327
328
  content: '',
328
329
  extraContent: zoomIri.postExtraContent,
329
330
  url: '/hierarchy',
331
+ placement: 'left',
332
+ beforeShowPromise: GuideUtils.deferredShow(800),
330
333
  elementSelector: selector
331
334
  }, options)
332
335
  });
@@ -467,6 +470,8 @@ PluginRegistry.add('guide.step', [
467
470
  const GuideUtils = services.GuideUtils;
468
471
  options.mainAction = 'create-repository';
469
472
 
473
+ const repositoryIdInputSelector = GuideUtils.getGuideElementSelector('graphDBRepositoryIdInput');
474
+ const repositoryId = options.repositoryId;
470
475
  const steps = [
471
476
  {
472
477
  guideBlockName: 'click-main-menu',
@@ -496,19 +501,20 @@ PluginRegistry.add('guide.step', [
496
501
  options: angular.extend({}, {
497
502
  content: 'guide.step_plugin.create_repository.repository_id.content',
498
503
  url: '/repository/create/graphdb',
499
- elementSelector: GuideUtils.getGuideElementSelector('graphDBRepositoryIdInput'),
500
- onNextValidate: (step) => GuideUtils.validateTextInput(step.elementSelector, step.repositoryId)
504
+ elementSelector: repositoryIdInputSelector,
505
+ onNextValidate: () => GuideUtils.validateTextInput(repositoryIdInputSelector, repositoryId)
501
506
  }, options)
502
507
  }
503
508
  ];
504
509
 
505
- if (!!options.rulesetName) {
510
+ if (options.rulesetName) {
506
511
  steps.push({
507
512
  guideBlockName: 'clickable-element',
508
513
  options: angular.extend({}, {
509
514
  content: 'guide.step_plugin.create_repository.ruleset_dropdown.content',
510
515
  url: '/repository/create/graphdb',
511
516
  elementSelector: GuideUtils.getGuideElementSelector('graphDBRepositoryRulesetSelect'),
517
+ show: () => GuideUtils.validateTextInput(repositoryIdInputSelector, repositoryId),
512
518
  rulesetName: options.rulesetName
513
519
  }, options)
514
520
  });
@@ -519,6 +525,7 @@ PluginRegistry.add('guide.step', [
519
525
  content: 'guide.step_plugin.create_repository.save_button.content',
520
526
  url: '/repository/create/graphdb',
521
527
  elementSelector: GuideUtils.getGuideElementSelector('graphDBRepositoryCrateButton'),
528
+ show: () => GuideUtils.validateTextInput(repositoryIdInputSelector, repositoryId),
522
529
  onNextClick: GuideUtils.clickOnGuideElement('graphDBRepositoryCrateButton')
523
530
  }, options)
524
531
  });
@@ -551,8 +558,12 @@ PluginRegistry.add('guide.step', [
551
558
  guideBlockName: 'enable-autocomplete',
552
559
  getSteps: (options, services) => {
553
560
  const GuideUtils = services.GuideUtils;
561
+ const toastr = services.toastr;
562
+ const $translate = services.$translate;
563
+ const $interpolate = services.$interpolate;
554
564
  options.mainAction = 'enable-autocomplete';
555
565
 
566
+ const autocompleteCheckboxSelector = GuideUtils.getGuideElementSelector('autocompleteCheckbox');
556
567
  return [
557
568
  {
558
569
  guideBlockName: 'click-main-menu',
@@ -561,31 +572,46 @@ PluginRegistry.add('guide.step', [
561
572
  showIntro: true
562
573
  }, options)
563
574
  }, {
564
- guideBlockName: 'clickable-element',
565
- options: angular.extend({}, {
566
- content: 'guide.step_plugin.enable-autocomplete.content',
567
- url: '/autocomplete',
568
- elementSelector: GuideUtils.getGuideElementSelector('autocompleteCheckbox'),
569
- onNextClick: (guide) => {
570
- GuideUtils.waitFor(GuideUtils.getGuideElementSelector('autocompleteCheckbox', ' input'), 3, false)
571
- .then(autocompleteCheckbox => {
572
- if (!autocompleteCheckbox.is(':checked')) {
573
- GuideUtils.clickOnGuideElement('autocompleteCheckbox')();
574
- }
575
- });
576
- guide.next();
577
- }
578
- }, options)
579
- },
575
+ guideBlockName: 'clickable-element',
576
+ options: angular.extend({}, {
577
+ content: 'guide.step_plugin.enable-autocomplete.content',
578
+ url: '/autocomplete',
579
+ elementSelector: autocompleteCheckboxSelector,
580
+ // Disable default behavior of service when element is clicked.
581
+ advanceOn: undefined,
582
+ show: (guide) => () => {
583
+ // Added listener to the element.
584
+ $(autocompleteCheckboxSelector)
585
+ .on('mouseup.autocompleteCheckboxClick', function () {
586
+ // If autocomplete is enabled go to the next step.
587
+ if (!GuideUtils.isGuideElementChecked('autocompleteCheckbox', ' input')) {
588
+ guide.next();
589
+ }
590
+ });
591
+ },
592
+ hide: () => () => {
593
+ // Remove ths listener from element. It is important when step is hided.
594
+ $(autocompleteCheckboxSelector).off('mouseup.autocompleteCheckboxClick');
595
+ },
596
+ onNextValidate: () => {
597
+ if (!GuideUtils.isGuideElementChecked('autocompleteCheckbox', ' input')) {
598
+ GuideUtils.noNextErrorToast(toastr, $translate, $interpolate, 'guide.step_plugin.enable-autocomplete.error', options);
599
+ return false;
600
+ }
601
+ return true;
602
+ }
603
+ }, options)
604
+ },
580
605
  {
581
606
  guideBlockName: 'read-only-element',
582
607
  options: angular.extend({}, {
583
608
  content: 'guide.step_plugin.enable-autocomplete.status_info.content',
584
609
  url: '/autocomplete',
585
- elementSelector: GuideUtils.getGuideElementSelector('autocompleteStatus')
610
+ elementSelector: GuideUtils.getGuideElementSelector('autocompleteStatus'),
611
+ canBePaused: false
586
612
  }, options)
587
613
  }
588
- ]
614
+ ];
589
615
  }
590
616
  }
591
617
  ]);
@@ -760,6 +786,7 @@ PluginRegistry.add('guide.step', [
760
786
  );
761
787
  }
762
788
 
789
+ const importSettingsButtonSelector = GuideUtils.getGuideElementSelector('import-settings-import-button');
763
790
  steps.push(...[
764
791
  {
765
792
  guideBlockName: 'clickable-element',
@@ -767,6 +794,21 @@ PluginRegistry.add('guide.step', [
767
794
  content: 'guide.step_plugin.import_rdf_file.content',
768
795
  url: '/import',
769
796
  elementSelector: GuideUtils.getGuideElementSelector('uploadRdfFileButton'),
797
+ // Disable default behavior of service when element is clicked.
798
+ advanceOn: undefined,
799
+ show: (guide) => () => {
800
+ // Add "change" listener to the file upload input, it will be triggered when a file is selected.
801
+ $('#ngf-wb-import-uploadFile')
802
+ .on('change.importRdfFile', function () {
803
+ // Check if expected file is selected, then process to the next step.
804
+ GuideUtils.waitFor(GuideUtils.getGuideElementSelector('import-file-' + options.resourceFile), 2)
805
+ .then(() => guide.next());
806
+ });
807
+ },
808
+ hide: () => () => {
809
+ // Remove ths listener from element. It is important when step is hided.
810
+ $('#ngf-wb-import-uploadFile').off('change.importRdfFile');
811
+ },
770
812
  onNextValidate: () => {
771
813
  if (!$(GuideUtils.getGuideElementSelector('import-file-' + options.resourceFile)).length) {
772
814
  GuideUtils.noNextErrorToast(toastr, $translate, $interpolate,
@@ -792,12 +834,25 @@ PluginRegistry.add('guide.step', [
792
834
  guideBlockName: 'clickable-element',
793
835
  options: angular.extend({}, {
794
836
  content: 'guide.step_plugin.import_rdf_file.import-settings.import.button.content',
795
- elementSelector: GuideUtils.getGuideElementSelector('import-settings-import-button'),
837
+ elementSelector: importSettingsButtonSelector,
796
838
  placement: 'top',
797
- onPreviousClick: (guide) => new Promise(function (resolve) {
839
+ onPreviousClick: () => new Promise(function (resolve) {
798
840
  GuideUtils.clickOnGuideElement('import-settings-cancel-button')()
799
841
  .then(() => resolve());
800
842
  }),
843
+ beforeShowPromise: () => new Promise(function (resolve, reject) {
844
+ services.GuideUtils.deferredShow(300)()
845
+ .then(() => {
846
+ services.GuideUtils.waitFor(importSettingsButtonSelector, 3)
847
+ .then(() => {
848
+ resolve();
849
+ })
850
+ .catch((error) => {
851
+ services.toastr.error(services.$translate.instant('guide.unexpected.error.message'));
852
+ reject(error);
853
+ });
854
+ });
855
+ }),
801
856
  onNextClick: () => GuideUtils.clickOnGuideElement('import-settings-import-button')(),
802
857
  canBePaused: false
803
858
  }, options)
@@ -808,10 +863,10 @@ PluginRegistry.add('guide.step', [
808
863
  content: 'guide.step_plugin.import_status_info.content',
809
864
  url: '/import',
810
865
  elementSelector: GuideUtils.getGuideElementSelector('import-status-info'),
811
- onPreviousClick: (guide) => new Promise(function (resolve) {
866
+ onPreviousClick: () => new Promise(function (resolve) {
812
867
  GuideUtils.clickOnGuideElement('import-file-' + options.resourceFile)()
813
- .then(() => resolve())
814
- }),
868
+ .then(() => resolve());
869
+ })
815
870
  }, options)
816
871
  }
817
872
  ]);
@@ -960,6 +1015,7 @@ PluginRegistry.add('guide.step', [
960
1015
  const GuideUtils = services.GuideUtils;
961
1016
  options.mainAction = 'select-repository';
962
1017
 
1018
+ let repositoryButtonSelector = GuideUtils.getGuideElementSelector(`repository-${options.repositoryId}-button`);
963
1019
  return [{
964
1020
  guideBlockName: 'clickable-element',
965
1021
  options: angular.extend({}, {
@@ -972,8 +1028,17 @@ PluginRegistry.add('guide.step', [
972
1028
  guideBlockName: 'clickable-element',
973
1029
  options: angular.extend({}, {
974
1030
  content: 'guide.step_plugin.select-repository.content',
975
- elementSelector: GuideUtils.getGuideElementSelector(`repository-${options.repositoryId}-button`),
976
- onNextClick: (guide) => GuideUtils.clickOnGuideElement(`repository-${options.repositoryId}-button`)().then(() => guide.next())
1031
+ elementSelector: repositoryButtonSelector,
1032
+ beforeShowPromise: () => new Promise(function (resolve, reject) {
1033
+ services.GuideUtils.waitFor(repositoryButtonSelector, 1)
1034
+ .then(() => resolve())
1035
+ .catch((error) => {
1036
+ services.toastr.error(services.$translate.instant('guide.unexpected.error.message'));
1037
+ reject(error);
1038
+ });
1039
+ }),
1040
+ onNextClick: (guide) => GuideUtils.clickOnGuideElement(`repository-${options.repositoryId}-button`)().then(() => guide.next()),
1041
+ canBePaused: false
977
1042
  }, options)
978
1043
  }
979
1044
  ];
@@ -1008,7 +1073,6 @@ PluginRegistry.add('guide.step', [
1008
1073
  guideBlockName: 'clickable-element',
1009
1074
  options: angular.extend({}, {
1010
1075
  content: 'guide.step-intro.table-graph',
1011
- skipPoint: true,
1012
1076
  scrollToHandler: GuideUtils.scrollToTop,
1013
1077
  elementSelector: GuideUtils.getSparqlResultsSelectorForIri(options.iri),
1014
1078
  onNextClick: (guide, step) => {
@@ -1022,7 +1086,7 @@ PluginRegistry.add('guide.step', [
1022
1086
  options: angular.extend({}, {
1023
1087
  content: 'guide.step_plugin.table-graph-overview',
1024
1088
  scrollToHandler: GuideUtils.scrollToTop,
1025
- elementSelector: GuideUtils.getSparqlResultsSelector(),
1089
+ elementSelector: GuideUtils.getSparqlResultsSelector() + ' tbody',
1026
1090
  placement: 'top'
1027
1091
  }, options)
1028
1092
  }
@@ -1095,7 +1159,7 @@ PluginRegistry.add('guide.step', [
1095
1159
  steps.push({
1096
1160
  guideBlockName: 'read-only-element',
1097
1161
  options: angular.extend({}, {
1098
- elementSelector: GuideUtils.getSparqlResultsSelector()
1162
+ elementSelector: GuideUtils.getSparqlResultsSelector() + ' tbody'
1099
1163
  }, angular.extend({}, options, subStep))
1100
1164
  });
1101
1165
  }
@@ -1107,13 +1171,13 @@ PluginRegistry.add('guide.step', [
1107
1171
  }
1108
1172
  ]);
1109
1173
 
1110
- const disableAllNodes = () => () =>{
1174
+ const disableAllNodes = () => () => {
1111
1175
  $('.node-wrapper').addClass('disable-visual-graph-node');
1112
- }
1176
+ };
1113
1177
 
1114
1178
  const enableAllNodes = () => () => {
1115
1179
  $('.node-wrapper').removeClass('disable-visual-graph-node');
1116
- }
1180
+ };
1117
1181
 
1118
1182
  PluginRegistry.add('guide.step', [
1119
1183
  {
@@ -1160,13 +1224,13 @@ PluginRegistry.add('guide.step', [
1160
1224
  onPreviousClick: () => new Promise(function (resolve, reject) {
1161
1225
  $location.url('/graphs-visualizations');
1162
1226
  $route.reload();
1163
- let searchInputSelector = GuideUtils.getGuideElementSelector('graphVisualisationSearchInputNotConfigured', ' input');
1227
+ const searchInputSelector = GuideUtils.getGuideElementSelector('graphVisualisationSearchInputNotConfigured', ' input');
1164
1228
  GuideUtils.waitFor(searchInputSelector, 3)
1165
1229
  .then(() => {
1166
1230
  GuideUtils.validateTextInput(searchInputSelector, options.easyGraphInputText);
1167
1231
  resolve();
1168
1232
  })
1169
- .catch(() => reject());
1233
+ .catch((error) => reject(error));
1170
1234
  }),
1171
1235
  canBePaused: false,
1172
1236
  forceReload: true
@@ -1182,6 +1246,17 @@ PluginRegistry.add('guide.step', [
1182
1246
  const $rootScope = services.$rootScope;
1183
1247
  const $route = services.$route;
1184
1248
  const elementSelector = `.node-wrapper[id^="${options.iri}"] circle`;
1249
+
1250
+ // Expands visual graph when a node is double-clicked.
1251
+ const dblClickFunction = (guide) => () => {
1252
+ GuideUtils.graphVizExpandNode(elementSelector);
1253
+ guide.getCurrentStep().hide();
1254
+ GuideUtils.awaitAlphaDropD3(null, $rootScope)()
1255
+ .then(() => {
1256
+ guide.next();
1257
+ });
1258
+ };
1259
+
1185
1260
  return [
1186
1261
  {
1187
1262
  guideBlockName: 'clickable-element',
@@ -1191,10 +1266,8 @@ PluginRegistry.add('guide.step', [
1191
1266
  url: '/graphs-visualizations',
1192
1267
  canBePaused: false,
1193
1268
  elementSelector,
1194
- advanceOn: {
1195
- selector: `.node-wrapper[id^="${options.iri}"] circle`,
1196
- event: 'dblclick'
1197
- },
1269
+ // Disable default behavior of service when element is clicked.
1270
+ advanceOn: undefined,
1198
1271
  onNextClick: (guide, stepDescription) => {
1199
1272
  GuideUtils.graphVizExpandNode(stepDescription.elementSelector);
1200
1273
  guide.getCurrentStep().hide();
@@ -1203,15 +1276,24 @@ PluginRegistry.add('guide.step', [
1203
1276
  guide.next();
1204
1277
  });
1205
1278
  },
1279
+ show: (guide) => () => {
1280
+ // Add "dblclick" listener to the element. Processing of double-click event is disabled for the visual graph when guide is started.
1281
+ // So we have expanded the graph manually when a selected node is double-clicked.
1282
+ $(elementSelector).on('dblclick.onNodeDbClicked', dblClickFunction(guide));
1283
+ },
1284
+ hide: () => () => {
1285
+ // Remove the "dblclick" listener of element. It is important when step is hided.
1286
+ $(elementSelector).off('dblclick.onNodeDbClicked');
1287
+ },
1206
1288
  beforeShowPromise: () => new Promise(function (resolve, reject) {
1207
1289
  $route.reload();
1208
1290
  GuideUtils.deferredShow(50)()
1209
1291
  .then(() => {
1210
1292
  GuideUtils.awaitAlphaDropD3(elementSelector, $rootScope)()
1211
1293
  .then(() => resolve())
1212
- .catch(() => reject());
1294
+ .catch((error) => reject(error));
1213
1295
  });
1214
- }),
1296
+ })
1215
1297
  }, options)
1216
1298
  }
1217
1299
  ];
@@ -1223,6 +1305,28 @@ PluginRegistry.add('guide.step', [
1223
1305
  const GuideUtils = services.GuideUtils;
1224
1306
  const $rootScope = services.$rootScope;
1225
1307
  const elementSelector = `.node-wrapper[id^="${options.iri}"] circle`;
1308
+
1309
+ let mouseClickTimeStamp;
1310
+ let mouseEventTimer;
1311
+
1312
+ // Expands Node info sidebar panel when a node is clicked.
1313
+ const onClick = (services, guide) => (event) => {
1314
+ if (mouseEventTimer) {
1315
+ // Cancels expansion of the sidebar panel if user double-clicked.
1316
+ if (event.timeStamp - mouseClickTimeStamp < 400) {
1317
+ services.$timeout.cancel(mouseEventTimer);
1318
+ mouseEventTimer = null;
1319
+ }
1320
+ } else {
1321
+ mouseClickTimeStamp = event.timeStamp;
1322
+ mouseEventTimer = services.$timeout(function () {
1323
+ GuideUtils.graphVizShowNodeInfo(elementSelector);
1324
+ mouseEventTimer = null;
1325
+ guide.next();
1326
+ }, 500);
1327
+ }
1328
+ };
1329
+
1226
1330
  const steps = [
1227
1331
  {
1228
1332
  guideBlockName: 'clickable-element',
@@ -1232,9 +1336,16 @@ PluginRegistry.add('guide.step', [
1232
1336
  url: '/graphs-visualizations',
1233
1337
  elementSelector,
1234
1338
  canBePaused: false,
1235
- advanceOn: {
1236
- selector: `.node-wrapper[id^="${options.iri}"] circle`,
1237
- event: 'click'
1339
+ // Disable default behavior of service when element is clicked.
1340
+ advanceOn: undefined,
1341
+ show: (guide) => () => {
1342
+ // Add "click" listener to the element. Processing of click event is disabled for the visual graph when guide is started.
1343
+ // So we have to open side panel info manually when a selected node is clicked.
1344
+ $(elementSelector).on('click.onNodeClicked', onClick(services, guide));
1345
+ },
1346
+ hide: () => () => {
1347
+ // Remove the "click" listener of element. It is important when step is hided.
1348
+ $(elementSelector).off('click.onNodeClicked');
1238
1349
  },
1239
1350
  onNextClick: (guide, step) => {
1240
1351
  GuideUtils.graphVizShowNodeInfo(step.elementSelector);
@@ -1256,7 +1367,7 @@ PluginRegistry.add('guide.step', [
1256
1367
  onPreviousClick: () => new Promise(function (resolve) {
1257
1368
  GuideUtils.waitFor(closeButtonSelector, 3)
1258
1369
  .then(() => {
1259
- $(closeButtonSelector).trigger('click')
1370
+ $(closeButtonSelector).trigger('click');
1260
1371
  resolve();
1261
1372
  }).catch(() => resolve());
1262
1373
  })
@@ -1265,7 +1376,7 @@ PluginRegistry.add('guide.step', [
1265
1376
  ];
1266
1377
 
1267
1378
  if (angular.isArray(options.focusProperties)) {
1268
- options.focusProperties.forEach(focusProperty => {
1379
+ options.focusProperties.forEach((focusProperty) => {
1269
1380
  if (!angular.isObject(focusProperty)) {
1270
1381
  focusProperty = {
1271
1382
  property: focusProperty
@@ -1382,11 +1493,11 @@ const BASIC_STEP = {
1382
1493
  };
1383
1494
 
1384
1495
  /**
1385
- * This function will be call before show a step. Step will shown after promise is resolve. It waits element of step to be visible on the page.
1386
- * @param maxWaitTime
1387
- * @param services
1388
- * @param elementSelector
1389
- * @returns {function(): *}
1496
+ * This function will be called before show a step. Step will be shown after promise is resolve. It waits element of step to be visible on the page.
1497
+ * @param {*} services
1498
+ * @param {string} elementSelector
1499
+ * @param {number} maxWaitTime
1500
+ * @return {function(): *}
1390
1501
  */
1391
1502
  const beforeShowPromise = (services, elementSelector, maxWaitTime) => {
1392
1503
  return () => {
@@ -1397,22 +1508,22 @@ const beforeShowPromise = (services, elementSelector, maxWaitTime) => {
1397
1508
  // throw the error, otherwise guide will continue with the next step.
1398
1509
  throw error;
1399
1510
  });
1400
- }
1401
- }
1511
+ };
1512
+ };
1402
1513
 
1403
1514
  PluginRegistry.add('guide.step', [
1404
1515
  {
1405
1516
  guideBlockName: 'clickable-element',
1406
1517
  getStep: (options, services) => {
1407
1518
  const notOverridable = {
1408
- type: 'clickable',
1519
+ type: 'clickable'
1409
1520
  };
1410
1521
 
1411
1522
  const stepDescription = angular.extend({}, BASIC_STEP, {
1412
1523
  advanceOn: {
1413
1524
  selector: options.elementSelector,
1414
1525
  event: 'click'
1415
- },
1526
+ }
1416
1527
  }, options, notOverridable);
1417
1528
 
1418
1529
  if (!stepDescription.beforeShowPromise) {
@@ -1425,7 +1536,7 @@ PluginRegistry.add('guide.step', [
1425
1536
  guideBlockName: 'read-only-element',
1426
1537
  getStep: (options, services) => {
1427
1538
  const notOverridable = {
1428
- type: 'readonly',
1539
+ type: 'readonly'
1429
1540
  };
1430
1541
  const stepDescription = angular.extend({}, BASIC_STEP, options, notOverridable);
1431
1542
  if (!stepDescription.beforeShowPromise) {
@@ -1438,7 +1549,7 @@ PluginRegistry.add('guide.step', [
1438
1549
  guideBlockName: 'input-element',
1439
1550
  getStep: (options, services) => {
1440
1551
  const notOverridable = {
1441
- type: 'input',
1552
+ type: 'input'
1442
1553
  };
1443
1554
  const stepDescription = angular.extend({}, BASIC_STEP, options, notOverridable);
1444
1555
  if (!stepDescription.beforeShowPromise) {
@@ -1451,7 +1562,7 @@ PluginRegistry.add('guide.step', [
1451
1562
  guideBlockName: 'info-message',
1452
1563
  getStep: (options) => {
1453
1564
  const notOverridable = {
1454
- type: 'readonly',
1565
+ type: 'readonly'
1455
1566
  };
1456
1567
  return angular.extend({}, BASIC_STEP, options, notOverridable);
1457
1568
  }
@@ -3,37 +3,37 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <title>Swagger UI</title>
6
- <link rel="icon" type="image/png" href="images/favicon-32x32.png?v=2.1.0-RC1" sizes="32x32"/>
7
- <link rel="icon" type="image/png" href="images/favicon-16x16.png?v=2.1.0-RC1" sizes="16x16"/>
8
- <link href='../../css/common.css?v=2.1.0-RC1' media='screen' rel='stylesheet' type='text/css'/>
9
- <link href='css/reset.css?v=2.1.0-RC1' media='screen' rel='stylesheet' type='text/css'/>
10
- <link href='css/screen.css?v=2.1.0-RC1' media='screen' rel='stylesheet' type='text/css'/>
11
- <link href='css/onto-theme.css?v=2.1.0-RC1' media='screen' rel='stylesheet' type='text/css'/>
12
- <link href='css/reset.css?v=2.1.0-RC1' media='print' rel='stylesheet' type='text/css'/>
13
- <link href='css/print.css?v=2.1.0-RC1' media='print' rel='stylesheet' type='text/css'/>
14
- <link href='css/onto-theme.css?v=2.1.0-RC1' media='print' rel='stylesheet' type='text/css'/>
6
+ <link rel="icon" type="image/png" href="images/favicon-32x32.png?v=2.1.0-RC3" sizes="32x32"/>
7
+ <link rel="icon" type="image/png" href="images/favicon-16x16.png?v=2.1.0-RC3" sizes="16x16"/>
8
+ <link href='../../css/common.css?v=2.1.0-RC3' media='screen' rel='stylesheet' type='text/css'/>
9
+ <link href='css/reset.css?v=2.1.0-RC3' media='screen' rel='stylesheet' type='text/css'/>
10
+ <link href='css/screen.css?v=2.1.0-RC3' media='screen' rel='stylesheet' type='text/css'/>
11
+ <link href='css/onto-theme.css?v=2.1.0-RC3' media='screen' rel='stylesheet' type='text/css'/>
12
+ <link href='css/reset.css?v=2.1.0-RC3' media='print' rel='stylesheet' type='text/css'/>
13
+ <link href='css/print.css?v=2.1.0-RC3' media='print' rel='stylesheet' type='text/css'/>
14
+ <link href='css/onto-theme.css?v=2.1.0-RC3' media='print' rel='stylesheet' type='text/css'/>
15
15
 
16
- <script src='lib/object-assign-pollyfill.js?v=2.1.0-RC1' type='text/javascript'></script>
17
- <script src='lib/jquery-3.4.1.min.js?v=2.1.0-RC1' type='text/javascript'></script>
18
- <script src='lib/jquery.slideto.min.js?v=2.1.0-RC1' type='text/javascript'></script>
19
- <script src='lib/jquery.wiggle.min.js?v=2.1.0-RC1' type='text/javascript'></script>
16
+ <script src='lib/object-assign-pollyfill.js?v=2.1.0-RC3' type='text/javascript'></script>
17
+ <script src='lib/jquery-3.4.1.min.js?v=2.1.0-RC3' type='text/javascript'></script>
18
+ <script src='lib/jquery.slideto.min.js?v=2.1.0-RC3' type='text/javascript'></script>
19
+ <script src='lib/jquery.wiggle.min.js?v=2.1.0-RC3' type='text/javascript'></script>
20
20
 
21
- <script src="lib/jquery-migrate-1.4.1.min.js?v=2.1.0-RC1"></script>
22
- <script src='lib/jquery.ba-bbq.min.js?v=2.1.0-RC1' type='text/javascript'></script>
23
- <script src='lib/handlebars.min-v4.7.3.js?v=2.1.0-RC1' type='text/javascript'></script>
24
- <script src='lib/lodash.min.js?v=2.1.0-RC1' type='text/javascript'></script>
25
- <script src='lib/backbone-min.js?v=2.1.0-RC1' type='text/javascript'></script>
26
- <script src='swagger-ui.js?v=2.1.0-RC1' type='text/javascript'></script>
27
- <script src='lib/highlight.9.1.0.pack.js?v=2.1.0-RC1' type='text/javascript'></script>
28
- <script src='lib/highlight.9.1.0.pack_extended.js?v=2.1.0-RC1' type='text/javascript'></script>
29
- <script src='lib/jsoneditor.min.js?v=2.1.0-RC1' type='text/javascript'></script>
30
- <script src='lib/marked.js?v=2.1.0-RC1' type='text/javascript'></script>
31
- <script src='lib/swagger-oauth.js?v=2.1.0-RC1' type='text/javascript'></script>
21
+ <script src="lib/jquery-migrate-1.4.1.min.js?v=2.1.0-RC3"></script>
22
+ <script src='lib/jquery.ba-bbq.min.js?v=2.1.0-RC3' type='text/javascript'></script>
23
+ <script src='lib/handlebars.min-v4.7.3.js?v=2.1.0-RC3' type='text/javascript'></script>
24
+ <script src='lib/lodash.min.js?v=2.1.0-RC3' type='text/javascript'></script>
25
+ <script src='lib/backbone-min.js?v=2.1.0-RC3' type='text/javascript'></script>
26
+ <script src='swagger-ui.js?v=2.1.0-RC3' type='text/javascript'></script>
27
+ <script src='lib/highlight.9.1.0.pack.js?v=2.1.0-RC3' type='text/javascript'></script>
28
+ <script src='lib/highlight.9.1.0.pack_extended.js?v=2.1.0-RC3' type='text/javascript'></script>
29
+ <script src='lib/jsoneditor.min.js?v=2.1.0-RC3' type='text/javascript'></script>
30
+ <script src='lib/marked.js?v=2.1.0-RC3' type='text/javascript'></script>
31
+ <script src='lib/swagger-oauth.js?v=2.1.0-RC3' type='text/javascript'></script>
32
32
 
33
33
  <!-- Some basic translations -->
34
- <!-- <script src='lang/translator.js?v=2.1.0-RC1' type='text/javascript'></script> -->
35
- <!-- <script src='lang/ru.js?v=2.1.0-RC1' type='text/javascript'></script> -->
36
- <!-- <script src='lang/en.js?v=2.1.0-RC1' type='text/javascript'></script> -->
34
+ <!-- <script src='lang/translator.js?v=2.1.0-RC3' type='text/javascript'></script> -->
35
+ <!-- <script src='lang/ru.js?v=2.1.0-RC3' type='text/javascript'></script> -->
36
+ <!-- <script src='lang/en.js?v=2.1.0-RC3' type='text/javascript'></script> -->
37
37
 
38
38
  <script type="text/javascript">
39
39
  $(function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "graphdb-workbench",
3
- "version": "2.1.0-RC1",
3
+ "version": "2.1.0-RC3",
4
4
  "description": "The web application for GraphDB APIs",
5
5
  "scripts": {
6
6
  "build": "webpack --config=webpack.config.prod.js",