There are 1 previous version of this script.
// ==UserScript==
// @name Pardus Nav Screen Job Display
// @namespace pardus.at
// @description Displays running missions on the Nav screen
// @include http://*.pardus.at/main.php*
// @include http://*.pardus.at/bulletin_board.php*
// @include http://*.pardus.at/overview_jobs.php*
// ==/UserScript==
// //////////////////////////////////////////////////////////////////////////
// Constants:
// //////////////////////////////////////////////////////////////////////////
var SECOND = 1000;
var MINUTE = SECOND * 60;
var HOUR = MINUTE * 60;
var DAY = HOUR * 24;
var STORED_VALUE_NAME = 'jobs';
// Available Nav Display References
var RIGHT_COL = 0;
var LEFT_COL = 1;
// Available Nav Display Reference Relations
var BEFORE = 0;
var AFTER = 1;
var IMAGE_URL = 'http://static.pardus.at/images';
// //////////////////////////////////////////////////////////////////////////
// User Editable Values
// //////////////////////////////////////////////////////////////////////////
var missionsToDisplay = 0; //Set this value to 0 to display all missions
// Otherwise, set to the number of missions
// to display
var showEuropeanDate = false; //The default date value is MM/DD HH:MM
// Set this to true to display as DD/MM HH:MM
var timeThreshold = 0; //Only display missions that are longer than
// this threshold.
// Example: (3 * DAY) + (2 * HOUR);
var navDisplayReference = RIGHT_COL; //Choose a display location
// on the Nav screen
// See Constants section for
// appropriate values.
var navDisplayReferenceRelation = AFTER; //Choose where in relation to the
// navDisplayReference you want to
// show the list on the Nav screen
var columnsToDisplay = new Array();
columnsToDisplay[0] = '<tr><td colspan="2" style="border: solid 1px red;" align="center">!VALUE!</td></tr>~faction';
columnsToDisplay[1] = '<tr><td align="center">!VALUE!</td><td align="center">!VALUE!</td></tr>~type~amount';
columnsToDisplay[2] = '<tr><td colspan="2" align="center">';
columnsToDisplay[3] = 'due_date';
columnsToDisplay[4] = '</td></tr>';
columnsToDisplay[5] = '<tr><td colspan="2" align="center">!VALUE!</td></tr>~target_object';
columnsToDisplay[6] = '<tr><td colspan="2" align="center">!VALUE! !VALUE!</td></tr>~target_sector~target_coords';
var defaults = new Array();
defaults['faction' ] = 'Neutral';
/*
defaults['type' ]
defaults['amount' ]
defaults['time' ]
defaults['start_time' ]
defaults['due_date' ]
defaults['target_object']
defaults['target_sector']
defaults['target_coords']
defaults['reward' ]
defaults['deposit' ]
*/
// //////////////////////////////////////////////////////////////////////////
// Imported -- Rhindon's Standard GreaseMonkey functions
// Please give credit if using these functions in your own code.
// //////////////////////////////////////////////////////////////////////////
function writeValue(name,value,days) {
subdomain = window.location.host.substr(0, window.location.host.indexOf('.'));
GM_setValue(subdomain + '-' + name,value);
}
function readValue(name) {
subdomain = window.location.host.substr(0, window.location.host.indexOf('.'));
try {
var temp = GM_getValue(subdomain + '-' + name);
if(temp != '~~~DELETED~~~') return temp;
return null;
} catch(err) {
return null;
}
}
function deleteValue(name) {
writeValue(name,"~~~DELETED~~~");
}
function addElement(valueName, element) {
//This is a standard function created by Rhindon. It assumes that
//a function exists called "serializeElement" which does just that.
var serializedElement = serializeElement(element)
var eArray = getElementArray(valueName);
if(!eArray) {
//This is the only element -- Set the index to '0' and write the string
serializedElement = serializedElement.replace('!INDEX!', 0);
writeValue(valueName, serializedElement);
return;
}
serializedElement = serializedElement.replace('!INDEX!', eArray.length);
eArray[eArray.length] = serializedElement;
var newValue = '';
for(var i = 0; i < eArray.length; i++) {
var addVal = eArray[i].replace(/{/g, '').replace(/}/g, '');
if(addVal.substr(addVal.indexOf('~')) == serializedElement.substr(serializedElement.indexOf('~'))) {
//This element already exists. Don't add it again.
continue;
}
newValue += '{' + addVal + '}';
}
writeValue(valueName, newValue);
}
function deleteElement(valueName, idx) {
var cnt = 0;
var eArray = getElementArray(valueName);
var newValue = '';
for(var i = 0; i < eArray.length; i++) {
//Strip off the Index
eArray[i] = '!INDEX!' + eArray[i].substr(eArray[i].indexOf('~'));
alert(eArray[i]);
if(i != idx) {
//Set the new index and add the element.
newValue += '{' + eArray[i].replace('!INDEX!', ++cnt) + '}';
}
}
writeValue(valueName, newValue);
}
function getElementArray(valueName) {
var estring = readValue(valueName);
if(!estring) {
return null;
}
estring = estring.replace(/}/g, '').substr(1);
return estring.split('{');
}
function stripTags(str) {
var done = false;
while(!done) {
var ltIdx = str.indexOf('<');
var gtIdx = str.indexOf('>');
if(ltIdx < 0 && gtIdx < 0) {
//Strip leading and trailing spaces
if(str.substr(0, 1) == ' ') {
str = str.substr(1);
continue;
} else if(str.substr(str.length - 1, str.length) == ' ') {
str = str.substr(0, str.length - 1);
continue;
}
done = true;
continue;
}
if(gtIdx < 0) {
str = str.substr(0, ltIdx);
} else if(ltIdx == 0 || gtIdx < ltIdx || ltIdx < 0) {
str = str.substr(gtIdx + 1);
} else if(gtIdx == str.length - 1) {
str = str.substr(0, ltIdx);
} else {
str = str.substr(0, ltIdx) + str.substr(gtIdx + 1);
}
}
return str.replace(' ', '');
}
// //////////////////////////////////////////////////////////////////////////
// End imported code
// //////////////////////////////////////////////////////////////////////////
// //////////////////////////////////////////////////////////////////////////
// Code to Parse Missions
// //////////////////////////////////////////////////////////////////////////
function saveTaken() {
if(document.URL.indexOf('bulletin_board.php') >= 0) {
if(unsafeWindow.midesc) { //Compact View
for (z = 0; z < unsafeWindow.missions.length; z++) {
if(unsafeWindow.taken[unsafeWindow.missions[z]['id']] == 1) {
writeCompactMission(unsafeWindow.midesc[z]);
}
}
alert('Missions Saved.');
} else { //Normal View
tables = document.getElementsByTagName('table');
for(var i = 0; i < tables.length; i++) {
if(tables[i].className == 'messagestyle' && tables[i].width == '70%') {
writeNormalMission(tables[i].innerHTML);
}
}
alert('Missions Saved.');
}
} else if(document.URL.indexOf('overview_jobs.php') >= 0) {
deleteValue(STORED_VALUE_NAME);
for (z = 0; z < unsafeWindow.midesc.length; z++) {
writeCompactMission(unsafeWindow.midesc[z]);
}
}
}
function writeCompactMission(desc) {
var m = new Object();
//Get the items by tokenizing the Table Datas in the string
desc = desc.substr(desc.indexOf('<td') + 1);
m['faction'] = '<' + desc.substr(0, desc.indexOf('<td'));
m['faction'] = m['faction'].substr(m['faction'].indexOf('>') + 1);
m['faction'] = m['faction'].replace('</td>', '');
desc = desc.substr(desc.indexOf('<td') + 1);
m['type'] = '<' + desc.substr(0, desc.indexOf('<td'));
m['type'] = m['type'].substr(m['type'].indexOf('>') + 1);
m['type'] = m['type'].replace('</td>', '');
desc = desc.substr(desc.indexOf('<td') + 1);
m['amount'] = '<' + desc.substr(0, desc.indexOf('<td'));
m['amount'] = m['amount'].substr(m['amount'].indexOf('>') + 1);
m['amount'] = m['amount'].replace('</td>', '');
m['amount'] = stripTags(m['amount']);
if(m['amount'].indexOf('free') > 0) {
m['amount'] = m['amount'].substr(0, m['amount'].indexOf('free'));
}
desc = desc.substr(desc.indexOf('<td') + 1);
m['time'] = '<' + desc.substr(0, desc.indexOf('<td'));
m['time'] = stripTags(m['time']);
desc = desc.substr(desc.indexOf('<td') + 1);
m['target_object'] = '<' + desc.substr(0, desc.indexOf('<td'));
m['target_object'] = stripTags(m['target_object']);
desc = desc.substr(desc.indexOf('<td') + 1);
m['target_sector'] = '<' + desc.substr(0, desc.indexOf('<td'));
m['target_sector'] = stripTags(m['target_sector']);
desc = desc.substr(desc.indexOf('<td') + 1);
m['target_coords'] = '<' + desc.substr(0, desc.indexOf('<td'));
m['target_coords'] = stripTags(m['target_coords']);
desc = desc.substr(desc.indexOf('<td') + 1);
m['reward'] = '<' + desc.substr(0, desc.indexOf('<td'));
m['reward'] = stripTags(m['reward']);
desc = desc.substr(desc.indexOf('<td') + 1);
m['deposit'] = '<' + desc.substr(0, desc.indexOf('<td'));
m['deposit'] = stripTags(m['deposit']);
//Calculate the end time, and store the .valueOf result
m['time'] = getTimeDifference(m['time']);
var theDate = new Date();
m['start_time'] = theDate.valueOf();
var dueDate = new Date(theDate.valueOf() + m['time']);
m['due_date'] = dueDate.valueOf();
addElement(STORED_VALUE_NAME, m);
}
function writeNormalMission(desc) {
desc = desc.substr(desc.indexOf('<th') + 1);
m['faction'] = '<' + desc.substr(0, desc.indexOf('</th>'));
m['faction'] = m['faction'].substr(m['faction'].indexOf('<'));
alert('Faction: ' || m['faction']);
}
// //////////////////////////////////////////////////////////////////////////
// Serialize/Deserialize Code
// //////////////////////////////////////////////////////////////////////////
function serializeElement(m) {
return '{!INDEX!~' +
m['faction' ] + '~' +
m['type' ] + '~' +
m['amount' ] + '~' +
m['time' ] + '~' +
m['start_time' ] + '~' +
m['due_date' ] + '~' +
m['target_object'] + '~' +
m['target_sector'] + '~' +
m['target_coords'] + '~' +
m['reward' ] + '~' +
m['deposit' ] + '}';
}
function deserializeElement(mission) {
mission = mission.replace(/}/g, '').replace('{', '');
var mArr = mission.split('~');
var m = new Object();
m['index' ] = mArr[0]
m['faction' ] = mArr[1];
m['type' ] = mArr[2];
m['amount' ] = mArr[3];
m['time' ] = mArr[4];
m['start_time' ] = mArr[5];
m['due_date' ] = mArr[6];
m['target_object' ] = mArr[7];
m['target_sector' ] = mArr[8];
m['target_coords' ] = mArr[9];
m['reward' ] = mArr[10];
m['deposit' ] = mArr[11];
/* alert(mission + '\n\n' + m['faction'] + '\n' +
m['type'] + '\n' +
m['amount'] + '\n' +
m['time'] + '\n' +
m['target_object'] + '\n' +
m['target_sector'] + '\n' +
m['target_coords'] + '\n' +
m['reward'] + '\n' +
m['deposit']);
*/
return m;
}
function cleanupElements(valueName) {
var arr = getElementArray(valueName);
if(!arr) return;
var newElementString = '';
var count = 0;
for(var i = 0; i < arr.length; i++) {
var m = deserializeElement(arr[i]);
var now = new Date();
if(m['due_date'] > now.valueOf()) {
var serializedElement = serializeElement(m);
serializedElement.replace('!INDEX!', count);
newElementString += serializedElement;
count++;
}
}
writeValue(valueName, newElementString);
}
// //////////////////////////////////////////////////////////////////////////
// Utility Functions
// //////////////////////////////////////////////////////////////////////////
function getTimeDifference(timeString) {
var days = '0';
var hours = '0';
var minutes = '0';
if(timeString.indexOf('d') > 0) {
days = timeString.substr(0, timeString.indexOf('d'));
}
if(timeString.indexOf('h') > 0) {
hours = ' ' + timeString.substr(0, timeString.indexOf('h'));
hours = hours.substr(hours.lastIndexOf(' '));
}
if(timeString.indexOf('m') > 0) {
minutes = ' ' + timeString.substr(0, timeString.indexOf('m'));
minutes = minutes.substr(minutes.lastIndexOf(' '));
}
if(timeString.indexOf('d') < 0 && timeString.indexOf('h') < 0 && timeString.indexOf('m') < 0) {
minutes = timeString;
}
return (days * DAY) + (hours * HOUR) + (minutes * MINUTE);
}
// //////////////////////////////////////////////////////////////////////////
// HTML Generation Code
// //////////////////////////////////////////////////////////////////////////
function getAllMissionHTML(valueName) {
var missions = getElementArray(valueName);
if(missions) {
var count = 0;
var html = '<table width="80%">';
var cap = missions.length;
if(missionsToDisplay > 0 && missionsToDisplay < missions.length) cap = missionsToDisplay;
for(var i = 0; count < cap && i < cap; i++) {
var m = deserializeElement(missions[i]);
if(parseInt(m['time']) < timeThreshold) continue;
count++;
html += getMissionHTML(m, columnsToDisplay);
}
if(count > 0) return html + '</table>';
}
return '<table><tr><td>No missions to display.</td></tr></table>';
}
//Returns <tr> element with the columns passed
function getMissionHTML(m, columnsArr) {
var html = '<tr>';
html += '<td>';
html += '<table width="100%">';
for(var i = 0; i < columnsArr.length; i++) {
var cname = columnsArr[i];
if(!cname) continue;
// html += '<tr><td>';
if(cname == 'due_date') {
//Calculate the Due Date & Time for this mission
var d = new Date(parseInt(m[cname]));
var dateString = d.getMonth() + '/' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes();
if(showEuropeanDate) {
dateString = d.getDate() + '/' + d.getMonth() + ' ' + d.getHours() + ':' + d.getMinutes();
}
html += dateString;
} else if(m[cname]) {
html += m[cname];
} else {
if(cname.indexOf('~')) {
var spl = cname.split('~');
var writeStr = spl[0];
for(var j = 1; j < spl.length; j++) {
var val = m[spl[j]];
if(val == '-' && defaults[spl[j]]) {
val = defaults[spl[j]];
}
writeStr = writeStr.replace('!VALUE!', val);
}
html += writeStr;
} else {
html += cname;
}
}
// html += '</td></tr>';
}
html += '</table></td></tr>';
return html;
}
// //////////////////////////////////////////////////////////////////////////
// Bulletin Board Page Code
// //////////////////////////////////////////////////////////////////////////
if(document.URL.indexOf('bulletin_board.php') >= 0) {
var buttonHTML = '<button id="saveTakenButton">Save Accepted Missions</button><br>';
document.getElementById('missions').innerHTML = buttonHTML + document.getElementById('missions').innerHTML;
document.getElementById('saveTakenButton').addEventListener('click',saveTaken,true);
}
// //////////////////////////////////////////////////////////////////////////
// Nav Screen Code
// //////////////////////////////////////////////////////////////////////////
if(document.URL.indexOf('main.php') >= 0) {
cleanupElements(STORED_VALUE_NAME);
var nav_box_html = '<br>';
//Nav Box Top
nav_box_html += "<table width=\"210\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
nav_box_html += " <tr>";
nav_box_html += " <td style=\"background-image:url('" + IMAGE_URL + "/cargo.png');background-repeat:repeat-y;background-position: 0px 0px; height: 28px; overflow: hidden;\">";
nav_box_html += " <table align=\"center\" style=\"width: 150px; background-image:url('" + IMAGE_URL + "/bgmedium.gif');\"><tr><td align=\"center\" style=\"font-family: arial; text-size: 12pt;\"><b>Running Missions</b></td></tr></table> ";
nav_box_html += " </td>";
nav_box_html += " </tr>";
nav_box_html += " <tr>";
nav_box_html += " <td style=\"background-image:url('" + IMAGE_URL + "/panel.png');background-repeat:repeat-y\" align=\"center\">";
//Nav Box Content
nav_box_html += getAllMissionHTML(STORED_VALUE_NAME);
//Nav Box Bottom
nav_box_html += " </td>";
nav_box_html += " </tr>";
nav_box_html += " <tr>";
nav_box_html += " <td>";
nav_box_html += " <img src=\"" + IMAGE_URL + "/panelbottom.png\" width=\"210\" height=\"22\">";
nav_box_html += " </td>";
nav_box_html += " </tr>";
nav_box_html += "</table><br /><br />";
var div = document.getElementsByTagName('div');
//search for the parent table of the cargo section
var table = document.getElementsByTagName('table');
//Get the picture name to search for based on the Display Location Reference
var searchStr;
if(navDisplayReference == RIGHT_COL) {
searchStr = 'cargo.png';
} else if (navDisplayReference == LEFT_COL) {
searchStr = 'status.png';
}
for(i = 0; i < table.length; i++)
{
if(table[i].innerHTML.indexOf(searchStr) != -1)
var e = table[i].parentNode;
}
var temp = e.innerHTML;
if(navDisplayReferenceRelation == AFTER) {
temp += nav_box_html;
} else {
temp = nav_box_html + temp;
}
e.innerHTML = temp;
}
if(document.URL.indexOf('overview_jobs.php') >= 0) {
saveTaken();
}