survey-angular-ui
Version:
survey.js is a JavaScript Survey Library. It is a modern way to add a survey to your website. It uses JSON for survey metadata and results.
156 lines • 18.9 kB
JavaScript
import { Component } from "@angular/core";
import { EmbeddedViewContentComponent } from "./embedded-view-content.component";
import * as i0 from "@angular/core";
export class BaseAngular extends EmbeddedViewContentComponent {
constructor(changeDetectorRef, viewContainerRef) {
super(viewContainerRef);
this.changeDetectorRef = changeDetectorRef;
this.isModelSubsribed = false;
this.isDestroyed = false;
}
get surveyModel() {
return this.getModel().getSurvey();
}
ngDoCheck() {
if (this.previousModel !== this.getModel()) {
this.unMakeBaseElementAngular(this.previousModel);
this.makeBaseElementAngular(this.getModel());
this.onModelChanged();
this.previousModel = this.getModel();
}
this.setIsRendering(true);
}
onModelChanged() { }
setIsRendering(val) {
const model = this.getModel();
if (!!model) {
model.isRendering = val;
}
}
getIsRendering() {
const model = this.getModel();
return !!model && !!model.isRendering;
}
ngOnDestroy() {
this.isDestroyed = true;
this.unMakeBaseElementAngular(this.getModel());
this.previousModel = undefined;
}
isBaseElementSubsribed(stateElement) {
return !!stateElement.__ngImplemented;
}
getBaseElementCallbacks(stateElement) {
var _a;
stateElement.__ngSubscribers = (_a = stateElement.__ngSubscribers) !== null && _a !== void 0 ? _a : [];
return (stateElement.__ngSubscribers);
}
makeBaseElementAngular(stateElement) {
this.makeBaseElementAngularCallback = () => {
this.isModelSubsribed = true;
stateElement.__ngImplemented = true;
stateElement.iteratePropertiesHash((hash, key) => {
var val = hash[key];
if (Array.isArray(val)) {
var val = val;
val["onArrayChanged"] = (arrayChanges) => {
this.update(key);
};
}
});
stateElement.setPropertyValueCoreHandler = (hash, key, val) => {
if (hash[key] !== val) {
hash[key] = val;
this.update(key);
}
};
stateElement.enableOnElementRerenderedEvent();
};
if (!!stateElement) {
if (!stateElement.__ngImplemented) {
this.makeBaseElementAngularCallback();
}
else {
this.getBaseElementCallbacks(stateElement).push(this.makeBaseElementAngularCallback);
}
}
}
unMakeBaseElementAngular(stateElement) {
if (!!stateElement) {
if (this.isModelSubsribed) {
this.isModelSubsribed = false;
stateElement.__ngImplemented = false;
stateElement.setPropertyValueCoreHandler = undefined;
stateElement.iteratePropertiesHash((hash, key) => {
var val = hash[key];
if (Array.isArray(val)) {
var val = val;
val["onArrayChanged"] = () => { };
}
});
stateElement.disableOnElementRerenderedEvent();
const callbacks = this.getBaseElementCallbacks(stateElement);
const callback = callbacks.shift();
callback && callback();
}
else if (this.makeBaseElementAngularCallback) {
const callbacks = this.getBaseElementCallbacks(stateElement);
const index = callbacks.indexOf(this.makeBaseElementAngularCallback);
if (index > -1) {
callbacks.splice(index, 1);
}
}
}
}
update(key) {
if (this.getIsRendering())
return;
this.beforeUpdate();
if (key && this.getPropertiesToUpdateSync().indexOf(key) > -1) {
this.detectChanges();
this.afterUpdate(true);
}
else {
queueMicrotask(() => {
if (!this.isDestroyed) {
this.setIsRendering(true);
this.detectChanges();
}
this.afterUpdate();
});
}
}
getChangeDetectorRef() {
return this.embeddedView ? this.embeddedView : this.changeDetectorRef;
}
getPropertiesToUpdateSync() {
return [];
}
detectChanges() {
this.getChangeDetectorRef().detectChanges();
}
getShouldReattachChangeDetector() {
return true;
}
beforeUpdate() {
this.setIsRendering(true);
}
afterUpdate(isSync = false) {
this.setIsRendering(false);
const model = this.getModel();
if (model && !this.isDestroyed) {
model.afterRerender();
}
}
ngAfterViewChecked() {
this.setIsRendering(false);
}
}
BaseAngular.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseAngular, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
BaseAngular.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BaseAngular, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "", isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseAngular, decorators: [{
type: Component,
args: [{
template: ""
}]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBaUUsTUFBTSxlQUFlLENBQUM7QUFFNUgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBS2pGLE1BQU0sT0FBZ0IsV0FBbUMsU0FBUSw0QkFBNEI7SUFDM0YsWUFBc0IsaUJBQW9DLEVBQUUsZ0JBQW1DO1FBQzdGLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBREosc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVFsRCxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUF3QmxDLGdCQUFXLEdBQVksS0FBSyxDQUFDO0lBOUJyQyxDQUFDO0lBQ0QsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFLTSxTQUFTO1FBQ2QsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFUyxjQUFjLEtBQUssQ0FBQztJQUV0QixjQUFjLENBQUMsR0FBWTtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLENB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b250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIERvQ2hlY2ssIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2UsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQXJyYXlDaGFuZ2VzLCBCYXNlLCBJU3VydmV5LCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgRW1iZWRkZWRWaWV3Q29udGVudENvbXBvbmVudCB9IGZyb20gXCIuL2VtYmVkZGVkLXZpZXctY29udGVudC5jb21wb25lbnRcIjtcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBcIlwiXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VBbmd1bGFyPFQgZXh0ZW5kcyBCYXNlID0gQmFzZT4gZXh0ZW5kcyBFbWJlZGRlZFZpZXdDb250ZW50Q29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25EZXN0cm95IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgdmlld0NvbnRhaW5lclJlZj86IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICBzdXBlcih2aWV3Q29udGFpbmVyUmVmKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleU1vZGVsKCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmdldE1vZGVsKCkuZ2V0U3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldE1vZGVsKCk6IFQ7XG4gIHByb3RlY3RlZCBwcmV2aW91c01vZGVsPzogVDtcbiAgcHJpdmF0ZSBpc01vZGVsU3Vic3JpYmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c01vZGVsICE9PSB0aGlzLmdldE1vZGVsKCkpIHtcbiAgICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRBbmd1bGFyKHRoaXMucHJldmlvdXNNb2RlbCk7XG4gICAgICB0aGlzLm1ha2VCYXNlRWxlbWVudEFuZ3VsYXIodGhpcy5nZXRNb2RlbCgpKTtcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZWQoKTtcbiAgICAgIHRoaXMucHJldmlvdXNNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbk1vZGVsQ2hhbmdlZCgpIHsgfVxuXG4gIHByaXZhdGUgc2V0SXNSZW5kZXJpbmcodmFsOiBib29sZWFuKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgaWYgKCEhbW9kZWwpIHtcbiAgICAgICg8YW55Pm1vZGVsKS5pc1JlbmRlcmluZyA9IHZhbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRJc1JlbmRlcmluZygpIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICByZXR1cm4gISFtb2RlbCAmJiAhISg8YW55Pm1vZGVsKS5pc1JlbmRlcmluZztcbiAgfVxuICBwcml2YXRlIGlzRGVzdHJveWVkOiBib29sZWFuID0gZmFsc2U7XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRBbmd1bGFyKHRoaXMuZ2V0TW9kZWwoKSk7XG4gICAgdGhpcy5wcmV2aW91c01vZGVsID0gdW5kZWZpbmVkO1xuICB9XG4gIHByaXZhdGUgbWFrZUJhc2VFbGVtZW50QW5ndWxhckNhbGxiYWNrPzogKCkgPT4gdm9pZDtcbiAgcHJvdGVjdGVkIGlzQmFzZUVsZW1lbnRTdWJzcmliZWQoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgcmV0dXJuICEhKDxhbnk+c3RhdGVFbGVtZW50KS5fX25nSW1wbGVtZW50ZWQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXRCYXNlRWxlbWVudENhbGxiYWNrcyhzdGF0ZUVsZW1lbnQ6IEJhc2UpOiBBcnJheTwoKSA9PiB2b2lkPiB7XG4gICAgKDxhbnk+c3RhdGVFbGVtZW50KS5fX25nU3Vic2NyaWJlcnMgPSAoPGFueT5zdGF0ZUVsZW1lbnQpLl9fbmdTdWJzY3JpYmVycyA/PyBbXTtcbiAgICByZXR1cm4gKCg8YW55PnN0YXRlRWxlbWVudCkuX19uZ1N1YnNjcmliZXJzKTtcbiAgfVxuICBwcml2YXRlIG1ha2VCYXNlRWxlbWVudEFuZ3VsYXIoc3RhdGVFbGVtZW50OiBUKSB7XG4gICAgdGhpcy5tYWtlQmFzZUVsZW1lbnRBbmd1bGFyQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLmlzTW9kZWxTdWJzcmliZWQgPSB0cnVlO1xuICAgICAgKDxhbnk+c3RhdGVFbGVtZW50KS5fX25nSW1wbGVtZW50ZWQgPSB0cnVlO1xuICAgICAgc3RhdGVFbGVtZW50Lml0ZXJhdGVQcm9wZXJ0aWVzSGFzaCgoaGFzaCwga2V5KSA9PiB7XG4gICAgICAgIHZhciB2YWw6IGFueSA9IGhhc2hba2V5XTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgIHZhciB2YWw6IGFueSA9IHZhbDtcbiAgICAgICAgICB2YWxbXCJvbkFycmF5Q2hhbmdlZFwiXSA9IChhcnJheUNoYW5nZXM6IEFycmF5Q2hhbmdlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoa2V5KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN0YXRlRWxlbWVudC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSAoXG4gICAgICAgIGhhc2g6IGFueSxcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIHZhbDogYW55XG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKGhhc2hba2V5XSAhPT0gdmFsKSB7XG4gICAgICAgICAgaGFzaFtrZXldID0gdmFsO1xuICAgICAgICAgIHRoaXMudXBkYXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzdGF0ZUVsZW1lbnQuZW5hYmxlT25FbGVtZW50UmVyZW5kZXJlZEV2ZW50KCk7XG4gICAgfTtcbiAgICBpZiAoISFzdGF0ZUVsZW1lbnQpIHtcbiAgICAgIGlmKCEoPGFueT5zdGF0ZUVsZW1lbnQpLl9fbmdJbXBsZW1lbnRlZCkge1xuICAgICAgICB0aGlzLm1ha2VCYXNlRWxlbWVudEFuZ3VsYXJDYWxsYmFjaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRCYXNlRWxlbWVudENhbGxiYWNrcyhzdGF0ZUVsZW1lbnQpLnB1c2godGhpcy5tYWtlQmFzZUVsZW1lbnRBbmd1bGFyQ2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHVuTWFrZUJhc2VFbGVtZW50QW5ndWxhcihzdGF0ZUVsZW1lbnQ/OiBCYXNlKSB7XG4gICAgaWYgKCEhc3RhdGVFbGVtZW50KSB7XG4gICAgICBpZih0aGlzLmlzTW9kZWxTdWJzcmliZWQpIHtcbiAgICAgICAgdGhpcy5pc01vZGVsU3Vic3JpYmVkID0gZmFsc2U7XG4gICAgICAgICg8YW55PnN0YXRlRWxlbWVudCkuX19uZ0ltcGxlbWVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlRWxlbWVudC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgc3RhdGVFbGVtZW50Lml0ZXJhdGVQcm9wZXJ0aWVzSGFzaCgoaGFzaCwga2V5KSA9PiB7XG4gICAgICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIHZhciB2YWw6IGFueSA9IHZhbDtcbiAgICAgICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKCkgPT4geyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlRWxlbWVudC5kaXNhYmxlT25FbGVtZW50UmVyZW5kZXJlZEV2ZW50KCk7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuZ2V0QmFzZUVsZW1lbnRDYWxsYmFja3Moc3RhdGVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBjYWxsYmFja3Muc2hpZnQoKTtcbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYodGhpcy5tYWtlQmFzZUVsZW1lbnRBbmd1bGFyQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5nZXRCYXNlRWxlbWVudENhbGxiYWNrcyhzdGF0ZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGNhbGxiYWNrcy5pbmRleE9mKHRoaXMubWFrZUJhc2VFbGVtZW50QW5ndWxhckNhbGxiYWNrKTtcbiAgICAgICAgaWYoaW5kZXggPiAtMSkge1xuICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZShrZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5nZXRJc1JlbmRlcmluZygpKSByZXR1cm47XG4gICAgdGhpcy5iZWZvcmVVcGRhdGUoKTtcbiAgICBpZiAoa2V5ICYmIHRoaXMuZ2V0UHJvcGVydGllc1RvVXBkYXRlU3luYygpLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuYWZ0ZXJVcGRhdGUodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFmdGVyVXBkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRDaGFuZ2VEZXRlY3RvclJlZigpIHtcbiAgICByZXR1cm4gdGhpcy5lbWJlZGRlZFZpZXcgPyB0aGlzLmVtYmVkZGVkVmlldyA6IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb3BlcnRpZXNUb1VwZGF0ZVN5bmMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHByb3RlY3RlZCBkZXRlY3RDaGFuZ2VzKCkge1xuICAgIHRoaXMuZ2V0Q2hhbmdlRGV0ZWN0b3JSZWYoKS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2hvdWxkUmVhdHRhY2hDaGFuZ2VEZXRlY3RvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBiZWZvcmVVcGRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWZ0ZXJVcGRhdGUoaXNTeW5jOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICBpZihtb2RlbCAmJiAhdGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgbW9kZWwuYWZ0ZXJSZXJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cbn0iXX0=