PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 2.3.1
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v2.3.1
4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 trunk 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.14 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.4.0 4.4.1 4.4.10 4.4.11 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5.0 4.5.1
embedpress / Gutenberg / src / twitch / edit.js
embedpress / Gutenberg / src / twitch Last commit date
edit.js 7 years ago editor.scss 7 years ago index.js 7 years ago style.scss 7 years ago
edit.js
159 lines
1 /**
2 * Internal dependencies
3 */
4 import EmbedControls from '../common/embed-controls';
5 import EmbedLoading from '../common/embed-loading';
6 import EmbedPlaceholder from '../common/embed-placeholder';
7 import Iframe from '../common/Iframe';
8
9 /**
10 * WordPress dependencies
11 */
12 const { __ } = wp.i18n;
13 const { Component, Fragment } = wp.element;
14
15 class TwitchEdit extends Component {
16 constructor() {
17 super( ...arguments );
18 this.switchBackToURLInput = this.switchBackToURLInput.bind( this );
19 this.setUrl = this.setUrl.bind( this );
20 this.onLoad = this.onLoad.bind( this );
21 this.state = {
22 editingURL: false,
23 url: this.props.attributes.url,
24 fetching: true,
25 cannotEmbed: false
26 };
27 }
28
29 onLoad() {
30 this.setState({
31 fetching: false
32 })
33 }
34 decodeHTMLEntities (str) {
35 if(str && typeof str === 'string') {
36 // strip script/html tags
37 str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
38 str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
39
40 }
41 return str;
42 }
43
44
45 setUrl( event ) {
46 if ( event ) {
47 event.preventDefault();
48 }
49 const { url } = this.state;
50 const { setAttributes } = this.props;
51 setAttributes( { url } );
52 var regEx= /http[s]?:\/\/(?:www\.|clips\.)twitch\.tv\/([0-9a-zA-Z\-\_]+)\/?(chat\/?$|[0-9a-z\-\_]*)?/
53 if(url && url.match( regEx )){
54 var iframeSrc = this.decodeHTMLEntities(url);
55 var match = regEx.exec(iframeSrc);
56 var channelName = match[1];
57 console.log(channelName);
58 var type = "channel";
59 var attrs;
60 if(url.indexOf('clips.twitch.tv') > -1 ) {
61 type = 'clip';
62 }
63 else if(url.indexOf('/videos/') > -1) {
64 type= 'video';
65 }
66 else if(url.indexOf('#/chat$#') > -1) {
67 type= 'chat';
68 }
69 console.log(type)
70 switch(type) {
71 case 'channel':
72 iframeSrc= 'https://player.twitch.tv/?channel=' + channelName;
73 attrs = {
74 scrolling: "no",
75 frameborder: "0",
76 allowfullscreen: "true"
77 };
78 break;
79
80 case 'clip':
81 iframeSrc = 'https://clips.twitch.tv/embed?clip=' + channelName + '&autoplay=false';
82 attrs = {
83 scrolling: "no",
84 frameborder: "0",
85 allowfullscreen: "true"
86 };
87 break;
88
89 case 'video':
90 channelName = match[2];
91 iframeSrc = 'https://player.twitch.tv/?video=' + channelName;
92 attrs = {
93 scrolling: "no",
94 frameborder: "0",
95 allowfullscreen: "true"
96 };
97 break;
98
99 case 'chat':
100 iframeSrc = 'http://www.twitch.tv/embed/' + channelName + '/chat';
101 attrs = {
102 scrolling: "yes",
103 frameborder: "0",
104 allowfullscreen: "true",
105 id: "'" + channelName + "'"
106
107 }
108 break;
109 }
110 console.log(iframeSrc);
111 this.setState( { editingURL: false, cannotEmbed: false } );
112 setAttributes( {iframeSrc, attrs })
113 }
114 else {
115 this.setState({
116 cannotEmbed: true,
117 editingURL: true
118 })
119 }
120 }
121
122 switchBackToURLInput() {
123 this.setState( { editingURL: true } );
124 }
125
126 render() {
127 const { url, editingURL, fetching, cannotEmbed } = this.state;
128 const { iframeSrc, attrs } = this.props.attributes;
129
130 const label = __( 'Twitch URL');
131 // No preview, or we can't embed the current URL, or we've clicked the edit button.
132 if ( !iframeSrc || editingURL ) {
133 return (
134 <EmbedPlaceholder
135 label={ label }
136 onSubmit={ this.setUrl }
137 value={ url }
138 cannotEmbed={ cannotEmbed }
139 onChange={ ( event ) => this.setState( { url: event.target.value } ) }
140 />
141 );
142 }
143 else {
144 return (
145 <Fragment>
146 {fetching ? <EmbedLoading /> : null}
147 <Iframe src={iframeSrc} { ...attrs } onLoad={this.onLoad} style={{ display: fetching ? 'none' : '' }} width="600" height="450" />
148 <EmbedControls
149 showEditButton={ iframeSrc && ! cannotEmbed }
150 switchBackToURLInput={ this.switchBackToURLInput }
151 />
152 </Fragment>
153
154 )
155 }
156 }
157 };
158 export default TwitchEdit;
159