d2b1e0d4b7
refs #5162 - allow pagination and navigation partial helpers to have attributes passed through to them - e.g. {{navigation header=true}} -> {{#if header}} will now work - allows styling navigation to be done differently for different sections of the page - properly create a data frame, and pass through "this" context - means {{navigation header=true}} is the same as {{> navigation header=true navigation=@site.navigation}} - our partial helpers, have the same behaviour exactly as if the partial was called directly - this is additive, and improves behaviour
51 lines
1.9 KiB
JavaScript
51 lines
1.9 KiB
JavaScript
// ### Pagination Helper
|
|
// `{{pagination}}`
|
|
// Outputs previous and next buttons, along with info about the current page
|
|
|
|
var proxy = require('./proxy'),
|
|
_ = require('lodash'),
|
|
errors = proxy.errors,
|
|
i18n = proxy.i18n,
|
|
createFrame = proxy.hbs.handlebars.createFrame,
|
|
templates = proxy.templates,
|
|
pagination;
|
|
|
|
pagination = function (options) {
|
|
options = options || {};
|
|
options.hash = options.hash || {};
|
|
options.data = options.data || {};
|
|
|
|
if (!_.isObject(this.pagination) || _.isFunction(this.pagination)) {
|
|
throw new errors.IncorrectUsageError({
|
|
level: 'normal',
|
|
message: i18n.t('warnings.helpers.pagination.invalidData'),
|
|
help: 'https://docs.ghost.org/api/handlebars-themes/helpers/pagination/'
|
|
});
|
|
}
|
|
|
|
if (_.isUndefined(this.pagination.page) || _.isUndefined(this.pagination.pages) ||
|
|
_.isUndefined(this.pagination.total) || _.isUndefined(this.pagination.limit)) {
|
|
throw new errors.IncorrectUsageError({
|
|
message: i18n.t('warnings.helpers.pagination.valuesMustBeDefined')
|
|
});
|
|
}
|
|
|
|
if ((!_.isNull(this.pagination.next) && !_.isNumber(this.pagination.next)) ||
|
|
(!_.isNull(this.pagination.prev) && !_.isNumber(this.pagination.prev))) {
|
|
throw new errors.IncorrectUsageError({
|
|
message: i18n.t('warnings.helpers.pagination.nextPrevValuesMustBeNumeric')
|
|
});
|
|
}
|
|
|
|
if (!_.isNumber(this.pagination.page) || !_.isNumber(this.pagination.pages) ||
|
|
!_.isNumber(this.pagination.total) || !_.isNumber(this.pagination.limit)) {
|
|
throw new errors.IncorrectUsageError({message: i18n.t('warnings.helpers.pagination.valuesMustBeNumeric')});
|
|
}
|
|
const context = _.merge({}, this, options.hash, this.pagination);
|
|
const data = createFrame(options.data);
|
|
|
|
return templates.execute('pagination', context, {data});
|
|
};
|
|
|
|
module.exports = pagination;
|