mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 12:08:14 +00:00
WebContent: Add $_
variable to browser console
This holds the return value of the expression that was last entered into the browser console. If that last expression returned an error of some kind, `$_` will be `undefined`. This matches the behaviour in Firefox.
This commit is contained in:
parent
3ec13fdb86
commit
c793beb0cc
3 changed files with 15 additions and 1 deletions
|
@ -22,6 +22,7 @@ void ConsoleGlobalObject::initialize(JS::Realm& realm)
|
|||
Base::initialize(realm);
|
||||
|
||||
define_native_accessor(realm, "$0", $0_getter, nullptr, 0);
|
||||
define_native_accessor(realm, "$_", $__getter, nullptr, 0);
|
||||
}
|
||||
|
||||
void ConsoleGlobalObject::visit_edges(Visitor& visitor)
|
||||
|
@ -110,4 +111,10 @@ JS_DEFINE_NATIVE_FUNCTION(ConsoleGlobalObject::$0_getter)
|
|||
return inspected_node;
|
||||
}
|
||||
|
||||
JS_DEFINE_NATIVE_FUNCTION(ConsoleGlobalObject::$__getter)
|
||||
{
|
||||
auto* console_global_object = TRY(get_console(vm));
|
||||
return console_global_object->m_most_recent_result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,13 +33,18 @@ public:
|
|||
virtual JS::ThrowCompletionOr<bool> internal_delete(JS::PropertyKey const& name) override;
|
||||
virtual JS::ThrowCompletionOr<JS::MarkedVector<JS::Value>> internal_own_property_keys() const override;
|
||||
|
||||
void set_most_recent_result(JS::Value result) { m_most_recent_result = move(result); }
|
||||
|
||||
private:
|
||||
virtual void visit_edges(Visitor&) override;
|
||||
|
||||
// $0, the DOM node currently selected in the inspector
|
||||
JS_DECLARE_NATIVE_FUNCTION($0_getter);
|
||||
// $_, the value of the most recent expression entered into the console
|
||||
JS_DECLARE_NATIVE_FUNCTION($__getter);
|
||||
|
||||
Web::HTML::Window* m_window_object;
|
||||
JS::Value m_most_recent_result { JS::js_undefined() };
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -77,8 +77,10 @@ void WebContentConsoleClient::handle_input(String const& js_source)
|
|||
|
||||
auto result = script->run();
|
||||
|
||||
if (result.value().has_value())
|
||||
if (result.value().has_value()) {
|
||||
m_console_global_object->set_most_recent_result(result.value().value());
|
||||
print_html(JS::MarkupGenerator::html_from_value(*result.value()));
|
||||
}
|
||||
}
|
||||
|
||||
void WebContentConsoleClient::report_exception(JS::Error const& exception, bool in_promise)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue