ontotext-yasgui-web-component 1.1.7 → 1.1.8

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.
@@ -451,7 +451,7 @@ const fr = {
451
451
  "yasr.plugin.extended_boolean.false": "NON",
452
452
  "yasr.plugin.no_compatible.message": " ",
453
453
  "yasr.plugin.extended_error.default_status.message": "Erreur",
454
- "yasqe.actions.save_query.button.tooltip": "Create saved query",
454
+ "yasqe.actions.save_query.button.tooltip": "Créer une requête enregistrée",
455
455
  "yasqe.actions.save_query.dialog.title": "Créer une nouvelle requête enregistrée",
456
456
  "yasqe.actions.save_query.dialog.query.label": "Créez votre requête d'exemple",
457
457
  "yasqe.actions.save_query.dialog.query.empty_error": "La requête ne peut pas être vide !",
@@ -469,8 +469,8 @@ const fr = {
469
469
  "yasqe.actions.share_query.button.tooltip": "Obtenir l'URL de la requête en cours",
470
470
  "yasqe.actions.include_inferred.true.button.tooltip": "Inclure les données déduites dans les résultats: AU",
471
471
  "yasqe.actions.include_inferred.false.button.tooltip": "Inclure les données déduites dans les résultats: DÉSACTIVÉ",
472
- "yasqe.actions.expand_results_same_as.true.button.tooltip": "Développer les résultats sur owl:sameAs: ON",
473
- "yasqe.actions.expand_results_same_as.false.button.tooltip": "Développer les résultats sur owl:sameAs: OFF",
472
+ "yasqe.actions.expand_results_same_as.true.button.tooltip": "Développer les résultats sur owl:sameAs: AU",
473
+ "yasqe.actions.expand_results_same_as.false.button.tooltip": "Développer les résultats sur owl:sameAs: DÉSACTIVÉ",
474
474
  "yasqe.actions.expand_results_same_as.disable.button.tooltip": "Nécessite 'Inclure les données inférées' !",
475
475
  "yasqe.footer_buttons.abort_query.button.label": "Annuler la requête",
476
476
  "yasqe.footer_buttons.abort_query.button.title": "Cliquez pour annuler la requête",
@@ -487,11 +487,22 @@ const fr = {
487
487
 
488
488
  const DEFAULT_LANG = 'en';
489
489
 
490
+ /**
491
+ * Service responsible for translation operations in the component.
492
+ */
490
493
  class TranslationService {
491
494
  constructor() {
492
495
  this.currentLang = DEFAULT_LANG;
493
496
  this.bundle = { en, fr };
497
+ this.languageChangeObservers = [];
494
498
  }
499
+ /**
500
+ * Sets the language which should be used for registered labels. If there is no registered bundle
501
+ * for the provided language, then the default language will be set and used.
502
+ * This method also notifies all registered LanguageChangeObserver's.
503
+ *
504
+ * @param lang The language to be set.
505
+ */
495
506
  setLanguage(lang = DEFAULT_LANG) {
496
507
  if (!this.bundle || !this.bundle[this.currentLang]) {
497
508
  console.warn(`Missing locale file for [${this.currentLang}]`);
@@ -500,6 +511,34 @@ class TranslationService {
500
511
  else {
501
512
  this.currentLang = lang;
502
513
  }
514
+ this.notifyLanguageChangeObservers(this.currentLang);
515
+ }
516
+ /**
517
+ * Subscribes the observer for further language change events.
518
+ *
519
+ * @param observer The observer to be registered for the language change events.
520
+ * @return Returns an unsubscribe function which can be called by the observer to unsubscribe
521
+ * itself.
522
+ */
523
+ subscribeForLanguageChange(observer) {
524
+ const existingObserverIndex = this.languageChangeObservers.findIndex((subscription) => subscription.name === observer.name);
525
+ if (existingObserverIndex === -1) {
526
+ this.languageChangeObservers.push(observer);
527
+ }
528
+ return () => this.unsubscribeFromLanguageChange(observer);
529
+ }
530
+ /**
531
+ * Unsubscribes the observer from the language change events.
532
+ * @param observer The observer to be unsubscribed.
533
+ */
534
+ unsubscribeFromLanguageChange(observer) {
535
+ const existingObserverIndex = this.languageChangeObservers.findIndex((subscription) => subscription.name === observer.name);
536
+ if (existingObserverIndex !== -1) {
537
+ this.languageChangeObservers.splice(existingObserverIndex, 1);
538
+ }
539
+ }
540
+ notifyLanguageChangeObservers(currentLang) {
541
+ this.languageChangeObservers.forEach((observer) => observer.notify(currentLang));
503
542
  }
504
543
  /**
505
544
  * Merges external i18e configuration with bundled one.
@@ -533,6 +572,12 @@ class TranslationService {
533
572
  }
534
573
  });
535
574
  }
575
+ /**
576
+ * Translates the provided key using the currently selected language by applying the parameters if
577
+ * provided.
578
+ * @param key The key for the label which needs to be translated.
579
+ * @param parameters Optional parameters which to be applied during the translation.
580
+ */
536
581
  translate(key, parameters) {
537
582
  let translation = this.bundle[this.currentLang][key];
538
583
  if (!translation) {
@@ -779,6 +824,10 @@ class OntotextYasgui {
779
824
  callback(args);
780
825
  });
781
826
  }
827
+ getYasqe() {
828
+ var _a;
829
+ return (_a = this.yasgui) === null || _a === void 0 ? void 0 : _a.getTab().getYasqe();
830
+ }
782
831
  setQuery(query) {
783
832
  this.yasgui.getTab().getYasqe().setValue(query);
784
833
  }
@@ -918,8 +967,15 @@ class YasguiBuilder {
918
967
  */
919
968
  build(hostElement, yasguiConfiguration) {
920
969
  const yasgui = this.createYasguiInstance(hostElement, yasguiConfiguration);
921
- // monkey patches have to be applied before return yasgui.
922
- return new OntotextYasgui(yasgui, yasguiConfiguration);
970
+ // patches have to be applied before returning yasgui instance.
971
+ this.instance = new OntotextYasgui(yasgui, yasguiConfiguration);
972
+ return this.instance;
973
+ }
974
+ /**
975
+ * Returns the OntotextYasgui instance if created or undefined otherwise.
976
+ */
977
+ getInstance() {
978
+ return this.instance;
923
979
  }
924
980
  createYasguiInstance(hostElement, yasguiConfiguration) {
925
981
  // @ts-ignore
@@ -1075,7 +1131,7 @@ class TooltipService {
1075
1131
  return tooltipElement;
1076
1132
  }
1077
1133
  static updateTooltip(element, tooltip, placement) {
1078
- const parentElement = element.parentElement;
1134
+ const parentElement = element === null || element === void 0 ? void 0 : element.parentElement;
1079
1135
  if (parentElement && 'yasgui-tooltip' === parentElement.tagName.toLowerCase()) {
1080
1136
  TooltipService.updateTooltipData(parentElement, tooltip);
1081
1137
  TooltipService.updatePlacement(parentElement, placement);
@@ -1126,15 +1182,45 @@ class YasqeService {
1126
1182
  constructor(serviceFactory) {
1127
1183
  //@ts-ignore
1128
1184
  this.buttonBuilders = new Map();
1185
+ this.yasguiBuilder = serviceFactory.get(YasguiBuilder);
1129
1186
  this.eventService = serviceFactory.getEventService();
1130
- this.initPluginButtonNameToClassNameMapping();
1187
+ YasqeService.initPluginButtonNameToClassNameMapping();
1131
1188
  this.translationService = serviceFactory.get(TranslationService);
1189
+ this.translationService.subscribeForLanguageChange({
1190
+ name: 'YasqeServiceLanguageChangeObserver',
1191
+ notify: (currentLang) => this.onLanguageChange(currentLang)
1192
+ });
1132
1193
  this.buttonBuilders.set(YasqeButtonName.CREATE_SAVED_QUERY, () => this.buildCreateSaveQueryButton());
1133
1194
  this.buttonBuilders.set(YasqeButtonName.SHOW_SAVED_QUERIES, () => this.buildShowSavedQueriesButton());
1134
1195
  this.buttonBuilders.set(YasqeButtonName.SHARE_QUERY, () => this.buildShareQueryButton());
1135
1196
  this.buttonBuilders.set('includeInferredStatements', (externalConfiguration, yasqe) => this.buildInferAndSameAsButtons(externalConfiguration, yasqe));
1136
1197
  }
1137
- initPluginButtonNameToClassNameMapping() {
1198
+ onLanguageChange(_currentLang) {
1199
+ let button = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.CREATE_SAVED_QUERY)}`);
1200
+ let tooltip = this.translationService.translate('yasqe.actions.save_query.button.tooltip');
1201
+ TooltipService.updateTooltip(button, tooltip);
1202
+ button = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.SHOW_SAVED_QUERIES)}`);
1203
+ tooltip = this.translationService.translate('yasqe.actions.show_saved_queries.button.tooltip');
1204
+ TooltipService.updateTooltip(button, tooltip);
1205
+ button = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.SHARE_QUERY)}`);
1206
+ tooltip = this.translationService.translate('yasqe.actions.share_query.button.tooltip');
1207
+ TooltipService.updateTooltip(button, tooltip);
1208
+ const ontotextYasgui = this.yasguiBuilder.getInstance();
1209
+ const yasqe = ontotextYasgui === null || ontotextYasgui === void 0 ? void 0 : ontotextYasgui.getYasqe();
1210
+ if (ontotextYasgui && yasqe) {
1211
+ const inferredValue = yasqe.getInfer();
1212
+ const sameAsValue = yasqe.getSameAs();
1213
+ const sameAsButton = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.EXPANDS_RESULTS)}`);
1214
+ const sameAsButtonTooltipEl = sameAsButton === null || sameAsButton === void 0 ? void 0 : sameAsButton.parentElement;
1215
+ const inferStatementsButton = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.INFER_STATEMENTS)}`);
1216
+ const inferStatementButtonTooltipEl = inferStatementsButton === null || inferStatementsButton === void 0 ? void 0 : inferStatementsButton.parentElement;
1217
+ if (sameAsButtonTooltipEl && inferStatementButtonTooltipEl) {
1218
+ this.updateInferredElement(inferStatementButtonTooltipEl, sameAsButtonTooltipEl, inferredValue, sameAsValue);
1219
+ this.updateSameAsElement(sameAsButtonTooltipEl, sameAsValue, inferredValue);
1220
+ }
1221
+ }
1222
+ }
1223
+ static initPluginButtonNameToClassNameMapping() {
1138
1224
  YasqeService.pluginButtonNameToClassNameMapping = new Map();
1139
1225
  YasqeService.pluginButtonNameToClassNameMapping.set(YasqeButtonName.CREATE_SAVED_QUERY, `yasqe_${YasqeButtonName.CREATE_SAVED_QUERY}Button`);
1140
1226
  YasqeService.pluginButtonNameToClassNameMapping.set(YasqeButtonName.SHOW_SAVED_QUERIES, `yasqe_${YasqeButtonName.SHOW_SAVED_QUERIES}Button`);
@@ -1288,9 +1374,6 @@ class YasqeService {
1288
1374
  /**
1289
1375
  * Initializes the state of infer and same as buttons.
1290
1376
  *
1291
- *
1292
- *
1293
- *
1294
1377
  * @param yasqe - the yasqe.
1295
1378
  * @param defaultInfer - default value of infer if not set in <code>yasqe</code>
1296
1379
  * @param defaultSameAs - default value of sameAs if not set in <code>yasqe</code>
@@ -2689,6 +2772,8 @@ class PivotTablePlugin {
2689
2772
  }
2690
2773
  destroy() {
2691
2774
  // TODO remove all listeners if any.
2775
+ const configButtonWrapper = this.yasr.rootEl.querySelector('.yasr_header .chart-config-control');
2776
+ configButtonWrapper === null || configButtonWrapper === void 0 ? void 0 : configButtonWrapper.remove();
2692
2777
  }
2693
2778
  download(_filename) {
2694
2779
  // @ts-ignore
@@ -3007,6 +3092,8 @@ class ChartsPlugin {
3007
3092
  destroy() {
3008
3093
  // @ts-ignore
3009
3094
  google.visualization.events.removeListener(this.chartEditorOkHandler);
3095
+ const configButtonWrapper = this.yasr.rootEl.querySelector('.yasr_header .chart-config-control');
3096
+ configButtonWrapper === null || configButtonWrapper === void 0 ? void 0 : configButtonWrapper.remove();
3010
3097
  }
3011
3098
  drawChart() {
3012
3099
  this.yasr.resultsEl.innerHTML = '';
@@ -24,6 +24,10 @@ export class OntotextYasgui {
24
24
  callback(args);
25
25
  });
26
26
  }
27
+ getYasqe() {
28
+ var _a;
29
+ return (_a = this.yasgui) === null || _a === void 0 ? void 0 : _a.getTab().getYasqe();
30
+ }
27
31
  setQuery(query) {
28
32
  this.yasgui.getTab().getYasqe().setValue(query);
29
33
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -89,6 +89,8 @@ export class ChartsPlugin {
89
89
  destroy() {
90
90
  // @ts-ignore
91
91
  google.visualization.events.removeListener(this.chartEditorOkHandler);
92
+ const configButtonWrapper = this.yasr.rootEl.querySelector('.yasr_header .chart-config-control');
93
+ configButtonWrapper === null || configButtonWrapper === void 0 ? void 0 : configButtonWrapper.remove();
92
94
  }
93
95
  drawChart() {
94
96
  this.yasr.resultsEl.innerHTML = '';
@@ -80,6 +80,8 @@ export class PivotTablePlugin {
80
80
  }
81
81
  destroy() {
82
82
  // TODO remove all listeners if any.
83
+ const configButtonWrapper = this.yasr.rootEl.querySelector('.yasr_header .chart-config-control');
84
+ configButtonWrapper === null || configButtonWrapper === void 0 ? void 0 : configButtonWrapper.remove();
83
85
  }
84
86
  download(_filename) {
85
87
  // @ts-ignore
@@ -20,7 +20,7 @@ export class TooltipService {
20
20
  return tooltipElement;
21
21
  }
22
22
  static updateTooltip(element, tooltip, placement) {
23
- const parentElement = element.parentElement;
23
+ const parentElement = element === null || element === void 0 ? void 0 : element.parentElement;
24
24
  if (parentElement && 'yasgui-tooltip' === parentElement.tagName.toLowerCase()) {
25
25
  TooltipService.updateTooltipData(parentElement, tooltip);
26
26
  TooltipService.updatePlacement(parentElement, placement);
@@ -1,11 +1,22 @@
1
1
  import en from '../i18n/locale-en.json';
2
2
  import fr from '../i18n/locale-fr.json';
3
3
  import { DEFAULT_LANG } from '../configurations/constants';
4
+ /**
5
+ * Service responsible for translation operations in the component.
6
+ */
4
7
  export class TranslationService {
5
8
  constructor() {
6
9
  this.currentLang = DEFAULT_LANG;
7
10
  this.bundle = { en, fr };
11
+ this.languageChangeObservers = [];
8
12
  }
13
+ /**
14
+ * Sets the language which should be used for registered labels. If there is no registered bundle
15
+ * for the provided language, then the default language will be set and used.
16
+ * This method also notifies all registered LanguageChangeObserver's.
17
+ *
18
+ * @param lang The language to be set.
19
+ */
9
20
  setLanguage(lang = DEFAULT_LANG) {
10
21
  if (!this.bundle || !this.bundle[this.currentLang]) {
11
22
  console.warn(`Missing locale file for [${this.currentLang}]`);
@@ -14,6 +25,34 @@ export class TranslationService {
14
25
  else {
15
26
  this.currentLang = lang;
16
27
  }
28
+ this.notifyLanguageChangeObservers(this.currentLang);
29
+ }
30
+ /**
31
+ * Subscribes the observer for further language change events.
32
+ *
33
+ * @param observer The observer to be registered for the language change events.
34
+ * @return Returns an unsubscribe function which can be called by the observer to unsubscribe
35
+ * itself.
36
+ */
37
+ subscribeForLanguageChange(observer) {
38
+ const existingObserverIndex = this.languageChangeObservers.findIndex((subscription) => subscription.name === observer.name);
39
+ if (existingObserverIndex === -1) {
40
+ this.languageChangeObservers.push(observer);
41
+ }
42
+ return () => this.unsubscribeFromLanguageChange(observer);
43
+ }
44
+ /**
45
+ * Unsubscribes the observer from the language change events.
46
+ * @param observer The observer to be unsubscribed.
47
+ */
48
+ unsubscribeFromLanguageChange(observer) {
49
+ const existingObserverIndex = this.languageChangeObservers.findIndex((subscription) => subscription.name === observer.name);
50
+ if (existingObserverIndex !== -1) {
51
+ this.languageChangeObservers.splice(existingObserverIndex, 1);
52
+ }
53
+ }
54
+ notifyLanguageChangeObservers(currentLang) {
55
+ this.languageChangeObservers.forEach((observer) => observer.notify(currentLang));
17
56
  }
18
57
  /**
19
58
  * Merges external i18e configuration with bundled one.
@@ -47,6 +86,12 @@ export class TranslationService {
47
86
  }
48
87
  });
49
88
  }
89
+ /**
90
+ * Translates the provided key using the currently selected language by applying the parameters if
91
+ * provided.
92
+ * @param key The key for the label which needs to be translated.
93
+ * @param parameters Optional parameters which to be applied during the translation.
94
+ */
50
95
  translate(key, parameters) {
51
96
  let translation = this.bundle[this.currentLang][key];
52
97
  if (!translation) {
@@ -14,8 +14,15 @@ export class YasguiBuilder {
14
14
  */
15
15
  build(hostElement, yasguiConfiguration) {
16
16
  const yasgui = this.createYasguiInstance(hostElement, yasguiConfiguration);
17
- // monkey patches have to be applied before return yasgui.
18
- return new OntotextYasgui(yasgui, yasguiConfiguration);
17
+ // patches have to be applied before returning yasgui instance.
18
+ this.instance = new OntotextYasgui(yasgui, yasguiConfiguration);
19
+ return this.instance;
20
+ }
21
+ /**
22
+ * Returns the OntotextYasgui instance if created or undefined otherwise.
23
+ */
24
+ getInstance() {
25
+ return this.instance;
19
26
  }
20
27
  createYasguiInstance(hostElement, yasguiConfiguration) {
21
28
  // @ts-ignore
@@ -4,19 +4,50 @@ import { InternalShareQueryEvent } from '../../models/internal-events/internal-s
4
4
  import { InternalShowSavedQueriesEvent } from '../../models/internal-events/internal-show-saved-queries-event';
5
5
  import { YasqeButtonName } from '../../models/yasqe-button-name';
6
6
  import { InternalCreateSavedQueryEvent } from '../../models/internal-events/internal-create-saved-query-event';
7
+ import { YasguiBuilder } from "../yasgui/yasgui-builder";
7
8
  export class YasqeService {
8
9
  constructor(serviceFactory) {
9
10
  //@ts-ignore
10
11
  this.buttonBuilders = new Map();
12
+ this.yasguiBuilder = serviceFactory.get(YasguiBuilder);
11
13
  this.eventService = serviceFactory.getEventService();
12
- this.initPluginButtonNameToClassNameMapping();
14
+ YasqeService.initPluginButtonNameToClassNameMapping();
13
15
  this.translationService = serviceFactory.get(TranslationService);
16
+ this.translationService.subscribeForLanguageChange({
17
+ name: 'YasqeServiceLanguageChangeObserver',
18
+ notify: (currentLang) => this.onLanguageChange(currentLang)
19
+ });
14
20
  this.buttonBuilders.set(YasqeButtonName.CREATE_SAVED_QUERY, () => this.buildCreateSaveQueryButton());
15
21
  this.buttonBuilders.set(YasqeButtonName.SHOW_SAVED_QUERIES, () => this.buildShowSavedQueriesButton());
16
22
  this.buttonBuilders.set(YasqeButtonName.SHARE_QUERY, () => this.buildShareQueryButton());
17
23
  this.buttonBuilders.set('includeInferredStatements', (externalConfiguration, yasqe) => this.buildInferAndSameAsButtons(externalConfiguration, yasqe));
18
24
  }
19
- initPluginButtonNameToClassNameMapping() {
25
+ onLanguageChange(_currentLang) {
26
+ let button = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.CREATE_SAVED_QUERY)}`);
27
+ let tooltip = this.translationService.translate('yasqe.actions.save_query.button.tooltip');
28
+ TooltipService.updateTooltip(button, tooltip);
29
+ button = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.SHOW_SAVED_QUERIES)}`);
30
+ tooltip = this.translationService.translate('yasqe.actions.show_saved_queries.button.tooltip');
31
+ TooltipService.updateTooltip(button, tooltip);
32
+ button = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.SHARE_QUERY)}`);
33
+ tooltip = this.translationService.translate('yasqe.actions.share_query.button.tooltip');
34
+ TooltipService.updateTooltip(button, tooltip);
35
+ const ontotextYasgui = this.yasguiBuilder.getInstance();
36
+ const yasqe = ontotextYasgui === null || ontotextYasgui === void 0 ? void 0 : ontotextYasgui.getYasqe();
37
+ if (ontotextYasgui && yasqe) {
38
+ const inferredValue = yasqe.getInfer();
39
+ const sameAsValue = yasqe.getSameAs();
40
+ const sameAsButton = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.EXPANDS_RESULTS)}`);
41
+ const sameAsButtonTooltipEl = sameAsButton === null || sameAsButton === void 0 ? void 0 : sameAsButton.parentElement;
42
+ const inferStatementsButton = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.INFER_STATEMENTS)}`);
43
+ const inferStatementButtonTooltipEl = inferStatementsButton === null || inferStatementsButton === void 0 ? void 0 : inferStatementsButton.parentElement;
44
+ if (sameAsButtonTooltipEl && inferStatementButtonTooltipEl) {
45
+ this.updateInferredElement(inferStatementButtonTooltipEl, sameAsButtonTooltipEl, inferredValue, sameAsValue);
46
+ this.updateSameAsElement(sameAsButtonTooltipEl, sameAsValue, inferredValue);
47
+ }
48
+ }
49
+ }
50
+ static initPluginButtonNameToClassNameMapping() {
20
51
  YasqeService.pluginButtonNameToClassNameMapping = new Map();
21
52
  YasqeService.pluginButtonNameToClassNameMapping.set(YasqeButtonName.CREATE_SAVED_QUERY, `yasqe_${YasqeButtonName.CREATE_SAVED_QUERY}Button`);
22
53
  YasqeService.pluginButtonNameToClassNameMapping.set(YasqeButtonName.SHOW_SAVED_QUERIES, `yasqe_${YasqeButtonName.SHOW_SAVED_QUERIES}Button`);
@@ -170,9 +201,6 @@ export class YasqeService {
170
201
  /**
171
202
  * Initializes the state of infer and same as buttons.
172
203
  *
173
- *
174
- *
175
- *
176
204
  * @param yasqe - the yasqe.
177
205
  * @param defaultInfer - default value of infer if not set in <code>yasqe</code>
178
206
  * @param defaultSameAs - default value of sameAs if not set in <code>yasqe</code>
@@ -106,6 +106,10 @@ class OntotextYasgui$1 {
106
106
  callback(args);
107
107
  });
108
108
  }
109
+ getYasqe() {
110
+ var _a;
111
+ return (_a = this.yasgui) === null || _a === void 0 ? void 0 : _a.getTab().getYasqe();
112
+ }
109
113
  setQuery(query) {
110
114
  this.yasgui.getTab().getYasqe().setValue(query);
111
115
  }
@@ -245,8 +249,15 @@ class YasguiBuilder {
245
249
  */
246
250
  build(hostElement, yasguiConfiguration) {
247
251
  const yasgui = this.createYasguiInstance(hostElement, yasguiConfiguration);
248
- // monkey patches have to be applied before return yasgui.
249
- return new OntotextYasgui$1(yasgui, yasguiConfiguration);
252
+ // patches have to be applied before returning yasgui instance.
253
+ this.instance = new OntotextYasgui$1(yasgui, yasguiConfiguration);
254
+ return this.instance;
255
+ }
256
+ /**
257
+ * Returns the OntotextYasgui instance if created or undefined otherwise.
258
+ */
259
+ getInstance() {
260
+ return this.instance;
250
261
  }
251
262
  createYasguiInstance(hostElement, yasguiConfiguration) {
252
263
  // @ts-ignore
@@ -402,7 +413,7 @@ class TooltipService {
402
413
  return tooltipElement;
403
414
  }
404
415
  static updateTooltip(element, tooltip, placement) {
405
- const parentElement = element.parentElement;
416
+ const parentElement = element === null || element === void 0 ? void 0 : element.parentElement;
406
417
  if (parentElement && 'yasgui-tooltip' === parentElement.tagName.toLowerCase()) {
407
418
  TooltipService.updateTooltipData(parentElement, tooltip);
408
419
  TooltipService.updatePlacement(parentElement, placement);
@@ -453,15 +464,45 @@ class YasqeService {
453
464
  constructor(serviceFactory) {
454
465
  //@ts-ignore
455
466
  this.buttonBuilders = new Map();
467
+ this.yasguiBuilder = serviceFactory.get(YasguiBuilder);
456
468
  this.eventService = serviceFactory.getEventService();
457
- this.initPluginButtonNameToClassNameMapping();
469
+ YasqeService.initPluginButtonNameToClassNameMapping();
458
470
  this.translationService = serviceFactory.get(TranslationService);
471
+ this.translationService.subscribeForLanguageChange({
472
+ name: 'YasqeServiceLanguageChangeObserver',
473
+ notify: (currentLang) => this.onLanguageChange(currentLang)
474
+ });
459
475
  this.buttonBuilders.set(YasqeButtonName.CREATE_SAVED_QUERY, () => this.buildCreateSaveQueryButton());
460
476
  this.buttonBuilders.set(YasqeButtonName.SHOW_SAVED_QUERIES, () => this.buildShowSavedQueriesButton());
461
477
  this.buttonBuilders.set(YasqeButtonName.SHARE_QUERY, () => this.buildShareQueryButton());
462
478
  this.buttonBuilders.set('includeInferredStatements', (externalConfiguration, yasqe) => this.buildInferAndSameAsButtons(externalConfiguration, yasqe));
463
479
  }
464
- initPluginButtonNameToClassNameMapping() {
480
+ onLanguageChange(_currentLang) {
481
+ let button = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.CREATE_SAVED_QUERY)}`);
482
+ let tooltip = this.translationService.translate('yasqe.actions.save_query.button.tooltip');
483
+ TooltipService.updateTooltip(button, tooltip);
484
+ button = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.SHOW_SAVED_QUERIES)}`);
485
+ tooltip = this.translationService.translate('yasqe.actions.show_saved_queries.button.tooltip');
486
+ TooltipService.updateTooltip(button, tooltip);
487
+ button = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.SHARE_QUERY)}`);
488
+ tooltip = this.translationService.translate('yasqe.actions.share_query.button.tooltip');
489
+ TooltipService.updateTooltip(button, tooltip);
490
+ const ontotextYasgui = this.yasguiBuilder.getInstance();
491
+ const yasqe = ontotextYasgui === null || ontotextYasgui === void 0 ? void 0 : ontotextYasgui.getYasqe();
492
+ if (ontotextYasgui && yasqe) {
493
+ const inferredValue = yasqe.getInfer();
494
+ const sameAsValue = yasqe.getSameAs();
495
+ const sameAsButton = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.EXPANDS_RESULTS)}`);
496
+ const sameAsButtonTooltipEl = sameAsButton === null || sameAsButton === void 0 ? void 0 : sameAsButton.parentElement;
497
+ const inferStatementsButton = document.querySelector(`.${YasqeService.getActionButtonClassName(YasqeButtonName.INFER_STATEMENTS)}`);
498
+ const inferStatementButtonTooltipEl = inferStatementsButton === null || inferStatementsButton === void 0 ? void 0 : inferStatementsButton.parentElement;
499
+ if (sameAsButtonTooltipEl && inferStatementButtonTooltipEl) {
500
+ this.updateInferredElement(inferStatementButtonTooltipEl, sameAsButtonTooltipEl, inferredValue, sameAsValue);
501
+ this.updateSameAsElement(sameAsButtonTooltipEl, sameAsValue, inferredValue);
502
+ }
503
+ }
504
+ }
505
+ static initPluginButtonNameToClassNameMapping() {
465
506
  YasqeService.pluginButtonNameToClassNameMapping = new Map();
466
507
  YasqeService.pluginButtonNameToClassNameMapping.set(YasqeButtonName.CREATE_SAVED_QUERY, `yasqe_${YasqeButtonName.CREATE_SAVED_QUERY}Button`);
467
508
  YasqeService.pluginButtonNameToClassNameMapping.set(YasqeButtonName.SHOW_SAVED_QUERIES, `yasqe_${YasqeButtonName.SHOW_SAVED_QUERIES}Button`);
@@ -615,9 +656,6 @@ class YasqeService {
615
656
  /**
616
657
  * Initializes the state of infer and same as buttons.
617
658
  *
618
- *
619
- *
620
- *
621
659
  * @param yasqe - the yasqe.
622
660
  * @param defaultInfer - default value of infer if not set in <code>yasqe</code>
623
661
  * @param defaultSameAs - default value of sameAs if not set in <code>yasqe</code>
@@ -2016,6 +2054,8 @@ class PivotTablePlugin {
2016
2054
  }
2017
2055
  destroy() {
2018
2056
  // TODO remove all listeners if any.
2057
+ const configButtonWrapper = this.yasr.rootEl.querySelector('.yasr_header .chart-config-control');
2058
+ configButtonWrapper === null || configButtonWrapper === void 0 ? void 0 : configButtonWrapper.remove();
2019
2059
  }
2020
2060
  download(_filename) {
2021
2061
  // @ts-ignore
@@ -2334,6 +2374,8 @@ class ChartsPlugin {
2334
2374
  destroy() {
2335
2375
  // @ts-ignore
2336
2376
  google.visualization.events.removeListener(this.chartEditorOkHandler);
2377
+ const configButtonWrapper = this.yasr.rootEl.querySelector('.yasr_header .chart-config-control');
2378
+ configButtonWrapper === null || configButtonWrapper === void 0 ? void 0 : configButtonWrapper.remove();
2337
2379
  }
2338
2380
  drawChart() {
2339
2381
  this.yasr.resultsEl.innerHTML = '';
@@ -398,7 +398,7 @@ const fr = {
398
398
  "yasr.plugin.extended_boolean.false": "NON",
399
399
  "yasr.plugin.no_compatible.message": " ",
400
400
  "yasr.plugin.extended_error.default_status.message": "Erreur",
401
- "yasqe.actions.save_query.button.tooltip": "Create saved query",
401
+ "yasqe.actions.save_query.button.tooltip": "Créer une requête enregistrée",
402
402
  "yasqe.actions.save_query.dialog.title": "Créer une nouvelle requête enregistrée",
403
403
  "yasqe.actions.save_query.dialog.query.label": "Créez votre requête d'exemple",
404
404
  "yasqe.actions.save_query.dialog.query.empty_error": "La requête ne peut pas être vide !",
@@ -416,8 +416,8 @@ const fr = {
416
416
  "yasqe.actions.share_query.button.tooltip": "Obtenir l'URL de la requête en cours",
417
417
  "yasqe.actions.include_inferred.true.button.tooltip": "Inclure les données déduites dans les résultats: AU",
418
418
  "yasqe.actions.include_inferred.false.button.tooltip": "Inclure les données déduites dans les résultats: DÉSACTIVÉ",
419
- "yasqe.actions.expand_results_same_as.true.button.tooltip": "Développer les résultats sur owl:sameAs: ON",
420
- "yasqe.actions.expand_results_same_as.false.button.tooltip": "Développer les résultats sur owl:sameAs: OFF",
419
+ "yasqe.actions.expand_results_same_as.true.button.tooltip": "Développer les résultats sur owl:sameAs: AU",
420
+ "yasqe.actions.expand_results_same_as.false.button.tooltip": "Développer les résultats sur owl:sameAs: DÉSACTIVÉ",
421
421
  "yasqe.actions.expand_results_same_as.disable.button.tooltip": "Nécessite 'Inclure les données inférées' !",
422
422
  "yasqe.footer_buttons.abort_query.button.label": "Annuler la requête",
423
423
  "yasqe.footer_buttons.abort_query.button.title": "Cliquez pour annuler la requête",
@@ -434,11 +434,22 @@ const fr = {
434
434
 
435
435
  const DEFAULT_LANG = 'en';
436
436
 
437
+ /**
438
+ * Service responsible for translation operations in the component.
439
+ */
437
440
  class TranslationService {
438
441
  constructor() {
439
442
  this.currentLang = DEFAULT_LANG;
440
443
  this.bundle = { en, fr };
444
+ this.languageChangeObservers = [];
441
445
  }
446
+ /**
447
+ * Sets the language which should be used for registered labels. If there is no registered bundle
448
+ * for the provided language, then the default language will be set and used.
449
+ * This method also notifies all registered LanguageChangeObserver's.
450
+ *
451
+ * @param lang The language to be set.
452
+ */
442
453
  setLanguage(lang = DEFAULT_LANG) {
443
454
  if (!this.bundle || !this.bundle[this.currentLang]) {
444
455
  console.warn(`Missing locale file for [${this.currentLang}]`);
@@ -447,6 +458,34 @@ class TranslationService {
447
458
  else {
448
459
  this.currentLang = lang;
449
460
  }
461
+ this.notifyLanguageChangeObservers(this.currentLang);
462
+ }
463
+ /**
464
+ * Subscribes the observer for further language change events.
465
+ *
466
+ * @param observer The observer to be registered for the language change events.
467
+ * @return Returns an unsubscribe function which can be called by the observer to unsubscribe
468
+ * itself.
469
+ */
470
+ subscribeForLanguageChange(observer) {
471
+ const existingObserverIndex = this.languageChangeObservers.findIndex((subscription) => subscription.name === observer.name);
472
+ if (existingObserverIndex === -1) {
473
+ this.languageChangeObservers.push(observer);
474
+ }
475
+ return () => this.unsubscribeFromLanguageChange(observer);
476
+ }
477
+ /**
478
+ * Unsubscribes the observer from the language change events.
479
+ * @param observer The observer to be unsubscribed.
480
+ */
481
+ unsubscribeFromLanguageChange(observer) {
482
+ const existingObserverIndex = this.languageChangeObservers.findIndex((subscription) => subscription.name === observer.name);
483
+ if (existingObserverIndex !== -1) {
484
+ this.languageChangeObservers.splice(existingObserverIndex, 1);
485
+ }
486
+ }
487
+ notifyLanguageChangeObservers(currentLang) {
488
+ this.languageChangeObservers.forEach((observer) => observer.notify(currentLang));
450
489
  }
451
490
  /**
452
491
  * Merges external i18e configuration with bundled one.
@@ -480,6 +519,12 @@ class TranslationService {
480
519
  }
481
520
  });
482
521
  }
522
+ /**
523
+ * Translates the provided key using the currently selected language by applying the parameters if
524
+ * provided.
525
+ * @param key The key for the label which needs to be translated.
526
+ * @param parameters Optional parameters which to be applied during the translation.
527
+ */
483
528
  translate(key, parameters) {
484
529
  let translation = this.bundle[this.currentLang][key];
485
530
  if (!translation) {