vitorsilverio/libraryapi

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.
marc-congela-tela

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)
    }
  }
}