Skip to content

Instantly share code, notes, and snippets.

@FeliciousX
Created April 22, 2017 18:33
Show Gist options
  • Save FeliciousX/b74dfb338d0b8dc8e3e8334085986042 to your computer and use it in GitHub Desktop.
Save FeliciousX/b74dfb338d0b8dc8e3e8334085986042 to your computer and use it in GitHub Desktop.
esnextbin sketch
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<button>Click me</button>
</body>
</html>
import xs from "xstream"
import delay from "xstream/extra/delay"
import fromEvent from 'xstream/extra/fromEvent'
const bufferAsArray = period => stream => {
const trigger = xs.periodic(period)
return trigger
.compose(delay(0))
.map(() => stream.fold((xs, x) => [...xs, x], []).endWhen(trigger).last())
.flatten()
.filter( x => x.length > 0 )
}
fromEvent( document.querySelector('button'), 'click')
.compose(bufferAsArray(500))
.map( clicks => `clicked ${clicks.length} times`)
.take(5)
.subscribe({
next: console.log,
complete: console.log.bind(console, "end")
})
{
"name": "esnextbin-sketch",
"version": "0.0.0",
"dependencies": {
"xstream": "10.5.0",
"babel-runtime": "6.23.0"
}
}
"use strict";
var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray");
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _xstream = require("xstream");
var _xstream2 = _interopRequireDefault(_xstream);
var _delay = require("xstream/extra/delay");
var _delay2 = _interopRequireDefault(_delay);
var _fromEvent = require("xstream/extra/fromEvent");
var _fromEvent2 = _interopRequireDefault(_fromEvent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var bufferAsArray = function bufferAsArray(period) {
return function (stream) {
var trigger = _xstream2.default.periodic(period);
return trigger.compose((0, _delay2.default)(0)).map(function () {
return stream.fold(function (xs, x) {
return [].concat((0, _toConsumableArray3.default)(xs), [x]);
}, []).endWhen(trigger).last();
}).flatten().filter(function (x) {
return x.length > 0;
});
};
};
(0, _fromEvent2.default)(document.querySelector('button'), 'click').compose(bufferAsArray(500)).map(function (clicks) {
return "clicked " + clicks.length + " times";
}).take(5).subscribe({
next: console.log,
complete: console.log.bind(console, "end")
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment