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-sheets / edit.js
embedpress / Gutenberg / src / google-sheets 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
167 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" allowfullscreen="true"
148 mozallowfullscreen="true" webkitallowfullscreen="true"/>
149 { ! interactive && (
150 <div
151 className="block-library-embed__interactive-overlay"
152 onMouseUp={ this.hideOverlay }
153 />
154 ) }
155
156 <EmbedControls
157 showEditButton={iframeSrc && !cannotEmbed}
158 switchBackToURLInput={this.switchBackToURLInput}
159 />
160 </Fragment>
161
162 )
163 }
164 }
165 };
166 export default GoogleSheetsEdit;
167