Ikariam Spy Report Archive

By Makomedia Last update Jun 17, 2009 — Installed 6,339 times.

There are 10 previous versions of this script.

// ==UserScript==
// @name           Ikariam Spy Report Archive
// @namespace      Ikariam Spy Report Archive
// @author         Makomedia (http://userscripts.org/users/78455)
// @description    This script saves spy reports and stores them in an archive. Be aware that this script is not approved, because it mimics a Ikariam Plus feature. Use is on own risk.
// @version        1.27
// @include        http://s*.ikariam.*/*?view=safehouse*
// @require        http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js
// @require        http://ikariamscriptresources.googlecode.com/files/IkariamLanguageDetection.js
// ==/UserScript==

// Spy Report Keeper: version 1.0.0, http://www.no-net.org/miasma/ikariam/SpyReportKeeper.user.js
// 2009-05-05
// Copyright (c) 2009, www.entula.net by miasM
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
// Great thanks to Miasma, by coding the hard bits.
//
// Spy Report Archive: version 1.1.1
// 2009-06-12
// Copyright (c) 2009, Makomedia
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// Version History:
// 0.10: Original Public Release
// 0.20: First code rewrite.
// 0.30: some bug fix
// 1.00: Added display function
//		  Set refresh when data has been deleted
// 1.10: Feature: Added date from spy report to strings 
// 1.11: Overall cleaning of code
//		  Feature: Visual markup
// 1.21: Feature: Adding International Language support, thanks to MartynT0
//		  Feature: Adding config div, for viewing language, and in future updates of script.
// 1.22: Language: Added Spanish
//		  Language: Added French
//		  Bugfix: Resources misspelling
// 1.23: Language: Added German
// 1.24: Language: Added Turkish
//		  Bugfix: 2 Tooltips beginning with same character
// 1.25: Feature: Get version number from userscript.org for updating
// 1.26: Bugfix: Change versionnumber format to support update function
// 1.27: Language: Added Portugese
//		 other icon for config when oud-of-date
var version = "1.27"

/*
*getLanguage() is in IkariamLanguageDetection.js
*
* ltr: Is the language written left to right?
* SRA: Spy Report Archive
* Troops: First character of tooltip when hovering over a spy garrison link in spy reports
* Resources: First character of tooltip when hovering over a spy warehouse link in spy reports
* DelArch: Delete the whole spy report archive!
* DelSpy: Delete this spy report
* Language: Translation of 'language'
* loclang: Local name for this language
* confirmdel: Are you sure to delete the archive?
*/

