bible270 1.14.0 → 1.15.0

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: a7672c35f3d2c4bc89dbc2451b056ddb7117b8b74a1f3a5af5a7e437b4210f63
4
- data.tar.gz: 80c28cef80f5f9dd65b8075a0c1927042883dcd59a600cad1d6971afb3600771
3
+ metadata.gz: a682ef9e0099682fb05d4fcde854169ba1f47add452ac6adef9da455680fa801
4
+ data.tar.gz: 3c3eb36fb2bab664ce3e2c0891ab5d770afd47c69fdb1e0b5fd8f8eb61e1e83a
5
5
  SHA512:
6
- metadata.gz: b1dd804592bee6fd8970eb5db8f7f622f0e9d67c8111a51e4d945ef9ab60c2c5ca65c865e65bb4d21e03ac6501a013f79965f0fd8088da2d45ab5222c42d29cc
7
- data.tar.gz: 162519e4093c163e48d0f9e120960746646f1f84fef816bfb32302cac8f483dd555dbe96d7deec7c43808812466155da458d50f8ad1ceb5d12d005bc9257ef17
6
+ metadata.gz: 120ef747f43ba910288881479331892daf84cdeac530786666632b652c7354267ceda0b2d82094d7fae359e3e80cf1bf76c6a03918955795b5a87fdc249cf5e9
7
+ data.tar.gz: 4b21a0e51b306daa5c8e39d7b248ac15d09f4b16db8abbc471c338f1f41736d46c1705bb55c010b575170b519e3607d780f2c710938f6b4fc9f8b885a71ab988
data/CHANGELOG.md CHANGED
@@ -6,11 +6,20 @@ Notable changes, following [Keep a Changelog](https://keepachangelog.com/en/1.1.
6
6
 
7
7
  ### Added
8
8
 
9
- - add a session-only **View as non-admin** toggle to Admin; hide admin-only details and disable admin actions while retaining the Admin tab to switch back
9
+ - show a compact progress bar and completed-day count beside each Community reader for signed-in users, including non-admin preview; retain alphabetical order and restrict management links and schedule status to admins
10
+ - use muted, theme-matched Community progress colors, including warm tan for Cedar, with distinct fills and tracks
11
+ - mark today with a thin line in Community progress bars using each reader's active schedule, with a tooltip and accessible day description
12
+
13
+ ## [1.14.0] - 2026-11-06
14
+
15
+ ### Added
16
+
17
+ - add a session-only **View as non-admin** toggle; hide admin-only details and disable admin actions while retaining the Admin tab to switch back. Own check-offs and reflections still work; roles and other sessions are unchanged.
10
18
 
11
19
  ### Changed
12
20
 
13
21
  - shorten the consistency explanation and show it only when sorting by Consistency ranking; keep reader consistency details on every sort
22
+ - align both view-toggle buttons to the right of the Admin label on the same row
14
23
  - shorten the README and changelog while retaining setup instructions, upgrade warnings, and release links
15
24
 
16
25
  ## [1.13.5] - 2026-11-02
@@ -796,7 +805,8 @@ This is the initial public release.
796
805
 
797
806
  - Email sign-in requires working Action Mailer delivery in the host application. Set `config.mailer_from`; delivery is inline by default, or set `email_sign_in_deliver_later` when a queue backend is available.
798
807
 
799
- [Unreleased]: https://github.com/avonderluft/bible270/compare/v1.13.5...main
808
+ [Unreleased]: https://github.com/avonderluft/bible270/compare/v1.14.0...main
809
+ [1.14.0]: https://github.com/avonderluft/bible270/compare/v1.13.5...v1.14.0
800
810
  [1.13.5]: https://github.com/avonderluft/bible270/compare/v1.13.3...v1.13.5
801
811
  [1.13.3]: https://github.com/avonderluft/bible270/compare/v1.13.2...v1.13.3
802
812
  [1.13.2]: https://github.com/avonderluft/bible270/compare/v1.13.1...v1.13.2
data/README.md CHANGED
@@ -22,6 +22,8 @@ The Old Testament and Revelation 22 finish on day 270 alongside Psalm 1. Daily r
22
22
 
23
23
  `Bible270::Plan` generates the schedule deterministically from `Bible270::Versification`; the schedule is not stored in the database. **Progress and reflections are public.**
24
24
 
25
+ Signed-in readers see a small progress bar and completed-day count on Community, including in non-admin preview. The list stays alphabetical; only fully completed days count. A thin line marks today on each reader's active schedule; undated, future, and ended schedules have no marker. Visitors see names and join dates; management links and written ahead/behind status remain admin-only.
26
+
25
27
  ## Requirements
26
28
 
27
29
  - **Ruby >= 3.2** and a **Rails >= 7.2** host app. CI covers selected combinations through Ruby 4.0 / Rails 8.1; check your host's dependencies before upgrading Ruby.
@@ -8,7 +8,10 @@ module Bible270
8
8
  @readers = Reader.with_avatar.to_a.sort_by(&:sort_name)
9
9
  @today_day = current_reader&.today_day
10
10
  @show_admin_progress = b270_admin_view?
11
- @days_completed = Reader.completed_days_by_id if @show_admin_progress
11
+ return unless signed_in?
12
+
13
+ @days_completed = Reader.completed_days_by_id
14
+ @reader_today_days = community_today_days
12
15
  end
13
16
 
14
17
  # The reader's own progress. Deliberately open to visitors: the panel shows an
@@ -46,6 +49,17 @@ module Bible270
46
49
 
47
50
  private
48
51
 
52
+ def community_today_days
53
+ # Resolve the shared schedule once, not with a settings query for every reader.
54
+ shared_start = Setting.run_start_date
55
+ today = Bible270.today
56
+ @readers.to_h do |reader|
57
+ start = (Bible270.config.allow_reader_start_date && reader.started_on) || shared_start
58
+ day = Plan.day_for(today, start, clamp: false)
59
+ [reader.id, day && Plan.valid_day?(day) ? day : nil]
60
+ end
61
+ end
62
+
49
63
  def recent_reflections(reader, limit:)
50
64
  comments = reader.comments.recent.with_thread_details.limit(limit).to_a
51
65
  ids = comments.map(&:id)
@@ -8,15 +8,34 @@
8
8
  <% @readers.each do |r| %>
9
9
  <div class="b270-li">
10
10
  <%= link_to b270_avatar(r, size: 72), reader_path(r), "aria-label": r.display_name %>
11
- <div>
11
+ <div class="b270-community-reader-details">
12
12
  <div class="name"><%= link_to r.display_name, reader_path(r), style: "text-decoration:none" %></div>
13
- <div class="sub">
14
- joined <%= Bible270.local_time(r.created_at).strftime("%b %-d %Y") %><% if @show_admin_progress %>
15
- · <%= link_to "#{@days_completed[r.id]} of #{Bible270::Plan::DAYS} days complete",
16
- admin_reader_path(r), class: "b270-admin-progress" %>
17
- · <%= r.progress_status(completed_days: @days_completed[r.id].to_i) %>
13
+ <div class="sub">joined <%= Bible270.local_time(r.created_at).strftime("%b %-d %Y") %></div>
14
+ <% if @days_completed %>
15
+ <% completed = @days_completed[r.id].to_i %>
16
+ <% today_day = @reader_today_days[r.id] %>
17
+ <div class="b270-reader-progress">
18
+ <div class="b270-bar" role="progressbar" aria-label="<%= r.display_name %>: reading progress"
19
+ aria-valuemin="0" aria-valuemax="<%= Bible270::Plan::DAYS %>" aria-valuenow="<%= completed %>"
20
+ aria-valuetext="<%= completed %> of <%= Bible270::Plan::DAYS %> days complete<%= "; today is day #{today_day}" if today_day %>"
21
+ title="<%= "Today: day #{today_day} of #{Bible270::Plan::DAYS}" if today_day %>">
22
+ <i style="width:<%= completed.fdiv(Bible270::Plan::DAYS) * 100 %>%"></i>
23
+ <% if today_day %>
24
+ <span class="b270-progress-today" aria-hidden="true"
25
+ style="left:clamp(0px, <%= today_day.fdiv(Bible270::Plan::DAYS) * 100 %>%, calc(100% - 1px))"></span>
26
+ <% end %>
27
+ </div>
28
+ <% if @show_admin_progress %>
29
+ <%= link_to "#{completed} / #{Bible270::Plan::DAYS} days", admin_reader_path(r),
30
+ class: "b270-reader-progress-count b270-admin-progress" %>
31
+ <% else %>
32
+ <span class="b270-reader-progress-count"><%= completed %> / <%= Bible270::Plan::DAYS %> days</span>
33
+ <% end %>
34
+ </div>
35
+ <% if @show_admin_progress %>
36
+ <div class="sub b270-community-status"><%= r.progress_status(completed_days: completed) %></div>
18
37
  <% end %>
19
- </div>
38
+ <% end %>
20
39
  </div>
21
40
  </div>
22
41
  <% end %>
@@ -10,6 +10,7 @@
10
10
  --button-surface:#231f18; --button-ink:#ece6da;
11
11
  --teal-fill:#2f6a67; --oxblood-fill:#8a2f3b; --gold-fill:#80631d;
12
12
  --teal-mark:#2f6a67; --oxblood-mark:#8a2f3b; --gold-mark:#80631d;
13
+ --community-progress-fill:#897755;
13
14
  --alert-surface:#f6e4e2; --alert-ink:#7a2b28; --alert-line:#e6c3bf;
14
15
  --notice-surface:#e7efe6; --notice-ink:#2f5d34; --notice-line:#c6dcc6;
15
16
  color-scheme:light;
@@ -41,6 +42,7 @@
41
42
  --button-surface:#29382d; --button-ink:#edf0e9;
42
43
  --teal-fill:#356b60; --oxblood-fill:#905466; --gold-fill:#776023;
43
44
  --teal-mark:#356b60; --oxblood-mark:#905466; --gold-mark:#776023;
45
+ --community-progress-fill:#71826b;
44
46
  --alert-surface:#f5e7e9; --alert-ink:#783f4c; --alert-line:#d9b7c0;
45
47
  --notice-surface:#e3eee0; --notice-ink:#375b37; --notice-line:#b8d1b1;
46
48
  }
