diff --git a/src/core/siteplugins/classes/compile-init-component.ts b/src/core/siteplugins/classes/compile-init-component.ts
index 9f9e7270f..96bf80965 100644
--- a/src/core/siteplugins/classes/compile-init-component.ts
+++ b/src/core/siteplugins/classes/compile-init-component.ts
@@ -12,6 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+import { CoreUtilsProvider } from '@providers/utils/utils';
import { CoreSitePluginsProvider } from '../providers/siteplugins';
/**
@@ -20,10 +21,10 @@ import { CoreSitePluginsProvider } from '../providers/siteplugins';
*/
export class CoreSitePluginsCompileInitComponent {
content = ''; // Content.
- jsData: any; // Data to pass to the component.
+ jsData: any = {}; // Data to pass to the component.
protected handlerSchema: any; // The handler data.
- constructor(protected sitePluginsProvider: CoreSitePluginsProvider) { }
+ constructor(protected sitePluginsProvider: CoreSitePluginsProvider, protected utils: CoreUtilsProvider) { }
/**
* Function called when the component is created.
@@ -53,6 +54,16 @@ export class CoreSitePluginsCompileInitComponent {
// Load first template.
if (this.handlerSchema.methodTemplates && this.handlerSchema.methodTemplates.length) {
this.content = handler.handlerSchema.methodTemplates[0].html;
+ this.jsData.CONTENT_TEMPLATES = this.utils.objectToKeyValueMap(handler.handlerSchema.methodTemplates, 'id', 'html');
+ }
+
+ // Pass data from the method result to the component.
+ if (this.handlerSchema.methodOtherdata) {
+ this.jsData.CONTENT_OTHERDATA = this.handlerSchema.methodOtherdata;
+ }
+
+ if (this.handlerSchema.methodJSResult) {
+ this.jsData.CONTENT_JS_RESULT = this.handlerSchema.methodJSResult;
}
}
}
diff --git a/src/core/siteplugins/components/assign-feedback/assign-feedback.ts b/src/core/siteplugins/components/assign-feedback/assign-feedback.ts
index 210b7f4a8..b8e1d8dcb 100644
--- a/src/core/siteplugins/components/assign-feedback/assign-feedback.ts
+++ b/src/core/siteplugins/components/assign-feedback/assign-feedback.ts
@@ -13,6 +13,7 @@
// limitations under the License.
import { Component, OnInit, Input } from '@angular/core';
+import { CoreUtilsProvider } from '@providers/utils/utils';
import { CoreSitePluginsProvider } from '../../providers/siteplugins';
import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component';
@@ -32,8 +33,8 @@ export class CoreSitePluginsAssignFeedbackComponent extends CoreSitePluginsCompi
@Input() canEdit: boolean; // Whether the user can edit.
@Input() edit: boolean; // Whether the user is editing.
- constructor(sitePluginsProvider: CoreSitePluginsProvider) {
- super(sitePluginsProvider);
+ constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) {
+ super(sitePluginsProvider, utils);
}
/**
@@ -41,15 +42,13 @@ export class CoreSitePluginsAssignFeedbackComponent extends CoreSitePluginsCompi
*/
ngOnInit(): void {
// Pass the input and output data to the component.
- this.jsData = {
- assign: this.assign,
- submission: this.submission,
- plugin: this.plugin,
- userId: this.userId,
- configs: this.configs,
- edit: this.edit,
- canEdit: this.canEdit
- };
+ this.jsData.assign = this.assign;
+ this.jsData.submission = this.submission;
+ this.jsData.plugin = this.plugin;
+ this.jsData.userId = this.userId;
+ this.jsData.configs = this.configs;
+ this.jsData.edit = this.edit;
+ this.jsData.canEdit = this.canEdit;
if (this.plugin) {
this.getHandlerData('assignfeedback_' + this.plugin.type);
diff --git a/src/core/siteplugins/components/assign-submission/assign-submission.ts b/src/core/siteplugins/components/assign-submission/assign-submission.ts
index 991989d04..cd7af884e 100644
--- a/src/core/siteplugins/components/assign-submission/assign-submission.ts
+++ b/src/core/siteplugins/components/assign-submission/assign-submission.ts
@@ -13,6 +13,7 @@
// limitations under the License.
import { Component, OnInit, Input } from '@angular/core';
+import { CoreUtilsProvider } from '@providers/utils/utils';
import { CoreSitePluginsProvider } from '../../providers/siteplugins';
import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component';
@@ -31,8 +32,8 @@ export class CoreSitePluginsAssignSubmissionComponent extends CoreSitePluginsCom
@Input() edit: boolean; // Whether the user is editing.
@Input() allowOffline: boolean; // Whether to allow offline.
- constructor(sitePluginsProvider: CoreSitePluginsProvider) {
- super(sitePluginsProvider);
+ constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) {
+ super(sitePluginsProvider, utils);
}
/**
@@ -40,14 +41,12 @@ export class CoreSitePluginsAssignSubmissionComponent extends CoreSitePluginsCom
*/
ngOnInit(): void {
// Pass the input and output data to the component.
- this.jsData = {
- assign: this.assign,
- submission: this.submission,
- plugin: this.plugin,
- configs: this.configs,
- edit: this.edit,
- allowOffline: this.allowOffline
- };
+ this.jsData.assign = this.assign;
+ this.jsData.submission = this.submission;
+ this.jsData.plugin = this.plugin;
+ this.jsData.configs = this.configs;
+ this.jsData.edit = this.edit;
+ this.jsData.allowOffline = this.allowOffline;
if (this.plugin) {
this.getHandlerData('assignsubmission_' + this.plugin.type);
diff --git a/src/core/siteplugins/components/module-index/core-siteplugins-module-index.html b/src/core/siteplugins/components/module-index/core-siteplugins-module-index.html
index 6e09aa864..3c57c372f 100644
--- a/src/core/siteplugins/components/module-index/core-siteplugins-module-index.html
+++ b/src/core/siteplugins/components/module-index/core-siteplugins-module-index.html
@@ -9,4 +9,4 @@
-
+
diff --git a/src/core/siteplugins/components/module-index/module-index.ts b/src/core/siteplugins/components/module-index/module-index.ts
index aeb23afb2..5c2e034e5 100644
--- a/src/core/siteplugins/components/module-index/module-index.ts
+++ b/src/core/siteplugins/components/module-index/module-index.ts
@@ -46,6 +46,7 @@ export class CoreSitePluginsModuleIndexComponent implements OnInit, OnDestroy, C
prefetchStatusIcon: string;
prefetchText: string;
size: string;
+ jsData: any; // Data to pass to the component.
protected isDestroyed = false;
protected statusObserver;
@@ -70,6 +71,10 @@ export class CoreSitePluginsModuleIndexComponent implements OnInit, OnDestroy, C
cmid: this.module.id
};
this.initResult = handler.initResult;
+ this.jsData = {
+ module: this.module,
+ courseId: this.courseId
+ };
}
// Get the data for the context menu.
diff --git a/src/core/siteplugins/components/plugin-content/plugin-content.ts b/src/core/siteplugins/components/plugin-content/plugin-content.ts
index 60f8eca1e..ce8a59c6a 100644
--- a/src/core/siteplugins/components/plugin-content/plugin-content.ts
+++ b/src/core/siteplugins/components/plugin-content/plugin-content.ts
@@ -110,14 +110,21 @@ export class CoreSitePluginsPluginContentComponent implements OnInit, DoCheck {
* @param {any} args New params.
* @param {string} [component] New component. If not provided, current component
* @param {string} [method] New method. If not provided, current method
+ * @param {any} [jsData] JS variables to pass to the new view so they can be used in the template or JS.
+ * If true is supplied instead of an object, all initial variables from current page will be copied.
*/
- openContent(title: string, args: any, component?: string, method?: string): void {
+ openContent(title: string, args: any, component?: string, method?: string, jsData?: any): void {
+ if (jsData === true) {
+ jsData = this.data;
+ }
+
this.navCtrl.push('CoreSitePluginsPluginPage', {
title: title,
component: component || this.component,
method: method || this.method,
args: args,
- initResult: this.initResult
+ initResult: this.initResult,
+ jsData: jsData
});
}
@@ -144,12 +151,16 @@ export class CoreSitePluginsPluginContentComponent implements OnInit, DoCheck {
* @param {any} args New params.
* @param {string} [component] New component. If not provided, current component
* @param {string} [method] New method. If not provided, current method
+ * @param {string} [jsData] JS variables to pass to the new view so they can be used in the template or JS.
*/
- updateContent(args: any, component?: string, method?: string): void {
+ updateContent(args: any, component?: string, method?: string, jsData?: any): void {
this.component = component || this.component;
this.method = method || this.method;
this.args = args;
this.dataLoaded = false;
+ if (jsData) {
+ Object.assign(this.data, jsData);
+ }
this.fetchContent();
}
diff --git a/src/core/siteplugins/components/question-behaviour/question-behaviour.ts b/src/core/siteplugins/components/question-behaviour/question-behaviour.ts
index 0b8fba773..0f0bcee48 100644
--- a/src/core/siteplugins/components/question-behaviour/question-behaviour.ts
+++ b/src/core/siteplugins/components/question-behaviour/question-behaviour.ts
@@ -13,6 +13,7 @@
// limitations under the License.
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { CoreUtilsProvider } from '@providers/utils/utils';
import { CoreSitePluginsProvider } from '../../providers/siteplugins';
import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component';
@@ -32,8 +33,8 @@ export class CoreSitePluginsQuestionBehaviourComponent extends CoreSitePluginsCo
@Output() buttonClicked: EventEmitter; // Should emit an event when a behaviour button is clicked.
@Output() onAbort: EventEmitter; // Should emit an event if the question should be aborted.
- constructor(sitePluginsProvider: CoreSitePluginsProvider) {
- super(sitePluginsProvider);
+ constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) {
+ super(sitePluginsProvider, utils);
}
/**
@@ -41,15 +42,13 @@ export class CoreSitePluginsQuestionBehaviourComponent extends CoreSitePluginsCo
*/
ngOnInit(): void {
// Pass the input and output data to the component.
- this.jsData = {
- question: this.question,
- component: this.component,
- componentId: this.componentId,
- attemptId: this.attemptId,
- offlineEnabled: this.offlineEnabled,
- buttonClicked: this.buttonClicked,
- onAbort: this.onAbort
- };
+ this.jsData.question = this.question;
+ this.jsData.component = this.component;
+ this.jsData.componentId = this.componentId;
+ this.jsData.attemptId = this.attemptId;
+ this.jsData.offlineEnabled = this.offlineEnabled;
+ this.jsData.buttonClicked = this.buttonClicked;
+ this.jsData.onAbort = this.onAbort;
if (this.question) {
this.getHandlerData('qbehaviour_' + this.question.preferredBehaviour);
diff --git a/src/core/siteplugins/components/question/question.ts b/src/core/siteplugins/components/question/question.ts
index f5352adef..012d23af9 100644
--- a/src/core/siteplugins/components/question/question.ts
+++ b/src/core/siteplugins/components/question/question.ts
@@ -13,6 +13,7 @@
// limitations under the License.
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { CoreUtilsProvider } from '@providers/utils/utils';
import { CoreSitePluginsProvider } from '../../providers/siteplugins';
import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component';
@@ -32,8 +33,8 @@ export class CoreSitePluginsQuestionComponent extends CoreSitePluginsCompileInit
@Output() buttonClicked: EventEmitter; // Should emit an event when a behaviour button is clicked.
@Output() onAbort: EventEmitter; // Should emit an event if the question should be aborted.
- constructor(sitePluginsProvider: CoreSitePluginsProvider) {
- super(sitePluginsProvider);
+ constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) {
+ super(sitePluginsProvider, utils);
}
/**
@@ -41,15 +42,13 @@ export class CoreSitePluginsQuestionComponent extends CoreSitePluginsCompileInit
*/
ngOnInit(): void {
// Pass the input and output data to the component.
- this.jsData = {
- question: this.question,
- component: this.component,
- componentId: this.componentId,
- attemptId: this.attemptId,
- offlineEnabled: this.offlineEnabled,
- buttonClicked: this.buttonClicked,
- onAbort: this.onAbort
- };
+ this.jsData.question = this.question;
+ this.jsData.component = this.component;
+ this.jsData.componentId = this.componentId;
+ this.jsData.attemptId = this.attemptId;
+ this.jsData.offlineEnabled = this.offlineEnabled;
+ this.jsData.buttonClicked = this.buttonClicked;
+ this.jsData.onAbort = this.onAbort;
if (this.question) {
this.getHandlerData('qtype_' + this.question.type);
diff --git a/src/core/siteplugins/components/quiz-access-rule/quiz-access-rule.ts b/src/core/siteplugins/components/quiz-access-rule/quiz-access-rule.ts
index 661d5c008..caa3f382c 100644
--- a/src/core/siteplugins/components/quiz-access-rule/quiz-access-rule.ts
+++ b/src/core/siteplugins/components/quiz-access-rule/quiz-access-rule.ts
@@ -13,6 +13,7 @@
// limitations under the License.
import { Component, OnInit, Input } from '@angular/core';
+import { CoreUtilsProvider } from '@providers/utils/utils';
import { CoreSitePluginsProvider } from '../../providers/siteplugins';
import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component';
import { FormGroup } from '@angular/forms';
@@ -32,8 +33,8 @@ export class CoreSitePluginsQuizAccessRuleComponent extends CoreSitePluginsCompi
@Input() siteId: string; // Site ID.
@Input() form: FormGroup; // Form where to add the form control.
- constructor(sitePluginsProvider: CoreSitePluginsProvider) {
- super(sitePluginsProvider);
+ constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) {
+ super(sitePluginsProvider, utils);
}
/**
@@ -41,14 +42,12 @@ export class CoreSitePluginsQuizAccessRuleComponent extends CoreSitePluginsCompi
*/
ngOnInit(): void {
// Pass the input and output data to the component.
- this.jsData = {
- rule: this.rule,
- quiz: this.quiz,
- attempt: this.attempt,
- prefetch: this.prefetch,
- siteId: this.siteId,
- form: this.form
- };
+ this.jsData.rule = this.rule;
+ this.jsData.quiz = this.quiz;
+ this.jsData.attempt = this.attempt;
+ this.jsData.prefetch = this.prefetch;
+ this.jsData.siteId = this.siteId;
+ this.jsData.form = this.form;
if (this.rule) {
this.getHandlerData(this.rule);
diff --git a/src/core/siteplugins/components/user-profile-field/user-profile-field.ts b/src/core/siteplugins/components/user-profile-field/user-profile-field.ts
index 46e4ff7af..5e460eb5a 100644
--- a/src/core/siteplugins/components/user-profile-field/user-profile-field.ts
+++ b/src/core/siteplugins/components/user-profile-field/user-profile-field.ts
@@ -13,6 +13,7 @@
// limitations under the License.
import { Component, OnInit, Input } from '@angular/core';
+import { CoreUtilsProvider } from '@providers/utils/utils';
import { CoreSitePluginsProvider } from '../../providers/siteplugins';
import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component';
import { FormGroup } from '@angular/forms';
@@ -32,8 +33,8 @@ export class CoreSitePluginsUserProfileFieldComponent extends CoreSitePluginsCom
@Input() signup = false; // True if editing the field in signup. Defaults to false.
@Input() registerAuth?: string; // Register auth method. E.g. 'email'.
- constructor(sitePluginsProvider: CoreSitePluginsProvider) {
- super(sitePluginsProvider);
+ constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) {
+ super(sitePluginsProvider, utils);
}
/**
@@ -42,14 +43,12 @@ export class CoreSitePluginsUserProfileFieldComponent extends CoreSitePluginsCom
ngOnInit(): void {
// Pass the input data to the component.
- this.jsData = {
- field: this.field,
- signup: this.signup,
- edit: this.edit,
- disabled: this.disabled,
- form: this.form,
- registerAuth: this.registerAuth
- };
+ this.jsData.field = this.field;
+ this.jsData.signup = this.signup;
+ this.jsData.edit = this.edit;
+ this.jsData.disabled = this.disabled;
+ this.jsData.form = this.form;
+ this.jsData.registerAuth = this.registerAuth;
if (this.field) {
this.getHandlerData('profilefield_' + (this.field.type || this.field.datatype));
diff --git a/src/core/siteplugins/components/workshop-assessment-strategy/workshop-assessment-strategy.ts b/src/core/siteplugins/components/workshop-assessment-strategy/workshop-assessment-strategy.ts
index ef72738d1..3da761007 100644
--- a/src/core/siteplugins/components/workshop-assessment-strategy/workshop-assessment-strategy.ts
+++ b/src/core/siteplugins/components/workshop-assessment-strategy/workshop-assessment-strategy.ts
@@ -13,6 +13,7 @@
// limitations under the License.
import { Component, OnInit, Input } from '@angular/core';
+import { CoreUtilsProvider } from '@providers/utils/utils';
import { CoreSitePluginsProvider } from '../../providers/siteplugins';
import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component';
@@ -31,8 +32,8 @@ export class CoreSitePluginsWorkshopAssessmentStrategyComponent extends CoreSite
@Input() fieldErrors: any;
@Input() strategy: string;
- constructor(sitePluginsProvider: CoreSitePluginsProvider) {
- super(sitePluginsProvider);
+ constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) {
+ super(sitePluginsProvider, utils);
}
/**
@@ -40,14 +41,12 @@ export class CoreSitePluginsWorkshopAssessmentStrategyComponent extends CoreSite
*/
ngOnInit(): void {
// Pass the input and output data to the component.
- this.jsData = {
- workshopId: this.workshopId,
- assessment: this.assessment,
- edit: this.edit,
- selectedValues: this.selectedValues,
- fieldErrors: this.fieldErrors,
- strategy: this.strategy
- };
+ this.jsData.workshopId = this.workshopId;
+ this.jsData.assessment = this.assessment;
+ this.jsData.edit = this.edit;
+ this.jsData.selectedValues = this.selectedValues;
+ this.jsData.fieldErrors = this.fieldErrors;
+ this.jsData.strategy = this.strategy;
this.getHandlerData('workshopform_' + this.strategy);
}
diff --git a/src/core/siteplugins/directives/call-ws-new-content.ts b/src/core/siteplugins/directives/call-ws-new-content.ts
index 9117b831e..08b4a213e 100644
--- a/src/core/siteplugins/directives/call-ws-new-content.ts
+++ b/src/core/siteplugins/directives/call-ws-new-content.ts
@@ -59,6 +59,8 @@ export class CoreSitePluginsCallWSNewContentDirective extends CoreSitePluginsCal
@Input() title: string; // The title to display with the new content. Only if samePage=false.
@Input() samePage: boolean | string; // Whether to display the content in same page or open a new one. Defaults to new page.
@Input() useOtherData: any[]; // Whether to include other data in the args. @see CoreSitePluginsProvider.loadOtherDataInArgs.
+ @Input() jsData: any; // JS variables to pass to the new page so they can be used in the template or JS.
+ // If true is supplied instead of an object, all initial variables from current page will be copied.
constructor(element: ElementRef, translate: TranslateService, domUtils: CoreDomUtilsProvider,
sitePluginsProvider: CoreSitePluginsProvider, @Optional() parentContent: CoreSitePluginsPluginContentComponent,
@@ -84,15 +86,21 @@ export class CoreSitePluginsCallWSNewContentDirective extends CoreSitePluginsCal
if (this.utils.isTrueOrOne(this.samePage)) {
// Update the parent content (if it exists).
if (this.parentContent) {
- this.parentContent.updateContent(args, this.component, this.method);
+ this.parentContent.updateContent(args, this.component, this.method, this.jsData);
}
} else {
+ let jsData = this.jsData;
+ if (jsData === true && this.parentContent) {
+ jsData = this.parentContent.data;
+ }
+
this.navCtrl.push('CoreSitePluginsPluginPage', {
title: this.title,
component: this.component || (this.parentContent && this.parentContent.component),
method: this.method || (this.parentContent && this.parentContent.method),
args: args,
- initResult: this.parentContent && this.parentContent.initResult
+ initResult: this.parentContent && this.parentContent.initResult,
+ jsData: jsData
});
}
}
diff --git a/src/core/siteplugins/directives/new-content.ts b/src/core/siteplugins/directives/new-content.ts
index edb7d5f3e..3bbd9504d 100644
--- a/src/core/siteplugins/directives/new-content.ts
+++ b/src/core/siteplugins/directives/new-content.ts
@@ -51,6 +51,8 @@ export class CoreSitePluginsNewContentDirective implements OnInit {
@Input() useOtherData: any[]; // Whether to include other data in the args. @see CoreSitePluginsProvider.loadOtherDataInArgs.
@Input() form: string; // ID or name to identify a form. The form will be obtained from document.forms.
// If supplied and form is found, the form data will be retrieved and sent to the new content.
+ @Input() jsData: any; // JS variables to pass to the new page so they can be used in the template or JS.
+ // If true is supplied instead of an object, all initial variables from current page will be copied.
protected element: HTMLElement;
@@ -81,15 +83,21 @@ export class CoreSitePluginsNewContentDirective implements OnInit {
if (this.utils.isTrueOrOne(this.samePage)) {
// Update the parent content (if it exists).
if (this.parentContent) {
- this.parentContent.updateContent(args, this.component, this.method);
+ this.parentContent.updateContent(args, this.component, this.method, this.jsData);
}
} else {
+ let jsData = this.jsData;
+ if (jsData === true) {
+ jsData = this.parentContent && this.parentContent.data || {};
+ }
+
this.navCtrl.push('CoreSitePluginsPluginPage', {
title: this.title,
component: this.component || (this.parentContent && this.parentContent.component),
method: this.method || (this.parentContent && this.parentContent.method),
args: args,
- initResult: this.parentContent && this.parentContent.initResult
+ initResult: this.parentContent && this.parentContent.initResult,
+ jsData: jsData
});
}
});
diff --git a/src/core/siteplugins/pages/plugin-page/plugin-page.html b/src/core/siteplugins/pages/plugin-page/plugin-page.html
index f93ce1351..6d2933b40 100644
--- a/src/core/siteplugins/pages/plugin-page/plugin-page.html
+++ b/src/core/siteplugins/pages/plugin-page/plugin-page.html
@@ -11,5 +11,5 @@
-
+
diff --git a/src/core/siteplugins/pages/plugin-page/plugin-page.ts b/src/core/siteplugins/pages/plugin-page/plugin-page.ts
index 32f5db12e..73e66b050 100644
--- a/src/core/siteplugins/pages/plugin-page/plugin-page.ts
+++ b/src/core/siteplugins/pages/plugin-page/plugin-page.ts
@@ -33,6 +33,7 @@ export class CoreSitePluginsPluginPage {
method: string;
args: any;
initResult: any;
+ jsData: any; // JS variables to pass to the plugin so they can be used in the template or JS.
constructor(params: NavParams) {
this.title = params.get('title');
@@ -40,6 +41,7 @@ export class CoreSitePluginsPluginPage {
this.method = params.get('method');
this.args = params.get('args');
this.initResult = params.get('initResult');
+ this.jsData = params.get('jsData');
}
/**
diff --git a/src/core/siteplugins/providers/helper.ts b/src/core/siteplugins/providers/helper.ts
index 7aa65b72d..26124d2b6 100644
--- a/src/core/siteplugins/providers/helper.ts
+++ b/src/core/siteplugins/providers/helper.ts
@@ -547,6 +547,7 @@ export class CoreSitePluginsHelperProvider {
// Store in handlerSchema some data required by the component.
handlerSchema.methodTemplates = result.templates;
handlerSchema.methodJSResult = result.jsResult;
+ handlerSchema.methodOtherdata = result.otherdata;
if (result && result.jsResult) {
// Override default handler functions with the result of the method JS.