HWM_Find_Protocol_Page_By_Date

Находим страницу протокола по дате

  1. // ==UserScript==
  2. // @name HWM_Find_Protocol_Page_By_Date
  3. // @namespace Рианти
  4. // @description Находим страницу протокола по дате
  5. // @include http://www.heroeswm.ru/pl_transfers.php?id=*
  6. // @include http://www.heroeswm.ru/pl_warlog.php?id=*
  7. // @include http://www.heroeswm.ru/sklad_log.php?id=*
  8. // @version 1
  9. // @grant GM_xmlhttpRequest
  10. // ==/UserScript==
  11.  
  12. var URL_Template = document.location.href.split('&')[0].split('#')[0] + '&page=';
  13.  
  14. var lookupProcess;
  15.  
  16. function requestPage (url, onloadHandler){
  17. console.log('loading: ', url);
  18. try{
  19. GM_xmlhttpRequest({
  20. overrideMimeType: 'text/plain; charset=windows-1251',
  21. synchronous: false,
  22. url: url,
  23. method: "GET",
  24. onload: function(response){
  25. document.getElementById('HWM_Find_By_date').innerHTML = 'Страниц обработано: ' + ++lookupProcess.totalPagesLoaded;
  26. onloadHandler(new DOMParser().parseFromString(response.responseText, 'text/html').documentElement);
  27. }
  28. });
  29. } catch (e) {
  30. console.log(e);
  31. }
  32. }
  33.  
  34. function getPageId(dom){
  35. return parseInt(dom.querySelector('center > b > font[color="red"]').innerHTML) - 1;
  36. }
  37.  
  38. function getEarliestDateFromPage(dom){
  39. var regexp = /(\d{2}-\d{2}-\d{2} \d{2}:\d{2})/g;
  40. var res, temp;
  41. while(res = regexp.exec(dom.innerHTML)) temp = res;
  42. return getDateFromHWMFormatString(temp[1]);
  43. }
  44.  
  45. function findDateOnPage(dom, date){
  46. var regexp = /(\d{2}-\d{2}-\d{2} \d{2}:\d{2})/g;
  47. var res;
  48. 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;
  49. return 0;
  50. }
  51.  
  52. function getDateFromHWMFormatString(string){
  53. if(string.split(' ').length == 1) string = string + ' 00:00';
  54.  
  55. var t1 = string.split(' '),
  56. t2 = t1[0].split('-');
  57. return new Date('20' + t2[2] + '-' + t2[1] + '-' + t2[0] + 'T' + t1[1] + ':00Z');
  58. }
  59.  
  60. function lookup(){
  61. if (lookupProcess.stopLoading) return;
  62.  
  63. if (lookupProcess.result){
  64. loadResult(lookupProcess.lastPage - 1);
  65. } else if(lookupProcess.lastPage == -1){
  66. requestPage (URL_Template + 100000, function(dom){
  67. lookupProcess.lastPage = getPageId(dom);
  68. lookup();
  69. });
  70. } else if(lookupProcess.firstPage != lookupProcess.lastPage) {
  71. var midPage = Math.floor((lookupProcess.firstPage + lookupProcess.lastPage) / 2);
  72. requestPage (URL_Template + midPage, function(dom){
  73. try {
  74. var dateOnPage = getEarliestDateFromPage(dom);
  75. if (dateOnPage > lookupProcess.lookedDate) {
  76. if (lookupProcess.firstPage == getPageId(dom)) lookupProcess.firstPage++;
  77. else lookupProcess.firstPage = getPageId(dom);
  78. } else if (dateOnPage < lookupProcess.lookedDate) {
  79. if (lookupProcess.lastPage == getPageId(dom)) lookupProcess.lastPage--;
  80. else lookupProcess.lastPage = getPageId(dom);
  81. } else {
  82. lookupProcess.lastPage = getPageId(dom);
  83. lookupProcess.firstPage = lookupProcess.lastPage
  84. }
  85. lookup();
  86. } catch (e ){
  87. console.log(e);
  88. }
  89. });
  90. } else {
  91. lookupProcess.lastPage = lookupProcess.firstPage = lookupProcess.lastPage + 1;
  92. requestPage (URL_Template + lookupProcess.lastPage, function(dom){
  93. try {
  94. if (!findDateOnPage(dom, lookupProcess.lookedDate)){
  95. lookupProcess.result = 1;
  96. }
  97. lookup();
  98. } catch (e ){
  99. console.log(e);
  100. }
  101. });
  102. }
  103. }
  104.  
  105. function addQuickLink (label, id, action){
  106. try{
  107. var quickLinksTable = document.querySelector('body > center:nth-child(2) > center:nth-child(1)');
  108. if (quickLinksTable) {
  109. quickLinksTable.innerHTML = quickLinksTable.innerHTML + ' | <a class="pi" id="' + id + '" href="#">' + label + '</a>';
  110. } else {
  111. quickLinksTable = document.querySelector('body > center:nth-child(2) > table > tbody > tr');
  112. quickLinksTable.innerHTML = quickLinksTable.innerHTML + '<td> | <a class="pi" id="' + id + '" href="#">' + label + '</a></td>';
  113. }
  114. var elem = document.getElementById(id);
  115. elem.onclick = action;
  116. } catch (e) {
  117. console.log(e);
  118. }
  119. }
  120.  
  121. addQuickLink ('Поиск по дате', 'HWM_Find_By_date',
  122. function(){
  123. var el = document.getElementById('HWM_Find_By_date');
  124. el.innerHTML = 'Страниц обработано: 0';
  125. el.onclick = function(){
  126. el.innerHTML = 'Остановлено';
  127. lookupProcess.stopLoading = 1;
  128. };
  129. main();
  130. });
  131.  
  132. function main(){
  133. lookupProcess = {
  134. firstPage: 0,
  135. lastPage: -1,
  136. result: 0,
  137. totalPagesLoaded: 0,
  138. stopLoading: 0,
  139. lookedDate: getDateFromHWMFormatString(prompt("Введите дату которую нужно найти в протоколе, в формате дд-мм-гг (например 19-04-15):"))
  140. };
  141. console.log('performing lookup on date: ' + lookupProcess.lookedDate);
  142. lookup();
  143. }
  144.  
  145. function loadResult(pageId){
  146. document.location.href = URL_Template + pageId;
  147. }