vue-material/src/components/mdInputContainer/mdTextarea.vue

104 lines
2.5 KiB
Vue
Raw Normal View History

2016-08-01 05:45:40 +00:00
<template>
<textarea
class="md-input"
:disabled="disabled"
@invalid="onInvalid"
@valid="onValid"
@focus="onFocus"
@blur="onBlur"
@input="onInput"></textarea>
</template>
<script>
import autosize from 'autosize';
let validClass = 'md-input-valid';
let invalidClass = 'md-input-invalid';
let disabledClass = 'md-input-disabled';
let focusedClass = 'md-input-focused';
let hasValueClass = 'md-has-value';
let manageDisabledClass = (state, scope) => {
if (state) {
scope.add(disabledClass);
} else {
scope.remove(disabledClass);
}
};
let manageMaxlength = (length, parent) => {
parent.enableCounter = length > 0;
parent.counterLength = length;
};
2016-08-01 05:45:40 +00:00
let manageHasValueClass = function(value, scope) {
if (value.length > 0) {
scope.add(hasValueClass);
} else {
scope.remove(hasValueClass);
}
};
export default {
props: {
type: String,
disabled: Boolean,
maxlength: String
2016-08-01 05:45:40 +00:00
},
data() {
return {
parentClasses: this.$parent.$el.classList
};
},
watch: {
disabled(disabled) {
manageDisabledClass(disabled, this.parentClasses);
},
maxlength(maxlength) {
manageMaxlength(maxlength, this.$parent);
2016-08-01 05:45:40 +00:00
}
},
methods: {
onInvalid() {
this.parentClasses.remove(validClass);
this.parentClasses.add(invalidClass);
},
onValid() {
this.parentClasses.remove(invalidClass);
this.parentClasses.add(validClass);
},
onFocus() {
this.parentClasses.add(focusedClass);
},
onBlur() {
this.parentClasses.remove(focusedClass);
manageHasValueClass(this.$el.value, this.parentClasses);
},
onInput() {
manageHasValueClass(this.$el.value, this.parentClasses);
this.$parent.inputLength = this.$el.value.length;
2016-08-01 05:45:40 +00:00
}
},
ready() {
if (!this.$parent.$el.classList.contains('md-input-container')) {
this.$destroy();
throw new Error('You should wrap the md-textarea in a md-input-container');
}
2016-08-01 05:45:40 +00:00
manageDisabledClass(this.disabled, this.parentClasses);
manageHasValueClass(this.$el.value, this.parentClasses);
manageMaxlength(this.maxlength, this.$parent);
2016-08-01 05:45:40 +00:00
if (!this.$el.getAttribute('rows')) {
this.$el.setAttribute('rows', '1');
}
autosize(this.$el);
},
beforeDestroy() {
autosize.destroy(this.$el);
}
};
</script>