Opção application/marc quebra a página html do catálogo
Closed this issue · 1 comments
Ao tentar substituir a versão antiga (v1) pela versão nova (v2) aqui (opção "exportar"):
https://pergamum.ufsc.br/pergamum/biblioteca/index.php?word=os%20miser%C3%A1veis
Isto é, substituir o URL do tipo
https://libraryapi.sites.ufsc.br/pergamum/mrc?url=https://pergamum.ufsc.br/pergamum&id=226347
pelo
https://libraryapi.sites.ufsc.br/api/v2/pergamum/226347?url=https://pergamum.ufsc.br/pergamum/web_service/servidor_ws.php&media_type=application/marc
por alguma razão que desconheço, a opção application/marc
faz a página congelar. Isso não acontece com application/xml
ou text/plain
, por exemplo.
Se quiser testar, use o console do navegador:
const pmu_linha_top = document.querySelectorAll(".pmu_linha_top");
for (let elem of pmu_linha_top) {
let codAcervo = elem.parentElement.firstElementChild.lastChild.textContent;
let libraryApiParams = "?url=https://pergamum.ufsc.br/pergamum/web_service/servidor_ws.php&media_type=application/marc"
let exportUrl = "<a href='https://libraryapi.sites.ufsc.br/api/v2/pergamum/" + codAcervo + libraryApiParams + "' class='link_azul_claro' target='_blank' title='Salvar MARC ISO 2709'>(exportar)</a>";
for (let aElem of elem.children) {
if (aElem.matches('a[href*="marc"]')) {
aElem.insertAdjacentHTML("afterend", exportUrl);
}
}
}
E é justamente o formato application/marc
que precisa funcionar. Não entendi o que pode estar dando errado, talvez seja necessário mudar o formato padrão (sem especificar o param media_type
) para o marc_provider
, em vez do json_provider
aqui:
https://github.com/vitorsilverio/libraryapi/blob/main/app/main.py#L67
O que acha?
Já tentou criar o elemento com:
let url = new URL(`https://libraryapi.sites.ufsc.br/api/v2/pergamum/${codAcervo}`)
url.searchParams.append('url', 'https://pergamum.ufsc.br/pergamum/web_service/servidor_ws.php')
url.searchParams.append('media_type', 'application/marc')
let exportUrl = document.createElement('a')
exportUrl.href = url.href
exportUrl.classList.add('link_azul_claro')
exportUrl.target='_blank'
exportUrl.title='Salvar MARC ISO 2709'
exportUrl.appendChild(document.createTextNode('(exportar)'))
E trocar o aElem.insertAdjacentHTML("afterend", exportUrl);
por
aElem.appendChild(exportUrl)
Dessa forma o javascript vai se encarregar de criar o elemento de forma correta, além de escapar o request do http, em vez de simplesmente concatenar uma string ao html existente
No final fica:
const pmu_linha_top = document.querySelectorAll(".pmu_linha_top");
for (let elem of pmu_linha_top) {
let codAcervo = elem.parentElement.firstElementChild.lastChild.textContent;
let url = new URL(`https://libraryapi.sites.ufsc.br/api/v2/pergamum/${codAcervo}`)
url.searchParams.append('url', 'https://pergamum.ufsc.br/pergamum/web_service/servidor_ws.php')
url.searchParams.append('media_type', 'application/marc')
let exportUrl = document.createElement('a')
exportUrl.href = url.href
exportUrl.classList.add('link_azul_claro')
exportUrl.target='_blank'
exportUrl.title='Salvar MARC ISO 2709'
exportUrl.appendChild(document.createTextNode('(exportar)'))
for (let aElem of elem.children) {
if (aElem.matches('a[href*="marc"]')) {
aElem.appendChild(exportUrl)
}
}
}