Skip to content

Instantly share code, notes, and snippets.

@bencrouse
Created September 23, 2010 16:25
Show Gist options
  • Save bencrouse/593918 to your computer and use it in GitHub Desktop.
Save bencrouse/593918 to your computer and use it in GitHub Desktop.
(function($) {
// Arrays
$.inject = function(array, memo, fn) {
for(var i = 0; i < array.length; i++)
memo = fn(memo, array[i]);
return memo;
};
$.flatten = function(array) {
return $.inject(array, [], function(memo, value) {
return memo.concat($.isArray(value) ? $.flatten(value) : [value]);
});
};
$.select = function(array, fn) {
var returns = [];
for(var i = 0; i < array.length; i++)
fn(array[i], i) && returns.push(array[i]);
return returns;
}
$.compact = function(array) {
return $.select(array, function(value) { return !!value; });
}
$.uniq = function(array) {
return $.inject(array, [], function(arr, val) {
if ($.inArray(val, arr) === -1) { arr.push(val); }
return arr;
});
}
// Functions
$.curry = function() {
var argsArray = Array.prototype.slice.call(arguments),
fn = argsArray.shift();
return function() {
return fn.apply(this, argsArray.concat(Array.prototype.slice.call(arguments)));
};
};
$.args = {
extractOptions: function(args) {
args = Array.prototype.slice.call(args);
if (args.length) {
for(var i = args.length; i >= 0; i--) {
if ($.isPlainObject(args[i])) {
return args[i];
}
}
}
return {};
},
extractNonOptions: function(args) {
args = Array.prototype.slice.call(args);
return $.select(args, function(arg, i) {
return !($.isPlainObject(arg) && i === (args.length - 1));
});
}
};
// Objects
function map(obj, fn) {
var returns = [];
$.each(obj, function() {
var argsArray = Array.prototype.slice.call(arguments);
returns.push(fn.apply(this, argsArray));
});
return returns;
}
$.obj = {
map: map,
keysFor: function(obj) {
return map(obj, function(property) { return property; });
},
valuesFor: function(obj) {
return map(obj, function(property, value) { return value; });
}
};
// jQuery
$.coalesce = function() {
var argsArray = Array.prototype.slice.call(arguments),
returnValue = null;
$.each(argsArray, function() {
var $tmp = $(this);
if(!returnValue && $tmp.length)
returnValue = $tmp;
});
return returnValue;
};
// String
$.supplant = function(template, data) {
return template.replace(/{([^{}]*)}/g,
function (a, b) {
var r = data[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
$.w = function(string) { return string.split(' '); };
$.pluralize = function(count, singular, plural) {
return [
count || 0,
' ',
count === 1 || count.match(/^1(\.0+)?$/) ?
singular :
plural
].join('');
};
// Namespace
$.namespace = function(name) {
var namespaces = name.split('.');
return $.inject(namespaces, null, function(lastNamespace, currentNamespace) {
lastNamespace = lastNamespace || window;
lastNamespace[currentNamespace] = lastNamespace[currentNamespace] || {};
return lastNamespace[currentNamespace];
});
}
// Event
$.delay = (function() {
var timers = {};
return function(callback, time) {
clearTimeout(timers[callback]);
timers[callback] = setTimeout(callback, time);
}
})();
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment