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..8098a860d16 100644 --- a/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java +++ b/jabgui/src/main/java/org/jabref/gui/preview/PreviewViewer.java @@ -6,6 +6,7 @@ import java.net.MalformedURLException; import java.util.List; import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; import javafx.beans.InvalidationListener; import javafx.beans.Observable; @@ -52,7 +53,6 @@ public class PreviewViewer extends ScrollPane implements InvalidationListener { private static final Logger LOGGER = LoggerFactory.getLogger(PreviewViewer.class); - // https://stackoverflow.com/questions/5669448/get-selected-texts-html-in-div/5670825#5670825 private static final String JS_GET_SELECTION_HTML_SCRIPT = """ function getSelectionHtml() { @@ -87,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, @@ -125,6 +126,25 @@ private void configurePreviewView(ThemeManager themeManager) { return; } + 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 + 350; + + 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"); for (int i = 0; i < anchorList.getLength(); i++) {