75 lines
1.5 KiB
JavaScript
75 lines
1.5 KiB
JavaScript
function Queue(){
|
|
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)();
|
|
}
|
|
}
|