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 / youtube / edit.js
embedpress / Gutenberg / src / youtube Last commit date
edit.js 6 years ago editor.scss 6 years ago index.js 6 years ago index.php 6 years ago style.scss 6 years ago
edit.js
156 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 import {youtubeIcon} from "../common/icons";
9
10
11 /**
12 * WordPress dependencies
13 */
14 const {__} = wp.i18n;
15 const {Component, Fragment} = wp.element;
16
17 class YoutubeEdit 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.hideOverlay = this.hideOverlay.bind( this );
24 this.state = {
25 editingURL: false,
26 url: this.props.attributes.url,
27 fetching: true,
28 cannotEmbed: false,
29 interactive: false
30 };
31 }
32
33 static getDerivedStateFromProps( nextProps, state ) {
34 if ( ! nextProps.isSelected && state.interactive ) {
35 return { interactive: false };
36 }
37
38 return null;
39 }
40
41 hideOverlay() {
42 this.setState( { interactive: true } );
43 }
44
45 componentWillMount() {
46 if (this.state.url) {
47 this.setUrl();
48 }
49 }
50
51 onLoad() {
52 this.setState({
53 fetching: false
54 });
55 }
56
57 decodeHTMLEntities(str) {
58 if (str && typeof str === "string") {
59 // strip script/html tags
60 str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim, "");
61 str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim, "");
62 }
63 return str;
64 }
65
66 setUrl(event) {
67 if (event) {
68 event.preventDefault();
69 }
70 const {url} = this.state;
71 const {setAttributes} = this.props;
72 setAttributes({url});
73 const matches = url.match(
74 /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/
75 );
76 if (url && matches) {
77 let mediaId = matches[1];
78 let iframeSrc = "https://www.youtube.com/embed/" + mediaId;
79 let iframeUrl = new URL(iframeSrc);
80
81 // // If your expected result is "http://foo.bar/?x=42&y=2"
82 if (typeof embedpressProObj !== 'undefined') {
83 for (var key in embedpressProObj.youtubeParams) {
84 iframeUrl.searchParams.set(
85 key,
86 embedpressProObj.youtubeParams[key]
87 );
88 }
89 }
90
91 this.setState({editingURL: false, cannotEmbed: false});
92 setAttributes({iframeSrc: iframeUrl.href, mediaId});
93 } else {
94 this.setState({
95 cannotEmbed: true,
96 editingURL: true
97 });
98 }
99 }
100
101 switchBackToURLInput() {
102 this.setState({editingURL: true});
103 }
104
105 render() {
106 const {url, editingURL, fetching, cannotEmbed,interactive} = this.state;
107 const {iframeSrc, attrs} = this.props.attributes;
108 const label = __("Youtube URL");
109 // No preview, or we can't embed the current URL, or we've clicked the edit button.
110 if (!iframeSrc || editingURL) {
111 return (
112 <EmbedPlaceholder
113 label={label}
114 onSubmit={this.setUrl}
115 value={url}
116 cannotEmbed={cannotEmbed}
117 onChange={event => this.setState({url: event.target.value})}
118 icon={youtubeIcon}
119 DocTitle={__('Learn More About Youtube Embed')}
120 docLink={'https://embedpress.com/docs/embed-youtube-wordpress/'}
121
122 />
123 );
124 } else {
125 return (
126 <Fragment>
127 {fetching ? <EmbedLoading/> : null}
128
129 <Iframe
130 src={iframeSrc}
131 {...attrs}
132 onLoad={this.onLoad}
133 style={{display: fetching ? "none" : ""}}
134 width="640"
135 onFocus={ this.hideOverlay }
136 height="450" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"
137 />
138 { ! interactive && (
139 <div
140 className="block-library-embed__interactive-overlay"
141 onMouseUp={ this.hideOverlay }
142 />
143 ) }
144
145 <EmbedControls
146 showEditButton={iframeSrc && !cannotEmbed}
147 switchBackToURLInput={this.switchBackToURLInput}
148 />
149 </Fragment>
150 );
151 }
152 }
153 }
154
155 export default YoutubeEdit;
156