From 8b88f82be922036ac8cdb44cb8042d5534454350 Mon Sep 17 00:00:00 2001 From: Daniel Kurowski <daniel.kurowski@grifart.cz> Date: Mon, 7 Nov 2022 15:48:08 +0100 Subject: [PATCH] pass context to getter, not to VO constructor --- src/HashTarget.ts | 21 +++++++++---------- .../initializeOnLinkClickScroll.ts | 2 +- .../loadScroll/initializeOnLoadScroll.ts | 2 +- src/scrollers/scrollToTarget.ts | 4 ++-- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/HashTarget.ts b/src/HashTarget.ts index 46dc695..b21ff12 100644 --- a/src/HashTarget.ts +++ b/src/HashTarget.ts @@ -5,22 +5,15 @@ export class HashTarget { private constructor( private readonly value: string, - private readonly targetElement: HTMLElement, ) {} - public static fromString(value: string, document: HTMLDocument): HashTarget + public static fromString(value: string): HashTarget { if (value === '' || value === '#') { throw new Error('Hash does not contain any fragment.'); } - const targetElementId = value.substring(1); - const targetElement = document.getElementById(targetElementId); - if (targetElement === null) { - throw new Error(`No referenced element with ID ${targetElementId} exists.`); - } - - return new this(value, targetElement); + return new this(value); } public getHash(): string @@ -28,8 +21,14 @@ export class HashTarget return this.value; } - public getElement(): HTMLElement + public getRefElement(document: HTMLDocument): HTMLElement { - return this.targetElement; + const targetElementId = this.value.substring(1); + const targetElement = document.getElementById(targetElementId); + if (targetElement === null) { + throw new Error(`No referenced element with ID ${targetElementId} exists.`); + } + + return targetElement; } } diff --git a/src/handlers/linkClickScroll/initializeOnLinkClickScroll.ts b/src/handlers/linkClickScroll/initializeOnLinkClickScroll.ts index 49d2cfd..31806d4 100644 --- a/src/handlers/linkClickScroll/initializeOnLinkClickScroll.ts +++ b/src/handlers/linkClickScroll/initializeOnLinkClickScroll.ts @@ -15,6 +15,6 @@ export function initializeOnLinkClickScroll(): void } event.preventDefault(); - scrollToTarget(HashTarget.fromString(element.hash, document)); + scrollToTarget(HashTarget.fromString(element.hash)); }))); } diff --git a/src/handlers/loadScroll/initializeOnLoadScroll.ts b/src/handlers/loadScroll/initializeOnLoadScroll.ts index 335d65d..b4a42ce 100644 --- a/src/handlers/loadScroll/initializeOnLoadScroll.ts +++ b/src/handlers/loadScroll/initializeOnLoadScroll.ts @@ -22,7 +22,7 @@ export function initializeOnLoadScroll(): void document.addEventListener('DOMContentLoaded', () => { try { - hashTarget = HashTarget.fromString(hash, document); + hashTarget = HashTarget.fromString(hash); } catch (e) {} // when URL contains hash which has no corresponding DOM element, just ignore it }); diff --git a/src/scrollers/scrollToTarget.ts b/src/scrollers/scrollToTarget.ts index a31ec01..5906c2b 100644 --- a/src/scrollers/scrollToTarget.ts +++ b/src/scrollers/scrollToTarget.ts @@ -5,11 +5,11 @@ import {assert} from '../assert'; export function scrollToTarget(hashTarget: HashTarget|string, onScrollFinishedCallback?: () => void): void { if (typeof hashTarget === 'string') { - hashTarget = HashTarget.fromString(hashTarget, document); + hashTarget = HashTarget.fromString(hashTarget); } scrollToElement( - hashTarget.getElement(), + hashTarget.getRefElement(document), () => { assert(hashTarget instanceof HashTarget); window.location.hash = hashTarget.getHash(); -- GitLab