diff --git a/Ladybird/AppKit/Application/ApplicationDelegate.mm b/Ladybird/AppKit/Application/ApplicationDelegate.mm index d8f4071b61..b4bc3df2d0 100644 --- a/Ladybird/AppKit/Application/ApplicationDelegate.mm +++ b/Ladybird/AppKit/Application/ApplicationDelegate.mm @@ -36,6 +36,7 @@ - (NSMenuItem*)createEditMenu; - (NSMenuItem*)createViewMenu; - (NSMenuItem*)createHistoryMenu; +- (NSMenuItem*)createInspectMenu; - (NSMenuItem*)createDebugMenu; - (NSMenuItem*)createWindowsMenu; - (NSMenuItem*)createHelpMenu; @@ -56,6 +57,7 @@ [[NSApp mainMenu] addItem:[self createEditMenu]]; [[NSApp mainMenu] addItem:[self createViewMenu]]; [[NSApp mainMenu] addItem:[self createHistoryMenu]]; + [[NSApp mainMenu] addItem:[self createInspectMenu]]; [[NSApp mainMenu] addItem:[self createDebugMenu]]; [[NSApp mainMenu] addItem:[self createWindowsMenu]]; [[NSApp mainMenu] addItem:[self createHelpMenu]]; @@ -332,6 +334,19 @@ return menu; } +- (NSMenuItem*)createInspectMenu +{ + auto* menu = [[NSMenuItem alloc] init]; + auto* submenu = [[NSMenu alloc] initWithTitle:@"Inspect"]; + + [submenu addItem:[[NSMenuItem alloc] initWithTitle:@"View Source" + action:@selector(viewSource:) + keyEquivalent:@""]]; + + [menu setSubmenu:submenu]; + return menu; +} + - (NSMenuItem*)createDebugMenu { auto* menu = [[NSMenuItem alloc] init]; diff --git a/Ladybird/AppKit/UI/LadybirdWebView.h b/Ladybird/AppKit/UI/LadybirdWebView.h index 2bb3416a99..dcf72e70b4 100644 --- a/Ladybird/AppKit/UI/LadybirdWebView.h +++ b/Ladybird/AppKit/UI/LadybirdWebView.h @@ -22,4 +22,6 @@ - (void)setPreferredColorScheme:(Web::CSS::PreferredColorScheme)color_scheme; +- (void)viewSource; + @end diff --git a/Ladybird/AppKit/UI/LadybirdWebView.mm b/Ladybird/AppKit/UI/LadybirdWebView.mm index a0708d2fad..14d44ff42f 100644 --- a/Ladybird/AppKit/UI/LadybirdWebView.mm +++ b/Ladybird/AppKit/UI/LadybirdWebView.mm @@ -9,6 +9,7 @@ #include #include #include +#include #include #import @@ -132,6 +133,11 @@ struct HideCursor { m_web_view_bridge->set_preferred_color_scheme(color_scheme); } +- (void)viewSource +{ + m_web_view_bridge->get_source(); +} + #pragma mark - Private methods - (void)updateViewportRect:(Ladybird::WebViewBridge::ForResize)for_resize @@ -587,6 +593,16 @@ struct HideCursor { return Ladybird::ns_rect_to_gfx_rect([[self window] frame]); }; + + m_web_view_bridge->on_received_source = [self](auto const& url, auto const& source) { + auto* delegate = (ApplicationDelegate*)[NSApp delegate]; + auto html = WebView::highlight_source(url, source); + + [delegate createNewTab:html + url:url + fromTab:[self tab] + activateTab:Web::HTML::ActivateTab::Yes]; + }; } - (Tab*)tab @@ -721,6 +737,11 @@ static void copy_text_to_clipboard(StringView text) [_page_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Take Full Screenshot" action:@selector(takeFullScreenshot:) keyEquivalent:@""]]; + [_page_context_menu addItem:[NSMenuItem separatorItem]]; + + [_page_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"View Source" + action:@selector(viewSource:) + keyEquivalent:@""]]; } return _page_context_menu; diff --git a/Ladybird/AppKit/UI/TabController.mm b/Ladybird/AppKit/UI/TabController.mm index 2b475fb1aa..dfc9de28c8 100644 --- a/Ladybird/AppKit/UI/TabController.mm +++ b/Ladybird/AppKit/UI/TabController.mm @@ -158,6 +158,11 @@ enum class IsHistoryNavigation { [self updateNavigationButtonStates]; } +- (void)viewSource:(id)sender +{ + [[[self tab] web_view] viewSource]; +} + - (void)focusLocationToolbarItem { [self.window makeFirstResponder:self.location_toolbar_item.view];