diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
| commit | efbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch) | |
| tree | 2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/swup/src/modules/Classes.ts | |
| parent | 43acceb75957c880a5ba5a31aae221394a36d5f6 (diff) | |
node fixes, updates
Diffstat (limited to 'node_modules/swup/src/modules/Classes.ts')
| -rw-r--r-- | node_modules/swup/src/modules/Classes.ts | 54 |
1 files changed, 54 insertions, 0 deletions
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)); + } +} |
