parsers.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. function parseMd(content) {
  2. var blockArray = [{title: ''}];
  3. var blockCount;
  4. var preDataIndex, imgDataIndex;
  5. var parseBlockDiv;
  6. var preImg, preImgObject;
  7. var preImgObject = {'image': {}}
  8. var isNotFrontMatterCount = 0;
  9. var isAmpImgRange = false;
  10. for (const line of content.split('\n')) {
  11. if (isNotFrontMatterCount < 2) {
  12. if (line.includes('---')) {
  13. isNotFrontMatterCount += 1;
  14. }
  15. continue;
  16. }
  17. if (isAmpImgRange === true && !(line.includes('</amp-img>'))) {
  18. imgParamObject = parseAmpImg(line);
  19. preImgObject.image = {...preImgObject.image, ...imgParamObject};
  20. const key = _.get(_.keys(imgParamObject), 0);
  21. preImg.setAttribute(key, _.get(imgParamObject, `${key}`));
  22. continue;
  23. }
  24. if (line.includes('##')) {
  25. preDataIndex = 0;
  26. blockCount = blockCount + 1 | 0;
  27. const preBlockindex = blockCount;
  28. const {blockDiv, h, titleInput, inputButton, descButton, imgButton} = getBlockElements(contentDiv);
  29. parseBlockDiv = blockDiv;
  30. const title = parseTitle(line);
  31. blockArray[preBlockindex] = {title: title};
  32. h.textContent = title;
  33. inputButton.onclick = function() {
  34. const title = titleInput.value;
  35. blockArray[preBlockindex].title = title;
  36. h.textContent = title;
  37. }
  38. descButton.onclick = function() {
  39. const ownDataIndex = blockArray[preBlockindex].data.length;
  40. const {p, descTextArea, descInputButton} = getdescElements(blockDiv);
  41. descInputButton.onclick = function() {
  42. blockArray = handleDescInputClick(p, descTextArea.value, blockArray, preBlockindex, ownDataIndex);
  43. }
  44. }
  45. imgButton.onclick = function() {
  46. const imgDataIndex = blockArray[preBlockindex].data.length;
  47. const {img, imgInput, widthInput, heightInput, imgInputButton} = getImgElements(blockDiv);
  48. imgInputButton.onclick = function() {
  49. const imgObject = {image: {src: imgInput.value,
  50. height: heightInput.value,
  51. width: widthInput.value,
  52. alt: 'image field',
  53. layout: 'responsive'}};
  54. blockArray = handleImgInputClick(img, imgObject, blockArray, preBlockindex, imgDataIndex);
  55. }
  56. }
  57. } else if (line.includes('amp-img')) {
  58. const preBlockindex = blockCount;
  59. if (line.includes('</amp-img>')) {
  60. blockArray = addDataToBlockArray(preImgObject, blockArray, preBlockindex, imgDataIndex);
  61. isAmpImgRange = false;
  62. continue;
  63. }
  64. imgDataIndex = preDataIndex;
  65. preDataIndex += 1;
  66. isAmpImgRange = true;
  67. const {img, imgInput, widthInput, heightInput, imgInputButton} = getImgElements(parseBlockDiv);
  68. preImg = img;
  69. imgInputButton.onclick = function() {
  70. const imgObject = {image: {src: imgInput.value,
  71. height: heightInput.value,
  72. width: widthInput.value,
  73. alt: 'image field',
  74. layout: 'responsive'}};
  75. blockArray = handleImgInputClick(img, imgObject, blockArray, preBlockindex, imgDataIndex);
  76. }
  77. } else {
  78. const preBlockindex = blockCount;
  79. const ownDataIndex = preDataIndex;
  80. preDataIndex += 1;
  81. const {p, descTextArea, descInputButton} = getdescElements(parseBlockDiv);
  82. const text = line;
  83. p.textContent = text;
  84. blockArray = addDataToBlockArray({description: {text: text}}, blockArray, preBlockindex, ownDataIndex);
  85. descInputButton.onclick = function() {
  86. blockArray = handleDescInputClick(p, descTextArea.value, blockArray, preBlockindex, ownDataIndex);
  87. }
  88. }
  89. }
  90. return {blockArray: blockArray, blockCount: blockCount}
  91. }
  92. const parseTitle = line => {
  93. var title = '';
  94. title = line.replace('## **', '');
  95. title = title.replace('**', '');
  96. return title;
  97. };
  98. const parseAmpImg = line => {
  99. if (line.includes('alt')) {
  100. const altParameter = line.replace(/alt=|"/g, '');
  101. return {alt: altParameter};
  102. } else if (line.includes('src')) {
  103. const srcParameter = line.replace(/src=|"/g, '');
  104. return {src: srcParameter};
  105. } else if (line.includes('height')) {
  106. const heightParameter = line.replace(/height=|"/g, '');
  107. return {height: heightParameter};
  108. } else if (line.includes('width')) {
  109. const widthParameter = line.replace(/width=|"/g, '');
  110. return {width: widthParameter};
  111. } else if (line.includes('layout')) {
  112. const layoutParameter = line.replace(/layout=|"|>/g, '');
  113. }
  114. }
  115. function handleDescInputClick(p, desc, blockArray, blockIndex, ownDataIndex) {
  116. p.textContent = desc;
  117. return addDataToBlockArray({description: {text: desc}}, blockArray, blockIndex, ownDataIndex)
  118. }
  119. function handleImgInputClick(img, imgObject, blockArray, blockIndex, ownDataIndex) {
  120. img.setAttribute('src', _.get(imgObject, 'image.src'));
  121. img.setAttribute('width', _.get(imgObject, 'image.width'));
  122. img.setAttribute('height', _.get(imgObject, 'image.height'));
  123. img.setAttribute('alt', _.get(imgObject, 'image.alt'));
  124. return addDataToBlockArray(imgObject, blockArray, blockIndex, ownDataIndex)
  125. }