Source: ui/toggle_stereoscopic.js

  1. /*! @license
  2. * Shaka Player
  3. * Copyright 2016 Google LLC
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. goog.provide('shaka.ui.ToggleStereoscopicButton');
  7. goog.require('shaka.ui.Controls');
  8. goog.require('shaka.ui.Element');
  9. goog.require('shaka.ui.Enums');
  10. goog.require('shaka.ui.Locales');
  11. goog.require('shaka.ui.Localization');
  12. goog.require('shaka.ui.OverflowMenu');
  13. goog.require('shaka.ui.Utils');
  14. goog.require('shaka.util.Dom');
  15. goog.requireType('shaka.ui.Controls');
  16. /**
  17. * @extends {shaka.ui.Element}
  18. * @final
  19. * @export
  20. */
  21. shaka.ui.ToggleStereoscopicButton = class extends shaka.ui.Element {
  22. /**
  23. * @param {!HTMLElement} parent
  24. * @param {!shaka.ui.Controls} controls
  25. */
  26. constructor(parent, controls) {
  27. super(parent, controls);
  28. /** @private {!HTMLButtonElement} */
  29. this.toggleStereoscopicButton_ = shaka.util.Dom.createButton();
  30. this.toggleStereoscopicButton_.classList.add(
  31. 'shaka-toggle-stereoscopic-button');
  32. this.toggleStereoscopicButton_.classList.add('shaka-tooltip');
  33. this.toggleStereoscopicButton_.ariaPressed = 'false';
  34. /** @private {!HTMLElement} */
  35. this.toggleStereoscopicIcon_ = shaka.util.Dom.createHTMLElement('i');
  36. this.toggleStereoscopicIcon_.classList.add('material-icons-round');
  37. this.toggleStereoscopicIcon_.textContent =
  38. shaka.ui.Enums.MaterialDesignIcons.TOGGLE_STEREOSCOPIC;
  39. this.toggleStereoscopicButton_.appendChild(this.toggleStereoscopicIcon_);
  40. const label = shaka.util.Dom.createHTMLElement('label');
  41. label.classList.add('shaka-overflow-button-label');
  42. label.classList.add('shaka-overflow-menu-only');
  43. this.toggleStereoscopicNameSpan_ = shaka.util.Dom.createHTMLElement('span');
  44. label.appendChild(this.toggleStereoscopicNameSpan_);
  45. this.toggleStereoscopicCurrentSelectionSpan_ =
  46. shaka.util.Dom.createHTMLElement('span');
  47. this.toggleStereoscopicCurrentSelectionSpan_.classList.add(
  48. 'shaka-current-selection-span');
  49. label.appendChild(this.toggleStereoscopicCurrentSelectionSpan_);
  50. this.toggleStereoscopicButton_.appendChild(label);
  51. this.parent.appendChild(this.toggleStereoscopicButton_);
  52. // Setup strings in the correct language
  53. this.updateLocalizedStrings_();
  54. this.eventManager.listen(
  55. this.localization, shaka.ui.Localization.LOCALE_UPDATED, () => {
  56. this.updateLocalizedStrings_();
  57. });
  58. this.eventManager.listen(
  59. this.localization, shaka.ui.Localization.LOCALE_CHANGED, () => {
  60. this.updateLocalizedStrings_();
  61. });
  62. const vr = this.controls.getVR();
  63. this.eventManager.listen(this.toggleStereoscopicButton_, 'click', () => {
  64. vr.toggleStereoscopicMode();
  65. });
  66. this.eventManager.listen(vr, 'vrstatuschanged', () => {
  67. this.checkAvailability_();
  68. });
  69. this.checkAvailability_();
  70. }
  71. /**
  72. * @private
  73. */
  74. checkAvailability_() {
  75. shaka.ui.Utils.setDisplay(this.toggleStereoscopicButton_,
  76. this.controls.isPlayingVR());
  77. }
  78. /**
  79. * @private
  80. */
  81. updateLocalizedStrings_() {
  82. const LocIds = shaka.ui.Locales.Ids;
  83. this.toggleStereoscopicButton_.ariaLabel =
  84. this.localization.resolve(LocIds.TOGGLE_STEREOSCOPIC);
  85. this.toggleStereoscopicNameSpan_.textContent =
  86. this.localization.resolve(LocIds.TOGGLE_STEREOSCOPIC);
  87. }
  88. };
  89. /**
  90. * @implements {shaka.extern.IUIElement.Factory}
  91. * @final
  92. */
  93. shaka.ui.ToggleStereoscopicButton.Factory = class {
  94. /** @override */
  95. create(rootElement, controls) {
  96. return new shaka.ui.ToggleStereoscopicButton(rootElement, controls);
  97. }
  98. };
  99. shaka.ui.OverflowMenu.registerElement(
  100. 'toggle_stereoscopic', new shaka.ui.ToggleStereoscopicButton.Factory());
  101. shaka.ui.Controls.registerElement(
  102. 'toggle_stereoscopic', new shaka.ui.ToggleStereoscopicButton.Factory());