{"version":3,"file":"photo-sphere-viewer.js","sources":["../src/data/constants.js","../src/utils/browser.js","../src/utils/math.js","../src/utils/misc.js","../src/PSVError.js","../src/utils/psv.js","../src/utils/index.js","../src/Animation.js","../src/components/AbstractComponent.js","../src/buttons/AbstractButton.js","../src/buttons/AutorotateButton.js","../src/buttons/CustomButton.js","../src/buttons/DownloadButton.js","../src/buttons/FullscreenButton.js","../src/buttons/MenuButton.js","../src/data/system.js","../src/buttons/AbstractZoomButton.js","../src/buttons/ZoomInButton.js","../src/buttons/ZoomOutButton.js","../src/buttons/ZoomRangeButton.js","../src/data/config.js","../src/buttons/CaptionButton.js","../src/components/NavbarCaption.js","../src/components/Navbar.js","../src/plugins/AbstractPlugin.js","../src/components/Loader.js","../src/components/Notification.js","../src/components/Overlay.js","../src/components/Panel.js","../src/services/AbstractService.js","../src/services/DataHelper.js","../src/services/EventsHandler.js","../src/services/Renderer.js","../src/services/TextureLoader.js","../src/components/Tooltip.js","../src/services/TooltipRenderer.js","../src/Viewer.js"],"sourcesContent":["/**\n * @namespace PSV.constants\n */\n\n/**\n * @summary Number of pixels bellow which a mouse move will be considered as a click\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const MOVE_THRESHOLD = 4;\n\n/**\n * @summary Delay in milliseconds between two clicks to consider a double click\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const DBLCLICK_DELAY = 300;\n\n/**\n * @summary Delay in milliseconds to emulate a long touch\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const LONGTOUCH_DELAY = 500;\n\n/**\n * @summary Delay in milliseconds to for the two fingers overlay to appear\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const TWOFINGERSOVERLAY_DELAY = 100;\n\n/**\n * @summary Duration in milliseconds of the \"ctrl zoom\" overlay\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const CTRLZOOM_TIMEOUT = 2000;\n\n/**\n * @summary Time size of the mouse position history used to compute inertia\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const INERTIA_WINDOW = 300;\n\n/**\n * @summary Radius of the THREE.SphereGeometry, Half-length of the THREE.BoxGeometry\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const SPHERE_RADIUS = 100;\n\n/**\n * @summary Number of vertice of the THREE.SphereGeometry\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const SPHERE_VERTICES = 64;\n\n/**\n * @summary Number of vertices of each side of the THREE.BoxGeometry\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const CUBE_VERTICES = 8;\n\n/**\n * @summary Order of cube textures for arrays\n * @memberOf PSV.constants\n * @type {number[]}\n * @constant\n */\nexport const CUBE_MAP = [0, 2, 4, 5, 3, 1];\n\n/**\n * @summary Order of cube textures for maps\n * @memberOf PSV.constants\n * @type {string[]}\n * @constant\n */\nexport const CUBE_HASHMAP = ['left', 'right', 'top', 'bottom', 'back', 'front'];\n\n/**\n * @summary Property name added to viewer element\n * @memberOf PSV.constants\n * @type {string}\n * @constant\n */\nexport const VIEWER_DATA = 'photoSphereViewer';\n\n/**\n * @summary Available actions\n * @memberOf PSV.constants\n * @enum {string}\n * @constant\n */\nexport const ACTIONS = {\n ROTATE_LAT_UP : 'rotateLatitudeUp',\n ROTATE_LAT_DOWN : 'rotateLatitudeDown',\n ROTATE_LONG_RIGHT: 'rotateLongitudeRight',\n ROTATE_LONG_LEFT : 'rotateLongitudeLeft',\n ZOOM_IN : 'zoomIn',\n ZOOM_OUT : 'zoomOut',\n TOGGLE_AUTOROTATE: 'toggleAutorotate',\n};\n\n/**\n * @summary Available events names\n * @memberOf PSV.constants\n * @enum {string}\n * @constant\n */\nexport const EVENTS = {\n /**\n * @event autorotate\n * @memberof PSV\n * @summary Triggered when the automatic rotation is enabled/disabled\n * @param {boolean} enabled\n */\n AUTOROTATE : 'autorotate',\n /**\n * @event before-render\n * @memberof PSV\n * @summary Triggered before a render, used to modify the view\n * @param {number} timestamp - time provided by requestAnimationFrame\n */\n BEFORE_RENDER : 'before-render',\n /**\n * @event before-rotate\n * @memberOf PSV\n * @summary Triggered before a rotate operation, can be cancelled\n * @param {PSV.ExtendedPosition}\n */\n BEFORE_ROTATE : 'before-rotate',\n /**\n * @event click\n * @memberof PSV\n * @summary Triggered when the user clicks on the viewer (everywhere excluding the navbar and the side panel)\n * @param {PSV.ClickData} data\n */\n CLICK : 'click',\n /**\n * @event close-panel\n * @memberof PSV\n * @summary Triggered when the panel is closed\n * @param {string} [id]\n */\n CLOSE_PANEL : 'close-panel',\n /**\n * @event config-changed\n * @memberOf PSV\n * @summary Triggered after a call to setOption/setOptions\n * @param {string[]} name of changed options\n */\n CONFIG_CHANGED : 'config-changed',\n /**\n * @event dblclick\n * @memberof PSV\n * @summary Triggered when the user double clicks on the viewer. The simple `click` event is always fired before `dblclick`\n * @param {PSV.ClickData} data\n */\n DOUBLE_CLICK : 'dblclick',\n /**\n * @event fullscreen-updated\n * @memberof PSV\n * @summary Triggered when the fullscreen mode is enabled/disabled\n * @param {boolean} enabled\n */\n FULLSCREEN_UPDATED: 'fullscreen-updated',\n /**\n * @event hide-notification\n * @memberof PSV\n * @summary Triggered when the notification is hidden\n */\n HIDE_NOTIFICATION : 'hide-notification',\n /**\n * @event hide-overlay\n * @memberof PSV\n * @summary Triggered when the overlay is hidden\n * @param {string} [id]\n */\n HIDE_OVERLAY : 'hide-overlay',\n /**\n * @event hide-tooltip\n * @memberof PSV\n * @summary Triggered when the tooltip is hidden\n * @param {*} Data associated to this tooltip\n */\n HIDE_TOOLTIP : 'hide-tooltip',\n /**\n * @event open-panel\n * @memberof PSV\n * @summary Triggered when the panel is opened\n * @param {string} [id]\n */\n OPEN_PANEL : 'open-panel',\n /**\n * @event panorama-loaded\n * @memberof PSV\n * @summary Triggered when a panorama image has been loaded\n */\n PANORAMA_LOADED : 'panorama-loaded',\n /**\n * @event position-updated\n * @memberof PSV\n * @summary Triggered when the view longitude and/or latitude changes\n * @param {PSV.Position} position\n */\n POSITION_UPDATED : 'position-updated',\n /**\n * @event ready\n * @memberof PSV\n * @summary Triggered when the panorama image has been loaded and the viewer is ready to perform the first render\n */\n READY : 'ready',\n /**\n * @event render\n * @memberof PSV\n * @summary Triggered on each viewer render, **this event is triggered very often**\n */\n RENDER : 'render',\n /**\n * @event show-notification\n * @memberof PSV\n * @summary Triggered when the notification is shown\n */\n SHOW_NOTIFICATION : 'show-notification',\n /**\n * @event show-overlay\n * @memberof PSV\n * @summary Triggered when the overlay is shown\n * @param {string} [id]\n */\n SHOW_OVERLAY : 'show-overlay',\n /**\n * @event show-tooltip\n * @memberof PSV\n * @summary Triggered when the tooltip is shown\n * @param {*} Data associated to this tooltip\n * @param {PSV.components.Tooltip} Instance of the tooltip\n */\n SHOW_TOOLTIP : 'show-tooltip',\n /**\n * @event size-updated\n * @memberof PSV\n * @summary Triggered when the viewer size changes\n * @param {PSV.Size} size\n */\n SIZE_UPDATED : 'size-updated',\n /**\n * @event stop-all\n * @memberof PSV\n * @summary Triggered when all current animations are stopped\n */\n STOP_ALL : 'stop-all',\n /**\n * @event zoom-updated\n * @memberof PSV\n * @summary Triggered when the zoom level changes\n * @param {number} zoomLevel\n */\n ZOOM_UPDATED : 'zoom-updated',\n};\n\n/**\n * @summary Available change events names\n * @memberOf PSV.constants\n * @enum {string}\n * @constant\n */\nexport const CHANGE_EVENTS = {\n /**\n * @event get-animate-position\n * @memberof PSV\n * @param {Position} position\n * @returns {Position}\n * @summary Called to alter the target position of an animation\n */\n GET_ANIMATE_POSITION: 'get-animate-position',\n /**\n * @event get-rotate-position\n * @memberof PSV\n * @param {Position} position\n * @returns {Position}\n * @summary Called to alter the target position of a rotation\n */\n GET_ROTATE_POSITION : 'get-rotate-position',\n};\n\n/**\n * @summary Internal identifiers for various stuff\n * @memberOf PSV.constants\n * @enum {string}\n * @constant\n */\nexport const IDS = {\n MENU : 'menu',\n TWO_FINGERS: 'twoFingers',\n CTRL_ZOOM : 'ctrlZoom',\n ERROR : 'error',\n};\n\n/* eslint-disable */\n// @formatter:off\n/**\n * @summary Collection of easing functions\n * @memberOf PSV.constants\n * @see {@link https://gist.github.com/frederickk/6165768}\n * @type {Object}\n * @constant\n */\nexport const EASINGS = {\n linear : (t) => t,\n\n inQuad : (t) => t*t,\n outQuad : (t) => t*(2-t),\n inOutQuad : (t) => t<.5 ? 2*t*t : -1+(4-2*t)*t,\n\n inCubic : (t) => t*t*t,\n outCubic : (t) => (--t)*t*t+1,\n inOutCubic: (t) => t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1,\n\n inQuart : (t) => t*t*t*t,\n outQuart : (t) => 1-(--t)*t*t*t,\n inOutQuart: (t) => t<.5 ? 8*t*t*t*t : 1-8*(--t)*t*t*t,\n\n inQuint : (t) => t*t*t*t*t,\n outQuint : (t) => 1+(--t)*t*t*t*t,\n inOutQuint: (t) => t<.5 ? 16*t*t*t*t*t : 1+16*(--t)*t*t*t*t,\n\n inSine : (t) => 1-Math.cos(t*(Math.PI/2)),\n outSine : (t) => Math.sin(t*(Math.PI/2)),\n inOutSine : (t) => .5-.5*Math.cos(Math.PI*t),\n\n inExpo : (t) => Math.pow(2, 10*(t-1)),\n outExpo : (t) => 1-Math.pow(2, -10*t),\n inOutExpo : (t) => (t=t*2-1)<0 ? .5*Math.pow(2, 10*t) : 1-.5*Math.pow(2, -10*t),\n\n inCirc : (t) => 1-Math.sqrt(1-t*t),\n outCirc : (t) => Math.sqrt(1-(t-1)*(t-1)),\n inOutCirc : (t) => (t*=2)<1 ? .5-.5*Math.sqrt(1-t*t) : .5+.5*Math.sqrt(1-(t-=2)*t)\n};\n// @formatter:on\n/* eslint-enable */\n","/**\n * @summary Toggles a CSS class\n * @memberOf PSV.utils\n * @param {HTMLElement|SVGElement} element\n * @param {string} className\n * @param {boolean} [active] - forced state\n */\nexport function toggleClass(element, className, active) {\n // manual implementation for IE11 and SVGElement\n if (!element.classList) {\n let currentClassName = element.getAttribute('class') || '';\n const currentActive = currentClassName.indexOf(className) !== -1;\n const regex = new RegExp('(?:^|\\\\s)' + className + '(?:\\\\s|$)');\n\n if ((active === undefined || active) && !currentActive) {\n currentClassName += currentClassName.length > 0 ? ' ' + className : className;\n }\n else if (!active) {\n currentClassName = currentClassName.replace(regex, ' ');\n }\n\n element.setAttribute('class', currentClassName);\n }\n else if (active === undefined) {\n element.classList.toggle(className);\n }\n else if (active && !element.classList.contains(className)) {\n element.classList.add(className);\n }\n else if (!active) {\n element.classList.remove(className);\n }\n}\n\n/**\n * @summary Adds one or several CSS classes to an element\n * @memberOf PSV.utils\n * @param {HTMLElement} element\n * @param {string} className\n */\nexport function addClasses(element, className) {\n if (className) {\n className.split(' ').forEach((name) => {\n toggleClass(element, name, true);\n });\n }\n}\n\n/**\n * @summary Removes one or several CSS classes to an element\n * @memberOf PSV.utils\n * @param {HTMLElement} element\n * @param {string} className\n */\nexport function removeClasses(element, className) {\n if (className) {\n className.split(' ').forEach((name) => {\n toggleClass(element, name, false);\n });\n }\n}\n\n/**\n * @summary Searches if an element has a particular parent at any level including itself\n * @memberOf PSV.utils\n * @param {HTMLElement} el\n * @param {HTMLElement} parent\n * @returns {boolean}\n */\nexport function hasParent(el, parent) {\n let test = el;\n\n do {\n if (test === parent) {\n return true;\n }\n test = test.parentNode;\n } while (test);\n\n return false;\n}\n\n/**\n * @summary Gets the closest parent (can by itself)\n * @memberOf PSV.utils\n * @param {HTMLElement|SVGElement} el\n * @param {string} selector\n * @returns {HTMLElement}\n */\nexport function getClosest(el, selector) {\n const matches = el.matches || el.msMatchesSelector;\n let test = el;\n // When el is document or window, the matches does not exist\n if (!matches) {\n return null;\n }\n\n do {\n if (matches.bind(test)(selector)) {\n return test;\n }\n test = test instanceof SVGElement ? test.parentNode : test.parentElement;\n } while (test);\n\n return null;\n}\n\n/**\n * @summary Map between keyboard events `keyCode|which` and `key`\n * @memberOf PSV.utils\n * @type {Object}\n * @readonly\n * @private\n */\nconst KEYMAP = {\n 13 : 'Enter',\n 17 : 'Control',\n 27 : 'Escape',\n 32 : ' ',\n 33 : 'PageUp',\n 34 : 'PageDown',\n 37 : 'ArrowLeft',\n 38 : 'ArrowUp',\n 39 : 'ArrowRight',\n 40 : 'ArrowDown',\n 46 : 'Delete',\n 107: '+',\n 109: '-',\n};\n\n/**\n * @summary Map for non standard keyboard events `key` for IE and Edge\n * @see https://github.com/shvaikalesh/shim-keyboard-event-key\n * @type {Object}\n * @readonly\n * @private\n */\nconst MS_KEYMAP = {\n Add : '+',\n Del : 'Delete',\n Down : 'ArrowDown',\n Esc : 'Escape',\n Left : 'ArrowLeft',\n Right : 'ArrowRight',\n Spacebar: ' ',\n Subtract: '-',\n Up : 'ArrowUp',\n};\n\n/**\n * @summary Returns the key name of a KeyboardEvent\n * @memberOf PSV.utils\n * @param {KeyboardEvent} evt\n * @returns {string}\n */\nexport function getEventKey(evt) {\n let key = evt.key || KEYMAP[evt.keyCode || evt.which];\n\n if (key && MS_KEYMAP[key]) {\n key = MS_KEYMAP[key];\n }\n\n return key;\n}\n\n/**\n * @summary Detects if fullscreen is enabled\n * @memberOf PSV.utils\n * @param {HTMLElement} elt\n * @returns {boolean}\n */\nexport function isFullscreenEnabled(elt) {\n /* eslint-disable-next-line max-len */\n return (document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement) === elt;\n}\n\n/**\n * @summary Enters fullscreen mode\n * @memberOf PSV.utils\n * @param {HTMLElement} elt\n */\nexport function requestFullscreen(elt) {\n /* eslint-disable-next-line max-len */\n (elt.requestFullscreen || elt.mozRequestFullScreen || elt.webkitRequestFullscreen || elt.msRequestFullscreen).call(elt);\n}\n\n/**\n * @summary Exits fullscreen mode\n * @memberOf PSV.utils\n */\nexport function exitFullscreen() {\n /* eslint-disable-next-line max-len */\n (document.exitFullscreen || document.mozCancelFullScreen || document.webkitExitFullscreen || document.msExitFullscreen).call(document);\n}\n\n/**\n * @summary Gets an element style\n * @memberOf PSV.utils\n * @param {HTMLElement} elt\n * @param {string} prop\n * @returns {*}\n */\nexport function getStyle(elt, prop) {\n return window.getComputedStyle(elt, null)[prop];\n}\n\n/**\n * @summary Normalize mousewheel values accross browsers\n * @memberOf PSV.utils\n * @description From Facebook's Fixed Data Table\n * {@link https://github.com/facebookarchive/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js}\n * @copyright Facebook\n * @param {WheelEvent} event\n * @returns {{spinX: number, spinY: number, pixelX: number, pixelY: number}}\n */\nexport function normalizeWheel(event) {\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n\n let spinX = 0;\n let spinY = 0;\n let pixelX = 0;\n let pixelY = 0;\n\n // Legacy\n if ('detail' in event) {\n spinY = event.detail;\n }\n if ('wheelDelta' in event) {\n spinY = -event.wheelDelta / 120;\n }\n if ('wheelDeltaY' in event) {\n spinY = -event.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in event) {\n spinX = -event.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in event && event.axis === event.HORIZONTAL_AXIS) {\n spinX = spinY;\n spinY = 0;\n }\n\n pixelX = spinX * PIXEL_STEP;\n pixelY = spinY * PIXEL_STEP;\n\n if ('deltaY' in event) {\n pixelY = event.deltaY;\n }\n if ('deltaX' in event) {\n pixelX = event.deltaX;\n }\n\n if ((pixelX || pixelY) && event.deltaMode) {\n // delta in LINE units\n if (event.deltaMode === 1) {\n pixelX *= LINE_HEIGHT;\n pixelY *= LINE_HEIGHT;\n }\n // delta in PAGE units\n else {\n pixelX *= PAGE_HEIGHT;\n pixelY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pixelX && !spinX) {\n spinX = (pixelX < 1) ? -1 : 1;\n }\n if (pixelY && !spinY) {\n spinY = (pixelY < 1) ? -1 : 1;\n }\n\n return { spinX, spinY, pixelX, pixelY };\n}\n","/**\n * @summary Ensures that a number is in a given interval\n * @memberOf PSV.utils\n * @param {number} x\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\nexport function bound(x, min, max) {\n return Math.max(min, Math.min(max, x));\n}\n\n/**\n * @summary Checks if a value is an integer\n * @memberOf PSV.utils\n * @param {*} value\n * @returns {boolean}\n */\nexport function isInteger(value) {\n if (Number.isInteger) {\n return Number.isInteger(value);\n }\n return typeof value === 'number' && Number.isFinite(value) && Math.floor(value) === value;\n}\n\n\n/**\n * @summary Computes the sum of an array\n * @memberOf PSV.utils\n * @param {number[]} array\n * @returns {number}\n */\nexport function sum(array) {\n return array.reduce((a, b) => a + b, 0);\n}\n\n/**\n * @summary Computes the distance between two points\n * @memberOf PSV.utils\n * @param {PSV.Point} p1\n * @param {PSV.Point} p2\n * @returns {number}\n */\nexport function distance(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n\n/**\n * @summary Compute the shortest offset between two longitudes\n * @memberOf PSV.utils\n * @param {number} from\n * @param {number} to\n * @returns {number}\n */\nexport function getShortestArc(from, to) {\n const tCandidates = [\n 0, // direct\n Math.PI * 2, // clock-wise cross zero\n -Math.PI * 2, // counter-clock-wise cross zero\n ];\n\n return tCandidates.reduce((value, candidate) => {\n const newCandidate = to - from + candidate;\n return Math.abs(newCandidate) < Math.abs(value) ? newCandidate : value;\n }, Infinity);\n}\n\n/**\n * @summary Computes the angle between the current position and a target position\n * @memberOf PSV.utils\n * @param {PSV.Position} position1\n * @param {PSV.Position} position2\n * @returns {number}\n */\nexport function getAngle(position1, position2) {\n return Math.acos(\n Math.cos(position1.latitude)\n * Math.cos(position2.latitude)\n * Math.cos(position1.longitude - position2.longitude)\n + Math.sin(position1.latitude)\n * Math.sin(position2.latitude)\n );\n}\n\n/**\n * Returns the distance between two points on a sphere of radius one\n * @memberOf PSV.utils\n * @param {number[]} p1\n * @param {number[]} p2\n * @returns {number}\n */\nexport function greatArcDistance(p1, p2) {\n const [λ1, φ1] = p1;\n const [λ2, φ2] = p2;\n\n const x = (λ2 - λ1) * Math.cos((φ1 + φ2) / 2);\n const y = (φ2 - φ1);\n return Math.sqrt(x * x + y * y);\n}\n","/**\n * @summary Transforms a string to dash-case{@link https://github.com/shahata/dasherize}\n * @memberOf PSV.utils\n * @param {string} str\n * @returns {string}\n */\nexport function dasherize(str) {\n return str.replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (s, i) => {\n return (i > 0 ? '-' : '') + s.toLowerCase();\n });\n}\n\n/**\n * @summary Returns a function, that, when invoked, will only be triggered at most once during a given window of time.\n * @memberOf PSV.utils\n * @copyright underscore.js - modified by Clément Prévost {@link http://stackoverflow.com/a/27078401}\n * @param {Function} func\n * @param {number} wait\n * @returns {Function}\n */\nexport function throttle(func, wait) {\n /* eslint-disable */\n let self, args, result;\n let timeout;\n let previous = 0;\n const later = function() {\n previous = Date.now();\n timeout = undefined;\n result = func.apply(self, args);\n if (!timeout) {\n self = args = null;\n }\n };\n return function() {\n const now = Date.now();\n if (!previous) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n self = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n previous = now;\n result = func.apply(self, args);\n if (!timeout) {\n self = args = null;\n }\n }\n else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n /* eslint-enable */\n}\n\n/**\n * @summary Test if an object is a plain object\n * @memberOf PSV.utils\n * @description Test if an object is a plain object, i.e. is constructed\n * by the built-in Object constructor and inherits directly from Object.prototype\n * or null. Some built-in objects pass the test, e.g. Math which is a plain object\n * and some host or exotic objects may pass also.\n * {@link http://stackoverflow.com/a/5878101/1207670}\n * @param {*} obj\n * @returns {boolean}\n */\nexport function isPlainObject(obj) {\n // Basic check for Type object that's not null\n if (typeof obj === 'object' && obj !== null) {\n // If Object.getPrototypeOf supported, use it\n if (typeof Object.getPrototypeOf === 'function') {\n const proto = Object.getPrototypeOf(obj);\n return proto === Object.prototype || proto === null;\n }\n\n // Otherwise, use internal class\n // This should be reliable as if getPrototypeOf not supported, is pre-ES5\n return Object.prototype.toString.call(obj) === '[object Object]';\n }\n\n // Not an object\n return false;\n}\n\n/**\n * @summary Merges the enumerable attributes of two objects\n * @memberOf PSV.utils\n * @description Replaces arrays and alters the target object.\n * @copyright Nicholas Fisher \n * @param {Object} target\n * @param {Object} src\n * @returns {Object} target\n */\nexport function deepmerge(target, src) {\n /* eslint-disable */\n let first = src;\n\n return (function merge(target, src) {\n if (Array.isArray(src)) {\n if (!target || !Array.isArray(target)) {\n target = [];\n }\n else {\n target.length = 0;\n }\n src.forEach(function(e, i) {\n target[i] = merge(null, e);\n });\n }\n else if (typeof src === 'object') {\n if (!target || Array.isArray(target)) {\n target = {};\n }\n Object.keys(src).forEach(function(key) {\n if (typeof src[key] !== 'object' || !src[key] || !isPlainObject(src[key])) {\n target[key] = src[key];\n }\n else if (src[key] != first) {\n if (!target[key]) {\n target[key] = merge(null, src[key]);\n }\n else {\n merge(target[key], src[key]);\n }\n }\n });\n }\n else {\n target = src;\n }\n\n return target;\n }(target, src));\n /* eslint-enable */\n}\n\n/**\n * @summary Deeply clones an object\n * @memberOf PSV.utils\n * @param {Object} src\n * @returns {Object}\n */\nexport function clone(src) {\n return deepmerge(null, src);\n}\n\n/**\n * @summery Test of an object is empty\n * @memberOf PSV.utils\n * @param {object} obj\n * @returns {boolean}\n */\nexport function isEmpty(obj) {\n return !obj || (Object.keys(obj).length === 0 && obj.constructor === Object);\n}\n\n/**\n * @summary Loops over enumerable properties of an object\n * @memberOf PSV.utils\n * @param {Object} object\n * @param {Function} callback\n */\nexport function each(object, callback) {\n Object.keys(object).forEach((key) => {\n callback(object[key], key);\n });\n}\n\n/**\n * @summary Returns the intersection between two arrays\n * @memberOf PSV.utils\n * @template T\n * @param {T[]} array1\n * @param {T[]} array2\n * @returns {T[]}\n */\nexport function intersect(array1, array2) {\n return array1.filter(value => array2.indexOf(value) !== -1);\n}\n\n/**\n * @summary Returns if a valu is null or undefined\n * @param {*} val\n * @return {boolean}\n */\nexport function isNil(val) {\n return val === null || val === undefined;\n}\n\n/**\n * @summary Returns the first non null non undefined parameter\n * @memberOf PSV.utils\n * @param {*} values\n * @return {*}\n */\nexport function firstNonNull(...values) {\n for (const val of values) {\n if (!isNil(val)) {\n return val;\n }\n }\n\n return undefined;\n}\n","/**\n * @summary Custom error used in the lib\n * @param {string} message\n * @constructor\n * @memberOf PSV\n */\nfunction PSVError(message) {\n this.message = message;\n\n // Use V8's native method if available, otherwise fallback\n if ('captureStackTrace' in Error) {\n Error.captureStackTrace(this, PSVError);\n }\n else {\n this.stack = (new Error()).stack;\n }\n}\n\nPSVError.prototype = Object.create(Error.prototype);\nPSVError.prototype.name = 'PSVError';\nPSVError.prototype.constructor = PSVError;\n\nexport { PSVError };\n","import * as THREE from 'three';\nimport { PSVError } from '../PSVError';\nimport { bound } from './math';\n\n/**\n * @summary Displays a warning in the console\n * @memberOf PSV.utils\n * @param {string} message\n */\nexport function logWarn(message) {\n console.warn(`PhotoSphereViewer: ${message}`);\n}\n\n/**\n * @summary Checks if an object is a {PSV.ExtendedPosition}, ie has x/y or longitude/latitude\n * @memberOf PSV.utils\n * @param {object} object\n * @returns {boolean}\n */\nexport function isExtendedPosition(object) {\n return [['x', 'y'], ['longitude', 'latitude']].some(([key1, key2]) => {\n return object[key1] !== undefined && object[key2] !== undefined;\n });\n}\n\n/**\n * @summary Returns the value of a given attribute in the panorama metadata\n * @memberOf PSV.utils\n * @param {string} data\n * @param {string} attr\n * @returns (number)\n */\nexport function getXMPValue(data, attr) {\n // XMP data are stored in children\n let result = data.match('(.*)');\n if (result !== null) {\n const val = parseInt(result[1], 10);\n return isNaN(val) ? null : val;\n }\n\n // XMP data are stored in attributes\n result = data.match('GPano:' + attr + '=\"(.*?)\"');\n if (result !== null) {\n const val = parseInt(result[1], 10);\n return isNaN(val) ? null : val;\n }\n\n return null;\n}\n\n/**\n * @readonly\n * @private\n * @type {{top: string, left: string, bottom: string, center: string, right: string}}\n */\nconst CSS_POSITIONS = {\n top : '0%',\n bottom: '100%',\n left : '0%',\n right : '100%',\n center: '50%',\n};\n\n/**\n * @summary Translate CSS values like \"top center\" or \"10% 50%\" as top and left positions\n * @memberOf PSV.utils\n * @description The implementation is as close as possible to the \"background-position\" specification\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-position}\n * @param {string|object} value\n * @returns {PSV.Point}\n */\nexport function parsePosition(value) {\n if (!value) {\n return { x: 0.5, y: 0.5 };\n }\n\n if (typeof value === 'object') {\n return value;\n }\n\n let tokens = value.toLocaleLowerCase().split(' ').slice(0, 2);\n\n if (tokens.length === 1) {\n if (CSS_POSITIONS[tokens[0]] !== undefined) {\n tokens = [tokens[0], 'center'];\n }\n else {\n tokens = [tokens[0], tokens[0]];\n }\n }\n\n const xFirst = tokens[1] !== 'left' && tokens[1] !== 'right' && tokens[0] !== 'top' && tokens[0] !== 'bottom';\n\n tokens = tokens.map(token => CSS_POSITIONS[token] || token);\n\n if (!xFirst) {\n tokens.reverse();\n }\n\n const parsed = tokens.join(' ').match(/^([0-9.]+)% ([0-9.]+)%$/);\n\n if (parsed) {\n return {\n x: parseFloat(parsed[1]) / 100,\n y: parseFloat(parsed[2]) / 100,\n };\n }\n else {\n return { x: 0.5, y: 0.5 };\n }\n}\n\n/**\n * @summary Parses an speed\n * @memberOf PSV.utils\n * @param {string|number} speed - The speed, in radians/degrees/revolutions per second/minute\n * @returns {number} radians per second\n * @throws {PSV.PSVError} when the speed cannot be parsed\n */\nexport function parseSpeed(speed) {\n let parsed;\n\n if (typeof speed === 'string') {\n const speedStr = speed.toString().trim();\n\n // Speed extraction\n let speedValue = parseFloat(speedStr.replace(/^(-?[0-9]+(?:\\.[0-9]*)?).*$/, '$1'));\n const speedUnit = speedStr.replace(/^-?[0-9]+(?:\\.[0-9]*)?(.*)$/, '$1').trim();\n\n // \"per minute\" -> \"per second\"\n if (speedUnit.match(/(pm|per minute)$/)) {\n speedValue /= 60;\n }\n\n // Which unit?\n switch (speedUnit) {\n // Degrees per minute / second\n case 'dpm':\n case 'degrees per minute':\n case 'dps':\n case 'degrees per second':\n parsed = THREE.Math.degToRad(speedValue);\n break;\n\n // Radians per minute / second\n case 'rdpm':\n case 'radians per minute':\n case 'rdps':\n case 'radians per second':\n parsed = speedValue;\n break;\n\n // Revolutions per minute / second\n case 'rpm':\n case 'revolutions per minute':\n case 'rps':\n case 'revolutions per second':\n parsed = speedValue * Math.PI * 2;\n break;\n\n // Unknown unit\n default:\n throw new PSVError('Unknown speed unit \"' + speedUnit + '\"');\n }\n }\n else {\n parsed = speed;\n }\n\n return parsed;\n}\n\n/**\n * @summary Parses an angle value in radians or degrees and returns a normalized value in radians\n * @memberOf PSV.utils\n * @param {string|number} angle - eg: 3.14, 3.14rad, 180deg\n * @param {boolean} [zeroCenter=false] - normalize between -Pi - Pi instead of 0 - 2*Pi\n * @param {boolean} [halfCircle=zeroCenter] - normalize between -Pi/2 - Pi/2 instead of -Pi - Pi\n * @returns {number}\n * @throws {PSV.PSVError} when the angle cannot be parsed\n */\nexport function parseAngle(angle, zeroCenter = false, halfCircle = zeroCenter) {\n let parsed;\n\n if (typeof angle === 'string') {\n const match = angle.toLowerCase().trim().match(/^(-?[0-9]+(?:\\.[0-9]*)?)(.*)$/);\n\n if (!match) {\n throw new PSVError('Unknown angle \"' + angle + '\"');\n }\n\n const value = parseFloat(match[1]);\n const unit = match[2];\n\n if (unit) {\n switch (unit) {\n case 'deg':\n case 'degs':\n parsed = THREE.Math.degToRad(value);\n break;\n case 'rad':\n case 'rads':\n parsed = value;\n break;\n default:\n throw new PSVError('Unknown angle unit \"' + unit + '\"');\n }\n }\n else {\n parsed = value;\n }\n }\n else if (typeof angle === 'number' && !isNaN(angle)) {\n parsed = angle;\n }\n else {\n throw new PSVError('Unknown angle \"' + angle + '\"');\n }\n\n parsed = (zeroCenter ? parsed + Math.PI : parsed) % (Math.PI * 2);\n\n if (parsed < 0) {\n parsed += Math.PI * 2;\n }\n\n return zeroCenter ? bound(parsed - Math.PI, -Math.PI / (halfCircle ? 2 : 1), Math.PI / (halfCircle ? 2 : 1)) : parsed;\n}\n","/**\n * @namespace PSV.utils\n */\n\nexport * from './browser.js';\nexport * from './math.js';\nexport * from './misc.js';\nexport * from './psv.js';\n","import { EASINGS } from './data/constants';\nimport { each } from './utils';\n\n/**\n * @callback OnTick\n * @summary Function called for each animation frame with computed properties\n * @memberOf PSV.Animation\n * @param {Object.} properties - current values\n * @param {float} progress - 0 to 1\n */\n\n/**\n * @summary Interpolation helper for animations\n * @memberOf PSV\n * @description\n * Implements the Promise API with an additional \"cancel\" and \"finally\" methods.\n * The promise is resolved when the animation is complete and rejected if the animation is cancelled.\n * @example\n * new Animation({\n * properties: {\n * width: {start: 100, end: 200}\n * },\n * duration: 5000,\n * onTick: (properties) => element.style.width = `${properties.width}px`;\n * })\n */\nexport class Animation {\n\n /**\n * @param {Object} options\n * @param {Object.} options.properties\n * @param {number} options.properties[].start\n * @param {number} options.properties[].end\n * @param {number} options.duration\n * @param {number} [options.delay=0]\n * @param {string} [options.easing='linear']\n * @param {PSV.Animation.OnTick} options.onTick - called on each frame\n */\n constructor(options) {\n this.__cancelled = false;\n this.__resolved = false;\n\n this.__promise = new Promise((resolve, reject) => {\n this.__resolve = resolve;\n this.__reject = reject;\n });\n\n if (options) {\n if (!options.easing || typeof options.easing === 'string') {\n options.easing = EASINGS[options.easing || 'linear'];\n }\n this.__start = null;\n this.options = options;\n\n if (options.delay) {\n this.__delayTimeout = setTimeout(() => {\n this.__delayTimeout = null;\n window.requestAnimationFrame(t => this.__run(t));\n }, options.delay);\n }\n else {\n window.requestAnimationFrame(t => this.__run(t));\n }\n }\n }\n\n /**\n * @summary Main loop for the animation\n * @param {number} timestamp\n * @private\n */\n __run(timestamp) {\n // the animation has been cancelled\n if (this.__cancelled) {\n return;\n }\n\n // first iteration\n if (this.__start === null) {\n this.__start = timestamp;\n }\n\n // compute progress\n const progress = (timestamp - this.__start) / this.options.duration;\n const current = {};\n\n if (progress < 1.0) {\n // interpolate properties\n each(this.options.properties, (prop, name) => {\n if (prop) {\n current[name] = prop.start + (prop.end - prop.start) * this.options.easing(progress);\n }\n });\n\n this.options.onTick(current, progress);\n\n window.requestAnimationFrame(t => this.__run(t));\n }\n else {\n // call onTick one last time with final values\n each(this.options.properties, (prop, name) => {\n if (prop) {\n current[name] = prop.end;\n }\n });\n\n this.options.onTick(current, 1.0);\n\n window.requestAnimationFrame(() => {\n this.__resolved = true;\n this.__resolve();\n });\n }\n }\n\n /**\n * @summary Animation chaining\n * @param {Function} [onFulfilled] - Called when the animation is complete, can return a new animation\n * @param {Function} [onRejected] - Called when the animation is cancelled\n * @returns {PSV.Animation}\n */\n then(onFulfilled = null, onRejected = null) {\n const p = new Animation();\n\n // Allow cancellation to climb up the promise chain\n p.__promise.then(null, () => this.cancel());\n\n this.__promise.then(\n () => p.__resolve(onFulfilled ? onFulfilled() : undefined),\n () => p.__reject(onRejected ? onRejected() : undefined)\n );\n\n return p;\n }\n\n /**\n * @summary Alias to `.then(null, onRejected)`\n * @param {Function} onRejected - Called when the animation has been cancelled\n * @returns {PSV.Animation}\n */\n catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n\n /**\n * @summary Alias to `.then(onFinally, onFinally)`\n * @param {Function} onFinally - Called when the animation is either complete or cancelled\n * @returns {PSV.Animation}\n */\n finally(onFinally) {\n return this.then(onFinally, onFinally);\n }\n\n /**\n * @summary Cancels the animation\n */\n cancel() {\n if (!this.__cancelled && !this.__resolved) {\n this.__cancelled = true;\n this.__reject();\n\n if (this.__delayTimeout) {\n window.cancelAnimationFrame(this.__delayTimeout);\n this.__delayTimeout = null;\n }\n }\n }\n\n /**\n * @summary Returns a resolved animation promise\n * @returns {PSV.Animation}\n */\n static resolve() {\n const p = Promise.resolve();\n p.cancel = () => {\n };\n p.finally = (onFinally) => {\n return p.then(onFinally, onFinally);\n };\n return p;\n }\n\n}\n","/**\n * @namespace PSV.components\n */\n\n/**\n * @summary Base component class\n * @memberof PSV.components\n * @abstract\n */\nexport class AbstractComponent {\n\n /**\n * @param {PSV.Viewer | PSV.components.AbstractComponent} parent\n * @param {string} className - CSS class added to the component's container\n */\n constructor(parent, className) {\n /**\n * @summary Reference to main controller\n * @type {PSV.Viewer}\n * @readonly\n */\n this.psv = parent.psv || parent;\n\n /**\n * @member {PSV.Viewer|PSV.components.AbstractComponent}\n * @readonly\n */\n this.parent = parent;\n this.parent.children.push(this);\n\n /**\n * @summary All child components\n * @type {PSV.components.AbstractComponent[]}\n * @readonly\n * @package\n */\n this.children = [];\n\n /**\n * @summary Internal properties\n * @member {Object}\n * @protected\n * @property {boolean} visible - Visibility of the component\n */\n this.prop = {\n visible: true,\n };\n\n /**\n * @member {HTMLElement}\n * @readonly\n */\n this.container = document.createElement('div');\n this.container.className = className;\n this.parent.container.appendChild(this.container);\n }\n\n /**\n * @summary Destroys the component\n * @protected\n */\n destroy() {\n this.parent.container.removeChild(this.container);\n\n const childIdx = this.parent.children.indexOf(this);\n if (childIdx !== -1) {\n this.parent.children.splice(childIdx, 1);\n }\n\n this.children.slice().forEach(child => child.destroy());\n this.children.length = 0;\n\n delete this.container;\n delete this.parent;\n delete this.psv;\n delete this.prop;\n }\n\n /**\n * @summary Refresh UI\n * @description Must be be a very lightweight operation\n * @package\n */\n refreshUi() {\n this.children.every((child) => {\n child.refreshUi();\n return this.psv.prop.uiRefresh === true;\n });\n }\n\n /**\n * @summary Displays or hides the component\n */\n toggle() {\n if (this.isVisible()) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n\n /**\n * @summary Hides the component\n */\n hide() {\n this.container.style.display = 'none';\n this.prop.visible = false;\n }\n\n /**\n * @summary Displays the component\n */\n show() {\n this.container.style.display = '';\n this.prop.visible = true;\n }\n\n /**\n * @summary Check if the component is visible\n * @returns {boolean}\n */\n isVisible() {\n return this.prop.visible;\n }\n\n}\n","import { AbstractComponent } from '../components/AbstractComponent';\nimport { PSVError } from '../PSVError';\nimport { isPlainObject, toggleClass } from '../utils';\n\n/**\n * @namespace PSV.buttons\n */\n\n/**\n * @summary Base navbar button class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.buttons\n * @abstract\n */\nexport class AbstractButton extends AbstractComponent {\n\n /**\n * @summary Unique identifier of the button\n * @member {string}\n * @readonly\n * @static\n */\n static id = null;\n\n /**\n * @summary SVG icon name injected in the button\n * @member {string}\n * @readonly\n * @static\n */\n static icon = null;\n\n /**\n * @summary SVG icon name injected in the button when it is active\n * @member {string}\n * @readonly\n * @static\n */\n static iconActive = null;\n\n /**\n * @param {PSV.components.Navbar} navbar\n * @param {string} [className] - Additional CSS classes\n * @param {boolean} [collapsable=false] - `true` if the button can be moved to menu when the navbar is too small\n */\n constructor(navbar, className = '', collapsable = false) {\n super(navbar, 'psv-button ' + className);\n\n /**\n * @override\n * @property {string} id - Unique identifier of the button\n * @property {boolean} enabled\n * @property {boolean} supported\n * @property {boolean} collapsed\n * @property {boolean} active\n * @property {number} width\n */\n this.prop = {\n ...this.prop,\n id : this.constructor.id,\n collapsable: collapsable,\n enabled : true,\n supported : true,\n collapsed : false,\n active : false,\n width : this.container.offsetWidth,\n };\n\n if (this.constructor.icon) {\n this.__setIcon(this.constructor.icon);\n }\n\n if (this.prop.id && this.psv.config.lang[this.prop.id]) {\n this.container.title = this.psv.config.lang[this.prop.id];\n }\n\n this.container.addEventListener('click', (e) => {\n if (this.prop.enabled) {\n this.onClick();\n }\n e.stopPropagation();\n });\n }\n\n /**\n * @package\n */\n checkSupported() {\n const supportedOrObject = this.isSupported();\n if (isPlainObject(supportedOrObject)) {\n if (supportedOrObject.initial === false) {\n this.hide();\n this.prop.supported = false;\n }\n\n supportedOrObject.promise.then((supported) => {\n if (!this.prop) {\n return; // the component has been destroyed\n }\n this.prop.supported = supported;\n if (!supported && this.prop.visible) {\n this.hide();\n }\n else if (supported && !this.prop.visible) {\n this.show();\n }\n });\n }\n else if (!supportedOrObject) {\n this.hide();\n this.prop.supported = false;\n }\n }\n\n /**\n * @summary Checks if the button can be displayed\n * @returns {boolean|{initial: boolean, promise: Promise}}\n */\n isSupported() {\n return true;\n }\n\n /**\n * @summary Changes the active state of the button\n * @param {boolean} [active] - forced state\n */\n toggleActive(active) {\n this.prop.active = active !== undefined ? active : !this.prop.active;\n toggleClass(this.container, 'psv-button--active', this.prop.active);\n\n if (this.constructor.iconActive) {\n this.__setIcon(this.prop.active ? this.constructor.iconActive : this.constructor.icon);\n }\n }\n\n /**\n * @override\n */\n show(refresh = true) {\n if (!this.isVisible()) {\n this.prop.visible = true;\n if (!this.prop.collapsed) {\n this.container.style.display = '';\n }\n if (refresh) {\n this.psv.refreshUi(`show button ${this.prop.id}`);\n }\n }\n }\n\n /**\n * @override\n */\n hide(refresh = true) {\n if (this.isVisible()) {\n this.prop.visible = false;\n this.container.style.display = 'none';\n if (refresh) {\n this.psv.refreshUi(`hide button ${this.prop.id}`);\n }\n }\n }\n\n /**\n * @summary Disables the button\n */\n disable() {\n this.container.classList.add('psv-button--disabled');\n this.prop.enabled = false;\n }\n\n /**\n * @summary Enables the button\n */\n enable() {\n this.container.classList.remove('psv-button--disabled');\n this.prop.enabled = true;\n }\n\n /**\n * @summary Collapses the button in the navbar menu\n */\n collapse() {\n this.prop.collapsed = true;\n this.container.style.display = 'none';\n }\n\n /**\n * @summary Uncollapses the button from the navbar menu\n */\n uncollapse() {\n this.prop.collapsed = false;\n if (this.prop.visible) {\n this.container.style.display = '';\n }\n }\n\n /**\n * @summary Set the button icon\n * @param {string} icon SVG\n * @param {HTMLElement} [container] - default is the main button container\n * @private\n */\n __setIcon(icon, container = this.container) {\n if (icon) {\n container.innerHTML = icon;\n // classList not supported on IE11, className is read-only !!!!\n container.querySelector('svg').setAttribute('class', 'psv-button-svg');\n }\n else {\n container.innerHTML = '';\n }\n }\n\n /**\n * @summary Action when the button is clicked\n * @private\n * @abstract\n */\n onClick() {\n throw new PSVError(`onClick not implemented for button \"${this.prop.id}\".`);\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport playActive from '../icons/play-active.svg';\nimport play from '../icons/play.svg';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar autorotate button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class AutorotateButton extends AbstractButton {\n\n static id = 'autorotate';\n static icon = play;\n static iconActive = playActive;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-autorotate-button', true);\n\n this.psv.on(EVENTS.AUTOROTATE, this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.AUTOROTATE, this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case EVENTS.AUTOROTATE: this.toggleActive(e.args[0]); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @description Toggles autorotate\n */\n onClick() {\n this.psv.toggleAutorotate();\n }\n\n}\n","import { addClasses } from '../utils';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar custom button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class CustomButton extends AbstractButton {\n\n /**\n * @param {PSV.components.Navbar} navbar\n * @param {PSV.NavbarCustomButton} config\n */\n constructor(navbar, config) {\n super(navbar, 'psv-custom-button', config.collapsable !== false);\n\n /**\n * @member {Object}\n * @readonly\n * @private\n */\n this.config = config;\n\n if (this.config.id) {\n this.prop.id = this.config.id;\n }\n else {\n this.prop.id = 'psvButton-' + Math.random().toString(36).substr(2, 9);\n }\n\n if (this.config.className) {\n addClasses(this.container, this.config.className);\n }\n\n if (this.config.title) {\n this.container.title = this.config.title;\n }\n\n if (this.config.content) {\n this.container.innerHTML = this.config.content;\n }\n\n this.width = this.container.offsetWidth;\n\n if (this.config.enabled === false) {\n this.disable();\n }\n\n if (this.config.visible === false) {\n this.hide();\n }\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.config;\n\n super.destroy();\n }\n\n /**\n * @override\n * @description Calls user method\n */\n onClick() {\n if (this.config.onClick) {\n this.config.onClick.apply(this.psv);\n }\n }\n\n}\n","import { AbstractButton } from './AbstractButton';\nimport download from '../icons/download.svg';\n\n/**\n * @summary Navigation bar download button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class DownloadButton extends AbstractButton {\n\n static id = 'download';\n static icon = download;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-download-button', true);\n }\n\n /**\n * @override\n * @description Asks the browser to download the panorama source file\n */\n onClick() {\n const link = document.createElement('a');\n link.href = this.psv.config.panorama;\n link.download = this.psv.config.panorama;\n this.psv.container.appendChild(link);\n link.click();\n\n setTimeout(() => {\n this.psv.container.removeChild(link);\n }, 100);\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport fullscreenIn from '../icons/fullscreen-in.svg';\nimport fullscreenOut from '../icons/fullscreen-out.svg';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar fullscreen button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class FullscreenButton extends AbstractButton {\n\n static id = 'fullscreen';\n static icon = fullscreenIn;\n static iconActive = fullscreenOut;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-fullscreen-button');\n\n this.psv.on(EVENTS.FULLSCREEN_UPDATED, this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.FULLSCREEN_UPDATED, this);\n\n super.destroy();\n }\n\n /**\n * Handle events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case EVENTS.FULLSCREEN_UPDATED: this.toggleActive(e.args[0]); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @description Toggles fullscreen\n */\n onClick() {\n this.psv.toggleFullscreen();\n }\n\n}\n","import { EVENTS, IDS } from '../data/constants';\nimport menuIcon from '../icons/menu.svg';\nimport { dasherize, getClosest } from '../utils';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar menu button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class MenuButton extends AbstractButton {\n\n static id = 'menu';\n static icon = menuIcon;\n\n /**\n * @summary Property name added to buttons list\n * @type {string}\n * @constant\n */\n static BUTTON_DATA = 'psvButton';\n\n /**\n * @summary Menu template\n * @param {AbstractButton[]} buttons\n * @param {PSV.Viewer} psv\n * @param {string} dataKey\n * @returns {string}\n */\n static MENU_TEMPLATE = (buttons, psv, dataKey) => `\n
\n

${menuIcon} ${psv.config.lang.menu}

\n
    \n ${buttons.map(button => `\n
  • \n ${button.container.innerHTML}\n ${button.container.title}\n
  • \n `).join('')}\n
\n
\n`;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-menu-button');\n\n this.psv.on(EVENTS.OPEN_PANEL, this);\n this.psv.on(EVENTS.CLOSE_PANEL, this);\n\n this.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.OPEN_PANEL, this);\n this.psv.off(EVENTS.CLOSE_PANEL, this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case EVENTS.OPEN_PANEL: this.toggleActive(e.args[0] === IDS.MENU); break;\n case EVENTS.CLOSE_PANEL: this.toggleActive(false); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n */\n hide(refresh) {\n super.hide(refresh);\n this.__hideMenu();\n }\n\n /**\n * @override\n */\n show(refresh) {\n super.show(refresh);\n\n if (this.prop.active) {\n this.__showMenu();\n }\n }\n\n /**\n * @override\n * @description Toggles menu\n */\n onClick() {\n if (this.prop.active) {\n this.__hideMenu();\n }\n else {\n this.__showMenu();\n }\n }\n\n __showMenu() {\n this.psv.panel.show({\n id : IDS.MENU,\n content : MenuButton.MENU_TEMPLATE(this.parent.collapsed, this.psv, dasherize(MenuButton.BUTTON_DATA)),\n noMargin : true,\n clickHandler: (e) => {\n const li = e.target ? getClosest(e.target, 'li') : undefined;\n const buttonId = li ? li.dataset[MenuButton.BUTTON_DATA] : undefined;\n\n if (buttonId) {\n this.parent.getButton(buttonId).onClick();\n this.__hideMenu();\n }\n },\n });\n }\n\n __hideMenu() {\n if (this.psv.panel) {\n this.psv.panel.hide(IDS.MENU);\n }\n }\n\n}\n","import { PSVError } from '../PSVError';\n\n/**\n * @summary General information about the system\n * @constant\n * @memberOf PSV\n * @property {boolean} loaded - Indicates if the system has been loaded yet\n * @property {Function} load - Loads the system if not already loaded\n * @property {number} pixelRatio\n * @property {boolean} isWebGLSupported\n * @property {number} maxCanvasWidth\n * @property {string} mouseWheelEvent\n * @property {string} fullscreenEvent\n * @property {Function} getMaxCanvasWidth - Returns the max width of a canvas allowed by the browser\n * @property {Promise} isTouchEnabled\n */\nexport const SYSTEM = {\n loaded : false,\n pixelRatio : 1,\n isWebGLSupported: false,\n isTouchEnabled : null,\n maxTextureWidth : 0,\n mouseWheelEvent : null,\n fullscreenEvent : null,\n};\n\n/**\n * @summary Loads the system if not already loaded\n */\nSYSTEM.load = () => {\n if (!SYSTEM.loaded) {\n const ctx = getWebGLCtx();\n\n SYSTEM.loaded = true;\n SYSTEM.pixelRatio = window.devicePixelRatio || 1;\n SYSTEM.isWebGLSupported = ctx != null;\n SYSTEM.isTouchEnabled = isTouchEnabled();\n SYSTEM.maxTextureWidth = getMaxTextureWidth(ctx);\n SYSTEM.mouseWheelEvent = getMouseWheelEvent();\n SYSTEM.fullscreenEvent = getFullscreenEvent();\n }\n};\n\nlet maxCanvasWidth = null;\nSYSTEM.getMaxCanvasWidth = () => {\n if (maxCanvasWidth === null) {\n maxCanvasWidth = getMaxCanvasWidth(SYSTEM.maxTextureWidth);\n }\n return maxCanvasWidth;\n};\n\n/**\n * @summary Tries to return a canvas webgl context\n * @returns {WebGLRenderingContext}\n * @private\n */\nfunction getWebGLCtx() {\n const canvas = document.createElement('canvas');\n const names = ['webgl', 'experimental-webgl', 'moz-webgl', 'webkit-3d'];\n let context = null;\n\n if (!canvas.getContext) {\n return null;\n }\n\n if (names.some((name) => {\n try {\n context = canvas.getContext(name);\n return context !== null;\n }\n catch (e) {\n return false;\n }\n })) {\n return context;\n }\n else {\n return null;\n }\n}\n\n/**\n * @summary Detects if the user is using a touch screen\n * @returns {Promise}\n * @private\n */\nfunction isTouchEnabled() {\n return new Promise((resolve) => {\n const listener = (e) => {\n if (e) {\n resolve(true);\n }\n else {\n resolve(false);\n }\n\n window.removeEventListener('touchstart', listener);\n };\n\n window.addEventListener('touchstart', listener, false);\n\n // after 10 secs auto-reject the promise\n setTimeout(listener, 10000);\n });\n}\n\n/**\n * @summary Gets max texture width in WebGL context\n * @returns {number}\n * @private\n */\nfunction getMaxTextureWidth(ctx) {\n if (ctx !== null) {\n return ctx.getParameter(ctx.MAX_TEXTURE_SIZE);\n }\n else {\n return 0;\n }\n}\n\n/**\n * @summary Gets max canvas width supported by the browser.\n * We only test powers of 2 and height = width / 2 because that's what we need to generate WebGL textures\n * @param maxWidth\n * @return {number}\n * @private\n */\nfunction getMaxCanvasWidth(maxWidth) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n canvas.width = maxWidth;\n canvas.height = maxWidth / 2;\n\n while (canvas.width > 1024) {\n ctx.fillStyle = 'white';\n ctx.fillRect(0, 0, 1, 1);\n\n try {\n if (ctx.getImageData(0, 0, 1, 1).data[0] === 255) {\n return canvas.width;\n }\n }\n catch (e) {\n // continue\n }\n\n canvas.width /= 2;\n canvas.height /= 2;\n }\n\n throw new PSVError('Unable to detect system capabilities');\n}\n\n/**\n * @summary Gets the event name for mouse wheel\n * @returns {string}\n * @private\n */\nfunction getMouseWheelEvent() {\n if ('onwheel' in document.createElement('div')) { // Modern browsers support \"wheel\"\n return 'wheel';\n }\n else if (document.onmousewheel !== undefined) { // Webkit and IE support at least \"mousewheel\"\n return 'mousewheel';\n }\n else { // let's assume that remaining browsers are older Firefox\n return 'DOMMouseScroll';\n }\n}\n\n/**\n * @summary Map between fullsceen method and fullscreen event name\n * @type {Object}\n * @readonly\n * @private\n */\nconst FULLSCREEN_EVT_MAP = {\n exitFullscreen : 'fullscreenchange',\n webkitExitFullscreen: 'webkitfullscreenchange',\n mozCancelFullScreen : 'mozfullscreenchange',\n msExitFullscreen : 'MSFullscreenChange',\n};\n\n\n/**\n * @summary Gets the event name for fullscreen\n * @returns {string}\n * @private\n */\nfunction getFullscreenEvent() {\n const validExits = Object.keys(FULLSCREEN_EVT_MAP).filter(exit => exit in document);\n\n if (validExits.length) {\n return FULLSCREEN_EVT_MAP[validExits[0]];\n }\n else {\n return null;\n }\n}\n","import { Animation } from '../Animation';\nimport { SYSTEM } from '../data/system';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar zoom button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class AbstractZoomButton extends AbstractButton {\n\n /**\n * @param {PSV.components.Navbar} navbar\n * @param {number} value\n */\n constructor(navbar, value) {\n super(navbar, 'psv-button--hover-scale psv-zoom-button');\n\n /**\n * @override\n * @property {number} value\n * @property {boolean} buttondown\n * @property {*} longPressTimeout\n * @property {PSV.Animation} longPressAnimation\n */\n this.prop = {\n ...this.prop,\n value : value,\n buttondown : false,\n longPressTimeout : null,\n longPressAnimation: null,\n };\n\n this.container.addEventListener('mousedown', this);\n this.psv.container.addEventListener('mouseup', this);\n this.psv.container.addEventListener('touchend', this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.__onMouseUp();\n\n this.psv.container.removeEventListener('mouseup', this);\n this.psv.container.removeEventListener('touchend', this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'mousedown': this.__onMouseDown(); break;\n case 'mouseup': this.__onMouseUp(); break;\n case 'touchend': this.__onMouseUp(); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n */\n isSupported() {\n return { initial: true, promise: SYSTEM.isTouchEnabled.then(enabled => !enabled) };\n }\n\n /**\n * @override\n */\n onClick() {\n // nothing\n }\n\n /**\n * @summary Handles click events\n * @description Zooms in and register long press timer\n * @private\n */\n __onMouseDown() {\n if (!this.prop.enabled) {\n return;\n }\n\n this.prop.buttondown = true;\n this.prop.longPressTimeout = setTimeout(() => this.__startLongPressInterval(), 100);\n }\n\n /**\n * @summary Continues zooming as long as the user presses the button\n * @private\n */\n __startLongPressInterval() {\n if (!this.prop.buttondown) {\n return;\n }\n\n const end = this.prop.value < 0 ? 0 : 100;\n\n this.prop.longPressAnimation = new Animation({\n properties: {\n zoom: { start: this.psv.prop.zoomLvl, end: end },\n },\n duration : 1500 * Math.abs(this.psv.prop.zoomLvl - end) / 100,\n easing : 'linear',\n onTick : (properties) => {\n this.psv.zoom(properties.zoom);\n },\n })\n .catch(() => {}); // ignore cancellation\n }\n\n /**\n * @summary Handles mouse up events\n * @private\n */\n __onMouseUp() {\n if (!this.prop.enabled || !this.prop.buttondown) {\n return;\n }\n\n if (this.prop.longPressAnimation) {\n this.prop.longPressAnimation.cancel();\n this.prop.longPressAnimation = null;\n }\n else {\n this.psv.zoom(this.psv.prop.zoomLvl + this.prop.value * this.psv.config.zoomButtonIncrement);\n }\n\n if (this.prop.longPressTimeout) {\n clearTimeout(this.prop.longPressTimeout);\n }\n\n this.prop.buttondown = false;\n }\n\n}\n","import { AbstractZoomButton } from './AbstractZoomButton';\nimport zoomIn from '../icons/zoom-in.svg';\n\n/**\n * @summary Navigation bar zoom-in button class\n * @extends PSV.buttons.AbstractZoomButton\n * @memberof PSV.buttons\n */\nexport class ZoomInButton extends AbstractZoomButton {\n\n static id = 'zoomIn';\n static icon = zoomIn;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 1);\n }\n\n}\n","import { AbstractZoomButton } from './AbstractZoomButton';\nimport zoomOut from '../icons/zoom-out.svg';\n\n/**\n * @summary Navigation bar zoom-out button class\n * @extends PSV.buttons.AbstractZoomButton\n * @memberof PSV.buttons\n */\nexport class ZoomOutButton extends AbstractZoomButton {\n\n static id = 'zoomOut';\n static icon = zoomOut;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, -1);\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport { getStyle } from '../utils';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar zoom button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class ZoomRangeButton extends AbstractButton {\n\n static id = 'zoomRange';\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-zoom-range');\n\n /**\n * @override\n * @property {boolean} mousedown\n * @property {number} mediaMinWidth\n */\n this.prop = {\n ...this.prop,\n mousedown : false,\n mediaMinWidth: 0,\n };\n\n /**\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.zoomRange = document.createElement('div');\n this.zoomRange.className = 'psv-zoom-range-line';\n this.container.appendChild(this.zoomRange);\n\n /**\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.zoomValue = document.createElement('div');\n this.zoomValue.className = 'psv-zoom-range-handle';\n this.zoomRange.appendChild(this.zoomValue);\n\n this.prop.mediaMinWidth = parseInt(getStyle(this.container, 'maxWidth'), 10);\n\n this.container.addEventListener('mousedown', this);\n this.container.addEventListener('touchstart', this);\n this.psv.container.addEventListener('mousemove', this);\n this.psv.container.addEventListener('touchmove', this);\n this.psv.container.addEventListener('mouseup', this);\n this.psv.container.addEventListener('touchend', this);\n\n this.psv.on(EVENTS.ZOOM_UPDATED, this);\n\n if (this.psv.prop.ready) {\n this.__moveZoomValue(this.psv.prop.zoomLvl);\n }\n else {\n this.psv.once(EVENTS.READY, this);\n }\n\n this.refreshUi();\n }\n\n /**\n * @override\n */\n destroy() {\n this.__stopZoomChange();\n\n this.psv.container.removeEventListener('mousemove', this);\n this.psv.container.removeEventListener('touchmove', this);\n this.psv.container.removeEventListener('mouseup', this);\n this.psv.container.removeEventListener('touchend', this);\n\n delete this.zoomRange;\n delete this.zoomValue;\n\n this.psv.off(EVENTS.ZOOM_UPDATED, this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'mousedown': this.__initZoomChangeWithMouse(e); break;\n case 'touchstart': this.__initZoomChangeByTouch(e); break;\n case 'mousemove': this.__changeZoomWithMouse(e); break;\n case 'touchmove': this.__changeZoomByTouch(e); break;\n case 'mouseup': this.__stopZoomChange(e); break;\n case 'touchend': this.__stopZoomChange(e); break;\n case EVENTS.ZOOM_UPDATED: this.__moveZoomValue(e.args[0]); break;\n case EVENTS.READY: this.__moveZoomValue(this.psv.prop.zoomLvl); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n */\n isSupported() {\n return { initial: true, promise: SYSTEM.isTouchEnabled.then(enabled => !enabled) };\n }\n\n /**\n * @override\n */\n refreshUi() {\n if (this.prop.supported) {\n if (this.psv.prop.size.width <= this.prop.mediaMinWidth && this.prop.visible) {\n this.hide();\n }\n else if (this.psv.prop.size.width > this.prop.mediaMinWidth && !this.prop.visible) {\n this.show();\n }\n }\n }\n\n /**\n * @override\n */\n onClick() {\n // nothing\n }\n\n /**\n * @summary Moves the zoom cursor\n * @param {number} level\n * @private\n */\n __moveZoomValue(level) {\n this.zoomValue.style.left = (level / 100 * this.zoomRange.offsetWidth - this.zoomValue.offsetWidth / 2) + 'px';\n }\n\n /**\n * @summary Handles mouse down events\n * @param {MouseEvent} evt\n * @private\n */\n __initZoomChangeWithMouse(evt) {\n if (!this.prop.enabled) {\n return;\n }\n\n this.prop.mousedown = true;\n this.__changeZoom(evt.clientX);\n }\n\n /**\n * @summary Handles touch events\n * @param {TouchEvent} evt\n * @private\n */\n __initZoomChangeByTouch(evt) {\n if (!this.prop.enabled) {\n return;\n }\n\n this.prop.mousedown = true;\n this.__changeZoom(evt.changedTouches[0].clientX);\n }\n\n /**\n * @summary Handles mouse up events\n * @private\n */\n __stopZoomChange() {\n if (!this.prop.enabled) {\n return;\n }\n\n this.prop.mousedown = false;\n this.prop.buttondown = false;\n }\n\n /**\n * @summary Handles mouse move events\n * @param {MouseEvent} evt\n * @private\n */\n __changeZoomWithMouse(evt) {\n if (!this.prop.enabled || !this.prop.mousedown) {\n return;\n }\n\n evt.preventDefault();\n this.__changeZoom(evt.clientX);\n }\n\n /**\n * @summary Handles touch move events\n * @param {TouchEvent} evt\n * @private\n */\n __changeZoomByTouch(evt) {\n if (!this.prop.enabled || !this.prop.mousedown) {\n return;\n }\n this.__changeZoom(evt.changedTouches[0].clientX);\n }\n\n /**\n * @summary Zoom change\n * @param {number} x - mouse/touch position\n * @private\n */\n __changeZoom(x) {\n const userInput = x - this.zoomRange.getBoundingClientRect().left;\n const zoomLevel = userInput / this.zoomRange.offsetWidth * 100;\n this.psv.zoom(zoomLevel);\n }\n\n}\n","import { PSVError } from '../PSVError';\nimport { bound, clone, deepmerge, each, logWarn, parseAngle, parseSpeed } from '../utils';\nimport { ACTIONS } from './constants';\n\n/**\n * @summary Default options\n * @type {PSV.Options}\n * @memberOf PSV\n * @constant\n */\nexport const DEFAULTS = {\n panorama : null,\n container : null,\n caption : null,\n loadingImg : null,\n loadingTxt : 'Loading...',\n size : null,\n fisheye : false,\n minFov : 30,\n maxFov : 90,\n defaultZoomLvl : 50,\n defaultLong : 0,\n defaultLat : 0,\n sphereCorrection : null,\n sphereCorrectionReorder: false,\n moveSpeed : 1,\n zoomButtonIncrement: 2,\n autorotateDelay : null,\n autorotateSpeed : '2rpm',\n autorotateLat : null,\n moveInertia : true,\n mousewheel : true,\n mousewheelSpeed : 1,\n mousemove : true,\n captureCursor : false,\n mousewheelCtrlKey : false,\n touchmoveTwoFingers: false,\n useXmpData : true,\n panoData : null,\n canvasBackground : '#000',\n withCredentials : false,\n navbar : [\n 'autorotate',\n 'zoomOut',\n 'zoomRange',\n 'zoomIn',\n 'download',\n 'caption',\n 'fullscreen',\n ],\n lang : {\n autorotate: 'Automatic rotation',\n zoom : 'Zoom',\n zoomOut : 'Zoom out',\n zoomIn : 'Zoom in',\n download : 'Download',\n fullscreen: 'Fullscreen',\n menu : 'Menu',\n twoFingers: 'Use two fingers to navigate',\n ctrlZoom : 'Use ctrl + scroll to zoom the image',\n loadError : 'The panorama can\\'t be loaded',\n },\n keyboard : {\n 'ArrowUp' : ACTIONS.ROTATE_LAT_UP,\n 'ArrowDown' : ACTIONS.ROTATE_LAT_DOWN,\n 'ArrowRight': ACTIONS.ROTATE_LONG_RIGHT,\n 'ArrowLeft' : ACTIONS.ROTATE_LONG_LEFT,\n 'PageUp' : ACTIONS.ZOOM_IN,\n 'PageDown' : ACTIONS.ZOOM_OUT,\n '+' : ACTIONS.ZOOM_IN,\n '-' : ACTIONS.ZOOM_OUT,\n ' ' : ACTIONS.TOGGLE_AUTOROTATE,\n },\n plugins : [],\n};\n\n/**\n * @summary List of unmodifiable options and their error messages\n * @private\n */\nexport const READONLY_OPTIONS = {\n panorama : 'Use setPanorama method to change the panorama',\n panoData : 'Use setPanorama method to change the panorama',\n container: 'Cannot change viewer container',\n plugins : 'Cannot change plugins',\n};\n\n/**\n * @summary Parsers/validators for each option\n * @private\n */\nexport const CONFIG_PARSERS = {\n container : (container) => {\n if (!container) {\n throw new PSVError('No value given for container.');\n }\n return container;\n },\n defaultLong : (defaultLong) => {\n // defaultLat is between 0 and PI\n return parseAngle(defaultLong);\n },\n defaultLat : (defaultLat) => {\n // defaultLat is between -PI/2 and PI/2\n return parseAngle(defaultLat, true);\n },\n minFov : (minFov, config) => {\n // minFov and maxFov must be ordered\n if (config.maxFov < minFov) {\n logWarn('maxFov cannot be lower than minFov');\n // eslint-disable-next-line no-param-reassign\n minFov = config.maxFov;\n }\n // minFov between 1 and 179\n return bound(minFov, 1, 179);\n },\n maxFov : (maxFov, config) => {\n // minFov and maxFov must be ordered\n if (maxFov < config.minFov) {\n // eslint-disable-next-line no-param-reassign\n maxFov = config.minFov;\n }\n // maxFov between 1 and 179\n return bound(maxFov, 1, 179);\n },\n lang : (lang) => {\n if (Array.isArray(lang.twoFingers)) {\n logWarn('lang.twoFingers must not be an array');\n lang.twoFingers = lang.twoFingers[0];\n }\n return {\n ...DEFAULTS.lang,\n ...lang,\n };\n },\n keyboard : (keyboard) => {\n // keyboard=true becomes the default map\n if (keyboard === true) {\n return clone(DEFAULTS.keyboard);\n }\n return keyboard;\n },\n autorotateLat : (autorotateLat, config) => {\n // default autorotateLat is defaultLat\n if (autorotateLat === null) {\n return parseAngle(config.defaultLat, true);\n }\n // autorotateLat is between -PI/2 and PI/2\n else {\n return parseAngle(autorotateLat, true);\n }\n },\n autorotateSpeed: (autorotateSpeed) => {\n return parseSpeed(autorotateSpeed);\n },\n fisheye : (fisheye) => {\n // translate boolean fisheye to amount\n if (fisheye === true) {\n return 1;\n }\n else if (fisheye === false) {\n return 0;\n }\n return fisheye;\n },\n plugins : (plugins) => {\n return plugins\n .map((plugin) => {\n if (Array.isArray(plugin)) {\n return plugin;\n }\n else {\n return [plugin];\n }\n })\n .filter(plugin => !!plugin[0]);\n },\n};\n\n/**\n * @summary Merge user config with default config and performs validation\n * @param {PSV.Options} options\n * @returns {PSV.Options}\n * @memberOf PSV\n * @private\n */\nexport function getConfig(options) {\n const tempConfig = clone(DEFAULTS);\n deepmerge(tempConfig, options);\n\n const config = {};\n\n each(tempConfig, (value, key) => {\n if (!Object.prototype.hasOwnProperty.call(DEFAULTS, key)) {\n throw new PSVError(`Unknown option ${key}`);\n }\n\n if (CONFIG_PARSERS[key]) {\n config[key] = CONFIG_PARSERS[key](value, tempConfig);\n }\n else {\n config[key] = value;\n }\n });\n\n return config;\n}\n","import { AbstractButton } from './AbstractButton';\nimport { EVENTS } from '../data/constants';\nimport info from '../icons/info.svg';\n\n/**\n * @summary Navigation bar caption button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class CaptionButton extends AbstractButton {\n\n static id = 'caption';\n static icon = info;\n\n /**\n * @param {PSV.components.NavbarCaption} caption\n */\n constructor(caption) {\n super(caption, 'psv-button--hover-scale psv-caption-button');\n\n this.psv.on(EVENTS.HIDE_NOTIFICATION, this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.HIDE_NOTIFICATION, this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case EVENTS.HIDE_NOTIFICATION: this.toggleActive(false); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @description Toggles caption\n */\n onClick() {\n if (this.psv.notification.prop.visible) {\n this.psv.notification.hide();\n }\n else {\n this.psv.notification.show(this.parent.prop.caption);\n this.toggleActive(true);\n }\n }\n\n}\n","import { CaptionButton } from '../buttons/CaptionButton';\nimport { AbstractComponent } from './AbstractComponent';\n\n/**\n * @summary Navbar caption class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class NavbarCaption extends AbstractComponent {\n\n static id = 'caption';\n\n /**\n * @param {PSV.components.Navbar} navbar\n * @param {string} caption\n */\n constructor(navbar, caption) {\n super(navbar, 'psv-caption');\n\n /**\n * @member {PSV.buttons.CaptionButton}\n * @readonly\n * @private\n */\n this.button = new CaptionButton(this);\n this.button.hide();\n\n /**\n * @override\n * @property {string} id\n * @property {boolean} collapsable\n * @property {number} width\n * @property {string} caption\n * @property {boolean} contentVisible - if the content is visible in the navbar\n * @property {number} contentWidth - with of the caption content\n */\n this.prop = {\n ...this.prop,\n id : this.constructor.id,\n collapsable : false,\n width : this.button.prop.width,\n caption : '',\n contentVisible: true,\n contentWidth : 0,\n };\n\n /**\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.content = document.createElement('div');\n this.content.className = 'psv-caption-content';\n this.container.appendChild(this.content);\n\n this.setCaption(caption);\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.button;\n delete this.content;\n\n super.destroy();\n }\n\n /**\n * @summary Sets the bar caption\n * @param {string} html\n */\n setCaption(html) {\n this.prop.caption = html || '';\n this.content.innerHTML = this.prop.caption;\n\n if (html) {\n this.show(false);\n\n this.content.style.display = '';\n this.prop.contentWidth = this.content.offsetWidth;\n\n this.refreshUi();\n }\n else {\n this.hide();\n }\n }\n\n /**\n * @summary Toggles content and icon depending on available space\n * @private\n */\n refreshUi() {\n const availableWidth = this.container.offsetWidth;\n if (availableWidth >= this.prop.contentWidth && !this.prop.contentVisible) {\n this.content.style.display = '';\n this.prop.contentVisible = true;\n this.button.hide(false);\n }\n else if (availableWidth < this.prop.contentWidth && this.prop.contentVisible) {\n this.content.style.display = 'none';\n this.prop.contentVisible = false;\n this.button.show(false);\n }\n }\n\n}\n","import { AutorotateButton } from '../buttons/AutorotateButton';\nimport { CustomButton } from '../buttons/CustomButton';\nimport { DownloadButton } from '../buttons/DownloadButton';\nimport { FullscreenButton } from '../buttons/FullscreenButton';\nimport { MenuButton } from '../buttons/MenuButton';\nimport { ZoomInButton } from '../buttons/ZoomInButton';\nimport { ZoomOutButton } from '../buttons/ZoomOutButton';\nimport { ZoomRangeButton } from '../buttons/ZoomRangeButton';\nimport { DEFAULTS } from '../data/config';\nimport { PSVError } from '../PSVError';\nimport { clone, logWarn } from '../utils';\nimport { AbstractComponent } from './AbstractComponent';\nimport { NavbarCaption } from './NavbarCaption';\n\n/**\n * @summary List of available buttons\n * @type {Object>}\n * @private\n */\nconst AVAILABLE_BUTTONS = {};\n\n/**\n * @summary Register a new button available for all viewers\n * @param {Class} button\n * @memberOf PSV\n */\nexport function registerButton(button) {\n if (!button.id) {\n throw new PSVError('Button ID is required');\n }\n\n AVAILABLE_BUTTONS[button.id] = button;\n}\n\n[\n AutorotateButton,\n ZoomInButton,\n ZoomRangeButton,\n ZoomOutButton,\n DownloadButton,\n FullscreenButton,\n].forEach(registerButton);\n\n/**\n * @summary Navigation bar class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Navbar extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-navbar');\n\n /**\n * @summary List of buttons of the navbar\n * @member {PSV.buttons.AbstractButton[]}\n * @override\n */\n this.children = [];\n\n /**\n * @summary List of collapsed buttons\n * @member {PSV.buttons.AbstractButton[]}\n * @private\n */\n this.collapsed = [];\n }\n\n /**\n * @summary Change the buttons visible on the navbar\n * @param {string|Array} buttons\n */\n setButtons(buttons) {\n this.children.slice().forEach(item => item.destroy());\n this.children.length = 0;\n\n /* eslint-disable no-new */\n this.__cleanButtons(buttons).forEach((button) => {\n if (typeof button === 'object') {\n new CustomButton(this, button);\n }\n else if (AVAILABLE_BUTTONS[button]) {\n new AVAILABLE_BUTTONS[button](this);\n }\n else if (button === 'caption') {\n new NavbarCaption(this, this.psv.config.caption);\n }\n else if (button === 'zoom') {\n new ZoomOutButton(this);\n new ZoomRangeButton(this);\n new ZoomInButton(this);\n }\n else {\n throw new PSVError('Unknown button ' + button);\n }\n });\n\n new MenuButton(this);\n /* eslint-enable no-new */\n\n this.children.forEach((item) => {\n if (typeof item.checkSupported === 'function') {\n item.checkSupported();\n }\n });\n }\n\n /**\n * @summary Sets the bar caption\n * @param {string} html\n */\n setCaption(html) {\n const caption = this.getButton('caption', false);\n\n if (!caption) {\n throw new PSVError('Cannot set caption, the navbar caption container is not initialized.');\n }\n\n caption.setCaption(html);\n }\n\n /**\n * @summary Returns a button by its identifier\n * @param {string} id\n * @param {boolean} [warnNotFound=true]\n * @returns {PSV.buttons.AbstractButton}\n */\n getButton(id, warnNotFound = true) {\n let button = null;\n\n this.children.some((item) => {\n if (item.prop.id === id) {\n button = item;\n return true;\n }\n else {\n return false;\n }\n });\n\n if (!button && warnNotFound) {\n logWarn(`button \"${id}\" not found in the navbar`);\n }\n\n return button;\n }\n\n /**\n * @summary Shows the navbar\n */\n show() {\n this.container.classList.add('psv-navbar--open');\n this.prop.visible = true;\n }\n\n /**\n * @summary Hides the navbar\n */\n hide() {\n this.container.classList.remove('psv-navbar--open');\n this.prop.visible = false;\n }\n\n /**\n * @override\n */\n refreshUi() {\n super.refreshUi();\n\n if (this.psv.prop.uiRefresh === true) {\n const availableWidth = this.container.offsetWidth;\n\n let totalWidth = 0;\n const visibleButtons = [];\n const collapsableButtons = [];\n\n this.children.forEach((item) => {\n if (item.prop.visible) {\n totalWidth += item.prop.width;\n visibleButtons.push(item);\n if (item.prop.collapsable) {\n collapsableButtons.push(item);\n }\n }\n });\n\n if (!visibleButtons.length) {\n return;\n }\n\n if (availableWidth < totalWidth && collapsableButtons.length > 0) {\n collapsableButtons.forEach(item => item.collapse());\n this.collapsed = collapsableButtons;\n\n this.getButton(MenuButton.id).show(false);\n }\n else if (availableWidth >= totalWidth && this.collapsed.length > 0) {\n this.collapsed.forEach(item => item.uncollapse());\n this.collapsed = [];\n\n this.getButton(MenuButton.id).hide(false);\n }\n\n const caption = this.getButton(NavbarCaption.id, false);\n if (caption) {\n caption.refreshUi();\n }\n }\n }\n\n /**\n * @summary Ensure the buttons configuration is correct\n * @private\n */\n __cleanButtons(buttons) {\n // true becomes the default array\n if (buttons === true) {\n return clone(DEFAULTS.navbar);\n }\n // can be a space or coma separated list\n else if (typeof buttons === 'string') {\n return buttons.split(/[ ,]/);\n }\n else {\n return buttons || [];\n }\n }\n\n}\n","import { EventEmitter } from 'uevent';\n\n/**\n * @namespace PSV.plugins\n */\n\n/**\n * @summary Base plugins class\n * @memberof PSV.plugins\n * @abstract\n */\nexport class AbstractPlugin extends EventEmitter {\n\n /**\n * @summary Unique identifier of the plugin\n * @member {string}\n * @readonly\n * @static\n */\n static id = null;\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super();\n\n /**\n * @summary Reference to main controller\n * @type {PSV.Viewer}\n * @readonly\n */\n this.psv = psv;\n }\n\n /**\n * @summary Destroys the plugin\n * @package\n */\n destroy() {\n delete this.psv;\n }\n\n}\n","import { SYSTEM } from '../data/system';\nimport { bound, getStyle } from '../utils';\nimport { AbstractComponent } from './AbstractComponent';\n\n/**\n * @summary Loader class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Loader extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-loader-container');\n\n /**\n * @summary Inner container for vertical center\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.loader = document.createElement('div');\n this.loader.className = 'psv-loader';\n this.container.appendChild(this.loader);\n\n /**\n * @summary Animation canvas\n * @member {HTMLCanvasElement}\n * @readonly\n * @private\n */\n this.canvas = document.createElement('canvas');\n this.canvas.className = 'psv-loader-canvas';\n\n this.canvas.width = this.loader.clientWidth * SYSTEM.pixelRatio;\n this.canvas.height = this.loader.clientWidth * SYSTEM.pixelRatio;\n this.loader.appendChild(this.canvas);\n\n /**\n * @override\n * @property {number} thickness\n * @property {string} current\n */\n this.prop = {\n ...this.prop,\n tickness: (this.loader.offsetWidth - this.loader.clientWidth) / 2 * SYSTEM.pixelRatio,\n current : null,\n };\n\n this.refreshUi();\n this.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.loader;\n delete this.canvas;\n\n super.destroy();\n }\n\n /**\n * @override\n */\n refreshUi() {\n if (this.prop.current !== (this.psv.config.loadingImg || this.psv.config.loadingTxt)) {\n if (this.prop.current) {\n this.loader.removeChild(this.loader.lastChild);\n }\n\n let inner;\n if (this.psv.config.loadingImg) {\n inner = document.createElement('img');\n inner.className = 'psv-loader-image';\n inner.src = this.psv.config.loadingImg;\n }\n else if (this.psv.config.loadingTxt) {\n inner = document.createElement('div');\n inner.className = 'psv-loader-text';\n inner.innerHTML = this.psv.config.loadingTxt;\n }\n if (inner) {\n const size = Math.round(Math.sqrt(2 * Math.pow((this.canvas.width / 2 - this.prop.tickness / 2) / SYSTEM.pixelRatio, 2)));\n inner.style.maxWidth = size + 'px';\n inner.style.maxHeight = size + 'px';\n this.loader.appendChild(inner);\n }\n\n this.prop.current = this.psv.config.loadingImg || this.psv.config.loadingTxt;\n }\n }\n\n /**\n * @summary Sets the loader progression\n * @param {number} value - from 0 to 100\n */\n setProgress(value) {\n const context = this.canvas.getContext('2d');\n\n context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n context.lineWidth = this.prop.tickness;\n context.strokeStyle = getStyle(this.loader, 'color');\n\n context.beginPath();\n context.arc(\n this.canvas.width / 2, this.canvas.height / 2,\n this.canvas.width / 2 - this.prop.tickness / 2,\n -Math.PI / 2, bound(value, 0, 100) / 100 * 2 * Math.PI - Math.PI / 2\n );\n context.stroke();\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport { AbstractComponent } from './AbstractComponent';\n\n/**\n * @summary Notification class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Notification extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-notification');\n\n /**\n * @override\n * @property {*} timeout\n */\n this.prop = {\n ...this.prop,\n visible: false,\n timeout: null,\n };\n\n /**\n * Notification content\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.content = document.createElement('div');\n this.content.className = 'psv-notification-content';\n this.container.appendChild(this.content);\n\n this.content.addEventListener('click', () => this.hide());\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.content;\n\n super.destroy();\n }\n\n /**\n * @summary Displays a notification on the viewer\n * @param {Object|string} config\n * @param {string} config.content\n * @param {number} [config.timeout]\n * @fires PSV.show-notification\n *\n * @example\n * viewer.showNotification({ content: 'Hello world', timeout: 5000 })\n * @example\n * viewer.showNotification('Hello world')\n */\n show(config) {\n if (this.prop.timeout) {\n clearTimeout(this.prop.timeout);\n this.prop.timeout = null;\n }\n\n if (typeof config === 'string') {\n config = { content: config }; // eslint-disable-line no-param-reassign\n }\n\n this.content.innerHTML = config.content;\n this.prop.visible = true;\n\n this.container.classList.add('psv-notification--visible');\n\n this.psv.trigger(EVENTS.SHOW_NOTIFICATION);\n\n if (config.timeout) {\n this.prop.timeout = setTimeout(() => this.hide(), config.timeout);\n }\n }\n\n /**\n * @summary Hides the notification\n * @fires PSV.hide-notification\n */\n hide() {\n if (this.prop.visible) {\n this.container.classList.remove('psv-notification--visible');\n\n this.prop.visible = false;\n\n this.psv.trigger(EVENTS.HIDE_NOTIFICATION);\n }\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport { AbstractComponent } from './AbstractComponent';\nimport { PSVError } from '../PSVError';\n\n/**\n * @summary Overlay class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Overlay extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-overlay');\n\n /**\n * @override\n * @property {string} contentId\n * @property {boolean} dissmisable\n */\n this.prop = {\n ...this.prop,\n contentId : undefined,\n dissmisable: true,\n };\n\n /**\n * Image container\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.image = document.createElement('div');\n this.image.className = 'psv-overlay-image';\n this.container.appendChild(this.image);\n\n /**\n * Text container\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.text = document.createElement('div');\n this.text.className = 'psv-overlay-text';\n this.container.appendChild(this.text);\n\n /**\n * Subtext container\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.subtext = document.createElement('div');\n this.subtext.className = 'psv-overlay-subtext';\n this.container.appendChild(this.subtext);\n\n this.container.addEventListener('mouseup', (e) => {\n e.stopPropagation();\n if (this.prop.dissmisable) {\n this.hide();\n }\n }, true);\n\n super.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.image;\n delete this.text;\n delete this.subtext;\n\n super.destroy();\n }\n\n /**\n * @override\n * @param {string} [id]\n */\n isVisible(id) {\n return this.prop.visible && (!id || !this.prop.contentId || this.prop.contentId === id);\n }\n\n /**\n * @override\n */\n toggle() {\n throw new PSVError('Overlay cannot be toggled');\n }\n\n /**\n * @summary Displays an overlay on the viewer\n * @param {Object|string} config\n * @param {string} [config.id] - unique identifier to use with \"hide\"\n * @param {string} config.image - SVG image/icon displayed above the text\n * @param {string} config.text - main message\n * @param {string} [config.subtext] - secondary message\n * @param {boolean} [config.dissmisable=true] - if the user can hide the overlay by clicking\n * @fires PSV.show-overlay\n */\n show(config) {\n if (typeof config === 'string') {\n config = { text: config }; // eslint-disable-line no-param-reassign\n }\n\n this.prop.contentId = config.id;\n this.prop.dissmisable = config.dissmisable !== false;\n this.image.innerHTML = config.image || '';\n this.text.innerHTML = config.text || '';\n this.subtext.innerHTML = config.subtext || '';\n\n super.show();\n\n this.psv.trigger(EVENTS.SHOW_OVERLAY, config.id);\n }\n\n /**\n * @summary Hides the overlay\n * @param {string} [id]\n * @fires PSV.hide-overlay\n */\n hide(id) {\n if (this.isVisible() && (!id || !this.prop.contentId || this.prop.contentId === id)) {\n const contentId = this.prop.contentId;\n\n super.hide();\n\n this.prop.contentId = undefined;\n\n this.psv.trigger(EVENTS.HIDE_OVERLAY, contentId);\n }\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport { PSVError } from '../PSVError';\nimport { toggleClass } from '../utils';\nimport { AbstractComponent } from './AbstractComponent';\n\n/**\n * @summary Minimum width of the panel\n * @type {number}\n * @constant\n * @private\n */\nconst PANEL_MIN_WIDTH = 200;\n\n/**\n * @summary Panel class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Panel extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-panel');\n\n /**\n * @override\n * @property {string} contentId\n * @property {number} mouseX\n * @property {number} mouseY\n * @property {boolean} mousedown\n * @property {function} clickHandler\n */\n this.prop = {\n ...this.prop,\n visible : false,\n contentId : undefined,\n mouseX : 0,\n mouseY : 0,\n mousedown : false,\n clickHandler: null,\n width : {},\n };\n\n const resizer = document.createElement('div');\n resizer.className = 'psv-panel-resizer';\n this.container.appendChild(resizer);\n\n const closeBtn = document.createElement('div');\n closeBtn.className = 'psv-panel-close-button';\n this.container.appendChild(closeBtn);\n\n /**\n * @summary Content container\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.content = document.createElement('div');\n this.content.className = 'psv-panel-content';\n this.container.appendChild(this.content);\n\n // Stop wheel event bubling from panel\n this.container.addEventListener(SYSTEM.mouseWheelEvent, e => e.stopPropagation());\n\n closeBtn.addEventListener('click', () => this.hide());\n\n // Event for panel resizing + stop bubling\n resizer.addEventListener('mousedown', this);\n resizer.addEventListener('touchstart', this);\n this.psv.container.addEventListener('mouseup', this);\n this.psv.container.addEventListener('touchend', this);\n this.psv.container.addEventListener('mousemove', this);\n this.psv.container.addEventListener('touchmove', this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.container.removeEventListener('mousemove', this);\n this.psv.container.removeEventListener('touchmove', this);\n this.psv.container.removeEventListener('mouseup', this);\n this.psv.container.removeEventListener('touchend', this);\n\n delete this.prop;\n delete this.content;\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'mousedown': this.__onMouseDown(e); break;\n case 'touchstart': this.__onTouchStart(e); break;\n case 'mousemove': this.__onMouseMove(e); break;\n case 'touchmove': this.__onTouchMove(e); break;\n case 'mouseup': this.__onMouseUp(e); break;\n case 'touchend': this.__onMouseUp(e); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @param {string} [id]\n */\n isVisible(id) {\n return this.prop.visible && (!id || !this.prop.contentId || this.prop.contentId === id);\n }\n\n /**\n * @override\n */\n toggle() {\n throw new PSVError('Panel cannot be toggled');\n }\n\n /**\n * @summary Shows the panel\n * @param {string|Object} config\n * @param {string} [config.id] - unique identifier to use with \"hide\" and to store the user desired width\n * @param {string} config.content - HTML content of the panel\n * @param {boolean} [config.noMargin=false] - remove the default margins\n * @param {string} [config.width] - initial width, if not specified the default width will be used\n * @param {Function} [config.clickHandler] - called when the user clicks inside the panel\n * @fires PSV.open-panel\n */\n show(config) {\n if (typeof config === 'string') {\n config = { content: config }; // eslint-disable-line no-param-reassign\n }\n\n this.prop.contentId = config.id;\n this.prop.visible = true;\n\n if (this.prop.clickHandler) {\n this.content.removeEventListener('click', this.prop.clickHandler);\n this.prop.clickHandler = null;\n }\n\n if (config.id && this.prop.width[config.id]) {\n this.container.style.width = this.prop.width[config.id];\n }\n else if (config.width) {\n this.container.style.width = config.width;\n }\n else {\n this.container.style.width = null;\n }\n\n this.content.innerHTML = config.content;\n this.content.scrollTop = 0;\n this.container.classList.add('psv-panel--open');\n\n toggleClass(this.content, 'psv-panel-content--no-margin', config.noMargin === true);\n\n if (config.clickHandler) {\n this.prop.clickHandler = config.clickHandler;\n this.content.addEventListener('click', config.clickHandler);\n }\n\n this.psv.trigger(EVENTS.OPEN_PANEL, config.id);\n }\n\n /**\n * @summary Hides the panel\n * @param {string} [id]\n * @fires PSV.close-panel\n */\n hide(id) {\n if (this.isVisible(id)) {\n const contentId = this.prop.contentId;\n\n this.prop.visible = false;\n this.prop.contentId = undefined;\n\n this.content.innerHTML = null;\n this.container.classList.remove('psv-panel--open');\n\n if (this.prop.clickHandler) {\n this.content.removeEventListener('click', this.prop.clickHandler);\n this.prop.clickHandler = null;\n }\n\n this.psv.trigger(EVENTS.CLOSE_PANEL, contentId);\n }\n }\n\n /**\n * @summary Handles mouse down events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseDown(evt) {\n evt.stopPropagation();\n this.__startResize(evt);\n }\n\n /**\n * @summary Handles touch events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchStart(evt) {\n evt.stopPropagation();\n this.__startResize(evt.changedTouches[0]);\n }\n\n /**\n * @summary Handles mouse up events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseUp(evt) {\n if (this.prop.mousedown) {\n evt.stopPropagation();\n this.prop.mousedown = false;\n this.content.classList.remove('psv-panel-content--no-interaction');\n }\n }\n\n /**\n * @summary Handles mouse move events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseMove(evt) {\n if (this.prop.mousedown) {\n evt.stopPropagation();\n this.__resize(evt);\n }\n }\n\n /**\n * @summary Handles touch move events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchMove(evt) {\n if (this.prop.mousedown) {\n this.__resize(evt.touches[0]);\n }\n }\n\n /**\n * @summary Initializes the panel resize\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __startResize(evt) {\n this.prop.mouseX = evt.clientX;\n this.prop.mouseY = evt.clientY;\n this.prop.mousedown = true;\n this.content.classList.add('psv-panel-content--no-interaction');\n }\n\n /**\n * @summary Resizes the panel\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __resize(evt) {\n const x = evt.clientX;\n const y = evt.clientY;\n const width = Math.max(PANEL_MIN_WIDTH, this.container.offsetWidth - (x - this.prop.mouseX)) + 'px';\n\n if (this.prop.contentId) {\n this.prop.width[this.prop.contentId] = width;\n }\n\n this.container.style.width = width;\n\n this.prop.mouseX = x;\n this.prop.mouseY = y;\n }\n\n}\n","/**\n * @namespace PSV.services\n */\n\n/**\n * @summary Base services class\n * @memberof PSV.services\n * @abstract\n */\nexport class AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n /**\n * @summary Reference to main controller\n * @type {PSV.Viewer}\n * @readonly\n */\n this.psv = psv;\n\n /**\n * @summary Configuration holder\n * @type {PSV.Options}\n * @readonly\n */\n this.config = psv.config;\n\n /**\n * @summary Properties holder\n * @type {Object}\n * @readonly\n */\n this.prop = psv.prop;\n }\n\n /**\n * @summary Destroys the service\n */\n destroy() {\n delete this.psv;\n delete this.config;\n delete this.prop;\n }\n\n}\n","import * as THREE from 'three';\nimport { SPHERE_RADIUS } from '../data/constants';\nimport { PSVError } from '../PSVError';\nimport { parseAngle, parseSpeed } from '../utils';\nimport { AbstractService } from './AbstractService';\n\n/**\n * @summary Collections of data converters for the current viewer\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class DataHelper extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n }\n\n /**\n * @summary Converts vertical FOV to zoom level\n * @param {number} fov\n * @returns {number}\n */\n fovToZoomLevel(fov) {\n const temp = Math.round((fov - this.config.minFov) / (this.config.maxFov - this.config.minFov) * 100);\n return temp - 2 * (temp - 50);\n }\n\n /**\n * @summary Converts zoom level to vertical FOV\n * @param {number} level\n * @returns {number}\n */\n zoomLevelToFov(level) {\n return this.config.maxFov + (level / 100) * (this.config.minFov - this.config.maxFov);\n }\n\n /**\n * @summary Convert vertical FOV to horizontal FOV\n * @param {number} vFov\n * @returns {number}\n */\n vFovToHFov(vFov) {\n return THREE.Math.radToDeg(2 * Math.atan(Math.tan(THREE.Math.degToRad(vFov) / 2) * this.prop.aspect));\n }\n\n /**\n * @summary Converts a speed into a duration from current position to a new position\n * @param {string|number} value\n * @param {number} angle\n * @returns {number}\n */\n speedToDuration(value, angle) {\n if (!value || typeof value !== 'number') {\n // desired radial speed\n const speed = value ? parseSpeed(value) : this.config.autorotateSpeed;\n // compute duration\n return angle / Math.abs(speed) * 1000;\n }\n else {\n return Math.abs(value);\n }\n }\n\n /**\n * @summary Converts pixel texture coordinates to spherical radians coordinates\n * @param {PSV.Point} point\n * @returns {PSV.Position}\n */\n textureCoordsToSphericalCoords(point) {\n if (this.prop.isCubemap) {\n throw new PSVError('Unable to use texture coords with cubemap.');\n }\n\n const panoData = this.prop.panoData;\n const relativeX = (point.x + panoData.croppedX) / panoData.fullWidth * Math.PI * 2;\n const relativeY = (point.y + panoData.croppedY) / panoData.fullHeight * Math.PI;\n\n return {\n longitude: relativeX >= Math.PI ? relativeX - Math.PI : relativeX + Math.PI,\n latitude : Math.PI / 2 - relativeY,\n };\n }\n\n /**\n * @summary Converts spherical radians coordinates to pixel texture coordinates\n * @param {PSV.Position} position\n * @returns {PSV.Point}\n */\n sphericalCoordsToTextureCoords(position) {\n if (this.prop.isCubemap) {\n throw new PSVError('Unable to use texture coords with cubemap.');\n }\n\n const panoData = this.prop.panoData;\n const relativeLong = position.longitude / Math.PI / 2 * panoData.fullWidth;\n const relativeLat = position.latitude / Math.PI * panoData.fullHeight;\n\n return {\n x: Math.round(position.longitude < Math.PI ? relativeLong + panoData.fullWidth / 2 : relativeLong - panoData.fullWidth / 2) - panoData.croppedX,\n y: Math.round(panoData.fullHeight / 2 - relativeLat) - panoData.croppedY,\n };\n }\n\n /**\n * @summary Converts spherical radians coordinates to a THREE.Vector3\n * @param {PSV.Position} position\n * @returns {external:THREE.Vector3}\n */\n sphericalCoordsToVector3(position) {\n return new THREE.Vector3(\n SPHERE_RADIUS * -Math.cos(position.latitude) * Math.sin(position.longitude),\n SPHERE_RADIUS * Math.sin(position.latitude),\n SPHERE_RADIUS * Math.cos(position.latitude) * Math.cos(position.longitude)\n );\n }\n\n /**\n * @summary Converts a THREE.Vector3 to spherical radians coordinates\n * @param {external:THREE.Vector3} vector\n * @returns {PSV.Position}\n */\n vector3ToSphericalCoords(vector) {\n const phi = Math.acos(vector.y / Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z));\n const theta = Math.atan2(vector.x, vector.z);\n\n return {\n longitude: theta < 0 ? -theta : Math.PI * 2 - theta,\n latitude : Math.PI / 2 - phi,\n };\n }\n\n /**\n * @summary Converts position on the viewer to a THREE.Vector3\n * @param {PSV.Point} viewerPoint\n * @returns {external:THREE.Vector3}\n */\n viewerCoordsToVector3(viewerPoint) {\n const screen = new THREE.Vector2(\n 2 * viewerPoint.x / this.prop.size.width - 1,\n -2 * viewerPoint.y / this.prop.size.height + 1\n );\n\n this.psv.renderer.raycaster.setFromCamera(screen, this.psv.renderer.camera);\n\n const intersects = this.psv.renderer.raycaster.intersectObjects(this.psv.renderer.scene.children, true);\n\n if (intersects.length === 1) {\n return intersects[0].point;\n }\n else {\n return null;\n }\n }\n\n /**\n * @summary Converts a THREE.Vector3 to position on the viewer\n * @param {external:THREE.Vector3} vector\n * @returns {PSV.Point}\n */\n vector3ToViewerCoords(vector) {\n const vectorClone = vector.clone();\n vectorClone.project(this.psv.renderer.camera);\n\n return {\n x: Math.round((vectorClone.x + 1) / 2 * this.prop.size.width),\n y: Math.round((1 - vectorClone.y) / 2 * this.prop.size.height),\n };\n }\n\n /**\n * @summary Converts x/y to latitude/longitude if present and ensure boundaries\n * @param {PSV.ExtendedPosition} position\n * @returns {PSV.Position}\n */\n cleanPosition(position) {\n if ('x' in position && 'y' in position) {\n return this.textureCoordsToSphericalCoords(position);\n }\n else {\n return {\n longitude: parseAngle(position.longitude),\n latitude : parseAngle(position.latitude, true),\n };\n }\n }\n\n /**\n * @summary Ensure a SphereCorrection object is valid\n * @param {PSV.SphereCorrection} sphereCorrection\n * @returns {PSV.SphereCorrection}\n */\n cleanSphereCorrection(sphereCorrection) {\n return {\n pan : parseAngle(sphereCorrection.pan || 0),\n tilt: parseAngle(sphereCorrection.tilt || 0, true),\n roll: parseAngle(sphereCorrection.roll || 0, true, false),\n };\n }\n\n}\n","import { Animation } from '../Animation';\nimport {\n ACTIONS,\n CTRLZOOM_TIMEOUT,\n DBLCLICK_DELAY,\n EVENTS,\n IDS,\n INERTIA_WINDOW,\n LONGTOUCH_DELAY,\n TWOFINGERSOVERLAY_DELAY,\n MOVE_THRESHOLD\n} from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport gestureIcon from '../icons/gesture.svg';\nimport mousewheelIcon from '../icons/mousewheel.svg';\nimport { clone, distance, getClosest, getEventKey, isFullscreenEnabled, normalizeWheel, throttle } from '../utils';\nimport { AbstractService } from './AbstractService';\n\n/**\n * @summary Events handler\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class EventsHandler extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n\n /**\n * @summary Internal properties\n * @member {Object}\n * @property {boolean} moving - is the user moving\n * @property {boolean} zooming - is the user zooming\n * @property {number} startMouseX - start x position of the click/touch\n * @property {number} startMouseY - start y position of the click/touch\n * @property {number} mouseX - current x position of the cursor\n * @property {number} mouseY - current y position of the cursor\n * @property {number[][]} mouseHistory - list of latest positions of the cursor, [time, x, y]\n * @property {number} pinchDist - distance between fingers when zooming\n * @property {boolean} ctrlKeyDown - when the Ctrl key is pressed\n * @property {PSV.ClickData} dblclickData - temporary storage of click data between two clicks\n * @property {number} dblclickTimeout - timeout id for double click\n * @property {number} twofingersTimeout - timeout id for \"two fingers\" overlay\n * @property {number} ctrlZoomTimeout - timeout id for \"ctrol zoom\" overlay\n * @protected\n */\n this.state = {\n keyboardEnabled : false,\n moving : false,\n zooming : false,\n startMouseX : 0,\n startMouseY : 0,\n mouseX : 0,\n mouseY : 0,\n mouseHistory : [],\n pinchDist : 0,\n ctrlKeyDown : false,\n dblclickData : null,\n dblclickTimeout : null,\n longtouchTimeout : null,\n twofingersTimeout: null,\n ctrlZoomTimeout : null,\n };\n\n /**\n * @summary Throttled wrapper of {@link PSV.Viewer#autoSize}\n * @type {Function}\n * @private\n */\n this.__onResize = throttle(() => this.psv.autoSize(), 50);\n }\n\n /**\n * @summary Initializes event handlers\n * @protected\n */\n init() {\n window.addEventListener('resize', this);\n window.addEventListener('keydown', this);\n window.addEventListener('keyup', this);\n this.psv.container.addEventListener('mouseenter', this);\n this.psv.container.addEventListener('mousedown', this);\n this.psv.container.addEventListener('mouseleave', this);\n window.addEventListener('mouseup', this);\n this.psv.container.addEventListener('touchstart', this);\n window.addEventListener('touchend', this);\n this.psv.container.addEventListener('mousemove', this);\n this.psv.container.addEventListener('touchmove', this);\n this.psv.container.addEventListener(SYSTEM.mouseWheelEvent, this);\n\n if (SYSTEM.fullscreenEvent) {\n document.addEventListener(SYSTEM.fullscreenEvent, this);\n }\n }\n\n /**\n * @override\n */\n destroy() {\n window.removeEventListener('resize', this);\n window.removeEventListener('keydown', this);\n window.removeEventListener('keyup', this);\n this.psv.container.removeEventListener('mouseenter', this);\n this.psv.container.removeEventListener('mousedown', this);\n this.psv.container.removeEventListener('mouseleave', this);\n window.removeEventListener('mouseup', this);\n this.psv.container.removeEventListener('touchstart', this);\n window.removeEventListener('touchend', this);\n this.psv.container.removeEventListener('mousemove', this);\n this.psv.container.removeEventListener('touchmove', this);\n this.psv.container.removeEventListener(SYSTEM.mouseWheelEvent, this);\n\n if (SYSTEM.fullscreenEvent) {\n document.removeEventListener(SYSTEM.fullscreenEvent, this);\n }\n\n clearTimeout(this.state.dblclickTimeout);\n clearTimeout(this.state.longtouchTimeout);\n clearTimeout(this.state.twofingersTimeout);\n clearTimeout(this.state.ctrlZoomTimeout);\n\n delete this.state;\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} evt\n * @private\n */\n handleEvent(evt) {\n /* eslint-disable */\n switch (evt.type) {\n // @formatter:off\n case 'resize': this.__onResize(); break;\n case 'keydown': this.__onKeyDown(evt); break;\n case 'keyup': this.__onKeyUp(); break;\n case 'mouseup': this.__onMouseUp(evt); break;\n case 'touchend': this.__onTouchEnd(evt); break;\n case SYSTEM.fullscreenEvent: this.__fullscreenToggled(); break;\n // @formatter:on\n }\n /* eslint-enable */\n\n if (!getClosest(evt.target, '.psv-navbar') && !getClosest(evt.target, '.psv-panel')) {\n /* eslint-disable */\n switch (evt.type) {\n // @formatter:off\n case 'mousedown': this.__onMouseDown(evt); break;\n case 'mouseenter': this.__onMouseEnter(evt); break;\n case 'touchstart': this.__onTouchStart(evt); break;\n case 'mouseleave': this.__onMouseLeave(evt); break;\n case 'mousemove': this.__onMouseMove(evt); break;\n case 'touchmove': this.__onTouchMove(evt); break;\n case SYSTEM.mouseWheelEvent: this.__onMouseWheel(evt); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n }\n\n /**\n * @summary Enables the keyboard controls\n * @protected\n */\n enableKeyboard() {\n this.state.keyboardEnabled = true;\n }\n\n /**\n * @summary Disables the keyboard controls\n * @protected\n */\n disableKeyboard() {\n this.state.keyboardEnabled = false;\n }\n\n /**\n * @summary Handles keyboard events\n * @param {KeyboardEvent} evt\n * @private\n */\n __onKeyDown(evt) {\n const key = getEventKey(evt);\n\n if (this.config.mousewheelCtrlKey) {\n this.state.ctrlKeyDown = key === 'Control';\n\n if (this.state.ctrlKeyDown) {\n clearTimeout(this.state.ctrlZoomTimeout);\n this.psv.overlay.hide(IDS.CTRL_ZOOM);\n }\n }\n\n if (!this.state.keyboardEnabled) {\n return;\n }\n\n let dLong = 0;\n let dLat = 0;\n let dZoom = 0;\n\n /* eslint-disable */\n switch (this.config.keyboard[key]) {\n // @formatter:off\n case ACTIONS.ROTATE_LAT_UP : dLat = 0.01; break;\n case ACTIONS.ROTATE_LAT_DOWN : dLat = -0.01; break;\n case ACTIONS.ROTATE_LONG_RIGHT: dLong = 0.01; break;\n case ACTIONS.ROTATE_LONG_LEFT : dLong = -0.01; break;\n case ACTIONS.ZOOM_IN : dZoom = 1; break;\n case ACTIONS.ZOOM_OUT : dZoom = -1; break;\n case ACTIONS.TOGGLE_AUTOROTATE: this.psv.toggleAutorotate(); break;\n // @formatter:on\n }\n /* eslint-enable */\n\n if (dZoom !== 0) {\n this.psv.zoom(this.prop.zoomLvl + dZoom * this.config.zoomButtonIncrement);\n }\n else if (dLat !== 0 || dLong !== 0) {\n this.psv.rotate({\n longitude: this.prop.position.longitude + dLong * this.prop.moveSpeed * this.prop.hFov,\n latitude : this.prop.position.latitude + dLat * this.prop.moveSpeed * this.prop.vFov,\n });\n }\n }\n\n /**\n * @summary Handles keyboard events\n * @private\n */\n __onKeyUp() {\n this.state.ctrlKeyDown = false;\n }\n\n /**\n * @summary Handles mouse down events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseDown(evt) {\n if (!this.config.mousemove || this.config.captureCursor) {\n return;\n }\n\n this.__startMove(evt);\n }\n\n /**\n * @summary Handles mouse enter events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseEnter(evt) {\n if (!this.config.mousemove || !this.config.captureCursor) {\n return;\n }\n\n this.__startMove(evt);\n }\n\n /**\n * @summary Handles mouse up events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseUp(evt) {\n if (!this.config.mousemove || this.config.captureCursor) {\n return;\n }\n\n this.__stopMove(evt);\n }\n\n /**\n * @summary Handles mouse leave events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseLeave(evt) {\n if (!this.config.mousemove || !this.config.captureCursor) {\n return;\n }\n\n this.__stopMove(evt);\n }\n\n /**\n * @summary Handles mouse move events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseMove(evt) {\n if (!this.config.mousemove) {\n return;\n }\n\n if (evt.buttons !== 0) {\n evt.preventDefault();\n this.__move(evt);\n }\n else if (this.config.captureCursor) {\n this.__moveAbsolute(evt);\n }\n }\n\n /**\n * @summary Handles touch events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchStart(evt) {\n if (!this.config.mousemove) {\n return;\n }\n\n if (evt.touches.length === 1) {\n if (!this.config.touchmoveTwoFingers) {\n this.__startMove(evt.touches[0]);\n evt.preventDefault(); // prevent mouse events emulation\n }\n\n if (!this.prop.longtouchTimeout) {\n this.prop.longtouchTimeout = setTimeout(() => {\n this.__click(evt.touches[0], true);\n this.prop.longtouchTimeout = null;\n }, LONGTOUCH_DELAY);\n }\n }\n else if (evt.touches.length === 2) {\n this.__cancelLongTouch();\n this.__startMoveZoom(evt);\n evt.preventDefault();\n }\n }\n\n /**\n * @summary Handles touch events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchEnd(evt) {\n if (!this.config.mousemove) {\n return;\n }\n\n this.__cancelLongTouch();\n\n if (evt.touches.length === 1) {\n this.__stopMoveZoom();\n }\n else if (evt.touches.length === 0) {\n this.__stopMove(evt.changedTouches[0]);\n }\n\n if (this.config.touchmoveTwoFingers) {\n this.__cancelTwoFingersOverlay();\n this.psv.overlay.hide(IDS.TWO_FINGERS);\n }\n }\n\n /**\n * @summary Handles touch move events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchMove(evt) {\n if (!this.config.mousemove) {\n return;\n }\n\n if (evt.touches.length === 1) {\n if (this.config.touchmoveTwoFingers) {\n if (!this.prop.twofingersTimeout) {\n this.prop.twofingersTimeout = setTimeout(() => {\n this.psv.overlay.show({\n id: IDS.TWO_FINGERS,\n image: gestureIcon,\n text: this.config.lang.twoFingers,\n });\n }, TWOFINGERSOVERLAY_DELAY);\n }\n }\n else {\n evt.preventDefault();\n this.__move(evt.touches[0]);\n }\n }\n else if (evt.touches.length === 2) {\n evt.preventDefault();\n this.__moveZoom(evt);\n if (this.config.touchmoveTwoFingers) {\n this.__cancelTwoFingersOverlay();\n }\n }\n }\n\n /**\n * @summary Cancel the long touch timer if any\n * @private\n */\n __cancelLongTouch() {\n if (this.prop.longtouchTimeout) {\n clearTimeout(this.prop.longtouchTimeout);\n this.prop.longtouchTimeout = null;\n }\n }\n\n /**\n * @summary Cancel the two fingers overlay timer if any\n * @private\n */\n __cancelTwoFingersOverlay() {\n if (this.prop.twofingersTimeout) {\n clearTimeout(this.prop.twofingersTimeout);\n this.prop.twofingersTimeout = null;\n }\n }\n\n /**\n * @summary Handles mouse wheel events\n * @param {WheelEvent} evt\n * @private\n */\n __onMouseWheel(evt) {\n if (!this.config.mousewheel) {\n return;\n }\n\n if (this.config.mousewheelCtrlKey && !this.state.ctrlKeyDown) {\n this.psv.overlay.show({\n id: IDS.CTRL_ZOOM,\n image: mousewheelIcon,\n text: this.config.lang.ctrlZoom,\n });\n\n clearTimeout(this.state.ctrlZoomTimeout);\n this.state.ctrlZoomTimeout = setTimeout(() => this.psv.overlay.hide(IDS.CTRL_ZOOM), CTRLZOOM_TIMEOUT);\n\n return;\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n\n const delta = normalizeWheel(evt).spinY * 5;\n\n if (delta !== 0) {\n this.psv.zoom(this.prop.zoomLvl - delta * this.config.mousewheelSpeed);\n }\n }\n\n /**\n * @summary Handles fullscreen events\n * @param {boolean} [force] force state\n * @fires PSV.fullscreen-updated\n * @package\n */\n __fullscreenToggled(force) {\n this.prop.fullscreen = force !== undefined ? force : isFullscreenEnabled(this.psv.container);\n\n if (this.config.keyboard) {\n if (this.prop.fullscreen) {\n this.psv.startKeyboardControl();\n }\n else {\n this.psv.stopKeyboardControl();\n }\n }\n\n this.psv.trigger(EVENTS.FULLSCREEN_UPDATED, this.prop.fullscreen);\n }\n\n /**\n * @summary Initializes the movement\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __startMove(evt) {\n this.psv.stopAutorotate();\n this.psv.stopAnimation()\n .then(() => {\n this.state.mouseX = evt.clientX;\n this.state.mouseY = evt.clientY;\n this.state.startMouseX = this.state.mouseX;\n this.state.startMouseY = this.state.mouseY;\n this.state.moving = true;\n this.state.zooming = false;\n\n this.state.mouseHistory.length = 0;\n this.__logMouseMove(evt);\n });\n }\n\n /**\n * @summary Initializes the combines move and zoom\n * @param {TouchEvent} evt\n * @private\n */\n __startMoveZoom(evt) {\n const p1 = { x: evt.touches[0].clientX, y: evt.touches[0].clientY };\n const p2 = { x: evt.touches[1].clientX, y: evt.touches[1].clientY };\n\n this.state.pinchDist = distance(p1, p2);\n this.state.mouseX = (p1.x + p2.x) / 2;\n this.state.mouseY = (p1.y + p2.y) / 2;\n this.state.startMouseX = this.state.mouseX;\n this.state.startMouseY = this.state.mouseY;\n this.state.moving = true;\n this.state.zooming = true;\n }\n\n /**\n * @summary Stops the movement\n * @description If the move threshold was not reached a click event is triggered, otherwise an animation is launched to simulate inertia\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __stopMove(evt) {\n if (!getClosest(evt.target, '.psv-container')) {\n this.state.moving = false;\n this.state.mouseHistory.length = 0;\n return;\n }\n\n if (this.state.moving) {\n // move threshold to trigger a click\n if (Math.abs(evt.clientX - this.state.startMouseX) < MOVE_THRESHOLD && Math.abs(evt.clientY - this.state.startMouseY) < MOVE_THRESHOLD) {\n this.__click(evt);\n this.state.moving = false;\n }\n // inertia animation\n else if (this.config.moveInertia) {\n this.__logMouseMove(evt);\n this.__stopMoveInertia(evt);\n }\n else {\n this.state.moving = false;\n }\n\n this.state.mouseHistory.length = 0;\n }\n }\n\n /**\n * @summary Stops the combined move and zoom\n * @private\n */\n __stopMoveZoom() {\n this.state.mouseHistory.length = 0;\n this.state.moving = false;\n this.state.zooming = false;\n }\n\n /**\n * @summary Performs an animation to simulate inertia when the movement stops\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __stopMoveInertia(evt) {\n const direction = {\n x: evt.clientX - this.state.mouseHistory[0][1],\n y: evt.clientY - this.state.mouseHistory[0][2],\n };\n\n const norm = Math.sqrt(direction.x * direction.x + direction.y * direction.y);\n\n this.prop.animationPromise = new Animation({\n properties: {\n clientX: { start: evt.clientX, end: evt.clientX + direction.x },\n clientY: { start: evt.clientY, end: evt.clientY + direction.y },\n },\n duration : norm * INERTIA_WINDOW / 100,\n easing : 'outCirc',\n onTick : (properties) => {\n this.__move(properties, false);\n },\n })\n .finally(() => {\n this.state.moving = false;\n });\n }\n\n /**\n * @summary Triggers an event with all coordinates when a simple click is performed\n * @param {MouseEvent|Touch} evt\n * @param {boolean} [longtouch=false]\n * @fires PSV.click\n * @fires PSV.dblclick\n * @private\n */\n __click(evt, longtouch = false) {\n const boundingRect = this.psv.container.getBoundingClientRect();\n\n /**\n * @type {PSV.ClickData}\n */\n const data = {\n rightclick: longtouch || evt.button === 2,\n target : evt.target,\n clientX : evt.clientX,\n clientY : evt.clientY,\n viewerX : evt.clientX - boundingRect.left,\n viewerY : evt.clientY - boundingRect.top,\n };\n\n const intersect = this.psv.dataHelper.viewerCoordsToVector3({\n x: data.viewerX,\n y: data.viewerY,\n });\n\n if (intersect) {\n const sphericalCoords = this.psv.dataHelper.vector3ToSphericalCoords(intersect);\n data.longitude = sphericalCoords.longitude;\n data.latitude = sphericalCoords.latitude;\n\n // TODO: for cubemap, computes texture's index and coordinates\n if (!this.prop.isCubemap) {\n const textureCoords = this.psv.dataHelper.sphericalCoordsToTextureCoords(data);\n data.textureX = textureCoords.x;\n data.textureY = textureCoords.y;\n }\n\n if (!this.state.dblclickTimeout) {\n this.psv.trigger(EVENTS.CLICK, data);\n\n this.state.dblclickData = clone(data);\n this.state.dblclickTimeout = setTimeout(() => {\n this.state.dblclickTimeout = null;\n this.state.dblclickData = null;\n }, DBLCLICK_DELAY);\n }\n else {\n if (Math.abs(this.state.dblclickData.clientX - data.clientX) < MOVE_THRESHOLD\n && Math.abs(this.state.dblclickData.clientY - data.clientY) < MOVE_THRESHOLD) {\n this.psv.trigger(EVENTS.DOUBLE_CLICK, this.state.dblclickData);\n }\n\n clearTimeout(this.state.dblclickTimeout);\n this.state.dblclickTimeout = null;\n this.state.dblclickData = null;\n }\n }\n }\n\n /**\n * @summary Performs movement\n * @param {MouseEvent|Touch} evt\n * @param {boolean} [log=true]\n * @private\n */\n __move(evt, log) {\n if (this.state.moving) {\n const x = evt.clientX;\n const y = evt.clientY;\n\n const rotation = {\n longitude: (x - this.state.mouseX) / this.prop.size.width * this.prop.moveSpeed * this.prop.hFov * SYSTEM.pixelRatio,\n latitude : (y - this.state.mouseY) / this.prop.size.height * this.prop.moveSpeed * this.prop.vFov * SYSTEM.pixelRatio,\n };\n\n this.psv.rotate({\n longitude: this.prop.position.longitude - rotation.longitude,\n latitude : this.prop.position.latitude + rotation.latitude,\n });\n\n this.state.mouseX = x;\n this.state.mouseY = y;\n\n if (log !== false) {\n this.__logMouseMove(evt);\n }\n }\n }\n\n /**\n * @summary Performs movement absolute to cursor position in viewer\n * @param {MouseEvent} evt\n * @private\n */\n __moveAbsolute(evt) {\n if (this.state.moving) {\n const containerRect = this.psv.container.getBoundingClientRect();\n this.psv.rotate({\n longitude: ((evt.clientX - containerRect.left) / containerRect.width - 0.5) * Math.PI * 2,\n latitude : -((evt.clientY - containerRect.top) / containerRect.height - 0.5) * Math.PI,\n });\n }\n }\n\n /**\n * @summary Perfoms combined move and zoom\n * @param {TouchEvent} evt\n * @private\n */\n __moveZoom(evt) {\n if (this.state.zooming && this.state.moving) {\n const p1 = { x: evt.touches[0].clientX, y: evt.touches[0].clientY };\n const p2 = { x: evt.touches[1].clientX, y: evt.touches[1].clientY };\n\n const p = distance(p1, p2);\n const delta = 80 * (p - this.state.pinchDist) / this.prop.size.width;\n\n this.psv.zoom(this.prop.zoomLvl + delta);\n\n this.__move({\n clientX: (p1.x + p2.x) / 2,\n clientY: (p1.y + p2.y) / 2,\n });\n\n this.state.pinchDist = p;\n }\n }\n\n /**\n * @summary Stores each mouse position during a mouse move\n * @description Positions older than \"INERTIA_WINDOW\" are removed
\n * Positions before a pause of \"INERTIA_WINDOW\" / 10 are removed\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __logMouseMove(evt) {\n const now = Date.now();\n this.state.mouseHistory.push([now, evt.clientX, evt.clientY]);\n\n let previous = null;\n\n for (let i = 0; i < this.state.mouseHistory.length;) {\n if (this.state.mouseHistory[0][i] < now - INERTIA_WINDOW) {\n this.state.mouseHistory.splice(i, 1);\n }\n else if (previous && this.state.mouseHistory[0][i] - previous > INERTIA_WINDOW / 10) {\n this.state.mouseHistory.splice(0, i);\n i = 0;\n previous = this.state.mouseHistory[0][i];\n }\n else {\n i++;\n previous = this.state.mouseHistory[0][i];\n }\n }\n }\n\n}\n","import * as THREE from 'three';\nimport { Animation } from '../Animation';\nimport { CUBE_VERTICES, EVENTS, SPHERE_RADIUS, SPHERE_VERTICES } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport { isExtendedPosition, isNil, logWarn } from '../utils';\nimport { AbstractService } from './AbstractService';\n\n/**\n * @summary Viewer and renderer\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class Renderer extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n\n /**\n * @member {number}\n * @private\n */\n this.mainReqid = undefined;\n\n /**\n * @member {external:THREE.WebGLRenderer}\n * @readonly\n * @protected\n */\n this.renderer = null;\n\n /**\n * @member {external:THREE.Scene}\n * @readonly\n * @protected\n */\n this.scene = null;\n\n /**\n * @member {external:THREE.PerspectiveCamera}\n * @readonly\n * @protected\n */\n this.camera = null;\n\n /**\n * @member {external:THREE.Mesh}\n * @readonly\n * @protected\n */\n this.mesh = null;\n\n /**\n * @member {external:THREE.Group}\n * @readonly\n * @private\n */\n this.meshContainer = null;\n\n /**\n * @member {external:THREE.Raycaster}\n * @readonly\n * @protected\n */\n this.raycaster = null;\n\n /**\n * @member {HTMLElement}\n * @readonly\n * @package\n */\n this.canvasContainer = document.createElement('div');\n this.canvasContainer.className = 'psv-canvas-container';\n this.canvasContainer.style.background = this.psv.config.canvasBackground;\n this.canvasContainer.style.cursor = this.psv.config.mousemove ? 'move' : 'default';\n this.psv.container.appendChild(this.canvasContainer);\n\n psv.on(EVENTS.SIZE_UPDATED, (e, size) => {\n if (this.renderer) {\n this.renderer.setSize(size.width, size.height);\n }\n });\n\n psv.on(EVENTS.CONFIG_CHANGED, () => {\n this.canvasContainer.style.cursor = this.psv.config.mousemove ? 'move' : 'default';\n });\n\n this.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n // cancel render loop\n if (this.mainReqid) {\n window.cancelAnimationFrame(this.mainReqid);\n }\n\n // destroy ThreeJS view\n if (this.scene) {\n this.__cleanTHREEScene(this.scene);\n }\n\n // remove container\n this.psv.container.removeChild(this.canvasContainer);\n\n delete this.canvasContainer;\n delete this.renderer;\n delete this.scene;\n delete this.camera;\n delete this.mesh;\n delete this.meshContainer;\n delete this.raycaster;\n\n super.destroy();\n }\n\n /**\n * @summary Hides the viewer\n */\n hide() {\n this.canvasContainer.style.opacity = 0;\n }\n\n /**\n * @summary Shows the viewer\n */\n show() {\n this.canvasContainer.style.opacity = 1;\n }\n\n /**\n * @summary Main event loop, calls {@link render} if `prop.needsUpdate` is true\n * @param {number} timestamp\n * @fires PSV.before-render\n * @package\n */\n __renderLoop(timestamp) {\n this.psv.trigger(EVENTS.BEFORE_RENDER, timestamp);\n\n if (this.prop.needsUpdate) {\n this.render();\n this.prop.needsUpdate = false;\n }\n\n this.mainReqid = window.requestAnimationFrame(t => this.__renderLoop(t));\n }\n\n /**\n * @summary Performs a render\n * @description Do not call this method directly, instead call\n * {@link PSV.Viewer#needsUpdate} on {@link PSV.event:before-render}.\n * @fires PSV.render\n */\n render() {\n this.prop.direction = this.psv.dataHelper.sphericalCoordsToVector3(this.prop.position);\n this.camera.position.set(0, 0, 0);\n this.camera.lookAt(this.prop.direction);\n\n if (this.config.fisheye) {\n this.camera.position.copy(this.prop.direction).multiplyScalar(this.config.fisheye / 2).negate();\n }\n\n this.camera.aspect = this.prop.aspect;\n this.camera.fov = this.prop.vFov;\n this.camera.updateProjectionMatrix();\n\n this.renderer.render(this.scene, this.camera);\n\n this.psv.trigger(EVENTS.RENDER);\n }\n\n /**\n * @summary Applies the texture to the scene, creates the scene if needed\n * @param {PSV.TextureData} textureData\n * @fires PSV.panorama-loaded\n * @package\n */\n setTexture(textureData) {\n const { texture, panoData } = textureData;\n this.prop.panoData = panoData;\n\n if (!this.scene) {\n this.__createScene();\n }\n\n if (this.prop.isCubemap) {\n for (let i = 0; i < 6; i++) {\n if (this.mesh.material[i].map) {\n this.mesh.material[i].map.dispose();\n }\n\n this.mesh.material[i].map = texture[i];\n }\n }\n else {\n if (this.mesh.material.map) {\n this.mesh.material.map.dispose();\n }\n\n this.mesh.material.map = texture;\n }\n\n this.psv.needsUpdate();\n\n this.psv.trigger(EVENTS.PANORAMA_LOADED);\n }\n\n /**\n * @summary Apply a panorama data pose to a Mesh\n * @param {PSV.PanoData} [panoData]\n * @param {external:THREE.Mesh} [mesh=this.mesh]\n * @package\n */\n setPanoramaPose(panoData, mesh = this.mesh) {\n if (!isNil(panoData?.poseHeading) || !isNil(panoData?.posePitch) || !isNil(panoData?.poseRoll)) {\n // By Google documentation the angles are applied on the camera in order : heading, pitch, roll\n // here we apply the reverse transformation on the sphere\n mesh.rotation.set(\n -THREE.Math.degToRad(panoData?.posePitch || 0),\n -THREE.Math.degToRad(panoData?.poseHeading || 0),\n -THREE.Math.degToRad(panoData?.poseRoll || 0),\n 'ZXY'\n );\n }\n else {\n mesh.rotation.set(0, 0, 0);\n }\n }\n\n /**\n * @summary Apply a SphereCorrection to a Mesh\n * @param {PSV.SphereCorrection} [sphereCorrection]\n * @param {external:THREE.Mesh} [mesh=this.meshContainer]\n * @package\n */\n setSphereCorrection(sphereCorrection, mesh = this.meshContainer) {\n if (sphereCorrection) {\n const cleanCorrection = this.psv.dataHelper.cleanSphereCorrection(sphereCorrection);\n\n if (!this.config.sphereCorrectionReorder) {\n const nonZeros = (cleanCorrection.tilt !== 0) + (cleanCorrection.pan !== 0) + (cleanCorrection.roll !== 0);\n if (nonZeros > 1) {\n logWarn(`\"sphereCorrection\" computation will change in a future version. \n Please set \"sphereCorrectionReorder: true\" and modify your correction accordingly.`);\n }\n }\n\n mesh.rotation.set(\n cleanCorrection.tilt,\n cleanCorrection.pan,\n cleanCorrection.roll,\n this.config.sphereCorrectionReorder ? 'ZXY' : 'XYZ'\n );\n }\n else {\n mesh.rotation.set(0, 0, 0);\n }\n }\n\n /**\n * @summary Creates the 3D scene and GUI components\n * @private\n */\n __createScene() {\n this.raycaster = new THREE.Raycaster();\n\n this.renderer = new THREE.WebGLRenderer({ alpha: true });\n this.renderer.setSize(this.prop.size.width, this.prop.size.height);\n this.renderer.setPixelRatio(SYSTEM.pixelRatio);\n\n this.camera = new THREE.PerspectiveCamera(this.prop.vFov, this.prop.size.width / this.prop.size.height, 1, 3 * SPHERE_RADIUS);\n this.camera.position.set(0, 0, 0);\n\n this.scene = new THREE.Scene();\n this.scene.add(this.camera);\n\n if (this.prop.isCubemap) {\n this.mesh = this.__createCubemap();\n }\n else {\n this.mesh = this.__createSphere();\n }\n\n this.meshContainer = new THREE.Group();\n this.meshContainer.add(this.mesh);\n this.scene.add(this.meshContainer);\n\n // create canvas container\n this.renderer.domElement.className = 'psv-canvas';\n this.canvasContainer.appendChild(this.renderer.domElement);\n }\n\n /**\n * @summary Creates the sphere mesh\n * @param {number} [scale=1]\n * @returns {external:THREE.Mesh}\n * @private\n */\n __createSphere(scale = 1) {\n // The middle of the panorama is placed at longitude=0\n const geometry = new THREE.SphereGeometry(SPHERE_RADIUS * scale, SPHERE_VERTICES, SPHERE_VERTICES, -Math.PI / 2);\n\n const material = new THREE.MeshBasicMaterial({\n side: THREE.BackSide,\n });\n\n const mesh = new THREE.Mesh(geometry, material);\n mesh.scale.set(-1, 1, 1);\n\n return mesh;\n }\n\n /**\n * @summary Creates the cube mesh\n * @param {number} [scale=1]\n * @returns {external:THREE.Mesh}\n * @private\n */\n __createCubemap(scale = 1) {\n const cubeSize = SPHERE_RADIUS * 2 * scale;\n const geometry = new THREE.BoxGeometry(cubeSize, cubeSize, cubeSize, CUBE_VERTICES, CUBE_VERTICES, CUBE_VERTICES);\n\n const materials = [];\n for (let i = 0; i < 6; i++) {\n materials.push(new THREE.MeshBasicMaterial({\n side: THREE.BackSide,\n }));\n }\n\n const mesh = new THREE.Mesh(geometry, materials);\n mesh.scale.set(1, 1, -1);\n\n return mesh;\n }\n\n /**\n * @summary Performs transition between the current and a new texture\n * @param {PSV.TextureData} textureData\n * @param {PSV.PanoramaOptions} options\n * @returns {PSV.Animation}\n * @package\n */\n transition(textureData, options) {\n const { texture, panoData } = textureData;\n\n let positionProvided = isExtendedPosition(options);\n const zoomProvided = 'zoom' in options;\n\n const group = new THREE.Group();\n let mesh;\n\n if (this.prop.isCubemap) {\n if (positionProvided) {\n logWarn('cannot perform cubemap transition to different position');\n positionProvided = false;\n }\n\n mesh = this.__createCubemap(0.9);\n\n mesh.material.forEach((material, i) => {\n material.map = texture[i];\n material.transparent = true;\n material.opacity = 0;\n });\n }\n else {\n mesh = this.__createSphere(0.9);\n\n mesh.material.map = texture;\n mesh.material.transparent = true;\n mesh.material.opacity = 0;\n\n this.setPanoramaPose(panoData, mesh);\n this.setSphereCorrection(options.sphereCorrection, group);\n }\n\n // rotate the new sphere to make the target position face the camera\n if (positionProvided) {\n const cleanPosition = this.psv.dataHelper.cleanPosition(options);\n\n // Longitude rotation along the vertical axis\n const verticalAxis = new THREE.Vector3(0, 1, 0);\n group.rotateOnWorldAxis(verticalAxis, cleanPosition.longitude - this.prop.position.longitude);\n\n // Latitude rotation along the camera horizontal axis\n const horizontalAxis = new THREE.Vector3(0, 1, 0).cross(this.camera.getWorldDirection(new THREE.Vector3())).normalize();\n group.rotateOnWorldAxis(horizontalAxis, cleanPosition.latitude - this.prop.position.latitude);\n\n // TODO: find a better way to handle ranges\n if (this.config.latitudeRange || this.config.longitudeRange) {\n this.config.longitudeRange = null;\n this.config.latitudeRange = null;\n logWarn('trying to perform transition with longitudeRange and/or latitudeRange, ranges cleared');\n }\n }\n\n group.add(mesh);\n this.scene.add(group);\n this.psv.needsUpdate();\n\n return new Animation({\n properties: {\n opacity: { start: 0.0, end: 1.0 },\n zoom : zoomProvided ? { start: this.prop.zoomLvl, end: options.zoom } : undefined,\n },\n duration : options.transition,\n easing : 'outCubic',\n onTick : (properties) => {\n if (this.prop.isCubemap) {\n for (let i = 0; i < 6; i++) {\n mesh.material[i].opacity = properties.opacity;\n }\n }\n else {\n mesh.material.opacity = properties.opacity;\n }\n\n if (zoomProvided) {\n this.psv.zoom(properties.zoom);\n }\n\n this.psv.needsUpdate();\n },\n })\n .then(() => {\n // remove temp sphere and transfer the texture to the main sphere\n this.setTexture(textureData);\n this.scene.remove(group);\n\n mesh.geometry.dispose();\n mesh.geometry = null;\n\n if (!this.prop.isCubemap) {\n this.setPanoramaPose(panoData);\n this.setSphereCorrection(options.sphereCorrection);\n }\n\n // actually rotate the camera\n if (positionProvided) {\n this.psv.rotate(options);\n }\n });\n }\n\n /**\n * @summary Calls `dispose` on all objects and textures\n * @param {external:THREE.Object3D} object\n * @private\n */\n __cleanTHREEScene(object) {\n object.traverse((item) => {\n if (item.geometry) {\n item.geometry.dispose();\n }\n\n if (item.material) {\n if (Array.isArray(item.material)) {\n item.material.forEach((material) => {\n if (material.map) {\n material.map.dispose();\n }\n\n material.dispose();\n });\n }\n else {\n if (item.material.map) {\n item.material.map.dispose();\n }\n\n item.material.dispose();\n }\n }\n\n if (item.dispose && !(item instanceof THREE.Scene)) {\n item.dispose();\n }\n\n if (item !== object) {\n this.__cleanTHREEScene(item);\n }\n });\n }\n\n}\n","import * as THREE from 'three';\nimport { CUBE_HASHMAP, CUBE_MAP } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport { PSVError } from '../PSVError';\nimport { firstNonNull, getXMPValue, logWarn, sum } from '../utils';\nimport { AbstractService } from './AbstractService';\n\n/**\n * @summary Texture loader\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class TextureLoader extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n\n /**\n * @summary Current HTTP requests\n * @type {XMLHttpRequest[]}\n * @private\n */\n this.requests = [];\n }\n\n /**\n * @override\n */\n destroy() {\n this.abortLoading();\n super.destroy();\n }\n\n /**\n * @summary Loads the panorama texture(s)\n * @param {string|string[]|PSV.Cubemap} panorama\n * @param {PSV.PanoData | PSV.PanoDataProvider} [newPanoData]\n * @returns {Promise.}\n * @throws {PSV.PSVError} when the image cannot be loaded\n * @package\n */\n loadTexture(panorama, newPanoData) {\n const tempPanorama = [];\n\n if (Array.isArray(panorama)) {\n if (panorama.length !== 6) {\n throw new PSVError('Must provide exactly 6 image paths when using cubemap.');\n }\n\n // reorder images\n for (let i = 0; i < 6; i++) {\n tempPanorama[i] = panorama[CUBE_MAP[i]];\n }\n\n return this.__loadCubemapTexture(tempPanorama);\n }\n else if (typeof panorama === 'object') {\n if (!CUBE_HASHMAP.every(side => !!panorama[side])) {\n throw new PSVError('Must provide exactly left, front, right, back, top, bottom when using cubemap.');\n }\n\n // transform into array\n CUBE_HASHMAP.forEach((side, i) => {\n tempPanorama[i] = panorama[side];\n });\n\n return this.__loadCubemapTexture(tempPanorama);\n }\n else {\n return this.__loadEquirectangularTexture(panorama, newPanoData);\n }\n }\n\n /**\n * @summary Cancels current HTTP requests\n * @package\n */\n abortLoading() {\n [...this.requests].forEach(r => r.abort());\n }\n\n /**\n * @summary Loads a Blob with FileLoader\n * @param {string} url\n * @param {function(number)} [onProgress]\n * @returns {Promise}\n * @private\n */\n __loadFile(url, onProgress) {\n return new Promise((resolve, reject) => {\n let progress = 0;\n onProgress && onProgress(progress);\n\n const loader = new THREE.FileLoader();\n\n if (this.config.withCredentials) {\n loader.setWithCredentials(true);\n }\n\n loader.setResponseType('blob');\n\n const request = loader.load(\n url,\n (result) => {\n const rIdx = this.requests.indexOf(request);\n if (rIdx !== -1) this.requests.splice(rIdx, 1);\n\n progress = 100;\n onProgress && onProgress(progress);\n resolve(result);\n },\n (e) => {\n if (e.lengthComputable) {\n const newProgress = e.loaded / e.total * 100;\n if (newProgress > progress) {\n progress = newProgress;\n onProgress && onProgress(progress);\n }\n }\n },\n (err) => {\n const rIdx = this.requests.indexOf(request);\n if (rIdx !== -1) this.requests.splice(rIdx, 1);\n\n reject(err);\n }\n );\n\n // when we hit the cache, the result is the cache value\n if (request instanceof XMLHttpRequest) {\n this.requests.push(request);\n }\n });\n }\n\n /**\n * @summary Loads an Image using FileLoader to have progress events\n * @param {string} url\n * @param {function(number)} [onProgress]\n * @returns {Promise}\n * @private\n */\n __loadImage(url, onProgress) {\n return this.__loadFile(url, onProgress)\n .then(result => new Promise((resolve, reject) => {\n const img = document.createElementNS('http://www.w3.org/1999/xhtml', 'img');\n img.onload = () => {\n URL.revokeObjectURL(img.src);\n resolve(img);\n };\n img.onerror = reject;\n img.src = URL.createObjectURL(result);\n }));\n }\n\n /**\n * @summmary read a Blob as string\n * @param {Blob} blob\n * @returns {Promise}\n * @private\n */\n __loadBlobAsString(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result);\n reader.onerror = reject;\n reader.readAsText(blob);\n });\n }\n\n /**\n * @summary Loads the sphere texture\n * @param {string} panorama\n * @param {PSV.PanoData | PSV.PanoDataProvider} [newPanoData]\n * @returns {Promise.}\n * @throws {PSV.PSVError} when the image cannot be loaded\n * @private\n */\n __loadEquirectangularTexture(panorama, newPanoData) {\n if (this.prop.isCubemap === true) {\n throw new PSVError('The viewer was initialized with an cubemap, cannot switch to equirectangular panorama.');\n }\n\n this.prop.isCubemap = false;\n\n return (\n !this.config.useXmpData\n ? this.__loadImage(panorama, p => this.psv.loader.setProgress(p))\n .then(img => ({ img: img, xmpPanoData: null }))\n : this.__loadXMP(panorama, p => this.psv.loader.setProgress(p))\n .then(xmpPanoData => this.__loadImage(panorama).then(img => ({ img, xmpPanoData })))\n )\n .then(({ img, xmpPanoData }) => {\n if (typeof newPanoData === 'function') {\n // eslint-disable-next-line no-param-reassign\n newPanoData = newPanoData(img);\n }\n\n const panoData = {\n fullWidth : firstNonNull(newPanoData?.fullWidth, xmpPanoData?.fullWidth, img.width),\n fullHeight : firstNonNull(newPanoData?.fullHeight, xmpPanoData?.fullHeight, img.height),\n croppedWidth : firstNonNull(newPanoData?.croppedWidth, xmpPanoData?.croppedWidth, img.width),\n croppedHeight: firstNonNull(newPanoData?.croppedHeight, xmpPanoData?.croppedHeight, img.height),\n croppedX : firstNonNull(newPanoData?.croppedX, xmpPanoData?.croppedX, 0),\n croppedY : firstNonNull(newPanoData?.croppedY, xmpPanoData?.croppedY, 0),\n poseHeading : firstNonNull(newPanoData?.poseHeading, xmpPanoData?.poseHeading),\n posePitch : firstNonNull(newPanoData?.posePitch, xmpPanoData?.posePitch),\n poseRoll : firstNonNull(newPanoData?.poseRoll, xmpPanoData?.poseRoll),\n };\n\n if (panoData.croppedWidth !== img.width || panoData.croppedHeight !== img.height) {\n logWarn(`Invalid panoData, croppedWidth and/or croppedHeight is not coherent with loaded image\n panoData: ${panoData.croppedWidth}x${panoData.croppedHeight}, image: ${img.width}x${img.height}`);\n }\n\n const texture = this.__createEquirectangularTexture(img, panoData);\n\n return { texture, panoData };\n });\n }\n\n /**\n * @summary Loads the XMP data of an image\n * @param {string} panorama\n * @param {function(number)} [onProgress]\n * @returns {Promise}\n * @throws {PSV.PSVError} when the image cannot be loaded\n * @private\n */\n __loadXMP(panorama, onProgress) {\n return this.__loadFile(panorama, onProgress)\n .then(blob => this.__loadBlobAsString(blob))\n .then((binary) => {\n const a = binary.indexOf('');\n const data = binary.substring(a, b);\n\n if (a !== -1 && b !== -1 && data.indexOf('GPano:') !== -1) {\n return {\n fullWidth : getXMPValue(data, 'FullPanoWidthPixels'),\n fullHeight : getXMPValue(data, 'FullPanoHeightPixels'),\n croppedWidth : getXMPValue(data, 'CroppedAreaImageWidthPixels'),\n croppedHeight: getXMPValue(data, 'CroppedAreaImageHeightPixels'),\n croppedX : getXMPValue(data, 'CroppedAreaLeftPixels'),\n croppedY : getXMPValue(data, 'CroppedAreaTopPixels'),\n poseHeading : getXMPValue(data, 'PoseHeadingDegrees'),\n posePitch : getXMPValue(data, 'PosePitchDegrees'),\n poseRoll : getXMPValue(data, 'PoseRollDegrees'),\n };\n }\n\n return null;\n });\n }\n\n /**\n * @summary Creates the final texture from image and panorama data\n * @param {Image} img\n * @param {PSV.PanoData} panoData\n * @returns {external:THREE.Texture}\n * @private\n */\n __createEquirectangularTexture(img, panoData) {\n let texture;\n\n // resize image / fill cropped parts with black\n if (panoData.fullWidth > SYSTEM.maxTextureWidth\n || panoData.croppedWidth !== panoData.fullWidth\n || panoData.croppedHeight !== panoData.fullHeight\n ) {\n const resizedPanoData = { ...panoData };\n\n const ratio = SYSTEM.getMaxCanvasWidth() / panoData.fullWidth;\n\n if (ratio < 1) {\n resizedPanoData.fullWidth *= ratio;\n resizedPanoData.fullHeight *= ratio;\n resizedPanoData.croppedWidth *= ratio;\n resizedPanoData.croppedHeight *= ratio;\n resizedPanoData.croppedX *= ratio;\n resizedPanoData.croppedY *= ratio;\n }\n\n const buffer = document.createElement('canvas');\n buffer.width = resizedPanoData.fullWidth;\n buffer.height = resizedPanoData.fullHeight;\n\n const ctx = buffer.getContext('2d');\n ctx.drawImage(img,\n resizedPanoData.croppedX, resizedPanoData.croppedY,\n resizedPanoData.croppedWidth, resizedPanoData.croppedHeight);\n\n texture = new THREE.Texture(buffer);\n }\n else {\n texture = new THREE.Texture(img);\n }\n\n texture.needsUpdate = true;\n texture.minFilter = THREE.LinearFilter;\n texture.generateMipmaps = false;\n\n return texture;\n }\n\n /**\n * @summary Load the six textures of the cube\n * @param {string[]} panorama\n * @returns {Promise.}\n * @throws {PSV.PSVError} when the image cannot be loaded\n * @private\n */\n __loadCubemapTexture(panorama) {\n if (this.prop.isCubemap === false) {\n throw new PSVError('The viewer was initialized with an equirectangular panorama, cannot switch to cubemap.');\n }\n\n if (this.config.fisheye) {\n logWarn('fisheye effect with cubemap texture can generate distorsion');\n }\n\n this.prop.isCubemap = true;\n\n const promises = [];\n const progress = [0, 0, 0, 0, 0, 0];\n\n for (let i = 0; i < 6; i++) {\n promises.push(\n this.__loadImage(panorama[i], (p) => {\n progress[i] = p;\n this.psv.loader.setProgress(sum(progress) / 6);\n })\n .then(img => this.__createCubemapTexture(img))\n );\n }\n\n return Promise.all(promises)\n .then(texture => ({ texture }));\n }\n\n /**\n * @summary Creates the final texture from image\n * @param {Image} img\n * @returns {external:THREE.Texture}\n * @private\n */\n __createCubemapTexture(img) {\n let texture;\n\n // resize image\n if (img.width > SYSTEM.maxTextureWidth) {\n const buffer = document.createElement('canvas');\n const ratio = SYSTEM.getMaxCanvasWidth() / img.width;\n\n buffer.width = img.width * ratio;\n buffer.height = img.height * ratio;\n\n const ctx = buffer.getContext('2d');\n ctx.drawImage(img, 0, 0, buffer.width, buffer.height);\n\n texture = new THREE.Texture(buffer);\n }\n else {\n texture = new THREE.Texture(img);\n }\n\n texture.needsUpdate = true;\n texture.minFilter = THREE.LinearFilter;\n texture.generateMipmaps = false;\n\n return texture;\n }\n\n /**\n * @summary Preload a panorama file without displaying it\n * @param {string|string[]|PSV.Cubemap} panorama\n * @returns {Promise}\n */\n preloadPanorama(panorama) {\n return this.loadTexture(panorama);\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport { PSVError } from '../PSVError';\nimport { addClasses, parsePosition } from '../utils';\nimport { AbstractComponent } from './AbstractComponent';\n\nconst LEFT_MAP = { 0: 'left', 0.5: 'center', 1: 'right' };\nconst TOP_MAP = { 0: 'top', 0.5: 'center', 1: 'bottom' };\nconst STATE = { NONE: 0, SHOWING: 1, HIDING: 2, READY: 3 };\n\n/**\n * @typedef {Object} PSV.components.Tooltip.Position\n * @summary Object defining the tooltip position\n * @property {number} top - Position of the tip of the arrow of the tooltip, in pixels\n * @property {number} left - Position of the tip of the arrow of the tooltip, in pixels\n * @property {string|string[]} [position='top center'] - Tooltip position toward it's arrow tip.\n * Accepted values are combinations of `top`, `center`, `bottom` and `left`, `center`, `right`\n * @property {Object} [box] - Used when displaying a tooltip on a marker\n * @property {number} [box.width=0]\n * @property {number} [box.height=0]\n */\n\n/**\n * @typedef {PSV.components.Tooltip.Position} PSV.components.Tooltip.Config\n * @summary Object defining the tooltip configuration\n * @property {string} content - HTML content of the tooltip\n * @property {string} [className] - Additional CSS class added to the tooltip\n * @property {*} [data] - Userdata associated to the tooltip\n */\n\n/**\n * @summary Tooltip class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Tooltip extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n * @param {{arrow: number, offset: number}} size\n */\n constructor(psv, size) {\n super(psv, 'psv-tooltip');\n\n /**\n * @override\n * @property {number} arrow\n * @property {number} offset\n * @property {number} width\n * @property {number} height\n * @property {string} pos\n * @property {string} state\n * @property {*} data\n */\n this.prop = {\n ...this.prop,\n ...size,\n state : STATE.NONE,\n width : 0,\n height: 0,\n pos : '',\n data : null,\n };\n\n /**\n * Tooltip content\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.content = document.createElement('div');\n this.content.className = 'psv-tooltip-content';\n this.container.appendChild(this.content);\n\n /**\n * Tooltip arrow\n * @member {HTMLElement}\n * @readonly\n * @package\n */\n this.arrow = document.createElement('div');\n this.arrow.className = 'psv-tooltip-arrow';\n this.container.appendChild(this.arrow);\n\n this.container.addEventListener('transitionend', this);\n\n this.container.style.top = '-1000px';\n this.container.style.left = '-1000px';\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.arrow;\n delete this.content;\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'transitionend': this.__onTransitionEnd(e); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n */\n toggle() {\n throw new PSVError('Tooltip cannot be toggled');\n }\n\n /**\n * @summary Displays the tooltip on the viewer\n * Do not call this method directly, use {@link PSV.services.TooltipRenderer} instead.\n * @param {PSV.components.Tooltip.Config} config\n *\n * @fires PSV.show-tooltip\n * @throws {PSV.PSVError} when the configuration is incorrect\n *\n * @package\n */\n show(config) {\n if (this.prop.state !== STATE.NONE) {\n throw new PSVError('Initialized tooltip cannot be re-initialized');\n }\n\n if (config.className) {\n addClasses(this.container, config.className);\n }\n\n this.content.innerHTML = config.content;\n\n const rect = this.container.getBoundingClientRect();\n this.prop.width = rect.right - rect.left;\n this.prop.height = rect.bottom - rect.top;\n\n this.prop.state = STATE.READY;\n\n this.move(config);\n\n this.prop.data = config.data;\n this.prop.state = STATE.SHOWING;\n\n this.psv.trigger(EVENTS.SHOW_TOOLTIP, this.prop.data, this);\n }\n\n /**\n * @summary Moves the tooltip to a new position\n * @param {PSV.components.Tooltip.Position} config\n *\n * @throws {PSV.PSVError} when the configuration is incorrect\n */\n move(config) {\n if (this.prop.state !== STATE.SHOWING && this.prop.state !== STATE.READY) {\n throw new PSVError('Uninitialized tooltip cannot be moved');\n }\n\n const t = this.container;\n const a = this.arrow;\n\n if (!config.position) {\n config.position = ['top', 'center'];\n }\n\n // parse position\n if (typeof config.position === 'string') {\n const tempPos = parsePosition(config.position);\n\n if (!(tempPos.x in LEFT_MAP) || !(tempPos.y in TOP_MAP)) {\n throw new PSVError(`Unable to parse tooltip position \"${config.position}\"`);\n }\n\n config.position = [TOP_MAP[tempPos.y], LEFT_MAP[tempPos.x]];\n }\n\n if (config.position[0] === 'center' && config.position[1] === 'center') {\n throw new PSVError('Unable to parse tooltip position \"center center\"');\n }\n\n // compute size\n const style = {\n posClass : config.position.slice(),\n width : this.prop.width,\n height : this.prop.height,\n top : 0,\n left : 0,\n arrowTop : 0,\n arrowLeft: 0,\n };\n\n // set initial position\n this.__computeTooltipPosition(style, config);\n\n // correct position if overflow\n let refresh = false;\n if (style.top < this.prop.offset) {\n style.posClass[0] = 'bottom';\n refresh = true;\n }\n else if (style.top + style.height > this.psv.prop.size.height - this.prop.offset) {\n style.posClass[0] = 'top';\n refresh = true;\n }\n if (style.left < this.prop.offset) {\n style.posClass[1] = 'right';\n refresh = true;\n }\n else if (style.left + style.width > this.psv.prop.size.width - this.prop.offset) {\n style.posClass[1] = 'left';\n refresh = true;\n }\n if (refresh) {\n this.__computeTooltipPosition(style, config);\n }\n\n // apply position\n t.style.top = style.top + 'px';\n t.style.left = style.left + 'px';\n\n a.style.top = style.arrowTop + 'px';\n a.style.left = style.arrowLeft + 'px';\n\n const newPos = style.posClass.join('-');\n if (newPos !== this.prop.pos) {\n t.classList.remove(`psv-tooltip--${this.prop.pos}`);\n\n this.prop.pos = newPos;\n t.classList.add(`psv-tooltip--${this.prop.pos}`);\n }\n }\n\n /**\n * @summary Hides the tooltip\n * @fires PSV.hide-tooltip\n */\n hide() {\n this.container.classList.remove('psv-tooltip--visible');\n this.prop.state = STATE.HIDING;\n\n this.psv.trigger(EVENTS.HIDE_TOOLTIP, this.prop.data);\n }\n\n /**\n * @summary Finalize transition\n * @param {TransitionEvent} e\n * @private\n */\n __onTransitionEnd(e) {\n if (e.propertyName === 'transform') {\n switch (this.prop.state) {\n case STATE.SHOWING:\n this.container.classList.add('psv-tooltip--visible');\n this.prop.state = STATE.READY;\n break;\n\n case STATE.HIDING:\n this.prop.state = STATE.NONE;\n this.destroy();\n break;\n\n default:\n // nothing\n }\n }\n }\n\n /**\n * @summary Computes the position of the tooltip and its arrow\n * @param {Object} style\n * @param {Object} config\n * @private\n */\n __computeTooltipPosition(style, config) {\n let topBottom = false;\n\n if (!config.box) {\n config.box = {\n width : 0,\n height: 0,\n };\n }\n\n switch (style.posClass[0]) {\n case 'bottom':\n style.top = config.top + config.box.height + this.prop.offset + this.prop.arrow;\n style.arrowTop = -this.prop.arrow * 2;\n topBottom = true;\n break;\n\n case 'center':\n style.top = config.top + config.box.height / 2 - style.height / 2;\n style.arrowTop = style.height / 2 - this.prop.arrow;\n break;\n\n case 'top':\n style.top = config.top - style.height - this.prop.offset - this.prop.arrow;\n style.arrowTop = style.height;\n topBottom = true;\n break;\n\n // no default\n }\n\n switch (style.posClass[1]) {\n case 'right':\n if (topBottom) {\n style.left = config.left + config.box.width / 2 - this.prop.offset - this.prop.arrow;\n style.arrowLeft = this.prop.offset;\n }\n else {\n style.left = config.left + config.box.width + this.prop.offset + this.prop.arrow;\n style.arrowLeft = -this.prop.arrow * 2;\n }\n break;\n\n case 'center':\n style.left = config.left + config.box.width / 2 - style.width / 2;\n style.arrowLeft = style.width / 2 - this.prop.arrow;\n break;\n\n case 'left':\n if (topBottom) {\n style.left = config.left - style.width + config.box.width / 2 + this.prop.offset + this.prop.arrow;\n style.arrowLeft = style.width - this.prop.offset - this.prop.arrow * 2;\n }\n else {\n style.left = config.left - style.width - this.prop.offset - this.prop.arrow;\n style.arrowLeft = style.width;\n }\n break;\n\n // no default\n }\n }\n\n}\n","import { Tooltip } from '../components/Tooltip';\nimport { getStyle } from '../utils';\nimport { AbstractService } from './AbstractService';\n\n/**\n * @summary Tooltip renderer\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class TooltipRenderer extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n\n const testTooltip = new Tooltip(this.psv);\n\n /**\n * @summary Computed static sizes\n * @member {Object}\n * @package\n * @property {number} arrowSize\n * @property {number} offset\n */\n this.size = {\n arrow : parseInt(getStyle(testTooltip.arrow, 'borderTopWidth'), 10),\n offset: parseInt(getStyle(testTooltip.container, 'outlineWidth'), 10),\n };\n\n testTooltip.destroy();\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.size;\n\n super.destroy();\n }\n\n /**\n * @summary Displays a tooltip on the viewer\n * @param {PSV.components.Tooltip.Config} config\n * @returns {PSV.components.Tooltip}\n *\n * @fires PSV.show-tooltip\n * @throws {PSV.PSVError} when the configuration is incorrect\n *\n * @example\n * viewer.tooltip.create({ content: 'Hello world', top: 200, left: 450, position: 'center bottom'})\n */\n create(config) {\n const tooltip = new Tooltip(this.psv, this.size);\n tooltip.show(config);\n\n return tooltip;\n }\n\n}\n","import * as THREE from 'three';\nimport { EventEmitter } from 'uevent';\nimport { Animation } from './Animation';\nimport { Loader } from './components/Loader';\nimport { Navbar } from './components/Navbar';\nimport { Notification } from './components/Notification';\nimport { Overlay } from './components/Overlay';\nimport { Panel } from './components/Panel';\nimport { CONFIG_PARSERS, DEFAULTS, getConfig, READONLY_OPTIONS } from './data/config';\nimport { CHANGE_EVENTS, EVENTS, IDS, VIEWER_DATA } from './data/constants';\nimport { SYSTEM } from './data/system';\nimport errorIcon from './icons/error.svg';\nimport { PSVError } from './PSVError';\nimport { DataHelper } from './services/DataHelper';\nimport { EventsHandler } from './services/EventsHandler';\nimport { Renderer } from './services/Renderer';\nimport { TextureLoader } from './services/TextureLoader';\nimport { TooltipRenderer } from './services/TooltipRenderer';\nimport {\n bound,\n each,\n exitFullscreen,\n getAngle,\n getShortestArc,\n isExtendedPosition,\n isFullscreenEnabled,\n requestFullscreen,\n throttle,\n toggleClass\n} from './utils';\n\nTHREE.Cache.enabled = true;\n\n/**\n * @summary Main class\n * @memberOf PSV\n * @extends {external:uEvent.EventEmitter}\n */\nexport class Viewer extends EventEmitter {\n\n /**\n * @param {PSV.Options} options\n * @fires PSV.ready\n * @throws {PSV.PSVError} when the configuration is incorrect\n */\n constructor(options) {\n super();\n\n SYSTEM.load();\n\n // must support WebGL\n if (!SYSTEM.isWebGLSupported) {\n throw new PSVError('WebGL is not supported.');\n }\n\n if (SYSTEM.maxTextureWidth === 0) {\n throw new PSVError('Unable to detect system capabilities');\n }\n\n /**\n * @summary Internal properties\n * @member {Object}\n * @protected\n * @property {boolean} ready - when all components are loaded\n * @property {boolean} needsUpdate - if the view needs to be renderer\n * @property {boolean} isCubemap - if the panorama is a cubemap\n * @property {PSV.Position} position - current direction of the camera\n * @property {external:THREE.Vector3} direction - direction of the camera\n * @property {number} zoomLvl - current zoom level\n * @property {number} vFov - vertical FOV\n * @property {number} hFov - horizontal FOV\n * @property {number} aspect - viewer aspect ratio\n * @property {number} moveSpeed - move speed (computed with pixel ratio and configuration moveSpeed)\n * @property {Function} autorotateCb - update callback of the automatic rotation\n * @property {PSV.Animation} animationPromise - promise of the current animation (either go to position or image transition)\n * @property {Promise} loadingPromise - promise of the setPanorama method\n * @property startTimeout - timeout id of the automatic rotation delay\n * @property {PSV.Size} size - size of the container\n * @property {PSV.PanoData} panoData - panorama metadata\n */\n this.prop = {\n ready : false,\n uiRefresh : false,\n needsUpdate : false,\n fullscreen : false,\n isCubemap : undefined,\n position : {\n longitude: 0,\n latitude : 0,\n },\n direction : null,\n zoomLvl : null,\n vFov : null,\n hFov : null,\n aspect : null,\n moveSpeed : 0.1,\n autorotateCb : null,\n animationPromise: null,\n loadingPromise : null,\n startTimeout : null,\n size : {\n width : 0,\n height: 0,\n },\n panoData : {\n fullWidth : 0,\n fullHeight : 0,\n croppedWidth : 0,\n croppedHeight: 0,\n croppedX : 0,\n croppedY : 0,\n },\n };\n\n /**\n * @summary Configuration holder\n * @type {PSV.Options}\n * @readonly\n */\n this.config = getConfig(options);\n\n /**\n * @summary Top most parent\n * @member {HTMLElement}\n * @readonly\n */\n this.parent = (typeof options.container === 'string') ? document.getElementById(options.container) : options.container;\n this.parent[VIEWER_DATA] = this;\n\n /**\n * @summary Main container\n * @member {HTMLElement}\n * @readonly\n */\n this.container = document.createElement('div');\n this.container.classList.add('psv-container');\n this.parent.appendChild(this.container);\n\n /**\n * @summary All child components\n * @type {PSV.components.AbstractComponent[]}\n * @readonly\n * @package\n */\n this.children = [];\n\n /**\n * @summary All plugins\n * @type {Object}\n * @readonly\n * @package\n */\n this.plugins = {};\n\n /**\n * @summary Main render controller\n * @type {PSV.services.Renderer}\n * @readonly\n */\n this.renderer = new Renderer(this);\n\n /**\n * @summary Textures loader\n * @type {PSV.services.TextureLoader}\n * @readonly\n */\n this.textureLoader = new TextureLoader(this);\n\n /**\n * @summary Main event handler\n * @type {PSV.services.EventsHandler}\n * @readonly\n */\n this.eventsHandler = new EventsHandler(this);\n\n /**\n * @summary Utilities to help converting data\n * @type {PSV.services.DataHelper}\n * @readonly\n */\n this.dataHelper = new DataHelper(this);\n\n /**\n * @member {PSV.components.Loader}\n * @readonly\n */\n this.loader = new Loader(this);\n\n /**\n * @member {PSV.components.Navbar}\n * @readonly\n */\n this.navbar = new Navbar(this);\n\n /**\n * @member {PSV.components.Panel}\n * @readonly\n */\n this.panel = new Panel(this);\n\n /**\n * @member {PSV.services.TooltipRenderer}\n * @readonly\n */\n this.tooltip = new TooltipRenderer(this);\n\n /**\n * @member {PSV.components.Notification}\n * @readonly\n */\n this.notification = new Notification(this);\n\n /**\n * @member {PSV.components.Overlay}\n * @readonly\n */\n this.overlay = new Overlay(this);\n\n this.eventsHandler.init();\n\n this.__resizeRefresh = throttle(() => this.refreshUi('resize'), 500);\n\n // apply container size\n this.resize(this.config.size);\n\n // actual move speed depends on pixel-ratio\n this.prop.moveSpeed = THREE.Math.degToRad(this.config.moveSpeed / SYSTEM.pixelRatio);\n\n // init plugins\n this.config.plugins.forEach(([plugin, opts]) => {\n this.plugins[plugin.id] = new plugin(this, opts); // eslint-disable-line new-cap\n });\n\n // init buttons\n this.navbar.setButtons(this.config.navbar);\n\n // load panorama\n if (this.config.panorama) {\n this.setPanorama(this.config.panorama);\n }\n\n SYSTEM.isTouchEnabled.then(enabled => toggleClass(this.container, 'psv--is-touch', enabled));\n\n // enable GUI after first render\n this.once(EVENTS.RENDER, () => {\n if (this.config.navbar) {\n this.container.classList.add('psv--has-navbar');\n this.navbar.show();\n }\n\n // Queue autorotate\n if (this.config.autorotateDelay) {\n this.prop.startTimeout = setTimeout(() => this.startAutorotate(), this.config.autorotateDelay);\n }\n\n this.prop.ready = true;\n\n setTimeout(() => {\n this.refreshUi('init');\n\n this.trigger(EVENTS.READY);\n }, 0);\n });\n }\n\n /**\n * @summary Destroys the viewer\n * @description The memory used by the ThreeJS context is not totally cleared. This will be fixed as soon as possible.\n */\n destroy() {\n this.__stopAll();\n this.stopKeyboardControl();\n this.exitFullscreen();\n\n this.eventsHandler.destroy();\n this.renderer.destroy();\n this.textureLoader.destroy();\n this.dataHelper.destroy();\n\n this.children.slice().forEach(child => child.destroy());\n this.children.length = 0;\n\n each(this.plugins, plugin => plugin.destroy());\n delete this.plugins;\n\n this.parent.removeChild(this.container);\n delete this.parent[VIEWER_DATA];\n\n delete this.parent;\n delete this.container;\n\n delete this.loader;\n delete this.navbar;\n delete this.panel;\n delete this.tooltip;\n delete this.notification;\n delete this.overlay;\n\n delete this.config;\n }\n\n /**\n * @summary Refresh UI\n * @package\n */\n refreshUi(reason) {\n if (!this.prop.ready) {\n return;\n }\n\n if (!this.prop.uiRefresh) {\n // console.log(`PhotoSphereViewer: UI Refresh, ${reason}`);\n\n this.prop.uiRefresh = true;\n\n this.children.every((child) => {\n child.refreshUi();\n return this.prop.uiRefresh === true;\n });\n\n this.prop.uiRefresh = false;\n }\n else if (this.prop.uiRefresh !== 'new') {\n this.prop.uiRefresh = 'new';\n\n // wait for current refresh to cancel\n setTimeout(() => {\n this.prop.uiRefresh = false;\n this.refreshUi(reason);\n });\n }\n }\n\n /**\n * @summary Returns the instance of a plugin if it exists\n * @param {Class|string} pluginId\n * @returns {PSV.plugins.AbstractPlugin}\n */\n getPlugin(pluginId) {\n return pluginId ? this.plugins[typeof pluginId === 'function' ? pluginId.id : pluginId] : null;\n }\n\n /**\n * @summary Returns the current position of the camera\n * @returns {PSV.Position}\n */\n getPosition() {\n return {\n longitude: this.prop.position.longitude,\n latitude : this.prop.position.latitude,\n };\n }\n\n /**\n * @summary Returns the current zoom level\n * @returns {number}\n */\n getZoomLevel() {\n return this.prop.zoomLvl;\n }\n\n /**\n * @summary Returns the current viewer size\n * @returns {PSV.Size}\n */\n getSize() {\n return {\n width : this.prop.size.width,\n height: this.prop.size.height,\n };\n }\n\n /**\n * @summary Checks if the automatic rotation is enabled\n * @returns {boolean}\n */\n isAutorotateEnabled() {\n return !!this.prop.autorotateCb;\n }\n\n /**\n * @summary Checks if the viewer is in fullscreen\n * @returns {boolean}\n */\n isFullscreenEnabled() {\n if (SYSTEM.fullscreenEvent) {\n return isFullscreenEnabled(this.container);\n }\n else {\n return this.prop.fullscreen;\n }\n }\n\n /**\n * @summary Flags the view has changed for the next render\n */\n needsUpdate() {\n this.prop.needsUpdate = true;\n\n if (!this.renderer.mainReqid && this.renderer.renderer) {\n this.renderer.__renderLoop(+new Date());\n }\n }\n\n /**\n * @summary Resizes the canvas when the window is resized\n * @fires PSV.size-updated\n */\n autoSize() {\n if (this.container.clientWidth !== this.prop.size.width || this.container.clientHeight !== this.prop.size.height) {\n this.prop.size.width = Math.round(this.container.clientWidth);\n this.prop.size.height = Math.round(this.container.clientHeight);\n this.prop.aspect = this.prop.size.width / this.prop.size.height;\n this.prop.hFov = this.dataHelper.vFovToHFov(this.prop.vFov);\n\n this.needsUpdate();\n this.trigger(EVENTS.SIZE_UPDATED, this.getSize());\n this.__resizeRefresh();\n }\n }\n\n /**\n * @summary Loads a new panorama file\n * @description Loads a new panorama file, optionally changing the camera position/zoom and activating the transition animation.
\n * If the \"options\" parameter is not defined, the camera will not move and the ongoing animation will continue.
\n * If another loading is already in progress it will be aborted.\n * @param {string|string[]|PSV.Cubemap} path - URL of the new panorama file\n * @param {PSV.PanoramaOptions} [options]\n * @returns {Promise}\n */\n setPanorama(path, options = {}) {\n if (this.prop.loadingPromise !== null) {\n this.textureLoader.abortLoading();\n }\n\n // apply default parameters on first load\n if (!this.prop.ready) {\n if (!('longitude' in options) && !this.prop.isCubemap) {\n options.longitude = this.config.defaultLong;\n }\n if (!('latitude' in options) && !this.prop.isCubemap) {\n options.latitude = this.config.defaultLat;\n }\n if (!('zoom' in options)) {\n options.zoom = this.config.defaultZoomLvl;\n }\n if (!('sphereCorrection' in options)) {\n options.sphereCorrection = this.config.sphereCorrection;\n }\n if (!('panoData' in options)) {\n options.panoData = this.config.panoData;\n }\n }\n\n if (options.transition === undefined || options.transition === true) {\n options.transition = 1500;\n }\n if (options.showLoader === undefined) {\n options.showLoader = true;\n }\n\n const positionProvided = isExtendedPosition(options);\n const zoomProvided = 'zoom' in options;\n\n if (positionProvided || zoomProvided) {\n this.__stopAll();\n }\n\n this.hideError();\n\n this.config.panorama = path;\n\n const done = (err) => {\n if (err && err.type === 'abort') {\n console.warn(err);\n }\n else if (err) {\n this.showError(this.config.lang.loadError);\n console.error(err);\n }\n\n this.loader.hide();\n this.renderer.show();\n\n this.prop.loadingPromise = null;\n\n if (err) {\n return Promise.reject(err);\n }\n else {\n return true;\n }\n };\n\n if (!options.transition || !this.prop.ready) {\n if (options.showLoader || !this.prop.ready) {\n this.loader.show();\n }\n\n this.prop.loadingPromise = this.textureLoader.loadTexture(this.config.panorama, options.panoData)\n .then((textureData) => {\n this.renderer.setTexture(textureData);\n this.renderer.setPanoramaPose(textureData.panoData);\n this.renderer.setSphereCorrection(options.sphereCorrection);\n\n if (zoomProvided) {\n this.zoom(options.zoom);\n }\n if (positionProvided) {\n this.rotate(options);\n }\n })\n .then(done, done);\n }\n else {\n if (options.showLoader) {\n this.loader.show();\n }\n\n this.prop.loadingPromise = this.textureLoader.loadTexture(this.config.panorama, options.panoData)\n .then((textureData) => {\n this.loader.hide();\n\n return this.renderer.transition(textureData, options);\n })\n .then(done, done);\n }\n\n return this.prop.loadingPromise;\n }\n\n /**\n * @summary Update options\n * @param {PSV.Options} options\n * @fires PSV.config-changed\n */\n setOptions(options) {\n each(options, (value, key) => {\n if (!Object.prototype.hasOwnProperty.call(DEFAULTS, key)) {\n throw new PSVError(`Unknown option ${key}`);\n }\n\n if (READONLY_OPTIONS[key]) {\n throw new PSVError(READONLY_OPTIONS[key]);\n }\n\n if (CONFIG_PARSERS[key]) {\n this.config[key] = CONFIG_PARSERS[key](value, options);\n }\n else {\n this.config[key] = value;\n }\n\n switch (key) {\n case 'caption':\n this.navbar.setCaption(value);\n break;\n\n case 'size':\n this.resize(value);\n break;\n\n case 'sphereCorrection':\n this.renderer.setSphereCorrection(value);\n break;\n\n case 'navbar':\n case 'lang':\n this.navbar.setButtons(this.config.navbar);\n break;\n\n case 'moveSpeed':\n this.prop.moveSpeed = THREE.Math.degToRad(value / SYSTEM.pixelRatio);\n break;\n\n case 'minFov':\n case 'maxFov':\n this.prop.zoomLvl = this.dataHelper.fovToZoomLevel(this.prop.vFov);\n this.trigger(EVENTS.ZOOM_UPDATED, this.getZoomLevel());\n break;\n\n case 'canvasBackground':\n this.renderer.canvasContainer.style.background = this.config.canvasBackground;\n break;\n\n default:\n break;\n }\n });\n\n this.needsUpdate();\n this.refreshUi('set options');\n\n this.trigger(EVENTS.CONFIG_CHANGED, Object.keys(options));\n }\n\n /**\n * @summary Update options\n * @param {string} option\n * @param {any} value\n * @fires PSV.config-changed\n */\n setOption(option, value) {\n this.setOptions({ [option]: value });\n }\n\n /**\n * @summary Starts the automatic rotation\n * @fires PSV.autorotate\n */\n startAutorotate() {\n this.__stopAll();\n\n this.prop.autorotateCb = (() => {\n let last;\n let elapsed;\n\n return (e, timestamp) => {\n elapsed = last === undefined ? 0 : timestamp - last;\n last = timestamp;\n\n this.rotate({\n longitude: this.prop.position.longitude + this.config.autorotateSpeed * elapsed / 1000,\n latitude : this.prop.position.latitude - (this.prop.position.latitude - this.config.autorotateLat) / 200,\n });\n };\n })();\n\n this.on(EVENTS.BEFORE_RENDER, this.prop.autorotateCb);\n\n this.trigger(EVENTS.AUTOROTATE, true);\n }\n\n /**\n * @summary Stops the automatic rotation\n * @fires PSV.autorotate\n */\n stopAutorotate() {\n if (this.prop.startTimeout) {\n clearTimeout(this.prop.startTimeout);\n this.prop.startTimeout = null;\n }\n\n if (this.isAutorotateEnabled()) {\n this.off(EVENTS.BEFORE_RENDER, this.prop.autorotateCb);\n this.prop.autorotateCb = null;\n\n this.trigger(EVENTS.AUTOROTATE, false);\n }\n }\n\n /**\n * @summary Starts or stops the automatic rotation\n * @fires PSV.autorotate\n */\n toggleAutorotate() {\n if (this.isAutorotateEnabled()) {\n this.stopAutorotate();\n }\n else {\n this.startAutorotate();\n }\n }\n\n /**\n * @summary Displays an error message\n * @param {string} message\n */\n showError(message) {\n this.overlay.show({\n id : IDS.ERROR,\n image : errorIcon,\n text : message,\n dissmisable: false,\n });\n }\n\n /**\n * @summary Hides the error message\n */\n hideError() {\n this.overlay.hide(IDS.ERROR);\n }\n\n /**\n * @summary Rotates the view to specific longitude and latitude\n * @param {PSV.ExtendedPosition} position\n * @fires PSV.before-rotate\n * @fires PSV.position-updated\n */\n rotate(position) {\n const e = this.trigger(EVENTS.BEFORE_ROTATE, position);\n if (e.isDefaultPrevented()) {\n return;\n }\n\n const cleanPosition = this.change(CHANGE_EVENTS.GET_ROTATE_POSITION, this.dataHelper.cleanPosition(position));\n\n if (this.prop.position.longitude !== cleanPosition.longitude || this.prop.position.latitude !== cleanPosition.latitude) {\n this.prop.position.longitude = cleanPosition.longitude;\n this.prop.position.latitude = cleanPosition.latitude;\n\n this.needsUpdate();\n\n this.trigger(EVENTS.POSITION_UPDATED, this.getPosition());\n }\n }\n\n /**\n * @summary Rotates and zooms the view with a smooth animation\n * @param {PSV.AnimateOptions} options - position and/or zoom level\n * @returns {PSV.Animation}\n */\n animate(options) {\n this.__stopAll();\n\n const positionProvided = isExtendedPosition(options);\n const zoomProvided = 'zoom' in options;\n\n const animProperties = {};\n let duration;\n\n // clean/filter position and compute duration\n if (positionProvided) {\n const cleanPosition = this.change(CHANGE_EVENTS.GET_ANIMATE_POSITION, this.dataHelper.cleanPosition(options));\n\n // longitude offset for shortest arc\n const tOffset = getShortestArc(this.prop.position.longitude, cleanPosition.longitude);\n\n animProperties.longitude = { start: this.prop.position.longitude, end: this.prop.position.longitude + tOffset };\n animProperties.latitude = { start: this.prop.position.latitude, end: cleanPosition.latitude };\n\n duration = this.dataHelper.speedToDuration(options.speed, getAngle(this.prop.position, cleanPosition));\n }\n\n // clean/filter zoom and compute duration\n if (zoomProvided) {\n const dZoom = Math.abs(options.zoom - this.prop.zoomLvl);\n\n animProperties.zoom = { start: this.prop.zoomLvl, end: options.zoom };\n\n if (!duration) {\n // if animating zoom only and a speed is given, use an arbitrary PI/4 to compute the duration\n duration = this.dataHelper.speedToDuration(options.speed, Math.PI / 4 * dZoom / 100);\n }\n }\n\n // if no animation needed\n if (!duration) {\n if (positionProvided) {\n this.rotate(options);\n }\n if (zoomProvided) {\n this.zoom(options.zoom);\n }\n\n return Animation.resolve();\n }\n\n this.prop.animationPromise = new Animation({\n properties: animProperties,\n duration : duration,\n easing : 'inOutSine',\n onTick : (properties) => {\n if (positionProvided) {\n this.rotate(properties);\n }\n if (zoomProvided) {\n this.zoom(properties.zoom);\n }\n },\n });\n\n return this.prop.animationPromise;\n }\n\n /**\n * @summary Stops the ongoing animation\n * @description The return value is a Promise because the is no guaranty the animation can be stopped synchronously.\n * @returns {Promise} Resolved when the animation has ben cancelled\n */\n stopAnimation() {\n if (this.prop.animationPromise) {\n return new Promise((resolve) => {\n this.prop.animationPromise.finally(resolve);\n this.prop.animationPromise.cancel();\n this.prop.animationPromise = null;\n });\n }\n else {\n return Promise.resolve();\n }\n }\n\n /**\n * @summary Zooms to a specific level between `max_fov` and `min_fov`\n * @param {number} level - new zoom level from 0 to 100\n * @fires PSV.zoom-updated\n */\n zoom(level) {\n const newZoomLvl = bound(level, 0, 100);\n\n if (this.prop.zoomLvl !== newZoomLvl) {\n this.prop.zoomLvl = newZoomLvl;\n this.prop.vFov = this.dataHelper.zoomLevelToFov(this.prop.zoomLvl);\n this.prop.hFov = this.dataHelper.vFovToHFov(this.prop.vFov);\n\n this.needsUpdate();\n this.trigger(EVENTS.ZOOM_UPDATED, this.getZoomLevel());\n this.rotate(this.prop.position);\n }\n }\n\n /**\n * @summary Increases the zoom level by 1\n */\n zoomIn() {\n this.zoom(this.prop.zoomLvl + this.config.zoomButtonIncrement);\n }\n\n /**\n * @summary Decreases the zoom level by 1\n */\n zoomOut() {\n this.zoom(this.prop.zoomLvl - this.config.zoomButtonIncrement);\n }\n\n /**\n * @summary Resizes the viewer\n * @param {PSV.CssSize} size\n */\n resize(size) {\n ['width', 'height'].forEach((dim) => {\n if (size && size[dim]) {\n if (/^[0-9.]+$/.test(size[dim])) {\n size[dim] += 'px';\n }\n this.parent.style[dim] = size[dim];\n }\n });\n\n this.autoSize();\n }\n\n /**\n * @summary Enters the fullscreen mode\n * @fires PSV.fullscreen-updated\n */\n enterFullscreen() {\n if (SYSTEM.fullscreenEvent) {\n requestFullscreen(this.container);\n }\n else {\n this.container.classList.add('psv-container--fullscreen');\n this.autoSize();\n this.eventsHandler.__fullscreenToggled(true);\n }\n }\n\n /**\n * @summary Exits the fullscreen mode\n * @fires PSV.fullscreen-updated\n */\n exitFullscreen() {\n if (this.isFullscreenEnabled()) {\n if (SYSTEM.fullscreenEvent) {\n exitFullscreen();\n }\n else {\n this.container.classList.remove('psv-container--fullscreen');\n this.autoSize();\n this.eventsHandler.__fullscreenToggled(false);\n }\n }\n }\n\n /**\n * @summary Enters or exits the fullscreen mode\n * @fires PSV.fullscreen-updated\n */\n toggleFullscreen() {\n if (!this.isFullscreenEnabled()) {\n this.enterFullscreen();\n }\n else {\n this.exitFullscreen();\n }\n }\n\n /**\n * @summary Enables the keyboard controls (done automatically when entering fullscreen)\n */\n startKeyboardControl() {\n this.eventsHandler.enableKeyboard();\n }\n\n /**\n * @summary Disables the keyboard controls (done automatically when exiting fullscreen)\n */\n stopKeyboardControl() {\n this.eventsHandler.disableKeyboard();\n }\n\n /**\n * @summary Stops all current animations\n * @private\n */\n __stopAll() {\n this.stopAutorotate();\n this.stopAnimation();\n\n this.trigger(EVENTS.STOP_ALL);\n }\n\n}\n"],"names":["MOVE_THRESHOLD","DBLCLICK_DELAY","LONGTOUCH_DELAY","TWOFINGERSOVERLAY_DELAY","CTRLZOOM_TIMEOUT","INERTIA_WINDOW","SPHERE_RADIUS","SPHERE_VERTICES","CUBE_VERTICES","CUBE_MAP","CUBE_HASHMAP","VIEWER_DATA","ACTIONS","ROTATE_LAT_UP","ROTATE_LAT_DOWN","ROTATE_LONG_RIGHT","ROTATE_LONG_LEFT","ZOOM_IN","ZOOM_OUT","TOGGLE_AUTOROTATE","EVENTS","AUTOROTATE","BEFORE_RENDER","BEFORE_ROTATE","CLICK","CLOSE_PANEL","CONFIG_CHANGED","DOUBLE_CLICK","FULLSCREEN_UPDATED","HIDE_NOTIFICATION","HIDE_OVERLAY","HIDE_TOOLTIP","OPEN_PANEL","PANORAMA_LOADED","POSITION_UPDATED","READY","RENDER","SHOW_NOTIFICATION","SHOW_OVERLAY","SHOW_TOOLTIP","SIZE_UPDATED","STOP_ALL","ZOOM_UPDATED","CHANGE_EVENTS","GET_ANIMATE_POSITION","GET_ROTATE_POSITION","IDS","MENU","TWO_FINGERS","CTRL_ZOOM","ERROR","EASINGS","linear","t","inQuad","outQuad","inOutQuad","inCubic","outCubic","inOutCubic","inQuart","outQuart","inOutQuart","inQuint","outQuint","inOutQuint","inSine","Math","cos","PI","outSine","sin","inOutSine","inExpo","pow","outExpo","inOutExpo","inCirc","sqrt","outCirc","inOutCirc","toggleClass","element","className","active","classList","currentClassName","getAttribute","currentActive","indexOf","regex","RegExp","undefined","length","replace","setAttribute","toggle","contains","add","remove","addClasses","split","forEach","name","removeClasses","hasParent","el","parent","test","parentNode","getClosest","selector","matches","msMatchesSelector","bind","SVGElement","parentElement","KEYMAP","MS_KEYMAP","Add","Del","Down","Esc","Left","Right","Spacebar","Subtract","Up","getEventKey","evt","key","keyCode","which","isFullscreenEnabled","elt","document","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","call","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","getStyle","prop","window","getComputedStyle","normalizeWheel","event","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","spinX","spinY","pixelX","pixelY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","bound","x","min","max","isInteger","value","Number","isFinite","floor","sum","array","reduce","a","b","distance","p1","p2","y","getShortestArc","from","to","tCandidates","candidate","newCandidate","abs","Infinity","getAngle","position1","position2","acos","latitude","longitude","greatArcDistance","λ1","φ1","λ2","φ2","dasherize","str","s","i","toLowerCase","throttle","func","wait","self","args","result","timeout","previous","later","Date","now","apply","remaining","arguments","clearTimeout","setTimeout","isPlainObject","obj","Object","getPrototypeOf","proto","prototype","toString","deepmerge","target","src","first","merge","Array","isArray","e","keys","clone","isEmpty","constructor","each","object","callback","intersect","array1","array2","filter","isNil","val","firstNonNull","values","PSVError","message","Error","captureStackTrace","stack","create","logWarn","console","warn","isExtendedPosition","some","key1","key2","getXMPValue","data","attr","match","parseInt","isNaN","CSS_POSITIONS","top","bottom","left","right","center","parsePosition","tokens","toLocaleLowerCase","slice","xFirst","map","token","reverse","parsed","join","parseFloat","parseSpeed","speed","speedStr","trim","speedValue","speedUnit","THREE","degToRad","parseAngle","angle","zeroCenter","halfCircle","unit","Animation","options","__cancelled","__resolved","__promise","Promise","resolve","reject","__resolve","__reject","easing","__start","delay","__delayTimeout","requestAnimationFrame","__run","timestamp","progress","duration","current","properties","start","end","onTick","then","onFulfilled","onRejected","p","cancel","catch","finally","onFinally","cancelAnimationFrame","AbstractComponent","psv","children","push","visible","container","createElement","appendChild","destroy","removeChild","childIdx","splice","child","refreshUi","every","uiRefresh","isVisible","hide","show","style","display","AbstractButton","navbar","collapsable","id","enabled","supported","collapsed","width","offsetWidth","icon","__setIcon","config","lang","title","addEventListener","onClick","stopPropagation","checkSupported","supportedOrObject","isSupported","initial","promise","toggleActive","iconActive","refresh","disable","enable","collapse","uncollapse","innerHTML","querySelector","AutorotateButton","on","off","handleEvent","type","toggleAutorotate","play","playActive","CustomButton","random","substr","content","DownloadButton","link","href","panorama","download","click","FullscreenButton","toggleFullscreen","fullscreenIn","fullscreenOut","MenuButton","__hideMenu","__showMenu","panel","MENU_TEMPLATE","BUTTON_DATA","noMargin","clickHandler","li","buttonId","dataset","getButton","menuIcon","buttons","dataKey","menu","button","SYSTEM","loaded","pixelRatio","isWebGLSupported","isTouchEnabled","maxTextureWidth","mouseWheelEvent","fullscreenEvent","load","ctx","getWebGLCtx","devicePixelRatio","getMaxTextureWidth","getMouseWheelEvent","getFullscreenEvent","maxCanvasWidth","getMaxCanvasWidth","canvas","names","context","getContext","listener","removeEventListener","getParameter","MAX_TEXTURE_SIZE","maxWidth","height","fillStyle","fillRect","getImageData","onmousewheel","FULLSCREEN_EVT_MAP","validExits","exit","AbstractZoomButton","buttondown","longPressTimeout","longPressAnimation","__onMouseUp","__onMouseDown","__startLongPressInterval","zoom","zoomLvl","zoomButtonIncrement","ZoomInButton","zoomIn","ZoomOutButton","zoomOut","ZoomRangeButton","mousedown","mediaMinWidth","zoomRange","zoomValue","ready","__moveZoomValue","once","__stopZoomChange","__initZoomChangeWithMouse","__initZoomChangeByTouch","__changeZoomWithMouse","__changeZoomByTouch","size","level","__changeZoom","clientX","changedTouches","preventDefault","userInput","getBoundingClientRect","zoomLevel","DEFAULTS","caption","loadingImg","loadingTxt","fisheye","minFov","maxFov","defaultZoomLvl","defaultLong","defaultLat","sphereCorrection","sphereCorrectionReorder","moveSpeed","autorotateDelay","autorotateSpeed","autorotateLat","moveInertia","mousewheel","mousewheelSpeed","mousemove","captureCursor","mousewheelCtrlKey","touchmoveTwoFingers","useXmpData","panoData","canvasBackground","withCredentials","autorotate","fullscreen","twoFingers","ctrlZoom","loadError","keyboard","plugins","READONLY_OPTIONS","CONFIG_PARSERS","plugin","getConfig","tempConfig","hasOwnProperty","CaptionButton","notification","info","NavbarCaption","contentVisible","contentWidth","setCaption","html","availableWidth","AVAILABLE_BUTTONS","registerButton","Navbar","setButtons","item","__cleanButtons","warnNotFound","totalWidth","visibleButtons","collapsableButtons","AbstractPlugin","EventEmitter","Loader","loader","clientWidth","tickness","lastChild","inner","round","maxHeight","setProgress","clearRect","lineWidth","strokeStyle","beginPath","arc","stroke","Notification","trigger","Overlay","contentId","dissmisable","image","text","subtext","PANEL_MIN_WIDTH","Panel","mouseX","mouseY","resizer","closeBtn","__onTouchStart","__onMouseMove","__onTouchMove","scrollTop","__startResize","__resize","touches","clientY","AbstractService","DataHelper","fovToZoomLevel","fov","temp","zoomLevelToFov","vFovToHFov","vFov","radToDeg","atan","tan","aspect","speedToDuration","textureCoordsToSphericalCoords","point","isCubemap","relativeX","croppedX","fullWidth","relativeY","croppedY","fullHeight","sphericalCoordsToTextureCoords","position","relativeLong","relativeLat","sphericalCoordsToVector3","vector3ToSphericalCoords","vector","phi","z","theta","atan2","viewerCoordsToVector3","viewerPoint","screen","renderer","raycaster","setFromCamera","camera","intersects","intersectObjects","scene","vector3ToViewerCoords","vectorClone","project","cleanPosition","cleanSphereCorrection","pan","tilt","roll","EventsHandler","state","keyboardEnabled","moving","zooming","startMouseX","startMouseY","mouseHistory","pinchDist","ctrlKeyDown","dblclickData","dblclickTimeout","longtouchTimeout","twofingersTimeout","ctrlZoomTimeout","__onResize","autoSize","init","__onKeyDown","__onKeyUp","__onTouchEnd","__fullscreenToggled","__onMouseEnter","__onMouseLeave","__onMouseWheel","enableKeyboard","disableKeyboard","overlay","dLong","dLat","dZoom","rotate","hFov","__startMove","__stopMove","__move","__moveAbsolute","__click","__cancelLongTouch","__startMoveZoom","__stopMoveZoom","__cancelTwoFingersOverlay","gestureIcon","__moveZoom","mousewheelIcon","delta","force","startKeyboardControl","stopKeyboardControl","stopAutorotate","stopAnimation","__logMouseMove","__stopMoveInertia","direction","norm","animationPromise","longtouch","boundingRect","rightclick","viewerX","viewerY","dataHelper","sphericalCoords","textureCoords","textureX","textureY","log","rotation","containerRect","Renderer","mainReqid","mesh","meshContainer","canvasContainer","background","cursor","setSize","__cleanTHREEScene","opacity","__renderLoop","needsUpdate","render","set","lookAt","copy","multiplyScalar","negate","updateProjectionMatrix","setTexture","textureData","texture","__createScene","material","dispose","setPanoramaPose","poseHeading","posePitch","poseRoll","setSphereCorrection","cleanCorrection","nonZeros","alpha","setPixelRatio","__createCubemap","__createSphere","domElement","scale","geometry","side","cubeSize","materials","transition","positionProvided","zoomProvided","group","transparent","verticalAxis","rotateOnWorldAxis","horizontalAxis","cross","getWorldDirection","normalize","latitudeRange","longitudeRange","traverse","TextureLoader","requests","abortLoading","loadTexture","newPanoData","tempPanorama","__loadCubemapTexture","__loadEquirectangularTexture","r","abort","__loadFile","url","onProgress","setWithCredentials","setResponseType","request","rIdx","lengthComputable","newProgress","total","err","XMLHttpRequest","__loadImage","img","createElementNS","onload","URL","revokeObjectURL","onerror","createObjectURL","__loadBlobAsString","blob","reader","FileReader","readAsText","xmpPanoData","__loadXMP","croppedWidth","croppedHeight","__createEquirectangularTexture","binary","substring","resizedPanoData","ratio","buffer","drawImage","minFilter","generateMipmaps","promises","__createCubemapTexture","all","preloadPanorama","LEFT_MAP","TOP_MAP","STATE","NONE","SHOWING","HIDING","Tooltip","pos","arrow","__onTransitionEnd","rect","move","tempPos","posClass","arrowTop","arrowLeft","__computeTooltipPosition","offset","newPos","propertyName","topBottom","box","TooltipRenderer","testTooltip","tooltip","Viewer","autorotateCb","loadingPromise","startTimeout","getElementById","textureLoader","eventsHandler","__resizeRefresh","resize","opts","setPanorama","startAutorotate","__stopAll","reason","getPlugin","pluginId","getPosition","getZoomLevel","getSize","isAutorotateEnabled","clientHeight","path","showLoader","hideError","done","showError","error","setOptions","setOption","option","last","elapsed","errorIcon","isDefaultPrevented","change","animate","animProperties","tOffset","newZoomLvl","dim","enterFullscreen"],"mappings":";;;;;;;;;;;;EAAA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACO,IAAMA,cAAc,GAAG,CAAvB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,cAAc,GAAG,GAAvB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,eAAe,GAAG,GAAxB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,uBAAuB,GAAG,GAAhC;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,gBAAgB,GAAG,IAAzB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,cAAc,GAAG,GAAvB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,aAAa,GAAG,GAAtB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,eAAe,GAAG,EAAxB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,aAAa,GAAG,CAAtB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,QAAQ,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,CAAjB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,YAAY,GAAG,CAAC,MAAD,EAAS,OAAT,EAAkB,KAAlB,EAAyB,QAAzB,EAAmC,MAAnC,EAA2C,OAA3C,CAArB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,WAAW,GAAG,mBAApB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,OAAO,GAAG;EACrBC,EAAAA,aAAa,EAAM,kBADE;EAErBC,EAAAA,eAAe,EAAI,oBAFE;EAGrBC,EAAAA,iBAAiB,EAAE,sBAHE;EAIrBC,EAAAA,gBAAgB,EAAG,qBAJE;EAKrBC,EAAAA,OAAO,EAAY,QALE;EAMrBC,EAAAA,QAAQ,EAAW,SANE;EAOrBC,EAAAA,iBAAiB,EAAE;EAPE,CAAhB;EAUP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,MAAM,GAAG;EACpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,UAAU,EAAU,YAPA;;EAQpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,aAAa,EAAO,eAdA;;EAepB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,aAAa,EAAO,eArBA;;EAsBpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,KAAK,EAAe,OA5BA;;EA6BpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,WAAW,EAAS,aAnCA;;EAoCpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,cAAc,EAAM,gBA1CA;;EA2CpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,YAAY,EAAQ,UAjDA;;EAkDpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,kBAAkB,EAAE,oBAxDA;;EAyDpB;EACF;EACA;EACA;EACA;EACEC,EAAAA,iBAAiB,EAAG,mBA9DA;;EA+DpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,YAAY,EAAQ,cArEA;;EAsEpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,YAAY,EAAQ,cA5EA;;EA6EpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,UAAU,EAAU,YAnFA;;EAoFpB;EACF;EACA;EACA;EACA;EACEC,EAAAA,eAAe,EAAK,iBAzFA;;EA0FpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,gBAAgB,EAAI,kBAhGA;;EAiGpB;EACF;EACA;EACA;EACA;EACEC,EAAAA,KAAK,EAAe,OAtGA;;EAuGpB;EACF;EACA;EACA;EACA;EACEC,EAAAA,MAAM,EAAc,QA5GA;;EA6GpB;EACF;EACA;EACA;EACA;EACEC,EAAAA,iBAAiB,EAAG,mBAlHA;;EAmHpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,YAAY,EAAQ,cAzHA;;EA0HpB;EACF;EACA;EACA;EACA;EACA;EACA;EACEC,EAAAA,YAAY,EAAQ,cAjIA;;EAkIpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,YAAY,EAAQ,cAxIA;;EAyIpB;EACF;EACA;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"}