diff --git a/Gemfile b/Gemfile
index 635433d2f..522a0c158 100644
--- a/Gemfile
+++ b/Gemfile
@@ -33,7 +33,7 @@ gem "bootstrap", ">= 5.0.0"
gem 'material_icons'
# icons
-gem 'font-awesome-sass'
+gem 'font-awesome-sass', '~> 6.7'
gem 'terser'
diff --git a/Gemfile.lock b/Gemfile.lock
index 229b3dcc9..9763e67ff 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -276,8 +276,8 @@ GEM
ffi (1.17.4)
ffi (1.17.4-x86_64-linux-gnu)
flickraw (0.9.10)
- font-awesome-sass (5.15.1)
- sassc (>= 1.11)
+ font-awesome-sass (6.7.2)
+ sassc (~> 2.0)
friendly_id (5.7.0)
activerecord (>= 4.0.0)
gbifrb (0.2.0)
@@ -793,7 +793,7 @@ DEPENDENCIES
faker
faraday
flickraw
- font-awesome-sass
+ font-awesome-sass (~> 6.7)
friendly_id
gbifrb
geocoder
diff --git a/app/assets/stylesheets/_garden_cards.scss b/app/assets/stylesheets/_garden_cards.scss
index 097bc60e0..e3fb60c3c 100644
--- a/app/assets/stylesheets/_garden_cards.scss
+++ b/app/assets/stylesheets/_garden_cards.scss
@@ -120,7 +120,10 @@ $garden-card-line: #e6e6e6;
background: none;
cursor: pointer;
- .fa {
+ // The icon, whatever style prefix it carries. Keyed on the element rather
+ // than .fa, which stopped matching when Font Awesome 6 dropped the bare
+ // prefix and every icon became .fas, .far or .fab.
+ i {
margin-left: 0.35rem;
opacity: 0.5;
}
@@ -129,7 +132,7 @@ $garden-card-line: #e6e6e6;
&:focus-visible {
color: var(--bs-link-color, #0a58ca);
- .fa {
+ i {
opacity: 1;
}
}
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 209a832da..8fe464074 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -9,8 +9,13 @@
@import "leaflet.markercluster/dist/MarkerCluster";
@import "leaflet.markercluster/dist/MarkerCluster.Default";
-// Font Awesome
-@import "font-awesome-sprockets";
+// Font Awesome. The 6.x gem dropped its _font-awesome-sprockets.scss but its
+// @font-face rules still call fa-font-path(), so we define it here against
+// Sprockets' font-path helper. Its fonts live under assets/fonts/font-awesome.
+@function fa-font-path($path) {
+ @return font-path("font-awesome/#{$path}");
+}
+
@import "font-awesome";
@import "material_icons";
@import "rails_bootstrap_forms";
diff --git a/app/helpers/icons_helper.rb b/app/helpers/icons_helper.rb
index 80c118d00..e51f398a8 100644
--- a/app/helpers/icons_helper.rb
+++ b/app/helpers/icons_helper.rb
@@ -76,7 +76,7 @@ module IconsHelper
end
def activity_icon
- icon('fas', 'fa-truck-pickup')
+ icon('fas', 'truck-pickup')
end
def post_icon
diff --git a/app/javascript/components/AddPhotoModal.jsx b/app/javascript/components/AddPhotoModal.jsx
index c8e8f4590..60288a36e 100644
--- a/app/javascript/components/AddPhotoModal.jsx
+++ b/app/javascript/components/AddPhotoModal.jsx
@@ -141,7 +141,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
)}
{!loadError && !data && (
-
Loading…
+ Loading…
)}
{data && (
<>
@@ -161,7 +161,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
{waiting && (
-
{' '}
+
{' '}
{blocked ? 'Your browser blocked the window.' : 'Waiting for you to allow access on Flickr…'}{' '}
{blocked &&
Connect in a new tab }
{!blocked &&
This picks up on its own once you have. }
@@ -216,7 +216,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
<>
{errors.length > 0 && (
-
{' '}
+
{' '}
That didn’t work.
{errors.map((message) => {message} )}
Your choice is kept, so you can press Add photo to try again.
@@ -232,7 +232,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
{chosen.title}
setChosen(null)} disabled={saving}>
- Change photo
+ Change photo
@@ -245,7 +245,7 @@ export default function AddPhotoModal({label, newUrl, iconUrl, onClose, onAdded}
setChosen(null)} disabled={saving}>Back
- {saving ? <> Adding…> : 'Add photo'}
+ {saving ? <> Adding…> : 'Add photo'}
)}
diff --git a/app/javascript/components/CropPicker.jsx b/app/javascript/components/CropPicker.jsx
index 08799fb06..d6c59ce0b 100644
--- a/app/javascript/components/CropPicker.jsx
+++ b/app/javascript/components/CropPicker.jsx
@@ -95,7 +95,7 @@ export default function CropPicker({id, onChoose}) {
What did you plant?
-
+
setTerm(event.target.value)}
onKeyDown={onKeyDown}
/>
- {searching && }
+ {searching && }
{hint(searching, open, results.length)}
{noMatch && (
diff --git a/app/javascript/components/EditGardenModal.jsx b/app/javascript/components/EditGardenModal.jsx
index 0d719bef5..0bd91008f 100644
--- a/app/javascript/components/EditGardenModal.jsx
+++ b/app/javascript/components/EditGardenModal.jsx
@@ -76,7 +76,7 @@ export default function EditGardenModal({garden, onClose, onSaved}) {
)}
{!loadError && !values && (
-
Loading…
+
Loading…
)}
{values && (
- {saving ? <> Saving…> : 'Save garden'}
+ {saving ? <> Saving…> : 'Save garden'}
diff --git a/app/javascript/components/EditPlantingModal.jsx b/app/javascript/components/EditPlantingModal.jsx
index eaeaafa13..db03287e2 100644
--- a/app/javascript/components/EditPlantingModal.jsx
+++ b/app/javascript/components/EditPlantingModal.jsx
@@ -91,7 +91,7 @@ export default function EditPlantingModal({planting, onClose, onSaved}) {
)}
{!loadError && !values && (
- Loading…
+ Loading…
)}
{values && (
diff --git a/app/javascript/components/GardenCard.jsx b/app/javascript/components/GardenCard.jsx
index 6c92523ec..613f0a2a2 100644
--- a/app/javascript/components/GardenCard.jsx
+++ b/app/javascript/components/GardenCard.jsx
@@ -36,14 +36,14 @@ export default function GardenCard({garden, defaultIconUrl, onPlant, highlighted
{plantUrl && (
- Add planting
+ Add planting
to {name}
)}
}
+ label={
}
ariaLabel={`Actions for ${name}`}
className="btn btn-sm btn-link actions-toggle-dots"
onSelect={(action, event) => {
diff --git a/app/javascript/components/GardenCards.jsx b/app/javascript/components/GardenCards.jsx
index 549ab93ef..2a6791a06 100644
--- a/app/javascript/components/GardenCards.jsx
+++ b/app/javascript/components/GardenCards.jsx
@@ -108,7 +108,7 @@ export default function GardenCards({gardens: initialGardens, default_icon_url:
<>
{notice && (
- {notice}
+ {notice}
setNotice(null)} />
)}
diff --git a/app/javascript/components/MarkFinishedModal.jsx b/app/javascript/components/MarkFinishedModal.jsx
index 5773f9eb8..ca497be30 100644
--- a/app/javascript/components/MarkFinishedModal.jsx
+++ b/app/javascript/components/MarkFinishedModal.jsx
@@ -72,7 +72,7 @@ export default function MarkFinishedModal({planting, iconUrl, onClose, onSaved})
{errors.length > 0 && (
-
{' '}
+
{' '}
That didn’t save.
{errors.map((message) => {message} )}
What you entered is kept, so you can press Mark as finished to try again.
@@ -118,7 +118,7 @@ export default function MarkFinishedModal({planting, iconUrl, onClose, onSaved})
- {saving ? <> Saving…> : 'Mark as finished'}
+ {saving ? <> Saving…> : 'Mark as finished'}
diff --git a/app/javascript/components/PlantPartPicker.jsx b/app/javascript/components/PlantPartPicker.jsx
index bc979b70f..fe4300fd0 100644
--- a/app/javascript/components/PlantPartPicker.jsx
+++ b/app/javascript/components/PlantPartPicker.jsx
@@ -65,7 +65,7 @@ export default function PlantPartPicker({id, parts, suggestedId, onChoose}) {
What part did you harvest?
-
+
{noMatch && (
- No plant parts match “{term}”.
+ No plant parts match “{term}”.
)}
{showing && (
diff --git a/app/javascript/components/PlantSomethingModal.jsx b/app/javascript/components/PlantSomethingModal.jsx
index 0eff9a2f1..6bd9239bc 100644
--- a/app/javascript/components/PlantSomethingModal.jsx
+++ b/app/javascript/components/PlantSomethingModal.jsx
@@ -66,7 +66,7 @@ export default function PlantSomethingModal({garden, iconUrl, onClose, onCreated
{errors.length > 0 && (
-
{' '}
+
{' '}
That didn’t work.
{errors.map((message) => {message} )}
Your choice is kept, so you can press Plant it to try again.
@@ -80,7 +80,7 @@ export default function PlantSomethingModal({garden, iconUrl, onClose, onCreated
{crop.name}
setCrop(null)} disabled={saving}>
- Change crop
+ Change crop
Garden
@@ -98,7 +98,7 @@ export default function PlantSomethingModal({garden, iconUrl, onClose, onCreated
Cancel
{crop && (
- {saving ? <> Planting…> : 'Plant it'}
+ {saving ? <> Planting…> : 'Plant it'}
)}
diff --git a/app/javascript/components/PlantedDate.jsx b/app/javascript/components/PlantedDate.jsx
index ccec8aa1d..722023778 100644
--- a/app/javascript/components/PlantedDate.jsx
+++ b/app/javascript/components/PlantedDate.jsx
@@ -73,7 +73,7 @@ export default function PlantedDate({planting, onUpdated}) {
return (
{plantedAt ? `Planted ${formatDate(plantedAt)}` : 'Set planted date'}
-
+
);
}
@@ -91,10 +91,10 @@ export default function PlantedDate({planting, onUpdated}) {
onKeyDown={onKeyDown}
/>
-
+
-
+
{error &&
{error} }
diff --git a/app/javascript/components/PlantingRow.jsx b/app/javascript/components/PlantingRow.jsx
index b0798c3b5..f91388a42 100644
--- a/app/javascript/components/PlantingRow.jsx
+++ b/app/javascript/components/PlantingRow.jsx
@@ -17,7 +17,7 @@ export default function PlantingRow({planting, defaultIconUrl, highlighted, high
{highlighted && highlightKind === 'harvested' && (
-
Harvest recorded
+
Harvest recorded
)}
diff --git a/app/javascript/components/RecordHarvestModal.jsx b/app/javascript/components/RecordHarvestModal.jsx
index 0067565d3..050eb6417 100644
--- a/app/javascript/components/RecordHarvestModal.jsx
+++ b/app/javascript/components/RecordHarvestModal.jsx
@@ -146,7 +146,7 @@ export default function RecordHarvestModal({planting, iconUrl, onClose, onSaved}
)}
{!loadError && !values && (
-
Loading…
+
Loading…
)}
{values && step === 1 && (
@@ -160,7 +160,7 @@ export default function RecordHarvestModal({planting, iconUrl, onClose, onSaved}
{errors.length > 0 && (
-
{' '}
+
{' '}
That didn’t save.
{errors.map((message) => {message} )}
What you entered is kept, so you can press Save harvest to try again.
@@ -175,7 +175,7 @@ export default function RecordHarvestModal({planting, iconUrl, onClose, onSaved}
{part.name}
setStep(1)} disabled={saving}>
- Change plant part
+ Change plant part
{step > 2 && (
@@ -184,7 +184,7 @@ export default function RecordHarvestModal({planting, iconUrl, onClose, onSaved}
{amount()}
setStep(2)} disabled={saving}>
- Change amount
+ Change amount
>
@@ -195,7 +195,7 @@ export default function RecordHarvestModal({planting, iconUrl, onClose, onSaved}
{whenLabel()}
setStep(3)} disabled={saving}>
- Change when
+ Change when
>
@@ -316,7 +316,7 @@ export default function RecordHarvestModal({planting, iconUrl, onClose, onSaved}
{step < STEPS.length &&
Next }
{step === STEPS.length && (
- {saving ? <> Saving…> : 'Save harvest'}
+ {saving ? <> Saving…> : 'Save harvest'}
)}
diff --git a/app/javascript/components/SaveSeedsModal.jsx b/app/javascript/components/SaveSeedsModal.jsx
index 394f21401..f9baf9d6d 100644
--- a/app/javascript/components/SaveSeedsModal.jsx
+++ b/app/javascript/components/SaveSeedsModal.jsx
@@ -88,7 +88,7 @@ export default function SaveSeedsModal({planting, iconUrl, onClose, onSaved}) {
const change = (toStep, what) => (
setStep(toStep)} disabled={saving}>
- Change {what}
+ Change {what}
);
@@ -100,7 +100,7 @@ export default function SaveSeedsModal({planting, iconUrl, onClose, onSaved}) {
)}
{!loadError && !values && (
-
Loading…
+
Loading…
)}
{values && (