GetDate EN games

try to take over the world!

// ==UserScript==
// @name         GetDate EN games
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  try to take over the world!
// @author       You
// @match        http://*.en.cx/GameCalendar.aspx?*
// @require		https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js 
// @grant       GM_xmlhttpRequest 
// @grant       GM_registerMenuCommand 
// @grant       GM_addStyle
// ==/UserScript==

(function($) {
    'use strict';
    GM_addStyle(
        '.textInfo{background:#fff;position:fixed; left:50%;top:50%; margin-top:-200px; margin-left:-400px; width: 806px;height: 421px;}'+
        '.close{ float:right; color:#000;}'+
        '.textInfo{color: #54432e;}'+
        '.textInfo textarea{width:800px; height:400px;white-space: nowrap;}'+
        '.textInfo a{color:#000;}'+
        '.textInfo div{ padding:10px 20px;}'+
        '.loaded{position:relative;}'+
        '.scenario{color:red !important;}'+
        '.loaded:before{position: absolute; content:""; left:0; right:0; top:0; bottom:0; background:rgba(29, 29, 29, 0.5)}'+
        '.loaded:after{position: absolute; content:"";left:0; right:0; top:0; height: 300px;'+
        ' background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjAiIHdpZHRoPSI2NHB4IiBoZWlnaHQ9IjY0cHgiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIj48Zz48cGF0aCBkPSJNNzUuNCAxMjYuNjNhMTEuNDMgMTEuNDMgMCAwIDEtMi4xLTIyLjY1IDQwLjkgNDAuOSAwIDAgMCAzMC41LTMwLjYgMTEuNCAxMS40IDAgMSAxIDIyLjI3IDQuODdoLjAyYTYzLjc3IDYzLjc3IDAgMCAxLTQ3LjggNDguMDV2LS4wMmExMS4zOCAxMS4zOCAwIDAgMS0yLjkzLjM3eiIgZmlsbD0iI2ZmMDAwMCIgZmlsbC1vcGFjaXR5PSIxIi8+PGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIGZyb209IjAgNjQgNjQiIHRvPSIzNjAgNjQgNjQiIGR1cj0iNjAwbXMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGVUcmFuc2Zvcm0+PC9nPjwvc3ZnPg==")  no-repeat center;'+
        '}' );

    let arInfo=[];
    function GetDate(){
        let url='',
            content='';
        let rows =$('.table_light .infoRow ');
        $('body').addClass('loaded');

        $.each(rows, function( index, tr ) {
            let td=$(tr).find('td'),
                info={};
            let id=td.eq(1).find('span');
            info.id=id.eq(1).html()+"_"+id.eq(2).html();
            info.date=td.eq(4).html();
            let lnk=td.eq(5).find('b a');
            info.name=lnk.html()
            info.lnk=lnk.prop('href');
            info.commandNum=td.eq(8).html();
            localStorage.setItem("game_"+info.id, JSON.stringify(info));

            GM_xmlhttpRequest({
                method: 'GET',
                url: lnk.prop('href'),
                synchronous: true,
                onreadystatechange: function(res) {
                },
                onload: function (results) {
                    let url=results.finalUrl;
                    url=url.match(/http:\/\/([\w.]+)/gm)[0];
                    let content = results.responseText;
                    try {
                        let table_tr=$(content).find('#tdContentCenter .gameInfo > tbody > tr');
                        //
                        let td_id=table_tr.eq(1).find('table td');
                        let id1=td_id.eq(3).find('span span').html();
                        let id2 = td_id.eq(3).find('a').prop('href').match(/=([\d]+)/gm);
                        id2=id2[0].replace( /=/g, "" );
                        let info =JSON.parse(localStorage.getItem('game_'+id1+"_"+id2));

                        info.difficulty =table_tr.eq(4).find('a span').html();
                        info.quality =table_tr.eq(6).find('a').html();
                        if(table_tr.eq(7).find('span a').html()==='Доступен'){
                            info.availabilityScript =table_tr.eq(7).find('span a').prop('href');
                            let url_faik=info.availabilityScript.match(/http:\/\/([\w.]+)/gm)[0];
                            info.availabilityScript= info.availabilityScript.replace(url_faik,url);
                        }else{
                            info.availabilityScript ='';
                        }
                        info.restriction = table_tr.eq(10).find('span.white').html();
                        info.SequencePassing=table_tr.eq(11).find('span.white').html();

                        info.StartGame=table_tr.eq(12).find('span.white').text().substr(0,19);
                        info.EndTime=table_tr.eq(14).find('span.white').text().substr(0,19);
                        let price=table_tr.eq(15).find('span.padL3');
                        if(price.length>0){
                            info.Price=price.eq(0).text()+" "+price.eq(1).text();
                        }else{
                            info.Price=0;
                        }
                        localStorage.setItem("game_"+info.id, JSON.stringify(info));
                    }
                    catch (err) {}
                },
                onerror: function(res) {
                    GM_log("Error!");
                }});
        });
        var intervalID = window.setTimeout(addText, 10000);

    }
    const GetScenario = ()=>{
        let url='',
            content='';
        let rows =$('.table_light .infoRow ');
        $('body').addClass('loaded');

        $.each(rows, function( index, tr ) {
            let td=$(tr).find('td'),
                info={};
            let id=td.eq(1).find('span');
            info.id=id.eq(1).html()+"_"+id.eq(2).html();
            let lnk=td.eq(5).find('b a');
            info.name=lnk.html()
            info.lnk=lnk.prop('href');
            localStorage.setItem("game_"+info.id, JSON.stringify(info));

            GM_xmlhttpRequest({
                method: 'GET',
                url: lnk.prop('href'),
                synchronous: true,
                onreadystatechange: function(res) {
                },
                onload: function (results) {
                    let url=results.finalUrl;
                    url=url.match(/http:\/\/([\w.]+)/gm)[0];
                    let content = results.responseText;
                    try {
                        let table_tr=$(content).find('#tdContentCenter .gameInfo > tbody > tr');
                        //
                        let td_id=table_tr.eq(1).find('table td');
                        let id1=td_id.eq(3).find('span span').html();
                        let id2 = td_id.eq(3).find('a').prop('href').match(/=([\d]+)/gm);
                        id2=id2[0].replace( /=/g, "" );
                        let info =JSON.parse(localStorage.getItem('game_'+id1+"_"+id2));

                        if(table_tr.eq(7).find('span a').html()==='Доступен'){
                            info.availabilityScript =table_tr.eq(7).find('span a').prop('href');
                            let url_faik=info.availabilityScript.match(/http:\/\/([\w.]+)/gm)[0];
                            info.availabilityScript= info.availabilityScript.replace(url_faik,url);
                        }else{
                            info.availabilityScript =null;
                        }
                        localStorage.setItem("game_"+info.id, JSON.stringify(info));
                    }
                    catch (err) {}
                },
                onerror: function(res) {
                    GM_log("Error!");
                }});
        });
        var intervalID = window.setTimeout(addText2, 10000);
    };
    const addText2 = ()=>{
        let text="";
        $.each(localStorage, function( index, item ) {
            if(index!='length'){
                try {
                    let game=JSON.parse(localStorage.getItem(index));
                    text+=game.id+', <a target="_blank" href="'+game.lnk.toString().trim()+'">';
                    text+=game.name.toString().trim()+'</a>';
                    if(game.availabilityScript!=null){
                        text+=' [<a target="_blank" class="scenario" href="'+game.availabilityScript.toString().trim()+'">Сценарий</a>]';
                    }
                    text+='<br>';
                } catch (err) {//text+=index+" "+err;
                    text+='\n';

                }

            }
        });
        let block='<div class="textInfo"><a class="close" href="#" onclick="$(this).parent().remove();return false;">закрыть</a><div>'+
            text+
            '</div></div>'
        $('body').append(block);
        localStorage.clear();
        $('body').removeClass('loaded');
    };
    function addText(){
        let text="id;date;type;name;url;start;end;quality;difficulty;restriction;Price;commandNum;availabilityScript\n";
        $.each(localStorage, function( index, item ) {
            if(index!='length'){
                try {
                    let game=JSON.parse(localStorage.getItem(index));
                    text+=game.id+';';
                    text+=game.date.toString().trim()+';';
                    text+=game.SequencePassing.toString().trim()+';';
                    text+=game.name.toString().trim()+';';
                    text+=game.lnk.toString().trim()+';';
                    text+=game.StartGame.toString().trim()+';';
                    text+=game.EndTime.toString().trim()+';';
                    text+=game.quality.toString().trim()+';';
                    text+=game.difficulty.toString().trim()+';';
                    text+=game.restriction.toString().trim()+';';
                    text+=game.Price.toString().trim()+';';
                    text+=game.commandNum.toString().trim()+';';
                    text+=game.availabilityScript.toString().trim()+';';
                    text+='\n';
                } catch (err) {//text+=index+" "+err;
                    text+='\n';

                }

            }
        });
        let block='<div class="textInfo"><a class="close" href="#" onclick="$(this).parent().remove();return false;">закрыть</a><textarea  >'+
            text+
            '</textarea></div>'
        $('body').append(block);
        localStorage.clear();
        $('body').removeClass('loaded');
    };
    GM_registerMenuCommand( 'Get Date',  GetDate);
    GM_registerMenuCommand( 'Get scenario',  GetScenario);
})($);