UNPKG

shaka-player

Version:
86 lines (70 loc) 2.53 kB
/*! @license * Shaka Player * Copyright 2016 Google LLC * SPDX-License-Identifier: Apache-2.0 */ goog.provide('shaka.polyfill.InputEvent'); goog.require('shaka.log'); goog.require('shaka.polyfill'); goog.require('shaka.util.Platform'); /** * @summary A polyfill to patch 'input' event support in IE11. */ shaka.polyfill.InputEvent = class { /** * Install the polyfill if needed. */ static install() { shaka.log.debug('InputEvent.install'); // IE11 doesn't treat the 'input' event correctly. // https://bit.ly/2loLsuX if (!shaka.util.Platform.isIE()) { // Not IE, so don't patch anything. return; } // In our tests, we can end up with multiple independent "shaka" namespaces. // So we can't compare addEventListener with the polyfill directly. // Instead, store the original in a globally accessible place and check if // that has been used yet. // eslint-disable-next-line no-restricted-syntax if (HTMLInputElement.prototype['originalAddEventListener']) { // The polyfill was already installed. return; } shaka.log.info('Patching input event support on IE.'); // eslint-disable-next-line no-restricted-syntax HTMLInputElement.prototype['originalAddEventListener'] = // eslint-disable-next-line no-restricted-syntax HTMLInputElement.prototype.addEventListener; // eslint-disable-next-line no-restricted-syntax HTMLInputElement.prototype['addEventListener'] = // eslint-disable-next-line no-restricted-syntax shaka.polyfill.InputEvent.addEventListener_; } /** * Add an event listener to this object and translate the event types to those * that work on IE11. * * @param {string} type * @param {EventListener|function(!Event):(boolean|undefined)} listener * @param {(!AddEventListenerOptions|boolean)=} options * @this {HTMLInputElement} * @private */ static addEventListener_(type, listener, options) { if (type == 'input') { // Based on the type of input element, translate the HTML5 'input' event // to one that IE11 will actually dispatch. switch (this.type) { // For range inputs, we use the 'change' event. case 'range': type = 'change'; break; } } // eslint-disable-next-line no-restricted-syntax HTMLInputElement.prototype['originalAddEventListener'].call( this, type, listener, options); } }; shaka.polyfill.register(shaka.polyfill.InputEvent.install);