salix/client/core/src/textfield/textfield.js

64 lines
1.7 KiB
JavaScript
Raw Normal View History

2017-09-21 06:48:25 +00:00
import {module} from '../module';
2017-11-16 13:30:17 +00:00
import Input from '../lib/input';
import './style.scss';
2017-11-16 13:30:17 +00:00
export default class Textfield extends Input {
2017-09-27 10:27:18 +00:00
constructor($element, $scope, $attrs, $timeout, normalizer) {
2017-09-12 10:45:29 +00:00
super($element);
2017-09-13 07:45:42 +00:00
normalizer.normalize($attrs);
2017-09-12 09:44:56 +00:00
this.$scope = $scope;
this.$attrs = $attrs;
this.$element = $element;
2017-09-27 10:27:18 +00:00
this.$timeout = $timeout;
2017-09-12 10:45:29 +00:00
this._value = null;
2017-11-16 13:30:17 +00:00
this.type = $attrs.type || 'text';
2017-09-13 07:45:42 +00:00
this.showActions = false;
this.input = $element[0].querySelector('input');
2017-11-16 13:30:17 +00:00
this.hasInfo = Boolean($attrs.info);
this.info = $attrs.info || null;
2017-09-27 10:27:18 +00:00
this.hasFocus = false;
this.hasMouseIn = false;
componentHandler.upgradeElement($element[0].firstChild);
2017-09-12 10:45:29 +00:00
}
get value() {
return this._value;
}
set value(value) {
this._value = (value === undefined || value === '') ? null : value;
2017-09-13 07:45:42 +00:00
this.input.value = this._value;
2017-09-13 08:59:34 +00:00
this.hasValue = Boolean(this._value);
2017-09-13 07:45:42 +00:00
this.mdlUpdate();
}
set tabIndex(value) {
this.input.tabIndex = value;
}
2017-09-13 07:45:42 +00:00
mdlUpdate() {
let mdlField = this.$element[0].firstChild.MaterialTextfield;
if (mdlField)
mdlField.updateClasses_();
2017-05-18 15:35:07 +00:00
}
2017-09-13 07:45:42 +00:00
clear() {
this.value = null;
2017-05-18 15:35:07 +00:00
this.input.focus();
}
}
2017-11-16 13:30:17 +00:00
Textfield.$inject = ['$element', '$scope', '$attrs', '$timeout', 'vnInputAttrsNormalizer'];
2017-09-12 09:44:56 +00:00
module.component('vnTextfield', {
template: require('./textfield.html'),
2017-11-16 13:30:17 +00:00
controller: Textfield,
2017-09-12 10:45:29 +00:00
bindings: {
value: '=model',
2017-09-13 07:45:42 +00:00
label: '@?',
name: '@?',
disabled: '<?',
readonly: '<?',
2017-09-13 07:45:42 +00:00
rule: '@?',
type: '@?',
tabIndex: '@?'
2017-09-12 10:45:29 +00:00
}
2017-09-13 07:45:42 +00:00
});