Greasy Fork is available in English.

Virtomomica: IC

Индикативные цены - парсинг и отображение

اعتبارا من 06-06-2018. شاهد أحدث إصدار.

// ==UserScript==
// @name        Virtomomica: IC
// @namespace   virtonomica
// @description Индикативные цены - парсинг и отображение
// @include     http*://virtonomica.ru/*/main/geo/countrydutylist/*
// @include     http*://virtonomica.ru/*/main/geo/regionlist/*
// @include     http*://virtonomica.ru/*/main/unit/view/*/sale*
// @version     1.0
// @author      Adapted by UnclWish
// ==/UserScript==
var run = function() {
	var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
	var $ = win.$;
	//---------------------------------------------------------------------
	// работа с локальным хранилищем
	//---------------------------------------------------------------------
	/**
	* записать данные в локальнео хранилище, с проверкой ошибок
	*/
	function ToStorage(name, val)
	{
	    try {
	       window.localStorage.setItem(name, JSON.stringify(val));
	    } catch(e) {
	       var out = "Ошибка добавления в локальное хранилище";
	       console.log(out);
	    }
	}

	//---------------------------------------------------------------------
	// end of работа с локальным хранилищем
	//---------------------------------------------------------------------
	var wc_info = $("<div id=p_info></div>");
	var ic_info = $("<div id=ic_info></div>");

	// Проверим ссылку что это игровое поле
	var href = location.href;
	var realm = href.replace('https://virtonomica.ru/','');
	realm = realm.substr(0,4);
	var tm_info_link = `https://virtonomica.ru/${realm}/window/globalreport/tm/info`;
	var ic_info_link = `https://virtonomica.ru/api/${realm}/main/geo/country/duty?app=adapter_vrt&format=html&country_id=423475&sort=category_name%2Fasc%2Cproduct_name%2Fasc&tpl=geo%2Fcountry%2Fduty`;

	//console.log( href );
	/*if (href.indexOf('countrydutylist') > 0) {
		//console.log('parsing....');
		var wc_parsing = $("<li><div id=parsing style='float:left;cursor:pointer; color: white;'> <img title='Запомнить ИЦ' alt='Запомнить ИЦ' src='http://www.iconsearch.ru/uploads/icons/snowish/32x32/document-save-as.png'> </div>");

		//var container = $('#topblock').next();
        var container = $('li.la').parent();
		//container = $("li:last", container).prev().parent();
        container.append( wc_parsing ) ;

		$("table.list").before( wc_info );

		$("#parsing").click( function() {
			var ic_array = new Object();

			var table = $("table.list");
			//console.log('table = ' + table.length);
			var tr = $("tr.odd, tr.even", table);
			//console.log('tr = ' + tr.length);
			for (var i=0; i<tr.length; i++){
				var td = $("td > img", tr.eq(i) );
				//console.log('td = ' + td.length);
				for(var j=0; j< td.length; j++){
					var src = td.eq(j).attr('src');
					//console.log( src );
					var name = td.eq(j).parent().next().text();
					//alert (name);
                    //console.log( name );
					var ic = td.eq(j).parent().next().next().next().next().text();
					ic = parseFloat( ic.replace('$', '').replace(' ', '').replace(' ', '').replace(' ', '') );
					//console.log( ic );
					ic_array[ src ] = new Object();
					ic_array[ src ].name = name;
					ic_array[ src ].ic = ic;
				}

			}

			//console.log( JSON.stringify( ic_array ) );
			ToStorage('ic_array', ic_array );
			$("#p_info").html("Запомнили значения ИЦ").css('color', 'green');

		});
	}*/

	function getICArray() {
		var ic_array = new Object();
		$.ajax({
		url: ic_info_link,
		async: false, //то самое плохое место с синхронными запросами. Зато работает без дополнительных проверок. Но лучше избегать, конечно.
		success: function(data){
			var table = $('.table', data);
			//console.log('table = ' + table.length);
			//alert ('table = ' + table.length);
			var tr = $("td", table);
			//console.log('tr = ' + tr.length);
			for (var i=1; i<tr.length; i+=5){
				var th = $(tr.eq(i));
				var td = $(tr.eq(i+3));
				//var img = $("a", tr.eq(i) );
				//var src = img.attr('href');
				//for(var j=0; j< td.length; j++){
					//var code = src.replace('https://virtonomica.ru/'+realm+'/main/product/info/','');
					var name = th.text();
					var ic = td.text();
					ic = parseFloat(ic.replace('$', '').replace(' ', '').replace(' ', '').replace(' ', ''));
					ic_array[name] = new Object();
					//ic_array[code] = new Object();
					ic_array[name].name = name;
					//ic_array[code].code = code;
					ic_array[name].ic = ic;
					//ic_array[code].vals = ic;
				//}
			}
			ToStorage('ic_array', ic_array);
		},
		//ajaxError:
		//$("#v_info").append("<br>" + np + " - нет данных по объемам хранения. Если товар не ТМ, сохраните данные на странице по <a href=https://virtonomica.ru/"+realm+"/main/industry/unit_type/info/2011/volume>ссылке</a>").css('color', 'red')
		});
	}

	function getArrayTM() {
		var arrayTM = new Object();
		$.ajax({
		url: tm_info_link,
		async: false, //то самое плохое место с синхронными запросами. Зато работает без дополнительных проверок. Но лучше избегать, конечно.
		success: function(data){
	  		var tmimg_data = $("td>img[src*='/img/products']",data);
			//console.log (tmimg_data);
			//var tm_data = $("td>img[src*='/img/products']",data).parent().next();
			for (var i=0; i<tmimg_data.length; i++) {
				var tm_data = tmimg_data.eq(i).parent().next();
				var code = tmimg_data.eq(i).attr('src');
				//console.log(code);
				var tm_name = tm_data.text();
				tm_name = tm_name.split('\n');
				tm_name = tm_name[2].trim();
				//np = tm_name;
				var name = tm_name;
				//console.log(name);
				arrayTM[name] = new Object();
				arrayTM[code] = new Object();
				arrayTM[name].name = name;
				arrayTM[name].code = code;
				arrayTM[code].name = name;
				}
			ToStorage('arrayTM', arrayTM );
		},
		//ajaxError:
		//$("#v_info").append("<br>" + np + " - нет данных по объемам хранения. Если товар не ТМ, сохраните данные на странице по <a href=https://virtonomica.ru/"+realm+"/main/industry/unit_type/info/2011/volume>ссылке</a>").css('color', 'red')
		});
	}

	function UpdateICStorage() {
		// удаляем данные по объемам хранения и обновляем страницу
		window.localStorage.removeItem('ic_array');
		getICArray();
		location.reload();
	}

	//console.log('start IC');

	var UpdateIC = $('<button id=bsave>Обновить</button>').unbind('click').click(function() {
		UpdateICStorage();
	});

	$("table.grid").before(wc_info);

	$("#p_info").html("Вы можете обновить значения объемов хренения, если они изменились ").css('color', 'blue').append(UpdateIC);

	//  Все остальные страницы
	var ic_array = JSON.parse(window.localStorage.getItem('ic_array'));
	if (ic_array == null ) {
		getICArray();
		ic_array = JSON.parse(window.localStorage.getItem('ic_array'));
	}
	var arrayTM = JSON.parse(window.localStorage.getItem('arrayTM'));
	if (arrayTM == null ) {
		getArrayTM();
		arrayTM = JSON.parse(window.localStorage.getItem('arrayTM'));
	}

	//console.log(arrayTM);
	//console.log(ic_array['Молоко'].ic);


		//$("#p_info").html("Не удалось получить значения ИЦ из локального хранилища").css('color', 'red');
	//} else{
		//$("#p_info").html( JSON.stringify( ic_array ) );
	//}

	// сбыт
	if (href.indexOf('sale') > 0) {

		var table = $("table.grid");

		var tr = $("tr.odd, tr.even", table);
		//console.log('tr = ' + tr.length);
		for (var i=0; i<tr.length; i++){
			var td = $("td > a > img", tr.eq(i));
			//console.log (td.length);
            switch (td.length) {
                case 3: td = td.eq(2); break;
                case 2: td = td.eq(1); break;
                default: td = td.eq(0); break;
                }
            //if ( td.length == 2) td = td.eq(1);
			//else td = td.eq(0);

			//console.log("td= " + td.parent().html() );
			var src = td.attr('src');
			var name = td.attr('alt');
			//console.log(name);
            //Брендовые товары
            /*switch (src) {
                case "/img/products/vera/brand/lambardy.gif": src = "/img/products/showercubicle.gif"; break;
                case "/img/products/brand/krakow.gif": src = "/img/products/sausages.gif"; break;
                case "/img/products/vera/brand/abibas.gif": src = "/img/products/shoes.gif"; break;
                case "/img/products/vera/brand/v-times.gif": src = "/img/products/press.gif"; break;
                case "/img/products/vera/brand/0909/pbp.gif": src = "/img/products/instant.gif"; break;
                case "/img/products/vera/brand/vaz2106.gif": src = "/img/products/car.gif"; break;
                case "/img/products/brand/car_sedan_fr1.gif": src = "/img/products/car_sedan.gif"; break;
                case "/img/products/vera/brand/1466876.gif": src = "/img/products/car.gif"; break;
                case "/img/products/vera/brand/1916457.gif": src = "/img/products/sweet.gif"; break;
            }*/
            //console.log (src);
			//console.log(JSON.stringify(ic_array));
			if (ic_array[name] == null) {
				if (arrayTM[name] == null) {
					getICArray();
					ic_array = JSON.parse(window.localStorage.getItem('ic_array'));
					if (ic_array[name] == null) {
						getArrayTM();
						arrayTM = JSON.parse(window.localStorage.getItem('arrayTM'));
						name = arrayTM[src].name;
					}
				}
				else name = arrayTM[src].name;
				//$("#p_info").append("<br>" + td.attr('alt') + " - нет данных по ИЦ").css('color', 'red');
				//continue;
			}
			var inp = $("input[name^='storageData']", tr.eq(i));
			if (inp.length == 3) inp = inp.eq(1);

			//console.log("inp = " + inp.length);
			inp.before( "ИЦ: " + ic_array[name].ic + "$<br>" );
			//td.parent().next().next().next().next().next().before( "ИЦ: " + ic_array[src]['ic'] + "$<br>" );
		}
	}

	//console.log('end IC');
};
if(window.top == window) {
    var script = document.createElement("script");
    script.textContent = '(' + run.toString() + ')();';
    document.documentElement.appendChild(script);
}