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-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
130 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 {googleMapsIcon} from '../common/icons'
15
16 const {Disabled} = wp.components;
17
18 class GoogleMapsEdit extends Component {
19 constructor() {
20 super(...arguments);
21 this.switchBackToURLInput = this.switchBackToURLInput.bind(this);
22 this.setUrl = this.setUrl.bind(this);
23 this.onLoad = this.onLoad.bind(this);
24 this.state = {
25 editingURL: false,
26 url: this.props.attributes.url,
27 fetching: true,
28 cannotEmbed: false
29 };
30 }
31
32 onLoad() {
33 this.setState({
34 fetching: false
35 })
36 }
37
38 decodeHTMLEntities(str) {
39 if (str && typeof str === 'string') {
40 // strip script/html tags
41 str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
42 str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
43
44 }
45 return str;
46 }
47
48
49 setUrl(event) {
50 if (event) {
51 event.preventDefault();
52 }
53 const {url} = this.state;
54 const {setAttributes} = this.props;
55 setAttributes({url});
56 if (url && url.match(/^http[s]?:\/\/(?:(?:(?:www\.|maps\.)?(?:google\.com?))|(?:goo\.gl))(?:\.[a-z]{2})?\/(?:maps\/)?(?:place\/)?(?:[a-z0-9\/%+\-_]*)?([a-z0-9\/%,+\-_=!:@\.&*\$#?\']*)/i)) {
57 var iframeSrc = this.decodeHTMLEntities(url);
58 /google\.com(?:.+)?(document|presentation|spreadsheets|forms|drawings)/i;
59 if (url.match('~(maps/embed|output=embed)~i')) {
60 //do something
61 } else {
62 var regEx = /@(-?[0-9\.]+,-?[0-9\.]+).+,([0-9\.]+[a-z])/i;
63 var match = regEx.exec(iframeSrc);
64 if (match && match.length > 1 && match[1] && match[2]) {
65 iframeSrc = 'https://maps.google.com/maps?hl=en&ie=UTF8&ll=' + match[1] + '&spn=' + match[1] + '&t=m&z=' + Math.round(parseInt(match[2])) + '&output=embed';
66 } else {
67 this.setState({
68 cannotEmbed: true,
69 editingURL: true
70 })
71 }
72
73 }
74 this.setState({editingURL: false, cannotEmbed: false});
75 setAttributes({iframeSrc: iframeSrc})
76 } else {
77 this.setState({
78 cannotEmbed: true,
79 editingURL: true
80 })
81 }
82 }
83
84 switchBackToURLInput() {
85 this.setState({editingURL: true});
86 }
87
88 render() {
89 const {url, editingURL, fetching, cannotEmbed} = this.state;
90 const {iframeSrc} = this.props.attributes;
91
92 const label = __('Google Maps URL');
93
94 // No preview, or we can't embed the current URL, or we've clicked the edit button.
95 if (!iframeSrc || editingURL) {
96 return (
97 <EmbedPlaceholder
98 label={label}
99 onSubmit={this.setUrl}
100 value={url}
101 cannotEmbed={cannotEmbed}
102 onChange={(event) => this.setState({url: event.target.value})}
103 icon={googleMapsIcon}
104 DocTitle={__('Learn more about Google map')}
105 docLink={'https://embedpress.com/docs/embed-google-maps-wordpress/'}
106 />
107 );
108 } else {
109
110 return (
111 <Fragment>
112 {fetching ? <EmbedLoading/> : null}
113 <Disabled>
114 <Iframe src={iframeSrc} onLoad={this.onLoad} style={{display: fetching ? 'none' : ''}}
115 frameborder="0" width="600" height="450" allowfullscreen="true"
116 mozallowfullscreen="true" webkitallowfullscreen="true"/>
117 </Disabled>
118
119 <EmbedControls
120 showEditButton={iframeSrc && !cannotEmbed}
121 switchBackToURLInput={this.switchBackToURLInput}
122 />
123 </Fragment>
124
125 )
126 }
127 }
128 };
129 export default GoogleMapsEdit;
130