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.
		
		
		
		
			
				
					75 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					75 lines
				
				1.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								function Stack(){
							 | 
						||
| 
								 | 
							
								    Object.defineProperties(
							 | 
						||
| 
								 | 
							
								        this,
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            add:{
							 | 
						||
| 
								 | 
							
								                enumerable:true,
							 | 
						||
| 
								 | 
							
								                writable:false,
							 | 
						||
| 
								 | 
							
								                value:addToStack
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            next:{
							 | 
						||
| 
								 | 
							
								                enumerable:true,
							 | 
						||
| 
								 | 
							
								                writable:false,
							 | 
						||
| 
								 | 
							
								                value:run
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            clear:{
							 | 
						||
| 
								 | 
							
								                enumerable:true,
							 | 
						||
| 
								 | 
							
								                writable:false,
							 | 
						||
| 
								 | 
							
								                value:clearStack
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            contents:{
							 | 
						||
| 
								 | 
							
								                enumerable:false,
							 | 
						||
| 
								 | 
							
								                get:getStack,
							 | 
						||
| 
								 | 
							
								                set:setStack
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            autoRun:{
							 | 
						||
| 
								 | 
							
								                enumerable:true,
							 | 
						||
| 
								 | 
							
								                writable:true,
							 | 
						||
| 
								 | 
							
								                value:true
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            stop:{
							 | 
						||
| 
								 | 
							
								                enumerable:true,
							 | 
						||
| 
								 | 
							
								                writable:true,
							 | 
						||
| 
								 | 
							
								                value:false
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var stack=[];
							 | 
						||
| 
								 | 
							
								    var running=false;
							 | 
						||
| 
								 | 
							
								    var stop=false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function clearStack(){
							 | 
						||
| 
								 | 
							
								        stack=[];
							 | 
						||
| 
								 | 
							
								        return stack;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function getStack(){
							 | 
						||
| 
								 | 
							
								        return stack;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function setStack(val){
							 | 
						||
| 
								 | 
							
								        stack=val;
							 | 
						||
| 
								 | 
							
								        return stack;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function addToStack(){
							 | 
						||
| 
								 | 
							
								        for(var i in arguments){
							 | 
						||
| 
								 | 
							
								            stack.unshift(arguments[i]);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!running && !this.stop && this.autoRun){
							 | 
						||
| 
								 | 
							
								            this.next();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function run(){
							 | 
						||
| 
								 | 
							
								        running=true;
							 | 
						||
| 
								 | 
							
								        if(stack.length<1 || this.stop){
							 | 
						||
| 
								 | 
							
								            running=false;
							 | 
						||
| 
								 | 
							
								            return;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        stack.shift().bind(this)();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |