UNPKG

survey-angular-ui

Version:

A free MIT-licensed Angular UI component that renders dynamic, interactive JSON-based forms and surveys. You can use it to collect responses from users and send them to your own database.

93 lines 11.7 kB
import { Directive, Input } from "@angular/core"; import { doKey2ClickDown, doKey2ClickUp, doKey2ClickBlur } from "survey-core"; import * as i0 from "@angular/core"; export class Key2ClickDirective { constructor(el) { this.el = el; this.isSubscribed = false; this.isPointerUpSubscribed = false; this.options = Object.assign({}, Key2ClickDirective.defaultOptions); this.onkeyup = (evt) => { evt.preventDefault(); evt.stopPropagation(); doKey2ClickUp(evt, this.options); }; this.onpointerup = (evt) => { if (evt.pointerType === "pen") { evt.preventDefault(); evt.stopPropagation(); const element = evt.target; if (element === null || element === void 0 ? void 0 : element.click) element.click(); } }; this.subscribeEventListeners(); this.subscribePointerUp(); } onkeydown(evt) { doKey2ClickDown(evt, this.options); } blur(evt) { doKey2ClickBlur(evt); } get element() { return this.el.nativeElement; } subscribePointerUp() { if (this.isPointerUpSubscribed) return; this.element.addEventListener("pointerup", this.onpointerup.bind(this)); this.isPointerUpSubscribed = true; } unsubscribePointerUp() { if (!this.isPointerUpSubscribed) return; this.element.removeEventListener("pointerup", this.onpointerup.bind(this)); this.isPointerUpSubscribed = false; } subscribeEventListeners() { if (this.isSubscribed) return; this.element.tabIndex = 0; this.element.addEventListener("keyup", this.onkeyup.bind(this)); this.element.addEventListener("keydown", this.onkeydown.bind(this)); this.element.addEventListener("blur", this.blur); this.isSubscribed = true; } unsubscribeEventListeners() { if (!this.isSubscribed) return; this.element.tabIndex = -1; this.element.removeEventListener("keyup", this.onkeyup.bind(this)); this.element.removeEventListener("keydown", this.onkeydown.bind(this)); this.element.removeEventListener("blur", this.blur); this.isSubscribed = false; } ngOnChanges(changes) { const curValue = changes["key2click"].currentValue; this.subscribePointerUp(); if (curValue.disableTabStop) { this.unsubscribeEventListeners(); } else { this.subscribeEventListeners(); } this.options = Object.assign({}, Key2ClickDirective.defaultOptions, curValue); } ngOnDestroy() { this.unsubscribeEventListeners(); this.unsubscribePointerUp(); } } Key2ClickDirective.defaultOptions = { processEsc: true, disableTabStop: false }; Key2ClickDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: Key2ClickDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); Key2ClickDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: Key2ClickDirective, selector: "[key2click]", inputs: { key2click: "key2click" }, usesOnChanges: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: Key2ClickDirective, decorators: [{ type: Directive, args: [{ selector: "[key2click]" }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { key2click: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcta2V5MmNsaWNrLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9uZy1rZXkyY2xpY2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUF1QyxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQTJCLE1BQU0sYUFBYSxDQUFDOztBQUt2RyxNQUFNLE9BQU8sa0JBQWtCO0lBMkI3QixZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQXpCMUIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBRXRDLFlBQU8scUJBQWtDLGtCQUFrQixDQUFDLGNBQWMsRUFBRztRQU1yRSxZQUFPLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUM3QixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3RCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQztRQUNNLGdCQUFXLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNqQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssS0FBSyxFQUFFO2dCQUM3QixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxPQUFPLEdBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFDaEMsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsS0FBSztvQkFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDckM7UUFDSCxDQUFDLENBQUM7UUFLQSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FB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O0lBQ2hGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQzs7QUFqRk0saUNBQWMsR0FBNEIsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQztnSEFEbEYsa0JBQWtCO29HQUFsQixrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFIOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtpQkFDeEI7aUdBT1UsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcywgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGRvS2V5MkNsaWNrRG93biwgZG9LZXkyQ2xpY2tVcCwgZG9LZXkyQ2xpY2tCbHVyLCBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2tleTJjbGlja11cIlxufSlcbmV4cG9ydCBjbGFzcyBLZXkyQ2xpY2tEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBkZWZhdWx0T3B0aW9uczogSUF0dGFjaEtleTJjbGlja09wdGlvbnMgPSB7IHByb2Nlc3NFc2M6IHRydWUsIGRpc2FibGVUYWJTdG9wOiBmYWxzZSB9O1xuICBwcml2YXRlIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzUG9pbnRlclVwU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gIG9wdGlvbnM/OiBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyA9IHsgLi4uS2V5MkNsaWNrRGlyZWN0aXZlLmRlZmF1bHRPcHRpb25zIH07XG4gIEBJbnB1dCgpIGtleTJjbGljaz86IElBdHRhY2hLZXkyY2xpY2tPcHRpb25zO1xuXG4gIHByaXZhdGUgb25rZXlkb3duIChldnQ6IGFueSkge1xuICAgIGRvS2V5MkNsaWNrRG93bihldnQsIHRoaXMub3B0aW9ucyk7XG4gIH1cbiAgcHJpdmF0ZSBvbmtleXVwID0gKGV2dDogYW55KSA9PiB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGRvS2V5MkNsaWNrVXAoZXZ0LCB0aGlzLm9wdGlvbnMpO1xuICB9O1xuICBwcml2YXRlIG9ucG9pbnRlcnVwID0gKGV2dDogYW55KSA9PiB7XG4gICAgaWYgKGV2dC5wb2ludGVyVHlwZSA9PT0gXCJwZW5cIikge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBlbGVtZW50OiBhbnkgPSBldnQudGFyZ2V0O1xuICAgICAgaWYgKGVsZW1lbnQ/LmNsaWNrKSBlbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuICB9O1xuICBwcml2YXRlIGJsdXIgKGV2dDogYW55KSB7XG4gICAgZG9LZXkyQ2xpY2tCbHVyKGV2dCk7XG4gIH1cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnN1YnNjcmliZVBvaW50ZXJVcCgpO1xuICB9XG5cbiAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHN1YnNjcmliZVBvaW50ZXJVcCgpIHtcbiAgICBpZiAodGhpcy5pc1BvaW50ZXJVcFN1YnNjcmliZWQpIHJldHVybjtcbiAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCB0aGlzLm9ucG9pbnRlcnVwLmJpbmQodGhpcykpO1xuICAgIHRoaXMuaXNQb2ludGVyVXBTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgfVxuICB1bnN1YnNjcmliZVBvaW50ZXJVcCgpIHtcbiAgICBpZiAoIXRoaXMuaXNQb2ludGVyVXBTdWJzY3JpYmVkKSByZXR1cm47XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgdGhpcy5vbnBvaW50ZXJ1cC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmlzUG9pbnRlclVwU3Vic2NyaWJlZCA9IGZhbHNlO1xuICB9XG5cbiAgc3Vic2NyaWJlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuaXNTdWJzY3JpYmVkKSByZXR1cm47XG5cbiAgICB0aGlzLmVsZW1lbnQudGFiSW5kZXggPSAwO1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5vbmtleXVwLmJpbmQodGhpcykpO1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm9ua2V5ZG93bi5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgdGhpcy5ibHVyKTtcblxuICAgIHRoaXMuaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgfVxuICB1bnN1YnNjcmliZUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICghdGhpcy5pc1N1YnNjcmliZWQpIHJldHVybjtcblxuICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5vbmtleXVwLmJpbmQodGhpcykpO1xuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm9ua2V5ZG93bi5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgdGhpcy5ibHVyKTtcblxuICAgIHRoaXMuaXNTdWJzY3JpYmVkID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgY3VyVmFsdWUgPSBjaGFuZ2VzW1wia2V5MmNsaWNrXCJdLmN1cnJlbnRWYWx1ZTtcbiAgICB0aGlzLnN1YnNjcmliZVBvaW50ZXJVcCgpO1xuICAgIGlmIChjdXJWYWx1ZS5kaXNhYmxlVGFiU3RvcCkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgS2V5MkNsaWNrRGlyZWN0aXZlLmRlZmF1bHRPcHRpb25zLCBjdXJWYWx1ZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlUG9pbnRlclVwKCk7XG4gIH1cbn0iXX0=