Page MenuHomePhabricator

[Refactor] Reimplement group references structure without relying on synthetic ref nodes or list key
Closed, ResolvedPublic

Description

Currently, ve.dm.MWGroupReferences.static.makeGroupRefs is responsible for figuring out the hierarchical reference list numbering for sub-references. However, it has the following characteristics that make it not fit with our future, refactored data model:

  • Assumes that all refs (including main refs) are associated with a ve.dm.MWReferenceNode, by iterating over nodeGroup.getFirstNodesInIndexOrder.
  • Builds a data structure footnoteNumberLookup keyed on the listKey instead of listIndex.
  • Stores its result in MWReferenceNode as a side effect: refNode.setGroupIndex( groupItemIndex ) - here, groupItemIndex is the footnote number, in an abstract form like {1, -1} for "first top-level ref" and {2, 3} for sub-reference numbered "2.3" in English.

We do have QUnit tests in tests/qunit/ve-cite/ve.dm.MWGroupReferences.test.js which run through the important code paths for numbering.

The goal of this task is to reimplement this numbering, in our new paradigm. Specifically:

  • Write the new algorithm in ve.dm.MWDataTransitionHelper
  • Use a TDD-like approach, building matching QUnit tests along with the logic.
  • The basic logical structure *might* be reusable (copy it over), because we leave placeholders for the main refs even when synthetic refs are not available.
  • TBD: unknown whether we need the new data structure to be a lookup keyed on listIndex. But we do know that we need the listIndex to be present, so we can find the footnote body when we render the list in later work.
  • Feel free to create a totally new type of data structure, the {1, -1} tuples were not that great in hindsight.

Event Timeline

Change #1251344 had a related patch set uploaded (by Mareike Heuer; author: Mareike Heuer):

[mediawiki/extensions/Cite@master] Refactor MWDataTransitionHelper

https://gerrit.wikimedia.org/r/1251344

Change #1254208 had a related patch set uploaded (by Awight; author: Awight):

[mediawiki/extensions/Cite@master] [POC] ve.ce test for reflist

https://gerrit.wikimedia.org/r/1254208

Change #1254935 had a related patch set uploaded (by Mareike Heuer; author: Mareike Heuer):

[mediawiki/extensions/Cite@master] Qunit test for ve.ce MWReferenceListNode

https://gerrit.wikimedia.org/r/1254935

Change #1254208 abandoned by Awight:

[mediawiki/extensions/Cite@master] [POC] ve.ce test for reflist

Reason:

see Ia0c14b15c195150a278a4bd18857b6f8aab9467b

https://gerrit.wikimedia.org/r/1254208

Change #1254966 had a related patch set uploaded (by Mareike Heuer; author: Mareike Heuer):

[mediawiki/extensions/Cite@master] Add methods to build reflist in DataTransitionHelper

https://gerrit.wikimedia.org/r/1254966

Change #1251344 abandoned by Mareike Heuer:

[mediawiki/extensions/Cite@master] Refactor MWDataTransitionHelper

https://gerrit.wikimedia.org/r/1251344

Change #1254935 merged by jenkins-bot:

[mediawiki/extensions/Cite@master] Qunit test for ve.ce MWReferenceListNode

https://gerrit.wikimedia.org/r/1254935

Change #1254966 merged by jenkins-bot:

[mediawiki/extensions/Cite@master] Add methods to build reflist in DataTransitionHelper

https://gerrit.wikimedia.org/r/1254966

Change #1260642 had a related patch set uploaded (by WMDE-Fisch; author: WMDE-Fisch):

[mediawiki/extensions/Cite@master] VE: Remove MWDataTransitionHelper from init.js

https://gerrit.wikimedia.org/r/1260642

Change #1260642 merged by jenkins-bot:

[mediawiki/extensions/Cite@master] Change MWDataTransitionHelper test to use require()

https://gerrit.wikimedia.org/r/1260642

WMDE-Fisch subscribed.

Seems resolved now.