Source: scripts/localStorage/landingPageVisits.js

class LandingPageVisits extends LocalStorageWriter{

    /**
     *
     * @param checkFn {Function}
     * @param callback {Function}
     */
    constructor(
        checkFn = (visits, message) => { return visits === 2 && message},
        callback = (/** @type {LandingPageVisits} */ lpv) => {
            lpv.save(2, false)
            lpv.checkFn = () => {
                return false
            }
            (new bootstrap.Modal(document.getElementById("skipLandingModal"))).show()
        }
    ) {
        super("landingPageVisits");
        this.checkFn = checkFn;
        this.callback = callback;
    }

    /**
     * save the values as json to the local storage
     * @param num {int} number of page visits
     * @param message {boolean} if a message is shown or not
     */
    save(num, message){
        super._set(JSON.stringify({"visits": num, "message": message}));
    }

    /**
     * @returns {Array<int, string>} [int, str]
     */
    load() {
        let [success, data] = super._get()
        if (!success) {
            data = {"visits": 0, "message": true}
            this.save(0, true);
        }
        else{
            data = JSON.parse(data);
        }

        return [data.visits, data.message];
    }

    increment(){
        let [visits, message] = this.load()
        visits += 1

        if (this.checkFn(visits, message)) {
            this.callback(this)
        }
        else{
            this.save(visits, true)
        }
    }
}