hedera-web/js/hedera/form.js

110 lines
1.9 KiB
JavaScript

module.exports = new Class({
Extends: Vn.Object
,isOpen: false
,uiLoaded: false
,initialize: function(gui, formInfo) {
this.gui = gui;
this.conn = gui.conn;
this.hash = gui.hash;
this.formInfo = formInfo;
}
,loadUi: function() {
if (!this.isOpen)
return;
const conn = this.conn;
const hash = this.hash;
const builder = new Vn.Builder();
builder.compileFile('forms/'+ this.formInfo.path +'/ui.xml');
const scope = this.builder = builder.load(null, this);
this.$ = scope.$;
scope.link(null, {conn, hash});
this.node = scope.$.form;
const paramsLot = this.$.params;
if (paramsLot) {
paramsLot.source = hash;
this.params = paramsLot;
}
function setConnection(tagName) {
const objects = scope.getByTagName(tagName);
for (let i = 0; i < objects.length; i++)
objects[i].conn = conn;
}
const tags = ['db-model', 'db-query', 'db-lot'];
for (let i = 0; i < tags.length; i++)
setConnection(tags[i]);
if (this.node) {
this.gui.setForm(this.node);
this.gui.setTitle(scope.$.title);
this.gui.setActions(scope.$.actions);
this.activate();
}
this.uiLoaded = true;
}
,unloadUi: function() {
if (!this.uiLoaded)
return;
if (this.node) {
this.deactivate();
this.gui.setTitle(null);
this.gui.setActions(null);
Vn.Node.remove(this.node);
this.deactivate();
this.node = null;
}
if (this.builder) {
this.builder.unref();
this.builder = null;
}
}
/**
* Called when the form is opened.
*/
,open: function() {
this.close();
this.isOpen = true;
this.loadUi();
}
/**
* Called when the form is closed.
*/
,close: function() {
if (!this.isOpen)
return;
this.isOpen = false;
this.unloadUi();
}
/**
* Called when the form is activated.
*/
,activate: function() {}
/**
* Called when the form is deactivated.
*/
,deactivate: function() {}
,_destroy: function() {
this.close();
this.parent();
}
});