Skip to content

Commit 276f3f2

Browse files
committed
feat(pat gallery): Reinitialize the triggers when new elements are loadded into the gallery area.
1 parent 6dd5893 commit 276f3f2

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

src/pat/gallery/gallery.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ export default Base.extend({
4545
document.body.appendChild(this.template);
4646
}
4747

48+
const gallery_observer = new MutationObserver(
49+
this.initialize_trigger.bind(this)
50+
);
51+
gallery_observer.observe(this.el, {
52+
subtree: true,
53+
childList: true,
54+
});
55+
4856
this.initialize_trigger();
4957
},
5058

src/pat/gallery/gallery.test.js

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,49 @@ describe("pat-gallery", function () {
4242
const ev = new Event("click");
4343
ev.tagName = "A";
4444
const spy_preventDefault = jest.spyOn(ev, "preventDefault");
45-
document.querySelector("a").dispatchEvent(ev);
45+
document.querySelector(".a1").dispatchEvent(ev);
46+
47+
expect(spy_init_gallery).toHaveBeenCalled();
48+
expect(spy_preventDefault).toHaveBeenCalled();
49+
});
50+
51+
it("Reinitializes when new items are added.", async function () {
52+
document.body.innerHTML = `
53+
<section
54+
class="pat-gallery"
55+
data-pat-gallery="item-selector: a">
56+
<a class="a1" href="full-1.jpg" title="title a1">
57+
<img src="thumb-1.jpg" title="title img1" />
58+
</a>
59+
</section>
60+
`;
61+
const el = document.querySelector(".pat-gallery");
62+
63+
const instance = new pattern(el);
64+
65+
const spy_init_trigger = jest.spyOn(instance, "initialize_trigger");
66+
const spy_init_gallery = jest.spyOn(instance, "initialize_gallery");
67+
68+
await utils.timeout(1);
69+
70+
expect(spy_init_trigger).toHaveBeenCalledTimes(1);
71+
72+
const item = document.createElement("div");
73+
item.innerHTML = `
74+
<a class="a2" href="full-2.jpg">
75+
<img src="thumb-2.jpg" />
76+
</a>
77+
`;
78+
79+
el.appendChild(item.querySelector(".a2"));
80+
await utils.timeout(1); // wait for MutationObserver
81+
82+
expect(spy_init_trigger).toHaveBeenCalledTimes(2);
83+
84+
const ev = new Event("click");
85+
ev.tagName = "A";
86+
const spy_preventDefault = jest.spyOn(ev, "preventDefault");
87+
document.querySelector(".a2").dispatchEvent(ev);
4688

4789
expect(spy_init_gallery).toHaveBeenCalled();
4890
expect(spy_preventDefault).toHaveBeenCalled();

0 commit comments

Comments
 (0)