Loan repayment calculator using RiotJS by Muut
A Pen by Simon Vrachliotis on CodePen.
<hello-world /> | |
<script type="riot/tag"> | |
<hello-world> | |
<div class="row"> | |
<div class="medium-7 columns"> | |
<form oninput={ loanCalc } onchange={ loanCalc } > | |
<!-- ///// range slider ///// --> | |
<h3>I want to borrow</h3> | |
<input name="loanAmount" type="range" min=5000 max=30000 value={ loanAmount } oninput={ editAmount }/><span class="amount">AU$ { loanAmount }</span> | |
<hr> | |
<!-- ///// Loan Duration ///// --> | |
<h3>For a duration of</h3> | |
<select onchange={ editDuration } name="duration" id=""> | |
<option each={ duration, i in opts.duration } selected={ i == 1 } value={ loanDuration }> { duration } months </option> | |
</select> | |
<!--<span each={ duration, i in opts.duration }> | |
<input type="radio" name="duration" value={ duration } checked={ i == 1 } onchange={ parent.editDuration }><label>{ duration } months</label> | |
</span>--> | |
<hr> | |
<!-- ///// Credit Score ///// --> | |
<h3>My credit score is</h3> | |
<span each={ credit, value in opts.credit }> | |
<input type="radio" name="credit" value={ value[0] } checked={ value[3] } onchange={ parent.editCredit }> | |
<label>{ credit }</label> | |
</span> | |
<hr> | |
<!-- ///// Repayment Frequency ///// --> | |
<h3>Desired repayments frequency</h3> | |
<span each={ frequency, freqVal in opts.repayFreq }> | |
<input type="radio" name="frequency" value={ freqVal } checked={ frequency == 'Monthly' } onchange={ parent.editFrequency }> | |
<label>{ frequency }</label> | |
</span> | |
</form> | |
</div> | |
<div class="medium-5 columns"> | |
<!-- ///// Loan Calculation ///// --> | |
<h3 class="loan-calc" show={ loanAmount && loanDuration && loanCredit }><strong>{ labelFrequency }</strong> repayments:</h3> | |
<div class="value">AU$ <strong>{ this.repaymentRate }</strong></div> | |
<p class="data-info">Min Interest Rate: <strong>{ loanCredit }%</strong></p> | |
</div> | |
</div> | |
var repaymentRate | |
// LOAN AMOUNT | |
this.loanAmount = localStorage.getItem('loanAmount') === null ? opts.defaults.amount : localStorage.getItem('loanAmount') | |
editAmount(e) { | |
this.loanAmount = parseInt(e.target.value) | |
localStorage.setItem('loanAmount', this.loanAmount) | |
} | |
// LOAN DURATION | |
this.loanDuration = localStorage.getItem('loanDuration') === null ? opts.defaults.duration : localStorage.getItem('loanDuration') | |
editDuration(e) { | |
this.loanDuration = parseInt(e.target.value) | |
localStorage.setItem('loanDuration', this.loanDuration) | |
} | |
// LOAN CREDIT | |
this.loanCredit = localStorage.getItem('loanCredit') === null ? opts.defaults.credit : localStorage.getItem('loanCredit') | |
editCredit(e) { | |
this.loanCredit = e.item.value[0] | |
localStorage.setItem('loanCredit', this.loanCredit) | |
} | |
// LOAN FREQUENCY | |
this.loanFrequency = localStorage.getItem('loanFrequency') === null ? opts.defaults.frequency : localStorage.getItem('loanFrequency') | |
editFrequency(e) { | |
this.loanFrequency = parseInt(e.item.freqVal) | |
this.labelFrequency = e.item.frequency | |
localStorage.setItem('loanFrequency', this.loanFrequency) | |
} | |
// FREQUENCY LABEL | |
this.labelFrequency = localStorage.getItem('loanFrequency') === null ? opts.defaults.labelFrequency : this.labelFrequency | |
// REPAYMENT CALCULATION | |
loanCalc() { | |
var interestRate = ( this.loanCredit / 1200 ) | |
var duration = this.loanDuration | |
var amount = this.loanAmount | |
var frequency = this.loanFrequency | |
var fv = 0 | |
var pmt = ( 12 / frequency ) * ( interestRate * ( amount * Math.pow ( (interestRate+1), duration ) + fv ) ) / ( ( interestRate + 1 ) * ( Math.pow ( (interestRate+1), duration) -1 ) ) | |
this.repaymentRate = Math.ceil(pmt) | |
localStorage.setItem('repaymentRate', this.repaymentRate) | |
} | |
// REPAYMENT RATE | |
this.repaymentRate = localStorage.getItem('repaymentRate') === null ? opts.defaults.repayment : this.repaymentRate | |
// CALCULATING ON MOUNT | |
this.on('mount update unmount', function(eventName) { | |
this.loanCalc() | |
}) | |
</hello-world> | |
</script> | |
<!-- including riot.js and compiler --> | |
<script src="https://cdn.jsdelivr.net/g/[email protected](riot.min.js+compiler.min.js)"></script> | |
<!-- mounting riot tags --> | |
<script> | |
riot.mount('hello-world', { | |
defaults: { | |
amount: 17500, | |
duration: 24, | |
credit: 11.75, | |
frequency: 12, | |
labelFrequency: 'Monthly', | |
repayment: 814 | |
}, | |
duration: [12, 24, 36], | |
credit: { | |
'Below Average': [14.10, 14.10, 0.00], | |
'Average': [12.75, 12.75, 0.00], | |
'Good': [11.75, 11.75, 0.00, 'checked'], | |
'Very Good': [9.95, 9.95, 0.00], | |
'Excellent': [9.95, 9.95, 0.00] | |
}, | |
repayFreq: { 'Monthly': 12, 'Bi-Weekly': 26, 'Weekly': 52 } | |
}) | |
</script> |
Loan repayment calculator using RiotJS by Muut
A Pen by Simon Vrachliotis on CodePen.
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
body { | |
padding: 3rem 0; | |
font-family: 'Lato', sans-serif; | |
} | |
.row { | |
border: solid 4px #f2f2f2; | |
padding: 1rem; | |
} | |
.loan-calc { | |
font-weight: 300; | |
margin-bottom: 0; | |
} | |
.value { | |
background: #00bf5c; | |
padding: 1.5rem 2rem; | |
font-size: 1.5rem; | |
margin: 1rem 0 1.5rem; | |
color: white; | |
display: inline-block; | |
} | |
.data-info { | |
background: #f2f2f2; | |
padding: .75rem 1rem; | |
} | |
span.amount { | |
padding: .5rem 1rem; | |
vertical-align: bottom; | |
font-size: 1.1rem; | |
} | |
strong { | |
font-weight: 700; | |
} | |
input[type="radio"]:checked+label { | |
color: darken(#00bf5c, 5); | |
} |
<link href="http://cdn.foundation5.zurb.com/foundation.css" rel="stylesheet" /> |