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

70 lines
1.7 KiB
JavaScript
Raw Normal View History

2017-09-12 10:45:29 +00:00
import { module } from '../module';
import Component from '../lib/component';
2017-09-12 09:44:56 +00:00
// import * as resolveFactory from '../lib/resolveDefaultComponents';
// import * as normalizerFactory from '../lib/inputAttrsNormalizer';
import './style.scss';
2017-09-12 09:44:56 +00:00
// import './textfield.mdl';
2017-09-12 10:45:29 +00:00
export default class TextfieldController extends Component {
constructor($element, $scope, $attrs) {
2017-09-12 10:45:29 +00:00
super($element);
2017-09-12 09:44:56 +00:00
this.$scope = $scope;
this.$attrs = $attrs;
this.$element = $element;
2017-09-12 10:45:29 +00:00
this._value = null;
this.type = this.$attrs.type || 'text';
this.rule = this.$attrs.rule || null;
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-12 09:44:56 +00:00
onClearClick() {
this.input.value = null;
this.checkValue();
let event = this.document.createEvent('HTMLEvents');
event.initEvent('change', false, true);
this.input.dispatchEvent(event);
}
2017-09-12 10:45:29 +00:00
checkValue() {
this.showClear(this.input.value);
}
2017-09-12 10:45:29 +00:00
showClear(show) {
2017-09-12 10:45:29 +00:00
show = (show && document.activeElement === this.input);
2017-09-12 09:44:56 +00:00
let clearButton = this.$element.querySelector('button');
clearButton.style.visibility = show ? 'visible' : 'hidden';
}
2017-09-12 10:45:29 +00:00
2017-05-18 15:35:07 +00:00
select() {
this.input.select();
}
2017-09-12 10:45:29 +00:00
2017-05-18 15:35:07 +00:00
focus() {
this.input.focus();
}
}
2017-09-12 09:44:56 +00:00
TextfieldController.$inject = ['$element', '$scope', '$attrs'];
2017-09-12 09:44:56 +00:00
module.component('vnTextfield', {
template: require('./textfield.html'),
2017-09-12 10:45:29 +00:00
controller: TextfieldController,
bindings: {
value: '=model',
label: '@',
name: '@',
disable: '<'
2017-09-12 10:45:29 +00:00
}
});