esoytekin / skip_dizipal_ads

// ==UserScript==
// @namespace     https://openuserjs.org/users/esoytekin
// @name          skip_dizipal_ads
// @description   removes ads from dizipal.
// @copyright     2023, esoytekin (https://openuserjs.org/users/esoytekin)
// @license       MIT
// @version       1.0.3
// @include    /^https:\/\/dizipal.*\.com\/.*/
// @grant GM.xmlHttpRequest
// @updateURL https://openuserjs.org/meta/esoytekin/skip_dizipal_ads.meta.js
// @downloadURL https://openuserjs.org/install/esoytekin/skip_dizipal_ads.min.user.js
// @copyright 2023, esoytekin (https://openuserjs.org/users/esoytekin)
// ==/UserScript==

// ==OpenUserJS==
// @author esoytekin
// ==/OpenUserJS==

const Elems = {
    playBtn: document.querySelector('.play-btn'),
    episodeHead: document.querySelector('.episode-head'),
    skipBtn : () => document.querySelector('#skipButton'),
}

const Counter = {
    base: 'https://api.countapi.xyz',
    namespace: 'skip_dizipal_ads',
    key: 'ec668188-77f3-4150-8671-3c81aaa6826b'
};

const fetch = (method) => {
    if (['hit'].indexOf(method) === -1) {
        return;
    }

    return new Promise(resolve => {
        GM.xmlHttpRequest({
            method: 'GET',
            url : `${Counter.base}/${method}/${Counter.namespace}/${Counter.key}`,
            onload: ( { response } ) => {
                const { value } = JSON.parse(response);
                resolve(value);
            }
        })
    })
}

const hitCounter = () => fetch('hit');

const skipAdFunc = async function(){


    const playBtn = Elems.playBtn;
    playBtn.dispatchEvent(new Event('click'));

    let skipBtn = Elems.skipBtn();

    while(skipBtn) {
        skipBtn.dispatchEvent(new Event('click'));
        skipBtn = Elems.skipBtn();
    }

    this.remove();
    await hitCounter();
};


const addBtn = async () => {
    const h = Elems.episodeHead;
    const btn = document.createElement('button');
    btn.innerHTML = 'Remove Ads';
    btn.addEventListener('click', skipAdFunc.bind(btn));
    btn.style.padding="0 20px";

    const divElement = document.createElement('div');
    divElement.classList.add('form-element');
    divElement.appendChild(btn);

    const divGroup = document.createElement('div');
    divGroup.classList.add('form-group');
    divGroup.appendChild(divElement);
    h.appendChild(divGroup);
}


(function() {

    addBtn();


})()