-
Notifications
You must be signed in to change notification settings - Fork 0
/
Br1Selectable.js
68 lines (59 loc) · 2.35 KB
/
Br1Selectable.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
var Br1Selectable = {
/**
* Tranforma o elemento selecionado em uma lista selecionável.
*
* @param {HTMLElement} container Lista que deve se tornar selecionável
* @param {string} elementTagName Nome do elemento de cada item
* @param {string} activeClass Classe que será atribuída ao item selecionado. Padrão: "active"
*/
init: function(container, elementTagName, activeClass = "active")
{
container.dataset.elementTagName = elementTagName;
container.dataset.activeClass = activeClass;
container.classList.add("selection-container");
this.clearSelection(container);
container
.querySelectorAll(container.dataset.elementTagName)
.forEach(item => {
item.classList.add("selection-item");
item.addEventListener("click", Br1Selectable.itemClick);
});
},
querySelected: function(container)
{
return container
.querySelectorAll(container.dataset.elementTagName + "." + container.dataset.activeClass);
},
clearSelection: function(container)
{
Br1Selectable
.querySelected(container)
.forEach(el => el.classList.remove(container.dataset.activeClass));
},
itemClick: function(event)
{
let container = event.target.closest(".selection-container");
Br1Selectable.clearSelection(container);
let item = event.target.closest(".selection-item");
item.classList.add(container.dataset.activeClass);
},
/**
* Obtêm o valor do item selecionado da lista.
* O Valor será obtido através de um atributo data-value="?" no item
* da lista
* Se não houverem itens selecionados, retorna null.
* se houver apenas um item selecionado, retorna o valor do item.
* Se houverem vários items selecionados (Ainda não suportado), retornará um array com os valores.
* @param {HTMLElement} container Lista
*/
getSelectedValue: function(container)
{
let sel = Br1Selectable.querySelected(container);
if (sel.length == 0)
return null;
else if (sel.length == 1)
return sel[0].dataset.value;
else
return sel.map(i => i.dataset.value);
}
};