PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents / 2.6.0
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents v2.6.0
4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 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
187 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 return (
159 <Fragment>
160 {fetching ? <EmbedLoading/> : null}
161
162 <Iframe src={iframeSrc} {...attrs}
163 onLoad={this.onLoad}
164 style={{display: fetching ? 'none' : ''}}
165 onFocus={this.hideOverlay}
166 width="600"
167 height="450"/>
168
169 { ! interactive && (
170 <div
171 className="block-library-embed__interactive-overlay"
172 onMouseUp={ this.hideOverlay }
173 />
174 ) }
175
176 <EmbedControls
177 showEditButton={iframeSrc && !cannotEmbed}
178 switchBackToURLInput={this.switchBackToURLInput}
179 />
180 </Fragment>
181
182 )
183 }
184 }
185 };
186 export default TwitchEdit;
187