parent
2ac9a9db29
commit
bfe18e74a4
|
@ -299,13 +299,19 @@
|
|||
// HTML document style; also works on HTML-embedded SVG
|
||||
el = document.createElement('style');
|
||||
}
|
||||
Object.assign(el, {
|
||||
id,
|
||||
type: 'text/css',
|
||||
textContent: code,
|
||||
});
|
||||
el.id = id;
|
||||
el.type = 'text/css';
|
||||
// SVG className is not a string, but an instance of SVGAnimatedString
|
||||
el.classList.add('stylus');
|
||||
if (!CHROME && (
|
||||
// FF bug workaround, see https://github.com/openstyles/stylus/issues/461
|
||||
location.hostname === 'www.barclaycardus.com' ||
|
||||
location.hostname === 'www.icloud.com'
|
||||
)) {
|
||||
setContentsInPageContext(el, code);
|
||||
} else {
|
||||
el.textContent = code;
|
||||
}
|
||||
addStyleElement(el);
|
||||
}
|
||||
styleElements.set(id, el);
|
||||
|
@ -313,6 +319,18 @@
|
|||
return el;
|
||||
}
|
||||
|
||||
function setContentsInPageContext(el, code) {
|
||||
const originalId = el.id;
|
||||
el.id += performance.now();
|
||||
// when adding to ROOT we don't want our observer to pop up so we use a DIV wrapper
|
||||
(document.head || ROOT.appendChild(document.createElement('div'))).appendChild(el);
|
||||
(document.head || ROOT).appendChild(document.createElement('script')).text = `
|
||||
document.currentScript.remove();
|
||||
document.getElementById('${el.id}').textContent = ${JSON.stringify(code)};`;
|
||||
if (!document.head) el.parentNode.remove();
|
||||
el.id = originalId;
|
||||
}
|
||||
|
||||
function addStyleElement(newElement) {
|
||||
if (!ROOT) {
|
||||
return;
|
||||
|
@ -443,7 +461,6 @@
|
|||
function initDocRootObserver() {
|
||||
let lastRestorationTime = 0;
|
||||
let restorationCounter = 0;
|
||||
let scheduledSort = false;
|
||||
let observing = false;
|
||||
let sorting = false;
|
||||
let observer;
|
||||
|
@ -504,24 +521,13 @@
|
|||
return true;
|
||||
}
|
||||
}
|
||||
function sortStyleElements({force} = {}) {
|
||||
if (!observing ||
|
||||
!force && scheduledSort) {
|
||||
return;
|
||||
}
|
||||
scheduledSort = false;
|
||||
function sortStyleElements() {
|
||||
if (!observing) return;
|
||||
let prevExpected = document.documentElement.lastElementChild;
|
||||
while (prevExpected && isSkippable(prevExpected, true)) {
|
||||
prevExpected = prevExpected.previousElementSibling;
|
||||
}
|
||||
if (!prevExpected) {
|
||||
return;
|
||||
}
|
||||
if (!CHROME && !force && window !== top) {
|
||||
requestAnimationFrame(() => sortStyleElements({force: true}));
|
||||
scheduledSort = true;
|
||||
return;
|
||||
}
|
||||
if (!prevExpected) return;
|
||||
for (const el of styleElements.values()) {
|
||||
if (!isMovable(el)) {
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue
Block a user