diff --git a/.gitignore b/.gitignore index 723ef36f4..d1ea5fee6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ -.idea \ No newline at end of file +.idea + +build/ +node_modules/ diff --git a/index.html b/index.html index 0364f0343..d05caa959 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,9 @@

Mortgage Calculator

Monthly Payment:

+

Monthly Rate:

+

Amortization:

- + \ No newline at end of file diff --git a/js/main.js b/js/main.js index 6565a8969..4523d736c 100644 --- a/js/main.js +++ b/js/main.js @@ -1,15 +1,30 @@ -var calculateMonthlyPayment = function (principal, years, rate) { - if (rate) { - var monthlyRate = rate / 100 / 12; - } - var monthlyPayment = principal * monthlyRate / (1 - (Math.pow(1 / (1 + monthlyRate), years * 12))); - return monthlyPayment; -}; +import Mortgage from './mortgage'; -document.getElementById('calcBtn').addEventListener('click', function () { - var principal = document.getElementById("principal").value; - var years = document.getElementById("years").value; - var rate = document.getElementById("rate").value; - var monthlyPayment = calculateMonthlyPayment(principal, years, rate); - document.getElementById("monthlyPayment").innerHTML = monthlyPayment.toFixed(2); +document.getElementById('calcBtn').addEventListener('click', () => { + let principal = document.getElementById("principal").value; + let years = document.getElementById("years").value; + let rate = document.getElementById("rate").value; + let mortgage = new Mortgage(principal, years, rate); + document.getElementById("monthlyPayment").innerHTML = mortgage.monthlyPayment.toFixed(2); + document.getElementById("monthlyRate").innerHTML = (rate / 12).toFixed(2); + let html = ""; + mortgage.amortization.forEach((year, index) => html += ` + + ${index + 1} + ${Math.round(year.principalY)} + +
+
+
+
+
+
+ + ${Math.round(year.interestY)} + ${Math.round(year.balance)} + + `); + document.getElementById("amortization").innerHTML = html; }); \ No newline at end of file diff --git a/js/mortgage.js b/js/mortgage.js new file mode 100644 index 000000000..5f5a30177 --- /dev/null +++ b/js/mortgage.js @@ -0,0 +1,33 @@ +export default class Mortgage{ + + constructor(principal, years, rate){ + this.principal = principal; + this.years = years; + this.rate = rate; + } + + get monthlyPayment(){ + let monthlyRate = this.rate / 100 / 12; + return this.principal * monthlyRate / (1 - (Math.pow(1/(1 + monthlyRate), this.years * 12))); + } + + get amortization() { + let monthlyPayment = this.monthlyPayment; + let monthlyRate = this.rate / 100 / 12; + let balance = this.principal; + let amortization = []; + for (let y=0; y new Promise((resolve, reject) => { + if (rates) { + resolve(rates); + } else { + reject("No rates"); + } +}); \ No newline at end of file diff --git a/js/ratefinder.js b/js/ratefinder.js new file mode 100644 index 000000000..3fb760ca2 --- /dev/null +++ b/js/ratefinder.js @@ -0,0 +1,9 @@ +import * as service from './rate-service-mock'; + +service.findAll() +.then(rates => { + let html = ''; + rates.forEach(rate => html += `${rate.name}${rate.years}${rate.rate}%`); + document.getElementById("rates").innerHTML = html; +}) +.catch(e => console.log(e)); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 000000000..4b3556e28 --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "es6-tutorial", + "version": "1.0.0", + "description": "After reading the notes below, start the tutorial [here](http://ccoenraets.github.io/es6-tutorial).", + "main": "index.js", + "scripts": { + "babel": "babel --presets es2015 js/main.js -o build/main.bundle.js", + "start": "http-server", + "webpack": "webpack" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ipalongengi/es6-tutorial.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/ipalongengi/es6-tutorial/issues" + }, + "homepage": "https://github.com/ipalongengi/es6-tutorial#readme", + "devDependencies": { + "babel-cli": "^6.26.0", + "babel-core": "^6.26.0", + "babel-loader": "^7.1.2", + "babel-preset-es2015": "^6.24.1", + "http-server": "^0.10.0", + "webpack": "^3.5.6" + } +} diff --git a/ratefinder.html b/ratefinder.html new file mode 100644 index 000000000..123a71b35 --- /dev/null +++ b/ratefinder.html @@ -0,0 +1,10 @@ + + + + + + +
+ + + \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 000000000..0d960414d --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,27 @@ +var path = require('path'); +var webpack = require('webpack'); + +module.exports = { + entry: { + app: './js/main.js', + ratefinder: './js/ratefinder.js'}, + output: { + path: path.resolve(__dirname, 'build'), + filename: '[name].bundle.js' + }, + module: { + loaders: [ + { + test: /\.js$/, + loader: 'babel-loader', + query: { + presets: ['es2015'] + } + } + ] + }, + stats: { + colors: true + }, + devtool: 'source-map' +}; \ No newline at end of file