@@ -56,6 +58,7 @@
56
58
  --button-surface:#293746; --button-ink:#ecf0f5;
57
59
  --teal-fill:#316977; --oxblood-fill:#86566f; --gold-fill:#7b602b;
58
60
  --teal-mark:#316977; --oxblood-mark:#86566f; --gold-mark:#7b602b;
61
+ --community-progress-fill:#718398;
59
62
  --alert-surface:#f3e7ee; --alert-ink:#754357; --alert-line:#d7bbc9;
60
63
  --notice-surface:#e3eeea; --notice-ink:#355c50; --notice-line:#b7d0c7;
61
64
  }
@@ -72,6 +75,7 @@
72
75
  --button-surface:#201c12; --button-ink:#ded8c5;
73
76
  --teal-fill:#2f5955; --oxblood-fill:#702731; --gold-fill:#695116;
74
77
  --teal-mark:#409594; --oxblood-mark:#a73d50; --gold-mark:#b18b2b;
78
+ --community-progress-fill:#a38d68;
75
79
  --alert-surface:#42282a; --alert-ink:#ffc0b8; --alert-line:#a66d68;
76
80
  --notice-surface:#25382a; --notice-ink:#b6dfb6; --notice-line:#6d956e;
77
81
  }
@@ -88,6 +92,7 @@
88
92
  --button-surface:#102219; --button-ink:#e3e7d5;
