Get Location now reverse-geocodes the captured coordinates into City + Country via BigDataCloud's free client endpoint, filling only blank fields (never clobbering a manual entry) and appending the resolved place to the location status. Best-effort — a failure leaves the coordinates intact. Removes the redundant hero_image field: journal entries render their hero from the first uploaded photo (entry-journal uses entry.media.images|first), so an explicit hero filename served no purpose. Stories still use hero_image but are not posted through this form. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
177 lines
5.0 KiB
Markdown
177 lines
5.0 KiB
Markdown
---
|
||
title: 'New Entry'
|
||
template: post-form
|
||
access:
|
||
site.login: true
|
||
|
||
# Parent (write target) is injected server-side from site.active_trip by the
|
||
# cache-on-save plugin (onFormValidationProcessed) — no manual sync needed.
|
||
pageconfig:
|
||
slug_field: 'date,title'
|
||
overwrite_mode: false
|
||
|
||
pagefrontmatter:
|
||
template: entry
|
||
published: true
|
||
|
||
form:
|
||
name: new-entry
|
||
action: /post
|
||
enctype: multipart/form-data
|
||
fields:
|
||
# Photos come first — they anchor what you'll write (Photos → Title →
|
||
# Content). After upload post-form.js auto-collapses this into a summary
|
||
# bar so the thumbnails don't crowd the writing area.
|
||
-
|
||
name: photos
|
||
label: Photos (1–6)
|
||
# Grav-managed filepond field. post-form.js hooks its beforeAddFile
|
||
# to convert HEIC->JPEG in the browser, then re-adds the JPEG via the
|
||
# public pond.addFile() API — FilePond keeps ownership of the upload
|
||
# and page-attach contract (U4).
|
||
type: filepond
|
||
multiple: true
|
||
destination: '@self'
|
||
# Max 6 photos per entry; at least 1 is required (enforced
|
||
# client-side in post-form.js initValidation).
|
||
limit: 6
|
||
accept:
|
||
- 'image/*'
|
||
|
||
-
|
||
name: title
|
||
label: Title
|
||
type: text
|
||
validate:
|
||
required: true
|
||
|
||
-
|
||
name: date
|
||
label: Date & Time
|
||
# Rendered as a native <input type="datetime-local"> by the theme
|
||
# override at templates/forms/fields/datetime/datetime.html.twig.
|
||
# No `default: now` — the stock text fallback would print the literal
|
||
# string "now" into the picker; post-form.js prefills the current
|
||
# local time instead (and the client validator requires this field).
|
||
type: datetime
|
||
format: 'Y-m-d H:i'
|
||
validate:
|
||
required: true
|
||
|
||
-
|
||
name: content
|
||
label: "What happened today?"
|
||
type: textarea
|
||
rows: 10
|
||
validate:
|
||
required: true
|
||
|
||
-
|
||
name: lat
|
||
label: Latitude
|
||
type: text
|
||
placeholder: 'tap "Get Location" below'
|
||
|
||
-
|
||
name: lng
|
||
label: Longitude
|
||
type: text
|
||
placeholder: ''
|
||
|
||
-
|
||
name: location_city
|
||
label: City
|
||
type: text
|
||
placeholder: 'e.g. Kyoto'
|
||
|
||
-
|
||
name: location_country
|
||
label: Country
|
||
type: text
|
||
placeholder: 'e.g. Japan'
|
||
|
||
-
|
||
name: weather_desc
|
||
label: Weather Condition
|
||
type: select
|
||
default: ''
|
||
options:
|
||
'': '— none —'
|
||
'Sunny': '☀️ Sunny'
|
||
'Partly cloudy': '⛅ Partly cloudy'
|
||
'Cloudy': '☁️ Cloudy'
|
||
'Foggy': '🌫️ Foggy'
|
||
'Drizzle': '🌦️ Drizzle'
|
||
'Rain': '🌧️ Rain'
|
||
'Snow': '❄️ Snow'
|
||
'Thunderstorm': '⛈️ Thunderstorm'
|
||
|
||
-
|
||
name: weather_temp_c
|
||
label: 'Temperature (°C)'
|
||
type: number
|
||
placeholder: 'tap "Get Weather" or type it'
|
||
validate:
|
||
min: -60
|
||
max: 60
|
||
|
||
-
|
||
name: transport_mode
|
||
label: 'How I got here'
|
||
type: select
|
||
default: ''
|
||
options:
|
||
'': '— not specified —'
|
||
'walking': '🚶 Walking'
|
||
'bicycle': '🚲 Bicycle'
|
||
'bus': '🚌 Bus'
|
||
'train': '🚆 Train'
|
||
'car': '🚗 Car'
|
||
'plane': '✈️ Plane'
|
||
|
||
# Advanced fields — collapsed behind "More options" (see U5).
|
||
# No hero_image field: journal entries render their hero from the first
|
||
# uploaded photo (entry-journal.html.twig uses entry.media.images|first),
|
||
# so an explicit hero filename was redundant. Stories still use hero_image
|
||
# but they aren't posted through this form.
|
||
-
|
||
name: force_connect
|
||
label: Force connector line
|
||
type: toggle
|
||
classes: advanced-field
|
||
highlight: 0
|
||
default: 0
|
||
options:
|
||
1: 'Yes'
|
||
0: 'No'
|
||
validate:
|
||
type: bool
|
||
|
||
-
|
||
name: featured
|
||
label: Featured highlight
|
||
type: toggle
|
||
classes: advanced-field
|
||
highlight: 0
|
||
default: 0
|
||
options:
|
||
1: 'Yes'
|
||
0: 'No'
|
||
validate:
|
||
type: bool
|
||
|
||
novalidate: true
|
||
|
||
buttons:
|
||
-
|
||
type: submit
|
||
value: Post Daily
|
||
classes: btn-post
|
||
|
||
process:
|
||
add_page: true
|
||
upload: true
|
||
message: 'Entry posted successfully!'
|
||
reset: true
|
||
---
|