ultimate-jekyll-manager 0.0.146 → 0.0.148

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.
@@ -0,0 +1,8 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/pages/blog/categories/category
4
+
5
+ ### REGULAR PAGES ###
6
+ ---
7
+
8
+ {{ content | uj_content_format }}
@@ -0,0 +1,12 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/pages/blog/categories/index
4
+
5
+ ### REGULAR PAGES ###
6
+ meta:
7
+ title: "Blog Categories - {{ site.brand.name }}"
8
+ description: "Browse all blog categories on {{ site.brand.name }}."
9
+ breadcrumb: "Categories"
10
+ ---
11
+
12
+ {{ content | uj_content_format }}
@@ -0,0 +1,12 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/pages/blog/tags/index
4
+
5
+ ### REGULAR PAGES ###
6
+ meta:
7
+ title: "Blog Tags - {{ site.brand.name }}"
8
+ description: "Browse all blog tags on {{ site.brand.name }}."
9
+ breadcrumb: "Tags"
10
+ ---
11
+
12
+ {{ content | uj_content_format }}
@@ -0,0 +1,8 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/pages/blog/tags/tag
4
+
5
+ ### REGULAR PAGES ###
6
+ ---
7
+
8
+ {{ content | uj_content_format }}
@@ -1,15 +1,13 @@
1
1
  ---
2
2
  ### ALL PAGES ###
3
3
  layout: themes/[ site.theme.id ]/frontend/pages/updates/update
4
+ asset_path: updates/update
4
5
 
5
6
  ### REGULAR PAGES ###
6
7
  meta:
7
8
  title: "Version {{ page.update.version }} - {{ site.brand.name }}"
8
9
  description: "{{ page.update.summary | default: 'Release notes for version ' | append: page.update.version | append: ' of ' | append: site.brand.name }}"
9
10
  breadcrumb: "v{{ page.update.version }}"
10
-
11
- # Asset path for all update pages
12
- asset_path: updates/update
13
11
  ---
14
12
 
15
13
  {{ content | uj_content_format }}
