Rename getDocumentSlice to cloneFromRange

We already getSlice which returns a ve.dm.DocumentSlice, so using
the word slice in this method is very confusing. What we are actually
doing is creating a ve.dm.Document from a range. Also remove argument
overloading as it's not particularly helpful and would make the new
name a lie.

Change-Id: I93da3419510410b170396e6765fbe2a87f9795be
This commit is contained in:
Ed Sanders 2013-10-03 10:52:21 +01:00
parent 9dc33e38f7
commit 1957eb3e28
6 changed files with 17 additions and 24 deletions

View file

@ -127,7 +127,7 @@ QUnit.test( 'newFromDocumentReplace with references', function ( assert ) {
if ( cases[i].newDocData ) {
doc2 = new ve.dm.Document( cases[i].newDocData );
} else {
doc2 = doc.getDocumentSlice( cases[i].range );
doc2 = doc.cloneFromRange( cases[i].range instanceof ve.Range ? cases[i].range : cases[i].range.getRange() );
cases[i].modify( doc2 );
}
tx = ve.dm.Transaction.newFromDocumentReplace( doc, cases[i].range, doc2 );

View file

@ -97,7 +97,7 @@ ve.ui.MWMediaEditDialog.prototype.onOpen = function () {
this.mediaNode = this.surface.getView().getFocusedNode().getModel();
this.captionNode = this.mediaNode.getCaptionNode();
if ( this.captionNode && this.captionNode.getLength() > 0 ) {
newDoc = doc.getDocumentSlice( this.captionNode );
newDoc = doc.cloneFromRange( this.captionNode.getRange() );
} else {
newDoc = [
{ 'type': 'paragraph', 'internal': { 'generated': 'wrapper' } },

View file

@ -279,7 +279,7 @@ ve.ui.MWReferenceDialog.prototype.useReference = function ( ref ) {
'refGroup': ref.refGroup,
'listIndex': ref.listIndex
};
newDoc = doc.getDocumentSlice( doc.getInternalList().getItemNode( ref.listIndex ) );
newDoc = doc.cloneFromRange( doc.getInternalList().getItemNode( ref.listIndex ).getRange() );
refGroup = ref.refGroup;
} else {
// Create a new reference

View file

@ -304,24 +304,17 @@ ve.dm.Document.prototype.getInternalList = function () {
};
/**
* Get a document from a slice of this document. The new document's store and internal list will be
* Clone a sub-document from a range in this document. The new document's store and internal list will be
* clones of the ones in this document.
*
* @param {ve.Range|ve.dm.Node} rangeOrNode Range of data to clone, or node whose contents should be cloned
* @param {ve.Range} range Range of data to clone
* @returns {ve.dm.Document} New document
* @throws {Error} rangeOrNode must be a ve.Range or a ve.dm.Node
*/
ve.dm.Document.prototype.getDocumentSlice = function ( rangeOrNode ) {
var data, range, newDoc,
ve.dm.Document.prototype.cloneFromRange = function ( range ) {
var data, newDoc,
store = this.store.clone(),
listRange = this.internalList.getListNode().getOuterRange();
if ( rangeOrNode instanceof ve.dm.Node ) {
range = rangeOrNode.getRange();
} else if ( rangeOrNode instanceof ve.Range ) {
range = rangeOrNode;
} else {
throw new Error( 'rangeOrNode must be a ve.Range or a ve.dm.Node' );
}
data = ve.copy( this.getFullData( range, true ) );
if ( range.start > listRange.start || range.end < listRange.end ) {
// The range does not include the entire internal list, so add it

View file

@ -69,38 +69,38 @@ QUnit.test( 'getFullData', 1, function ( assert ) {
assert.deepEqualWithDomElements( doc.getFullData(), ve.dm.example.withMeta );
} );
QUnit.test( 'getDocumentSlice', function ( assert ) {
QUnit.test( 'cloneFromRange', function ( assert ) {
var i, doc2, doc = ve.dm.example.createExampleDocument( 'internalData' ),
cases = [
{
'msg': 'with range',
'msg': 'first internal item',
'doc': 'internalData',
'arg': new ve.Range( 7, 12 ),
'range': new ve.Range( 7, 12 ),
'expectedData': doc.data.slice( 7, 12 ).concat( doc.data.slice( 5, 21 ) )
},
{
'msg': 'with node',
'msg': 'second internal item',
'doc': 'internalData',
'arg': doc.getInternalList().getItemNode( 1 ),
'range': doc.getInternalList().getItemNode( 1 ).getRange(),
'expectedData': doc.data.slice( 14, 19 ).concat( doc.data.slice( 5, 21 ) )
},
{
'msg': 'paragraph at the start',
'doc': 'internalData',
'arg': new ve.Range( 0, 5 ),
'range': new ve.Range( 0, 5 ),
'expectedData': doc.data.slice( 0, 21 )
},
{
'msg': 'paragraph at the end',
'doc': 'internalData',
'arg': new ve.Range( 21, 27 ),
'range': new ve.Range( 21, 27 ),
'expectedData': doc.data.slice( 21, 27 ).concat( doc.data.slice( 5, 21 ) )
}
];
QUnit.expect( 4*cases.length );
for ( i = 0; i < cases.length; i++ ) {
doc = ve.dm.example.createExampleDocument( cases[i].doc );
doc2 = doc.getDocumentSlice( cases[i].arg );
doc2 = doc.cloneFromRange( cases[i].range );
assert.deepEqual( doc2.data.data, cases[i].expectedData,
cases[i].msg + ': sliced data' );
assert.notStrictEqual( doc2.data[0], cases[i].expectedData[0],

View file

@ -797,7 +797,7 @@ QUnit.test( 'newFromDocumentReplace', function ( assert ) {
if ( cases[i].newDocData ) {
doc2 = new ve.dm.Document( cases[i].newDocData );
} else {
doc2 = doc.getDocumentSlice( cases[i].range );
doc2 = doc.cloneFromRange( cases[i].range instanceof ve.Range ? cases[i].range : cases[i].range.getRange() );
cases[i].modify( doc2 );
}
tx = ve.dm.Transaction.newFromDocumentReplace( doc, cases[i].range, doc2 );