1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 11:07:45 +00:00

Ladybird: Implement the View Source action for the AppKit chrome

This opens a new tab to display the current tab's source as HTML.
This commit is contained in:
Timothy Flynn 2023-08-28 16:16:12 -04:00 committed by Tim Flynn
parent a6bdf8c2a9
commit 390da2985f
4 changed files with 43 additions and 0 deletions

View file

@ -36,6 +36,7 @@
- (NSMenuItem*)createEditMenu; - (NSMenuItem*)createEditMenu;
- (NSMenuItem*)createViewMenu; - (NSMenuItem*)createViewMenu;
- (NSMenuItem*)createHistoryMenu; - (NSMenuItem*)createHistoryMenu;
- (NSMenuItem*)createInspectMenu;
- (NSMenuItem*)createDebugMenu; - (NSMenuItem*)createDebugMenu;
- (NSMenuItem*)createWindowsMenu; - (NSMenuItem*)createWindowsMenu;
- (NSMenuItem*)createHelpMenu; - (NSMenuItem*)createHelpMenu;
@ -56,6 +57,7 @@
[[NSApp mainMenu] addItem:[self createEditMenu]]; [[NSApp mainMenu] addItem:[self createEditMenu]];
[[NSApp mainMenu] addItem:[self createViewMenu]]; [[NSApp mainMenu] addItem:[self createViewMenu]];
[[NSApp mainMenu] addItem:[self createHistoryMenu]]; [[NSApp mainMenu] addItem:[self createHistoryMenu]];
[[NSApp mainMenu] addItem:[self createInspectMenu]];
[[NSApp mainMenu] addItem:[self createDebugMenu]]; [[NSApp mainMenu] addItem:[self createDebugMenu]];
[[NSApp mainMenu] addItem:[self createWindowsMenu]]; [[NSApp mainMenu] addItem:[self createWindowsMenu]];
[[NSApp mainMenu] addItem:[self createHelpMenu]]; [[NSApp mainMenu] addItem:[self createHelpMenu]];
@ -332,6 +334,19 @@
return menu; 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 - (NSMenuItem*)createDebugMenu
{ {
auto* menu = [[NSMenuItem alloc] init]; auto* menu = [[NSMenuItem alloc] init];

View file

@ -22,4 +22,6 @@
- (void)setPreferredColorScheme:(Web::CSS::PreferredColorScheme)color_scheme; - (void)setPreferredColorScheme:(Web::CSS::PreferredColorScheme)color_scheme;
- (void)viewSource;
@end @end

View file

@ -9,6 +9,7 @@
#include <AK/URL.h> #include <AK/URL.h>
#include <LibGfx/ImageFormats/PNGWriter.h> #include <LibGfx/ImageFormats/PNGWriter.h>
#include <LibGfx/ShareableBitmap.h> #include <LibGfx/ShareableBitmap.h>
#include <LibWebView/SourceHighlighter.h>
#include <UI/LadybirdWebViewBridge.h> #include <UI/LadybirdWebViewBridge.h>
#import <Application/ApplicationDelegate.h> #import <Application/ApplicationDelegate.h>
@ -132,6 +133,11 @@ struct HideCursor {
m_web_view_bridge->set_preferred_color_scheme(color_scheme); m_web_view_bridge->set_preferred_color_scheme(color_scheme);
} }
- (void)viewSource
{
m_web_view_bridge->get_source();
}
#pragma mark - Private methods #pragma mark - Private methods
- (void)updateViewportRect:(Ladybird::WebViewBridge::ForResize)for_resize - (void)updateViewportRect:(Ladybird::WebViewBridge::ForResize)for_resize
@ -587,6 +593,16 @@ struct HideCursor {
return Ladybird::ns_rect_to_gfx_rect([[self window] frame]); 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 - (Tab*)tab
@ -721,6 +737,11 @@ static void copy_text_to_clipboard(StringView text)
[_page_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Take Full Screenshot" [_page_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Take Full Screenshot"
action:@selector(takeFullScreenshot:) action:@selector(takeFullScreenshot:)
keyEquivalent:@""]]; keyEquivalent:@""]];
[_page_context_menu addItem:[NSMenuItem separatorItem]];
[_page_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"View Source"
action:@selector(viewSource:)
keyEquivalent:@""]];
} }
return _page_context_menu; return _page_context_menu;

View file

@ -158,6 +158,11 @@ enum class IsHistoryNavigation {
[self updateNavigationButtonStates]; [self updateNavigationButtonStates];
} }
- (void)viewSource:(id)sender
{
[[[self tab] web_view] viewSource];
}
- (void)focusLocationToolbarItem - (void)focusLocationToolbarItem
{ {
[self.window makeFirstResponder:self.location_toolbar_item.view]; [self.window makeFirstResponder:self.location_toolbar_item.view];