corporate-frontend-mithril
Version:
Corporate frontend MithrilJS modules
110 lines (89 loc) • 2.43 kB
JavaScript
const strings = require('../../lib/helpers/strings');
const validate = require('../../lib/validate');
module.exports = function() {
let _id = `text-input-${strings.random()}`;
let _name = '';
let _label = '';
let _style = '';
let _validMsg = '';
let _type = 'text';
let _presets = '';
let _required = false;
let _vFn = null;
let _isValidFn = null;
let _validationOptions = {};
return {
get id() {
return _id;
},
set id(v) {
_id = v ? v : _id;
},
get name() {
return _name;
},
set name(v) {
_name = v;
},
get label() {
return _label;
},
set label(v) {
_label = v;
},
get style() {
return _style ? _style : '';
},
set style(v) {
_style = v;
},
set type(v='text') {
_type = v;
},
set required(v) {
_required = v ? true : false;
_validationOptions.required = _required;
},
set presets(v) {
_presets = v;
_validationOptions.presets = v;
},
set vFn(v) {
_vFn = v;
},
set isValidFn(v) {
_isValidFn = v;
},
get attrs() {
return Object.assign(
{'id' : _id},
{'placeholder' : _label},
_name && {'name': _name},
{'data-type' : _type},
{'data-required' : _required},
_presets && {'data-presets' : _presets},
{ onkeyup: (e)=> {
if(_vFn) {
_vFn({v:e.target.value});
}
if(_isValidFn) {
_validMsg = validate.exec({
value: e.target.value,
options: _validationOptions,
});
_isValidFn(!_validMsg);
}
}},
);
},
get tooltipAttrs() {
return {
'data-balloon': _validMsg || '',
'data-balloon-pos': 'up',
};
},
get tooltipState() {
return _validMsg ? '.b-tooltip--force-show' : '';
},
};
};