90 lines
3.4 KiB
Diff
90 lines
3.4 KiB
Diff
|
From 01a0f96b40345642b1100a583b13a2f67487f642 Mon Sep 17 00:00:00 2001
|
||
|
From: Michael Gratton <mike@vee.net>
|
||
|
Date: Sat, 17 Oct 2020 11:29:05 +1100
|
||
|
Subject: [PATCH 103/124] ui/components-web-view.js: Use ResizeObserver for
|
||
|
watching pref height
|
||
|
|
||
|
Rather than guessing when the height might change by using a number
|
||
|
of different event listeners, use a ResizeObserver to get direct
|
||
|
notifications of any changes to the HTML element's size.
|
||
|
---
|
||
|
ui/components-web-view.js | 54 ++++-----------------------------------
|
||
|
1 file changed, 5 insertions(+), 49 deletions(-)
|
||
|
|
||
|
diff --git a/ui/components-web-view.js b/ui/components-web-view.js
|
||
|
index d0998a67..34bf0430 100644
|
||
|
--- a/ui/components-web-view.js
|
||
|
+++ b/ui/components-web-view.js
|
||
|
@@ -41,7 +41,12 @@ PageState.prototype = {
|
||
|
}
|
||
|
});
|
||
|
|
||
|
+ this.heightObserver = new ResizeObserver((entries) => {
|
||
|
+ state.updatePreferredHeight();
|
||
|
+ });
|
||
|
+
|
||
|
document.addEventListener("DOMContentLoaded", function(e) {
|
||
|
+ state.heightObserver.observe(window.document.documentElement);
|
||
|
state.loaded();
|
||
|
});
|
||
|
|
||
|
@@ -49,55 +54,6 @@ PageState.prototype = {
|
||
|
state.selectionChanged();
|
||
|
});
|
||
|
|
||
|
- // Coalesce multiple calls to updatePreferredHeight using a
|
||
|
- // timeout to avoid the overhead of multiple JS messages sent
|
||
|
- // to the app and hence view multiple resizes being queued.
|
||
|
- let queueTimeout = null;
|
||
|
- let queuePreferredHeightUpdate = function() {
|
||
|
- if (queueTimeout != null) {
|
||
|
- clearTimeout(queueTimeout);
|
||
|
- }
|
||
|
- queueTimeout = setTimeout(
|
||
|
- function() { state.updatePreferredHeight(); }, 100
|
||
|
- );
|
||
|
- };
|
||
|
-
|
||
|
- // Queues an update when the complete document is loaded.
|
||
|
- //
|
||
|
- // Note also that the delay introduced here by this last call
|
||
|
- // to queuePreferredHeightUpdate when the complete document is
|
||
|
- // loaded seems to be important to get an accurate idea of the
|
||
|
- // final document size.
|
||
|
- window.addEventListener("load", function(e) {
|
||
|
- queuePreferredHeightUpdate();
|
||
|
- }, true); // load does not bubble
|
||
|
-
|
||
|
- // Queues updates for any STYLE, IMG and other loaded
|
||
|
- // elements, hence handles resizing when the user later
|
||
|
- // requests remote images loading.
|
||
|
- document.addEventListener("load", function(e) {
|
||
|
- queuePreferredHeightUpdate();
|
||
|
- }, true); // load does not bubble
|
||
|
-
|
||
|
- // Queues an update if the window changes size, e.g. if the
|
||
|
- // user resized the window. Only trigger when the width has
|
||
|
- // changed however since the height should only change as the
|
||
|
- // body is being loaded.
|
||
|
- let width = window.innerWidth;
|
||
|
- window.addEventListener("resize", function(e) {
|
||
|
- let currentWidth = window.innerWidth;
|
||
|
- if (width != currentWidth) {
|
||
|
- width = currentWidth;
|
||
|
- queuePreferredHeightUpdate();
|
||
|
- }
|
||
|
- }, false); // load does not bubble
|
||
|
-
|
||
|
- // Queues an update when a transition has completed, e.g. if the
|
||
|
- // user resized the window
|
||
|
- window.addEventListener("transitionend", function(e) {
|
||
|
- queuePreferredHeightUpdate();
|
||
|
- }, false); // load does not bubble
|
||
|
-
|
||
|
this.testResult = null;
|
||
|
},
|
||
|
getPreferredHeight: function() {
|
||
|
--
|
||
|
2.29.2
|
||
|
|