Browse Source

culc (api)

Mitrofanova Natali 2 years ago
parent
commit
a3a30df8e6
3 changed files with 378 additions and 0 deletions
  1. 17 0
      culc/index.html
  2. 240 0
      culc/script.js
  3. 121 0
      culc/style.css

+ 17 - 0
culc/index.html

@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport"
+          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>Document</title>
+    <link rel="stylesheet" href="style.css">
+    <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous"/>
+</head>
+<body>
+<div id="root"></div>
+
+<script src="script.js"></script>
+</body>
+</html>

+ 240 - 0
culc/script.js

@@ -0,0 +1,240 @@
+const root = document.getElementById("root");
+const url = "https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5";
+let data = [
+    {
+        "ccy": "USD",
+        "base_ccy": "UAH",
+        "buy": "26.00000",
+        "sale": "26.20000"
+    },
+    {
+        "ccy": "EUR",
+        "base_ccy": "UAH",
+        "buy": "29.90000",
+        "sale": "30.50000"
+    },
+    {
+        "ccy": "RUR",
+        "base_ccy": "UAH",
+        "buy": "0.35000",
+        "sale": "0.38000"
+    },
+    {
+        "ccy": "BTC",
+        "base_ccy": "USD",
+        "buy": "58252.9497",
+        "sale": "64384.8391"
+    }
+]
+let currentCurrency = null;
+let bankOperation = "buy";
+let defaultValue = 100;
+
+getCurrency();
+
+
+function getCurrency() {
+    fetch(url)
+        .then((res) => {
+                return res.json();
+            },
+            (err) => {
+                currentCurrency = data[0];
+                initApp(data, currentCurrency);
+                console.log("some probloms");
+
+            })
+        .then((json) => {
+                if (json) {
+                    data = json;
+                    currentCurrency = data[0];
+                    initApp(json, currentCurrency);
+                }
+            }
+        )
+}
+
+function initApp(data, currentCurrency) {
+
+    const wrapper = document.createElement("div");
+    wrapper.classList.add("wrapper");
+    root.appendChild(wrapper);
+
+    const informBlockWrapper = document.createElement("div");
+    informBlockWrapper.classList.add("informBlockWrapper");
+    wrapper.appendChild(informBlockWrapper);
+
+    const currencyBlockWrapper = document.createElement("div");
+    currencyBlockWrapper.classList.add("currencyBlockWrapper");
+    informBlockWrapper.appendChild(currencyBlockWrapper);
+    for (let i = 0; i < 3; i++) {
+        const currencyBlock = document.createElement("div");
+        currencyBlock.classList.add("currencyBlock");
+        currencyBlock.innerText = `${data[i].ccy}`;
+        currencyBlockWrapper.appendChild(currencyBlock);
+        currencyBlock.addEventListener("click", chooseCurrency);
+    }
+
+    const exchangeRatesWrapper = document.createElement("div");
+    exchangeRatesWrapper.classList.add("currencyBlockWrapperValue");
+    informBlockWrapper.appendChild(exchangeRatesWrapper);
+
+    for (let i = 0; i < 3; i++) {
+        const exchangeRates = document.createElement("div");
+        exchangeRates.classList.add("currencyBlockValue");
+        exchangeRatesWrapper.appendChild(exchangeRates);
+        for (let j = 0; j < 1; j++) {
+            const buySaleCell = document.createElement("div");
+            buySaleCell.classList.add("currencyBlockItem");
+            buySaleCell.innerText = `${Number(data[i].buy).toFixed(2)} /  ${Number(data[i].sale).toFixed(2)}`;
+            exchangeRates.appendChild(buySaleCell);
+        }
+    }
+    const tableHeader = document.createElement("div");
+    tableHeader.classList.add("tableHeader");
+    wrapper.appendChild(tableHeader);
+
+    const titleHeaderLeft = document.createElement("div");
+    titleHeaderLeft.classList.add("blockTitle");
+    titleHeaderLeft.innerText = "Отдаю";
+    tableHeader.appendChild(titleHeaderLeft);
+
+    const titleHeaderRight = document.createElement("div");
+    titleHeaderRight.classList.add("titleHeaderRight", "blockTitle");
+    titleHeaderRight.innerText = "Получаю";
+    tableHeader.appendChild(titleHeaderRight);
+
+    const converterWrapper = document.createElement("div");
+    converterWrapper.classList.add("converterWrapper");
+    wrapper.appendChild(converterWrapper);
+
+    updateTable(currentCurrency)
+}
+
+function updateTable() {
+    if (bankOperation === "buy") {
+        leftBlock();
+        centerBlock();
+        rightBlock();
+    } else {
+        if (bankOperation === "sale") {
+            rightBlock();
+            centerBlock();
+            leftBlock();
+        }
+    }
+}
+
+function leftBlock() {
+    const converterWrapper = document.querySelector(".converterWrapper");
+
+    const converterBlockLeft = document.createElement("div");
+    converterBlockLeft.classList.add("converterBlock");
+    converterWrapper.appendChild(converterBlockLeft);
+
+    const converterBlokTitleSell = document.createElement("div");
+    converterBlokTitleSell.classList.add("converterBlockTitle");
+    converterBlokTitleSell.innerText = `${currentCurrency.ccy}`;
+    converterBlockLeft.appendChild(converterBlokTitleSell);
+
+    const converterCurrencySell = document.createElement("input");
+    converterCurrencySell.classList.add("converterCurrency", "sell");
+    converterCurrencySell.value = defaultValue;
+    converterBlockLeft.appendChild(converterCurrencySell);
+    converterCurrencySell.addEventListener("keyup", inputHandler);
+
+    const converterBlockInfoSell = document.createElement("div");
+    converterBlockInfoSell.classList.add("converterBlockInfo");
+    converterBlockInfoSell.innerText = `1 ${currentCurrency.ccy} = ${Number(currentCurrency[bankOperation]).toFixed(2)} UAH`;
+    converterBlockLeft.appendChild(converterBlockInfoSell);
+
+}
+
+function centerBlock() {
+    const converterWrapper = document.querySelector(".converterWrapper");
+
+    const converterBlockCenter = document.createElement("div");
+    converterBlockCenter.classList.add("converterBlockCenter");
+    converterWrapper.appendChild(converterBlockCenter);
+    const icon = document.createElement("i");
+    icon.classList.add("fas");
+    icon.classList.add("fa-sync-alt");
+    icon.addEventListener("click", swapCurrency);
+    converterBlockCenter.appendChild(icon);
+}
+
+function rightBlock() {
+    const converterWrapper = document.querySelector(".converterWrapper");
+
+    const converterBlockRight = document.createElement("div");
+    converterBlockRight.classList.add("converterBlock");
+    converterWrapper.appendChild(converterBlockRight);
+
+    const converterBlokTitleBuy = document.createElement("div");
+    converterBlokTitleBuy.classList.add("converterBlockTitle");
+    converterBlokTitleBuy.innerText = "UAH";
+    converterBlockRight.appendChild(converterBlokTitleBuy);
+
+    const converterCurrencyBuy = document.createElement("input");
+    converterCurrencyBuy.classList.add("converterCurrency", "buy");
+
+    converterCurrencyBuy.value = defaultValue * Number(currentCurrency[bankOperation]);
+    converterCurrencyBuy.addEventListener("keyup", inputHandler);
+    converterBlockRight.appendChild(converterCurrencyBuy);
+
+    const converterBlockInfoBuy = document.createElement("div");
+    converterBlockInfoBuy.classList.add("converterBlockInfo");
+    converterBlockInfoBuy.innerText = `1 UAH = ${(1 / Number(currentCurrency[bankOperation])).toFixed(2)} ${currentCurrency.ccy}`;
+    converterBlockRight.appendChild(converterBlockInfoBuy);
+}
+
+function chooseCurrency(event) {
+    switch (event.target.innerText) {
+        case "USD":
+            currentCurrency = data[0];
+            break
+        case "EUR":
+            currentCurrency = data[1];
+            break;
+        case "RUR":
+            currentCurrency = data[2];
+            break;
+    }
+    const converterWrapper = document.querySelector(".converterWrapper")
+    converterWrapper.innerHTML = "";
+    updateTable(currentCurrency);
+}
+
+function inputHandler(event) {
+    let buyInput = document.querySelector(".buy");
+    let sellInput = document.querySelector(".sell");
+    let value = event.target.value;
+
+    if (event.target.classList.contains("sell")) {
+        if (isNaN(+event.target.value)) {
+            buyInput.value = "Wrong value";
+        } else {
+            buyInput.value = (Number(value) * Number(currentCurrency[bankOperation])).toFixed(2);
+        }
+    }
+    if (event.target.classList.contains("buy")) {
+        if (isNaN(+event.target.value)) {
+            sellInput.value = "Wrong value";
+        } else {
+            sellInput.value = (Number(value) / Number(currentCurrency[bankOperation])).toFixed(2);
+        }
+    }
+}
+
+function swapCurrency() {
+    const converterWrapper = document.querySelector(".converterWrapper");
+    converterWrapper.innerHTML = "";
+    if (bankOperation === "buy") {
+        bankOperation = "sale";
+
+    } else {
+        bankOperation = "buy";
+    }
+    updateTable();
+}
+

