ngx-feedback
Version:
Angular Feedback Library
118 lines • 8.97 kB
JavaScript
/**
* @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=