Integração com a VIAF

Boa tarde pessoal.

Tentei uma integração com a VIAF de autosugestão, deu quase certo. Se alguém manjar de código e quiser melhorar…

// Verifica se a URL corresponde à página de autoridades NAME
function isNameAuthorityPage() {
return /_NAME$|authorities/authorities.pl?authid=/.test(document.location.href);
}

// Formata o nome da fonte de autoridade
function formatAuthoritySource(s) {
if (s.indexOf(‘nli’) > -1) return ‘NLI’ + s.substr(3);
return s.toUpperCase();
}
// Função para inicializar o recurso de autocomplete
function initializeAutocomplete() {
$(‘#viaf’).autocomplete({
source: function (request, response) {
$.ajax({
url: “VIAF: The Virtual International Authority File”,
dataType: “xml”,
data: {
query: ‘local.personalNames all "’ + request.term + ‘" and cql.any all “br”’,
maximumRecords: 5,
httpAccept: ‘application/rdf+xml’
},
success: function (data) {
var names = [];
$(data).find(‘rdf\:Description, Description’).each(function () {
var name = $(this).find(‘schema\:name, name’).text();
var viafId = $(this).attr(‘rdf:about’).split(“/”).pop();
if (name && viafId) {
names.push({
label: name,
value: name,
viafId: viafId
});
}
});
response(names);
},
error: function () {
console.error(‘Erro ao buscar sugestões VIAF.’);
}
});
},
minLength: 3,
// … (resto do código permanece inalterado) …
});
}
// Adiciona o CSS necessário para a funcionalidade
$(‘head’).append(‘’);

// Insere o campo de entrada para o recurso de autocomplete
var inputFieldHtml = '<div class="ui-widget"><label for="viaf">VIAF Autosuggest:</label> <input type="text" style="font-size:0.9em" id="viaf" size="80" title="digite pelo menos os primeiros 3 caracteres de um nome"></div>';
$('#authoritytabs').prepend(inputFieldHtml);
$($('ul.toolbar')[0]).append(inputFieldHtml);

// Carrega o jQuery UI se necessário e inicializa o recurso de autocomplete
if (!jQuery.ui.version) {
    $.ajax({
        url: 'http://code.jquery.com/ui/1.11.1/jquery-ui.min.js',
        dataType: "script",
        success: initializeAutocomplete
    });
} else {
    initializeAutocomplete();
}

}

// Função para atualizar rótulos
function updateLabels(selector, labels) {
for (let key in labels) {
$(${selector} label[for='${key}']).html(labels[key]);
}
}

// Função para adicionar notificações
function appendNotification(selector, text, notification) {
$(${selector} li:contains('${text}')).append(<strong><em> ${notification}</em></strong>);
}

// Função para atualizar texto
function updateText(selector, texts) {
for (let key in texts) {
$(${selector}:contains('${key}')).html(texts[key]);
}
}

// Função para adicionar a classe filterable a várias tabelas
function addFilterableClass(selectors) {
selectors.forEach(function (selector) {
$("#yui-main " + selector).addClass(“filterable”);
});
}

// Função para inserir controles de filtro
function insertFilterControls() {
var filterControlsHtml = “Filter: Clear

”;
$(filterControlsHtml).insertBefore(“#yui-main table.filterable”);
}

// Função para adicionar uma coluna de índice oculta
function addIndexColumn() {
$(“.filterable tr:has(td)”).each(function () {
var text = $(this).text().toLowerCase();
$(“”).hide().text(text).appendTo(this);
});
}

// Função para configurar o evento keyup da caixa de texto do filtro
function setupFilterTextbox() {
$(“#FilterTextBox”).keyup(function () {
var keywords = $(this).val().toLowerCase().split(" “);
// Mostra todas as linhas inicialmente
$(”.filterable tr:hidden").show();
// Filtra as linhas baseadas nas palavras-chave
keywords.forEach(function (keyword) {
$(“.filterable tr:visible .indexColumn:not(:contains('” + keyword + “'))”).parent().hide();
});
});
}

// Função para configurar o evento click do link Clear
function setupClearLink() {
$(“.clear”).click(function () {
$(“#FilterTextBox”).val(“”).keyup();
return false; // Previne a navegação para o link
});
}

// Função para adicionar funcionalidade de filtragem
function addFilterFunctionality() {
var filterSelectors = [“table.biblios”, “table.holdings”];
addFilterableClass(filterSelectors);
insertFilterControls();
addIndexColumn();
setupFilterTextbox();
setupClearLink();
}

// Função principal para adicionar funcionalidade de filtragem
function initializeFilterFunctionality() {
// Verifica se a página é relevante para a funcionalidade
if (!/catalog_detail.pl/.test(document.location.href)) return;

// Carrega o jQuery se necessário e adiciona a funcionalidade de filtragem
if (typeof jQuery === "undefined") {
    $.ajax({
        url: 'http://code.jquery.com/jquery-1.11.1.min.js',
        dataType: "script",
        success: addFilterFunctionality
    });
} else {
    addFilterFunctionality();
}

}

$(document).ready(function () {
initializeViafAutosuggest();
initializeFilterFunctionality();
// … (o código para adicionar funcionalidade de filtragem vai aqui) …

// Testes de validação
test020a();
test022a();
test024a();
test856u();

});

2 curtidas

Informações adicionais. Me parece que é possível a integração à VIAF de maneira mais simples. Entrei em contato com eles. Me forneceram a seguinte documentação

Ainda não consegui integrar corretamente. Se alguém tiver alguma sugestão, aceito.

1 curtida

Olá.
Onde você colocou esse código? Você utilizou algum tutorial ou passo-a-passo?

1 curtida

Dentro de js intranet em
Administração \ preferências globais

Não utilizei tutorial