parent
b29aa44a64
commit
9cf358a82a
@ -0,0 +1,93 @@ |
||||
/** |
||||
* Determines if the provider should be injected |
||||
* |
||||
* @returns {boolean} {@code true} Whether the provider should be injected |
||||
*/ |
||||
export default function shouldInjectProvider() { |
||||
return ( |
||||
doctypeCheck() && |
||||
suffixCheck() && |
||||
documentElementCheck() && |
||||
!blockedDomainCheck() |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* Checks the doctype of the current document if it exists |
||||
* |
||||
* @returns {boolean} {@code true} if the doctype is html or if none exists |
||||
*/ |
||||
function doctypeCheck() { |
||||
const { doctype } = window.document; |
||||
if (doctype) { |
||||
return doctype.name === 'html'; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* Returns whether or not the extension (suffix) of the current document is prohibited |
||||
* |
||||
* This checks {@code window.location.pathname} against a set of file extensions |
||||
* that we should not inject the provider into. This check is indifferent of |
||||
* query parameters in the location. |
||||
* |
||||
* @returns {boolean} whether or not the extension of the current document is prohibited |
||||
*/ |
||||
function suffixCheck() { |
||||
const prohibitedTypes = [/\.xml$/u, /\.pdf$/u]; |
||||
const currentUrl = window.location.pathname; |
||||
for (let i = 0; i < prohibitedTypes.length; i++) { |
||||
if (prohibitedTypes[i].test(currentUrl)) { |
||||
return false; |
||||
} |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* Checks the documentElement of the current document |
||||
* |
||||
* @returns {boolean} {@code true} if the documentElement is an html node or if none exists |
||||
*/ |
||||
function documentElementCheck() { |
||||
const documentElement = document.documentElement.nodeName; |
||||
if (documentElement) { |
||||
return documentElement.toLowerCase() === 'html'; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* Checks if the current domain is blocked |
||||
* |
||||
* @returns {boolean} {@code true} if the current domain is blocked |
||||
*/ |
||||
function blockedDomainCheck() { |
||||
const blockedDomains = [ |
||||
'uscourts.gov', |
||||
'dropbox.com', |
||||
'webbyawards.com', |
||||
'cdn.shopify.com/s/javascripts/tricorder/xtld-read-only-frame.html', |
||||
'adyen.com', |
||||
'gravityforms.com', |
||||
'docs.google.com', |
||||
'harbourair.com', |
||||
'ani.gamer.com.tw', |
||||
'blueskybooking.com', |
||||
'sharefile.com', |
||||
]; |
||||
const currentUrl = window.location.href; |
||||
let currentRegex; |
||||
for (let i = 0; i < blockedDomains.length; i++) { |
||||
const blockedDomain = blockedDomains[i].replace('.', '\\.'); |
||||
currentRegex = new RegExp( |
||||
`(?:https?:\\/\\/)(?:(?!${blockedDomain}).)*$`, |
||||
'u', |
||||
); |
||||
if (!currentRegex.test(currentUrl)) { |
||||
return true; |
||||
} |
||||
} |
||||
return false; |
||||
} |
Loading…
Reference in new issue