2013-03-20 22:35:05 +00:00
|
|
|
/*!
|
|
|
|
* VisualEditor MetaLinearData class.
|
|
|
|
*
|
|
|
|
* Class containing meta linear data and an index-value store.
|
|
|
|
*
|
|
|
|
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
|
|
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Meta linear data storage
|
|
|
|
*
|
|
|
|
* @class
|
|
|
|
* @extends ve.dm.LinearData
|
|
|
|
* @constructor
|
|
|
|
* @param {ve.dm.IndexValueStore} store Index-value store
|
|
|
|
* @param {Array} [data] Linear data
|
|
|
|
*/
|
|
|
|
ve.dm.MetaLinearData = function VeDmMetaLinearData( store, data ) {
|
|
|
|
ve.dm.LinearData.call( this, store, data );
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Inheritance */
|
|
|
|
|
|
|
|
ve.inheritClass( ve.dm.MetaLinearData, ve.dm.LinearData );
|
|
|
|
|
2013-04-06 16:45:26 +00:00
|
|
|
/* Static Methods */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Takes an array of meta linear data arrays and collapses them into a single array.
|
|
|
|
*
|
|
|
|
* Undefined values will be discarded e.g.
|
|
|
|
* [ [ metaItem1, metaItem2 ], undefined, [ metaItem3 ], undefined ]
|
|
|
|
* =>
|
|
|
|
* [ [ metaItem1, metaItem2, metaItem3 ] ]
|
|
|
|
*
|
|
|
|
* @static
|
|
|
|
* @param {Array} data Meta linear data arrays
|
|
|
|
* @returns {Array} Merged data
|
|
|
|
*/
|
|
|
|
ve.dm.MetaLinearData.static.merge = function ( data ) {
|
2013-06-25 22:08:37 +00:00
|
|
|
var i, merged = [];
|
2013-04-06 16:45:26 +00:00
|
|
|
for ( i = 0; i < data.length; i++ ) {
|
|
|
|
if ( data[i] !== undefined ) {
|
|
|
|
merged = merged.concat( data[i] );
|
|
|
|
}
|
|
|
|
}
|
2013-06-25 22:08:37 +00:00
|
|
|
return [ merged ];
|
2013-04-06 16:45:26 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Methods */
|
|
|
|
|
2013-03-20 22:35:05 +00:00
|
|
|
/**
|
|
|
|
* Gets linear data from specified index(es).
|
|
|
|
*
|
|
|
|
* If either index is omitted the array at that point is returned
|
|
|
|
*
|
|
|
|
* @method
|
|
|
|
* @param {number} [offset] Offset to get data from
|
|
|
|
* @param {number} [metadataOffset] Index to get data from
|
|
|
|
* @returns {Object|Array} Data from index(es), or all data (by reference)
|
|
|
|
*/
|
|
|
|
ve.dm.MetaLinearData.prototype.getData = function ( offset, metadataOffset ) {
|
|
|
|
if ( offset === undefined ) {
|
|
|
|
return this.data;
|
|
|
|
} else if ( metadataOffset === undefined ) {
|
|
|
|
return this.data[offset];
|
|
|
|
} else {
|
|
|
|
return this.data[offset] === undefined ? undefined : this.data[offset][metadataOffset];
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets number of metadata elements at specified offset.
|
|
|
|
*
|
|
|
|
* @method
|
|
|
|
* @param {number} offset Offset to count metadata at
|
|
|
|
* @returns {number} Number of metadata elements at specified offset
|
|
|
|
*/
|
|
|
|
ve.dm.MetaLinearData.prototype.getDataLength = function ( offset ) {
|
|
|
|
return this.data[offset] === undefined ? 0 : this.data[offset].length;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets number of metadata elements in the entire object.
|
|
|
|
*
|
|
|
|
* @method
|
|
|
|
* @returns {number} Number of metadata elements in the entire object
|
|
|
|
*/
|
|
|
|
ve.dm.MetaLinearData.prototype.getTotalDataLength = function () {
|
|
|
|
var n = 0, i = this.getLength();
|
|
|
|
while ( i-- ) {
|
|
|
|
n += this.getDataLength( i );
|
|
|
|
}
|
|
|
|
return n;
|
|
|
|
};
|