CondeNast / atjson

atjson is a living content format for annotating content
https://atjson.condenast.io
Apache License 2.0
215 stars 13 forks source link

Nested lists are flattened when converting from gdocs paste source #445

Open bachbui opened 4 years ago

bachbui commented 4 years ago

In a Google Doc, you can create a nested list like

1. List item
2. List item
   a. Nested list item
   b. Nested list item
3. List item

This is represented in GDocs as a single list with 5 list items, where the outer items have attributes ls_nest: 0 and in nested items have attributes ls_nest: 1. When converting this from the GDocs source to Offset, we drop the ls_nest attribute and just produce a list with 5 elements.

What do you expect to happen?

Produce annotations like:

List item\nList item\nNested list item\nNested list item\nList item
                      ^-----item-----^  ^-----item-----^
                      ^------ List { level: 2 } -------^ 
^-item--^  ^-item--^  ^------------- item -------------^  ^-item--^
^---------------------- List { level: 1 } ------------------------^

What happened instead?

Produced annotations like:

List item\nList item\nNested list item\nNested list item\nList item
^-item--^  ^-item--^  ^-----item-----^  ^-----item-----^  ^-item--^
^----------------------------- List ------------------------------^

Environment

Software Version(s)
Node 10
Lerna 3.2
npm 6.4
Browser Chrome 80
tim-evans commented 4 years ago

@bachbui This is exactly why we have the level attribute on lists. Our intention was to use level to mark the list indentation.

I also thought there was some code around this in the GDocs paste source, but I may be totally wrong 🙃

bachbui commented 4 years ago

We'd set the level, yes, but the main point of difference is GDocs models this as a single list with nested list items, whereas Offset would model this as two separate lists, one nested inside of another. We are not doing anything in the converter to split the single list from GDocs.

bachbui commented 4 years ago

Updated the example above with the appropriate level attribute

bachbui commented 4 years ago

I think it'd also be reasonable also to follow the lead of GDocs here and set the nesting level at the item level rather than the list level. From what I can tell, we aren't looking at the list level in most (all?) renderers anyways.