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. if (!this.controls.isOpaque()) {
  65. return;
  66. }
  67. vr.toggleStereoscopicMode();
  68. });
  69. this.eventManager.listen(vr, 'vrstatuschanged', () => {
  70. this.checkAvailability_();
  71. });
  72. this.checkAvailability_();
  73. }
  74. /**
  75. * @private
  76. */
  77. checkAvailability_() {
  78. shaka.ui.Utils.setDisplay(this.toggleStereoscopicButton_,
  79. this.controls.isPlayingVR());
  80. }
  81. /**
  82. * @private
  83. */
  84. updateLocalizedStrings_() {
  85. const LocIds = shaka.ui.Locales.Ids;
  86. this.toggleStereoscopicButton_.ariaLabel =
  87. this.localization.resolve(LocIds.TOGGLE_STEREOSCOPIC);
  88. this.toggleStereoscopicNameSpan_.textContent =
  89. this.localization.resolve(LocIds.TOGGLE_STEREOSCOPIC);
  90. }
  91. };
  92. /**
  93. * @implements {shaka.extern.IUIElement.Factory}
  94. * @final
  95. */
  96. shaka.ui.ToggleStereoscopicButton.Factory = class {
  97. /** @override */
  98. create(rootElement, controls) {
  99. return new shaka.ui.ToggleStereoscopicButton(rootElement, controls);
  100. }
  101. };
  102. shaka.ui.OverflowMenu.registerElement(
  103. 'toggle_stereoscopic', new shaka.ui.ToggleStereoscopicButton.Factory());
  104. shaka.ui.Controls.registerElement(
  105. 'toggle_stereoscopic', new shaka.ui.ToggleStereoscopicButton.Factory());