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

85 lines
2.3 KiB
JavaScript
Raw Normal View History

/* global Vue, gl */
2016-11-08 16:57:16 -05:00
/* eslint-disable no-param-reassign, no-plusplus */
((gl) => {
gl.VueGlPagination = Vue.extend({
props: [
'changepage',
'count',
'pagenum',
],
methods: {
2016-11-08 15:04:30 -05:00
pagestatus(n) {
2016-11-08 16:23:16 -05:00
if (this.getItems[1].prev) {
if (n === +this.pagenum) return true;
}
2016-11-08 15:04:30 -05: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 14:23:29 -05:00
createSection(n) { return Array.from(Array(n)).map((e, i) => i); },
},
computed: {
2016-11-08 14:23:29 -05:00
last() { return Math.ceil(+this.count / 5); },
getItems() {
2016-11-08 16:59:20 -05:00
const total = +this.last;
2016-11-08 16:57:16 -05:00
const page = +this.pagenum;
2016-11-08 14:23:29 -05:00
const items = [];
2016-11-08 16:59:20 -05:00
if (page > 1) items.push({ title: '<< First', where: 1 });
2016-11-08 16:57:16 -05:00
if (page > 1) {
items.push({ title: 'Prev', where: page - 1 });
} else {
items.push({ title: 'Prev', where: page - 1, disabled: true });
}
2016-11-08 14:23:29 -05:00
2016-11-08 16:59:20 -05:00
if (page > 6) items.push({ title: '...', separator: true });
2016-11-08 14:23:29 -05:00
2016-11-08 16:57:16 -05:00
const start = Math.max(page - 4, 1);
const end = Math.min(page + 4, total);
2016-11-08 16:23:16 -05:00
2016-11-08 16:57:16 -05:00
for (let i = start; i <= end; i++) {
const isActive = i === page;
items.push({ title: i, active: isActive, where: i });
}
2016-11-08 16:23:16 -05:00
2016-11-08 16:59:20 -05:00
if (total - page > 4) items.push({ title: '...', separator: true });
2016-11-08 16:57:16 -05:00
if (page === total) {
items.push({ title: 'Next', where: page + 1, disabled: true });
} else if (total - page >= 1) {
items.push({ title: 'Next', where: page + 1 });
}
2016-11-08 16:59:20 -05:00
if (total - page >= 1) items.push({ title: 'Last >>', where: total });
2016-11-08 14:23:29 -05:00
return items;
},
},
template: `
<div class="gl-pagination">
2016-11-08 16:57:16 -05:00
<ul class="pagination clearfix" v-for='item in getItems'>
2016-11-08 16:23:16 -05:00
<li
2016-11-08 16:57:16 -05:00
:class='{
separator: item.separator,
active: item.active,
disabled: item.disabled
}'
2016-11-08 16:23:16 -05:00
>
2016-11-08 16:57:16 -05:00
<span
@click="changepage($event, item.where)"
>
{{item.title}}
</span>
2016-11-08 16:23:16 -05:00
</li>
</ul>
</div>
`,
});
})(window.gl || (window.gl = {}));