Socket
Socket
Sign inDemoInstall

@react-google-maps/infobox

Package Overview
Dependencies
Maintainers
2
Versions
46
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@react-google-maps/infobox - npm Package Compare versions

Comparing version 2.3.0 to 2.3.1

29

dist/index.d.ts

@@ -1,2 +0,1 @@

/// <reference types="googlemaps" />
interface InfoBoxOptions {

@@ -22,2 +21,3 @@ alignBottom?: boolean;

}
declare class InfoBox {

@@ -78,28 +78,3 @@ content: string | Node;

}
/**
* @name InfoBox
* @version 1.1.13 [March 19, 2014]
* @author Gary Little (inspired by proof-of-concept code from Pamela Fox of Google)
* @copyright Copyright 2010 Gary Little [gary at luxcentral.com]
* @fileoverview InfoBox extends the Google Maps JavaScript API V3 <tt>OverlayView</tt> class.
* <p>
* An InfoBox behaves like a <tt>google.maps.InfoWindow</tt>, but it supports several
* additional properties for advanced styling. An InfoBox can also be used as a map label.
* <p>
* An InfoBox also fires the same events as a <tt>google.maps.InfoWindow</tt>.
*/
/*!
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export { InfoBox, InfoBoxOptions };

1148

dist/umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.infoBox = {}));
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.infoBox = {}));
}(this, (function (exports) { 'use strict';
var InfoBox = /** @class */ (function () {
function InfoBox(options) {
if (options === void 0) { options = {}; }
this.extend(InfoBox, google.maps.OverlayView);
// Standard options (in common with google.maps.InfoWindow):
this.content = options.content || '';
this.disableAutoPan = options.disableAutoPan || false;
this.maxWidth = options.maxWidth || 0;
this.pixelOffset = options.pixelOffset || new google.maps.Size(0, 0);
this.position = options.position || new google.maps.LatLng(0, 0);
this.zIndex = options.zIndex || null;
// Additional options (unique to InfoBox):
this.boxClass = options.boxClass || 'infoBox';
this.boxStyle = options.boxStyle || {};
this.closeBoxMargin = options.closeBoxMargin || '2px';
this.closeBoxURL = options.closeBoxURL || 'http://www.google.com/intl/en_us/mapfiles/close.gif';
if (options.closeBoxURL === '') {
this.closeBoxURL = '';
}
this.infoBoxClearance = options.infoBoxClearance || new google.maps.Size(1, 1);
if (typeof options.visible === 'undefined') {
if (typeof options.isHidden === 'undefined') {
options.visible = true;
}
else {
options.visible = !options.isHidden;
}
}
this.isHidden = !options.visible;
this.alignBottom = options.alignBottom || false;
this.pane = options.pane || 'floatPane';
this.enableEventPropagation = options.enableEventPropagation || false;
this.div = null;
this.closeListener = null;
this.moveListener = null;
this.mapListener = null;
this.contextListener = null;
this.eventListeners = null;
this.fixedWidthSet = null;
}
InfoBox.prototype.createInfoBoxDiv = function () {
var _this = this;
// This handler prevents an event in the InfoBox from being passed on to the map.
function cancelHandler(event) {
event.cancelBubble = true;
if (event.stopPropagation) {
event.stopPropagation();
}
}
// This handler ignores the current event in the InfoBox and conditionally prevents
// the event from being passed on to the map. It is used for the contextmenu event.
// eslint-disable-next-line @getify/proper-arrows/this
var ignoreHandler = function (event) {
event.returnValue = false;
if (event.preventDefault) {
event.preventDefault();
}
if (!_this.enableEventPropagation) {
cancelHandler(event);
}
};
if (!this.div) {
this.div = document.createElement('div');
this.setBoxStyle();
if (typeof this.content === 'string') {
this.div.innerHTML = this.getCloseBoxImg() + this.content;
}
else {
this.div.innerHTML = this.getCloseBoxImg();
this.div.appendChild(this.content);
}
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var panes = this.getPanes();
panes[this.pane].appendChild(this.div); // Add the InfoBox div to the DOM
this.addClickHandler();
if (this.div.style.width) {
this.fixedWidthSet = true;
}
else {
if (this.maxWidth !== 0 && this.div.offsetWidth > this.maxWidth) {
this.div.style.width = this.maxWidth + 'px';
this.fixedWidthSet = true;
}
else {
// The following code is needed to overcome problems with MSIE
var bw = this.getBoxWidths();
this.div.style.width = this.div.offsetWidth - bw.left - bw.right + 'px';
this.fixedWidthSet = false;
}
}
this.panBox(this.disableAutoPan);
if (!this.enableEventPropagation) {
this.eventListeners = [];
// Cancel event propagation.
// Note: mousemove not included (to resolve Issue 152)
var events = [
'mousedown',
'mouseover',
'mouseout',
'mouseup',
'click',
'dblclick',
'touchstart',
'touchend',
'touchmove',
];
for (var i = 0; i < events.length; i++) {
this.eventListeners.push(google.maps.event.addDomListener(this.div, events[i], cancelHandler));
}
// Workaround for Google bug that causes the cursor to change to a pointer
// when the mouse moves over a marker underneath InfoBox.
this.eventListeners.push(google.maps.event.addDomListener(this.div, 'mouseover',
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
function () {
if (_this.div) {
_this.div.style.cursor = 'default';
}
}));
}
this.contextListener = google.maps.event.addDomListener(this.div, 'contextmenu', ignoreHandler);
/**
* This event is fired when the DIV containing the InfoBox's content is attached to the DOM.
* @name InfoBox#domready
* @event
*/
google.maps.event.trigger(this, 'domready');
}
};
InfoBox.prototype.getCloseBoxImg = function () {
var img = '';
if (this.closeBoxURL !== '') {
img = '<img alt=""';
img += ' aria-hidden="true"';
img += " src='" + this.closeBoxURL + "'";
img += ' align=right'; // Do this because Opera chokes on style='float: right;'
img += " style='";
img += ' position: relative;'; // Required by MSIE
img += ' cursor: pointer;';
img += ' margin: ' + this.closeBoxMargin + ';';
img += "'>";
}
return img;
};
InfoBox.prototype.addClickHandler = function () {
if (this.div && this.div.firstChild && this.closeBoxURL !== '') {
var closeBox = this.div.firstChild;
this.closeListener = google.maps.event.addDomListener(closeBox, 'click', this.getCloseClickHandler());
}
else {
this.closeListener = null;
}
};
InfoBox.prototype.getCloseClickHandler = function () {
var _this = this;
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
return function (event) {
// 1.0.3 fix: Always prevent propagation of a close box click to the map:
event.cancelBubble = true;
if (event.stopPropagation) {
event.stopPropagation();
}
/**
* This event is fired when the InfoBox's close box is clicked.
* @name InfoBox#closeclick
* @event
*/
google.maps.event.trigger(_this, 'closeclick');
_this.close();
};
};
InfoBox.prototype.panBox = function (disablePan) {
if (this.div && !disablePan) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var map = this.getMap();
// Only pan if attached to map, not panorama
if (map instanceof google.maps.Map) {
var xOffset = 0;
var yOffset = 0;
var bounds = map.getBounds();
if (bounds && !bounds.contains(this.position)) {
// Marker not in visible area of map, so set center
// of map to the marker position first.
map.setCenter(this.position);
}
var mapDiv = map.getDiv();
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var mapWidth = mapDiv.offsetWidth;
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var mapHeight = mapDiv.offsetHeight;
var iwOffsetX = this.pixelOffset.width;
var iwOffsetY = this.pixelOffset.height;
var iwWidth = this.div.offsetWidth;
var iwHeight = this.div.offsetHeight;
var padX = this.infoBoxClearance.width;
var padY = this.infoBoxClearance.height;
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var projection = this.getProjection();
var pixPosition = projection.fromLatLngToContainerPixel(this.position);
if (pixPosition.x < -iwOffsetX + padX) {
xOffset = pixPosition.x + iwOffsetX - padX;
}
else if (pixPosition.x + iwWidth + iwOffsetX + padX > mapWidth) {
xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;
}
if (this.alignBottom) {
if (pixPosition.y < -iwOffsetY + padY + iwHeight) {
yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;
}
else if (pixPosition.y + iwOffsetY + padY > mapHeight) {
yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;
}
}
else {
if (pixPosition.y < -iwOffsetY + padY) {
yOffset = pixPosition.y + iwOffsetY - padY;
}
else if (pixPosition.y + iwHeight + iwOffsetY + padY > mapHeight) {
yOffset = pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;
}
}
if (!(xOffset === 0 && yOffset === 0)) {
// Move the map to the shifted center.
map.panBy(xOffset, yOffset);
}
}
}
};
InfoBox.prototype.setBoxStyle = function () {
if (this.div) {
// Apply style values from the style sheet defined in the boxClass parameter:
this.div.className = this.boxClass;
// Clear existing inline style values:
this.div.style.cssText = '';
// Apply style values defined in the boxStyle parameter:
var boxStyle = this.boxStyle;
for (var i in boxStyle) {
if (boxStyle.hasOwnProperty(i)) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.div.style[i] = boxStyle[i];
}
}
// Fix for iOS disappearing InfoBox problem
// See http://stackoverflow.com/questions/9229535/google-maps-markers-disappear-at-certain-zoom-level-only-on-iphone-ipad
this.div.style.webkitTransform = 'translateZ(0)';
// Fix up opacity style for benefit of MSIE
if (typeof this.div.style.opacity !== 'undefined' && this.div.style.opacity !== '') {
// See http://www.quirksmode.org/css/opacity.html
var opacity = parseFloat(this.div.style.opacity || '');
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.div.style.msFilter =
'"progid:DXImageTransform.Microsoft.Alpha(Opacity=' + opacity * 100 + ')"';
this.div.style.filter = 'alpha(opacity=' + opacity * 100 + ')';
}
// Apply required styles
this.div.style.position = 'absolute';
this.div.style.visibility = 'hidden';
if (this.zIndex !== null) {
this.div.style.zIndex = this.zIndex + '';
}
if (!this.div.style.overflow) {
this.div.style.overflow = 'auto';
}
}
};
InfoBox.prototype.getBoxWidths = function () {
var bw = { top: 0, bottom: 0, left: 0, right: 0 };
if (!this.div) {
return bw;
}
if (document.defaultView && document.defaultView.getComputedStyle) {
var ownerDocument = this.div.ownerDocument;
var computedStyle = ownerDocument && ownerDocument.defaultView
? ownerDocument.defaultView.getComputedStyle(this.div, '')
: null;
if (computedStyle) {
// The computed styles are always in pixel units (good!)
bw.top = parseInt(computedStyle.borderTopWidth || '', 10) || 0;
bw.bottom = parseInt(computedStyle.borderBottomWidth || '', 10) || 0;
bw.left = parseInt(computedStyle.borderLeftWidth || '', 10) || 0;
bw.right = parseInt(computedStyle.borderRightWidth || '', 10) || 0;
}
}
else if (
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
document.documentElement.currentStyle // MSIE
) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var currentStyle = this.div.currentStyle;
if (currentStyle) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// The current styles may not be in pixel units, but assume they are (bad!)
bw.top = parseInt(currentStyle.borderTopWidth || '', 10) || 0;
bw.bottom = parseInt(currentStyle.borderBottomWidth || '', 10) || 0;
bw.left = parseInt(currentStyle.borderLeftWidth || '', 10) || 0;
bw.right = parseInt(currentStyle.borderRightWidth || '', 10) || 0;
}
}
return bw;
};
InfoBox.prototype.onRemove = function () {
if (this.div && this.div.parentNode) {
this.div.parentNode.removeChild(this.div);
this.div = null;
}
};
InfoBox.prototype.draw = function () {
this.createInfoBoxDiv();
if (this.div) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var projection = this.getProjection();
var pixPosition = projection.fromLatLngToDivPixel(this.position);
this.div.style.left = pixPosition.x + this.pixelOffset.width + 'px';
if (this.alignBottom) {
this.div.style.bottom = -(pixPosition.y + this.pixelOffset.height) + 'px';
}
else {
this.div.style.top = pixPosition.y + this.pixelOffset.height + 'px';
}
if (this.isHidden) {
this.div.style.visibility = 'hidden';
}
else {
this.div.style.visibility = 'visible';
}
}
};
InfoBox.prototype.setOptions = function (options) {
if (options === void 0) { options = {}; }
if (typeof options.boxClass !== 'undefined') {
// Must be first
this.boxClass = options.boxClass;
this.setBoxStyle();
}
if (typeof options.boxStyle !== 'undefined') {
// Must be second
this.boxStyle = options.boxStyle;
this.setBoxStyle();
}
if (typeof options.content !== 'undefined') {
this.setContent(options.content);
}
if (typeof options.disableAutoPan !== 'undefined') {
this.disableAutoPan = options.disableAutoPan;
}
if (typeof options.maxWidth !== 'undefined') {
this.maxWidth = options.maxWidth;
}
if (typeof options.pixelOffset !== 'undefined') {
this.pixelOffset = options.pixelOffset;
}
if (typeof options.alignBottom !== 'undefined') {
this.alignBottom = options.alignBottom;
}
if (typeof options.position !== 'undefined') {
this.setPosition(options.position);
}
if (typeof options.zIndex !== 'undefined') {
this.setZIndex(options.zIndex);
}
if (typeof options.closeBoxMargin !== 'undefined') {
this.closeBoxMargin = options.closeBoxMargin;
}
if (typeof options.closeBoxURL !== 'undefined') {
this.closeBoxURL = options.closeBoxURL;
}
if (typeof options.infoBoxClearance !== 'undefined') {
this.infoBoxClearance = options.infoBoxClearance;
}
if (typeof options.isHidden !== 'undefined') {
this.isHidden = options.isHidden;
}
if (typeof options.visible !== 'undefined') {
this.isHidden = !options.visible;
}
if (typeof options.enableEventPropagation !== 'undefined') {
this.enableEventPropagation = options.enableEventPropagation;
}
if (this.div) {
this.draw();
}
};
InfoBox.prototype.setContent = function (content) {
this.content = content;
if (this.div) {
if (this.closeListener) {
google.maps.event.removeListener(this.closeListener);
this.closeListener = null;
}
// Odd code required to make things work with MSIE.
if (!this.fixedWidthSet) {
this.div.style.width = '';
}
if (typeof content === 'string') {
this.div.innerHTML = this.getCloseBoxImg() + content;
}
else {
this.div.innerHTML = this.getCloseBoxImg();
this.div.appendChild(content);
}
// Perverse code required to make things work with MSIE.
// (Ensures the close box does, in fact, float to the right.)
if (!this.fixedWidthSet) {
this.div.style.width = this.div.offsetWidth + 'px';
if (typeof content === 'string') {
this.div.innerHTML = this.getCloseBoxImg() + content;
}
else {
this.div.innerHTML = this.getCloseBoxImg();
this.div.appendChild(content);
}
}
this.addClickHandler();
}
/**
* This event is fired when the content of the InfoBox changes.
* @name InfoBox#content_changed
* @event
*/
google.maps.event.trigger(this, 'content_changed');
};
InfoBox.prototype.setPosition = function (latLng) {
this.position = latLng;
if (this.div) {
this.draw();
}
/**
* This event is fired when the position of the InfoBox changes.
* @name InfoBox#position_changed
* @event
*/
google.maps.event.trigger(this, 'position_changed');
};
InfoBox.prototype.setVisible = function (isVisible) {
this.isHidden = !isVisible;
if (this.div) {
this.div.style.visibility = this.isHidden ? 'hidden' : 'visible';
}
};
InfoBox.prototype.setZIndex = function (index) {
this.zIndex = index;
if (this.div) {
this.div.style.zIndex = index + '';
}
/**
* This event is fired when the zIndex of the InfoBox changes.
* @name InfoBox#zindex_changed
* @event
*/
google.maps.event.trigger(this, 'zindex_changed');
};
InfoBox.prototype.getContent = function () {
return this.content;
};
InfoBox.prototype.getPosition = function () {
return this.position;
};
InfoBox.prototype.getZIndex = function () {
return this.zIndex;
};
InfoBox.prototype.getVisible = function () {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var map = this.getMap();
var isVisible;
if (typeof map === 'undefined' || map === null) {
isVisible = false;
}
else {
isVisible = !this.isHidden;
}
return isVisible;
};
InfoBox.prototype.show = function () {
this.isHidden = false;
if (this.div) {
this.div.style.visibility = 'visible';
}
};
InfoBox.prototype.hide = function () {
this.isHidden = true;
if (this.div) {
this.div.style.visibility = 'hidden';
}
};
InfoBox.prototype.open = function (map, anchor) {
var _this = this;
if (anchor) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.position = anchor.getPosition();
this.moveListener = google.maps.event.addListener(anchor, 'position_changed',
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
function () {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var position = anchor.getPosition();
_this.setPosition(position);
});
this.mapListener = google.maps.event.addListener(anchor, 'map_changed',
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
function () {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
_this.setMap(anchor.map);
});
}
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.setMap(map);
if (this.div) {
this.panBox();
}
};
InfoBox.prototype.close = function () {
if (this.closeListener) {
google.maps.event.removeListener(this.closeListener);
this.closeListener = null;
}
if (this.eventListeners) {
for (var i = 0; i < this.eventListeners.length; i++) {
google.maps.event.removeListener(this.eventListeners[i]);
}
this.eventListeners = null;
}
if (this.moveListener) {
google.maps.event.removeListener(this.moveListener);
this.moveListener = null;
}
if (this.mapListener) {
google.maps.event.removeListener(this.mapListener);
this.mapListener = null;
}
if (this.contextListener) {
google.maps.event.removeListener(this.contextListener);
this.contextListener = null;
}
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.setMap(null);
};
InfoBox.prototype.extend = function (obj1, obj2) {
return function applyExtend(object) {
// eslint-disable-next-line guard-for-in
for (var property in object.prototype) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
if (!this.prototype.hasOwnProperty(property)) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.prototype[property] = object.prototype[property];
}
}
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
return this;
}.apply(obj1, [obj2]);
};
return InfoBox;
}());
var InfoBox = /** @class */ (function () {
function InfoBox(options) {
if (options === void 0) { options = {}; }
this.extend(InfoBox, google.maps.OverlayView);
// Standard options (in common with google.maps.InfoWindow):
this.content = options.content || '';
this.disableAutoPan = options.disableAutoPan || false;
this.maxWidth = options.maxWidth || 0;
this.pixelOffset = options.pixelOffset || new google.maps.Size(0, 0);
this.position = options.position || new google.maps.LatLng(0, 0);
this.zIndex = options.zIndex || null;
// Additional options (unique to InfoBox):
this.boxClass = options.boxClass || 'infoBox';
this.boxStyle = options.boxStyle || {};
this.closeBoxMargin = options.closeBoxMargin || '2px';
this.closeBoxURL = options.closeBoxURL || 'http://www.google.com/intl/en_us/mapfiles/close.gif';
if (options.closeBoxURL === '') {
this.closeBoxURL = '';
}
this.infoBoxClearance = options.infoBoxClearance || new google.maps.Size(1, 1);
if (typeof options.visible === 'undefined') {
if (typeof options.isHidden === 'undefined') {
options.visible = true;
}
else {
options.visible = !options.isHidden;
}
}
this.isHidden = !options.visible;
this.alignBottom = options.alignBottom || false;
this.pane = options.pane || 'floatPane';
this.enableEventPropagation = options.enableEventPropagation || false;
this.div = null;
this.closeListener = null;
this.moveListener = null;
this.mapListener = null;
this.contextListener = null;
this.eventListeners = null;
this.fixedWidthSet = null;
}
InfoBox.prototype.createInfoBoxDiv = function () {
var _this = this;
// This handler prevents an event in the InfoBox from being passed on to the map.
function cancelHandler(event) {
event.cancelBubble = true;
if (event.stopPropagation) {
event.stopPropagation();
}
}
// This handler ignores the current event in the InfoBox and conditionally prevents
// the event from being passed on to the map. It is used for the contextmenu event.
// eslint-disable-next-line @getify/proper-arrows/this
var ignoreHandler = function (event) {
event.returnValue = false;
if (event.preventDefault) {
event.preventDefault();
}
if (!_this.enableEventPropagation) {
cancelHandler(event);
}
};
if (!this.div) {
this.div = document.createElement('div');
this.setBoxStyle();
if (typeof this.content === 'string') {
this.div.innerHTML = this.getCloseBoxImg() + this.content;
}
else {
this.div.innerHTML = this.getCloseBoxImg();
this.div.appendChild(this.content);
}
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var panes = this.getPanes();
panes[this.pane].appendChild(this.div); // Add the InfoBox div to the DOM
this.addClickHandler();
if (this.div.style.width) {
this.fixedWidthSet = true;
}
else {
if (this.maxWidth !== 0 && this.div.offsetWidth > this.maxWidth) {
this.div.style.width = this.maxWidth + 'px';
this.fixedWidthSet = true;
}
else {
// The following code is needed to overcome problems with MSIE
var bw = this.getBoxWidths();
this.div.style.width = this.div.offsetWidth - bw.left - bw.right + 'px';
this.fixedWidthSet = false;
}
}
this.panBox(this.disableAutoPan);
if (!this.enableEventPropagation) {
this.eventListeners = [];
// Cancel event propagation.
// Note: mousemove not included (to resolve Issue 152)
var events = [
'mousedown',
'mouseover',
'mouseout',
'mouseup',
'click',
'dblclick',
'touchstart',
'touchend',
'touchmove',
];
for (var i = 0; i < events.length; i++) {
this.eventListeners.push(google.maps.event.addDomListener(this.div, events[i], cancelHandler));
}
// Workaround for Google bug that causes the cursor to change to a pointer
// when the mouse moves over a marker underneath InfoBox.
this.eventListeners.push(google.maps.event.addDomListener(this.div, 'mouseover',
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
function () {
if (_this.div) {
_this.div.style.cursor = 'default';
}
}));
}
this.contextListener = google.maps.event.addDomListener(this.div, 'contextmenu', ignoreHandler);
/**
* This event is fired when the DIV containing the InfoBox's content is attached to the DOM.
* @name InfoBox#domready
* @event
*/
google.maps.event.trigger(this, 'domready');
}
};
InfoBox.prototype.getCloseBoxImg = function () {
var img = '';
if (this.closeBoxURL !== '') {
img = '<img alt=""';
img += ' aria-hidden="true"';
img += " src='" + this.closeBoxURL + "'";
img += ' align=right'; // Do this because Opera chokes on style='float: right;'
img += " style='";
img += ' position: relative;'; // Required by MSIE
img += ' cursor: pointer;';
img += ' margin: ' + this.closeBoxMargin + ';';
img += "'>";
}
return img;
};
InfoBox.prototype.addClickHandler = function () {
if (this.div && this.div.firstChild && this.closeBoxURL !== '') {
var closeBox = this.div.firstChild;
this.closeListener = google.maps.event.addDomListener(closeBox, 'click', this.getCloseClickHandler());
}
else {
this.closeListener = null;
}
};
InfoBox.prototype.getCloseClickHandler = function () {
var _this = this;
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
return function (event) {
// 1.0.3 fix: Always prevent propagation of a close box click to the map:
event.cancelBubble = true;
if (event.stopPropagation) {
event.stopPropagation();
}
/**
* This event is fired when the InfoBox's close box is clicked.
* @name InfoBox#closeclick
* @event
*/
google.maps.event.trigger(_this, 'closeclick');
_this.close();
};
};
InfoBox.prototype.panBox = function (disablePan) {
if (this.div && !disablePan) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var map = this.getMap();
// Only pan if attached to map, not panorama
if (map instanceof google.maps.Map) {
var xOffset = 0;
var yOffset = 0;
var bounds = map.getBounds();
if (bounds && !bounds.contains(this.position)) {
// Marker not in visible area of map, so set center
// of map to the marker position first.
map.setCenter(this.position);
}
var mapDiv = map.getDiv();
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var mapWidth = mapDiv.offsetWidth;
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var mapHeight = mapDiv.offsetHeight;
var iwOffsetX = this.pixelOffset.width;
var iwOffsetY = this.pixelOffset.height;
var iwWidth = this.div.offsetWidth;
var iwHeight = this.div.offsetHeight;
var padX = this.infoBoxClearance.width;
var padY = this.infoBoxClearance.height;
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var projection = this.getProjection();
var pixPosition = projection.fromLatLngToContainerPixel(this.position);
if (pixPosition.x < -iwOffsetX + padX) {
xOffset = pixPosition.x + iwOffsetX - padX;
}
else if (pixPosition.x + iwWidth + iwOffsetX + padX > mapWidth) {
xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;
}
if (this.alignBottom) {
if (pixPosition.y < -iwOffsetY + padY + iwHeight) {
yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;
}
else if (pixPosition.y + iwOffsetY + padY > mapHeight) {
yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;
}
}
else {
if (pixPosition.y < -iwOffsetY + padY) {
yOffset = pixPosition.y + iwOffsetY - padY;
}
else if (pixPosition.y + iwHeight + iwOffsetY + padY > mapHeight) {
yOffset = pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;
}
}
if (!(xOffset === 0 && yOffset === 0)) {
// Move the map to the shifted center.
map.panBy(xOffset, yOffset);
}
}
}
};
InfoBox.prototype.setBoxStyle = function () {
if (this.div) {
// Apply style values from the style sheet defined in the boxClass parameter:
this.div.className = this.boxClass;
// Clear existing inline style values:
this.div.style.cssText = '';
// Apply style values defined in the boxStyle parameter:
var boxStyle = this.boxStyle;
for (var i in boxStyle) {
if (boxStyle.hasOwnProperty(i)) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.div.style[i] = boxStyle[i];
}
}
// Fix for iOS disappearing InfoBox problem
// See http://stackoverflow.com/questions/9229535/google-maps-markers-disappear-at-certain-zoom-level-only-on-iphone-ipad
this.div.style.webkitTransform = 'translateZ(0)';
// Fix up opacity style for benefit of MSIE
if (typeof this.div.style.opacity !== 'undefined' && this.div.style.opacity !== '') {
// See http://www.quirksmode.org/css/opacity.html
var opacity = parseFloat(this.div.style.opacity || '');
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.div.style.msFilter =
'"progid:DXImageTransform.Microsoft.Alpha(Opacity=' + opacity * 100 + ')"';
this.div.style.filter = 'alpha(opacity=' + opacity * 100 + ')';
}
// Apply required styles
this.div.style.position = 'absolute';
this.div.style.visibility = 'hidden';
if (this.zIndex !== null) {
this.div.style.zIndex = this.zIndex + '';
}
if (!this.div.style.overflow) {
this.div.style.overflow = 'auto';
}
}
};
InfoBox.prototype.getBoxWidths = function () {
var bw = { top: 0, bottom: 0, left: 0, right: 0 };
if (!this.div) {
return bw;
}
if (document.defaultView && document.defaultView.getComputedStyle) {
var ownerDocument = this.div.ownerDocument;
var computedStyle = ownerDocument && ownerDocument.defaultView
? ownerDocument.defaultView.getComputedStyle(this.div, '')
: null;
if (computedStyle) {
// The computed styles are always in pixel units (good!)
bw.top = parseInt(computedStyle.borderTopWidth || '', 10) || 0;
bw.bottom = parseInt(computedStyle.borderBottomWidth || '', 10) || 0;
bw.left = parseInt(computedStyle.borderLeftWidth || '', 10) || 0;
bw.right = parseInt(computedStyle.borderRightWidth || '', 10) || 0;
}
}
else if (
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
document.documentElement.currentStyle // MSIE
) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var currentStyle = this.div.currentStyle;
if (currentStyle) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// The current styles may not be in pixel units, but assume they are (bad!)
bw.top = parseInt(currentStyle.borderTopWidth || '', 10) || 0;
bw.bottom = parseInt(currentStyle.borderBottomWidth || '', 10) || 0;
bw.left = parseInt(currentStyle.borderLeftWidth || '', 10) || 0;
bw.right = parseInt(currentStyle.borderRightWidth || '', 10) || 0;
}
}
return bw;
};
InfoBox.prototype.onRemove = function () {
if (this.div && this.div.parentNode) {
this.div.parentNode.removeChild(this.div);
this.div = null;
}
};
InfoBox.prototype.draw = function () {
this.createInfoBoxDiv();
if (this.div) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var projection = this.getProjection();
var pixPosition = projection.fromLatLngToDivPixel(this.position);
this.div.style.left = pixPosition.x + this.pixelOffset.width + 'px';
if (this.alignBottom) {
this.div.style.bottom = -(pixPosition.y + this.pixelOffset.height) + 'px';
}
else {
this.div.style.top = pixPosition.y + this.pixelOffset.height + 'px';
}
if (this.isHidden) {
this.div.style.visibility = 'hidden';
}
else {
this.div.style.visibility = 'visible';
}
}
};
InfoBox.prototype.setOptions = function (options) {
if (options === void 0) { options = {}; }
if (typeof options.boxClass !== 'undefined') {
// Must be first
this.boxClass = options.boxClass;
this.setBoxStyle();
}
if (typeof options.boxStyle !== 'undefined') {
// Must be second
this.boxStyle = options.boxStyle;
this.setBoxStyle();
}
if (typeof options.content !== 'undefined') {
this.setContent(options.content);
}
if (typeof options.disableAutoPan !== 'undefined') {
this.disableAutoPan = options.disableAutoPan;
}
if (typeof options.maxWidth !== 'undefined') {
this.maxWidth = options.maxWidth;
}
if (typeof options.pixelOffset !== 'undefined') {
this.pixelOffset = options.pixelOffset;
}
if (typeof options.alignBottom !== 'undefined') {
this.alignBottom = options.alignBottom;
}
if (typeof options.position !== 'undefined') {
this.setPosition(options.position);
}
if (typeof options.zIndex !== 'undefined') {
this.setZIndex(options.zIndex);
}
if (typeof options.closeBoxMargin !== 'undefined') {
this.closeBoxMargin = options.closeBoxMargin;
}
if (typeof options.closeBoxURL !== 'undefined') {
this.closeBoxURL = options.closeBoxURL;
}
if (typeof options.infoBoxClearance !== 'undefined') {
this.infoBoxClearance = options.infoBoxClearance;
}
if (typeof options.isHidden !== 'undefined') {
this.isHidden = options.isHidden;
}
if (typeof options.visible !== 'undefined') {
this.isHidden = !options.visible;
}
if (typeof options.enableEventPropagation !== 'undefined') {
this.enableEventPropagation = options.enableEventPropagation;
}
if (this.div) {
this.draw();
}
};
InfoBox.prototype.setContent = function (content) {
this.content = content;
if (this.div) {
if (this.closeListener) {
google.maps.event.removeListener(this.closeListener);
this.closeListener = null;
}
// Odd code required to make things work with MSIE.
if (!this.fixedWidthSet) {
this.div.style.width = '';
}
if (typeof content === 'string') {
this.div.innerHTML = this.getCloseBoxImg() + content;
}
else {
this.div.innerHTML = this.getCloseBoxImg();
this.div.appendChild(content);
}
// Perverse code required to make things work with MSIE.
// (Ensures the close box does, in fact, float to the right.)
if (!this.fixedWidthSet) {
this.div.style.width = this.div.offsetWidth + 'px';
if (typeof content === 'string') {
this.div.innerHTML = this.getCloseBoxImg() + content;
}
else {
this.div.innerHTML = this.getCloseBoxImg();
this.div.appendChild(content);
}
}
this.addClickHandler();
}
/**
* This event is fired when the content of the InfoBox changes.
* @name InfoBox#content_changed
* @event
*/
google.maps.event.trigger(this, 'content_changed');
};
InfoBox.prototype.setPosition = function (latLng) {
this.position = latLng;
if (this.div) {
this.draw();
}
/**
* This event is fired when the position of the InfoBox changes.
* @name InfoBox#position_changed
* @event
*/
google.maps.event.trigger(this, 'position_changed');
};
InfoBox.prototype.setVisible = function (isVisible) {
this.isHidden = !isVisible;
if (this.div) {
this.div.style.visibility = this.isHidden ? 'hidden' : 'visible';
}
};
InfoBox.prototype.setZIndex = function (index) {
this.zIndex = index;
if (this.div) {
this.div.style.zIndex = index + '';
}
/**
* This event is fired when the zIndex of the InfoBox changes.
* @name InfoBox#zindex_changed
* @event
*/
google.maps.event.trigger(this, 'zindex_changed');
};
InfoBox.prototype.getContent = function () {
return this.content;
};
InfoBox.prototype.getPosition = function () {
return this.position;
};
InfoBox.prototype.getZIndex = function () {
return this.zIndex;
};
InfoBox.prototype.getVisible = function () {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var map = this.getMap();
var isVisible;
if (typeof map === 'undefined' || map === null) {
isVisible = false;
}
else {
isVisible = !this.isHidden;
}
return isVisible;
};
InfoBox.prototype.show = function () {
this.isHidden = false;
if (this.div) {
this.div.style.visibility = 'visible';
}
};
InfoBox.prototype.hide = function () {
this.isHidden = true;
if (this.div) {
this.div.style.visibility = 'hidden';
}
};
InfoBox.prototype.open = function (map, anchor) {
var _this = this;
if (anchor) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.position = anchor.getPosition();
this.moveListener = google.maps.event.addListener(anchor, 'position_changed',
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
function () {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
var position = anchor.getPosition();
_this.setPosition(position);
});
this.mapListener = google.maps.event.addListener(anchor, 'map_changed',
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
function () {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
_this.setMap(anchor.map);
});
}
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.setMap(map);
if (this.div) {
this.panBox();
}
};
InfoBox.prototype.close = function () {
if (this.closeListener) {
google.maps.event.removeListener(this.closeListener);
this.closeListener = null;
}
if (this.eventListeners) {
for (var i = 0; i < this.eventListeners.length; i++) {
google.maps.event.removeListener(this.eventListeners[i]);
}
this.eventListeners = null;
}
if (this.moveListener) {
google.maps.event.removeListener(this.moveListener);
this.moveListener = null;
}
if (this.mapListener) {
google.maps.event.removeListener(this.mapListener);
this.mapListener = null;
}
if (this.contextListener) {
google.maps.event.removeListener(this.contextListener);
this.contextListener = null;
}
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.setMap(null);
};
InfoBox.prototype.extend = function (obj1, obj2) {
return function applyExtend(object) {
// eslint-disable-next-line guard-for-in
for (var property in object.prototype) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
if (!this.prototype.hasOwnProperty(property)) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
this.prototype[property] = object.prototype[property];
}
}
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
return this;
}.apply(obj1, [obj2]);
};
return InfoBox;
}());
exports.InfoBox = InfoBox;
exports.InfoBox = InfoBox;
Object.defineProperty(exports, '__esModule', { value: true });
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=umd.js.map
{
"name": "@react-google-maps/infobox",
"sideEffects": false,
"version": "2.3.0",
"version": "2.3.1",
"description": "InfoBox for React.js Google Maps API",

@@ -57,2 +57,3 @@ "license": "MIT",

"@rollup/plugin-node-resolve": "13.0.4",
"@rollup/plugin-typescript": "8.2.5",
"@types/babel-types": "7.0.11",

@@ -91,4 +92,4 @@ "@types/googlemaps": "3.43.3",

"rollup": "2.56.3",
"rollup-plugin-dts": "4.0.0",
"rollup-plugin-terser": "7.0.2",
"rollup-plugin-ts": "1.4.2",
"ts-jest": "27.0.5",

@@ -95,0 +96,0 @@ "typescript": "4.4.3"

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc