diff --git a/modules/ve2/dm/ve.dm.DocumentFragment.js b/modules/ve2/dm/ve.dm.DocumentFragment.js index 47c293addd..8708f41559 100644 --- a/modules/ve2/dm/ve.dm.DocumentFragment.js +++ b/modules/ve2/dm/ve.dm.DocumentFragment.js @@ -180,3 +180,21 @@ ve.dm.DocumentFragment.prototype.getDataFromNode = function( node ) { } return null; }; + +/** + * Gets a list of annotations that a given offset is covered by. + * + * @method + * @param {Integer} offset Offset to get annotations for + * @returns {Object[]} A copy of all annotation objects offset is covered by + */ +ve.dm.DocumentFragment.prototype.getAnnotationsFromOffset = function( offset, byref ) { + if ( ve.isArray( this.data[offset] ) ) { + if ( byref === true ) { + return this.data[offset].slice( 1 ); + } else { + return ve.copyArray( this.data[offset].slice( 1 ) ); + } + } + return []; +}; diff --git a/tests/ve2/dm/ve.dm.DocumentFragment.test.js b/tests/ve2/dm/ve.dm.DocumentFragment.test.js index 36bf8b7e13..a351db6b98 100644 --- a/tests/ve2/dm/ve.dm.DocumentFragment.test.js +++ b/tests/ve2/dm/ve.dm.DocumentFragment.test.js @@ -113,3 +113,15 @@ test( 'getDataFromNode', 3, function() { 'leaf without children' ); } ); + +test( 'getAnnotationsFromOffset', 2, function() { + var fragment = new ve.dm.DocumentFragment( ve.dm.example.data ), + data = fragment.getData(), + annotations; + for ( var i = 0; i < data.length; i++ ) { + annotations = fragment.getAnnotationsFromOffset( i ); + if (typeof annotations[0] === 'object') { + ok( annotations, 'annotations at offset ' + i ); + } + } +} );