Created
September 23, 2010 16:25
-
-
Save bencrouse/593918 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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