您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Dans le bloc-notes, calcule la durée totale de la liste des animes et dramas sélectionnés ainsi que la durée totale par série. Calcule également la durée totale des séries sur leur fiche.
// ==UserScript== // @name nautiljon-total-time // @namespace http://tampermonkey.net/ // @version 0.5.2 // @description Dans le bloc-notes, calcule la durée totale de la liste des animes et dramas sélectionnés ainsi que la durée totale par série. Calcule également la durée totale des séries sur leur fiche. // @author Ed38 // @license MIT // @match https://www.nautiljon.com/membre/a-voir,*,anime.html* // @match https://www.nautiljon.com/membre/a-voir,*,drama.html* // @match https://www.nautiljon.com/animes/* // @match https://www.nautiljon.com/dramas/* // @icon https://www.google.com/s2/favicons?sz=64&domain=nautiljon.com // @grant GM_addStyle // @noframes // ==/UserScript== (function() { 'use strict'; const testListURL = /^https:\/\/www.nautiljon.com\/membre\/a-voir,.*/ ; if (testListURL.test(document.location)) { document.querySelector("input[data-id='listingListe']").addEventListener("keyup", totalTimeCounter,false); totalTimeCounter(); } else { let numberOfEpisodesSpan = document.querySelector('span[itemprop = "numberOfEpisodes"]') let numberOfEpisodes = numberOfEpisodesSpan.textContent ; if(~~numberOfEpisodes > 1){ let episodeDuration = numberOfEpisodesSpan.nextSibling.textContent.replace(/\s+/g, '').replace(/^.*[x×]/,''); let hours = 0; let minutes = 0; // hours & minutes if (episodeDuration.match(/^(\d+)h.*/)) { hours = episodeDuration.replace(/^(\d+)h.*/,"$1") ; minutes = episodeDuration.replace(/^\d+h/,"") ; } else { hours = 0; if (episodeDuration.match(/^(\d+)min.*/)) { minutes = episodeDuration.replace(/^(\d+)min.*/,"$1") ; } else { minutes = 0; } } let totalDuration = ~~numberOfEpisodes * (~~hours * 60 + ~~minutes) ; let itemHours = Math.trunc(totalDuration / 60) ; let itemMinutes = totalDuration % 60 ; numberOfEpisodesSpan.parentNode.insertAdjacentHTML('beforeend', '<span class="infos_small"> (' + itemHours + ' h ' + itemMinutes.toString().padStart(2,"0") + ' min)</span>') ; } } function totalTimeCounter() { GM_addStyle('@media (min-width:1025px) {.total-time::before {content:"\\A"; white-space: pre;}}'); let durationLabel = "Temps total : " ; let episodesLabel = "Épisodes à voir : " ; let counter = 0 ; let episodesCounter = 0 ; let durationNode ; let durationText ; let itemTotal = 0 ; let itemHours = 0 ; let itemMinutes = 0 ; let durationsNode = document.getElementsByClassName("t_progression") ; for (var i = 0 ; i < durationsNode.length; i++) { let numberOfEpisodes = 0 ; let hours = 0 ; let minutes = 0 ; if (durationsNode[i].checkVisibility()) { durationText = durationsNode[i].textContent; durationText = durationText.replace(/\s+/g, ''); // remove whitespaces // Number of episodes if (durationText.match(/^(\d+)x.*/)) { numberOfEpisodes = durationText.replace(/^(\d+)x.*/,"$1"); durationText = durationText.replace(/^\d+x/,""); } else { numberOfEpisodes = 1; } // hours & minutes if (durationText.match(/^(\d+)h.*/)) { hours = durationText.replace(/^(\d+)h.*/,"$1") ; minutes = durationText.replace(/^\d+h/,"") ; } else { hours = 0; if (durationText.match(/^(\d+)min.*/)) { minutes = durationText.replace(/^(\d+)min.*/,"$1") ; } else { minutes = 0; } } } itemTotal = ~~numberOfEpisodes * (~~hours * 60 + ~~minutes) ; counter=counter+itemTotal ; if (numberOfEpisodes > 1){ itemHours = Math.trunc(itemTotal / 60) ; itemMinutes = itemTotal % 60 ; let itemTotalText = '(' + itemHours + ' h ' + itemMinutes.toString().padStart(2,"0") + ' min)' ; let itemTotalDisplay = durationsNode[i].querySelector('[data-id="itemTotalDuration"]') ; if (itemTotalDisplay) { itemTotalDisplay.innerHTML=itemTotalText; } else { durationsNode[i].insertAdjacentHTML('beforeend', ' <span class="infos_small total-time" data-id="itemTotalDuration">' + itemTotalText + '</span>') ; } } episodesCounter = ~~episodesCounter + ~~numberOfEpisodes ; } let counterHours = Math.trunc(counter / 60); let counterMinutes = counter % 60 ; let totalDurationText = episodesLabel + "<strong>" + episodesCounter.toLocaleString() + "</strong>. " + durationLabel + "<strong>" + counterHours.toLocaleString() + " h " + counterMinutes.toString().padStart(2,"0") + " min</strong>"; let totalDisplay = document.querySelector('[data-id="totalDuration"]'); if (totalDisplay) { totalDisplay.innerHTML = totalDurationText ; } else { let statsStatut = document.getElementsByClassName("stats_statut") ; let counterDiv = document.createElement("div") ; counterDiv.setAttribute("class","stats_prix") ; counterDiv.dataset.id="totalDuration"; counterDiv.innerHTML = totalDurationText ; statsStatut[0].parentNode.insertBefore(counterDiv,statsStatut[0]) ; } } })();