You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
3.6 KiB
156 lines
3.6 KiB
1 year ago
|
var identity = function (x) {
|
||
|
return x;
|
||
|
};
|
||
|
|
||
|
var isArray = function (value) {
|
||
|
return $.isArray(value);
|
||
|
};
|
||
|
|
||
|
var isObject = function (value) {
|
||
|
return !isArray(value) && (value instanceof Object);
|
||
|
};
|
||
|
|
||
|
var isNumber = function (value) {
|
||
|
return value instanceof Number;
|
||
|
};
|
||
|
|
||
|
var isFunction = function (value) {
|
||
|
return value instanceof Function;
|
||
|
};
|
||
|
|
||
|
var indexOf = function (object, value) {
|
||
|
return $.inArray(value, object);
|
||
|
};
|
||
|
|
||
|
var inArray = function (array, value) {
|
||
|
return indexOf(array, value) !== -1;
|
||
|
};
|
||
|
|
||
|
var foreach = function (collection, callback) {
|
||
|
for(var i in collection) {
|
||
|
if(collection.hasOwnProperty(i)) {
|
||
|
callback(collection[i], i, collection);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
var last = function (array) {
|
||
|
return array[array.length - 1];
|
||
|
};
|
||
|
|
||
|
var argumentsToArray = function (args) {
|
||
|
return Array.prototype.slice.call(args);
|
||
|
};
|
||
|
|
||
|
var extend = function () {
|
||
|
var extended = {};
|
||
|
foreach(argumentsToArray(arguments), function (o) {
|
||
|
foreach(o, function (val, key) {
|
||
|
extended[key] = val;
|
||
|
});
|
||
|
});
|
||
|
return extended;
|
||
|
};
|
||
|
|
||
|
var mapToArray = function (collection, callback) {
|
||
|
var mapped = [];
|
||
|
foreach(collection, function (value, key, coll) {
|
||
|
mapped.push(callback(value, key, coll));
|
||
|
});
|
||
|
return mapped;
|
||
|
};
|
||
|
|
||
|
var mapToObject = function (collection, callback, keyCallback) {
|
||
|
var mapped = {};
|
||
|
foreach(collection, function (value, key, coll) {
|
||
|
key = keyCallback ? keyCallback(key, value) : key;
|
||
|
mapped[key] = callback(value, key, coll);
|
||
|
});
|
||
|
return mapped;
|
||
|
};
|
||
|
|
||
|
var map = function (collection, callback, keyCallback) {
|
||
|
return isArray(collection) ?
|
||
|
mapToArray(collection, callback) :
|
||
|
mapToObject(collection, callback, keyCallback);
|
||
|
};
|
||
|
|
||
|
var pluck = function (arrayOfObjects, key) {
|
||
|
return map(arrayOfObjects, function (val) {
|
||
|
return val[key];
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var filter = function (collection, callback) {
|
||
|
var filtered;
|
||
|
|
||
|
if(isArray(collection)) {
|
||
|
filtered = [];
|
||
|
foreach(collection, function (val, key, coll) {
|
||
|
if(callback(val, key, coll)) {
|
||
|
filtered.push(val);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
else {
|
||
|
filtered = {};
|
||
|
foreach(collection, function (val, key, coll) {
|
||
|
if(callback(val, key, coll)) {
|
||
|
filtered[key] = val;
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return filtered;
|
||
|
};
|
||
|
|
||
|
var call = function (collection, functionName, args) {
|
||
|
return map(collection, function (object, name) {
|
||
|
return object[functionName].apply(object, args || []);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
//execute callback immediately and at most one time on the minimumInterval,
|
||
|
//ignore block attempts
|
||
|
var throttle = function (minimumInterval, callback) {
|
||
|
var timeout = null;
|
||
|
return function () {
|
||
|
var that = this, args = arguments;
|
||
|
if(timeout === null) {
|
||
|
timeout = setTimeout(function () {
|
||
|
timeout = null;
|
||
|
}, minimumInterval);
|
||
|
callback.apply(that, args);
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
|
||
|
var mixinPubSub = function (object) {
|
||
|
object = object || {};
|
||
|
var topics = {};
|
||
|
|
||
|
object.publish = function (topic, data) {
|
||
|
foreach(topics[topic], function (callback) {
|
||
|
callback(data);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
object.subscribe = function (topic, callback) {
|
||
|
topics[topic] = topics[topic] || [];
|
||
|
topics[topic].push(callback);
|
||
|
};
|
||
|
|
||
|
object.unsubscribe = function (callback) {
|
||
|
foreach(topics, function (subscribers) {
|
||
|
var index = indexOf(subscribers, callback);
|
||
|
if(index !== -1) {
|
||
|
subscribers.splice(index, 1);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
return object;
|
||
|
};
|