Merge "Try to always limit our document references to the current fragment"

This commit is contained in:
jenkins-bot 2024-09-16 15:00:38 +00:00 committed by Gerrit Code Review
commit 94d78fa268
2 changed files with 17 additions and 10 deletions

View file

@ -39,16 +39,22 @@ OO.mixinClass( ve.dm.MWDocumentReferences, OO.EventEmitter );
/**
* Singleton MWDocumentReferences for a document.
*
* @param {ve.dm.Document} fragment Source document associated with the
* singleton, may be a fragment in which case we step up to the original
* document.
* @param {ve.dm.Document} doc Source document associated with the
* singleton. May be a fragment in which case we only look at refs included in
* the fragment.
*
* @return {ve.dm.MWDocumentReferences} Singleton docRefs
*/
ve.dm.MWDocumentReferences.static.refsForDoc = function ( fragment ) {
const doc = fragment.getOriginalDocument() || fragment;
let docRefs = doc.getStorage( 'document-references-store' );
ve.dm.MWDocumentReferences.static.refsForDoc = function ( doc ) {
let docRefs;
if ( !doc.getOriginalDocument() ) {
// Only use cache if we're working with the full document.
docRefs = doc.getStorage( 'document-references-store' );
}
if ( docRefs === undefined ) {
docRefs = new ve.dm.MWDocumentReferences( doc );
}
if ( !doc.getOriginalDocument() ) {
doc.setStorage( 'document-references-store', docRefs );
}
return docRefs;

View file

@ -2,7 +2,7 @@
QUnit.module( 've.ui.MWUseExistingReferenceCommand (Cite)', ve.test.utils.newMwEnvironment() );
function getFragementMock( hasRefs ) {
function getFragmentMock( hasRefs ) {
const docRefsMock = {
hasRefs: () => hasRefs
};
@ -10,7 +10,8 @@ function getFragementMock( hasRefs ) {
return {
getDocument: () => ( {
getOriginalDocument: () => undefined,
getStorage: () => docRefsMock
getStorage: () => docRefsMock,
setStorage: () => undefined
} ),
getSelection: () => ( {
getName: () => 'linear'
@ -28,6 +29,6 @@ QUnit.test( 'Constructor', ( assert ) => {
QUnit.test( 'isExecutable', ( assert ) => {
const command = new ve.ui.MWUseExistingReferenceCommand();
assert.false( command.isExecutable( getFragementMock( false ) ) );
assert.true( command.isExecutable( getFragementMock( true ) ) );
assert.false( command.isExecutable( getFragmentMock( false ) ) );
assert.true( command.isExecutable( getFragmentMock( true ) ) );
} );