Skip to content

Instantly share code, notes, and snippets.

@ashanbrown
Forked from maccman/jquery.ajax.queue.coffee
Last active August 29, 2015 14:02
Show Gist options
  • Save ashanbrown/1ad9ab33971b64fe6fef to your computer and use it in GitHub Desktop.
Save ashanbrown/1ad9ab33971b64fe6fef to your computer and use it in GitHub Desktop.

Revisions

  1. ashanbrown revised this gist Jul 21, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion jquery.ajax.queue.coffee
    Original file line number Diff line number Diff line change
    @@ -41,7 +41,7 @@ remove = (name, options) ->
    list = queue(name)

    for [value, _], i in list.entries when value is options
    list.splice(i, 1)
    list.entries.splice(i, 1)
    break

    $.ajaxTransport '+*', (options) ->
  2. ashanbrown revised this gist Jun 9, 2014. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions jquery.ajax.queue.coffee
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,7 @@ next = (name, done) ->
    list = queue(name)

    if done
    queues(name).running--
    queue(name).running--

    unless list.entries.length
    return
    @@ -22,7 +22,7 @@ next = (name, done) ->

    list.entries.shift()

    queues(name).running++
    queue(name).running++

    $.ajax(options)
    .always(-> next(name, true))
  3. ashanbrown revised this gist Jun 9, 2014. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions jquery.ajax.queue.coffee
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,7 @@ next = (name, done) ->
    list = queue(name)

    if done
    queues[name].running--
    queues(name).running--

    unless list.entries.length
    return
    @@ -22,7 +22,7 @@ next = (name, done) ->

    list.entries.shift()

    queues[name].running++
    queues(name).running++

    $.ajax(options)
    .always(-> next(name, true))
  4. ashanbrown revised this gist Jun 5, 2014. 1 changed file with 31 additions and 24 deletions.
    55 changes: 31 additions & 24 deletions jquery.ajax.queue.coffee
    Original file line number Diff line number Diff line change
    @@ -1,39 +1,46 @@
    $ = jQuery

    queues = {}
    running = false

    queue = (name) ->
    name = 'default' if name is true
    queues[name] or= []
    queues[name] or= {entries: [], running: 0}

    next = (name) ->
    next = (name, done) ->
    list = queue(name)

    unless list.length
    running = false
    if done
    queues[name].running--

    unless list.entries.length
    return

    [options, deferred] = list.entries[0]

    if list.running >= (options.queueMaxConcurrency || 1)
    return

    [options, deferred] = list.shift()
    list.entries.shift()

    queues[name].running++

    $.ajax(options)
    .always(-> next(name))
    .done(-> deferred.resolve(arguments...))
    .fail(-> deferred.reject(arguments...))
    .always(-> next(name, true))
    .done(-> deferred.resolve(arguments...))
    .fail(-> deferred.reject(arguments...))

    push = (name, options) ->
    list = queue(name)
    deferred = $.Deferred()

    list.push([options, deferred])
    next(name) unless running
    running = true
    list.entries.push([options, deferred])
    next(name)
    deferred.promise()

    remove = (name, options) ->
    list = queue(name)

    for [value, _], i in list when value is options
    for [value, _], i in list.entries when value is options
    list.splice(i, 1)
    break

    @@ -45,17 +52,17 @@ $.ajaxTransport '+*', (options) ->

    send: (headers, complete) ->
    push(options.queue, queuedOptions)
    .done (data, textStatus, jqXHR) ->
    complete(jqXHR.status,
    jqXHR.statusText,
    text: jqXHR.responseText,
    jqXHR.getAllResponseHeaders())

    .fail (jqXHR, textStatus, errorThrown) ->
    complete(jqXHR.status,
    jqXHR.statusText,
    text: jqXHR.responseText,
    jqXHR.getAllResponseHeaders())
    .done (data, textStatus, jqXHR) ->
    complete(jqXHR.status,
    jqXHR.statusText,
    text: jqXHR.responseText,
    jqXHR.getAllResponseHeaders())

    .fail (jqXHR, textStatus, errorThrown) ->
    complete(jqXHR.status,
    jqXHR.statusText,
    text: jqXHR.responseText,
    jqXHR.getAllResponseHeaders())

    abort: ->
    remove(options.queue, queuedOptions)
  5. @maccman maccman revised this gist Jul 12, 2013. 2 changed files with 2 additions and 2 deletions.
    2 changes: 1 addition & 1 deletion jquery.ajax.queue.coffee
    Original file line number Diff line number Diff line change
    @@ -19,7 +19,7 @@ next = (name) ->
    $.ajax(options)
    .always(-> next(name))
    .done(-> deferred.resolve(arguments...))
    .fail(-> deferred.error(arguments...))
    .fail(-> deferred.reject(arguments...))

    push = (name, options) ->
    list = queue(name)
    2 changes: 1 addition & 1 deletion jquery.ajax.queue.js
    Original file line number Diff line number Diff line change
    @@ -29,7 +29,7 @@
    }).done(function() {
    return deferred.resolve.apply(deferred, arguments);
    }).fail(function() {
    return deferred.error.apply(deferred, arguments);
    return deferred.reject.apply(deferred, arguments);
    });
    };

  6. @maccman maccman revised this gist Jun 16, 2013. 1 changed file with 81 additions and 73 deletions.
    154 changes: 81 additions & 73 deletions jquery.ajax.queue.js
    Original file line number Diff line number Diff line change
    @@ -1,83 +1,91 @@
    var $, next, push, queue, queues, remove, running;
    // Generated by CoffeeScript 1.6.2
    (function() {
    var $, next, push, queue, queues, remove, running;

    $ = jQuery;
    $ = jQuery;

    queues = {};
    queues = {};

    running = false;
    running = false;

    queue = function(name) {
    if (name === true) {
    name = 'default';
    }
    return queues[name] || (queues[name] = []);
    };
    queue = function(name) {
    if (name === true) {
    name = 'default';
    }
    return queues[name] || (queues[name] = []);
    };

    next = function(name) {
    var deferred, list, options, _ref;
    list = queue(name);
    if (!list.length) {
    running = false;
    return;
    }
    _ref = list.shift(), options = _ref[0], deferred = _ref[1];
    return $.ajax(options).always(function() {
    return next(name);
    }).done(function() {
    return deferred.resolve.apply(deferred, arguments);
    }).fail(function() {
    return deferred.error.apply(deferred, arguments);
    });
    };
    next = function(name) {
    var deferred, list, options, _ref;

    list = queue(name);
    if (!list.length) {
    running = false;
    return;
    }
    _ref = list.shift(), options = _ref[0], deferred = _ref[1];
    return $.ajax(options).always(function() {
    return next(name);
    }).done(function() {
    return deferred.resolve.apply(deferred, arguments);
    }).fail(function() {
    return deferred.error.apply(deferred, arguments);
    });
    };

    push = function(name, options) {
    var deferred, list;
    list = queue(name);
    deferred = $.Deferred();
    list.push([options, deferred]);
    if (!running) {
    next(name);
    }
    running = true;
    return deferred.promise();
    };
    push = function(name, options) {
    var deferred, list;

    remove = function(name, options) {
    var i, list, value, _, _i, _len, _ref, _results;
    list = queue(name);
    _results = [];
    for (i = _i = 0, _len = list.length; _i < _len; i = ++_i) {
    _ref = list[i], value = _ref[0], _ = _ref[1];
    if (!(value === options)) {
    continue;
    list = queue(name);
    deferred = $.Deferred();
    list.push([options, deferred]);
    if (!running) {
    next(name);
    }
    list.splice(i, 1);
    break;
    }
    return _results;
    };
    running = true;
    return deferred.promise();
    };

    remove = function(name, options) {
    var i, list, value, _, _i, _len, _ref, _results;

    $.ajaxTransport('+*', function(options) {
    var queuedOptions;
    if (options.queue) {
    queuedOptions = $.extend({}, options);
    queuedOptions.queue = false;
    queuedOptions.processData = false;
    return {
    send: function(headers, complete) {
    return push(options.queue, queuedOptions).done(function(data, textStatus, jqXHR) {
    return complete(jqXHR.status, jqXHR.statusText, {
    text: jqXHR.responseText
    }, jqXHR.getAllResponseHeaders());
    }).fail(function(jqXHR, textStatus, errorThrown) {
    return complete(jqXHR.status, jqXHR.statusText, {
    text: jqXHR.responseText
    }, jqXHR.getAllResponseHeaders());
    });
    },
    abort: function() {
    return remove(options.queue, queuedOptions);
    list = queue(name);
    _results = [];
    for (i = _i = 0, _len = list.length; _i < _len; i = ++_i) {
    _ref = list[i], value = _ref[0], _ = _ref[1];
    if (!(value === options)) {
    continue;
    }
    };
    }
    });
    list.splice(i, 1);
    break;
    }
    return _results;
    };

    $.ajaxTransport('+*', function(options) {
    var queuedOptions;

    if (options.queue) {
    queuedOptions = $.extend({}, options);
    queuedOptions.queue = false;
    queuedOptions.processData = false;
    return {
    send: function(headers, complete) {
    return push(options.queue, queuedOptions).done(function(data, textStatus, jqXHR) {
    return complete(jqXHR.status, jqXHR.statusText, {
    text: jqXHR.responseText
    }, jqXHR.getAllResponseHeaders());
    }).fail(function(jqXHR, textStatus, errorThrown) {
    return complete(jqXHR.status, jqXHR.statusText, {
    text: jqXHR.responseText
    }, jqXHR.getAllResponseHeaders());
    });
    },
    abort: function() {
    return remove(options.queue, queuedOptions);
    }
    };
    }
    });

    }).call(this);
  7. @maccman maccman created this gist Jun 16, 2013.
    61 changes: 61 additions & 0 deletions jquery.ajax.queue.coffee
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    $ = jQuery

    queues = {}
    running = false

    queue = (name) ->
    name = 'default' if name is true
    queues[name] or= []

    next = (name) ->
    list = queue(name)

    unless list.length
    running = false
    return

    [options, deferred] = list.shift()

    $.ajax(options)
    .always(-> next(name))
    .done(-> deferred.resolve(arguments...))
    .fail(-> deferred.error(arguments...))

    push = (name, options) ->
    list = queue(name)
    deferred = $.Deferred()

    list.push([options, deferred])
    next(name) unless running
    running = true
    deferred.promise()

    remove = (name, options) ->
    list = queue(name)

    for [value, _], i in list when value is options
    list.splice(i, 1)
    break

    $.ajaxTransport '+*', (options) ->
    if options.queue
    queuedOptions = $.extend({}, options)
    queuedOptions.queue = false
    queuedOptions.processData = false

    send: (headers, complete) ->
    push(options.queue, queuedOptions)
    .done (data, textStatus, jqXHR) ->
    complete(jqXHR.status,
    jqXHR.statusText,
    text: jqXHR.responseText,
    jqXHR.getAllResponseHeaders())

    .fail (jqXHR, textStatus, errorThrown) ->
    complete(jqXHR.status,
    jqXHR.statusText,
    text: jqXHR.responseText,
    jqXHR.getAllResponseHeaders())

    abort: ->
    remove(options.queue, queuedOptions)
    83 changes: 83 additions & 0 deletions jquery.ajax.queue.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,83 @@
    var $, next, push, queue, queues, remove, running;

    $ = jQuery;

    queues = {};

    running = false;

    queue = function(name) {
    if (name === true) {
    name = 'default';
    }
    return queues[name] || (queues[name] = []);
    };

    next = function(name) {
    var deferred, list, options, _ref;
    list = queue(name);
    if (!list.length) {
    running = false;
    return;
    }
    _ref = list.shift(), options = _ref[0], deferred = _ref[1];
    return $.ajax(options).always(function() {
    return next(name);
    }).done(function() {
    return deferred.resolve.apply(deferred, arguments);
    }).fail(function() {
    return deferred.error.apply(deferred, arguments);
    });
    };

    push = function(name, options) {
    var deferred, list;
    list = queue(name);
    deferred = $.Deferred();
    list.push([options, deferred]);
    if (!running) {
    next(name);
    }
    running = true;
    return deferred.promise();
    };

    remove = function(name, options) {
    var i, list, value, _, _i, _len, _ref, _results;
    list = queue(name);
    _results = [];
    for (i = _i = 0, _len = list.length; _i < _len; i = ++_i) {
    _ref = list[i], value = _ref[0], _ = _ref[1];
    if (!(value === options)) {
    continue;
    }
    list.splice(i, 1);
    break;
    }
    return _results;
    };

    $.ajaxTransport('+*', function(options) {
    var queuedOptions;
    if (options.queue) {
    queuedOptions = $.extend({}, options);
    queuedOptions.queue = false;
    queuedOptions.processData = false;
    return {
    send: function(headers, complete) {
    return push(options.queue, queuedOptions).done(function(data, textStatus, jqXHR) {
    return complete(jqXHR.status, jqXHR.statusText, {
    text: jqXHR.responseText
    }, jqXHR.getAllResponseHeaders());
    }).fail(function(jqXHR, textStatus, errorThrown) {
    return complete(jqXHR.status, jqXHR.statusText, {
    text: jqXHR.responseText
    }, jqXHR.getAllResponseHeaders());
    });
    },
    abort: function() {
    return remove(options.queue, queuedOptions);
    }
    };
    }
    });