UNPKG

twitch-embed

Version:
108 lines (85 loc) 2.79 kB
# 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](https://github.com/justintv/Twitch-API/blob/master/embed-video.md "Embedding Twitch Live Streams & Videos") ## 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> ); } }