From efbc2ffe6a1ee5ec38a4396305561d6515d0943e Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Fri, 30 Aug 2024 17:21:18 +0800 Subject: node fixes, updates --- node_modules/swup/src/modules/Classes.ts | 54 ++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 node_modules/swup/src/modules/Classes.ts (limited to 'node_modules/swup/src/modules/Classes.ts') diff --git a/node_modules/swup/src/modules/Classes.ts b/node_modules/swup/src/modules/Classes.ts new file mode 100644 index 00000000..7e034511 --- /dev/null +++ b/node_modules/swup/src/modules/Classes.ts @@ -0,0 +1,54 @@ +import type Swup from '../Swup.js'; +import { queryAll } from '../utils.js'; + +export class Classes { + protected swup: Swup; + protected swupClasses = [ + 'to-', + 'is-changing', + 'is-rendering', + 'is-popstate', + 'is-animating', + 'is-leaving' + ]; + + constructor(swup: Swup) { + this.swup = swup; + } + + protected get selectors(): string[] { + const { scope } = this.swup.visit.animation; + if (scope === 'containers') return this.swup.visit.containers; + if (scope === 'html') return ['html']; + if (Array.isArray(scope)) return scope; + return []; + } + + protected get selector(): string { + return this.selectors.join(','); + } + + protected get targets(): HTMLElement[] { + if (!this.selector.trim()) return []; + return queryAll(this.selector); + } + + add(...classes: string[]): void { + this.targets.forEach((target) => target.classList.add(...classes)); + } + + remove(...classes: string[]): void { + this.targets.forEach((target) => target.classList.remove(...classes)); + } + + clear(): void { + this.targets.forEach((target) => { + const remove = target.className.split(' ').filter((c) => this.isSwupClass(c)); + target.classList.remove(...remove); + }); + } + + protected isSwupClass(className: string): boolean { + return this.swupClasses.some((c) => className.startsWith(c)); + } +} -- cgit v1.2.3