Bean counting 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=17500 | |
| 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={ duration } | |
| > | |
| { 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> | |
| this.loanAmount = opts.defaults.amount | |
| this.loanDuration = opts.defaults.duration | |
| this.loanCredit = opts.defaults.credit | |
| this.loanFrequency = opts.defaults.frequency | |
| this.labelFrequency = opts.defaults.labelFrequency | |
| this.repaymentRate = opts.defaults.repayment | |
| editAmount(e) { this.loanAmount = parseInt(e.target.value) } | |
| editDuration(e) { | |
| this.loanDuration = parseInt(e.target.value) | |
| console.log(this.loanDuration) | |
| } | |
| editCredit(e) { this.loanCredit = e.item.value[0] } | |
| editFrequency(e) { | |
| this.loanFrequency = parseInt(e.item.freqVal) | |
| this.labelFrequency = e.item.frequency | |
| } | |
| 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) | |
| } | |
| </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> |
Bean counting 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="https://cdn.foundation5.zurb.com/foundation.css" rel="stylesheet" /> |