Greasy Fork

Amazon - Highlight resellers

See instantly if the product really comes from Amazon or from a reseller

目前为 2022-10-30 提交的版本。查看 最新版本

// ==UserScript==
// @name         Amazon - Highlight resellers
// @namespace    graphen
// @version      1.5.0
// @description  See instantly if the product really comes from Amazon or from a reseller
// @license      MIT
// @author       Graphen
// @include      /^https?:\/\/(www|smile)\.amazon\.(cn|in|sg|se|ae|fr|de|it|nl|es|ca|com(\.(mx|au|br|tr|be))?|co\.(uk|jp))\/.*(dp|gp\/(product|video)|exec\/obidos\/ASIN|o\/ASIN|product-reviews)\/.*$/
// @grant        GM_addStyle
// @noframes
// @icon         https://www.amazon.com/favicon.ico
// ==/UserScript==

/* jshint esversion: 6 */

//TODO: Need to fix color insertion to completely override Amazons "!important" rules
(function (doc) {
    'use strict';

    const amazonIsSellerByBuyBox = [
        //American English
            "Ships from\nAmazon US\nSold by\nAmazon US",
        //British English .co.uk
            "Dispatches from\nAmazon\nSold by\nAmazon",
        //Belgian - English .com.be
            "Dispatches from\nAmazon.com.be\nSold by\nAmazon.com.be",
        //Belgian - Netherlands .com.be
            "Verzonden vanuit\nAmazon.com.be\nVerkocht door\nAmazon.com.be",
        //Belgian - French .com.be
            "Expédié par\nAmazon.com.be\nVendu par\nAmazon.com.be",
        //Brazilian / Portuguese
            "Enviado por\nAmazon.com.br\nVendido por\nAmazon.com.br",
        //Canadian
            "Ships from\nAmazon.ca\nSold by\nAmazon.ca",
        //Czech
            "Odesílatel\nAmazon\nProdejce\nAmazon",
        //Dutch
            "Verzonden vanuit\nAmazon\nVerkocht door\nAmazon",
        //French
            "Expédié par\nAmazon\nVendu par\nAmazon",
        //German
            "Versand\nAmazon\nVerkäufer\nAmazon",
        //Italian
            "Spedizione\nAmazon\nVenditore\nAmazon",
        //Japanese
            "Ships from\nAmazon.co.jp\nSold by\nAmazon.co.jp",
            "出荷元\nAmazon.co.jp\n販売元\nAmazon.co.jp",
            "配送方\nAmazon.co.jp\n卖家\nAmazon.co.jp",
        //Mexican / Spanish
            "Envío desde\nAmazon Estados Unidos\nVendido por\nAmazon Estados Unidos",
        //Polish
            "Wysyłka z\nAmazon\nSprzedane przez\nAmazon",
        //Portuguese
            "Enviado de\nAmazon\nVendido por\nAmazon",
        //Spanish
            "Envío desde\nAmazon\nVendido por\nAmazon",
        //Swedish
            "Skickas från\nAmazon\nSäljs av\nAmazon",
        //Turkish
            "Gönderici\nAmazon\nSatıcı\nAmazon",
        //UAE
            "Ships from\nAmazon.ae\nSold by\nAmazon.ae"
    ];

    const amazonIsSellerByMerchInfo = [
        //British English
              "Dispatched from and sold by Amazon.",
              "Dispatched from and sold by Amazon EU Sarl.",
        //Canadian English
              "Ships from and sold by Amazon.ca.",
        //American English
              "Ships from and sold by Amazon.com Services LLC.",
        //Australian English
              "Ships from and sold by Amazon US.",
        //United Arab Emirates English
              "Ships from and sold by Amazon.ae.",
        //German
              "Verkauf und Versand durch Amazon.",
              "Verkauf und Versand durch Amazon EU Sarl.",
              "Verkauf und Versand durch amazon.de.",
        //Spanish
              "Vendido y enviado por Amazon.",
              "Vendido y enviado por Amazon EU Sarl.",
        //French
              "Expédié et vendu par Amazon.",
              "Expédié et vendu par Amazon EU Sarl.",
        //Italian
              "Venduto e spedito da Amazon.",
              "Venduto e spedito da Amazon EU Sarl.",
        //Dutch
              "Verzonden en verkocht door Amazon.",
              "Verzonden en verkocht door Amazon EU Sarl.",
        //Mexican / Spanish
              "Vendido y enviado por Amazon México.",
        //Brazilian / Portuguese
              "Enviado e vendido por Amazon.com.br.",
        //Japanese
              "この商品は、Amazon.co.jp が販売、発送します。"
    ];

    function highlight() {
        // Two different box designs possible: tabularBuybox and mechInfo
        var merchInfo = doc.getElementById("merchant-info");
        var tabularBuybox = doc.getElementById("tabular-buybox");
        if (tabularBuybox) {
            let shippingText = tabularBuybox.innerText.trim()
            //console.log("#AZHR Tabular Buybox: " + shippingText);
            shippingText = shippingText.split("\n", 4).join("\n")
            if (amazonIsSellerByBuyBox.includes(shippingText)) {
                GM_addStyle("#tabular_feature_div * {color:green !important;}");
            }
            else {
                GM_addStyle("#tabular_feature_div * {color:fuchsia !important;}");
            }
        }
        else if (merchInfo) {
            let shippingText = merchInfo.innerText.trim()
            //console.log("#AZHR Merchant Info: " + shippingText);
            if (amazonIsSellerByMerchInfo.includes(shippingText)) {
                merchInfo.style.color = "green";
            }
            else {
                merchInfo.style.color = "fuchsia";
            }
        }
    }

    highlight();

    // Execute again when item variation is selected
    var buyboxParent = doc.getElementById('desktop_buybox');
    if (buyboxParent) {
        var MO = new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                mutation.addedNodes.forEach(function(nodeElement) {
                    if (nodeElement.id === "buybox") {
                        highlight();
                    }
                });
            });
        });
        MO.observe(buyboxParent, { childList: true, subtree: true });
    }

})(document);