Skip to content

Instantly share code, notes, and snippets.

View marlun78's full-sized avatar

Martin Eneqvist marlun78

View GitHub Profile
@marlun78
marlun78 / once.js
Last active December 23, 2016 07:58
Register a one-time event listener. A little bit like jQuery’s `one`.
/**
* Once
* Copyright (c) 2014 marlun78
* MIT License, https://gist.github.com/marlun78/bd0800cf5e8053ba9f83
*/
/**
* Register a one-time event listener. Something similar to jQuery’s `one`.
*
* NOTE! It doesn’t handle `target.removeEventListener(type, originalListener, useCapture)`.
@marlun78
marlun78 / Number.isFinite.js
Last active February 10, 2017 08:39
Number.isFinite polyfill
/**
* Number.isFinite
* Copyright (c) 2014 marlun78
* MIT License, https://gist.github.com/marlun78/bd0800cf5e8053ba9f83
*
* Spec: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite
*/
if (typeof Number.isFinite !== 'function') {
Number.isFinite = function isFinite(value) {
// 1. If Type(number) is not Number, return false.
@marlun78
marlun78 / $once.js
Last active February 28, 2018 19:19
Angular $rootScope.Scope.$once
/**
* Angular $rootScope.Scope.$once
* Copyright (c) 2014 marlun78
* MIT License, https://gist.github.com/marlun78/bd0800cf5e8053ba9f83
*/
$provide.decorator('$rootScope', function ($delegate) {
var Scope = $delegate.__proto__.constructor;
Scope.prototype.$once = function (name, listener) {
var deregister = this.$on(name, function () {
deregister();
@marlun78
marlun78 / license.txt
Last active November 7, 2018 08:23
MIT License
Copyright (C) 2009-2018 marlun78
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
@marlun78
marlun78 / Class.js
Last active August 29, 2015 14:06
JavaScript prototypal inheritance
/**
* Class.js
* JavaScript prototypal inheritance
* Copyright (c) 2014 marlun78
* MIT License, https://gist.github.com/marlun78/bd0800cf5e8053ba9f83
*
* @example:
* function Person(name) {
* this.name = name;
* }
@marlun78
marlun78 / UniqueMap.js
Last active August 29, 2015 14:06
Provides an immutable enum-like type where both keys and values must be unique.
/**
* UniqueMap.js
* Provides an immutable enum-like type where both keys and values must be unique.
* Copyright (c) 2014 marlun78
* MIT License, https://gist.github.com/marlun78/bd0800cf5e8053ba9f83
*/
(function (undefined) {
'use strict';
@marlun78
marlun78 / Enum.js
Last active August 29, 2015 14:06
Provides an immutable enum type
/**
* Enum.js
* Provides an immutable Enum type
* Copyright (c) 2014 marlun78
* MIT License, https://gist.github.com/marlun78/bd0800cf5e8053ba9f83
*
* @example:
* var colors = new Enum({
* RED: '#f00',
* GREEN: '#0f0',
@marlun78
marlun78 / Intercept.js
Last active August 29, 2015 14:08
Simple meta-programming for methods
/**
* Intercept.js
* Simple meta-programming for methods
* Copyright (c) 2014 marlun78
* MIT License, https://gist.github.com/marlun78/bd0800cf5e8053ba9f83
*
* The intercept-function provides a pre and a post hook that
* will run before and after the original implementation
* respectively. In the pre-hook you have access to the
* arguments passed, and in the post-hook you have access to
@marlun78
marlun78 / toRatio.js
Created May 18, 2015 08:00
Takes a screen dimension and return its ratio as width:height
/**
* toRatio.js
* Copyright (c) 2015 marlun78
* MIT License, https://gist.github.com/marlun78/bd0800cf5e8053ba9f83
*
* Takes a screen dimension and return its ratio as width:height.
*
* @example
* toRatio(1280, 720); //=> 16:9
* toRatio(800, 600); //=> 4:3
@marlun78
marlun78 / me.repeat.js
Created November 20, 2015 14:19
A set of directives that works with ngRepeate
angular.module('me.repeat', [])
.directive('meRepeat', repeatDirective)
.directive('meRepeateven', repeatEvenDirective)
.directive('meRepeatodd', repeatOddDirective)
.directive('meRepeatstart', repeatStartDirective)
.directive('meRepeatmiddle', repeatMiddleDirective)
.directive('meRepeatend', repeatEndDirective);
function repeatDirective() {