UNPKG

vue-use-paginator

Version:
2 lines (1 loc) 1.85 kB
(function(l,h){typeof exports=="object"&&typeof module<"u"?module.exports=h(require("vue")):typeof define=="function"&&define.amd?define(["vue"],h):(l=typeof globalThis<"u"?globalThis:l||self,l.VueUsePaginator=h(l.Vue))})(this,function(l){"use strict";const h={page:1,pageSize:5,numItems:0,numButtons:5},m=e=>{const n={...h,...e},u=l.ref(n.page),t=l.ref(n.pageSize),i=l.ref(n.numItems),a=l.ref(n.numButtons),s=l.computed({get:()=>u.value,set:d=>{d<=0?u.value=1:d>o.value?u.value=o.value||1:u.value=d}}),o=l.computed(()=>Math.ceil(i.value/t.value));l.watch(o,()=>{s.value>o.value&&(s.value=o.value)});const c=l.computed(()=>{const d=(s.value-1)*t.value,I=Math.min(d+t.value,i.value);return[d,I]}),f=l.computed(()=>s.value>1),v=l.computed(()=>s.value<o.value),p=()=>(f.value&&s.value--,s.value),g=()=>(v.value&&s.value++,s.value),S=()=>(s.value=1,1),z=()=>(s.value=o.value,o.value),B=l.computed(()=>o.value<=a.value?M(s.value,o.value):x(s.value,o.value,a.value));return{page:s,pageSize:t,numItems:i,numButtons:a,numPages:o,slice:c,hasPrev:f,hasNext:v,goPrev:p,goNext:g,goStart:S,goEnd:z,buttons:B}};function M(e,n){return r(1,e).concat({page:e,active:!0,ellipsis:!1}).concat(r(e+1,n+1))}function x(e,n,u){let t=0,i=0;const a=Math.floor(u/2);e<=a?(t=e-1,i=u-t-1):e>=n-a?(i=n-e,t=u-i-1):u%2===0?(t=a-1,i=a):(t=a,i=a);const s=e-1,o=n-e;let c=[];if(s<=t)c=r(1,s+1);else if(t>0){const f=t===2?2:Math.ceil(t/2),v=t-f;let p=Math.ceil(s/2);s%2===0&&p++,c=r(1,f).concat({page:p,active:!1,ellipsis:!0}).concat(r(e-v,e))}if(c.push({page:e,active:!0,ellipsis:!1}),o<=i)c=c.concat(r(e+1,n+1));else if(i>0){const f=i===2?1:Math.floor(i/2)+1,v=i-f,p=e+Math.ceil(o/2);c=c.concat(r(e+1,e+f)).concat({page:p,active:!1,ellipsis:!0}).concat(r(n-v+1,n+1))}return c}function r(e,n){const u=[];for(let t=e;t<n;t++)u.push({page:t,active:!1,ellipsis:!1});return u}return m});