parsing.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. 'latour',
  8. 'lampe',
  9. 'bibliographie',
  10. 'imgsmall',
  11. 'fullpage2imgs',
  12. 'fullpageimage',
  13. 'tripleimgs',
  14. 'tripleimgs_bottom',
  15. 'tripleimgs2',
  16. 'tripleimgs2_bottom',
  17. 'bottomimg',
  18. 'imgfullspreadleft',
  19. 'imgfullspreadright',
  20. 'imgfullspreadright_bleedtop',
  21. 'imgfullspreadright_bleed',
  22. 'breakbefore',
  23. 'breakafter'
  24. ];
  25. // Get the HTML content of the "body" element
  26. var bodyContent = $('#body').html();
  27. // Replace text between brackets only if it matches one of the words in the list
  28. bodyContent = bodyContent.replace(/\[([^\/\]]+)\]/g, function(match, word) {
  29. if (baliseWords.includes(word)) {
  30. return '<div class="' + word + '">';
  31. } else {
  32. return match; // No replacement if the word is not in the list
  33. }
  34. }).replace(/\[\/([^\]]+)\]/g, function(match, word) {
  35. if (baliseWords.includes(word)) {
  36. return '</div>';
  37. } else {
  38. return match; // No replacement if the word is not in the list
  39. }
  40. });
  41. // Update the content of the "body" element
  42. $('#body').empty().append(bodyContent);
  43. // isoler les chiffres des titres
  44. let moments = document.getElementsByClassName("moment");
  45. for(let i = 0; i < moments.length; i++) {
  46. 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(' —'));
  47. }
  48. // cleaner le balisage des éléments contenant plusieurs paragraphes
  49. let contentToParse = [];
  50. let labeurs = document.getElementsByClassName("labeur");
  51. for(let i = 0; i < labeurs.length; i++) {
  52. contentToParse.push(labeurs[i]);
  53. }
  54. // créer header icons pour encarts
  55. let latours = document.getElementsByClassName("latour");
  56. for(let i = 0; i < latours.length; i++) {
  57. contentToParse.push(latours[i]);
  58. let headContent = latours[i].firstChild
  59. let headerEl = document.createElement('div');
  60. headerEl.setAttribute('class', 'latour-header')
  61. let iconImg = document.createElement('img');
  62. iconImg.setAttribute('src', '/user/themes/carnet-atterrissage/assets/map.png');
  63. headerEl.append(iconImg);
  64. headerEl.append(headContent);
  65. latours[i].firstChild?.remove();
  66. latours[i].prepend(headerEl);
  67. }
  68. let lampes = document.getElementsByClassName("lampe");
  69. for(let i = 0; i < lampes.length; i++) {
  70. contentToParse.push(lampes[i]);
  71. let headContent = lampes[i].firstChild
  72. let headerEl = document.createElement('div');
  73. headerEl.setAttribute('class', 'lampe-header')
  74. let iconImg = document.createElement('img');
  75. iconImg.setAttribute('src', '/user/themes/carnet-atterrissage/assets/lampe.png');
  76. headerEl.append(iconImg);
  77. headerEl.append(headContent);
  78. lampes[i].firstChild?.remove();
  79. lampes[i].prepend(headerEl);
  80. }
  81. for(let i = 0; i < contentToParse.length; i++) {
  82. if (contentToParse[i].childNodes.length == 1) {
  83. contentToParse[i].innerHTML = '<p>' + contentToParse[i].innerHTML + '</p>';
  84. } else {
  85. contentToParse[i].innerHTML = "<p>" + contentToParse[i].innerHTML.replace("<p>", "");
  86. }
  87. // micro-typo
  88. for(j = 0; j < contentToParse[i].childNodes.length; j++) {
  89. let contentHTML = contentToParse[i].childNodes[j].innerHTML;
  90. if (contentHTML != undefined) {
  91. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' :', '&nbsp;:');
  92. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' ?', '&nbsp;?');
  93. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' !', '&nbsp;!');
  94. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll('« ', '«&nbsp;');
  95. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' »', '&nbsp;»');
  96. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll('“', '«&nbsp;');
  97. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll('”', '&nbsp;»');
  98. contentToParse[i].childNodes[j].innerHTML = contentToParse[i].childNodes[j].innerHTML.replaceAll(' min', '&nbsp;min');
  99. }
  100. }
  101. }
  102. // PAGES TITRES
  103. let h3s = document.querySelectorAll('h3');
  104. for (let h3 of h3s) {
  105. if (h3.nextElementSibling.firstChild.tagName == 'IMG') {
  106. h3.style.width = "50%";
  107. h3.nextElementSibling.firstChild.style.width = "60%";
  108. h3.innerHTML = h3.innerHTML.replace(/[^\s]*/, `<div class="gros-chiffre">${1}</div>`);
  109. }
  110. }