Files
shaka-player/lib/polyfill/input_event.js
T
Joey Parrish 64896d70b0 Use shorter license header
This reflects changes in Google's policy on JavaScript license
headers, which should be smaller to avoid increasing the size of the
binary unnecessarily.

This also updates the company name from "Google, Inc" to "Google LLC".

Change-Id: I3f8b9ed3700b6351f43173d50c94d35c333e82b4
2019-11-22 18:18:36 +00:00

84 lines
2.4 KiB
JavaScript

/** @license
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.provide('shaka.polyfill.InputEvent');
goog.require('shaka.log');
goog.require('shaka.polyfill');
/**
* @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);