1.1.4 • Published 7 years ago

twitch-embed v1.1.4

Weekly downloads
315
License
MIT
Repository
github
Last release
7 years ago

twitch-embed

Make Twitch's interactive embed video script available on npm. I needed it available on a project and figured other's might too.

Implementation

This isn't the most ideal implementation. The script still pollutes the window and the functions/objects are NOT able to be imported. i.e. import { Player } from 'twitch-embed'. To enable this Twitch would have to provide its source and make a few modifications.

lib/v1.js is literally just http://player.twitch.tv/js/embed/v1.js

Modifications

I did have to make a change to the source. I pretty printed it, and hard coded the base of the Twitch video requests to 'http://player.twitch.tv/js/embed/v1.js' you can see the change at line 320.

Usage

npm i --save twitch-embed
import 'twitch-embed';

eslint

You may need to disable the eslint error for global variable usage if you are referencing the Twitch variable without window. (Twitch vs window.Twitch)

//.eslintrc
{
  "globals": {
    "Twitch": false
  }
}

See Twitch's Video Embed page for more information. https://github.com/justintv/Twitch-API/blob/master/embed-video.md

React class ES6 Example

import React from 'react';
import 'twitch-embed';

export default class TwitchVideoEmbed extends React.Component {
	constructor(props) {
		super(props);
		this.player = null;
		this.state = {
			id: null
		};
	}

	static propTypes = {
		channel: React.PropTypes.string,
		video: React.PropTypes.string,
		play: React.PropTypes.bool
	};

	componentWillMount() {
		this.setId();
	}

	componentDidMount() {
		this.setPlayer();
	}

	componentDidUpdate() {
		this.setPlayer();
	}

	componentWillReceiveProps(nextProps) {
		this.setId();
		this.setPlayer();

		//can check for props and call player functions here
	}

	setId() {
		if (!this.state.id) {
			if (this.props.channel) {
				this.channel = true;
				this.setState({
					id: `twitch-${this.props.channel}`
				});
			}
			if (this.props.video) {
				this.channel = false;
				this.setState({
					id: `twitch-${this.props.video}`
				});
			}
		}
	}

	setPlayer() {
		if (!this.player) {
			const options = {};
			if (this.channel) {
				options.channel = this.props.channel;
			} else {
				options.video = this.props.video;
			}
			if (typeof window !== 'undefined' && window.Twitch) {
				this.player = new window.Twitch.Player(this.state.id, options);
			}
		}
	}

	render() {
		return (
			<div id={this.state.id || ''} className="twitch-video-embed"></div>
		);
	}
}
1.1.4

7 years ago

1.1.3

7 years ago

1.1.2

7 years ago

1.1.1

7 years ago

1.1.0

8 years ago

1.0.0

8 years ago

0.1.1

8 years ago

0.1.0

8 years ago