Greasy Fork

Erweiterung (Rest time) für das gesehene Videos ausblenden oder markieren

zeigt an wie viel Restzeit ein Video läuft,

目前为 2024-04-23 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.cloud/scripts/488745/1365028/Erweiterung%20%28Rest%20time%29%20f%C3%BCr%20das%20gesehene%20Videos%20ausblenden%20oder%20markieren.js

// ==UserScript==
// @name         Erweiterung (Rest time) für das gesehene Videos ausblenden oder markieren
// @namespace    https://basti1012.bplaced.net
// @version      1.3
// @description  zeigt an wie viel Restzeit ein Video läuft,
// auch wenn der Player schneller läuft, wird die Zeit mitgerechnet
// Dieses Script wurde von 4lrick geschrieben (YouTube - Remaining time).
// Ich hatte mir zwar auch eine Version erstellt. Aber seine läuft besser.
// ACHTUNG: Dieses Script läuft nur mit meinen Userscript "Bastis Youtube Multi Script,gesehende videos ausblenden oder makieren", 
// was in den nächsten Tagen Online kommt.
// Zu den Hauptscript kann dieses Script einfach eingebunden werden und das Hauptscript hat eine Funktion mehr.
// Alle Neue einstellmöglichkeiten der erweiterungen können in das Hauptmenü des Hauptscriptes eingestellt werden.
// @author       basti1012
// @allFrames    true
// @run-at document-end
// @license MIT License
// @noframes
// @author       4lrick . Für mein YouTube Script umgebaut von basti1012 als Erweiterung
// @icon        https://basti1012.de/images/favicon.png
// ==/UserScript==

var start2 = performance.now();
if(!array_localsdtorage){
    var array_localsdtorage=[];
}
if(!erweiterungs_einstellungs_array){
var erweiterungs_einstellungs_array=[];
}
array_localsdtorage.push(["rest_zeit_einblenden", false]);
function rest_lauf_zeit_anzeigen(){
    if(localStorage.getItem('rest_zeit_einblenden')=='true'){
        // beginn Script from 4lrick
        let init = false;
        let timeDisplay;
        function displayRemainingTime() {
            const videoElement = document.querySelector('video');
            if (videoElement) {
                const timeRemaining = (videoElement.duration - videoElement.currentTime) / videoElement.playbackRate;
                const hours = Math.floor(timeRemaining / 3600);
                const minutes = Math.floor((timeRemaining % 3600) / 60);
                const seconds = Math.floor(timeRemaining % 60);
                const isLive = document.querySelector('.ytp-live');
                const viewLiveCount = document.querySelector('span[dir="auto"].bold.style-scope.yt-formatted-string');
                const isEmbed = window.location.href;
                if ((viewLiveCount !== null && viewLiveCount.textContent.trim() !== "watching now") || isEmbed.includes("youtube.com/embed") && !isLive) {
                    timeDisplay.textContent = `(${hours > 0 ? `${hours}:` : ''}${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds})`;
                } else {
                    timeDisplay.textContent = null;
                }
            }
            requestAnimationFrame(displayRemainingTime);
        }
        function initDisplay() {
            timeDisplay = document.createElement('div');
            timeDisplay.style.display = 'inline-block';
            timeDisplay.style.marginLeft = '10px';
            timeDisplay.style.color = '#ddd';
            const timeContainer = document.querySelector('.ytp-time-display');
            if (timeContainer) {
                timeContainer.appendChild(timeDisplay);
                init = true;
            }
        }
        function checkVideoExists() {
            const videoElement = document.querySelector('video');
            if (videoElement) {
                if (!init) {
                    initDisplay();
                }
                videoElement.onplaying = displayRemainingTime;
            }
        }
        const observer = new MutationObserver(checkVideoExists);
        const body = document.body;
        const config = { childList: true, subtree: true };
        observer.observe(body, config);
        // end script from 4lrick
        return 1;
    }else{
        return 2;
    }
    return 3;
}
if(localStorage.getItem('rest_zeit_aktivieren')=='true'){
    var checkboxerweiterungrestzeitaktivieren ='checked="true"';
}else{
    var checkboxerweiterungrestzeitaktivieren ='';
}
if(!erweiterungs_einstellungs_array){
    var erweiterungs_einstellungs_array = [];
}
erweiterungs_einstellungs_array.push(['restzeit_anzeigen',`
<label>
    <label style="display:flex;flex-direction:column">
        <p>
            <strong>Restzeit anzeigen </strong>
            <input type="checkbox" id="rest_laufueit" ${checkboxerweiterungrestzeitaktivieren}>
            <span>?
                <small>
                    Mit dieser Funktion wird im Player neben der Abgelaufene und Endzeit noch die Restlaufzeit angezeigt<br>
					Auch wenn sie den Player schneller oder langsamer laufen lassen, wird dies mit berechnet
                </small>
            </span>
        </p>
    </label>
</label>`]);
if(!array_script){
	var array_script=[];
}
array_script.push([`
    var restlaufzeit_var=document.getElementById('rest_laufueit')
    restlaufzeit_var.addEventListener('click',function(u){
        if(restlaufzeit_var.checked==true){
            localStorage.setItem('rest_zeit_einblenden',true);
        }else{
            localStorage.setItem('rest_zeit_einblenden',false);
        }
    })
`]);
if(localStorage.getItem('rest_zeit_einblenden')){
    var restlaufzeit=rest_lauf_zeit_anzeigen();
    if(restlaufzeit==1){
           console.log('%cRestlaufzeit aktiviert'+ (performance.now() - start2) + ' ms.','color:green');
    }else if(restlaufzeit==2){
          console.log('%cRestlaufzeit deaktiviert'+ (performance.now() - start2) + ' ms.','color:orange');
    }else{
      console.log('%cRestlaufzeit error'+ (performance.now() - start2) + ' ms.','color:red');
    }
}