bible270 0.18.2 → 0.19.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 +4 -4
- data/CHANGELOG.md +15 -1
- data/Rakefile +10 -0
- data/app/controllers/bible270/profiles_controller.rb +0 -4
- data/app/models/bible270/comment.rb +3 -3
- data/app/models/bible270/reader.rb +0 -7
- data/app/views/bible270/notice_mailer/mentioned.html.erb +0 -1
- data/app/views/bible270/notice_mailer/mentioned.text.erb +1 -2
- data/app/views/bible270/profiles/edit.html.erb +3 -7
- data/app/views/bible270/readers/index.html.erb +2 -2
- data/app/views/bible270/readers/progress.html.erb +3 -3
- data/app/views/bible270/shared/_header.html.erb +14 -17
- data/app/views/bible270/shared/_nav_links.html.erb +15 -0
- data/app/views/bible270/shared/_progress.html.erb +3 -3
- data/app/views/bible270/shared/_styles.html.erb +32 -1
- data/lib/bible270/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4e5f2002e8da19945110a09f27e658b7de650e8d63e4d0cc429e0c9c74bf6bf6
|
|
4
|
+
data.tar.gz: '09e8a0851405b78ccb8bd39c2938546afe3bf2cf47cfe8e693d000f60713a16f'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 516d821a92220f758959fe337d4cb2591ffe7785102f1c3e6d230ae31d801175b563d2b004dad1f77829d7fbc19cce1d5f87cb1f13a96405d77b81c0d2de7e1a
|
|
7
|
+
data.tar.gz: 27ba2c3d4f110bd64e8fc26a40b03e98e7b2f512cffd13f79faf267d35ba32f69e03834ec1dd678696941adc5c35ad11e804b7a6547bbeddac7561ed02e8a47f
|
data/CHANGELOG.md
CHANGED
|
@@ -6,7 +6,20 @@ All notable changes to bible270. Format follows [Keep a Changelog](https://keepa
|
|
|
6
6
|
|
|
7
7
|
See the changes since the last release:
|
|
8
8
|
|
|
9
|
-
**[Full Changelog](https://github.com/avonderluft/bible270/compare/v0.18.
|
|
9
|
+
**[Full Changelog](https://github.com/avonderluft/bible270/compare/v0.18.2...main)**
|
|
10
|
+
|
|
11
|
+
## [0.18.2] - 2026-08-15
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Young's Literal Translation (`YLT`) as a Bible Gateway and Blue Letter Bible reading option
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- summarize reflection likes with one heart and a count, with all liker names displayed in a one-name-per-row tooltip
|
|
20
|
+
- keep the reflection heart red while at least one like remains
|
|
21
|
+
|
|
22
|
+
**[Full Changelog](https://github.com/avonderluft/bible270/compare/v0.18.1...v0.18.2)**
|
|
10
23
|
|
|
11
24
|
## [0.18.1] - 2026-08-12
|
|
12
25
|
|
|
@@ -413,6 +426,7 @@ This is the initial public release.
|
|
|
413
426
|
|
|
414
427
|
* 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.
|
|
415
428
|
|
|
429
|
+
[0.18.2]: https://github.com/avonderluft/bible270/releases/tag/v0.18.2
|
|
416
430
|
[0.18.1]: https://github.com/avonderluft/bible270/releases/tag/v0.18.1
|
|
417
431
|
[0.18.0]: https://github.com/avonderluft/bible270/releases/tag/v0.18.0
|
|
418
432
|
[0.17.2]: https://github.com/avonderluft/bible270/releases/tag/v0.17.2
|
data/Rakefile
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
require 'bundler/gem_tasks' # provides build / install / release
|
|
4
4
|
require 'rake/testtask'
|
|
5
5
|
|
|
6
|
+
desc 'Normalize permissions for files included in the gem'
|
|
7
|
+
task :normalize_gem_permissions do
|
|
8
|
+
spec = Gem::Specification.load('bible270.gemspec')
|
|
9
|
+
spec.files.each do |path|
|
|
10
|
+
File.chmod(0o644, path) if File.file?(path)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
Rake::Task[:build].enhance([:normalize_gem_permissions])
|
|
15
|
+
|
|
6
16
|
Rake::TestTask.new(:test) do |t|
|
|
7
17
|
t.libs << 'test' << 'lib'
|
|
8
18
|
t.pattern = 'test/**/*_test.rb'
|
|
@@ -12,10 +12,6 @@ module Bible270
|
|
|
12
12
|
|
|
13
13
|
def update
|
|
14
14
|
problems = []
|
|
15
|
-
# A checkbox sends nothing when unticked, so absence means off. Set before
|
|
16
|
-
# the name check, so the preference is saved even if a name is rejected.
|
|
17
|
-
current_reader.update_column(:notify_on_mention, params[:notify_on_mention].present?)
|
|
18
|
-
|
|
19
15
|
problems << 'both a first and last name' unless current_reader.update_names(params[:first_name],
|
|
20
16
|
params[:last_name])
|
|
21
17
|
if params[:bible_version].present? && !current_reader.update_bible_version(params[:bible_version])
|
|
@@ -108,8 +108,9 @@ module Bible270
|
|
|
108
108
|
errors.add(:parent, "is on day #{parent.day}, not #{day}")
|
|
109
109
|
end
|
|
110
110
|
|
|
111
|
-
# A mention emails the person named.
|
|
112
|
-
#
|
|
111
|
+
# A mention always emails the person named. There is no per-reader opt-out;
|
|
112
|
+
# failures are logged rather than raised so nobody loses a reflection because
|
|
113
|
+
# the mail server is down.
|
|
113
114
|
def notify_newly_mentioned_readers
|
|
114
115
|
return unless saved_change_to_body?
|
|
115
116
|
|
|
@@ -123,7 +124,6 @@ module Bible270
|
|
|
123
124
|
Reader.mentioned_in(body).each do |mentioned|
|
|
124
125
|
next if mentioned.id == reader_id
|
|
125
126
|
next if except.include?(mentioned.id)
|
|
126
|
-
next unless mentioned.wants_mention_notices?
|
|
127
127
|
|
|
128
128
|
notice = NoticeMailer.mentioned(comment_id: id, reader_id: mentioned.id)
|
|
129
129
|
Bible270.config.registration_notice_deliver_later ? notice.deliver_later : notice.deliver_now
|
|
@@ -221,13 +221,6 @@ module Bible270
|
|
|
221
221
|
Mentions.handles_for(first_name, last_name).include?(handle)
|
|
222
222
|
end
|
|
223
223
|
|
|
224
|
-
def wants_mention_notices?
|
|
225
|
-
return false if email.blank?
|
|
226
|
-
return true unless respond_to?(:notify_on_mention)
|
|
227
|
-
|
|
228
|
-
notify_on_mention != false
|
|
229
|
-
end
|
|
230
|
-
|
|
231
224
|
# ---- staying signed in -------------------------------------------------
|
|
232
225
|
|
|
233
226
|
# Generated on first use rather than at sign-up, so readers who never stay
|
|
@@ -8,5 +8,4 @@ Read it and reply: <%= @day_url %>
|
|
|
8
8
|
You can find it on day <%= @comment.day %> of <%= @app_name %>.
|
|
9
9
|
<% end %>
|
|
10
10
|
--
|
|
11
|
-
You are getting this because someone wrote your name in a reflection.
|
|
12
|
-
turn these off on your profile page.
|
|
11
|
+
You are getting this because someone wrote your name in a reflection.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<% content_for :title, "
|
|
2
|
-
<p class="b270-eyebrow">
|
|
3
|
-
<h1>Your
|
|
1
|
+
<% content_for :title, "Profile — #{Bible270.config.app_name}" %>
|
|
2
|
+
<p class="b270-eyebrow">Profile</p>
|
|
3
|
+
<h1>Your details</h1>
|
|
4
4
|
<p class="lede">This is how you appear beside your reflections and on the community page.</p>
|
|
5
5
|
|
|
6
6
|
<div class="b270-panel">
|
|
@@ -19,10 +19,6 @@
|
|
|
19
19
|
<% end %>
|
|
20
20
|
</div>
|
|
21
21
|
|
|
22
|
-
<label class="b270-field" style="flex-direction:row;align-items:center;gap:10px">
|
|
23
|
-
<%= check_box_tag :notify_on_mention, "1", current_reader.notify_on_mention %>
|
|
24
|
-
<span style="margin:0">Email me when someone mentions me in a reflection</span>
|
|
25
|
-
</label>
|
|
26
22
|
|
|
27
23
|
<label class="b270-field">
|
|
28
24
|
<span>First name</span>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<% content_for :title, "Community — #{Bible270.config.app_name}" %>
|
|
2
|
-
<p class="b270-eyebrow">
|
|
3
|
-
<h1>
|
|
2
|
+
<p class="b270-eyebrow">Community</p>
|
|
3
|
+
<h1>Reading together</h1>
|
|
4
4
|
<p class="lede">Everyone walking through the Word, seeing each pilgrim's progress.</p>
|
|
5
5
|
|
|
6
6
|
<% if @readers.any? %>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
<% content_for :title, "
|
|
1
|
+
<% content_for :title, "My Progress — #{Bible270.config.app_name}" %>
|
|
2
2
|
<% content_for :hide_day_index, true %><%# the panel is followed by its own grid below %>
|
|
3
3
|
|
|
4
|
-
<p class="b270-eyebrow">
|
|
5
|
-
<h1
|
|
4
|
+
<p class="b270-eyebrow">My Progress</p>
|
|
5
|
+
<h1>Your reading journey</h1>
|
|
6
6
|
|
|
7
7
|
<%= render "bible270/shared/progress" %>
|
|
8
8
|
|
|
@@ -8,22 +8,19 @@
|
|
|
8
8
|
</span>
|
|
9
9
|
<% end %>
|
|
10
10
|
</div>
|
|
11
|
-
<nav class="b270-nav">
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
rejects GET, so its buttons live on that page as POST forms. %>
|
|
26
|
-
<%= link_to "Sign in", sign_in_path(origin: request.fullpath), class: "b270-signin" %>
|
|
27
|
-
<% end %>
|
|
11
|
+
<nav class="b270-nav" aria-label="Primary navigation">
|
|
12
|
+
<div class="b270-desktopnav">
|
|
13
|
+
<%= render "bible270/shared/nav_links" %>
|
|
14
|
+
</div>
|
|
15
|
+
<details class="b270-navmenu">
|
|
16
|
+
<summary class="b270-navtoggle" aria-label="Menu">
|
|
17
|
+
<span class="b270-menuicon" aria-hidden="true">
|
|
18
|
+
<span></span><span></span><span></span>
|
|
19
|
+
</span>
|
|
20
|
+
</summary>
|
|
21
|
+
<div class="b270-navlinks">
|
|
22
|
+
<%= render "bible270/shared/nav_links" %>
|
|
23
|
+
</div>
|
|
24
|
+
</details>
|
|
28
25
|
</nav>
|
|
29
26
|
</header>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<%= link_to "Community", community_path %>
|
|
2
|
+
<%# Public, like the community page: anyone may read reflections. %>
|
|
3
|
+
<%= link_to "Reflections", reflections_path %>
|
|
4
|
+
<% if signed_in? %>
|
|
5
|
+
<%= link_to "My Progress", progress_path %>
|
|
6
|
+
<%= link_to "Profile", profile_path %>
|
|
7
|
+
<% if Bible270.config.admin?(current_reader) %><%= link_to "Admin", admin_path %><% end %>
|
|
8
|
+
<%= button_to "Sign out", sign_out_path, method: :delete, class: "b270-linkbtn",
|
|
9
|
+
form: { style: "display:inline" } %>
|
|
10
|
+
<% elsif Bible270.config.any_sign_in_method? %>
|
|
11
|
+
<%# Always route to the sign-in page: it offers email as well as any
|
|
12
|
+
social providers, so nobody is shut out. OmniAuth's own request phase
|
|
13
|
+
rejects GET, so its buttons live on that page as POST forms. %>
|
|
14
|
+
<%= link_to "Sign in", sign_in_path(origin: request.fullpath), class: "b270-signin" %>
|
|
15
|
+
<% end %>
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
|
|
35
35
|
<%= render "bible270/shared/track_bars", reader: panel_reader %>
|
|
36
36
|
|
|
37
|
-
<
|
|
37
|
+
<div class="b270-progress-actions">
|
|
38
38
|
<%= link_to "#{day_verb} reading — Day #{panel_start_day} →", day_path(panel_start_day), class: "b270-btn" %>
|
|
39
39
|
<% if panel_today_day && panel_today_day != panel_start_day %>
|
|
40
|
-
<%= link_to "Go to today (Day #{panel_today_day})", day_path(panel_today_day),
|
|
40
|
+
<%= link_to "Go to today (Day #{panel_today_day})", day_path(panel_today_day), class: "b270-todaylink" %>
|
|
41
41
|
<% end %>
|
|
42
|
-
</
|
|
42
|
+
</div>
|
|
43
43
|
|
|
44
44
|
<%= render "bible270/days/start_date", reader: panel_reader %>
|
|
45
45
|
<% else %>
|
|
@@ -22,7 +22,9 @@
|
|
|
22
22
|
.b270-mark svg,.b270-mark img{display:block;border-radius:8px}
|
|
23
23
|
.b270-title{font-family:"Spectral",Georgia,serif;font-weight:600;font-size:22px;text-decoration:none}
|
|
24
24
|
.b270-tagline{font-size:12px;color:var(--faint);letter-spacing:.04em}
|
|
25
|
-
.b270-nav{display:flex;align-items:center;
|
|
25
|
+
.b270-nav{display:flex;align-items:center;font-size:14px}
|
|
26
|
+
.b270-desktopnav{display:flex;align-items:center;gap:16px}
|
|
27
|
+
.b270-navmenu{display:none}
|
|
26
28
|
.b270-nav a{color:var(--muted);text-decoration:none}
|
|
27
29
|
.b270-nav a:hover{color:var(--gold)}
|
|
28
30
|
/* button_to renders a form; make it a flex item so the button sits on the same
|
|
@@ -63,6 +65,9 @@
|
|
|
63
65
|
.b270-bignum .n{font-family:"Spectral",serif;font-size:38px;font-weight:600;line-height:1}
|
|
64
66
|
.b270-bignum .of{color:var(--muted);font-size:15px}
|
|
65
67
|
.b270-bignum .pct{margin-left:auto;color:var(--gold);font-weight:600;font-variant-numeric:tabular-nums}
|
|
68
|
+
.b270-progress-actions{display:flex;flex-direction:column;align-items:flex-start;gap:7px;margin:16px 0 0}
|
|
69
|
+
.b270-todaylink{margin-left:16px;font-size:12px;color:var(--muted);text-decoration:none}
|
|
70
|
+
.b270-todaylink:hover{color:var(--gold);text-decoration:underline}
|
|
66
71
|
.b270-signedout{color:var(--muted);font-size:14px;margin:4px 0 0}
|
|
67
72
|
|
|
68
73
|
.b270-startdate{margin-top:18px;padding-top:16px;border-top:1px solid var(--line-soft)}
|
|
@@ -244,5 +249,31 @@
|
|
|
244
249
|
.b270-footer p{margin:0;line-height:1.5}
|
|
245
250
|
details.b270-index summary{cursor:pointer;font-family:"Spectral",serif;font-size:18px;font-weight:600;list-style:none;margin-top:30px}
|
|
246
251
|
details.b270-index summary::-webkit-details-marker{display:none}
|
|
252
|
+
@media (max-width:620px){
|
|
253
|
+
.b270-topbar{flex-wrap:nowrap;align-items:center}
|
|
254
|
+
.b270-brand{min-width:0}
|
|
255
|
+
.b270-brandtext{min-width:0}
|
|
256
|
+
.b270-tagline{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
257
|
+
.b270-nav{position:relative;flex:none}
|
|
258
|
+
.b270-desktopnav{display:none}
|
|
259
|
+
.b270-navmenu{display:block}
|
|
260
|
+
.b270-navtoggle{display:flex;align-items:center;justify-content:center;width:40px;height:38px;
|
|
261
|
+
list-style:none;cursor:pointer;padding:0;border:1px solid var(--line);
|
|
262
|
+
border-radius:8px;background:var(--card)}
|
|
263
|
+
.b270-navtoggle::-webkit-details-marker{display:none}
|
|
264
|
+
.b270-navtoggle:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
|
|
265
|
+
.b270-menuicon{display:flex;flex-direction:column;gap:4px}
|
|
266
|
+
.b270-menuicon span{display:block;width:18px;height:2px;border-radius:2px;background:var(--ink)}
|
|
267
|
+
.b270-navmenu[open] .b270-menuicon span{background:var(--gold)}
|
|
268
|
+
.b270-navmenu:not([open])>.b270-navlinks{display:none}
|
|
269
|
+
.b270-navlinks{position:absolute;z-index:20;right:0;top:calc(100% + 7px);min-width:180px;
|
|
270
|
+
flex-direction:column;align-items:stretch;gap:0;padding:6px;
|
|
271
|
+
border:1px solid var(--line);border-radius:10px;background:var(--card);
|
|
272
|
+
box-shadow:var(--shadow)}
|
|
273
|
+
.b270-navlinks a,.b270-nav .b270-linkbtn{display:block;width:100%;padding:9px 10px;
|
|
274
|
+
border-radius:6px;text-align:left;white-space:nowrap}
|
|
275
|
+
.b270-navlinks a:hover,.b270-nav .b270-linkbtn:hover{background:var(--paper)}
|
|
276
|
+
.b270-nav form{display:block;width:100%}
|
|
277
|
+
}
|
|
247
278
|
@media (max-width:480px){ .b270-tm{grid-template-columns:104px 1fr auto} .b270-reading{padding:14px 15px;gap:12px} .b270-reading.multi .b270-cat,.b270-reading.multi .b270-parts-meta{margin-left:38px} .b270-part{gap:12px} }
|
|
248
279
|
</style>
|
data/lib/bible270/version.rb
CHANGED
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: 0.
|
|
4
|
+
version: 0.19.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew vonderLuft
|
|
@@ -136,6 +136,7 @@ files:
|
|
|
136
136
|
- app/views/bible270/shared/_footer.html.erb
|
|
137
137
|
- app/views/bible270/shared/_grid_legend.html.erb
|
|
138
138
|
- app/views/bible270/shared/_header.html.erb
|
|
139
|
+
- app/views/bible270/shared/_nav_links.html.erb
|
|
139
140
|
- app/views/bible270/shared/_passage_source.html.erb
|
|
140
141
|
- app/views/bible270/shared/_progress.html.erb
|
|
141
142
|
- app/views/bible270/shared/_reflections.html.erb
|