All files / src/dm/nodes ve.dm.TableRowNode.js

100% Statements 28/28
75% Branches 6/8
100% Functions 4/4
100% Lines 26/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95                                1x   708x     708x         1x       1x   1x   1x   1x                       1x 12x   12x   12x 12x 12x 33x       12x 12x               1x 860x 172x   860x 860x 1464x                       1x 34x         1x  
/*!
 * VisualEditor DataModel TableRowNode class.
 *
 * @copyright See AUTHORS.txt
 */
 
/**
 * DataModel table row node.
 *
 * @class
 * @extends ve.dm.BranchNode
 *
 * @constructor
 * @param {Object} [element] Reference to element in linear model
 * @param {ve.dm.Node[]} [children]
 */
ve.dm.TableRowNode = function VeDmTableRowNode() {
	// Parent constructor
	ve.dm.TableRowNode.super.apply( this, arguments );
 
	// Events
	this.connect( this, { splice: 'onSplice' } );
};
 
/* Inheritance */
 
OO.inheritClass( ve.dm.TableRowNode, ve.dm.BranchNode );
 
/* Static Properties */
 
ve.dm.TableRowNode.static.name = 'tableRow';
 
ve.dm.TableRowNode.static.childNodeTypes = [ 'tableCell', 'alienTableCell' ];
 
ve.dm.TableRowNode.static.parentNodeTypes = [ 'tableSection' ];
 
ve.dm.TableRowNode.static.matchTagNames = [ 'tr' ];
 
/* Static Methods */
 
/**
 * Creates data that can be inserted into the model to create a new table row.
 *
 * @param {Object} [options] Creation options
 * @param {string|string[]} [options.style='data'] Cell style; 'data' or 'header', or array of styles
 * @param {number} [options.cellCount=1] Number of cells to create
 * @return {Array} Model data for a new table row
 */
ve.dm.TableRowNode.static.createData = function ( options ) {
	options = options || {};
 
	const cellCount = options.cellCount || 1;
 
	const data = [];
	data.push( { type: 'tableRow' } );
	for ( let i = 0; i < cellCount; i++ ) {
		ve.batchPush( data, ve.dm.TableCellNode.static.createData( {
			style: Array.isArray( options.style ) ? options.style[ i ] : options.style
		} ) );
	}
	data.push( { type: '/tableRow' } );
	return data;
};
 
/* Methods */
 
/**
 * Handle splicing of child nodes
 */
ve.dm.TableRowNode.prototype.onSplice = function () {
	if ( this.getRoot() ) {
		this.getParent().getParent().getMatrix().invalidate();
	}
	const nodes = Array.prototype.slice.call( arguments, 2 );
	for ( let i = 0; i < nodes.length; i++ ) {
		nodes[ i ].connect( this, {
			attributeChange: [ 'onCellAttributeChange', nodes[ i ] ]
		} );
	}
};
 
/**
 * Handle cell attribute changes
 *
 * @param {ve.dm.TableCellableNode} cell
 * @fires ve.dm.TableNode#cellAttributeChange
 */
ve.dm.TableRowNode.prototype.onCellAttributeChange = function ( cell ) {
	this.emit( 'cellAttributeChange', cell );
};
 
/* Registration */
 
ve.dm.modelRegistry.register( ve.dm.TableRowNode );