Created
October 12, 2018 09:26
-
-
Save aprildy/3324ec265aabed7429018e2f19433f23 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function() { | |
//str = 'My Name is %NAME% and my age is %AGE%.' | |
//{"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"} | |
function format(str, replacements) { | |
var _replacements = {}; | |
for (var k in replacements) { | |
_replacements["%" + k + "%"] = replacements[k]; | |
} | |
return str.replace(/%\w+%/g, function(all) { | |
return _replacements[all] || all; | |
}); | |
} | |
function padZero(num, len) { | |
var s= String(num), c= '0'; | |
len= len || 2; | |
while(s.length < len) s= c + s; | |
return s; | |
} | |
function getISODate() { | |
var d = new Date(); | |
return format("%DD%/%MM%/%YYYY%", { "DD": padZero(d.getDate()), "MM": padZero(d.getMonth() + 1), "YYYY": d.getFullYear() }) | |
} | |
var kDefaultRate = 70; | |
var keyForStorage = "btx_rate"; | |
var keyUpdatedAt = "btx_updated_at"; | |
var currentDate = (new Date()).setHours(0,0,0,0); | |
var lastUpdateAt = parseInt(localStorage.getItem(keyUpdatedAt)) || 0; | |
var currentRate = parseFloat(localStorage.getItem(keyForStorage)) || kDefaultRate; | |
function requestActualRate() { | |
var yql = "https://query.yahooapis.com/v1/public/yql"; | |
var url_cbr = format("http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=%D%&date_req2=%D%&VAL_NM_RQ=R01235", {"D": getISODate()}); | |
// noinspection SqlDialectInspection | |
// noinspection SqlNoDataSourceInspection | |
var query = format("select Record.Value from xml where url = '%U%'", {"U": url_cbr}) | |
var url = yql + "?q=" + encodeURIComponent(query) + "&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys"; | |
console.log(url); | |
console.log(query); | |
console.log(url_cbr); | |
var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest; | |
var xhr = new XHR(); | |
xhr.open("GET", url, true); | |
xhr.onload = function(){ | |
try { | |
var json = JSON.parse(this.responseText); | |
var rateStr = ("" + json.query.results.ValCurs.Record.Value).replace(',', '.'); | |
var rate = parseFloat(rateStr); | |
if (rate) { | |
localStorage.setItem(keyForStorage, rate); | |
localStorage.setItem(keyUpdatedAt, currentDate); | |
currentRate = rate; | |
updateRate(); | |
} | |
} catch (e) { | |
console.error(e); | |
} | |
}; | |
xhr.send(); | |
} | |
function toFixed(x, n) { //x - число, n - количество знаков | |
if(isNaN(x) || isNaN(n)) return false; | |
var m = Math.pow(10,n); | |
return Math.round(x*m)/m; | |
} | |
function updateRate() { | |
var items = document.querySelectorAll("*[data-price]"); | |
for (var i = 0, l = items.length; i < l; i++) { | |
var base = parseFloat(items[i].getAttribute("data-price")) || 1; | |
var price = base * 70; | |
var fix = parseInt(items[i].getAttribute("data-fixed"), 10); | |
var prefix = items[i].getAttribute("data-currency-prefix") || ""; | |
var suffix = items[i].getAttribute("data-currency-suffix") || ""; | |
var resultPrice = | |
items[i].innerHTML = format("%price%", { "price": toFixed(price, fix), "suffix": suffix, "prefix": prefix}); | |
} | |
} | |
function ready() { | |
if (currentDate > lastUpdateAt) { | |
requestActualRate(); | |
} | |
updateRate(); | |
} | |
document.addEventListener("DOMContentLoaded", ready); | |
}()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment