bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/closed-captions/component.jsx

65 lines
1.8 KiB
React
Raw Normal View History

import React, { PropTypes } from 'react';
import styles from './styles.scss';
import { findDOMNode } from 'react-dom';
export default class ClosedCaptions extends React.Component {
constructor(props) {
super(props);
this.shouldScrollBottom = false;
}
renderCaptions(caption) {
let text = caption.captions;
return (
<span
2016-12-23 16:26:22 +08:00
style={{ whiteSpace: 'pre-wrap', wordWrap: 'break-word', fontFamily: this.props.fontFamily, fontSize: this.props.fontSize, color: this.props.fontColor }}
dangerouslySetInnerHTML={{ __html: text }}
key={caption.index}
/>
);
}
componentDidUpdate() {
const { ccScrollArea } = this.refs;
var node = findDOMNode(ccScrollArea);
node.scrollTop = node.scrollHeight;
}
componentWillUpdate() {
const { ccScrollArea } = this.refs;
var node = findDOMNode(ccScrollArea);
// number 4 is for the border
// offset height includes the border, but scrollheight doesn't
this.shouldScrollBottom = node.scrollTop + node.offsetHeight - 4 === node.scrollHeight;
}
componentDidUpdate() {
if (this.shouldScrollBottom) {
const { ccScrollArea } = this.refs;
var node = findDOMNode(ccScrollArea);
node.scrollTop = node.scrollHeight
}
}
render() {
return (
<div disabled className={styles.ccbox}>
2016-12-21 07:54:39 +08:00
<div className={styles.title}>
2017-03-09 22:34:33 +08:00
<p> {this.props.locale > -1 ? this.props.locale : 'Locale is not selected'} </p>
2016-12-21 07:54:39 +08:00
</div>
2016-12-23 16:26:22 +08:00
<div
ref="ccScrollArea"
2016-12-23 16:26:22 +08:00
className={styles.frame}
style={{background: this.props.backgroundColor}}>
{this.props.captions[this.props.locale] ? this.props.captions[this.props.locale].captions.map((caption) => (
2016-12-21 07:54:39 +08:00
this.renderCaptions(caption)
)) : null }
</div>
</div>
);
}
}