@@ -0,0 +1,152 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/core/base
4
+ asset_path: blog/categories/category
5
+
6
+ ### PAGE CONFIG ###
7
+ # Hero Section
8
+ hero:
9
+ subheadline: "Browse all posts in this category"
10
+ ---
11
+
12
+ <!-- Hero Section -->
13
+ <section>
14
+ <div class="container">
15
+ <div class="row justify-content-center text-center">
16
+ <div class="col-lg-10" data-lazy="@class animation-slide-up">
17
+ <!-- Breadcrumb -->
18
+ <nav aria-label="breadcrumb" class="mb-3">
19
+ <ol class="breadcrumb justify-content-center mb-0">
20
+ <li class="breadcrumb-item">
21
+ <a href="{{ site.url }}/blog" class="text-decoration-none">Blog</a>
22
+ </li>
23
+ <li class="breadcrumb-item">
24
+ <a href="{{ site.url }}/blog/categories" class="text-decoration-none">Categories</a>
25
+ </li>
26
+ <li class="breadcrumb-item active" aria-current="page">{{ page.category.name }}</li>
27
+ </ol>
28
+ </nav>
29
+
30
+ <h1 class="h1 mb-3">
31
+ {{ page.category.name }}
32
+ </h1>
33
+ {% iftruthy page.resolved.hero.subheadline %}
34
+ <p class="fs-5 text-muted">
35
+ {{ page.resolved.hero.subheadline }}
36
+ </p>
37
+ {% endiftruthy %}
38
+ </div>
39
+ </div>
40
+ </div>
41
+ </section>
42
+
43
+ <!-- Posts Grid -->
44
+ <section class="pt-4">
45
+ <div class="container">
46
+ {% comment %} Filter posts by category (max 100) {% endcomment %}
47
+ {% assign category_slug = page.category.slug %}
48
+ {% assign filtered_posts = '' | split: ',' %}
49
+ {% for post in site.posts %}
50
+ {% if filtered_posts.size >= 100 %}
51
+ {% break %}
52
+ {% endif %}
53
+ {% for category in post.post.categories %}
54
+ {% assign cat_slug = category | slugify %}
55
+ {% if cat_slug == category_slug %}
56
+ {% assign filtered_posts = filtered_posts | push: post %}
57
+ {% break %}
58
+ {% endif %}
59
+ {% endfor %}
60
+ {% endfor %}
61
+
62
+ <div class="row g-4 mb-5">
63
+ {% for post in filtered_posts %}
64
+ <div class="col-xl-4 col-lg-6 col-md-12" data-lazy="@class animation-slide-up">
65
+ <article class="card h-100 shadow-sm border-0">
66
+ <!-- Image -->
67
+ <a href="{{ site.url }}{{ post.url }}" class="text-decoration-none d-block p-3 pb-0">
68
+ {%- uj_post post.post.id, "image-tag", class="img-fluid object-fit-cover blog-post-card-image rounded-3" -%}
69
+ </a>
70
+
71
+ <!-- Card Body -->
72
+ <div class="card-body d-flex flex-column">
73
+ <!-- Category Badge -->
74
+ {% if post.post.categories[0] %}
75
+ <div class="mb-2">
76
+ <span class="badge bg-primary-soft text-primary">
77
+ {{ post.post.categories[0] | uj_title_case }}
78
+ </span>
79
+ </div>
80
+ {% endif %}
81
+
82
+ <!-- Title -->
83
+ <h3 class="h5 card-title mb-0">
84
+ <a href="{{ site.url }}{{ post.url }}" class="text-decoration-none text-body">
85
+ {{ post.post.title }}
86
+ </a>
87
+ </h3>
88
+ </div>
89
+
90
+ <!-- Card Footer -->
91
+ <div class="card-footer bg-transparent border-0 pt-0 pb-3">
92
+ <div class="d-flex align-items-center justify-content-between small">
93
+ <!-- Left side: Author and Date -->
94
+ <div class="d-flex align-items-center">
95
+ <!-- Author Avatar -->
96
+ <a href="{%- uj_member post.post.author, "url" -%}" class="text-decoration-none me-2 position-relative z-1">
97
+ <div class="avatar avatar-md">
98
+ {%- uj_member post.post.author, "image-tag", class="rounded-circle" -%}
99
+ </div>
100
+ </a>
101
+
102
+ <!-- Author Name and Date stacked -->
103
+ <div>
104
+ <a href="{%- uj_member post.post.author, "url" -%}" class="text-decoration-none text-body fw-semibold position-relative z-1 d-block">
105
+ {%- uj_member post.post.author, "name" -%}
106
+ </a>
107
+ <time datetime="{{ post.date | date_to_xmlschema }}" class="text-muted">
108
+ {{ post.date | date: "%b %d, %Y" }}
109
+ </time>
110
+ </div>
111
+ </div>
112
+
113
+ <!-- Right side: Read time -->
114
+ <div class="text-muted">
115
+ {% uj_readtime post.content %} min read
116
+ </div>
117
+ </div>
118
+ </div>
119
+ </article>
120
+ </div>
121
+ {% endfor %}
122
+ </div>
123
+
124
+ {% if filtered_posts.size == 0 %}
125
+ <div class="row justify-content-center">
126
+ <div class="col-lg-6 text-center" data-lazy="@class animation-slide-up">
127
+ <div class="py-5">
128
+ {% uj_icon "file-lines", "fa-4x text-muted mb-3" %}
129
+ <h2 class="h4 text-muted">No posts in this category</h2>
130
+ <p class="text-muted">Check back soon for new content.</p>
131
+ <a href="{{ site.url }}/blog/categories" class="btn btn-primary">
132
+ {% uj_icon "arrow-left", "me-2" %}
133
+ All Categories
134
+ </a>
135
+ </div>
136
+ </div>
137
+ </div>
138
+ {% endif %}
139
+
140
+ <!-- Back to Categories -->
141
+ <div class="row justify-content-center">
142
+ <div class="col-12 text-center" data-lazy="@class animation-slide-up">
143
+ <a href="{{ site.url }}/blog/categories" class="btn btn-outline-adaptive">
144
+ {% uj_icon "arrow-left", "me-2" %}
145
+ All Categories
146
+ </a>
147
+ </div>
148
+ </div>
149
+ </div>
150
+ </section>
151
+
152
+ {{ content | uj_content_format }}
@@ -0,0 +1,94 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/core/base
4
+
5
+ ### PAGE CONFIG ###
6
+ # Hero Section
7
+ hero:
8
+ headline: "Blog"
9
+ headline_accent: "categories"
10
+ subheadline: "Browse posts by category"
11
+ ---
12
+
13
+ <!-- Hero Section -->
14
+ <section>
15
+ <div class="container">
16
+ <div class="row justify-content-center text-center">
17
+ <div class="col-lg-10" data-lazy="@class animation-slide-up">
18
+ <h1 class="h1 mb-3">
19
+ {{ page.resolved.hero.headline }} <span class="text-gradient-rainbow">{{ page.resolved.hero.headline_accent }}</span>
20
+ </h1>
21
+ {% iftruthy page.resolved.hero.subheadline %}
22
+ <p class="fs-5 text-muted">
23
+ {{ page.resolved.hero.subheadline }}
24
+ </p>
25
+ {% endiftruthy %}
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </section>
30
+
31
+ <!-- Categories Grid -->
32
+ <section class="pt-4">
33
+ <div class="container">
34
+ {% comment %} Build unique categories list with post counts {% endcomment %}
35
+ {% assign categories = '' | split: ',' %}
36
+ {% assign category_counts = '' | split: ',' %}
37
+ {% for post in site.posts %}
38
+ {% for category in post.post.categories %}
39
+ {% assign category_fixed = category | uj_title_case %}
40
+ {% unless categories contains category_fixed %}
41
+ {% assign categories = categories | push: category_fixed %}
42
+ {% comment %} Count posts for this category {% endcomment %}
43
+ {% assign count = 0 %}
44
+ {% for p in site.posts %}
45
+ {% for c in p.post.categories %}
46
+ {% assign c_fixed = c | uj_title_case %}
47
+ {% if c_fixed == category_fixed %}
48
+ {% assign count = count | plus: 1 %}
49
+ {% break %}
50
+ {% endif %}
51
+ {% endfor %}
52
+ {% endfor %}
53
+ {% assign category_counts = category_counts | push: count %}
54
+ {% endunless %}
55
+ {% endfor %}
56
+ {% endfor %}
57
+
58
+ <div class="row g-4 mb-5">
59
+ {% for category in categories %}
60
+ <div class="col-xl-3 col-lg-4 col-md-6" data-lazy="@class animation-slide-up">
61
+ <a href="{{ site.url }}/blog/categories/{{ category | slugify }}" class="card h-100 shadow-sm border-0 text-decoration-none text-body hover-lift">
62
+ <div class="card-body text-center py-5">
63
+ <div class="mb-3">
64
+ {% uj_icon "folder", "fa-5xl text-primary" %}
65
+ </div>
66
+ <h2 class="h5 card-title mb-2">{{ category }}</h2>
67
+ <p class="text-muted mb-0">
68
+ {{ category_counts[forloop.index0] }} {{ category_counts[forloop.index0] | uj_pluralize: 'post', 'posts' }}
69
+ </p>
70
+ </div>
71
+ </a>
72
+ </div>
73
+ {% endfor %}
74
+ </div>
75
+
76
+ {% if categories.size == 0 %}
77
+ <div class="row justify-content-center">
78
+ <div class="col-lg-6 text-center" data-lazy="@class animation-slide-up">
79
+ <div class="py-5">
80
+ {% uj_icon "folder-open", "fa-4x text-muted mb-3" %}
81
+ <h2 class="h4 text-muted">No categories yet</h2>
82
+ <p class="text-muted">Check back soon for categorized content.</p>
83
+ <a href="{{ site.url }}/blog" class="btn btn-primary">
84
+ {% uj_icon "arrow-left", "me-2" %}
85
+ Back to Blog
86
+ </a>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ {% endif %}
91
+ </div>
92
+ </section>
93
+
94
+ {{ content | uj_content_format }}
@@ -83,9 +83,9 @@ newsletter_cta:
83
83
  <!-- Category Badge -->
