Announcer.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /* *
  2. *
  3. * (c) 2009-2020 Øystein Moseng
  4. *
  5. * Create announcer to speak messages to screen readers and other AT.
  6. *
  7. * License: www.highcharts.com/license
  8. *
  9. * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  10. *
  11. * */
  12. 'use strict';
  13. import H from '../../Core/Globals.js';
  14. import DOMElementProvider from './DOMElementProvider.js';
  15. import HTMLUtilities from './HTMLUtilities.js';
  16. var visuallyHideElement = HTMLUtilities.visuallyHideElement;
  17. var Announcer = /** @class */ (function () {
  18. function Announcer(chart, type) {
  19. this.chart = chart;
  20. this.domElementProvider = new DOMElementProvider();
  21. this.announceRegion = this.addAnnounceRegion(type);
  22. }
  23. Announcer.prototype.destroy = function () {
  24. this.domElementProvider.destroyCreatedElements();
  25. };
  26. Announcer.prototype.announce = function (message) {
  27. var _this = this;
  28. this.announceRegion.innerHTML = message;
  29. // Delete contents after a little while to avoid user finding the live
  30. // region in the DOM.
  31. if (this.clearAnnouncementRegionTimer) {
  32. clearTimeout(this.clearAnnouncementRegionTimer);
  33. }
  34. this.clearAnnouncementRegionTimer = setTimeout(function () {
  35. _this.announceRegion.innerHTML = '';
  36. delete _this.clearAnnouncementRegionTimer;
  37. }, 1000);
  38. };
  39. Announcer.prototype.addAnnounceRegion = function (type) {
  40. var chartContainer = this.chart.renderTo;
  41. var div = this.domElementProvider.createElement('div');
  42. div.setAttribute('aria-hidden', false);
  43. div.setAttribute('aria-live', type);
  44. visuallyHideElement(div);
  45. chartContainer.insertBefore(div, chartContainer.firstChild);
  46. return div;
  47. };
  48. return Announcer;
  49. }());
  50. H.Announcer = Announcer;
  51. export default Announcer;