Greasy Fork

Greasy Fork is available in English.

Dota2 Market Tool

A script that improves display in market list.

当前为 2017-10-08 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Dota2 Market Tool
// @namespace    https://coding.net/u/sffxzzp
// @version      0.11
// @description  A script that improves display in market list.
// @author       sffxzzp
// @match        http://steamcommunity.com/market/listings/570/*
// @icon         http://steamcommunity.com/favicon.ico
// ==/UserScript==

(function() {
    function addButton () {
        var oriButtonDiv = document.getElementById('market_buyorder_info').children[0];
        var oriButton = document.getElementById('market_commodity_buyrequests');
        var newButton = document.createElement("div");
        newButton.setAttribute("style", "float: right; padding-right: 10px");
        newButton.innerHTML = "<a class=\"btn_darkblue_white_innerfade btn_medium market_noncommodity_buyorder_button\" href=\"javascript:void(0)\"><span>重新加载</span></a>";
        newButton.onclick = function () {handlePage();};
        oriButtonDiv.insertBefore(newButton, oriButton);
    }
    function addPageCtl () {
        var oriPageCtl = document.getElementsByClassName('market_paging_summary')[0];
        var oriPageDiv = document.getElementById('searchResults_ctn');
        var newPageCtl = document.createElement("div");
        newPageCtl.setAttribute("style", "float: right; padding-right: 20px");
        var newPageInput = document.createElement("input");
        newPageInput.setAttribute("class", "filter_search_box market_search_filter_search_box");
        newPageInput.setAttribute("style", "width: 20px;");
        newPageInput.setAttribute("type", "text");
        newPageInput.setAttribute("autocomplete", "off");
        newPageCtl.appendChild(newPageInput);
        var newPageGo = document.createElement("span");
        newPageGo.setAttribute("class", "btn_darkblue_white_innerfade btn_small");
        newPageGo.onclick = function () {
            g_oSearchResults.GoToPage( (newPageInput.value-1), true );
            setTimeout(function(){reloadScript(document.getElementsByClassName("market_recent_listing_row")[0].id);}, 100);
        };
        newPageGo.innerHTML = "&nbsp;Go!&nbsp;";
        newPageCtl.appendChild(newPageGo);
        oriPageDiv.insertBefore(newPageCtl, oriPageCtl);
        var newPageSizeInput = document.createElement("input");
        newPageSizeInput.setAttribute("class", "filter_search_box market_search_filter_search_box");
        newPageSizeInput.setAttribute("style", "width: 30px;");
        newPageSizeInput.setAttribute("type", "text");
        newPageSizeInput.setAttribute("autocomplete", "off");
        var newPageSizeGo = document.createElement("span");
        newPageSizeGo.setAttribute("class", "btn_darkblue_white_innerfade btn_small");
        newPageSizeGo.onclick = function () {
            if (g_oSearchResults.m_cPageSize != newPageSizeInput.value && newPageSizeInput.value < 101) {
                var oldPageSize = g_oSearchResults.m_cPageSize;
                g_oSearchResults.m_cPageSize = newPageSizeInput.value;
                g_oSearchResults.m_cMaxPages = Math.ceil(g_oSearchResults.m_cTotalCount / newPageSizeInput.value);
                g_oSearchResults.GoToPage(g_oSearchResults.m_iCurrentPage, true);
                setTimeout(function(){reloadScript(oldPageSize);}, 10);
            }
        };
        newPageSizeGo.innerHTML = "&nbsp;修改&nbsp;";
        var newPageSizeCtl = document.createElement("div");
        newPageSizeCtl.setAttribute("class", "market_pagesize_options");
        newPageSizeCtl.setAttribute("style", "margin: 0 0 2em 0; font-size: 12px;");
        newPageSizeCtl.innerHTML = "每页显示数:		";
        newPageSizeCtl.appendChild(newPageSizeInput);
        newPageSizeCtl.appendChild(newPageSizeGo);
        document.getElementById('searchResults_ctn').appendChild(newPageSizeCtl);
    }
    function addBanner() {
        var listBanner = document.getElementsByClassName('market_listing_table_header')[0];
        var childBanner = document.createElement("span");
        var nameBanner = listBanner.children[2];
        childBanner.setAttribute("style", "padding-left:4vw;");
        nameBanner.appendChild(childBanner);
        childBanner = document.createElement("span");
        childBanner.setAttribute("style", "width:20%");
        childBanner.setAttribute("class", "market_listing_right_cell");
        childBanner.innerHTML = "宝石";
        listBanner.insertBefore(childBanner, nameBanner);
        childBanner = document.createElement("span");
        childBanner.setAttribute("style", "width:20%");
        childBanner.setAttribute("class", "market_listing_right_cell");
        childBanner.innerHTML = "已解锁款式";
        listBanner.insertBefore(childBanner, nameBanner);
    }
    function reloadScript(oriId) {
        var loaded = document.getElementsByClassName("market_listing_wear");
        if (typeof(oriId) === "number") {
            if (document.getElementById('searchResultsRows').getElementsByClassName('market_listing_row').length == oriId) {
                setTimeout(function(){reloadScript(oriId);}, 200);
            }
            else {
                if (loaded.length === 0) {
                    handlePage();
                }
            }
        }
        else {
            var newId = document.getElementsByClassName("market_recent_listing_row")[0].id;
            if (newId == oriId) {
                setTimeout(function(){reloadScript(oriId);}, 200);
            }
            else {
                if (loaded.length === 0) {
                    handlePage();
                }
            }
        }
    }
    function handlePage() {
        var isHandled = document.getElementsByClassName("market_listing_table_header")[0].children.length;
        if (isHandled > 3) {return False;}
        addBanner();
        var itemDetails = g_rgAssets[570][2];
        var itemUnlocks = [];
        var itemGems = [];
        var reGemDes = /<span style="font-size: 18px;.+?">(.*?)<\/span><br>/gi;
        var reGemColor = /rgb\(.+?\)/gi;
        var reTour = /tournament_info/g;
        var GemInfo, GemDes, GemColor, lastCount, UnlockDes, UnlockColor;
        var i = 0;
        for (var itemDetail in itemDetails) {
            itemGems[i] = "<div>";
            lastCount = itemDetails[itemDetail].descriptions.length - 1;
            GemInfo = itemDetails[itemDetail].descriptions[lastCount].value;
            if (GemInfo.length > 1) {
                GemDes = GemInfo.match(reGemDes);
                GemColor = [];
                if (GemDes === null) {
                    GemDes = GemInfo.match(reTour);
                    if (GemDes !== null) {
                        GemInfo = itemDetails[itemDetail].descriptions[lastCount-1].value;
                    }
                    GemDes = GemInfo.match(reGemDes);
                }
                if (GemDes !== null) {
                    for (var j = 0;j<GemDes.length;j++) {
                        GemColor[j] = GemDes[j].match(reGemColor)[0];
                        GemDes[j] = GemDes[j].replace(/<.+?>/g, '');
                        itemGems[i] += "<span style=\"float: left; line-height: initial; width: 100%; color: "+GemColor[j]+"\">"+GemDes[j]+"</span>";
                    }
                }
                else {
                    itemGems[i] += "<p></p>";
                }
            }
            itemGems[i] += "</div>";
            itemUnlocks[i] = "<div>";
            for (var k = 0; k < itemDetails[itemDetail].descriptions.length; k++) {
                UnlockDes = itemDetails[itemDetail].descriptions[k].value;
                UnlockColor = itemDetails[itemDetail].descriptions[k].color;
                if ((UnlockDes.substr(0, 2) == " *" || UnlockDes.substr(0, 2) == " -") && UnlockColor != "ff4040") {
                    UnlockDes = UnlockDes.substr(3);
                    itemUnlocks[i] += "<span style=\"float: left; line-height: initial; width: 100%; color: #"+UnlockColor+"\">"+UnlockDes+"</span>";
                }
            }
            itemUnlocks[i] += "</div>";
            i++;
        }
        var itemList = document.getElementsByClassName('market_recent_listing_row');
        var nameList;
        for (i=0;i<itemList.length;i++) {
            nameList = itemList[i].children[3];
            var itemGem = document.createElement("span");
            itemGem.setAttribute("style", "width:20%");
            itemGem.setAttribute("class", "market_listing_right_cell");
            itemGem.innerHTML = itemGems[i];
            itemList[i].insertBefore(itemGem, nameList);
            var itemUnlock = document.createElement("span");
            itemUnlock.setAttribute("style", "width:20%");
            itemUnlock.setAttribute("class", "market_listing_right_cell");
            itemUnlock.innerHTML = itemUnlocks[i];
            itemList[i].insertBefore(itemUnlock, nameList);
        }
        var pagelinks = document.getElementsByClassName('market_paging_pagelink');
        for (var pagelink in pagelinks) {
            pagelinks[pagelink].onclick = function() {
                setTimeout(function(){reloadScript(document.getElementsByClassName("market_recent_listing_row")[0].id);}, 10);
            };
        }
        var pageButtons = document.getElementsByClassName('pagebtn');
        for (var pageButton in pageButtons) {
            pageButtons[pageButton].onclick = function() {
                setTimeout(function(){reloadScript(document.getElementsByClassName("market_recent_listing_row")[0].id);}, 10);
            };
        }
    }
    addButton();
    handlePage();
    addPageCtl();
})();