Defer load of iframe on the settings page (#1313)
This commit is contained in:
parent
5215c6b8b4
commit
ea1d40f94b
@ -54,6 +54,10 @@ class SettingsDisplayController {
|
|||||||
node.addEventListener('keydown', onInputTabActionKeyDown, false);
|
node.addEventListener('keydown', onInputTabActionKeyDown, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const node of document.querySelectorAll('.defer-load-iframe')) {
|
||||||
|
this._setupDeferLoadIframe(node);
|
||||||
|
}
|
||||||
|
|
||||||
this._onMoreToggleClickBind = this._onMoreToggleClick.bind(this);
|
this._onMoreToggleClickBind = this._onMoreToggleClick.bind(this);
|
||||||
const moreSelectorObserver = new SelectorObserver({
|
const moreSelectorObserver = new SelectorObserver({
|
||||||
selector: '.more-toggle',
|
selector: '.more-toggle',
|
||||||
@ -305,4 +309,33 @@ class SettingsDisplayController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_setupDeferLoadIframe(element) {
|
||||||
|
const parent = this._getMoreContainer(element);
|
||||||
|
if (parent === null) { return; }
|
||||||
|
|
||||||
|
let mutationObserver = null;
|
||||||
|
const callback = () => {
|
||||||
|
if (!this._isElementVisible(element)) { return false; }
|
||||||
|
|
||||||
|
const src = element.dataset.src;
|
||||||
|
delete element.dataset.src;
|
||||||
|
element.src = src;
|
||||||
|
|
||||||
|
if (mutationObserver === null) { return true; }
|
||||||
|
|
||||||
|
mutationObserver.disconnect();
|
||||||
|
mutationObserver = null;
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (callback()) { return; }
|
||||||
|
|
||||||
|
mutationObserver = new MutationObserver(callback);
|
||||||
|
mutationObserver.observe(parent, {attributes: true});
|
||||||
|
}
|
||||||
|
|
||||||
|
_isElementVisible(element) {
|
||||||
|
return (element.offsetParent !== null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -720,7 +720,7 @@
|
|||||||
Pitch accents for terms and expressions can be shown if a dictionary supporting pitch accents is installed.
|
Pitch accents for terms and expressions can be shown if a dictionary supporting pitch accents is installed.
|
||||||
There are currently three different ways that pitch accents can be presented:
|
There are currently three different ways that pitch accents can be presented:
|
||||||
</p>
|
</p>
|
||||||
<iframe src="/bg/pitch-accents-preview.html" id="pitch-accents-preview-frame"></iframe>
|
<iframe data-src="/bg/pitch-accents-preview.html" id="pitch-accents-preview-frame" class="defer-load-iframe" data-parent-distance="1"></iframe>
|
||||||
<p>
|
<p>
|
||||||
<a class="more-toggle" data-parent-distance="3">Less…</a>
|
<a class="more-toggle" data-parent-distance="3">Less…</a>
|
||||||
</p>
|
</p>
|
||||||
|
Loading…
Reference in New Issue
Block a user