mirror of
https://github.com/RGBCube/serenity
synced 2025-05-23 03:55:07 +00:00

...and the other Console methods. This lets you apply styling to a log message or any other text that passes through the Console `Formatter` operation. We store the CSS on the ConsoleClient instead of passing it along with the rest of the message, since I couldn't figure out a nice way of doing that, as Formatter has to return JS::Values. This way isn't nice, and has a risk of forgetting to clear the style and having it apply to subsequent messages, but it works. This is only supported in the Browser for now. REPL support would require parsing the CSS and figuring out the relevant ANSI codes. We also don't filter this styling at all, so you can `position: absolute` and `transform: translate(...)` all you want, which is less than ideal.
61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
/*
|
|
* Copyright (c) 2021, Brandon Scott <xeon.productions@gmail.com>
|
|
* Copyright (c) 2020, Hunter Salyer <thefalsehonesty@gmail.com>
|
|
* Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "ConnectionFromClient.h"
|
|
#include <LibJS/Console.h>
|
|
#include <LibJS/Forward.h>
|
|
#include <LibWeb/Forward.h>
|
|
#include <WebContent/Forward.h>
|
|
|
|
namespace WebContent {
|
|
|
|
class WebContentConsoleClient final : public JS::ConsoleClient {
|
|
public:
|
|
WebContentConsoleClient(JS::Console&, JS::Realm&, ConnectionFromClient&);
|
|
|
|
void handle_input(String const& js_source);
|
|
void send_messages(i32 start_index);
|
|
|
|
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;
|
|
|
|
void clear_output();
|
|
void print_html(String const& line);
|
|
void begin_group(String const& label, bool start_expanded);
|
|
virtual void end_group() override;
|
|
|
|
struct ConsoleOutput {
|
|
enum class Type {
|
|
HTML,
|
|
Clear,
|
|
BeginGroup,
|
|
BeginGroupCollapsed,
|
|
EndGroup,
|
|
};
|
|
Type type;
|
|
String data;
|
|
};
|
|
Vector<ConsoleOutput> m_message_log;
|
|
|
|
StringBuilder m_current_message_style;
|
|
};
|
|
|
|
}
|