PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 2.7.2
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v2.7.2
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-sheets / edit.js
embedpress / Gutenberg / src / google-sheets Last commit date
edit.js 5 years ago editor.scss 6 years ago index.js 5 years ago style.scss 6 years ago
edit.js
166 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 {googleSheetsIcon} from '../common/icons'
15
16 class GoogleSheetsEdit 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 if (url && url.match(/^http[s]?:\/\/((?:www\.)?docs\.google\.com(?:.*)?(?:document|presentation|spreadsheets|forms|drawings)\/[a-z0-9\/\?=_\-\.\,&%\$#\@\!\+]*)/i)) {
69 var iframeSrc = this.decodeHTMLEntities(url);
70 var regEx = /google\.com(?:.+)?(document|presentation|spreadsheets|forms|drawings)/i;
71 var match = regEx.exec(iframeSrc);
72 var type = match[1];
73 if (type && type == 'spreadsheets') {
74 if (iframeSrc.indexOf('?') > -1) {
75 var query = iframeSrc.split('?');
76 query = query[1];
77 query = query.split('&');
78 console.log(query)
79 if (query.length > 0) {
80 var hasHeadersParam = false;
81 var hasWidgetParam = false;
82 query.map(param => {
83 if (param.indexOf('widget=')) {
84 hasWidgetParam = true;
85 } else if (param.indexOf('headers=')) {
86 hasHeadersParam = true;
87 }
88 })
89 if (!hasWidgetParam) {
90 iframeSrc += '&widget=true';
91 }
92
93 if (!hasHeadersParam) {
94 iframeSrc += '&headers=false';
95 }
96 }
97 } else {
98 iframeSrc += '?widget=true&headers=false';
99 }
100 this.setState({editingURL: false, cannotEmbed: false});
101 setAttributes({iframeSrc: iframeSrc})
102 } else {
103 this.setState({
104 cannotEmbed: true,
105 editingURL: true
106 })
107 }
108 } else {
109 this.setState({
110 cannotEmbed: true,
111 editingURL: true
112 })
113 }
114 }
115
116 switchBackToURLInput() {
117 this.setState({editingURL: true});
118 }
119
120 render() {
121 const {url, editingURL, fetching, cannotEmbed, interactive} = this.state;
122 const {iframeSrc} = this.props.attributes;
123
124 const label = __('Google Sheets URL');
125
126 // No preview, or we can't embed the current URL, or we've clicked the edit button.
127 if (!iframeSrc || editingURL) {
128 return (
129 <EmbedPlaceholder
130 label={label}
131 onSubmit={this.setUrl}
132 value={url}
133 cannotEmbed={cannotEmbed}
134 onChange={(event) => this.setState({url: event.target.value})}
135 icon={googleSheetsIcon}
136 DocTitle={__('Learn more about Google sheet embed')}
137 docLink={'https://embedpress.com/docs/embed-google-sheets-wordpress/'}
138 />
139 );
140 } else {
141
142 return (
143 <Fragment>
144 {fetching ? <EmbedLoading/> : null}
145
146 <Iframe src={iframeSrc} onFocus={ this.hideOverlay } onLoad={this.onLoad} style={{display: fetching ? 'none' : ''}}
147 frameborder="0" width="600" height="450"/>
148 { ! interactive && (
149 <div
150 className="block-library-embed__interactive-overlay"
151 onMouseUp={ this.hideOverlay }
152 />
153 ) }
154
155 <EmbedControls
156 showEditButton={iframeSrc && !cannotEmbed}
157 switchBackToURLInput={this.switchBackToURLInput}
158 />
159 </Fragment>
160
161 )
162 }
163 }
164 };
165 export default GoogleSheetsEdit;
166