1
- <template >
2
- <ul :class =" ['pagination',btnSize,alignment]"
3
- :aria-disabled =" disabled ? 'true' : 'false'"
4
- :aria-label =" ariaLabel ? ariaLabel : null"
5
- role =" menubar"
6
- @keydown.left.prevent =" focusPrev"
7
- @keydown.right.prevent =" focusNext"
8
- @keydown.shift.left.prevent =" focusFirst"
9
- @keydown.shift.right.prevent =" focusLast"
10
- >
11
-
12
- <!-- Goto First Page button -->
13
- <template v-if =" ! hideGotoEndButtons " >
14
- <li v-if =" isActive(1) || disabled" class =" page-item disabled" role =" none presentation" aria-hidden =" true" >
15
- <span class =" page-link" v-html =" firstText" ></span >
16
- </li >
17
- <li v-else class =" page-item" role =" none presentation" >
18
- <a class =" page-link"
19
- :aria-label =" labelFirstPage"
20
- :aria-controls =" ariaControls || null"
21
- role =" menuitem"
22
- href =" #"
23
- tabindex =" -1"
24
- @click.prevent =" setPage($event, 1)"
25
- @keydown.enter.prevent =" setPage($event, 1)"
26
- @keydown.space.prevent =" setPage($event, 1)"
27
- ><span aria-hidden =" true" v-html =" firstText" ></span ></a >
28
- </li >
29
- </template >
30
-
31
- <!-- Goto Previous page button -->
32
- <li v-if =" isActive(1) || disabled" class =" page-item disabled" role =" none presentation" aria-hidden =" true" >
33
- <span class =" page-link" v-html =" prevText" ></span >
34
- </li >
35
- <li v-else class =" page-item" role =" none presentation" >
36
- <a class =" page-link"
37
- :aria-label =" labelPrevPage"
38
- :aria-controls =" ariaControls || null"
39
- role =" menuitem"
40
- href =" #"
41
- tabindex =" -1"
42
- @click.prevent =" setPage($event, currentPage - 1)"
43
- @keydown.enter.prevent =" setPage($event, currentPage - 1)"
44
- @keydown.space.prevent =" setPage($event, currentPage - 1)"
45
- ><span aria-hidden =" true" v-html =" prevText" ></span ></a >
46
- </li >
47
-
48
- <!-- First Ellipsis Bookend -->
49
- <li v-if =" showFirstDots" class =" page-item disabled d-none d-sm-flex" role =" separator" >
50
- <span class =" page-link" v-html =" ellipsisText" ></span >
51
- </li >
52
-
53
- <!-- Pages links -->
54
- <li v-for =" page in pageList" role =" none presentation" :class =" pageItemClasses(page)" :key =" page.number" >
55
- <a :class =" pageLinkClasses(page)"
56
- :disabled =" disabled"
57
- :aria-disabled =" disabled ? 'true' : null"
58
- :aria-label =" labelPage + ' ' + page.number"
59
- :aria-checked =" isActive(page.number) ? 'true' : 'false'"
60
- :aria-controls =" ariaControls || null"
61
- :aria-posinset =" page.number"
62
- :aria-setsize =" numberOfPages"
63
- role =" menuitemradio"
64
- href =" #"
65
- :tabindex =" isActive(page.number) ? '0' : '-1'"
66
- @click.prevent =" setPage($event, page.number)"
67
- @keydown.enter.prevent =" setPage($event, page.number)"
68
- @keydown.space.prevent =" setPage($event, page.number)"
69
- >{{ page.number }}</a >
70
- </li >
71
-
72
- <!-- Last Ellipsis Bookend -->
73
- <li v-if =" showLastDots" class =" page-item disabled d-none d-sm-flex" role =" separator" >
74
- <span class =" page-link" v-html =" ellipsisText" ></span >
75
- </li >
76
-
77
- <!-- Goto Next page -->
78
- <li v-if =" isActive(numberOfPages) || disabled" class =" page-item disabled" role =" none presentation" aria-hidden =" true" >
79
- <span class =" page-link" v-html =" nextText" ></span >
80
- </li >
81
- <li v-else class =" page-item" role =" none presentation" >
82
- <a class =" page-link"
83
- :aria-label =" labelNextPage"
84
- :aria-controls =" ariaControls || null"
85
- role =" menuitem"
86
- href =" #"
87
- tabindex =" -1"
88
- @click.prevent =" setPage($event, currentPage + 1)"
89
- @keydown.enter.prevent =" setPage($event, currentPage + 1)"
90
- @keydown.space.prevent =" setPage($event, currentPage + 1)"
91
- ><span aria-hidden =" true" v-html =" nextText" ></span ></a >
92
- </li >
93
-
94
- <!-- Goto Last page -->
95
- <template v-if =" ! hideGotoEndButtons " >
96
- <li v-if =" isActive(numberOfPages) || disabled"
97
- class =" page-item disabled"
98
- role =" none presentation"
99
- aria-hidden =" true"
100
- >
101
- <span class =" page-link" v-html =" lastText" ></span >
102
- </li >
103
- <li v-else class =" page-item" role =" none presentation" >
104
- <a class =" page-link"
105
- :aria-label =" labelLastPage"
106
- :aria-controls =" ariaControls || null"
107
- role =" menuitem"
108
- href =" #"
109
- tabindex =" -1"
110
- @click.prevent =" setPage($event, numberOfPages)"
111
- @keydown.enter.prevent =" setPage($event, numberOfPages)"
112
- @keydown.space.prevent =" setPage($event, numberOfPages)"
113
- ><span aria-hidden =" true" v-html =" lastText" ></span ></a >
114
- </li >
115
- </template >
116
- </ul >
117
- </template >
118
-
119
- <style scoped>
120
- .page-item {
1
+ <style >
2
+ .b-pagination .page-item {
121
3
-webkit-user-select : none ;
122
4
-moz-user-select : none ;
123
5
-ms-user-select : none ;
124
6
user-select : none ;
125
7
}
126
- .page-item.disabled {
8
+ .b-pagination . page-item.disabled {
127
9
cursor : not-allowed ;
128
10
opacity : .65 ;
129
11
}
130
- .page-item .page-link.active :focus {
12
+ .b-pagination . page-item .page-link.active :focus {
131
13
box-shadow : 0 0 0 3px rgba (0 ,123 ,255 ,.5 );
132
14
z-index : 1 ;
133
15
}
136
18
<script >
137
19
import { paginationMixin } from ' ../../mixins' ;
138
20
import { isVisible } from ' ../../utils/dom' ;
21
+ import { KeyCodes } from ' ../../utils' ;
139
22
140
23
const props = {
141
24
perPage: {
@@ -152,6 +35,7 @@ const props = {
152
35
}
153
36
};
154
37
38
+ // Our render function is brought in from the pagination mixin
155
39
export default {
156
40
mixins: [ paginationMixin ],
157
41
props,
@@ -162,28 +46,31 @@ export default {
162
46
}
163
47
},
164
48
methods: {
165
- setPage (e , num ) {
166
- if (this .disabled ) {
167
- e .preventDefault ();
168
- e .stopPropagation ();
169
- return ;
170
- }
49
+ // These methods are used by the render function
50
+ onClick (num , evt ) {
51
+ // Handle edge cases where number of pages has changed (i.e. if perPage changes)
171
52
if (num > this .numberOfPages ) {
172
- this . currentPage = this .numberOfPages ;
53
+ num = this .numberOfPages ;
173
54
} else if (num < 1 ) {
174
- this .currentpage = 1 ;
175
- } else {
176
- this .currentPage = num;
55
+ num = 1 ;
177
56
}
57
+ this .currentPage = num;
178
58
this .$nextTick (() => {
179
59
// Keep the current button focused if possible
180
- if (isVisible (e .target ) && e .target .focus ) {
181
- e .target .focus ();
60
+ const target = evt .target ;
61
+ if (isVisible (target) && this .$el .contains (target) && target .focus ) {
62
+ target .focus ();
182
63
} else {
183
64
this .focusCurrent ();
184
65
}
185
66
});
186
67
this .$emit (' change' , this .currentPage );
68
+ },
69
+ makePage (pagenum ) {
70
+ return pagenum;
71
+ },
72
+ linkProps (pagenum ) {
73
+ return { href: ' #' };
187
74
}
188
75
}
189
76
};
0 commit comments