diff --git a/src/base.ts b/src/base.ts index e1eea38fe9..5c90cbfba5 100644 --- a/src/base.ts +++ b/src/base.ts @@ -117,6 +117,11 @@ export class Base { * Returns the type of the object as a string as it represents in the json. */ public getType(): string { return "base"; } + /** + * Returns the element template name without prefix. Typically it equals to getType() + * @see getType + */ + public getTemplate(): string { return this.getType(); } /** * Returns true if the object is loading from Json at the current moment. */ diff --git a/src/jsonobject.ts b/src/jsonobject.ts index 3e252433b2..7f8ba8d89a 100644 --- a/src/jsonobject.ts +++ b/src/jsonobject.ts @@ -296,7 +296,9 @@ export class JsonMetadata { private createCustomType(name: string, creator: any): any { var res = creator(); res.customTypeName = name; + res.customTemplateName = res.getTemplate ? res.getTemplate() : res.getType(); res.getType = function() { return res.customTypeName; }; + res.getTemplate = function() { return res.customTemplateName; }; CustomPropertiesCollection.createProperties(res); return res; } diff --git a/src/knockout/koquestionbase.ts b/src/knockout/koquestionbase.ts index a215de207b..3e0f0ef47e 100644 --- a/src/knockout/koquestionbase.ts +++ b/src/knockout/koquestionbase.ts @@ -41,6 +41,6 @@ export class QuestionImplementorBase { private getTemplateName(): string { if (this.question.customWidget && !this.question.customWidget.widgetJson.isDefaultRender) return "survey-widget-" + this.question.customWidget.name; - return "survey-question-" + this.question.getType(); + return "survey-question-" + this.question.getTemplate(); } } diff --git a/src/knockout/kosurvey.ts b/src/knockout/kosurvey.ts index 00cac0ebb9..8186227355 100644 --- a/src/knockout/kosurvey.ts +++ b/src/knockout/kosurvey.ts @@ -63,7 +63,7 @@ export class Survey extends SurveyModel { } element = this.renderedElement; if (!element) return; - element.innerHTML = this.getTemplate(); + element.innerHTML = this.getHtmlTemplate(); self.applyBinding(); } public koEventAfterRender(element, survey) { @@ -81,7 +81,7 @@ export class Survey extends SurveyModel { this.updateKoCurrentPage(); } protected createNewPage(name: string) { return new Page(name); } - protected getTemplate(): string { return koTemplate; } + protected getHtmlTemplate(): string { return koTemplate; } protected onBeforeCreating() { var self = this; this.dummyObservable = ko.observable(0); diff --git a/src/react/reactSurvey.tsx b/src/react/reactSurvey.tsx index 20cf904b64..416253c06b 100644 --- a/src/react/reactSurvey.tsx +++ b/src/react/reactSurvey.tsx @@ -235,7 +235,7 @@ export class Survey extends React.Component implements ISurveyCreator //ISurveyCreator public createQuestionElement(question: QuestionBase): JSX.Element { - return ReactQuestionFactory.Instance.createQuestion(question.getType(), { + return ReactQuestionFactory.Instance.createQuestion(question.getTemplate(), { question: question, isDisplayMode: question.isReadOnly, creator: this }); } diff --git a/src/vue/customwidget.vue b/src/vue/customwidget.vue index 924ac38f36..2f2b5eb3fb 100644 --- a/src/vue/customwidget.vue +++ b/src/vue/customwidget.vue @@ -31,7 +31,7 @@ } get componentName(): string { if(this.hasVueComponent) return this.question.customWidget.name; - return "survey-" + this.question.getType(); + return "survey-" + this.question.getTemplate(); } mounted() { this.question.customWidget.afterRender(this.question, this.$el); diff --git a/src/vue/element.vue b/src/vue/element.vue index 37caa257e1..ff905a4a26 100644 --- a/src/vue/element.vue +++ b/src/vue/element.vue @@ -35,7 +35,7 @@ if(element.customWidget) { return "survey-customwidget"; } - return 'survey-' + element.getType(); + return 'survey-' + element.getTemplate(); } mounted() { if(this.survey && !this.element.isPanel) { diff --git a/tests/jsonobjecttests.ts b/tests/jsonobjecttests.ts index 52ecb814e8..b8217acb64 100644 --- a/tests/jsonobjecttests.ts +++ b/tests/jsonobjecttests.ts @@ -580,5 +580,6 @@ QUnit.test("Create object with virtual type by using parent constructor", funct assert.equal(truck.maxWeight, 10000, "maxWeight is deserialized"); assert.equal(truck["description"], "some text", "added property is deserialized"); assert.equal(truck["isCustom"], true, "added property created if it is default"); - assert.equal(truck.getType(), "customtruck", "type is truck"); + assert.equal(truck.getType(), "customtruck", "type is customtruck"); + assert.equal(truck.getTemplate(), "truck", "template is truck"); });