@ -1,3 +1,5 @@ |
|||
node_modules |
|||
package-lock.json |
|||
data |
|||
*.bak |
|||
*.pem |
@ -1,5 +1,14 @@ |
|||
# faircoin-calculator |
|||
|
|||
Very simple Faircoin calculator. |
|||
Simple Faircoin calculator to show the historical value of FairCoin at any given date. |
|||
|
|||
The price dataset is from http://api.fairplayground.info/rawdata/faircoin_prices.csv |
|||
|
|||
You can use it on the web at http://mayel.space/faircoin-calculator/ or install the browser extension which displays the value of FairCoin at the time of each transaction when <a href="https://chain.fair.to/">browsing the blockchain.</a> |
|||
|
|||
Extension available for <a href="https://addons.mozilla.org/en-US/firefox/addon/faircoin-calculator/">Firefox</a> and <a href="https://chrome.google.com/webstore/detail/faircoin-calculator/alnbjhldpppajfdoknbdpienjbiogmlp">Chrome</a>. |
|||
|
|||
If you're happy with the FairCoin Calculator, you can donate at <a href="faircoin:fMGcrP9nAFic4356F4oHDDWVq8YvtJSXZL">fMGcrP9nAFic4356F4oHDDWVq8YvtJSXZL</a> |
|||
|
|||
|
|||
|
|||
The price dataset is getted from http://api.fairplayground.info/rawdata/faircoin_prices.csv |
@ -0,0 +1,147 @@ |
|||
var total_fair; |
|||
var total_euro; |
|||
var total_market; |
|||
|
|||
$(function() { |
|||
|
|||
ajax({ |
|||
type: "GET", |
|||
url: "https://api.fairplayground.info/rawdata/faircoin_prices.csv", |
|||
}, processData); |
|||
|
|||
|
|||
function processData(data) { |
|||
if(data) priceData = csvToArray(data); |
|||
// $(".inner-cont").append("priceData: ");
|
|||
// $(".inner-cont").append(priceData);
|
|||
|
|||
var heads = "<p style='text-align:center; background:#fff'>If you're happy with the FairCoin Calculator, you can donate at <a href='faircoin:fMGcrP9nAFic4356F4oHDDWVq8YvtJSXZL'>fMGcrP9nAFic4356F4oHDDWVq8YvtJSXZL</a>"; |
|||
$("body").append(heads); |
|||
|
|||
if (priceData) { |
|||
|
|||
var heads = '<th>Official Rate</th><th>Official Value</th><th>Market Value</th>'; |
|||
|
|||
if($("thead tr").length){ // faircoin 2
|
|||
|
|||
$("thead tr").append(heads); |
|||
|
|||
$('tbody').each(function() { |
|||
|
|||
total_fair = total_euro = total_market = 0; |
|||
|
|||
$(this).find('tr').each(function() { |
|||
|
|||
var dateVar = $(this).find('td:first').text(); |
|||
var d = new Date(dateVar); |
|||
var dateISO = d.toISOString().slice(0, 10); |
|||
|
|||
var faircoins = parseFloat($(this).find('td:nth-child(3)').text()); |
|||
|
|||
// $(this).append('<td>'+faircoins+'</td>');
|
|||
|
|||
calculateEuros(dateISO, faircoins, this); |
|||
|
|||
}); |
|||
|
|||
$(this).append('<tr><td><strong>Totals</strong></td><td></td><td>' + (Math.round(total_fair * 100) / 100) + ' FAIR</td><td></td><td>€ ' + (Math.round(total_euro * 100) / 100) + '</td><td>€ ' + (Math.round(total_market * 100) / 100) + '</td></tr>'); |
|||
|
|||
}); |
|||
|
|||
} else { // faircoin 1
|
|||
|
|||
$("tbody tr:first-child").append(heads); |
|||
|
|||
$('tbody tr.direct').each(function() { |
|||
|
|||
var dateVar = $(this).find('td:nth-child(3)').text(); |
|||
var d = new Date(dateVar); |
|||
var dateISO = d.toISOString().slice(0, 10); |
|||
|
|||
var faircoins = cleanUpCurrency($(this).find('td:nth-child(4)').text()); |
|||
|
|||
// $(this).append('<td>'+faircoins+'</td>');
|
|||
|
|||
calculateEuros(dateISO, faircoins, this); |
|||
|
|||
}); |
|||
|
|||
} |
|||
|
|||
} |
|||
}; |
|||
|
|||
function calculateEuros(date, faircoins, el) { |
|||
|
|||
if (!faircoins) { |
|||
console.log("please, fill the faircoin input box"); |
|||
return; |
|||
} |
|||
if (!date) { |
|||
console.log("no date"); |
|||
return; |
|||
} |
|||
|
|||
//let's find the date in the priceData
|
|||
var selectedPriceData = []; |
|||
for (var i = 0; i < priceData.length; i++) { |
|||
if (priceData[i][0] == date) { |
|||
selectedPriceData = priceData[i]; |
|||
} |
|||
} |
|||
if (selectedPriceData.length < 1) { |
|||
console.log("selected date not found in the dataset"); |
|||
return; |
|||
} |
|||
|
|||
// console.log(selectedPriceData);
|
|||
|
|||
var euros = faircoins * selectedPriceData[3]; |
|||
var market = faircoins * selectedPriceData[2]; |
|||
|
|||
total_fair = total_fair+faircoins; |
|||
total_euro = total_euro+euros; |
|||
total_market = total_market+market; |
|||
|
|||
$(el).append('<td>' + parseFloat(selectedPriceData[3]).toString() + '</td>'); |
|||
$(el).append('<td>€ ' + (Math.round(euros * 100) / 100) + '</td>'); |
|||
$(el).append('<td>€ ' + (Math.round(market * 100) / 100) + '</td>'); |
|||
} |
|||
|
|||
function ajax (options, callback) { |
|||
var xhr; |
|||
xhr = new XMLHttpRequest(); |
|||
xhr.open(options.type, options.url, options.async || true); |
|||
xhr.onreadystatechange = function() { |
|||
if (xhr.readyState === 4) { |
|||
return callback(xhr.responseText); |
|||
} |
|||
}; |
|||
return xhr.send(); |
|||
}; |
|||
|
|||
function csvToArray(csv) { |
|||
var a1 = csv.split("\n"); |
|||
var r = []; |
|||
for (var i = 0; i < a1.length; i++) { |
|||
var a2 = a1[i].split(","); |
|||
r.push(a2); |
|||
} |
|||
return (r); |
|||
} |
|||
|
|||
function cleanUpCurrency(s){ |
|||
var expression = /\(.(.+)\)/; |
|||
|
|||
//Check if it is in the proper format
|
|||
if(s.match(expression)){ |
|||
//It matched - strip out parentheses and append - at front
|
|||
return parseFloat('-' + s.replace(/[\$\(\),]/g,'')); |
|||
} |
|||
else{ |
|||
return parseFloat(s); |
|||
} |
|||
} |
|||
|
|||
|
|||
}); |
@ -0,0 +1,22 @@ |
|||
{ |
|||
"manifest_version": 2, |
|||
"name": "FairCoin Calculator", |
|||
"version": "1.2", |
|||
"permissions": [ |
|||
"webRequest", |
|||
"<all_urls>", |
|||
"*://api.fairplayground.info/*" |
|||
], |
|||
"content_scripts": [ |
|||
{ |
|||
"matches": [ |
|||
"https://chain.fair.to/address*", |
|||
"https://chain.fair-coin.org/address/*" |
|||
], |
|||
"js": [ "jquery-3.3.1.min.js", "extension.js" ] |
|||
} |
|||
], |
|||
"gecko": { |
|||
"id": "faircoin-calculator@mayel.space" |
|||
} |
|||
} |