@stimulus-library/controllers
Version:
A library of useful controllers for Stimulus
26 lines (25 loc) • 919 B
JavaScript
import { BaseController } from "@stimulus-library/utilities";
import { useMutationObserver } from "@stimulus-library/mixins";
export class TurboFrameHistoryController extends BaseController {
initialize() {
this.mutate = this.mutate.bind(this);
}
connect() {
if (!window.Turbo) {
throw new Error("Expected Turbo to be defined on the window.");
}
const { navigator } = window.Turbo;
this.navigator = navigator;
useMutationObserver(this, this.el, this.mutate, { attributes: true });
}
mutate(entries) {
entries.forEach((mutation) => {
if (mutation.type === "attributes" && mutation.attributeName === "src") {
const src = this.element.getAttribute("src");
if (src != null) {
this.navigator.history.push(new URL(src));
}
}
});
}
}