/** * Update size of element which are proportional to the current text track * element. * Returns `true` if at least a single styling information is proportional, * `false` otherwise. * @param {number} currentHeight * @param {number} currentWidth * @param {Object} resolution * @param {HTMLElement} textTrackElement * @returns {boolean} */ export default function updateProportionalElements( currentHeight: number, currentWidth: number, resolution: { columns: number; rows: number }, textTrackElement: HTMLElement, ): boolean { const cellUnit = [currentWidth / resolution.columns, currentHeight / resolution.rows]; const proportElts = textTrackElement.getElementsByClassName("proportional-style"); for (let eltIdx = 0; eltIdx < proportElts.length; eltIdx++) { const elt = proportElts[eltIdx]; if (elt instanceof HTMLElement) { const fontSizeVal = elt.getAttribute("data-proportional-font-size"); if (fontSizeVal !== null && !isNaN(+fontSizeVal)) { elt.style.fontSize = String(+fontSizeVal * cellUnit[1]) + "px"; } const widthVal = elt.getAttribute("data-proportional-width"); if (widthVal !== null && !isNaN(+widthVal)) { elt.style.width = String(+widthVal * cellUnit[0]) + "px"; } const heightVal = elt.getAttribute("data-proportional-height"); if (heightVal !== null && !isNaN(+heightVal)) { elt.style.height = String(+heightVal * cellUnit[1]) + "px"; } const lineHeightVal = elt.getAttribute("data-proportional-line-height"); if (lineHeightVal !== null && !isNaN(+lineHeightVal)) { elt.style.lineHeight = String(+lineHeightVal * cellUnit[1]) + "px"; } const leftVal = elt.getAttribute("data-proportional-left"); if (leftVal !== null && !isNaN(+leftVal)) { elt.style.left = String(+leftVal * cellUnit[0]) + "px"; } const topVal = elt.getAttribute("data-proportional-top"); if (topVal !== null && !isNaN(+topVal)) { elt.style.top = String(+topVal * cellUnit[1]) + "px"; } const paddingTopVal = elt.getAttribute("data-proportional-padding-top"); if (paddingTopVal !== null && !isNaN(+paddingTopVal)) { elt.style.paddingTop = String(+paddingTopVal * cellUnit[1]) + "px"; } const paddingBottomVal = elt.getAttribute("data-proportional-padding-bottom"); if (paddingBottomVal !== null && !isNaN(+paddingBottomVal)) { elt.style.paddingBottom = String(+paddingBottomVal * cellUnit[1]) + "px"; } const paddingLeftVal = elt.getAttribute("data-proportional-padding-left"); if (paddingLeftVal !== null && !isNaN(+paddingLeftVal)) { elt.style.paddingLeft = String(+paddingLeftVal * cellUnit[0]) + "px"; } const paddingRightVal = elt.getAttribute("data-proportional-padding-right"); if (paddingRightVal !== null && !isNaN(+paddingRightVal)) { elt.style.paddingRight = String(+paddingRightVal * cellUnit[0]) + "px"; } } } return proportElts.length > 0; }