Skip to content

Instantly share code, notes, and snippets.

View edgarberm's full-sized avatar
:octocat:
NaN

Edgar Bermejo edgarberm

:octocat:
NaN
View GitHub Profile
@edgarberm
edgarberm / Object.diff.js
Last active July 14, 2016 15:46
Find differences between two objects
const contains = (key, list) => {
return list.indexOf(key) > -1;
}
const diff = (first, second) => {
let firstKeys = Object.keys(first);
let secondKeys = Object.keys(second);
let addition = secondKeys.filter(key => !contains(key, firstKeys))
let deletion = firstKeys.filter(key => !contains(key, secondKeys))
return {addition, deletion}
@edgarberm
edgarberm / isScrolledIntoView.js
Last active April 5, 2016 16:37
Check if element is into view
function isScrolledIntoView (el) {
var elemTop = el.getBoundingClientRect().top;
var elemBottom = el.getBoundingClientRect().bottom;
var isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
return isVisible;
}
@edgarberm
edgarberm / memoize.js
Created March 28, 2016 11:50
Memoization for JavaScript
/*
* memoize.js
* by @philogb and @addyosmani
* with further optimizations by @mathias
* and @DmitryBaranovsk
* perf tests: http://bit.ly/q3zpG3
* Released under an MIT license.
*/
function memoize( fn ) {
return function () {
@edgarberm
edgarberm / ObjectAssign.js
Created November 4, 2015 12:24
For those browsers that don't support Object.assign yet:
if( !Object.assign ) {
Object.assign = function( obj, items ) {
var src = Object( items), target = Object( obj )
Object.getOwnPropertyNames( src ).forEach( function( k ) {
target[ k ] = src[ k ]
})
return target;
}
}
function throttle ( fn, threshhold, scope ) {
threshhold || (threshhold = 250);
var last,
deferTimer;
return function () {
var context = scope || this;
var now = +new Date,
args = arguments;
@edgarberm
edgarberm / everythingIsLoaded.js
Created August 24, 2015 12:28
Check if everything has fully loaded in our document
var everythingIsLoaded = setInterval( function () {
if ( /loaded|complete/.test( document.readyState ) ) {
clearInterval( everythingIsLoaded );
// Initialize our code..
}
}, 10 );
@edgarberm
edgarberm / addClass.js
Created June 10, 2015 09:41
hasClass, addClass, removeClass
Element.prototype.hasClass = Element.prototype.hasClass || function ( className ) {
return new RegExp( ' ' + className + ' ' ).test( ' ' + this.className + ' ' );
};
Element.prototype.addClass = Element.prototype.addClass || function ( className ) {
if ( !this.hasClass( className ) ) {
this.className += ' ' + className;
}
return this;
};
var forEach = function (collection, callback, scope) {
if (Object.prototype.toString.call(collection) === '[object Object]') {
for (var prop in collection) {
if (Object.prototype.hasOwnProperty.call(collection, prop)) {
callback.call(scope, collection[prop], prop, collection);
}
}
} else {
for (var i = 0, len = collection.length; i < len; i++) {
callback.call(scope, collection[i], i, collection);
@edgarberm
edgarberm / isMobile.js
Last active March 18, 2016 07:24
Mobile and tablet detection
var isMobile = (function(a){
return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)
@function prefix ( $property, $prefixes: ( webkit moz o ms ) ) {
$vendor-prefixed-properties: transform background-clip background-size;
$result: ();
@each $prefix in $prefixes {
@if index( $vendor-prefixed-properties, $property ) {
$property: -#{ $prefix }-#{ $property }
}
$result: append($result, $property);
}
@return $result;