IndieGala_GetKey&Gift

IndieGala Bundle tool kits

// ==UserScript==
// @name         IndieGala_GetKey&Gift
// @namespace    http://tampermonkey.net/
// @version      1.12
// @description  IndieGala Bundle tool kits
// @icon         https://www.indiegala.com/favicon.ico
// @author       lenceliu,TalesYuan
// @match        https://www.indiegala.com/profile*
// @match        https://www.indiegala.com/gift*
// @match        https://www.indiegala.com/game?game_id=*
// ==/UserScript==
$ = unsafeWindow.jQuery;
var ShowGetSteamLink = true;
var reg_replace=/,\s*|\|\s*/g;
unsafeWindow.getbundle = function (section) {
    var result = '';
    var gametitle = '';
    var gamekey = '';
    var gamegiftlink = '';
	var giftpsw = '';
    var giftboughtdate = '';
    var giftarray = [];
    var steamurl = '';
    var bundletitle = '';
    var bundleid = '';
    var count = 0;

    //clearbox();
    if (location.href.indexOf('profile') > - 1)
    {
        var bundleroot = document.getElementById('collapseBundles');
        if (bundleroot.getAttribute('aria-expanded') == 'true')
        {
            //获得Bundle所有分类
            bundleslist = document.getElementById('accordion2').children;
            for (var i = 0; i < bundleslist.length; i++)
            {
                //获得Bundle分类名称
                var collapse = bundleslist[i].children[0].getElementsByTagName('a') [0].hash.substring(1);
                //获得当前分类
                bundletype = document.getElementById(collapse);
                //判断当前分类是否展开
                if (bundletype.getAttribute('aria-expanded') == 'true')
                {
                    //获得当前分类下的所有bundle
                    bundles = bundletype.getElementsByClassName('panel-heading');
                    for (var j = 0; j < bundles.length; j++)
                    {
                        //判断当前bundle是否展开
                        if (bundles[j].getElementsByTagName('a') [0].getAttribute('aria-expanded') == 'true')
                        {
                            if (collapse == 'collapseGiveaway')
                            {
                                bundletitle = 'Giveaways';
                            }
                            else
                            {
                                bundletitle = bundles[j].getElementsByTagName('a') [0].innerText;
                            }
                            bundleid = bundles[j].getElementsByTagName('a') [0].hash.substring(1);
                            bundle = document.getElementById(bundleid);
                            if (section == 'key')
                            {
                                var allkeys = bundle.getElementsByClassName('game-key-string');
                                for (var m = 0; m < allkeys.length; m++)
                                {
                                    gametitle = allkeys[m].getElementsByClassName('game-steam-url') [0].innerText.replace(reg_replace,'_');
                                    steamurl = allkeys[m].getElementsByClassName('game-steam-url') [0].href;
                                    /*散key有三种状态
                        1. 未获得key也未生成礼物     class="info_key_text"
                        2. 已获得key                 class="input-block-level margin text_align_center keys" .value
                        3. 已生成礼物但未被claim     class="keyfield give-gift-link" .getElementsByTagName('a').href
                        4. 礼物已被claim             class="span-key steam-btn" .innerText
                        */
                                    var class_giftlink = 'keyfield give-gift-link';
                                    var class_giftlink1 = 'keyfield .give-gift-link';
                                    var class_key = 'input-block-level margin text_align_center keys';
                                    var keysection = allkeys[m].getElementsByClassName('span-key steam-btn') [0];
                                    var key = allkeys[m].getElementsByClassName(class_key) [0];
                                    var gift = allkeys[m].getElementsByClassName(class_giftlink) [0];
                                    var gift1 = allkeys[m].getElementsByClassName(class_giftlink1) [0];
                                    if (keysection.children.length === 0)
                                    {
                                        gamekey = keysection.innerText;
                                    }
                                    else if (key !== undefined && key.value !== '')
                                    {
                                        gamekey = key.value;
                                    }
                                    else if (gift !== undefined)
                                    {
                                        gamekey = gift.children[0].href;
                                    }
                                    else if (gift1 !== undefined)
                                    {
                                        gamekey = gift1.children[0].href;
                                    }
                                    else
                                    {
                                        gamekey = '激活码或礼物链接尚未生成';
                                    }
                                    //判断是否要导出游戏名称

                                    if (name_switcher.checked)
                                    {
                                        result = result + gametitle + ', ' + gamekey + '\n';
                                    }
                                    else
                                    {
                                        result = result + gamekey + '\n';
                                    }
                                    count++;
                                }
                            }
                            else if (section == 'gift')
                            {
                                var allgifts = bundle.getElementsByClassName('gift-links-box');
								{
                                    for (var m = 0; m < allgifts.length; m++)
                                    {
                                        gametitle = allgifts[m].getElementsByClassName('title_gift_in') [0].getElementsByTagName('a') [0].innerText.replace(reg_replace,'_');
                                        gamegiftlink = allgifts[m].getElementsByClassName('title_gift_in') [0].getElementsByTagName('a') [0].href;
										if (allgifts[m].getElementsByClassName('gift-psw')[0] !== undefined)
										{
									        giftpsw = allgifts[m].getElementsByClassName('gift-psw')[0].innerText;
										}
                                        else
                                        {
                                            giftpsw = 'No PASSWORD';
                                        }
                                        giftarray[m] = {
                                            _bundletitle:bundletitle.trim(),
                                            _gametitle: gametitle,
                                            _gamegiftlink: gamegiftlink,
										    _giftpsw: giftpsw,
                                            //_giftboughtdate: getDate(giftboughtdate)
                                        };
                                        count++;
                                    }
                                    if (name_switcher.checked)
                                    {
                                        for (var n = 0; n < giftarray.length; n++)
                                        {
                                            result = result + giftarray[n]._bundletitle + ', ' + giftarray[n]._gamegiftlink + ', ' + '密码:' + giftarray[n]._giftpsw + '\n';
                                        }
                                    }
                                    else
                                    {
                                        for (var n = 0; n < giftarray.length; n++)
                                        {
                                            result = result + giftarray[n]._gamegiftlink + ', ' + '密码:' + giftarray[n]._giftpsw + '\n';
                                        }
                                    }
                                }
							}
                            // break;
                        }
                        else
                        {
                        }
                    }
                }
                else
                {
                }
            }
        }
    }
    else if (location.href.indexOf('gift') > - 1)
    {
        bundletitle = document.getElementById('indie_gala_2').children[0].children[0].innerText.substring(2);
        bundle = document.getElementById('steam-key');
        var allkeys = bundle.getElementsByClassName('game-key-string');
        for (var m = 0; m < allkeys.length; m++)
        {
            gametitle = allkeys[m].getElementsByClassName('game-steam-url') [0].innerText.replace(reg_replace,'_');
            steamurl = allkeys[m].getElementsByClassName('game-steam-url') [0].href;
            /*散key有三种状态
                        1. 未获得key也未生成礼物     class="info_key_text"
                        2. 已获得key                 class="input-block-level margin text_align_center keys" .value
                        3. 已生成礼物但未被claim     class="keyfield give-gift-link" .getElementsByTagName('a').href
                        4. 礼物已被claim             class="span-key steam-btn" .innerText
                        */
            var class_giftlink = 'keyfield give-gift-link';
            var class_giftlink1 = 'keyfield .give-gift-link';
            var class_key = 'input-block-level margin text_align_center keys';
            var keysection = allkeys[m].getElementsByClassName('span-key steam-btn') [0];
            var key = allkeys[m].getElementsByClassName(class_key) [0];
            var gift = allkeys[m].getElementsByClassName(class_giftlink) [0];
            var gift1 = allkeys[m].getElementsByClassName(class_giftlink1) [0];
            if (keysection.children.length === 0)
            {
                gamekey = keysection.innerText;
            }
            else if (key !== undefined && key.value !== '')
            {
                gamekey = key.value;
            }
            else if (gift !== undefined)
            {
                gamekey = gift.children[0].href;
            }
            else if (gift1 !== undefined)
            {
                gamekey = gift1.children[0].href;
            }
            else
            {
                gamekey = '激活码或礼物链接尚未生成';
            }
            //判断是否要导出游戏名称

            if (name_switcher.checked)
            {
                result = result + gametitle + ', ' + gamekey + '\n';
                //  result = result + bundletitle + ', ' + gamekey + '\n';
            }
            else
            {
                result = result + gamekey + '\n';
            }
            count++;
        }
    }
    if (bundletitle === '')
        shownote();
    giftmessage.value = result;
    bundletitlebox.innerHTML = '<P><Strong>' + 'Indiegala - ' + bundletitle + '</Strong> </P>';
    statusbox.innerHTML = '<P><Strong>' + '提取数量: ' + count + '</Strong> </P>';
};
unsafeWindow.getDate = function (strDate) {
    var st = strDate;
    var a = st.split(' ');
    var b = a[0].split('/');
    var c = a[1].split(':');
    var date = new Date(b[2], b[0], b[1], c[0], c[1], c[2]);
    return date;
};
unsafeWindow.sortByField = function (x, y) {
    return x._giftboughtdate - y._giftboughtdate;
};
unsafeWindow.clearbox = function clearbox()
{
    giftmessage.value = '';
    bundletitle = '';
    bundletitlebox.innerHTML = '<P><Strong>' + 'Indiegala - ' + bundletitle + '</Strong> </P>';
    statusbox.innerHTML = '<P><Strong>' + '提取数量: ' + '0' + '</Strong> </P>';
    $('#giftmessage').show();
};
unsafeWindow.getlink = function () {
    var result = '';
    // var allElements = [];
    var bundletitle = '';
    var bundleid = '';
    var gametitle = '';
    var gamelink = '';
    var count = 0;
    var bundleroot = document.getElementById('collapseBundles');

    if (location.href.indexOf('gift_id') > - 1)
    {
        bundletitle = document.getElementById('indie_gala_2').children[0].children[0].innerText.substring(2);
        bundle = document.getElementById('steam-key');
        var allkeys = bundle.getElementsByClassName('game-key-string');
        for (var n = 0; n < allkeys.length; n++)
        {
            gametitle = allkeys[n].getElementsByClassName('span-title') [0].getElementsByTagName('a') [0].innerText.replace(reg_replace,'_');
            gamelink = allkeys[n].getElementsByClassName('span-title') [0].getElementsByTagName('a') [0].href;
            result = result + '<P>' + (n + 1) + ', ' + '<a target="_blank" class="game-steam-url" href="' + gamelink + '">' + gametitle + '</a>' + ', ' + gamelink + '</P>';
            count++;
        }
    }

    else if (bundleroot.getAttribute('aria-expanded') == 'true')
    {
        bundleslist = document.getElementById('accordion2').children;
        for (var i = 0; i < bundleslist.length; i++)
        {
            //获得Bundle分类名称
            var collapse = bundleslist[i].children[0].getElementsByTagName('a') [0].hash.substring(1);
            //获得当前分类
            bundletype = document.getElementById(collapse);
            //判断当前分类是否展开
            if (bundletype.getAttribute('aria-expanded') == 'true')
            {
                //获得当前分类下的所有bundle
                bundles = bundletype.getElementsByClassName('panel-heading');
                for (var j = 0; j < bundles.length; j++)
                {
                    //判断当前bundle是否展开
                    if (bundles[j].getElementsByTagName('a') [0].getAttribute('aria-expanded') == 'true')
                    {
                        bundleid = bundles[j].getElementsByTagName('a') [0].hash.substring(1);
                        bundle = document.getElementById(bundleid);
                        var allkeys = bundle.getElementsByClassName('game-key-string');
                        for (var n = 0; n < allkeys.length; n++)
                        {
                            if (collapse == 'collapseGiveaway')
                            {
                                bundletitle = 'Giveaways';
                                index = j;
                            }
                            else
                            {
                                bundletitle = bundles[j].getElementsByTagName('a') [0].innerText;
                                index = n;
                            }
                            gametitle = allkeys[n].getElementsByClassName('span-title') [0].getElementsByTagName('a') [0].innerText.replace(reg_replace,'_');
                            gamelink = allkeys[n].getElementsByClassName('span-title') [0].getElementsByTagName('a') [0].href;
                            result = result + '<P>' + (index + 1) + ', ' + '<a target="_blank" class="game-steam-url" href="' + gamelink + '">' + gametitle + '</a>' + ', ' + gamelink + '</P>';
                            count++;
                        }
                    }
                }
            }
            else
            {
            }
        }
    }
    if (bundletitle === '')
        shownote();
    bundletitlebox.innerHTML = '<P><Strong>' + 'Indiegala - ' + bundletitle + '</Strong> </P>';
    statusbox.innerHTML = result;
    $('#statusbox').append('<P><Strong>' + '提取数量: ' + count + '</Strong> </P>');
};

