nodality 1.0.31 → 1.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animator.cjs.js.LICENSE.txt +1 -1
- package/dist/animator.esm.js.LICENSE.txt +1 -1
- package/dist/appleanim.cjs.js.LICENSE.txt +1 -1
- package/dist/appleanim.esm.js.LICENSE.txt +1 -1
- package/dist/audionew.cjs.js.LICENSE.txt +1 -1
- package/dist/audionew.esm.js.LICENSE.txt +1 -1
- package/dist/base.cjs.js.LICENSE.txt +1 -1
- package/dist/base.esm.js.LICENSE.txt +1 -1
- package/dist/betaDesktopBar.esm.js.LICENSE.txt +1 -1
- package/dist/betaMobileBar.esm.js.LICENSE.txt +1 -1
- package/dist/bundle.umd.js +1 -1
- package/dist/bundle.umd.js.LICENSE.txt +1 -1
- package/dist/button.cjs.js +1 -1
- package/dist/button.cjs.js.LICENSE.txt +1 -1
- package/dist/button.esm.js +1 -1
- package/dist/button.esm.js.LICENSE.txt +1 -1
- package/dist/cardGetter.cjs.js.LICENSE.txt +1 -1
- package/dist/cardGetter.esm.js.LICENSE.txt +1 -1
- package/dist/center.cjs.js.LICENSE.txt +1 -1
- package/dist/center.esm.js.LICENSE.txt +1 -1
- package/dist/checkbox.cjs.js.LICENSE.txt +1 -1
- package/dist/checkbox.esm.js.LICENSE.txt +1 -1
- package/dist/code.cjs.js.LICENSE.txt +1 -1
- package/dist/code.esm.js.LICENSE.txt +1 -1
- package/dist/container.cjs.js.LICENSE.txt +1 -1
- package/dist/container.esm.js.LICENSE.txt +1 -1
- package/dist/datalist.cjs.js.LICENSE.txt +1 -1
- package/dist/datalist.esm.js.LICENSE.txt +1 -1
- package/dist/designer.cjs.js +1 -1
- package/dist/designer.cjs.js.LICENSE.txt +1 -1
- package/dist/designer.esm.js +1 -1
- package/dist/designer.esm.js.LICENSE.txt +1 -1
- package/dist/dropdown.cjs.js.LICENSE.txt +1 -1
- package/dist/dropdown.esm.js.LICENSE.txt +1 -1
- package/dist/elementMapper.cjs.js +1 -1
- package/dist/elementMapper.cjs.js.LICENSE.txt +1 -1
- package/dist/elementMapper.esm.js +1 -1
- package/dist/elementMapper.esm.js.LICENSE.txt +1 -1
- package/dist/finalresult.esm.js +1 -1
- package/dist/finalresult.esm.js.LICENSE.txt +1 -1
- package/dist/flexCard.cjs.js.LICENSE.txt +1 -1
- package/dist/flexCard.esm.js.LICENSE.txt +1 -1
- package/dist/flexGrid.cjs.js.LICENSE.txt +1 -1
- package/dist/flexGrid.esm.js.LICENSE.txt +1 -1
- package/dist/flexRow.cjs.js.LICENSE.txt +1 -1
- package/dist/flexRow.esm.js.LICENSE.txt +1 -1
- package/dist/floatingInput.cjs.js.LICENSE.txt +1 -1
- package/dist/floatingInput.esm.js.LICENSE.txt +1 -1
- package/dist/free.cjs.js.LICENSE.txt +1 -1
- package/dist/free.esm.js.LICENSE.txt +1 -1
- package/dist/horizontalScroller.esm.js.LICENSE.txt +1 -1
- package/dist/image.cjs.js.LICENSE.txt +1 -1
- package/dist/image.esm.js.LICENSE.txt +1 -1
- package/dist/imagePicker.cjs.js.LICENSE.txt +1 -1
- package/dist/imagePicker.esm.js.LICENSE.txt +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.LICENSE.txt +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.LICENSE.txt +1 -1
- package/dist/link.cjs.js.LICENSE.txt +1 -1
- package/dist/link.esm.js.LICENSE.txt +1 -1
- package/dist/linkGetter.cjs.js.LICENSE.txt +1 -1
- package/dist/linkGetter.esm.js.LICENSE.txt +1 -1
- package/dist/metaAdder.cjs.js.LICENSE.txt +1 -1
- package/dist/metaAdder.esm.js.LICENSE.txt +1 -1
- package/dist/modal2025.cjs.js.LICENSE.txt +1 -1
- package/dist/modal2025.esm.js.LICENSE.txt +1 -1
- package/dist/multiswitchers.esm.js.LICENSE.txt +1 -1
- package/dist/newNavBar.cjs.js.LICENSE.txt +1 -1
- package/dist/newNavBar.esm.js.LICENSE.txt +1 -1
- package/dist/picker.cjs.js.LICENSE.txt +1 -1
- package/dist/picker.esm.js.LICENSE.txt +1 -1
- package/dist/progress.cjs.js.LICENSE.txt +1 -1
- package/dist/progress.esm.js.LICENSE.txt +1 -1
- package/dist/radio.cjs.js.LICENSE.txt +1 -1
- package/dist/radio.esm.js.LICENSE.txt +1 -1
- package/dist/range.cjs.js.LICENSE.txt +1 -1
- package/dist/range.esm.js.LICENSE.txt +1 -1
- package/dist/scrollvideo.cjs.js.LICENSE.txt +1 -1
- package/dist/scrollvideo.esm.js.LICENSE.txt +1 -1
- package/dist/sideBar.cjs.js.LICENSE.txt +1 -1
- package/dist/sideBar.esm.js.LICENSE.txt +1 -1
- package/dist/sideNavBar.cjs.js.LICENSE.txt +1 -1
- package/dist/sideNavBar.esm.js.LICENSE.txt +1 -1
- package/dist/simpleBar.cjs.js.LICENSE.txt +1 -1
- package/dist/simpleBar.esm.js.LICENSE.txt +1 -1
- package/dist/slider2025.cjs.js +1 -1
- package/dist/slider2025.cjs.js.LICENSE.txt +1 -1
- package/dist/slider2025.esm.js +1 -1
- package/dist/slider2025.esm.js.LICENSE.txt +1 -1
- package/dist/spacer.cjs.js.LICENSE.txt +1 -1
- package/dist/stack.cjs.js.LICENSE.txt +1 -1
- package/dist/stack.esm.js.LICENSE.txt +1 -1
- package/dist/stacker.cjs.js.LICENSE.txt +1 -1
- package/dist/stacker.esm.js.LICENSE.txt +1 -1
- package/dist/table.cjs.js.LICENSE.txt +1 -1
- package/dist/table.esm.js.LICENSE.txt +1 -1
- package/dist/text.cjs.js.LICENSE.txt +1 -1
- package/dist/text.esm.js.LICENSE.txt +1 -1
- package/dist/textField.cjs.js.LICENSE.txt +1 -1
- package/dist/textField.esm.js.LICENSE.txt +1 -1
- package/dist/transformanim.cjs.js.LICENSE.txt +1 -1
- package/dist/transformanim.esm.js.LICENSE.txt +1 -1
- package/dist/ulist.cjs.js.LICENSE.txt +1 -1
- package/dist/ulist.esm.js.LICENSE.txt +1 -1
- package/dist/video.esm.js.LICENSE.txt +1 -1
- package/dist/wrap.cjs.js.LICENSE.txt +1 -1
- package/dist/wrap.esm.js.LICENSE.txt +1 -1
- package/dist/zoomCard.cjs.js.LICENSE.txt +1 -1
- package/dist/zoomCard.esm.js.LICENSE.txt +1 -1
- package/layout/DEPRECATED-PARAGRAPH.js +1 -1
- package/layout/animator.js +1 -1
- package/layout/audio.js +1 -1
- package/layout/audionew.js +1 -1
- package/layout/base-2.js +1 -1
- package/layout/base.js +1 -1
- package/layout/betaDesktopBar.js +1 -1
- package/layout/betaMobileBar.js +1 -1
- package/layout/box.js +1 -1
- package/layout/button.js +32 -8
- package/layout/cards.js +1 -1
- package/layout/center.js +1 -1
- package/layout/checkbox.js +1 -1
- package/layout/circle.js +1 -1
- package/layout/cleanRow.js +1 -1
- package/layout/code.js +1 -1
- package/layout/container.js +1 -1
- package/layout/custom.js +1 -1
- package/layout/divImage.js +1 -1
- package/layout/dropdown.js +1 -1
- package/layout/dropdown2025.js +1 -1
- package/layout/emptyElement.js +1 -1
- package/layout/externalStylesheet.js +1 -1
- package/layout/flexCard.js +1 -1
- package/layout/flexGrid.js +1 -1
- package/layout/flexrow.js +1 -1
- package/layout/footer.js +1 -1
- package/layout/formComponents/custom.js +1 -1
- package/layout/formComponents/dataList.js +1 -1
- package/layout/formComponents/floatingInput.js +1 -1
- package/layout/formComponents/form-all.js +1 -1
- package/layout/formComponents/form.js +1 -1
- package/layout/formComponents/imagePicker.js +1 -1
- package/layout/formComponents/picker.js +1 -1
- package/layout/formComponents/radio.js +1 -1
- package/layout/formComponents/radiogroup.js +1 -1
- package/layout/formComponents/range.js +1 -1
- package/layout/free.js +1 -1
- package/layout/grid-new.js +1 -1
- package/layout/grid.js +1 -1
- package/layout/gridSwitcher.js +1 -1
- package/layout/group.js +1 -1
- package/layout/header.js +1 -1
- package/layout/horizontalScroller.js +1 -1
- package/layout/image-old.js +1 -1
- package/layout/image.js +1 -1
- package/layout/index.js +1 -1
- package/layout/label.js +1 -1
- package/layout/link.js +1 -1
- package/layout/list-OLD.js +1 -1
- package/layout/list.js +1 -1
- package/layout/metaAdder.js +1 -1
- package/layout/modal2025.js +1 -1
- package/layout/modernwrap.js +1 -1
- package/layout/multiswitcher.js +1 -1
- package/layout/multiswitcherBeta.js +1 -1
- package/layout/navBar-OLD.js +1 -1
- package/layout/navBar.js +1 -1
- package/layout/navFactor/customDiv.js +1 -1
- package/layout/newFlatAdder.js +1 -1
- package/layout/newNavBar copy 2.js +1 -1
- package/layout/newNavBar copy.js +1 -1
- package/layout/newNavBar.js +1 -1
- package/layout/offsetContainer.js +1 -1
- package/layout/polygon.js +1 -1
- package/layout/progress.js +1 -1
- package/layout/row.js +1 -1
- package/layout/savedNewNavBar.js +1 -1
- package/layout/scrollvideo.js +1 -1
- package/layout/sideBar.js +1 -1
- package/layout/sideNavBar.js +1 -1
- package/layout/simpleBar.js +1 -1
- package/layout/slider2025.js +82 -42
- package/layout/spacer.js +1 -1
- package/layout/stack.js +1 -1
- package/layout/styler.js +1 -1
- package/layout/switcher.js +1 -1
- package/layout/table.js +1 -1
- package/layout/text.js +1 -1
- package/layout/textField.js +1 -1
- package/layout/ulist.js +1 -1
- package/layout/video.js +1 -1
- package/layout/withoutNew.js +1 -1
- package/layout/wrap.js +1 -1
- package/layout/zoomCard.js +1 -1
- package/lib/AppleAnim.js +1 -1
- package/lib/KeyframeAnimation.js +1 -1
- package/lib/Stacker.js +1 -1
- package/lib/TransformAnim.js +1 -1
- package/lib/cardGetter.js +1 -1
- package/lib/designer.js +3 -37
- package/lib/elementMapper.js +1 -1
- package/lib/linkGetter.js +1 -1
- package/lib/scrollvideo.js +1 -1
- package/package.json +1 -1
package/layout/free.js
CHANGED
package/layout/grid-new.js
CHANGED
package/layout/grid.js
CHANGED
package/layout/gridSwitcher.js
CHANGED
package/layout/group.js
CHANGED
package/layout/header.js
CHANGED
package/layout/image-old.js
CHANGED
package/layout/image.js
CHANGED
package/layout/index.js
CHANGED
package/layout/label.js
CHANGED
package/layout/link.js
CHANGED
package/layout/list-OLD.js
CHANGED
package/layout/list.js
CHANGED
package/layout/metaAdder.js
CHANGED
package/layout/modal2025.js
CHANGED
package/layout/modernwrap.js
CHANGED
package/layout/multiswitcher.js
CHANGED
package/layout/navBar-OLD.js
CHANGED
package/layout/navBar.js
CHANGED
package/layout/newFlatAdder.js
CHANGED
package/layout/newNavBar copy.js
CHANGED
package/layout/newNavBar.js
CHANGED
package/layout/polygon.js
CHANGED
package/layout/progress.js
CHANGED
package/layout/row.js
CHANGED
package/layout/savedNewNavBar.js
CHANGED
package/layout/scrollvideo.js
CHANGED
package/layout/sideBar.js
CHANGED
package/layout/sideNavBar.js
CHANGED
package/layout/simpleBar.js
CHANGED
package/layout/slider2025.js
CHANGED
|
@@ -1,39 +1,42 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.33
|
|
3
3
|
* (c) 2025 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {Animator} from "./animator.js";
|
|
8
|
-
import {Button} from "./button.js";
|
|
7
|
+
import { Animator } from "./animator.js";
|
|
8
|
+
import { Button } from "./button.js";
|
|
9
9
|
|
|
10
10
|
class Slider {
|
|
11
|
-
constructor(elements, buttons) {
|
|
12
|
-
this.container = document.createElement("div");
|
|
11
|
+
constructor(elements, buttons, options = {}) {
|
|
12
|
+
this.container = document.createElement("div");
|
|
13
13
|
this.container.style.width = "100%";
|
|
14
14
|
this.container.style.margin = "20px auto";
|
|
15
15
|
this.container.style.textAlign = "center";
|
|
16
16
|
|
|
17
17
|
this.elements = elements;
|
|
18
18
|
this.currentSlideIndex = 0;
|
|
19
|
-
|
|
20
19
|
this.buttons = buttons;
|
|
21
20
|
|
|
21
|
+
// 🎨 Tint options
|
|
22
|
+
this.tintColor = options.tintColor || "green";
|
|
23
|
+
this.inactiveColor = options.inactiveColor || "gray";
|
|
24
|
+
|
|
25
|
+
// 🔵 Default buttons adopt tintColor
|
|
22
26
|
if (!this.buttons) {
|
|
23
27
|
let buttons = {
|
|
24
28
|
leftButton: new Button("L").set({
|
|
25
29
|
frame: { width: 50, height: 50 },
|
|
26
|
-
|
|
27
|
-
color:
|
|
28
|
-
image: new Image().set({ url: "../assets/arrow-left.png", width: "50px", height: "50px" }),
|
|
30
|
+
svg: this.createArrowSVG("left", 28, this.tintColor),
|
|
31
|
+
color: this.tintColor, // adopt tintColor
|
|
29
32
|
radius: "100%",
|
|
30
33
|
arrayMargin: { sides: ["all"], value: "1rem" },
|
|
31
34
|
}),
|
|
32
35
|
|
|
33
36
|
rightButton: new Button("R").set({
|
|
34
37
|
frame: { width: 50, height: 50 },
|
|
35
|
-
|
|
36
|
-
color:
|
|
38
|
+
svg: this.createArrowSVG("right", 28, this.tintColor),
|
|
39
|
+
color: this.tintColor, // adopt tintColor
|
|
37
40
|
radius: "100%",
|
|
38
41
|
arrayMargin: { sides: ["all"], value: "1rem" },
|
|
39
42
|
}),
|
|
@@ -45,6 +48,29 @@ class Slider {
|
|
|
45
48
|
this.init();
|
|
46
49
|
}
|
|
47
50
|
|
|
51
|
+
createArrowSVG(direction = "left", size = 28, color = "currentColor") {
|
|
52
|
+
const svgNS = "http://www.w3.org/2000/svg";
|
|
53
|
+
const svg = document.createElementNS(svgNS, "svg");
|
|
54
|
+
svg.setAttribute("viewBox", "0 0 24 24");
|
|
55
|
+
svg.setAttribute("width", String(size));
|
|
56
|
+
svg.setAttribute("height", String(size));
|
|
57
|
+
svg.setAttribute("aria-hidden", "true");
|
|
58
|
+
svg.style.display = "block";
|
|
59
|
+
svg.style.pointerEvents = "none";
|
|
60
|
+
|
|
61
|
+
const path = document.createElementNS(svgNS, "path");
|
|
62
|
+
path.setAttribute("fill", color);
|
|
63
|
+
|
|
64
|
+
if (direction === "left") {
|
|
65
|
+
path.setAttribute("d", "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z");
|
|
66
|
+
} else {
|
|
67
|
+
path.setAttribute("d", "M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6z");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
svg.appendChild(path);
|
|
71
|
+
return svg;
|
|
72
|
+
}
|
|
73
|
+
|
|
48
74
|
toCode() {
|
|
49
75
|
let code = `new Slider([${this.elements.map((el) => el.toCode())}], null)`;
|
|
50
76
|
code = code.replace(/,\s*\./g, ".");
|
|
@@ -79,12 +105,12 @@ class Slider {
|
|
|
79
105
|
slide.style.flexShrink = "0";
|
|
80
106
|
slide.style.width = "100%";
|
|
81
107
|
slide.style.height = "400px";
|
|
82
|
-
slide.style.background =
|
|
108
|
+
slide.style.background =
|
|
109
|
+
index % 2 === 0 ? "rgb(250, 246, 212)" : "white";
|
|
83
110
|
slide.style.transformOrigin = "center center";
|
|
84
111
|
slide.style.transform = "scale(1)";
|
|
85
112
|
slide.style.scrollSnapAlign = "center";
|
|
86
113
|
|
|
87
|
-
// render element once and clone from that instance for the thumbnail
|
|
88
114
|
const rendered = text.render();
|
|
89
115
|
slide.appendChild(rendered);
|
|
90
116
|
slidesWrapper.appendChild(slide);
|
|
@@ -97,6 +123,9 @@ class Slider {
|
|
|
97
123
|
this.arrowPrev.style.top = "50%";
|
|
98
124
|
this.arrowPrev.style.transform = "translateY(-50%)";
|
|
99
125
|
this.arrowPrev.style.zIndex = "1";
|
|
126
|
+
this.arrowPrev.style.display = "flex";
|
|
127
|
+
this.arrowPrev.style.alignItems = "center";
|
|
128
|
+
this.arrowPrev.style.justifyContent = "center";
|
|
100
129
|
|
|
101
130
|
this.arrowNext = this.buttons.rightButton.render();
|
|
102
131
|
this.arrowNext.style.position = "absolute";
|
|
@@ -104,13 +133,15 @@ class Slider {
|
|
|
104
133
|
this.arrowNext.style.top = "50%";
|
|
105
134
|
this.arrowNext.style.transform = "translateY(-50%)";
|
|
106
135
|
this.arrowNext.style.zIndex = "1";
|
|
136
|
+
this.arrowNext.style.display = "flex";
|
|
137
|
+
this.arrowNext.style.alignItems = "center";
|
|
138
|
+
this.arrowNext.style.justifyContent = "center";
|
|
107
139
|
|
|
108
140
|
// Navigation dots
|
|
109
141
|
const nav = document.createElement("div");
|
|
110
142
|
nav.style.position = "absolute";
|
|
111
143
|
nav.style.bottom = "10%";
|
|
112
144
|
nav.style.left = "50%";
|
|
113
|
-
nav.style.width = "200px";
|
|
114
145
|
nav.style.transform = "translateX(-50%)";
|
|
115
146
|
nav.style.textAlign = "center";
|
|
116
147
|
|
|
@@ -120,68 +151,63 @@ class Slider {
|
|
|
120
151
|
navLink.style.height = "15px";
|
|
121
152
|
navLink.style.width = "15px";
|
|
122
153
|
navLink.style.borderRadius = "50%";
|
|
123
|
-
navLink.style.backgroundColor =
|
|
154
|
+
navLink.style.backgroundColor = this.inactiveColor;
|
|
124
155
|
navLink.style.margin = "0 10px";
|
|
125
156
|
navLink.style.cursor = "pointer";
|
|
126
157
|
navLink.dataset.index = index;
|
|
127
158
|
nav.appendChild(navLink);
|
|
128
159
|
});
|
|
129
160
|
|
|
130
|
-
// ✅ Thumbnails section
|
|
161
|
+
// ✅ Thumbnails section
|
|
131
162
|
const thumbsContainer = document.createElement("div");
|
|
132
163
|
thumbsContainer.style.display = "flex";
|
|
133
|
-
thumbsContainer.style.justifyContent = "
|
|
164
|
+
thumbsContainer.style.justifyContent = "flex-start";
|
|
134
165
|
thumbsContainer.style.marginTop = "10px";
|
|
135
166
|
thumbsContainer.style.gap = "10px";
|
|
136
167
|
thumbsContainer.style.flexWrap = "nowrap";
|
|
137
|
-
thumbsContainer.style.overflowX = "auto";
|
|
168
|
+
thumbsContainer.style.overflowX = "auto";
|
|
138
169
|
|
|
139
|
-
// create thumbnails from existing slide DOM (clone once)
|
|
140
170
|
const slides = slidesWrapper.querySelectorAll(".slide");
|
|
141
171
|
slides.forEach((slide, index) => {
|
|
142
172
|
const thumb = document.createElement("div");
|
|
143
|
-
thumb.className = "slider-thumb";
|
|
173
|
+
thumb.className = "slider-thumb";
|
|
144
174
|
thumb.dataset.index = index.toString();
|
|
145
175
|
thumb.style.width = "60px";
|
|
146
176
|
thumb.style.height = "40px";
|
|
147
|
-
thumb.style.border =
|
|
177
|
+
thumb.style.border = `2px solid ${this.inactiveColor}`;
|
|
148
178
|
thumb.style.borderRadius = "5px";
|
|
149
179
|
thumb.style.overflow = "hidden";
|
|
150
180
|
thumb.style.cursor = "pointer";
|
|
151
181
|
thumb.style.flexShrink = "0";
|
|
152
182
|
thumb.style.position = "relative";
|
|
153
183
|
|
|
154
|
-
// use the slide's rendered content and clone it (no extra text.render() calls)
|
|
155
184
|
const sourceContent = slide.firstElementChild || slide.cloneNode(true);
|
|
156
185
|
const preview = sourceContent.cloneNode(true);
|
|
157
|
-
|
|
158
|
-
// scale down the preview and make sure it sits in the thumb
|
|
159
186
|
preview.style.transform = "scale(0.2)";
|
|
160
187
|
preview.style.transformOrigin = "top left";
|
|
161
|
-
// make width/height big enough so scale produces visible result
|
|
162
188
|
preview.style.width = "300px";
|
|
163
189
|
preview.style.height = "auto";
|
|
164
|
-
preview.style.pointerEvents = "none";
|
|
190
|
+
preview.style.pointerEvents = "none";
|
|
165
191
|
|
|
166
192
|
thumb.appendChild(preview);
|
|
167
|
-
|
|
168
193
|
thumbsContainer.appendChild(thumb);
|
|
169
194
|
});
|
|
170
195
|
|
|
171
|
-
// Append elements
|
|
196
|
+
// Append elements
|
|
172
197
|
this.slider.appendChild(this.arrowPrev);
|
|
173
198
|
this.slider.appendChild(this.arrowNext);
|
|
174
199
|
this.slider.appendChild(slidesWrapper);
|
|
175
200
|
this.slider.appendChild(nav);
|
|
176
201
|
|
|
177
|
-
// Append everything to root container (single root element)
|
|
178
202
|
this.container.appendChild(this.slider);
|
|
179
203
|
this.container.appendChild(thumbsContainer);
|
|
180
204
|
|
|
181
|
-
// Store references
|
|
205
|
+
// Store references
|
|
182
206
|
this.slidesWrapper = slidesWrapper;
|
|
183
207
|
this.navLinks = Array.from(nav.querySelectorAll("a"));
|
|
184
|
-
this.thumbs = Array.from(
|
|
208
|
+
this.thumbs = Array.from(
|
|
209
|
+
thumbsContainer.querySelectorAll(".slider-thumb")
|
|
210
|
+
);
|
|
185
211
|
}
|
|
186
212
|
|
|
187
213
|
init() {
|
|
@@ -191,7 +217,11 @@ class Slider {
|
|
|
191
217
|
|
|
192
218
|
attachEventListeners() {
|
|
193
219
|
this.arrowPrev.addEventListener("click", () => {
|
|
194
|
-
this.moveToSlide(
|
|
220
|
+
this.moveToSlide(
|
|
221
|
+
this.currentSlideIndex - 1 < 0
|
|
222
|
+
? this.elements.length - 1
|
|
223
|
+
: this.currentSlideIndex - 1
|
|
224
|
+
);
|
|
195
225
|
});
|
|
196
226
|
|
|
197
227
|
this.arrowNext.addEventListener("click", () => {
|
|
@@ -206,7 +236,6 @@ class Slider {
|
|
|
206
236
|
});
|
|
207
237
|
});
|
|
208
238
|
|
|
209
|
-
// thumbnails click (use data-index to be robust)
|
|
210
239
|
this.thumbs.forEach((thumb) => {
|
|
211
240
|
thumb.addEventListener("click", () => {
|
|
212
241
|
const idx = parseInt(thumb.dataset.index, 10);
|
|
@@ -214,10 +243,13 @@ class Slider {
|
|
|
214
243
|
});
|
|
215
244
|
});
|
|
216
245
|
|
|
217
|
-
// Keydown event for left and right arrow keys
|
|
218
246
|
document.addEventListener("keydown", (e) => {
|
|
219
247
|
if (e.key === "ArrowLeft") {
|
|
220
|
-
this.moveToSlide(
|
|
248
|
+
this.moveToSlide(
|
|
249
|
+
this.currentSlideIndex - 1 < 0
|
|
250
|
+
? this.elements.length - 1
|
|
251
|
+
: this.currentSlideIndex - 1
|
|
252
|
+
);
|
|
221
253
|
} else if (e.key === "ArrowRight") {
|
|
222
254
|
this.moveToSlide((this.currentSlideIndex + 1) % this.elements.length);
|
|
223
255
|
}
|
|
@@ -230,21 +262,29 @@ class Slider {
|
|
|
230
262
|
}
|
|
231
263
|
|
|
232
264
|
updateActiveSlide() {
|
|
233
|
-
//
|
|
265
|
+
// nav dots
|
|
234
266
|
this.navLinks.forEach((navLink) => {
|
|
235
267
|
const idx = parseInt(navLink.dataset.index, 10);
|
|
236
|
-
navLink.style.backgroundColor =
|
|
268
|
+
navLink.style.backgroundColor =
|
|
269
|
+
idx === this.currentSlideIndex
|
|
270
|
+
? this.tintColor
|
|
271
|
+
: this.inactiveColor;
|
|
237
272
|
});
|
|
238
273
|
|
|
239
|
-
//
|
|
274
|
+
// thumbs
|
|
240
275
|
this.thumbs.forEach((thumb) => {
|
|
241
276
|
const idx = parseInt(thumb.dataset.index, 10);
|
|
242
|
-
thumb.style.borderColor =
|
|
277
|
+
thumb.style.borderColor =
|
|
278
|
+
idx === this.currentSlideIndex
|
|
279
|
+
? this.tintColor
|
|
280
|
+
: this.inactiveColor;
|
|
243
281
|
});
|
|
244
282
|
|
|
245
|
-
// scroll
|
|
283
|
+
// scroll slides
|
|
246
284
|
const slideElem = this.slidesWrapper.querySelector(".slide");
|
|
247
|
-
const slideWidth = slideElem
|
|
285
|
+
const slideWidth = slideElem
|
|
286
|
+
? slideElem.offsetWidth
|
|
287
|
+
: this.slidesWrapper.clientWidth;
|
|
248
288
|
this.slidesWrapper.scrollTo({
|
|
249
289
|
left: this.currentSlideIndex * slideWidth,
|
|
250
290
|
behavior: "smooth",
|
|
@@ -255,7 +295,7 @@ class Slider {
|
|
|
255
295
|
if (div) {
|
|
256
296
|
document.querySelector(div).appendChild(this.container);
|
|
257
297
|
} else {
|
|
258
|
-
return this.container;
|
|
298
|
+
return this.container;
|
|
259
299
|
}
|
|
260
300
|
}
|
|
261
301
|
}
|
package/layout/spacer.js
CHANGED