new Facebook figuccio

new facebook color 2025

当前为 2025-04-15 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name new Facebook figuccio
  3. // @namespace https://greasyfork.org/users/237458
  4. // @version 41.4
  5. // @author figuccio
  6. // @description new facebook color 2025
  7. // @match https://*.facebook.com/*
  8. // @grant GM_addStyle
  9. // @grant GM_setValue
  10. // @grant GM_getValue
  11. // @grant GM_registerMenuCommand
  12. // @require https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js
  13. // @run-at document-start
  14. // @require https://code.jquery.com/jquery-latest.js
  15. // @require https://code.jquery.com/ui/1.13.2/jquery-ui.js
  16. // @icon https://facebook.com/favicon.ico
  17. // @require https://greasyfork.org/scripts/12228/code/setMutationHandler.js
  18. // @noframes
  19. // @license MIT
  20. // ==/UserScript==
  21. (function() {
  22. 'use strict';
  23. // Interrompe la riproduzione degli annunci pubblicitari durante un video.
  24. window.addEventListener('playing', function(event) {
  25. event.stopImmediatePropagation();
  26. event.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.childNodes[1].childNodes[0].childNodes[0].setAttribute('hidden', 'hidden');
  27. }, true);
  28.  
  29. //Interrompe la riproduzione degli annunci pubblicitari alla fine di un video.
  30. window.addEventListener('ended', function(event) {
  31. event.stopImmediatePropagation();
  32. event.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.childNodes[1].childNodes[0].childNodes[0].removeAttribute('hidden');
  33. }, true);
  34. /////////////////////////////
  35. //Facebook Reel: Video Controls
  36. document.addEventListener('play', (evt) => {
  37. const target = (evt || 0).target;
  38.  
  39. if (target instanceof HTMLVideoElement && !target.hasAttribute('controls') && location.href.includes('reel')) {
  40. let buttonLayer = target.closest('div[class][role="button"][tabindex]');
  41.  
  42. if (buttonLayer) {
  43. target.setAttribute('controls', '');
  44.  
  45. setTimeout(() => {
  46. Object.assign(target.style, {
  47. 'position': 'relative',
  48. 'zIndex': 999,
  49. 'pointerEvents': 'all'
  50. });
  51.  
  52. [...buttonLayer.querySelectorAll('.x10l6tqk.x13vifvy:not(.x1m3v4wt)')].forEach(s => {
  53. Object.assign(s.style, {
  54. 'pointerEvents': 'none',
  55. 'position': 'relative',
  56. 'zIndex': 1000
  57. });
  58. });
  59. }, 1);
  60. }
  61. }
  62. }, true);
  63.  
  64. //accetta cookie
  65. // Funzione per rilevare la pagina di login
  66. function isLoginPage() {
  67. return document.querySelector('form[action*="/login"]') !== null;
  68. }
  69. // Verifica se sei sulla pagina di login al caricamento della pagina
  70. if (isLoginPage()) {
  71. console.log('Sei sulla pagina di login di Facebook');
  72. document.cookie = "datr=LVSeZ6822RyG0BNdfQNdbC3d;domain=.facebook.com;max-age=315360000";
  73. //accetta tutti cookie facebook
  74. GM_addStyle('div[data-cookiebanner=\"banner\"],.hasCookieBanner #root ~ .accelerate,body[tabindex] > div > #viewport > div:first-child:not(#MChromeHeader),div[data-testid=\"cookie-policy-dialog\"],div[data-testid=\"cookie-policy-manage-dialog\"]{display:none !important}.uiLayer[data-testid=\"cookie-policy-banner\"]{display:none !important}.hasCookieBanner > div{position:static !important}');
  75. if(!localStorage.reload) {
  76. //correzione errore triangolo giallo
  77. setTimeout(function(){document.location.reload();}, 2000);
  78. localStorage.reload = 1;
  79. }
  80. }
  81.  
  82. /////////////////////////////////
  83. //mostra altro...
  84. var l_foundButton = false;
  85. function clickButton() {
  86. if (document.URL.match(/facebook.com\/*(\?.*)*/)) {
  87. //Cerca il pulsante
  88. const buttons = document.querySelectorAll('.x1iyjqo2');
  89. buttons.forEach((button) => {
  90. if (button.innerText == "Altro...") {
  91. button.click();
  92. l_foundButton = true;
  93. }
  94. });
  95. }
  96.  
  97. // Aggiunto controllo e log per debug
  98. if (l_foundButton) {
  99. console.log("Button 'Altro...' clicked.");
  100. l_foundButton = false; // Reset per il prossimo ciclo
  101. } else {
  102. //console.log("Button 'Altro...' not found.");
  103. }
  104. }
  105. // Chiama clickButton ogni 1000 millisecondi (1 secondo) finché il pulsante non viene trovato
  106. var intervalId = setInterval(() => {
  107. if (!l_foundButton) {
  108. clickButton();
  109. } else {
  110. clearInterval(intervalId); //Interrompere l'intervallo una volta cliccato il pulsante
  111. }
  112. }, 1000);
  113. // Esegui clickButton() all'avvio per gestire i bottoni già presenti
  114. clickButton();
  115. ///////////////////////////////////////////////
  116. //form login
  117. GM_addStyle('._6luv {background-color:#476014!important;border:2px solid blue!important;}');
  118. //nasconde pop up notifica a sinistra quando si gioca
  119. GM_addStyle('ul[data-gt*=\"\\\"ref\\\":\\\"beeper\\\"\"] {display:none!important;}');
  120. //nasconde pop up notifica a sinistra sulla home
  121. GM_addStyle('div[role="complementary"][aria-labelledby] {display:none!important;}');
  122. // ti piace questo gioco popup
  123. GM_addStyle('._3mqg {display:none!important}');
  124. ///////////////////////crea una storia dalla sez centrale rimosse (necessario Condividi una ho scrivi qualcosa)
  125. GM_addStyle('.xquyuld.x10wlt62.x6ikm8r.xh8yej3.xt3gfkd.xu5ydu1.xdney7k.x1qpq9i9.x1jx94hy.x1ja2u2z.x1n2onr6.x9f619 > .xwib8y2.x1y1aw1k {display:none!important}');//marzo 2024
  126. ////////////////////////////////////////modificato marzo 2025/////////////////////////////////////////////////
  127. GM_addStyle(`
  128. /* Stili comuni */
  129. div[role="banner"]+div div[role="navigation"],
  130. div[role="complementary"],
  131. .xz9dl7a.x1swvt13.x1pi30zi.x1a8lsjc.x1a02dak.x78zum5.x6s0dn4,
  132. .x6o7n8i.x1unhpq9.x1hc1fzr > div {
  133. border-radius:14px;
  134. font-family:monospace !important;
  135. }
  136.  
  137. div[role="banner"]+div div[role="navigation"],
  138. .x6o7n8i.x1unhpq9.x1hc1fzr > div {
  139. border: 2px solid lime !important;
  140. }
  141.  
  142. div[role="complementary"],
  143. .xz9dl7a.x1swvt13.x1pi30zi.x1a8lsjc.x1a02dak.x78zum5.x6s0dn4 {
  144. border: 2px solid red !important;
  145. }
  146. /*stelline al passaggio mouse*/
  147. div[role="navigation"]:hover,
  148. div[role="complementary"]:hover {
  149. background-image: url(https://media2.giphy.com/media/asG02gUfDyIxdODF76/giphy.gif);
  150. background-blend-mode:overlay;
  151. }
  152.  
  153. /* Nascondi watch marketplace groups gaming*/
  154. div[role="navigation"][aria-label="Facebook"] > ul > li:nth-child(n+2):nth-child(-n+5) {
  155. display:none !important;
  156. }
  157.  
  158. /* cerchi notifiche messaggi ecc */
  159. .x1qhmfi1 {
  160. border-radius:22px !important;
  161. border:2px solid #c471ed !important;
  162. }
  163. `);
  164.  
  165. var $ = window.jQuery;//$ evita triangolo giallo
  166. $(document).ready(function() {
  167. //remove sponsorizzati marketplace
  168. const MARKET_PLACE_REGEX = /(?:https?:\/\/)?(?:www\.)?(mbasic.facebook|m\.facebook|facebook|fb)\.(com|me)\/marketplace/ig
  169.  
  170. new MutationObserver(function(mutationList, observer) {
  171. // Assicurati di essere sul lato marketplace di Facebook
  172. if (!window.location.href.match(MARKET_PLACE_REGEX)) {
  173. return;
  174. }
  175.  
  176. // Nascondi i risultati "sponsorizzati".
  177. document.querySelectorAll('div.xjkvuk6.x1iorvi4.x1uepa24.x291uyu.xnpuxes.x150jy0e.x1e558r4.xs83m0k.x1iyjqo2.xdt5ytf.x1r8uery.x78zum5.x9f619 > span').forEach(function(element) {
  178. const parent = element.parentElement;
  179. if(!parent) {
  180. return;
  181. }
  182.  
  183. parent.style.display = 'none';
  184. console.log("Hidden sponsored item", parent);
  185.  
  186. // Prendi la riga che contiene "Sponsorizzato" + nome della categoria
  187. const parentBar = element.closest('.xkrivgy.x1gryazu.x1n2onr6')
  188. if(!parentBar) {
  189. return;
  190. }
  191.  
  192. // Rimuovi la parte effettiva "Sponsorizzata".
  193. const sponsoredBarItem = parentBar.querySelector('.x1pha0wt.x78zum5.x1r8uery.xdt5ytf.x1iyjqo2.x1qughib')
  194. if(!sponsoredBarItem) {
  195. return;
  196. }
  197.  
  198. sponsoredBarItem.style.display = 'none';
  199. console.log("Hidden sponsored bar", sponsoredBarItem);
  200. });
  201. }).observe(document.body, {childList:true, subtree:true, attributes: false});//, attributes: false
  202. ////////////////////////////////////////////////////////////
  203. //feed piu grandi compreso ha cosa stai pensando
  204. function adjustWidths() {
  205. const feedElements = document.querySelectorAll('.x193iq5w.xvue9z.xq1tmr.x1ceravr');
  206. feedElements.forEach(element => {
  207. if (element.style.width !== '1000px') {
  208. element.style.width = '1000px';
  209. }
  210. });
  211. }
  212.  
  213. // Osserva le modifiche nel documento e aggiusta le larghezze dei feed
  214. const observer = new MutationObserver(adjustWidths);
  215. observer.observe(document.body, {childList:true, subtree:true, attributes: false});//, attributes: false
  216.  
  217. // Aggiusta le larghezze quando la pagina è completamente caricata
  218. window.addEventListener('load', adjustWidths);
  219. });
  220. ////////////////////color picker///////////
  221. const $f = window.jQuery.noConflict();//$f evita triangolo giallo
  222. //avvia la funzione dopo che la pagina e stata caricata
  223. $f(document).ready(function() {
  224. // Aggiungi la funzione per il trascinamento limitato allo schermo
  225. function makeDraggableLimited(element) {
  226. element.draggable({
  227. containment: "window",
  228. stop: function(event, ui) {
  229. // Memorizza la posizione dopo il trascinamento
  230. GM_setValue('boxPosition', JSON.stringify(ui.position));//importante
  231. }
  232. });
  233. }
  234. ////////////////////////////
  235. const body=document.body;
  236. const style="position:fixed; top:-3px;left:720px;z-index:99999;"
  237. const box=document.createElement("div");
  238.  
  239. box.id="myMenu";
  240. box.style=style;
  241. body.append(box);
  242. // Ripristina la posizione salvata se presente
  243. const savedPosition = GM_getValue('boxPosition');
  244. if (savedPosition) {
  245. const parsedPosition = JSON.parse(savedPosition);
  246. $(box).css({ top: parsedPosition.top, left: parsedPosition.left });
  247. }
  248. // Rendi l'elemento trascinabile con limitazioni di schermo
  249. makeDraggableLimited($(box));
  250. ////////////////////////////audio effetto sonoro quando si clicca sulla x rossa
  251. var Sound = new Audio("data:audio/mp3;base64,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2C4dCNdbTPu6uQyGfhEwcUOZ1EDmKZUUUodiyqXb+xpCtkPFldX8tGl6lo9He4uIl36lqy4CQkswA6oJMBvlAHMxiyK4PLIYxynyrJYrEcjyL4L2aS5/KK71It1Khoa/xBPCD25cQHtWmHrh6CoVStb/ey8jxSur+WjV6rR6O9xaHX2qOLQUUwAASpdgB7TkoXo5kNMB+I8TMPavP9AmWzK1VKs+Vhyqz2PcJjoZ4dmDoRoW/3mamKba4vhabatGGZioP3mxJf+6Y2urBW/fxEktCfvFjH/+YlkQVCAQBScuAIpP637T18LA1nCbuq8QwFkUd0ZoPx+FpEVbHHHHcrH1HuVdJAw5p3f9q4hsOyqbdacO2s8UUXDRXaVCWkVLYeHUvgICMERsyVGCXkhCAEAAALQAKIX/+5IEWYACpCLT+w9A4lVEWm9hhkoKoG8zh5hwyU8N5qTzDhHItxzF+IU5GaADS5iGlxVCiP4lRLtkhExOlDQmfgMRBQCiai4KEktglszMt9XWhWGgoKCwgpbFh8X/4/pvTccm+P9xMV00K4FDf/wU1DAABvAFiIyQZXH8XKcwQEk0xcTpRiFNRPiXbJ6OE6VaRw4kDIzIKAQk0AhNUmPqq2UbUgpygoKCwgqbFh8X/N/oKTNi5N8O8FJgvSQVkFHGjPBattaSSTgAXuqxUVShYqxI8VFWOrFWe/4sLUqFhb6f9v/b4sLf/+Kiv//qFvAADZZZSNlayxyVlBA46OysDBA0DERKqIPJVVTO//XqqqWBiVURMDVRBwMSqDB4NVUGK//////aabKdpp///////6qv2xVVTEFNRTMuOTkuM1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSBG8P8VgAKeghGABG4iSlDGOAQAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==");
  252.  
  253. //effetto disolvenza box color picker al caricamento pagina
  254. document.getElementById("myMenu").style.display="none";
  255. $f("#myMenu").fadeIn(3000);
  256. //mostra/nascondi dal menu
  257. function prova() {
  258. var menu = document.getElementById("myMenu");
  259. //Animazione per mostrare/nascondere + fermare setinterval orologio box nascosto e riavviarlo se visibile
  260. $(box).fadeToggle(3000, function() {
  261. if ($(box).is(":visible")) {
  262. // Riavvia l'intervallo se la casella è visibile
  263. intervalId = setInterval(myTimer, intervalTime);
  264. } else {
  265. // Interrompere l'intervallo se la casella è nascosta
  266. clearInterval(intervalId);
  267. }
  268. });
  269. }
  270. GM_registerMenuCommand("nascondi/mostra box",prova);
  271. ///////////////////////////////////////////////////////////////
  272. function logout() {
  273. box.addEventListener("click", function(e) {e.preventDefault(); document.querySelector('form[action^="/logout.php?"').submit(); e.target.innerHTML='<img src="//www.facebook.com/images/loaders/indicator_blue_small.gif"/>'},false);
  274. }
  275. /////////////////////////////////////////////////////////////////
  276. const userdata = {color:'figuccio'}
  277. var mycolor = GM_getValue(userdata.color, "#980000"); // Valore predefinito (marzo 2025)
  278.  
  279. // salvare i dati personalizzati ._95k9, schermata login
  280. function saveSetting(color) {GM_setValue(userdata.color,mycolor);
  281. $f('._95k9,div[role="banner"]+div div[role="navigation"], div[role="complementary"], div[aria-label="Facebook"][role="navigation"]').css("background-color",mycolor);
  282. }
  283. // Funzione per controllare se sei sulla homepage di Facebook
  284. function isHomePage() {
  285. return window.location.pathname === '/' || window.location.pathname === '/home';
  286. }
  287. // Aggiungi un MutationObserver per monitorare i cambiamenti nel DOM (aprile 2025)
  288. const observer = new MutationObserver((mutations) => {
  289. mutations.forEach((mutation) => {
  290. if (mutation.addedNodes.length > 0) {
  291. if (isHomePage()) {
  292. hideSponsoredSections();//sponsorizzato
  293. hideStoryCreation(); // Nascondere storie
  294. }
  295. }
  296. if (mutation.removedNodes.length > 0) {
  297. saveSetting(mycolor);// Applica il colore ogni volta che cambia il DOM
  298. saveCheckbox(); // Gestire checkbox
  299. }
  300. });
  301. });
  302. // Configura e osserva il body del documento
  303. observer.observe(document.body, { childList: true, subtree: true, attributes: false });//aggiunto , attributes: false
  304. //sponsorizzato
  305. function hideSponsoredSections() {
  306. var sponsor = document.querySelectorAll('[aria-label="Inserzionista"]');
  307. sponsor.forEach(function(sponsor) {
  308. sponsor.style.display = 'none';
  309. });
  310. }
  311. ////////////////////////////////
  312. // Funzione per nascondere la sezione di creazione delle storie
  313. function hideStoryCreation() {
  314. var storyComposer = document.querySelector('[aria-label="Storie"]');
  315. if (storyComposer) {
  316. storyComposer.style.display = 'none';
  317. }
  318. }
  319.  
  320. // Funzione per gestire lo stato della checkbox e la sfocatura della chat
  321. function saveCheckbox() {
  322. const checkbox = $("#checkbox1");
  323. const chat = $(".xwib8y2 ul");
  324. const isChecked = GM_getValue("checkboxState") === "true";
  325.  
  326. checkbox.prop("checked", isChecked).val(isChecked ? "Show Chat 😃" : "Hide Chat 😩");
  327. chat.css("filter", isChecked ? "blur(7px)" : "");
  328.  
  329. checkbox.change(() => {
  330. const newState = checkbox.prop("checked");
  331. GM_setValue("checkboxState", newState.toString());
  332. chat.css("filter", newState ? "blur(7px)" : "");
  333. checkbox.val(newState ? "Show Chat 😃" : "Hide Chat 😩");
  334. });
  335. }
  336. $f(document).ready(saveCheckbox);
  337. document.onreadystatechange = function () {
  338. if (document.readyState === "complete") {
  339. saveCheckbox();
  340. }
  341. };
  342. //Imposta lo stile css degli elementi checkbox (26 marzo 2025)
  343. GM_addStyle(`
  344. input[type=checkbox] {
  345. accent-color:red;
  346. outline:1px solid lime;
  347. cursor:pointer;
  348. width:15px;
  349. height:15px;
  350. }
  351.  
  352. input[type=checkbox]::after {
  353. content: attr(value);
  354. margin:-2px 18px;
  355. vertical-align:top;
  356. white-space:nowrap;
  357. color:lime;
  358. background:brown;
  359. }
  360.  
  361. input[type=checkbox]:checked {
  362. outline:1px solid yellow;
  363. }
  364.  
  365. input[type=checkbox]:checked::after {
  366. color:red;
  367. background:aquamarine;
  368. }
  369. `);
  370. ///////////////////////clock con mostra nascondi millisec cambio lingua it-en per la data
  371. let use12HourFormat = GM_getValue('use12HourFormat', false);// Default è il formato 24 ore
  372. let showMilliseconds = GM_getValue('showMilliseconds', true);
  373. let showDate = GM_getValue('showDate', true); // Aggiungi un valore predefinito se nulla è stato salvato
  374. let intervalTime = showMilliseconds ? 90 : 1000;//Imposta l'intervallo iniziale in base allo stato
  375. let language = GM_getValue('language') || 'it'; // Recupera la lingua dal localStorage o usa 'it' come predefinita
  376. const languages = {
  377. en: { weekday: 'short', month: 'short', day: '2-digit', year: 'numeric' },
  378. it: { weekday: 'short', month: '2-digit', day: '2-digit', year: 'numeric' }
  379. };
  380.  
  381. function initialize() {
  382. if (GM_getValue('showDate') === undefined) {
  383. GM_setValue('showDate', true); // Imposta il valore predefinito solo se non esiste
  384. }
  385. showDate = GM_getValue('showDate'); // Recupera il valore salvato
  386. }
  387.  
  388. function myTimer() {
  389. const d = new Date();
  390. const t = d.toLocaleTimeString();
  391. const mm = d.getMilliseconds();
  392. const date = new Date().toLocaleString(language, languages[language]); // Usa la lingua selezionata per la data
  393. let hours = d.getHours(); // Define the hours variable
  394. if (use12HourFormat) {
  395. const suffix = hours >= 12 ? 'PM' : 'AM';
  396. hours = hours % 12 || 12; // Convert to 12-hour format
  397. // Visualizzazione condizionale della data e dei millisecondi
  398. const displayDate = showDate ? date : "";
  399. const displayMilliseconds = showMilliseconds ? `:${mm}` : "";
  400. document.getElementById("demo").innerHTML = `${displayDate} ${t}${displayMilliseconds} ${suffix}`;
  401. } else {
  402. const displayDate = showDate ? date : "";
  403. const displayMilliseconds = showMilliseconds ? `:${mm}` : "";
  404. document.getElementById("demo").innerHTML = `${displayDate} ${t}${displayMilliseconds}`;
  405. }
  406. }
  407.  
  408. //Funzione per alternare la visibilità dei millisecondi
  409. function toggleMilliseconds() {
  410. showMilliseconds = !showMilliseconds;
  411. GM_setValue('showMilliseconds', showMilliseconds); // Salva lo stato di visualizzazione dei Milliseconds nel localStorage
  412. intervalTime = showMilliseconds ? 90 : 1000; // Aggiorna l'intervallo in base a `showMilliseconds`
  413. clearInterval(intervalId); // Cancella il setInterval corrente
  414. intervalId = setInterval(myTimer, intervalTime); // Avvia un nuovo setInterval con il nuovo intervallo
  415. }
  416. // Funzione per mostrare/nascondere la data
  417. function toggleDate() {
  418. showDate = !showDate;
  419. GM_setValue('showDate', showDate); // Salva lo stato di visualizzazione della data nel localStorage
  420. myTimer(); // Aggiorna la visualizzazione immediatamente
  421. }
  422. // Funzione per cambiare lingua
  423. function changeLanguage() {
  424. language = (language === 'it') ? 'en' : 'it';
  425. GM_setValue('language', language); // Salva la lingua scelta nel localStorage
  426. alert(`Lingua cambiata a: ${language}`);
  427. }
  428. function toggleFormat() {
  429. use12HourFormat = !use12HourFormat;
  430. GM_setValue('use12HourFormat', use12HourFormat);
  431. alert(`Format changed to ${use12HourFormat ? '12-hour' : '24-hour'}`);
  432. }
  433. // Crea il menu e inizializza il setInterval
  434. GM_registerMenuCommand("nascondi/mostra millesimi", toggleMilliseconds);
  435. GM_registerMenuCommand("Nascondi/Mostra data", toggleDate); // Aggiungi il comando per mostrare/nascondere la data
  436. GM_registerMenuCommand("Cambia Lingua", changeLanguage);
  437. GM_registerMenuCommand('Toggle Clock Format', toggleFormat);
  438. initialize(); // Inizializza le impostazioni
  439. let intervalId = setInterval(myTimer, intervalTime);
  440.  
  441. //elemento html . width:290px evita che spostandolo hai lati cambi di dimensioni
  442. box.innerHTML=`
  443. <fieldset style="background:#3b3b3b;border:2px solid red;color:lime;border-radius:7px;text-align:left;height:39px;width:290px;">
  444. <div id="demo" title="Data-ora" style="border:1px solid yellow;border-radius:5px;cursor:pointer;text-align:center;margin-top:-10px;margin-left:86px;font-size:14px;width:max-content;">
  445. </div>
  446. <legend>Time</legend>
  447. <div id=setuiface style="width:auto;height:25px;margin-top:-9px;margin-left:-1px;margin-right:-4px;margin-bottom:0px;border-width:1px;color:lime;">
  448. <button id="colorspan" title="Hex value" style="margin-left:0px;margin-bottom:-19px;color:lime;background-color:brown;border:1px solid yellow;border-radius:5px;cursor:pointer;">${mycolor}</button>
  449. <input type="color" title="Color picker" list="colors" id="colorinput" style="margin-left:1px;margin-top:12px;background-color:#3b3b3b;color:red;border:1px solid yellow;border-radius:5px;height:20px;width:51px;cursor:pointer;"value="${mycolor}">
  450. <span class="button" title="Esci" id='logout' style="background-color:red;border:1px solid yellow;border-radius:3px;cursor:pointer;padding:0px 3px;font-size:14px;">Logout</span>
  451. <span class="button" title="Chiudi" id='close' style="background-color:red;color:lime;border:1px solid yellow;border-radius:50%;cursor:pointer;font-size:14px;padding:3px 6px;display:inline-block;line-height:16px;margin-top:6px;">X</span>
  452. <input type="checkbox" id="checkbox1" title="Sfoca" value="Hide Chat 😩">
  453. </fieldset>
  454. `;
  455. //Una serie di elementi get
  456. var colorspan=document.querySelector('#colorspan');
  457. var colorinput=document.querySelector('#colorinput');
  458. var MenuClose=document.querySelector('#close');
  459. var Menulogout=document.querySelector('#logout');//funzione logout
  460. //chiude dalla x rossa
  461. MenuClose.addEventListener('click',prova,false);
  462. //richiama effetto sonoro chiudendo con la x rossa
  463. MenuClose.onclick = function() {Sound.play();};
  464. Menulogout.addEventListener('click',logout,false);//funzione logout
  465. /////////////////////////////////////////////////////////////////////////
  466. //fa vedere la modifica colore
  467. colorinput.addEventListener('input', colorChange, false);
  468. function colorChange (e) {
  469. mycolor = e.target.value;
  470. colorspan.innerHTML=e.target.value;
  471. //colore immediatamente visibile
  472. GM_setValue(userdata.color, mycolor);
  473. saveSetting(mycolor);
  474. }
  475. //})();
  476. //////////////////no login recent (gennaio 2025)
  477. window.setTimeout(clearRecentLogins, 100);
  478. function clearRecentLogins() {
  479. if (document.getElementById('email')) {
  480. document.getElementById('email').value = "";
  481. document.getElementById('email').focus();
  482. }
  483. var recentLogins = document.querySelectorAll('.removableItem a[role="button"][ajaxify^="/login/device-based"]');
  484. if (recentLogins.length === 0) {
  485. return;
  486. }
  487. recentLogins.forEach(function(login) {
  488. login.click();
  489. });
  490. }
  491. })();
  492. //////////
  493. })();