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