Page MenuHomeSealhub

autoscrolling-images.stimulus.ts
No OneTemporary

autoscrolling-images.stimulus.ts

/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */
import { Controller } from "stimulus";
export default class AutoscrollingImages extends Controller {
currentIndex = 0;
interval_id: number;
getInterval(): number {
const result = parseInt(
this.element.getAttribute("data-autoscrolling-images-interval") || "3"
);
return result;
}
getRadioButtons(): Array<HTMLInputElement> {
return Array.from(this.element.querySelectorAll(".autoscrolling-images__radio"));
}
handleRadioChange() {
const selectedRadio = this.getRadioButtons().findIndex(
(radio: HTMLInputElement) => radio.checked
);
this.currentIndex = selectedRadio !== -1 ? selectedRadio : 0;
}
async connect() {
this.currentIndex = 0;
let intervalTime: number;
const interval = this.getInterval();
if (interval) {
intervalTime = interval * 1000;
} else {
intervalTime = 5000;
}
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
this.interval_id = setInterval(
() => this.next_slide(),
intervalTime
) as unknown as number;
}
async disconnect() {
clearInterval(this.interval_id);
}
next_slide() {
const carouselPages = this.element.querySelectorAll(
".autoscrolling-images__carousel-page--regular"
);
const radioButtonIdPrefix = this.element
.querySelector(".autoscrolling-images-wrapper")
.getAttribute("data-carousel-id-prefix");
const nextIndex = (this.currentIndex + 1) % carouselPages.length;
const nextButtonID =
radioButtonIdPrefix + "-autoscrolling-images__radio-" + nextIndex;
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const nextButton: HTMLInputElement = this.element.querySelector(
"#" + nextButtonID
);
if (nextButton) {
nextButton.checked = true;
this.currentIndex = nextIndex;
this.handleRadioChange();
}
}
}

File Metadata

Mime Type
text/x-java
Expires
Sat, Nov 8, 03:34 (21 h, 7 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1032802
Default Alt Text
autoscrolling-images.stimulus.ts (1 KB)

Event Timeline