- // ==UserScript==
- // @name iRacing Session Manager
- // @namespace http://www.math.kit.edu/ianm2/~maier
- // @version 0.1
- // @description Save and load session (testing/hosted) settings on www.iRacing.com
- // @author Markus Maier
- // @match http://members.iracing.com/membersite/member/*
- // @grant GM_getValue
- // @grant GM_setValue
- // ==/UserScript==
-
- var params = {
- timeout: 2500,
- switchToWeather: false,
- };
-
- var sessions;
- init();
-
- function init()
- {
- // First UI
- UI_addElements();
- UI_css();
-
- // Get saved sessions from GM
- var sessions_JSON = GM_getValue('sessions');
- if(sessions_JSON === undefined)
- sessions = new Object();
- else
- sessions = JSON.parse(sessions_JSON);
-
-
- //and finally refresh list
- UI_refreshSessions();
- }
-
-
-
- function saveSession() {
- var sessionName = document.getElementById('mm_ism_savesessionname').value;
- if(sessions.hasOwnProperty(sessionName))
- {
- var r = confirm("Are you sure you want to overwrite session \"" + sessionName + "\"?");
- if (!r) return;
- }
- var new_session = {
- name: sessionName,
- car: parseInt(document.getElementById('carSelectorDropdown').value),
- track: {
- id: parseInt(document.getElementById('trackSelectorDropdown').value),
- config: parseInt(document.getElementById('configSelectorDropdown').value),
- night: ( (document.getElementById('testingpanel_nightMode') === undefined) ? 0 : document.getElementById('testingpanel_nightMode').checked),
- },
- weather: {
- temp: parseInt(document.getElementById('weatherTestWeatherTemp').value),
- tempUnit: parseInt(document.getElementById('weatherTestweatherTempChoice').value),
- humidity: parseInt(document.getElementById('testHumiditySliderValue').value),
- fog: parseInt(document.getElementById('testingFog').value),
- windSpeed: parseInt(document.getElementById('weatherTestweatherWindSpeed').value),
- windSpeedUnit: parseInt(document.getElementById('weatherTestweatherWindSpeedChoice').value),
- windDirection: parseInt(document.getElementById('weatherTestweatherWindDirection').value),
- cloudCover: parseInt(document.getElementById('testCloudCover').value),
- random: document.getElementById('testRandomWeather').checked,
- },
- };
- sessions[sessionName] = new_session;
- // save it
- GM_setValue('sessions', JSON.stringify(sessions));
-
- // finally refresh UI
- UI_refreshSessions();
- document.getElementById('mm_ism_sessionlist').value = sessionName;
- }
-
- function removeSession() {
- var name = document.getElementById('mm_ism_sessionlist').value;
-
- var r = confirm("Are you sure you want to delete session \"" + name + "\"?");
- if (!r) return;
-
- delete sessions[name];
-
- // save it for after refresh
- GM_setValue('sessions', JSON.stringify(sessions));
-
- //refresh UI
- UI_refreshSessions();
- }
-
- function loadSession() {
- document.getElementById('mm_ism_info').style.display = 'block';
-
- var name = document.getElementById('mm_ism_sessionlist').value;
-
- document.getElementById('mm_ism_savesessionname').value = name;
-
- var session = sessions[name];
-
- // ONLY ADJUST INPUT VALUES
- //car
- document.getElementById('carSelectorDropdown').value = session.car;
- dispEvent(document.getElementById('carSelectorDropdown'),'HTMLEvents','change');
- //track
- document.getElementById('trackSelectorDropdown').value = session.track.id;
- dispEvent(document.getElementById('trackSelectorDropdown'),'HTMLEvents','change');
- document.getElementById('configSelectorDropdown').value = session.track.config;
- dispEvent(document.getElementById('configSelectorDropdown'),'HTMLEvents','change');
-
- window.setTimeout(loadSession_part2,params.timeout);
- }
-
- function loadSession_part2() {
- var name = document.getElementById('mm_ism_sessionlist').value;
- var session = sessions[name];
-
- if(params.switchToWeather)
- dispEvent(document.getElementById('weatherTestToggle'),'MouseEvent','click');
-
- //Night Mode
- document.getElementById('testingpanel_nightMode').checked = session.track.night;
- //weather
-
- //temp
- document.getElementById('weatherTestweatherTempChoice').value = session.weather.tempUnit
- document.getElementById('weatherTestWeatherTemp').value = session.weather.temp;
- var minTemp, maxTemp, numTemp;
- var tempSliderVal;
- if(session.weather.tempUnit == 0){ //Celcius
- minTemp = 65.0;
- maxTemp = 90.0;
- }
- if(session.weather.tempUnit == 1) { //Fahrenheit
- minTemp = 18.0;
- maxTemp = 32.0;
- }
- numTemp = session.weather.temp;
- tempSliderVal = (100.0/(maxTemp-minTemp))*(numTemp-minTemp);
- document.getElementById('testTempSlider').childNodes[0].style.height = tempSliderVal.toString() + "%";
- document.getElementById('testTempSlider').childNodes[1].style.bottom = tempSliderVal.toString() + "%";
-
-
- //humidity
- document.getElementById('testHumiditySliderValue').value = session.weather.humidity;
- document.getElementById('testingFog').value = session.weather.fog;
- document.getElementById('testHumiditySliderValue').value = session.weather.humidity;
- document.getElementById('testingFog').value = session.weather.fog;
- sliderVal = 0.5*(session.weather.humidity + session.weather.fog);
- document.getElementById('testHumiditySlider').childNodes[0].style.height = sliderVal.toString() + "%";
- document.getElementById('testHumiditySlider').childNodes[1].style.bottom = sliderVal.toString() + "%";
- var fog = session.weather.fog;
- var testFogWarning = document.getElementById('testFogWarning');
- var testFogValue = document.getElementById('testFogValue');
- if(fog > 0) {
- testFogValue.style.display = "block";
- testFogValue.innerHTML = "Fog: " + fog + "%";
- } else {
- testFogValue.style.display = "none";
- }
-
- if(fog <= 25) {
- testFogWarning.className = 'testwarning';
- testFogWarning.title = '';
- } else if(26 <= fog && fog <= 39) {
- testFogWarning.className = 'testwarning low';
- testFogWarning.title = 'You have selected a fog level that may be dangerous to drive in.';
- } else {
- testFogWarning.className = 'testwarning high';
- testFogWarning.title = 'You have selected a level of fog that highly impairs vision. Use with caution!';
- };
-
- //Wind speed
-
- //workaround to fix iracing hpp
- document.getElementById('weatherTestweatherWindSpeedChoice').value = 0;
- dispEvent(document.getElementById('weatherTestweatherWindSpeedChoice'),'HTMLEvents','change');
- document.getElementById('weatherTestweatherWindSpeedChoice').value = 1;
- dispEvent(document.getElementById('weatherTestweatherWindSpeedChoice'),'HTMLEvents','change');
-
- document.getElementById('weatherTestweatherWindSpeedChoice').value = session.weather.windSpeedUnit;
- dispEvent(document.getElementById('weatherTestweatherWindSpeedChoice'),'HTMLEvents','change');
- document.getElementById('weatherTestweatherWindSpeed').value = session.weather.windSpeed;
-
- var maxWSpeed, numWSpeed;
- var windSliderVal;
- if(session.weather.windSpeedUnit== 0) //mph
- maxWSpeed = 30;
- else //kph
- maxWSpeed = 48;
- numWSpeed = session.weather.windSpeed;
- windSliderVal = (100.0/maxWSpeed)*numWSpeed;
- document.getElementById('testWindSlider').childNodes[0].style.height = windSliderVal.toString() + "%";
- document.getElementById('testWindSlider').childNodes[1].style.bottom = windSliderVal.toString() + "%";
-
-
- //winddir and cloudcover
- document.getElementById('weatherTestweatherWindDirection').value = session.weather.windDirection;
- document.getElementById('testCloudCover').value = session.weather.cloudCover;
-
- //random weather
- if(document.getElementById('testRandomWeather').checked != session.weather.random)
- dispEvent(document.getElementById('testRandomWeather'),'MouseEvent','click');
-
- document.getElementById('mm_ism_info').style.display = 'none';
- }
-
-
- function dispEvent(elem,evType1,evType2) {
- var event = document.createEvent(evType1);
- event.initEvent(evType2, true, true );
- elem.dispatchEvent(event);
- }
-
-
-
- function UI_showFrame() {
- document.getElementById('mm_ism_mainframe').style.display = "block";
- }
-
- function UI_hideFrame() {
- document.getElementById('mm_ism_mainframe').style.display = "none";
- }
-
- function UI_refreshSessions() {
- //First, remove all entries
- var sessionList = document.getElementById('mm_ism_sessionlist');
- while (sessionList.firstChild) {
- sessionList.removeChild(sessionList.firstChild);
- }
- //Then add new ones
- for(var name in sessions) {
- var new_li = document.createElement('option');
- new_li.appendChild(document.createTextNode(name));
- new_li.value = name;
- sessionList.appendChild(new_li);
- }
- }
-
- function UI_addElements() {
- //create Elements
- var testingpanel_testcar_button = document.getElementById('green_racepanel_btn');
- var mm_ism_mainbutton = testingpanel_testcar_button.cloneNode(true);
- mm_ism_mainbutton.id ="mainbutton";
- mm_ism_mainbutton.firstElementChild.innerHTML='Manage Sessions';
- mm_ism_mainbutton.addEventListener('click',UI_showFrame,false);
-
- var mainframe = document.createElement('div');
- mainframe.id = "mm_ism_mainframe";
-
- mainframe.innerHTML = "" +
- "<div>"+
- "<a id=\"mm_ism_closebutton\">[Close]</a>"+
- "</div>"+
- "<div>"+
- "Save:<br/>"+
- "<input id=\"mm_ism_savesessionname\" />"+
- "<input id=\"mm_ism_savesessionbutton\" type=\"button\" value=\"Save\" />"+
- "</div>"+
- "<div>"+
- "Load:<br/>"+
- "<select id=\"mm_ism_sessionlist\">"+
- "</select>"+
- "<input id=\"mm_ism_loadsessionbutton\" type=\"button\" value=\"Load\" />"+
- "<input id=\"mm_ism_deletesessionbutton\" type=\"button\" value=\"X\" />"+
- "</div>"+
- "<div id=\"mm_ism_info\">Loading session...</div>";
-
- var testingpanel_session = document.getElementById('testingpanel_session').parentNode;
- testingpanel_session.appendChild(mm_ism_mainbutton);
- testingpanel_session.insertBefore(mainframe, testingpanel_session.firstChild);
-
- document.getElementById('mm_ism_closebutton').addEventListener('click',UI_hideFrame,false);
- document.getElementById('mm_ism_savesessionbutton').addEventListener('click',saveSession,false);
- document.getElementById('mm_ism_loadsessionbutton').addEventListener('click',loadSession,false);
- document.getElementById('mm_ism_deletesessionbutton').addEventListener('click',removeSession,false);
- }
-
- function UI_css() {
- css_string = "" +
- "#mm_ism_mainframe {" +
- " display:none;"+
- " position:relative;"+
- " margin:0px 0px 50px 0px;"+
- " padding:5px;"+
- " height:125px;"+
- " border: 1px solid black;"+
- " background-color:white" +
- "}"+
- "#mm_ism_info {"+
- " display:none"+
- "}";
-
- var css = document.createElement("style");
- css.type = "text/css";
- css.innerHTML = css_string;
- document.body.appendChild(css);
- }
-
-
-
-
-