// ==UserScript==
// @name iRacing road only
// @namespace drinkto.me
// @description Userscript for iRacing that hides content unrelated to road racing. This is opinionated, so YMMV.
// @include http://members.iracing.com/jforum/forums/list.page
// @include http://members.iracing.com/membersite/member/*
// @version 8
// @grant none
// ==/UserScript==
var load,execute,loadAndExecute,executeJQuery;load=function(a,b,c){var d;d=document.createElement("script"),d.setAttribute("src",a),b!=null&&d.addEventListener("load",b),c!=null&&d.addEventListener("error",c),document.body.appendChild(d);return d},execute=function(a){var b,c;typeof a=="function"?b="("+a+")();":b=a,c=document.createElement("script"),c.textContent=b,document.body.appendChild(c);return c},loadAndExecute=function(a,b){return load(a,function(){return execute(b)})}
,executeJQuery=function(a){if(typeof jQuery=='undefined'){var jqUrl='//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js';loadAndExecute(jqUrl,a);}else{execute(a);}};
executeJQuery(function () {
// On membersite, make 'series' link always go to the road filter
$("td.simpleNav ul li a[href='/membersite/member/Series.do']").attr("href", "/membersite/member/Series.do?cat=2")
// Give some indication that this is not the full list on forum home.
$(".homeLink").text("Forum List (road only)")
//-----------------------------------------------------
//
// Show countdown timer and number registered drivers in title (contributed by @kutu)
//
if ("racingpaneldata" in this && racingpaneldata.session) {
var originalTitle = document.title;
setInterval(function () {
var numRegistered = $("#racingpanel_session_numregistered");
var countdownTimer = $("#racingpanel_countdown_timer");
if (numRegistered.length && countdownTimer.length) {
document.title = numRegistered.text() + " " + countdownTimer.text() + " " + originalTitle;
} else {
document.title = originalTitle;
}
}, 1000);
}
//-----------------------------------------------------
//
// Remove ovals and ineligible series from dropdown menu (contributed by @kutu)
//
var seriesDrop = $("#datSeriesSelectorDropdown optgroup");
if (seriesDrop.length) {
// remove ovals
var eligibles = seriesDrop[0].children;
var isOvalSection;
var toRemove = [];
$.each(eligibles, function (index, value) {
// search for oval section
if (value.disabled) {
if (/Oval$/.test(value.text)) isOvalSection = true;
if (/Road$/.test(value.text)) isOvalSection = false;
}
if (isOvalSection || value.disabled || value.value == 0) {
// if we currently in oval's section
// or current option is disabled
// or current option is "No matching series"
toRemove.push(value);
} else {
// trim spaces
value.text = value.text.replace(/^\s*/, "")
}
});
// remove not needed options
$.each(toRemove, function (index, value) {
value.remove();
});
// remove ineligible
seriesDrop[1].remove();
// remove root tree and select series
var dropdown = seriesDrop[0].parentElement;
var selectedValue = dropdown.selectedOptions[0].value;
$("#datSeriesSelectorDropdown").append(eligibles);
seriesDrop[0].remove();
$.each(dropdown.children, function (index, value) {
if (value.value == selectedValue) dropdown.selectedIndex = index;
});
}
//-----------------------------------------------------
//
// Filter the hosted sessions by road tracks.
// See the filter_tracks.js to generate the array.
//
if (window.location.pathname.indexOf("/HostedSessions.do") > 0) {
setInterval(function () {
while($('.hosted_sessions_table_info').length <= 0){
sleep(500)
console.log('Waiting for table to show up...')
}
// Change something to indicate this is filtered.
$("tr th a[name='Track']").text("Track (road only)");
// Generated output
var ovalTracks = [
52, // Oval - Atlanta Motor Speedway - Legends Oval
53, // Oval - Atlanta Motor Speedway - Oval
225, // Oval - Auto Club Speedway - Oval
101, // Oval - Bristol Motor Speedway -
143, // Oval - Centripetal Circuit -
39, // Oval - Charlotte Motor Speedway - Legends Oval
40, // Oval - Charlotte Motor Speedway - Oval
123, // Oval - Chicagoland Speedway -
15, // Oval - Concord Speedway -
115, // Oval - Darlington Raceway -
191, // Oval - Daytona International Speedway - Oval
27, // Oval - Daytona circa 2007 - Oval
162, // Oval - Dover International Speedway -
20, // Oval - Homestead Miami Speedway - Miami Speedway
133, // Oval - Indianapolis Motor Speedway - Oval
178, // Oval - Indianapolis Motor Speedway - IndyCar Oval
169, // Oval - Iowa Speedway - Oval
171, // Oval - Iowa Speedway - Legends
172, // Oval - Iowa Speedway - Infield Legends
19, // Oval - Irwindale Speedway - Inner
23, // Oval - Irwindale Speedway - Outer
30, // Oval - Irwindale Speedway - Outer - Inner
214, // Oval - Kansas Speedway - Oval
189, // Oval - Kentucky Speedway - Legends
188, // Oval - Kentucky Speedway - Oval
201, // Oval - Langley Speedway -
17, // Oval - Lanier National Speedway -
113, // Oval - Las Vegas Motor Speedway - Infield Legends Oval
103, // Oval - Las Vegas Motor Speedway - Oval
110, // Oval - Las Vegas Motor Speedway - Legends Oval
33, // Oval - Martinsville Speedway -
124, // Oval - Michigan International Speedway -
156, // Oval - Mid-Ohio Sports Car Course - Oval
157, // Oval - Mid-Ohio Sports Car Course - Alt Oval
131, // Oval - New Hampshire Motor Speedway - Oval
222, // Oval - New Hampshire Motor Speedway - Legends
190, // Oval - New Smyrna Speedway -
12, // Oval - Oxford Plains Speedway -
104, // Oval - Phoenix International Raceway - Oval
136, // Oval - Pocono Raceway - Oval
31, // Oval - Richmond International Raceway -
203, // Oval - Rockingham Speedway - Oval
14, // Oval - South Boston Speedway -
11, // Oval - Stafford Motor Speedway - Full Course
116, // Oval - Talladega Superspeedway -
120, // Oval - Texas Motor Speedway - Legends Oval
121, // Oval - Texas Motor Speedway - Oval
94, // Oval - The Milwaukee Mile -
161, // Oval - Thompson International Speedway -
198, // Oval - Twin Ring Motegi - Oval
16 // Oval - USA International Speedway -
];
function getURLParameter(url, name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(url) || [, ""])[1].replace(/\+/g, '%20')) || null;
}
// Iterate over each td that contains a link to a track, compare to known roadTracks and remove if not listed above.
// /membersite/member/TrackDetail.do?trkid=107
$("table tr td div div a[href*='/membersite/member/TrackDetail.do?trkid']").each(function (index) {
var href = $(this).attr('href');
var trackID = parseInt(getURLParameter(href, 'trkid'));
var text = $(this).text();
var isOval = (-1 != $.inArray(trackID, ovalTracks));
var isUnwantedRow = (text == 'Track Info' || text == '')
//console.log("track["+ trackID + "]: " + isOval + " - " + $(this).text())
if (isOval && !isUnwantedRow) {
tr = $(this).parent().parent().parent().parent();
//console.log(tr);
console.log("Removing track[" + trackID + "]: " + isOval + " - " + text)
tr.remove();
}
});
}, 1000);
}
//-----------------------------------------------------
//
// Only execute the following if we are on the forum list page
//
if (window.location.pathname.indexOf("/list.page") <= 0)
return;
else
console.log("Skipping forum list pruning.");
function toggleForumRowByText(forums) {
$.each(forums, function (index, value) {
e = $("td:contains('" + value + "')");
e.parent().toggle();
console.log("Removed: " + value);
});
}
function toggleForumRowByPage(forums) {
$.each(forums, function (index, value) {
e = $("td a[href*='/" + value + ".page']");
text = e.text();
e.parent().parent().toggle();
console.log("Removed: " + value + ".page - " + text);
});
}
/**
* Remove oval
*/
var ovalPages = [
"619",
"620",
"635",
"621",
"3713",
"624",
"2911",
"629",
"637",
"623",
"631",
"632",
"5511",
"6312",
"8711"
];
var ovalHeaders = ["Oval Racing"];
toggleForumRowByPage(ovalPages);
toggleForumRowByText(ovalHeaders);
/******************************************************
* OPINIONATED removal below here, just oval is above
*/
/**
* Remove club
*/
// club general discussion
$("td:contains('Club Discussion Area')").parent().next().remove()
var clubHeaders = [
"Club Discussion Area",
"Club News",
"Club Stats",
"Setup Garage"
];
toggleForumRowByText(clubHeaders);
/**
* Racing and championships (selected ones only)
*/
var racingAndChampionshipsPages = [
"644", // world champ
"645", // pro
"647", // licenses, ratings and scoring
"648", // racing your latest race
"649", // video and screenshot showcase
"643", // world cup of iracing
"9711", // iracers with physical challenges
"3511", // new tire model discussion
"605", // staff announcements (just maintenance)
"646" // world tour and special events
];
toggleForumRowByPage(racingAndChampionshipsPages);
/**
* Club and Regional
*/
var regionalHeaders = ["Regional Competitions Discussion"];
var regionalPages = ["4111"];
toggleForumRowByText(regionalHeaders);
toggleForumRowByPage(regionalPages);
/**
* Paint
*/
// var paintHeaders = ["The Paint Booth"];
// var paintPages = ["639", "640"];
// toggleForumRowByText(paintHeaders);
// toggleForumRowByPage(paintPages);
/**
* Technical and Help
*/
var techPages = [
"618", // tech - other
"617" // camera files
];
toggleForumRowByPage(techPages);
});