vue-carousel-3d
Version:
Beautiful, flexible and touch supported 3D Carousel for Vue.js
75 lines (62 loc) • 1.69 kB
JavaScript
var merge = require('utils-merge');
var util = require('util');
function pagination(base, posts, options){
if (typeof base !== 'string') throw new TypeError('base must be a string!');
if (!posts) throw new TypeError('posts is required!');
options = options || {};
if (base && base[base.length - 1] !== '/') base += '/';
var length = posts.length;
var perPage = options.hasOwnProperty('perPage') ? +options.perPage : 10;
var total = perPage ? Math.ceil(length / perPage) : 1;
var format = options.format || 'page/%d/';
var layout = options.layout || ['archive', 'index'];
var data = options.data || {};
var result = [];
var urlCache = {};
function formatURL(i){
if (urlCache[i]) return urlCache[i];
var url = base;
if (i > 1) url += util.format(format, i);
urlCache[i] = url;
return url;
}
function makeData(i){
var data = {
base: base,
total: total,
current: i,
current_url: formatURL(i),
posts: perPage ? posts.slice(perPage * (i - 1), perPage * i) : posts,
prev: 0,
prev_link: '',
next: 0,
next_link: ''
};
if (i > 1){
data.prev = i - 1;
data.prev_link = formatURL(data.prev);
}
if (i < total){
data.next = i + 1;
data.next_link = formatURL(data.next);
}
return data;
}
if (perPage){
for (var i = 1; i <= total; i++){
result.push({
path: formatURL(i),
layout: layout,
data: merge(makeData(i), data)
});
}
} else {
result.push({
path: base,
layout: layout,
data: merge(makeData(1), data)
});
}
return result;
}
module.exports = pagination;