Skip to content

Instantly share code, notes, and snippets.

View wkronemeijer's full-sized avatar
🧼

Wessel Kronemeijer wkronemeijer

🧼
  • 23:22 (UTC +02:00)
View GitHub Profile
@wkronemeijer
wkronemeijer / value
Created June 13, 2015 15:15
Creating value types with minimal boilerplate
// Sometimes you'll need a value type; for representing a point, or other values
// which are fully defined after construction. If we take the example of a point:
class Point {
constructor(public x: number, public y: number) {
return Object.freeze(this);
}
}
let p = new Point(3, 4);
@wkronemeijer
wkronemeijer / iter.js
Last active August 29, 2015 14:25
Python-like iterators for using .next() in a sequence
this.iter = function iter(array) {
var copy = array.slice();
var i = 0;
var max = copy.length - 1;
var next = function next() {
var index = i
i += 1
if (index > max) {
@wkronemeijer
wkronemeijer / columnindex.ts
Created November 14, 2015 18:28
Turning a column name into a number for indexing in the range [1, →)
function parseHeader(letters: string): number {
function letterValue(letter: string): number {
return parseInt(letter, 36) - 9
}
let result = 0
let factor = 1
if (letters.length === 1) {
result = letterValue(letters[0])
@wkronemeijer
wkronemeijer / Array#contains
Created October 17, 2013 16:21
Array utility
Array.prototype.contains = function(element) {
return this.indexOf(element) !== -1;
};
@wkronemeijer
wkronemeijer / class inspector replacements
Created October 17, 2013 19:23
jQuery replacement functions
function hasClass(element, class_name) {
return element.classList.contains(class_name);
}
function addClass(element, class_name) {
if (!hasClass(element, class_name)) {
element.classList.add(class_name)
};
}
@wkronemeijer
wkronemeijer / KeyboardController
Last active December 26, 2015 00:09
Key timer function for reliable input, for use in games and similiar. Originally not mine, but this version uses `addEventListener`.
function KeyboardController(keys, repeat) {
var timers = {};
document.addEventListener('keydown', function(event) {
var key = event.keyCode;
if (!(key in keys))
return true;
if (!(key in timers)) {
timers[key] = null;
keys[key](event);
@wkronemeijer
wkronemeijer / augment
Last active December 26, 2015 01:39
Replace function with a new function, whilst still calling the original function.
function augment(obj, function_name, new_function) {
var original = obj[function_name];
obj[function_name] = function () {
new_function.bind(this, original).apply(this, arguments);
original.bind(this).apply(this, arguments);
};
}
@wkronemeijer
wkronemeijer / Array#remove
Created October 23, 2013 15:20
Removes all instances of a element in an array
Array.prototype.remove = function (element) {
while (this.contains(element)) {
this.splice(this.indexOf(element), 1);
}
}
@wkronemeijer
wkronemeijer / assert
Created October 23, 2013 15:20
assertions for debugging activities
window.assert = function assert(condition) {
if (!condition) {
debugger;
};
};
@wkronemeijer
wkronemeijer / call_super
Created October 23, 2013 15:22
super for any object with a prototype chain; usage: call_super(this, 'method')('hello', 'world')
window.call_super = function call_super(obj, name) {
var super_class = Object.getPrototypeOf(Object.getPrototypeOf(obj));
return (function () {
super_class[name].apply(obj, arguments);
})
}