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