95 lines
2.3 KiB
JavaScript
95 lines
2.3 KiB
JavaScript
(function() {
|
|
function isDefined(value) {
|
|
return typeof value != 'undefined';
|
|
}
|
|
|
|
function Selector(o) {
|
|
var s = this;
|
|
var options = {};
|
|
s.clickable = true;
|
|
|
|
if (isDefined(o.clickable)) {
|
|
s.clickable = o.clickable;
|
|
}
|
|
|
|
s.isActive = function(op) {
|
|
return options[op].classList.contains('active');
|
|
};
|
|
|
|
s.isOption = function(op) {
|
|
return isDefined(options[op]);
|
|
};
|
|
|
|
function _getActive(multiple) {
|
|
var a = [];
|
|
for (var i in options) {
|
|
if (s.isActive(i)) {
|
|
a.push(i);
|
|
}
|
|
}
|
|
return multiple ? a : a[0];
|
|
}
|
|
|
|
s.getActive = function(asArray) {
|
|
var multiple = isDefined(asArray) ? asArray : o.multiple;
|
|
return _getActive(multiple);
|
|
};
|
|
|
|
function _setActive(op, value) {
|
|
if (!s.isOption(op) || value == s.isActive(op)) {
|
|
return;
|
|
}
|
|
|
|
if (value) {
|
|
options[op].classList.add('active');
|
|
} else {
|
|
options[op].classList.remove('active');
|
|
}
|
|
|
|
if (o.callback) {
|
|
o.callback(op, value);
|
|
}
|
|
}
|
|
|
|
s.setActive = function(op, value) {
|
|
if (o.multiple) {
|
|
_setActive(op, value);
|
|
} else {
|
|
if (value) {
|
|
_setActive(s.getActive(false), false);
|
|
_setActive(op, true);
|
|
}
|
|
}
|
|
};
|
|
|
|
s.toggleActive = function(op) {
|
|
s.setActive(op, !s.isActive(op))
|
|
};
|
|
|
|
s.addOption = function(op, el) {
|
|
el.addEventListener('click', function() {
|
|
if (s.clickable) {
|
|
s.toggleActive(op);
|
|
}
|
|
});
|
|
options[op] = el;
|
|
};
|
|
|
|
s.getOptions = function() {
|
|
return options;
|
|
};
|
|
|
|
s.setOptions = function(newOptions) {
|
|
options = {};
|
|
for (var i in newOptions) {
|
|
s.addOption(i, newOptions[i]);
|
|
}
|
|
};
|
|
|
|
if (o.options) {
|
|
s.setOptions(o.options);
|
|
}
|
|
}
|
|
|
|
window.Selector = Selector;
|
|
})();
|