was.js – Diff between revs 41 and 47
?pathlinks?
Rev 41 | Rev 47 | |||
---|---|---|---|---|
1 | /*************************************************************************/ |
1 | /*************************************************************************/ |
|
2 | /* Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3 */ |
2 | /* Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3 */ |
|
3 | /*************************************************************************/ |
3 | /*************************************************************************/ |
|
4 | /* fuss/lambda_calculus/functional_programming/aggregators @ grimore.org */ |
4 | /* fuss/lambda_calculus/functional_programming/aggregators @ grimore.org */ |
|
5 | /*************************************************************************/ |
5 | /*************************************************************************/ |
|
6 | function wasSwitch() { |
6 | function wasSwitch(q, d, ...c) { |
|
7 | if(arguments.length % 2 !== 0) { |
7 | if(c.length % 2 !== 0) { |
|
8 | throw "Pairs of predicates expected for cases"; |
8 | throw "Pairs of predicates expected for cases"; |
|
9 | } |
9 | } |
|
10 | |
10 | |
|
11 | (Array.isArray(arguments[0]) ? arguments[0] : [ arguments[0] ]).forEach(function(s) { |
11 | (Array.isArray(q) ? q : [ q ]).forEach((s) => { |
|
12 | var m = false; |
12 | var m = false; |
|
13 | for(var i = 2; i < arguments.length; i += 2) { |
13 | for(var i = 0; i < c.length; i += 2) { |
|
14 | if(!arguments[i](s)) { |
14 | if(!c[i](s)) { |
|
15 | continue; |
15 | continue; |
|
16 | } |
16 | } |
|
17 | if(!arguments[i + 1](s)) { |
17 | if(!c[i + 1](s)) { |
|
18 | continue; |
18 | continue; |
|
19 | } |
19 | } |
|
20 | m = true; |
20 | m = true; |
|
21 | } |
21 | } |
|
22 | |
22 | |
|
23 | if(!m) { |
23 | if(!m) { |
|
24 | arguments[1](s); |
24 | d(s); |
|
25 | } |
25 | } |
|
26 | }); |
26 | }); |
|
27 | } |
27 | } |
|
28 | if (!Array.prototype.switch) { |
28 | if (!Array.prototype.switch) { |
|
29 | Array.prototype.switch = function() { |
29 | Array.prototype.switch = function() { |
|
30 | wasSwitch(this, arguments[0], arguments.slice(1)); |
30 | wasSwitch(this, arguments[0], arguments.slice(1)); |
|
31 | }; |
31 | }; |
|
32 | } |
32 | } |
|
33 | // jQuery |
33 | // jQuery |
|
34 | if(typeof jQuery === 'function') { |
34 | if(typeof jQuery === 'function') { |
|
35 | $.extend({ |
35 | $.extend({ |
|
36 | switch: wasSwitch |
36 | switch: wasSwitch |
|
37 | }); |
37 | }); |
|
38 | } |
38 | } |
|
39 | |
39 | |
|
40 | /*************************************************************************/ |
40 | /*************************************************************************/ |
|
41 | /* Node.JS package export. */ |
41 | /* Node.JS package export. */ |
|
42 | /*************************************************************************/ |
42 | /*************************************************************************/ |
|
43 | if(typeof module !== 'undefined' && typeof module.exports !== 'undefined') { |
43 | if(typeof module !== 'undefined' && typeof module.exports !== 'undefined') { |
|
44 | module.exports.lambda = { |
44 | module.exports.lambda = { |
|
45 | switch: wasSwitch |
45 | switch: wasSwitch |
|
46 | }; |
46 | }; |
|
47 | } |
47 | } |
|
48 | |
48 | |