parsing.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. // transformer les balises [...] en <div class="..."> si ça correspond aux classes prédéfinies
  2. let baliseWords = [
  3. 'labeur',
  4. 'free',
  5. 'temps',
  6. 'moment',
  7. 'pilote',
  8. 'free_left',
  9. 'citation',
  10. 'latour',
  11. 'latour_nohead',
  12. 'lampe',
  13. 'lampe_nohead',
  14. 'bibliographie',
  15. 'imgsmall',
  16. 'imgsmall_bottom',
  17. 'fullpage2imgs',
  18. 'fullpageimage',
  19. 'tripleimgs',
  20. 'tripleimgs_bottom',
  21. 'tripleimgs2',
  22. 'tripleimgs2_bottom',
  23. 'bottomimg',
  24. 'imgfullspreadleft',
  25. 'imgfullspreadright',
  26. 'imgfullspreadright_bleedtop',
  27. 'imgfullspreadright_bleed',
  28. 'breakbefore',
  29. 'breakafter',
  30. `doublepage_bigright`,
  31. `doublepage_bigleft`
  32. ];
  33. var bodyContent = $('#body').html();
  34. bodyContent = bodyContent.replace(/\[([^\/\]]+)\]/g, function(match, word) {
  35. if (baliseWords.includes(word)) {
  36. return '<div class="' + word + '">';
  37. } else {
  38. return match;
  39. }
  40. }).replace(/\[\/([^\]]+)\]/g, function(match, word) {
  41. if (baliseWords.includes(word)) {
  42. return '</div>';
  43. } else {
  44. return match;
  45. }
  46. });
  47. $('#body').empty().append(bodyContent);
  48. // isoler les chiffres des titres
  49. let moments = document.getElementsByClassName("moment");
  50. for(let i = 0; i < moments.length; i++) {
  51. moments[i].innerHTML = "<span class='first-letter'>" + moments[i].innerHTML.substring(0, moments[i].innerHTML.indexOf('—')) + "</span>" + moments[i].innerHTML.slice(moments[i].innerHTML.indexOf(' —'));
  52. }
  53. // cleaner le balisage des éléments contenant plusieurs paragraphes
  54. let contentToParse = [];
  55. let labeurs = document.querySelectorAll('.labeur');
  56. for(let labeur of labeurs) {
  57. contentToParse.push(labeur);
  58. }
  59. // créer header icons pour encarts
  60. let encarts = document.querySelectorAll('.latour, .latour_nohead, .lampe, .lampe_nohead');
  61. for(let encart of encarts) {
  62. contentToParse.push(encart);
  63. let headContent = encart.firstChild
  64. let headerEl = document.createElement('div');
  65. headerEl.setAttribute('class', 'encart-header')
  66. let iconImg = document.createElement('img');
  67. if (encart.classList.contains('latour') || encart.classList.contains('latour_nohead')) {
  68. iconImg.setAttribute('src', '/user/themes/carnet-atterrissage/assets/map.png');
  69. } else if (encart.classList.contains('lampe') || encart.classList.contains('lampe_nohead')) {
  70. iconImg.setAttribute('src', '/user/themes/carnet-atterrissage/assets/lampe.png');
  71. }
  72. if (encart.classList.contains('latour_nohead') || encart.classList.contains('lampe_nohead')) {
  73. headerEl.style.flexDirection = 'column';
  74. headerEl.style.alignItems = 'flex-start';
  75. headerEl.style.fontWeight = 'normal';
  76. iconImg.style.marginBottom = '2mm';
  77. encart.style.paddingTop = '5mm';
  78. encart.style.paddingBottom = '5mm';
  79. iconImg.style.margin = '0';
  80. iconImg.style.marginBottom = '2.5mm';
  81. }
  82. headerEl.append(iconImg);
  83. headerEl.append(headContent);
  84. encart.firstChild?.remove();
  85. encart.prepend(headerEl);
  86. if (encart.querySelector('.encart-header').nextElementSibling == null) {
  87. encart.querySelector('.encart-header').style.marginBottom = '0';
  88. }
  89. }
  90. for(let i = 0; i < contentToParse.length; i++) {
  91. if (contentToParse[i].childNodes.length == 1) {
  92. contentToParse[i].innerHTML = '<p>' + contentToParse[i].innerHTML + '</p>';
  93. } else {
  94. contentToParse[i].innerHTML = "<p>" + contentToParse[i].innerHTML.replace("<p>", "");
  95. }
  96. // micro-typo
  97. for(j = 0; j < contentToParse[i].childNodes.length; j++) {
  98. let contentHTML = contentToParse[i].childNodes[j].innerHTML;
  99. if (contentHTML != undefined) {
  100. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' :', '&nbsp;:');
  101. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' ?', '&nbsp;?');
  102. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' !', '&nbsp;!');
  103. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll('« ', '«&nbsp;');
  104. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' »', '&nbsp;»');
  105. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll('“', '«&nbsp;');
  106. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll('”', '&nbsp;»');
  107. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' min', '&nbsp;min');
  108. }
  109. }
  110. // data align last split
  111. if (contentToParse[i].innerHTML.includes('<br>')) {
  112. if (contentToParse[i].childElementCount > 0) {
  113. for (let j = 0; j < contentToParse[i].childElementCount; j++) {
  114. let parts = contentToParse[i].children[j].innerHTML.split('<br>');
  115. let newParts = parts.map(function(part) {
  116. return '<p>' + part + '</p>';
  117. });
  118. contentToParse[i].children[j].innerHTML = newParts.join('');
  119. }
  120. } else {
  121. let parts = contentToParse[i].innerHTML.split('<br>');
  122. let newParts = parts.map(function(part) {
  123. return '<p>' + part + '</p>';
  124. });
  125. contentToParse[i].innerHTML = newParts.join('');
  126. }
  127. }
  128. }
  129. // PAGES TITRES
  130. let h3s = document.querySelectorAll('h3');
  131. for (let h3 of h3s) {
  132. if (/^\d/.test(h3.innerText)) {
  133. h3.innerHTML = h3.innerHTML.replace(/[^\s]*/, function(match) {
  134. return `<div class="gros-chiffre">${match}</div>`;
  135. });
  136. }
  137. }
  138. let dessinsPreH3 = document.querySelectorAll('h3 + p img');
  139. for (let dessin of dessinsPreH3) {
  140. dessin.style.width = '0px';
  141. dessin.style.height = '0px';
  142. }