77 lines
1.5 KiB
JavaScript
77 lines
1.5 KiB
JavaScript
|
function Queue(asStack){
|
||
|
Object.defineProperties(
|
||
|
this,
|
||
|
{
|
||
|
add:{
|
||
|
enumerable:true,
|
||
|
writable:false,
|
||
|
value:addToQueue
|
||
|
},
|
||
|
next:{
|
||
|
enumerable:true,
|
||
|
writable:false,
|
||
|
value:run
|
||
|
},
|
||
|
clear:{
|
||
|
enumerable:true,
|
||
|
writable:false,
|
||
|
value:clearQueue
|
||
|
},
|
||
|
contents:{
|
||
|
enumerable:false,
|
||
|
get:getQueue,
|
||
|
set:setQueue
|
||
|
},
|
||
|
autoRun:{
|
||
|
enumerable:true,
|
||
|
writable:true,
|
||
|
value:true
|
||
|
},
|
||
|
stop:{
|
||
|
enumerable:true,
|
||
|
writable:true,
|
||
|
value:false
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
|
||
|
var queue=[];
|
||
|
var running=false;
|
||
|
var stop=false;
|
||
|
|
||
|
function clearQueue(){
|
||
|
queue=[];
|
||
|
return queue;
|
||
|
}
|
||
|
|
||
|
function getQueue(){
|
||
|
return queue;
|
||
|
}
|
||
|
|
||
|
function setQueue(val){
|
||
|
queue=val;
|
||
|
return queue;
|
||
|
}
|
||
|
|
||
|
function addToQueue(){
|
||
|
for(var i in arguments){
|
||
|
queue.push(arguments[i]);
|
||
|
}
|
||
|
if(!running && !this.stop && this.autoRun){
|
||
|
this.next();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function run(){
|
||
|
running=true;
|
||
|
if(queue.length<1 || this.stop){
|
||
|
running=false;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
queue.shift().bind(this)();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports=Queue;
|