nk20/note_kfet/static/js/autocomplete_model.js

54 lines
1.7 KiB
JavaScript

$(document).ready(function () {
$('.autocomplete').keyup(function (e) {
const target = $('#' + e.target.id)
const prefix = target.attr('id')
const api_url = target.attr('api_url')
let api_url_suffix = target.attr('api_url_suffix')
if (!api_url_suffix) { api_url_suffix = '' }
let name_field = target.attr('name_field')
if (!name_field) { name_field = 'name' }
const input = target.val()
target.addClass('is-invalid')
target.removeClass('is-valid')
$('#' + prefix + '_reset').removeClass('d-none')
$.getJSON(api_url + (api_url.includes('?') ? '&' : '?') + 'format=json&search=^' + input + api_url_suffix, function (objects) {
let html = ''
objects.results.forEach(function (obj) {
html += li(prefix + '_' + obj.id, obj[name_field])
})
const results_list = $('#' + prefix + '_list')
results_list.html(html)
objects.results.forEach(function (obj) {
$('#' + prefix + '_' + obj.id).click(function () {
target.val(obj[name_field])
$('#' + prefix + '_pk').val(obj.id)
results_list.html('')
target.removeClass('is-invalid')
target.addClass('is-valid')
if (typeof autocompleted !== 'undefined') { autocompleted(obj, prefix) }
})
if (input === obj[name_field]) { $('#' + prefix + '_pk').val(obj.id) }
})
if (results_list.children().length === 1 && e.originalEvent.keyCode >= 32) {
results_list.children().first().trigger('click')
}
})
})
$('.autocomplete-reset').click(function () {
const name = $(this).attr('id').replace('_reset', '')
$('#' + name + '_pk').val('')
$('#' + name).val('')
$('#' + name + '_list').html('')
$(this).addClass('d-none')
})
})