{ "version": 3, "sources": ["../../../node_modules/svg4everybody/dist/svg4everybody.js", "../../javascript/icons.js", "../../../node_modules/select/src/select.js", "../../../node_modules/clipboard/lib/clipboard-action.js", "../../../node_modules/tiny-emitter/index.js", "../../../node_modules/good-listener/src/is.js", "../../../node_modules/delegate/src/closest.js", "../../../node_modules/delegate/src/delegate.js", "../../../node_modules/good-listener/src/listen.js", "../../../node_modules/clipboard/lib/clipboard.js", "../../../node_modules/hammerjs/hammer.js", "../../javascript/lib/array-from.js", "../../javascript/lib/bind.js", "../../javascript/player/fullscreen.js", "../../javascript/lib/cancel-event.js", "../../javascript/lib/closest.js", "../../javascript/player/player.js", "../../javascript/packs/player.js"], "sourcesContent": ["!function(root, factory) {\n \"function\" == typeof define && define.amd ? // AMD. Register as an anonymous module unless amdModuleId is set\n define([], function() {\n return root.svg4everybody = factory();\n }) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n /*! svg4everybody v2.1.9 | github.com/jonathantneal/svg4everybody */\n function embed(parent, svg, target) {\n // if the target exists\n if (target) {\n // create a document fragment to hold the contents of the target\n var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n // conditionally set the viewBox on the svg\n viewBox && svg.setAttribute(\"viewBox\", viewBox);\n // copy the contents of the clone into the fragment\n for (// clone the target\n var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n fragment.appendChild(clone.firstChild);\n }\n // append the fragment into the svg\n parent.appendChild(fragment);\n }\n }\n function loadreadystatechange(xhr) {\n // listen to changes in the request\n xhr.onreadystatechange = function() {\n // if the request is ready\n if (4 === xhr.readyState) {\n // get the cached html document\n var cachedDocument = xhr._cachedDocument;\n // ensure the cached html document based on the xhr response\n cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"), \n cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n xhr._embeds.splice(0).map(function(item) {\n // get the cached target\n var target = xhr._cachedTarget[item.id];\n // ensure the cached target\n target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)), \n // embed the target into the svg\n embed(item.parent, item.svg, target);\n });\n }\n }, // test the ready state change immediately\n xhr.onreadystatechange();\n }\n function svg4everybody(rawopts) {\n function oninterval() {\n // while the index exists in the live collection\n for (// get the cached index\n var index = 0; index < uses.length; ) {\n // get the current \n var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n if (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)), \n svg && src) {\n if (polyfill) {\n if (!opts.validate || opts.validate(src, svg, use)) {\n // remove the element\n parent.removeChild(use);\n // parse the src and get the url and id\n var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n // if the link is external\n if (url.length) {\n // get the cached xhr request\n var xhr = requests[url];\n // ensure the xhr request exists\n xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(), \n xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n xhr._embeds.push({\n parent: parent,\n svg: svg,\n id: id\n }), // prepare the xhr ready state change event\n loadreadystatechange(xhr);\n } else {\n // embed the local id into the svg\n embed(parent, svg, document.getElementById(id));\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index, ++numberOfSvgUseElementsToBypass;\n }\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index;\n }\n }\n // continue the interval\n (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n }\n var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n // create xhr requests object\n var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n // conditionally start the interval if the polyfill is active\n polyfill && oninterval();\n }\n function getSVGAncestor(node) {\n for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n return svg;\n }\n return svg4everybody;\n});", "const svg4everybody = require('svg4everybody')\nsvg4everybody()\n", "function select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n", "(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'select'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});", "function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n", "/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n", "var DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n", "var closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n", "var is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n", "(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});", "/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n", "// Production steps of ECMA-262, Edition 6, 22.1.2.1\nif (!Array.from) {\n Array.from = (function () {\n var toStr = Object.prototype.toString;\n var isCallable = function (fn) {\n return typeof fn === 'function' || toStr.call(fn) === '[object Function]';\n };\n var toInteger = function (value) {\n var number = Number(value);\n if (isNaN(number)) { return 0; }\n if (number === 0 || !isFinite(number)) { return number; }\n return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\n };\n var maxSafeInteger = Math.pow(2, 53) - 1;\n var toLength = function (value) {\n var len = toInteger(value);\n return Math.min(Math.max(len, 0), maxSafeInteger);\n };\n\n // The length property of the from method is 1.\n return function from(arrayLike/*, mapFn, thisArg */) {\n // 1. Let C be the this value.\n var C = this;\n\n // 2. Let items be ToObject(arrayLike).\n var items = Object(arrayLike);\n\n // 3. ReturnIfAbrupt(items).\n if (arrayLike == null) {\n throw new TypeError('Array.from requires an array-like object - not null or undefined');\n }\n\n // 4. If mapfn is undefined, then let mapping be false.\n var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\n var T;\n if (typeof mapFn !== 'undefined') {\n // 5. else\n // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.\n if (!isCallable(mapFn)) {\n throw new TypeError('Array.from: when provided, the second argument must be a function');\n }\n\n // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.\n if (arguments.length > 2) {\n T = arguments[2];\n }\n }\n\n // 10. Let lenValue be Get(items, \"length\").\n // 11. Let len be ToLength(lenValue).\n var len = toLength(items.length);\n\n // 13. If IsConstructor(C) is true, then\n // 13. a. Let A be the result of calling the [[Construct]] internal method\n // of C with an argument list containing the single item len.\n // 14. a. Else, Let A be ArrayCreate(len).\n var A = isCallable(C) ? Object(new C(len)) : new Array(len);\n\n // 16. Let k be 0.\n var k = 0;\n // 17. Repeat, while k < len\u2026 (also steps a - h)\n var kValue;\n while (k < len) {\n kValue = items[k];\n if (mapFn) {\n A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);\n } else {\n A[k] = kValue;\n }\n k += 1;\n }\n // 18. Let putStatus be Put(A, \"length\", len, true).\n A.length = len;\n // 20. Return A.\n return A;\n };\n }());\n}\n\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n", "require('./array-from')\n\nconst bind = function(elements, events, fn) {\n events = events.split(' ')\n\n if (typeof(elements) == 'string') {\n elements = Array.from(document.querySelectorAll(elements))\n }\n\n if (!Array.isArray(elements)) {\n elements = Array.from([elements])\n }\n\n elements.forEach((element) => {\n events.forEach((event) => {\n if (element.addEventListener) {\n element.addEventListener(event, fn, false);\n } else if (element.attachEvent) {\n element.attachEvent(`on${event}`, fn);\n } else {\n element[`on${event}`] = fn;\n }\n })\n })\n};\n\nconst unbind = function(elements, events, fn) {\n events = events.split(' ')\n\n if (typeof(elements) == 'string') {\n elements = Array.from(document.querySelectorAll(elements))\n }\n\n if (!Array.isArray(elements)) {\n elements = Array.from([elements])\n }\n\n elements.forEach((element) => {\n events.forEach((event) => {\n if (element.addEventListener) {\n element.removeEventListener(event, fn, false);\n } else if (element.attachEvent) {\n element.detachEvent(`on${event}`, fn);\n } else {\n element[`on${event}`] = null;\n }\n })\n })\n};\n\n\n\nmodule.exports = {bind, unbind}\n", "const {bind} = require('../lib/bind')\n\nmodule.exports = class Fullscreen {\n constructor(element) {\n this.element = element;\n bind(element.querySelector('.js-fullscreen-toggle'), 'click', this.toggle.bind(this))\n bind(document, 'fullscreenchange', this.toggleState.bind(this))\n bind(document, 'webkitfullscreenchange', this.toggleState.bind(this))\n bind(document, 'mozfullscreenchange', this.toggleState.bind(this))\n this.element.classList.add('fullscreen-supported')\n }\n\n supported() {\n return document.fullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.webkitFullscreenEnabled;\n }\n\n cancel() {\n return (\n document.cancelFullScreen ||\n document.mozCancelFullScreen ||\n document.webkitCancelFullScreen ||\n this.forceCancel.bind(this)\n ).call(document);\n }\n\n request() {\n return (\n this.element.requestFullScreen ||\n this.element.mozRequestFullScreen ||\n this.element.webkitRequestFullScreen ||\n this.forceRequest.bind(this)\n ).call(this.element);\n }\n\n forceRequest() {\n // window.frameElement is null in cross-origin iframes for security\n if (window.frameElement) {\n window.frameElement.dispatchEvent(new CustomEvent('sd:embed:fullscreen:on'))\n }\n this.element.classList.add('is-fullscreen');\n }\n\n forceCancel() {\n // window.frameElement is null in cross-origin iframes for security\n if (window.frameElement) {\n window.frameElement.dispatchEvent(new CustomEvent('sd:embed:fullscreen:off'))\n }\n this.element.classList.remove('is-fullscreen');\n }\n\n toggle() {\n if (this.isFullscreen()) {\n this.cancel();\n } else {\n this.request();\n }\n }\n\n isFullscreen() {\n if (this.supported()) {\n return this.element === (\n document.fullscreenElement ||\n document.mozFullScreenElement ||\n document.webkitFullscreenElement\n )\n } else {\n return this.element.classList.contains('is-fullscreen');\n }\n }\n\n toggleState() {\n if (this.isFullscreen()) {\n return this.element.classList.add('is-fullscreen');\n } else {\n return this.element.classList.remove('is-fullscreen');\n }\n }\n}\n", "module.exports = (event) => {\n event = event || window.event\n\n if (event.stopPropagation) {\n event.stopPropagation()\n }\n\n if (event.preventDefault) {\n event.preventDefault()\n }\n\n event.cancelBubble = true\n event.returnValue = false\n\n return false\n}\n", "(function(ElementProto) {\n if (typeof ElementProto.matches !== 'function') {\n ElementProto.matches = ElementProto.msMatchesSelector || ElementProto.mozMatchesSelector || ElementProto.webkitMatchesSelector || function matches(selector) {\n var element = this;\n var elements = (element.document || element.ownerDocument).querySelectorAll(selector);\n var index = 0;\n\n while (elements[index] && elements[index] !== element) {\n ++index;\n }\n\n return Boolean(elements[index]);\n };\n }\n\n if (typeof ElementProto.closest !== 'function') {\n ElementProto.closest = function closest(selector) {\n var element = this;\n\n while (element && element.nodeType === 1) {\n if (element.matches(selector)) {\n return element;\n }\n\n element = element.parentNode;\n }\n\n return null;\n };\n }\n})(window.Element.prototype);\n", "const Clipboard = require('clipboard')\nconst Hammer = require('hammerjs')\nconst Fullscreen = require('./fullscreen')\nconst {bind} = require('../lib/bind')\nconst cancelEvent = require('../lib/cancel-event')\n\nrequire('../lib/array-from')\nrequire('../lib/closest')\n\nclass Player {\n constructor(element) {\n this.element = element\n new Fullscreen(element)\n\n this.scrubberElement = element.querySelector('.js-sd-player-scrubber')\n this.progressElement = element.querySelector('.js-sd-player-scrubber-progress')\n this.previewElement = element.querySelector('.js-sd-player-preview')\n this.currentSlideElement = element.querySelector('.js-sd-player-current-slide')\n this.linkBadge = element.querySelector('.js-sd-player-link-badge')\n this.linkBadgeCount = element.querySelector('.js-sd-player-link-badge-count')\n this.linkModal = element.querySelector('.js-sd-player-link-modal')\n this.linkModalOverlay = element.querySelector('.js-sd-player-link-modal-overlay')\n this.linkModalUrl = element.querySelector('.js-sd-player-link-modal-url')\n this.linkModalCopy = element.querySelector('.js-sd-player-link-modal-copy')\n this.linkModalOpen = element.querySelector('.js-sd-player-link-modal-open')\n this.linkModalClose = element.querySelector('.js-sd-player-link-modal-close')\n this.linksEnabled = false\n this.pendingLinkUrl = null\n this.currentSlideNote = element.querySelector('.current-slide-note')\n this.showSlideNotes = false\n this.nextSlideElement = element.querySelector('.js-sd-player-next-slide')\n this.previousSlideElement = element.querySelector('.js-sd-player-previous-slide')\n this.slidePresenterElement = element.querySelector('.js-sd-player-presenter')\n this.ratio = parseFloat(element.dataset.ratio)\n this.draggingScrubber = false\n this.slideCount = this.slideElements().length\n this.embed_width = 560\n this.embed_height = Math.floor(this.embed_width / this.ratio)\n this.preloadSlides()\n this.setupListeners()\n this.sizePreview()\n this.setupNativeShare()\n this.setupClipboards()\n this.showSlide(element.dataset.startSlide)\n }\n\n preloadSlides(from = 0, count = 3) {\n this.slideElements().slice(Math.max(from, 0), count).forEach(function(element) {\n element.style.backgroundImage = `url('${element.dataset.url}')`\n })\n }\n\n slideElements() {\n return Array.from(this.element.querySelectorAll('.js-sd-slide'))\n }\n\n showSlide(index) {\n if (this.isPanning()) {\n return false\n }\n\n index = parseInt(index)\n this.preloadSlides(index - 3, index + 5);\n const backgroundImage = this.slideElements()[index].style.backgroundImage\n const img = backgroundImage.match(/url\\((.*?)\\)/)[1].replace(/\"/g, '')\n\n // Create slide links from JSON data attribute\n const linksData = this.slideElements()[index].dataset.links\n const linksArray = JSON.parse(linksData)\n const linksContainer = document.getElementById('sd-player-links')\n linksContainer.innerHTML = '';\n\n // Exit link mode when changing slides\n this.disableLinkMode()\n\n linksArray.forEach(item => {\n const slideLink = document.createElement('button')\n slideLink.dataset.id = item.id\n slideLink.dataset.url = item.url\n slideLink.className = 'sd-player-link'\n slideLink.type = 'button'\n\n // Calculate position and size from point data\n // bottom_left is (x1, y1), top_right is (x2, y2)\n const left = (item.bottom_left.x / item.slide_width) * 100\n const bottom = (item.bottom_left.y / item.slide_height) * 100\n const width = ((item.top_right.x - item.bottom_left.x) / item.slide_width) * 100\n const height = ((item.top_right.y - item.bottom_left.y) / item.slide_height) * 100\n\n slideLink.style.left = `${left}%`\n slideLink.style.bottom = `${bottom}%`\n slideLink.style.width = `${width}%`\n slideLink.style.height = `${height}%`\n\n // Click handler for link hotspots\n slideLink.addEventListener('click', this.handleLinkClick.bind(this))\n\n linksContainer.appendChild(slideLink)\n })\n\n // Update badge\n if (linksArray.length > 0) {\n this.linkBadgeCount.textContent = linksArray.length\n this.linkBadge.removeAttribute('hidden')\n } else {\n this.linkBadge.setAttribute('hidden', true)\n }\n\n // Slide Notes\n const slideNote = this.slideElements()[index].dataset.slideNote\n if (slideNote.length) {\n this.currentSlideNote.innerHTML = slideNote.replace(/\\n/g, '
')\n if (this.showSlideNotes) this.currentSlideNote.removeAttribute('hidden')\n } else {\n this.currentSlideNote.innerHTML = ''\n this.currentSlideNote.setAttribute('hidden', true)\n }\n\n this.currentSlideElement.style.backgroundImage = backgroundImage\n\n if (this.slideElements()[index + 1]) {\n this.nextSlideElement.style.backgroundImage = this.slideElements()[index + 1].style.backgroundImage\n } else {\n this.nextSlideElement.style.backgroundImage = null\n }\n\n if (this.slideElements()[index - 1]) {\n this.previousSlideElement.style.backgroundImage = this.slideElements()[index - 1].style.backgroundImage\n } else {\n this.previousSlideElement.style.backgroundImage = null\n }\n\n this.currentSlide = index;\n this.disablePreviousNext()\n this.updateScrubberProgress()\n\n if (this.element.classList.contains('sharing')) {\n this.updateShareLinks()\n }\n\n var event = new CustomEvent('sd:embed:image', {\n detail: {\n index: index,\n cssUrl: backgroundImage,\n imgUrl: img\n }\n })\n try { window.parent.document.dispatchEvent(event) }\n catch(e){\n console.log(e)\n }\n }\n disablePreviousNext() {\n const previousButtons = Array.from(this.element.querySelectorAll('.js-sd-player-previous'))\n const nextButtons = Array.from(this.element.querySelectorAll('.js-sd-player-next'))\n\n if (this.isFirstSlide()) {\n previousButtons.forEach((element) => {\n element.classList.remove('active')\n })\n } else {\n previousButtons.forEach((element) => {\n element.classList.add('active')\n })\n }\n\n if (this.isLastSlide()) {\n nextButtons.forEach((element) => {\n element.classList.remove('active')\n })\n } else {\n nextButtons.forEach((element) => {\n element.classList.add('active')\n })\n }\n }\n\n setupClipboards() {\n Array.from(this.element.querySelectorAll('[data-clipboard-text]')).forEach((element) => {\n const clipboard = new Clipboard(element)\n clipboard.on('success', (e) => {\n const text = element.innerText\n element.innerText = 'Copied!'\n setTimeout(() => {\n element.innerText = text\n }, 2000)\n })\n })\n }\n\n getShareUrl() {\n const baseUrl = this.element.dataset.url\n const slideToggle = this.element.querySelector('.js-sd-player-share-slide-toggle')\n if (slideToggle && slideToggle.checked) {\n const slide = this.currentSlide + 1\n return slide > 1 ? `${baseUrl}?slide=${slide}` : baseUrl\n }\n return baseUrl\n }\n\n updateShareLinks() {\n const url = this.getShareUrl()\n const slide = this.currentSlide + 1\n const slideToggle = this.element.querySelector('.js-sd-player-share-slide-toggle')\n const fromSlide = slideToggle && slideToggle.checked\n\n // Update URL input and copy button\n const urlInput = this.element.querySelector('.js-sd-player-share-url')\n const urlCopy = this.element.querySelector('.js-sd-player-share-url-copy')\n if (urlInput) urlInput.value = url\n if (urlCopy) urlCopy.dataset.clipboardText = url\n\n // Update embed buttons\n const iframeBtn = this.element.querySelector('.js-sd-player-embed-iframe')\n const jsBtn = this.element.querySelector('.js-sd-player-embed-js')\n\n if (iframeBtn && window.frameElement) {\n const doc = new DOMParser().parseFromString(window.frameElement.outerHTML, 'text/html')\n let iframe = doc.querySelector('iframe')\n iframe.src = iframe.src.split('?')[0]\n iframe.style.width = '100%'\n iframe.style.height = 'auto'\n iframe.style.aspectRatio = `${this.embed_width}/${this.embed_height}`\n iframe.setAttribute('data-ratio', this.embed_width / this.embed_height)\n if (fromSlide && slide > 1) iframe.src = iframe.src + `?slide=${slide}`\n iframeBtn.dataset.clipboardText = iframe.outerHTML\n }\n\n if (jsBtn) {\n // Preserve the original embed snippet separately so we don't repeatedly\n // mutate and re-use an already-modified value as the \"base\".\n let baseEmbed = jsBtn.dataset.baseClipboardText\n\n if (!baseEmbed) {\n baseEmbed = jsBtn.dataset.clipboardText || ''\n jsBtn.dataset.baseClipboardText = baseEmbed\n }\n\n // Start from the immutable base, strip any existing data-slide (defensive),\n // then optionally add the current slide attribute.\n let updatedEmbed = baseEmbed.replace(/ data-slide=\"\\d+\"/, '')\n\n if (fromSlide && slide > 1) {\n updatedEmbed = updatedEmbed.replace(\n 'class=\"speakerdeck-embed\"',\n `class=\"speakerdeck-embed\" data-slide=\"${slide}\"`\n )\n }\n\n jsBtn.dataset.clipboardText = updatedEmbed\n }\n }\n\n setupNativeShare() {\n const nativeBtn = this.element.querySelector('.js-sd-player-native-share')\n if (!nativeBtn) return\n\n if (navigator.share) {\n nativeBtn.removeAttribute('hidden')\n } else {\n // Listen for parent window signaling native share support\n bind(window, 'message', (e) => {\n if (e.data && e.data.type === 'sd:native-share-available') {\n this.parentNativeShare = true\n nativeBtn.removeAttribute('hidden')\n }\n })\n }\n }\n\n handleSocialClick(e) {\n e.preventDefault()\n const network = e.currentTarget.dataset.network\n const socialContainer = this.element.querySelector('.sd-player-share-menu-social')\n const talkUrl = this.getShareUrl()\n const talkTitle = socialContainer.dataset.talkTitle\n const encodedUrl = encodeURIComponent(talkUrl)\n const encodedTitle = encodeURIComponent(talkTitle)\n let shareUrl\n\n switch (network) {\n case 'facebook':\n const appId = socialContainer.dataset.facebookAppId\n shareUrl = `https://www.facebook.com/dialog/share?app_id=${appId}&display=popup&href=${encodedUrl}&title=${encodedTitle}`\n break\n case 'x':\n shareUrl = `https://x.com/intent/tweet?text=${encodedTitle}%20${encodedUrl}%0A%0A%23speakerdeck`\n break\n case 'linkedin':\n shareUrl = `https://www.linkedin.com/shareArticle?url=${encodedUrl}&title=${encodedTitle}`\n break\n case 'reddit':\n shareUrl = `https://www.reddit.com/submit?url=${encodedUrl}&title=${encodedTitle}`\n break\n case 'whatsapp':\n shareUrl = `https://api.whatsapp.com/send/?text=${encodedTitle}%20${encodedUrl}%0A%0A%23speakerdeck&type=custom_url&app_absent=0`\n break\n case 'line':\n shareUrl = `https://social-plugins.line.me/lineit/share?url=${encodedUrl}&text=${encodedTitle}%0A%0A%23speakerdeck`\n break\n case 'bluesky':\n shareUrl = `https://bsky.app/intent/compose?text=${encodedTitle}%20${encodedUrl}%0A%0A%23speakerdeck`\n break\n case 'email':\n const mailSubject = encodeURIComponent(talkTitle)\n const mailBody = encodeURIComponent(talkTitle + '\\n' + talkUrl)\n shareUrl = `mailto:?subject=${mailSubject}&body=${mailBody}`\n break\n case 'native':\n if (navigator.share) {\n navigator.share({ title: talkTitle, url: talkUrl }).catch(() => {})\n } else if (this.parentNativeShare) {\n window.parent.postMessage({ type: 'sd:share', title: talkTitle, url: talkUrl }, '*')\n }\n this.trackShare(network, talkUrl)\n return\n }\n\n if (shareUrl) {\n if (network === 'email') {\n const a = document.createElement('a')\n a.href = shareUrl\n a.target = '_blank'\n a.rel = 'noopener noreferrer'\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n } else {\n const newWindow = window.open(\n shareUrl,\n '_blank',\n 'toolbar=no,menubar=no,location=yes,resizable=yes,scrollbars=yes,status=yes,width=600,height=400,noopener,noreferrer'\n )\n if (newWindow) {\n newWindow.opener = null\n }\n }\n this.trackShare(network, talkUrl)\n }\n }\n\n trackShare(method, itemId) {\n if (typeof gtag !== 'function') return\n gtag('event', 'share', {\n method: method,\n content_type: 'talk',\n item_id: itemId,\n share_location: 'embed',\n embed_host: document.referrer || ''\n })\n }\n\n updateScrubberProgress() {\n this.progressElement.style.width = `${100 * this.currentSlide / (this.slideCount - 1)}%`\n }\n\n isFirstSlide() {\n return this.currentSlide == 0\n }\n\n isLastSlide() {\n return this.currentSlide == this.slideCount - 1\n }\n\n showControls() {\n this.element.classList.add('show-controls')\n }\n\n hideControls() {\n this.removeInitialState()\n this.element.classList.remove('show-controls')\n }\n\n setupListeners() {\n bind('.js-sd-player-next', 'click', this.clickNext.bind(this))\n bind('.js-sd-player-previous', 'click', this.clickPrevious.bind(this))\n bind(this.scrubberElement, 'mousemove', this.showPreview.bind(this))\n bind(this.scrubberElement, 'mouseout', this.hidePreview.bind(this))\n bind(this.scrubberElement, 'mousedown', this.startScrubberDrag.bind(this))\n bind(this.scrubberElement, 'mouseup', this.endScrubberDrag.bind(this))\n bind('.js-sd-player-share', 'click', this.toggleShare.bind(this))\n\n this.linkBadge.addEventListener('click', this.toggleLinkMode.bind(this))\n this.linkModalOverlay.addEventListener('click', this.hideModal.bind(this))\n this.linkModalCopy.addEventListener('click', this.copyPendingLink.bind(this))\n this.linkModalOpen.addEventListener('click', this.openPendingLink.bind(this))\n this.linkModalClose.addEventListener('click', this.hideModal.bind(this))\n bind('.js-sd-player-notes', 'click', this.toggleNotes.bind(this))\n\n bind('.js-sd-player-share-close', 'click', this.hideShare.bind(this))\n\n const slideToggle = this.element.querySelector('.js-sd-player-share-slide-toggle')\n if (slideToggle) {\n slideToggle.addEventListener('change', this.updateShareLinks.bind(this))\n }\n\n Array.from(this.element.querySelectorAll('.js-share-social')).forEach((el) => {\n el.addEventListener('click', this.handleSocialClick.bind(this))\n })\n bind(this.element, 'mouseout', this.removeInitialState.bind(this))\n bind(this.element, 'mouseenter', this.showControls.bind(this))\n bind(this.element, 'mouseleave', this.hideControls.bind(this))\n\n bind(document, 'keydown', (e) => {\n this.handleKeyDown(e.keyCode);\n })\n\n bind(window, \"message\", this.receiveMessage.bind(this), false);\n\n\n const hammer = new Hammer(this.element, {})\n hammer.get('pan').set({ direction: Hammer.DIRECTION_HORIZONTAL });\n hammer.on('pan', this.handlePan.bind(this));\n }\n\n clickNext() {\n this.showControls()\n this.nextSlide()\n }\n\n clickPrevious() {\n this.showControls()\n this.previousSlide()\n }\n\n handlePan(event) {\n if (this.element.classList.contains('sharing')) {\n return;\n }\n\n if (event.target.closest('.js-sd-player-scrubber')) {\n return;\n }\n\n if (!this.isPanning()) {\n this.setPanningOn(event.additionalEvent)\n }\n\n this.slidePresenterElement.style.transform = `translateX(${event.deltaX}px)`\n\n if (event.isFinal) {\n if (this.panningDirection == event.additionalEvent) {\n if (event.additionalEvent == 'panright') {\n this.panToPrevious()\n } else {\n this.panToNext()\n }\n } else {\n this.resetPan()\n }\n }\n }\n\n setPanningOn(direction) {\n this.panning = true\n this.panningDirection = direction\n this.element.classList.add('is-panning')\n this.hideControls()\n }\n\n setPanningOff() {\n this.panning = false\n this.panningDirection = null\n this.element.classList.remove('is-panning')\n }\n\n isPanning() {\n return this.panning || false\n }\n\n panToNext() {\n if (this.isLastSlide()) {\n this.resetPan()\n } else {\n this.slidePresenterElement.style.transform = `translateX(-100%)`\n\n setTimeout(() => {\n this.setPanningOff()\n this.showSlide(this.currentSlide + 1)\n this.resetPan()\n }, 240)\n }\n }\n\n panToPrevious() {\n if (this.isFirstSlide()) {\n this.resetPan()\n } else {\n this.slidePresenterElement.style.transform = `translateX(100%)`\n setTimeout(() => {\n this.setPanningOff()\n this.showSlide(this.currentSlide - 1)\n this.resetPan()\n }, 240)\n }\n }\n\n resetPan(transition = true) {\n this.slidePresenterElement.style.transform = `translateX(0)`\n setTimeout(this.setPanningOff.bind(this), 240)\n }\n\n removeInitialState() {\n this.element.classList.remove('state-initial')\n }\n\n toggleShare() {\n this.element.classList.toggle('sharing')\n document.querySelector('.sd-player-share-menu').removeAttribute('hidden')\n\n if (this.element.classList.contains('sharing')) {\n this.updateShareLinks()\n }\n }\n\n toggleLinkMode(e) {\n e.preventDefault()\n e.stopPropagation()\n if (this.linksEnabled) {\n this.disableLinkMode()\n } else {\n this.enableLinkMode()\n }\n }\n\n enableLinkMode() {\n this.linksEnabled = true\n this.element.classList.add('links-enabled')\n this.linkBadge.classList.add('active')\n }\n\n disableLinkMode() {\n this.linksEnabled = false\n this.element.classList.remove('links-enabled')\n this.linkBadge.classList.remove('active')\n this.hideModal()\n }\n\n handleLinkClick(e) {\n if (!this.linksEnabled) return\n\n e.preventDefault()\n e.stopPropagation()\n\n const url = e.target.dataset.url\n if (!url) return\n\n this.pendingLinkUrl = url\n this.linkModalUrl.value = url\n this.linkModal.removeAttribute('hidden')\n this.linkModalCopy.focus()\n }\n\n copyPendingLink(e) {\n e.preventDefault()\n e.stopPropagation()\n if (this.pendingLinkUrl) {\n navigator.clipboard.writeText(this.pendingLinkUrl).then(() => {\n const originalText = this.linkModalCopy.textContent\n this.linkModalCopy.textContent = 'Copied!'\n setTimeout(() => {\n this.linkModalCopy.textContent = originalText\n }, 1500)\n })\n }\n }\n\n openPendingLink(e) {\n e.preventDefault()\n e.stopPropagation()\n if (this.pendingLinkUrl) {\n window.open(this.pendingLinkUrl, '_blank', 'noopener,noreferrer')\n this.hideModal()\n }\n }\n\n hideModal(e) {\n if (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n this.linkModal.setAttribute('hidden', true)\n this.pendingLinkUrl = null\n }\n\n toggleNotes(e) {\n e.preventDefault()\n if (this.currentSlideNote.innerHTML.length > 0) document.querySelector('.current-slide-note').toggleAttribute('hidden')\n this.showSlideNotes = !this.showSlideNotes\n document.querySelector('.js-sd-player-notes').classList.toggle('toggled')\n }\n\n hideShare() {\n this.element.classList.remove('sharing')\n document.querySelector('.sd-player-share-menu').setAttribute('hidden', 'hidden')\n document.querySelector('.sd-player-share').focus()\n }\n\n\n startScrubberDrag() {\n this.draggingScrubber = true\n }\n\n endScrubberDrag() {\n this.draggingScrubber = false\n this.showSlide(this.currentPreviewSlide)\n }\n\n showPreview(e) {\n cancelEvent(e)\n const slide = Math.round(this.slideCount * e.clientX / this.scrubberElement.offsetWidth)\n\n this.previewElement.classList.add('active')\n if (slide != this.currentPreviewSlide) {\n this.currentPreviewSlide = slide\n this.previewElement.style.backgroundImage = `url('${this.slideElements()[slide].dataset.previewUrl}')`\n this.positionPreview()\n if (this.draggingScrubber) {\n this.showSlide(this.currentPreviewSlide)\n }\n }\n }\n\n hidePreview(e) {\n this.previewElement.classList.remove('active')\n }\n\n sizePreview() {\n this.previewHeight = 80\n this.previewWidth = 80 * this.ratio\n this.previewElement.style.width = `${this.previewWidth}px`\n this.previewElement.style.height = `${this.previewHeight}px`\n }\n\n positionPreview() {\n const padding = 20\n const scrubberWidth = this.scrubberElement.offsetWidth\n const center = scrubberWidth * this.currentPreviewSlide / (this.slideCount - 1)\n left = center - (this.previewWidth / 2)\n if (left < padding) {\n left = padding\n } else if (left + this.previewWidth > scrubberWidth - padding) {\n left = scrubberWidth - padding - this.previewWidth\n }\n\n this.previewElement.style.left = `${left}px`\n }\n\n receiveMessage(e) {\n if (e.origin == `${window.location.protocol}//${window.location.host}` && e.data.type == 'keydown') {\n this.handleKeyDown(e.data.keyCode)\n }\n }\n\n handleKeyDown(code) {\n if (this.element.classList.contains('sharing')) return\n\n switch(code) {\n case 39: // right arrow\n case 32: // space\n this.hideControls()\n this.nextSlide()\n break;\n case 37: // left arrow\n this.hideControls()\n this.previousSlide()\n break;\n }\n }\n\n nextSlide() {\n if (!this.isLastSlide()) {\n this.showSlide(this.currentSlide + 1)\n }\n }\n\n previousSlide() {\n if (!this.isFirstSlide()) {\n this.showSlide(this.currentSlide - 1)\n }\n }\n}\n\nPlayer.init = () => {\n const element = document.querySelector('.js-sd-player')\n\n if (element) {\n new Player(element);\n }\n}\n\nmodule.exports = Player;\n", "require('../icons')\n\nconst Player = require('../player/player')\n\ndocument.addEventListener(\"DOMContentLoaded\",function(){\n Player.init()\n})\n"], "mappings": "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", "names": ["require_svg4everybody", "__commonJSMin", "exports", "module", "root", "factory", "embed", "parent", "svg", "target", "fragment", "viewBox", "clone", "loadreadystatechange", "xhr", "cachedDocument", "item", "svg4everybody", "rawopts", "oninterval", "index", "uses", "use", "getSVGAncestor", "src", "opts", "polyfill", "srcSplit", "url", "id", "requests", "numberOfSvgUseElementsToBypass", "requestAnimationFrame", "newerIEUA", "webkitUA", "olderEdgeUA", "edgeUA", "inIframe", "node", "require_icons", "__commonJSMin", "svg4everybody", "require_select", "__commonJSMin", "exports", "module", "select", "element", "selectedText", "isReadOnly", "selection", "range", "require_clipboard_action", "__commonJSMin", "exports", "module", "global", "factory", "mod", "_select", "_select2", "_interopRequireDefault", "obj", "_typeof", "_classCallCheck", "instance", "Constructor", "_createClass", "defineProperties", "target", "props", "i", "descriptor", "protoProps", "staticProps", "ClipboardAction", "options", "_this", "isRTL", "yPosition", "succeeded", "err", "action", "require_tiny_emitter", "__commonJSMin", "exports", "module", "E", "name", "callback", "ctx", "e", "self", "listener", "data", "evtArr", "i", "len", "evts", "liveEvents", "require_is", "__commonJSMin", "exports", "value", "type", "require_closest", "__commonJSMin", "exports", "module", "DOCUMENT_NODE_TYPE", "proto", "closest", "element", "selector", "require_delegate", "__commonJSMin", "exports", "module", "closest", "_delegate", "element", "selector", "type", "callback", "useCapture", "listenerFn", "listener", "delegate", "elements", "e", "require_listen", "__commonJSMin", "exports", "module", "is", "delegate", "listen", "target", "type", "callback", "listenNode", "listenNodeList", "listenSelector", "node", "nodeList", "selector", "require_clipboard", "__commonJSMin", "exports", "module", "global", "factory", "mod", "_clipboardAction", "_tinyEmitter", "_goodListener", "_clipboardAction2", "_interopRequireDefault", "_tinyEmitter2", "_goodListener2", "obj", "_typeof", "_classCallCheck", "instance", "Constructor", "_createClass", "defineProperties", "target", "props", "i", "descriptor", "protoProps", "staticProps", "_possibleConstructorReturn", "self", "call", "_inherits", "subClass", "superClass", "Clipboard", "_Emitter", "trigger", "options", "_this", "_this2", "e", "getAttributeValue", "selector", "action", "actions", "support", "suffix", "element", "attribute", "require_hammer", "__commonJSMin", "exports", "module", "window", "document", "exportName", "undefined", "VENDOR_PREFIXES", "TEST_ELEMENT", "TYPE_FUNCTION", "round", "abs", "now", "setTimeoutContext", "fn", "timeout", "context", "bindFn", "invokeArrayArg", "arg", "each", "obj", "iterator", "i", "deprecate", "method", "name", "message", "deprecationMessage", "e", "stack", "log", "assign", "target", "output", "index", "source", "nextKey", "extend", "dest", "src", "merge", "keys", "inherit", "child", "base", "properties", "baseP", "childP", "boolOrFn", "val", "args", "ifUndefined", "val1", "val2", "addEventListeners", "types", "handler", "splitStr", "type", "removeEventListeners", "hasParent", "node", "parent", "inStr", "str", "find", "inArray", "findByKey", "toArray", "uniqueArray", "key", "sort", "results", "values", "a", "b", "prefixed", "property", "prefix", "prop", "camelProp", "_uniqueId", "uniqueId", "getWindowForElement", "element", "doc", "MOBILE_REGEX", "SUPPORT_TOUCH", "SUPPORT_POINTER_EVENTS", "SUPPORT_ONLY_TOUCH", "INPUT_TYPE_TOUCH", "INPUT_TYPE_PEN", "INPUT_TYPE_MOUSE", "INPUT_TYPE_KINECT", "COMPUTE_INTERVAL", "INPUT_START", "INPUT_MOVE", "INPUT_END", "INPUT_CANCEL", "DIRECTION_NONE", "DIRECTION_LEFT", "DIRECTION_RIGHT", "DIRECTION_UP", "DIRECTION_DOWN", "DIRECTION_HORIZONTAL", "DIRECTION_VERTICAL", "DIRECTION_ALL", "PROPS_XY", "PROPS_CLIENT_XY", "Input", "manager", "callback", "self", "ev", "createInputInstance", "Type", "inputClass", "PointerEventInput", "TouchInput", "TouchMouseInput", "MouseInput", "inputHandler", "eventType", "input", "pointersLen", "changedPointersLen", "isFirst", "isFinal", "computeInputData", "session", "pointers", "pointersLength", "simpleCloneInputData", "firstInput", "firstMultiple", "offsetCenter", "center", "getCenter", "getAngle", "getDistance", "computeDeltaXY", "getDirection", "overallVelocity", "getVelocity", "getScale", "getRotation", "computeIntervalInputData", "offset", "prevDelta", "prevInput", "last", "deltaTime", "velocity", "velocityX", "velocityY", "direction", "deltaX", "deltaY", "v", "x", "y", "p1", "p2", "props", "start", "end", "MOUSE_INPUT_MAP", "MOUSE_ELEMENT_EVENTS", "MOUSE_WINDOW_EVENTS", "POINTER_INPUT_MAP", "IE10_POINTER_TYPE_ENUM", "POINTER_ELEMENT_EVENTS", "POINTER_WINDOW_EVENTS", "store", "removePointer", "eventTypeNormalized", "pointerType", "isTouch", "storeIndex", "SINGLE_TOUCH_INPUT_MAP", "SINGLE_TOUCH_TARGET_EVENTS", "SINGLE_TOUCH_WINDOW_EVENTS", "SingleTouchInput", "touches", "normalizeSingleTouches", "all", "changed", "TOUCH_INPUT_MAP", "TOUCH_TARGET_EVENTS", "getTouches", "allTouches", "targetIds", "targetTouches", "changedTouches", "changedTargetTouches", "touch", "DEDUP_TIMEOUT", "DEDUP_DISTANCE", "inputEvent", "inputData", "isMouse", "recordTouches", "isSyntheticEvent", "eventData", "setLastTouch", "lastTouch", "lts", "removeLastTouch", "t", "dx", "dy", "PREFIXED_TOUCH_ACTION", "NATIVE_TOUCH_ACTION", "TOUCH_ACTION_COMPUTE", "TOUCH_ACTION_AUTO", "TOUCH_ACTION_MANIPULATION", "TOUCH_ACTION_NONE", "TOUCH_ACTION_PAN_X", "TOUCH_ACTION_PAN_Y", "TOUCH_ACTION_MAP", "getTouchActionProps", "TouchAction", "value", "actions", "recognizer", "cleanTouchActions", "srcEvent", "hasNone", "hasPanY", "hasPanX", "isTapPointer", "isTapMovement", "isTapTouchTime", "touchMap", "cssSupports", "STATE_POSSIBLE", "STATE_BEGAN", "STATE_CHANGED", "STATE_ENDED", "STATE_RECOGNIZED", "STATE_CANCELLED", "STATE_FAILED", "Recognizer", "options", "otherRecognizer", "simultaneous", "getRecognizerByNameIfManager", "requireFail", "state", "emit", "event", "stateStr", "inputDataClone", "directionStr", "AttrRecognizer", "optionPointers", "isRecognized", "isValid", "PanRecognizer", "hasMoved", "distance", "PinchRecognizer", "inOut", "PressRecognizer", "validPointers", "validMovement", "validTime", "RotateRecognizer", "SwipeRecognizer", "TapRecognizer", "validTouchTime", "validInterval", "validMultiTap", "tapCount", "Hammer", "Manager", "STOP", "FORCED_STOP", "toggleCssProps", "item", "force", "recognizers", "curRecognizer", "existing", "events", "handlers", "data", "triggerDomEvent", "add", "gestureEvent", "freeGlobal", "require_array_from", "__commonJSMin", "toStr", "isCallable", "fn", "toInteger", "value", "number", "maxSafeInteger", "toLength", "len", "arrayLike", "C", "items", "mapFn", "T", "A", "k", "kValue", "arg", "require_bind", "__commonJSMin", "exports", "module", "bind", "elements", "events", "fn", "element", "event", "unbind", "require_fullscreen", "__commonJSMin", "exports", "module", "bind", "element", "require_cancel_event", "__commonJSMin", "exports", "module", "event", "require_closest", "__commonJSMin", "ElementProto", "selector", "element", "elements", "index", "require_player", "__commonJSMin", "exports", "module", "Clipboard", "Hammer", "Fullscreen", "bind", "cancelEvent", "Player", "element", "from", "count", "index", "backgroundImage", "img", "linksData", "linksArray", "linksContainer", "item", "slideLink", "left", "bottom", "width", "height", "slideNote", "event", "e", "previousButtons", "nextButtons", "text", "baseUrl", "slideToggle", "slide", "url", "fromSlide", "urlInput", "urlCopy", "iframeBtn", "jsBtn", "iframe", "baseEmbed", "updatedEmbed", "nativeBtn", "network", "socialContainer", "talkUrl", "talkTitle", "encodedUrl", "encodedTitle", "shareUrl", "mailSubject", "mailBody", "a", "newWindow", "method", "itemId", "el", "hammer", "direction", "transition", "originalText", "scrubberWidth", "center", "code", "Player"] }