var flg0=1;
var interval=0;
var waiting;
unsafeWindow.autoConfirm = function () {
    btn=document.getElementById('autoConfirm');
    btn.innerText="CDKEY获取中...";
    waiting = setInterval(function () { gekey(); }, 100);
};

var num = 0;
unsafeWindow.gekey = function() {

    //  var result = '';
    //  var allElements = [];
    //  var bundletitle = '';
    //  var bundleid = '';
    //   var gametitle = '';
    //   var gamelink = '';
    //   var count = 0;
    var bundleroot = document.getElementById('collapseBundles');

    if (location.href.indexOf('gift_id') > - 1)
    {
        if(flg0)
        {
            flg0=0;
            items=document.getElementsByClassName('span-key steam-btn');
            item = items[num].children;
            try
            {
                button=item[5];
                button.click();
            }
            catch(e)
            {
                flg0=1;
                //alert(e);
            }
            num += 1;
            if (num >= items.length) {
                clearInterval(waiting) ;
                num=0;
                btn=document.getElementById('autoConfirm');
                btn.innerText="自动获取CDKEY";}
        }
    }
    else if (bundleroot.getAttribute('aria-expanded') == 'true')
    {
        var bundle_expanded=false;
        bundleslist = document.getElementById('accordion2').children;
        for (var i = 0; i < bundleslist.length; i++)
        {
            //获得Bundle分类名称
            var collapse = bundleslist[i].children[0].getElementsByTagName('a') [0].hash.substring(1);
            //获得当前分类
            bundletype = document.getElementById(collapse);
            //判断当前分类是否展开
            if (bundletype.getAttribute('aria-expanded') == 'true')
            {
                //获得当前分类下的所有bundle
                bundles = bundletype.getElementsByClassName('panel-heading');
                for (var j = 0; j < bundles.length; j++)
                {
                    //判断当前bundle是否展开
                    if (bundles[j].getElementsByTagName('a') [0].getAttribute('aria-expanded') == 'true')
                    {
                        bundle_expanded=true;
                        bundleid = bundles[j].getElementsByTagName('a') [0].hash.substring(1);
                        bundle = document.getElementById(bundleid);

                        if(flg0)
                        {
                            flg0=0;
                            items = bundle.getElementsByClassName('span-key steam-btn');
                            item = items[num].children;
                            try
                            {
                                button=item[5];
                                button.click();
                            }
                            catch(e)
                            {
                                flg0=1;
                                //alert(e);
                            }
                            num += 1;
                            if (num >= items.length)
                            {
                                clearInterval(waiting);
                                num=0;
                                btn=document.getElementById('autoConfirm');
                                btn.innerText="自动获取CDKEY";
                            }
                        }
                    }
                }
            }
            else
            {
            }
        }

        if (!bundle_expanded)
        {
            clearInterval(waiting) ;
            num=0;
            btn=document.getElementById('autoConfirm');
            btn.innerText="自动获取CDKEY";
            shownote();
        }
    }

};

