mediawiki-extensions-Visual.../modules/ve/test/dm
Catrope 1765e39b40 ve.dm.Transaction: Implement newFromDocumentInsertion
This function builds a transaction that takes a document slice and
inserts it back into the document it came from, applying any changes
that were made.

This makes editing document slices simple:
    slicedDoc = doc.getDocumentSlice( captionNode );
    // Edit slicedDoc using a surface
    tx = ve.dm.Transaction.newFromDocumentInsertion( doc, captionNode, slicedDoc );
    surface.change( tx );

Specifically, newFromDocumentInsertion replaces the node's contents
with the document's contents (meaning any changes made to the node in
the meantime are lost). It also merges the stores internal lists
of the two documents and remaps indexes accordingly. This means editing
of references inside of references is supported.

This functionality is not specific to slices, and can also be used to
safely insert data from a paste buffer, with internal list data being
transplanted correctly.

ve.dm.MetaLinearData:
* Make merge( [ undefined, undefined, ... ] ) return undefined rather
  than [].

ve.dm.Document:
* In getDocumentSlice, store a pointer to the original dm.Document in
  the new one, and also store the length of the internal list. This
  allows us to figure out which internal list items the two documents
  have in common when we insert the modified slice back into the main
  document.
* In getMetadataReplace, optionally take the inserted metadata as a
  parameter, to allow for operations that insert both data and metadata.
  Per Ed's review, rewrite this function to return null rather than {}
  if no metadata needs to be replaced.

ve.dm.InternalList:
* Add method to merge two internal lists

ve.dm.Transaction:
* Remove newFromNodeReplacement and replace it with newFromDocumentInsertion.
* In pushReplace, optionally take the inserted metadata as a parameter.

Change-Id: I786ee7bad796aa54bc242993b4de3ad18ad0773e
2013-06-19 17:27:50 -07:00
..
lineardata Build the internalList linmod even if it's empty 2013-06-17 13:23:20 +01:00
nodes Transclusion editing 2013-06-12 16:39:13 -07:00
ve.dm.AnnotationSet.test.js Further AnnotationSet optimisation: create containsIndex 2013-04-25 22:55:43 +01:00
ve.dm.BranchNode.test.js Kill getOffsetFromNode() with fire 2013-05-09 17:26:22 -07:00
ve.dm.Converter.test.js Update reference lists and inline numberings automatically. 2013-06-05 15:11:16 -07:00
ve.dm.Document.test.js Refactor selectNodes tests 2013-06-17 20:08:08 +01:00
ve.dm.DocumentSynchronizer.test.js Code style fixes 2013-05-06 12:36:52 +01:00
ve.dm.example.js ve.dm.Transaction: Implement newFromDocumentInsertion 2013-06-19 17:27:50 -07:00
ve.dm.IndexValueStore.test.js Preserve location of reference body within key 2013-06-10 02:54:26 +00:00
ve.dm.InternalList.test.js Reference name and group editing 2013-06-14 15:29:56 -07:00
ve.dm.LeafNode.test.js Store data in LinearData class with an index-value store for objects 2013-03-30 10:06:34 +00:00
ve.dm.LinearData.test.js Store data in LinearData class with an index-value store for objects 2013-03-30 10:06:34 +00:00
ve.dm.MetaList.test.js jshint: Fix trailing comma 2013-06-05 13:00:49 +02:00
ve.dm.Model.test.js jshint: Fix trailing comma 2013-06-05 13:00:49 +02:00
ve.dm.ModelRegistry.test.js Fix ModelRegistry bugs 2013-04-08 18:05:34 -07:00
ve.dm.Node.test.js jshint: Fix trailing comma 2013-06-05 13:00:49 +02:00
ve.dm.NodeFactory.test.js Correct name of can(Node)HaveGrandchildren functions 2013-03-13 23:25:33 +00:00
ve.dm.Surface.test.js Only undo on MWMetaDialog close if small stack is non-empty 2013-06-18 16:55:03 +01:00
ve.dm.SurfaceFragment.test.js Build the internalList linmod even if it's empty 2013-06-17 13:23:20 +01:00
ve.dm.Transaction.test.js ve.dm.Transaction: Implement newFromDocumentInsertion 2013-06-19 17:27:50 -07:00
ve.dm.TransactionProcessor.test.js Store alien meta items' dom nodes only 2013-06-12 16:37:37 +01:00