X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/94e92455b60f276f2a1a5b55de5e6b060687f396..cea1338141dcef9834201621c6a2b2cd9ee6b546:/src/catalogue/static/catalogue/wikidata_admin.js diff --git a/src/catalogue/static/catalogue/wikidata_admin.js b/src/catalogue/static/catalogue/wikidata_admin.js index a8aa51ee..a9af9c91 100644 --- a/src/catalogue/static/catalogue/wikidata_admin.js +++ b/src/catalogue/static/catalogue/wikidata_admin.js @@ -4,6 +4,67 @@ let model = $('body').attr('class').match(/model-([^\s]*)/)[1]; $("#id_wikidata").each(show_wikidata_hints).on('change', show_wikidata_hints); + function add_wikidata_hint($input, val) { + if (val && val != $input.val()) { + let already_set = false; + let el = $(''); + + if (val.wd) { + let iv = $input.val(); + if (val.id) { + if (Array.isArray(iv)) { + if (iv.indexOf(val.id.toString()) != -1) { + already_set = true; + } + } else if (val.id == iv) { + already_set = true; + } + } + + if (!already_set) { + // A representation of a WD Entity. + el.on('click', function() { + $(this).addClass('wikidata-processing'); + set_value_from_wikidata_id( + $input, val.model, val.wd, + () => {$(this).remove();} + ); + }); + el.text(val.label); + } + } else if (val.img) { + // A downloadable remote image. + let img = $(''); + img.attr('src', val.img); + el.append(img); + el.on('click', function() { + set_file_from_url( + $input, val.download, + () => {$(this).remove();} + ); + }); + } else if (val.action == 'append') { + el.on('click', function() { + $input.val( + $input.val() + '\n' + val.value + ); + $(this).remove(); + }); + el.text('+ ' + val.value); + } else { + // A plain literal. + el.on('click', function() { + $input.val(val); + $(this).remove(); + }); + el.text(val); + } + if (!already_set) { + $input.parent().append(el); + } + } + } + function show_wikidata_hints() { $(".wikidata-hint").remove(); $wdinput = $(this); @@ -17,26 +78,13 @@ for (att in result) { let val = result[att]; let $input = $("#id_" + att); - if (val && val != $input.val()) { - let el = $(''); - if (val.wd) { - el.on('click', function() { - set_value_from_wikidata_id( - $input, val.model, val.wd, - function() { - $(this).remove(); - } - ); - }); - el.text(val.label); - } else { - el.on('click', function() { - $input.val(val); - $(this).remove(); - }); - el.text(val); + + if (Array.isArray(val)) { + for (singleValue of val) { + add_wikidata_hint($input, singleValue); } - $input.parent().append(el); + } else { + add_wikidata_hint($input, val); } }; @@ -55,10 +103,27 @@ csrfmiddlewaretoken: $('[name=csrfmiddlewaretoken]').val(), }, success: function(result) { - $input.val(result.id); + $input.append($('