File: js/async-pause.js
/**
* @module gallery-async-pause
*/
(function (Y, moduleName) {
'use strict';
var _string__args = '_args',
_string__resumed = '_resumed',
_string_host = 'host',
_string_paused = 'paused',
_false = false,
_true = true,
_DoPrevent = Y.Do.Prevent,
_Plugin = Y.Plugin;
/**
* Asynchronous command runner pause plugin.
* @class AsyncPause
* @extends Plugin.Base
* @namespace Plugin
* @param {Object} config Configuration Object.
*/
_Plugin.AsyncPause = Y.Base.create(moduleName, _Plugin.Base, [], {
initializer: function () {
var me = this;
if (me.get(_string_host).get('mode') === 'queue') {
me.beforeHostMethod('_runQueue', function () {
if (me.get(_string_paused)) {
me._set(_string__args, arguments);
return new _DoPrevent(_string_paused);
}
return null;
});
}
},
/**
* Pause the run. Does not stop a command that is currently running,
* the run will pause before the next command runs.
* @method pause
* @chainable
*/
pause: function () {
return this._set(_string_paused, _true);
},
/**
* Resumes a paused run. If a command is currently running, the paused
* state may not be updated immediately. Resume does nothing if the run
* is not paused or not started yet or already complete.
* @method resume
* @chainable
*/
resume: function () {
var argsChangeListener,
completeListener,
me = this,
args = me.get(_string__args),
host = me.get(_string_host),
runQueue = host._runQueue,
resume = function (args) {
me._setAttrs({
paused: _false,
_args: null,
_resumed: _false
});
runQueue.apply(host, args);
};
if (!me.get(_string_paused) || me.get(_string__resumed)) {
return me;
}
if (!host.get('started') || host.get('completed')) {
me._set(_string_paused, _false);
return me;
}
if (args) {
resume(args);
return me;
}
me._set(_string__resumed, _true);
argsChangeListener = me.once('_argsChange', function (eventFacade) {
completeListener.detach();
resume(eventFacade.newVal);
});
completeListener = host.on('complete', function () {
argsChangeListener.detach();
});
return me;
}
}, {
ATTRS: {
/**
* Boolean value indicating the paused status of the run.
* @attribute paused
* @default false
* @readonly
* @type Boolean
*/
paused: {
readonly: _true,
value: _false
},
/**
* Paused _runQueue arguments.
* @attribute _args
* @protected
* @readonly
* @type Array
*/
_args: {
readOnly: _true,
value: null
},
/**
* Boolean value indicating the resumed status of the run.
* @attribute _resumed
* @protected
* @readonly
* @type Array
*/
_resumed: {
readOnly: _true,
value: _false
}
},
NS: 'pause'
});
}(Y, arguments[1]));