unsafeWindow.fn_fetchserial = function (code, steam_url, target) {


    //function fn_fetchserial(code, steam_url, target){

    if (globalAjaxSemaphore == true) { return; }
    //if (!confirm("Are you sure you want to discover the serial? You won't be able to create a permalink of it or trade it!")) { return; }

    var gameId = get_game_id_from_steam_url(steam_url);

    $.ajax({
        type: "GET",
        url: '/myserials/syncget',
        dataType: "json",
        data: {
            code: 			code,
            cache: 			false,
            productId: 		gameId,
        },
        beforeSend: function (jqXHR, settings){;
                                               $("#permbutton_"+code).hide();
                                               $("#fetchlink_"+code).hide();
                                               $("#info_key_"+code).hide();
                                               $("#fetching_"+code).fadeIn();
                                               start_steam_req(code);
                                              },
        success: function(data,textStatus){
            end_steam_req(code);
            // alert(data.serial_number);
            $(target).parent().prev().find('.btn-convert-to-trade').remove();
            $("#serial_n_"+code).val(data.serial_number);
            $("#fetching_"+code).hide();
            $("#info_key_"+code).hide();
            $("#serial_"+code).fadeIn();
            //alert('success');
            flg0=1;
        },
        error: function (xhr, ajaxOptions, thrownError){
            alert(data);
            end_steam_req(code);
            num -= 1;
            flg0=1;
        },
    });

    //}
};

