Virtonomica:DinamicSalary 2

Позволяет помечать города из списка

// ==UserScript==
// @name           Virtonomica:DinamicSalary 2
// @namespace      Virtonomica
// @description     Позволяет помечать города из списка
// @description     Клик по названию города помечает его зачеркиванием
// @description     Повторный клик снимает зачеркивание
// @version        1.92
// @include        https://*virtonomic*.*/*main/common/main_page/game_info/salary
// @include    	   https://virtonomic*.*/*/main/company/view/*/unit_list
// @include    	   https://virtonomic*.*/*/main/company/view/*/unit_list/employee
// ==/UserScript==

var run = function() {

    var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
    $ = win.$;

	/**
    * записать данные в локальнео хранилище, с проверкой ошибок
    */
	function ToStorage(name,  val)
	{
        try {
            window.localStorage.setItem( name,  JSON.stringify( val ) );
		} catch(e) {
         out = "Ошибка добавления в локальное хранилище";
		}
	}

	var demograhics = JSON.parse( window.localStorage.getItem('demograhics') );
	if (demograhics == null) {
		demograhics = new Object();
	}
	
	// Проверим ссылку что это список юнитов
	var href = location.href;
	n = href.lastIndexOf("/");
	end = href.substr(n+1, href.length) ;
	if ( end == "unit_list" ) {
		var table = $("table.unit-list-2014");
		var el = $("td.geo", table);
		for( i=0; i<el.length; i++){
			var name = $.trim( el.eq(i).text() );
			if (demograhics[name] == null) continue;
			//console.log(name);
			//console.log( demograhics[name] );
			
			var add = "";
			if ( demograhics[name]['price'] != null) {
				add+= "<font color=";
				if (parseFloat(demograhics[name]['price']) < 0) {
					add+= "red";
				} else {
					add+= "green";
				}
				add+= ">";
				add+= "$" + demograhics[name]['price'];
				add+= "</font>";
			}
			if ( demograhics[name]['obr'] != null) {
				add+= "<font color= ";
				if (parseFloat(demograhics[name]['obr']) < 0) {
					add+= "red";
				} else {
					add+= "green";
				}
				add+= ">";
				add+= " Об." + demograhics[name]['obr'];
				add+= "</font>";
			}
			if (add != "") {
				el.eq(i).append( "<br><small>(" + add + ")</small>");
			}
		}	
		return;
	} 
		n = href.lastIndexOf("employee");
		console.log("employee 0");
		// Управление - персонал
		if (n > -1) {
			console.log("employee");
			var table = $("table.list");
			var el = $("td.u-a", table);
			console.log(el.length);
			for( i=0; i<el.length; i++){
				var name = $.trim( $("b", el.eq(i)).text() );
				if (demograhics[name] == null) continue;
				//console.log(name);
				//console.log( demograhics[name] );
			
			var add = "";
			if ( demograhics[name]['price'] != null) {
				add+= "<font color=";
				if (parseFloat(demograhics[name]['price']) < 0) {
					add+= "red";
				} else {
					add+= "green";
				}
				add+= ">";
				add+= "$" + demograhics[name]['price'];
				add+= "</font>";
			}
			if ( demograhics[name]['obr'] != null) {
				add+= "<font color= ";
				if (parseFloat(demograhics[name]['obr']) < 0) {
					add+= "red";
				} else {
					add+= "green";
				}
				add+= ">";
				add+= " Об." + demograhics[name]['obr'];
				add+= "</font>";
			}
			if (add != "") {
				el.eq(i).append( "<small>(" + add + ")</small>");
			}
			
		}	
		return;
			
		}

	
    //console.log('start');
    var table = $("table.list");
    var tr = $("tr", table);
    for(i=1; i<tr.length; i++) {
		td = $("td", tr.eq(i) ).eq(0);
		if (td.length== 0) continue;

		img = $('img', td);
		if (img.length != 1) continue;

		img.click( function() {
			el = $(this).parent().parent();
			var decor = el.css("text-decoration");
			//console.log(decor);
			var new_decor = "none";
			var new_color = "black";
			if (decor != 'line-through'){
				new_decor = "line-through";
				new_color = "grey";
			}	
			el.css("text-decoration", new_decor);
			el.css("color", new_color);
		});
	
		var name = $.trim( img.next().html() );
		//console.log(name);
		
		td = $("td", tr.eq(i) ).eq(5);
		price = $.trim( td.text() );
		if ( price != "") {
			price = price.replace('$','');
			price = price.replace('+','');
			//console.log( price );ar
			if ( demograhics[ name ] == null ) {
				demograhics[ name ] = new Object();
			} 
			demograhics[ name ]['price'] = price;
		}
		
		td = $("td", tr.eq(i) ).eq(7);
		ur_obr = $.trim( td.text() );
		if ( ur_obr != "") {
			ur_obr = ur_obr.replace('+','');
			//console.log( ur_obr );
			if ( demograhics[ name ] == null ) {
				demograhics[ name ] = new Object();
			} 
			demograhics[ name ]['obr'] = ur_obr;
		}
    }	
    //console.log( demograhics );
	ToStorage("demograhics", demograhics);

    table.before("<p>Клик мышкой по флажку слева от города делает строчку зачеркнутой.<br>Повторный клик снимает зачеркнутость.<div id=dm_out></div>");
	
	var save = $('<div id=dm_save style="float:left;cursor:pointer;">SAVE</div>');
	var clear = $('<div id=dm_save style="float:right;cursor:pointer;">CLEAR</div>');
	
	table.before(save).before(clear);

	save.click(function(){
		console.log( demograhics );
		ToStorage("demograhics", demograhics);
		$("#dm_out").html("данные сохранены").css('color', 'green');
	});
	
	clear.click(function(){
		demograhics = null;
		ToStorage("demograhics", demograhics);
		$("#dm_out").html("данные сброшены").css('color', 'red');
	});
	
}


// Хак, что бы получить полноценный доступ к DOM >:]
if(window.top == window) {
    var script = document.createElement("script");
    script.textContent = '(' + run.toString() + ')();';
    document.documentElement.appendChild(script);
}