jekyll-uj-powertools 1.5.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +10 -3
- data/jekyll-uj-powertools.gemspec +1 -1
- data/lib/generators/inject-properties.rb +55 -10
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c546d3b5f77c67bf33fdcdbecfeb0c741760a89fdcf508f05caf7943b19b197
|
4
|
+
data.tar.gz: 2612f6dae15afb265e3193bccdaf038421eb1ad51e3bdd955c0ce610b324e441
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e95b14dd432df58e934bb9cab3c77eb8bb577cc6e917475692753ec95b9d78ed8759e4310c6560fa6bb5da350519eb3e3fe97fc3278c78c2b345e021a53fc256
|
7
|
+
data.tar.gz: 54646abcd5832dabb835cdfff9dfb71d80aebe28df1727381497beb7af057ef594a05231cc9327ddf87f74484c1c6035d440a394b5fd97568943e641999f9af8
|
data/README.md
CHANGED
@@ -133,16 +133,23 @@ After checking out the repo, run `bin/setup` to install dependencies. You can al
|
|
133
133
|
|
134
134
|
To install this gem onto your local machine, run `bundle exec rake install`.
|
135
135
|
|
136
|
-
|
136
|
+
|
137
|
+
|
137
138
|
|
138
139
|
## ⚠️ Testing
|
139
140
|
Run the tests
|
140
141
|
```shell
|
141
|
-
bundle install
|
142
|
-
|
142
|
+
bundle install && bundle exec rspec
|
143
|
+
```
|
144
|
+
|
145
|
+
Test in your [Ultimate Jekyll Site](http://github.com/itw-creative-works/ultimate-jekyll)
|
146
|
+
```shell
|
147
|
+
npm start -- --ujPluginDevMode=true
|
143
148
|
```
|
144
149
|
|
145
150
|
## 💎 Build + Publish the Gem
|
151
|
+
To release a new version, update the version number in the `.gemspec` and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
152
|
+
|
146
153
|
```shell
|
147
154
|
# Release
|
148
155
|
bundle exec rake release
|
@@ -72,6 +72,39 @@ module Jekyll
|
|
72
72
|
]
|
73
73
|
end
|
74
74
|
|
75
|
+
def get_layout_chain(layout_name, site)
|
76
|
+
chain = []
|
77
|
+
current_layout_name = layout_name
|
78
|
+
|
79
|
+
# Traverse up the layout hierarchy
|
80
|
+
while current_layout_name
|
81
|
+
layout = site.layouts[current_layout_name]
|
82
|
+
break unless layout
|
83
|
+
|
84
|
+
chain.unshift(layout) # Add to beginning to maintain parent->child order
|
85
|
+
current_layout_name = layout.data['layout']
|
86
|
+
end
|
87
|
+
|
88
|
+
chain
|
89
|
+
end
|
90
|
+
|
91
|
+
def filter_front_matter(data)
|
92
|
+
# Jekyll internal properties that shouldn't be in resolved data
|
93
|
+
jekyll_internals = [
|
94
|
+
'layout', 'permalink', 'published', 'date', 'categories', 'tags',
|
95
|
+
'path', 'relative_path', 'collection', 'type', 'id', 'url',
|
96
|
+
'next', 'previous', 'draft', 'ext', 'excerpt', 'output'
|
97
|
+
]
|
98
|
+
|
99
|
+
filtered = {}
|
100
|
+
data.each do |key, value|
|
101
|
+
next if jekyll_internals.include?(key)
|
102
|
+
filtered[key] = value
|
103
|
+
end
|
104
|
+
|
105
|
+
filtered
|
106
|
+
end
|
107
|
+
|
75
108
|
def inject_data(item, site)
|
76
109
|
# Inject a random number into the item's data
|
77
110
|
item.data['random_id'] = rand(100) # Random number between 0 and 99
|
@@ -82,8 +115,8 @@ module Jekyll
|
|
82
115
|
end
|
83
116
|
|
84
117
|
# Set resolved data for site, layout, and page
|
85
|
-
# Create a deep merge of site ->
|
86
|
-
# Priority: page (highest) ->
|
118
|
+
# Create a deep merge of site -> child layouts -> parent layouts -> page data
|
119
|
+
# Priority: page (highest) -> parent layouts -> child layouts -> site (lowest)
|
87
120
|
resolved = {}
|
88
121
|
|
89
122
|
# Start with site data
|
@@ -93,19 +126,31 @@ module Jekyll
|
|
93
126
|
resolved = deep_merge(resolved, filtered_config)
|
94
127
|
end
|
95
128
|
|
96
|
-
# Merge layout data if available
|
129
|
+
# Merge layout data if available (traverse the entire layout chain)
|
97
130
|
if item.data['layout']
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
131
|
+
layout_chain = get_layout_chain(item.data['layout'], site)
|
132
|
+
|
133
|
+
# Merge each layout in reverse order (child to parent)
|
134
|
+
# This gives parent layouts (base layouts) higher priority
|
135
|
+
layout_chain.reverse.each do |layout|
|
136
|
+
if layout && layout.data
|
137
|
+
# Filter out Jekyll internal layout properties
|
138
|
+
layout_data = filter_front_matter(layout.data)
|
139
|
+
resolved = deep_merge(resolved, layout_data)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# Also add layout_data for backward compatibility (immediate layout only)
|
144
|
+
immediate_layout = site.layouts[item.data['layout']]
|
145
|
+
if immediate_layout && immediate_layout.data
|
146
|
+
item.data['layout_data'] = immediate_layout.data
|
104
147
|
end
|
105
148
|
end
|
106
149
|
|
107
150
|
# Finally merge page data (highest priority)
|
108
|
-
|
151
|
+
# Filter out Jekyll internal properties
|
152
|
+
page_data = filter_front_matter(item.data)
|
153
|
+
resolved = deep_merge(resolved, page_data)
|
109
154
|
|
110
155
|
# Add the resolved data to the item
|
111
156
|
item.data['resolved'] = resolved
|