89
93
  --teal-fill:#28554b; --oxblood-fill:#6a2c3c; --gold-fill:#62501e;
90
94
  --teal-mark:#4d9d89; --oxblood-mark:#c46c7f; --gold-mark:#b79b45;
95
+ --community-progress-fill:#7e9a7a;
91
96
  --alert-surface:#3e282c; --alert-ink:#ffc1c2; --alert-line:#a87479;
92
97
  --notice-surface:#243b2b; --notice-ink:#c1e2b9; --notice-line:#779c70;
93
98
  }
@@ -104,6 +109,7 @@
104
109
  --button-surface:#0c1829; --button-ink:#e0e7ef;
105
110
  --teal-fill:#245363; --oxblood-fill:#622d49; --gold-fill:#5d4c25;
106
111
  --teal-mark:#4c9eae; --oxblood-mark:#b86382; --gold-mark:#b59a54;
112
+ --community-progress-fill:#8195ad;
107
113
  --alert-surface:#3b2432; --alert-ink:#ffc0cd; --alert-line:#a66c80;
108
114
  --notice-surface:#1e3430; --notice-ink:#b7decc; --notice-line:#6b9787;
109
115
  }
@@ -121,6 +127,7 @@
121
127
  --button-surface:#201c12; --button-ink:#ded8c5;
122
128
  --teal-fill:#2f5955; --oxblood-fill:#702731; --gold-fill:#695116;
123
129
  --teal-mark:#409594; --oxblood-mark:#a73d50; --gold-mark:#b18b2b;
130
+ --community-progress-fill:#a38d68;
124
131
  --alert-surface:#42282a; --alert-ink:#ffc0b8; --alert-line:#a66d68;
125
132
  --notice-surface:#25382a; --notice-ink:#b6dfb6; --notice-line:#6d956e;
126
133
  }
@@ -563,6 +570,13 @@
563
570
  .b270-li+.b270-li{border-top:1px solid var(--line-soft)}
564
571
  .b270-li .name{font-weight:600}
565
572
  .b270-li .sub{font-size:12.5px;color:var(--faint)}
573
+ .b270-community-reader-details{flex:1;min-width:0;overflow-wrap:anywhere}
574
+ .b270-reader-progress{display:flex;align-items:center;gap:8px;max-width:280px;margin-top:6px;flex-wrap:wrap}
575
+ .b270-reader-progress .b270-bar{position:relative;flex:1 1 80px;min-width:0}
576
+ .b270-reader-progress .b270-bar>i{background:var(--community-progress-fill)}
577
+ .b270-progress-today{position:absolute;top:0;bottom:0;width:1px;background:var(--ink);box-shadow:0 0 0 1px var(--card);pointer-events:none}
578
+ .b270 .b270-reader-progress-count{font-size:12px;font-variant-numeric:tabular-nums;color:var(--muted);white-space:nowrap}
579
+ .b270-community-status{margin-top:3px}
566
580
  .b270-li .b270-admin-progress{text-decoration:none}
567
581
  .b270-li .b270-admin-progress:hover,.b270-li .b270-admin-progress:focus-visible{color:var(--gold)}
568
582
  .b270-li .stat{margin-left:auto;text-align:right}
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bible270
4
- VERSION = '1.14.0'
4
+ VERSION = '1.15.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bible270
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew vonderLuft