Browse Source

Move ComponentMap to TS

ts-components
Artur Arseniev 4 years ago
parent
commit
2f1b5c8379
  1. 51
      src/dom_components/model/ComponentMap.ts

51
src/dom_components/model/ComponentMap.js → src/dom_components/model/ComponentMap.ts

@ -1,20 +1,25 @@
import ComponentImage from './ComponentImage'; import ComponentImage from './ComponentImage';
import { toLowerCase } from 'utils/mixins'; import { toLowerCase } from '../../utils/mixins';
export default class ComponentMap extends ComponentImage { export default class ComponentMap extends ComponentImage {
// @ts-ignore
get defaults() { get defaults() {
// @ts-ignore
const defs = super.defaults;
return { return {
...super.defaults, ...defs,
type: 'map', type: 'map',
src: '', src: '',
void: 0, void: false,
mapUrl: 'https://maps.google.com/maps', mapUrl: 'https://maps.google.com/maps',
tagName: 'iframe', tagName: 'iframe',
mapType: 'q', mapType: 'q',
address: '', address: '',
zoom: '1', zoom: '1',
attributes: { frameborder: 0 }, attributes: { frameborder: 0 },
toolbar: super.defaults.toolbar, // @ts-ignore
toolbar: defs.toolbar,
traits: [ traits: [
{ {
label: 'Address', label: 'Address',
@ -44,10 +49,10 @@ export default class ComponentMap extends ComponentImage {
}; };
} }
initialize(o, opt) { initialize(props: any, opts: any) {
if (this.get('src')) this.parseFromSrc(); if (this.get('src')) this.parseFromSrc();
else this.updateSrc(); else this.updateSrc();
ComponentImage.prototype.initialize.apply(this, arguments); super.initialize(props, opts);
this.listenTo(this, 'change:address change:zoom change:mapType', this.updateSrc); this.listenTo(this, 'change:address change:zoom change:mapType', this.updateSrc);
} }
@ -61,15 +66,13 @@ export default class ComponentMap extends ComponentImage {
* @private * @private
*/ */
getMapUrl() { getMapUrl() {
var md = this; let addr = this.get('address');
var addr = md.get('address'); let zoom = this.get('zoom');
var zoom = md.get('zoom'); let type = this.get('mapType');
var type = md.get('mapType');
var size = '';
addr = addr ? '&q=' + addr : ''; addr = addr ? '&q=' + addr : '';
zoom = zoom ? '&z=' + zoom : ''; zoom = zoom ? '&z=' + zoom : '';
type = type ? '&t=' + type : ''; type = type ? '&t=' + type : '';
var result = md.get('mapUrl') + '?' + addr + zoom + type; let result = this.get('mapUrl') + '?' + addr + zoom + type;
result += '&output=embed'; result += '&output=embed';
return result; return result;
} }
@ -79,26 +82,16 @@ export default class ComponentMap extends ComponentImage {
* @private * @private
*/ */
parseFromSrc() { parseFromSrc() {
var uri = this.parseUri(this.get('src')); const uri = this.parseUri(this.get('src'));
var qr = uri.query; const qr = uri.query;
if (qr.q) this.set('address', qr.q); if (qr.q) this.set('address', qr.q);
if (qr.z) this.set('zoom', qr.z); if (qr.z) this.set('zoom', qr.z);
if (qr.t) this.set('mapType', qr.t); if (qr.t) this.set('mapType', qr.t);
} }
}
/** static isComponent(el: HTMLIFrameElement) {
* Detect if the passed element is a valid component. if (toLowerCase(el.tagName) == 'iframe' && /maps\.google\.com/.test(el.src)) {
* In case the element is valid an object abstracted return { type: 'map', src: el.src };
* from the element will be returned }
* @param {HTMLElement}
* @return {Object}
* @private
*/
ComponentMap.isComponent = el => {
var result = '';
if (toLowerCase(el.tagName) == 'iframe' && /maps\.google\.com/.test(el.src)) {
result = { type: 'map', src: el.src };
} }
return result; }
};
Loading…
Cancel
Save