@hmcts/annotation-ui-lib
Version:
PDF Viewer and ability to highlight text with and comment tracking
229 lines • 19.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';
import { Comment } from '../../../data/annotation-set.model';
import { AnnotationStoreService } from '../../../data/annotation-store.service';
import { PdfService } from '../../../data/pdf.service';
import { EmLoggerService } from '../../../logging/em-logger.service';
import { PdfRenderService } from '../../../data/pdf-render.service';
var ContextualToolbarComponent = /** @class */ (function () {
function ContextualToolbarComponent(annotationStoreService, ref, pdfRenderService, pdfService, log) {
this.annotationStoreService = annotationStoreService;
this.ref = ref;
this.pdfRenderService = pdfRenderService;
this.pdfService = pdfService;
this.log = log;
this.deletedAnnotation = new EventEmitter();
this.log.setClass('ContextualToolbarComponent');
this.toolPos = {
left: 0,
top: 0
};
}
/**
* @return {?}
*/
ContextualToolbarComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.contextualToolBarOptions = this.annotationStoreService.getToolbarUpdate()
.subscribe(function (contextualOptions) {
if (contextualOptions.annotation != null) {
_this.showToolBar(contextualOptions.annotation, contextualOptions.showDelete);
}
else {
_this.hideToolBar();
}
});
this.isShowToolbar = false;
};
/**
* @return {?}
*/
ContextualToolbarComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.ref.detach();
if (this.contextualToolBarOptions) {
this.contextualToolBarOptions.unsubscribe();
}
};
/**
* @param {?} annotation
* @param {?=} showDelete
* @return {?}
*/
ContextualToolbarComponent.prototype.showToolBar = /**
* @param {?} annotation
* @param {?=} showDelete
* @return {?}
*/
function (annotation, showDelete) {
this.annotation = annotation;
this.showDelete = showDelete;
this.toolPos = this.getRelativePosition(annotation.id);
this.isShowToolbar = true;
if (!this.ref['destroyed']) {
this.ref.detectChanges();
}
};
/**
* @param {?} annotationId
* @return {?}
*/
ContextualToolbarComponent.prototype.getRelativePosition = /**
* @param {?} annotationId
* @return {?}
*/
function (annotationId) {
/** @type {?} */
var svgSelector = this.pdfRenderService.getViewerElementRef().nativeElement
.querySelector("g[data-pdf-annotate-id=\"" + annotationId + "\"]");
/** @type {?} */
var highlightRect = (/** @type {?} */ (svgSelector.getBoundingClientRect()));
/** @type {?} */
var wrapper = this.pdfService.getAnnotationWrapper().nativeElement;
/** @type {?} */
var wrapperRect = (/** @type {?} */ (wrapper.getBoundingClientRect()));
/** @type {?} */
var left = ((highlightRect.x - wrapperRect.left)
- 175) + highlightRect.width / 2;
// Minus half the toolbar width + half the length of the highlight
/** @type {?} */
var top = ((highlightRect.y - wrapperRect.top)
- 59) - 5;
return {
left: left,
top: top
};
};
/**
* @return {?}
*/
ContextualToolbarComponent.prototype.hideToolBar = /**
* @return {?}
*/
function () {
this.annotation = null;
this.isShowToolbar = false;
this.showDelete = false;
if (!this.ref['destroyed']) {
this.ref.detectChanges();
}
};
/**
* @return {?}
*/
ContextualToolbarComponent.prototype.handleCommentBtnClick = /**
* @return {?}
*/
function () {
var _this = this;
if (this.annotation.comments.length === 0) {
this.annotationStoreService.addComment(new Comment(null, this.annotation.id, null, null, null, null, null, null, null));
}
setTimeout(function () {
/** @type {?} */
var tempAnnotation = _this.annotation;
_this.hideToolBar();
_this.annotationStoreService.setCommentFocusSubject(tempAnnotation, true);
}, 10);
};
/**
* @return {?}
*/
ContextualToolbarComponent.prototype.handleHighlightBtnClick = /**
* @return {?}
*/
function () {
this.hideToolBar();
};
/**
* @return {?}
*/
ContextualToolbarComponent.prototype.handleDeleteBtnClick = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.annotationStoreService.deleteAnnotationById(this.annotation.id, this.annotation.page)];
case 1:
_a.sent();
this.hideToolBar();
this.deletedAnnotation.emit('deleted annotation');
return [2 /*return*/];
}
});
});
};
ContextualToolbarComponent.decorators = [
{ type: Component, args: [{
selector: 'app-contextual-toolbar',
template: "<div [hidden]=\"!isShowToolbar\" class=\"toolbar\"\n [style.left.px]=\"toolPos.left\"\n [style.top.px]=\"toolPos.top\">\n\n <button\n [hidden]=\"showDelete\"\n type=\"button\" class=\"aui__toolbar-button aui__toolbar-button--comments contextual-btn leftButton\"\n title=\"Highlight\"\n (click)=\"handleHighlightBtnClick()\"\n ><span>Add Highlight</span></button>\n\n <button\n [hidden]=\"!showDelete\"\n type=\"button\"\n title=\"Delete\" class=\"aui__toolbar-button aui__toolbar-button--comments contextual-btn leftButton\"\n (click)=\"handleDeleteBtnClick()\"\n ><span>Remove Highlight</span></button>\n\n <button type=\"button\" title=\"Comment\" class=\"aui__toolbar-button aui__toolbar-button--comments contextual-btn rightButton\"\n (click)=\"handleCommentBtnClick()\"\n ><span>Comment</span></button>\n\n\n <div class=\"arrow-down\">\n <div class=\"inner-triangle\"></div>\n </div>\n\n</div>\n",
styles: [".toolbar{position:absolute;background-color:#fff;height:52px;width:350px;margin:0 auto;text-shadow:1px 1px 0 #fff;z-index:1;border:1px solid #c1c1c1;box-shadow:0 2px #c1c1c1}.toolbar .spacer{display:inline-block;border-left:1px solid #c1c1c1;height:34px;margin:0 5px -11px}.toolbar button span{margin-left:20px}.toolbar button{padding:0;margin-left:2.5%;margin-right:2.5%;margin-top:6px;height:40px;border:0}.toolbar button:hover{border:1px solid #000}.contextual-btn{font-size:16px;background:5px 50%/20px 20px no-repeat #fff}.rightButton{width:124px;background-image:url(/assets/images/icon-document-comments.svg)}.leftButton{background-image:url(/assets/images/annotate-highlight.svg);width:190px}.arrow-down{margin:53px auto 0;width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-top:12px solid #c1c1c1}.inner-triangle{position:relative;top:-13px;left:-10px;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid #fff}"]
}] }
];
ContextualToolbarComponent.ctorParameters = function () { return [
{ type: AnnotationStoreService },
{ type: ChangeDetectorRef },
{ type: PdfRenderService },
{ type: PdfService },
{ type: EmLoggerService }
]; };
ContextualToolbarComponent.propDecorators = {
deletedAnnotation: [{ type: Output }]
};
return ContextualToolbarComponent;
}());
export { ContextualToolbarComponent };
if (false) {
/** @type {?} */
ContextualToolbarComponent.prototype.toolPos;
/** @type {?} */
ContextualToolbarComponent.prototype.isShowToolbar;
/** @type {?} */
ContextualToolbarComponent.prototype.showDelete;
/** @type {?} */
ContextualToolbarComponent.prototype.annotation;
/**
* @type {?}
* @private
*/
ContextualToolbarComponent.prototype.contextualToolBarOptions;
/** @type {?} */
ContextualToolbarComponent.prototype.deletedAnnotation;
/**
* @type {?}
* @private
*/
ContextualToolbarComponent.prototype.annotationStoreService;
/**
* @type {?}
* @private
*/
ContextualToolbarComponent.prototype.ref;
/**
* @type {?}
* @private
*/
ContextualToolbarComponent.prototype.pdfRenderService;
/**
* @type {?}
* @private
*/
ContextualToolbarComponent.prototype.pdfService;
/**
* @type {?}
* @private
*/
ContextualToolbarComponent.prototype.log;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dHVhbC10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9hbm5vdGF0aW9uLXVpLWxpYi8iLCJzb3VyY2VzIjpbImxpYi92aWV3ZXJzL2Fubm90YXRpb24tcGRmLXZpZXdlci9jb250ZXh0dWFsLXRvb2xiYXIvY29udGV4dHVhbC10b29sYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVUsaUJBQWlCLEVBQWEsTUFBTSxFQUFFLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVwRyxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRTtJQWVFLG9DQUFvQixzQkFBOEMsRUFDOUMsR0FBc0IsRUFDdEIsZ0JBQWtDLEVBQ2xDLFVBQXNCLEVBQ3RCLEdBQW9CO1FBSnBCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQWlCO1FBTjlCLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFPdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztTQUNQLENB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Q1YsZUFBZTs7O29DQWdCckIsTUFBTTs7SUE4RlQsaUNBQUM7Q0FBQSxBQTNHRCxJQTJHQztTQXRHWSwwQkFBMEI7OztJQUVyQyw2Q0FBcUI7O0lBQ3JCLG1EQUF1Qjs7SUFDdkIsZ0RBQW9COztJQUNwQixnREFBdUI7Ozs7O0lBQ3ZCLDhEQUErQzs7SUFFL0MsdURBQXlEOzs7OztJQUU3Qyw0REFBc0Q7Ozs7O0lBQ3RELHlDQUE4Qjs7Ozs7SUFDOUIsc0RBQTBDOzs7OztJQUMxQyxnREFBOEI7Ozs7O0lBQzlCLHlDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdG9yUmVmLCBPbkRlc3Ryb3ksIE91dHB1dCwgRXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbiwgQ29tbWVudCB9IGZyb20gJy4uLy4uLy4uL2RhdGEvYW5ub3RhdGlvbi1zZXQubW9kZWwnO1xuaW1wb3J0IHsgQW5ub3RhdGlvblN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEvYW5ub3RhdGlvbi1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBkZlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhL3BkZi5zZXJ2aWNlJztcbmltcG9ydCB7IEVtTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2xvZ2dpbmcvZW0tbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGRmUmVuZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEvcGRmLXJlbmRlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNvbnRleHR1YWwtdG9vbGJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0dWFsLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb250ZXh0dWFsLXRvb2xiYXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0dWFsVG9vbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICB0b29sUG9zOiB7bGVmdCwgdG9wfTtcbiAgaXNTaG93VG9vbGJhcjogYm9vbGVhbjtcbiAgc2hvd0RlbGV0ZTogYm9vbGVhbjtcbiAgYW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcbiAgcHJpdmF0ZSBjb250ZXh0dWFsVG9vbEJhck9wdGlvbnM6IFN1YnNjcmlwdGlvbjtcblxuICBAT3V0cHV0KCkgZGVsZXRlZEFubm90YXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFubm90YXRpb25TdG9yZVNlcnZpY2U6IEFubm90YXRpb25TdG9yZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwZGZSZW5kZXJTZXJ2aWNlOiBQZGZSZW5kZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBkZlNlcnZpY2U6IFBkZlNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9nOiBFbUxvZ2dlclNlcnZpY2UpIHtcbiAgICB0aGlzLmxvZy5zZXRDbGFzcygnQ29udGV4dHVhbFRvb2xiYXJDb21wb25lbnQnKTtcbiAgICB0aGlzLnRvb2xQb3MgPSB7XG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29udGV4dHVhbFRvb2xCYXJPcHRpb25zID0gdGhpcy5hbm5vdGF0aW9uU3RvcmVTZXJ2aWNlLmdldFRvb2xiYXJVcGRhdGUoKVxuICAgICAgLnN1YnNjcmliZShjb250ZXh0dWFsT3B0aW9ucyA9PiB7XG4gICAgICAgIGlmIChjb250ZXh0dWFsT3B0aW9ucy5hbm5vdGF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnNob3dUb29sQmFyKGNvbnRleHR1YWxPcHRpb25zLmFubm90YXRpb24sIGNvbnRleHR1YWxPcHRpb25zLnNob3dEZWxldGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaGlkZVRvb2xCYXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5pc1Nob3dUb29sYmFyID0gZmFsc2U7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZi5kZXRhY2goKTtcbiAgICBpZiAodGhpcy5jb250ZXh0dWFsVG9vbEJhck9wdGlvbnMpIHtcbiAgICAgIHRoaXMuY29udGV4dHVhbFRvb2xCYXJPcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgc2hvd1Rvb2xCYXIoYW5ub3RhdGlvbjogQW5ub3RhdGlvbiwgc2hvd0RlbGV0ZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFubm90YXRpb24gPSBhbm5vdGF0aW9uO1xuICAgIHRoaXMuc2hvd0RlbGV0ZSA9IHNob3dEZWxldGU7XG5cbiAgICB0aGlzLnRvb2xQb3MgPSB0aGlzLmdldFJlbGF0aXZlUG9zaXRpb24oYW5ub3RhdGlvbi5pZCk7XG4gICAgdGhpcy5pc1Nob3dUb29sYmFyID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5yZWZbJ2Rlc3Ryb3llZCddKSB7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVsYXRpdmVQb3NpdGlvbihhbm5vdGF0aW9uSWQ6IHN0cmluZyk6IHtsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyfSB7XG4gICAgY29uc3Qgc3ZnU2VsZWN0b3IgPSB0aGlzLnBkZlJlbmRlclNlcnZpY2UuZ2V0Vmlld2VyRWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoYGdbZGF0YS1wZGYtYW5ub3RhdGUtaWQ9XCIke2Fubm90YXRpb25JZH1cIl1gKTtcbiAgICBjb25zdCBoaWdobGlnaHRSZWN0ID0gPERPTVJlY3Q+c3ZnU2VsZWN0b3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5wZGZTZXJ2aWNlLmdldEFubm90YXRpb25XcmFwcGVyKCkubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB3cmFwcGVyUmVjdCA9IDxET01SZWN0PndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCBsZWZ0ID0gKChoaWdobGlnaHRSZWN0LnggLSB3cmFwcGVyUmVjdC5sZWZ0KVxuICAgICAgLSAxNzUpICsgaGlnaGxpZ2h0UmVjdC53aWR0aCAvIDI7IC8vIE1pbnVzIGhhbGYgdGhlIHRvb2xiYXIgd2lkdGggKyBoYWxmIHRoZSBsZW5ndGggb2YgdGhlIGhpZ2hsaWdodFxuICAgIGNvbnN0IHRvcCA9ICgoaGlnaGxpZ2h0UmVjdC55IC0gd3JhcHBlclJlY3QudG9wKVxuICAgICAgLSA1OSkgLSA1OyAvLyBNaW51cyBoZWlnaHQgb2YgdG9vbGJhciArIDVweFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQsXG4gICAgICB0b3BcbiAgICB9O1xuICB9XG5cbiAgaGlkZVRvb2xCYXIoKSB7XG4gICAgICB0aGlzLmFubm90YXRpb24gPSBudWxsO1xuICAgICAgdGhpcy5pc1Nob3dUb29sYmFyID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dEZWxldGUgPSBmYWxzZTtcblxuICAgICAgaWYgKCF0aGlzLnJlZlsnZGVzdHJveWVkJ10pIHtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICB9XG5cbiAgaGFuZGxlQ29tbWVudEJ0bkNsaWNrKCkge1xuICAgIGlmICh0aGlzLmFubm90YXRpb24uY29tbWVudHMubGVuZ3RoID09PSAwICkge1xuICAgICAgICB0aGlzLmFubm90YXRpb25TdG9yZVNlcnZpY2UuYWRkQ29tbWVudChuZXcgQ29tbWVudChudWxsLCB0aGlzLmFubm90YXRpb24uaWQsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwpKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlbXBBbm5vdGF0aW9uID0gdGhpcy5hbm5vdGF0aW9uO1xuICAgICAgICB0aGlzLmhpZGVUb29sQmFyKCk7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JlU2VydmljZS5zZXRDb21tZW50Rm9jdXNTdWJqZWN0KHRlbXBBbm5vdGF0aW9uLCB0cnVlKTtcbiAgICAgICAgfSwgMTApO1xuICB9XG5cbiAgaGFuZGxlSGlnaGxpZ2h0QnRuQ2xpY2soKSB7XG4gICAgdGhpcy5oaWRlVG9vbEJhcigpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlRGVsZXRlQnRuQ2xpY2soKSB7XG4gICAgYXdhaXQgdGhpcy5hbm5vdGF0aW9uU3RvcmVTZXJ2aWNlLmRlbGV0ZUFubm90YXRpb25CeUlkKHRoaXMuYW5ub3RhdGlvbi5pZCwgdGhpcy5hbm5vdGF0aW9uLnBhZ2UpO1xuICAgIHRoaXMuaGlkZVRvb2xCYXIoKTtcbiAgICB0aGlzLmRlbGV0ZWRBbm5vdGF0aW9uLmVtaXQoJ2RlbGV0ZWQgYW5ub3RhdGlvbicpO1xuICB9XG59XG4iXX0=