NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name JVCPreview // @namespace CrazyJeux/Daring-Do // @author CrazyJeux/Daring-Do // @match *://www.jeuxvideo.com/* // @description Permet de prévisualiser les messages et topics au survol des liens avec la souris. // @version 2 // @grant none // ==/UserScript== function isPermalinkOrThread(url) { if (url === "#Protocole_inconnu") { return false; } var matchesPermalink = /^https?\:\/\/(www.)?jeuxvideo\.com\/[^\/]+\/forums\/message\/\d+/.test(url); if (matchesPermalink === true) { return true; } var matchesThread = /(^https?\:\/\/(www.)?jeuxvideo\.com)?\/forums\/\d+.*\.htm/.test(url); return matchesThread; } function insertAfter(referenceNode, newNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } function addStyle(rule) { var css = document.createElement('style'); css.type = 'text/css'; css.innerHTML = rule; document.body.appendChild(css); } function removeClass(element, classToRemove) { if (classToRemove === 'loading') { element.className = element.className.replace(/(?:^|\s)loadingIframe(?:\s|$)/gim, ''); } else { //'waiting' element.className = element.className.replace(/(?:^|\s)waitingForHover(?:\s|$)/gim, ''); } } function setIframeDimensions(iframe, iframeBody) { var iframeMessages = iframeBody.getElementsByClassName('bloc-message-forum'); var h, w; if (iframeMessages.length === 0) { h = iframeBody.getElementsByTagName('b')[0].offsetHeight + 20; w = iframeBody.getElementsByTagName('b')[0].offsetWidth + 30; } else { h = iframeBody.offsetHeight + 25; w = iframeBody.offsetWidth + 25; } iframe.height = h + 'px'; iframe.width = w + 'px'; } function loadIframe(div, link) { if (div.innerHTML === '' && link.className.indexOf('loadingIframe') < 0) { link.className += ' loadingIframe'; var iframe = document.createElement('iframe'); iframe.src = link.href; var blocs = document.getElementsByClassName("bloc-contenu"); if (blocs.length === 0) { iframe.width = '649px'; } else { var bloc = blocs[blocs.length - 1]; iframe.width = bloc.offsetWidth + 'px'; } iframe.height = '500px'; iframe.onload = function () { var iframeDocument = this.contentDocument ? this.contentDocument : this.contentWindow.document; var iframeBody = iframeDocument.getElementsByTagName('body') [0]; var iframeMessages = iframeBody.getElementsByClassName('bloc-message-forum'); if (iframeMessages.length > 0) { var wrapper = document.createElement("div"); for (var i = 0; i < iframeMessages.length; i++) { var html = iframeMessages[i].outerHTML; wrapper.innerHTML += html; } iframeBody.innerHTML = ''; iframeBody.appendChild(wrapper); } else { var divInfo = document.createElement('div'); divInfo.innerHTML = '<b>Ce topic/message n\'existe plus.</b>'; iframeBody.innerHTML = ''; iframeBody.appendChild(divInfo); } removeClass(link, 'loading'); if (div.style.display === 'none') { link.className += ' waitingForHover'; } else { setIframeDimensions(iframe, iframeBody); } }; div.appendChild(iframe); } } function showIframe() { var div = this.getElementsByTagName("div")[0]; var link = this.getElementsByTagName("a")[0]; div.style.display = 'block'; if (link.className.indexOf('waitingForHover') > 0) { var iframe = div.getElementsByTagName('iframe') [0]; var iframeDocument = iframe.contentDocument ? iframe.contentDocument : iframe.contentWindow.document; var iframeBody = iframeDocument.getElementsByTagName('body') [0]; setIframeDimensions(iframe, iframeBody); removeClass(link, 'waiting'); return; } if (loadIframesOnPageLoad === false) { loadIframe(div, link); } } function hideIframe() { this.getElementsByTagName("div")[0].style.display = 'none'; } function callMe() { var table = document.getElementById("table-liste-topic-forum"); if (table !== null) { table.style.width = "auto"; } addStyle('.loadingIframe { cursor: wait; }'); var messages = document.querySelectorAll(".txt-msg, .titre-topic"); for (var i = 0; i < messages.length; i++) { var links = messages[i].getElementsByTagName('a'); for (var j = 0; j < links.length; j++) { var href = links[j].getAttribute("href"); //console.log("href='" + href + "'"); var isLink = isPermalinkOrThread(href); if (isLink === true) { //console.log("Permalink/thread: " + links[j].href); var divWrapper = document.createElement('div'); divWrapper.addEventListener('mouseover', showIframe, true); divWrapper.addEventListener('mouseout', hideIframe, true); divWrapper.innerHTML = links[j].outerHTML; divWrapper.style.display = "inline-block"; var parent = links[j].parentNode; parent.replaceChild(divWrapper, links[j]); var div = document.createElement('div'); div.style.display = 'none'; div.style.position = 'relative'; div.style.zIndex = '100'; divWrapper.appendChild(div); if (loadIframesOnPageLoad === true) { (function (divWrapper, div) { setTimeout(function () { var link = divWrapper.getElementsByTagName("a")[0]; loadIframe(div, link); }, 0); })(divWrapper, div); } } } } } function inIframe() { try { return window.self !== window.top; } catch (e) { return true; } } var loadIframesOnPageLoad = false; //Prevent very long/infinite loops... if (inIframe() === false) { callMe(); } //Respeed addEventListener('instantclick:newpage', callMe);