1
0
mirror of https://github.com/beestat/app.git synced 2025-05-24 02:14:03 -04:00
beestat/js/component/input.js
2022-09-28 21:19:21 -04:00

127 lines
2.8 KiB
JavaScript

/**
* Input parent class.
*/
beestat.component.input = function() {
this.uuid_ = window.crypto.randomUUID();
beestat.component.apply(this, arguments);
};
beestat.extend(beestat.component.input, beestat.component);
/**
* Focus an input.
*
* @return {beestat.component.input} This.
*/
beestat.component.input.prototype.focus = function() {
this.input_.focus();
this.input_.setSelectionRange(0, this.input_.value.length);
return this;
};
/**
* Enable or disable an input.
*
* @param {boolean} enabled Whether or not the input should be enabled.
*
* @return {beestat.component.input} This.
*/
beestat.component.input.prototype.set_enabled = function(enabled) {
this.input_.disabled = !enabled;
if (this.rendered_ === true) {
this.rerender();
}
return this;
};
/**
* Generic setter that sets a key to a value, rerenders if necessary.
*
* @param {string} key
* @param {string} value
*
* @return {beestat.component.input} This.
*/
beestat.component.input.prototype.set_ = function(key, value) {
this[key + '_'] = value;
if (this.rendered_ === true) {
this.rerender();
}
return this;
};
/**
* Set the requirements for this input to be valid.
*
* @param {object} requirements
*
* @return {beestat.component.input.text} This.
*/
beestat.component.input.prototype.set_requirements = function(requirements) {
this.requirements_ = requirements;
return this;
};
/**
* Check whether or not this input meets the requirements.
*
* @return {boolean} Whether or not this input meets the requirements.
*/
beestat.component.input.prototype.meets_requirements = function() {
if (this.requirements_ !== undefined) {
switch (this.requirements_.type) {
case 'integer':
this.requirements_.regexp = /^-?\d+$/;
break;
case 'decimal':
this.requirements_.regexp = /^-?\d*(?:\.\d+)?$/;
break;
}
if (
this.requirements_.required === true &&
this.get_value() === undefined
) {
return false;
}
if (
this.requirements_.min_value !== undefined &&
this.get_value() < this.requirements_.min_value
) {
return false;
}
if (
this.requirements_.max_value !== undefined &&
this.get_value() > this.requirements_.max_value
) {
return false;
}
if (
this.get_value() !== undefined &&
this.requirements_.regexp !== undefined &&
this.requirements_.regexp.test(this.get_value()) === false
) {
return false;
}
if (
this.get_value() !== undefined &&
this.requirements_.type === 'date' &&
moment(this.get_value()).isValid() === false
) {
return false;
}
}
return true;
};