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 / google-slides / edit.js
embedpress / Gutenberg / src / google-slides 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
118 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 GoogleSlidesEdit 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 if(url && url.match( /^http[s]?:\/\/((?:www\.)?docs\.google\.com(?:.*)?(?:document|presentation|spreadsheets|forms|drawings)\/[a-z0-9\/\?=_\-\.\,&%\$#\@\!\+]*)/i)){
53 var iframeSrc = this.decodeHTMLEntities(url);
54 var regEx = /google\.com(?:.+)?(document|presentation|spreadsheets|forms|drawings)/i;
55 var match = regEx.exec(iframeSrc);
56 var type = match[1];
57 if(type && type == 'presentation') {
58 if(iframeSrc.match( /pub\?/i )) {
59 iframeSrc = iframeSrc.replace('/pub?', '/embed?');
60 }
61 this.setState( { editingURL: false, cannotEmbed: false } );
62 setAttributes( {iframeSrc: iframeSrc })
63 }
64 else {
65 this.setState({
66 cannotEmbed: true,
67 editingURL: true
68 })
69 }
70 }
71 else {
72 this.setState({
73 cannotEmbed: true,
74 editingURL: true
75 })
76 }
77 }
78
79 switchBackToURLInput() {
80 this.setState( { editingURL: true } );
81 }
82
83 render() {
84 const { url, editingURL, fetching, cannotEmbed } = this.state;
85 const { iframeSrc } = this.props.attributes;
86
87 const label = __( 'Google Slides URL');
88
89 // No preview, or we can't embed the current URL, or we've clicked the edit button.
90 if ( !iframeSrc || editingURL ) {
91 return (
92 <EmbedPlaceholder
93 label={ label }
94 onSubmit={ this.setUrl }
95 value={ url }
96 cannotEmbed={ cannotEmbed }
97 onChange={ ( event ) => this.setState( { url: event.target.value } ) }
98 />
99 );
100 }
101 else {
102
103 return (
104 <Fragment>
105 {fetching ? <EmbedLoading /> : null}
106 <Iframe src={iframeSrc} onLoad={this.onLoad} style={{ display: fetching ? 'none' : '' }} frameborder="0" width="600" height="450" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" />
107 <EmbedControls
108 showEditButton={ iframeSrc && ! cannotEmbed }
109 switchBackToURLInput={ this.switchBackToURLInput }
110 />
111 </Fragment>
112
113 )
114 }
115 }
116 };
117 export default GoogleSlidesEdit;
118