/*
# check.js - simple application to check numbers
#
# Copyright (C) 2017-2020 Arthur de Jong.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
*/
$(document).ready(function () {
function format(value) {
return $('
').text(value).html().replace(
/\n\n/g, '
\n'
).replace(
/^[*] (.*)$/gm, ''
).replace(
/(\b(https?|ftp):\/\/[^\s<]*[-\w+&@#/%=~_|])/ig,
"$1"
)
}
function updateresults(field, results) {
// build HTML to present
var h = ['']
$.each(results, function (index, result) {
h.push(
'- ',
$('').text(result.number).html(),
': ',
$('').text(result.name).html(),
'',
'
',
format(result.description),
$.map(result.conversions, function (value, key) {
return [
'
',
$('
').text(key).html(),
': ',
$('').text(value).html()].join('')
}).join(''),
' ')
})
h.push('
')
// replace the results div
$('#' + $(field).attr('id') + '_results').html(h.join(''))
}
function checkfield(field) {
var value = field.val()
// only trigger update if value changed from previous validation
if (value !== field.data('oldvalue')) {
field.data('oldvalue', value)
$('#' + $(field).attr('id') + '_results').slideUp(200, function () {
$.get('.', {number: value}, function (data) {
window.history.pushState({value: value, data: data}, $(document).find('title').text(), '?number=' + encodeURIComponent(value))
updateresults(field, data)
})
$(this).slideDown(300)
})
}
}
// update results based on history navigation
window.onpopstate = function (e) {
var field = $('.stdnum_check')
if (e.state) {
var value = e.state.value
var data = e.state.data
field.val(value)
field.data('oldvalue', value)
updateresults(field, data)
} else {
field.val('')
field.data('oldvalue', '')
updateresults(field, [])
}
}
// trigger a check when user stopped typing
$('.stdnum_check').on('input propertychange', function (event) {
if (window.event && event.type === 'propertychange' && event.propertyName !== 'value') { return }
var field = $(this)
window.clearTimeout($(this).data('timeout'))
$(this).data('timeout', setTimeout(function () {
checkfield(field)
}, 2000))
})
// trigger a check when losing focus
$('.stdnum_check').on('blur', function () {
window.clearTimeout($(this).data('timeout'))
checkfield($(this))
})
// prevent enter from submitting the form
$('.stdnum_check').keydown(function (event) {
if (event.keyCode === 13) {
event.preventDefault()
checkfield($(this))
return false
}
})
// hide the submit button
$('.stdnum_hide').hide()
// focus the text field
$('.stdnum_check').focus()
// save current state
var value = $('.stdnum_check').val()
$('.stdnum_check').data('oldvalue', value)
$.get('', {number: value}, function (data) {
window.history.replaceState({value: value, data: data}, $(document).find('title').text(), '?number=' + encodeURIComponent(value))
})
})