1
1
<template >
2
- <div v-if =" isExternalLink" >
3
- <a :href =" url" :class =" classList" >
2
+ <div v-if =" isDisabled" >
3
+ <a href :class =" classList" v-bind =" attributes" tabindex =" -1" >
4
+ <i :class =" classIcon" ></i > {{name}}
5
+ <b-badge v-if =" badge && badge.text" :variant =" badge.variant" >{{badge.text}}</b-badge >
6
+ </a >
7
+ </div >
8
+ <div v-else-if =" isExternalLink" >
9
+ <a :href =" url" :class =" classList" v-bind =" attributes" >
4
10
<i :class =" classIcon" ></i > {{name}}
5
11
<b-badge v-if =" badge && badge.text" :variant =" badge.variant" >{{badge.text}}</b-badge >
6
12
</a >
7
13
</div >
8
14
<div v-else >
9
- <router-link :to =" url" :class =" classList" >
15
+ <router-link :to =" url" :class =" classList" v-bind = " attributes " >
10
16
<i :class =" classIcon" ></i > {{name}}
11
17
<b-badge v-if =" badge && badge.text" :variant =" badge.variant" >{{badge.text}}</b-badge >
12
18
</router-link >
@@ -38,15 +44,21 @@ export default {
38
44
default: ' '
39
45
},
40
46
classes: {
41
- type: String ,
47
+ type: [ String , Array , Object ] ,
42
48
default: ' '
49
+ },
50
+ attributes: {
51
+ type: Object ,
52
+ default : () => { return Object .create (null ) }
43
53
}
44
54
},
45
55
computed: {
46
56
classList () {
47
57
return [
48
58
' nav-link' ,
49
59
this .linkVariant ,
60
+ ... this .disabledClasses ,
61
+ ... this .attrClasses ,
50
62
... this .itemClasses
51
63
]
52
64
},
@@ -60,14 +72,24 @@ export default {
60
72
return this .variant ? ` nav-link-${ this .variant } ` : ' '
61
73
},
62
74
itemClasses () {
63
- return this .classes ? this .classes .split (' ' ) : []
75
+ return this .getClassArray (this .classes )
76
+ },
77
+ attrClasses () {
78
+ return this .getClassArray (this .attributes .class )
79
+ },
80
+ disabledClasses () {
81
+ return this .isDisabled ? ' disabled btn-link' .split (' ' ) : []
82
+ },
83
+ isDisabled () {
84
+ return Boolean (this .attributes .disabled )
64
85
},
65
86
isExternalLink () {
66
- if (this .url .substring (0 , 4 ) === ' http' ) {
67
- return true
68
- } else {
69
- return false
70
- }
87
+ return Boolean (this .url .substring (0 , 4 ) === ' http' )
88
+ }
89
+ },
90
+ methods: {
91
+ getClassArray (classes ) {
92
+ return ! classes ? [] : typeof classes === ' string' || classes instanceof String ? classes .split (' ' ) : Array .isArray (classes) ? classes : Object .keys (classes).filter (i => classes[i])
71
93
}
72
94
}
73
95
}
0 commit comments