Ultimate Auto Refresh with Countdown

Page refresh script with advanced features

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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
})();