summaryrefslogtreecommitdiff
path: root/node_modules/swup/src/modules/Classes.ts
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
committerlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
commitefbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch)
tree2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/swup/src/modules/Classes.ts
parent43acceb75957c880a5ba5a31aae221394a36d5f6 (diff)
node fixes, updates
Diffstat (limited to 'node_modules/swup/src/modules/Classes.ts')
-rw-r--r--node_modules/swup/src/modules/Classes.ts54
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));
+ }
+}