Update javascript class
This commit is contained in:
parent
c67a36732d
commit
46c0a78447
Binary file not shown.
@ -0,0 +1,8 @@
|
|||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html lang="en">
|
||||||
|
<title>Snowman</title>
|
||||||
|
<script src="snowman.js"></script>
|
||||||
|
<body>
|
||||||
|
<canvas width="300" height="300"></canvas>
|
||||||
|
</body>
|
||||||
|
</html>
|
75
html-java-script/week11/10.16-lab-snowman-canvas/snowman.js
Normal file
75
html-java-script/week11/10.16-lab-snowman-canvas/snowman.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
"use strict"
|
||||||
|
// Size of a single snowflake
|
||||||
|
const flakeSize = 8;
|
||||||
|
|
||||||
|
window.addEventListener("DOMContentLoaded", function() {
|
||||||
|
var canvas = document.querySelector("canvas");
|
||||||
|
|
||||||
|
drawGround(canvas);
|
||||||
|
drawSnowText(canvas);
|
||||||
|
drawSnowman(canvas);
|
||||||
|
drawSnowflakes(canvas);
|
||||||
|
});
|
||||||
|
|
||||||
|
function drawGround(canvas) {
|
||||||
|
var context = canvas.getContext("2d");
|
||||||
|
|
||||||
|
// background
|
||||||
|
context.fillStyle = "lightgray";
|
||||||
|
context.fillRect(0, 0, 300, 300);
|
||||||
|
|
||||||
|
// ground
|
||||||
|
context.fillStyle = "brown";
|
||||||
|
context.fillRect(0, canvas.height - 50, canvas.width, canvas.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawSnowflakes(canvas) {
|
||||||
|
for (var c = 0; c < 100; c++) {
|
||||||
|
var x = Math.floor(Math.random() * canvas.width);
|
||||||
|
var y = Math.floor(Math.random() * canvas.height);
|
||||||
|
drawSingleFlake(canvas, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Complete the functions below
|
||||||
|
|
||||||
|
function drawSnowText(canvas) {
|
||||||
|
var context = canvas.getContext("2d");
|
||||||
|
context.font="80px Verdana";
|
||||||
|
context.textAlign="center";
|
||||||
|
context.textBaseline="top";
|
||||||
|
context.fillStyle="blue";
|
||||||
|
context.fillText("SNOW", canvas.width/2,10);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawSnowman(canvas) {
|
||||||
|
//bottom
|
||||||
|
var context = canvas.getContext("2d");
|
||||||
|
context.beginPath();
|
||||||
|
context.arc(150, 200, 50, 0, Math.PI *2);
|
||||||
|
context.fillStyle = "white";
|
||||||
|
context.fill();
|
||||||
|
|
||||||
|
//middle
|
||||||
|
context.beginPath();
|
||||||
|
context.arc(150, 120, 40, 0, Math.PI *2);
|
||||||
|
context.fillStyle = "white";
|
||||||
|
context.fill();
|
||||||
|
|
||||||
|
//top
|
||||||
|
context.beginPath();
|
||||||
|
context.arc(150, 60, 25, 0, Math.PI *2);
|
||||||
|
context.fillStyle = "white";
|
||||||
|
context.fill();
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawSingleFlake(canvas, x, y) {
|
||||||
|
var context = canvas.getContext("2d");
|
||||||
|
context.moveTo(x, y);
|
||||||
|
context.lineTo(x+flakeSize/2, y+flakeSize/2);
|
||||||
|
context.lineTo(x, y + flakeSize);
|
||||||
|
context.lineTo(x-flakeSize/2, y+flakeSize/2);
|
||||||
|
context.fillStyle = "white";
|
||||||
|
context.fill();
|
||||||
|
}
|
Binary file not shown.
@ -0,0 +1,51 @@
|
|||||||
|
"use strict"
|
||||||
|
const directions = {
|
||||||
|
UP: 'up',
|
||||||
|
DOWN: 'down',
|
||||||
|
LEFT: 'left',
|
||||||
|
RIGHT: 'right'
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener("load", function () {
|
||||||
|
const canvas = document.querySelector("canvas");
|
||||||
|
|
||||||
|
// Draw 4 frogs facing different directions
|
||||||
|
drawFrog(canvas, 50, 50, directions.UP);
|
||||||
|
drawFrog(canvas, 180, 50, directions.DOWN);
|
||||||
|
drawFrog(canvas, 50, 180, directions.LEFT);
|
||||||
|
drawFrog(canvas, 180, 180, directions.RIGHT);
|
||||||
|
});
|
||||||
|
|
||||||
|
function drawFrog(canvas, x, y, direction = directions.UP) {
|
||||||
|
const context = canvas.getContext("2d");
|
||||||
|
const frogImg = document.querySelector("img");
|
||||||
|
|
||||||
|
switch (direction) {
|
||||||
|
case directions.DOWN:
|
||||||
|
// TODO: Translate, rotate, and translate
|
||||||
|
context.translate(x+frogImg.width/2, y+frogImg.height/2);
|
||||||
|
context.rotate(Math.PI);
|
||||||
|
context.translate(-1*(x+frogImg.width/2), -1*(y+frogImg.height/2));
|
||||||
|
break;
|
||||||
|
case directions.LEFT:
|
||||||
|
context.translate(x+frogImg.width/2, y+frogImg.height/2);
|
||||||
|
context.rotate(Math.PI/-2);
|
||||||
|
context.translate(-1*(x+frogImg.width/2), -1*(y+frogImg.height/2));
|
||||||
|
|
||||||
|
// TODO: Translate, rotate, and translate
|
||||||
|
|
||||||
|
break;
|
||||||
|
case directions.RIGHT:
|
||||||
|
// TODO: Translate, rotate, and translate
|
||||||
|
context.translate(x+frogImg.width/2, y+frogImg.height/2);
|
||||||
|
context.rotate(Math.PI/2);
|
||||||
|
context.translate(-1*(x+frogImg.width/2), -1*(y+frogImg.height/2));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
context.drawImage(frogImg, x, y);
|
||||||
|
|
||||||
|
// Necessary so next call to drawFrog isn't rotated or translated
|
||||||
|
context.resetTransform();
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html lang="en">
|
||||||
|
<title>From Image Rotate and Translate</title>
|
||||||
|
<script src="frog.js"></script>
|
||||||
|
<body>
|
||||||
|
<canvas width="600" height="600"></canvas>
|
||||||
|
<img style="display: none;" src="frog.png" alt="Frog">
|
||||||
|
</body>
|
||||||
|
</html>
|
Binary file not shown.
@ -0,0 +1,62 @@
|
|||||||
|
window.addEventListener("DOMContentLoaded", function () {
|
||||||
|
document.querySelector("#showCircleBtn").addEventListener("click", showCircleClick);
|
||||||
|
});
|
||||||
|
|
||||||
|
function noThrow(){
|
||||||
|
alert("showCircle called too soon");
|
||||||
|
}
|
||||||
|
function yesThrow(){
|
||||||
|
let div = document.getElementsByTagName("div");
|
||||||
|
div[0].innerHTML = "Ta da!";
|
||||||
|
}
|
||||||
|
|
||||||
|
function showCircleClick() {
|
||||||
|
// TODO: Add modifications here
|
||||||
|
showCircle(160, 180, 120).then(yesThrow, noThrow);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do not modify the code below
|
||||||
|
|
||||||
|
let timerId = null;
|
||||||
|
|
||||||
|
function showCircle(cx, cy, radius) {
|
||||||
|
|
||||||
|
// Only allow one div to exist at a time
|
||||||
|
let div = document.querySelector("div");
|
||||||
|
if (div !== null) {
|
||||||
|
div.parentNode.removeChild(div);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create new div and add to DOM
|
||||||
|
div = document.createElement("div");
|
||||||
|
div.style.width = 0;
|
||||||
|
div.style.height = 0;
|
||||||
|
div.style.left = cx + "px";
|
||||||
|
div.style.top = cy + "px";
|
||||||
|
div.className = "circle";
|
||||||
|
document.body.append(div);
|
||||||
|
|
||||||
|
// Set width and height after showCircle() completes so transition kicks in
|
||||||
|
setTimeout(() => {
|
||||||
|
div.style.width = radius * 2 + 'px';
|
||||||
|
div.style.height = radius * 2 + 'px';
|
||||||
|
}, 10);
|
||||||
|
|
||||||
|
let promise = new Promise(function(resolve, reject) {
|
||||||
|
// Reject if showCircle() is called before timer finishes
|
||||||
|
if (timerId !== null) {
|
||||||
|
clearTimeout(timerId);
|
||||||
|
timerId = null;
|
||||||
|
div.parentNode.removeChild(div);
|
||||||
|
reject("showCircle called too soon");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
timerId = setTimeout(() => {
|
||||||
|
resolve(div);
|
||||||
|
timerId = null;
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return promise;
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html lang="en">
|
||||||
|
<title>Promise Lab</title>
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
|
<script src="circle.js"></script>
|
||||||
|
<body>
|
||||||
|
<button id="showCircleBtn">Show Circle</button>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,11 @@
|
|||||||
|
.circle {
|
||||||
|
transition-property: width, height, margin-left, margin-top;
|
||||||
|
transition-duration: 2s;
|
||||||
|
position: fixed;
|
||||||
|
transform: translateX(-50%) translateY(-50%);
|
||||||
|
background-color: coral;
|
||||||
|
border-radius: 50%;
|
||||||
|
font-size: 30px;
|
||||||
|
line-height: 240px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
BIN
html-java-script/week12/LAB Currency Conversion (jQuery).zip
Normal file
BIN
html-java-script/week12/LAB Currency Conversion (jQuery).zip
Normal file
Binary file not shown.
46
html-java-script/week12/currex.html
Normal file
46
html-java-script/week12/currex.html
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Currency Exchange</title>
|
||||||
|
|
||||||
|
<!-- Compiled and minified JavaScript -->
|
||||||
|
<script src="jquery-3.2.1.min.js"></script>
|
||||||
|
|
||||||
|
<!-- Website is optimized for mobile -->
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||||
|
|
||||||
|
<link href="style.css" rel="stylesheet">
|
||||||
|
<script src="currex.js" defer></script>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="card">
|
||||||
|
<h2>Currency Conversion</h2>
|
||||||
|
|
||||||
|
<p>Enter USD and select desired currency.</p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="usdInput">US Dollars (USD):</label>
|
||||||
|
<input type="text" id="usdInput" name="usdInput" value="100.00">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="toCurrency">Select currency:</label>
|
||||||
|
<select id="toCurrency">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label id="resultLabel" for="resultCurrency">To Currency ():</label>
|
||||||
|
<input type="text" id="resultCurrency" name="resultCurrency" value="---.--" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card data">
|
||||||
|
<h2>Exchange Rate Data (JSON)</h2>
|
||||||
|
|
||||||
|
<textarea rows="5" id="exchangeRates" name="exchangeRates">{"disclaimer":"Usage subject to terms: https://openexchangerates.org/terms","license":"https://openexchangerates.org/license","timestamp":1534467600,"base":"USD","rates":{"CAD":1.316145,"CNY":6.882134,"EUR":0.879303,"INR":70.015}}</textarea>
|
||||||
|
<button id="updateRates">Update Rates</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
270
html-java-script/week12/currex.js
Normal file
270
html-java-script/week12/currex.js
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
"use strict"
|
||||||
|
// Mapping of all currency abbreviations to full currency name
|
||||||
|
var allCurrencies = {
|
||||||
|
"AED": "United Arab Emirates Dirham",
|
||||||
|
"AFN": "Afghan Afghani",
|
||||||
|
"ALL": "Albanian Lek",
|
||||||
|
"AMD": "Armenian Dram",
|
||||||
|
"ANG": "Netherlands Antillean Guilder",
|
||||||
|
"AOA": "Angolan Kwanza",
|
||||||
|
"ARS": "Argentine Peso",
|
||||||
|
"AUD": "Australian Dollar",
|
||||||
|
"AWG": "Aruban Florin",
|
||||||
|
"AZN": "Azerbaijani Manat",
|
||||||
|
"BAM": "Bosnia-Herzegovina Convertible Mark",
|
||||||
|
"BBD": "Barbadian Dollar",
|
||||||
|
"BDT": "Bangladeshi Taka",
|
||||||
|
"BGN": "Bulgarian Lev",
|
||||||
|
"BHD": "Bahraini Dinar",
|
||||||
|
"BIF": "Burundian Franc",
|
||||||
|
"BMD": "Bermudan Dollar",
|
||||||
|
"BND": "Brunei Dollar",
|
||||||
|
"BOB": "Bolivian Boliviano",
|
||||||
|
"BRL": "Brazilian Real",
|
||||||
|
"BSD": "Bahamian Dollar",
|
||||||
|
"BTC": "Bitcoin",
|
||||||
|
"BTN": "Bhutanese Ngultrum",
|
||||||
|
"BWP": "Botswanan Pula",
|
||||||
|
"BYN": "Belarusian Ruble",
|
||||||
|
"BZD": "Belize Dollar",
|
||||||
|
"CAD": "Canadian Dollar",
|
||||||
|
"CDF": "Congolese Franc",
|
||||||
|
"CHF": "Swiss Franc",
|
||||||
|
"CLF": "Chilean Unit of Account (UF)",
|
||||||
|
"CLP": "Chilean Peso",
|
||||||
|
"CNH": "Chinese Yuan (Offshore)",
|
||||||
|
"CNY": "Chinese Yuan",
|
||||||
|
"COP": "Colombian Peso",
|
||||||
|
"CRC": "Costa Rican Colón",
|
||||||
|
"CUC": "Cuban Convertible Peso",
|
||||||
|
"CUP": "Cuban Peso",
|
||||||
|
"CVE": "Cape Verdean Escudo",
|
||||||
|
"CZK": "Czech Republic Koruna",
|
||||||
|
"DJF": "Djiboutian Franc",
|
||||||
|
"DKK": "Danish Krone",
|
||||||
|
"DOP": "Dominican Peso",
|
||||||
|
"DZD": "Algerian Dinar",
|
||||||
|
"EGP": "Egyptian Pound",
|
||||||
|
"ERN": "Eritrean Nakfa",
|
||||||
|
"ETB": "Ethiopian Birr",
|
||||||
|
"EUR": "Euro",
|
||||||
|
"FJD": "Fijian Dollar",
|
||||||
|
"FKP": "Falkland Islands Pound",
|
||||||
|
"GBP": "British Pound Sterling",
|
||||||
|
"GEL": "Georgian Lari",
|
||||||
|
"GGP": "Guernsey Pound",
|
||||||
|
"GHS": "Ghanaian Cedi",
|
||||||
|
"GIP": "Gibraltar Pound",
|
||||||
|
"GMD": "Gambian Dalasi",
|
||||||
|
"GNF": "Guinean Franc",
|
||||||
|
"GTQ": "Guatemalan Quetzal",
|
||||||
|
"GYD": "Guyanaese Dollar",
|
||||||
|
"HKD": "Hong Kong Dollar",
|
||||||
|
"HNL": "Honduran Lempira",
|
||||||
|
"HRK": "Croatian Kuna",
|
||||||
|
"HTG": "Haitian Gourde",
|
||||||
|
"HUF": "Hungarian Forint",
|
||||||
|
"IDR": "Indonesian Rupiah",
|
||||||
|
"ILS": "Israeli New Sheqel",
|
||||||
|
"IMP": "Manx pound",
|
||||||
|
"INR": "Indian Rupee",
|
||||||
|
"IQD": "Iraqi Dinar",
|
||||||
|
"IRR": "Iranian Rial",
|
||||||
|
"ISK": "Icelandic Króna",
|
||||||
|
"JEP": "Jersey Pound",
|
||||||
|
"JMD": "Jamaican Dollar",
|
||||||
|
"JOD": "Jordanian Dinar",
|
||||||
|
"JPY": "Japanese Yen",
|
||||||
|
"KES": "Kenyan Shilling",
|
||||||
|
"KGS": "Kyrgystani Som",
|
||||||
|
"KHR": "Cambodian Riel",
|
||||||
|
"KMF": "Comorian Franc",
|
||||||
|
"KPW": "North Korean Won",
|
||||||
|
"KRW": "South Korean Won",
|
||||||
|
"KWD": "Kuwaiti Dinar",
|
||||||
|
"KYD": "Cayman Islands Dollar",
|
||||||
|
"KZT": "Kazakhstani Tenge",
|
||||||
|
"LAK": "Laotian Kip",
|
||||||
|
"LBP": "Lebanese Pound",
|
||||||
|
"LKR": "Sri Lankan Rupee",
|
||||||
|
"LRD": "Liberian Dollar",
|
||||||
|
"LSL": "Lesotho Loti",
|
||||||
|
"LYD": "Libyan Dinar",
|
||||||
|
"MAD": "Moroccan Dirham",
|
||||||
|
"MDL": "Moldovan Leu",
|
||||||
|
"MGA": "Malagasy Ariary",
|
||||||
|
"MKD": "Macedonian Denar",
|
||||||
|
"MMK": "Myanma Kyat",
|
||||||
|
"MNT": "Mongolian Tugrik",
|
||||||
|
"MOP": "Macanese Pataca",
|
||||||
|
"MRO": "Mauritanian Ouguiya (pre-2018)",
|
||||||
|
"MRU": "Mauritanian Ouguiya",
|
||||||
|
"MUR": "Mauritian Rupee",
|
||||||
|
"MVR": "Maldivian Rufiyaa",
|
||||||
|
"MWK": "Malawian Kwacha",
|
||||||
|
"MXN": "Mexican Peso",
|
||||||
|
"MYR": "Malaysian Ringgit",
|
||||||
|
"MZN": "Mozambican Metical",
|
||||||
|
"NAD": "Namibian Dollar",
|
||||||
|
"NGN": "Nigerian Naira",
|
||||||
|
"NIO": "Nicaraguan Córdoba",
|
||||||
|
"NOK": "Norwegian Krone",
|
||||||
|
"NPR": "Nepalese Rupee",
|
||||||
|
"NZD": "New Zealand Dollar",
|
||||||
|
"OMR": "Omani Rial",
|
||||||
|
"PAB": "Panamanian Balboa",
|
||||||
|
"PEN": "Peruvian Nuevo Sol",
|
||||||
|
"PGK": "Papua New Guinean Kina",
|
||||||
|
"PHP": "Philippine Peso",
|
||||||
|
"PKR": "Pakistani Rupee",
|
||||||
|
"PLN": "Polish Zloty",
|
||||||
|
"PYG": "Paraguayan Guarani",
|
||||||
|
"QAR": "Qatari Rial",
|
||||||
|
"RON": "Romanian Leu",
|
||||||
|
"RSD": "Serbian Dinar",
|
||||||
|
"RUB": "Russian Ruble",
|
||||||
|
"RWF": "Rwandan Franc",
|
||||||
|
"SAR": "Saudi Riyal",
|
||||||
|
"SBD": "Solomon Islands Dollar",
|
||||||
|
"SCR": "Seychellois Rupee",
|
||||||
|
"SDG": "Sudanese Pound",
|
||||||
|
"SEK": "Swedish Krona",
|
||||||
|
"SGD": "Singapore Dollar",
|
||||||
|
"SHP": "Saint Helena Pound",
|
||||||
|
"SLL": "Sierra Leonean Leone",
|
||||||
|
"SOS": "Somali Shilling",
|
||||||
|
"SRD": "Surinamese Dollar",
|
||||||
|
"SSP": "South Sudanese Pound",
|
||||||
|
"STD": "São Tomé and Príncipe Dobra (pre-2018)",
|
||||||
|
"STN": "São Tomé and Príncipe Dobra",
|
||||||
|
"SVC": "Salvadoran Colón",
|
||||||
|
"SYP": "Syrian Pound",
|
||||||
|
"SZL": "Swazi Lilangeni",
|
||||||
|
"THB": "Thai Baht",
|
||||||
|
"TJS": "Tajikistani Somoni",
|
||||||
|
"TMT": "Turkmenistani Manat",
|
||||||
|
"TND": "Tunisian Dinar",
|
||||||
|
"TOP": "Tongan Pa'anga",
|
||||||
|
"TRY": "Turkish Lira",
|
||||||
|
"TTD": "Trinidad and Tobago Dollar",
|
||||||
|
"TWD": "New Taiwan Dollar",
|
||||||
|
"TZS": "Tanzanian Shilling",
|
||||||
|
"UAH": "Ukrainian Hryvnia",
|
||||||
|
"UGX": "Ugandan Shilling",
|
||||||
|
"USD": "United States Dollar",
|
||||||
|
"UYU": "Uruguayan Peso",
|
||||||
|
"UZS": "Uzbekistan Som",
|
||||||
|
"VEF": "Venezuelan Bolívar Fuerte",
|
||||||
|
"VND": "Vietnamese Dong",
|
||||||
|
"VUV": "Vanuatu Vatu",
|
||||||
|
"WST": "Samoan Tala",
|
||||||
|
"XAF": "CFA Franc BEAC",
|
||||||
|
"XAG": "Silver Ounce",
|
||||||
|
"XAU": "Gold Ounce",
|
||||||
|
"XCD": "East Caribbean Dollar",
|
||||||
|
"XDR": "Special Drawing Rights",
|
||||||
|
"XOF": "CFA Franc BCEAO",
|
||||||
|
"XPD": "Palladium Ounce",
|
||||||
|
"XPF": "CFP Franc",
|
||||||
|
"XPT": "Platinum Ounce",
|
||||||
|
"YER": "Yemeni Rial",
|
||||||
|
"ZAR": "South African Rand",
|
||||||
|
"ZMW": "Zambian Kwacha",
|
||||||
|
"ZWL": "Zimbabwean Dollar"
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initial data for exchange rates
|
||||||
|
var exchangeRates = {
|
||||||
|
"disclaimer": "Usage subject to terms: https://openexchangerates.org/terms",
|
||||||
|
"license": "https://openexchangerates.org/license",
|
||||||
|
"timestamp": 1534107604,
|
||||||
|
"base": "USD",
|
||||||
|
"rates": {
|
||||||
|
"BTC": 0.000157753542,
|
||||||
|
"CAD": 1.316853,
|
||||||
|
"EUR": 0.879353,
|
||||||
|
"JPY": 110.46550427,
|
||||||
|
"USD": 1,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Create a jQuery ready listener that updates the options within the <select> element with ID toCurrency such that:
|
||||||
|
The first <option> element is: <option value="" disabled selected>Select currency</option>
|
||||||
|
Only the currencies listed in the rates property of the exchangeRates object should appear in the dropdown
|
||||||
|
The <option> element for each currency should show the full currency name followed by the currency's abbreviation in parentheses
|
||||||
|
Ex: Canadian Dollar (CAN)
|
||||||
|
The value for each <option> element should be the currency abbreviation
|
||||||
|
The allCurrencies object in the provided JavaScript template provides a mapping from all possible abbreviations to full currency name
|
||||||
|
Create a jQuery change listener for the select dropdown that:
|
||||||
|
Converts the user-entered US dollars to the selected currency using the rates listed in the exchangeRates object. Display the converted currency with two decimal digits.
|
||||||
|
Ex: If the user-entered US dollars is 100.00, Canadian Dollar (CAN) is elected, and the exchange rate is "CAD": 1.316853, the resulting converted currency is 131.69
|
||||||
|
Displays the resulting converted currency by updating the readonly <input> element with ID resultCurrency
|
||||||
|
Updates the associated label for the resultCurrency <input> element to the selected currency's full currency name, currency abbreviation in parentheses, and colon
|
||||||
|
Ex: Canadian Dollar (CAN):
|
||||||
|
Create a jQuery click listener for the Update Rates button that:
|
||||||
|
Updates the exchangeRates object using the JSON string provided in the <textarea> element with ID exchangeRates
|
||||||
|
Updates the select dropdown such that only the currencies listed in the rates property of the updated exchangeRates object appear in the dropdown
|
||||||
|
Resets the readonly <input> element with ID resultCurrency to display "To Currency ():"
|
||||||
|
Resets the associated label for the resultCurrency <input> element to display "---.--"
|
||||||
|
*/
|
||||||
|
/* Your solution goes here */
|
||||||
|
|
||||||
|
function myChangeListener(){
|
||||||
|
//Take user dollars, multiply them by the exchange rate, display at the end
|
||||||
|
let $userDollars = $("#usdInput").val();
|
||||||
|
let $userConversion = $("#toCurrency").val();
|
||||||
|
let rate = exchangeRates.rates[$userConversion];
|
||||||
|
let total = rate * $userDollars;
|
||||||
|
console.log(total.toFixed(2));
|
||||||
|
$("#resultCurrency").val(total.toFixed(2));
|
||||||
|
$("#resultLabel").text(allCurrencies[$userConversion] + ' ' + $userConversion + ':');
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
function currencyUpdateHandler(){
|
||||||
|
|
||||||
|
exchangeRates = JSON.parse($("#exchangeRates").val());
|
||||||
|
configureUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
function configureUI(){
|
||||||
|
let $toCurrency = $("#toCurrency");
|
||||||
|
let ratesKeys = Object.keys(exchangeRates.rates);
|
||||||
|
|
||||||
|
$toCurrency.empty();
|
||||||
|
$("#resultLabel").text("To Currency ():");
|
||||||
|
$("#resultCurrency").val("---.--");
|
||||||
|
|
||||||
|
//Set default
|
||||||
|
$toCurrency.append('<option value="" disabled selected>Select currency</option>');
|
||||||
|
|
||||||
|
//Add all rates from exchangeRates
|
||||||
|
for (let i = 0; i<ratesKeys.length; i++){
|
||||||
|
let fullName = allCurrencies[ratesKeys[i]];
|
||||||
|
let value = ratesKeys[i];
|
||||||
|
let fullText = '<option value="' + value + '">'+ fullName + ' (' + value + ')</option>';
|
||||||
|
|
||||||
|
$toCurrency.append(fullText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
// DOM is ready to go
|
||||||
|
// $("ol").prepend($newTag); // This adds stuff after the ol
|
||||||
|
// Aka, IN the ol
|
||||||
|
// Append would put it on the end
|
||||||
|
|
||||||
|
let $toCurrency = $("#toCurrency");
|
||||||
|
|
||||||
|
configureUI();
|
||||||
|
|
||||||
|
//Add change listener
|
||||||
|
$toCurrency.on('change', myChangeListener);
|
||||||
|
//Add update listener
|
||||||
|
$("#updateRates").on("click", currencyUpdateHandler);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
});
|
4
html-java-script/week12/jquery-3.2.1.min.js
vendored
Normal file
4
html-java-script/week12/jquery-3.2.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
55
html-java-script/week12/style.css
Normal file
55
html-java-script/week12/style.css
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
body {
|
||||||
|
font: 12pt Arial;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.card {
|
||||||
|
display: block;
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
box-shadow: 0px 2px 2px #dddddd, 0px 0px 5px #dddddd;
|
||||||
|
border-radius: 2px;
|
||||||
|
width: 400px;
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.card * {
|
||||||
|
margin: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.card h2 {
|
||||||
|
color: #efefef;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 10px;
|
||||||
|
background-color: #058;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=text], select, textarea {
|
||||||
|
width: 95%;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data {
|
||||||
|
text-align: center;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 200px;
|
||||||
|
background-color: #069;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: #036;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user