//default: 	"engl name lang":	{ltr: true, SRA:"", Troops:"", Resources:"", DelArch:"", DelSpy:"", language:"", loclang:"", confirmdel:""}
const language = {
	"arabic":       { },
    "bulgarian":    { },
    "chinese":      { },
    "czech":        { },
    "danish":       { },
    "dutch":        {	ltr: true,	SRA:"Spionage Rapport Archief",	Troops:"T",	Resources:"Gr",	DelArch:"Verwijder gehele Archief!",	DelSpy:"Verwijder dit spion rapport", 	language:"Taal",		loclang:"Nederlands",	confirmdel:"Weet je zeker dat je het spionage archief wilt verwijderen?"},
    "english":      {	ltr: true,	SRA:"Spy Report Archive",		Troops:"",	Resources:"",	DelArch:"Delete spy report Archive!",	DelSpy:"Delete this spy report", 		language:"Language",	loclang:"English",		confirmdel:"Are you sure to delete the spy archive?"},
    "finish":       { },
    "french":       {	ltr: true, 	SRA:"Rapports d'espions",		Troops:"T", Resources:"Ma", DelArch:"Effacer les archives!", 		DelSpy:"Effacer ce rapport", 			language:"Langue", 		loclang:"Francais", 	confirmdel:"Etes vous sur de vouloir effacer les archives ?"},
    "german":       {	ltr: true, 	SRA:"Spionageberichte Archiv", 	Troops:"T", Resources:"Ro", DelArch:"Gesamtes Archiv löschen", 		DelSpy:"Spionagebericht löschen", 		language:"Sprache", 	loclang:"Deutsch", 		confirmdel:"Sind Sie sicher, dass sie das gesamte Archiv löschen wollen?"},
    "greek":        { },
    "hebrew":       { },
    "hungarian":    { },
    "italian":      {	ltr: true,	SRA:"",							Troops:"T",	Resources:"Ri",	DelArch:"",								DelSpy:"", 								language:"",			loclang:"",				confirmdel:""},
    "norwegian":    { },
    "korean":       { },
    "latvian":      { },
    "lithuanian":   { },
    "pinoy":        { },
    "polish":       { },
    "portugese":    {	ltr: true, 	SRA:"Arquivo de Relatórios de Espionagem", Troops:"Tr", Resources:"Re", DelArch:"Apagar o Arquivo de Relatórios", DelSpy:"Apagar este relatório", language:"Idioma", loclang:"Português brasileiro", confirmdel:"Tem certeza que deseja apagar o Arquivo de Relatórios?"},
    "romanian":     { },
    "russian":      { },
    "serbian":      { },
    "slovak":       { },
    "slovene":      { },
    "spanish":      {	ltr: true,	SRA:"Archivo De Reportes de Espías", Troops:"Tr", Resources:"Ma", DelArch:"Borrar el archivo de reportes", DelSpy:"Borrar este reporte", 	language:"idioma", 		loclang:"Español", 		confirmdel:"¿Estás seguro de borrar el archivo de reportes?"},
    "swedish":      { },
    "turkish":      {	ltr: true,	SRA:"Casusluk Raporlari Arsivi",	 Troops:"As", Resources:"Ka", DelArch:"Casusluk raporlari arsivini sil", DelSpy:"Bu raporu sil",			language:"Dil", 		loclang:"Turkish",		confirmdel:"Casusluk raporlari arsivini silmek istediginize emin misiniz?"},
    "ukranian":     { },
    "urdu":         { },
    "vietnamese":   { }
}[getLanguage()];

const left	= language.ltr?'left':'right';
const right	= language.ltr?'right':'left';

//Check if the needed translation of the spy reports is available in this language
if (language.Troops.length==0 || language.Resources.length==0){
	alert('Spy Report Archive:\nYour ingame language: ' + getLanguage() + ', is not yet supported.\nGo to http://userscripts.org/topics/28811 to help me with translation!');
	}

//Scriptdetails
var id = 51465;
var usurl = "http://userscripts.org/scripts/show/" + id;
//Is there an update?
function Update (){
	//Getting userscript page
	GM_xmlhttpRequest ({
		method: 'GET',
		url: usurl,
		headers: {
					'User-agent': 'Mozilla/5.0 (compatible) Greasemonkey',
					'Accept': 'text/html',
				 },
		onload: function(responseDetails) {
			var userScripts = document.implementation.createDocument ('', '', null);
			var html = document.createElement ('html');
			html.innerHTML = responseDetails.responseText;
			userScripts.appendChild (html);
			
			//Obtain version number
			var versionNew = userScripts.getElementById ('summary').getElementsByTagName ('b')[1].nextSibling.textContent;
			if( Number(versionNew) != Number(version)){
			document.getElementById('version').innerHTML='There is a new version of this <a href="' + usurl + '" target="_blank">script</a> ('+ versionNew+')<br><a href= "http://userscripts.org/scripts/source/' + id + '.user.js" target="_self">Install latest version!</a>';
			var upimg = document.getElementById('config').getElementsByTagName('img');
			upimg[0].setAttribute('src','http://www.iconfinder.net/data/icons/tango/32x32/status/software-update-available.png');
			}else{
			document.getElementById('version').innerHTML='This scriptversion is the latest.';
			}
		}
	});
}
Update ();

/*
This function lets us access an element by it's class name
Original Author: wphilipw
Edited: ImmortalNights
*/

