SaveShopInfo

сохранить данные о ценах магазина в локальном хранилище

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name           SaveShopInfo
// @namespace      Virtonomica
// @description    сохранить данные о ценах магазина в локальном хранилище
// @version        1.08
// @include        https://*virtonomic*.*/*/main/unit/view/*/trading_hall
// ==/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 = "Ошибка добавления в локальное хранилище";
			//console.log(out);
		}
	}

	function getFromStorage(obj, id_shop){
		if (obj[id_shop] == null) return '';
		return JSON.stringify(obj[id_shop]);
	}

	function Save() {
		out = 'OK';
		//n = shop_time.length;

		var flag_save = false;

		var inp_sale = $("input[name*='productData[price]']");
		var td_sale = $("td:contains('$')");
		for (i=0; i<inp_sale.length; i++) {
			inp = inp_sale.eq(i);
			//td_pr = td_sale.eq(i*2);
			tr = inp.parent().parent();

			href = $("a[href*='by_trade_at_cities']", tr);
			if (href.attr('href') == null) continue;
			id_item = /(\d+)/.exec( href.attr('href') )[0];
			
			if (shop_price[id_shop] == null) shop_price[id_shop] = new Object();

			//console.log( "www " + td_pr.text() );

			shop_price[id_shop][ id_item ]  = inp.attr('value');

			if ( shop_transport[ id_shop ] == null ) shop_transport[id_shop] = new Object();
		
			td_pr = $("td", tr).eq(8);
			console.log("TD_PR = " + td_pr.text());
			shop_transport[id_shop][ id_item ] = parseFloat( td_pr.text().replace('$', '').replace(' ','').replace(' ','').replace(' ','') );
		}
		if (inp_sale.length>0) {
			ToStorage('shop_price', shop_price);
			ToStorage('shop_transport', shop_transport);
			flag_save = true;
		}
		// Видимо это не магазина
		if (flag_save == false) return false;

        	var td = $("td:contains('%')");
		for (i=0; i< td.length; i++) {
			td_pr = td.eq(i+1);
			tr = td_pr.parent();

			href = $("a[href*='by_trade_at_cities']", tr);
			if (href.attr('href') == null) continue;
			id_item = /(\d+)/.exec( href.attr('href') )[0];
			//console.log(id_item);

			if (market[ id_shop ] == null) market[ id_shop ] = new Object();

			market[ id_shop ][ id_item ] = parseFloat( td_pr.text().replace('%', '') );
		}
		if (td.length > 0) {
			ToStorage('market', market);
			flag_save = true;
		}
		shop_time[ id_shop ] =  today ;
		//console.log(flag_save);

		ToStorage('shop_time', shop_time);

		$("#jsinfo").html("save: " + out );
		return true;
	}

	function View() {
		out = "LocalStorage:<br>";

		// выводим все что было в локальном хранилище по данному магазину
		out += "market = " + getFromStorage(market, id_shop) + "<br>";
		out += "shop_price = " + getFromStorage(shop_price, id_shop) + "<br>";
		out += "shop_transport =" + getFromStorage(shop_transport, id_shop) + "<br>";
		out += "shop_time =" + getFromStorage(shop_time, id_shop) ;

		$("#jsinfo").html( out );
	}

	function Clear() {
		out = "LocalStorage clear";
		// выводим все что было в локальном хранилище
		for (i=0; i<localStorage.length; i++) {
			localStorage.removeItem( localStorage[i] );
		}
		$("#jsinfo").html( out );
	}

	// Идентификатор подразделения
	var id_shop = /(\d+)/.exec(location.href)[0];

	// Время обнолвения данных о ценах
	shop_time = JSON.parse( window.localStorage.getItem('shop_time') );
	if (shop_time == null) shop_time = new Object();

	var d = new Date();
	today = d.getFullYear() + "." + d.getMonth() + "." +  d.getDate();

	// Объем рынка
	market = JSON.parse( window.localStorage.getItem('market') );
	if (market == null) market = new Object();

	// Цена продажи
	shop_price = JSON.parse( window.localStorage.getItem('shop_price') );
	if (shop_price == null) shop_price =new Object();

	// Цена в магазине
	shop_transport = JSON.parse( window.localStorage.getItem('shop_transport') );
	if ( shop_transport == null ) shop_transport = new Object();

	//console.log("End main");
	rc = Save();	
	// Если это не магазин, то и кнопки нам не нужны
	// а если и магазин без товара, то кнопки тоже не нужны
	if (rc == false) return;

	// кнопки
	 var save = $('<button id=bsave>save</button>').click(function() {
		Save();
	});
	 var view = $('<button id=bview>view</button>').click(function() {
		View();
	});
	 var clear = $('<button id=bview>clear local storage</button>').click(function() {
		Clear();
	});
	var out = '<td><span id=jsinfo style="color:yellow"></span>';
	var container = $('#topblock');
	container.append( $('<table><tr><td>').append("<font color=white>LocalStorage: </font>").append(save) .append('<td>').append(view) .append('<td>')/*.append(clear)*/.append(out) );

	Save();	
	//alert("end");
}

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