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

93 lines
2.6 KiB
JavaScript
Raw Normal View History

/* global Vue, gl */
/* eslint-disable no-param-reassign */
((gl) => {
gl.VueGlPagination = Vue.extend({
props: [
'changepage',
'count',
'pagenum',
],
2016-11-07 16:16:57 -05:00
data() {
return {
nslice: +this.pagenum,
};
},
methods: {
pagenumberstatus(n) {
2016-11-03 13:42:12 -04:00
if (n - 1 === +this.pagenum) return 'active';
return '';
},
prevstatus() {
if (+this.pagenum > 1) return '';
return 'prev disabled';
},
},
computed: {
2016-11-07 16:16:57 -05:00
dynamicpage() {
const section = [...Array(this.upcount).keys()];
section.shift();
this.nslice = +this.pagenum;
this.endcount = +this.pagenum + 5;
return section.slice(+this.pagenum, +this.pagenum + 5);
},
paginationsection() {
if (this.last < 6 && this.pagenum < 6) {
const pageArray = [...Array(6).keys()];
pageArray.shift();
return pageArray.slice(0, this.upcount);
}
2016-11-07 16:16:57 -05:00
return this.dynamicpage;
},
2016-11-03 13:34:18 -04:00
last() {
return Math.ceil(+this.count / 5);
2016-11-03 13:34:18 -04:00
},
upcount() {
return +this.last + 1;
},
endspread() {
if (+this.pagenum < this.last && +this.pagenum > 5) return true;
2016-11-06 15:56:08 -05:00
return false;
},
begspread() {
if (+this.pagenum > 5 && +this.pagenum < this.last) return true;
2016-11-06 15:56:08 -05:00
return false;
},
},
template: `
<div class="gl-pagination">
<ul class="pagination clearfix" v-for='n in paginationsection'>
2016-11-07 16:16:57 -05:00
<li :class='prevstatus(n)' v-if='n - 1 === 1'>
<span @click='changepage($event, {where: pagenum - 1})'>Prev</span>
</li>
<li :class='pagenumberstatus(n)' v-if='n >= 2'>
<span @click='changepage($event)'>{{(n - 1)}}</span>
</li>
<!--
if at end make dots dissapear
if in second slice or more make dots appear in the front
-->
<li v-if='n === upcount && upcount > 4 && begspread'>
2016-11-03 13:42:12 -04:00
<span class="gap"></span>
2016-11-03 13:32:22 -04:00
</li>
2016-11-06 16:00:36 -05:00
<li
class="next"
v-if='(n === upcount || n === endcount) && pagenum !== last'
>
2016-11-07 16:16:57 -05:00
<span @click='changepage($event,{where: +pagenum+1})'>Next</span>
</li>
<li v-if='n === upcount && upcount > 4 && endspread'>
<span class="gap"></span>
</li>
2016-11-06 16:00:36 -05:00
<li
class="last"
2016-11-07 16:16:57 -05:00
v-if='(n === upcount || n === endcount) && +pagenum !== last'
2016-11-06 16:00:36 -05:00
>
<span @click='changepage($event, {where: last})'>Last »</span>
</li>
</ul>
</div>
`,
});
})(window.gl || (window.gl = {}));