pandorga 1.6.0 → 1.6.1

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: 2bb5b2e689bf56f24930270b0f6dff89d91674594b67267a7e971a96252f1ac1
4
- data.tar.gz: f5ded06e9a148e5095437afae98852a63aaf994737e38a91c5b5c9d4f6a9ada9
3
+ metadata.gz: 5686edc300ca78ccb310e5f59909212720c54656998508c697f56e2689e4c21b
4
+ data.tar.gz: 8b6a24524c80d7e9917c784d6230016406fc5e2791f5349ca09aa509ef650fd3
5
5
  SHA512:
6
- metadata.gz: 0e18926a06e09cab67eea5ff3df47893e70abda71e2dad6ef7686f64a69f2b0d7527a65efe4069ec55342c51f6d7aa86cbb47f5005ded2650a1abe7c9ef55724
7
- data.tar.gz: fda5ff032a0dcf24995bdfa280b80e3b2470c2e8e5bf455cfbbcac149df30d02637fd69e947562c0c7fe1f09a0834ae15dd6976c15411e92dea5a9a95dca2d00
6
+ metadata.gz: c649b33b2fa0afdc8f93c3558a9e07ba8d56f18e4dff63064d9eecdca0701587c7d64fcb030ddcfc51f71f6169ba3ef8745e1c555ad8cbcc10215baf7a82d81a
7
+ data.tar.gz: 79ad62fc9e7cfca6a70416fed7865ce1a4c70be646c05262ad2fe37579f4281b0ad4eaf1a5732b8fb70879c2269759b566750a6b49ee7e4f6dda19f36e282195
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.6.1] — 2026-10-10
4
+
5
+ ### Fixed
6
+
7
+ - The articles featured slot reserved 16rem whenever it was empty, so page 2
8
+ and later kept a blank band between the header rule and the filter. The
9
+ reserve now lasts only until the listing decides. A page with no specimen
10
+ collapses that slot.
11
+
12
+ No `pandorga:` config keys were added or renamed.
13
+
3
14
  ## [1.6.0] — 2026-10-10
4
15
 
5
16
  ### Added
@@ -30,7 +30,16 @@ layout: shell
30
30
  image column, and one that reserves space for a picture that does not
31
31
  exist is worse than no panel at all.
32
32
  {%- endcomment -%}
33
- <div id="articles-lead"></div>
33
+ <div id="articles-lead" class="is-pending"></div>
34
+ <script>
35
+ (function () {
36
+ var page = parseInt(new URLSearchParams(window.location.search).get('page') || '1', 10);
37
+ var lead = document.getElementById('articles-lead');
38
+ if (!lead || !(page > 1)) return;
39
+ lead.classList.remove('is-pending');
40
+ lead.hidden = true;
41
+ })();
42
+ </script>
34
43
 
35
44
  <div class="writing-body">
36
45
 
@@ -259,7 +268,11 @@ layout: shell
259
268
  function renderListing(state) {
260
269
  Array.from(grid.querySelectorAll('[data-dynamic-article]')).forEach(function (el) { el.remove(); });
261
270
  if (emptyState) emptyState.remove();
262
- if (leadRoot) leadRoot.innerHTML = '';
271
+ if (leadRoot) {
272
+ leadRoot.classList.remove('is-pending');
273
+ leadRoot.innerHTML = '';
274
+ leadRoot.hidden = true;
275
+ }
263
276
 
264
277
  var visible = visibleArticles(state);
265
278
  if (orderNote) orderNote.textContent = SORT_LABELS[state.sort] || SORT_LABELS.updated;
@@ -287,7 +300,10 @@ layout: shell
287
300
 
288
301
  var totalPages = Math.max(1, Math.ceil(rest.length / perPage));
289
302
  if (currentPage > totalPages) currentPage = totalPages;
290
- if (currentPage === 1) renderLead(featured);
303
+ if (currentPage === 1) {
304
+ renderLead(featured);
305
+ if (leadRoot && leadRoot.childElementCount) leadRoot.hidden = false;
306
+ }
291
307
 
292
308
  rest.slice((currentPage - 1) * perPage, currentPage * perPage).forEach(renderRow);
293
309
  listing.renderPagination(controls, currentPage, totalPages);
@@ -297,7 +297,10 @@ html[data-theme="light"] .writing-index .writing-lead-media .ledger-poster {
297
297
  background: var(--color-surface-card);
298
298
  }
299
299
 
300
- #articles-lead:empty {
300
+ /* Hold the featured panel only until the listing decides. A standing
301
+ :empty rule kept this 16rem gap on page 2 and later, where no specimen
302
+ is drawn, between the header rule and the filter. */
303
+ #articles-lead.is-pending:empty {
301
304
  min-height: 16rem;
302
305
  margin-bottom: var(--space-xl);
303
306
  }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pandorga
4
- VERSION = "1.6.0"
4
+ VERSION = "1.6.1"
5
5
  end
@@ -45,7 +45,11 @@ fail!("tagline is not body size") unless tagline.include?("font-size: var(--type
45
45
  fail!("hero summary has no reserved box") unless home_css.include?(".home-hero-summary:empty")
46
46
 
47
47
  fail!("articles listing has no row reserve") unless articles.include?("writing-reserve-row")
48
- fail!("articles lead has no reserved box") unless writing_css.include?("#articles-lead:empty")
48
+ fail!("articles lead has no reserved box") unless writing_css.include?("#articles-lead.is-pending:empty")
49
+ fail!("articles lead reserve stays after the listing decides") if writing_css.match?(/^#articles-lead:empty/m)
50
+ fail!("articles lead is not pending until the listing decides") unless articles.include?('id="articles-lead" class="is-pending"')
51
+ fail!("page 2 does not drop the lead reserve before paint") unless articles.include?("!(page > 1)")
52
+ fail!("listing never clears the lead reserve") unless articles.include?("leadRoot.classList.remove('is-pending')")
49
53
  fail!("CV experience has no reserve") unless cv.include?('id="cv-experience-list"') && cv.include?("data-content-reserve")
50
54
  fail!("CV summary still ships Loading...") if cv.include?("Loading...")
51
55
  fail!("showLoadingState collapses a reserve") unless listing.include?("data-content-reserve")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pandorga
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Pandorga contributors