jekyll-uj-powertools 1.6.19 → 1.6.21

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1dc2dd5e815332b66da546536760d0dfd7a6a5f7575f9aa785ae77abb66af4e
4
- data.tar.gz: 5d478e0d751a0e86368ecaa13af52c5aaef5462cb6f02e960733d4f2d18bed89
3
+ metadata.gz: 74eea66888896dbfa05751e4f4f9764d0b228aa1362da0f7d286c2c139a531f6
4
+ data.tar.gz: 1206892a9817ff204468c5508daddfe82fcca717001385aa9cd2884d4665a6c4
5
5
  SHA512:
6
- metadata.gz: ae73a0567ab9c738cd423ea7ae78936a222b1f494c6c130d96d78f225283548c1446868d9ec699f05f6c7aee0fc063fd0ac847f3edef623bb9d88be56b5544e1
7
- data.tar.gz: e2eeecfd93f8ae7a8ca43656820ffc7eb57e6535a9c5ffa4cf3ab3f9528ca45c9c6db067565d0dcfcf5393e0da92e7f30a7f488dcee7e8dc7d4b2c617c272e5f
6
+ metadata.gz: feb77f22c66e6fefc1add8d5f7b9cae49374265b3527a93867f47a650906558b9423dc09a23ca837a251495d501abe54541e5dc35c965bd049cbcb79cc34ef0d
7
+ data.tar.gz: 966dc5fe637bc9489da921b270b679df56106b9afe50e2919b359c6ee1377d82c7fde71504a1f764da007cb6747c12dd19467ae97226f2d020c2947dc7f651b3
data/README.md CHANGED
@@ -70,6 +70,20 @@ Convert a string to title case.
70
70
  {{ "hello world" | uj_title_case }}
