Skip to content

Commit 3deb9ac

Browse files
authored
Now we can addEventListener
Now we can addEventListener for events: - update - removeTag - search - clear
1 parent 7272570 commit 3deb9ac

File tree

1 file changed

+51
-3
lines changed

1 file changed

+51
-3
lines changed

source/js/dselect.js

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,18 @@ function dselectUpdate(button, classElement, classToggler) {
33
const target = button.closest(`.${classElement}`).previousElementSibling;
44
const toggler = target.nextElementSibling.getElementsByClassName(classToggler)[0];
55
const input = target.nextElementSibling.querySelector("input");
6+
7+
if (target)
8+
{
9+
target.dispatchEvent(new CustomEvent("update", {
10+
detail: {
11+
button: button,
12+
classElement: classElement,
13+
classToggler: classToggler
14+
}
15+
}));
16+
}
17+
618
if (target.multiple) {
719
Array.from(target.options).filter((option) => option.value === value)[0].selected = true;
820
} else {
@@ -22,6 +34,18 @@ function dselectRemoveTag(button, classElement, classToggler) {
2234
const target = button.closest(`.${classElement}`).previousElementSibling;
2335
const toggler = target.nextElementSibling.getElementsByClassName(classToggler)[0];
2436
const input = target.nextElementSibling.querySelector("input");
37+
38+
if (target)
39+
{
40+
target.dispatchEvent(new CustomEvent("removeTag", {
41+
detail: {
42+
button: button,
43+
classElement: classElement,
44+
classToggler: classToggler
45+
}
46+
}));
47+
}
48+
2549
Array.from(target.options).filter((option) => option.value === value)[0].selected = false;
2650
target.dispatchEvent(new Event("change"));
2751
toggler.click();
@@ -35,6 +59,21 @@ function dselectSearch(event, input, classElement, classToggler, creatable, loca
3559
const headers = Array.from(itemsContainer.querySelectorAll(".dropdown-header"));
3660
const items = Array.from(itemsContainer.querySelectorAll(".dropdown-item"));
3761
const noResults = itemsContainer.nextElementSibling;
62+
const target = input.closest(`.${classElement}`).previousElementSibling;
63+
64+
if (target)
65+
{
66+
target.dispatchEvent(new CustomEvent("search", {
67+
detail: {
68+
event: event,
69+
input: input,
70+
classElement: classElement,
71+
classToggler: classToggler,
72+
creatable: creatable,
73+
localization: localization
74+
}
75+
}));
76+
}
3877

3978
headers.forEach((header) => header.classList.add("d-none"));
4079

@@ -75,7 +114,6 @@ function dselectSearch(event, input, classElement, classToggler, creatable, loca
75114
if (creatable) {
76115
noResults.innerHTML = localization.replace("[searched-term]", input.value);
77116
if (event.key === "Enter") {
78-
const target = input.closest(`.${classElement}`).previousElementSibling;
79117
const toggler = target.nextElementSibling.querySelector(`.${classToggler}`);
80118
target.insertAdjacentHTML("afterbegin", `<option value="${input.value}" selected>${input.value}</option>`);
81119
target.dispatchEvent(new Event("change"));
@@ -92,6 +130,17 @@ function dselectSearch(event, input, classElement, classToggler, creatable, loca
92130
}
93131
function dselectClear(button, classElement) {
94132
const target = button.closest(`.${classElement}`).previousElementSibling;
133+
134+
if (target)
135+
{
136+
target.dispatchEvent(new CustomEvent("clear", {
137+
detail: {
138+
event: button,
139+
input: classElement
140+
}
141+
}));
142+
}
143+
95144
Array.from(target.options).forEach((option) => option.selected = false);
96145
target.dispatchEvent(new Event("change"));
97146
}
@@ -249,8 +298,7 @@ function dselect(el, option = {}) {
249298
</div>
250299
</div>
251300
${clearBtn}
252-
</div>
253-
`;
301+
</div>`;
254302
removePrev();
255303
el.insertAdjacentHTML("afterend", template);
256304
const dropdownElement = el.nextElementSibling;

0 commit comments

Comments
 (0)