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.
180 lines
3.7 KiB
180 lines
3.7 KiB
/*
|
|
YUI 3.17.2 (build 9c3c78e)
|
|
Copyright 2014 Yahoo! Inc. All rights reserved.
|
|
Licensed under the BSD License.
|
|
http://yuilibrary.com/license/
|
|
*/
|
|
|
|
YUI.add('io-queue', function (Y, NAME) {
|
|
|
|
/**
|
|
Extends IO to implement Queue for synchronous
|
|
transaction processing.
|
|
@module io
|
|
@submodule io-queue
|
|
@for IO
|
|
**/
|
|
var io = Y.io._map['io:0'] || new Y.IO();
|
|
|
|
Y.mix(Y.IO.prototype, {
|
|
/**
|
|
* Array of transactions queued for processing
|
|
*
|
|
* @property _q
|
|
* @private
|
|
* @static
|
|
* @type {Object}
|
|
*/
|
|
_q: new Y.Queue(),
|
|
_qActiveId: null,
|
|
_qInit: false,
|
|
|
|
/**
|
|
* Property to determine whether the queue is set to
|
|
* 1 (active) or 0 (inactive). When inactive, transactions
|
|
* will be stored in the queue until the queue is set to active.
|
|
*
|
|
* @property _qState
|
|
* @private
|
|
* @static
|
|
* @type {Number}
|
|
*/
|
|
_qState: 1,
|
|
|
|
/**
|
|
* Method Process the first transaction from the
|
|
* queue in FIFO order.
|
|
*
|
|
* @method _qShift
|
|
* @private
|
|
* @static
|
|
*/
|
|
_qShift: function() {
|
|
var io = this,
|
|
o = io._q.next();
|
|
|
|
io._qActiveId = o.id;
|
|
io._qState = 0;
|
|
io.send(o.uri, o.cfg, o.id);
|
|
},
|
|
|
|
/**
|
|
* Method for queueing a transaction before the request is sent to the
|
|
* resource, to ensure sequential processing.
|
|
*
|
|
* @method queue
|
|
* @static
|
|
* @return {Object}
|
|
*/
|
|
queue: function(uri, c) {
|
|
var io = this,
|
|
o = { uri: uri, cfg:c, id: this._id++ };
|
|
|
|
if(!io._qInit) {
|
|
Y.on('io:complete', function(id, o) { io._qNext(id); }, io);
|
|
io._qInit = true;
|
|
}
|
|
|
|
io._q.add(o);
|
|
if (io._qState === 1) {
|
|
io._qShift();
|
|
}
|
|
|
|
Y.log('Object queued. Transaction id is' + o.id, 'info', 'io');
|
|
return o;
|
|
},
|
|
|
|
_qNext: function(id) {
|
|
var io = this;
|
|
io._qState = 1;
|
|
if (io._qActiveId === id && io._q.size() > 0) {
|
|
io._qShift();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Method for promoting a transaction to the top of the queue.
|
|
*
|
|
* @method promote
|
|
* @static
|
|
*/
|
|
qPromote: function(o) {
|
|
this._q.promote(o);
|
|
},
|
|
|
|
/**
|
|
* Method for removing a specific, pending transaction from
|
|
* the queue.
|
|
*
|
|
* @method remove
|
|
* @private
|
|
* @static
|
|
*/
|
|
qRemove: function(o) {
|
|
this._q.remove(o);
|
|
},
|
|
|
|
/**
|
|
* Method for cancel all pending transaction from
|
|
* the queue.
|
|
*
|
|
* @method empty
|
|
* @static
|
|
* @since 3.7.3
|
|
*/
|
|
qEmpty: function() {
|
|
this._q = new Y.Queue();
|
|
},
|
|
|
|
qStart: function() {
|
|
var io = this;
|
|
io._qState = 1;
|
|
|
|
if (io._q.size() > 0) {
|
|
io._qShift();
|
|
}
|
|
Y.log('Queue started.', 'info', 'io');
|
|
},
|
|
|
|
/**
|
|
* Method for setting queue processing to inactive.
|
|
* Transaction requests to YUI.io.queue() will be stored in the queue, but
|
|
* not processed until the queue is reset to "active".
|
|
*
|
|
* @method _stop
|
|
* @private
|
|
* @static
|
|
*/
|
|
qStop: function() {
|
|
this._qState = 0;
|
|
Y.log('Queue stopped.', 'info', 'io');
|
|
},
|
|
|
|
/**
|
|
* Method to query the current size of the queue.
|
|
*
|
|
* @method _size
|
|
* @private
|
|
* @static
|
|
* @return {Number}
|
|
*/
|
|
qSize: function() {
|
|
return this._q.size();
|
|
}
|
|
|
|
}, true);
|
|
|
|
function _queue(u, c) {
|
|
return io.queue.apply(io, [u, c]);
|
|
}
|
|
|
|
_queue.start = function () { io.qStart(); };
|
|
_queue.stop = function () { io.qStop(); };
|
|
_queue.promote = function (o) { io.qPromote(o); };
|
|
_queue.remove = function (o) { io.qRemove(o); };
|
|
_queue.size = function () { io.qSize(); };
|
|
_queue.empty = function () { io.qEmpty(); };
|
|
Y.io.queue = _queue;
|
|
|
|
|
|
}, '3.17.2', {"requires": ["io-base", "queue-promote"]});
|
|
|