document.getElementsByClass = function(className) {
    var all = document.getElementsByTagName('*');
    var elements = new Array();
    for (var e = 0; e < all.length; e++) { //
        var searchRegExp = new RegExp(className);
        var htmlObject = all[e].className;
        if (searchRegExp.exec(htmlObject) != null)
          elements[elements.length] = all[e];
    }
    return elements;
}

/*
Delete strings from file
*/
unsafeWindow.cleandata = function(str){
	if(str != null){
		GM_deleteValue(str);
		showReport();
	}else{
		if (confirm(language.confirmdel)){
		saves = GM_listValues();
			for (var d = 0; d < saves.length; d++){
				GM_deleteValue(saves[d]);
				showReport();
			}
		}else{return;}
	}
}


function getIdentifier(objectClass) {
    var logType = objectClass.substr(8, 4)
    return logType;
}

function getLimit(logLength) {
    var processMaximum = 30;
    if (processMaximum != 0) {
        return (logLength > processMaximum ? processMaximum : logLength);
    }
    return logLength;
}

/*
This function runs when the system starts, also does the main funtions of the script
Author: miasM
*/
function WriteFile(str,data)
{
	saves = GM_listValues();
	Saved=false;
	for (var d = 0; d < saves.length; d++){
		if(str==saves[d]){ Saved=true; break;}
	}
	if(!Saved){
		GM_setValue(str, data); // Write the string to a file
	}
	
	//TODO: Sort reports on city name
	//1. Cut strings from file, and paste into arrays
	//2. Swap str and data
	/*
	for( var i =0; i < arr.length; i++)
	{
	var p = arr[i];
	arr[i] = [ p[1], p[0] ];
	}
	*/
	//3. Sort strings on data(cityname)
	//4. Swap back
	//5. Write back into file
}

function showReport(){
	window.location.reload();
}
// TODO: getting archive between buildingupgrade and unitconstructionlist
function whereToShow() {
	if (document.getElementById('information')!=null &&
		document.getElementById('island')==null) return 'information';
	if (document.getElementById('buildingUpgrade')!=null) return 'buildingUpgrade';
	if (document.getElementById('infocontainer')!=null) return 'infocontainer';
	if (document.getElementById('backTo')!=null) return 'backTo';
	if (document.getElementById('viewMilitaryImperium')!=null) return 'viewMilitaryImperium';
	if (document.getElementById('viewDiplomacyImperium')!=null) return 'viewDiplomacyImperium';
	if (document.getElementById('viewResearchImperium')!=null) return 'viewResearchImperium';
	if (document.getElementById('viewCityImperium')!=null) return 'viewCityImperium';
	return null;
}

//open config div
unsafeWindow.divChange = function divChange() {
document.getElementById('lang').style.visibility="visible";
document.getElementById('SpyReportArchiveContent').style.opacity="0.4";
}
unsafeWindow.divChangeBack = function divChangeBack() {
document.getElementById('lang').style.visibility="hidden";
document.getElementById('SpyReportArchiveContent').style.opacity="1.0";
}

//Defining css style

