Calculate prices in any currency you want
// ==UserScript== // @name DealeXtreme Currency Calculator // @description Calculate prices in any currency you want // @version 1.0.18 // @icon data:image/png;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM+0NaXJqx6zzbAsusyvKrnLrSS6xKIGvtK3QnDp251cyqsf38amG+Xn2ZgzAAAAAAAAAADUukuhv5sA/9zIa5TGphGFw6EEiuDOeyLgznwb3st2HNW+T1a6kwC00rdDaeDPfWq9mADowqAG4fTu0DfZxWJ4sIMA/9O5Srz28dcIyaodr8SiB60AAAAAAAAAAAAAAADx6scBzbAudsCdAMjRt0Bt4M54ZsWjEdPBngHmwZ4A4da+WZkAAAAAAAAAAMmqIH3DoQV8AAAAAAAAAAAAAAAAAAAAAAAAAADEogp9uZIAmefZlzfaxGCpuI8A/8SjCuvs4asrAAAAAAAAAADHpxW0wp8EtePTiQcAAAAAAAAAAObZlxbOsjSSvJYAyt7KdGbYwll4v5oA9MmqHrTGphDixKINwNrHZx8AAAAAyqsescalD8HYwl2t18FYrNfAVazMsCu5v5oAxt3KbmLh0ICrvZgA/86yNcDi04YE3st0U76ZAP/Lrib/8Oe+RNS8TInOszWUzbEwqM2xLqnOsjGpyq0kpNS8THfv57wy0rlDq8uvM8Pq3KE4AAAAAAAAAADTu0qax6gVxufZmmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP//AAADOAAAPZkAAD7DAAD/RwAAPMMAAAEZAAADOQAA//8AAP//AAD//wAA//8AAA== // @include http://dx.com/* // @include https://dx.com/* // @include http://*.dx.com/* // @include https://*.dx.com/* // @require https://code.jquery.com/jquery-latest.min.js // @grant GM_getValue // @grant GM_setValue // @grant GM_listValues // @grant GM_registerMenuCommand // @grant GM_xmlhttpRequest // @namespace https://greasyfork.org/users/13667 // ==/UserScript== this.$ = this.jQuery = jQuery.noConflict(true); function fetchCurrencyData() { GM_setValue('update_time', d.getTime().toString()); GM_xmlhttpRequest({ method: "GET", url: "http://api.fixer.io/latest?symbols=" + currency_from + "," + currency_to, onload: function(response) { console.debug(response); obj = JSON && JSON.parse(response.responseText) || $.parseJSON(response.responseText); console.debug(obj); if(currency_from == "EUR") obj.rates[currency_from] = 1; if(currency_to == "EUR") obj.rates[currency_to] = 1; if(!obj.rates[currency_from] || !obj.rates[currency_to]) { alert("Error fetching currency data. \r\n\r\nError: " + obj.err); return; } rate = parseFloat((parseFloat(obj.rates[currency_to]) / parseFloat(obj.rates[currency_from])).toFixed(5)); GM_setValue("rate", rate.toString()); if(update_notify) { alert("Exchange Rate Updated: " + currency_from + " = " + rate + " " + currency_to); } doCalc(); }, onerror: function(responseDetails) { if(update_notify) { alert("Error fetching currency data"); } } }); } function updateSetting(s, d) { if(d) { GM_setValue(s, (eval(s)^true)); } else { var newSetting = prompt("Enter new value", eval(s)); if (newSetting === '' || newSetting === null) { alert("Invalid value. Please try again."); return; } if (typeof(newSetting) == "string") newSetting = newSetting.toUpperCase(); GM_setValue(s, newSetting); } GM_setValue('update_time', 0); var r = confirm(s + ' set to ' + newSetting + '\n\nReload page?'); if (r == true) { window.location.reload(); } } function addMenu() { GM_registerMenuCommand("Search Symbol [" + search_string + "]", function(){updateSetting('search_string')}); GM_registerMenuCommand("From Currency [" + currency_from + "]", function(){updateSetting('currency_from')}); GM_registerMenuCommand("To Currency [" + currency_to + "]", function(){updateSetting('currency_to')}); GM_registerMenuCommand("Exchange Rate Update (Hours) [" + update_interval + "]", function(){updateSetting('update_interval')}); GM_registerMenuCommand("Update Notification [" + update_notify + "]", function(){updateSetting('update_notify', true)}); GM_registerMenuCommand("Update Rate Now [" + rate + "]", function(){fetchCurrencyData()}); } var d = new Date(); var today = d.getTime(); var update_time = parseInt(GM_getValue('update_time', 0)); var update_interval = parseInt(GM_getValue('update_interval', 24)); var update_notify = parseInt(GM_getValue('update_notify', 1)); var search_string = GM_getValue('search_string', '$'); var currency_from = GM_getValue('currency_from', 'USD'); var currency_to = GM_getValue('currency_to', 'SEK'); var rate = parseFloat(GM_getValue('rate', 6.5)); addMenu(); if((today - update_time) > (update_interval * 3600000)) { fetchCurrencyData(); } else { doCalc(); } function doCalc() { jQuery("#price,.price,.total").not(".calcDone").each(function(){ var calc = ''; if(this.id=='price') { var x = parseFloat(jQuery(this).text().replace(",",".")); x = x * parseFloat(rate); x = Math.round(x*Math.pow(10,2))/Math.pow(10,2); calc = currency_to + x; } else { for (var i=1; i < jQuery(this).text().split(search_string).length; i++) { var x = parseFloat(jQuery(this).text().split(search_string)[i].replace(",",".")); x = x * parseFloat(rate); x = Math.round(x*Math.pow(10,2))/Math.pow(10,2); if((jQuery(this).children('del').text().length > 0) && (i == 1)) { calc = '<del>' + currency_to + x + '</del> '; } else { calc = calc + currency_to + x + ' '; } } } jQuery(this).css("height", "auto").addClass("calcDone").append("<br/>" + calc); }); jQuery(".subtotal,.ship_fee,.grand_total").not(":has(span)").each(function(){ var calc = ''; for (var i=1; i < jQuery(this).text().split(search_string).length; i++) { var x = parseFloat(jQuery(this).text().split(search_string)[i].replace(",",".")); x = x * parseFloat(rate); x = Math.round(x*Math.pow(10,2))/Math.pow(10,2); calc = calc + currency_to + x + ' '; } jQuery(this).css("height", "auto").append("<br/><span>" + calc + "</span>"); }); var timeControl = setTimeout(doCalc, 500); }