JSFiddle - React, Tailwind, and code Playground

by falldeaf

CSS

body {
  background-color: black;
}

JavaScript

class Counter {
	constructor (){
  	this.obj = {};
    this.triggered = {};
  }
  
  increment(dname, repeat, cooldown) {
  
  	var currenttime = Math.round(Date.now() / 1000);
  
  	if (dname in this.triggered && currenttime < this.triggered[dname]) return false;
    
    delete(this.triggered[dname]);
  
    if (dname in this.obj) {
      console.log(`increment ${dname} | ${this.obj[dname]}`);
    	this.obj[dname]++;
    } else {
      console.log(`create ${dname}`);
    	this.obj[dname] = 1;
    }
    
    if (this.obj[dname] >= repeat) {
    	this.triggered[dname] = currenttime + (cooldown * 60)
    }
    
    return (this.obj[dname] >= repeat);
  }
  
  decrement(dname) {
    if (dname in this.obj) {
    	console.log(`decrement ${dname} | ${this.obj[dname]}`);
			this.obj[dname]--;
      if(this.obj[dname] < 0) {
      	console.log(`delete ${dname} | ${this.obj[dname]}`);
      	delete(this.obj[dname]);
      }
    } else {
    	console.log(`!${dname}`)
    }
  }
}

var cnt = new Counter(2, 5);

console.log(cnt.increment('a', 2, 5));
console.log(cnt.increment('a', 2, 5));
console.log(cnt.increment('a', 2, 5));

cnt.decrement('a');
cnt.decrement('a');
cnt.decrement('a');
cnt.decrement('a');
cnt.decrement('a');