Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/create-navigation-transition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ export const NavigationUserInitiated = Symbol.for(
export const NavigationOriginalEvent = Symbol.for(
"@virtualstate/navigation/originalEvent"
);
export const NavigationSourceElement = Symbol.for(
"@virtualstate/navigation/sourceElement"
);

export interface NavigationNavigateOptions<S = unknown>
extends NavigationNavigateOptionsPrototype<S> {
Expand All @@ -52,6 +55,7 @@ export interface NavigationNavigateOptions<S = unknown>
[NavigationCanIntercept]?: boolean;
[NavigationUserInitiated]?: boolean;
[NavigationOriginalEvent]?: PreventDefaultLike;
[NavigationSourceElement]?: Element;
}

export const EventAbortController = Symbol.for(
Expand Down Expand Up @@ -234,6 +238,7 @@ export function createNavigationTransition<S = unknown>(
(typeof navigationType === "string" ? navigationType : "replace"),
userInitiated: options?.[NavigationUserInitiated] ?? false,
destination,
sourceElement: options?.[NavigationSourceElement]
})

const originalEvent = options?.[NavigationOriginalEvent];
Expand Down
2 changes: 2 additions & 0 deletions src/events/navigate-event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export class NavigateEvent<S = unknown> implements Spec<S> {
readonly signal: AbortSignal;
readonly userInitiated: boolean;
readonly navigationType: NavigationNavigationType;
readonly sourceElement?: Element;

constructor(public type: "navigate", init: NavigateEventInit<S>) {
if (!init) {
Expand All @@ -44,6 +45,7 @@ export class NavigateEvent<S = unknown> implements Spec<S> {
this.signal = init.signal;
this.userInitiated = init.userInitiated ?? false;
this.navigationType = init.navigationType ?? "push";
this.sourceElement = init.sourceElement;
}


Expand Down
6 changes: 5 additions & 1 deletion src/get-polyfill.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
NavigationSetEntries, NavigationSetOptions
} from "./navigation";
import { InvalidStateError } from "./navigation-errors";
import { InternalNavigationNavigateOptions, NavigationDownloadRequest, NavigationFormData, NavigationOriginalEvent, NavigationUserInitiated } from "./create-navigation-transition";
import { InternalNavigationNavigateOptions, NavigationDownloadRequest, NavigationFormData, NavigationOriginalEvent, NavigationSourceElement, NavigationUserInitiated } from "./create-navigation-transition";
import { stringify, parse } from './util/serialization';
import {NavigationHistory} from "./history";
import {like, ok} from "./is";
Expand Down Expand Up @@ -310,11 +310,13 @@ function interceptWindowClicks(navigation: Navigation, window: WindowLike) {
return;
}
}
const sourceElement = aEl;
const options: InternalNavigationNavigateOptions = {
history: "auto",
[NavigationUserInitiated]: true,
[NavigationDownloadRequest]: aEl.download,
[NavigationOriginalEvent]: ev,
[NavigationSourceElement]: sourceElement as any as Element,
};
navigation.navigate(aEl.href, options);
}
Expand Down Expand Up @@ -347,6 +349,7 @@ function interceptWindowClicks(navigation: Navigation, window: WindowLike) {
return;
}
}
const sourceElement = ev.submitter || form;
let formData;
/* c8 ignore start */
try {
Expand Down Expand Up @@ -377,6 +380,7 @@ function interceptWindowClicks(navigation: Navigation, window: WindowLike) {
[NavigationUserInitiated]: true,
[NavigationFormData]: navFormData,
[NavigationOriginalEvent]: unknownEvent,
[NavigationSourceElement]: sourceElement as any as Element
};
navigation.navigate(url.href, options);
}
Expand Down
3 changes: 1 addition & 2 deletions src/global-window.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ export interface EventPrototype {
target: ElementPrototype;
composedPath?(): ElementPrototype[];
defaultPrevented: unknown;
submitter: Record<string, unknown>;
}

export interface MouseEventPrototype extends EventPrototype {
Expand All @@ -41,7 +40,7 @@ export interface MouseEventPrototype extends EventPrototype {
}

export interface SubmitEventPrototype extends EventPrototype {

submitter?: ElementPrototype;
}

export interface PopStateEventPrototype extends EventPrototype {
Expand Down
2 changes: 2 additions & 0 deletions src/spec/navigation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ export interface NavigateEvent<S = unknown, R = unknown | void> extends Event<"n
readonly formData?: FormData;
readonly downloadRequest?: string;
readonly info: unknown;
readonly sourceElement?: Element;

intercept(options?: NavigationIntercept<R>): void;
scroll(): void;
Expand Down Expand Up @@ -253,6 +254,7 @@ export interface NavigateEventInit<S = unknown> extends EventInit {
formData?: FormData;
downloadRequest?: string;
info?: unknown;
sourceElement?: Element;
}

export interface NavigationDestination<S = unknown> {
Expand Down