// ==UserScript==
// @name [HFR] Smart Auto Rehost
// @version 4.0.6
// @namespace http://mycrub.info
// @description Rehost automatiquement (sur hfr-rehost.net) les images provenant d'une liste de sites donnés
// @include http://forum.hardware.fr/*
// ==/UserScript==
var img, src;
var rehost = GM_getValue("ar_rehost_site", "http://hfr-rehost.net/");
function processNode(node) {
var cmpt = 0;
var toRehost = getRehostableRegExps();
var startTime = new Date().valueOf();
var imgs = node.getElementsByTagName('img');
for (var i = 0; i < imgs.length; ++i) {
img = imgs[i];
src = img.getAttribute('src');
for (var j = 0; j < toRehost.length; j++) {
if (src && (src.match(toRehost[j]))) {
img.setAttribute('src', rehost + src);
img.setAttribute('alt', 'Rehosted: '+ src);
img.setAttribute('title', 'Rehosted: ' + src);
cmpt++;
}
}
}
GM_log(cmpt + " images en " + (new Date().valueOf() - startTime) + " ms");
}
function getRehostableRegExps() {
var rehostables = getCurrentRehostables().split("\n");
var result = [];
for (var i = 0; i < rehostables.length; i++) {
if (rehostables[i] && rehostables[i].length>0) {
result[result.length] = '^http://([^/:])*' + rehostables[i] + '/.*';
}
}
return result;
}
var getElementByXpath = function (path, element)
{
var arr = Array(), xpr = document.evaluate(path, element, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
for (;item = xpr.iterateNext();) arr.push(item);
return arr;
}
var cssManager =
{
cssContent : '',
addCssProperties : function (properties)
{
cssManager.cssContent += properties;
},
insertStyle : function()
{
GM_addStyle(cssManager.cssContent);
cssManager.cssContent = '';
}
}
function getCurrentImgUrl() {
return GM_getValue("ar_icon", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAMAAAAs2N9uAAAAAXNSR0IArs4c6QAAAwBQTFRFAAAAgAAAAIAAgIAAAACAgACAAICAgICAwMDA/wAAAP8A//8AAAD//wD/AP//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAABmAACZAADMAAD/ADMAADMzADNmADOZADPMADP/AGYAAGYzAGZmAGaZAGbMAGb/AJkAAJkzAJlmAJmZAJnMAJn/AMwAAMwzAMxmAMyZAMzMAMz/AP8AAP8zAP9mAP+ZAP/MAP//MwAAMwAzMwBmMwCZMwDMMwD/MzMAMzMzMzNmMzOZMzPMMzP/M2YAM2YzM2ZmM2aZM2bMM2b/M5kAM5kzM5lmM5mZM5nMM5n/M8wAM8wzM8xmM8yZM8zMM8z/M/8AM/8zM/9mM/+ZM//MM///ZgAAZgAzZgBmZgCZZgDMZgD/ZjMAZjMzZjNmZjOZZjPMZjP/ZmYAZmYzZmZmZmaZZmbMZmb/ZpkAZpkzZplmZpmZZpnMZpn/ZswAZswzZsxmZsyZZszMZsz/Zv8AZv8zZv9mZv+ZZv/MZv//mQAAmQAzmQBmmQCZmQDMmQD/mTMAmTMzmTNmmTOZmTPMmTP/mWYAmWYzmWZmmWaZmWbMmWb/mZkAmZkzmZlmmZmZmZnMmZn/mcwAmcwzmcxmmcyZmczMmcz/mf8Amf8zmf9mmf+Zmf/Mmf//zAAAzAAzzABmzACZzADMzAD/zDMAzDMzzDNmzDOZzDPMzDP/zGYAzGYzzGZmzGaZzGbMzGb/zJkAzJkzzJlmzJmZzJnMzJn/zMwAzMwzzMxmzMyZzMzMzMz/zP8AzP8zzP9mzP+ZzP/MzP///wAA/wAz/wBm/wCZ/wDM/wD//zMA/zMz/zNm/zOZ/zPM/zP//2YA/2Yz/2Zm/2aZ/2bM/2b//5kA/5kz/5lm/5mZ/5nM/5n//8wA/8wz/8xm/8yZ/8zM/8z///8A//8z//9m//+Z///M////RGKwUAAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2QYQCDgpfYIwVwAAAKJJREFUGNN10DEOwyAMBdBIHXo/OvUisOC74C5JlpyiWcBdwj1KF8ga22nVdsiXkNCTsWW67jA35Aw/AJg4jSj/QSm1tXed8yHFWJSy2ugw3IVqbeuqBBbnOcWnFi0gdHEoVmJphBayEqD2D54DD6azMXL31vKhLDReh2nqvfF46pes1AGAD/KU++8ThfZm9UWflRzPxDklRPru7ByPpeNP2QA+xXyJjelK2QAAAABJRU5ErkJggg==");
}
function getCurrentRehostables() {
return GM_getValue("ar_rehost_hostnames", "xs.to\nebaumsworld.com\nexplosm.net\ntinypic.com\nthreadbombing.com\nnoelshack.com\nggpht.com\nmyspacecdn.com\nmegaportail.com\nimagup.com\nxkcd.com\nskyrock.com\nytmnd.com\ni.pbase.com\nencyclopediadramatica.com\nlivejournal.com\nmuchosucko.com\ntinypic.com\nmoviesmedia.ign.com\ndvdrama.com\nsmugmug.com\nimagup.com\nhotflick.net\nchickencrap.com\nkoreus.com\nworldofwarcraft.com\njeuxvideo.com\njoystiq.com\nstereomaker.net\nimageshack.us\nwordpress.com\nbouletcorp.com\ndeviantart.com\nnofrag.com\nalkaspace.com\njj.am\ninexes.com\nmmo-champion.com\nlolpix.com\ngiftube.com\nflickr.com\nfacebook.com\nphotobucket.com\nnnm.ru\nse7en.ru\nb3ta.com\nimagehaven.net\nzimagez.com\nafrojacks.com\ncanardpc.com\ngopix.fr\njudgehype.com\nfohguild.org\nno-ip.org\narchive-host.com\nlelombrik.net\nhaluze.sk\nhostingpics.net\nfbcdn.net\nseries-80.net\ndrugs-plaza.com\nfree.fr\ndynamictic.info\nratemyeverything.net\nsmog.pl\nuppix.net\necho.cx\ntuxboard.com\nhumour.com\nmac.com\ntbn..google.com\n4gifs.com\nleboncoin.fr");
}
function getCurrentBl() {
return GM_getValue("ar_bl_hostnames", "hardware.fr\nhfr-rehost.net");
}
var hostRegExp = new RegExp("^http://([^/]*\\.)*([^\\./]+\\.[^\./]+)/.*", "i");
function getHostname(url) {
var ex = hostRegExp.exec(url);
return (ex && ex.length > 0) ? ex[2] : null;
}
function resetHostnames() {
GM_setValue("ar_rehost_hostnames", "xs.to;ebaumsworld.com;explosm.net;tinypic.com;threadbombing.com;noelshack.com;ggpht.com;myspacecdn.com;megaportail.com;imagup.com;xkcd.com;skyrock.com;ytmnd.com;i.pbase.com;encyclopediadramatica.com;livejournal.com;muchosucko.com;tinypic.com;moviesmedia.ign.com;dvdrama.com;smugmug.com;imagup.com;hotflick.net;chickencrap.com;koreus.com;worldofwarcraft.com;jeuxvideo.com;joystiq.com;stereomaker.net;imageshack.us;wordpress.com;bouletcorp.com;deviantart.com;nofrag.com;alkaspace.com;jj.am;inexes.com;mmo-champion.com;lolpix.com;giftube.com;flickr.com;facebook.com;photobucket.com;nnm.ru;se7en.ru;b3ta.com;imagehaven.net;zimagez.com;afrojacks.com;canardpc.com;gopix.fr;judgehype.com;fohguild.org;no-ip.org;archive-host.com;lelombrik.net;haluze.sk;hostingpics.net;fbcdn.net;series-80.net;drugs-plaza.com;free.fr;dynamictic.info;ratemyeverything.net;smog.pl;uppix.net;echo.cx;tuxboard.com;humour.com;mac.com;tbn..google.com;4gifs.com;leboncoin.fr");
}
function addHostname() {
var newHostname = prompt("Ajouter un nom de domaine (et tous ses sous-domaines) à rehoster.\nExemple : imageshack.us");
if (newHostname && newHostname.length > 0) {
GM_setValue("ar_rehost_hostnames", getCurrentRehostables() + ";" + newHostname);
}
}
function blHostname() {
var bl = prompt("Liste des noms de domaine à ne JAMAIS rehoster (séparateur ';')\nExemple : hardware.fr;hfr-rehost.net", GM_getValue("blHostnames", ""));
if (bl) {
GM_setValue("ar_bl_hostnames", bl);
}
}
function debug() {
var hn = prompt("Liste des noms de domaine à rehoster (séparateur ';')\nExemple : imageshack.us;imagup.com", GM_getValue("hostnames", ""));
if (hn) {
GM_setValue("ar_rehost_hostnames", hn);
}
}
// **********************************************
// Commandes de menu
// **********************************************
//GM_registerMenuCommand("[HFR] Auto Rehost -> Reset", this.resetHostnames);
//GM_registerMenuCommand("[HFR] Auto Rehost -> Ajouter un nom de domaine", this.addHostname);
//GM_registerMenuCommand("[HFR] Auto Rehost -> Ne pas rehoster", this.blHostname);
//GM_registerMenuCommand("[HFR] Auto Rehost -> Debug", this.debug);
var cmScript =
{
backgroundDiv : null,
configDiv : null,
timer : null,
setDivsPosition : function ()
{
cmScript.setBackgroundPosition();
cmScript.setConfigWindowPosition();
},
setBackgroundPosition : function ()
{
cmScript.backgroundDiv.style.width = document.documentElement.clientWidth + 'px';
cmScript.backgroundDiv.style.height = document.documentElement.clientHeight + 'px';
cmScript.backgroundDiv.style.top = window.scrollY + 'px';
},
setConfigWindowPosition : function ()
{
cmScript.configDiv.style.left = (document.documentElement.clientWidth / 2) - (parseInt(cmScript.configDiv.style.width) / 2) + window.scrollX + 'px';
cmScript.configDiv.style.top = (document.documentElement.clientHeight / 2) - (parseInt(cmScript.configDiv.clientHeight) / 2) + window.scrollY + 'px';
},
disableKeys : function (event)
{
var key = event.which;
if (key == 27)
{
clearInterval(cmScript.timer);
cmScript.hideConfigWindow();
}
//else if (key == 13) cmScript.validateConfig();
else if (event.altKey || (event.target.nodeName.toLowerCase() != 'input' && key >= 33 && key <= 40)) event.preventDefault();
},
disableTabUp : function (elt)
{
elt.addEventListener('keydown', function(event)
{
var key = event.which;
if (key == 9 && event.shiftKey) event.preventDefault();
}
, false);
},
disableTabDown : function (elt)
{
elt.addEventListener('keydown', function(event)
{
var key = event.which;
if (key == 9 && !event.shiftKey) event.preventDefault();
}
, false);
},
disableScroll : function ()
{
document.body.style.overflow = 'hidden';
window.addEventListener('keydown', cmScript.disableKeys, false);
},
enableScroll : function ()
{
document.body.style.overflow = 'visible';
window.removeEventListener('keydown', cmScript.disableKeys, false);
},
alterWindow : function (opening)
{
if (opening)
{
// On fige la fenêtre
cmScript.disableScroll();
// A chaque resize, repositionnement des divs
window.addEventListener('resize', cmScript.setDivsPosition, false);
// On cache les iframes de m%$!§
getElementByXpath('//iframe', document.body).forEach(function(iframe){ iframe.style.visibility = 'hidden'; });
}
else
{
cmScript.enableScroll();
window.removeEventListener('resize', cmScript.setDivsPosition, false);
getElementByXpath('//iframe', document.body).forEach(function(iframe){ iframe.style.visibility = 'visible'; });
}
},
buildBackground : function ()
{
if (!document.getElementById('ar_back'))
{
cmScript.backgroundDiv = document.createElement("div");
cmScript.backgroundDiv.id = 'ar_back';
cmScript.backgroundDiv.addEventListener('click', function()
{
clearInterval(cmScript.timer);
cmScript.hideConfigWindow();
}
, false);
cssManager.addCssProperties("#ar_back { display: none; position: absolute; left: 0px; top: 0px; background-color: #242424; z-index: 1001;}");
document.body.appendChild(cmScript.backgroundDiv);
}
},
buildConfigWindow : function ()
{
if (top.location != self.document.location) {
return;
}
if (!document.getElementById('ar_front'))
{
cmScript.configDiv = document.createElement("div");
cmScript.configDiv.id = 'ar_front';
cmScript.configDiv.style.width = '400px';
cssManager.addCssProperties("#ar_front { display: none; vertical-align: bottom; position: absolute; background-color: #F7F7F7; z-index: 1003; border: 1px dotted #000; padding: 8px; text-align: center; font-family: Verdana;}");
cssManager.addCssProperties("#ar_front span { font-size: 0.8em;}");
cssManager.addCssProperties("#ar_front select { border: 1px solid black; font-family: Verdana; font-size: 0.75em;}");
cssManager.addCssProperties("#ar_front img { display: block; margin-top: 10px; margin-left: auto; margin-right: auto;}");
cssManager.addCssProperties("#ar_front div { position: absolute; bottom: 8px; right: 8px;}");
cssManager.addCssProperties("#ar_front input[type=image] { margin: 2px; }");
var label = document.createElement('span');
label.innerHTML = "Configuration du script Auto Rehost :";
cmScript.configDiv.appendChild(label);
var iconContainer = document.createElement('p');
var iconLabel = document.createElement('span');
iconLabel.innerHTML = "Icone du bouton : ";
iconContainer.appendChild(iconLabel);
var inputIcon = document.createElement('input');
inputIcon.type = 'text';
inputIcon.id = 'ar_icon';
inputIcon.size = '50';
inputIcon.value= getCurrentImgUrl();
iconContainer.appendChild(inputIcon);
cmScript.configDiv.appendChild(iconContainer);
var rehostSiteContainer = document.createElement('p');
var rehostSiteLabel = document.createElement('span');
rehostSiteLabel.innerHTML = "Site de rehost : ";
rehostSiteContainer.appendChild(rehostSiteLabel);
var inputRehostSite = document.createElement('input');
inputRehostSite.type = 'text';
inputRehostSite.id = 'ar_rehost_site';
inputRehostSite.size = '50';
inputRehostSite.value= GM_getValue("ar_rehost_site", "http://hfr-rehost.net/");
rehostSiteContainer.appendChild(inputRehostSite);
cmScript.configDiv.appendChild(rehostSiteContainer);
var rehostListContainer = document.createElement('p');
var rehostListLabel = document.createElement('span');
rehostListLabel.innerHTML = "Noms de domaine à rehoster : ";
rehostListContainer.appendChild(rehostListLabel);
var inputRehostList = document.createElement('textarea');
inputRehostList.id = 'ar_rehost_hostnames';
inputRehostList.cols = '40';
inputRehostList.rows = '8';
inputRehostList.value= getCurrentRehostables();
rehostListContainer.appendChild(inputRehostList);
cmScript.configDiv.appendChild(rehostListContainer);
var blackListContainer = document.createElement('p');
var blackListLabel = document.createElement('span');
blackListLabel.innerHTML = "Noms de domaine à NE PAS rehoster : ";
blackListContainer.appendChild(blackListLabel);
var blackRehostList = document.createElement('textarea');
blackRehostList.id = 'ar_bl_hostnames';
blackRehostList.cols = '40';
blackRehostList.rows = '3';
blackRehostList.value= getCurrentBl();
blackListContainer.appendChild(blackRehostList);
cmScript.configDiv.appendChild(blackListContainer);
var buttonsContainer = document.createElement('div');
var inputOk = document.createElement('input');
inputOk.type = 'image';
inputOk.src = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%AF%C87%05%8A%E9%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%02%9FIDAT8%CB%A5%93%EBKSa%1C%C7%FD%3Bv%CEvl%03%09dD!%82%84P%7B%15%24%12%3B%9A%0D%C5%BC%2CK%D3%DD%BD%D26c%D8L%8B2r%5E%C6H)-%B3%D4jsNm%EA%D4%E6%D6%942q%D9QB%CC%BD%E9B%B5at%B1o%E7%EC%C5L%12%23z%E0%0B%0F%0F%CF%E7%F3%7B%AEq%00%E2%FE'%7F%0C%14%F8%0E%89r%A7%0F%EA%B3%3D)L%C6%E3%FDa%E9%888%2Cu%252Rg%A2%3E%DD%BEW%B4%AB%20%CF%9BJ%CB%3C%C9!%9DG%86%9BA%0B%FA%96%BB%A2%E9%5ClF%89%EB%18%24%BDTH%D2C%D1%3B%0A%D8%AAt%E6xR%E4%EA%9C%11%CE%D5~%D8%5E%5E%83i%AE2%1A%AE%EFX%EDC%E3L%15%0E%D8%F8%91d%1B%9F%DE%26%C8%F1%A4%083%DDI%EB%1C%CCM%AC%09%94%A1%C2_%02%CD%CC%19%E8%D8%94%B3%A9%F6%9D%85%FD%F5%3D%5C%9C%AA%80%D8B%AE%8B%AF%93%C2%98%40%E6N2%A8%C6%B2%A2%959%98%03U%DESPL%17B1U%00%F5T!%DCk%830x%95p%B0%92%DC%9E%23H%B8B%1Ab%82%8C%111%D3%19l%865%D8%84%0A_1%94O%E4%2C%98%0F%E5%24%1BO%3E%C6%DF%B8%C0%B5Pd%0Dm%CF%1Ba%9BkD%7C%3D%C9%C4%04G%ED%09%1B%0FVn%A36%A0%81%D6%5B%C4%AEd%00%8B%1F%E6%A1%9A(%C4%D8%DAP%14%FE%B1%F9%1Dm%CF.%C10Q%8C%BE%60'%04Fb%23%26%90%DC%A76%FA%97%BBa%F4%ABP%EB%D7%E2%D3%D7%8FQ%E8%FD%97%B71%D82%5B%0F%B5%2B%1Bz%F7i%F4%07%3B%20%A8%F9%5D%D0C17%E6%9B%D0%BEp%19%BAI9%CC%BEjD%BE%7D%8E%C2%9B%3F7ayz%01e%CE%2ChXAK%A0%0E%ED%5E3%A8*bk%0B%A9%B7%04%06%F9%40%1A%EC%2BwQ%3D!%87%DA%7D%12u%D3%E5Xz%B7%80%B6%D9%06%94%0E%1E%87%C2q%02%3Ag%0E%EC%AF%BA%91n%3D%0C%AA%92%D8%3A%C4d%2B_%B8%8F%BD%1A%B3G%83%87%CC%1DT%8E%E6A%3B%9C%03%D5%90%0CJ%07%17%0E%CE%C6%A3%A5.%18%87%8A!P%F3%D6)5!%DC%F6%90%12%9BH%3A%BE%81%88%98%DCep%B0%92%D6%80%19%FA%D1%22%9C%1B%96%A3%95%DD%82%9D%85%F5%CE%22%F0Ky%11%16%A6w%7C%CA%7B%1AH%9A2%11!i%87%04%ED~3z_X%D1%3Bo%85%C5kBZK*%04%0A%5E%88R%11%F4%AE%9F%89%3AO%8A(%03%A1%A7j%08F%A0%E5%85%05*%5E%98%AD%C8%B0%D1S%A5%84%E8%AF%BF%F1_%F3%0Bg%D0%AC%E5y%BA%D4c%00%00%00%00IEND%AEB%60%82";
inputOk.alt = 'Valider';
inputOk.addEventListener('click', cmScript.validateConfig, false);
var inputCancel = document.createElement('input');
inputCancel.type = 'image';
inputCancel.src = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%AF%C87%05%8A%E9%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%02!IDAT8%CB%95%93%EBN%13Q%14%85%89%89%C9%89%CF%A0V%89%86%C8%91%80%C4%1BB%5B%06(%AD%0D%08%26%D0%FB%85%5E%A4%80%B4%A5%ED%A4M%A16%EA%0FM%7C%12%9F%0BD%C5%DE%B0%D2%99v%3A%D3%E5%AE%98J-%25%E1%C7N%CEd%CE%FA%F6%AC%B5%F7%0C%00%18%B8L%D5%D7B%D7%CE%3Ew_%103%3A*%DEW%EC%0Fr%D9%ED%8D%D7lNC%2F%A0-%CE%EC%A2%95%CEB%8B'%7B%20u_%80%D7%03a46%B6%F0%EB%E5%CA%E7%EA%E2%D2%BD%7F%80%BFb%E4%DF%A1E%A5%25D47%B7%3B%10%D9%BB%C6%A9%3B%9A%D18%90%CB%A3%7D%3E6%5B%E3%E5%19%D3%95S%40*%CDZ%09Qk%ED%BE%01%3E~%82%96%CD%B5%01h%04B%5C%F6%F89u%87%B2%1D%03%E8%BD%EC%0F%E0x%FE%B9Z%16%E6%AEvY%D0b%09%A6%BE%8E%A9%9A%98%01%DE%7F%80%9AJ%A3%1E%0C%83%BAC%D9%8A%02%D9%BD%3F%E7%8A%C9B%E2Yvn%88%CD%C8%26k%84%D6%D5ft%87%EC%BC%05%F6%F2%24%CC%01%99%2Cd%8F%0F%959%B3Z%9E%9Ea%FD%A7p%1A%16%93%5C%5E%0DY%B2%E3%F6%01%0E7%20%A6Q%99%9D%D7JF%81%FD%7F%BF%07%209%3D%EDQ%014%0D%D8%9C%C0%8A%1D%D8I%92o%0B%0A%13S%FCB%80%E4ps%C9%E5%81%12%8E%00I%91%84)%20Fv(%40y%D5%8E%B2%DE%88%EFc%E3%FC%5C%40%CD%EE%E2%92%D3%0D%25%B4%0E%D0%18%25%87%0B%14%96Z%9C2h'%8B%CB%40d%03%B5%17%CB(%3C%7C%8C%C3%A1a%DE%05%A0%CD%E2%D4%1DJ%F0%15uM%40%A2O%A7%B0%D4%E2%A4%81%15%9EL%B0%A3%F1Gj%D5d%06%82!%9CX%AC8%1A%19%C5%C1%ADA%DE%01%D0f%095%9B%03J%20%04i%D5%01%0AK-%3E%D3w%02%FB62%C6%BE%0E%DFW%7F%1A%05H%D6%05%FC%18%7D%80%FD%1B%3A%A1%CB%02m%96P%5DXB%C90%ADQX%3Di%1F%DE%1Db_%06%EF%A8g%C5%3D!%96%F4F%A1%F0t%92%F5%FB%99%0Et%B7%D9%FE%F5%9B%C2%85c%BCl%FD%06r%BB%A4%C7%DB%ED%BE%14%00%00%00%00IEND%AEB%60%82";
inputCancel.alt = 'Annuler';
inputCancel.addEventListener('click', cmScript.hideConfigWindow, false);
cmScript.disableTabDown(inputCancel);
buttonsContainer.appendChild(inputOk);
buttonsContainer.appendChild(inputCancel);
cmScript.configDiv.appendChild(buttonsContainer);
document.body.appendChild(cmScript.configDiv);
}
},
validateConfig : function()
{
getElementByXpath('.//*[starts-with(@id, "ar_")]', document.getElementById('ar_front')).forEach(function(input)
{
GM_setValue(input.id, input.value);
}
);
cmScript.hideConfigWindow();
},
initBackAndFront : function()
{
if (document.getElementById('ar_back'))
{
cmScript.setBackgroundPosition();
cmScript.backgroundDiv.style.opacity = 0;
cmScript.backgroundDiv.style.display = 'block';
}
if (document.getElementById('ar_front'))
{
//document.getElementById('ar_alias_url').value = sleathRehost.currentAliasUrl;
}
},
showConfigWindow : function ()
{
cmScript.alterWindow(true);
cmScript.initBackAndFront();
var opacity = 0;
cmScript.timer = setInterval(function()
{
opacity = Math.round((opacity + 0.1) * 100) / 100;
cmScript.backgroundDiv.style.opacity = opacity;
if (opacity >= 0.8)
{
clearInterval(cmScript.timer);
cmScript.configDiv.style.display = 'block';
cmScript.setConfigWindowPosition();
}
}
, 1);
},
hideConfigWindow : function ()
{
cmScript.configDiv.style.display = 'none';
var opacity = cmScript.backgroundDiv.style.opacity;
cmScript.timer = setInterval(function()
{
opacity = Math.round((opacity - 0.1) * 100) / 100;
cmScript.backgroundDiv.style.opacity = opacity;
if (opacity <= 0)
{
clearInterval(cmScript.timer);
cmScript.backgroundDiv.style.display = 'none';
cmScript.alterWindow(false);
}
}
, 1);
},
setUp : function()
{
// On construit l'arrière plan
cmScript.buildBackground();
// On construit la fenêtre de config
cmScript.buildConfigWindow();
// On ajoute la css
cssManager.insertStyle();
},
createConfigMenu : function ()
{
GM_registerMenuCommand("[HFR] Auto Rehost -> Configuration", this.showConfigWindow);
}
};
cmScript.setUp();
cmScript.createConfigMenu();
// **********************************************
// Traitement de la page
// **********************************************
processNode(document);
// **********************************************
// Spécifique MesDiscussions.net
// **********************************************
var root = document.getElementById('mesdiscussions');
getElementByXpath('//table//tr[contains(@class, "message")]//div[contains(@class, "toolbar")]', root).filter(function(toolbar)
{
var newImg = document.createElement('img');
newImg.src = getCurrentImgUrl();
newImg.alt = newImg.title = 'Rehoster les images';
newImg.style.cursor = 'pointer';
newImg.style.marginRight = '3px';
newImg.addEventListener('click', function(event)
{
var knownHosts = getCurrentRehostables().split("\n");
var blHosts = getCurrentBl().split("\n");
var imgs = toolbar.nextSibling.getElementsByTagName('img') ;
var hostnames = [];
for (var i = 0; i < imgs.length; i++) {
var host = getHostname(imgs[i].src)
var isKnown = false;
for (var j = 0; j < blHosts.length && !isKnown; j++) {
if (blHosts[j] == host) {
isKnown = true;
}
}
for (var j = 0; j < knownHosts.length && !isKnown; j++) {
if (knownHosts[j] == host) {
isKnown = true;
}
}
if (!isKnown) {
hostnames[hostnames.length] = host;
knownHosts[knownHosts.length] = host;
}
}
if (hostnames.length > 0) {
if (confirm("Voulez-vous rehoster les serveurs suivants :\n" + hostnames.join("\n"))) {
GM_setValue("ar_rehost_hostnames", knownHosts.join("\n"));
processNode(toolbar.nextSibling);
}
}
else {
alert("Rien de neuf à rehoster");
}
}
, false);
var newDiv = document.createElement('div');
newDiv.className = 'right';
newDiv.appendChild(newImg);
toolbar.insertBefore(newDiv, toolbar.lastChild);
}
);
// ============ Module d'auto update du script ============
({
check4Update : function()
{
var autoUpdate = this;
var mirrorUrl = GM_getValue('mirrorUrl', 'null');
if (mirrorUrl == 'null') autoUpdate.retrieveMirrorUrl();
var currentVersion = GM_getValue('currentVersion', '4.0.6');
// On met éventuellement la version stockée à jour avec la version courante, si la version courante est plus récente
if (autoUpdate.isLater('4.0.6', currentVersion))
{
GM_setValue('currentVersion', '4.0.6');
currentVersion = '4.0.6';
}
// Par contre, si la version stockée est plus récente que la version courante -> création un menu d'update pour la dernière version
else if (autoUpdate.isLater(currentVersion, '4.0.6'))
{
GM_registerMenuCommand("[HFR] Smart Auto Rehost -> Installer la version " + currentVersion, function()
{
GM_openInTab(mirrorUrl + 'others/hfr_smart_auto_rehost.user.js');
}
);
}
// Si la version courante et la version stockée sont identiques, on ne fait rien
if (GM_getValue('lastVersionCheck') == undefined || GM_getValue('lastVersionCheck') == '') GM_setValue('lastVersionCheck', new Date().getTime() + '');
// Pas eu de check depuis 24h, on vérifie...
if ((new Date().getTime() - GM_getValue('lastVersionCheck')) > 86400000 && mirrorUrl != 'null')
{
var checkUrl = mirrorUrl + 'getLastVersion.php5?name=' + encodeURIComponent('[HFR] Smart Auto Rehost');
if (isNaN(currentVersion.substring(currentVersion.length - 1))) checkUrl += '&sversion=' + currentVersion.substring(currentVersion.length - 1);
GM_xmlhttpRequest({
method: "GET",
url: checkUrl,
onload: function(response)
{
var regExpVersion = new RegExp('^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}[a-zA-Z]?$');
var lastVersion = response.responseText;
// Pas d'erreur et nouvelle version plus récente
if (lastVersion != '-1' && regExpVersion.test(lastVersion) && autoUpdate.isLater(lastVersion, currentVersion))
{
if (confirm('Une nouvelle version de [HFR] Smart Auto Rehost est disponible : ' + lastVersion + '\nVoulez-vous l\'installer ?'))
{
GM_openInTab(mirrorUrl + 'others/hfr_smart_auto_rehost.user.js');
}
else
{
// Mémorisation de la version refusée : elle servira de version de référence
GM_setValue('currentVersion', lastVersion);
}
}
GM_setValue('lastVersionCheck', new Date().getTime() + '');
}
});
}
},
max : function(v1, v2)
{
var tabV1 = v1.split('.');
var tabV2 = v2.split('.');
if (isNaN(tabV1[2].substring(tabV1[2].length - 1))) tabV1[2] = tabV1[2].substring(0, tabV1[2].length - 1);
if (isNaN(tabV2[2].substring(tabV2[2].length - 1))) tabV2[2] = tabV2[2].substring(0, tabV2[2].length - 1);
if ((tabV1[0] > tabV2[0])
|| (tabV1[0] == tabV2[0] && tabV1[1] > tabV2[1])
|| (tabV1[0] == tabV2[0] && tabV1[1] == tabV2[1] && tabV1[2] > tabV2[2]))
{
return v1;
}
else
{
return v2;
}
},
isLater : function(v1, v2)
{
return v1 != v2 && this.max(v1, v2) == v1;
},
retrieveMirrorUrl : function()
{
var mirrors = 'http://hfr.toyonos.info/gm/;http://hfr-mirror.toyonos.info/gm/'.split(';');
var checkMirror = function (i)
{
var mirror = mirrors[i];
GM_xmlhttpRequest({
url: mirror + 'getLastVersion.php5',
method: "HEAD",
onload: function(response)
{
// Dès qu'un miroir répond, on le mémorise.
if (response.status == 200)
{
GM_setValue('mirrorUrl', mirror);
}
else
{
// Sinon on test le prochain
if ((i + 1) < mirrors.length)
{
checkMirror(i + 1);
}
else
{
GM_setValue('mirrorUrl', 'null');
}
}
}
});
};
checkMirror(0);
},
}).check4Update();