|
|
|
|
@ -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<lines.length; i++) {
|
|
|
|
|
text += lines[i].innerText + '\n';
|
|
|
|
|
text += lines[i].innerText.replace(emsp(), '\t') + '\n';
|
|
|
|
|
}
|
|
|
|
|
textarea.value = text;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function emsp() {
|
|
|
|
|
return ' ';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function onlinkin(e) {
|
|
|
|
|
let link = e.currentTarget;
|
|
|
|
|
if (document.getElementById('mdnotes') !== document.activeElement) {
|
|
|
|
|
@ -49,83 +54,73 @@ function onlinkout(e) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function formatLine(line) {
|
|
|
|
|
let normLine = line.trimStart();
|
|
|
|
|
let token = null;
|
|
|
|
|
let elem = document.createElement('div');
|
|
|
|
|
if (normLine.match(/^####\s/i)) {
|
|
|
|
|
token = /^(####\s)/i;
|
|
|
|
|
line = line.replace('&', '&');
|
|
|
|
|
line = line.replace('<', '<');
|
|
|
|
|
if (line.match(/^\s*####\s/i)) {
|
|
|
|
|
token = /^(\s*####\s)/i;
|
|
|
|
|
elem.classList.add('h4');
|
|
|
|
|
} else if (normLine.match(/^###\s/i)) {
|
|
|
|
|
token = /^(###\s)/i;
|
|
|
|
|
} else if (line.match(/^\s*###\s/i)) {
|
|
|
|
|
token = /^(\s*###\s)/i;
|
|
|
|
|
elem.classList.add('h3');
|
|
|
|
|
} else if (normLine.match(/^##\s/)) {
|
|
|
|
|
token = /^(##\s)/i;
|
|
|
|
|
} else if (line.match(/^\s*##\s/)) {
|
|
|
|
|
token = /^(\s*##\s)/i;
|
|
|
|
|
elem.classList.add('h2');
|
|
|
|
|
} else if (normLine.match(/^#\s/i)) {
|
|
|
|
|
token = /^(#\s)/i;
|
|
|
|
|
} else if (line.match(/^\s*#\s/i)) {
|
|
|
|
|
token = /^(\s*#\s)/i;
|
|
|
|
|
elem.classList.add('h1');
|
|
|
|
|
} else if (normLine.match(/^>\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, '<span class="token">$1</span>');
|
|
|
|
|
line = line.replace(token, '<span class="token">$1</span>');
|
|
|
|
|
}
|
|
|
|
|
elem.innerHTML = normLine;
|
|
|
|
|
elem.innerHTML = line;
|
|
|
|
|
let links = elem.getElementsByClassName('link');
|
|
|
|
|
for (let i=0; i<links.length; i++) {
|
|
|
|
|
let link = links[i];
|
|
|
|
|
@ -152,4 +147,10 @@ function addBold(line) {
|
|
|
|
|
return line;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export { load, save, formatLine };
|
|
|
|
|
function addItalic(line) {
|
|
|
|
|
line = line.replace(/(^|[^\*])\*([^\*\s].*?[^\*\s]|[^\*\s])\*([^\*]|$)/ig, '$1<span class="italic"><span class="token">*</span>$2<span class="token">*</span></span>$3');
|
|
|
|
|
line = line.replace(/(^|[^_])_([^_\s].*?[^_\s]|[^_\s])_([^_]|$)/ig, '$1<span class="italic"><span class="token">_</span>$2<span class="token">_</span></span>$3');
|
|
|
|
|
return line;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export { load, save, formatLine };
|
|
|
|
|
|