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