PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 2.5.4
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v2.5.4
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 6 years ago editor.scss 6 years ago index.js 6 years ago style.scss 6 years ago
edit.js
165 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 const {Disabled} = wp.components;
15 import {twitchIcon} from '../common/icons'
16
17 class TwitchEdit extends Component {
18 constructor() {
19 super(...arguments);
20 this.switchBackToURLInput = this.switchBackToURLInput.bind(this);
21 this.setUrl = this.setUrl.bind(this);
22 this.onLoad = this.onLoad.bind(this);
23 this.state = {
24 editingURL: false,
25 url: this.props.attributes.url,
26 fetching: true,
27 cannotEmbed: false
28 };
29 }
30
31 onLoad() {
32 this.setState({
33 fetching: false
34 })
35 }
36
37 decodeHTMLEntities(str) {
38 if (str && typeof str === 'string') {
39 // strip script/html tags
40 str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
41 str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
42
43 }
44 return str;
45 }
46
47
48 setUrl(event) {
49 if (event) {
50 event.preventDefault();
51 }
52 const {url} = this.state;
53 const {setAttributes} = this.props;
54 setAttributes({url});
55 var regEx = /http[s]?:\/\/(?:www\.|clips\.)twitch\.tv\/([0-9a-zA-Z\-\_]+)\/?(chat\/?$|[0-9a-z\-\_]*)?/
56 if (url && url.match(regEx)) {
57 var iframeSrc = this.decodeHTMLEntities(url);
58 var match = regEx.exec(iframeSrc);
59 var channelName = match[1];
60 console.log(channelName);
61 var type = "channel";
62 var attrs;
63 if (url.indexOf('clips.twitch.tv') > -1) {
64 type = 'clip';
65 } else if (url.indexOf('/videos/') > -1) {
66 type = 'video';
67 } else if (url.indexOf('#/chat$#') > -1) {
68 type = 'chat';
69 }
70 console.log(type)
71 switch (type) {
72 case 'channel':
73 iframeSrc = 'https://player.twitch.tv/?channel=' + channelName;
74 attrs = {
75 scrolling: "no",
76 frameborder: "0",
77 allowfullscreen: "true"
78 };
79 break;
80
81 case 'clip':
82 iframeSrc = 'https://clips.twitch.tv/embed?clip=' + channelName + '&autoplay=false';
83 attrs = {
84 scrolling: "no",
85 frameborder: "0",
86 allowfullscreen: "true"
87 };
88 break;
89
90 case 'video':
91 channelName = match[2];
92 iframeSrc = 'https://player.twitch.tv/?video=' + channelName;
93 attrs = {
94 scrolling: "no",
95 frameborder: "0",
96 allowfullscreen: "true"
97 };
98 break;
99
100 case 'chat':
101 iframeSrc = 'http://www.twitch.tv/embed/' + channelName + '/chat';
102 attrs = {
103 scrolling: "yes",
104 frameborder: "0",
105 allowfullscreen: "true",
106 id: "'" + channelName + "'"
107
108 }
109 break;
110 }
111 console.log(iframeSrc);
112 this.setState({editingURL: false, cannotEmbed: false});
113 setAttributes({iframeSrc, attrs})
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 icon={twitchIcon}
141 DocTitle={__('Learn more about twitch')}
142 docLink={'https://embedpress.com/docs/embed-twitch-streams-chat/'}
143 />
144 );
145 } else {
146 return (
147 <Fragment>
148 {fetching ? <EmbedLoading/> : null}
149 <Disabled>
150 <Iframe src={iframeSrc} {...attrs} onLoad={this.onLoad}
151 style={{display: fetching ? 'none' : ''}} width="600" height="450"/>
152 </Disabled>
153
154 <EmbedControls
155 showEditButton={iframeSrc && !cannotEmbed}
156 switchBackToURLInput={this.switchBackToURLInput}
157 />
158 </Fragment>
159
160 )
161 }
162 }
163 };
164 export default TwitchEdit;
165