84
84
  {% if post.post.categories[0] %}
85
85
  <div class="mb-2">
86
- <span class="badge bg-primary-soft text-primary">
86
+ <a href="{{ site.url }}/blog/categories/{{ post.post.categories[0] | slugify }}" class="badge bg-primary-soft text-primary text-decoration-none">
87
87
  {{ post.post.categories[0] | uj_title_case }}
88
- </span>
88
+ </a>
89
89
  </div>
90
90
  {% endif %}
91
91
 
@@ -221,11 +221,86 @@ newsletter_cta:
221
221
  </div>
222
222
 
223
223
  <!-- In-Feed Ad -->
224
- <div class="row justify-content-center">
224
+ <div class="row justify-content-center mb-5">
225
225
  <div class="col-12 col-lg-8" data-lazy="@class animation-slide-up">
226
226
  {% include modules/adunits/adsense.html type="in-feed" %}
227
227
  </div>
228
228
  </div>
229
+
230
+ <!-- Categories & Tags -->
231
+ {% comment %} Build unique categories list (max 10) {% endcomment %}
232
+ {% assign categories = '' | split: ',' %}
233
+ {% for post in site.posts %}
234
+ {% if categories.size >= 10 %}
235
+ {% break %}
236
+ {% endif %}
237
+ {% for category in post.post.categories %}
238
+ {% assign category_fixed = category | uj_title_case %}
239
+ {% unless categories contains category_fixed %}
240
+ {% assign categories = categories | push: category_fixed %}
241
+ {% endunless %}
242
+ {% endfor %}
243
+ {% endfor %}
244
+
245
+ {% comment %} Build unique tags list (max 10) {% endcomment %}
246
+ {% assign tags = '' | split: ',' %}
247
+ {% for post in site.posts %}
248
+ {% if tags.size >= 10 %}
249
+ {% break %}
250
+ {% endif %}
251
+ {% for tag in post.post.tags %}
252
+ {% assign tag_fixed = tag | uj_title_case %}
253
+ {% unless tags contains tag_fixed %}
254
+ {% assign tags = tags | push: tag_fixed %}
255
+ {% endunless %}
256
+ {% endfor %}
257
+ {% endfor %}
258
+
259
+ {% if categories.size > 0 or tags.size > 0 %}
260
+ <div class="row justify-content-center">
261
+ <div class="col-lg-10" data-lazy="@class animation-slide-up">
262
+ <!-- Categories -->
263
+ {% if categories.size > 0 %}
264
+ <div class="mb-5 text-center">
265
+ <h3 class="h5 mb-3">
266
+ {% uj_icon "folder", "me-2" %}
267
+ Categories
268
+ </h3>
269
+ <div>
270
+ {% for category in categories %}
271
+ <a href="{{ site.url }}/blog/categories/{{ category | slugify }}" class="badge bg-primary-soft text-primary text-decoration-none me-1 mb-2">
272
+ {{ category }}
273
+ </a>
274
+ {% endfor %}
275
+ <a href="{{ site.url }}/blog/categories" class="badge bg-body-tertiary text-muted text-decoration-none ms-1 mb-2">
276
+ View all {% uj_icon "arrow-right", "ms-1" %}
277
+ </a>
278
+ </div>
279
+ </div>
280
+ {% endif %}
281
+
282
+ <!-- Tags -->
283
+ {% if tags.size > 0 %}
284
+ <div class="text-center">
285
+ <h3 class="h5 mb-3">
286
+ {% uj_icon "tags", "me-2" %}
287
+ Tags
288
+ </h3>
289
+ <div>
290
+ {% for tag in tags %}
291
+ <a href="{{ site.url }}/blog/tags/{{ tag | slugify }}" class="badge bg-body-tertiary text-body text-decoration-none me-1 mb-2">
292
+ {{ tag }}
293
+ </a>
294
+ {% endfor %}
295
+ <a href="{{ site.url }}/blog/tags" class="badge bg-body-tertiary text-muted text-decoration-none ms-1 mb-2">
296
+ View all {% uj_icon "arrow-right", "ms-1" %}
297
+ </a>
298
+ </div>
299
+ </div>
300
+ {% endif %}
301
+ </div>
302
+ </div>
303
+ {% endif %}
229
304
  </div>
