-
Notifications
You must be signed in to change notification settings - Fork 8
Agenda
I componenti principali dell'agenda del ministro sono:
- La sezione agenda, presente nella homepage e nella pagina del ministro
- La pagina agenda, con l'elenco degli eventi organizzati per mese a partire dal mese corrente
- La pagina archivio, con l'elenco degli eventi iniziando dal mese corrente e indietro nel tempo
- Le pagine dei singoli eventi
Il codice per questa sezione si trova nel partial "partials/schedule". La parte in alto di questa sezione fa visualizzare dei tab con un massimo di 8 date facendo un loop sulla collezione dates_shown
definita in config.rb
.
def dates_shown
nearest = nearest_date.strftime("%d%B%Y")
active_index = days_in_minister_schedule.index(nearest)
start = active_index - 3
finish = active_index + 4
days_in_minister_schedule[start..finish]
end
La collezione contiene fino a 8 elementi. Ognuno di essi è una stringa che rappresenta una data per la quale c'è almeno un evento nella agenda. All'indice 3
si trova la data più vicina al giorno corrente, i tre elementi precedenti hanno le tre date precedenti a quella centrale, e i 4 elementi successivi sono le quattro date successive a quella centrale.
Gli elementi nella collezione dates_shown
sono stringhe create attraverso metodo strftime("%d%B%Y")
su un oggetto DateTime
. La data che viene visualizzata deve essere formattata per ogni elemento usando prima DateTime.parse
per trasformare l'elemento di nuovo in un oggetto DateTime
e poi usando il metodo strftime("%d")
per il numero del giorno del mese o strftime("%#b")
per il mese.
I tabs della sezione mostrano gli eventi per ogni data facendo un loop sulla collezione dates_shown
e poi un altro loop sulla collezione schedule_events_by_day
per ogni elemento in dates_shown
.
La pagina agenda è nel template schedule.html
e riceve la collezione items
che corresponde alla collezione events_by_month
definita in config.rb
, passata al metodo paginate_with_fallback
per renderla accessibile al template schedule.html
.
events_by_month = months.each_with_object({}) do |month, h|
h[month] = (events_by_day.select do |k, v|
k.downcase.include?(month.downcase)
end)
end
paginate_with_fallback(events_by_month,
dato.schedule_page,
dato.minister_page,
locale,
"schedule")
La collezione è un Ruby hash con key/value pairs dove ogni key corrisponde a un mese, mentre il value è a sua volta una collezione di key/value pairs. In questa collezione ogni key è un giorno e il value e un array di eventi. La collezione accessibile dentro il template schedule.html
contiene come primo key il mese corrente e poi i mesi successivi nel tempo.
La struttura è uguale a quella della pagina agenda ma la collezione accessibile at template archive.html
contiene come primo key il mese corrente e poi i mesi precedenti andando indietro nel tempo.
archive_events_by_month = months_in_archive.each_with_object({}) do |month, h|
h[month] = (archive_events_by_day.select do |k, v|
k.downcase.include?(month.downcase)
end)
end
paginate_with_fallback(archive_events_by_month,
dato.schedule_archive_page,
dato.minister_page,
locale,
"archive")
Il template per questa pagina è schedule_event.html
e consiste in 2 partial, header-basic
(hero) e page-content
a cui vengono passati tutti i contenuti della pagina provenienti da Dato con la variabile locale page
.