Находим страницу протокола по дате
// ==UserScript==
// @name HWM_Find_Protocol_Page_By_Date
// @namespace Рианти
// @description Находим страницу протокола по дате
// @include http://www.heroeswm.ru/pl_transfers.php?id=*
// @include http://www.heroeswm.ru/pl_warlog.php?id=*
// @include http://www.heroeswm.ru/sklad_log.php?id=*
// @version 1
// @grant GM_xmlhttpRequest
// ==/UserScript==
var URL_Template = document.location.href.split('&')[0].split('#')[0] + '&page=';
var lookupProcess;
function requestPage (url, onloadHandler){
console.log('loading: ', url);
try{
GM_xmlhttpRequest({
overrideMimeType: 'text/plain; charset=windows-1251',
synchronous: false,
url: url,
method: "GET",
onload: function(response){
document.getElementById('HWM_Find_By_date').innerHTML = 'Страниц обработано: ' + ++lookupProcess.totalPagesLoaded;
onloadHandler(new DOMParser().parseFromString(response.responseText, 'text/html').documentElement);
}
});
} catch (e) {
console.log(e);
}
}
function getPageId(dom){
return parseInt(dom.querySelector('center > b > font[color="red"]').innerHTML) - 1;
}
function getEarliestDateFromPage(dom){
var regexp = /(\d{2}-\d{2}-\d{2} \d{2}:\d{2})/g;
var res, temp;
while(res = regexp.exec(dom.innerHTML)) temp = res;
return getDateFromHWMFormatString(temp[1]);
}
function findDateOnPage(dom, date){
var regexp = /(\d{2}-\d{2}-\d{2} \d{2}:\d{2})/g;
var res;
while(res = regexp.exec(dom.querySelector('body > center:nth-child(2) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1)').innerHTML)) if (getDateFromHWMFormatString(res[1]) == date) return 1;
return 0;
}
function getDateFromHWMFormatString(string){
if(string.split(' ').length == 1) string = string + ' 00:00';
var t1 = string.split(' '),
t2 = t1[0].split('-');
return new Date('20' + t2[2] + '-' + t2[1] + '-' + t2[0] + 'T' + t1[1] + ':00Z');
}
function lookup(){
if (lookupProcess.stopLoading) return;
if (lookupProcess.result){
loadResult(lookupProcess.lastPage - 1);
} else if(lookupProcess.lastPage == -1){
requestPage (URL_Template + 100000, function(dom){
lookupProcess.lastPage = getPageId(dom);
lookup();
});
} else if(lookupProcess.firstPage != lookupProcess.lastPage) {
var midPage = Math.floor((lookupProcess.firstPage + lookupProcess.lastPage) / 2);
requestPage (URL_Template + midPage, function(dom){
try {
var dateOnPage = getEarliestDateFromPage(dom);
if (dateOnPage > lookupProcess.lookedDate) {
if (lookupProcess.firstPage == getPageId(dom)) lookupProcess.firstPage++;
else lookupProcess.firstPage = getPageId(dom);
} else if (dateOnPage < lookupProcess.lookedDate) {
if (lookupProcess.lastPage == getPageId(dom)) lookupProcess.lastPage--;
else lookupProcess.lastPage = getPageId(dom);
} else {
lookupProcess.lastPage = getPageId(dom);
lookupProcess.firstPage = lookupProcess.lastPage
}
lookup();
} catch (e ){
console.log(e);
}
});
} else {
lookupProcess.lastPage = lookupProcess.firstPage = lookupProcess.lastPage + 1;
requestPage (URL_Template + lookupProcess.lastPage, function(dom){
try {
if (!findDateOnPage(dom, lookupProcess.lookedDate)){
lookupProcess.result = 1;
}
lookup();
} catch (e ){
console.log(e);
}
});
}
}
function addQuickLink (label, id, action){
try{
var quickLinksTable = document.querySelector('body > center:nth-child(2) > center:nth-child(1)');
if (quickLinksTable) {
quickLinksTable.innerHTML = quickLinksTable.innerHTML + ' | <a class="pi" id="' + id + '" href="#">' + label + '</a>';
} else {
quickLinksTable = document.querySelector('body > center:nth-child(2) > table > tbody > tr');
quickLinksTable.innerHTML = quickLinksTable.innerHTML + '<td> | <a class="pi" id="' + id + '" href="#">' + label + '</a></td>';
}
var elem = document.getElementById(id);
elem.onclick = action;
} catch (e) {
console.log(e);
}
}
addQuickLink ('Поиск по дате', 'HWM_Find_By_date',
function(){
var el = document.getElementById('HWM_Find_By_date');
el.innerHTML = 'Страниц обработано: 0';
el.onclick = function(){
el.innerHTML = 'Остановлено';
lookupProcess.stopLoading = 1;
};
main();
});
function main(){
lookupProcess = {
firstPage: 0,
lastPage: -1,
result: 0,
totalPagesLoaded: 0,
stopLoading: 0,
lookedDate: getDateFromHWMFormatString(prompt("Введите дату которую нужно найти в протоколе, в формате дд-мм-гг (например 19-04-15):"))
};
console.log('performing lookup on date: ' + lookupProcess.lookedDate);
lookup();
}
function loadResult(pageId){
document.location.href = URL_Template + pageId;
}