/**
* @file
* Provides additional Modernizr tests.
*/
((Modernizr) => {
// This is a copy of Modernizr's touchevents test from version 3.3.1. Drupal
// core has updated Modernizr to a version newer than 3.3.1, but this newer
// version does not include the touchevents test in its build. Modernizr's
// touchevents test is deprecated, and newer versions of this test do not work
// properly with Drupal as it significantly changes the criteria used for
// determining if touchevents are supported.
// The most recent known-to-work version, 3.3.1 is provided here. The only
// changes are refactoring the code to meet Drupal's JavaScript coding
// standards and calling prefixes and testStyles() via the Modernizr object
// as they are not in scope when adding a test via Modernizr.addTest();
// @todo find alternative to Modernizr's deprecated touchevent test in
// http://drupal.org/node/3101922
// @see https://github.com/Modernizr/Modernizr/blob/v3.3.1/feature-detects/touchevents.js
Modernizr.addTest('touchevents', () => {
let bool;
if (
'ontouchstart' in window ||
(window.DocumentTouch && document instanceof window.DocumentTouch)
) {
bool = true;
} else {
// include the 'heartz' as a way to have a non matching MQ to help
// terminate the join https://git.io/vznFH
const query = [
'@media (',
Modernizr._prefixes.join('touch-enabled),('),
'heartz',
')',
'{#modernizr{top:9px;position:absolute}}',
].join('');
Modernizr.testStyles(query, (node) => {
bool = node.offsetTop === 9;
});
}
return bool;
});
})(Modernizr);