From 94a43bec0dd69a9f95561cc10f1d75b5b3882170 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Tue, 10 Apr 2018 08:08:28 -0400 Subject: [PATCH] fix #3694 --- src/css/1p-filters.css | 4 ++++ src/css/dashboard-common.css | 10 +++------ src/css/dyna-rules.css | 6 +++++- src/css/whitelist.css | 4 ++++ src/js/1p-filters.js | 1 - src/js/dashboard-common.js | 39 ++++++++++++++++++++++++++---------- 6 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/css/1p-filters.css b/src/css/1p-filters.css index 2048139e8..5983465a0 100644 --- a/src/css/1p-filters.css +++ b/src/css/1p-filters.css @@ -1,3 +1,7 @@ +html { + height: 100vh; + overflow: hidden; + } body { overflow: hidden; } diff --git a/src/css/dashboard-common.css b/src/css/dashboard-common.css index a15c1ed21..869ea8428 100644 --- a/src/css/dashboard-common.css +++ b/src/css/dashboard-common.css @@ -1,13 +1,9 @@ body { + background-color: #fff; box-sizing: border-box; - left: 0; - height: 100vh; + color: #000; margin: 0; - overflow: auto; padding: 0; - position: absolute; - right: 0; - top: 0; } body > div.body { padding: 0 0.5em 0.5em 0.5em; @@ -94,7 +90,7 @@ input[type="checkbox"][disabled] + label { padding: 5px; background-color: #FEDAE0; } -@media (max-height: 640px) { +@media (max-height: 640px), (max-height: 800px) and (max-width: 480px) { .vverbose { display: none !important; } diff --git a/src/css/dyna-rules.css b/src/css/dyna-rules.css index f5ddc4a73..5d4342414 100644 --- a/src/css/dyna-rules.css +++ b/src/css/dyna-rules.css @@ -1,3 +1,7 @@ +html { + height: 100vh; + overflow: hidden; + } body { display: flex; flex-direction: column; @@ -25,7 +29,7 @@ body { text-align: center; vertical-align: top; width: 50%; - white-space: normal; + white-space: nowrap; } #diff .ruleActions h3 { font-weight: normal; diff --git a/src/css/whitelist.css b/src/css/whitelist.css index 292e75d1f..fe116381b 100644 --- a/src/css/whitelist.css +++ b/src/css/whitelist.css @@ -1,3 +1,7 @@ +html { + height: 100vh; + overflow: hidden; + } body { overflow: hidden; } diff --git a/src/js/1p-filters.js b/src/js/1p-filters.js index 8b7c70a32..73682aedb 100644 --- a/src/js/1p-filters.js +++ b/src/js/1p-filters.js @@ -68,7 +68,6 @@ function renderUserFilters(first) { } cmEditor.setValue(content); if ( first ) { - cmEditor.setCursor(cmEditor.lineCount(), 0); cmEditor.clearHistory(); } userFiltersChanged(false); diff --git a/src/js/dashboard-common.js b/src/js/dashboard-common.js index def07bd2c..d7be2c065 100644 --- a/src/js/dashboard-common.js +++ b/src/js/dashboard-common.js @@ -168,23 +168,40 @@ self.uBlockDashboard.patchCodeMirrorEditor = (function() { grabFocusAsync(cm); }; - var resizeTimer; - var resize = function() { + var resizeTimer, + resizeObserver; + var resize = function(cm) { resizeTimer = undefined; - let prect = document.body.getBoundingClientRect(); - let child = document.querySelector('.codeMirrorFillVertical'); - let crect = child.getBoundingClientRect(); - let height = Math.max(prect.bottom - crect.top, 80); - child.style.height = height + 'px'; + var child = document.querySelector('.codeMirrorFillVertical'); + if ( child === null ) { return; } + var prect = document.documentElement.getBoundingClientRect(); + var crect = child.getBoundingClientRect(); + var cssHeight = Math.floor(Math.max(prect.bottom - crect.top, 80)) + 'px'; + if ( child.style.height !== cssHeight ) { + child.style.height = cssHeight; + if ( cm instanceof CodeMirror ) { + cm.refresh(); + } + } + }; + var resizeAsync = function(cm, delay) { + if ( resizeTimer !== undefined ) { return; } + resizeTimer = vAPI.setTimeout( + resize.bind(null, cm), + typeof delay === 'number' ? delay : 66 + ); }; return function(cm) { if ( document.querySelector('.codeMirrorFillVertical') !== null ) { - resize(); - window.addEventListener('resize', function() { - if ( resizeTimer !== undefined ) { return; } - resizeTimer = vAPI.setTimeout(resize, 66); + var boundResizeAsync = resizeAsync.bind(null, cm); + window.addEventListener('resize', boundResizeAsync); + resizeObserver = new MutationObserver(boundResizeAsync); + resizeObserver.observe(document.querySelector('.body'), { + childList: true, + subtree: true }); + resizeAsync(cm, 1); } if ( cm.options.inputStyle === 'contenteditable' ) { cm.on('beforeSelectionChange', patchSelectAll);