summaryrefslogtreecommitdiff
path: root/html/content/js/Forms/select.js
blob: 3ea5435abb1496286768470797cbf48931edcb52 (plain)
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
$$plugins.define('select', ['domHelper'], function (element, options, $) {
	var list = element.querySelector('.select__listWrap'),
		selected = $('.select__button'),
		selectedMob = element.querySelector('.select__button--mobile'),
		input = element.querySelector('.select__input'),
		options = $('.select__option');

	function open() {
		element.classList.add('select--open');
		$(list).slideDown(250);
	}

	function close() {
		$(list).slideUp(250, function () {
			element.classList.remove('select--open');
		});
	}

	document.addEventListener('click', function (event) {
		if (!isOpen() || element == event.target || $(event.target).parents().contains(element)) {
			return;
		}
		close();
	});

	selected.on("click", function (e) {
		e.preventDefault();
		if (element.classList.contains('select--open')) {
			close();
		} else {
			open();
		}
	});

	function isOpen() {
		return element.classList.contains('select--open');
	}

	options.on('click', function (e) {
		e.target.classList.add('selected');
		prevActiveOption = Object.values(element.querySelectorAll('.selected')).filter(prevActive => prevActive !== e.target);
		if (prevActiveOption.length != 0) {
			prevActiveOption[0].classList.remove('selected');
		}
		selected.text(e.target.innerHTML);
		if (selectedMob) {
			selectedMob.innerHTML = e.target.innerHTML;
		}
		$(input).val(e.target.dataset.value).trigger('change');
		close();
	});
});