From d3d6cab851885868b2e951162814668005393e84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20H=C3=B8ydahl?= Date: Sun, 23 Aug 2026 18:00:35 +0200 Subject: [PATCH] SOLR-18399: Ship ui-grid icon fonts with the Admin UI ui-grid.min.css references fonts/ui-grid.{woff,ttf,eot,svg}, but the font files were never checked in, so grid icons on the SQL screen rendered as boxes and the browser logged 404s. Add the font files from the same angular-ui-grid 4.10.0 release the shipped CSS/JS come from, and drop the console-error filter that worked around the 404. --- .../apache/solr/webapp/AdminUiTestBase.java | 3 - solr/webapp/web/css/angular/fonts/ui-grid.eot | Bin 0 -> 10319 bytes solr/webapp/web/css/angular/fonts/ui-grid.svg | 56 ++++++++++++++++++ solr/webapp/web/css/angular/fonts/ui-grid.ttf | Bin 0 -> 10155 bytes .../webapp/web/css/angular/fonts/ui-grid.woff | Bin 0 -> 5728 bytes 5 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 solr/webapp/web/css/angular/fonts/ui-grid.eot create mode 100644 solr/webapp/web/css/angular/fonts/ui-grid.svg create mode 100644 solr/webapp/web/css/angular/fonts/ui-grid.ttf create mode 100644 solr/webapp/web/css/angular/fonts/ui-grid.woff diff --git a/solr/webapp/src/test/org/apache/solr/webapp/AdminUiTestBase.java b/solr/webapp/src/test/org/apache/solr/webapp/AdminUiTestBase.java index 5d0ea91fe9f4..54e1a79d4242 100644 --- a/solr/webapp/src/test/org/apache/solr/webapp/AdminUiTestBase.java +++ b/solr/webapp/src/test/org/apache/solr/webapp/AdminUiTestBase.java @@ -534,9 +534,6 @@ protected static void assertNoSevereConsoleErrors(String... allowedSubstrings) { Arrays.stream(allowedSubstrings) .noneMatch(allowed -> entry.getMessage().contains(allowed))) .filter(entry -> !entry.getMessage().contains("favicon.ico")) - // the ui-grid icon font referenced from ui-grid.min.css is not shipped with - // the webapp at all, so it 404s in production too - .filter(entry -> !entry.getMessage().contains("fonts/ui-grid")) // benign race in the shared menu code: showCore() fires with a null core // while the per-collection menu resolves after navigation .filter( diff --git a/solr/webapp/web/css/angular/fonts/ui-grid.eot b/solr/webapp/web/css/angular/fonts/ui-grid.eot new file mode 100644 index 0000000000000000000000000000000000000000..59cf0aed25bf5b0f549918ad86cf359c2ca7831a GIT binary patch literal 10319 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 MRzHb@Vi#lo4J2*uuK)l5 literal 0 HcmV?d00001 diff --git a/solr/webapp/web/css/angular/fonts/ui-grid.svg b/solr/webapp/web/css/angular/fonts/ui-grid.svg new file mode 100644 index 000000000000..9d2e03c0e3a0 --- /dev/null +++ b/solr/webapp/web/css/angular/fonts/ui-grid.svg @@ -0,0 +1,56 @@ + + + +Copyright (C) 2016 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/solr/webapp/web/css/angular/fonts/ui-grid.ttf b/solr/webapp/web/css/angular/fonts/ui-grid.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b1a4b061164dbd2cd4ebe019eb515fc5a39594fb GIT binary patch literal 10155 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