FaceIT Extra info in Match Room

More info for FaceIT match room.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        FaceIT Extra info in Match Room
// @version     0.4.0
// @description More info for FaceIT match room.
// @author      BONNe
// @include     https://www.faceit.com/*
// @connect     api.worldoftanks.eu
// @connect     api.worldoftanks.ru
// @connect     api.worldoftanks.com
// @license     MIT License
// @namespace https://greasyfork.org/users/63466
// ==/UserScript==
/* jshint -W097 */
'use strict';

// Inject script
angular.element(document).ready(function()
{
    var $body = angular.element(document.body);
    var $rootScope = $body.injector().get('$rootScope');

    $rootScope.$on('USER_LOGGED_IN', function()
    {
        initUser($rootScope);
    });

    $rootScope.$on('USER_LOGGED_OUT', function()
    {
        initUser($rootScope);
    });

    $rootScope.$watch(
        function()
        {
            setTimeout(function()
            {
                runStatsFunction();
            }, 5000);
        });
});


// Run script that will collect and add all information
function runStatsFunction()
{
    var gameElement = $('section.match-vs');

    if (angular.element(gameElement).length)
    {
        var matchItems = $(".match-team-member .match-team-member__details__name");

        matchItems.each(function(idx, el)
        {
            var href = $(el.getElementsByTagName("a")[0]).attr("href");

            if (href)
            {
                var splitHref = href.split("/");
                var nickIdx = splitHref.length - 1;
                if (splitHref[nickIdx])
                {
                    $.get("https://api.faceit.com/api/nicknames/" + splitHref[nickIdx], function(data)
                    {
                        var game = window.location.href.split('/')[4];

                        if ($(matchItems[idx]).has('.match-team-member_custom_info').length === 0)
                        {
                            $(matchItems[idx]).append("<div class='match-team-member_custom_info'></div>");
                            var $customInfo = $(matchItems[idx]).children(".match-team-member_custom_info");
                            var $controlList = $(matchItems[idx]).parent().parent().children(".match-team-member__controls");

                            var playload = data['payload']['games'][game];
                            var skill = playload['faceit_elo'];
                            var country = data['payload']['country'];

                            $customInfo.append('<div class="custom-info-user-info"></div>');
                            $customInfo.append('<div class="custom-info-user-ratings"></div>');

                            getUserDetails(game, playload['game_id'], country, $controlList, $customInfo);
                            addUserSkill(game, skill,  $customInfo);
                        }
                    });
                }
            }
        });
    }
}


// Get and add given user information
function getUserDetails(game, userID, country, $controlList, $customInfo)
{
    switch (game)
    {
        case "wot_EU":
            $.ajax(
            {
                url: 'https://api.worldoftanks.eu/wot/account/info/?application_id=c3b3e8c9b7c294ff52b43396b83384a9&account_id=' + userID,
                type: 'GET',
                timeout: 30000,
                error: function()
                {
                    return true;
                },
                success: function(json)
                {
                    var userName = json['data'][userID]['nickname'];
                    var wgRating = json['data'][userID]['global_rating'];
                    var clanID = json['data'][userID]['clan_id'];
                    var profileLink = "http://worldoftanks.eu/en/community/accounts/" + userID + "-" + userName + "/";

                    addWGIcon(profileLink, $controlList);
                    addFlagIcon(country, $controlList);

                    addUserName(userName, profileLink, $customInfo);
                    addUserRating(wgRating, $customInfo);
                    getClanDetails(clanID, game, $customInfo, $controlList);
                }
            });

            break;
        case "wot_RU":
            $.ajax(
            {
                url: 'https://api.worldoftanks.ru/wot/account/info/?application_id=c3b3e8c9b7c294ff52b43396b83384a9&account_id=' + userID,
                type: 'GET',
                timeout: 30000,
                error: function()
                {
                    return true;
                },
                success: function(json)
                {
                    var userName = json['data'][userID]['nickname'];
                    var wgRating = json['data'][userID]['global_rating'];
                    var clanID = json['data'][userID]['clan_id'];
                    var profileLink = "http://worldoftanks.ru/ru/community/accounts/" + userID + "-" + userName + "/";
                    var clanLink = "https://ru.wargaming.net/clans/wot/" + clanID + "/";

                    addWGIcon(profileLink, $controlList);
                    addFlagIcon(country, $controlList);

                    addUserName(userName, profileLink, $customInfo);
                    addUserRating(wgRating, $customInfo);
                    getClanDetails(clanID, game, $customInfo, $controlList);
                }
            });
            break;
        case "wot_NA":
            $.ajax(
            {
                url: 'https://api.worldoftanks.com/wot/account/info/?application_id=c3b3e8c9b7c294ff52b43396b83384a9&account_id=' + userID,
                type: 'GET',
                timeout: 30000,
                error: function()
                {
                    return true;
                },
                success: function(json)
                {
                    var userName = json['data'][userID]['nickname'];
                    var wgRating = json['data'][userID]['global_rating'];
                    var clanID = json['data'][userID]['clan_id'];
                    var profileLink = "http://worldoftanks.com/en/community/accounts/" + userID + "-" + userName + "/";
                    var clanLink = "https://na.wargaming.net/clans/wot/" + clanID + "/";

                    addWGIcon(profileLink, $controlList);
                    addFlagIcon(country, $controlList);

                    addUserName(userName, profileLink, $customInfo);
                    addUserRating(wgRating, $customInfo);
                    getClanDetails(clanID, game, $customInfo, $controlList);
                }
            });
            break;
        default:
    }
}


