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;
 |