diff --git a/README.md b/README.md index 78a0d34..5b0e27e 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,9 @@ Création dynamique de pages en créant un lien dans une page. Ranges : https://stackoverflow.com/questions/6249095/how-to-set-the-caret-cursor-position-in-a-contenteditable-element-div + +(?:^|\S): Match start or a non-whitespace +:: Match a colon +|: OR +:: Match a colon +(?:$|\S): Match end or a non-whitespace diff --git a/static/mdnotes.css b/static/mdnotes.css index 896a878..42f0ea7 100644 --- a/static/mdnotes.css +++ b/static/mdnotes.css @@ -31,8 +31,9 @@ div#mdnotes:focus { div#mdnotes div.h1 { font-size: 3rem; margin-top: 1rem; - margin-bottom: 1.5rem; - border-bottom: 1px solid #666666; + margin-bottom: 1.3rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid #dddddd; } div#mdnotes div.h2 { @@ -107,9 +108,13 @@ div#mdnotes div.ol3.bq1 { padding-left: 2.9rem; } div#mdnotes div.ol3.bq2 { padding-left: 2.6rem; } div#mdnotes div.ol3.bq3 { padding-left: 2.3rem; } +div#mdnotes div.tablecell { + display: inline-block; +} + div#mdnotes div.mdnotes_line span.token { font-weight: 1; - color: #446699; + color: #1353b3; overflow: hidden; } @@ -130,6 +135,10 @@ div#mdnotes span.bold { font-weight: bold; } +div#mdnotes span.italic { + font-style: italic; +} + div#mdnotes span.mono { font-family: monospace; color: #885511; diff --git a/static/modules/md.js b/static/modules/md.js index 27de10b..196de78 100644 --- a/static/modules/md.js +++ b/static/modules/md.js @@ -3,6 +3,7 @@ function load(textarea, div) { let lines = textarea.value.split('\n'); for (let i = 0; i < lines.length; i++) { let line = lines[i]; + line = line.replace(/\t/, emsp()); let elem = formatLine(line); div.append(elem); } @@ -12,11 +13,15 @@ function save(textarea, div) { let lines = div.children; let text = ''; for (let i=0; i\s*>\s*>\s/i)) { - token = /^(>\s*>\s*>\s)/i; + } else if (line.match(/^\s*>\s*>\s*>\s/i)) { + token = /^(\s*>\s*>\s*>\s)/i; elem.classList.add('bq3'); elem.classList.add('bq'); - } else if (normLine.match(/^>\s*>\s/i)) { - token = /^(>\s*>\s)/i; + } else if (line.match(/^\s*>\s*>\s/i)) { + token = /^(\s*>\s*>\s)/i; elem.classList.add('bq2'); elem.classList.add('bq'); - } else if (normLine.match(/^>\s/i)) { - token = /^(>\s)/i; + } 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 (normLine.match(/^((>\s*){0,3}\s)?([\*\-+]\s*){3}\s/i)) { - token = /^((>\s*){0,3}([\*\-+]\s*){2})/i; + if (line.match(/^\s*((>\s*){0,3}\s)?([\*\-+]\s*){3}\s/i)) { + token = /^(\s*(>\s*){0,3}([\*\-+]\s*){2})/i; elem.classList.add('ul3'); elem.classList.remove('body'); - } else if (normLine.match(/^((>\s*){0,3}\s)?([\*\-+]\s*){2}\s/i)) { - token = /^((>\s*){0,3}[\*\-+]\s*)/i; + } else if (line.match(/^\s*((>\s*){0,3}\s)?([\*\-+]\s*){2}\s/i)) { + token = /^(\s*(>\s*){0,3}[\*\-+])/i; elem.classList.add('ul2'); elem.classList.remove('body'); - } else if (normLine.match(/^((>\s*){0,3}\s)?[\*\-+]\s/i)) { - token = /^((>\s*){1,3})/; - if (token == '') { - token = null; - } + } 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 (normLine.match(/^((>\s*){0,3}\s)?([0-9]+\.){3}\s/i)) { - token = /^((>\s*){1,3})/; - if (token == '') { - token = null; - } + } 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 (normLine.match(/^((>\s*){0,3}\s)?([0-9]+\.){2}\s/i)) { - token = /^((>\s*){1,3})/; - if (token == '') { - token = null; - } + } 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 (normLine.match(/^((>\s*){0,3}\s)?[0-9]+\.\s/i)) { - token = /^((>\s*){1,3})/; - if (token == '') { - token = null; - } + } 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'); } } elem.classList.add('mdnotes_line'); - normLine = addLink(normLine); - normLine = addBold(normLine); - normLine = addMono(normLine); + line = addLink(line); + line = addBold(line); + line = addItalic(line); + line = addMono(line); if (token != null) { - normLine = normLine.replace(token, '$1'); + line = line.replace(token, '$1'); } - elem.innerHTML = normLine; + elem.innerHTML = line; let links = elem.getElementsByClassName('link'); for (let i=0; i*$2*$3'); + line = line.replace(/(^|[^_])_([^_\s].*?[^_\s]|[^_\s])_([^_]|$)/ig, '$1_$2_$3'); + return line; +} + +export { load, save, formatLine }; diff --git a/static/modules/mdnotes.js b/static/modules/mdnotes.js index 53cc988..fa3ac91 100644 --- a/static/modules/mdnotes.js +++ b/static/modules/mdnotes.js @@ -33,6 +33,30 @@ function onedit(e) { setStartPositionInLine(newline, position); } +function onkeydown(e) { + if (e.key != 'Tab') { + return true; + } + + e.preventDefault(); + let key = ' '; + let ret = getStartPositionInLine(); + let line = ret[0]; + let position = ret[1]; + let txt = line.innerText; + if (position == 0) { + line.innerHTML = key + txt; // 4 espaces =>   + } else { + line.innerHTML = txt.substring(0, position) + key + txt.substring(position, txt.length); + } + /*if (line.innerText.match(RegExp(emsp()))) { + alert('emsp'); + }*/ + setStartPositionInLine(line, position + 1); + onedit(e); + return false; +} + function onkeyup(e) { if (e.key == 'Escape') { e.preventDefault(); @@ -45,6 +69,7 @@ function init() { let mdnotesdiv = document.getElementById('mdnotes'); mdnotesdiv.addEventListener('input', onedit); mdnotesdiv.addEventListener('keyup', onkeyup); + mdnotesdiv.addEventListener('keydown', onkeydown); let saveButton = document.getElementById('saveButton'); saveButton.addEventListener('click', onsave); loadButton.addEventListener('click', onload); diff --git a/templates/index.html b/templates/index.html index 83fa9b0..7754159 100644 --- a/templates/index.html +++ b/templates/index.html @@ -21,9 +21,9 @@ Encore un joli texte ### Titre 3-2 T'en as marre ??? #### Titre 4 - - coucou - - pas vrai - - tant pis +- coucou +- pas vrai +- tant pis Moi oui !!!