UNPKG

ngx-feedback

Version:

Angular Feedback Library

118 lines 8.97 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable, RendererFactory2 } from '@angular/core'; import { fromEvent, Subject } from 'rxjs'; import html2canvas from 'html2canvas'; import * as i0 from "@angular/core"; export class SelectorsService { /** * @param {?} rendererFactory */ constructor(rendererFactory) { this.rendererFactory = rendererFactory; this.preview = new Subject(); this.subs = []; this.renderer = this.rendererFactory.createRenderer(null, null); } /** * @return {?} */ pageScreenshot() { this.screenshot(document.body); } /** * @return {?} */ elementsHighlight() { /** @type {?} */ let element; /** @type {?} */ const elements = []; this.source = fromEvent(document, 'mousemove').subscribe((/** * @param {?} ev * @return {?} */ (ev) => { if (element) { this.renderer.removeClass(element, 'ngx-feedback__highlight'); } element = document.elementFromPoint(ev.x, ev.y); if (elements.findIndex((/** * @param {?} el * @return {?} */ el => el === element)) === -1) { elements.push(element); this.subs.push(fromEvent(element, 'click').subscribe((/** * @param {?} evt * @return {?} */ (evt) => { evt.stopPropagation(); this.screenshot(element); }))); } this.renderer.addClass(element, 'ngx-feedback__highlight'); })); } /** * @param {?} element * @return {?} */ screenshot(element) { /** @type {?} */ let image; html2canvas(element).then((/** * @param {?} canvas * @return {?} */ canvas => { image = ((/** @type {?} */ (canvas))).toDataURL(); this.preview.next(image); })); this.renderer.removeClass(element, 'ngx-feedback__highlight'); this.clean(); } /** * @return {?} */ clean() { if (this.source) { this.source.unsubscribe(); } this.subs.forEach((/** * @param {?} sub * @return {?} */ sub => sub.unsubscribe())); } } SelectorsService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ SelectorsService.ctorParameters = () => [ { type: RendererFactory2 } ]; /** @nocollapse */ SelectorsService.ngInjectableDef = i0.defineInjectable({ factory: function SelectorsService_Factory() { return new SelectorsService(i0.inject(i0.RendererFactory2)); }, token: SelectorsService, providedIn: "root" }); if (false) { /** @type {?} */ SelectorsService.prototype.preview; /** @type {?} */ SelectorsService.prototype.subs; /** @type {?} */ SelectorsService.prototype.source; /** * @type {?} * @private */ SelectorsService.prototype.renderer; /** * @type {?} * @private */ SelectorsService.prototype.rendererFactory; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3JzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZmVlZGJhY2svIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvc2VsZWN0b3JzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQzs7QUFHdEMsTUFBTSxPQUFPLGdCQUFnQjs7OztJQVF6QixZQUE2QixlQUFpQztRQUFqQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFQOUQsWUFBTyxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLFNBQUksR0FBbUIsRUFBRSxDQUFDO1FBT3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Ozs7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7OztJQUNELGlCQUFpQjs7WUFDVCxPQUFnQjs7Y0FDZCxRQUFRLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsU0FBUzs7OztRQUFDLENBQUMsRUFBYyxFQUFFLEVBQUU7WUFDeEUsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDLENBQUM7YUFDakU7WUFDRCxPQUFPLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksUUFBUSxDQUFDLFNBQVM7Ozs7WUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxPQUFPLEVBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDakQsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTOzs7O2dCQUFDLENBQUMsR0FBZSxFQUFFLEVBQUU7b0JBQ3RELEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxFQUFDLENBQ0wsQ0FBQzthQUNMO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDL0QsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7OztJQUVELFVBQVUsQ0FBQyxPQUFZOztZQUNmLEtBQUs7UUFDVCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSTs7OztRQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9CLEtBQUssR0FBRyxDQUFDLG1CQUFBLE1BQU0sRUFBcUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsRUFBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7Ozs7SUFFRCxLQUFLO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFDLENBQUM7SUFDaEQsQ0FBQzs7O1lBckRKLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7Ozs7WUFKRixnQkFBZ0I7Ozs7O0lBTTVDLG1DQUFzQzs7SUFDdEMsZ0NBQTBCOztJQUUxQixrQ0FBcUI7Ozs7O0lBRXJCLG9DQUE0Qjs7Ozs7SUFFaEIsMkNBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCBodG1sMmNhbnZhcyBmcm9tICdodG1sMmNhbnZhcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0b3JzU2VydmljZSB7XHJcbiAgICBwcmV2aWV3OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgICBzb3VyY2U6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyID0gdGhpcy5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFnZVNjcmVlbnNob3QoKSB7XHJcbiAgICAgICAgdGhpcy5zY3JlZW5zaG90KGRvY3VtZW50LmJvZHkpO1xyXG4gICAgfVxyXG4gICAgZWxlbWVudHNIaWdobGlnaHQoKSB7XHJcbiAgICAgICAgbGV0IGVsZW1lbnQ6IEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbXTtcclxuICAgICAgICB0aGlzLnNvdXJjZSA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScpLnN1YnNjcmliZSgoZXY6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ25neC1mZWVkYmFja19faGlnaGxpZ2h0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXYueCwgZXYueSk7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50cy5maW5kSW5kZXgoZWwgPT4gZWwgPT09IGVsZW1lbnQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vicy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb21FdmVudChlbGVtZW50LCAnY2xpY2snKS5zdWJzY3JpYmUoKGV2dDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NyZWVuc2hvdChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICduZ3gtZmVlZGJhY2tfX2hpZ2hsaWdodCcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNjcmVlbnNob3QoZWxlbWVudDogYW55KSB7XHJcbiAgICAgICAgbGV0IGltYWdlO1xyXG4gICAgICAgIGh0bWwyY2FudmFzKGVsZW1lbnQpLnRoZW4oY2FudmFzID0+IHtcclxuICAgICAgICAgICAgaW1hZ2UgPSAoY2FudmFzIGFzIEhUTUxDYW52YXNFbGVtZW50KS50b0RhdGFVUkwoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3Lm5leHQoaW1hZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ25neC1mZWVkYmFja19faGlnaGxpZ2h0Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhbigpIHtcclxuICAgICAgICBpZiAodGhpcy5zb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2UudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdWJzLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxufVxyXG4iXX0=