How to use
removeFilteredParas (container element , optional function to compare this para with next);
Examples
Remove any duplicate blank paragraphs.
removeFilteredParas (body);
Remove any paragraphs which would repeat the current one.
removeFilteredParas ( body , function (thisPara, nextPara) { return thisPara.getText() === nextPara.getText(); });
Because this takes an optional argument as a function, you can cause the paragraph represented by thisPara to be removed based on any criteria simply by returning true.
However you don’t need to actually compare things, so for example, you could delete paragraphs 8-10 like this.
removeFilteredParas(body, function (thisPara, nextPara) { var index = thisPara.getParent().getChildIndex(thisPara); return index > 6 && index < 10; });
If your call passes a function, then the objects that is passed to it are as follows (note that the last paragraph you’ll see is the 2nd last one, in other words both values are always a paragraph element). If your function returns true, thisPara will be deleted.
property | contains |
thisPara | the current paragraph element |
nextPara | the nextParagraph element |
The code
Here’s the function code.
/** * get rid of any duplicate paragrphs * @param {Body} body the body * @param {function} [filterFunc=multipleBlanks] returns true if para should be removed * @return {Body} the body for chaining */ function removeFilteredParas (body , filterFunc) { // set default filter function if required filterFunc = filterFunc || multipleBlanks; // delete any dupped paras body.getParagraphs() .filter( function (d) { var nextPara = d.getNextSibling(); return nextPara && filterFunc(d, nextPara); }) .reverse() .forEach(function(d) { d.removeFromParent(); }); /** * default function to check if this para needs to be removed * @param {Paragraph} thisPara the current paragraph * @param {Paragraph} nextPara the next paragraph * @return {boolean} true if this paragraph should be removed */ function multipleBlanks ( thisPara, nextPara ) { return ! (thisPara.getText().length + nextPara.getText().length); } return body; }