2022-04-15 14:24:30 +00:00
|
|
|
import isMobile from 'ismobilejs'
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if AudioContext is supported by the current browser.
|
|
|
|
*/
|
2022-05-04 22:41:47 +00:00
|
|
|
export const isAudioContextSupported: boolean = (() => {
|
|
|
|
if (process.env.NODE_ENV === 'test') {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2022-04-15 14:24:30 +00:00
|
|
|
// Apple devices just don't love AudioContext that much.
|
|
|
|
if (isMobile.apple.device) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
const ContextClass = window.AudioContext ||
|
|
|
|
window.webkitAudioContext ||
|
|
|
|
window.mozAudioContext ||
|
|
|
|
window.oAudioContext ||
|
|
|
|
window.msAudioContext
|
|
|
|
|
|
|
|
if (!ContextClass) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
// Safari (MacOS & iOS alike) has webkitAudioContext, but is buggy.
|
|
|
|
// @link http://caniuse.com/#search=audiocontext
|
2022-05-04 22:41:47 +00:00
|
|
|
return Boolean((new ContextClass()).createMediaElementSource)
|
2022-04-15 14:24:30 +00:00
|
|
|
})()
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if HTML5 clipboard can be used.
|
|
|
|
*/
|
|
|
|
export const isClipboardSupported: boolean = 'execCommand' in document
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if the browser supports reading (and thus uploading) a whole directory.
|
|
|
|
*/
|
|
|
|
export const isDirectoryReadingSupported: boolean = window.DataTransferItem &&
|
|
|
|
typeof window.DataTransferItem.prototype.webkitGetAsEntry === 'function'
|