correcthorsebatterystaple/src/ui.js

51 lines
1.3 KiB
JavaScript
Raw Normal View History

import $ from 'jquery/dist/jquery'
import 'form-serializer/jquery.serialize-object'
import { generate, computeBits } from './generator'
$(() => {
const $options = $('#options-form')
const $output = $('#generated-password')
const $bits = $('#password-bits').find('div')
$('#run-generator').click(() => {
const options = $options.serializeObject()
$output.val(generate(options))
return false
})
const classes = 'bg-danger bg-warning bg-info bg-success'
function bitClass (bits) {
if (bits < 44) {
return 'bg-danger'
} else if (bits < 64) {
return 'bg-warning'
} else if (bits < 80) {
return 'bg-info'
} else {
return 'bg-success'
}
}
function bitRound (value) {
const rounded = Math.round(value)
return rounded === value ? value : `${rounded}`
}
function updateBitMeter () {
const options = $options.serializeObject()
const bits = computeBits(options)
const maxBits = 96
$bits
.removeClass(classes)
.addClass(bitClass(bits))
.text(`${bitRound(bits)} bits`)
.css('width', `${bits / maxBits * 100}%`)
}
$options.find('select, input').change(updateBitMeter)
$options.find('input[type=nubmer]').on('input', updateBitMeter)
updateBitMeter()
})