summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Applications/Browser/ConsoleWidget.cpp2
-rw-r--r--Userland/Libraries/LibJS/Console.cpp3
-rw-r--r--Userland/Libraries/LibJS/Console.h2
-rw-r--r--Userland/Services/WebContent/WebContentConsoleClient.cpp19
-rw-r--r--Userland/Services/WebContent/WebContentConsoleClient.h8
5 files changed, 23 insertions, 11 deletions
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<MarkedVector<Value>> ConsoleClient::formatter(MarkedVector<Val
// 6. TODO: process %c
else if (specifier == "%c"sv) {
// NOTE: This has no spec yet. `%c` specifiers treat the argument as CSS styling for the log message.
- // For now, we'll just consume the specifier and the argument.
- // FIXME: Actually style the message somehow.
+ add_css_style_to_current_message(TRY(current.to_string(vm)));
converted = js_string(vm, "");
}
diff --git a/Userland/Libraries/LibJS/Console.h b/Userland/Libraries/LibJS/Console.h
index e7165ace12..fcb20f043b 100644
--- a/Userland/Libraries/LibJS/Console.h
+++ b/Userland/Libraries/LibJS/Console.h
@@ -108,6 +108,8 @@ public:
ThrowCompletionOr<MarkedVector<Value>> formatter(MarkedVector<Value> const& args);
virtual ThrowCompletionOr<Value> 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<JS::Value> 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<JS::Console::Trace>();
StringBuilder html;
if (!trace.label.is_empty())
- html.appendff("<span class='title'>{}</span><br>", escape_html_entities(trace.label));
+ html.appendff("<span class='title' style='{}'>{}</span><br>", styling, escape_html_entities(trace.label));
html.append("<span class='trace'>"sv);
for (auto& function_name : trace.stack)
@@ -160,7 +163,7 @@ JS::ThrowCompletionOr<JS::Value> WebContentConsoleClient::printer(JS::Console::L
if (log_level == JS::Console::LogLevel::Group || log_level == JS::Console::LogLevel::GroupCollapsed) {
auto group = arguments.get<JS::Console::Group>();
- begin_group(group.label, log_level == JS::Console::LogLevel::Group);
+ begin_group(String::formatted("<span style='{}'>{}</span>", styling, escape_html_entities(group.label)), log_level == JS::Console::LogLevel::Group);
return JS::js_undefined();
}
@@ -170,23 +173,23 @@ JS::ThrowCompletionOr<JS::Value> WebContentConsoleClient::printer(JS::Console::L
StringBuilder html;
switch (log_level) {
case JS::Console::LogLevel::Debug:
- html.append("<span class=\"debug\">(d) "sv);
+ html.appendff("<span class=\"debug\" style=\"{}\">(d) "sv, styling);
break;
case JS::Console::LogLevel::Error:
- html.append("<span class=\"error\">(e) "sv);
+ html.appendff("<span class=\"error\" style=\"{}\">(e) "sv, styling);
break;
case JS::Console::LogLevel::Info:
- html.append("<span class=\"info\">(i) "sv);
+ html.appendff("<span class=\"info\" style=\"{}\">(i) "sv, styling);
break;
case JS::Console::LogLevel::Log:
- html.append("<span class=\"log\"> "sv);
+ html.appendff("<span class=\"log\" style=\"{}\"> "sv, styling);
break;
case JS::Console::LogLevel::Warn:
case JS::Console::LogLevel::CountReset:
- html.append("<span class=\"warn\">(w) "sv);
+ html.appendff("<span class=\"warn\" style=\"{}\">(w) "sv, styling);
break;
default:
- html.append("<span>"sv);
+ html.appendff("<span style=\"{}\">"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<JS::Value> 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<JS::Realm> m_realm;
JS::Handle<ConsoleGlobalObject> m_console_global_object;
@@ -48,6 +54,8 @@ private:
String data;
};
Vector<ConsoleOutput> m_message_log;
+
+ StringBuilder m_current_message_style;
};
}