UNPKG

@hmcts/annotation-ui-lib

Version:

PDF Viewer and ability to highlight text with and comment tracking

205 lines 15.9 kB
/** * @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==