Class: Jekyll::Plugins::PaginateV3::Config::Normaliser

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-paginate-v3/config/normaliser/core.rb,
lib/jekyll-paginate-v3/config/normaliser/site_and_templates.rb,
lib/jekyll-paginate-v3/config/normaliser/legacy_compatibility.rb

Overview

Legacy compatibility migration helpers for v1/v2 style configuration. Structure: each helper converts a specific legacy shape into the shared v3 config model consumed by the runtime pipeline.

Constant Summary collapse

LEGACY_FILTER_KEYS =
%w[category tag locale].freeze
LEGACY_TEMPLATE_DEFAULT_KEYS =
%w[items collection filters sort per_page limit offset trail title permalink layout layouts group slugify sort_field sort_reverse indexpage extension].freeze
LEGACY_SITE_KEY_ALIASES =
%w[split separator nested_key_separator].freeze
SITE_RESERVED_KEYS =
%w[enabled templates compatibility keywords equivalents syntax debug].freeze
V2_AUTOPAGE_DEFAULTS =
{
	'tags' => {
		'layout' => 'autopage_tags.html',
		'title' => 'Posts tagged with :tag',
		'permalink' => '/tag/:tag',
		'slugify' => {
			'mode' => 'default',
			'lowercase' => true
		}
	},
	'categories' => {
		'layout' => 'autopage_category.html',
		'title' => 'Posts in category :cat',
		'permalink' => '/category/:cat',
		'slugify' => {
			'mode' => 'default',
			'lowercase' => true
		}
	},
	'collections' => {
		'layout' => 'autopage_collection.html',
		'title' => 'Posts in collection :coll',
		'permalink' => '/collection/:coll/',
		'slugify' => {
			'mode' => 'default',
			'lowercase' => true
		}
	}
}.freeze

Class Method Summary collapse

Class Method Details

.normalise_site_config(site_config) ⇒ Object

Produces canonical site-level pagination config.

Merge order: defaults -> compatibility profile -> legacy overlays -> user config.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/jekyll-paginate-v3/config/normaliser/core.rb', line 58

def self.normalise_site_config(site_config)
	site_hash = Utils.safe_hash(site_config)
	raw_pagination = normalise_site_pagination_source(site_hash['pagination'])

	compatibility_mode = normalise_compatibility(raw_pagination['compatibility'])

	config = Utils.deep_copy(DEFAULTS)
	if compatibility_mode && COMPATIBILITY_PROFILES.key?(compatibility_mode)
		config = Jekyll::Utils.deep_merge_hashes(config, Utils.deep_copy(COMPATIBILITY_PROFILES[compatibility_mode]))
	end

	if compatibility_mode == 'v1'
		config = Jekyll::Utils.deep_merge_hashes(config, legacy_v1_overlay(site_hash))
	end

	config = Jekyll::Utils.deep_merge_hashes(config, raw_pagination)
	config['compatibility'] = compatibility_mode unless compatibility_mode.nil?

	normalise_site_common!(config, compatibility_mode, raw_pagination)
	migrate_legacy_shortcuts!(config, compatibility_mode, raw_pagination)
	apply_v2_legacy_page_templates!(config, raw_pagination, compatibility_mode)
	migrate_v2_autopages!(config, site_hash['autopages'], compatibility_mode)

	config
end

.normalise_template_config(site_config, template_pagination_config) ⇒ Object

Produces template-level pagination config used while paginating one template page/document.

The output is intentionally flat so downstream pipeline code can read values directly without re-resolving site defaults.



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/jekyll-paginate-v3/config/normaliser/core.rb', line 89

def self.normalise_template_config(site_config, template_pagination_config)
	raw_template_pagination = Utils.safe_hash(template_pagination_config)
	compatibility_mode = normalise_compatibility(raw_template_pagination['compatibility']) || normalise_compatibility(site_config['compatibility'])
	site_template_defaults = extract_site_template_defaults(site_config)

	page_config = Jekyll::Utils.deep_merge_hashes(
		Utils.deep_copy(site_template_defaults),
		raw_template_pagination
	)

	page_config['enabled'] = if raw_template_pagination.key?('enabled')
															!!raw_template_pagination['enabled']
														else
															!!site_config['enabled']
														end
	page_config['compatibility'] = compatibility_mode unless compatibility_mode.nil?

	syntax = resolve_template_syntax(raw_template_pagination, site_config['syntax'])
	page_config['split'] = syntax['split']
	page_config['separator'] = syntax['separator']

	page_config = normalise_template_defaults(
		page_config,
		raw_overrides: raw_template_pagination,
		split_delimiter: syntax['split'],
		keywords: site_config['keywords']
	)

	migrate_legacy_shortcuts!(page_config, compatibility_mode, raw_template_pagination)
	apply_v2_legacy_page_templates!(page_config, raw_template_pagination, compatibility_mode)

	page_config
end