PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 2.5.4
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v2.5.4
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-docs / edit.js
embedpress / Gutenberg / src / google-docs 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
142 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 } = wp.element;
14 const {Disabled} = wp.components;
15 import { googleDocsIcon } from '../common/icons';
16 class GoogleDocsEdit extends Component {
17 constructor() {
18 super( ...arguments );
19 this.switchBackToURLInput = this.switchBackToURLInput.bind( this );
20 this.setUrl = this.setUrl.bind( this );
21 this.updateAlignment = this.updateAlignment.bind( this );
22 this.onLoad = this.onLoad.bind( this );
23 this.state = {
24 editingURL: false,
25 url: this.props.attributes.url,
26 fetching: true,
27 cannotEmbed: false
28 };
29 }
30
31 onLoad() {
32 this.setState({
33 fetching: false
34 })
35 }
36 decodeHTMLEntities (str) {
37 if(str && typeof str === 'string') {
38 // strip script/html tags
39 str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
40 str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
41
42 }
43 return str;
44 }
45
46 updateAlignment( nextAlign ) {
47 const { setAttributes } = this.props;
48 const extraUpdatedAttributes =
49 [ 'wide', 'full' ].indexOf( nextAlign ) !== -1
50 ? { width: undefined, height: undefined }
51 : {};
52 setAttributes( {
53 ...extraUpdatedAttributes,
54 align: nextAlign,
55 } );
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 == 'document') {
72 if(!iframeSrc.match( /([?&])embedded=true/i)) {
73 if(iframeSrc.indexOf('?') > -1 ) {
74 iframeSrc += '&embedded=true';
75 }
76 else {
77 iframeSrc += '?embedded=true'
78 }
79 }
80 this.setState( { editingURL: false, cannotEmbed: false } );
81 setAttributes( {iframeSrc: iframeSrc })
82 }
83 else {
84 this.setState({
85 cannotEmbed: true,
86 editingURL: true
87 })
88 }
89 }
90 else {
91 this.setState({
92 cannotEmbed: true,
93 editingURL: true
94 })
95 }
96 }
97
98 switchBackToURLInput() {
99 this.setState( { editingURL: true } );
100 }
101
102 render() {
103 const { url, editingURL, fetching, cannotEmbed } = this.state;
104 const { iframeSrc,align } = this.props.attributes;
105 const label = __('Google Docs URL');
106
107 // No preview, or we can't embed the current URL, or we've clicked the edit button.
108 if ( !iframeSrc || editingURL ) {
109 return (
110 <div>
111 <EmbedPlaceholder
112 label={label}
113 onSubmit={ this.setUrl }
114 value={ url }
115 cannotEmbed={ cannotEmbed }
116 onChange={ ( event ) => this.setState( { url: event.target.value } ) }
117 icon={googleDocsIcon}
118 DocTitle={__('Learn more about Google doc')}
119 docLink={'https://embedpress.com/docs/embed-google-docs-wordpress/'}
120 />
121 </div>
122
123 );
124 } else {
125 return (
126 <div>
127 {fetching ? <EmbedLoading /> : null}
128 <Disabled>
129 <Iframe src={iframeSrc} onLoad={this.onLoad} style={{ display: fetching ? 'none' : '' }} frameborder="0" width="600" height="450" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" />
130 </Disabled>
131 <EmbedControls
132 showEditButton={ iframeSrc && ! cannotEmbed }
133 switchBackToURLInput={ this.switchBackToURLInput }
134 />
135 </div>
136 )
137 }
138
139 }
140 };
141 export default GoogleDocsEdit;
142