// Get information about clan
function getClanDetails(clanID, game, $customInfo, $controlList)
{
    if (!isNaN(parseFloat(clanID)))
    {
        switch (game)
        {
            case "wot_EU":
                $.ajax(
                    {
                        url: 'https://api.worldoftanks.eu/wgn/clans/info/?application_id=c3b3e8c9b7c294ff52b43396b83384a9&clan_id=' + clanID,
                        type: 'GET',
                        timeout: 30000,
                        error: function()
                        {
                            return true;
                        },
                        success: function(json)
                        {
                            var clanLink = "https://eu.wargaming.net/clans/wot/" + clanID + "/";
                            var clanTag = json['data'][clanID]['tag'];
                            var clanIcon = json['data'][clanID]['emblems']['x64']['portal'];

                            addClanDetails(clanTag, clanLink, $customInfo);
                            addClanIcon(clanIcon, clanLink, $controlList);
                        }
                    });

                break;
            case "wot_RU":
                $.ajax(
                    {
                        url: 'https://api.worldoftanks.ru/wgn/clans/info/?application_id=c3b3e8c9b7c294ff52b43396b83384a9&clan_id=' + clanID,
                        type: 'GET',
                        timeout: 30000,
                        error: function()
                        {
                            return true;
                        },
                        success: function(json)
                        {
                            var clanLink = "https://ru.wargaming.net/clans/wot/" + clanID + "/";
                            var clanTag = json['data'][clanID]['tag'];
                            var clanIcon = json['data'][clanID]['emblems']['x64']['portal'];

                            addClanDetails(clanTag, clanLink, $customInfo);
                            addClanIcon(clanIcon, clanLink, $controlList);
                        }
                    });
                break;
            case "wot_NA":
                $.ajax(
                    {
                        url: 'https://api.worldoftanks.com/wgn/clans/info/?application_id=c3b3e8c9b7c294ff52b43396b83384a9&clan_id=' + clanID,
                        type: 'GET',
                        timeout: 30000,
                        error: function()
                        {
                            return true;
                        },
                        success: function(json)
                        {
                            var clanLink = "https://na.wargaming.net/clans/wot/" + clanID + "/";
                            var clanTag = json['data'][clanID]['tag'];
                            var clanIcon = json['data'][clanID]['emblems']['x64']['portal'];

                            addClanDetails(clanTag, clanLink, $customInfo);
                            addClanIcon(clanIcon, clanLink, $controlList);
                        }
                    });
                break;
            default:
        }
    }
}


// Add ELO rating value to custom info panel
function addUserSkill(game, skill, $customInfo)
{
    // Common, if you havn't got premium, then you should not see this.
    if (userHasPremium)
    {
        var text = "ELO: <strong style='color: " + getLeagueColor(game, skill) + "'>" + skill + "</strong> ";
        $customInfo.children(".custom-info-user-ratings").append(text);
    }
}


