// ==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);