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 / google-slides / edit.js
embedpress / Gutenberg / src / google-slides 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
143 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 { googleSlidesIcon} from '../common/icons'
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.hideOverlay = this.hideOverlay.bind(this);
22 this.state = {
23 editingURL: false,
24 url: this.props.attributes.url,
25 fetching: true,
26 cannotEmbed: false,
27 interactive: false
28 };
29 }
30
31 static getDerivedStateFromProps(nextProps, state) {
32 if (!nextProps.isSelected && state.interactive) {
33 return {interactive: false};
34 }
35
36 return null;
37 }
38
39 hideOverlay() {
40 this.setState({interactive: true});
41 }
42
43 onLoad() {
44 this.setState({
45 fetching: false
46 })
47 }
48 decodeHTMLEntities (str) {
49 if(str && typeof str === 'string') {
50 // strip script/html tags
51 str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
52 str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
53
54 }
55 return str;
56 }
57
58
59 setUrl( event ) {
60 if ( event ) {
61 event.preventDefault();
62 }
63 const { url } = this.state;
64 const { setAttributes } = this.props;
65 setAttributes( { url } );
66 if(url && url.match( /^http[s]?:\/\/((?:www\.)?docs\.google\.com(?:.*)?(?:document|presentation|spreadsheets|forms|drawings)\/[a-z0-9\/\?=_\-\.\,&%\$#\@\!\+]*)/i)){
67 var iframeSrc = this.decodeHTMLEntities(url);
68 var regEx = /google\.com(?:.+)?(document|presentation|spreadsheets|forms|drawings)/i;
69 var match = regEx.exec(iframeSrc);
70 var type = match[1];
71 if(type && type == 'presentation') {
72 if(iframeSrc.match( /pub\?/i )) {
73 iframeSrc = iframeSrc.replace('/pub?', '/embed?');
74 }
75 this.setState( { editingURL: false, cannotEmbed: false } );
76 setAttributes( {iframeSrc: iframeSrc })
77 }
78 else {
79 this.setState({
80 cannotEmbed: true,
81 editingURL: true
82 })
83 }
84 }
85 else {
86 this.setState({
87 cannotEmbed: true,
88 editingURL: true
89 })
90 }
91 }
92
93 switchBackToURLInput() {
94 this.setState( { editingURL: true } );
95 }
96
97 render() {
98 const { url, editingURL, fetching, cannotEmbed, interactive} = this.state;
99 const { iframeSrc } = this.props.attributes;
100
101 const label = __( 'Google Slides URL');
102
103 // No preview, or we can't embed the current URL, or we've clicked the edit button.
104 if ( !iframeSrc || editingURL ) {
105 return (
106 <EmbedPlaceholder
107 label={ label }
108 onSubmit={ this.setUrl }
109 value={ url }
110 cannotEmbed={ cannotEmbed }
111 onChange={ ( event ) => this.setState( { url: event.target.value } ) }
112 icon={googleSlidesIcon}
113 DocTitle={__('Learn more about Google slides embed')}
114 docLink={'https://embedpress.com/docs/embed-google-slides-wordpress/'}
115 />
116 );
117 }
118 else {
119
120 return (
121 <Fragment>
122 {fetching ? <EmbedLoading /> : null}
123
124 <Iframe src={iframeSrc} onFocus={ this.hideOverlay } onLoad={this.onLoad} style={{ display: fetching ? 'none' : '' }} frameborder="0" width="600" height="450" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" />
125 { ! interactive && (
126 <div
127 className="block-library-embed__interactive-overlay"
128 onMouseUp={ this.hideOverlay }
129 />
130 ) }
131
132 <EmbedControls
133 showEditButton={ iframeSrc && ! cannotEmbed }
134 switchBackToURLInput={ this.switchBackToURLInput }
135 />
136 </Fragment>
137
138 )
139 }
140 }
141 };
142 export default GoogleSlidesEdit;
143