71
71
  ```
72
72
 
73
+ ### `uj_commaify` Filter
74
+ Format numbers with commas for better readability (e.g., 10000 becomes 10,000).
75
+
76
+ ```liquid
77
+ {{ 10000 | uj_commaify }}
78
+ <!-- Output: 10,000 -->
79
+
80
+ {{ 1234567890 | uj_commaify }}
81
+ <!-- Output: 1,234,567,890 -->
82
+
83
+ {{ 1234.56 | uj_commaify }}
84
+ <!-- Output: 1,234.56 -->
85
+ ```
86
+
73
87
  ### `uj_content_format` Filter
74
88
  Process content with Liquid templating and Markdown conversion, automatically transforming markdown and liquid into HTML intelligently based on the file type.
75
89
 
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  Gem::Specification.new do |spec|
6
6
  # Gem info
7
7
  spec.name = "jekyll-uj-powertools"
8
- spec.version = "1.6.19"
8
+ spec.version = "1.6.21"
9
9
 
10
10
  # Author info
11
11
  spec.authors = ["ITW Creative Works"]
data/lib/filters/main.rb CHANGED
@@ -142,6 +142,19 @@ module Jekyll
142
142
  JSON.pretty_generate(input, indent: indent_string)
143
143
  end
144
144
 
145
+ # Format a number with commas (e.g., 10000 becomes 10,000)
146
+ def uj_commaify(input)
147
+ return input unless input
148
+
149
+ str = input.to_s.strip
150
+ return input if str.empty?
151
+
152
+ # Check if the string is a valid number (integer or decimal, possibly negative)
153
+ return input unless str.match?(/^-?\d+(\.\d+)?$/)
154
+
155
+ str.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
156
+ end
157
+
145
158
  private
146
159
 
147
160
  # Helper method to safely dig through nested hashes
@@ -0,0 +1,111 @@
1
+ # Blog Taxonomy Generator
2
+ # Generates category and tag pages for blog posts
3
+ # Reads from post.categories and post.tags (nested under 'post' frontmatter)
4
+
5
+ module Jekyll
6
+ class CategoryPage < Page
7
+ def initialize(site, base, category_name, category_slug)
8
+ @site = site
9
+ @base = base
10
+ @dir = "blog/categories/#{category_slug}"
11
+ @name = 'index.html'
12
+
13
+ self.process(@name)
14
+ self.read_yaml(File.join(base, '_layouts'), 'blueprint/blog/categories/category.html')
15
+
16
+ # Set page data
17
+ self.data['category'] = {
18
+ 'name' => category_name,
19
+ 'slug' => category_slug
20
+ }
21
+ self.data['title'] = "#{category_name} - Blog Categories"
22
+ self.data['meta'] ||= {}
23
+ self.data['meta']['title'] = "#{category_name} - Blog Categories - #{site.config['brand']['name'] || site.config['title']}"
24
+ self.data['meta']['description'] = "Browse all blog posts in the #{category_name} category."
25
+ self.data['meta']['breadcrumb'] = category_name
26
+ end
27
+ end
28
+
29
+ class TagPage < Page
30
+ def initialize(site, base, tag_name, tag_slug)
31
+ @site = site
32
+ @base = base
33
+ @dir = "blog/tags/#{tag_slug}"
34
+ @name = 'index.html'
35
+
36
+ self.process(@name)
37
+ self.read_yaml(File.join(base, '_layouts'), 'blueprint/blog/tags/tag.html')
38
+
39
+ # Set page data
40
+ self.data['tag'] = {
41
+ 'name' => tag_name,
42
+ 'slug' => tag_slug
43
+ }
44
+ self.data['title'] = "#{tag_name} - Blog Tags"
45
+ self.data['meta'] ||= {}
46
+ self.data['meta']['title'] = "#{tag_name} - Blog Tags - #{site.config['brand']['name'] || site.config['title']}"
47
+ self.data['meta']['description'] = "Browse all blog posts tagged with #{tag_name}."
48
+ self.data['meta']['breadcrumb'] = tag_name
49
+ end
50
+ end
51
+
52
+ class BlogTaxonomyGenerator < Generator
53
+ safe true
54
+ priority :normal
55
+
56
+ def generate(site)
57
+ # Collect unique categories and tags from posts
58
+ categories = {}
59
+ tags = {}
60
+
61
+ site.posts.docs.each do |post|
62
+ # Get categories from post.categories (nested under 'post' frontmatter)
63
+ post_data = post.data['post']
64
+ next unless post_data
65
+
66
+ # Process categories
67
+ if post_data['categories'].is_a?(Array)
68
+ post_data['categories'].each do |category|
69
+ next if category.nil? || category.to_s.strip.empty?
70
+ category_name = titleize(category.to_s.strip)
71
+ category_slug = slugify(category.to_s.strip)
72
+ categories[category_slug] = category_name
73
+ end
74
+ end
75
+
76
+ # Process tags
77
+ if post_data['tags'].is_a?(Array)
78
+ post_data['tags'].each do |tag|
79
+ next if tag.nil? || tag.to_s.strip.empty?
80
+ tag_name = titleize(tag.to_s.strip)
81
+ tag_slug = slugify(tag.to_s.strip)
82
+ tags[tag_slug] = tag_name
83
+ end
84
+ end
85
+ end
86
+
87
+ # Generate category pages
88
+ categories.each do |slug, name|
89
+ site.pages << CategoryPage.new(site, site.source, name, slug)
90
+ end
91
+
92
+ # Generate tag pages
93
+ tags.each do |slug, name|
94
+ site.pages << TagPage.new(site, site.source, name, slug)
95
+ end
96
+
97
+ # Log generation info
98
+ Jekyll.logger.info "BlogTaxonomy:", "Generated #{categories.size} category pages and #{tags.size} tag pages"
99
+ end
100
+
101
+ private
102
+
103
+ def slugify(text)
104
+ text.downcase.gsub(/[^a-z0-9\s-]/, '').gsub(/\s+/, '-').gsub(/-+/, '-').strip
105
+ end
106
+
107
+ def titleize(text)
108
+ text.split(/[\s_-]/).map(&:capitalize).join(' ')
109
+ end
110
+ end
111
+ end
@@ -7,6 +7,7 @@ module Jekyll
7
7
 
8
8
  # Load Generators
9
9
  require_relative "generators/inject-properties"
10
+ require_relative "generators/blog-taxonomy"
10
11
 
11
12
  # Load Hooks
12
13
  require_relative "hooks/inject-properties"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-uj-powertools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.19
4
+ version: 1.6.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - ITW Creative Works
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-26 00:00:00.000000000 Z
11
+ date: 2025-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -114,6 +114,7 @@ files:
114
114
  - Rakefile
115
115
  - jekyll-uj-powertools.gemspec
116
116
  - lib/filters/main.rb
117
+ - lib/generators/blog-taxonomy.rb
117
118
  - lib/generators/inject-properties.rb
118
119
  - lib/helpers/variable_resolver.rb
119
120
  - lib/hooks/inject-properties.rb