92 lines
2.0 KiB
JavaScript
92 lines
2.0 KiB
JavaScript
import { createNamespace, isDef } from '../utils';
|
|
import Info from '../info';
|
|
|
|
var _createNamespace = createNamespace('tab'),
|
|
createComponent = _createNamespace[0],
|
|
bem = _createNamespace[1];
|
|
|
|
export default createComponent({
|
|
props: {
|
|
dot: Boolean,
|
|
type: String,
|
|
info: [Number, String],
|
|
color: String,
|
|
title: String,
|
|
isActive: Boolean,
|
|
disabled: Boolean,
|
|
scrollable: Boolean,
|
|
activeColor: String,
|
|
inactiveColor: String
|
|
},
|
|
computed: {
|
|
style: function style() {
|
|
var style = {};
|
|
var color = this.color,
|
|
isActive = this.isActive;
|
|
var isCard = this.type === 'card'; // card theme color
|
|
|
|
if (color && isCard) {
|
|
style.borderColor = color;
|
|
|
|
if (!this.disabled) {
|
|
if (isActive) {
|
|
style.backgroundColor = color;
|
|
} else {
|
|
style.color = color;
|
|
}
|
|
}
|
|
}
|
|
|
|
var titleColor = isActive ? this.activeColor : this.inactiveColor;
|
|
|
|
if (titleColor) {
|
|
style.color = titleColor;
|
|
}
|
|
|
|
return style;
|
|
}
|
|
},
|
|
methods: {
|
|
onClick: function onClick() {
|
|
this.$emit('click');
|
|
},
|
|
genText: function genText() {
|
|
var h = this.$createElement;
|
|
var Text = h("span", {
|
|
"class": bem('text', {
|
|
ellipsis: !this.scrollable
|
|
})
|
|
}, [this.slots() || this.title]);
|
|
|
|
if (this.dot || isDef(this.info) && this.info !== '') {
|
|
return h("span", {
|
|
"class": bem('text-wrapper')
|
|
}, [Text, h(Info, {
|
|
"attrs": {
|
|
"dot": this.dot,
|
|
"info": this.info
|
|
}
|
|
})]);
|
|
}
|
|
|
|
return Text;
|
|
}
|
|
},
|
|
render: function render() {
|
|
var h = arguments[0];
|
|
return h("div", {
|
|
"attrs": {
|
|
"role": "tab",
|
|
"aria-selected": this.isActive
|
|
},
|
|
"class": [bem({
|
|
active: this.isActive,
|
|
disabled: this.disabled
|
|
})],
|
|
"style": this.style,
|
|
"on": {
|
|
"click": this.onClick
|
|
}
|
|
}, [this.genText()]);
|
|
}
|
|
}); |