Skip to content

Commit e8e5188

Browse files
authored
Merge pull request #618 from Kotlin/resize-iframes-fix
Fixes in resize-iframes.js
2 parents 9e12d86 + 84e6908 commit e8e5188

File tree

1 file changed

+34
-26
lines changed

1 file changed

+34
-26
lines changed

docs/StardustDocs/cfg/resize-iframes.js

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<meta name="google-site-verification" content="Lffz_ab-_S5cmA07ZXVbucHVklaRsnk8gEt8frHKjMk" />
1+
<meta name="google-site-verification" content="Lffz_ab-_S5cmA07ZXVbucHVklaRsnk8gEt8frHKjMk"/>
22
<!-- Google Analytics -->
33
<script>
44
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
@@ -11,7 +11,7 @@
1111
</script>
1212
<!-- End Google Analytics -->
1313
<script>
14-
window.onload = function () {
14+
window.onload = function() {
1515
function updateIframeThemes(theme) {
1616
const iframes = document.getElementsByTagName('iframe');
1717

@@ -46,59 +46,63 @@
4646
}
4747

4848
function doObserveIFrame(el) {
49-
resize_iframe_out(el)
50-
let observer = new MutationObserver(function (mutations) {
51-
var resize = false
49+
resize_iframe_out(el);
50+
const mutationObserver = new MutationObserver((mutations) => {
51+
let resize = false;
5252
for (let mutation of mutations) {
5353
// skip attribute changes except open to avoid loop
5454
// (callback sees change in iframe, triggers resize, sees change...)
5555
if (mutation.type === 'attributes') {
5656
if (mutation.attributeName === 'open') {
57-
resize_iframe_out(el)
58-
resized = true
57+
resize = true;
5958
}
6059
} else {
61-
62-
resize = true
60+
resize = true;
6361
}
6462
}
6563
if (resize) {
66-
resize_iframe_out(el)
64+
resize_iframe_out(el);
6765
}
6866
});
69-
70-
observer.observe(el.contentDocument.documentElement, {childList: true, subtree: true, characterData: true, attributes: true});
71-
67+
mutationObserver.observe(
68+
el.contentDocument.documentElement,
69+
{ childList: true, subtree: true, characterData: true, attributes: true },
70+
);
71+
72+
const visibilityObserver = new IntersectionObserver(
73+
() => resize_iframe_out(el),
74+
{ root: document.documentElement },
75+
);
76+
visibilityObserver.observe(el);
7277
}
7378

7479
function observeIFrame(el) {
75-
if (el.contentWindow && el.contentWindow.performance && el.contentWindow.performance.timing.loadEventEnd === 0) {
76-
el.addEventListener('load', () => doObserveIFrame(el), true)
80+
if (el.contentWindow &&
81+
el.contentWindow.performance &&
82+
el.contentWindow.performance.timing.loadEventEnd === 0
83+
) {
84+
el.addEventListener('load', () => doObserveIFrame(el), true);
7785
} else {
78-
doObserveIFrame(el)
86+
doObserveIFrame(el);
7987
}
8088
}
8189

8290
let iframes = document.querySelectorAll('iframe');
83-
8491
for (let i = 0; i < iframes.length; i++) {
85-
observeIFrame(iframes[i])
92+
observeIFrame(iframes[i]);
8693
}
8794

88-
let bodyObserver = new MutationObserver(function (mutations) {
89-
mutations.forEach(function (mutation) {
95+
let bodyObserver = new MutationObserver((mutations) => {
96+
mutations.forEach(function(mutation) {
9097
for (let i = 0; i < mutation.addedNodes.length; i++) {
9198
let addedNode = mutation.addedNodes[i];
9299
if (addedNode.tagName === 'IFRAME') {
93100
observeIFrame(addedNode);
94101
} else if (addedNode.tagName === 'SECTION') {
95-
let iframes = [];
96-
97102
function traverse(node) {
98103
if (node.tagName === 'IFRAME') {
99104
observeIFrame(node);
100105
}
101-
102106
for (let i = 0; i < node.children.length; i++) {
103107
traverse(node.children[i]);
104108
}
@@ -110,11 +114,15 @@
110114
});
111115
});
112116

113-
bodyObserver.observe(document.documentElement || document.body, {childList: true, subtree: true, attributes: true});
114-
observeHtmlClassChanges()
117+
bodyObserver.observe(
118+
document.documentElement || document.body,
119+
{ childList: true, subtree: true, attributes: true },
120+
);
121+
observeHtmlClassChanges();
122+
115123
// initialize theme
116124
const htmlElement = document.documentElement;
117125
const theme = htmlElement.classList.contains('theme-light') ? 'light' : 'dark';
118126
updateIframeThemes(theme);
119-
}
127+
};
120128
</script>

0 commit comments

Comments
 (0)