diff --git a/src/main/java/org/jabref/gui/preview/PreviewViewer.java b/src/main/java/org/jabref/gui/preview/PreviewViewer.java index 4e1201b92dc..937a16b987a 100644 --- a/src/main/java/org/jabref/gui/preview/PreviewViewer.java +++ b/src/main/java/org/jabref/gui/preview/PreviewViewer.java @@ -1,5 +1,7 @@ package org.jabref.gui.preview; +import java.net.URL; +import java.util.Base64; import java.util.Objects; import java.util.Optional; import java.util.regex.Pattern; @@ -27,6 +29,7 @@ import org.jabref.logic.search.SearchQuery; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; +import org.jabref.model.strings.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -116,9 +119,14 @@ public PreviewViewer(BibDatabaseContext database, DialogService dialogService, S public void setTheme(String theme) { if (theme.equals(ThemeLoader.DARK_CSS)) { - previewView.getEngine().setUserStyleSheetLocation(JabRefFrame.class.getResource(ThemeLoader.DARK_CSS).toString()); + // We need to load the css file manually, due to a bug in the jdk + // TODO: Remove this workaround as soon as https://github.com/openjdk/jfx/pull/22 is merged + URL url = JabRefFrame.class.getResource(ThemeLoader.DARK_CSS); + String dataUrl = "data:text/css;charset=utf-8;base64," + + Base64.getEncoder().encodeToString(StringUtil.getResourceFileAsString(url).getBytes()); + + previewView.getEngine().setUserStyleSheetLocation(dataUrl); } - } private void highlightSearchPattern() { diff --git a/src/main/java/org/jabref/model/strings/StringUtil.java b/src/main/java/org/jabref/model/strings/StringUtil.java index af38b5f012e..0551821493c 100644 --- a/src/main/java/org/jabref/model/strings/StringUtil.java +++ b/src/main/java/org/jabref/model/strings/StringUtil.java @@ -1,5 +1,12 @@ package org.jabref.model.strings; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -9,6 +16,7 @@ import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.jabref.architecture.ApacheCommonsLang3Allowed; @@ -721,4 +729,19 @@ public static boolean containsIgnoreCase(String text, String searchString) { public static String substringBetween(String str, String open, String close) { return StringUtils.substringBetween(str, open, close); } + + public static String getResourceFileAsString(URL resource) { + try { + URLConnection conn = resource.openConnection(); + conn.connect(); + + try (InputStream inputStream = new BufferedInputStream(conn.getInputStream()); + InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + BufferedReader reader = new BufferedReader(inputStreamReader)) { + return reader.lines().collect(Collectors.joining(System.lineSeparator())); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/test/java/org/jabref/model/strings/StringUtilTest.java b/src/test/java/org/jabref/model/strings/StringUtilTest.java index 383b97c1cc0..5f9569eaa58 100644 --- a/src/test/java/org/jabref/model/strings/StringUtilTest.java +++ b/src/test/java/org/jabref/model/strings/StringUtilTest.java @@ -21,7 +21,7 @@ void StringUtilClassIsSmall() throws Exception { Path path = Paths.get("src", "main", "java", StringUtil.class.getName().replace('.', '/') + ".java"); int lineCount = Files.readAllLines(path, StandardCharsets.UTF_8).size(); - assertTrue(lineCount <= 725, "StringUtil increased in size to " + lineCount + ". " + assertTrue(lineCount <= 749, "StringUtil increased in size to " + lineCount + ". " + "We try to keep this class as small as possible. " + "Thus think twice if you add something to StringUtil."); }