PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 2.3.3
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v2.3.3
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-maps / edit.js
embedpress / Gutenberg / src / google-maps 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
122 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 GoogleSlidesEdit 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\.|maps\.)?(?:google\.com?))|(?:goo\.gl))(?:\.[a-z]{2})?\/(?:maps\/)?(?:place\/)?(?:[a-z0-9\/%+\-_]*)?([a-z0-9\/%,+\-_=!:@\.&*\$#?\']*)/i) ) {
53 var iframeSrc = this.decodeHTMLEntities(url);
54 /google\.com(?:.+)?(document|presentation|spreadsheets|forms|drawings)/i;
55 if(url.match('~(maps/embed|output=embed)~i')) {
56 //do something
57 }
58 else {
59 var regEx = /@(-?[0-9\.]+,-?[0-9\.]+).+,([0-9\.]+[a-z])/i;
60 var match = regEx.exec(iframeSrc);
61 if(match && match.length > 1 && match[1] && match[2]) {
62 iframeSrc = 'http://maps.google.com/maps?hl=en&ie=UTF8&ll=' + match[1] + '&spn=' + match[1] + '&t=m&z=' + Math.round(parseInt(match[2])) + '&output=embed';
63 }
64 else {
65 this.setState({
66 cannotEmbed: true,
67 editingURL: true
68 })
69 }
70
71 }
72 this.setState( { editingURL: false, cannotEmbed: false } );
73 setAttributes( {iframeSrc: iframeSrc })
74 }
75 else {
76 this.setState({
77 cannotEmbed: true,
78 editingURL: true
79 })
80 }
81 }
82
83 switchBackToURLInput() {
84 this.setState( { editingURL: true } );
85 }
86
87 render() {
88 const { url, editingURL, fetching, cannotEmbed } = this.state;
89 const { iframeSrc } = this.props.attributes;
90
91 const label = __( 'Google Maps URL');
92
93 // No preview, or we can't embed the current URL, or we've clicked the edit button.
94 if ( !iframeSrc || editingURL ) {
95 return (
96 <EmbedPlaceholder
97 label={ label }
98 onSubmit={ this.setUrl }
99 value={ url }
100 cannotEmbed={ cannotEmbed }
101 onChange={ ( event ) => this.setState( { url: event.target.value } ) }
102 />
103 );
104 }
105 else {
106
107 return (
108 <Fragment>
109 {fetching ? <EmbedLoading /> : null}
110 <Iframe src={iframeSrc} onLoad={this.onLoad} style={{ display: fetching ? 'none' : '' }} frameborder="0" width="600" height="450" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" />
111 <EmbedControls
112 showEditButton={ iframeSrc && ! cannotEmbed }
113 switchBackToURLInput={ this.switchBackToURLInput }
114 />
115 </Fragment>
116
117 )
118 }
119 }
120 };
121 export default GoogleSlidesEdit;
122