livebook-dev / livebook

Automate code & data workflows with interactive Elixir notebooks
https://livebook.dev
Apache License 2.0
4.62k stars 408 forks source link

Nestings greater than 3 get smoshed on reloading if numbering is greater than 10 #2659

Closed mariari closed 2 weeks ago

mariari commented 2 weeks ago

Environment

Elixir 1.15.5 (compiled with Erlang/OTP 26)

Livebook 0.12.1


* Browsers that reproduce this bug (the more the merrier): Firefox
* Include what is logged in the browser console: 
* Include what is logged to the server console:

## Current behavior

I have the following livemd index header. I auto-generate an index for all my pages, so they can link to each other easily.

```md
## Index
1. [Toc](./toc.livemd)
2. [User](./user.livemd)
   1. [Data](./user/data.livemd)
3. [Contributing](./contributing.livemd)
   1. [Understanding Any Module](./contributing/understanding-any-module.livemd)
   2. [Writing Documents](./contributing/writing-documents.livemd)
   3. [Examples Over Testing](./contributing/examples-over-testing.livemd)
   4. [Examples](./contributing/examples.livemd)
   5. [Git](./contributing/git.livemd)
   6. [Hoon](./contributing/hoon.livemd)
   7. [Iex](./contributing/iex.livemd)
   8. [Mnesia Vs Actor State](./contributing/mnesia-vs-actor-state.livemd)
   9. [Observer](./contributing/observer.livemd)
   10. [Testing](./contributing/testing.livemd)
       1. [Running Tests](./contributing/testing/running-tests.livemd)
       2. [Writing Tests](./contributing/testing/writing-tests.livemd)
4. ...

This works great except when I open up the document in which it serializes to:

## Index

1. [Toc](./toc.livemd)
2. [User](./user.livemd)
   1. [Data](./user/data.livemd)
3. [Contributing](./contributing.livemd)
   1. [Understanding Any Module](./contributing/understanding-any-module.livemd)
   2. [Writing Documents](./contributing/writing-documents.livemd)
   3. [Examples Over Testing](./contributing/examples-over-testing.livemd)
   4. [Examples](./contributing/examples.livemd)
   5. [Git](./contributing/git.livemd)
   6. [Hoon](./contributing/hoon.livemd)
   7. [Iex](./contributing/iex.livemd)
   8. [Mnesia Vs Actor State](./contributing/mnesia-vs-actor-state.livemd)
   9. [Observer](./contributing/observer.livemd)
   10. [Testing](./contributing/testing.livemd)
   11. [Running Tests](./contributing/testing/running-tests.livemd)
   12. [Writing Tests](./contributing/testing/writing-tests.livemd)
4. [Visualization](./visualization.livemd)

Now if I edit the file by hand in the livebook editor (in firefox), to make it indent again, it saves the following to disk

## Index
1. [Toc](./../toc.livemd)
2. [User](./../user.livemd)
   1. [Data](./../user/data.livemd)
3. [Contributing](./../contributing.livemd)
   1. [Understanding Any Module](./../contributing/understanding-any-module.livemd)
   2. [Writing Documents](./../contributing/writing-documents.livemd)
   3. [Examples Over Testing](./../contributing/examples-over-testing.livemd)
   4. [Examples](./../contributing/examples.livemd)
   5. [Git](./../contributing/git.livemd)
   6. [Hoon](./../contributing/hoon.livemd)
   7. [Iex](./../contributing/iex.livemd)
   8. [Mnesia Vs Actor State](./../contributing/mnesia-vs-actor-state.livemd)
   9. [Observer](./../contributing/observer.livemd)
   10. [Testing](./../contributing/testing.livemd)
       1. [Running Tests](./../contributing/testing/running-tests.livemd)
       2. [Writing Tests](./../contributing/testing/writing-tests.livemd)
4. [Visualization](./../visualization.livemd)

However, if I close the page and reopen it, we get the following saved to disk again:

1. [Toc](./toc.livemd)
2. [User](./user.livemd)
   1. [Data](./user/data.livemd)
3. [Contributing](./contributing.livemd)
   1. [Understanding Any Module](./contributing/understanding-any-module.livemd)
   2. [Writing Documents](./contributing/writing-documents.livemd)
   3. [Examples Over Testing](./contributing/examples-over-testing.livemd)
   4. [Examples](./contributing/examples.livemd)
   5. [Git](./contributing/git.livemd)
   6. [Hoon](./contributing/hoon.livemd)
   7. [Iex](./contributing/iex.livemd)
   8. [Mnesia Vs Actor State](./contributing/mnesia-vs-actor-state.livemd)
   9. [Observer](./contributing/observer.livemd)
   10. [Testing](./contributing/testing.livemd)
   11. [Running Tests](./contributing/testing/running-tests.livemd)
   12. [Writing Tests](./contributing/testing/writing-tests.livemd)
4. [Visualization](./visualization.livemd)

I believe this occurs because when livebook opens the file it normalizes the spacing and numbering, however since it normalizes the spacing, it only makes indent level 3 have 6 spacing instead of 7. And since 10. has 2 digits, it should have an indent of 7 if i

Expected behavior

To have sections nested past 10 to work properly.

This can either be done by normalizing any section indented within a number to have an extra space for each spacing (My logic generating the TOC does this now), or by having 2 spaces auto indent without caring about the section's previous level.

mariari commented 2 weeks ago

For the time being I can get around this in the project I work on, as I've made tooling that lets me control where articles are placed in the TOC if I so desire. And since only a few pages in that section have sub documents, it's workable.

jonatanklosko commented 2 weeks ago

@mariari thanks for the report, fixed on main :)