LNK_lotHistory

ведет историю выставленных лотов, показывает ее на странице выставления лота. также можно добавить лоты из протокола передач

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         LNK_lotHistory
// @namespace    LNK
// @version      1.3
// @description  ведет историю выставленных лотов, показывает ее на странице выставления лота. также можно добавить лоты из протокола передач
// @include      *heroeswm.ru/auction_new_lot.php*
// @include      *heroeswm.ru/auction_accept_new_lot.php*
// @include      *heroeswm.ru/pl_transfers.php?id=*
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_deleteValue
// ==/UserScript==

(function() {
    'use strict';

function getValue(varName, defaultValue) {
	if (defaultValue == undefined) { defaultValue = ''; }
	return GM_getValue(varName, defaultValue);
} // getValue

function setValue(varName, theValue) {
	GM_setValue(varName, theValue);
} // setValue

function deleteValue(valueToDel) {
	GM_deleteValue(valueToDel);
} // deleteValue

function getPage(aURL) {
	var xhr = new XMLHttpRequest();
	xhr.open('GET', aURL, false);
	xhr.overrideMimeType('text/html; charset=windows-1251');
	xhr.send();
	if (xhr.status != 200) {
		return ( 'Ошибка ' + xhr.status + ': ' + xhr.statusText );
	} else {
		return ( xhr.responseText );
	}
} // getPage

function getNewLot() { //https://www.heroeswm.ru/auction_accept_new_lot.php?msg_type=1&new_lot_id=118155890&pl_id=5558048&sign=96c52af4ebaa8c7e334dec6b9b7fb1ff
    var paramsS = location.search;
    var paramsV = new URLSearchParams(paramsS);
    var id = parseInt(paramsV.get("new_lot_id"));
    if (id) { return id;}
    else { alert('Не могу определить номер лота(. Обратиттесь к автору скрипта'); return false; }
} // getNewLot

function getLotName(lotNum) {
	var curLot = getPage('/auction_lot_protocol.php?' + lotNum);
	var n = curLot.indexOf('лот #');
	if (n < 0) {return false;}
	curLot = curLot.substr(n+5);
	curLot = curLot.replace(/\s*\<.*?\>\s*/g, " ");
	curLot = curLot.replace(/\s*\[.*?\]\s*/g, " ");
	n = curLot.indexOf(' по ');
	if (n < 0) {return false;}
	curLot = curLot.substring(0,n);
	n = curLot.indexOf('Выставлено на продажу');
	curLot = curLot.substr(n+22).trim();
	n = curLot.indexOf(' шт.');
	if (n>0) {
		curLot = curLot.substring(0,n-2).trim();
	}
	return curLot;
} // getLotName

function addLot(lotName,lotNum) {
	var lots = [];
	var lotNums = [];
	var lotsVar = getValue('lotHistory_lots');
	if (lotsVar == '') {lots = [];}
	else {lots = JSON.parse(getValue('lotHistory_lots'));}
	if (!(lots.length > 0)) {lots = [];}
	var found = false;
	var add = false;
	for (var i = 0; i < lots.length; i++) {
		if (lots[i][0] == lotName) {
			found = true;
			break;
		}
	}
	if (found) {
		if (!lots[i].includes(lotNum)) {
			lots[i].splice(1, 0, lotNum);
			if (lots[i].length > (maxLotNum+1)) { lots[i].pop(); }
			add = true;
		}
	} else {
		lotNums = [lotName,lotNum];
		lots.push(lotNums);
		add = true;
	}
	setValue('lotHistory_lots',JSON.stringify(lots));
	return add;
} // addLot

function getAnyHistory() {getLotHistory(this.innerHTML.trim());}

function getAllHistory() {
	var lots = [];
	var lotNums = [];
	var i, i1;
	var lotTbl = document.createElement('table');
	lotTbl.align="center";
	lotTbl.width="970px";
	lotTbl.style.borderCollapse = 'collapse';
	lotTbl.setAttribute('border',2);
	lotTbl.setAttribute('cellpadding',4);
	var tabText = '';
	var lotsText = getValue('lotHistory_lots','');
	if (lotsText != '') {
        lots = JSON.parse(lotsText);
        lots.sort();
    }
	for (i = 0; i < lots.length; i++) {
		tabText += '<tr>';
		lotNums = lots[i];
		for (i1 = 0; i1 < lotNums.length; i1++) {
			if (i1 == 0) {
				tabText +='<td id="lot'+i+'" style = "cursor: pointer;"> '+lotNums[i1]+' </td>';
			} else {
				tabText +='<td> <a href="auction_lot_protocol.php?id='+lotNums[i1]+'">'+lotNums[i1]+'</a> </td>';
			}
		}
		tabText += '</tr> ';
	}
	if (tabText == '') {
        tabText = '<tr><td> Список лотов пуст. Список заполняется автоматически при торговле или кнопкой внизу страницы протокола передач </td></tr>';
    }
	lotTbl.innerHTML = '<tbody>' + tabText + '</tbody>';
	document.body.insertBefore(lotTbl,document.getElementById('paramTbl'));
	for (i = 0; i < lots.length; i++) {
		document.getElementById('lot'+i).onclick = getAnyHistory;
	}
	return true;
} // getAllHistory

function lotInfo(lotNum,lotName) {
	var curLot = getPage('/auction_lot_protocol.php?id=' + lotNum);
	var n = curLot.indexOf('лот #');
    var zaBoyRem = '';
	if (n < 0) {return false;}
	curLot = curLot.substr(n+5);
	n = curLot.indexOf('art_info.php?id=');
	var lotVal = curLot.substring(n,curLot.indexOf('"',n));
	lotVal = lotVal.substr(lotVal.indexOf('=')+1);
	n = lotVal.indexOf('&');
	if (n>0) { lotVal = lotVal.substring(0,n); }
	//alert(lotVal);alert(n);
	if (lotNum != curLot.substring(0,curLot.indexOf('<'))) return '<td>Не совпадает номер лота</td>';
	curLot = curLot.replace(/\s*\<.*?\>\s*/g, " ");
	var lotState = sale;
	if (curLot.indexOf('Товар распродан') > 0) {lotState = sold;}
	if (curLot.indexOf('Торги закончены') > 0) {lotState = ret;}
	n = curLot.indexOf('Выставлено на продажу');
	var putOn = 'Выставлено ' + curLot.substr(n-22,17);
	var res = 'Еще в продаже';
	n = curLot.indexOf('Товар распродан');
	if (lotState == sold) {res = 'Продано ' + curLot.substr(n-22,17);}
	n = curLot.indexOf('Торги закончены');
	if (lotState == ret) {res = 'Возврат ' + curLot.substr(n-22,17);}
	var prochka = 0, prochkaFull = 0, prochkaS = '';
	n = curLot.indexOf('[');
	if (n>0) {
		if (isNaN(curLot[n+1])) { n = curLot.indexOf('[',n+1); }
		if (isNaN(curLot[n+1])) { n = curLot.indexOf('[',n+1); }
		prochka = parseInt(curLot.substring(n+1,curLot.indexOf('/')));
		prochkaS = curLot.substring(n,curLot.indexOf(']',n)+1);
		prochkaFull = prochkaS.substring(prochkaS.indexOf('/')+1,prochkaS.indexOf(']'));
	}
	var Qty = 1;
	n = curLot.indexOf(' шт. по ');
	if (n>0) {
		Qty = parseInt(curLot.substr(n-2,2).trim());
	}
	var price = 0;
	n = curLot.indexOf(' по ');
	if (n>0) {
		price = parseInt(curLot.substring(n+4,curLot.indexOf('золота',n)-1).trim());
	}
	var zaBoy = '';
	if (lotVal) {
		if (unsafeWindow.calcZaboyR) {
            zaBoyRem = unsafeWindow.calcZaboyR(lotVal, prochka, prochkaFull, price);
            if (zaBoyRem.zaBoy) { zaBoyRem = ' / ' + zaBoyRem.zaBoy + ' P'; }
            else { zaBoyRem = ''; }
        }
	}
	if (prochka > 0) { zaBoy = ' (' + Math.round(price/prochka) + ' за бой'+zaBoyRem+') '; }
	return ('<td><a href="auction_lot_protocol.php?id='+lotNum+'">'+lotNum+'</a> ' +
			putOn + ' ' + Qty + ' шт. ' + prochkaS + ' ' + price + ' за шт.' + zaBoy + ' -> ' + res + '</td>');
}//lotInfo

function addHistory() {
	var marketPage = getPage(location.href);
	var lotName, lotNum;
	var i = 0;
	var found = false;
	var n = marketPage.indexOf('Продан ');
	if (n < 0) { alert('Не могу найти протокол'); return false;}
	marketPage = marketPage.substr(n-10);
	marketPage = marketPage.replace(/\s*\<.*?\>\s*/g, " ");
	marketPage = marketPage.replace(/\s*\[.*?\]\s*/g, " ");
	while ((n = marketPage.indexOf('Продан ')) >=0) {
		marketPage = marketPage.substr(n);
		found = false;
		if ((n = marketPage.indexOf('предмет')) == 7) {
			lotName = marketPage.substring(n+9,marketPage.indexOf('"',n+10));
			found = true;
		}
		if ((n = marketPage.indexOf('сертификат')) == 7) {
			lotName = marketPage.substring(n,marketPage.indexOf(' за ',n));
			lotName = lotName.replace('сертификат на постройку 1% дома в','Сертификат 1% для');
			found = true;
		}
		if (found) {
			n = marketPage.indexOf('лот #'); n += 5;
			lotNum = marketPage.substring(n,marketPage.indexOf(' ',n));
			marketPage = marketPage.substr(n);
			//alert('-'+lotName+'-'+lotNum+'-');
			if (addLot(lotName,lotNum)) {i++;}
		} else { marketPage = marketPage.substr(1); }
	}
	alert('Добавлено лотов: '+i);
	return true;
}//addHistory

function getHistory() {
	var lotName = document.getElementById('sel').options[document.getElementById('sel').selectedIndex].text;
	var n = lotName.indexOf('/');
	if (n > 0) {
		if (!isNaN(lotName[n-2])) {n--;}
		if (!isNaN(lotName[n-2])) {n--;}
		lotName = lotName.substring(0,n-1);
	}
	n = lotName.indexOf('(');
	if (n > 0) {
		lotName = lotName.substring(0,n-1);
	}
	n = lotName.indexOf('[');
	if (n > 0) {
		lotName = lotName.substring(0,n-1);
	}
	lotName = lotName.trim();
	getLotHistory(lotName);
} // getHistory

function getLotHistory(lotName) {
	var waitMes = document.createElement('a');
	waitMes.innerHTML = '<b> <br> Получаем данные. Подождите... </b>';
	waitMes.style = 'background-color: #A6DFF0; box-shadow: 0 0 3px rgba(0,0,0,1);'+
					'position: fixed; top: 50%; right: 50%; width: 200px; height: 70px; z-index: 9555; text-align: center;';
	document.body.append(waitMes);
	var lots = [];
	var lotNums = [];
	var i, i1;
	var lotTbl = document.createElement('table');
	lotTbl.id = 'lotTbl';
	lotTbl.align="center";
	lotTbl.width="970px";
	lotTbl.style.borderCollapse = 'collapse';
	lotTbl.setAttribute('border',2);
	lotTbl.setAttribute('cellpadding',4);
	var tabText = '<tbody> ';
	var lotsText = getValue('lotHistory_lots','');
	if (lotsText != '') {
        lots = JSON.parse(lotsText);
        lots.sort();
    }
	var found = false;
	for (i = 0; i < lots.length; i++) {
		lotNums = lots[i];
		if (lotNums[0]) { lotNums[0] = lotNums[0].replace('икат 1% для','икат для'); }
		if (lotNums[0] == lotName) {
			for (i1 = 0; i1 < lotNums.length; i1++) {
				tabText += '<tr>';
				if (i1 == 0) {
					tabText += '<td> '+lotName+' </td>';
				} else {
					tabText += lotInfo(lotNums[i1],lotName);
				}
				tabText += '</tr> ';
			}
			found = true;
			break;
		}
	}
	tabText += '</tbody>';
	if (found) {lotTbl.innerHTML = tabText;}
	else {lotTbl.innerHTML = '<tbody><tr><td> Таких лотов нет в сохраненных данных. Список заполняется автоматически при торговле или кнопкой внизу страницы протокола передач </td></tr></tbody>';}
	var prevTbl = document.getElementById("lotTbl");
	if (prevTbl) {prevTbl.remove();}
	document.getElementById('paramTbl').before(lotTbl);
	waitMes.remove();
	return true;
} // getLotHistory

var sale = 0, sold = 1, ret = 2;
var maxLotNum = 10;

function main() {
    var paramTbl;
	if (location.href.indexOf('pl_transfers.php?id=') > 0) {
		paramTbl = document.createElement('table');
		paramTbl.innerHTML =
			'<tbody> '+
				'<tr> '+
					'<td align="center"> <input type="button" id="butAddHistory" value="Добавить в историю продаж лоты с этой страницы" /></td>'+
				'</tr> '+
			'</tbody>';
		paramTbl.id="paramTbl";
		paramTbl.align="center";
		paramTbl.width="970px";
		paramTbl.style.borderCollapse = 'collapse';
		paramTbl.setAttribute('border',2);
		paramTbl.setAttribute('cellpadding',4);
		document.body.append(paramTbl);
		document.getElementById('butAddHistory').onclick = addHistory;
		return 0;
	}
	if (location.href.indexOf('auction_new_lot.php') > 0) {
		paramTbl = document.createElement('table');
		paramTbl.innerHTML =
			'<tbody> '+
				'<tr> '+
					'<td align="center"> <input type="button" id="butGetHistory" value="Посмотреть историю лота" /></td>'+
					'<td align="center"> <input type="button" id="butGetAllHistory" value="Посмотреть все сохраненные лоты" /></td>'+
				'</tr> '+
			'</tbody>';
		paramTbl.id="paramTbl";
		paramTbl.align="center";
		paramTbl.width="970px";
		paramTbl.style.borderCollapse = 'collapse';
		paramTbl.setAttribute('border',2);
		paramTbl.setAttribute('cellpadding',4);
		document.body.append(paramTbl);
		document.getElementById('butGetHistory').onclick = getHistory;
		document.getElementById('butGetAllHistory').onclick = getAllHistory;
		return 0;
	}
	if (location.href.indexOf('auction_accept_new_lot.php') > 0) {
		var lotNum = getNewLot();
		if (!lotNum) {return 0;}
		var lotNumCRC = document.querySelector('a[href*="auction_lot_protocol.php?id="]');
                lotNumCRC = lotNumCRC.href.slice(lotNumCRC.href.indexOf('id='));
		var lotName = getLotName(lotNumCRC);
		addLot(lotName,lotNum);
		paramTbl = document.createElement('table');
		paramTbl.innerHTML =
			'<tbody> '+
				'<tr> <td align="center"> Добавлено в историю продаж: '+lotName+' (лот '+lotNum+')</td> </tr> '+
			'</tbody>';
		paramTbl.align="center";
		paramTbl.width="970px";
		paramTbl.style.borderCollapse = 'collapse';
		paramTbl.setAttribute('border',2);
		paramTbl.setAttribute('cellpadding',4);
		document.body.append(paramTbl);
		return 0;
	}
	return 0;
} // main

main();


})();