Greasy Fork is available in English.

XButton

Tombol tambahan: kalkulator umur, auto reload, Hapus iklan

// ==UserScript==
// @name         XButton
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Tombol tambahan: kalkulator umur, auto reload, Hapus iklan
// @author       Khudhori
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Create the floating button (main icon)
    const floatingBtn = document.createElement('div');
    floatingBtn.style.position = 'fixed';
    floatingBtn.style.bottom = '10px';
    floatingBtn.style.right = '10px';
    floatingBtn.style.width = '48px';
    floatingBtn.style.height = '48px';
    floatingBtn.style.backgroundColor = 'transparent';
    floatingBtn.style.borderRadius = '50%';
    floatingBtn.style.overflow = 'hidden';
    floatingBtn.style.zIndex = '9999';
    floatingBtn.style.transition = 'transform 0.5s ease, box-shadow 0.5s ease';
    floatingBtn.style.border = '3px solid #007bff';
    floatingBtn.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.2)';

    // img floating button
    const iconImg = document.createElement('img');
    iconImg.src = 'https://lh3.googleusercontent.com/a/AGNmyxaEnKjzfKogUt2-V-11G5OAQMl0OZKBz7562IzJ=s96-c';
    iconImg.style.width = '100%';
    iconImg.style.height = '100%';
    iconImg.style.objectFit = 'cover';
    iconImg.style.borderRadius = '50%';
    floatingBtn.appendChild(iconImg);
    document.body.appendChild(floatingBtn);

    // Create container for script buttons
    const btnContainer = document.createElement('div');
    btnContainer.style.position = 'fixed';
    btnContainer.style.bottom = '70px';
    btnContainer.style.right = '10px';
    btnContainer.style.display = 'none';
    btnContainer.style.opacity = '0';
    btnContainer.style.transition = 'opacity 0.2s ease, transform 0.2s ease';
    btnContainer.style.transform = 'translateY(-50px)';
    btnContainer.style.zIndex = '9999';
    document.body.appendChild(btnContainer);

    // Function to create individual buttons
    function createScriptButton(text, callback) {
        const btn = document.createElement('button');
        btn.innerHTML = text;
        btn.style.display = 'block';
        btn.style.marginBottom = '7px';
        btn.style.padding = '7px';
        btn.style.backgroundColor = '#ffffff';
        btn.style.color = '#333333';
        btn.style.border = '1px solid #cccccc';
        btn.style.borderRadius = '10px';
        btn.style.cursor = 'pointer';
        btn.style.fontFamily = 'Helvetica Neue, Arial, sans-serif';
        btn.style.fontSize = '13px';
        btn.style.fontWeight = '400';
        btn.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.1)';
        btn.style.opacity = '0';
        btn.style.transform = 'translateY(-20px)';
        btn.style.transition = 'opacity 0.3s ease, transform 0.3s ease';
        btn.onmouseover = () => {
            btn.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.2)';
            btn.style.transform = 'scale(1.05)';
        };
        btn.onmouseout = () => {
            btn.style.boxShadow = '0 6px 4px rgba(0, 0, 0, 0.1)';
            btn.style.transform = 'scale(1)';
        };
        btn.onclick = callback;
        btnContainer.appendChild(btn);

        // Show the button with fade-in effect after a small delay
        setTimeout(() => {
            btn.style.opacity = '1';
            btn.style.transform = 'translateY(0)';
        }, 100);
    }

    // Toggle button container visibility animation
    floatingBtn.onclick = () => {
        if (btnContainer.style.display === 'none') {
            btnContainer.style.display = 'block';
            setTimeout(() => {
                btnContainer.style.opacity = '1';
                btnContainer.style.transform = 'translateY(0)';
            }, 100);
            floatingBtn.style.transform = 'rotate(45deg) scale(1.2)';
            floatingBtn.style.boxShadow = '0px 0px 20px rgba(0, 0, 0, 0.2)';
        } else {
            btnContainer.style.opacity = '0';
            btnContainer.style.transform = 'translateY(-20px)';
            setTimeout(() => {
                btnContainer.style.display = 'none';
            }, 300);
            floatingBtn.style.transform = 'rotate(0deg) scale(1)';
            floatingBtn.style.boxShadow = '0px 0px 15px rgba(0, 0, 0, 0.1)';
        }
    };

    // Function to create a calculator popup
    function createCalculator() {
        const calcContainer = document.createElement('div');
        calcContainer.style.position = 'fixed';
        calcContainer.style.top = '50px';
        calcContainer.style.right = '10px';
        calcContainer.style.width = '300px';
        calcContainer.style.padding = '10px';
        calcContainer.style.backgroundColor = '#ffffff';
        calcContainer.style.border = '1px solid #cccccc';
        calcContainer.style.borderRadius = '12px';
        calcContainer.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.1)';
        calcContainer.style.zIndex = '10000';
        calcContainer.style.display = 'none';
        calcContainer.style.opacity = '0';
        calcContainer.style.transition = 'opacity 0.3s ease';

        const calcHTML = `
            <div style="margin-bottom: 10px;">
                <input id="calc-display" type="text" readonly style="width: 100%; padding: 10px; font-size: 18px; text-align: right; border: 1px solid #cccccc; border-radius: 6px;">
            </div>
            <div style="margin-bottom: 10px;">
                <label for="birthdate">Tanggal Lahir:</label><br>
                <input id="birthdate-day" type="number" placeholder="Tanggal" style="width: 30%; margin-right: 5px; padding: 5px; border: 1px solid #cccccc; border-radius: 6px;">
                <input id="birthdate-month" type="number" placeholder="Bulan" style="width: 30%; margin-right: 5px; padding: 5px; border: 1px solid #cccccc; border-radius: 6px;">
                <input id="birthdate-year" type="number" placeholder="Tahun" style="width: 35%; padding: 5px; border: 1px solid #cccccc; border-radius: 6px;">
            </div>
            <div style="margin-bottom: 10px;">
                <label for="today-date">Tanggal Hari Ini:</label><br>
                <input id="today-day" type="number" placeholder="Tanggal" style="width: 30%; margin-right: 5px; padding: 5px; border: 1px solid #cccccc; border-radius: 6px;">
                <input id="today-month" type="number" placeholder="Bulan" style="width: 30%; margin-right: 5px; padding: 5px; border: 1px solid #cccccc; border-radius: 6px;">
                <input id="today-year" type="number" placeholder="Tahun" style="width: 35%; padding: 5px; border: 1px solid #cccccc; border-radius: 6px;">
            </div>
            <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px;">
                <button id="calc-calculate" style="padding: 10px; background-color: #007bff; color: white; border: 1px solid #007bff; border-radius: 6px; grid-column: span 3;">Hitung Usia</button>
                <button id="calc-clear" style="padding: 10px; background-color: #f44336; color: white; border: 1px solid #f44336; border-radius: 6px;">C</button>
                <button id="calc-close" style="padding: 10px; background-color: #007bff; color: white; border: 1px solid #007bff; border-radius: 6px;">Tutup</button>
            </div>
        `;

        calcContainer.innerHTML = calcHTML;
        document.body.appendChild(calcContainer);

        // Calculator logic
        const display = document.getElementById('calc-display');
        const clearBtn = document.getElementById('calc-clear');
        const calculateBtn = document.getElementById('calc-calculate');
        const closeBtn = document.getElementById('calc-close');

        // Function to calculate age
        function calculateAge() {
            const dayOfBirth = parseInt(document.getElementById('birthdate-day').value, 10);
            const monthOfBirth = parseInt(document.getElementById('birthdate-month').value, 10);
            const yearOfBirth = parseInt(document.getElementById('birthdate-year').value, 10);
            const dayToday = parseInt(document.getElementById('today-day').value, 10);
            const monthToday = parseInt(document.getElementById('today-month').value, 10);
            const yearToday = parseInt(document.getElementById('today-year').value, 10);

            if (!isNaN(dayOfBirth) && !isNaN(monthOfBirth) && !isNaN(yearOfBirth) &&
                !isNaN(dayToday) && !isNaN(monthToday) && !isNaN(yearToday)) {
                const birthDate = new Date(yearOfBirth, monthOfBirth - 1, dayOfBirth);
                const todayDate = new Date(yearToday, monthToday - 1, dayToday);

                let ageYears = todayDate.getFullYear() - birthDate.getFullYear();
                let ageMonths = todayDate.getMonth() - birthDate.getMonth();
                let ageDays = todayDate.getDate() - birthDate.getDate();

                if (ageDays < 0) {
                    ageMonths--;
                    ageDays += new Date(todayDate.getFullYear(), todayDate.getMonth(), 0).getDate();
                }
                if (ageMonths < 0) {
                    ageYears--;
                    ageMonths += 12;
                }

                display.value = `Usia: ${ageYears} tahun, ${ageMonths} bulan, ${ageDays} hari`;
            } else {
                display.value = 'Masukkan tanggal yang valid';
            }
        }

        // Button click handlers
        clearBtn.addEventListener('click', () => {
            display.value = ''; // Clear display
            document.getElementById('birthdate-day').value = '';
            document.getElementById('birthdate-month').value = '';
            document.getElementById('birthdate-year').value = '';
            document.getElementById('today-day').value = '';
            document.getElementById('today-month').value = '';
            document.getElementById('today-year').value = '';
        });

        calculateBtn.addEventListener('click', calculateAge);

        closeBtn.addEventListener('click', () => {
            calcContainer.style.opacity = '0';
            setTimeout(() => {
                calcContainer.style.display = 'none';
            }, 300);
        });

        // Prevent closing the calculator when clicking inside it
        calcContainer.addEventListener('click', (event) => {
            event.stopPropagation();
        });

        return calcContainer;
    }

    // Function to create an auto-reload popup with time setting
    function createAutoReloadPopup() {
        const reloadContainer = document.createElement('div');
        reloadContainer.style.position = 'fixed';
        reloadContainer.style.top = '50px';
        reloadContainer.style.right = '10px';
        reloadContainer.style.width = '300px';
        reloadContainer.style.padding = '10px';
        reloadContainer.style.backgroundColor = '#ffffff';
        reloadContainer.style.border = '1px solid #cccccc';
        reloadContainer.style.borderRadius = '12px';
        reloadContainer.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.1)';
        reloadContainer.style.zIndex = '10000';
        reloadContainer.style.display = 'none';
        reloadContainer.style.opacity = '0';
        reloadContainer.style.transition = 'opacity 0.3s ease';

        const reloadHTML = `
            <div style="margin-bottom: 10px;">
                <label for="reload-interval">Interval Reload (menit):</label><br>
                <input id="reload-interval" type="number" min="1" placeholder="Menit" style="width: 100%; padding: 5px; border: 1px solid #cccccc; border-radius: 6px;">
            </div>
            <div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 5px;">
                <button id="reload-start" style="padding: 10px; background-color: #007bff; color: white; border: 1px solid #007bff; border-radius: 6px; grid-column: span 1;">Mulai</button>
                <button id="reload-stop" style="padding: 10px; background-color: #f44336; color: white; border: 1px solid #f44336; border-radius: 6px; grid-column: span 1;">Berhenti</button>
                <button id="reload-close" style="padding: 10px; background-color: #007bff; color: white; border: 1px solid #007bff; border-radius: 6px; grid-column: span 2;">Tutup</button>
            </div>
        `;

        reloadContainer.innerHTML = reloadHTML;
        document.body.appendChild(reloadContainer);

        // Auto-reload logic
        let reloadInterval = null;

        const intervalInput = document.getElementById('reload-interval');
        const startBtn = document.getElementById('reload-start');
        const stopBtn = document.getElementById('reload-stop');
        const closeBtn = document.getElementById('reload-close');

        startBtn.addEventListener('click', () => {
            const minutes = parseInt(intervalInput.value, 10);
            if (!isNaN(minutes) && minutes > 0) {
                if (reloadInterval !== null) clearInterval(reloadInterval);
                reloadInterval = setInterval(() => {
                    location.reload();
                }, minutes * 60 * 1000); // Convert minutes to milliseconds
            }
        });

        stopBtn.addEventListener('click', () => {
            if (reloadInterval !== null) clearInterval(reloadInterval);
        });

        closeBtn.addEventListener('click', () => {
            reloadContainer.style.opacity = '0'; // Fade out reload popup
            setTimeout(() => {
                reloadContainer.style.display = 'none';
            }, 300);
        });

        // Prevent closing the reload popup when clicking inside it
        reloadContainer.addEventListener('click', (event) => {
            event.stopPropagation();
        });

        return reloadContainer;
    }
	