+ 121 - 0
culc/style.css

@@ -0,0 +1,121 @@
+body{
+    width: 100vw;
+    height: 100vh;
+    margin: 0;
+    color: #f4f09c;
+}
+#root{
+    width: 100%;
+    height: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    background: radial-gradient(circle, rgba(131,58,180,1) 0%, rgba(6,25,186,1) 28%, rgba(46,60,168,1) 100%);
+}
+.wrapper{
+    width: 800px;
+    height: 400px;
+    background-color: #2e3ca8;
+}
+.informBlockWrapper{
+    width: 100%;
+    height: 40%;
+    display: flex;
+    flex-direction: column;
+}
+.currencyBlockWrapper{
+    width: 100%;
+    height: 50%;
+    display: flex;
+    justify-content: space-around;
+    align-items: end;
+}
+.currencyBlockWrapperValue{
+    display: flex;
+    justify-content: space-around;
+}
+.tableHeader{
+    display: flex;
+    width: 100%;
+
+}
+.blockTitle{
+    width:50%;
+    font-size: 25px;
+    padding: 0 30px 5px;
+}
+.titleHeaderRight{
+ padding-left: 90px;
+}
+
+.currencyBlock{
+    background-color: #2e3ca8;
+    height: 50px;
+    display: flex;
+    cursor: pointer;
+    padding:10px 35px;
+}
+.exchangeRatesWrapper{
+    width: 100%;
+    height: 50%;
+}
+
+.converterWrapper{
+    width: 100%;
+    height: 50%;
+    display: flex;
+    color: #f4f09c;
+}
+.converterBlock{
+    width: 45%;
+    height: 100%;
+    border: 1px solid grey;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+}
+.converterBlockCenter{
+    width: 10%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+
+}
+.converterBlockTitle{
+    font-size: 20px;
+    width: 100%;
+    padding-top: 10px ;
+    padding-left: 20px;
+}
+
+.fa-sync-alt{
+    font-size: 35px;
+    color: #D6BD22;
+    padding: 15px;
+
+}
+i:hover{
+    cursor: pointer;
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+    transition: 0.3s ;
+}
+
+.converterCurrency{
+    color: #FFF;
+    height: 70px;
+    margin: 20px 0 0 10px;
+    font-size: 36px;
+    font-weight: 700;
+    margin-bottom: 7px;
+    width: calc(100% - 20px);
+    box-sizing: border-box;
+    background-color: transparent;
+    border: none;
+    border-bottom: 2px solid #c5ea9d;
+    outline: none;
+}
+
+.converterBlockInfo{
+    padding-left: 20px;
+}