function load(textarea, div) { div.innerHTML = ''; let lines = textarea.value.split('\n'); let firsttableline = null; for (let i = 0; i < lines.length; i++) { let line = lines[i]; let elem = formatLine(line); div.append(elem); if (elem.classList.contains('tablerow')) { if (firsttableline == null) { firsttableline = elem; } } else if (firsttableline != null) { formatTable(firsttableline); firsttableline = null; } } } function save(textarea, div) { let lines = div.children; let text = ''; for (let i=0; i\s*>\s*>(\s|$)/i)) { token = /^(\s*>\s*>\s*>(\s|$))/i; elem.classList.add('bq3'); elem.classList.add('bq'); } else if (line.match(/^\s*>\s*>(\s|$)/i)) { token = /^(\s*>\s*>(\s|$))/i; elem.classList.add('bq2'); elem.classList.add('bq'); } else if (line.match(/^\s*>(\s|$)/i)) { token = /^(\s*>(\s|$))/i; elem.classList.add('bq1'); elem.classList.add('bq'); } else { elem.classList.add('body'); } if (elem.classList.contains('bq') || elem.classList.contains('body')) { if (line.match(/^\s*((>\s*){0,3}\s)?([\*\-+]\s*){3}(\s|$)/i)) { token = /^(\s*(>\s*){0,3}([\*\-+]\s*){3}(\s|$))/i; elem.classList.add('ul3'); elem.classList.remove('body'); } else if (line.match(/^\s*((>\s*){0,3}\s)?([\*\-+]\s*){2}(\s|$)/i)) { token = /^(\s*(>\s*){0,3}([\*\-+]\s*){2}(\s|$))/i; elem.classList.add('ul2'); elem.classList.remove('body'); } else if (line.match(/^\s*((>\s*){0,3}\s)?[\*\-+](\s|$)/i)) { token = /^(\s*(>\s*){0,3}[\*\-+](\s*|$))/; elem.classList.add('ul1'); elem.classList.remove('body'); } else if (line.match(/^\s*((>\s*){0,3}\s)?([0-9]+\.){3}(\s|$)/i)) { token = /^(\s*(>\s*){0,3}(\s*|$))/; elem.classList.add('ol3'); elem.classList.remove('body'); } else if (line.match(/^\s*((>\s*){0,3}\s)?([0-9]+\.){2}(\s|$)/i)) { token = /^(\s*(>\s*){0,3}(\s*|$))/; elem.classList.add('ol2'); elem.classList.remove('body'); } else if (line.match(/^\s*((>\s*){0,3}\s)?[0-9]+\.(\s|$)/i)) { token = /^(\s*(>\s*){0,3}(\s*|$))/; elem.classList.add('ol1'); elem.classList.remove('body'); } } if (token != null) { line = line.replace(token, '$1'); } line = addLink(line); line = addBold(line); line = addItalic(line); line = addTableLine(line); line = addMono(line, listMono); elem.innerHTML = line; if (elem.getElementsByClassName('tablerow').length > 0) { if (elem.childNodes[0].childNodes.length > 0) { let child = elem.childNodes[0].childNodes[0]; while(child != null) { if (child.nodeType == 3) { let newchild = document.createElement('span'); newchild.innerText = child.nodeValue; child.parentNode.replaceChild(newchild, child); child = newchild; } child = child.nextSibling; } } elem.classList.remove('body'); elem.classList.add('tablerow'); } let links = elem.getElementsByClassName('link'); for (let i=0; i 1000) { continue; } cpt++; } matches = matches.reverse(); for(let i=0; i|' + line.substring(index+1, line.length); continue; } if (i == 0 && index == line.length - 1) { // dernier | line = line.substring(0, index) + '|' + line.substring(index+1, line.length); continue; } line = line.substring(0, index) + '|' + line.substring(index+1, line.length); } line = '' + line + ''; } return line; } function formatTable(line) { if (! line.classList.contains('tablerow')) { return; } let firstline = line; let lastline = line; while (firstline.previousSibling !== null && firstline.previousSibling.classList.contains('tablerow')) { firstline = firstline.previousSibling; firstline.classList.remove('firsttablerow'); firstline.classList.remove('lasttablerow'); } while (lastline.nextSibling !== null && lastline.nextSibling.classList.contains('tablerow')) { lastline = lastline.nextSibling; lastline.classList.remove('firsttablerow'); lastline.classList.remove('lasttablerow'); } firstline.classList.add('firsttablerow'); lastline.classList.add('lasttablerow'); resizeTableCols(firstline, lastline) } function resizeTableCols(firstline, lastline) { let colsmaxwidth = []; let currentline = firstline; while (currentline !== null && currentline.classList.contains('tablerow')) { let tablerow = currentline.getElementsByClassName('tablerow')[0]; let childNodes = tablerow.childNodes; let currentwidth = 0; let col = 0; let currentleft; for(let i=0; i 1000) { continue; } cpt++; } matches = matches.reverse(); for(let i=0; i`' + mono + '`' + line.substring(matches[i]+2, line.length); } return line; } function addLink(line) { line = line.replace(/(\[([^\]]+?)\]\(([^\)]+?)\))/ig, '[$2]($3)'); line = line.replace(/(\[([^\]]+?)\]\(\))/ig, '[$2]()'); line = line.replace(/(\[\]\(([^\)]+?)\))/ig, '[]($2)'); return line; } function addBold(line) { line = line.replace(/\*\*([^\s].*?)\*\*/ig, '**$1**'); line = line.replace(/__([^\s].*?)__/ig, '__$1__'); return line; } function addItalic(line) { line = line.replace(/(^|[^\*])\*([^\*\s].*?[^\*\s]|[^\*\s])\*([^\*]|$)/ig, '$1*$2*$3'); line = line.replace(/(^|[^_])_([^_\s].*?[^_\s]|[^_\s])_([^_]|$)/ig, '$1_$2_$3'); return line; } export { load, save, formatLine, formatTable };