// start tombol

    // Tombol Kalkulator Umur
    createScriptButton('Kalkulator Umur', () => {
        const calcContainer = createCalculator();
        calcContainer.style.display = 'block';
        setTimeout(() => {
            calcContainer.style.opacity = '1';
        }, 100);
    });

    // Tombol auto reload
    createScriptButton('Auto Reload', () => {
        const reloadContainer = createAutoReloadPopup();
        reloadContainer.style.display = 'block';
        setTimeout(() => {
            reloadContainer.style.opacity = '1';
        }, 100);
    });

// Create the ad removal button
createScriptButton('Hapus Iklan', () => {
    // Function to hide ads
    const hideAds = () => {
        const adSelectors = [
            '[id^="ad"]',
            '[class*="ad"]',
            '[id*="ad"]',
            '[class*="advertisement"]',
            '[id^="banner"]',
            '[class*="banner"]',
            '[id*="banner"]',
            '[class*="promo"]',
            '[id^="promo"]',
            '[class*="sponsored"]',
            '[id*="sponsored"]',
            '[class*="ads"]',
            '[id*="ads"]',
            '[id*="popup"]',
            '[class*="popup"]',
            '[class*="overlay"]',
            '[id*="overlay"]'
        ];

        adSelectors.forEach(selector => {
            const ads = document.querySelectorAll(selector);
            ads.forEach(ad => ad.style.display = 'none');
        });
    };

    // Function to block popups on link click
    const blockPopups = () => {
        document.querySelectorAll('a').forEach(link => {
            link.addEventListener('click', (event) => {
                const href = link.getAttribute('href');
                if (href && (href.includes('popup') || href.includes('ad') || href.includes('advertisement'))) {
                    event.preventDefault();
                    console.log('Blocked popup ad link:', href);
                }
            });
        });
    };

    // Execute both functions
    hideAds();
    blockPopups();
});


// end tombol

    // Close both containers when 'Esc' key is pressed
    document.addEventListener('keydown', (event) => {
        if (event.key === 'Escape') {
            // Close calculator if visible
            const calcContainer = document.querySelector('div[style*="top: 50px"][style*="right: 10px"]');
            if (calcContainer) {
                calcContainer.style.opacity = '0';
                setTimeout(() => {
                    calcContainer.style.display = 'none';
                }, 300);
            }

            // Close reload popup if visible
            const reloadContainer = document.querySelector('div[style*="top: 50px"][style*="right: 10px"]');
            if (reloadContainer) {
                reloadContainer.style.opacity = '0';
                setTimeout(() => {
                    reloadContainer.style.display = 'none';
                }, 300);
            }

            // Close button container if visible
            if (btnContainer.style.display === 'block') {
                btnContainer.style.opacity = '0';
                btnContainer.style.transform = 'translateY(-20px)';
                setTimeout(() => {
                    btnContainer.style.display = 'none';
                }, 300);
                floatingBtn.style.transform = 'rotate(0deg) scale(1)';
                floatingBtn.style.boxShadow = '0px 0px 15px rgba(0, 0, 0, 0.1)';
            }
        }
    });

})();