230
305
  </section>
231
306
 
@@ -110,7 +110,7 @@ newsletter:
110
110
  {% endunless %}
111
111
  {% endfor %}
112
112
  {% for tag in tags %}
113
- <a href="{{ site.url }}/blog?tag={{ tag }}" class="btn btn-adaptive btn-sm px-2 py-1 mb-2" style="font-size: 0.75rem;">{{ tag }}</a>
113
+ <a href="{{ site.url }}/blog/tags/{{ tag | slugify }}" class="btn btn-adaptive btn-sm px-2 py-1 mb-2" style="font-size: 0.75rem;">{% uj_icon "tag", "me-1" %}{{ tag }}</a>
114
114
  {% endfor %}
115
115
  </div>
116
116
  </div>
@@ -200,9 +200,9 @@ newsletter:
200
200
  <!-- Category Badge -->
201
201
  {% if post.post.categories[0] %}
202
202
  <div class="mb-2">
203
- <span class="badge bg-primary-soft text-primary">
203
+ <a href="{{ site.url }}/blog/categories/{{ post.post.categories[0] | slugify }}" class="badge bg-primary-soft text-primary text-decoration-none">
204
204
  {{ post.post.categories[0] | uj_title_case }}
205
- </span>
205
+ </a>
206
206
  </div>
207
207
  {% endif %}
208
208
 
