By Amoulier
—
Last update
Oct 20, 2008
—
Installed
150 times.
// ==UserScript==
// @name informa de activos, inactivos.
// @namespace MMXForge
// @description informa de la ultima conexion y otros detalles.
// @author Luca Saba - N-I-K-O
// @version 0.10
// @include http://s*.ikariam.*/*
// @exclude http://board.ikariam.*/*
// ==/UserScript==
/*
* This script comes from an idea of N-I-K-O.
* It merge in a unique script 2 other scripts
* IkariamMemberLastOnline (http://userscripts.org/scripts/show/34793) from Ektdeheba
* Ikariam Ally's Memebers Info (http://userscripts.org/scripts/show/34852) from Luca Saba... wich is me :D
*/
/*
* Changes in v. 0.9
* - Ikariam 2.8 compatibility
* - Removed Ally Sorter.... not needed anymore
*/
if(document.getElementById('embassy') == null && document.getElementById('alliance') == null) return;
var host = top.location.host.split(".");
var domain = host[host.length -1];
var server = host[0];
var tpl = GM_getValue('template', 0);
var membersTab = document.getElementById('memberList');
if(membersTab == null) return;
var update_record = false;
//var points_cell_idx = membersTab.rows[0].cells.length - 3;
var points_cell_idx = 4;
/*
* Words dictionary
*/
var lang={
en: {'newAlert': 'New Members', 'newTotal': 'Total new members', 'aband': 'Abandon', 'totAban': 'Total abandon', 'confirm': 'Are you sure you want to reset recorded points ?'},
it: {'newAlert': 'Nuovi membri', 'newTotal': 'Totale nuovi membri', 'aband': 'Abbandoni', 'totAban': 'Totale abbandoni', 'confirm': 'Sei sicuro di cancellare i punteggi salvati ?'},
co: {'newAlert': 'חברים חדשים', 'newTotal': 'סך הכל חברים חדשים', 'aband': 'עזבו', 'totAban': 'סך הכל עזבו', 'confirm': 'האם אתה בטוח שבירצונך לאפס?'}, //Thanks to MindTwister
il: {'newAlert': 'חברים חדשים', 'newTotal': 'סך הכל חברים חדשים', 'aband': 'עזבו', 'totAban': 'סך הכל עזבו', 'confirm': 'האם אתה בטוח שבירצונך לאפס?'}, //Thanks to MindTwister
}
var local = 'en'; //For i18n
//If domain id in the dictionary, use domain's dictionary
if(domain in lang) local = domain;
//Order by points... not needed anymore
//sortAlly();
//Last Recorded values... this method.. I've seen it in an ecmanaut script ;-)
var members = eval(GM_getValue(domain + "." + server + ".members.2.8", {}) || {});
var recorded_points = eval(GM_getValue(domain + "." + server + ".points.2.8", {}) || {});
//Add reset and config images
var confRow = document.createElement('TR');
var confCell = document.createElement('TD');
confCell.setAttribute('colspan', '6');
confCell.innerHTML = "<img style='float: left' src='http://isoleunite.mmxforge.net/images/stories/ikariam/unit_boom_small.gif' alt='Config' title='Config' id='ainfoConfig'>";
confCell.innerHTML += "<img style='float: right' src='http://isoleunite.mmxforge.net/images/stories/ikariam/icon-backx20.gif' alt='Reset' title='Reset' id='ainfoReset'>";
confRow.appendChild(confCell);
membersTab.appendChild(confRow);
//Listener to reset member's points record
document.addEventListener('click',function(event) {
//Send Message Button
if (event.target.id=='ainfoReset')
{
recorded_points = actualValues;
if(confirm(lang[local]['confirm']))
saveArray("points", recorded_points);
}
if (event.target.id=='ainfoConfig')
{
showToolConfig(event);
}
if ( event.target.id=='eToolConfButton')
{
if(document.getElementById('eToolCfImages').checked)
GM_setValue('template', 1);
else
GM_setValue('template', 0);
document.getElementById('eToolConfDiv').style.display = 'none';
}
}, true);
//addEventListener("keyup", showToolConfig, false);
function showToolConfig(e)
{
//if(e.keyCode != 51) return;
var div = document.getElementById('eToolConfDiv');
if(div) div.style.display = 'block';
else
{
div = document.createElement('div');
div.setAttribute('id', 'eToolConfDiv');
div.setAttribute('class', 'dynamic');
div.setAttribute('style', 'z-index: 10; border: 1px solid #CB9B6B; background-color: #FDF7DD; width: 229px; height: 150px; position: absolute; float: center;top: ' + e.pageY + 'px; left: ' + e.pageX +'px');
div.innerHTML = '<h3 class="header" style="padding-top: 8px; height: 20px; background-image: url(http://s3.ikariam.it/skin/layout/bg_sidebox_header.jpg)"><b>Config</b></h3>';
div.innerHTML += '<div style="margin-left: 80px; margin-top: 20px; text-align: left">';
if(tpl == 0) div.innerHTML += '<input id="eToolCfText" style="position: absolute;left: 60px;" type="radio" name="garba" value="0" checked > Text<br/>';
else div.innerHTML += '<input id="eToolCfText" style="position: absolute;left: 60px;" type="radio" name="garba" value="0"> Text<br/>';
if(tpl == 1) div.innerHTML += '<input id="eToolCfImages" style="position: absolute;left: 60px;" type="radio" name="garba" value="1" checked > Images</div>';
else div.innerHTML += '<input id="eToolCfImages" style="position: absolute;left: 60px;" type="radio" name="garba" value="1"> Images</div>';
//GM_log(div.innerHTML);
div.innerHTML += '<input id="eToolConfButton" type="button" class="button" value="Save">';
document.body.appendChild(div);
}
}
var actualValues = getActualData();
//Let's check for new entries
var msg = lang[local]['newAlert'] + "\n";
var sum = 0;
for(var k in members) GM_log(k);
for(var readed_name in actualValues)
{
//If an actual member name is not in the members list...
if(typeof(members[readed_name]) == 'undefined')
{
sum++;
msg += readed_name + "\n";
}
}
if(sum > 0) alert(msg + lang[local]['newTotal'] + ": " + sum);
//And now, let's check for those who left the ally!
var msg = lang[local]['aband'] + "\n";
sum = 0;
for(var member_name in members)
{
//If a member name is not in the actual member list...
if(typeof(actualValues[member_name]) == 'undefined')
{
sum++;
msg += member_name + "\n";
var trOut = document.createElement("TR");
trOut.style.backgroundColor = "#F00";
var tdOut = document.createElement("TD");
tdOut.setAttribute('colspan','7');
tdOut.style.color = "#FFF";
tdOut.innerHTML = "<b>" + member_name + "</b> Points: <b>" + members[member_name] + "</b>";
trOut.appendChild(tdOut);
membersTab.appendChild(trOut);
}
}
if(sum > 0) alert(msg + lang[local]['totAban'] + ": " + sum);
saveArray("members", actualValues);
/*
This function helps convert the Ikariam internal date format (day.month.year)
to the javascript Date Object format (year,month,day).
Original Author: Ektdeheba
For version: 0.1.1
Last changed: 0.1.2
*/
function convertIkariamDate( argDate ) {
var returnDate = new Date(
argDate.split(".")[2], // Year Argument
argDate.split(".")[1] - 1, // Month Argument (ZERO based), subtract one to offset
argDate.split(".")[0]); // Day Argument
return returnDate;
}
//Returns an Associative Array of the members's points
//While doing that, it sets the online/inactive/offline status
function getActualData()
{
var res = new Array();
var pName = '';
var pPoints = 0;
for(i=1; i < membersTab.rows.length - 1; i++)
{
setOnlineStatus(membersTab.rows[i]);
pName = membersTab.rows[i].cells[1].innerHTML;
pPoints = membersTab.rows[i].cells[points_cell_idx].innerHTML.replace(",", "") * 1; //Force variable type
res[pName] = pPoints;
//If this is the first insert for this member
if(typeof(recorded_points[pName]) === 'undefined')
{
membersTab.rows[i].cells[points_cell_idx].innerHTML += " (<font color='#F00'>New Entry</font>)";
recorded_points[pName] = pPoints;
update_record = true;
}
else
{
var prev = recorded_points[pName];
var act = res[pName];
membersTab.rows[i].cells[points_cell_idx].innerHTML += " (<font color='#F00'>" + (act - prev) + "</font>)";
}
}
if(update_record) saveArray("points", recorded_points);
return res;
}
//Saves an array to GM string
function saveArray(variable, values_array)
{
var str = '({';
for(var k in values_array) str += "'" + k + "':" + values_array[k] + ", ";
str += '})';
GM_setValue(domain + '.' + server + '.' + variable + ".2.8", str);
}
function setOnlineStatus(tRow)
{
if(tRow.cells[0].getAttribute('class') == 'online')
{
template('online', tRow, null);
}
else if(tRow.cells[0].getAttribute('class') == 'offline')
{
var nowDateStr = document.getElementById('servertime').innerHTML.split(" ")[0].replace(/^\s+|\s+$/g, '');
var nowDate = convertIkariamDate( nowDateStr );
var inactiveDate = new Date();
inactiveDate.setDate( nowDate.getDate() - 7 ); // accounts generally go inactive after seven days
var lastOnline = tRow.cells[0].title.split(":")[1].replace(/^\s+|\s+$/g, '');
var lastDate = convertIkariamDate( lastOnline );
if( lastDate < inactiveDate )
template('inactive', tRow, lastOnline);
else
template('offline', tRow, lastOnline);
}
}
function template(status, rowElement, lastOnline)
{
if(status == 'online')
{
switch(tpl)
{
case 1:
rowElement.cells[0].innerHTML="<div style='width: 8em'><span style='float: right'><img src='http://s200.photobucket.com/albums/aa94/ExtraKiller/On.png'></span></div>";
break;
default:
rowElement.cells[0].innerHTML="<B><font color='#008800'>ONLINE</FONT></B>";
break;
}
}
else if(status == 'inactive')
{
switch(tpl)
{
case 1:
rowElement.cells[0].innerHTML = "<div style='width: 8em'><span style='float: left'>("+lastOnline + ")</span><span style='float: right'><img src='http://www.ikariamods.com/gunmetal/cadmium/hardcode/crown.png'></span></div>";
break;
default:
rowElement.cells[0].innerHTML = "<B><font color='#708090' SIZE='1'>("+lastOnline + ")INACTIVE</FONT></B>";
break;
}
}
else if(status == 'offline')
{
switch(tpl)
{
case 1:
rowElement.cells[0].innerHTML = "<div style='width: 8em'><span style='float: left;'>("+lastOnline+")</span><span style='float: right'><img src='http://s200.photobucket.com/albums/aa94/ExtraKiller/Off.png'></span></div>";
break;
default:
rowElement.cells[0].innerHTML = "<font color='#F00' SIZE='1'>("+lastOnline+")OFFLINE</FONT>";
break;
}
}
rowElement.cells[0].style.backgroundImage = "none";
}
addIKOS_ToolsMenu();