Source: ui/content_title.js

/*! @license
 * Shaka Player
 * Copyright 2016 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */


goog.provide('shaka.ui.ContentTitle');

goog.require('shaka.ads.Utils');
goog.require('shaka.ui.Controls');
goog.require('shaka.ui.Element');
goog.require('shaka.ui.Utils');
goog.require('shaka.util.Dom');
goog.require('shaka.util.TXml');


/**
 * @extends {shaka.ui.Element}
 * @final
 * @export
 */
shaka.ui.ContentTitle = class extends shaka.ui.Element {
  /**
   * @param {!HTMLElement} parent
   * @param {!shaka.ui.Controls} controls
   */
  constructor(parent, controls) {
    super(parent, controls);

    /** @type {!HTMLElement} */
    this.title_ = shaka.util.Dom.createHTMLElement('div');
    this.title_.classList.add('shaka-content-title');
    this.parent.appendChild(this.title_);

    this.eventManager.listen(this.player, 'unloading', () => {
      this.title_.textContent = '';
      shaka.ui.Utils.setDisplay(this.title_, false);
    });

    this.eventManager.listen(this.player, 'loading', () => {
      this.title_.textContent = this.video.title || '';
      shaka.ui.Utils.setDisplay(this.title_, true);
    });

    this.eventManager.listen(
        this.adManager, shaka.ads.Utils.AD_STARTED, () => {
          shaka.ui.Utils.setDisplay(this.title_, !this.ad.isLinear());
        });

    this.eventManager.listen(
        this.adManager, shaka.ads.Utils.AD_STOPPED, () => {
          shaka.ui.Utils.setDisplay(this.title_, true);
        });

    this.eventManager.listen(this.player, 'metadata', (event) => {
      const payload = event['payload'];
      if (!payload) {
        return;
      }
      let title;
      if (payload['key'] == 'TIT2' && payload['data']) {
        title = payload['data'];
      }
      if (title) {
        this.title_.textContent = title;
      }
    });

    this.eventManager.listen(this.player, 'sessiondata', (event) => {
      if (event['id'] != 'com.apple.hls.title') {
        return;
      }
      const title = event['value'];
      if (title) {
        this.title_.textContent = title;
      }
    });

    this.eventManager.listen(this.player, 'programinformation', (event) => {
      if (!event['detail']) {
        return;
      }
      const TXml = shaka.util.TXml;
      /** @type {!shaka.extern.xml.Node} */
      const detail = /** @type {!shaka.extern.xml.Node} */(event['detail']);
      const titleNode = TXml.findChild(detail, 'Title');
      if (titleNode) {
        const title = TXml.getContents(titleNode);
        if (title) {
          this.title_.textContent = title;
        }
      }
    });
  }
};


/**
 * @implements {shaka.extern.IUIElement.Factory}
 * @final
 */
shaka.ui.ContentTitle.Factory = class {
  /** @override */
  create(rootElement, controls) {
    return new shaka.ui.ContentTitle(rootElement, controls);
  }
};

shaka.ui.Controls.registerElement(
    'content_title', new shaka.ui.ContentTitle.Factory());