Fix regression to auto-save

Cite's MWDocumentReferences included a Document, which caused
auto-save serialization to fail silently on the cyclical reference.

This patch moves the caching to per-instance scope, which was the
better choice to begin with.  The document refs are recalculated after
each change anyway, and caching is only necessary to work around an
awkward control flow in which each ReferenceNode is responsible for
its footnote number.

Bug: T377484
Change-Id: Iebe4befd603fe07d9da2a5bb6126228ec4d5dfea
This commit is contained in:
Adam Wight 2024-10-20 10:44:03 +02:00
parent 74ce9db4d4
commit b3e8737829
2 changed files with 5 additions and 6 deletions

View file

@ -47,15 +47,15 @@ OO.mixinClass( ve.dm.MWDocumentReferences, OO.EventEmitter );
*/
ve.dm.MWDocumentReferences.static.refsForDoc = function ( doc ) {
let docRefs;
// Only use cache if we're working with the full document.
if ( !doc.getOriginalDocument() ) {
// Only use cache if we're working with the full document.
docRefs = doc.getStorage( 'document-references-store' );
docRefs = doc.extCiteDocumentReferences;
}
if ( docRefs === undefined ) {
docRefs = new ve.dm.MWDocumentReferences( doc );
}
if ( !doc.getOriginalDocument() ) {
doc.setStorage( 'document-references-store', docRefs );
doc.extCiteDocumentReferences = docRefs;
}
return docRefs;
};

View file

@ -9,9 +9,8 @@ function getFragmentMock( hasRefs ) {
return {
getDocument: () => ( {
getOriginalDocument: () => undefined,
getStorage: () => docRefsMock,
setStorage: () => undefined
extCiteDocumentReferences: docRefsMock,
getOriginalDocument: () => undefined
} ),
getSelection: () => ( {
getName: () => 'linear'