@@ -0,0 +1,90 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/core/base
4
+
5
+ ### PAGE CONFIG ###
6
+ # Hero Section
7
+ hero:
8
+ headline: "Blog"
9
+ headline_accent: "tags"
10
+ subheadline: "Browse posts by tag"
11
+ ---
12
+
13
+ <!-- Hero Section -->
14
+ <section>
15
+ <div class="container">
16
+ <div class="row justify-content-center text-center">
17
+ <div class="col-lg-10" data-lazy="@class animation-slide-up">
18
+ <h1 class="h1 mb-3">
19
+ {{ page.resolved.hero.headline }} <span class="text-gradient-rainbow">{{ page.resolved.hero.headline_accent }}</span>
20
+ </h1>
21
+ {% iftruthy page.resolved.hero.subheadline %}
22
+ <p class="fs-5 text-muted">
23
+ {{ page.resolved.hero.subheadline }}
24
+ </p>
25
+ {% endiftruthy %}
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </section>
30
+
31
+ <!-- Tags Cloud -->
32
+ <section class="pt-4">
33
+ <div class="container">
34
+ {% comment %} Build unique tags list with post counts {% endcomment %}
35
+ {% assign tags = '' | split: ',' %}
36
+ {% assign tag_counts = '' | split: ',' %}
37
+ {% for post in site.posts %}
38
+ {% for tag in post.post.tags %}
39
+ {% assign tag_fixed = tag | uj_title_case %}
40
+ {% unless tags contains tag_fixed %}
41
+ {% assign tags = tags | push: tag_fixed %}
42
+ {% comment %} Count posts for this tag {% endcomment %}
43
+ {% assign count = 0 %}
44
+ {% for p in site.posts %}
45
+ {% for t in p.post.tags %}
46
+ {% assign t_fixed = t | uj_title_case %}
47
+ {% if t_fixed == tag_fixed %}
48
+ {% assign count = count | plus: 1 %}
49
+ {% break %}
50
+ {% endif %}
51
+ {% endfor %}
52
+ {% endfor %}
53
+ {% assign tag_counts = tag_counts | push: count %}
54
+ {% endunless %}
55
+ {% endfor %}
56
+ {% endfor %}
57
+
58
+ <div class="row justify-content-center mb-5">
59
+ <div class="col-lg-10">
60
+ <div class="d-flex flex-wrap gap-2 justify-content-center" data-lazy="@class animation-slide-up">
61
+ {% for tag in tags %}
62
+ <a href="{{ site.url }}/blog/tags/{{ tag | slugify }}" class="btn btn-adaptive px-3 py-2 d-inline-flex align-items-center gap-2">
63
+ {% uj_icon "tag", "fa-lg" %}
64
+ {{ tag }}
65
+ <span class="badge bg-primary rounded-pill">{{ tag_counts[forloop.index0] }}</span>
66
+ </a>
67
+ {% endfor %}
68
+ </div>
69
+ </div>
70
+ </div>
71
+
72
+ {% if tags.size == 0 %}
73
+ <div class="row justify-content-center">
74
+ <div class="col-lg-6 text-center" data-lazy="@class animation-slide-up">
75
+ <div class="py-5">
76
+ {% uj_icon "tags", "fa-4x text-muted mb-3" %}
77
+ <h2 class="h4 text-muted">No tags yet</h2>
78
+ <p class="text-muted">Check back soon for tagged content.</p>
79
+ <a href="{{ site.url }}/blog" class="btn btn-primary">
80
+ {% uj_icon "arrow-left", "me-2" %}
81
+ Back to Blog
82
+ </a>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ {% endif %}
87
+ </div>
88
+ </section>
89
+
90
+ {{ content | uj_content_format }}
@@ -0,0 +1,153 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: themes/[ site.theme.id ]/frontend/core/base
4
+ asset_path: blog/tags/tag
5
+
6
+ ### PAGE CONFIG ###
7
+ # Hero Section
8
+ hero:
9
+ subheadline: "Browse all posts with this tag"
10
+ ---
11
+
12
+ <!-- Hero Section -->
13
+ <section>
14
+ <div class="container">
15
+ <div class="row justify-content-center text-center">
16
+ <div class="col-lg-10" data-lazy="@class animation-slide-up">
17
+ <!-- Breadcrumb -->
18
+ <nav aria-label="breadcrumb" class="mb-3">
19
+ <ol class="breadcrumb justify-content-center mb-0">
20
+ <li class="breadcrumb-item">
21
+ <a href="{{ site.url }}/blog" class="text-decoration-none">Blog</a>
22
+ </li>
23
+ <li class="breadcrumb-item">
24
+ <a href="{{ site.url }}/blog/tags" class="text-decoration-none">Tags</a>
25
+ </li>
26
+ <li class="breadcrumb-item active" aria-current="page">{{ page.tag.name }}</li>
27
+ </ol>
28
+ </nav>
29
+
30
+ <h1 class="h1 mb-3">
31
+ {% uj_icon "tag", "fa-lg text-muted me-2" %}
32
+ {{ page.tag.name }}
33
+ </h1>
34
+ {% iftruthy page.resolved.hero.subheadline %}
35
+ <p class="fs-5 text-muted">
36
+ {{ page.resolved.hero.subheadline }}
37
+ </p>
38
+ {% endiftruthy %}
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </section>
43
+
44
+ <!-- Posts Grid -->
45
+ <section class="pt-4">
46
+ <div class="container">
47
+ {% comment %} Filter posts by tag (max 100) {% endcomment %}
48
+ {% assign tag_slug = page.tag.slug %}
49
+ {% assign filtered_posts = '' | split: ',' %}
50
+ {% for post in site.posts %}
51
+ {% if filtered_posts.size >= 100 %}
52
+ {% break %}
53
+ {% endif %}
54
+ {% for tag in post.post.tags %}
55
+ {% assign t_slug = tag | slugify %}
56
+ {% if t_slug == tag_slug %}
57
+ {% assign filtered_posts = filtered_posts | push: post %}
58
+ {% break %}
59
+ {% endif %}
60
+ {% endfor %}
61
+ {% endfor %}
62
+
63
+ <div class="row g-4 mb-5">
64
+ {% for post in filtered_posts %}
65
+ <div class="col-xl-4 col-lg-6 col-md-12" data-lazy="@class animation-slide-up">
66
+ <article class="card h-100 shadow-sm border-0">
67
+ <!-- Image -->
68
+ <a href="{{ site.url }}{{ post.url }}" class="text-decoration-none d-block p-3 pb-0">
69
+ {%- uj_post post.post.id, "image-tag", class="img-fluid object-fit-cover blog-post-card-image rounded-3" -%}
70
+ </a>
71
+
72
+ <!-- Card Body -->
73
+ <div class="card-body d-flex flex-column">
74
+ <!-- Category Badge -->
75
+ {% if post.post.categories[0] %}
76
+ <div class="mb-2">
77
+ <span class="badge bg-primary-soft text-primary">
78
+ {{ post.post.categories[0] | uj_title_case }}
79
+ </span>
80
+ </div>
81
+ {% endif %}
82
+
83
+ <!-- Title -->
84
+ <h3 class="h5 card-title mb-0">
85
+ <a href="{{ site.url }}{{ post.url }}" class="text-decoration-none text-body">
86
+ {{ post.post.title }}
87
+ </a>
88
+ </h3>
89
+ </div>
90
+
91
+ <!-- Card Footer -->
92
+ <div class="card-footer bg-transparent border-0 pt-0 pb-3">
93
+ <div class="d-flex align-items-center justify-content-between small">
94
+ <!-- Left side: Author and Date -->
95
+ <div class="d-flex align-items-center">
96
+ <!-- Author Avatar -->
97
+ <a href="{%- uj_member post.post.author, "url" -%}" class="text-decoration-none me-2 position-relative z-1">
98
+ <div class="avatar avatar-md">
99
+ {%- uj_member post.post.author, "image-tag", class="rounded-circle" -%}
100
+ </div>
101
+ </a>
102
+
103
+ <!-- Author Name and Date stacked -->
104
+ <div>
105
+ <a href="{%- uj_member post.post.author, "url" -%}" class="text-decoration-none text-body fw-semibold position-relative z-1 d-block">
106
+ {%- uj_member post.post.author, "name" -%}
107
+ </a>
108
+ <time datetime="{{ post.date | date_to_xmlschema }}" class="text-muted">
109
+ {{ post.date | date: "%b %d, %Y" }}
110
+ </time>
111
+ </div>
112
+ </div>
113
+
114
+ <!-- Right side: Read time -->
115
+ <div class="text-muted">
116
+ {% uj_readtime post.content %} min read
117
+ </div>
118
+ </div>
119
+ </div>
120
+ </article>
121
+ </div>
122
+ {% endfor %}
123
+ </div>
124
+
125
+ {% if filtered_posts.size == 0 %}
126
+ <div class="row justify-content-center">
127
+ <div class="col-lg-6 text-center" data-lazy="@class animation-slide-up">
128
+ <div class="py-5">
129
+ {% uj_icon "file-lines", "fa-4x text-muted mb-3" %}
130
+ <h2 class="h4 text-muted">No posts with this tag</h2>
131
+ <p class="text-muted">Check back soon for new content.</p>
132
+ <a href="{{ site.url }}/blog/tags" class="btn btn-primary">
133
+ {% uj_icon "arrow-left", "me-2" %}
134
+ All Tags
135
+ </a>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ {% endif %}
140
+
141
+ <!-- Back to Tags -->
142
+ <div class="row justify-content-center">
143
+ <div class="col-12 text-center" data-lazy="@class animation-slide-up">
144
+ <a href="{{ site.url }}/blog/tags" class="btn btn-outline-adaptive">
145
+ {% uj_icon "arrow-left", "me-2" %}
146
+ All Tags
147
+ </a>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ </section>
152
+
153
+ {{ content | uj_content_format }}
@@ -346,16 +346,24 @@ cta:
346
346
  {% capture hero_cta_buttons %}
