mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-15 16:06:41 +03:00
e8e28073c1
A localization system was added to the demo, in preparation for future localizations of the demo page. However, such further localizations were never added, and it seems likely that they will never be added. Given that it will almost definitely never be used, the localization system has just become an annoyance that makes adding new features to the demo more difficult, so this removes the system entirely.
219 lines
6.0 KiB
JavaScript
219 lines
6.0 KiB
JavaScript
/*! @license
|
|
* Shaka Player
|
|
* Copyright 2016 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
|
|
goog.provide('shakaDemo.InputContainer');
|
|
|
|
|
|
goog.require('shakaDemo.Tooltips');
|
|
|
|
/**
|
|
* Creates elements for containing inputs. It represents a single "section" of
|
|
* input.
|
|
* It contains a number of "rows", each of which contains an optional label and
|
|
* an input.
|
|
* It also has an optional header, which can contain style-dependent
|
|
* functionality.
|
|
*/
|
|
shakaDemo.InputContainer = class {
|
|
/**
|
|
* @param {!Element} parentDiv
|
|
* @param {?string} headerText The text to be displayed by the header.
|
|
* If null, there will be no header.
|
|
* @param {!shakaDemo.InputContainer.Style} style
|
|
* @param {?string} docLink
|
|
*/
|
|
constructor(parentDiv, headerText, style, docLink) {
|
|
/** @private {!shakaDemo.InputContainer.Style} */
|
|
this.style_ = style;
|
|
|
|
/** @private {?Element} */
|
|
this.header_;
|
|
|
|
/** @private {!Element} */
|
|
this.table_ = document.createElement('div');
|
|
|
|
/** @private {?Element} */
|
|
this.latestRow_;
|
|
|
|
/** @private {?string} */
|
|
this.defaultRowClass_ = null;
|
|
|
|
/** @type {?Element} */
|
|
this.latestElementContainer;
|
|
|
|
/** @type {?string} */
|
|
this.latestTooltip;
|
|
|
|
/** @private {number} */
|
|
this.numRows_ = 0;
|
|
|
|
if (headerText) {
|
|
this.createHeader_(parentDiv, headerText);
|
|
}
|
|
this.table_.classList.add(style);
|
|
if (style == shakaDemo.InputContainer.Style.ACCORDION) {
|
|
this.table_.classList.add('hidden');
|
|
}
|
|
parentDiv.appendChild(this.table_);
|
|
if (docLink) {
|
|
this.addDocLink_(this.table_, docLink);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return {boolean} true if this is an open accordion menu, false otherwise
|
|
*/
|
|
getIsOpen() {
|
|
if (this.style_ == shakaDemo.InputContainer.Style.ACCORDION) {
|
|
return this.table_.classList.contains('show');
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/** If this is an accordion menu, open it. */
|
|
open() {
|
|
if (!this.style_ == shakaDemo.InputContainer.Style.ACCORDION) {
|
|
return;
|
|
}
|
|
this.table_.classList.remove('hidden');
|
|
setTimeout(() => {
|
|
this.table_.classList.add('show');
|
|
}, /* milliseconds= */ 20);
|
|
this.header_.classList.add('mdl-button--colored');
|
|
}
|
|
|
|
/** If this is an accordion menu, close it. */
|
|
close() {
|
|
if (this.style_ != shakaDemo.InputContainer.Style.ACCORDION) {
|
|
return;
|
|
}
|
|
this.table_.classList.remove('show');
|
|
this.table_.addEventListener('transitionend', (e) => {
|
|
this.table_.classList.add('hidden');
|
|
}, {once: true});
|
|
this.header_.classList.remove('mdl-button--colored');
|
|
}
|
|
|
|
/**
|
|
* @param {!Element} parentDiv
|
|
* @param {string} headerText
|
|
* @private
|
|
*/
|
|
createHeader_(parentDiv, headerText) {
|
|
if (this.style_ == shakaDemo.InputContainer.Style.ACCORDION) {
|
|
this.header_ = document.createElement('button');
|
|
this.header_.classList.add('mdl-button--raised');
|
|
this.header_.classList.add('mdl-button');
|
|
this.header_.classList.add('mdl-js-button');
|
|
this.header_.classList.add('mdl-js-ripple-effect');
|
|
this.header_.addEventListener('click', () => {
|
|
// Show/hide the table.
|
|
if (this.getIsOpen()) {
|
|
this.close();
|
|
} else {
|
|
this.open();
|
|
}
|
|
});
|
|
} else {
|
|
this.header_ = document.createElement('div');
|
|
this.header_.classList.add('input-header');
|
|
}
|
|
this.header_.textContent = headerText;
|
|
parentDiv.appendChild(this.header_);
|
|
}
|
|
|
|
/**
|
|
* Creates a link that links to a section within the Shaka Player docs.
|
|
* @param {!Element} parentDiv
|
|
* @param {string} docLink
|
|
* @private
|
|
*/
|
|
addDocLink_(parentDiv, docLink) {
|
|
const link = /** @type {!HTMLAnchorElement} */(document.createElement('a'));
|
|
link.href = docLink;
|
|
link.target = '_blank';
|
|
link.classList.add('mdl-button');
|
|
link.classList.add('mdl-js-button');
|
|
link.classList.add('mdl-js-ripple-effect');
|
|
link.classList.add('mdl-button--colored');
|
|
|
|
const icon = document.createElement('i');
|
|
icon.classList.add('material-icons-round');
|
|
icon.textContent = 'help';
|
|
|
|
link.appendChild(icon);
|
|
parentDiv.appendChild(link);
|
|
}
|
|
|
|
/**
|
|
* Set the default row class for future calls to addRow().
|
|
*
|
|
* @param {?string} rowClass
|
|
*/
|
|
setDefaultRowClass(rowClass) {
|
|
this.defaultRowClass_ = rowClass;
|
|
}
|
|
|
|
/**
|
|
* Return the CSS class list for the container.
|
|
*
|
|
* @return {!DOMTokenList}
|
|
*/
|
|
getClassList() {
|
|
return this.table_.classList;
|
|
}
|
|
|
|
/**
|
|
* Makes a row, for storing an input.
|
|
* @param {?string} labelString
|
|
* @param {?string} tooltipString
|
|
* @param {string=} rowClass
|
|
*/
|
|
addRow(labelString, tooltipString, rowClass) {
|
|
rowClass = rowClass || this.defaultRowClass_ || '';
|
|
this.latestRow_ = document.createElement('div');
|
|
if (rowClass) {
|
|
this.latestRow_.classList.add(rowClass);
|
|
}
|
|
this.table_.appendChild(this.latestRow_);
|
|
|
|
const elementId = 'input-container-row-' + this.numRows_;
|
|
this.numRows_ += 1;
|
|
|
|
if (labelString) {
|
|
const label = document.createElement('label');
|
|
label.setAttribute('for', elementId);
|
|
label.classList.add('input-container-label');
|
|
const labelText = document.createElement('b');
|
|
labelText.textContent = labelString;
|
|
label.appendChild(labelText);
|
|
this.latestRow_.appendChild(label);
|
|
}
|
|
|
|
this.latestElementContainer = document.createElement('div');
|
|
this.latestRow_.appendChild(this.latestElementContainer);
|
|
|
|
this.latestElementContainer.classList.add('input-container-row');
|
|
this.latestElementContainer.id = elementId;
|
|
|
|
this.latestTooltip = tooltipString;
|
|
if (tooltipString) {
|
|
shakaDemo.Tooltips.make(this.latestRow_, tooltipString);
|
|
// Keep the row from being focused.
|
|
this.latestRow_.setAttribute('tabindex', -1);
|
|
this.latestRow_.classList.add('borderless');
|
|
}
|
|
}
|
|
};
|
|
|
|
/** @enum {string} */
|
|
shakaDemo.InputContainer.Style = {
|
|
VERTICAL: 'input-container-style-vertical',
|
|
ACCORDION: 'input-container-style-accordion',
|
|
FLEX: 'input-container-style-flex',
|
|
};
|