11<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" >
410 <i :class =" classIcon" ></i > {{name}}
511 <b-badge v-if =" badge && badge.text" :variant =" badge.variant" >{{badge.text}}</b-badge >
612 </a >
713 </div >
814 <div v-else >
9- <router-link :to =" url" :class =" classList" >
15+ <router-link :to =" url" :class =" classList" v-bind = " attributes " >
1016 <i :class =" classIcon" ></i > {{name}}
1117 <b-badge v-if =" badge && badge.text" :variant =" badge.variant" >{{badge.text}}</b-badge >
1218 </router-link >
@@ -38,15 +44,21 @@ export default {
3844 default: ' '
3945 },
4046 classes: {
41- type: String ,
47+ type: [ String , Array , Object ] ,
4248 default: ' '
49+ },
50+ attributes: {
51+ type: Object ,
52+ default : ()=> {return Object .create (null ) }
4353 }
4454 },
4555 computed: {
4656classList () {
4757return [
4858' nav-link' ,
4959this .linkVariant ,
60+ ... this .disabledClasses ,
61+ ... this .attrClasses ,
5062... this .itemClasses
5163 ]
5264 },
@@ -60,14 +72,24 @@ export default {
6072return this .variant ? ` nav-link-${ this .variant } ` : ' '
6173 },
6274itemClasses () {
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 )
6485 },
6586isExternalLink () {
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' || classesinstanceof String ? classes .split (' ' ): Array .isArray (classes)? classes: Object .keys (classes).filter (i => classes[i])
7193 }
7294 }
7395}