JSFiddle - React, Tailwind, and code Playground
by knrm720
HTML
<script src="https://rawgit.com/CrossEye/ramda/a0693715a6fdc2fe7a4952aefcecb830b054092e/ramda.js"></script>
<pre><code id="output"></code></pre>
<script>
var log = (function() {
var o = document.getElementById("output");
return function(obj) {o.innerHTML += "\n" + JSON.stringify(obj, null, 4);}
}());
var tasks = [
{username: 'Michael', title: 'Curry stray functions', dueDate: '2014-05-06',
complete: true, effort: 'low', priority: 'low'},
{username: 'Scott', title: 'Add `fork` function', dueDate: '2014-05-14',
complete: true, effort: 'low', priority: 'low'},
{username: 'Michael', title: 'Write intro doc', dueDate: '2014-05-16',
complete: true, effort: 'low', priority: 'low'},
{username: 'Michael', title: 'Add modulo function', dueDate: '2014-05-17',
complete: false, effort: 'low', priority: 'low'},
{username: 'Michael', title: 'Separating generators', dueDate: '2014-05-24',
complete: false, effort: 'medium', priority: 'medium'},
{username: 'Scott', title: 'Fold algebra branch back in', dueDate: '2014-06-01',
complete: false, effort: 'low', priority: 'low'},
{username: 'Scott', title: 'Fix `and`/`or`/`not`', dueDate: '2014-06-05',
complete: false, effort: 'low', priority: 'low'},
{username: 'Michael', title: 'Types infrastucture', dueDate: '2014-06-06',
complete: false, effort: 'medium', priority: 'high'},
{username: 'Scott', title: 'Add `mapObj`', dueDate: '2014-06-09',
complete: false, effort: 'low', priority: 'medium'},
{username: 'Scott', title: 'Write using doc', dueDate: '2014-06-11',
complete: false, effort: 'medium', priority: 'high'},
{username: 'Michael', title: 'Finish algebraic types', dueDate: '2014-06-15',
complete: false, effort: 'high', priority: 'high'},
{username: 'Scott', title: 'Determine versioning...
JavaScript
(function(R) {
var incomplete = R.filter(R.where({complete: false}));
var sortByDate = R.sortBy(R.prop('dueDate'));
var sortByDateDescend = R.compose(R.reverse, sortByDate);
var importantFields = R.project(['title', 'dueDate']);
var groupByUser = R.partition(R.prop('username'));
var activeByUser = R.compose(groupByUser, incomplete);
var gloss = R.compose(importantFields, R.take(5), sortByDateDescend);
var topData = R.compose(gloss, incomplete);
var topDataAllUsers = R.compose(R.mapObj(gloss), activeByUser);
var byUser = R.use(R.filter).over(R.propEq("username"));
log("Gloss for Scott:");
log(topData(byUser("Scott", tasks)));
log("====================");
log("Gloss for everyone:");
log(topDataAllUsers(tasks));
}(ramda));