mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite
synced 2024-09-23 10:20:12 +00:00
Merge "[refactor] Replace InternalList with DocumentReferences in ReferenceEditPanel"
This commit is contained in:
commit
e28b4c0d04
|
@ -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;
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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() );
|
||||
|
|
Loading…
Reference in a new issue