@hmcts/annotation-ui-lib
Version:
PDF Viewer and ability to highlight text with and comment tracking
158 lines • 14.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export class Utils {
/**
* @param {?} rectangles
* @return {?}
*/
buildLineRectangle(rectangles) {
this.sortByY(rectangles);
/** @type {?} */
const lowestY = rectangles[0].y;
/** @type {?} */
const lineHeight = rectangles[0].height;
this.sortByX(rectangles);
/** @type {?} */
const lowestX = rectangles[0].x;
/** @type {?} */
const upperX = rectangles[rectangles.length - 1].x;
/** @type {?} */
const width = rectangles[rectangles.length - 1].width;
/** @type {?} */
const rectangle = {
y: lowestY,
x: lowestX,
width: (upperX - lowestX) + width,
height: lineHeight
};
return rectangle;
}
/**
* @param {?} annotationRectangles
* @param {?} generatedRectangles
* @return {?}
*/
generateRectanglePerLine(annotationRectangles, generatedRectangles) {
this.sortByY(annotationRectangles);
/** @type {?} */
const highestY = annotationRectangles[annotationRectangles.length - 1].y;
/** @type {?} */
const lowestY = annotationRectangles[0].y;
/** @type {?} */
const lineHeight = this.getAnnotationLineHeight(annotationRectangles);
if (this.difference(highestY, lowestY) > lineHeight) {
/** @type {?} */
const currentLineRectangles = annotationRectangles.filter(rectangle => rectangle.y <= (lowestY + lineHeight));
/** @type {?} */
const nextLineRectangles = annotationRectangles.filter(rectangle => rectangle.y > (lowestY + lineHeight));
generatedRectangles.push(this.buildLineRectangle(currentLineRectangles));
this.generateRectanglePerLine(nextLineRectangles, generatedRectangles);
}
else {
generatedRectangles.push(this.buildLineRectangle(annotationRectangles));
}
}
/**
* @param {?} rectangles
* @return {?}
*/
getAnnotationLineHeight(rectangles) {
return rectangles[0].height;
}
/**
* @param {?} rectangles
* @param {?=} lowest
* @return {?}
*/
sortByY(rectangles, lowest = true) {
rectangles.sort(function (a, b) {
/** @type {?} */
const keyA = a.y;
/** @type {?} */
const keyB = b.y;
if (keyA < keyB) {
return lowest ? -1 : 1;
}
if (keyA > keyB) {
return lowest ? 1 : -1;
}
return 0;
});
}
/**
* @param {?} rectangles
* @param {?=} lowest
* @return {?}
*/
sortByX(rectangles, lowest = true) {
rectangles.sort(function (a, b) {
/** @type {?} */
const keyA = a.x;
/** @type {?} */
const keyB = b.x;
if (keyA < keyB) {
return lowest ? -1 : 1;
}
if (keyA > keyB) {
return lowest ? 1 : -1;
}
return 0;
});
}
/**
* @param {?} a
* @param {?} b
* @return {?}
*/
sortByLinePosition(a, b) {
this.sortByX(a);
this.sortByX(b);
return (a[0].x > b[0].x) ? 1 : -1;
}
/**
* @param {?} a
* @param {?} b
* @return {?}
*/
difference(a, b) { return Math.abs(a - b); }
/**
* @param {?} event
* @return {?}
*/
clickIsHighlight(event) {
/** @type {?} */
const target = (/** @type {?} */ (event.target));
/** @type {?} */
const isHighlight = target.firstElementChild;
if (isHighlight == null) {
return false;
}
else if (isHighlight.id.includes('pdf-annotate-screenreader')) {
return true;
}
else {
return false;
}
}
/**
* @param {?} event
* @return {?}
*/
getClickedPage(event) {
/** @type {?} */
let currentParent = event.target;
for (let step = 0; step < 5; step++) {
if (currentParent.parentNode != null) {
/** @type {?} */
const pageNumber = currentParent.parentNode.getAttribute('data-page-number');
if (pageNumber != null) {
return parseInt(pageNumber, null);
}
currentParent = currentParent.parentNode;
}
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvYW5ub3RhdGlvbi11aS1saWIvIiwic291cmNlcyI6WyJsaWIvZGF0YS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsTUFBTTs7Ozs7SUFFRixrQkFBa0IsQ0FBQyxVQUFVO1FBRXpCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7O2NBQ25CLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Y0FDekIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBRXZDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7O2NBQ25CLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Y0FDekIsTUFBTSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O2NBQzVDLEtBQUssR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLOztjQUUvQyxTQUFTLEdBQUc7WUFDZCxDQUFDLEVBQUUsT0FBTztZQUNWLENBQUMsRUFBRSxPQUFPO1lBQ1YsS0FBSyxFQUFFLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEtBQUs7WUFDakMsTUFBTSxFQUFFLFVBQVU7U0FDckI7UUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQ3JCLENBQUM7Ozs7OztJQUVELHdCQUF3QixDQUFDLG9CQUFpQyxFQUFFLG1CQUFnQztRQUV4RixJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7O2NBQzdCLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Y0FDbEUsT0FBTyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENB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QUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDckIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsYUFBYSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFDN0MsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWN0YW5nbGUgfSBmcm9tICcuL2Fubm90YXRpb24tc2V0Lm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzIHtcblxuICAgIGJ1aWxkTGluZVJlY3RhbmdsZShyZWN0YW5nbGVzKSB7XG5cbiAgICAgICAgdGhpcy5zb3J0QnlZKHJlY3RhbmdsZXMpO1xuICAgICAgICBjb25zdCBsb3dlc3RZID0gcmVjdGFuZ2xlc1swXS55O1xuICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcmVjdGFuZ2xlc1swXS5oZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3J0QnlYKHJlY3RhbmdsZXMpO1xuICAgICAgICBjb25zdCBsb3dlc3RYID0gcmVjdGFuZ2xlc1swXS54O1xuICAgICAgICBjb25zdCB1cHBlclggPSByZWN0YW5nbGVzW3JlY3RhbmdsZXMubGVuZ3RoIC0gMV0ueDtcbiAgICAgICAgY29uc3Qgd2lkdGggPSByZWN0YW5nbGVzW3JlY3RhbmdsZXMubGVuZ3RoIC0gMV0ud2lkdGg7XG5cbiAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0ge1xuICAgICAgICAgICAgeTogbG93ZXN0WSxcbiAgICAgICAgICAgIHg6IGxvd2VzdFgsXG4gICAgICAgICAgICB3aWR0aDogKHVwcGVyWCAtIGxvd2VzdFgpICsgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGxpbmVIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3RhbmdsZTtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZVJlY3RhbmdsZVBlckxpbmUoYW5ub3RhdGlvblJlY3RhbmdsZXM6IFJlY3RhbmdsZVtdLCBnZW5lcmF0ZWRSZWN0YW5nbGVzOiBSZWN0YW5nbGVbXSkge1xuXG4gICAgICAgIHRoaXMuc29ydEJ5WShhbm5vdGF0aW9uUmVjdGFuZ2xlcyk7XG4gICAgICAgIGNvbnN0IGhpZ2hlc3RZID0gYW5ub3RhdGlvblJlY3RhbmdsZXNbYW5ub3RhdGlvblJlY3RhbmdsZXMubGVuZ3RoIC0gMV0ueTtcbiAgICAgICAgY29uc3QgbG93ZXN0WSA9IGFubm90YXRpb25SZWN0YW5nbGVzWzBdLnk7XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0aGlzLmdldEFubm90YXRpb25MaW5lSGVpZ2h0KGFubm90YXRpb25SZWN0YW5nbGVzKTtcblxuICAgICAgICBpZiAodGhpcy5kaWZmZXJlbmNlKGhpZ2hlc3RZLCBsb3dlc3RZKSA+IGxpbmVIZWlnaHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lUmVjdGFuZ2xlcyA9IGFubm90YXRpb25SZWN0YW5nbGVzLmZpbHRlcihyZWN0YW5nbGUgPT4gcmVjdGFuZ2xlLnkgPD0gKGxvd2VzdFkgKyBsaW5lSGVpZ2h0KSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0TGluZVJlY3RhbmdsZXMgPSBhbm5vdGF0aW9uUmVjdGFuZ2xlcy5maWx0ZXIocmVjdGFuZ2xlID0+IHJlY3RhbmdsZS55ID4gKGxvd2VzdFkgKyBsaW5lSGVpZ2h0KSk7XG4gICAgICAgICAgICBnZW5lcmF0ZWRSZWN0YW5nbGVzLnB1c2godGhpcy5idWlsZExpbmVSZWN0YW5nbGUoY3VycmVudExpbmVSZWN0YW5nbGVzKSk7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlUmVjdGFuZ2xlUGVyTGluZShuZXh0TGluZVJlY3RhbmdsZXMsIGdlbmVyYXRlZFJlY3RhbmdsZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2VuZXJhdGVkUmVjdGFuZ2xlcy5wdXNoKHRoaXMuYnVpbGRMaW5lUmVjdGFuZ2xlKGFubm90YXRpb25SZWN0YW5nbGVzKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRBbm5vdGF0aW9uTGluZUhlaWdodChyZWN0YW5nbGVzOiBSZWN0YW5nbGVbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiByZWN0YW5nbGVzWzBdLmhlaWdodDtcbiAgICB9XG5cbiAgICBzb3J0QnlZKHJlY3RhbmdsZXM6IFJlY3RhbmdsZVtdLCBsb3dlc3QgPSB0cnVlKSB7XG4gICAgICAgIHJlY3RhbmdsZXMuc29ydChcbiAgICAgICAgICAgIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5QSA9IGEueSxcbiAgICAgICAgICAgICAgICAgICAga2V5QiA9IGIueTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5QSA8IGtleUIpIHsgcmV0dXJuIGxvd2VzdCA/IC0xIDogMTsgfVxuICAgICAgICAgICAgICAgIGlmIChrZXlBID4ga2V5QikgeyByZXR1cm4gbG93ZXN0ID8gMSA6IC0xOyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzb3J0QnlYKHJlY3RhbmdsZXM6IFJlY3RhbmdsZVtdLCBsb3dlc3QgPSB0cnVlKSB7XG4gICAgICAgIHJlY3RhbmdsZXMuc29ydChcbiAgICAgICAgICAgIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5QSA9IGEueCxcbiAgICAgICAgICAgICAgICAgICAga2V5QiA9IGIueDtcbiAgICAgICAgICAgICAgICBpZiAoa2V5QSA8IGtleUIpIHsgcmV0dXJuIGxvd2VzdCA/IC0xIDogMTsgfVxuICAgICAgICAgICAgICAgIGlmIChrZXlBID4ga2V5QikgeyByZXR1cm4gbG93ZXN0ID8gMSA6IC0xOyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzb3J0QnlMaW5lUG9zaXRpb24oYTogUmVjdGFuZ2xlW10sIGI6IFJlY3RhbmdsZVtdKTogbnVtYmVyIHtcbiAgICAgICAgdGhpcy5zb3J0QnlYKGEpO1xuICAgICAgICB0aGlzLnNvcnRCeVgoYik7XG4gICAgICAgIHJldHVybiAoYVswXS54ID4gYlswXS54KSA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBkaWZmZXJlbmNlKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHsgcmV0dXJuIE1hdGguYWJzKGEgLSBiKTsgfVxuXG4gICAgY2xpY2tJc0hpZ2hsaWdodChldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSA8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xuICAgICAgICBjb25zdCBpc0hpZ2hsaWdodCA9IHRhcmdldC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgaWYgKGlzSGlnaGxpZ2h0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0hpZ2hsaWdodC5pZC5pbmNsdWRlcygncGRmLWFubm90YXRlLXNjcmVlbnJlYWRlcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENsaWNrZWRQYWdlKGV2ZW50OiBhbnkpOiBudW1iZXIge1xuICAgICAgICBsZXQgY3VycmVudFBhcmVudCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgZm9yIChsZXQgc3RlcCA9IDA7IHN0ZXAgPCA1OyBzdGVwKyspIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFyZW50LnBhcmVudE5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBjdXJyZW50UGFyZW50LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhZ2VOdW1iZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQocGFnZU51bWJlciwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50LnBhcmVudE5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=