Skip to content

Instantly share code, notes, and snippets.

@abeisgoat
Last active January 2, 2016 19:09
Show Gist options
  • Save abeisgoat/8348455 to your computer and use it in GitHub Desktop.
Save abeisgoat/8348455 to your computer and use it in GitHub Desktop.
A hacked up idea for Cannon.js
var Cannon = function (url) {
this.url = url;
this.reloaderStrs = {};
this.projectileStr = "*";
this.rawData = [];
this.fetches = 0;
this.delayInt = 0;
var self = this;
this.fire = function (callback) {
self._fetch(callback);
return self;
};
this.reload = function (reloaderStrs) {
self.reloaderStrs = reloaderStrs;
return self;
};
this.limit = function (limit) {
self.limitInt = limit;
return self;
};
this.delay = function (delayInt) {
self.delayInt = delayInt;
return self;
};
this.projectile = function (projectileStr) {
self.projectileStr = projectileStr;
return self;
};
this.recoil = function (target) {
return self._getField(self.rawData, self.projectileStr, target);
};
this._fetch = function (callback, projectileBlob, queryData) {
if (self.limitInt && self.fetches++ == self.limitInt) {
callback(projectileBlob, self);
return;
}
queryData = queryData? queryData: {};
$.get(self.url, queryData, function (data) {
self.rawData.push(data);
var projectilePartial = self._getField([data], self.projectileStr);
if (self._isArray(projectilePartial)) {
if (!projectileBlob) {
projectileBlob = [];
}
for (var p = 0; p<projectilePartial.length; p++) {
projectileBlob.push(projectilePartial[p]);
}
}
var reloaders = {};
var hasReloader = false;
for (var reloaderKey in self.reloaderStrs) {
var reloader = self.reloaderStrs[reloaderKey];
reloaders[reloaderKey] = self._getField([data], self.reloaderStrs[reloaderKey])[0];
hasReloader = reloaders[reloaderKey] || hasReloader;
}
if (hasReloader) {
setTimeout(function () {
self._fetch(callback, projectileBlob, reloaders);
}, self.delayInt);
}else{
callback(projectileBlob, self);
return;
}
});
};
this._getField = function (pools, fieldsStr, target) {
var fields = fieldsStr.split('.');
var targets = [];
for (var f=0; f<fields.length; f++) {
var field = fields[f];
var newPools = [];
for (var p=0; p<pools.length; p++) {
var pool = pools[p];
if (field == "*") {
if (self._isArray(pools)) {
for (var child=0; child<pool.length; child++) {
newPools.push(pool[child]);
if (pool[child] == target) {
targets.push(pool);
}
}
}
else {
for (var child in pool) {
newPools.push(pool[child]);
if (pool[child] == target) {
targets.push(pool);
}
}
}
}
else if (pool[field]) {
newPools.push(pool[field]);
if (pool[field] == target) {
targets.push(pool);
}
}
}
pools = newPools;
}
if (target) {
return targets;
}else{
return pools;
}
};
this._isArray = function (obj) {
return toString.call(obj) == '[object Array]';
};
return this;
};
(new Cannon("http://api.reddit.com/user/abeisgreat/comments.json")).projectile("data.children.*.data.subreddit").delay(100).fire(function (projectile, cannon) {
console.log("Caught projectile");
console.log(projectile);
var posts = cannon.recoil("PixelArt");
for (var postIndex in posts) {
var post = posts[postIndex];
console.log(post.body);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment