MediaWiki:CardToDocx.js

De Wikincat
Revisão de 13h40min de 21 de abril de 2024 por Jaider.ferreira (discussão | contribs)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Nota: Após publicar, você pode ter que limpar o "cache" do seu navegador para ver as alterações.

  • Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
  • Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
  • Internet Explorer/Edge: PressioneCtrl enquanto clica Recarregar, ou Pressione Ctrl-F5
  • Opera: Pressione Ctrl-F5.
/* jshint esversion: 10 */
function Export2Docx() {
  const decodeEntities = (function () {
    // https://stackoverflow.com/questions/5796718/
    // this prevents any overhead from creating the object each time
    const element = document.createElement('div');

    function decodeHTMLEntities(str) {
      let string = str;
      if (str && typeof str === 'string') {
        // strip script/html tags
        string = string.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim, '');
        string = string.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim, '');
        // add by jaideraf:
        string = str.replace(/&nbsp;/g, String.fromCharCode(32));
        element.innerHTML = str;
        string = element.textContent;
        element.textContent = '';
      }

      return string;
    }

    return decodeHTMLEntities;
  })();

  // Create document
  const doc = new Document({
    creator: 'Wikincat',
    title: 'Ficha catalográfica',
    description: 'Ficha catalográfica gerada pelo Wikincat',
  });

  const card = document.getElementById('card');
  const p = card.getElementsByTagName('p');

  doc
    .createParagraph(document.getElementById('cipParagraph').textContent)
    .center();

  const borderParagraphStartCard = new Paragraph('').createBorder();
  borderParagraphStartCard.Borders.addBottomBorder();
  doc.addParagraph(borderParagraphStartCard);

  doc.createParagraph('');

  doc.createParagraph(decodeEntities(p[0].textContent)); // 1XX
  doc.createParagraph('');

  const arrayP1 = p[1].innerHTML.split('<br>'); // 24X
  arrayP1.forEach((item) => {
    doc.createParagraph(decodeEntities(item));
  });

  doc.createParagraph('');

  const arrayP2 = p[2].innerHTML.split('<br>');
  arrayP2.forEach((item) => {
    doc.createParagraph(decodeEntities(item));
  });

  doc.createParagraph('');
  doc.createParagraph(decodeEntities(p[3].textContent)); // Track
  doc.createParagraph('');

  if (p[4] !== undefined) {
    const arrayP4 = p[4].innerHTML.split('<br>');
    arrayP4.forEach((item) => {
      doc.createParagraph(decodeEntities(item)).right();
    });
  }

  doc.createParagraph('');

  const borderParagraphEndCard = new Paragraph('').createBorder();
  borderParagraphEndCard.Borders.addTopBorder();
  doc.addParagraph(borderParagraphEndCard);

  doc.createParagraph(document.getElementById('credit').textContent).center();

  // Used to export the file into a .docx file
  const packer = new Packer();

  packer.toBlob(doc).then((blob) => {
    saveAs(blob, 'Ficha.docx');
    // console.log( "Documento criado com sucesso" );
  });
}