PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 2.6.1
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v2.6.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 5 years ago editor.scss 6 years ago index.js 5 years ago style.scss 6 years ago
edit.js
188 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 import {twitchIcon} from '../common/icons'
15
16 class TwitchEdit extends Component {
17 constructor() {
18 super(...arguments);
19 this.switchBackToURLInput = this.switchBackToURLInput.bind(this);
20 this.setUrl = this.setUrl.bind(this);
21 this.onLoad = this.onLoad.bind(this);
22 this.hideOverlay = this.hideOverlay.bind(this);
23 this.state = {
24 editingURL: false,
25 url: this.props.attributes.url,
26 fetching: true,
27 cannotEmbed: false,
28 interactive: false
29 };
30 }
31
32 static getDerivedStateFromProps(nextProps, state) {
33 if (!nextProps.isSelected && state.interactive) {
34 return {interactive: false};
35 }
36
37 return null;
38 }
39
40 hideOverlay() {
41 this.setState({interactive: true});
42 }
43
44 onLoad() {
45 this.setState({
46 fetching: false
47 })
48 }
49
50 decodeHTMLEntities(str) {
51 if (str && typeof str === 'string') {
52 // strip script/html tags
53 str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
54 str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
55
56 }
57 return str;
58 }
59
60
61 setUrl(event) {
62 if (event) {
63 event.preventDefault();
64 }
65 const {url} = this.state;
66 const {setAttributes} = this.props;
67 setAttributes({url});
68 var regEx = /http[s]?:\/\/(?:www\.|clips\.)twitch\.tv\/([0-9a-zA-Z\-\_]+)\/?(chat\/?$|[0-9a-z\-\_]*)?/
69 if (url && url.match(regEx)) {
70 var iframeSrc = this.decodeHTMLEntities(url);
71 var match = regEx.exec(iframeSrc);
72 var channelName = match[1];
73 console.log(channelName);
74 var type = "channel";
75 var attrs;
76 if (url.indexOf('clips.twitch.tv') > -1) {
77 type = 'clip';
78 } else if (url.indexOf('/videos/') > -1) {
79 type = 'video';
80 } else if (url.indexOf('#/chat$#') > -1) {
81 type = 'chat';
82 }
83 console.log(type)
84 switch (type) {
85 case 'channel':
86 iframeSrc = 'https://player.twitch.tv/?channel=' + channelName;
87 attrs = {
88 scrolling: "no",
89 frameborder: "0",
90 allowfullscreen: "true"
91 };
92 break;
93
94 case 'clip':
95 iframeSrc = 'https://clips.twitch.tv/embed?clip=' + channelName + '&autoplay=false';
96 attrs = {
97 scrolling: "no",
98 frameborder: "0",
99 allowfullscreen: "true"
100 };
101 break;
102
103 case 'video':
104 channelName = match[2];
105 iframeSrc = 'https://player.twitch.tv/?video=' + channelName;
106 attrs = {
107 scrolling: "no",
108 frameborder: "0",
109 allowfullscreen: "true"
110 };
111 break;
112
113 case 'chat':
114 iframeSrc = 'http://www.twitch.tv/embed/' + channelName + '/chat';
115 attrs = {
116 scrolling: "yes",
117 frameborder: "0",
118 allowfullscreen: "true",
119 id: "'" + channelName + "'"
120
121 }
122 break;
123 }
124 this.setState({editingURL: false, cannotEmbed: false});
125 setAttributes({iframeSrc, attrs})
126 } else {
127 this.setState({
128 cannotEmbed: true,
129 editingURL: true
130 })
131 }
132 }
133
134 switchBackToURLInput() {
135 this.setState({editingURL: true});
136 }
137
138 render() {
139 const {url, editingURL, fetching, cannotEmbed,interactive} = this.state;
140 const {iframeSrc, attrs} = this.props.attributes;
141
142 const label = __('Twitch URL');
143 // No preview, or we can't embed the current URL, or we've clicked the edit button.
144 if (!iframeSrc || editingURL) {
145 return (
146 <EmbedPlaceholder
147 label={label}
148 onSubmit={this.setUrl}
149 value={url}
150 cannotEmbed={cannotEmbed}
151 onChange={(event) => this.setState({url: event.target.value})}
152 icon={twitchIcon}
153 DocTitle={__('Learn more about twitch embed')}
154 docLink={'https://embedpress.com/docs/embed-twitch-streams-chat/'}
155 />
156 );
157 } else {
158 const IframeUrl = iframeSrc+'&parent='+embedpressObj.twitch_host;
159 return (
160 <Fragment>
161 {fetching ? <EmbedLoading/> : null}
162
163 <Iframe src={IframeUrl} {...attrs}
164 onLoad={this.onLoad}
165 style={{display: fetching ? 'none' : ''}}
166 onFocus={this.hideOverlay}
167 width="600"
168 height="450"/>
169
170 { ! interactive && (
171 <div
172 className="block-library-embed__interactive-overlay"
173 onMouseUp={ this.hideOverlay }
174 />
175 ) }
176
177 <EmbedControls
178 showEditButton={iframeSrc && !cannotEmbed}
179 switchBackToURLInput={this.switchBackToURLInput}
180 />
181 </Fragment>
182
183 )
184 }
185 }
186 };
187 export default TwitchEdit;
188