Pick reply insertion point based on parser tree, not DOM tree
I don't like that I had to special-case `<p>` tags (top-level
comments) in this code. I feel like it should be possible to handle
top-level comments and replies in a generic way, but I couldn't find
a way to do it that actually worked.
Notes about changes to the behavior, based on the test cases:
* Given a top-level comment A, if there was a "list gap" in the
replies to it: previously new replies would be incorrectly added at
the location of the gap; now they are added after the last reply.
(T242822)
Example: "pl", comment at "08:23, 29 wrz 2018 (CEST)"
* Given a top-level comment A and a reply to it B that skips an
indentation level: previously new replies to A would be added with
the same indentation level as B; now they are added with the
indentation level of A plus one. (The old behavior wasn't a bug, and
this is an accidental effect of other changes, but it seems okay.)
Example: "pl", comment at "03:22, 30 wrz 2018 (CEST)"
and reply at "09:43, 30 wrz 2018 (CEST)"
* Given a top-level comment A, a reply to it B, and a following
top-level comment C that starts at the same indentation level as B:
previously new replies to A would be incorrectly added in the middle
of the comment C, due to the DOM list structure; now they are added
before C. (T241391)
(It seems that comment C was supposed to be a multi-line reply that
was wrongly indented. Unfortunately we have no way to distinguish
this case from a top-level multi-line comment that just happens to
start with a bullet list.)
Example: "pl", comments at "03:36, 24 paź 2018 (CEST)",
"08:35, 24 paź 2018 (CEST)", "17:14, 24 paź 2018 (CEST)"
* In the "en" example, there are some other changes where funnily
nested tags result in slightly different results with the new code.
They don't look important.
* In rare cases, we must split an existing list to add a reply in the
right place. (Basically add `</ul>` before the reply and `<ul>`
after, but it's a bit awkward in DOM terms.)
Example: split-list.html, comment "aaa"; also split-list2.html
(which is the result of saving the previous reply), comment "aaa"
* The modifier can no longer generate DOM that is invalid HTML, fixing
a FIXME in modifier.test.js (or at least, it doesn't happen in these
test cases any more).
Bug: T241391
Bug: T242822
Change-Id: I2a70db01e9a8916c5636bc59ea8490166966d5ec
2020-01-15 06:09:13 +00:00
< div class = "mw-parser-output" >
< h2 > < span class = "mw-headline" id = "split_test_case" > split test case< / span > < span class = "mw-editsection" > < span class = "mw-editsection-bracket" > [< / span > < a href = "/w/index.php?title=Talk:Scratch&action=edit&section=4" title = "Edit section: split test case" > edit source< / a > < span class = "mw-editsection-bracket" > ]< / span > < / span > < / h2 >
< p > aaa < b > < a href = "/wiki/User:Matma_Rex" title = "User:Matma Rex" > Matma Rex< / a > | < a href = "/wiki/User_talk:Matma_Rex" title = "User talk:Matma Rex" > talk< / a > < / b > 23:19, 22 January 2020 (UTC)
< / p >
< ul > < li > bbb < b > < a href = "/wiki/User:Matma_Rex" title = "User:Matma Rex" > Matma Rex< / a > | < a href = "/wiki/User_talk:Matma_Rex" title = "User talk:Matma Rex" > talk< / a > < / b > 23:19, 22 January 2020 (UTC)
2020-08-04 00:04:20 +00:00
< ul > < li > ddd < b > < a href = "/wiki/User:Matma_Rex" title = "User:Matma Rex" > Matma Rex< / a > | < a href = "/wiki/User_talk:Matma_Rex" title = "User talk:Matma Rex" > talk< / a > < / b > 23:19, 22 January 2020 (UTC)< dl > < dd data-parsoid = "{}" > Reply to Matma Rex|2020-01-22T23:19:00.000Z|2< / dd > < / dl > < / li > < / ul > < dl > < dd data-parsoid = "{}" > Reply to Matma Rex|2020-01-22T23:19:00.000Z|1< / dd > < / dl > < / li >
Pick reply insertion point based on parser tree, not DOM tree
I don't like that I had to special-case `<p>` tags (top-level
comments) in this code. I feel like it should be possible to handle
top-level comments and replies in a generic way, but I couldn't find
a way to do it that actually worked.
Notes about changes to the behavior, based on the test cases:
* Given a top-level comment A, if there was a "list gap" in the
replies to it: previously new replies would be incorrectly added at
the location of the gap; now they are added after the last reply.
(T242822)
Example: "pl", comment at "08:23, 29 wrz 2018 (CEST)"
* Given a top-level comment A and a reply to it B that skips an
indentation level: previously new replies to A would be added with
the same indentation level as B; now they are added with the
indentation level of A plus one. (The old behavior wasn't a bug, and
this is an accidental effect of other changes, but it seems okay.)
Example: "pl", comment at "03:22, 30 wrz 2018 (CEST)"
and reply at "09:43, 30 wrz 2018 (CEST)"
* Given a top-level comment A, a reply to it B, and a following
top-level comment C that starts at the same indentation level as B:
previously new replies to A would be incorrectly added in the middle
of the comment C, due to the DOM list structure; now they are added
before C. (T241391)
(It seems that comment C was supposed to be a multi-line reply that
was wrongly indented. Unfortunately we have no way to distinguish
this case from a top-level multi-line comment that just happens to
start with a bullet list.)
Example: "pl", comments at "03:36, 24 paź 2018 (CEST)",
"08:35, 24 paź 2018 (CEST)", "17:14, 24 paź 2018 (CEST)"
* In the "en" example, there are some other changes where funnily
nested tags result in slightly different results with the new code.
They don't look important.
* In rare cases, we must split an existing list to add a reply in the
right place. (Basically add `</ul>` before the reply and `<ul>`
after, but it's a bit awkward in DOM terms.)
Example: split-list.html, comment "aaa"; also split-list2.html
(which is the result of saving the previous reply), comment "aaa"
* The modifier can no longer generate DOM that is invalid HTML, fixing
a FIXME in modifier.test.js (or at least, it doesn't happen in these
test cases any more).
Bug: T241391
Bug: T242822
Change-Id: I2a70db01e9a8916c5636bc59ea8490166966d5ec
2020-01-15 06:09:13 +00:00
< li > test < b > < a href = "/wiki/User:Matma_Rex" title = "User:Matma Rex" > Matma Rex< / a > | < a href = "/wiki/User_talk:Matma_Rex" title = "User talk:Matma Rex" > talk< / a > < / b > 23:36, 22 January 2020 (UTC)
2020-08-04 00:04:20 +00:00
< dl > < dd data-parsoid = "{}" > Reply to Matma Rex|2020-01-22T23:36:00.000Z|0< / dd > < / dl > < / li > < / ul > < dl > < dd data-parsoid = "{}" > Reply to Matma Rex|2020-01-22T23:19:00.000Z|0< / dd > < / dl > < ul > < li > < ul > < li > ccc< / li > < / ul > < / li > < / ul >
Pick reply insertion point based on parser tree, not DOM tree
I don't like that I had to special-case `<p>` tags (top-level
comments) in this code. I feel like it should be possible to handle
top-level comments and replies in a generic way, but I couldn't find
a way to do it that actually worked.
Notes about changes to the behavior, based on the test cases:
* Given a top-level comment A, if there was a "list gap" in the
replies to it: previously new replies would be incorrectly added at
the location of the gap; now they are added after the last reply.
(T242822)
Example: "pl", comment at "08:23, 29 wrz 2018 (CEST)"
* Given a top-level comment A and a reply to it B that skips an
indentation level: previously new replies to A would be added with
the same indentation level as B; now they are added with the
indentation level of A plus one. (The old behavior wasn't a bug, and
this is an accidental effect of other changes, but it seems okay.)
Example: "pl", comment at "03:22, 30 wrz 2018 (CEST)"
and reply at "09:43, 30 wrz 2018 (CEST)"
* Given a top-level comment A, a reply to it B, and a following
top-level comment C that starts at the same indentation level as B:
previously new replies to A would be incorrectly added in the middle
of the comment C, due to the DOM list structure; now they are added
before C. (T241391)
(It seems that comment C was supposed to be a multi-line reply that
was wrongly indented. Unfortunately we have no way to distinguish
this case from a top-level multi-line comment that just happens to
start with a bullet list.)
Example: "pl", comments at "03:36, 24 paź 2018 (CEST)",
"08:35, 24 paź 2018 (CEST)", "17:14, 24 paź 2018 (CEST)"
* In the "en" example, there are some other changes where funnily
nested tags result in slightly different results with the new code.
They don't look important.
* In rare cases, we must split an existing list to add a reply in the
right place. (Basically add `</ul>` before the reply and `<ul>`
after, but it's a bit awkward in DOM terms.)
Example: split-list.html, comment "aaa"; also split-list2.html
(which is the result of saving the previous reply), comment "aaa"
* The modifier can no longer generate DOM that is invalid HTML, fixing
a FIXME in modifier.test.js (or at least, it doesn't happen in these
test cases any more).
Bug: T241391
Bug: T242822
Change-Id: I2a70db01e9a8916c5636bc59ea8490166966d5ec
2020-01-15 06:09:13 +00:00
< p > ccc < b > < a href = "/wiki/User:Matma_Rex" title = "User:Matma Rex" > Matma Rex< / a > | < a href = "/wiki/User_talk:Matma_Rex" title = "User talk:Matma Rex" > talk< / a > < / b > 23:19, 22 January 2020 (UTC)
< / p > < dl > < dd data-parsoid = "{}" > Reply to Matma Rex|2020-01-22T23:19:00.000Z|3< / dd > < / dl >
< / div >