Ultimate Auto Refresh with Countdown

Page refresh script with advanced features

// ==UserScript==
// @name         Ultimate Auto Refresh with Countdown
// @namespace    http://tampermonkey.net/
// @version      3.8
// @description  Page refresh script with advanced features
// @author       ibomen
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const defaultRefreshInterval = 60; // Varsayılan yenileme süresi (saniye)
    let refreshInterval = defaultRefreshInterval;
    let timeLeft = refreshInterval;
    let isRunning = true;
    let theme = localStorage.getItem('theme') || 'dark'; // Tema tercihini yerel depodan al
    let currentLanguage = localStorage.getItem('scriptLanguage') || 'en'; // Dil ayarını yerel depodan al

    const translations = {
        en: {
            pageRefresh: 'Page will refresh in',
            refreshStopped: 'Refresh stopped',
            stop: 'Stop',
            start: 'Start',
            reset: 'Reset',
            refreshInterval: 'Refresh interval (seconds)',
            changeTheme: 'Change Theme',
            donate: 'Donate',
            donationInfo: 'TRX: TC9bVN7tBr6DBjKGDZ51pz8D9TdD4DqreF',
        },
        tr: {
            pageRefresh: 'Sayfa içinde yenilenecek',
            refreshStopped: 'Yenileme durduruldu',
            stop: 'Durdur',
            start: 'Başlat',
            reset: 'Sıfırla',
            refreshInterval: 'Yenileme süresi (saniye)',
            changeTheme: 'Tema Değiştir',
            donate: 'Bağış Yap',
            donationInfo: 'TRX: TC9bVN7tBr6DBjKGDZ51pz8D9TdD4DqreF',
        }
    };

    // Log ekranı oluşturma
    const logDiv = document.createElement('div');
    logDiv.style.position = 'fixed';
    logDiv.style.bottom = '10px';
    logDiv.style.right = '10px';
    logDiv.style.width = '250px';
    logDiv.style.padding = '10px';
    logDiv.style.backgroundColor = theme === 'dark' ? '#000000' : '#ffffff';
    logDiv.style.color = theme === 'dark' ? '#ffffff' : '#000000';
    logDiv.style.fontFamily = 'Arial, sans-serif';
    logDiv.style.zIndex = '9999';
    logDiv.style.borderRadius = '5px';
    document.body.appendChild(logDiv);

    // Site adı ve iconu
    const siteName = document.createElement('div');
    const siteIcon = document.createElement('img');
    siteIcon.src = getFavicon();
    siteIcon.style.width = '16px';
    siteIcon.style.height = '16px';
    siteIcon.style.marginRight = '5px';
    siteName.appendChild(siteIcon);
    siteName.appendChild(document.createTextNode(document.title));
    logDiv.appendChild(siteName);

    // Bağış bölümü
    const donationDiv = document.createElement('div');
    donationDiv.style.display = 'none';
    donationDiv.style.marginTop = '10px';
    donationDiv.style.backgroundColor = theme === 'dark' ? '#000000' : '#ffffff';
    donationDiv.style.padding = '10px';
    donationDiv.style.borderRadius = '5px';
    donationDiv.style.color = theme === 'dark' ? '#ffffff' : '#000000';
    donationDiv.style.wordWrap = 'break-word'; // Ekrana sığmasını sağlamak için eklenen stil
    donationDiv.innerHTML = `<b>${translations[currentLanguage].donationInfo}</b>`;
    logDiv.appendChild(donationDiv);

    // Geri sayım göstergesi
    const countdown = document.createElement('div');
    countdown.style.marginTop = '10px';
    logDiv.appendChild(countdown);

    // Azalan bar
    const progressBar = document.createElement('div');
    progressBar.style.width = '100%';
    progressBar.style.height = '10px';
    progressBar.style.backgroundColor = 'gray';
    progressBar.style.marginTop = '10px';
    progressBar.style.borderRadius = '5px';
    logDiv.appendChild(progressBar);

    const progress = document.createElement('div');
    progress.style.height = '100%';
    progress.style.backgroundColor = 'red';
    progress.style.borderRadius = '5px';
    progressBar.appendChild(progress);

    // Başlat/Durdur butonu
    const toggleButton = document.createElement('button');
    toggleButton.textContent = translations[currentLanguage].stop;
    toggleButton.style.marginTop = '10px';
    toggleButton.style.width = '100%';
    logDiv.appendChild(toggleButton);

    // Sıfırla butonu
    const resetButton = document.createElement('button');
    resetButton.textContent = translations[currentLanguage].reset;
    resetButton.style.marginTop = '5px';
    resetButton.style.width = '100%';
    logDiv.appendChild(resetButton);

    // Yenileme süresi girişi
    const intervalInput = document.createElement('input');
    intervalInput.type = 'number';
    intervalInput.value = refreshInterval;
    intervalInput.style.marginTop = '5px';
    intervalInput.style.width = '100%';
    intervalInput.placeholder = translations[currentLanguage].refreshInterval;
    logDiv.appendChild(intervalInput);

    // Tema değiştirme butonu
    const themeButton = document.createElement('button');
    themeButton.textContent = translations[currentLanguage].changeTheme;
    themeButton.style.marginTop = '5px';
    themeButton.style.width = '100%';
    logDiv.appendChild(themeButton);

    // Bağış butonu
    const donationButton = document.createElement('button');
    donationButton.textContent = translations[currentLanguage].donate;
    donationButton.style.marginTop = '5px';
    donationButton.style.width = '100%';
    logDiv.appendChild(donationButton);

    // Dil seçme butonu
    const languageButton = document.createElement('button');
    languageButton.textContent = currentLanguage === 'en' ? 'Türkçe' : 'English';
    languageButton.style.marginTop = '5px';
    languageButton.style.width = '100%';
    logDiv.appendChild(languageButton);

    // Favicon alma fonksiyonu
    function getFavicon() {
        let favicon = '/favicon.ico';
        const nodeList = document.getElementsByTagName('link');
        for (let i = 0; i < nodeList.length; i++) {
            if (nodeList[i].getAttribute('rel') === 'icon' || nodeList[i].getAttribute('rel') === 'shortcut icon') {
                favicon = nodeList[i].getAttribute('href');
            }
        }
        return favicon;
    }

    // Geri sayım fonksiyonu
    function updateCountdown() {
        if (isRunning) {
            countdown.textContent = `${translations[currentLanguage].pageRefresh} ${timeLeft}`;
            progress.style.width = `${(timeLeft / refreshInterval) * 100}%`;

            if (timeLeft <= 0) {
                refreshPage();
            } else {
                timeLeft--;
            }
        } else {
            countdown.textContent = '';
        }
    }

    // Sayfa yenileme fonksiyonu
    function refreshPage() {
        playSound();
        location.reload();
    }

    // Tema değiştirme fonksiyonu
    function toggleTheme() {
        theme = theme === 'dark' ? 'light' : 'dark';
        logDiv.style.backgroundColor = theme === 'dark' ? '#000000' : '#ffffff';
        logDiv.style.color = theme === 'dark' ? '#ffffff' : '#000000';
        donationDiv.style.backgroundColor = theme === 'dark' ? '#000000' : '#ffffff';
        donationDiv.style.color = theme === 'dark' ? '#ffffff' : '#000000';
        if (theme === 'dark') {
            themeButton.style.backgroundColor = '#ffffff';
            themeButton.style.color = '#000000';
        } else {
            themeButton.style.backgroundColor = '#000000';
            themeButton.style.color = '#ffffff';
        }
        localStorage.setItem('theme', theme); // Tema tercihini yerel depoya kaydet
    }

    // Dil değiştirme fonksiyonu
    function toggleLanguage() {
        currentLanguage = currentLanguage === 'en' ? 'tr' : 'en';
        localStorage.setItem('scriptLanguage', currentLanguage); // Dil ayarını yerel depoya kaydet
        updateTexts();
    }

    // Metinleri güncelleme fonksiyonu
    function updateTexts() {
        toggleButton.textContent = isRunning ? translations[currentLanguage].stop : translations[currentLanguage].start;
        resetButton.textContent = translations[currentLanguage].reset;
        intervalInput.placeholder = translations[currentLanguage].refreshInterval;
        themeButton.textContent = translations[currentLanguage].changeTheme;
        donationButton.textContent = translations[currentLanguage].donate;
        languageButton.textContent = currentLanguage === 'en' ? 'Türkçe' : 'English';
        donationDiv.innerHTML = `<b>${translations[currentLanguage].donationInfo}</b>`;
    }

    // Sesli bildirim oynatma
    function playSound() {
        const audio = new Audio('https://www.soundjay.com/button/beep-07.wav');
        audio.play();
    }

    // Başlat/Durdur butonu tıklama olayını işleme
    toggleButton.addEventListener('click', () => {
        isRunning = !isRunning;
        toggleButton.textContent = isRunning ? translations[currentLanguage].stop : translations[currentLanguage].start;
    });

    // Sıfırla butonu tıklama olayını işleme
    resetButton.addEventListener('click', () => {
        timeLeft = refreshInterval;
    });

    // Yenileme süresi giriş değişikliği olayını işleme
    intervalInput.addEventListener('change', () => {
        refreshInterval = parseInt(intervalInput.value);
        timeLeft = refreshInterval;
    });

    // Tema değiştirme butonu tıklama olayını işleme
    themeButton.addEventListener('click', toggleTheme);

    // Dil seçme butonu tıklama olayını işleme
    languageButton.addEventListener('click', toggleLanguage);

    // Bağış butonu tıklama olayını işleme
    donationButton.addEventListener('click', () => {
        donationDiv.style.display = donationDiv.style.display === 'none' ? 'block' : 'none';
    });

    // Log ekranını göster
    logDiv.style.display = 'block';

    // Geri sayımı başlatma
    updateCountdown();
    setInterval(updateCountdown, 1000);
    updateTexts(); // Dil ayarını yükledikten sonra metinleri güncelle
})();