{"version":3,"sources":["snazzy-info-window.js"],"names":["copyKeys","target","source","Object","keys","forEach","key","mergeDefaultOptions","opts","copy","_defaultOptions","obj","_typeof","objCopy","parseAttribute","attribute","defaultValue","re","test","match","exec","value","units","original","setHTML","container","content","firstChild","removeChild","innerHTML","appendChild","oppositePlacement","p","capitalizePlacement","charAt","toUpperCase","slice","toLatLng","v","undefined","google","maps","LatLng","lat","lng","_defaultShadow","h","blur","spread","color","placement","pointer","openOnMarkerClick","closeOnMapClick","closeWhenOthersOpen","showCloseButton","panOnOpen","edgeOffset","top","right","bottom","left","SnazzyInfoWindow","_classCallCheck","this","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","call","console","warn","_html","_opts","_callbacks","callbacks","_marker","marker","_map","map","_position","position","_isOpen","_listeners","trackListener","event","addListener","getMap","open","offset","String","toLowerCase","border","shadow","callback","lambda","apply","listener","persistent","push","clearPersistent","e","removeListener","filter","result","activateCallback","setMap","clearListeners","latLng","draw","resize","reposition","wrapperClass","wrapper","w","className","_classPrefix","style","marginLeft","marginTop","bg","backgroundColor","contentWrapper","pointerBg","padding","shadowFrame","borderRadius","fontSize","fontColor","shadowPointer","width","height","pointerBorder","borderWidth","bWidth","Math","round","offsetWidth","clientWidth","pLength","min","offsetHeight","triangleDiff","reverseP","borderColor","isSet","hOffset","vOffset","formatBoxShadow","boxShadow","hRotated","vRotated","shadowPointerInner","opacity","shadowWrapper","divPixel","getProjection","fromLatLngToDivPixel","floatWrapper","floor","y","x","trigger","_eventPrefix","_this2","applyCss","element","args","i","length","newElement","_len","arguments","Array","_key","document","createElement","setWrapperClass","closeButtonMarkup","d","closeButton","setAttribute","getPanes","floatPane","close","other","_previousWidth","_previousHeight","getDiv","ow","oh","pw","ph","addDomListener","cancelBubble","stopPropagation","parent","parentElement","mb","getBoundingClientRect","mib","getMapInnerBounds","wb","dx","dy","panBy","maxWidth","maxHeight","OverlayView"],"mappings":"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","file":"snazzy-info-window.min.js","sourcesContent":["// Global variables\nconst _classPrefix = 'si-';\nconst _root2 = 1.41421356237;\nconst _inverseRoot2 = 0.7071067811865474;\nconst _eventPrefix = 'snazzy-info-window-';\nconst _defaultShadow = {\n h: '0px',\n v: '3px',\n blur: '6px',\n spread: '0px',\n color: '#000'\n};\nconst _defaultOptions = {\n placement: 'top',\n pointer: true,\n openOnMarkerClick: true,\n closeOnMapClick: true,\n closeWhenOthersOpen: false,\n showCloseButton: true,\n panOnOpen: true,\n edgeOffset: {\n top: 20,\n right: 20,\n bottom: 20,\n left: 20\n }\n};\n\n// Copy keys from the source into the target\nfunction copyKeys(target, source) {\n if (target && source) {\n Object.keys(source).forEach((key) => {\n target[key] = source[key];\n });\n }\n}\n\n// We need to safely merge options from the defaults. This will make\n// sure settings like edgeOffset are properly assigned.\nfunction mergeDefaultOptions(opts) {\n const copy = {};\n copyKeys(copy, _defaultOptions);\n copyKeys(copy, opts);\n Object.keys(_defaultOptions).forEach((key) => {\n const obj = _defaultOptions[key];\n if (typeof obj === 'object') {\n const objCopy = {};\n copyKeys(objCopy, obj);\n copyKeys(objCopy, copy[key]);\n copy[key] = objCopy;\n }\n });\n return copy;\n}\n\n// Parse a css attribute into the numeric portion and the units\nfunction parseAttribute(attribute, defaultValue) {\n // 1em, 1.0em, 0.1em, .1em, 1. em\n const re = /^(-{0,1}\\.{0,1}\\d+(\\.\\d+)?)[\\s|\\.]*(\\w*)$/;\n if (attribute && re.test(attribute)) {\n const match = re.exec(attribute);\n const number = match[1];\n const units = match[3] || 'px';\n return { value: number * 1, units, original: attribute };\n }\n if (defaultValue) {\n return parseAttribute(defaultValue);\n }\n return { original: defaultValue };\n}\n\n// Set the html of a container. Should support both raw text and a single\n// DOM Element.\nfunction setHTML(container, content) {\n if (container) {\n // Clear out everything in the container\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n if (content) {\n if (typeof content === 'string') {\n container.innerHTML = content;\n } else {\n container.appendChild(content);\n }\n }\n }\n}\n\n// Get the opposite of a given placement\nfunction oppositePlacement(p) {\n if (p === 'top') {\n return 'bottom';\n } else if (p === 'bottom') {\n return 'top';\n } else if (p === 'left') {\n return 'right';\n } else if (p === 'right') {\n return 'left';\n }\n return p;\n}\n\n// Return the placement with the first letter capitalized\nfunction capitalizePlacement(p) {\n return p.charAt(0).toUpperCase() + p.slice(1);\n}\n\n// Convert the value into a Google Map LatLng\nfunction toLatLng(v) {\n if (v !== undefined && v !== null) {\n if (v instanceof google.maps.LatLng) {\n return v;\n } else if (v.lat !== undefined && v.lng !== undefined) {\n return new google.maps.LatLng(v);\n }\n }\n return null;\n}\n\n// Export SnazzyInfoWindow even if google is not yet defined.\nconst getGoogleClass = () => {\n return typeof google !== 'undefined' ? google.maps.OverlayView : function noop() {};\n};\nexport default class SnazzyInfoWindow extends getGoogleClass() {\n\n constructor(opts) {\n super(opts);\n if (typeof google === 'undefined') {\n console.warn('Snazzy Info Window: Google Maps is not defined!'); //eslint-disable-line\n return;\n }\n // Private properties\n this._html = null;\n this._opts = mergeDefaultOptions(opts);\n this._callbacks = this._opts.callbacks || {};\n this._marker = this._opts.marker;\n this._map = this._opts.map;\n this._position = toLatLng(this._opts.position);\n this._isOpen = false;\n this._listeners = [];\n\n // This listener remains active when the info window is closed.\n if (this._marker && this._opts.openOnMarkerClick) {\n this.trackListener(google.maps.event.addListener(this._marker, 'click', () => {\n if (!this.getMap()) {\n this.open();\n }\n }), true);\n }\n\n // When using a position the default option for the offset is 0\n if (this._position && !this._opts.offset) {\n this._opts.offset = {\n top: '0px',\n left: '0px'\n };\n }\n\n // Validate the placement option\n let p = opts.placement || this._opts.position;\n // The position variable was renamed to placement so we must type check\n if (typeof p === 'string' || p instanceof String) {\n p = p.toLowerCase();\n }\n if (p !== 'top' && p !== 'bottom' &&\n p !== 'left' && p !== 'right') {\n this._opts.placement = _defaultOptions.placement;\n } else {\n this._opts.placement = p;\n }\n\n // Validate the position option\n p = this._opts.position;\n if (p !== undefined && p !== null &&\n typeof p !== 'string' && !(p instanceof String)) {\n this._opts.position = p;\n }\n\n // Validate the other options\n if (this._opts.border === undefined || this._opts.border === true) {\n this._opts.border = {};\n }\n if (this._opts.pointer === undefined) {\n this._opts.pointer = _defaultOptions.pointer;\n }\n if (this._opts.shadow === undefined || this._opts.shadow === true) {\n this._opts.shadow = {};\n }\n }\n\n // Activate the specified callback and return the result\n activateCallback(callback) {\n const lambda = this._callbacks[callback];\n return lambda ? lambda.apply(this) : undefined;\n }\n\n // Track the provided listener. A persistent listener means it remains\n // tracked even if the info window is closed.\n trackListener(listener, persistent) {\n this._listeners.push({ listener, persistent });\n }\n\n // Will clear all listeners that are used during the open state.\n clearListeners(clearPersistent) {\n if (this._listeners) {\n this._listeners.forEach((e) => {\n if (clearPersistent || !e.persistent) {\n google.maps.event.removeListener(e.listener);\n e.listener = null;\n }\n });\n this._listeners = this._listeners.filter((e) => {\n return e.listener != null;\n });\n }\n }\n\n isOpen() {\n return this._isOpen;\n }\n\n // Open the info window after attaching to a specific marker.\n open() {\n const result = this.activateCallback('beforeOpen');\n if (result !== undefined && !result) {\n return;\n }\n if (this._marker) {\n this.setMap(this._marker.getMap());\n } else if (this._map && this._position) {\n this.setMap(this._map);\n }\n }\n\n // Close the info window.\n close() {\n const result = this.activateCallback('beforeClose');\n if (result !== undefined && !result) {\n return;\n }\n this.clearListeners();\n this.setMap(null);\n }\n\n // Force close the map and remove any event listeners attached to google\n destroy() {\n if (this.getMap()) {\n this.setMap(null);\n }\n // Make sure to clear all persistent listeners\n this.clearListeners(true);\n }\n\n setContent(content) {\n this._opts.content = content;\n if (this._html && this._html.content) {\n setHTML(this._html.content, content);\n }\n }\n\n setPosition(latLng) {\n this._position = toLatLng(latLng);\n if (this._isOpen && this._position) {\n this.draw();\n this.resize();\n this.reposition();\n }\n }\n\n setWrapperClass(wrapperClass) {\n if (this._html && this._html.wrapper) {\n const w = this._html.wrapper;\n w.className = `${_classPrefix}wrapper-${this._opts.placement}`;\n if (this._opts.border) {\n w.className += ` ${_classPrefix}has-border`;\n }\n if (wrapperClass) {\n w.className += ` ${wrapperClass}`;\n }\n }\n this._opts.wrapperClass = wrapperClass;\n }\n\n getWrapper() {\n if (this._html) {\n return this._html.wrapper;\n }\n return null;\n }\n\n // Implementation of OverlayView draw method.\n draw() {\n if (!this.getMap() || !this._html) {\n return;\n }\n if (!this._marker && !this._position) {\n return;\n }\n\n // 1. Assign offset\n const offset = this._opts.offset;\n if (offset) {\n if (offset.left) {\n this._html.wrapper.style.marginLeft = offset.left;\n }\n if (offset.top) {\n this._html.wrapper.style.marginTop = offset.top;\n }\n }\n // 2. Set the background color\n const bg = this._opts.backgroundColor;\n if (bg) {\n this._html.contentWrapper.style.backgroundColor = bg;\n if (this._opts.pointer) {\n this._html.pointerBg.style[`border${capitalizePlacement(this._opts.placement)}Color`] = bg;\n }\n }\n // 3. Padding\n if (this._opts.padding) {\n this._html.contentWrapper.style.padding = this._opts.padding;\n if (this._opts.shadow) {\n this._html.shadowFrame.style.padding = this._opts.padding;\n }\n }\n // 4. Border radius\n if (this._opts.borderRadius) {\n this._html.contentWrapper.style.borderRadius = this._opts.borderRadius;\n if (this._opts.shadow) {\n this._html.shadowFrame.style.borderRadius = this._opts.borderRadius;\n }\n }\n // 5. Font Size\n if (this._opts.fontSize) {\n this._html.wrapper.style.fontSize = this._opts.fontSize;\n }\n // 6. Font Color\n if (this._opts.fontColor) {\n this._html.contentWrapper.style.color = this._opts.fontColor;\n }\n // 7. Pointer\n // Check if the pointer is enabled. Also make sure the value isn't just the boolean true.\n if (this._opts.pointer && this._opts.pointer !== true) {\n if (this._opts.shadow) {\n this._html.shadowPointer.style.width = this._opts.pointer;\n this._html.shadowPointer.style.height = this._opts.pointer;\n }\n if (this._html.pointerBorder) {\n this._html.pointerBorder.style.borderWidth = this._opts.pointer;\n }\n this._html.pointerBg.style.borderWidth = this._opts.pointer;\n }\n\n // 8. Border\n if (this._opts.border) {\n // Calculate the border width\n let bWidth = 0;\n if (this._opts.border.width !== undefined) {\n bWidth = parseAttribute(this._opts.border.width, '0px');\n this._html.contentWrapper.style.borderWidth = bWidth.value + bWidth.units;\n }\n bWidth = Math.round((this._html.contentWrapper.offsetWidth -\n this._html.contentWrapper.clientWidth) / 2.0);\n bWidth = parseAttribute(`${bWidth}px`, '0px');\n\n if (this._opts.pointer) {\n // Calculate the pointer length\n let pLength = Math.min(this._html.pointerBorder.offsetHeight,\n this._html.pointerBorder.offsetWidth);\n pLength = parseAttribute(`${pLength}px`, '0px');\n\n let triangleDiff = Math.round(bWidth.value * (_root2 - 1));\n triangleDiff = Math.min(triangleDiff, pLength.value);\n\n this._html.pointerBg.style.borderWidth =\n (pLength.value - triangleDiff) + pLength.units;\n\n const reverseP = capitalizePlacement(oppositePlacement(this._opts.placement));\n this._html.pointerBg.style[`margin${reverseP}`] =\n triangleDiff + bWidth.units;\n this._html.pointerBg.style[this._opts.placement] =\n -bWidth.value + bWidth.units;\n }\n const color = this._opts.border.color;\n if (color) {\n this._html.contentWrapper.style.borderColor = color;\n if (this._html.pointerBorder) {\n this._html.pointerBorder.style[`border${capitalizePlacement(this._opts.placement)}Color`] = color;\n }\n }\n }\n // 9. Shadow\n if (this._opts.shadow) {\n // Check if any of the shadow settings have actually been set\n const shadow = this._opts.shadow;\n const isSet = (attribute) => {\n const v = shadow[attribute];\n return v !== undefined && v != null;\n };\n\n if (isSet('h') || isSet('v') || isSet('blur') || isSet('spread') || isSet('color')) {\n const hOffset = parseAttribute(shadow.h, _defaultShadow.h);\n const vOffset = parseAttribute(shadow.v, _defaultShadow.v);\n const blur = parseAttribute(shadow.blur, _defaultShadow.blur);\n const spread = parseAttribute(shadow.spread, _defaultShadow.spread);\n const color = shadow.color || _defaultShadow.color;\n const formatBoxShadow = (h, v) => {\n return `${h} ${v} ${blur.original} ${spread.original} ${color}`;\n };\n\n this._html.shadowFrame.style.boxShadow =\n formatBoxShadow(hOffset.original, vOffset.original);\n\n // Correctly rotate the shadows before the css transform\n const hRotated = (_inverseRoot2 * (hOffset.value - vOffset.value)) + hOffset.units;\n const vRotated = (_inverseRoot2 * (hOffset.value + vOffset.value)) + vOffset.units;\n if (this._html.shadowPointerInner) {\n this._html.shadowPointerInner.style.boxShadow =\n formatBoxShadow(hRotated, vRotated);\n }\n }\n if (this._opts.shadow.opacity) {\n this._html.shadowWrapper.style.opacity = this._opts.shadow.opacity;\n }\n }\n\n const divPixel = this.getProjection()\n .fromLatLngToDivPixel(this._position || this._marker.position);\n if (divPixel) {\n this._html.floatWrapper.style.top = `${Math.floor(divPixel.y)}px`;\n this._html.floatWrapper.style.left = `${Math.floor(divPixel.x)}px`;\n }\n if (!this._isOpen) {\n this._isOpen = true;\n this.resize();\n this.reposition();\n this.activateCallback('afterOpen');\n google.maps.event.trigger(this.getMap(), `${_eventPrefix}opened`, this);\n }\n }\n\n // Implementation of OverlayView onAdd method.\n onAdd() {\n if (this._html) {\n return;\n }\n // Used for creating new elements\n const applyCss = (element, args) => {\n if (element && args) {\n for (let i = 0; i < args.length; i++) {\n const className = args[i];\n if (className) {\n if (element.className) {\n element.className += ' ';\n }\n element.className += _classPrefix + className;\n }\n }\n }\n };\n const newElement = (...args) => {\n const element = document.createElement('div');\n applyCss(element, args);\n return element;\n };\n\n this._html = {};\n\n // 1. Create the wrapper\n this._html.wrapper = newElement();\n this.setWrapperClass(this._opts.wrapperClass);\n\n // 2. Create the shadow\n if (this._opts.shadow) {\n this._html.shadowWrapper = newElement(\n `shadow-wrapper-${this._opts.placement}`\n );\n this._html.shadowFrame = newElement(\n 'frame',\n 'shadow-frame'\n );\n this._html.shadowWrapper.appendChild(this._html.shadowFrame);\n\n if (this._opts.pointer) {\n this._html.shadowPointer = newElement(\n `shadow-pointer-${this._opts.placement}`\n );\n this._html.shadowPointerInner = newElement(\n `shadow-inner-pointer-${this._opts.placement}`\n );\n this._html.shadowPointer.appendChild(this._html.shadowPointerInner);\n this._html.shadowWrapper.appendChild(this._html.shadowPointer);\n }\n\n this._html.wrapper.appendChild(this._html.shadowWrapper);\n }\n\n // 3. Create the content\n this._html.contentWrapper = newElement(\n 'frame',\n 'content-wrapper'\n );\n this._html.content = newElement(\n 'content'\n );\n if (this._opts.content) {\n setHTML(this._html.content, this._opts.content);\n }\n\n // 4. Create the close button\n if (this._opts.showCloseButton) {\n if (this._opts.closeButtonMarkup) {\n const d = document.createElement('div');\n setHTML(d, this._opts.closeButtonMarkup);\n this._html.closeButton = d.firstChild;\n } else {\n this._html.closeButton = document.createElement('button');\n this._html.closeButton.setAttribute('type', 'button');\n this._html.closeButton.innerHTML = '×';\n applyCss(this._html.closeButton, ['close-button']);\n }\n this._html.contentWrapper.appendChild(this._html.closeButton);\n }\n this._html.contentWrapper.appendChild(this._html.content);\n this._html.wrapper.appendChild(this._html.contentWrapper);\n\n // 5. Create the pointer\n if (this._opts.pointer) {\n if (this._opts.border) {\n this._html.pointerBorder = newElement(\n `pointer-${this._opts.placement}`,\n `pointer-border-${this._opts.placement}`\n );\n this._html.wrapper.appendChild(this._html.pointerBorder);\n }\n this._html.pointerBg = newElement(\n `pointer-${this._opts.placement}`,\n `pointer-bg-${this._opts.placement}`\n );\n this._html.wrapper.appendChild(this._html.pointerBg);\n }\n\n // Create an outer wrapper\n this._html.floatWrapper = newElement(\n 'float-wrapper'\n );\n this._html.floatWrapper.appendChild(this._html.wrapper);\n\n // Add the wrapper to the Google Maps float pane\n this.getPanes().floatPane.appendChild(this._html.floatWrapper);\n\n // Now add all the event listeners\n const map = this.getMap();\n this.clearListeners();\n if (this._opts.closeOnMapClick) {\n this.trackListener(google.maps.event.addListener(map, 'click', () => {\n this.close();\n }));\n }\n if (this._opts.closeWhenOthersOpen) {\n this.trackListener(google.maps.event.addListener(map, `${_eventPrefix}opened`, (other) => {\n if (this !== other) {\n this.close();\n }\n }));\n }\n\n // Clear out the previous map bounds\n this._previousWidth = null;\n this._previousHeight = null;\n this.trackListener(google.maps.event.addListener(map, 'bounds_changed', () => {\n const d = map.getDiv();\n const ow = d.offsetWidth;\n const oh = d.offsetHeight;\n const pw = this._previousWidth;\n const ph = this._previousHeight;\n if (pw === null || ph === null || pw !== ow || ph !== oh) {\n this._previousWidth = ow;\n this._previousHeight = oh;\n this.resize();\n }\n }));\n\n // Marker moves\n if (this._marker) {\n this.trackListener(google.maps.event.addListener(this._marker,\n 'position_changed', () => {\n this.draw();\n }));\n }\n\n // Close button\n if (this._opts.showCloseButton && !this._opts.closeButtonMarkup) {\n this.trackListener(google.maps.event.addDomListener(this._html.closeButton,\n 'click', (e) => {\n e.cancelBubble = true;\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n this.close();\n }));\n }\n\n // Stop the mouse event propagation\n const mouseEvents = ['click', 'dblclick', 'rightclick', 'contextmenu',\n 'drag', 'dragend', 'dragstart',\n 'mousedown', 'mouseout', 'mouseover', 'mouseup',\n 'touchstart', 'touchend', 'touchmove',\n 'wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'];\n mouseEvents.forEach((event) => {\n this.trackListener(google.maps.event.addDomListener(this._html.wrapper,\n event, (e) => {\n e.cancelBubble = true;\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n }));\n });\n\n this.activateCallback('open');\n }\n\n // Implementation of OverlayView onRemove method\n onRemove() {\n this.activateCallback('close');\n if (this._html) {\n const parent = this._html.floatWrapper.parentElement;\n if (parent) {\n parent.removeChild(this._html.floatWrapper);\n }\n this._html = null;\n }\n this._isOpen = false;\n this.activateCallback('afterClose');\n }\n\n // The map inner bounds used for panning and resizing\n getMapInnerBounds() {\n const mb = this.getMap().getDiv().getBoundingClientRect();\n const mib = {\n top: mb.top + this._opts.edgeOffset.top,\n right: mb.right - this._opts.edgeOffset.right,\n bottom: mb.bottom - this._opts.edgeOffset.bottom,\n left: mb.left + this._opts.edgeOffset.left\n };\n mib.width = mib.right - mib.left;\n mib.height = mib.bottom - mib.top;\n return mib;\n }\n\n // Pan the Google Map such that the info window is visible\n reposition() {\n if (!this._opts.panOnOpen || !this._html) {\n return;\n }\n const mib = this.getMapInnerBounds();\n const wb = this._html.wrapper.getBoundingClientRect();\n let dx = 0;\n let dy = 0;\n if (mib.left >= wb.left) {\n dx = wb.left - mib.left;\n } else if (mib.right <= wb.right) {\n dx = wb.left - (mib.right - wb.width);\n }\n if (mib.top >= wb.top) {\n dy = wb.top - mib.top;\n } else if (mib.bottom <= wb.bottom) {\n dy = wb.top - (mib.bottom - wb.height);\n }\n if (dx !== 0 || dy !== 0) {\n this.getMap().panBy(dx, dy);\n }\n }\n\n // Resize the info window to fit within the map bounds and edge offset\n resize() {\n if (!this._html) {\n return;\n }\n const mib = this.getMapInnerBounds();\n // Handle the max width\n let maxWidth = mib.width;\n if (this._opts.maxWidth !== undefined) {\n maxWidth = Math.min(maxWidth, this._opts.maxWidth);\n }\n maxWidth -= (this._html.wrapper.offsetWidth - this._html.content.offsetWidth);\n this._html.content.style.maxWidth = `${maxWidth}px`;\n\n // Handle the max height\n let maxHeight = mib.height;\n if (this._opts.maxHeight !== undefined) {\n maxHeight = Math.min(maxHeight, this._opts.maxHeight);\n }\n maxHeight -= (this._html.wrapper.offsetHeight - this._html.content.offsetHeight);\n this._html.content.style.maxHeight = `${maxHeight}px`;\n }\n}\n"]}