diff --git a/Userland/Applications/Browser/ConsoleWidget.cpp b/Userland/Applications/Browser/ConsoleWidget.cpp index 6a08ae5b66..7e02db847e 100644 --- a/Userland/Applications/Browser/ConsoleWidget.cpp +++ b/Userland/Applications/Browser/ConsoleWidget.cpp @@ -199,7 +199,7 @@ void ConsoleWidget::begin_group(StringView label, bool start_expanded) var group = document.createElement("details"); group.id = "group_{}"; var label = document.createElement("summary"); - label.innerText = ")~~~", + label.innerHTML = ")~~~", group.id); builder.append_escaped_for_json(label); builder.append(R"~~~("; diff --git a/Userland/Libraries/LibJS/Console.cpp b/Userland/Libraries/LibJS/Console.cpp index 8eab7ceddb..e7270d5681 100644 --- a/Userland/Libraries/LibJS/Console.cpp +++ b/Userland/Libraries/LibJS/Console.cpp @@ -615,8 +615,7 @@ ThrowCompletionOr> ConsoleClient::formatter(MarkedVector> formatter(MarkedVector const& args); virtual ThrowCompletionOr printer(Console::LogLevel log_level, PrinterArguments) = 0; + virtual void add_css_style_to_current_message(StringView) {}; + virtual void clear() = 0; virtual void end_group() = 0; diff --git a/Userland/Services/WebContent/WebContentConsoleClient.cpp b/Userland/Services/WebContent/WebContentConsoleClient.cpp index 2724b38f2e..6b2d96a0fa 100644 --- a/Userland/Services/WebContent/WebContentConsoleClient.cpp +++ b/Userland/Services/WebContent/WebContentConsoleClient.cpp @@ -143,11 +143,14 @@ void WebContentConsoleClient::clear() // 2.3. Printer(logLevel, args[, options]), https://console.spec.whatwg.org/#printer JS::ThrowCompletionOr WebContentConsoleClient::printer(JS::Console::LogLevel log_level, PrinterArguments arguments) { + auto styling = escape_html_entities(m_current_message_style.string_view()); + m_current_message_style.clear(); + if (log_level == JS::Console::LogLevel::Trace) { auto trace = arguments.get(); StringBuilder html; if (!trace.label.is_empty()) - html.appendff("{}
", escape_html_entities(trace.label)); + html.appendff("{}
", styling, escape_html_entities(trace.label)); html.append(""sv); for (auto& function_name : trace.stack) @@ -160,7 +163,7 @@ JS::ThrowCompletionOr WebContentConsoleClient::printer(JS::Console::L if (log_level == JS::Console::LogLevel::Group || log_level == JS::Console::LogLevel::GroupCollapsed) { auto group = arguments.get(); - begin_group(group.label, log_level == JS::Console::LogLevel::Group); + begin_group(String::formatted("{}", styling, escape_html_entities(group.label)), log_level == JS::Console::LogLevel::Group); return JS::js_undefined(); } @@ -170,23 +173,23 @@ JS::ThrowCompletionOr WebContentConsoleClient::printer(JS::Console::L StringBuilder html; switch (log_level) { case JS::Console::LogLevel::Debug: - html.append("(d) "sv); + html.appendff("(d) "sv, styling); break; case JS::Console::LogLevel::Error: - html.append("(e) "sv); + html.appendff("(e) "sv, styling); break; case JS::Console::LogLevel::Info: - html.append("(i) "sv); + html.appendff("(i) "sv, styling); break; case JS::Console::LogLevel::Log: - html.append(" "sv); + html.appendff(" "sv, styling); break; case JS::Console::LogLevel::Warn: case JS::Console::LogLevel::CountReset: - html.append("(w) "sv); + html.appendff("(w) "sv, styling); break; default: - html.append(""sv); + html.appendff(""sv, styling); break; } diff --git a/Userland/Services/WebContent/WebContentConsoleClient.h b/Userland/Services/WebContent/WebContentConsoleClient.h index a8dfc28a16..c234bb779d 100644 --- a/Userland/Services/WebContent/WebContentConsoleClient.h +++ b/Userland/Services/WebContent/WebContentConsoleClient.h @@ -27,6 +27,12 @@ private: virtual void clear() override; virtual JS::ThrowCompletionOr printer(JS::Console::LogLevel log_level, PrinterArguments) override; + virtual void add_css_style_to_current_message(StringView style) override + { + m_current_message_style.append(style); + m_current_message_style.append(';'); + } + ConnectionFromClient& m_client; WeakPtr m_realm; JS::Handle m_console_global_object; @@ -48,6 +54,8 @@ private: String data; }; Vector m_message_log; + + StringBuilder m_current_message_style; }; }