hedera-web/js/htk/field.js

135 lines
2.5 KiB
JavaScript

var Widget = require('./widget');
module.exports = new Class({
Extends: Widget
,Tag: 'htk-field'
,Child: 'param'
,Properties:
{
value: {
type: String
,set: function(x) {
if (Vn.Value.compare(x, this._value))
return;
if (x instanceof Date)
x = x.clone();
this.valueChanged(x);
this.putValue(x);
}
,get: function(x) {
return this._value;
}
},
param: {
type: Vn.Param
,set: function(x) {
this.link({_param: x}, {'changed': this.onParamChange});
this.onParamChange();
}
,get: function() {
return this._param;
}
},
editable: {
type: Boolean
,set: function(x) {
if (x != this._editable) {
this._editable = x;
this.setEditable(x);
}
}
,get: function() {
return this._editable;
}
},
form: {
type: Db.Iterator
,set: function(x) {
this._form = x;
this.bindToForm();
}
,get: function() {
return this._form;
}
},
column: {
type: String
,set: function(x) {
this._paramName = x;
this.bindToForm();
}
,get: function() {
return this._paramName;
}
},
conditionalFunc: {
type: Function
,value: null
}
}
,_value: undefined
,_param: null
,_editable: true
,_blockParamChange: false
,_blockValueChange: false
,onParamChange: function() {
if (!this._blockValueChange) {
this._blockParamChange = true;
this.value = this._param.value;
this._blockParamChange = false;
}
}
,bindToForm: function() {
if (this._form && this._paramName)
this.param = new Db.Param
({
form: this._form
,column: this._paramName
});
}
/**
* Virtual method that must be implemented by class childs to set the entry
* editable.
*
* @param {Boolean} editable Whether the user is allowed to edit the entry
*/
,setEditable: function(editable) {}
/**
* Virtual method that must be implemented by class childs to put the value
* on the associated entry.
*
* @param {Object} value The new value for the entry
*/
,putValue: function(value) {}
/**
* Protected method that should be called from class childs when the value
* on the associated entry changes.
*
* @param {Object} value The new entry value
*/
,valueChanged: function(value) {
this._value = value;
if (this.conditionalFunc)
this.conditionalFunc(this, value);
if (this._param && !this._blockParamChange) {
this._blockValueChange = true;
this._param.value = value;
this._blockValueChange = false;
}
this.signalEmit('changed');
}
});