123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /* global interfaceConfig */
-
- import UIUtil from '../util/UIUtil';
-
- /**
- * Responsible for drawing audio levels.
- */
- const AudioLevels = {
- /**
- * Fills the dot(s) with the specified "index", with as much opacity as
- * indicated by "opacity".
- *
- * @param {string} elementID the parent audio indicator span element
- * @param {number} index the index of the dots to fill, where 0 indicates
- * the middle dot and the following increments point toward the
- * corresponding pair of dots.
- * @param {number} opacity the opacity to set for the specified dot.
- */
- _setDotLevel(elementID, index, opacity) {
- let audioSpan
- = document.getElementById(elementID)
- .getElementsByClassName('audioindicator');
-
- // Make sure the audio span is still around.
- if (audioSpan && audioSpan.length > 0) {
- audioSpan = audioSpan[0];
- } else {
- return;
- }
-
- const audioTopDots
- = audioSpan.getElementsByClassName('audiodot-top');
- const audioDotMiddle
- = audioSpan.getElementsByClassName('audiodot-middle');
- const audioBottomDots
- = audioSpan.getElementsByClassName('audiodot-bottom');
-
- // First take care of the middle dot case.
- if (index === 0) {
- audioDotMiddle[0].style.opacity = opacity;
-
- return;
- }
-
- // Index > 0 : we are setting non-middle dots.
- index--;// eslint-disable-line no-param-reassign
- audioBottomDots[index].style.opacity = opacity;
- audioTopDots[this.sideDotsCount - index - 1].style.opacity = opacity;
- },
-
- /**
- * Updates the audio level of the large video.
- *
- * @param audioLevel the new audio level to set.
- */
- updateLargeVideoAudioLevel(elementId, audioLevel) {
- const element = document.getElementById(elementId);
-
- if (!UIUtil.isVisible(element)) {
- return;
- }
-
- let level = parseFloat(audioLevel);
-
- level = isNaN(level) ? 0 : level;
-
- let shadowElement = element.getElementsByClassName('dynamic-shadow');
-
- if (shadowElement && shadowElement.length > 0) {
- shadowElement = shadowElement[0];
- }
-
- shadowElement.style.boxShadow = this._updateLargeVideoShadow(level);
- },
-
- /**
- * Updates the large video shadow effect.
- */
- _updateLargeVideoShadow(level) {
- const scale = 2;
-
- // Internal circle audio level.
- const int = {
- level: level > 0.15 ? 20 : 0,
- color: interfaceConfig.AUDIO_LEVEL_PRIMARY_COLOR
- };
-
- // External circle audio level.
- const ext = {
- level: parseFloat(
- ((int.level * scale * level) + int.level).toFixed(0)),
- color: interfaceConfig.AUDIO_LEVEL_SECONDARY_COLOR
- };
-
- // Internal blur.
- int.blur = int.level ? 2 : 0;
-
- // External blur.
- ext.blur = ext.level ? 6 : 0;
-
- return [
- `0 0 ${int.blur}px ${int.level}px ${int.color}`,
- `0 0 ${ext.blur}px ${ext.level}px ${ext.color}`
- ].join(', ');
- }
- };
-
- export default AudioLevels;
|