There are 11 previous versions of this script.
Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)
// ==UserScript==
// @name _@/ mininova
// @author Chris Porter
// @version 0.7b
// @date 2009-11-14
// @namespace http://www.crazysnailboy.net/greasemonkey/
// @include http://www.mininova.org/*
// ==/UserScript==
var GM_consoleLineOffset = 10 /* current line number */; try { generateError(); } catch(error){ GM_consoleLineOffset = (error.lineNumber - GM_consoleLineOffset); }
var GM_log = function(){ if (unsafeWindow.console == undefined){ return; } unsafeWindow.console.log(arguments[0]); };
var GM_logError = function() { if (unsafeWindow.console == undefined){ return; } unsafeWindow.console.error(((typeof(arguments[0].method) == "undefined") ? "" : arguments[0].method + ": ") + arguments[0].name + " - " + arguments[0].message + ", line " + (arguments[0].lineNumber-GM_consoleLineOffset) + (arguments[0].description != undefined ? " (" + arguments[0].description + ")" : "")); };
Math._round = Math.round; Math.round = function(x, dp) { if (dp == undefined) return this._round(x); var pow = this.pow(10, dp); var n = this._round(x * pow) / pow; var s = n.toString(); if (s.indexOf(".") < 0) s += "."; while (s.indexOf(".") - (s.length - dp) >= 0) s += "0"; return s; };
var _parseInt = parseInt; parseInt = function(string, radix){ return _parseInt(string, radix || 10); }
// http://h1.ripway.com/crazysnailboy/javascript/document-0.1.2.js
document._createElement=document.createElement;document.createElement=function(tagName,attributes){var element=this._createElement(tagName);if(attributes!=undefined){for(var attribute in attributes){if(attributes.hasOwnProperty(attribute)){switch(attribute){case"innerHTML":element.innerHTML=attributes[attribute];break;default:element.setAttribute(attribute,attributes[attribute])}}}}return element};
document._evaluate=document.evaluate;document.evaluate=function(xpathExpression,contextNode,resultType){if(resultType==undefined){resultType=XPathResult.ANY_TYPE}if(contextNode==null){contextNode=this}var result=this._evaluate(xpathExpression,contextNode,null,resultType,null);switch(resultType){case XPathResult.NUMBER_TYPE:return result.numberValue;case XPathResult.STRING_TYPE:return result.stringValue;case XPathResult.BOOLEAN_TYPE:return result.booleanValue;case XPathResult.ANY_UNORDERED_NODE_TYPE:case XPathResult.FIRST_ORDERED_NODE_TYPE:return result.singleNodeValue;default:return result}return result};
document.getElementByXPath=function(xpathExpression,contextNode){var x=this.evaluate(xpathExpression,contextNode||this,XPathResult.FIRST_ORDERED_NODE_TYPE);return x};
document.getElementsByXPath=function(xpathExpression,contextNode){var x=this.evaluate(xpathExpression,contextNode||this,XPathResult.ORDERED_NODE_ITERATOR_TYPE);var result=[],next;while(next=x.iterateNext()){result.push(next)}return result};
document.removeElementsByXPath=function(xpathExpression,contextNode){var x=this.evaluate(xpathExpression,contextNode||this,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE);for(var i=0;i<x.snapshotLength;i++){x.snapshotItem(i).parentNode.removeChild(x.snapshotItem(i))}return i};
// http://h1.ripway.com/crazysnailboy/javascript/string-0.4.js
if(!String.prototype.left){String.prototype.left=function(iLen){return this.substr(0,iLen)}}if(!String.left){String.left=function(sInput,iLen){return sInput.substr(0,iLen)}}
if(!String.prototype.right){String.prototype.right=function(iLen){return this.substr(this.length-iLen,iLen)}}if(!String.right){String.right=function(sInput,iLen){return sInput.substr(sInput.length-iLen,iLen)}}
if(!String.prototype.format){String.prototype.format=function(){var txt=this;for(var i=0;i<arguments.length;i++){var exp=new RegExp('\\{'+(i)+'\\}','gm');txt=txt.replace(exp,arguments[i])}return txt}}if(!String.format){String.format=function(){for(var i=1;i<arguments.length;i++){var exp=new RegExp('\\{'+(i-1)+'\\}','gm');arguments[0]=arguments[0].replace(exp,arguments[i])}return arguments[0]}}
if(!String.prototype.trim){String.prototype.trim=function(){var s=this.replace(/^\s\s*/,''),ws=/\s/,i=this.length;while(ws.test(this.charAt(--i)));return this.slice(0,i+1)}}
// =================================================================================================
// Mininova
// -------------------------------------------------------------------------------------------------
//
//
// =================================================================================================
// =================================================================================================
// Settings and SettingsPanel
// =================================================================================================
// http://h1.ripway.com/crazysnailboy/javascript/settings-0.1.js
function Category(){this.setting={};return this};function Setting(){this.type=arguments[0].type;this.value=arguments[0].value;return this};var settings={category:{},linkObjects:function(){for(var c in settings.category){settings.category[c].name=c;
for(var s in settings.category[c].setting){settings.category[c].setting[s].name=s;settings.category[c].setting[s].category=c;settings.category[c].setting[s].id="userscript-setting--"+c+"--"+s;settings.category[c].setting[s].value=GM_getValue(settings.
category[c].setting[s].id,settings.category[c].setting[s].value)}}}};function PanelCategory(){this.setting={};this.headerText=arguments[0].headerText;this.columnIndex=arguments[0].columnIndex;if(this.helpText!=undefined)this.helpText=arguments[0].helpText;
return this}function PanelSetting(){this.labelText=arguments[0].labelText;if(arguments[0].style!=undefined)this.style=arguments[0].style;return this}var settingsPanel={category:{},columnWidth:"250px",elements:{},CSS:[],panelExists:false,
linkObjects:function(){for(var c in this.category){this.category[c].name=c;for(var s in this.category[c].setting){this.category[c].setting[s].name=s;this.category[c].setting[s].category=c;this.category[c].setting[s].id="userscript-setting--"+c+"--"+s;
for(var p in settings.category[c].setting[s]){this.category[c].setting[s][p]=settings.category[c].setting[s][p]}}}},};settingsPanel.loadSettings=function(){try{for(var c in this.category){for(var s in this.category[c].setting){var setting=this.category[c].setting[s];
var element=document.getElementById(setting.id);switch(setting.type){case"boolean":element.checked=(setting.value==true);break;case"int":element.value=setting.value;break;case"string":element.value=setting.value;break}}}}catch(error){GM_logError(error)}};
settingsPanel.createLink=function(){try{this.elements.panelLink=document.createElement("a",{innerHTML:"_@/",href:"#",onclick:"return false;"});this.elements.panelLink.addEventListener("click",function(event){if(!settingsPanel.panelExists){settingsPanel.
createPanel();settingsPanel.panelExists=true}else{settingsPanel.elements.panelContainer.style.display=((settingsPanel.panelVisible)?"none":"block")}if(settingsPanel.panelVisible);{settingsPanel.loadSettings();settingsPanel.elements.panelContainer.style.top=
Math.floor((window.innerHeight-parseInt(settingsPanel.elements.panelContainer.offsetHeight))/2)+"px";settingsPanel.elements.panelContainer.style.left=Math.floor((window.innerWidth-parseInt(settingsPanel.elements.panelContainer.offsetWidth))/2)+"px"}},
true);document.getElementByXPath("//div[@id='navigation']/ul").appendChild(document.createElement("li")).appendChild(this.elements.panelLink)}catch(error){GM_logError(error)}};settingsPanel.createPanel=function(){try{var HTML=[];
HTML.push("<table border=0 cellpadding=0 cellspacing=0>");HTML.push("<thead><tr><th colspan='3'><h1>Userscript Settings</h1></th></tr></thead>");HTML.push("<tbody><tr>");HTML.push("<td style='padding-right:10px; width:"+this.columnWidth+";'>");
var columnIndex=0;for(var c in this.category){if(this.category[c].columnIndex!=columnIndex){HTML.push("</td>");HTML.push("<td style='padding-right:10px; width:"+this.columnWidth+";'>");columnIndex=this.category[c].columnIndex}HTML.push("<table border=0 cellpadding=0 cellspacing=0>");
HTML.push("<tr><td colspan='2'><h2>"+this.category[c].headerText+"</h2>");if(this.category[c].helpText!=""){HTML.push("<img src='"+""+"' width='11' height='12' class='help-icon' title='"+this.category[c].helpText+"' />")}HTML.push("</td></tr>");
for(var s in this.category[c].setting){var setting=this.category[c].setting[s];if(setting.style!=undefined)this.CSS.push("div#userscript-settings-panel #"+setting.id+" { "+setting.style+" } ");if(setting.HTML!=undefined){HTML.push(setting.HTML)}else
{switch(setting.type){case"boolean":HTML.push("<tr>");HTML.push("<td><input type='checkbox' id='"+setting.id+"'/></td>");HTML.push("<td><label for='"+setting.id+"'>"+setting.labelText+"</label></td>");HTML.push("</tr>");break;case"string":HTML.push("<tr>");
HTML.push("<td colspan='2'><textarea id='"+setting.id+"'></textarea></td>");HTML.push("</tr>");break}}}HTML.push("</table>")}HTML.push("</td>");HTML.push("</tr></tbody>");HTML.push("<tfoot>");HTML.push("<tr>");HTML.push("<td colspan='2'>");
HTML.push("<input type='button' class='button' id='userscript-settings-ok-button' value='OK' />");HTML.push("<input type='button' class='button' id='userscript-settings-cancel-button' value='Cancel' />");HTML.push("</td>");HTML.push("</tr>");
HTML.push("</tfoot>");HTML.push("</table>");GM_addStyle(this.CSS.join("\n"));delete this.CSS;this.elements.panelContainer=document.createElement("div",{id:"userscript-settings-panel",innerHTML:HTML.join("\n")});document.getElementsByTagName("body")[0].
appendChild(this.elements.panelContainer);this.elements.panelContainer.style.height=(this.elements.panelContainer.firstChild.offsetHeight+5).toString()+"px";document.getElementById("userscript-settings-ok-button").addEventListener("click",function(event)
{for(var c in settingsPanel.category){for(var s in settingsPanel.category[c].setting){var setting=settingsPanel.category[c].setting[s];var element=document.getElementById(setting.id);switch(setting.type){case"boolean":setting.value=element.checked;break;
case"int":setting.value=parseInt(element.value);break;case"string":setting.value=element.value;break;default:break}GM_setValue(setting.id,setting.value)}}settingsPanel.elements.panelContainer.style.display="none"},true);
document.getElementById("userscript-settings-cancel-button").addEventListener("click",function(event){settingsPanel.elements.panelContainer.style.display="none"},true)}catch(error){GM_logError(error)}};
// =================================================================================================
// nowViewing
// =================================================================================================
var nowViewing = {
homePage: (location.pathname == "/"),
category: (location.pathname.indexOf("/cat/") == 0),
categoryList: (location.pathname.indexOf("/cat-list/") == 0),
comments: (location.pathname.indexOf("/com/") == 0),
searchResults: (location.pathname.indexOf("/search/") == 0),
subCategory: (location.pathname.indexOf("/sub/") == 0),
today: (location.pathname.indexOf("/today/") == 0),
torrentInfo: (location.pathname.indexOf("/tor/") == 0),
userTorrents: (location.pathname.indexOf("/user/") == 0),
yesterday: (location.pathname.indexOf("/yesterday/") == 0)
};
// -------------------------------------------------------------------------------------------------
// loadSettings
function loadSettings() { try
{
settings.category["torrent-lists"] = new Category();
with (settings.category["torrent-lists"])
{
setting["hide-seedless-trackers"] = new Setting({ type:"boolean" , value:true });
setting["hide-seedless-trackers-value"] = new Setting({ type:"int" , value:1 });
setting["hide-private-trackers"] = new Setting({ type:"boolean" , value:true });
setting["show-comments-and-thanks"] = new Setting({ type:"boolean" , value:true });
setting["format-dates-iso8601"] = new Setting({ type:"boolean" , value:true });
setting["replace-leechers-with-peers"] = new Setting({ type:"boolean" , value:true });
setting["create-ratio-column"] = new Setting({ type:"boolean" , value:false });
setting["create-info-links"] = new Setting({ type:"boolean" , value:true });
}
settings.category["torrent-details"] = new Category();
with (settings.category["torrent-details"])
{
setting["remove-smileys-from-comments"] = new Setting({ type:"boolean" , value:true });
}
settings.category["category-tabs"] = new Category();
with (settings.category["category-tabs"])
{
setting["create-on-homepage"] = new Setting({ type:"boolean" , value:true });
setting["create-on-today-and-yesterday"] = new Setting({ type:"boolean" , value:true });
}
settings.category["search-results"] = new Category();
with (settings.category["search-results"])
{
setting["sort-by-seeds"] = new Setting({ type:"boolean" , value:false });
}
settings.category["appearance"] = new Category();
with (settings.category["appearance"])
{
setting["replace-rss-icons"] = new Setting({ type:"boolean" , value:true });
setting["gray-hidden-torrents"] = new Setting({ type:"boolean" , value:true });
}
settings.category["excluded-words"] = new Category();
with (settings.category["excluded-words"])
{
setting["word-list"] = new Setting({ type:"string" , value:"" });
setting["case-sensitive"] = new Setting({ type:"boolean" , value:false });
setting["whole-words-only"] = new Setting({ type:"boolean" , value:false });
}
settings.category["excluded-categories"] = new Category();
with (settings.category["excluded-categories"])
{
setting["category-list"] = new Setting({ type:"string" , value:"" });
}
settings.category["excluded-subcategories"] = new Category();
with (settings.category["excluded-subcategories"])
{
setting["subcategory-list"] = new Setting({ type:"string" , value:"" });
}
settings.linkObjects();
delete settings.linkObjects;
}
catch(error){ GM_logError(error); }}
// -------------------------------------------------------------------------------------------------
// createSettingsPanel
function createSettingsPanel() { try
{
settingsPanel.category["torrent-lists"] = new PanelCategory({ headerText:"Torrent Lists" , columnIndex:0 });
with (settingsPanel.category["torrent-lists"])
{
setting["format-dates-iso8601"] = new PanelSetting({ labelText:"IS0 8601 date formatting" });
setting["hide-private-trackers"] = new PanelSetting({ labelText:"Hide private trackers" });
setting["hide-seedless-trackers"] = new PanelSetting({ labelText:"Hide trackers with {0} or fewer seeds" });
setting["hide-seedless-trackers-value"] = new PanelSetting({ style:"border:1px solid #AAAAAA; font-size:10px; margin-left:5px; position:relative; top:-1px;" });
setting["create-info-links"] = new PanelSetting({ labelText:"Create IMDB links on movies" });
setting["show-comments-and-thanks"] = new PanelSetting({ labelText:"Show numbers of comments and thanks" });
setting["replace-leechers-with-peers"] = new PanelSetting({ labelText:"Replace the word \"Leechers\" with \"Peers\"" });
setting["create-ratio-column"] = new PanelSetting({ labelText:"Create column for seeds/peers ratio" });
}
settingsPanel.category["torrent-details"] = new PanelCategory({ headerText:"Torrent Details" , columnIndex:0 });
with (settingsPanel.category["torrent-details"])
{
setting["remove-smileys-from-comments"] = new PanelSetting({ labelText:"Remove smileys from comments" });
}
settingsPanel.category["category-tabs"] = new PanelCategory({ headerText:"Category Tabs" , columnIndex:0 });
with (settingsPanel.category["category-tabs"])
{
setting["create-on-homepage"] = new PanelSetting({ labelText:"Tabs on home page" });
setting["create-on-today-and-yesterday"] = new PanelSetting({ labelText:"Tabs on todays and yesterdays torrents" });
}
settingsPanel.category["search-results"] = new PanelCategory({ headerText:"Search Results" , columnIndex:0 });
with (settingsPanel.category["search-results"])
{
setting["sort-by-seeds"] = new PanelSetting({ labelText:"Sort results by seeds" });
}
settingsPanel.category["appearance"] = new PanelCategory({ headerText:"Appearance" , columnIndex:0 });
with (settingsPanel.category["appearance"])
{
setting["replace-rss-icons"] = new PanelSetting({ labelText:"Replace RSS icons" });
setting["gray-hidden-torrents"] = new PanelSetting({ labelText:"Hidden torrents are greyed out when visible" });
}
settingsPanel.category["excluded-words"] = new PanelCategory({ headerText:"Excluded Words" , columnIndex:1 , helpText:"Enter one word or phrase per line" });
with (settingsPanel.category["excluded-words"])
{
setting["word-list"] =new PanelSetting( { style:"width:250px; height:100px;" });
setting["case-sensitive"] = new PanelSetting({ labelText:"Excluded words are case sensitive" });
}
settingsPanel.category["excluded-categories"] = new PanelCategory({ headerText:"Excluded Categories" , columnIndex:1 , helpText:"Enter one category name or number per line" });
with (settingsPanel.category["excluded-categories"])
{
setting["category-list"] = new PanelSetting({ style:"width:250px; height:55px;" });
}
settingsPanel.category["excluded-subcategories"] = new PanelCategory({ headerText:"Excluded Sub-categories" , columnIndex:1 , helpText:"Enter one sub-category name or number per line, with names in the format Category\\Subcategory" });
with (settingsPanel.category["excluded-subcategories"])
{
setting["subcategory-list"] = new PanelSetting({ style:"width:250px; height:75px;" });
}
settingsPanel.linkObjects();
settingsPanel.category["torrent-lists"].setting["hide-seedless-trackers"].__defineGetter__("HTML",
function()
{
if (this._HTML == undefined)
{
var a = [];
a.push("<tr>");
a.push("<td><input type='checkbox' id='{0}'/></td>");
a.push("<td>");
a.push("<table border=0 cellpadding=0 cellspacing=0 style='margin:0px; padding:0px;'><tr>");
a.push("<td style='margin:0px; padding:0px;'><label for='{0}'>Hide trackers with </label></td>");
a.push("<td style='margin:0px; padding:0px;'><input type='textbox' id='{1}' size='2' value='' /></td>");
a.push("<td style='margin:0px; padding:0px;'><label for='{0}'> or fewer seeds</label></td>");
a.push("</tr></table>");
a.push("</td>");
a.push("</tr>");
this._HTML = String.format(a.join(""), this.id, settingsPanel.category["torrent-lists"].setting["hide-seedless-trackers-value"].id);
}
return this._HTML;
}
);
settingsPanel.category["torrent-lists"].setting["hide-seedless-trackers-value"].HTML = "";
with (settingsPanel.CSS)
{
push("div#userscript-settings-panel { background-color:white; border:1px solid black; left:100px; padding:5px 10px; position:absolute; top:200px; } ");
push("div#userscript-settings-panel h1 { background-color:#EFF3FB; border-bottom:1px dashed #204A87; font-size:11pt; padding:3px 10px; } ");
push("div#userscript-settings-panel h2 { color:#204a87; display:block; font-size:11px; font-weight:bold; margin-bottom:2px; } ");
push("div#userscript-settings-panel tbody td label { color:black; font-size:10px; font-weight:normal; padding-left:5px; } ");
push("div#userscript-settings-panel tbody td input { margin:0px; } ");
push("div#userscript-settings-panel td { vertical-align:top; } ");
push("div#userscript-settings-panel td table { margin-bottom:5px; width:100%; } ");
push("div#userscript-settings-panel td table td { padding-bottom:3px; padding-right:0px; } ");
push("div#userscript-settings-panel tfoot td { padding-top:5px; padding-right:10px; text-align:right; } ");
push("div#userscript-settings-panel input[type='button'] { margin-left:5px; padding-bottom:2px; width:60px; } ");
push("div#userscript-settings-panel textarea { font-family:Verdana; font-size:10px; } ");
push("div#userscript-settings-panel img.help-icon { float:right; margin-top:-14px; } ");
}
settingsPanel.createLink();
} catch(error){ GM_logError(error); }}
// =================================================================================================
// images
// =================================================================================================
var images = {
favicons: {
IMDB: {
colour: "data:image/png;base64," +
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsUlEQVR4nK2TQQ4DIQhFheCJupnzdMGhWPQ8XbQnsokVqdYhM02MJZlBMe8LqEBEYcVwif6HQM8/pVeeAWMkUA/agwo/eW7ri1QRyDl8YCnfjDcRbDvHjU593G4dsriYQGGxT8b6KvC1dL/uYqMI9nQc" +
"8MtMkJpACEdZ+IxMVNy8nEJ+sDu+oUm7sTdbQ6tNDgA/9p5rJloCtHrOYXbr3JoKMDymqZuosP7IB2Zt+TG9AbL/PkFSMv4WAAAAAElFTkSuQmCC",
grayscale: "data:image/png;base64," +
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAAuUlEQVQ4y61TuxHDIAx94iipvAIzvAE8vwpPoBWo6EmRwAmfnQvnvEZI8PRDkhgjniA8Yv/DwcjfzNoKMecsACAxRphZK6UsRd62" +
"DTlnCZ1cawWAn2UpBWbWQo+87/utJImU0tC9k9AVD5KTrqqTzTsJ3fOZ8A2qOjIMvq47kISqjnddBwA5jmP6vlrrqNefz+h3geTU4Svy1U+klEDyPQcAmq/7lyw+TRVxy7Q0iQAEcKPcDat4vEwvdoV79LNTamoAAAAASUVORK5CYII="
}
},
rssIcons14: // http://sean.members.winisp.net/posts/icons/feed-icon16x16.png
"data:image/png;base64,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",
rssIcons28: // http://sean.members.winisp.net/posts/icons/feed-icon32x32.png
"data:image/png;base64,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",
};
// =================================================================================================
// eventHandlers
// =================================================================================================
var eventHandlers = {
// -------------------------------------------------------------------------------------------------
// onShowHideLinkClick
onShowHideLinkClick: function(event)
{
var hidden = (event.target.innerHTML == "show");
var position = event.target.getAttribute("position");
var elements = document.getElementsByXPath("//table[@class='maintable' and position()=" + position + "]/tbody/tr[@hidden-torrent]");
elements.forEach(function(element){ element.style.display = ((hidden) ? "table-row" : "none"); });
var setRowColours = eval(event.target.getAttribute("setRowColours"));
setRowColours(position);
event.target.innerHTML = ((hidden) ? "hide" : "show");
},
// -------------------------------------------------------------------------------------------------
// onTorrentInfoLinkClick
onTorrentInfoLinkClick: function(event)
{
var elements = { image: event.target };
elements.image.style.opacity = "0.3";
var xmlhttpRequest = {
method:"GET",
url: document.getElementByXPath("a[starts-with(@href,'/tor/')]", document.getElementByXPath("ancestor::td", elements.image)).href,
onload: function(xmlhttpResponse)
{
// get the URL of the films' IMDB page
var url = xmlhttpResponse.responseText.match(/http\:\/\/(www\.)?imdb.com\/title\/tt\d+/)[0];
// detach the event listener from the image
elements.image.removeEventListener("click", eventHandlers.onTorrentInfoLinkClick, false);
elements.image.style.opacity = "1.0";
// wrap the image in an anchor element pointing to the URL of the IMDB page
elements.link = document.createElement("a", { href:xmlhttpResponse.responseText.match(/http\:\/\/(www\.)?imdb.com\/title\/tt\d+/)[0] , target:"_blank" });
elements.image.parentNode.insertBefore(elements.link, elements.image);
elements.link.appendChild(elements.image);
// open the films' IMDB page in a new tab
GM_openInTab(url);
}
};
GM_xmlhttpRequest(xmlhttpRequest);
}
};
// -------------------------------------------------------------------------------------------------
// removeElements
function removeElements() { try
{
var aXPath = [];
// remove ads
aXPath.push("//div[@id='sidebar']");
aXPath.push("//div[starts-with(@id,'adspot')]");
// toolbar ad
aXPath.push("//p[@id='banner-toolbar']");
// remove smileys from comments
if ((nowViewing.comments) && (settings.category["torrent-details"].setting["remove-smileys-from-comments"].value == true)) aXPath.push("//img[contains(@src,'/images/smilies/')]");
document.removeElementsByXPath(aXPath.join(" | "));
}
catch(error){ GM_logError(error); }}
// -------------------------------------------------------------------------------------------------
// formatDocument
function formatDocument() { try
{
var aCSS = [];
aCSS.push("a { color:#204a87; }");
aCSS.push("div#content { margin-right:0px; }");
// ---------------------------------------------------------------------------
// elements
var elements = {
tables: document.getElementsByXPath("//table[@class='maintable']"),
tableHeaders: [],
};
if (nowViewing.homePage || nowViewing.today || nowViewing.yesterday)
{
elements.tableHeaders = document.getElementsByXPath("//div[@id='content']/div[@class='catheader']");
elements.categoryHeaderLinks = document.getElementsByXPath("//div[@id='content']/div[@class='catheader']/h2/a[1]");
}
if (nowViewing.searchResults || nowViewing.subCategory || nowViewing.categoryList || nowViewing.userTorrents)
{
elements.tableHeaders = document.getElementsByXPath("//div[@id='content']/h1");
}
if (nowViewing.searchResults)
{
elements.selectedCategoryLink = document.getElementByXPath("//ul[@id='tabs']/li[@class='current']/a");
}
// ---------------------------------------------------------------------------
// formatSearchForm
var formatSearchForm = function()
{
// sort search results by seeds
if (settings.category["search-results"].setting["sort-by-seeds"].value == true)
{
var frmSearch = document.getElementByXPath("//form[@id='searchform']");
// don't allow the search form to submit
frmSearch.setAttribute("onsubmit", "return false;");
// instead, intercept the onsubmit event and redirect to a custom URL based on the form criteria
frmSearch.addEventListener("submit",
function(event)
{
location.href = String.format("http://www.mininova.org/search/{0}/{1}/seeds",
document.getElementById("search").value.split(" ").join("%2B"),
document.getElementByXPath("//select[@name='cat']").value
);
}
,true);
// disable the search button's standard onclick handler
var btnSearch = document.getElementByXPath("//form[@id='searchform']/button[@class='btn']");
btnSearch.setAttribute("onclick", "");
}
// blur the search box if it's empty to aid page scrolling
var oSearchBox = document.getElementByXPath("//div[@id='header']/form[@id='searchform']/input[@id='search']");
if (oSearchBox.value == "") oSearchBox.blur();
};
// ---------------------------------------------------------------------------
// createCategoryTabs
var createCategoryTabs = function()
{
aCSS.push("#userscript-jumptocat { float:left; padding:0.2em 0.4em 0.2em 0; }");
aCSS.push("ul#tabs li { margin-left:0.1em; margin-right:0.1em; }");
var oTarget = document.getElementByXPath("//div[@id='content']/h1/following-sibling::*[1]");
oTarget.parentNode.insertBefore(document.createElement("span", { id:"userscript-jumptocat" , innerHTML:"Jump to category:" }), oTarget);
var oUL = document.createElement("ul", { id:"tabs" });
var i = 0; var length = elements.categoryHeaderLinks.length;
do
{
var element = elements.categoryHeaderLinks[i];
var sText = element.innerHTML;
var sName = sText.toLowerCase().replace(" ", "");
// add a list item to the category header tabs list
oUL.appendChild(document.createElement("li", { innerHTML:"<a href=\"#" + sName + ">" + sText + "</a>" }));
// create named anchor elements before each category header link
element.parentNode.insertBefore(document.createElement("a", { name:sName }), element);
i++;
}
while (i < length);
oTarget.parentNode.insertBefore(oUL, oTarget);
if (nowViewing.homePage)
{
var oTarget = document.getElementByXPath("//div[@id='content']/br[1]");
oTarget.parentNode.removeChild(oTarget);
}
if ((nowViewing.today) || (nowViewing.yesterday))
{
var oTarget = document.getElementById("jumptocat");
oTarget.parentNode.removeChild(oTarget);
}
};
// ---------------------------------------------------------------------------
// setColumnWidths
var setColumnWidths = function()
{
// create <colgroup> and <col> elements to control the column widths
var a = (settings.category["torrent-lists"].setting["create-ratio-column"].value ? [7, 65, 7, 4, 4, 3] : [7, 66, 7, 5, 5]);
var element = document.createElement("colgroup");
var i = 0;
do
{
element.appendChild(document.createElement("col", { width:a[i]+"%" }));
i++;
}
while (i < a.length);
// apply a clone of the <colgoup> element to each table on the page
var i = elements.tables.length-1;
do
{
var target = elements.tables[i];
target.insertBefore(element.cloneNode(true), target.firstChild);
}
while (i--);
};
// ---------------------------------------------------------------------------
// formatColumnHeaders
var formatColumnHeaders = function()
{
var a = document.getElementsByXPath("//table[@class='maintable']/tbody/tr[1]/th[a[text()='Size' or text()='Seeds' or text()='Leechers']] | //table[@class='maintable']/tbody/tr[1]/th[text()='Size' or text()='Seeds' or text()='Leechers']");
var b = settings.category["torrent-lists"].setting["replace-leechers-with-peers"].value;
var i = a.length-1;
do
{
var e = a[i];
// right align the size, seeds and leechers column headers
e.style.textAlign = "right";
// change the text on the "Leechers" column headers to say "Peers"
if (b)
{
if (e.tagName == "TH" && e.firstChild.tagName == "A") e = e.firstChild;
if (e.innerHTML == "Leechers")
{
e.innerHTML = "Peers";
if (e.tagName == "A") e.title = "Sort by Peers";
}
}
}
while (i--);
};
// ---------------------------------------------------------------------------
// formatDateColumn
var formatDateColumn = function()
{
// ISO 8601 date formatting on added dates
var s;
var elements = document.getElementsByXPath("//table[@class='maintable']/tbody/tr/td[1]");
elements.forEach(function(element)
{
var a = element.innerHTML.split(" ");
switch(a[1])
{
case "Jan": s = "01"; break;
case "Feb": s = "02"; break;
case "Mar": s = "03"; break;
case "Apr": s = "04"; break;
case "May": s = "05"; break;
case "Jun": s = "06"; break;
case "Jul": s = "07"; break;
case "Aug": s = "08"; break;
case "Sep": s = "09"; break;
case "Oct": s = "10"; break;
case "Nov": s = "11"; break;
case "Dec": s = "12"; break;
}
element.innerHTML = "20" + a[2] + "-" + s + "-" + a[0];
});
};
// ---------------------------------------------------------------------------
// formatCategoryColumn
var formatCategoryColumn = function()
{
// prevent text-wrapping on category names in search results
var table = elements.tables[0];
var cells = document.getElementsByXPath("tbody/tr/td[2]", table);
var target = table.nextSibling;
table.parentNode.removeChild(table);
var i = cells.length-1;
do
{
cells[i].setAttribute("nowrap", "nowrap");
}
while (i--);
target.parentNode.insertBefore(table, target);
aCSS.push(".maintable td { vertical-align:top; }");
};
// ---------------------------------------------------------------------------
// formatNameColumn
var formatNameColumn = function()
{
// convert the blue "info" links into links to a movie's IMDB page
if (settings.category["torrent-lists"].setting["create-info-links"].value == true)
{
var elements = document.getElementsByXPath("//table[@class='maintable']/tbody/tr/td/a[img[@src='/images/info.gif']]");
elements.forEach(function(element)
{
// remove the info image and it's parent link, and replace with an image showing the IMDB favicon
var _element = document.createElement("img", { src:images.favicons.IMDB.colour , alt:"Movie profile at IMDB.com" , class:"ti" , style:"cursor:pointer; margin-top:0.1em;" });
element.parentNode.replaceChild(_element, element);
_element.addEventListener("click", eventHandlers.onTorrentInfoLinkClick, true);
});
aCSS.push(".maintable a img.ti { margin:0px; }");
}
// display the number of comments and thanks instead of just the total combined number
if (settings.category["torrent-lists"].setting["show-comments-and-thanks"].value == true)
{
var elements = document.getElementsByXPath("//table[@class='maintable']/tbody/tr/td/a[@class='ti com']");
elements.forEach(function(element)
{
var title = element.getAttribute("title").toString().split(",");
element.insertBefore( document.createElement("small", { innerHTML:"(" + parseInt(title[0]) + "/" + parseInt(title[1]) + ")" , style:"visibility:visible !important; display:inline !important; padding-right:3px;" }), element.firstChild.nextSibling );
});
}
// modify the subcategory links so pages are launched in date order
var elements = document.getElementsByXPath("//table[@class='maintable']/tbody/tr/td[" + columnPosition.nameColumn + "]/small/strong/a[starts-with(@href,'/sub/')]");
elements.forEach(function(element)
{
var href = element.getAttribute("href") + "/added";
element.setAttribute("href", href);
});
};
// ---------------------------------------------------------------------------
// createRatioColumn
var createRatioColumn = function()
{
// create ratio column headers
var element = document.createElement("th", { innerHTML:"Ratio" , style:"text-align:right;" , title:"(Seeds/" + (settings.category["torrent-lists"].setting["replace-leechers-with-peers"].value == true ? "Peers" : "Leechers") + ")" });
var elements = document.getElementsByXPath("//table[@class='maintable']/tbody/tr[th]");
var i = elements.length-1;
do
{
elements[i].appendChild(element.cloneNode(true));
}
while (i--);
// create ratio column cells
var seeds = document.getElementsByXPath("//table[@class='maintable']/tbody/tr/td[" + columnPosition.seedsColumn + "][text()='---'] | //table[@class='maintable']/tbody/tr/td[" + columnPosition.seedsColumn + "]/span[@class='r' or @class='g']");
var peers = document.getElementsByXPath("//table[@class='maintable']/tbody/tr/td[" + columnPosition.peersColumn + "][text()='---'] | //table[@class='maintable']/tbody/tr/td[" + columnPosition.peersColumn + "]/span[@class='b']");
var i = seeds.length-1;
do
{
var seedCount = parseInt(seeds[i].innerHTML.replace("---", "0"));
var peerCount = parseInt(peers[i].innerHTML.replace("---", "0"));
var ratio = document.createElement("td", { innerHTML:Math.round((peerCount == 0 ? 0 : seedCount / peerCount), 2) , style:"text-align:right;" });
document.getElementByXPath("ancestor::tr", seeds[i]).appendChild(ratio);
}
while (i--);
};
// ---------------------------------------------------------------------------
// hideTorrents
var hideTorrents = function()
{
var exclusions = {
words: [],
categories: [],
subcategories: []
};
if (settings.category["excluded-words"].setting["word-list"].value != "")
{
var a = settings.category["excluded-words"].setting["word-list"].value.split("\n");
var i = a.length - 1;
do { var s = a[i].trim(); exclusions.words.push(s); } while (i--);
}
if (settings.category["excluded-categories"].setting["category-list"].value != "")
{
var a = settings.category["excluded-categories"].setting["category-list"].value.split("\n");
var i = a.length - 1;
do { var s = a[i].trim(); exclusions.categories.push(s); } while (i--);
}
if (settings.category["excluded-subcategories"].setting["subcategory-list"].value != "")
{
var a = settings.category["excluded-subcategories"].setting["subcategory-list"].value.split("\n");
var i = a.length - 1;
do
{
var s = a[i].trim();
if (isNaN(s))
{
if (s.indexOf("\\") >= 0)
{
s = s.split("\\");
exclusions.subcategories.push({ category:s[0] , subcategory:s[1] });
}
}
else
{
exclusions.subcategories.push(s);
}
}
while (i--);
}
// build xpath queries to identify all the torrents we want to hide
var aXPath = [];
if (settings.category["torrent-lists"].setting["hide-private-trackers"].value == true)
{
aXPath.push("//table[@class='maintable']/tbody/tr[td[" + columnPosition.nameColumn + "]/a/img[@src='/images/priv.gif']]");
}
if (settings.category["torrent-lists"].setting["hide-seedless-trackers"].value == true)
{
aXPath.push("//table[@class='maintable']/tbody/tr[td[position()=" + columnPosition.seedsColumn + " and text()='---']]");
aXPath.push("//table[@class='maintable']/tbody/tr[td[" + columnPosition.seedsColumn + "]/span[((@class='r') or (@class='g')) and number(text())<=" + settings.category["torrent-lists"].setting["hide-seedless-trackers-value"].value + "]]");
}
var getCategoryPosition = function(category)
{
var i = 0; var length = elements.categoryHeaderLinks.length;
do
{
var element = elements.categoryHeaderLinks[i];
if ((isNaN(category) ? element.innerHTML == category : element.href == "http://www.mininova.org/cat/" + category) == true) return (i+1);
i++;
}
while ( i < length );
return -1;
};
// if we have categories or subcategories to hide and we're viewing search results, determine the currently selected category tab
if ((nowViewing.searchResults) && ((exclusions.categories.length > 0) || (exclusions.subcategories.length > 0)))
{
var sSelectedCategoryName = elements.selectedCategoryLink.firstChild.nodeValue;
var iSelectedCategoryNumber = parseInt(elements.selectedCategoryLink.href.substr(elements.selectedCategoryLink.href.lastIndexOf("/")+1, elements.selectedCategoryLink.href.length), 10);
}
if (exclusions.words.length > 0)
{
if (nowViewing.searchResults)
{
var s = exclusions.words.join("|");
var r = new RegExp("(^(" + s + ")\\b)|(\\b(" + s + ")\\b)|(\\b(" + s + ")$)", "g");
var aElements = document.getElementsByXPath("//table[@class='maintable']/tbody/tr/td[" + columnPosition.nameColumn + "]/a[starts-with(@href,'/tor/')]");
aElements.forEach(function(oElement)
{
var sTextContent = oElement.textContent;
if (sTextContent.search(r) >= 0)
{
GM_log(sTextContent);
var torrentRow = oElement.parentNode.parentNode;
torrentRow.setAttribute("hidden-torrent", "hidden-torrent");
torrentRow.style.display = "none";
}
});
}
else
{
var i = exclusions.words.length-1;
var a = [];
do
{
var s = "contains({0},'{1}')";
var exclusion = exclusions.words[i];
a.push(settings.category["excluded-words"].setting["case-sensitive"].value == true ? s.format("text()", exclusion) : s.format("translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')", exclusion.toLowerCase()));
}
while (i--);
aXPath.push("//table[@class='maintable']/tbody/tr[td[" + columnPosition.nameColumn + "]/a[starts-with(@href,'/tor/') and (" + a.join(" or ") + ")]]");
}
}
if (exclusions.categories.length > 0)
{
if (nowViewing.homePage)
{
var i = exclusions.categories.length-1;
var a = [];
do
{
var exclusion = exclusions.categories[i];
a.push(String.format((isNaN(exclusion) ? "text()='{0}'" : "@href='/cat/{0}'"), exclusion));
}
while (i--);
aXPath.push("//table[@class='maintable' and position()=1]/tbody/tr[td[1]/a[" + a.join(" or ") + "]]");
}
if ((nowViewing.homePage) || (nowViewing.today) || (nowViewing.yesterday))
{
var i = exclusions.categories.length-1;
var a = [];
do
{
var exclusion = exclusions.categories[i];
a.push("position()=" + getCategoryPosition(exclusion));
}
while (i--);
aXPath.push("//table[@class='maintable' and (" + a.join(" or ") + ")]/tbody/tr[td]");
}
if (nowViewing.searchResults)
{
if ((exclusions.categories.indexOf(iSelectedCategoryNumber) > -1) || (exclusions.categories.indexOf(sSelectedCategoryName) > -1))
{
aXPath.push("//table[@class='maintable']/tbody/tr[td]");
}
if (["All", "Featured"].indexOf(sSelectedCategoryName) > -1)
{
var i = exclusions.categories.length-1;
var a = [];
do
{
var exclusion = exclusions.categories[i];
a.push(String.format((isNaN(exclusion) ? "text()='{0}'" : "@href='/cat/{0}'"), exclusion));
}
while (i--);
aXPath.push("//table[@class='maintable']/tbody/tr[td[2]/a[" + a.join(" or ") + "]]");
}
}
}
var length = exclusions.subcategories.length;
if (length > 0)
{
var i = length-1;
var a = [];
do
{
var exclusion = exclusions.subcategories[i];
if (!isNaN(exclusion))
{
a.push(String.format("@href='/sub/{0}'", exclusion));
exclusions.subcategories.splice(i, 1);
}
}
while (i--);
if (a.length > 0) aXPath.push("//table[@class='maintable']/tbody/tr[td[" + columnPosition.nameColumn + "]/small/strong/a[" + a.join(" or ") + "]]");
}
var length = exclusions.subcategories.length;
if (length > 0)
{
if (nowViewing.categoryList)
{
var currentCategory = document.evaluate("/html/body/div/div[@id='location']/a[starts-with(@href,'/cat/') and @href!='/cat/']/text()", null, XPathResult.STRING_TYPE);
var i = length-1;
var a = [];
do
{
var exclusion = exclusions.subcategories[i];
if (exclusion.category != currentCategory) continue;
a.push(String.format("text()=\"{0}\"", exclusion.subcategory));
}
while (i--);
if (a.length > 0) aXPath.push("//table[@class='maintable']/tbody/tr[td[" + columnPosition.nameColumn + "]/small/strong/a[" + a.join(" or ") + "]]");
}
else
{
var i = length-1;
do
{
var exclusion = exclusions.subcategories[i];
if (nowViewing.homePage)
{
aXPath.push(String.format("//table[@class='maintable' and position()=1]/tbody/tr[td[1]/a[text()='{0}']][td[2]/small/strong/a[text()=\"{1}\"]]", exclusion.category, exclusion.subcategory));
}
if (nowViewing.homePage || nowViewing.today || nowViewing.yesterday)
{
aXPath.push(String.format("//table[@class='maintable' and position()={0}]/tbody/tr[td[2]/small/strong/a[text()=\"{1}\"]]", getCategoryPosition(exclusion.category), exclusion.subcategory));
}
}
while (i--);
}
}
// aXPath.forEach(function(sXPath)
// {
// GM_log(sXPath);
// GM_log(document.getElementsByXPath(sXPath).length);
// });
var torrentRows = document.getElementsByXPath(aXPath.join(" | "));
torrentRows.forEach(
function(torrentRow)
{
torrentRow.style.display = "none";
torrentRow.setAttribute("hidden-torrent", "hidden-torrent");
}
);
var setRowColours = function(position)
{
var i = 0;
var setRowColour = function(element)
{
if (element.style.display != "none")
{
element.className = ((i % 2 == 1) ? "" : "d");
i++;
}
};
var xpathExpression = "//table[@class='maintable' and position()=" + position + "]/tbody/tr";
document.getElementsByXPath(xpathExpression).forEach(setRowColour);
};
var i = elements.tableHeaders.length-1;
do
{
var hiddenCount = document.evaluate("count(.//tr[@hidden-torrent])", elements.tables[i], XPathResult.NUMBER_TYPE);
if (hiddenCount > 0)
{
var element = document.createElement("span", { innerHTML:" " + hiddenCount.toString() + " hidden torrent" + ((hiddenCount != 1) ? "s" : "") + " " , style:"color:#aaaaaa; font-size:small;" });
elements.tableHeaders[i].appendChild(element);
var element = document.createElement("a", { innerHTML:"show" , href:"#" , onclick:"return false;" , style:"color:#aaaaaa; font-style:italic; font-size:small;" , position:i+1 });
elements.tableHeaders[i].appendChild(element);
element.addEventListener("click", eventHandlers.onShowHideLinkClick, false);
element.setAttribute("setRowColours", setRowColours.toSource() );
setRowColours(i+1);
}
}
while (i--);
if (settings.category["appearance"].setting["gray-hidden-torrents"].value == true)
{
aCSS.push("tr[hidden-torrent] * { color:#808080 !important; }");
}
};
// ---------------------------------------------------------------------------
// formatRssImages
var formatRssImages = function()
{
var smallIcons = [];
var largeIcons = [];
if (nowViewing.homePage || nowViewing.today || nowViewing.yesterday)
{
aCSS.push("a.rss, a.rss:hover { background:none; border:0px; height:14px; margin:0px; padding:0px; width:14px; }");
aCSS.push("div.catheader a.rss { position:relative; top:2px; }");
smallIcons = document.getElementsByXPath("//a[@class='rss']");
}
if (nowViewing.category)
{
aCSS.push("h1 a.rss.small { background:none; border:0px; height:28px; margin:0px; padding:0px; vertical-align:bottom !important; width:28px; }");
aCSS.push("h1 a.rss.small { position:relative; top:-2px; }");
aCSS.push("table.maintable a.rss { background:none; border:0px; height:14px; margin:0px; padding:0px; width:14px; }");
aCSS.push("table.maintable a.rss img { margin-bottom:1px; margin-top:0px; vertical-align:middle; }");
aCSS.push("div#footer a.rss { background:none; border:0px; height:14px; margin:0px; padding:0px; width:14px; }");
largeIcons = document.getElementsByXPath("//div[@id='content']//a[@class='rss small']");
smallIcons = document.getElementsByXPath("//div[@id='footer']//a[@class='rss'] | //table[@class='maintable']//a[@class='rss']");
}
if (nowViewing.searchResults || nowViewing.subCategory || nowViewing.userTorrents || nowViewing.categoryList)
{
aCSS.push("h1 a.rss.small { background:none; border:0px; height:28px; margin:0px; padding:0px; vertical-align:bottom !important; width:28px; }");
aCSS.push("div#footer a.rss { background:none; border:0px; height:14px; margin:0px; padding:0px; width:14px; }");
smallIcons = document.getElementsByXPath("//div[@id='footer']//a[@class='rss']");
largeIcons = document.getElementsByXPath("//div[@id='content']//a[@class='rss small']");
}
aCSS.push("div#footer a.rss { position:relative; top:-2px; }");
if (smallIcons.length > 0) smallIcons.forEach(function(element){ element.innerHTML = "<img src='" + images.rssIcons14 + "' width='14' height'14' />"; });
if (largeIcons.length > 0) largeIcons.forEach(function(element){ element.innerHTML = "<img src='" + images.rssIcons28 + "' width='28' height'28' />"; });
};
// ---------------------------------------------------------------------------
// create category header tabs on the homepage, todays torrents and yesterdays torrents pages
if (((nowViewing.homePage) && (settings.category["category-tabs"].setting["create-on-homepage"].value == true)) ||
(((nowViewing.today) || (nowViewing.yesterday)) && (settings.category["category-tabs"].setting["create-on-today-and-yesterday"].value == true)))
{
createCategoryTabs();
}
// copy the "show all torrents in [category]" link from below the category table to above it
// also amend the links so they list torrents sorted by date
if (nowViewing.category)
{
with (document.getElementByXPath("//div[@id='content']/p[a[starts-with(@href,'/cat-list/')]]"))
{
getElementsByTagName("a")[0].href += "/added";
var element = cloneNode(true);
}
var target = document.getElementByXPath("//div[@id='content']/h1");
target.parentNode.insertBefore(element, target.nextSibling);
}
if (elements.tables.length > 0)
{
var columnPosition = {};
// var b = ((nowViewing.searchResults || nowViewing.userTorrents) && (["All", "Featured"].indexOf(elements.selectedCategoryLink.firstChild.nodeValue) > -1));
var b = ((nowViewing.searchResults && ["All", "Featured"].indexOf(elements.selectedCategoryLink.firstChild.nodeValue) > -1) || (nowViewing.userTorrents));
columnPosition.nameColumn = (b ? 3 : 2);
columnPosition.seedsColumn = columnPosition.nameColumn + 2;
columnPosition.peersColumn = columnPosition.nameColumn + 3;
if (nowViewing.homePage || nowViewing.today || nowViewing.yesterday)
{
setColumnWidths();
}
if (!nowViewing.category)
{
formatColumnHeaders();
}
if ((nowViewing.searchResults || nowViewing.categoryList || nowViewing.subCategory || nowViewing.userTorrents) && (settings.category["torrent-lists"].setting["format-dates-iso8601"].value == true))
{
formatDateColumn();
}
if (nowViewing.searchResults || nowViewing.userTorrents)
{
formatCategoryColumn();
}
if (!nowViewing.category)
{
formatNameColumn();
if (settings.category["torrent-lists"].setting["create-ratio-column"].value == true)
{
createRatioColumn();
}
if ((settings.category["torrent-lists"].setting["hide-private-trackers"].value == true) ||
(settings.category["torrent-lists"].setting["hide-seedless-trackers"].value == true) ||
(settings.category["excluded-words"].setting["word-list"].value != "") ||
(settings.category["excluded-categories"].setting["category-list"].value != "") ||
(settings.category["excluded-subcategories"].setting["subcategory-list"].value != ""))
{
hideTorrents();
}
}
if (settings.category["appearance"].setting["replace-rss-icons"].value == true)
{
formatRssImages();
}
}
// add the seed/peer ratio on the torrent details page
if (nowViewing.torrentInfo)
{
var oSpan = document.getElementById("shareratio");
var aSpan = oSpan.getElementsByTagName("span");
if (aSpan.length == 2)
{
if (settings.category["torrent-lists"].setting["replace-leechers-with-peers"].value == true) aSpan[1].nextSibling.nodeValue = " peers";
var iSeeds = aSpan[0].innerHTML; iSeeds = (isNaN(iSeeds) ? 0 : parseInt(iSeeds));
var iPeers = aSpan[1].innerHTML; iPeers = (isNaN(iPeers) ? 0 : parseInt(iPeers));
oSpan.innerHTML += " (Ratio: " + Math.round((iPeers == 0 ? 0 : iSeeds / iPeers), 2) + ")";
}
}
formatSearchForm();
GM_addStyle(aCSS.join("\n"));
}
catch(error){ GM_logError(error); }}
// =================================================================================================
// Mininova
function Mininova() { try
{
var i1 = Date.now();
loadSettings();
createSettingsPanel();
removeElements();
formatDocument();
var i2 = Date.now();
GM_log("_@/ mininova" + " (" + (i2 - i1) + "ms)");
} catch(error){ GM_logError(error); }}
Mininova();