From 96fc476107826fa150237f070b5b1012f186cb09 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 24 Sep 2020 10:33:33 +0200 Subject: [PATCH] LibWeb: Add a separate UA style sheet for documents in quirks mode We need to make some additional tweaks to the default UA style when displaying documents in quirks mode. --- Libraries/LibWeb/CMakeLists.txt | 9 +++++++++ Libraries/LibWeb/CSS/Default.css | 5 ----- Libraries/LibWeb/CSS/QuirksMode.css | 3 +++ Libraries/LibWeb/CSS/StyleResolver.cpp | 13 +++++++++++++ 4 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 Libraries/LibWeb/CSS/QuirksMode.css diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index 549ea0baa8b..2e1b395e31d 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -16,6 +16,7 @@ set(SOURCES CSS/Parser/CSSParser.cpp CSS/PropertyID.cpp CSS/PropertyID.h + CSS/QuirksModeStyleSheetSource.cpp CSS/Selector.cpp CSS/SelectorEngine.cpp CSS/StyleDeclaration.cpp @@ -329,5 +330,13 @@ add_custom_command( MAIN_DEPENDENCY CSS/Default.css ) +add_custom_command( + OUTPUT CSS/QuirksModeStyleSheetSource.cpp + COMMAND ${write_if_different} CSS/QuirksModeStyleSheetSource.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Scripts/GenerateStyleSheetSource.sh quirks_mode_stylesheet_source ${CMAKE_CURRENT_SOURCE_DIR}/CSS/QuirksMode.css + VERBATIM + DEPENDS Scripts/GenerateStyleSheetSource.sh + MAIN_DEPENDENCY CSS/Default.css +) + serenity_lib(LibWeb web) target_link_libraries(LibWeb LibCore LibJS LibMarkdown LibGemini LibGUI LibGfx LibTextCodec LibProtocol LibImageDecoderClient) diff --git a/Libraries/LibWeb/CSS/Default.css b/Libraries/LibWeb/CSS/Default.css index 285ba23ca7b..c5792fc76dc 100644 --- a/Libraries/LibWeb/CSS/Default.css +++ b/Libraries/LibWeb/CSS/Default.css @@ -147,8 +147,3 @@ blockquote { margin-left: 25px; margin-right: 25px; } - -/* FIXME: I think this should only apply in quirks mode. */ -table { - text-align: left; -} diff --git a/Libraries/LibWeb/CSS/QuirksMode.css b/Libraries/LibWeb/CSS/QuirksMode.css new file mode 100644 index 00000000000..8e1aeb392b7 --- /dev/null +++ b/Libraries/LibWeb/CSS/QuirksMode.css @@ -0,0 +1,3 @@ +table { + text-align: left; +} diff --git a/Libraries/LibWeb/CSS/StyleResolver.cpp b/Libraries/LibWeb/CSS/StyleResolver.cpp index 9ba4519fb5c..4d26c668289 100644 --- a/Libraries/LibWeb/CSS/StyleResolver.cpp +++ b/Libraries/LibWeb/CSS/StyleResolver.cpp @@ -57,10 +57,23 @@ static StyleSheet& default_stylesheet() return *sheet; } +static StyleSheet& quirks_mode_stylesheet() +{ + static StyleSheet* sheet; + if (!sheet) { + extern const char quirks_mode_stylesheet_source[]; + String css = quirks_mode_stylesheet_source; + sheet = parse_css(CSS::ParsingContext(), css).leak_ref(); + } + return *sheet; +} + template void StyleResolver::for_each_stylesheet(Callback callback) const { callback(default_stylesheet()); + if (document().in_quirks_mode()) + callback(quirks_mode_stylesheet()); for (auto& sheet : document().style_sheets().sheets()) { callback(sheet); }