Skip to content

Instantly share code, notes, and snippets.

@THEtheChad
Last active August 29, 2015 14:02
Show Gist options
  • Save THEtheChad/1d756d9982e087db498e to your computer and use it in GitHub Desktop.
Save THEtheChad/1d756d9982e087db498e to your computer and use it in GitHub Desktop.
window.MAP = function(func){
var data = {}, definition = {}, defaults = {};
MAP.each(MAP._grab_, function(def){
var value = def.getter();
if(value) data[def.key] = value;
});
definition = MAP.find(MAP._map_, function(def){
return MAP.find(def.matches, function(r){
r = MAP.toArray(r);
var match = window.location.href.match(r[0]);
if(match){
if(r[1]) r[1].apply(def.data, match);
return true;
}
});
}) || {data:{}};
data = MAP.extend({}, data, definition.data);
defaults = MAP._fallback_( MAP.extend({},data) );
func(MAP.extend({}, data, defaults));
}
MAP._grab_ = [];
MAP._map_ = [];
MAP._fallback_ = function(){return {}};
MAP.each = function(list, func){
var l = list.length, i;
for(i = 0; i < l; i++){
func(list[i], i, list);
}
};
MAP.find = function(list, func){
var l = list.length, i;
for(i = 0; i < l; i++){
if(func(list[i], i, list)) return list[i];
}
};
MAP.toArray = function(obj){
if(!(obj instanceof Array)) obj = [obj];
return obj;
};
MAP.extend = function(trgt){
var args = [].slice.call(arguments), i = args.length, src, k;
while(i--){
var src = args[i];
for(k in src){
trgt[k] = src[k];
}
}
return trgt;
};
MAP.add = function(obj){
MAP._map_.push(obj);
};
MAP.getter = function(name, func){
MAP._grab_.push({
key: name,
getter: func
});
};
MAP.fallback = function(func){
MAP._fallback_ = func;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment