|
1 | | -<meta name="google-site-verification" content="Lffz_ab-_S5cmA07ZXVbucHVklaRsnk8gEt8frHKjMk" /> |
| 1 | +<meta name="google-site-verification" content="Lffz_ab-_S5cmA07ZXVbucHVklaRsnk8gEt8frHKjMk"/> |
2 | 2 | <!-- Google Analytics --> |
3 | 3 | <script> |
4 | 4 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ |
|
11 | 11 | </script> |
12 | 12 | <!-- End Google Analytics --> |
13 | 13 | <script> |
14 | | - window.onload = function () { |
| 14 | + window.onload = function() { |
15 | 15 | function updateIframeThemes(theme) { |
16 | 16 | const iframes = document.getElementsByTagName('iframe'); |
17 | 17 |
|
|
46 | 46 | } |
47 | 47 |
|
48 | 48 | 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; |
52 | 52 | for (let mutation of mutations) { |
53 | 53 | // skip attribute changes except open to avoid loop |
54 | 54 | // (callback sees change in iframe, triggers resize, sees change...) |
55 | 55 | if (mutation.type === 'attributes') { |
56 | 56 | if (mutation.attributeName === 'open') { |
57 | | - resize_iframe_out(el) |
58 | | - resized = true |
| 57 | + resize_iframe_out(el); |
| 58 | + resized = true; |
59 | 59 | } |
60 | 60 | } else { |
61 | | - |
62 | | - resize = true |
| 61 | + resized = true; |
63 | 62 | } |
64 | 63 | } |
65 | | - if (resize) { |
66 | | - resize_iframe_out(el) |
| 64 | + if (resized) { |
| 65 | + resize_iframe_out(el); |
67 | 66 | } |
68 | 67 | }); |
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); |
72 | 78 | } |
73 | 79 |
|
74 | 80 | 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); |
77 | 86 | } else { |
78 | | - doObserveIFrame(el) |
| 87 | + doObserveIFrame(el); |
79 | 88 | } |
80 | 89 | } |
81 | 90 |
|
82 | 91 | let iframes = document.querySelectorAll('iframe'); |
83 | | - |
84 | 92 | for (let i = 0; i < iframes.length; i++) { |
85 | | - observeIFrame(iframes[i]) |
| 93 | + observeIFrame(iframes[i]); |
86 | 94 | } |
87 | 95 |
|
88 | | - let bodyObserver = new MutationObserver(function (mutations) { |
89 | | - mutations.forEach(function (mutation) { |
| 96 | + let bodyObserver = new MutationObserver((mutations) => { |
| 97 | + mutations.forEach(function(mutation) { |
90 | 98 | for (let i = 0; i < mutation.addedNodes.length; i++) { |
91 | 99 | let addedNode = mutation.addedNodes[i]; |
92 | 100 | if (addedNode.tagName === 'IFRAME') { |
93 | 101 | observeIFrame(addedNode); |
94 | 102 | } else if (addedNode.tagName === 'SECTION') { |
95 | | - let iframes = []; |
96 | | - |
97 | 103 | function traverse(node) { |
98 | 104 | if (node.tagName === 'IFRAME') { |
99 | 105 | observeIFrame(node); |
100 | 106 | } |
101 | | - |
102 | 107 | for (let i = 0; i < node.children.length; i++) { |
103 | 108 | traverse(node.children[i]); |
104 | 109 | } |
|
110 | 115 | }); |
111 | 116 | }); |
112 | 117 |
|
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 | + |
115 | 124 | // initialize theme |
116 | 125 | const htmlElement = document.documentElement; |
117 | 126 | const theme = htmlElement.classList.contains('theme-light') ? 'light' : 'dark'; |
118 | 127 | updateIframeThemes(theme); |
119 | | - } |
| 128 | + }; |
120 | 129 | </script> |
0 commit comments