Merge "[refactor] Replace InternalList with DocumentReferences in ReferenceEditPanel"

This commit is contained in:
jenkins-bot 2024-08-30 08:21:32 +00:00 committed by Gerrit Code Review
commit e28b4c0d04
3 changed files with 55 additions and 16 deletions

View file

@ -208,7 +208,10 @@ ve.ui.MWReferenceDialog.prototype.getSetupProcess = function ( data ) {
return ve.ui.MWReferenceDialog.super.prototype.getSetupProcess.call( this, data )
.next( () => {
this.panels.setItem( this.editPanel );
this.editPanel.setInternalList( this.getFragment().getDocument().getInternalList() );
const docRefs = ve.dm.MWDocumentReferences.static.refsForDoc(
this.getFragment().getDocument()
);
this.editPanel.setDocumentReferences( docRefs );
this.actions.setAbilities( { done: false } );
let ref;

View file

@ -31,7 +31,7 @@ ve.ui.MWReferenceEditPanel = function VeUiMWReferenceEditPanel( config ) {
// Properties
this.referenceModel = null;
this.originalGroup = null;
this.internalList = null;
this.docRefs = null;
this.referenceModel = null;
// Create content editor
@ -196,11 +196,10 @@ ve.ui.MWReferenceEditPanel.static.getImportRules = function () {
};
/**
* @param {ve.dm.InternalList} internalList
* @param {ve.ui.MWReferenceEditPanel} docRefs
*/
ve.ui.MWReferenceEditPanel.prototype.setInternalList = function ( internalList ) {
this.internalList = internalList;
const docRefs = ve.dm.MWDocumentReferences.static.refsForDoc( internalList.getDocument() );
ve.ui.MWReferenceEditPanel.prototype.setDocumentReferences = function ( docRefs ) {
this.docRefs = docRefs;
this.referenceGroupInput.populateMenu( docRefs.getAllGroupNames() );
};
@ -246,7 +245,7 @@ ve.ui.MWReferenceEditPanel.prototype.setFormFieldsFromRef = function ( ref ) {
* @param {ve.dm.MWReferenceModel} ref
*/
ve.ui.MWReferenceEditPanel.prototype.updateReuseWarningFromRef = function ( ref ) {
const usageCount = ve.dm.MWDocumentReferences.static.refsForDoc( this.internalList.getDocument() )
const usageCount = this.docRefs
.getGroupRefs( ref.getListGroup() )
.getRefUsages( ref.getListKey() )
.length;
@ -261,7 +260,7 @@ ve.ui.MWReferenceEditPanel.prototype.updateReuseWarningFromRef = function ( ref
*/
ve.ui.MWReferenceEditPanel.prototype.updateExtendsWarningFromRef = function ( ref ) {
if ( ref.extendsRef ) {
const parentNode = ve.dm.MWDocumentReferences.static.refsForDoc( this.internalList.getDocument() )
const parentNode = this.docRefs
.getGroupRefs( ref.getListGroup() )
.getInternalModelNode( ref.extendsRef );
this.extendsWarning.setLabel(

View file

@ -2,48 +2,85 @@
QUnit.module( 've.ui.MWReferenceEditPanel (Cite)', ve.test.utils.newMwEnvironment() );
function getDocRefsMock( doc, hasNode, reUse ) {
const node = new ve.dm.MWReferenceNode( {
type: 'mwReference',
attributes: {
listKey: 'literal/bar',
refGroup: 'mwReference/'
},
originalDomElementsHash: Math.random()
} );
node.setDocument( doc );
const groupRefs = {
getRefUsages: () => ( reUse ? [ node, node ] : [] ),
getInternalModelNode: () => ( hasNode ? node : undefined )
};
return {
getAllGroupNames: () => ( [ 'mwReference/' ] ),
getGroupRefs: () => ( groupRefs )
};
}
QUnit.test( 'setReferenceForEditing', ( assert ) => {
ve.init.target.surface = { commandRegistry: { registry: {} } };
const editPanel = new ve.ui.MWReferenceEditPanel();
const doc = ve.dm.citeExample.createExampleDocument( 'references' );
const ref = new ve.dm.MWReferenceModel( doc );
editPanel.setInternalList( doc.getInternalList() );
editPanel.setDocumentReferences( getDocRefsMock( doc ) );
const changeHandlerStub = sinon.stub();
editPanel.connect( changeHandlerStub );
ref.setGroup( 'g' );
ref.setGroup( 'group' );
editPanel.setReferenceForEditing( ref );
assert.strictEqual( editPanel.originalGroup, 'g' );
assert.strictEqual( editPanel.referenceGroupInput.getValue(), 'g' );
assert.strictEqual( editPanel.originalGroup, 'group' );
assert.strictEqual( editPanel.referenceGroupInput.getValue(), 'group' );
assert.false( editPanel.referenceGroupInput.isDisabled() );
assert.false( editPanel.reuseWarning.isVisible() );
assert.false( editPanel.extendsWarning.isVisible() );
assert.strictEqual( editPanel.getReferenceFromEditing().getGroup(), 'g' );
assert.strictEqual( editPanel.getReferenceFromEditing().getGroup(), 'group' );
sinon.assert.notCalled( changeHandlerStub );
} );
QUnit.test( 'sub refs', ( assert ) => {
QUnit.test( 're-used references', ( assert ) => {
ve.init.target.surface = { commandRegistry: { registry: {} } };
const editPanel = new ve.ui.MWReferenceEditPanel();
const doc = ve.dm.citeExample.createExampleDocument( 'references' );
const ref = new ve.dm.MWReferenceModel( doc );
editPanel.setDocumentReferences( getDocRefsMock( doc, true, true ) );
editPanel.setReferenceForEditing( ref );
assert.true( editPanel.reuseWarning.isVisible() );
assert.false( editPanel.extendsWarning.isVisible() );
} );
QUnit.test( 'sub-references', ( assert ) => {
ve.init.target.surface = { commandRegistry: { registry: {} } };
const editPanel = new ve.ui.MWReferenceEditPanel();
const doc = ve.dm.citeExample.createExampleDocument( 'references' );
const ref = new ve.dm.MWReferenceModel( doc );
editPanel.setInternalList( doc.getInternalList() );
// does exist in the example document
ref.extendsRef = 'literal/bar';
editPanel.setDocumentReferences( getDocRefsMock( doc, true ) );
editPanel.setReferenceForEditing( ref );
assert.false( editPanel.reuseWarning.isVisible() );
assert.true( editPanel.extendsWarning.isVisible() );
assert.true( editPanel.extendsWarning.getLabel().text().indexOf( 'Bar' ) !== -1 );
assert.false( editPanel.extendsWarning.getLabel().text().indexOf( 'cite-ve-dialog-reference-missing-parent-ref' ) !== -1 );
// TODO improve node mock to check content insertion for the parent
// assert.true( editPanel.extendsWarning.getLabel().text().indexOf( 'Bar' ) !== -1 );
// test sub ref with missing main ref
ref.extendsRef = 'literal/notexist';
editPanel.setDocumentReferences( getDocRefsMock( doc ) );
editPanel.setReferenceForEditing( ref );
assert.false( editPanel.reuseWarning.isVisible() );