From 202af9c5d85f76830ff5595e59e7eeaca41205f3 Mon Sep 17 00:00:00 2001 From: Ishan Date: Fri, 18 Jul 2025 14:17:35 -0700 Subject: [PATCH 1/6] Initial fix --- .../java/org/jabref/gui/maintable/MainTableTooltip.java | 7 ++++++- .../main/java/org/jabref/gui/preview/PreviewViewer.java | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java b/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java index 74df84f2c35..872bc190ae7 100644 --- a/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java +++ b/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java @@ -1,8 +1,10 @@ package org.jabref.gui.maintable; +import javafx.animation.PauseTransition; import javafx.scene.control.Label; import javafx.scene.control.Tooltip; import javafx.scene.layout.VBox; +import javafx.util.Duration; import org.jabref.gui.DialogService; import org.jabref.gui.preferences.GuiPreferences; @@ -31,7 +33,10 @@ public Tooltip createTooltip(BibDatabaseContext databaseContext, BibEntry entry, preview.setLayout(preferences.getPreviewPreferences().getSelectedPreviewLayout()); preview.setDatabaseContext(databaseContext); preview.setEntry(entry); - this.setGraphic(tooltipContent); +// this.setGraphic(tooltipContent); + PauseTransition delay = new PauseTransition(Duration.millis(150)); // Tune this value if needed + delay.setOnFinished(e -> this.setGraphic(tooltipContent)); + delay.play(); } else { this.setGraphic(fieldValueLabel); } diff --git a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java index d57d436f4cc..95ca92d4de3 100644 --- a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java +++ b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java @@ -125,6 +125,12 @@ private void configurePreviewView(ThemeManager themeManager) { return; } + Object height = previewView.getEngine().executeScript("document.getElementById('content').scrollHeight"); + if (height instanceof java.lang.Number) { + double actualHeight = ((java.lang.Number) height).doubleValue(); + previewView.setPrefHeight(actualHeight + 10); + } + // https://stackoverflow.com/questions/15555510/javafx-stop-opening-url-in-webview-open-in-browser-instead NodeList anchorList = previewView.getEngine().getDocument().getElementsByTagName("a"); for (int i = 0; i < anchorList.getLength(); i++) { From eda59fbcf23887586ec27c1d189759ba7617d72d Mon Sep 17 00:00:00 2001 From: Ishan Date: Fri, 18 Jul 2025 14:18:05 -0700 Subject: [PATCH 2/6] Update MainTableTooltip.java --- .../java/org/jabref/gui/maintable/MainTableTooltip.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java b/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java index 872bc190ae7..74df84f2c35 100644 --- a/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java +++ b/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java @@ -1,10 +1,8 @@ package org.jabref.gui.maintable; -import javafx.animation.PauseTransition; import javafx.scene.control.Label; import javafx.scene.control.Tooltip; import javafx.scene.layout.VBox; -import javafx.util.Duration; import org.jabref.gui.DialogService; import org.jabref.gui.preferences.GuiPreferences; @@ -33,10 +31,7 @@ public Tooltip createTooltip(BibDatabaseContext databaseContext, BibEntry entry, preview.setLayout(preferences.getPreviewPreferences().getSelectedPreviewLayout()); preview.setDatabaseContext(databaseContext); preview.setEntry(entry); -// this.setGraphic(tooltipContent); - PauseTransition delay = new PauseTransition(Duration.millis(150)); // Tune this value if needed - delay.setOnFinished(e -> this.setGraphic(tooltipContent)); - delay.play(); + this.setGraphic(tooltipContent); } else { this.setGraphic(fieldValueLabel); } From 6d6fd9684bf85c6761158ca62025b0cc650ec2b6 Mon Sep 17 00:00:00 2001 From: Ishan Date: Sat, 19 Jul 2025 13:15:52 -0700 Subject: [PATCH 3/6] got the width based on the text --- .../java/org/jabref/gui/preview/PreviewViewer.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java index 95ca92d4de3..e112a37a9a1 100644 --- a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java +++ b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java @@ -126,11 +126,18 @@ private void configurePreviewView(ThemeManager themeManager) { } Object height = previewView.getEngine().executeScript("document.getElementById('content').scrollHeight"); - if (height instanceof java.lang.Number) { - double actualHeight = ((java.lang.Number) height).doubleValue(); + + if (height instanceof java.lang.Number heightVal) { + double actualHeight = (heightVal).doubleValue(); previewView.setPrefHeight(actualHeight + 10); } + Object width = previewView.getEngine().executeScript("document.getElementById('content').scrollWidth"); + if (width instanceof java.lang.Number widthVal) { + double actualWidth = (widthVal).doubleValue(); + previewView.setPrefWidth(actualWidth + 5); + } + // https://stackoverflow.com/questions/15555510/javafx-stop-opening-url-in-webview-open-in-browser-instead NodeList anchorList = previewView.getEngine().getDocument().getElementsByTagName("a"); for (int i = 0; i < anchorList.getLength(); i++) { From a24adc88203d0ca339e710e5e8b620d42d2d8010 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Mon, 28 Jul 2025 20:43:20 +0200 Subject: [PATCH 4/6] Apply suggestion from code review --- .../main/java/org/jabref/gui/preview/PreviewViewer.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java index e112a37a9a1..81b1c44a13a 100644 --- a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java +++ b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java @@ -125,15 +125,12 @@ private void configurePreviewView(ThemeManager themeManager) { return; } - Object height = previewView.getEngine().executeScript("document.getElementById('content').scrollHeight"); - - if (height instanceof java.lang.Number heightVal) { + if (previewView.getEngine().executeScript("document.getElementById('content').scrollHeight") instanceof java.lang.Number heightVal) { double actualHeight = (heightVal).doubleValue(); previewView.setPrefHeight(actualHeight + 10); } - Object width = previewView.getEngine().executeScript("document.getElementById('content').scrollWidth"); - if (width instanceof java.lang.Number widthVal) { + if (previewView.getEngine().executeScript("document.getElementById('content').scrollWidth") instanceof java.lang.Number widthVal) { double actualWidth = (widthVal).doubleValue(); previewView.setPrefWidth(actualWidth + 5); } From 875b1b24089fc9f86ed949a1b253d9ed3cd2479d Mon Sep 17 00:00:00 2001 From: Ishan Date: Sat, 2 Aug 2025 12:39:40 -0700 Subject: [PATCH 5/6] fixed width for the hover fixing height to not have scroll bar --- .../gui/maintable/MainTableTooltip.java | 1 + .../org/jabref/gui/preview/PreviewViewer.java | 26 +++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java b/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java index 74df84f2c35..6d926601916 100644 --- a/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java +++ b/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java @@ -23,6 +23,7 @@ public MainTableTooltip(DialogService dialogService, GuiPreferences preferences, this.preferences = preferences; this.preview = new PreviewViewer(dialogService, preferences, themeManager, taskExecutor); this.tooltipContent.getChildren().addAll(fieldValueLabel, preview); + this.preview.setMinHeight(200); } public Tooltip createTooltip(BibDatabaseContext databaseContext, BibEntry entry, String fieldValue) { diff --git a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java index 81b1c44a13a..61392bd213e 100644 --- a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java +++ b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java @@ -6,7 +6,9 @@ import java.net.MalformedURLException; import java.util.List; import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; +import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.property.SimpleStringProperty; @@ -52,6 +54,7 @@ public class PreviewViewer extends ScrollPane implements InvalidationListener { private static final Logger LOGGER = LoggerFactory.getLogger(PreviewViewer.class); + AtomicBoolean widthSet = new AtomicBoolean(false); // https://stackoverflow.com/questions/5669448/get-selected-texts-html-in-div/5670825#5670825 private static final String JS_GET_SELECTION_HTML_SCRIPT = """ @@ -125,15 +128,22 @@ private void configurePreviewView(ThemeManager themeManager) { return; } - if (previewView.getEngine().executeScript("document.getElementById('content').scrollHeight") instanceof java.lang.Number heightVal) { - double actualHeight = (heightVal).doubleValue(); - previewView.setPrefHeight(actualHeight + 10); - } + Platform.runLater(() -> { + if (previewView.getEngine().executeScript("document.getElementById('content').scrollHeight") instanceof java.lang.Number heightVal) { + double actualHeight = (heightVal).doubleValue(); + LOGGER.debug("Preview Height {}", actualHeight); + previewView.setPrefHeight(actualHeight + 4); + } - if (previewView.getEngine().executeScript("document.getElementById('content').scrollWidth") instanceof java.lang.Number widthVal) { - double actualWidth = (widthVal).doubleValue(); - previewView.setPrefWidth(actualWidth + 5); - } + if (previewView.getEngine().executeScript("document.getElementById('content').scrollWidth") instanceof java.lang.Number widthVal && !widthSet.get()) { + double actualWidth = (widthVal).doubleValue(); + double updatedWidth = actualWidth + 310; + + LOGGER.debug("Preview Width {}", actualWidth); + previewView.setPrefWidth(Math.min(updatedWidth, 500)); + widthSet.set(true); + } + }); // https://stackoverflow.com/questions/15555510/javafx-stop-opening-url-in-webview-open-in-browser-instead NodeList anchorList = previewView.getEngine().getDocument().getElementsByTagName("a"); From 2d4ff2a4044142b4424815582ac9fd3c2862f544 Mon Sep 17 00:00:00 2001 From: Ishan Date: Sat, 2 Aug 2025 14:16:40 -0700 Subject: [PATCH 6/6] fixed height and hid the scroll bars --- .../gui/maintable/MainTableTooltip.java | 1 - .../org/jabref/gui/preview/PreviewViewer.java | 34 +++++++++---------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java b/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java index 6d926601916..74df84f2c35 100644 --- a/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java +++ b/jabgui/src/main/java/org/jabref/gui/maintable/MainTableTooltip.java @@ -23,7 +23,6 @@ public MainTableTooltip(DialogService dialogService, GuiPreferences preferences, this.preferences = preferences; this.preview = new PreviewViewer(dialogService, preferences, themeManager, taskExecutor); this.tooltipContent.getChildren().addAll(fieldValueLabel, preview); - this.preview.setMinHeight(200); } public Tooltip createTooltip(BibDatabaseContext databaseContext, BibEntry entry, String fieldValue) { diff --git a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java index 61392bd213e..8098a860d16 100644 --- a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java +++ b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java @@ -8,7 +8,6 @@ import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; -import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.property.SimpleStringProperty; @@ -54,8 +53,6 @@ public class PreviewViewer extends ScrollPane implements InvalidationListener { private static final Logger LOGGER = LoggerFactory.getLogger(PreviewViewer.class); - AtomicBoolean widthSet = new AtomicBoolean(false); - // https://stackoverflow.com/questions/5669448/get-selected-texts-html-in-div/5670825#5670825 private static final String JS_GET_SELECTION_HTML_SCRIPT = """ function getSelectionHtml() { @@ -90,6 +87,7 @@ function getSelectionHtml() { private @Nullable BibEntry entry; private PreviewLayout layout; private String layoutText; + private final AtomicBoolean widthSet = new AtomicBoolean(false); public PreviewViewer(DialogService dialogService, GuiPreferences preferences, @@ -128,22 +126,24 @@ private void configurePreviewView(ThemeManager themeManager) { return; } - Platform.runLater(() -> { - if (previewView.getEngine().executeScript("document.getElementById('content').scrollHeight") instanceof java.lang.Number heightVal) { - double actualHeight = (heightVal).doubleValue(); - LOGGER.debug("Preview Height {}", actualHeight); - previewView.setPrefHeight(actualHeight + 4); - } + previewView.getEngine().executeScript("document.body.offsetHeight;"); + + if (previewView.getEngine().executeScript("document.getElementById('content').scrollHeight") instanceof java.lang.Number heightVal) { + double actualHeight = (heightVal).doubleValue(); + LOGGER.debug("Preview Height {}", actualHeight); + previewView.setMaxHeight(actualHeight + 10); + previewView.setPrefHeight(actualHeight + 10); + } + previewView.getEngine().executeScript("document.body.style.overflow='hidden';"); - if (previewView.getEngine().executeScript("document.getElementById('content').scrollWidth") instanceof java.lang.Number widthVal && !widthSet.get()) { - double actualWidth = (widthVal).doubleValue(); - double updatedWidth = actualWidth + 310; + if (previewView.getEngine().executeScript("document.getElementById('content').scrollWidth") instanceof java.lang.Number widthVal && !widthSet.get()) { + double actualWidth = (widthVal).doubleValue(); + double updatedWidth = actualWidth + 350; - LOGGER.debug("Preview Width {}", actualWidth); - previewView.setPrefWidth(Math.min(updatedWidth, 500)); - widthSet.set(true); - } - }); + LOGGER.debug("Preview Width {}", actualWidth); + previewView.setPrefWidth(Math.min(updatedWidth, 500)); + widthSet.set(true); + } // https://stackoverflow.com/questions/15555510/javafx-stop-opening-url-in-webview-open-in-browser-instead NodeList anchorList = previewView.getEngine().getDocument().getElementsByTagName("a");