vcc-ui
Version:
VCC UI is a collection of React UI Components that can be used for developing front-end applications at Volvo Car Corporation.
61 lines (47 loc) • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getLinkRel = exports.isTouchDevice = void 0;
/**
* Detect type of device
* From stackoverflow: https://stackoverflow.com/a/4819886
*
* @returns bool
*/
var isTouchDevice = function isTouchDevice() {
var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');
var matchedQueries = function matchedQueries(query) {
return window.matchMedia(query).matches;
};
if ('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch) {
return true;
} // include the 'heartz' as a way to have a non matching MQ to help terminate the join
// https://git.io/vznFH
var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');
return matchedQueries(query);
};
/**
* Takes link component props and returns a recommended `rel` value.
*
* @see https://developers.google.com/web/tools/lighthouse/audits/noopener
*/
exports.isTouchDevice = isTouchDevice;
var getLinkRel = function getLinkRel(_ref) {
var href = _ref.href,
target = _ref.target,
rel = _ref.rel;
if (!href || target !== '_blank') {
return rel;
}
var isCrossOrigin;
try {
// Fails in environments without URL support (like IE11 and in SSR)
isCrossOrigin = new URL(href).host !== window.location.host;
} catch (_unused) {
isCrossOrigin = /^http/i.test(href);
}
var needsNoopener = isCrossOrigin && !/\bopener\b/.test(rel) && !/no(opener|referrer)/.test(rel);
return needsNoopener ? "".concat(rel || '', " noopener").trim() : rel;
};
exports.getLinkRel = getLinkRel;