Files
shaka-player/lib/polyfill/input_event.js
T
Joey Parrish f539147d48 fix: Correct license headers in compiled output
This fixes all the license headers in the main library, which corrects
the appearance of the main license in the compiled output.

It seems that the `!` in the header forces the compiler to keep it in
the output.  I believe older compiler releases did this purely based
on `@license`.

Issue #2638

Change-Id: I7f0e918caad10c9af689c9d07672b7fe9be7b2f3
2020-06-09 16:05:09 -07:00

85 lines
2.4 KiB
JavaScript

/*! @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');
/**
* @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);