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