// ==UserScript==
// @name Amazon a Dolar Tarjeta
// @namespace sharkiller-amazon-dolar-tarjeta
// @description Mostrar precios en dolar tarjeta
// @version 1.1
// @include http://www.amazon.com/*
// @include https://www.amazon.com/*
// @include http://amazon.com/*
// @include https://amazon.com/*
// @include http://www.amazon.co.uk/*
// @include https://www.amazon.co.uk/*
// @include http://amazon.co.uk/*
// @include https://amazon.co.uk/*
// @include http://www.amazon.ca/*
// @include https://www.amazon.ca/*
// @include http://amazon.ca/*
// @include https://amazon.ca/*
// @include http://www.amazon.es/*
// @include https://www.amazon.es/*
// @include http://www.amazon.fr/*
// @include https://www.amazon.fr/*
// @require http://code.jquery.com/jquery-latest.js
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// ==/UserScript==
(function() {
if( typeof jQuery === 'undefined' ){
return false;
}
GM_addStyle(`
.price-ars {
color: green;
display: inline-block;
margin: 0 8px;
background: linear-gradient(to bottom,lightblue,white,lightblue);
border-radius: 8px;
padding: 0 6px;
}
#sc-buy-box .price-ars {
font-size: 12px;
display: block;
padding: 0;
margin: 0;
background: none;
}
div#sc-buy-box {
margin-bottom: -14px;
}
`);
String.prototype.endsWith = function (pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.lastIndexOf(pattern) === d;
};
var amazonCurrencies = ["USD", "GBP", "CAD", "EUR"];
var currencyFrom;
function regularPriceParser(price, currency) {
return parseFloat(price.replace(/,/g, "."));
}
var currencies = {
"USD" : {
symbol: "$",
priceRegex: /\$\s*([\d,.]+\d)/
},
"GBP" : {
symbol: "£",
priceRegex: /£\s*([\d,.]+\d)/
},
"CAD" : {
symbol: "CDN$",
priceRegex: /CDN\$\s*([\d,.]+\d)/
},
"EUR" : {
symbol: "EUR",
priceRegex: /EUR\s*([\d,.]+\d)/
}
};
if (document.domain.endsWith("com")) {
currencyFrom = "USD";
// amazon.co.uk
} else if (document.domain.endsWith("co.uk")) {
currencyFrom = "GBP";
// amazon.ca
} else if (document.domain.endsWith("ca")) {
currencyFrom = "CAD";
// amazon.fr
} else if (document.domain.endsWith("fr")) {
currencyFrom = "EUR";
} else {
return;
}
var LAST_RUN = "last_run_";
var CURRENCY_RATE = "currency_rate_";
var decimalPlaces = 2;
var prefixCurrencySymbol = true;
var taxPorcentage = 35;
var rounding = Math.pow(10, decimalPlaces);
var rate = GM_getValue(CURRENCY_RATE + currencyFrom);
var lastRun = GM_getValue(LAST_RUN + currencyFrom, "01/01/0001");
var currencyTo = 'ARS';
var todayDate = new Date();
var todayString = todayDate.getDate() + "/" + todayDate.getMonth() + "/" + todayDate.getFullYear();
var currencyToSymbol = 'ARS $';
function fetchCurrencyData(coin, callback) {
GM_xmlhttpRequest({
method: "GET",
url: "http://download.finance.yahoo.com/d/quotes.csv?s=" + coin + currencyTo + "=X&f=l1&e=.csv",
onload: function(responseDetails) {
var rate = responseDetails.responseText.replace(/[\r\n]/g, "");
GM_setValue(CURRENCY_RATE + coin, rate);
GM_setValue(LAST_RUN + coin, todayString);
callback();
},
onerror: function(responseDetails) {
alert("Error fetching currency data for " + coin);
}
});
}
function appendConversion(price, matched) {
var originalPrice = regularPriceParser(matched, currencyFrom);
console.log(originalPrice);
if (isNaN(originalPrice)) {
return price;
}
var converted = formatCurrency(originalPrice * (rate * (taxPorcentage / 100 + 1)), rounding,
currencyToSymbol, prefixCurrencySymbol);
return price + "<div class='price-ars'>" + converted + "</div>";
}
function formatCurrency(num, rounding, symbol, prefix) {
sign = (num == (num = Math.abs(num)));
num = Math.floor(num * rounding + 0.50000000001);
cents = num % rounding;
num = Math.floor(num / rounding).toString();
if (cents < 10) {
cents = "0" + cents;
}
for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
num = num.substring(0, num.length - (4 * i + 3)) + ',' +
num.substring(num.length-(4*i+3));
}
if (prefix) {
return (symbol + ((sign)?'':'-') + num + '.' + cents);
} else {
return (((sign)?'':'-') + num + '.' + cents + symbol);
}
}
function convertCurrency(carrito) {
if(carrito && jQuery('.a-size-base.a-text-bold:contains(Order summary)').length == 0 && jQuery('.a-size-base.a-text-bold:contains(Récapitulatif de commande)').length == 0){
return false;
}else{
if(jQuery('#sc-buy-box.price-ars-cart').length == 0){
jQuery('#sc-buy-box').addClass('price-ars-cart');
}else{
return false;
}
}
console.log('Cambiando precios', carrito);
var currency = currencies[currencyFrom];
jQuery('.a-column.a-span3.a-text-right.a-span-last.sc-value').removeClass('a-span3').addClass('a-span4');
jQuery('.a-column.a-span9.sc-text').removeClass('a-span9').addClass('a-span8');
jQuery('a.a-popover-trigger.a-declarative:contains(Estimated)').html('Shipping & handling <i class="a-icon a-icon-popover"></i>');
jQuery('span:not(:has(*))').each(function(){
var text = jQuery(this).text();
if( jQuery(this).children().length == 0 && text.indexOf(currency.symbol) != -1 && text.indexOf('ARS') == -1)
jQuery(this).html( text.replace(currency.priceRegex, appendConversion) );
});
}
jQuery( document ).ready(function(){
if (rate === undefined || todayString !== lastRun) {
fetchCurrencyData(currencyFrom, function() {
rate = GM_getValue(CURRENCY_RATE + currencyFrom);
convertCurrency();
});
} else {
console.log(rate);
convertCurrency();
}
jQuery('.a-fixed-right-grid-col.a-col-right').bind("DOMSubtreeModified",function(e){
convertCurrency(true);
});
/*jQuery('#sc-buy-box').after('<button id="precioCarrito" type="button" class="a-button a-button-span12 a-button-primary" style="margin: 10px 0;"><span class="a-button-inner" style="padding: 7px 0;">Actualizar precios del carrito</span></button>');
jQuery('#precioCarrito').click(function(){
convertCurrency(true);
});*/
});
})();