jellyfish-web/src/legacy/focusPreventScroll.js
2020-07-26 12:30:50 +02:00

43 lines
1.4 KiB
JavaScript

// TODO: Move to external library (https://github.com/calvellido/focus-options-polyfill)
// Polyfill to add support for preventScroll by focus function
if (HTMLElement.prototype.nativeFocus === undefined) {
(function () {
var supportsPreventScrollOption = false;
try {
var focusElem = document.createElement('div');
focusElem.addEventListener('focus', function(event) {
event.preventDefault();
event.stopPropagation();
}, true);
var opts = Object.defineProperty({}, 'preventScroll', {
// eslint-disable-next-line getter-return
get: function () {
supportsPreventScrollOption = true;
}
});
focusElem.focus(opts);
} catch (e) {
console.error('error checking preventScroll support');
}
if (!supportsPreventScrollOption) {
HTMLElement.prototype.nativeFocus = HTMLElement.prototype.focus;
HTMLElement.prototype.focus = function(options) {
var scrollX = window.scrollX;
var scrollY = window.scrollY;
this.nativeFocus();
// Restore window scroll if preventScroll
if (options && options.preventScroll) {
window.scroll(scrollX, scrollY);
}
};
}
})();
}