347
347
  {% assign primary_btn_class = page.resolved.hero.primary_button.class | default: "btn-adaptive" %}
348
348
  {% assign secondary_btn_class = page.resolved.hero.secondary_button.class | default: "btn-outline-adaptive" %}
349
- <div class="d-flex flex-row flex-wrap gap-3 justify-content-center {% if is_side_layout %}justify-content-lg-start{% endif %}">
350
- <a href="{{ page.resolved.hero.primary_button.href }}" class="btn {{ primary_btn_class }} btn-lg py-3 {% if is_side_layout %}px-4{% else %}px-5{% endif %}">
351
- {% uj_icon page.resolved.hero.primary_button.icon, "me-2" %}
352
- {{ page.resolved.hero.primary_button.text }}
353
- </a>
354
- <a href="{{ page.resolved.hero.secondary_button.href }}" class="btn {{ secondary_btn_class }} btn-lg py-3 {% if is_side_layout %}px-4{% else %}px-5{% endif %}">
355
- {% uj_icon page.resolved.hero.secondary_button.icon, "me-2" %}
356
- {{ page.resolved.hero.secondary_button.text }}
357
- </a>
358
- </div>
349
+ {% assign show_primary = page.resolved.hero.primary_button.enabled | default: true %}
350
+ {% assign show_secondary = page.resolved.hero.secondary_button.enabled | default: true %}
351
+ {% if show_primary or show_secondary %}
352
+ <div class="d-flex flex-row flex-wrap gap-3 justify-content-center {% if is_side_layout %}justify-content-lg-start{% endif %}">
353
+ {% if show_primary %}
354
+ <a href="{{ page.resolved.hero.primary_button.href }}" class="btn {{ primary_btn_class }} btn-lg py-3 {% if is_side_layout %}px-4{% else %}px-5{% endif %}">
355
+ {% uj_icon page.resolved.hero.primary_button.icon, "me-2" %}
356
+ {{ page.resolved.hero.primary_button.text }}
357
+ </a>
358
+ {% endif %}
359
+ {% if show_secondary %}
360
+ <a href="{{ page.resolved.hero.secondary_button.href }}" class="btn {{ secondary_btn_class }} btn-lg py-3 {% if is_side_layout %}px-4{% else %}px-5{% endif %}">
361
+ {% uj_icon page.resolved.hero.secondary_button.icon, "me-2" %}
362
+ {{ page.resolved.hero.secondary_button.text }}
363
+ </a>
364
+ {% endif %}
365
+ </div>
366
+ {% endif %}
359
367
  {% endcapture %}
