FP checkbox filter
by smotchkkiss
HTML
<div id="demo"> </div>
<div class="item">
<form id="aForm" onchange="showAnimals()">
<input type="checkbox" id ="A" value="A"/>Exclude words with 'A'<br/>
<input type="checkbox" id ="E" value="E"/>Exclude words with 'E'<br/>
<input type="checkbox" id ="O" value="O"/>Exclude words with 'O'<br/>
</form>
</div>
JavaScript
var animals = ["Bear", "Mouse", "Cat", "Tiger", "Lion"];
var letters = ["A", "E", "O"];
function showAnimals() {
var getSwitches = compose([
map(prop("value")),
filter(prop("checked")),
map(getElementById)
]);
var switches = getSwitches(letters);
var _filter = compose([
map(join("")),
filter(compose([
not,
any(flip(elem)(switches)),
map(toUpperCase)
])),
map(split(""))
]);
var result = _filter(animals);
getElementById("demo").innerHTML = join(", ")(result);
};
var id = function(x) {
return x;
};
var getElementById = function(x) {
return document.getElementById(x);
};
var neq = function(y) {
return function(x) {
return x !== y;
};
};
var not = function(x) { return !x; };
var prop = function(x) {
return function(elem) {
return elem[x];
};
};
var indexOf = function(y) {
return function(x) {
return x.indexOf(y);
};
};
var elem = function(y) {
return compose([neq(-1), indexOf(y)]);
};
var map = function(f) {
return function(xs) {
return xs.map(f);
};
};
var filter = function(f) {
return function(xs) {
return xs.filter(f);
};
};
var any = function(f) {
return function(xs) {
return xs.some(f);
};
};
var reduceRight = function(f) {
return function(i) {
return function(xs) {
return xs.reduceRight(uncurry(f), i);
};
};
};
var toUpperCase = function(s) {
return s.toUpperCase();
};
var split = function(y) {
return function(x) {
return x.split(y);
};
};
var join = function(y) {
return function(x) {
return x.join(y);
};
};
var flip = function(f) {
return function(y) {
return function(x) {
return f(x)(y);
};
};
};
var uncurry = function(f) {
return function(x, y) {
return f(x)(y);
};
};
var...