gitlab-org--gitlab-foss/app/assets/javascripts/vue_pagination/index.js.es6

90 lines
2.7 KiB
JavaScript
Raw Normal View History

/* global Vue, gl */
/* eslint-disable no-param-reassign */
((gl) => {
gl.VueGlPagination = Vue.extend({
props: [
'changepage',
'count',
'pagenum',
],
methods: {
2016-11-08 20:04:30 +00:00
pagestatus(n) {
2016-11-08 21:23:16 +00:00
if (this.getItems[1].prev) {
if (n === +this.pagenum) return true;
}
2016-11-08 20:04:30 +00:00
if (n - 1 === +this.pagenum) return true;
return false;
},
prevstatus(index) {
if (index > 0) return false;
if (+this.pagenum < 2) return true;
return false;
},
2016-11-08 19:23:29 +00:00
createSection(n) { return Array.from(Array(n)).map((e, i) => i); },
},
computed: {
2016-11-08 19:23:29 +00:00
last() { return Math.ceil(+this.count / 5); },
getItems() {
const items = [];
const pages = this.createSection(+this.last + 1);
pages.shift();
2016-11-08 21:23:16 +00:00
if (+this.pagenum > 1) items.push({ text: 'First', first: true });
2016-11-08 19:23:29 +00:00
2016-11-08 21:23:16 +00:00
items.push({ text: 'Prev', prev: true, class: this.prevstatus() });
2016-11-08 19:23:29 +00:00
2016-11-08 21:23:16 +00:00
pages.forEach(i => items.push({ text: i, number: true }));
let nextDisabled = false;
if (+this.pagenum === this.last) { nextDisabled = true; }
items.push({ text: 'Next', next: true, disabled: nextDisabled });
if (+this.pagenum !== this.last) items.push({ text: 'Last »', last: true });
2016-11-08 19:23:29 +00:00
return items;
},
},
template: `
<div class="gl-pagination">
2016-11-08 20:04:30 +00:00
<ul class="pagination clearfix" v-for='(item, i) in getItems'>
2016-11-08 21:23:16 +00:00
<!-- if defined as the first button, render first -->
<li
v-if='item.first'
>
<span @click='changepage($event)'>{{item.text}}</span>
</li>
<!-- if defined as the prev button, render prev -->
<li
:class="{disabled: prevstatus(i)}"
v-if='item.prev'
>
<span @click='changepage($event)'>{{item.text}}</span>
</li>
<!-- if defined as the next button, render next -->
<li
v-if='item.next'
:class="{disabled: item.disabled}"
>
<span @click='changepage($event)'>{{item.text}}</span>
</li>
<!-- if defined as the last button, render last -->
<li
v-if='item.last'
:class="{disabled: item.disabled}"
>
2016-11-08 19:23:29 +00:00
<span @click='changepage($event, last)'>{{item.text}}</span>
</li>
2016-11-08 21:23:16 +00:00
<!-- if defined as the number button, render number -->
<li
:class="{active: pagestatus((i))}"
v-if='item.number'
>
<span @click='changepage($event)'>{{item.text}}</span>
</li>
</ul>
</div>
`,
});
})(window.gl || (window.gl = {}));