Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Live Markdown for web refactor #394

Open
wants to merge 48 commits into
base: main
Choose a base branch
from
Open

Conversation

Skalakid
Copy link
Collaborator

@Skalakid Skalakid commented Jun 20, 2024

Details

This PR refactors the web implementation of the Live Markdown library. The main goals of it are:

  • enhancing algorithms and logic behind Markdown Input, to make the project more flexible and enable the possibility of adding new more complex features like inline images or code blocks
  • changing and organizing Markdown input HTML structure, to meet the industry standards, fixing problems with cursor positioning and problems with scrolling into view
  • improving code quality, to make the codebase more understandable and boost the developer experience

During this refactor phase we:

  • changed web live markdown HTML structure so now:

    • every line is represented as paragraph element <p> - it makes structure much clear and organized, and enables us to apply custom logic to specific lines
    • every text is wrapped with <span data-type="text"> tag - by wrapping text with HTML element we enable many useful functions that aren't available in normal text node, for example: scrollIntoView()
    • instead of \n characters inside the input's HTML structure we use <br> tags - br tags give use much more flexibility and fix problem with cursor navigation when using arrow keys when moving between markdown components
    • every <br> tag is wrapped with <span data-type="br"> tag - it fixes many problems connected to cursor positioning

    Thanks to the new structure we enabled the usage of many styles that were generating a lot of bugs in the past, like display: block. Also were able to remove all workarounds connected to cursor positioning.

  • added HTML tree node structure, that represents current HTML dom and stores many important information about every element inside the input. Thanks to this tree structure we can easily interact with the markdown elements and we were able to completely refactor and improve the performance of cursor positioning algorithms

  • replaced all text value representation functions like process value or normalizeValue with one textContent variable that always contains properly formatted text value without any additional newlines from contentEditable

  • split long files of code into smaller ones, and sort functions into utils

  • prepared the code for new, more complex features like inline images

This refactor was made as a part of inline image feature. After discovering some structure and logic limitations when creating inline image POC we decided to improve Live Markdown for web.

This refactor will fix or unblock following issues:

Related Issues

GH_LINK

Manual Tests

Since it's a big change it would be great to test it in all cases connected to:

  • markdown parsing
  • cursor positioning
  • input focusing
  • content copy and pasting
  • history undoing/redoing

Linked PRs

Expensify/App#40181 (comment)

@Skalakid Skalakid changed the title @skalakid/web parser refactor Live Markdown for web refactor Jun 20, 2024
@Skalakid Skalakid force-pushed the @Skalakid/web-parser-refactor branch from 701962c to 38693c4 Compare June 26, 2024 13:58
@Skalakid Skalakid requested a review from tomekzaw June 28, 2024 16:22
@Skalakid Skalakid self-assigned this Jun 28, 2024
@Skalakid Skalakid added enhancement New feature or request labels Jun 28, 2024
@Skalakid Skalakid force-pushed the @Skalakid/web-parser-refactor branch 5 times, most recently from 148a5d0 to 695f251 Compare July 5, 2024 07:11
@Skalakid Skalakid force-pushed the @Skalakid/web-parser-refactor branch from 695f251 to 862e74a Compare July 5, 2024 07:14
@Skalakid Skalakid force-pushed the @Skalakid/web-parser-refactor branch from b8bf435 to 0580f45 Compare July 5, 2024 07:22
@Skalakid Skalakid marked this pull request as ready for review July 5, 2024 11:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants