Upgrade Font Awesome to 6.7.2 (#4846)

* Restore the Ruby 4.0.6 upgrade

PR #4831 committed a stale Gemfile.lock over the newer one, taking
.ruby-version back to 3.2.3 and rolling back active_median, dalli,
parallel, rbs and selenium-webdriver. Dockerfile and
.devcontainer/Dockerfile still build on Ruby 4, so the Gemfile's version
check fails against the image.

Restores both files to what they were before that merge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Upgrade Font Awesome from 5.15.1 to 6.7.2

Font names have moved on twice since this was pinned: the codebase still
carried Font Awesome 4 names that render as an empty box, and FA6 icons
such as fa-ellipsis-vertical were unavailable.

The 6.x gem no longer ships _font-awesome-sprockets.scss, but its
@font-face rules still call fa-font-path(), so application.scss defines
that against Sprockets' font-path helper. Its fonts live under
assets/fonts/font-awesome, which is already in the precompile list.

Icon names:
- The bare "fa" prefix is not a style in 6. Every "fa fa-<name>" becomes
  "fas fa-<name>" (38 call sites, all solid; the one brands icon already
  used fab).
- fa-sun-o was a Font Awesome 4 name and had been rendering as a box;
  now fa-sun.
- fa-pencil was likewise broken under 5, where it was fa-pencil-alt. It
  exists again in 6, so the existing name now works.
- activity_icon asked for 'fa-truck-pickup' through a helper that already
  adds the prefix, so it emitted "fa-fa-truck-pickup".

Verified that the solid, regular and brands fonts all resolve through
the asset pipeline.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* couple more places to upgrade font awesome

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Brenda WallaceandClaude Opus 5 authored and GitHub committed 2026-09-24 13:39:38 +09:30
1 parent 6dbab4678f
commit 7e181982ff
21 files changed
+58 -50

No files matched your search

+5 -5
View File
@@ -141,7 +141,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
</div>
)}
{!loadError && !data && (
<div className="modal-body" role="status"><i className="fa fa-spinner fa-spin" aria-hidden="true" /> Loading…</div>
<div className="modal-body" role="status"><i className="fas fa-spinner fa-spin" aria-hidden="true" /> Loading…</div>
)}
{data && (
<>
@@ -161,7 +161,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
</button>
{waiting && (
<div className="photo-picker-waiting" role="status">
<i className="fa fa-spinner fa-spin" aria-hidden="true" />{' '}
<i className="fas fa-spinner fa-spin" aria-hidden="true" />{' '}
{blocked ? 'Your browser blocked the window.' : 'Waiting for you to allow access on Flickr…'}{' '}
{blocked && <a href={CONNECT_URL} target="_blank" rel="noopener noreferrer">Connect in a new tab</a>}
{!blocked && <span className="photo-picker-hint">This picks up on its own once you have.</span>}
@@ -216,7 +216,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
<>
{errors.length > 0 && (
<div className="alert alert-danger" role="alert">
<i className="fa fa-exclamation-triangle" aria-hidden="true" />{' '}
<i className="fas fa-exclamation-triangle" aria-hidden="true" />{' '}
<strong>That didn&rsquo;t work.</strong>
<ul className="mb-0">{errors.map((message) => <li key={message}>{message}</li>)}</ul>
<span>Your choice is kept, so you can press Add photo to try again.</span>
@@ -232,7 +232,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
<img src={chosen.preview_url} alt={chosen.title || 'The photo you chose'} className="photo-picker-preview" />
<span className="photo-picker-title">{chosen.title}</span>
<button type="button" className="btn btn-sm btn-outline-secondary ms-3" onClick={() => setChosen(null)} disabled={saving}>
<i className="fa fa-edit" aria-hidden="true" /> Change<span className="visually-hidden"> photo</span>
<i className="fas fa-edit" aria-hidden="true" /> Change<span className="visually-hidden"> photo</span>
</button>
</dd>
</dl>
@@ -245,7 +245,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
<div className="modal-footer">
<button type="button" className="btn btn-link" onClick={() => setChosen(null)} disabled={saving}>Back</button>
<button type="button" className="btn btn-success btn-plant" onClick={add} disabled={saving} aria-busy={saving} autoFocus>
{saving ? <><i className="fa fa-spinner fa-spin" aria-hidden="true" /> Adding…</> : 'Add photo'}
{saving ? <><i className="fas fa-spinner fa-spin" aria-hidden="true" /> Adding…</> : 'Add photo'}
</button>
</div>
)}