360
368
 
361
369
  <section class="bg-gradient-rainbow gradient-animated gradient-grain text-light overflow-hidden position-relative min-vh-80 d-flex align-items-center rounded-bottom-4 shadow-lg">
@@ -0,0 +1,7 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: blueprint/blog/categories/index
4
+ permalink: /blog/categories
5
+
6
+ ### REGULAR PAGES ###
7
+ ---
@@ -0,0 +1,7 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: blueprint/blog/tags/index
4
+ permalink: /blog/tags
5
+
6
+ ### REGULAR PAGES ###
7
+ ---
@@ -2916,3 +2916,87 @@
2916
2916
  [debug] [2025-12-09T08:38:54.682Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2917
2917
  [debug] [2025-12-09T08:38:54.683Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2918
2918
  [debug] [2025-12-09T08:38:54.683Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2919
+ [debug] [2025-12-09T18:08:08.614Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2920
+ [debug] [2025-12-09T18:08:08.624Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2921
+ [debug] [2025-12-09T18:08:08.616Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2922
+ [debug] [2025-12-09T18:08:08.617Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2923
+ [debug] [2025-12-09T18:08:08.617Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2924
+ [debug] [2025-12-09T18:08:08.626Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2925
+ [debug] [2025-12-09T18:08:08.626Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2926
+ [debug] [2025-12-09T18:08:08.626Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2927
+ [debug] [2025-12-09T18:08:08.626Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2928
+ [debug] [2025-12-09T18:08:08.626Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2929
+ [debug] [2025-12-09T18:08:08.635Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2930
+ [debug] [2025-12-09T18:08:08.636Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2931
+ [debug] [2025-12-09T18:08:08.680Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2932
+ [debug] [2025-12-09T18:08:08.680Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2933
+ [debug] [2025-12-09T18:08:08.682Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2934
+ [debug] [2025-12-09T18:08:08.683Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2935
+ [debug] [2025-12-09T18:08:08.685Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2936
+ [debug] [2025-12-09T18:08:08.685Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2937
+ [debug] [2025-12-09T18:08:08.685Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2938
+ [debug] [2025-12-09T18:08:08.685Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2939
+ [debug] [2025-12-09T18:08:08.688Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2940
+ [debug] [2025-12-09T18:08:08.688Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2941
+ [debug] [2025-12-09T18:08:08.689Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2942
+ [debug] [2025-12-09T18:08:08.690Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2943
+ [debug] [2025-12-09T18:08:08.692Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2944
+ [debug] [2025-12-09T18:08:08.692Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2945
+ [debug] [2025-12-09T18:08:08.693Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2946
+ [debug] [2025-12-09T18:08:08.693Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2947
+ [debug] [2025-12-09T18:31:46.511Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2948
+ [debug] [2025-12-09T18:31:46.511Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2949
+ [debug] [2025-12-09T18:31:46.513Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2950
+ [debug] [2025-12-09T18:31:46.513Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2951
+ [debug] [2025-12-09T18:31:46.514Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2952
+ [debug] [2025-12-09T18:31:46.525Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2953
+ [debug] [2025-12-09T18:31:46.525Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2954
+ [debug] [2025-12-09T18:31:46.513Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2955
+ [debug] [2025-12-09T18:31:46.513Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2956
+ [debug] [2025-12-09T18:31:46.514Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2957
+ [debug] [2025-12-09T18:31:46.525Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2958
+ [debug] [2025-12-09T18:31:46.525Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2959
+ [debug] [2025-12-09T18:31:46.587Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2960
+ [debug] [2025-12-09T18:31:46.591Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2961
+ [debug] [2025-12-09T18:31:46.587Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2962
+ [debug] [2025-12-09T18:31:46.588Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2963
+ [debug] [2025-12-09T18:31:46.589Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2964
+ [debug] [2025-12-09T18:31:46.591Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2965
+ [debug] [2025-12-09T18:31:46.591Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2966
+ [debug] [2025-12-09T18:31:46.591Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2967
+ [debug] [2025-12-09T18:31:46.591Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2968
+ [debug] [2025-12-09T18:31:46.591Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2969
+ [debug] [2025-12-09T18:31:46.592Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2970
+ [debug] [2025-12-09T18:31:46.592Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2971
+ [debug] [2025-12-09T18:31:46.594Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2972
+ [debug] [2025-12-09T18:31:46.594Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2973
+ [debug] [2025-12-09T18:31:46.596Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2974
+ [debug] [2025-12-09T18:31:46.596Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2975
+ [debug] [2025-12-09T23:53:06.326Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2976
+ [debug] [2025-12-09T23:53:06.326Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2977
+ [debug] [2025-12-09T23:53:06.330Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2978
+ [debug] [2025-12-09T23:53:06.330Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2979
+ [debug] [2025-12-09T23:53:06.330Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2980
+ [debug] [2025-12-09T23:53:06.346Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2981
+ [debug] [2025-12-09T23:53:06.346Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2982
+ [debug] [2025-12-09T23:53:06.330Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2983
+ [debug] [2025-12-09T23:53:06.330Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2984
+ [debug] [2025-12-09T23:53:06.330Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2985
+ [debug] [2025-12-09T23:53:06.346Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2986
+ [debug] [2025-12-09T23:53:06.347Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2987
+ [debug] [2025-12-09T23:53:06.447Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2988
+ [debug] [2025-12-09T23:53:06.459Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2989
+ [debug] [2025-12-09T23:53:06.448Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2990
+ [debug] [2025-12-09T23:53:06.454Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2991
+ [debug] [2025-12-09T23:53:06.455Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2992
+ [debug] [2025-12-09T23:53:06.459Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2993
+ [debug] [2025-12-09T23:53:06.459Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2994
+ [debug] [2025-12-09T23:53:06.459Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2995
+ [debug] [2025-12-09T23:53:06.459Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2996
+ [debug] [2025-12-09T23:53:06.459Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2997
+ [debug] [2025-12-09T23:53:06.462Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
2998
+ [debug] [2025-12-09T23:53:06.462Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
2999
+ [debug] [2025-12-09T23:53:06.464Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
3000
+ [debug] [2025-12-09T23:53:06.464Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
3001
+ [debug] [2025-12-09T23:53:06.464Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
3002
+ [debug] [2025-12-09T23:53:06.464Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultimate-jekyll-manager",
3
- "version": "0.0.146",
3
+ "version": "0.0.148",
4
4
  "description": "Ultimate Jekyll dependency manager",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -1,30 +0,0 @@
1
- /**
2
- * Updates Listing Page JavaScript
3
- */
4
-
5
- let webManager = null;
6
-
7
- // Module
8
- export default (Manager) => {
9
- return new Promise(async function (resolve) {
10
- // Shortcuts
11
- webManager = Manager.webManager;
12
-
13
- // Initialize when DOM is ready
14
- await webManager.dom().ready();
15
-
16
- // Track page view
17
- trackUpdatesPageView();
18
-
19
- // Resolve after initialization
20
- return resolve();
21
- });
22
- };
23
-
24
- // Tracking functions
25
- function trackUpdatesPageView() {
26
- gtag('event', 'page_view', {
27
- page_title: 'Updates',
28
- content_group: 'updates'
29
- });
30
- }
@@ -1,34 +0,0 @@
1
- /**
2
- * Individual Update Page JavaScript
3
- */
4
-
5
- let webManager = null;
6
-
7
- // Module
8
- export default (Manager) => {
9
- return new Promise(async function (resolve) {
10
- // Shortcuts
11
- webManager = Manager.webManager;
12
-
13
- // Initialize when DOM is ready
14
- await webManager.dom().ready();
15
-
16
- // Track update view
17
- trackUpdateView();
18
-
19
- // Resolve after initialization
20
- return resolve();
21
- });
22
- };
23
-
24
- // Tracking functions
25
- function trackUpdateView() {
26
- // Get version from URL or page data
27
- const version = window.location.pathname.split('/').pop();
28
-
29
- gtag('event', 'view_item', {
30
- item_id: version,
31
- item_name: `Version ${version}`,
32
- item_category: 'update'
33
- });
34
- }