NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name JV Avatar // @namespace http://www.jeuxvideo.com/jvavatar // @description Afficher les avatars à gauche des messages dans les forums de Jeuxvideo.com. // @include http://www.jeuxvideo.com/forums/1-* // @include http://www.jeuxvideo.com/forums/3-* // @version 1.2 // ==/UserScript== // Permettre l'utilisation de localStorage pour le cache. if (window.localStorage != null) { localStorage = window.localStorage; } else if (typeof unsafeWindow !== 'undefined' && unsafeWindow.localStorage != null) { localStorage = unsafeWindow.localStorage; } // Charger jQuery. if (window.$ != null) { $ = window.$; jQueryLoaded(); } else if (typeof unsafeWindow !== 'undefined' && unsafeWindow.$ != null) { $ = unsafeWindow.$; jQueryLoaded(); } // Si jQuery n'est pas accessible directement (Chrome), // utiliser cette astuce qui consiste à charger notre // script dans une balise <script>, à la portée du $. else { var script = document.createElement("script"); script.appendChild(document.createTextNode("(" + jQueryLoaded.toString() + ")();")); (document.body || document.head || document.documentElement).appendChild(script); } // Une fois que jQuery est chargé... function jQueryLoaded() { // Fonction pour insérer l'avatar à côté // du message. var setImg = function(url, msg) { var img = new Image(); img.onload = function() { $(msg).css('min-height', (img.height + 20) + 'px'); var supdiv = $('<div></div>'); supdiv.css('width','90px'); supdiv.css('height',img.height+'px'); supdiv.css('float', 'left'); supdiv.css('margin','10px'); supdiv.css('margin-bottom','0'); supdiv.css('margin-top','10px'); var div = $('<div></div>'); div.css('margin','auto'); div.css('width',img.width+'px'); div.css('height',img.height+'px'); if(img.width > 30 && img.height > 30) { div.css('box-shadow','0 0 10px black inset'); div.css('border-radius', '5px'); } div.css('background', 'url(' + url + ') no-repeat center center'); $(msg).prepend(supdiv.append(div)); } img.src = url; }; $('.msg li').css('clear','none'); // Faire une boucle pour chaque message $('.msg').each(function() { var msg = this; if($('a[target=profil]', msg).length === 0) { return; } // Insérer des marges $('ul', this).css('margin-left', '110px'); $(this).css('min-height', '110px'); // Vérifier si l'avatar est présent dans le cache var pseudo = $('.pseudo strong', this).text(); var cached = false; if(localStorage[pseudo]) { setImg(localStorage[pseudo], msg); cached = true; } // Récupérer l'URL de l'avatar depuis la CDV window.setTimeout(function() { $.get($('a[target=profil]', msg).attr('href'), function(url) { if(url.indexOf(' src="http://image.jeuxvideo.com/avatars/') !== -1) { url = url.split(' src="http://image.jeuxvideo.com/avatars/')[1]; url = url.split('" border="0"')[0]; url = 'http://image.jeuxvideo.com/avatars/' + url; } else { url = 'http://image.noelshack.com/fichiers/2013/02/1357849258-banni.png'; } // Mettre à jour l'URL, et l'insérer dans le // message si le cache ne l'a pas déjà fait. localStorage[pseudo] = url; if(!cached) setImg(url, msg); }); }, cached ? 1000 : 0); }); }