Flight Rising - Add Auction Search Links to Market Items

Adds Auction House search buttons to market item listings, allowing users to easily check for better prices.

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Flight Rising - Add Auction Search Links to Market Items
// @version      0.2
// @author       Jicky
// @description  Adds Auction House search buttons to market item listings, allowing users to easily check for better prices.
// @namespace    https://greasyfork.org/users/547396
// @match        https://www1.flightrising.com/market
// @match        https://www1.flightrising.com/market/*
// @icon         https://www.google.com/s2/favicons?domain=flightrising.com
// @grant        none
// @run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    var currency;
    // currency='0'; // Uncomment if you only want to search treasure listings
    // currency='1'; // Uncomment if you only want to search gem listings
    var currencyTable = { 'treasure': '0', 'gems': '1' };
    var tab;
    var tabTable = {
        'apparel': 'app',
        'familiars': 'fam',
        'specialty': 'specialty',
        'genes': 'specialty',
        'scenes': 'specialty',
        'skins': 'skins',
        'battle': 'battle',
        'bundles': 'other'
    }

    // INSERTING AH LINK ICONS
    // ------

    function insertAhLinkIcons() {
        if (document.querySelector('a.market-item-ah-search')) {
            return; // Links have already been added
        }
        var listings = document.querySelectorAll('span.market-item-result');
        if (listings.length==0) { return; }
        if (!tab) { tab = parseTabName(); }
        if (!currency) { currency = parseCurrency(); }
        for (const span of listings) {
            let name = parseListingName(span);
            if (!name) { return; } // Done; we've hit empty listings.
            let link = buildAhLinkIcon(name, tab, currency);
            span.querySelector('span.market-item-icons').appendChild(link);
        }
    }
    function buildAhLinkIcon(itemName, tab, currency) {
        let url = `https://www1.flightrising.com/auction-house/buy/realm/${tab}?itemname=${itemName}&perpage=50&sort=unit_cost_asc`
        if (currency=='0') { url=`${url}&currency=${currency}`; }
        let link = document.createElement('a');
        link.innerHTML = `<a class="tooltip-icon market-item-ah-search" href="${url}" target="_blank"><img src="/static/layout/game-database/button-auction-house.png" class="common-tooltip" border="0" style="max-width: 20px; max-height: 20px;"></a>`;
        return link;
    }


    // PARSING
    // ------

    function parseTabName() {
        let link = document.querySelector('div.common-tab-selected a');
        let url = link.getAttribute('href');
        let matches = /(treasure|gem)\/(?<tab>\w+)/.exec(url);
        return tabTable[matches.groups.tab];
    }
    function parseCurrency() { // treasure=0, gems=1
        if (window.location.href.includes('/gem')) { return '1'; }
        else { return '0'; }
    }
    function parseListingName(span) {
        let inner = span.querySelector('[data-name]');
        if (inner) { return inner.getAttribute('data-name'); }
        else { return false; }
    }


    // WATCH FOR ITEMS TO LOAD
    // ------

    const observer = new MutationObserver(function(mutationsList, observer) {
        insertAhLinkIcons();
    });
    const container = document.querySelector('div#market-results');
    observer.observe(container, {childList: true});

})();