function html2notecase(contents, note) { // remove any possible extra newlines which might be inserted - all relevant new lines should be only in
and

contents = contents.replace(/(?:\r\n|\r|\n)/, ''); // some editors insert this font stuff which messes up parsing by doubling newlines contents = contents.replace(/]*>/g, ''); contents = contents.replace(/<\/font>/g, ''); contents = contents.replace(/
<\/p>/g, '\n'); contents = contents.replace(/


<\/p>/g, '\n'); contents = contents.replace(/
/g, '\n'); contents = contents.replace(/
/g, '\n'); contents = contents.replace(/<\/p>/g, '\n'); contents = contents.replace(/

/g, ''); contents = contents.replace(/ /g, ' '); let index = 0; note.formatting = []; note.links = []; note.images = []; while (index < contents.length) { let curContent = contents.substr(index); if (contents[index] === '<') { let found = false; const endOfTag = curContent.indexOf('>'); if (endOfTag === -1) { console.log("Can't find the end of the tag"); } const curTag = curContent.substr(0, endOfTag + 1); for (tagId in tags) { const tag = tags[tagId]; if (contents.substr(index, tag.length) === tag) { found = true; note.formatting.push({ note_id: note.detail.note_id, note_offset: index, fmt_tag: tagId, fmt_color: '', fmt_font: '', fmt_value: 100 }); contents = contents.substr(0, index) + contents.substr(index + tag.length); break; } } if (curTag.substr(0, 4) === "]+?href="([^"]+?)"[^>]*?>([^<]+?)<\/a>/.exec(curContent); if (linkMatch !== null) { const targetUrl = linkMatch[1]; const linkText = linkMatch[2]; const newLink = { note_id: note.detail.note_id, note_offset: index, lnk_text: linkText }; const noteIdMatch = /app#([A-Za-z0-9]{22})/.exec(targetUrl); if (noteIdMatch !== null) { newLink.target_note_id = noteIdMatch[1]; } else { newLink.target_url = targetUrl; } note.links.push(newLink); contents = contents.substr(0, index) + linkText + contents.substr(index + linkMatch[0].length); // we'll skip the link text so that it's not processed twice (second time by link auto detection) index += linkText.length; found = true; } if (!found) { contents = contents.substr(0, index) + contents.substr(index + endOfTag + 1); } } else { let linkMatch = /^(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/i.exec(curContent); if (linkMatch !== null) { const targetUrl = linkMatch[0]; const newLink = { note_id: note.detail.note_id, note_offset: index, lnk_text: targetUrl }; const noteIdMatch = /app#([A-Za-z0-9]{22})/.exec(targetUrl); if (noteIdMatch !== null) { newLink.target_note_id = noteIdMatch[1]; } else { newLink.target_url = targetUrl; } note.links.push(newLink); index += targetUrl.length; } else { index++; } } } contents = contents.trim(); note.detail.note_text = contents; }