56 lines
2.0 KiB
Plaintext
56 lines
2.0 KiB
Plaintext
const getTarget = (()=>{
|
|
const memo = {};
|
|
return function memorize(target) {
|
|
if (typeof memo[target] === "undefined") {
|
|
let styleTarget = document.querySelector(target);
|
|
// Special case to return head of iframe instead of iframe itself
|
|
if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
|
|
try {
|
|
// This will throw an exception if access to iframe is blocked
|
|
// due to cross-origin restrictions
|
|
styleTarget = styleTarget.contentDocument.head;
|
|
} catch (e) {
|
|
// istanbul ignore next
|
|
styleTarget = null;
|
|
}
|
|
}
|
|
memo[target] = styleTarget;
|
|
}
|
|
return memo[target];
|
|
};
|
|
})();
|
|
module.exports = (url, options)=>{
|
|
options = options || {};
|
|
options.attributes = typeof options.attributes === "object" ? options.attributes : {};
|
|
if (typeof options.attributes.nonce === "undefined") {
|
|
const nonce = // eslint-disable-next-line no-undef
|
|
typeof __webpack_nonce__ !== "undefined" ? __webpack_nonce__ : null;
|
|
if (nonce) {
|
|
options.attributes.nonce = nonce;
|
|
}
|
|
}
|
|
const link = document.createElement("link");
|
|
link.rel = "stylesheet";
|
|
link.href = url;
|
|
Object.keys(options.attributes).forEach((key)=>{
|
|
link.setAttribute(key, options.attributes[key]);
|
|
});
|
|
if (typeof options.insert === "function") {
|
|
options.insert(link);
|
|
} else {
|
|
const target = getTarget(options.insert || "head");
|
|
if (!target) {
|
|
throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
|
|
}
|
|
target.appendChild(link);
|
|
}
|
|
return (newUrl)=>{
|
|
if (typeof newUrl === "string") {
|
|
link.href = newUrl;
|
|
} else {
|
|
link.parentNode.removeChild(link);
|
|
}
|
|
};
|
|
};
|
|
|
|
//# sourceMappingURL=injectStylesIntoLinkTag.js.map |