Last active
January 2, 2016 19:09
-
-
Save abeisgoat/8348455 to your computer and use it in GitHub Desktop.
A hacked up idea for Cannon.js
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
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