//Read reports
function init() {
    var logs = document.getElementsByClass("subject");
	var datam = document.getElementsByClass("date");
	var title = new Array();
    for (var m = 0; m < logs.length;m ++) {
		var pip2 = logs[m].innerHTML.substr(logs[m].innerHTML.lastIndexOf("=")+1);
		var spyMsgID = pip2.slice(0,pip2.lastIndexOf("\""));
		//
		var pip4 = logs[m].innerHTML.indexOf("=");
        var pip3 = logs[m].innerHTML.substr(pip4+2);
		//
		if((pip3.slice(0,language.Troops.length)==language.Troops)||(pip3.slice(0,2)==language.Resources)){
		pip3 = pip3.slice(0,pip3.indexOf("\""));
		pip6 = pip3.substr(pip3.indexOf(" "),pip3.length);
		//alert(pip3.indexOf(" ")+" - "+pip3.length+" - "+pip6);
		var pip7 = datam[m].innerHTML.lastIndexOf(":");
		var date = datam[m].innerHTML.substr(0,5)+datam[m].innerHTML.substr(10,pip7-10);
		//alert(date)
		WriteFile(spyMsgID,"<b>"+pip6+"</b>, "+date+":<br>"+logs[m].innerHTML);
		}
    }
	var baseElements = '<h3 class="header" style="padding-left:8px;"><img src="http://www.iconfinder.net/data/icons/Futurosoft%20Icons%200.5.2/22x22/filesystems/folder_home.png" width="22px" height="22px" align="left">' + language.SRA + '</h3><div id="lang" style="font-size:8pt;visibility:hidden;width:150px;position:absolute;top:230px;left:32px;background-color:#C27000;padding:2px 4px 8px;z-index:2"><div style="display:block;text-align:middle;color:#FFFFFF;font-weight:bold;">' + language.SRA + '</div><div style="display:block;text-align:left;color:#FFFFFF;font-size:8pt;">Author: <a href="http://userscripts.org/users/78455" TARGET="_blank">Makomedia</a> (original <a href="http://userscripts.org/scripts/show/49799" TARGET="_blank">script</a> by <a href="http://userscripts.org/users/91536" TARGET="_blank">Miasma</a>)</div><div style="display:block;text-align:left;color:#FFFFFF;">' + language.language + ': ' + language.loclang + '</div><div style="display:block;text-align:left;color:#FFFFFF;">Your version: ' + version + '</div><div id="version" style="display:block;text-align:left;color:#FFFFFF;"></div><a href="javascript:void(0)" onClick="divChangeBack()"><img src="http://www.iconfinder.net/data/icons/oxygen/16x16/actions/edit-delete.png"></a></div>';
    baseElements += '<div id="SpyReportArchiveContent" class="content" style="font-size:8pt;padding: 0px 6px 0px;z-index:1;"></div>';
    baseElements += '<div class="footer"></div>';

	//need a new div above unitconstructionlist
	if(document.getElementById('SpyReportArchive') == null) {
    var divContainer = document.createElement('div');
    divContainer.setAttribute('id','SpyReportArchive');
	//divContainer.setAttribute('class','dynamic');
	divContainer.innerHTML = baseElements;
	x = document.getElementById(whereToShow());
	x.appendChild(divContainer);
	}

	var foot = document.getElementById("SpyReportArchiveContent");
	//ids.SpyReportKeeperContent.a.display="none";
	//ids.SpyReportKeeperContent.tags.a.fontSize="8pt";
	//ids.SpyReportKeeperContent.tags.a.fontStyle="normal";
	//ids.SpyReportKeeperContent.tags.a.text-align="left";
	
	//Reading out strings, putting in HTML
	var saves = GM_listValues();
	var pip;
	pip="";
		for (var d = 0; d < saves.length; d++){
			pip +="<div id='SpyReport' style='display:block;text-align:left;'>"+GM_getValue(saves[d])+"<a href='javascript:void(0)' title=" + language.DelSpy + " onClick='cleandata("+saves[d]+")'><img src='http://www.iconfinder.net/data/icons/oxygen/16x16/actions/edit-delete.png' height='12px' width='12px' style='display: inline;vertical-align:middle' /></a></div>";
		}
		pip +="<div id='SpyReportClean' style='display:block;position:relative;top:5px;'><a href='javascript:void(0)' title=" + language.DelArch + " onClick='cleandata()'><img src='http://www.iconfinder.net/data/icons/tango/16x16/actions/edit-clear.png' align='left'></a></div><div id='config' style='display: block;position:relative;left:80px;top:0px;'><a href='javascript:void(0)' onClick='divChange()'><img src='http://www.iconfinder.net/data/icons/oxygen/22x22/actions/fileview-detailed.png' style='display: inline;' height='22px' width='22px' /></a></div>";
		pip +="";
	foot.innerHTML=pip;
	//ids.SpyReportKeeperContent.tags.a.color="blue";
}

//Start the Script
init();