feat: per-entity navigate and reload requests (#21)
* feat: add per-entity navigate and reload methods Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * clippy --------- Co-authored-by: not-elm <elmgameinfo@gmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -269,6 +269,25 @@ impl Browsers {
|
||||
}
|
||||
}
|
||||
|
||||
/// Navigate a specific webview to a new URL.
|
||||
pub fn navigate(&self, webview: &Entity, url: &str) {
|
||||
if let Some(browser) = self.browsers.get(webview)
|
||||
&& let Some(frame) = browser.client.main_frame()
|
||||
{
|
||||
frame.load_url(Some(&url.into()));
|
||||
}
|
||||
}
|
||||
|
||||
/// Reload a specific webview's current page.
|
||||
pub fn reload_webview(&self, webview: &Entity) {
|
||||
if let Some(browser) = self.browsers.get(webview)
|
||||
&& let Some(frame) = browser.client.main_frame()
|
||||
{
|
||||
let url = frame.url().into_string();
|
||||
frame.load_url(Some(&url.as_str().into()));
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the current zoom level for the specified webview.
|
||||
///
|
||||
/// ## Reference
|
||||
|
||||
@@ -8,8 +8,12 @@ impl Plugin for NavigationPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.register_type::<RequestGoBack>()
|
||||
.register_type::<RequestGoForward>()
|
||||
.register_type::<RequestNavigate>()
|
||||
.register_type::<RequestReload>()
|
||||
.add_observer(apply_request_go_back)
|
||||
.add_observer(apply_request_go_forward);
|
||||
.add_observer(apply_request_go_forward)
|
||||
.add_observer(apply_request_navigate)
|
||||
.add_observer(apply_request_reload);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +31,21 @@ pub struct RequestGoForward {
|
||||
pub webview: Entity,
|
||||
}
|
||||
|
||||
/// A trigger event to navigate to a new URL.
|
||||
#[derive(Debug, EntityEvent, Clone, Reflect, Serialize, Deserialize)]
|
||||
pub struct RequestNavigate {
|
||||
#[event_target]
|
||||
pub webview: Entity,
|
||||
pub url: String,
|
||||
}
|
||||
|
||||
/// A trigger event to reload the current page.
|
||||
#[derive(Debug, EntityEvent, Copy, Clone, Reflect, Serialize, Deserialize)]
|
||||
pub struct RequestReload {
|
||||
#[event_target]
|
||||
pub webview: Entity,
|
||||
}
|
||||
|
||||
fn apply_request_go_back(trigger: On<RequestGoBack>, browsers: NonSend<Browsers>) {
|
||||
browsers.go_back(&trigger.webview);
|
||||
}
|
||||
@@ -34,3 +53,11 @@ fn apply_request_go_back(trigger: On<RequestGoBack>, browsers: NonSend<Browsers>
|
||||
fn apply_request_go_forward(trigger: On<RequestGoForward>, browsers: NonSend<Browsers>) {
|
||||
browsers.go_forward(&trigger.webview);
|
||||
}
|
||||
|
||||
fn apply_request_navigate(trigger: On<RequestNavigate>, browsers: NonSend<Browsers>) {
|
||||
browsers.navigate(&trigger.webview, &trigger.url);
|
||||
}
|
||||
|
||||
fn apply_request_reload(trigger: On<RequestReload>, browsers: NonSend<Browsers>) {
|
||||
browsers.reload_webview(&trigger.webview);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user