unsafeWindow.shownote = function () {
    if (!$('#note').is(':visible')) {
        $('#note').css({
            display: 'block',
            top: '-100px'
        }).animate({
            top: '+200'
        }, 500, function () {
            setTimeout(out, 3000);
        });
    }
};

unsafeWindow.out = function () {
    $('#note').animate({
        top: '0'
    }, 500, function () {
        $(this).css({
            display: 'none',
            top: '-100px'
        });
    });
};
$('#header-title').after('<div id="mainbox" class="account-settings" style="margin-top: 10px; mini-height:220px;margin-bottom: 0px;text-align:left;"></div>');
$('#mainbox').append('<div id="buttonbox" style="margin-top: 10px; margin-bottom: 10px;align:left;"></div>');
$('#mainbox').append('<div id="bundletitlebox" style="margin-top: 10px; margin-bottom: 0px;"></div>');
$('#mainbox').append('<div id="keybox" style="margin-top: 10px; margin-bottom: 0px;"></div>');
$('#mainbox').append('<div id="statusbox" style="margin-top: 10px; margin-bottom: 0px;"></div>');
$('#buttonbox').append('<button onclick="getbundle(\'key\')" class="order-button-profile">复制CDKEY</button> ');
if (location.href.indexOf('profile') > - 1)
{
    $('#buttonbox').append('<button onclick="getbundle(\'gift\')" class="order-button-profile">复制礼物链接</button>');
}
if (ShowGetSteamLink)
{
    $('#buttonbox').append('<button onclick="getlink()" class="order-button-profile">复制Steam链接</button>');
}
$('#buttonbox').append('<button id="autoConfirm" onclick="autoConfirm()" class="order-button-profile">自动提取CDKEY</button>');
$('#buttonbox').append('<button onclick="clearbox()" class="order-button-profile">重置</button>');
$('#buttonbox').append('</br><label style="margin-top: 10px;margin-right: 10px;"><input id="name_switcher" type="checkbox" name="checkbox" checked>包含游戏名称</label>');
if (location.href.indexOf('profile') > - 1)
{
    $('#buttonbox').append('<label style="margin-top: 10px;margin-right: 10px;"><input id="date_switcher" style="" type="checkbox" name="checkbox" unchecked>礼物链接按购买时间排序</label>');
}
$('#keybox').append('<textarea rows="15" cols="80" name="message" id="giftmessage" style="height:200px;width:100%;");></textarea>');
var internalStyleSheet = document.createElement('style');
internalStyleSheet.setAttribute('type', 'text/css');
internalStyleSheet.textContent = '\n' +
    '#note{position:absolute;width:200px;padding:20px;background:#2E2E2E;border:1px solid #ccc;left:45%;z-index:9999;display:none;} ' + '\n' +
    '\n';
document.getElementsByTagName('head') [0].appendChild(internalStyleSheet);
var note = document.createElement('div');
note.setAttribute('id', 'note');
note.setAttribute('style', 'color:#999999');
note.innerHTML = '请展开要提取的慈善包';
document.getElementsByTagName('body') [0].appendChild(note);
clearbox();