Skip to content

Instantly share code, notes, and snippets.

View branneman's full-sized avatar

Bran van der Meer branneman

View GitHub Profile
@branneman
branneman / index.html
Last active September 27, 2016 11:49
Conditioner.js bootstrap with JavaScript Mustard Cut & Polyfill loading
<!doctype html>
<html>
<head>
...
<script>
(function(d){
if (!('querySelector' in d && 'addEventListener' in window)) return;
d.documentElement.className += ' has-js';
d.addEventListener('DOMContentLoaded', function() {
var s = d.createElement('script');
@branneman
branneman / detects-flexbox.js
Last active May 12, 2016 09:14
Feature detect Flexbox support with JavaScript
define(function() {
var cssomPrefixes = 'Moz O ms Webkit'.split(' ');
var modElem = {
elem: document.createElement('modernizr')
};
var mStyle = {
style: modElem.elem.style
};
var gulp = require('gulp');
require('./tasks-css');
require('./tasks-js');
// etc.
gulp.task('dev', ['browsersync', 'html-watch', 'img-watch', 'css-watch', 'js-watch']);
gulp.task('dist', ['clean', 'html-compile', 'img-optimize', 'css-compile', 'js-transpile']);
// etc.
@branneman
branneman / ramda-generate-since-docblock.js
Last active October 9, 2015 06:34
Ramda - Generate @SInCE docblock tags
var R = require('ramda');
var IO = require('ramda-fantasy').IO;
var Either = require('ramda-fantasy').Either;
var glob = require('glob');
var exec = cmd => require('child_process').execSync(cmd, { encoding: 'utf8' });
// getFiles :: IO [String]
var getFiles = () => new IO(() => glob.sync('src/*.js'));
@branneman
branneman / composition.js
Last active April 15, 2018 19:51
OO JavaScript: Inheritance vs. Composition
//
// hasPosition trait
//
const hasPosition = state => ({
setPosition: function(x, y) {
this.x = x;
this.y = y;
}.bind(state)
});
@branneman
branneman / asyncParallel.js
Last active June 4, 2021 01:19
Node.js callback style; run multiple async tasks in parallel
var asyncParallel = function(tasks, callback) {
var results = [];
var count = tasks.length;
tasks.forEach(function(task, index) {
task(function(err, data) {
results[index] = data;
if (err) {
callback && callback(err);
callback = null;
}
@branneman
branneman / functional-composition-with-functor-map.js
Last active October 29, 2015 13:11
Functional Composition through functor map
// add :: Number -> Number -> Number
var add = function(left) { return function(right) { return left + right } };
// multiply :: Number -> Number -> Number
var multiply = function(left) { return function(right) { return left * right } };
// map :: (a -> b) -> Functor a -> Functor b
var map = function(fn, val) { return val.map(fn) };
//
@branneman
branneman / prototypal-inheritance.js
Last active October 18, 2021 06:18
ES3 & ES5 — Prototypal Inheritance
/**
* Parent
*/
function Shape(x, y) {
this.x = x;
this.y = y;
}
Shape.prototype.constructor = Shape;
Shape.prototype.pos = function() {
return [this.x, this.y];
@branneman
branneman / scale.js
Last active November 26, 2015 06:35
Map a value in a range to another range
/**
* Map a value in a domain to a value in a range
*/
function scale(domainMin, domainMax, value, rangeMin, rangeMax) {
var perc = (value - domainMin) / (domainMax - domainMin)
return ((rangeMax - rangeMin) * perc) + rangeMin
}
scale(50, 100, 75, 100, 200) //=> 150
scale(10, 110, 50, 200, 300) //=> 240
@branneman
branneman / javascript-duck-typing.js
Last active January 22, 2021 20:56
JavaScript Duck typing vs. Interfaces
// Factory
var encrypterFactory = function(config) {
var encrypter = eval('new Encrypt' + config.algorithm.toUpperCase());
if (typeof encrypter.encrypt !== 'function') {
throw new Error(encrypter.constructor.name + ' must implement the `encrypt` method!');
}
return encrypter;
};
// Implementations