// Add username to custom info panel
function addUserName(userName, profileLink, $customInfo)
{
    var text = 'Nickname: <a target="_blank" href="' + profileLink + '"><strong>' + userName + '</strong></a>';

    $customInfo.children(".custom-info-user-info").append(text);
}

// Add user ratings to custom info panel
function addUserRating(wgRating, $customInfo)
{
    var text = 'WG Rating: <strong style="color: ' + wgColor(wgRating) + '">' + wgRating + '</strong>';

    $customInfo.children(".custom-info-user-ratings").append(text);
}

// Add clan details to custom info panel
function addClanDetails(clanTag, clanLink, $customInfo)
{
    var text = '<br />Clan: <strong><a target="_blank" href="' + clanLink + '">' + clanTag + '</a></strong>';

    $customInfo.children(".custom-info-user-info").append(text);
}


// Add User WG profile icon to control list panel
function addWGIcon(link, $controlList)
{
    var wgIcon = '<a target="_blank" href="' + link + '" tooltip="WG Account" ' +
        'class="btn btn-sm btn-text btn-link btn-link-primary match-team-member__controls__button">' +
        '<img src="http://cdn-frm-eu.wargaming.net/wot/eu//profile/3/83/15/photo-thumb-535158303-56af78dc.jpeg?_r=1454340319" ' +
        'style="width:18px;margin-top:6px;" class="icon-md"></img> </a>';

    $(wgIcon).insertBefore($controlList.children(".match-team-member__controls__space"));
}


// Add User Country flag icon to control list panel
function addFlagIcon(country, $controlList)
{
    var flagIcon = '<button class="btn btn-sm btn-text btn-link btn-link-primary match-team-member__controls__button">' +
        '<img src="https://flags.fmcdn.net/data/flags/small/' + country + '.png" class="icon-md" alt="' + country + '" Flag" height="18px" width="18px"></img></button>';

    $(flagIcon).insertBefore($controlList.children(".match-team-member__controls__space"));
}


// Add Clan icon to control list panel
function addClanIcon(clanIcon, clanLink, $controlList)
{
    var icon = '<a target="_blank" href="' + clanLink + '" tooltip="WG Clan" ' +
        'class="btn btn-sm btn-text btn-link btn-link-primary match-team-member__controls__button">' +
        '<img src="' + clanIcon + '" style="width:18px;margin-top:6px;" class="icon-md"></img> </a>';

    $(icon).insertBefore($controlList.children(".match-team-member__controls__space"));
}


// Get league color depending which game user plays.
function getLeagueColor(game, skill)
{
    var color = "grey";

    switch (game)
    {
        case "wot_EU":
            color = "#912600";
            if (skill > 1099) color = "silver";
            if (skill > 1499) color = "gold";
            if (skill > 1849) color = "#b9f2ff";
            if (skill > 1949) color = "orange";
            break;
        case "wot_RU":
            color = "#912600";
            if (skill > 1099) color = "silver";
            if (skill > 1499) color = "gold";
            if (skill > 1849) color = "#b9f2ff";
            if (skill > 1949) color = "orange";
            break;
        case "wot_NA":
            color = "#912600";
            if (skill > 1099) color = "silver";
            if (skill > 1499) color = "gold";
            if (skill > 1849) color = "#b9f2ff";
            if (skill > 1949) color = "orange";
            break;
        default:
            if (skill > 800) color = "green";
            if (skill > 1100) color = "gold";
            if (skill > 1700) color = "orange";
            if (skill > 2000) color = "red";
    }

    return color;
}


// Get wg rating color.
function wgColor(skill)
{
    var color = "black";

    if (skill > 2020) color = "#cd3333";
    if (skill > 4185) color = "#d7b600";
    if (skill > 6340) color = "#6d9521";
    if (skill > 8525) color = "#4a92b7";
    if (skill > 9930) color = "#83579d";

    return color;
}


// Init user
function initUser($scope)
{
    if ($scope.currentUser === null)
    {
        userHasPremium = false;
    }
    else
    {
        userHasPremium = $scope.currentUser.membership.type === "premium";
    }
}


var userHasPremium = false;