corporate-frontend-mithril
Version:
Corporate frontend MithrilJS modules
94 lines (76 loc) • 2.06 kB
JavaScript
const strings = require('../../lib/helpers/strings');
const validate = require('../../lib/validate');
module.exports = function() {
let _id = `form-checkbox-${strings.random()}`;
let _name = '';
let _label = '';
let _style = '';
let _checked = false;
let _required = false;
let _vFn = null;
let _isValidFn = null;
let _validationOptions = {};
return {
get id() {
return _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;
},
get checked() {
return _checked;
},
/**
* set checked will update the checkbox checked state, on or off
*/
set checked(v) {
_checked = v ? true : false;
},
set required(v) {
_required = v ? true : false;
_validationOptions.required = _required;
},
set vFn(v) {
_vFn = v;
},
set isValidFn(v) {
_isValidFn = v;
},
get attrs() {
return Object.assign(
{'id' : _id},
_name && {'name': _name},
{'type' : 'checkbox'},
{'data-required' : _required},
{'checked' : _checked},
{ onclick: (e)=> {
_checked = !_checked;
if(_vFn) {
_vFn({v:e.target.checked});
}
if(_isValidFn) {
_isValidFn(!validate.exec({
value: e.target.checked,
options: _validationOptions,
}));
}
}},
);
},
};
};