Cannon Prototype

by abeisgreat

JavaScript

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];  
               ...