Skip to content

Commit 088155d

Browse files
committed
Fixed resize-iframes.js:
- doObserveIFrame(), resized typo - now running resize_iframe_out() on visibility change, so `<dataFrame>` can work inside `<tab>` - cleaning up the file a bit
1 parent 9e12d86 commit 088155d

File tree

1 file changed

+36
-27
lines changed

1 file changed

+36
-27
lines changed

docs/StardustDocs/cfg/resize-iframes.js

Lines changed: 36 additions & 27 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,64 @@
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 resized = 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_iframe_out(el);
58+
resized = true;
5959
}
6060
} else {
61-
62-
resize = true
61+
resized = true;
6362
}
6463
}
65-
if (resize) {
66-
resize_iframe_out(el)
64+
if (resized) {
65+
resize_iframe_out(el);
6766
}
6867
});
69-
70-
observer.observe(el.contentDocument.documentElement, {childList: true, subtree: true, characterData: true, attributes: true});
71-
68+
mutationObserver.observe(
69+
el.contentDocument.documentElement,
70+
{ childList: true, subtree: true, characterData: true, attributes: true },
71+
);
72+
73+
const visibilityObserver = new IntersectionObserver(
74+
() => resize_iframe_out(el),
75+
{ root: document.documentElement },
76+
);
77+
visibilityObserver.observe(el);
7278
}
7379

7480
function observeIFrame(el) {
75-
if (el.contentWindow && el.contentWindow.performance && el.contentWindow.performance.timing.loadEventEnd === 0) {
76-
el.addEventListener('load', () => doObserveIFrame(el), true)
81+
if (el.contentWindow &&
82+
el.contentWindow.performance &&
83+
el.contentWindow.performance.timing.loadEventEnd === 0
84+
) {
85+
el.addEventListener('load', () => doObserveIFrame(el), true);
7786
} else {
78-
doObserveIFrame(el)
87+
doObserveIFrame(el);
7988
}
8089
}
8190

8291
let iframes = document.querySelectorAll('iframe');
83-
8492
for (let i = 0; i < iframes.length; i++) {
85-
observeIFrame(iframes[i])
93+
observeIFrame(iframes[i]);
8694
}
8795

88-
let bodyObserver = new MutationObserver(function (mutations) {
89-
mutations.forEach(function (mutation) {
96+
let bodyObserver = new MutationObserver((mutations) => {
97+
mutations.forEach(function(mutation) {
9098
for (let i = 0; i < mutation.addedNodes.length; i++) {
9199
let addedNode = mutation.addedNodes[i];
92100
if (addedNode.tagName === 'IFRAME') {
93101
observeIFrame(addedNode);
94102
} else if (addedNode.tagName === 'SECTION') {
95-
let iframes = [];
96-
97103
function traverse(node) {
98104
if (node.tagName === 'IFRAME') {
99105
observeIFrame(node);
100106
}
101-
102107
for (let i = 0; i < node.children.length; i++) {
103108
traverse(node.children[i]);
104109
}
@@ -110,11 +115,15 @@
110115
});
111116
});
112117

113-
bodyObserver.observe(document.documentElement || document.body, {childList: true, subtree: true, attributes: true});
114-
observeHtmlClassChanges()
118+
bodyObserver.observe(
119+
document.documentElement || document.body,
120+
{ childList: true, subtree: true, attributes: true },
121+
);
122+
observeHtmlClassChanges();
123+
115124
// initialize theme
116125
const htmlElement = document.documentElement;
117126
const theme = htmlElement.classList.contains('theme-light') ? 'light' : 'dark';
118127
updateIframeThemes(theme);
119-
}
128+
};
120129
</script>

0 commit comments

Comments
 (0)