Updated Video to have JS events, added exact prop passthrough for NavLink
This commit is contained in:
@ -28,7 +28,7 @@ import Language from './../../language/Language';
|
|||||||
|
|
||||||
const NavbarLink = function(props) {
|
const NavbarLink = function(props) {
|
||||||
return (
|
return (
|
||||||
<NavLink to={ props.to } className="o-navbar__link" activeClassName="is-active">
|
<NavLink to={ props.to } className="o-navbar__link" activeClassName="is-active" exact={props.exact}>
|
||||||
{ Language.get("navbar." + props.title) }
|
{ Language.get("navbar." + props.title) }
|
||||||
</NavLink>
|
</NavLink>
|
||||||
);
|
);
|
||||||
@ -53,7 +53,7 @@ class Navbar extends React.Component {
|
|||||||
/>
|
/>
|
||||||
</NavLink>
|
</NavLink>
|
||||||
|
|
||||||
<NavbarLink to="/" title="home" />
|
<NavbarLink to="/" title="home" exact />
|
||||||
<NavbarLink to="/about" title="about" />
|
<NavbarLink to="/about" title="about" />
|
||||||
<NavbarLink to="/contact" title="contact" />
|
<NavbarLink to="/contact" title="contact" />
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -34,8 +34,39 @@ const VALID_SOURCES = [
|
|||||||
class Video extends React.Component {
|
class Video extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
|
//Initial State
|
||||||
|
this.state = {
|
||||||
|
autoPlay: this.props.autoPlay,
|
||||||
|
loop: this.props.loop,
|
||||||
|
loader: true
|
||||||
|
};
|
||||||
|
|
||||||
|
//Bound events (for removing event listeners)
|
||||||
|
this.onPlayingBound = this.onPlaying.bind(this);
|
||||||
|
this.onWaitingBound = this.onWaiting.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
this.refs.video.addEventListener('playing', this.onPlayingBound);
|
||||||
|
this.refs.video.addEventListener('waiting', this.onWaitingBound);
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Standard Events - https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Media_events
|
||||||
|
onPlaying() {
|
||||||
|
this.setState({
|
||||||
|
loader: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onWaiting() {
|
||||||
|
}
|
||||||
|
|
||||||
|
//React Render
|
||||||
render() {
|
render() {
|
||||||
//TODO: Add image fallback support.
|
//TODO: Add image fallback support.
|
||||||
//TODO: Add state support, as well as functional controls.
|
//TODO: Add state support, as well as functional controls.
|
||||||
@ -47,7 +78,7 @@ class Video extends React.Component {
|
|||||||
for(let i = 0; i < VALID_SOURCES.length; i++) {
|
for(let i = 0; i < VALID_SOURCES.length; i++) {
|
||||||
let s = VALID_SOURCES[i];
|
let s = VALID_SOURCES[i];
|
||||||
if(!sourceProps[s]) continue;
|
if(!sourceProps[s]) continue;
|
||||||
//sources.push(<source type={"video/"+s} src={sourceProps[s]} key={s} />);
|
sources.push(<source type={"video/"+s} src={sourceProps[s]} key={s} />);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Classes
|
//Classes
|
||||||
@ -55,8 +86,8 @@ class Video extends React.Component {
|
|||||||
if(this.props.className) clazz += " " + this.props.className;
|
if(this.props.className) clazz += " " + this.props.className;
|
||||||
if(sourceProps.image) clazz += " has-image";
|
if(sourceProps.image) clazz += " has-image";
|
||||||
if(sourceProps.gif) clazz += " has-gif";
|
if(sourceProps.gif) clazz += " has-gif";
|
||||||
if(this.props.autoplay) clazz += " is-autoplaying";
|
if(this.state.autoplay) clazz += " is-autoplaying";
|
||||||
if(this.props.loop) clazz += " is-looping";
|
if(this.state.loop) clazz += " is-looping";
|
||||||
|
|
||||||
let videoClass = "o-video__video";
|
let videoClass = "o-video__video";
|
||||||
if(this.props.fill) videoClass += " is-full";
|
if(this.props.fill) videoClass += " is-full";
|
||||||
@ -65,20 +96,28 @@ class Video extends React.Component {
|
|||||||
//Fallback.
|
//Fallback.
|
||||||
let fallback;
|
let fallback;
|
||||||
|
|
||||||
|
//Loader
|
||||||
|
let loader;
|
||||||
|
if(this.state.loader) {
|
||||||
|
loader = <Loader />
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={clazz}>
|
<div className={clazz}>
|
||||||
{ /* Video Element (And sources) */ }
|
{ /* Video Element (And sources) */ }
|
||||||
<video
|
<video
|
||||||
className={ videoClass }
|
className={ videoClass }
|
||||||
autoPlay={this.props.autoPlay}
|
autoPlay={this.state.autoPlay}
|
||||||
loop={this.props.loop}
|
loop={this.state.loop}
|
||||||
controls={false /* Explicitly no controls */}
|
controls={false /* Explicitly no controls */}
|
||||||
|
ref="video"
|
||||||
>
|
>
|
||||||
{ sources }
|
{ sources }
|
||||||
</video>
|
</video>
|
||||||
|
|
||||||
{/* Loader */}
|
{/* Loader */}
|
||||||
<Loader />
|
{ loader }
|
||||||
|
|
||||||
{ /* Fallback Picture */ }
|
{ /* Fallback Picture */ }
|
||||||
{ fallback }
|
{ fallback }
|
||||||
|
Reference in New Issue
Block a user