(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
| import { curry, apply } from 'ramda'; | |
| /** | |
| * Debounce | |
| * | |
| * @param {Boolean} immediate If true run `fn` at the start of the timeout | |
| * @param timeMs {Number} Debounce timeout | |
| * @param fn {Function} Function to debounce | |
| * | |
| * @return {Number} timeout |
| import { format } from 'url'; | |
| import { STATUS_CODES } from 'http'; | |
| import uppercamelcase from 'uppercamelcase'; | |
| class HTTPError extends Error { | |
| constructor(code, message, extras) { | |
| super(message || STATUS_CODES[code]); | |
| if (arguments.length >= 3 && extras) { | |
| Object.assign(this, extras); | |
| } |
| function mapValues(obj, fn) { | |
| return Object.keys(obj).reduce((result, key) => { | |
| result[key] = fn(obj[key], key); | |
| return result; | |
| }, {}); | |
| } | |
| function pick(obj, fn) { | |
| return Object.keys(obj).reduce((result, key) => { | |
| if (fn(obj[key])) { |
(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
| /* http://meyerweb.com/eric/tools/css/reset/ | |
| v2.0 | 20110126 | |
| License: none (public domain) | |
| */ | |
| html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { | |
| margin: 0; | |
| padding: 0; | |
| border: 0; | |
| font-size: 100%; |