was.js – Rev 20

Subversion Repositories:
Rev:
/*************************************************************************/
/*    Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3    */
/*************************************************************************/
/* fuss/lambda_calculus/functional_programming/aggregators @ grimore.org */
/*************************************************************************/
// Vanilla ES6 JavaScript
if (!Array.prototype.switch) {
    Array.prototype.switch = function(d, ...c) {
        if(c.length % 2 !== 0) {
            throw "Pairs of predicates expected for cases";
        }
        
        (Array.isArray(this) ? this : [ this ]).forEach((s) => {
            var m = false;
            for(var i = 0; i < c.length; i += 2) {
                if(!c[i](s)) {
                    continue;
                }
                if(!c[i + 1](s)) {
                    continue;
                }
                m = true;
            }
        
            if(!m) {
                d(s);
            }
        });
    };
}
// jQuery
$.extend({
    switch: function(q, d, ...c) {
        if(c.length % 2 !== 0) {
            throw "Pairs of predicates expected for cases";
        }
        
        (Array.isArray(q) ? q : [ q ]).forEach((s) => {
            var m = false;
            for(var i = 0; i < c.length; i += 2) {
                if(!c[i](s)) {
                    continue;
                }
                if(!c[i + 1](s)) {
                    continue;
                }
                m = true;
            }
        
            if(!m) {
                d(s);
            }
        });
    }
});
// Node.JS
exports.switch = function(q, d, ...c) {
    if(c.length % 2 !== 0) {
        throw "Pairs of predicates expected for cases";
    }
    
    (Array.isArray(q) ? q : [ q ]).forEach((s) => {
        var m = false;
        for(var i = 0; i < c.length; i += 2) {
            if(!c[i](s)) {
                continue;
            }
            if(!c[i + 1](s)) {
                continue;
            }
            m = true;
        }
    
        if(!m) {
            d(s);
        }
    });
};