- // ==UserScript==
- // @name HWM_TransferSearch
- // @namespace Рианти
- // @version 1.42.0
- // @homepage https://greasyfork.org/en/scripts/374608-hwm-transfersearch
- // @author Alex_2oo8, Рианти, CheckT
- // @description Поиск по протоколу передач
- // @include https://www.heroeswm.ru/pl_transfers.php*
- // @include http://178.248.235.15/pl_transfers.php*
- // ==/UserScript==
-
-
- // https://www.lordswm.com/pl_transfers.php*
-
- (function(){
-
- var debug = false;
-
- var url = location.protocol+'//'+location.hostname+'/';
- var id = getId();
- window.protocol_regexp = /Протокол игрока <a.* href="pl_info\.php\?id=[0-9]*"><b>.*<\/b><\/a>/;
-
- init_style();
- var elem = find_root_elem(); //корневой элемент
- create_header(elem);
- create_listeners(elem);
- var iDiv = create_div();
-
- return; //only functions below
-
- function request(url_req, callback, type, first_page){
- var objXMLHttpReq = createXMLHttpReq();
- try{
- objXMLHttpReq.open('GET', url_req, true);
- setXMLHttpReqHeaders(objXMLHttpReq);
- objXMLHttpReq.onreadystatechange = function() { callback(objXMLHttpReq, type, first_page); }
- objXMLHttpReq.send(null);
- }catch(e){console.log(e);alert("HWM_TransferSearch: "+e);}
- }
-
- function search( id, elem, type ) {
- var stop = document.createElement( 'input' );
- stop.type = 'hidden';
- stop.value = '0';
- stop.id = 'stop';
- document.getElementsByTagName('body')[0].appendChild( stop );
- var first_page = Math.max(1, Math.floor(getNumberField('TSearch_inp_page', 1)));
- $('transferSearchDiv').style.display = 'none';
- $('TSearch').style.display = 'none';
-
- request(url+'pl_transfers.php?page=9999&id=' + id, search_1_last_page, type, first_page);
- }
-
- function search_1_last_page(objXMLHttpReq, type, first_page){
- if (objXMLHttpReq.readyState == 4 && objXMLHttpReq.status == 200) {
- iDiv.innerHTML = objXMLHttpReq.responseText;
- var td_arr = iDiv.getElementsByTagName('td');
- var element;
- for (var i = 0; i < td_arr.length; i++) {
- if ( td_arr[i].getElementsByTagName('center').length > 0 && window.protocol_regexp.test( td_arr[i].getElementsByTagName('center')[0].innerHTML ) ) {
- element = td_arr[i];
- break;
- }
- }
- if(!element)
- return;
-
- var lastPg = 1;
- if ( element.getElementsByTagName('center').length > 1 )
- lastPg = element.getElementsByTagName('center')[1].getElementsByTagName('b')[0].getElementsByTagName('font')[0].innerHTML;
- first_page = Math.min(lastPg, first_page);
- search2( id, type, elem, lastPg, first_page);
- }
- }
-
- function search2( id, type, elem, pgCount, first_page){
- var reg, search_str;
- switch(type){
- case 'Nick':
- search_str = $('TSearchNick').value;
- reg = new RegExp( '[0-9]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}: .*<b>' + rep( search_str ) + '<\/b><\/a>' );
- break;
- case 'Fine':
- search_str = $('HWM_transfer_search_checkbox_label').className.indexOf('checked') != -1;
- reg = new RegExp( '[0-9]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}: <b>Игрок' + ( search_str ? '' : ' оштрафован') );
- break;
- case 'Art':
- search_str = $('TSearchArt').value;
- /*!*/ reg = new RegExp( '[0-9]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}: .* ["\'].*' + rep( search_str ) + '.*["\']' );
- break;
- case 'Any':
- search_str = $('TSearchAll').value;
- reg = new RegExp( '[0-9]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}: .*' + rep( search_str ) + '.*' );
- break;
- case 'Regexp':
- search_str = $('TSearch_inp_regexp').value;
- reg = new RegExp( '[0-9]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:' + search_str.replace(/\\/g, '\\'));
- break;
- case 'ID':
- search_str = $('TSearch_inp_id').value;
- reg = new RegExp( '[0-9]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}: .*id=' + search_str);
- break;
- }
- var nick = elem.getElementsByTagName('center')[0].getElementsByTagName('a')[0].innerHTML;
- while( elem.lastChild ) {
- elem.removeChild( elem.lastChild );
- }
- elem.appendChild( document.createElement( 'br' ) );
- var center = document.createElement( 'center' );
- center.innerHTML = 'Поиск по протоколу передач игрока ';
- var a = document.createElement( 'a' );
- a.href = 'pl_info.php?id=' + id;
- a.style.textDecoration = 'none';
- a.innerHTML = nick;
- center.appendChild( a );
- elem.appendChild( center );
- elem.appendChild( document.createElement( 'br' ) );
- var center = document.createElement( 'center' );
- center.id = 'TSearch';
- center.innerHTML = 'Идёт поиск '
- + type.replace( 'Nick', 'по нику <a href="pl_info.php?nick=' + search_str + '" style="text-decoration: none;"><b>' + search_str + '</b></a>' )
- .replace( 'Fine', 'штрафов' + ( search_str ? ' и блокировок/разблокировок' : '' ) )
- .replace( 'Art', 'по артефакту "' + search_str + '"' )
- .replace( 'Any', 'по подстроке "' + search_str + '"' )
- .replace( 'Regexp', 'по рег. выражению "' + search_str + '"' )
- .replace( 'ID', 'по ID "' + search_str + '"' )
- + '... (<a href="javascript: void(0);" id="cancel" onclick="document.getElementById(\'stop\').value = \'1\';">стоп</a>)'
- + '<br />'
- + 'Просмотрено <text id="viewed">0</text> страничек из ' + (pgCount-first_page+1) + ' (с '+first_page+' по '+pgCount+'): <text id="percent">0</text>%'
- + '<br />'
- + 'Дата последней операции на текущей странице: <text id="curr_date"></text>'
- + '<br />'
- + 'Найдено <text id="matches">0</text> записей:'
- ;
- elem.appendChild( center );
- elem.appendChild( document.createElement( 'br' ) );
-
- startSearch( first_page, id, reg, pgCount, elem, type, search_str, first_page, null );
- }
-
- function startSearch( pg, id, reg, lastPg, elem, type, search_str, first_page, curr_page_date ) {
- if ( $('stop').value != '1' && pg <= lastPg ) {
- var args = {pg:pg, id:id, reg:reg, lastPg:lastPg, elem:elem, type:type, search_str:search_str, first_page:first_page};
- request(url+'pl_transfers.php?id=' + id + '&page=' + (pg-1), search_2_pages, args);
- } else {
- var matches = $('matches').innerHTML;
- $('TSearch').innerHTML = 'Поиск '
- + type.replace( 'Nick', 'по нику <a href="pl_info.php?nick=' + search_str + '" style="text-decoration: none;"><b>' + search_str + '</b></a>' )
- .replace( 'Fine', 'штрафов' + ( search_str ? ' и блокировок/разблокировок' : '' ) )
- .replace( 'Art', 'по артефакту "' + search_str + '"' )
- .replace( 'Any', 'по подстроке "' + search_str + '"' )
- .replace( 'Regexp', 'по рег. выражению "' + search_str + '"' )
- .replace( 'ID', 'по ID "' + search_str + '"' )
- + ' закончен!<br>Найдено ' + matches + ' записей на страницах '+first_page+'-'+(pg-1)+':'
- + (curr_page_date ? ('<br/>Дата последней операции на странице '+(pg-1)+': '+curr_page_date) : '')
- ;
- }
- }
-
- function search_2_pages(objXMLHttpReq, args){
- if (objXMLHttpReq.readyState == 4 && objXMLHttpReq.status == 200) {
- iDiv.innerHTML = objXMLHttpReq.responseText;
- var td_arr = iDiv.getElementsByTagName('td');
- for (var i = 0; i < td_arr.length; i++) {
- if ( td_arr[i].getElementsByTagName('center').length > 0 && window.protocol_regexp.test( td_arr[i].getElementsByTagName('center')[0].innerHTML ) ) {
- var element = td_arr[i];
- break;
- }
- }
- if(!element)
- return;
-
- var text = element.innerHTML //.substring( element.innerHTML.indexOf(' ') );
- var transfers = text.split('<br>');
- var first_time = null;
- var time_regexp = / (\d\d-\d\d-\d\d \d\d:\d\d):/;
- for ( var i = 0; i < transfers.length; i++ ) {
- if(!first_time){
- var time_match = time_regexp.exec( transfers[i] );
- if(time_match)
- first_time = time_match[1];
- }
- if ( args.reg.test( transfers[i] ) ) {
- $('matches').innerHTML = ( Number( $('matches').innerHTML ) + 1 );
- args.elem.innerHTML += transfers[i];
- args.elem.appendChild( document.createElement('br') );
- }
- }
- if(first_time)
- $('curr_date').innerHTML = first_time;
- $('viewed').innerHTML = ( Number( $('viewed').innerHTML ) + 1 );
- $('percent').innerHTML = ( Math.round( $('viewed').innerHTML * 100 / (args.lastPg-args.first_page+1) ) );
-
- startSearch( args.pg+1, args.id, args.reg, args.lastPg, args.elem, args.type, args.search_str, args.first_page, first_time );
- }
- }
-
- function find_root_elem(){
- var td_arr = document.getElementsByTagName('td');
-
- for (var i = 0; i < td_arr.length; i++) {
- if ( td_arr[i].getElementsByTagName('center').length > 0
- && window.protocol_regexp.test( td_arr[i].getElementsByTagName('center')[0].innerHTML ) ) {
- return td_arr[i];
- }
- }
- }
-
- function create_listeners(elem){
- addClickEvent('HWM_transfer_search_checkbox_label', check_search_box);
- addClickEvent('TSearchByNick', function() { search( id, elem, 'Nick' ); });
- addClickEvent('TSearchByFine', function() { search( id, elem, 'Fine' ); });
- addClickEvent('TSearchByArt', function() { search( id, elem, 'Art' ); });
- addClickEvent('TSearchAny', function() { search( id, elem, 'Any' ); });
- addClickEvent('TSearch_but_regexp', function() { search( id, elem, 'Regexp' ); });
- addClickEvent('TSearch_but_id', function() { search( id, elem, 'ID' ); });
- }
-
- function rep( str ) {
- str = str.replace( /\\/g, '\\\\' ).replace( /\[/g, '\\[' ).replace( /\]/g, '\\]' ).replace( /\(/g, '\\(' )
- .replace( /\)/g, '\\)' ).replace( /\./g, '\\.' ).replace( /\+/g, '\\+' ).replace( /\*/g, '\\*' )
- .replace( /\?/g, '\\?' ).replace( /\$/g, '\\$' ).replace( /\|/g, '\\|' );
- return str;
- }
-
- function check_search_box() {
- this.className = (this.className.indexOf('checked') != -1 ? '' : 'checked');
- }
-
- function create_div(){
- var iDiv = document.createElement('div');
- iDiv.style.display = debug ? 'block' : 'none';
- iDiv.id = 'hwm_trasfer_search';
- document.body.appendChild(iDiv);
- return iDiv;
- }
-
- function create_header(elem){
- var search_text = 'Поиск';
- var text = document.createElement( 'text' );
- text.id = 'TSearch';
- text.innerHTML = ' (<a id="show_transfer_block" href="javascript: void(0);">Поиск по протоколу</a>)';
- elem.getElementsByTagName('center')[0].appendChild( text );
- addClickEvent('show_transfer_block', show_transfer_block);
-
- var div = document.createElement( 'div' );
- div.id = 'transferSearchDiv';
- div.style.display = 'none';
-
- div.innerHTML =
- '<table>'+
- '<tr><td>Поиск по нику:</td><td><input type="text" id="TSearchNick" form="form_nick" /></td>'+
- '<td><form action="" style="padding:0;margin:0;border:0;" id="form_nick" onSubmit="return false;">'+
- '<input type="submit" id="TSearchByNick" value="Поиск" />'+
- '</form></td></tr>'+
-
- '<tr><td>Поиск штрафов:</td><td title="В том числе искать блокировки/разблокировки"><div id="HWM_transfer_search_checkbox_label">Блоки / Разблоки</div></td>'+
- '<td><input type="submit" id="TSearchByFine" value="Поиск" /></td></tr>'+
-
- '<tr><td>Поиск по артефакту:</td><td><input type="text" id="TSearchArt" form="form_art" /></td>'+
- '<td><form action="" style="padding:0;margin:0;border:0;" id="form_art" onSubmit="return false;">'+
- '<input type="submit" id="TSearchByArt" value="Поиск" />'+
- '</form></td></tr>'+
-
- '<tr><td>Общий Поиск:</td><td><input type="text" id="TSearchAll" form="form_any" /></td>'+
- '<td><form action="" style="padding:0;margin:0;border:0;" id="form_any" onSubmit="return false;">'+
- '<input type="submit" id="TSearchAny" value="Поиск" />'+
- '</form></td></tr>'+
-
- '<tr><td>По рег. выражению:</td><td><input type="text" id="TSearch_inp_regexp" form="form_regexp" /></td>'+
- '<td><form action="" style="padding:0;margin:0;border:0;" id="form_regexp" onSubmit="return false;">'+
- '<input type="submit" id="TSearch_but_regexp" value="Поиск" />'+
- '</form></td></tr>'+
-
- '<tr><td>По ID:</td><td><input type="text" id="TSearch_inp_id" form="form_id" /></td>'+
- '<td><form action="" style="padding:0;margin:0;border:0;" id="form_id" onSubmit="return false;">'+
- '<input type="submit" id="TSearch_but_id" value="Поиск" />'+
- '</form></td></tr>'+
-
- '<tr><td>со страницы</td><td title="Начать поиск с указанной страницы"><input type="text" id="TSearch_inp_page" value="1"/></td>'+
- '<td> </td></tr>'+
- '</table>';
-
- elem.getElementsByTagName('center')[0].appendChild( div );
- }
-
- function show_transfer_block() {
- $('transferSearchDiv').style.display = ( $('transferSearchDiv').style.display == 'none' ? 'block' : 'none' );
- }
-
- function GM_addStyle(css){
- var head = document.getElementsByTagName('head')[0];
- if (!head)
- return;
- var style = document.createElement('style');
- style.type = 'text/css';
- style.innerHTML = css;
- head.appendChild(style);
- }
-
- function init_style(){
- GM_addStyle( '#HWM_transfer_search_checkbox_label {background-image:url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJIAAAAsCAYAAACOu+GLAAABrElEQVR42u3bsWrCQByA8RhdXBzEJY8gcXZz9Ek6BkIhSxBck1foG3QogpPg5uguklG6iIPU4qCT+ZcLGDiibY03ZPiGD4yaLPcTyV3O+nh/E6JnStNULPXi1X8xlunrUbX7/vrUIakDE5m+HlU7IBGQCEgEJCARkAhIBCQCEpAISAQkAhKQgAQkAhIBiYAEJAISAYmqC0kdmMr09aj6ZZD4VZGJLHZBELtIiF0kxF0bkMg8pOVyKd1uF0hAem7gfd8Xy7KABKTyA+95XoYISEAqDSkIghwRkIBUgLRarf48OQxDDVGz2QQSkPSB7/f7st1u7544Go00RI1GQxaLBZCApA98rVYTx3HkeDxqJ1wuFxmPxxoi9d0kSbj9B9JtSApJu92W/X6fvx9FUf7Ztc1mwzwSkG5DqtfrOZRer5f9zcVxrAFSzedzJiTpPqThcKiB6XQ6BUSTyYSZbfod0m63E9d1C3iuzWYzlkjof/NI5/NZWq1WAdF6vWatjR6bkDydTtkamgJk23a2psaiLZWa2T4cDjIYDGQ6nbL6TzxGQkAidpEQu0iIHuwH8Zq0OtRsnH4AAAAASUVORK5CYII%3D\');background-position:top;display:block;width:120px;height:18px;padding:2px;padding-left:24px;line-height:18px;-moz-user-select:none;cursor:default;}' +
- '#HWM_transfer_search_checkbox_label.checked {background-position:bottom;}' +
- '.HWM_transfer_search_checkbox_checkbox {display:none;}' );
- }
-
- function addClickEvent(id, func){
- var elem = $(id);
- if(elem && func)
- addEvent(elem, "click", func);
- }
-
- function addChangeEvent(id, func){
- var elem = $(id);
- if(elem && func)
- addEvent(elem, "change", func);
- }
-
- function addEvent(elem, evType, fn) {
- if(elem){
- if (elem.addEventListener)
- elem.addEventListener(evType, fn, false);
- else if (elem.attachEvent)
- elem.attachEvent("on" + evType, fn);
- else
- elem["on" + evType] = fn;
- }
- }
-
- function getId() {
- var id = location.href.match( /\?(?:.*=.*&)*id=([0-9]*)(?:&.*=.*)*/ );
- return id[1];
- }
-
- function $(id) { return document.getElementById(id); }
-
- function getI(xpath,elem){return document.evaluate(xpath,(elem?elem:document),null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);}
-
- function getNumberField(key, def){
- var val = $(key);
- return val ? getNum(val.value) : (def ? def : 0);
- }
- function getNum(src){
- var val=Number(src);
- val = isNaN(val) ? 0 : val;
- return val < 0 ? 0 : val;
- }
-
- function createXMLHttpReq(){
- var objXMLHttpReq;
-
- if (window.XMLHttpRequest){
- objXMLHttpReq = new XMLHttpRequest();
- } else if (window.ActiveXObject) {
- // IE
- objXMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
- } else {
- alert('Can\'t create XMLHttpRequest!');
- }
- return objXMLHttpReq;
- }
-
- function setXMLHttpReqHeaders(objXMLHttpReq){
- //objXMLHttpReq.setRequestHeader('Referer', 'http://www.heroeswm.ru/inventory.php');
- objXMLHttpReq.setRequestHeader('Content-type', 'text/html; charset=windows-1251');
- if(objXMLHttpReq.overrideMimeType)
- objXMLHttpReq.overrideMimeType('text/html; charset=windows-1251');
- }
- }());