diff --git a/content/events/other_events/django_pyladies_2022.md b/content/events/other_events/django_pyladies_2022.md index f04af2a1..3aaa8f9a 100644 --- a/content/events/other_events/django_pyladies_2022.md +++ b/content/events/other_events/django_pyladies_2022.md @@ -87,9 +87,9 @@ people_sections: - people_per_line: 4 people: - elisabeth-ortega-carrasco - - lpmayos - - natalia - - nuria + - laura-perez-mayos + - natalia-padilla + - nuria-pujol-vilanova - title: Mentors, speakers & volunteers id: main_organizers levels: @@ -97,15 +97,15 @@ people_sections: people_per_line: 4 people: - carlton-gibson - - david + - david-arcos - elisabeth-ortega-carrasco - ferran-jovell - - israel-saeta + - israel-saeta-perez - johanna-sanchez - - natalia - - nuria + - natalia-padilla + - nuria-pujol-vilanova - selen-ozkan - - xavi + - xavi-francisco-gilabert - name: Speakers people_per_line: 4 people: @@ -114,11 +114,11 @@ people_sections: - johanna-sanchez - nakchidil-melisse-chaumont - roser-parellada - - sonia-estrade + - sonia-estrade-albiol - name: Volunteers people_per_line: 4 people: - - mireia + - mireia-alvarez-dominguez previous_editions: diff --git a/content/events/pydatabcn/pydatabcn_2023.md b/content/events/pydatabcn/pydatabcn_2023.md index db0d27d9..50b9e3d8 100644 --- a/content/events/pydatabcn/pydatabcn_2023.md +++ b/content/events/pydatabcn/pydatabcn_2023.md @@ -57,20 +57,20 @@ people_sections: - adrian-garcia-riber - albert-pujol-torras - alvaro-duran-barata - - amalia_vradi + - amalia-vradi - carmen-iniesta-lopez - daniel-sanchez-santolaya - diego-quintana - edgar-sarria-tenes - fiorella-piriz-sapio - juan-bernardo-lince - - juan-luis-cano + - juan-luis-cano-rodriguez - miquel-sarrias - monica-dominguez - nikita-polovinkin - oriol-abril-pla - rajdeep-pal - - ricardo-ander-egg + - ricardo-ander-egg-aguilar - ruben-afonso - sergi-baena-miret - thais-ruiz-de-alda @@ -79,14 +79,14 @@ people_sections: levels: - people_per_line: 4 people: - - lpmayos - - natalia + - laura-perez-mayos + - natalia-padilla - elisabeth-ortega-carrasco - - amalia_vradi - - ariadna_fernandez_estevez - - paula_szewach - - nuria - - mireia + - amalia-vradi + - ariadna-fernandez + - paula-szewach + - nuria-pujol-vilanova + - mireia-alvarez-dominguez spansDuration: 15 numTracks: 4 diff --git a/content/events/pyday_bcn/pyday_bcn_2018.md b/content/events/pyday_bcn/pyday_bcn_2018.md index 4c7da9b3..5da1b2aa 100644 --- a/content/events/pyday_bcn/pyday_bcn_2018.md +++ b/content/events/pyday_bcn/pyday_bcn_2018.md @@ -84,7 +84,7 @@ heroBackground: /images/photos/people-pyday-2016.jpg

Workshops descriptions

Developing a small application with git

- Speaker: Ignasi Fosch (@ifosch)
+ Speaker: Ignasi Fosch (@ignasi-fosch)
Language: English
Description: In this workshop, the attendees will participate in collaborative developing a small simple application using git and GitHub for the workflow. The goals of the exercise is to practice some simple concepts about contributing code.
Level: Beginner
@@ -112,7 +112,7 @@ heroBackground: /images/photos/people-pyday-2016.jpg

  • Guide to install Pytorch.
  • Data analysis with Jupyter Notebook, Pandas and Plotly

    -

    Speaker: Natàlia Padilla (@nataliasirera) and Laura Pérez (@lpmayos) (@PyLadiesBCN)
    +

    Speaker: Natàlia Padilla (@nataliasirera) and Laura Pérez (@laura-perez-mayos) (@PyLadiesBCN)
    Language: English
    Description: A hands-on session where you will learn how to analyze data with Jupyter Notebook, Pandas and Plotly. This will be a guided workshop, suitable for both experienced users and beginners with an interest in data analysis.
    Level: Beginner
    diff --git a/content/events/pyday_bcn/pyday_bcn_2020.md b/content/events/pyday_bcn/pyday_bcn_2020.md index 589ef091..05046d82 100644 --- a/content/events/pyday_bcn/pyday_bcn_2020.md +++ b/content/events/pyday_bcn/pyday_bcn_2020.md @@ -31,37 +31,37 @@ people_sections: levels: - people_per_line: 4 people: - - alberto - - alvaro_duran + - alberto-camara + - alvaro-duran-barata - ankit-mahato - - carles_barrobes + - carles-barrobes - christian-adell - - daniel_mesejo + - daniel-mesejo-leon - edgar-riba - - eduard_cespedes + - eduard-cespedes-borras - elisabeth-ortega-carrasco - ferran-fabregas - francesco-faraone - gajendra-deshpande - joan-fontanals-martinez - - jose_haro + - jose-haro-peralta - julio-martinez - marc-pous - maria-teresa-grifa - - miroslav_sedivy + - miroslav-sedivy - title: Organizers id: organizers levels: - people_per_line: 4 people: - - david - - eloi - - ifosch - - lpmayos - - mireia - - natalia - - nuria - - rberenguel + - david-arcos + - eloi-puertas-prats + - ignasi-fosch + - laura-perez-mayos + - mireia-alvarez-dominguez + - natalia-padilla + - nuria-pujol-vilanova + - ruben-berenguel previous_editions: - name: PyDay BCN 2019 diff --git a/content/events/pyday_bcn/pyday_bcn_2021.md b/content/events/pyday_bcn/pyday_bcn_2021.md index ac0af524..94a6901b 100644 --- a/content/events/pyday_bcn/pyday_bcn_2021.md +++ b/content/events/pyday_bcn/pyday_bcn_2021.md @@ -42,7 +42,7 @@ people_sections: levels: - people_per_line: 4 people: - - albert-franzi + - albert-franzi-cros - alejandro-nicolas - alexandre-savio - anton-caceres @@ -66,14 +66,14 @@ people_sections: levels: - people_per_line: 4 people: - - lpmayos - - natalia - - david - - nuria - - xavi - - rberenguel - - eloi - - mireia + - laura-perez-mayos + - natalia-padilla + - david-arcos + - nuria-pujol-vilanova + - xavi-francisco-gilabert + - ruben-berenguel + - eloi-puertas-prats + - mireia-alvarez-dominguez previous_editions: - name: PyDay BCN 2020 diff --git a/content/events/pyday_bcn/pyday_bcn_2022.md b/content/events/pyday_bcn/pyday_bcn_2022.md index a7d7bf07..60b6b7a2 100644 --- a/content/events/pyday_bcn/pyday_bcn_2022.md +++ b/content/events/pyday_bcn/pyday_bcn_2022.md @@ -57,7 +57,7 @@ people_sections: - cheuk-ting-ho - eva-martin-del-pico - gema-parreno - - jimena-escobar + - jimena-escobar-bermudez - kemalcan-bora - marc-pous - pavel-lonkin @@ -67,10 +67,10 @@ people_sections: levels: - people_per_line: 4 people: - - natalia - - lpmayos - - xavi - - mireia + - natalia-padilla + - laura-perez-mayos + - xavi-francisco-gilabert + - mireia-alvarez-dominguez previous_editions: - name: PyDay BCN 2021 diff --git a/content/events/pyday_bcn/pyday_bcn_2023.md b/content/events/pyday_bcn/pyday_bcn_2023.md index 7d9a3259..6c47a9d2 100644 --- a/content/events/pyday_bcn/pyday_bcn_2023.md +++ b/content/events/pyday_bcn/pyday_bcn_2023.md @@ -50,7 +50,7 @@ people_sections: - noe-casas - vyron-vasileiadis - adria-blanco - - guille-abad + - guillermo-abad - javier-sabariego - christian-adell - pavel-sulimov @@ -59,8 +59,8 @@ people_sections: - diego-giaquinta - oriol-abril-pla - gabriel-de-maeztu - - camilo-chacon - - israel-saeta + - camilo-chacon-sartori + - israel-saeta-perez - emanuel-frazao - title: Organizers @@ -68,9 +68,9 @@ people_sections: levels: - people_per_line: 4 people: - - natalia - - alicia-morales - - patricia-lamadrid + - natalia-padilla + - alicia-morales-carrasco + - patricia-lamadrid-robles - elisabeth-ortega-carrasco previous_editions: diff --git a/content/events/pyday_bcn/pyday_bcn_2024.md b/content/events/pyday_bcn/pyday_bcn_2024.md index 1f2441c5..f022c1db 100644 --- a/content/events/pyday_bcn/pyday_bcn_2024.md +++ b/content/events/pyday_bcn/pyday_bcn_2024.md @@ -43,14 +43,14 @@ people_sections: levels: - people_per_line: 4 people: - - jimena-escobar + - jimena-escobar-bermudez - kemalcan-bora - xiang-xu - dave-pitts - - paula-bassaganas + - paula-bassaganas-odena - raul-cumplido - marc-ramirez - - manuel-gijon + - manuel-gijon-agudo - oriol-abril-pla - alex-molas - marina-palma @@ -61,11 +61,11 @@ people_sections: levels: - people_per_line: 4 people: - - alicia-morales - - david + - alicia-morales-carrasco + - david-arcos - ferran-jovell - - lpmayos - - jose-riera + - laura-perez-mayos + - jose-riera-sanchez previous_editions: diff --git a/content/events/pyday_bcn/pyday_bcn_2025.md b/content/events/pyday_bcn/pyday_bcn_2025.md index 5f70a966..98cf6034 100644 --- a/content/events/pyday_bcn/pyday_bcn_2025.md +++ b/content/events/pyday_bcn/pyday_bcn_2025.md @@ -49,21 +49,21 @@ people_sections: - enric-domingo - ester-jara - javier-ramos-panduro - - natalia + - natalia-padilla - amir-azam - - david + - david-arcos - javier-sabariego - - ely-farres + - ely-farres-palomeras - flavie-le-bars - cristina-cosma - - ricardo-ander-egg - - alberto + - ricardo-ander-egg-aguilar + - alberto-camara - jordi-bosch - kemalcan-bora - - kevin-sanchez + - kevin-sanchez-sancho - oriol-abril-pla - - camilo-chacon - - victor-garcia + - camilo-chacon-sartori + - victor-garcia-dominguez - eric-massip - ubaldo-hervas - kevin-albes @@ -77,7 +77,7 @@ people_sections: - sergi-ramirez - toni-espadas - jordi-bosch - - daniel-mesejo + - daniel-mesejo-leon # - title: Staff # id: staff @@ -87,8 +87,8 @@ people_sections: # - sergi-ramirez # - toni-espadas # - jordi-bosch -# - daniel-mesejo -# - jose-riera +# - daniel-mesejo-leon +# - jose-riera-sanchez # - mauricio # - brian-power # - eva-casas diff --git a/content/people/albert-franzi.md b/content/people/albert-franzi-cros.md similarity index 96% rename from content/people/albert-franzi.md rename to content/people/albert-franzi-cros.md index 723a07d9..de9aea3c 100644 --- a/content/people/albert-franzi.md +++ b/content/people/albert-franzi-cros.md @@ -1,5 +1,5 @@ --- -id: albert-franzi +id: albert-franzi-cros name: Albert Franzi Cros photo: albert-franzi-cros.jpg photo_anchor: Left diff --git a/content/people/alberto.md b/content/people/alberto-camara.md similarity index 97% rename from content/people/alberto.md rename to content/people/alberto-camara.md index 15b14a5e..8272251e 100644 --- a/content/people/alberto.md +++ b/content/people/alberto-camara.md @@ -1,5 +1,5 @@ --- -id: alberto +id: alberto-camara name: "Alberto Cámara" github: https://github.com/ber2 photo: alberto-camara.jpg diff --git a/content/people/alicia-morales.md b/content/people/alicia-morales-carrasco.md similarity index 96% rename from content/people/alicia-morales.md rename to content/people/alicia-morales-carrasco.md index 69bb6917..bb0ea675 100644 --- a/content/people/alicia-morales.md +++ b/content/people/alicia-morales-carrasco.md @@ -1,5 +1,5 @@ --- -id: alicia-morales +id: alicia-morales-carrasco name: Alicia Morales Carrasco photo: alicia-morales-carrasco.jpg # Smart cropped below the face on this portrait. diff --git a/content/people/alvaro-duran-barata.md b/content/people/alvaro-duran-barata.md index 14072e47..381eb603 100644 --- a/content/people/alvaro-duran-barata.md +++ b/content/people/alvaro-duran-barata.md @@ -1,6 +1,6 @@ --- id: alvaro-duran-barata -name: Alvaro Duran Barata +name: Álvaro Durán Barata photo: alvaro-duran-barata.jpeg photo_anchor: Top @@ -9,4 +9,4 @@ github: https://github.com/ohduran --- NLP/ML engineer -Alvaro is a Python developer with a unique blend of expertise in finance, software engineering, and data. He brings curiosity, intensity and an analytical mind to the table. When not in front of the keyboard, Alvaro is likely to be found reading voraciously, near a pizza shop, or working out. \ No newline at end of file +Álvaro is a Python developer with a unique blend of expertise in finance, software engineering, and data. He brings curiosity, intensity and an analytical mind to the table. When not in front of the keyboard, Álvaro is likely to be found reading voraciously, near a pizza shop, or working out. diff --git a/content/people/alvaro_duran.md b/content/people/alvaro_duran.md deleted file mode 100644 index b95c4545..00000000 --- a/content/people/alvaro_duran.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -id: alvaro_duran -name: Álvaro Durán Barata -photo: alvaro_duran.jpg - -site: https://alvaroduran.com ---- -An experienced software engineer, Álvaro has worked in top tier global banks and small software vendors. Having majored in Physics, he brings curiosity, intensity and an analytical mind to the table. diff --git a/content/people/amalia_vradi.md b/content/people/amalia-vradi.md similarity index 87% rename from content/people/amalia_vradi.md rename to content/people/amalia-vradi.md index a8748d80..e015a1ea 100644 --- a/content/people/amalia_vradi.md +++ b/content/people/amalia-vradi.md @@ -1,8 +1,8 @@ --- -id: amalia_vradi +id: amalia-vradi name: "Amalia Vradi" photo: amalia-vradi.jpg -pybcn_position: PyLadiesBCN Organizer +pybcn_position: Organizer linkedin: "https://www.linkedin.com/in/amaliavradi" github: "https://github.com/amaliavr" diff --git a/content/people/angel.md b/content/people/angel-fernandez-ibanez.md similarity index 93% rename from content/people/angel.md rename to content/people/angel-fernandez-ibanez.md index 7039edbc..e47ca881 100644 --- a/content/people/angel.md +++ b/content/people/angel-fernandez-ibanez.md @@ -1,5 +1,5 @@ --- -id: angel +id: angel-fernandez-ibanez name: Àngel Fernández Ibáñez twitter: "https://x.com/anxodio" linkedin: "https://www.linkedin.com/in/anxodio" diff --git a/content/people/ariadna_fernandez_estevez.md b/content/people/ariadna-fernandez.md similarity index 80% rename from content/people/ariadna_fernandez_estevez.md rename to content/people/ariadna-fernandez.md index e49559bb..0ce476e3 100644 --- a/content/people/ariadna_fernandez_estevez.md +++ b/content/people/ariadna-fernandez.md @@ -1,8 +1,8 @@ --- -id: ariadna_fernandez_estevez +id: ariadna-fernandez name: Ariadna Fernández photo: ariadna-fernandez.jpg -pybcn_position: PyLadiesBCN Organizer +pybcn_position: Organizer linkedin: "https://www.linkedin.com/in/ariadna-fernandez-estevez" github: "https://github.com/afernaes" --- diff --git a/content/people/camilo-chacon.md b/content/people/camilo-chacon-sartori.md similarity index 96% rename from content/people/camilo-chacon.md rename to content/people/camilo-chacon-sartori.md index 416862b1..aabb0d1a 100644 --- a/content/people/camilo-chacon.md +++ b/content/people/camilo-chacon-sartori.md @@ -1,5 +1,5 @@ --- -id: camilo-chacon +id: camilo-chacon-sartori name: Camilo Chacón Sartori photo: camilo-chacon-sartori.jpg twitter: https://x.com/camilo_chacon_s diff --git a/content/people/carles_barrobes.md b/content/people/carles-barrobes.md similarity index 96% rename from content/people/carles_barrobes.md rename to content/people/carles-barrobes.md index 6969b8bc..c8e3fc30 100644 --- a/content/people/carles_barrobes.md +++ b/content/people/carles-barrobes.md @@ -1,5 +1,5 @@ --- -id: carles_barrobes +id: carles-barrobes name: Carles Barrobés photo: carles-barrobes.jpg linkedin: https://www.linkedin.com/in/carlesbarrobes diff --git a/content/people/daniel-mesejo.md b/content/people/daniel-mesejo-leon.md similarity index 97% rename from content/people/daniel-mesejo.md rename to content/people/daniel-mesejo-leon.md index b61b39b8..341e94c5 100644 --- a/content/people/daniel-mesejo.md +++ b/content/people/daniel-mesejo-leon.md @@ -1,5 +1,5 @@ --- -id: daniel-mesejo +id: daniel-mesejo-leon name: "Daniel Mesejo Leon" linkedin: https://www.linkedin.com/in/daniel-alejandro-mesejo-leon github: https://github.com/mesejo diff --git a/content/people/daniel_mesejo.md b/content/people/daniel_mesejo.md deleted file mode 100644 index 36adb131..00000000 --- a/content/people/daniel_mesejo.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -id: daniel_mesejo -name: Daniel Mesejo -photo: daniel-mesejo.jpg -github: https://github.com/mesejo -site: https://stackoverflow.com/users/story/4001592 ---- -Has worked as research engineer, data scientist and backend engineer. When he is not working you can find him at StackOverflow. Has minor contributions to open source projects like eland, scikit-image, cvxpy. I As an interesting fact, he has Erdos 3 number. diff --git a/content/people/david.md b/content/people/david-arcos.md similarity index 94% rename from content/people/david.md rename to content/people/david-arcos.md index a091efad..730906ab 100644 --- a/content/people/david.md +++ b/content/people/david-arcos.md @@ -1,5 +1,5 @@ --- -id: david +id: david-arcos name: David Arcos photo: david-arcos.jpg pybcn_position: Organizer diff --git a/content/people/david-blazquez.md b/content/people/david-blazquez-garcia.md similarity index 82% rename from content/people/david-blazquez.md rename to content/people/david-blazquez-garcia.md index e9174103..af2fcf68 100644 --- a/content/people/david-blazquez.md +++ b/content/people/david-blazquez-garcia.md @@ -1,5 +1,5 @@ --- -id: david-blazquez +id: david-blazquez-garcia name: "David Blázquez García" photo: david-blazquez-garcia.jpg linkedin: "https://www.linkedin.com/in/dblazquezg" diff --git a/content/people/dimitri.md b/content/people/dimitri-herrero.md similarity index 74% rename from content/people/dimitri.md rename to content/people/dimitri-herrero.md index 77c5ba02..7123047e 100644 --- a/content/people/dimitri.md +++ b/content/people/dimitri-herrero.md @@ -1,5 +1,5 @@ --- -id: dimitri +id: dimitri-herrero name: Dimitri Herrero pybcn_position: Organizer diff --git a/content/people/eduard_cespedes.md b/content/people/eduard-cespedes-borras.md similarity index 96% rename from content/people/eduard_cespedes.md rename to content/people/eduard-cespedes-borras.md index e3c4c820..690e2aff 100644 --- a/content/people/eduard_cespedes.md +++ b/content/people/eduard-cespedes-borras.md @@ -1,5 +1,5 @@ --- -id: eduard_cespedes +id: eduard-cespedes-borras name: Eduard Céspedes Borràs photo: eduard-cespedes-borras.jpg twitter: https://x.com/haduart diff --git a/content/people/elisabeth-ortega-carrasco.md b/content/people/elisabeth-ortega-carrasco.md index 13af0796..85ed965d 100644 --- a/content/people/elisabeth-ortega-carrasco.md +++ b/content/people/elisabeth-ortega-carrasco.md @@ -4,7 +4,7 @@ name: Elisabeth Ortega Carrasco photo: elisabeth-ortega-carrasco.jpg -pybcn_position: PyLadiesBCN Organizer +pybcn_position: Organizer twitter: https://x.com/draentropia github: https://github.com/draentropia diff --git a/content/people/eloi.md b/content/people/eloi-puertas-prats.md similarity index 94% rename from content/people/eloi.md rename to content/people/eloi-puertas-prats.md index a1f1ef7d..645640aa 100644 --- a/content/people/eloi.md +++ b/content/people/eloi-puertas-prats.md @@ -1,5 +1,5 @@ --- -id: eloi +id: eloi-puertas-prats name: Eloi Puertas Prats pybcn_position: "Organizer" photo: eloi-puertas-prats.jpg diff --git a/content/people/ely-farres.md b/content/people/ely-farres-palomeras.md similarity index 88% rename from content/people/ely-farres.md rename to content/people/ely-farres-palomeras.md index e762edbe..60483ce6 100644 --- a/content/people/ely-farres.md +++ b/content/people/ely-farres-palomeras.md @@ -1,5 +1,5 @@ --- -id: ely-farres +id: ely-farres-palomeras name: "Ely Farrés Palomeras" photo: ely-farres-palomeras.jpg linkedin: "https://www.linkedin.com/in/ely-farr%C3%A9s-palomeras-4459882b7" diff --git a/content/people/esteve.md b/content/people/esteve-fernandez.md similarity index 93% rename from content/people/esteve.md rename to content/people/esteve-fernandez.md index 74a59eab..17c14608 100644 --- a/content/people/esteve.md +++ b/content/people/esteve-fernandez.md @@ -1,5 +1,5 @@ --- -id: esteve +id: esteve-fernandez name: "Esteve Fernàndez" photo: esteve-fernandez.jpg pybcn_position: "Collaborator" diff --git a/content/people/guille-abad.md b/content/people/guillermo-abad.md similarity index 97% rename from content/people/guille-abad.md rename to content/people/guillermo-abad.md index cc232790..8f71a9cc 100644 --- a/content/people/guille-abad.md +++ b/content/people/guillermo-abad.md @@ -1,5 +1,5 @@ --- -id: guille-abad +id: guillermo-abad name: "Guillermo Abad" photo: guillermo-abad.jpg linkedin: "https://www.linkedin.com/in/guillermo-abad-l%C3%B3pez" diff --git a/content/people/ifosch.md b/content/people/ignasi-fosch.md similarity index 95% rename from content/people/ifosch.md rename to content/people/ignasi-fosch.md index a8fbda39..9cd2b0b9 100644 --- a/content/people/ifosch.md +++ b/content/people/ignasi-fosch.md @@ -1,5 +1,5 @@ --- -id: ifosch +id: ignasi-fosch name: Ignasi Fosch photo: ignasi-fosch.jpg pybcn_position: Organizer diff --git a/content/people/israel-saeta.md b/content/people/israel-saeta-perez.md similarity index 90% rename from content/people/israel-saeta.md rename to content/people/israel-saeta-perez.md index 970e3076..e8d67ac2 100644 --- a/content/people/israel-saeta.md +++ b/content/people/israel-saeta-perez.md @@ -1,5 +1,5 @@ --- -id: israel-saeta +id: israel-saeta-perez name: "Israel Saeta Pérez" photo: israel-saeta-perez.jpg twitter: "https://x.com/dukebody" diff --git a/content/people/jimena-escobar.md b/content/people/jimena-escobar-bermudez.md similarity index 94% rename from content/people/jimena-escobar.md rename to content/people/jimena-escobar-bermudez.md index 0bd6e381..ab302a39 100644 --- a/content/people/jimena-escobar.md +++ b/content/people/jimena-escobar-bermudez.md @@ -1,5 +1,5 @@ --- -id: jimena-escobar +id: jimena-escobar-bermudez name: "Jimena Escobar Bermúdez" photo: jimena-escobar-bermudez.jpg linkedin: "https://www.linkedin.com/in/jimena-eb" diff --git a/content/people/jordi.md b/content/people/jordi-soucheiron.md similarity index 93% rename from content/people/jordi.md rename to content/people/jordi-soucheiron.md index c8f32781..cf7b1b5b 100644 --- a/content/people/jordi.md +++ b/content/people/jordi-soucheiron.md @@ -1,5 +1,5 @@ --- -id: jordi +id: jordi-soucheiron name: Jordi Soucheiron photo: jordi-soucheiron.jpg photo_anchor: Top diff --git a/content/people/jose_haro.md b/content/people/jose-haro-peralta.md similarity index 94% rename from content/people/jose_haro.md rename to content/people/jose-haro-peralta.md index db2c8c32..0218cb31 100644 --- a/content/people/jose_haro.md +++ b/content/people/jose-haro-peralta.md @@ -1,5 +1,5 @@ --- -id: jose_haro +id: jose-haro-peralta name: Jose Haro Peralta photo: jose-haro-peralta.png photo_anchor: Top diff --git a/content/people/jose-riera.md b/content/people/jose-riera-sanchez.md similarity index 92% rename from content/people/jose-riera.md rename to content/people/jose-riera-sanchez.md index f2da07af..86ba8d2b 100644 --- a/content/people/jose-riera.md +++ b/content/people/jose-riera-sanchez.md @@ -1,5 +1,5 @@ --- -id: jose-riera +id: jose-riera-sanchez name: "José Riera Sánchez" photo: jose-riera-sanchez.jpg diff --git a/content/people/josep.md b/content/people/josep-martinez-vila.md similarity index 91% rename from content/people/josep.md rename to content/people/josep-martinez-vila.md index d9304ce1..c0b8fc89 100644 --- a/content/people/josep.md +++ b/content/people/josep-martinez-vila.md @@ -1,5 +1,5 @@ --- -id: josep +id: josep-martinez-vila name: "Josep Martínez Vilà" pybcn_position: "Organizer" twitter: "https://x.com/jmartinezvila" diff --git a/content/people/juan-luis-cano.md b/content/people/juan-luis-cano-rodriguez.md similarity index 97% rename from content/people/juan-luis-cano.md rename to content/people/juan-luis-cano-rodriguez.md index 201cdcf5..2d92bef4 100644 --- a/content/people/juan-luis-cano.md +++ b/content/people/juan-luis-cano-rodriguez.md @@ -1,5 +1,5 @@ --- -id: juan-luis-cano +id: juan-luis-cano-rodriguez name: Juan Luis Cano Rodríguez photo: juan-luis-cano-rodriguez.jpg linkedin: https://www.linkedin.com/in/juanluiscanor diff --git a/content/people/kevin-sanchez.md b/content/people/kevin-sanchez-sancho.md similarity index 84% rename from content/people/kevin-sanchez.md rename to content/people/kevin-sanchez-sancho.md index 0147d45b..57eded5c 100644 --- a/content/people/kevin-sanchez.md +++ b/content/people/kevin-sanchez-sancho.md @@ -1,5 +1,5 @@ --- -id: kevin-sanchez +id: kevin-sanchez-sancho name: "Kevin Sanchez Sancho" photo: kevin-sanchez-sancho.jpg linkedin: "https://www.linkedin.com/in/kevin-sanchez-sancho-807b7268" diff --git a/content/people/lpmayos.md b/content/people/laura-perez-mayos.md similarity index 85% rename from content/people/lpmayos.md rename to content/people/laura-perez-mayos.md index d056a2c9..aaaf4276 100644 --- a/content/people/lpmayos.md +++ b/content/people/laura-perez-mayos.md @@ -1,10 +1,10 @@ --- -id: lpmayos +id: laura-perez-mayos name: "Laura Pérez Mayos" photo: laura-perez-mayos.jpg site: https://lpmayos.github.io -pybcn_position: "PyLadiesBCN Organizer" +pybcn_position: "Organizer" linkedin: "https://www.linkedin.com/in/lpmayos" github: "https://github.com/lpmayos" diff --git a/content/people/loris.md b/content/people/loris-mularoni.md similarity index 92% rename from content/people/loris.md rename to content/people/loris-mularoni.md index fabf8558..c56dab9e 100644 --- a/content/people/loris.md +++ b/content/people/loris-mularoni.md @@ -1,5 +1,5 @@ --- -id: loris +id: loris-mularoni name: Loris Mularoni photo: loris-mularoni.jpg diff --git a/content/people/manuel-gijon.md b/content/people/manuel-gijon-agudo.md similarity index 91% rename from content/people/manuel-gijon.md rename to content/people/manuel-gijon-agudo.md index dfe52020..f692e419 100644 --- a/content/people/manuel-gijon.md +++ b/content/people/manuel-gijon-agudo.md @@ -1,5 +1,5 @@ --- -id: manuel-gijon +id: manuel-gijon-agudo name: Manuel Gijón Agudo photo: manuel-gijon-agudo.jpg linkedin: https://www.linkedin.com/in/manuel-gij%C3%B3n-agudo diff --git a/content/people/mireia.md b/content/people/mireia-alvarez-dominguez.md similarity index 85% rename from content/people/mireia.md rename to content/people/mireia-alvarez-dominguez.md index 84e0c543..adb4cf54 100644 --- a/content/people/mireia.md +++ b/content/people/mireia-alvarez-dominguez.md @@ -1,5 +1,5 @@ --- -id: mireia +id: mireia-alvarez-dominguez name: Mireia Álvarez Domínguez photo: mireia-alvarez-dominguez.jpg pybcn_position: "Former Treasurer" diff --git a/content/people/miroslav_sedivy.md b/content/people/miroslav-sedivy.md similarity index 94% rename from content/people/miroslav_sedivy.md rename to content/people/miroslav-sedivy.md index cf967311..3295aeda 100644 --- a/content/people/miroslav_sedivy.md +++ b/content/people/miroslav-sedivy.md @@ -1,5 +1,5 @@ --- -id: miroslav_sedivy +id: miroslav-sedivy name: "Miroslav Šedivý" photo: miroslav-sedivy.jpg twitter: "https://x.com/eumiro" diff --git a/content/people/natalia.md b/content/people/natalia-padilla.md similarity index 82% rename from content/people/natalia.md rename to content/people/natalia-padilla.md index eca41bcc..dd5bbec3 100644 --- a/content/people/natalia.md +++ b/content/people/natalia-padilla.md @@ -1,8 +1,8 @@ --- -id: natalia +id: natalia-padilla name: "Natàlia Padilla" photo: natalia-padilla.jpg -pybcn_position: "PyLadiesBCN Organizer" +pybcn_position: "Organizer" twitter: "https://x.com/nataliasirera" linkedin: "https://www.linkedin.com/in/natàlia-padilla-sirera-8112305a" diff --git a/content/people/nuria.md b/content/people/nuria-pujol-vilanova.md similarity index 79% rename from content/people/nuria.md rename to content/people/nuria-pujol-vilanova.md index 28025277..0e2fecc5 100644 --- a/content/people/nuria.md +++ b/content/people/nuria-pujol-vilanova.md @@ -1,9 +1,9 @@ --- -id: nuria +id: nuria-pujol-vilanova name: "Núria Pujol Vilanova" github: https://github.com/llevaNEUS photo: nuria-pujol-vilanova.jpg -pybcn_position: "PyLadiesBCN Organizer" +pybcn_position: "Organizer" twitter: "https://x.com/llevaneus" linkedin: "https://www.linkedin.com/in/n%C3%BAria-pujol-780a145" diff --git a/content/people/patricia-lamadrid.md b/content/people/patricia-lamadrid-robles.md similarity index 92% rename from content/people/patricia-lamadrid.md rename to content/people/patricia-lamadrid-robles.md index fdfdd37e..822bac45 100644 --- a/content/people/patricia-lamadrid.md +++ b/content/people/patricia-lamadrid-robles.md @@ -1,5 +1,5 @@ --- -id: patricia-lamadrid +id: patricia-lamadrid-robles name: Patricia Lamadrid Robles photo: patricia-lamadrid-robles.jpg diff --git a/content/people/patricio-reyes.md b/content/people/patricio-reyes-valenzuela.md similarity index 91% rename from content/people/patricio-reyes.md rename to content/people/patricio-reyes-valenzuela.md index ababed58..1e445670 100644 --- a/content/people/patricio-reyes.md +++ b/content/people/patricio-reyes-valenzuela.md @@ -1,5 +1,5 @@ --- -id: patricio-reyes +id: patricio-reyes-valenzuela name: "Patricio Reyes Valenzuela" photo: patricio-reyes-valenzuela.jpg twitter: "https://x.com/pareyesv" diff --git a/content/people/paula-bassaganas.md b/content/people/paula-bassaganas-odena.md similarity index 97% rename from content/people/paula-bassaganas.md rename to content/people/paula-bassaganas-odena.md index edaa856b..e4f6b55d 100644 --- a/content/people/paula-bassaganas.md +++ b/content/people/paula-bassaganas-odena.md @@ -1,5 +1,5 @@ --- -id: paula-bassaganas +id: paula-bassaganas-odena name: Paula Bassagañas Òdena photo: paula-bassaganas-odena.jpg diff --git a/content/people/paula_szewach.md b/content/people/paula-szewach.md similarity index 86% rename from content/people/paula_szewach.md rename to content/people/paula-szewach.md index 37fbe70d..b7ab2163 100644 --- a/content/people/paula_szewach.md +++ b/content/people/paula-szewach.md @@ -1,7 +1,7 @@ --- -id: paula_szewach +id: paula-szewach name: "Paula Szewach" -pybcn_position: PyLadiesBCN Organizer +pybcn_position: Organizer site: "https://www.paulaszewach.com" linkedin: "https://www.linkedin.com/in/paulaszewach" github: "https://github.com/pszewach" diff --git a/content/people/peter-krupa.md b/content/people/peter-krupa.md index 52acae74..87bd26f9 100644 --- a/content/people/peter-krupa.md +++ b/content/people/peter-krupa.md @@ -5,8 +5,6 @@ name: "Peter Krupa" photo: peter-krupa.jpg photo_anchor: Bottom -pybcn_position: "Board member of Communications" - --- Originari dels Estats Units, tinc dues dècades d'experiència com a periodista i traductor, i em sento molt còmode escrivint per a les xarxes socials i gestionant campanyes per augmentar la visibilitat i fomentar la participació. Actualment estic cursant un Bachelor of Science amb especialització en Data Analytics a la Western Governors University, i fa dos anys que treballo amb Python i assisteixo a les trobades de PyBCN. M'encantaria tenir l'oportunitat d'ajudar aquesta organització a créixer augmentant-ne el perfil a les xarxes socials, actualitzant els materials de difusió i col·laborant en tot allò que calgui. \ No newline at end of file diff --git a/content/people/ricardo-ander-egg.md b/content/people/ricardo-ander-egg-aguilar.md similarity index 90% rename from content/people/ricardo-ander-egg.md rename to content/people/ricardo-ander-egg-aguilar.md index a3a30c39..78f9cfb0 100644 --- a/content/people/ricardo-ander-egg.md +++ b/content/people/ricardo-ander-egg-aguilar.md @@ -1,5 +1,5 @@ --- -id: ricardo-ander-egg +id: ricardo-ander-egg-aguilar name: Ricardo Ander-Egg Aguilar photo: ricardo-ander-egg-aguilar.jpg photo_anchor: Top diff --git a/content/people/ricardo.md b/content/people/ricardo-martinez.md similarity index 74% rename from content/people/ricardo.md rename to content/people/ricardo-martinez.md index 16eb55ae..139d2d51 100644 --- a/content/people/ricardo.md +++ b/content/people/ricardo-martinez.md @@ -1,5 +1,5 @@ --- -id: ricardo +id: ricardo-martinez name: Ricardo Martínez pybcn_position: Collaborator diff --git a/content/people/rberenguel.md b/content/people/ruben-berenguel.md similarity index 97% rename from content/people/rberenguel.md rename to content/people/ruben-berenguel.md index 29cd50a1..56bc52df 100644 --- a/content/people/rberenguel.md +++ b/content/people/ruben-berenguel.md @@ -1,5 +1,5 @@ --- -id: rberenguel +id: ruben-berenguel name: "Ruben Berenguel" photo: ruben-berenguel.png pybcn_position: Organizer diff --git a/content/people/sonia-estrade.md b/content/people/sonia-estrade-albiol.md similarity index 92% rename from content/people/sonia-estrade.md rename to content/people/sonia-estrade-albiol.md index 5c360a2b..5c322807 100644 --- a/content/people/sonia-estrade.md +++ b/content/people/sonia-estrade-albiol.md @@ -1,5 +1,5 @@ --- -id: sonia-estrade +id: sonia-estrade-albiol name: "Sònia Estradé Albiol" photo: sonia-estrade-albiol.jpg twitter: "https://x.com/estrade_sonia" diff --git a/content/people/toni-espadas.md b/content/people/toni-espadas.md index 4b800668..64b3d628 100644 --- a/content/people/toni-espadas.md +++ b/content/people/toni-espadas.md @@ -5,8 +5,6 @@ name: "Toni Espadas" photo: toni-espadas.jpg photo_anchor: Bottom -pybcn_position: "Treasurer" - linkedin: "https://www.linkedin.com/in/toni-espadas" github: "https://github.com/anthonyswords" diff --git a/content/people/victor-garcia.md b/content/people/victor-garcia-dominguez.md similarity index 85% rename from content/people/victor-garcia.md rename to content/people/victor-garcia-dominguez.md index 5d595702..f88acb67 100644 --- a/content/people/victor-garcia.md +++ b/content/people/victor-garcia-dominguez.md @@ -1,5 +1,5 @@ --- -id: victor-garcia +id: victor-garcia-dominguez name: "Víctor Garcia Domínguez" photo: victor-garcia-dominguez.jpg linkedin: "https://www.linkedin.com/in/v%C3%ADctor-garcia-dom%C3%ADnguez-9083571a3" diff --git a/content/people/xavi.md b/content/people/xavi-francisco-gilabert.md similarity index 91% rename from content/people/xavi.md rename to content/people/xavi-francisco-gilabert.md index 2da3d064..04acbaf8 100644 --- a/content/people/xavi.md +++ b/content/people/xavi-francisco-gilabert.md @@ -1,5 +1,5 @@ --- -id: xavi +id: xavi-francisco-gilabert name: Xavi Francisco Gilabert photo: xavi-francisco-gilabert.jpg pybcn_position: Organizer diff --git a/content/pybcn_association/information.md b/content/pybcn_association/information.md index 3bb0c502..95ba205c 100644 --- a/content/pybcn_association/information.md +++ b/content/pybcn_association/information.md @@ -29,8 +29,8 @@ We have a Management Board and a Permanent Committee to make decisions, and work * President: Jordi Bosch Alibau * Secretary: Daniel Mesejo Leon * Treasurer: Yago Tafalla - * Board member of Comunication: Mauricio Volcanes - * Board member of Events: Sergi Ramírez Mitjans + * Communications: Mauricio Volcanes + * Events: Sergi Ramírez Mitjans * **Permanent Committee**: It is mostly a consultive board and help coordinate the work groups. diff --git a/content/pybcn_association/organizers.md b/content/pybcn_association/organizers.md index 2737f170..742a502a 100644 --- a/content/pybcn_association/organizers.md +++ b/content/pybcn_association/organizers.md @@ -1,5 +1,10 @@ --- title: "Organizers" +# The name the appearance list of a person modal calls this page by. The +# line there reads "Permanent Committee at PyBCN", where the title would +# read "Permanent Committee at Organizers" and repeat the role. See +# appearances_index.html. +appearances_title: "PyBCN" description: "Get to know the people behind PyBCN!" menu: main: @@ -11,22 +16,22 @@ heroBackground: /images/photos/reg-desk-pyday-2019.jpg people_levels: - people_per_line: 5 - people: [jordi-bosch, daniel-mesejo, yago-tafalla, mauricio-volcanes, sergi-ramirez] + people: [jordi-bosch, daniel-mesejo-leon, yago-tafalla, mauricio-volcanes, sergi-ramirez] name: Management Board (2026) - people_per_line: 6 - people: [alberto, david, ifosch, natalia, alicia-morales, ferran-jovell] + people: [alberto-camara, david-arcos, ignasi-fosch, natalia-padilla, alicia-morales-carrasco, ferran-jovell] name: Permanent Committee - people_per_line: 4 - people: [elisabeth-ortega-carrasco, josep, loris, lpmayos, nuria, jose-riera, rberenguel, xavi] + people: [elisabeth-ortega-carrasco, josep-martinez-vila, loris-mularoni, laura-perez-mayos, nuria-pujol-vilanova, jose-riera-sanchez, ruben-berenguel, xavi-francisco-gilabert] name: Collaborators - people_per_line: 5 name: Management Board (2018 - 2025) # An entry with a role shows that role on this page instead of the # pybcn_position of the person file. See people-grid.html. people: - - id: lpmayos + - id: laura-perez-mayos role: Former President - - mireia - - id: natalia + - mireia-alvarez-dominguez + - id: natalia-padilla role: Former Secretary --- diff --git a/content/pyladies_bcn/organizers-and-speakers.md b/content/pyladies_bcn/organizers-and-speakers.md index 9c4a576b..dc4a95ac 100644 --- a/content/pyladies_bcn/organizers-and-speakers.md +++ b/content/pyladies_bcn/organizers-and-speakers.md @@ -1,5 +1,9 @@ --- title: "PyLadies BCN Organizers" +# The name the appearance list of a person modal calls this page by. The +# line there reads "Organizer at PyLadies BCN", where the title would +# repeat the role. See appearances_index.html. +appearances_title: "PyLadies BCN" description: "The people that makes it possible!" menu: main: @@ -11,6 +15,6 @@ heroBackground: /images/photos/pyladies/header/header2.jpeg people_levels: - people_per_line: 4 - people: [nuria, lpmayos, natalia, elisabeth-ortega-carrasco] + people: [nuria-pujol-vilanova, laura-perez-mayos, natalia-padilla, elisabeth-ortega-carrasco] name: PyLadiesBCN Organizers --- diff --git a/data/role_emoji.yaml b/data/role_emoji.yaml new file mode 100644 index 00000000..41eb4cbe --- /dev/null +++ b/data/role_emoji.yaml @@ -0,0 +1,51 @@ +# The emoji that marks each row of the Roles and the Events lists +# of a person modal (see person_appearances.html). Left side: the role of +# the row. For an events row that is the first of its roles, the heading +# of the event page through roles.yaml. For a roles row it is the label of +# the row, which is a level name of an organizers page through roles.yaml, +# and a level name that is not a role ("Permanent Committee", +# "Collaborators", "Management Board (2026)") is not here and takes the +# "*" entry. Right side: one emoji. A role that is not here takes the "*" +# entry, so a new role shows up with a neutral glyph rather than with +# none, and the row does not change shape when it is added. The four +# level names above are the live test of that fallback. +# +# Every emoji here has emoji presentation by default (Emoji_Presentation +# in the Unicode emoji data), so none of them needs U+FE0F, the variation +# selector, and none is a ZWJ sequence. Both are banned: a selector or a +# joiner is one glyph to one font and two to another, so the marker column +# would depend on the visitor's font. Keep to that set when adding a row: +# a candidate that needs FE0F (a heart, a star, a hammer and pick) is out +# even if it fits the role better. +# +# Close roles share one glyph. A Former X takes the glyph of X: the row +# already prints "Former", and a second glyph for a past post would say +# that the post itself was different, which it was not. +# The four posts of the board have a glyph each, so that the posts tell +# apart at a glance when the board page lists them. +Speaker: 🎤 +Mentor: 🎓 +Volunteer: 🙋 +Organizer: 🧭 +Collaborator: 🤝 +President: 🔑 +Former President: 🔑 +Secretary: 📝 +Former Secretary: 📝 +Treasurer: 💶 +Former Treasurer: 💶 +Communications: 📣 +Events: 📅 +"*": 👤 + +# The Roles list of the modal is keyed by the level a person sits +# at, not by a role: "Permanent Committee", not "Organizer". Those names +# are below so that the list reads as a group per row rather than as the +# fallback silhouette on every row. A level name that is not here falls +# back to "*", which is why the board rows carry the year: a 2027 board +# needs a row of its own, and until it has one its glyph is the neutral +# one, not a wrong one. +Permanent Committee: 🧭 +Collaborators: 🤝 +Management Board (2026): 📋 +Management Board (2018 - 2025): 📋 diff --git a/data/roles.yaml b/data/roles.yaml index 23f6975b..e8dc8c49 100644 --- a/data/roles.yaml +++ b/data/roles.yaml @@ -18,4 +18,4 @@ Speakers: Speaker Organizers: Organizer Mentors: Mentor Volunteers: Volunteer -PyLadiesBCN Organizers: PyLadiesBCN Organizer +PyLadiesBCN Organizers: Organizer diff --git a/themes/pybcn_theme/assets/images/people/alvaro_duran.jpg b/themes/pybcn_theme/assets/images/people/alvaro_duran.jpg deleted file mode 100644 index 74b6790c..00000000 Binary files a/themes/pybcn_theme/assets/images/people/alvaro_duran.jpg and /dev/null differ diff --git a/themes/pybcn_theme/assets/images/people/daniel-mesejo.jpg b/themes/pybcn_theme/assets/images/people/daniel-mesejo.jpg deleted file mode 100644 index 24dc697a..00000000 Binary files a/themes/pybcn_theme/assets/images/people/daniel-mesejo.jpg and /dev/null differ diff --git a/themes/pybcn_theme/assets/scss/main.scss b/themes/pybcn_theme/assets/scss/main.scss index bfef0d21..f3582d45 100644 --- a/themes/pybcn_theme/assets/scss/main.scss +++ b/themes/pybcn_theme/assets/scss/main.scss @@ -1,5 +1,9 @@ $navbar-color: #FFFFFF; $blue-pybcn: #006c9b; +// The rest colour of an icon that lights up under the pointer: a social +// glyph on a card and in a modal. 4.68:1 on white, above the 3:1 WCAG +// 1.4.11 asks of a graphic that carries meaning. +$icon-grey: #6c757d; $yellow-pybcn-OLD: #ffdc39; $yellow-pybcn: #fdbf2e; $dark-grey: #343a40; diff --git a/themes/pybcn_theme/assets/scss/people.scss b/themes/pybcn_theme/assets/scss/people.scss index ec259eed..86d676a2 100644 --- a/themes/pybcn_theme/assets/scss/people.scss +++ b/themes/pybcn_theme/assets/scss/people.scss @@ -2,6 +2,15 @@ // people section, so there is no single id to target. .people_grid { + // The card width, the space between two cards, and the count a row + // falls back to on a tablet. Declared here because the rules below use + // them from the first one. + $card: 178px; + $gutter: 12px; + // A literal divisor is not a division in Dart Sass, which emits + // width: 100%/3 and the browser drops the rule. A variable divides. + $tablet_per_line: 3; + // A Bootstrap container adds its own 15px of padding inside the padding // the column already has. On an event page the level heading band spans // the full width of the col-md-9 while the row of cards sat 15px inside @@ -13,12 +22,17 @@ padding-right: 0; } - // The last row of a section rarely fills. Centring it puts the remainder - // in the middle instead of leaving one card alone on the left, and it - // means every section can keep the same cards per row, so no section ends - // up with wider cards than another and reads as more important. + // Every row of cards starts on the same left edge as the heading above + // it, which is the line the eye follows down the page. Three rules are + // needed. The row caps its own width further down, so it must not be + // centred in the column. The cards of a row that does not fill must not + // be centred under the cards above them. And the half gutter each card + // carries on its left has to come back off the row, so the edge of the + // first card, not the edge of its gutter, is what lands on the line. .row.level { - justify-content: center; + justify-content: flex-start; + margin-left: -$gutter / 2; + margin-right: -$gutter / 2; } // Every card is the same width in every section, and so is the space @@ -32,12 +46,6 @@ // dropped that page from four cards a row to three. As a fraction, four // slots of 190px fit, and the card there is the same 178px as on the // organizers page. - $card: 178px; - $gutter: 12px; - // A literal divisor is not a division in Dart Sass, which emits - // width: 100%/3 and the browser drops the rule. A variable divides. - $tablet_per_line: 3; - .person_wrapper { flex: 0 0 auto; // The card is the container the type sizes against, at the end of @@ -61,7 +69,6 @@ @media (min-width: 768px) and (max-width: 991.98px) { .row.level { max-width: ($card + $gutter) * 3; - margin-left: auto; margin-right: auto; .person_wrapper { @@ -76,7 +83,6 @@ @for $n from 1 through 8 { .row.level.per_line_#{$n} { max-width: ($card + $gutter) * $n; - margin-left: auto; margin-right: auto; .person_wrapper { @@ -273,10 +279,21 @@ // (see .icon_x in main.scss), so it follows the same rule. i { font-size: clamp(18px, 16cqi, 32px); - color: black; - &:hover { - color: $blue-pybcn; - } + // Grey at rest and the PyBCN blue under the pointer, + // the same treatment the glyph of an appearance row + // takes in the modal. They were solid black here and + // the link blue in the modal, which are two answers to + // the same question on one page. 4.68:1 on white, so + // the grey still passes the 3:1 WCAG asks of a graphic. + color: $icon-grey; + transition: color 0.15s linear; + } + + // On the link and not on the glyph, so the margin each + // link carries is part of the target. + a:hover i, + a:focus i { + color: $blue-pybcn; } } @@ -306,39 +323,49 @@ .modal { .modal-dialog { - // 900px, from the content and not from the window: the - // 300px photo column and its 20px gap, a 548px text - // column, and the 16px of body padding each side. The - // text column holds the longest line the modal renders - // in one line, the 498px event line "Mentor and - // Organizer at Hands-on Django with PyLadiesBCN (2022)" - // behind its 20px list indent, and is about 65 - // characters of the body font, a comfortable measure - // for a bio paragraph. The old cap was 70% of the - // window: 1006px at 1440px, where a line of text ran - // 650px and the foot of the modal was blank to the - // right of the social links, and a percentage of a - // 2560px screen is wider still. Under 900px the dialog - // fits the window, as a max-width does. - max-width: 900px; - - // Two columns: the photo on the left, everything else - // on the right. The photo used to sit in the header - // only, beside the name, the role and the bio, with - // the sections running full width under it: three - // short lines beside a 200px photo left a gap under - // the photo that the first section had to clear. The - // right column now holds the sections too, so nothing - // runs under the photo whatever the length of the text. + // 580px, from the content and not from the window: + // the 548px text column, which is now the whole body, + // and the 16px of body padding each side. The cap was + // 900px while the photo was a 300px column with a + // 20px gap beside that text column. With the photo in + // the header row the column and the gap are gone, and + // 900px put 866px of bio on one line: 122 characters + // of the 16px body font on the first line of Jordi + // Bosch's bio, measured at 1440px, about twice a + // comfortable measure. The 548px holds the longest + // line the modal renders in one line, the 498px event + // line "Mentor and Organizer at Hands-on Django with + // PyLadiesBCN (2022)" behind its 38px marker column, and + // is about 76 characters of the body font at the 7.15px + // the average glyph of that bio measures. The header + // row leaves 422px for the name after the 40px that + // clears the close button, the 20px gap, and the 64px + // photo, and "Elisabeth Ortega Carrasco", the longest + // name on the organizers page, sits on one line there + // at 28px. The cap before 900px was 70% of the window: + // 1006px at 1440px, and a percentage of a 2560px + // screen is wider still. Under 580px the dialog fits + // the window, as a max-width does. + max-width: 580px; + + // One column: a header row, then the sections at the + // full width of the body. The body used to be two + // columns, the photo on the left at 300px and the text + // on the right, so that nothing ran under the photo. + // That put a blank strip under the photo instead, as + // tall as the text beside it, which for a person with + // a bio is most of the modal. The photo is small and + // round now and takes the corner of the header, so the + // text has nothing to clear and the columns are gone. + // The body is a block again, the Bootstrap default, and + // the close button stays where the two-column layout + // put it: absolute in the corner, at the body padding. + // Bootstrap floats it, and a float beside the header + // row would narrow the row by the width of the button + // through the block formatting context a flex + // container opens, which is true but not something a + // reader of this file should have to know. .modal-body { - display: flex; - align-items: flex-start; - - // Bootstrap floats the close button, and a flex - // container ignores floats: the button would become - // the first item of the row and push the photo - // right. It sits in the corner instead, where the - // float put it, at the body padding. .close { position: absolute; top: 1rem; @@ -346,47 +373,148 @@ } } - // The photo column is as wide as the photo and no - // wider: 300px, or the short side of a smaller source - // (see people_summary.html), so a 200px photo leaves - // the room to the text and not to a blank strip. 300px - // is a third of the dialog on a wide screen, half again - // the 200px of before, which was the card's size and - // small next to the text, and under the 400px that was - // a quarter of the modal and the only thing a reader - // saw at first. The 400px file serves it at 1x and the - // 800px file at 2x. - .person_photo { - flex: 0 0 auto; - margin-right: 20px; + // The name and the role on the left, the photo on the + // right, and only those two share the row: a flex row + // and not a float, because a float would let the bio + // run up beside the photo and collide with the section + // headings and their rules. The row is as tall as the + // taller of the two, and the photo is sized so that + // the two are nearly the same height (see .person_photo + // below), so the row ends where the text ends and the + // first section starts right under the role. With the + // 120px photo the row was 120px tall against 60px of + // name and role, and the Bio heading sat 80px under + // the role: a blank band that read as a missing + // section. Centred, not top-aligned: the two differ by + // 4px on one line, so centring moves the name 2px, + // and when a long name wraps to two lines the photo + // sits on the middle of the block instead of hanging + // off its first line. Top alignment was chosen when + // the photo was 120px and centring would have floated + // the name 30px under the close button; at 64px that + // reason is gone. + // + // The right padding is what keeps the photo off the + // close button, which sits in the rightmost 14px of the + // body, 24px tall, at the top right corner the photo + // now takes too. 2.5rem is 40px: the 14px of the button + // and 26px of air, so the ring of the photo does not + // touch the button and the pointer has a clear target. + // The padding is on the row and not on the title, so + // the photo clears the button too, not only the text. + .person_header { + display: flex; + align-items: center; + padding-right: 2.5rem; + // Padding and no rule. A rule under this row put a + // line right above the one the BIO heading carries, + // so the first section opened with two hairlines a + // few pixels apart. + padding-bottom: 16px; } // min-width: 0 lets a long name wrap instead of - // pushing the column wider than the modal: a flex - // item is as wide as its longest word by default. - .person_main { + // pushing the row wider than the modal: a flex item + // is as wide as its longest word by default. The 20px + // to the photo is the gap the two columns had. + .person_heading { flex: 1 1 auto; min-width: 0; + margin-right: 20px; + } + + // The photo: a round frame that clips, with a hairline + // ring, after the avatar on davidarcos.net. 160px is + // the size the markup gives the image too (see + // people_summary.html). This block is on its way to + // becoming the header of a page per person, and a + // portrait is what a person page opens with, so the + // face is shown at a size a reader can read a face at. + // It was 64px for one build, which is the height of + // the name and the role beside it, and at that size it + // is a mark, not a portrait. + // + // The band that costs is under the role: the row is as + // tall as the photo, so a name that fits on one line + // leaves (160 - 60) / 2 of air above the name and the + // same under the role. The heading grows to take a + // share of it, and what is left reads as the padding + // of a header band rather than as a gap, because the + // rule under the row closes it. + // + // The 160px image is the 400px card file scaled down + // by the browser, no new variant and no new request: + // the card has already loaded it when the modal opens. + // + // The ring is a box-shadow and not a border: a border + // takes part in the layout and shifts the image by its + // width, and a shadow is drawn outside the box. 15% + // black on the white of the modal, a hairline, so the + // frame has an edge where the photo is light at the rim. + // The frame clips the zoom below, so the photo never + // spills out of the circle. + .person_photo { + flex: 0 0 auto; + border-radius: 50%; + overflow: hidden; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15); + + // display: block, because an inline image sits on + // the text baseline and leaves a few pixels of + // space under it inside the frame, which the ring + // would show. object-fit covers the fallback image, + // which is not square; a person photo is already + // square from the pipeline. + img { + display: block; + width: 160px; + height: 160px; + border-radius: 50%; + object-fit: cover; + } + + // On hover the photo comes closer inside the frame, + // the same move the card makes. Only for a reader + // who has not asked for less motion: the card + // moves for everyone, and this one is the rule to + // follow from now on. + @media (prefers-reduced-motion: no-preference) { + img { + transition: transform 0.2s linear; + } + + &:hover img { + transform: scale(1.2); + } + } } - // The right padding keeps the name clear of the close - // button, which no longer floats beside it. On the - // title only: the lists below do not reach that - // corner and get the whole column. + // No right padding on the title any more: the header + // row above carries it, for the photo as well. + // Larger than Bootstrap's 28px, because this row is + // on its way to being the header of a page per person + // and the name is its title. It also takes a share of + // the air the 160px photo opens beside a one line + // name: the heading block goes from 60px to 66px. .modal-title { + font-size: 2rem; margin-bottom: 2px; - padding-right: 24px; } // Italic and plain, as on the card, so the pair - // under the photo reads the same in both places. + // beside the photo reads the same in both places. No + // margin under it: the first section brings its own + // 20px, the gap every section keeps from the block + // above it, and the 8px that used to be here put the + // Bio heading 28px under the role, 8px further than + // Roles sits under the bio. .person_role { font-style: italic; - margin-bottom: 8px; + margin-bottom: 0; } // Every block of the modal below the name is a section - // with a heading: Bio, Description, Roles at PyBCN, + // with a heading: Bio, Description, Roles, // Events, Social Links. The modal used to be a stack of // blocks with no label, so a reader had to guess that a bold word was // a role and a list of years was a history. A section @@ -419,34 +547,26 @@ } } - // The roles the person holds, one row per label: the - // label in the first column, the linked page titles - // in the second. A grid rather than a table, so the - // label column is as wide as its longest word and no - // wider. See person_appearances.html. - .appearances { - display: grid; - grid-template-columns: max-content 1fr; - gap: 4px 12px; - margin: 0; - - dt { - font-weight: bold; - } - dd { - margin: 0; - } - } + // The roles the person holds, one line per role, built + // and styled exactly as an event line: the glyph, the + // role in bold, an italic "at", and the page. It was a + // definition list in a two column grid, which put the + // same kind of statement in a different shape from the + // list right under it, and on a phone the label column + // was as wide as "Management Board (2018 - 2025)" and + // left 80px of a 390px screen for the page beside it. + // Nothing is set here: ul.events below carries it, and + // the selector lists both. See person_appearances.html. // The two lists of the modal, the events and the - // social links, with one treatment: a disc marker and - // the indent that goes with it, so each reads as a - // list. Both used to drop the marker and the padding, - // and five events were five loose lines with nothing - // to say they were one list, under a heading styled - // like the one over a table. The indent is the width - // of the marker and a space, no more: the browser - // default of 40px pushed a list in from the headings. + // social links, with one treatment: a marker and the + // indent that goes with it, so each reads as a list. + // Both used to drop the marker and the padding, and + // five events were five loose lines with nothing to + // say they were one list, under a heading styled like + // the one over a table. The indent is the width of + // the marker and a space, no more: the browser default + // of 40px pushed a list in from the headings. .modal_section ul { list-style: disc; padding-left: 1.25em; @@ -458,9 +578,129 @@ } } - // The events, one line per event, newest first, the - // role before the linked title. See - // person_appearances.html. + // The roles and the events, one line each, the role + // before the linked page or title. See + // person_appearances.html. The marker is the role + // glyph that starts the row, not the disc: the row + // carries it as the social rows carry the network + // icon. The padding is the glyph's column, so the + // text starts where it starts under a disc, at the + // padding edge, and a wrapped line starts there too. + // The selector repeats the ul of the rule above, + // because a class alone loses to that class and + // element pair, and the list kept the disc and the + // 1.25em indent under the glyph. + .modal_section ul.appearances, + .modal_section ul.events { + list-style: none; + padding-left: calc(1.875em + 8px); + + // The whole row answers the pointer, not only the + // link in it: the glyph, the role and the link are + // one statement, and a reader aiming at any of the + // three is after the same page. focus-within does + // the same for the keyboard, where the link is what + // takes focus. The glyph drops its grey and comes + // back in colour, which is the only place on the + // page a role shows its own colour. + li:hover, + li:focus-within { + .role_emoji { + filter: none; + } + + strong { + color: $blue-pybcn; + } + + a { + text-decoration: underline; + } + } + + // The whole row is the link, not only its text. The + // link stretches over the row with a pseudo element + // rather than by wrapping the row in an anchor, + // which would put the glyph and the role inside the + // link text and read them out with it. + // + // :only-of-type is the guard. A role held on two + // pages prints two links on one row, and there is + // no one row to stretch: those rows keep their own + // link areas. No row has two links today, out of + // 135 role rows and every event row, but the + // template allows it. + li { + position: relative; + } + + li > a:only-of-type::after { + content: ""; + position: absolute; + inset: 0; + } + + // A colour change, not a move, so there is nothing + // for prefers-reduced-motion to turn off. + .role_emoji, + strong { + transition: color 0.15s linear, filter 0.15s linear; + } + } + + // The role glyph as the marker of a Roles or an Events + // row, from data/role_emoji.yaml. Sized as the network + // icon of .modal_links below: 1.25em in a 1.5em column + // with 8px to the text, so a glyph of any width leaves + // the text on one line down the list. The column is + // 1.875em of the body font plus 8px, which is the + // padding the two lists above set, and the negative + // margin pulls the glyph back into that padding, where + // a disc sits. Pulled back and not placed with + // position, so it stays on the line of its row when + // the row wraps. + // + // Desaturated, so the glyph sits with the black icons + // of Social Links rather than being the one spot of + // colour in the modal. grayscale and nothing else: a + // colour emoji is a shaded picture, and in grey it is + // a light one, which is what this list wants. The + // marker labels the row; the text beside it is what + // the reader is here for, and a grey mark does not + // compete with it. + // + // Measured in Chromium with Noto Color Emoji, over + // the ink of a whole modal of glyphs: grayscale alone + // gives a mean luminance of 142 (0 is black) with 2% + // of the ink almost black. Darkening first and then + // stretching the contrast, which this rule did for one + // build, gives a mean of 53 with 64% of the ink almost + // black: the shaded faces of the compass and the + // calendar fill in and the glyph reads as a blot. A + // flat black glyph like the icons is out of reach for + // a filter either way, because the emoji keeps its + // shading. + // + // Upright and at the normal weight, because the dt is + // bold and a slanted or heavy emoji is a font bug on + // some platforms and never a style. line-height: 1 + // keeps the glyph from opening the line box of its + // row further than its own height, and middle-aligned + // the text sits on the centre of the glyph instead of + // on its bottom edge. + .role_emoji { + display: inline-block; + font-size: 1.25em; + font-style: normal; + font-weight: normal; + line-height: 1; + width: 1.5em; + margin-left: calc(-1.5em - 8px); + margin-right: 8px; + text-align: center; + vertical-align: middle; + filter: grayscale(1); + } // The links of the card, listed with their text at the // foot of the modal, so a reader can see the handle or @@ -468,7 +708,23 @@ // place the modal shows them: a bare icon row next to // the name said the same thing with less. See // person_links.html. - .modal_links { + // The selector repeats the ul, as .events above does: + // a class alone loses to the class and element pair of + // .modal_section ul, and the list kept the disc and the + // 1.25em indent that rule sets. + .modal_section ul.modal_links { + // The network icon is this list's marker, so the + // disc goes: with both, the row carried two + // markers and its text started 20px to the right + // of the text in the two lists above, which now + // start with a glyph of their own. The padding is + // the one those two set, so the three lists share + // one column. The negative margin on the icon is + // what pulls it back into the padding; it is set + // on i below, where the column width is. + list-style: none; + padding-left: calc(1.875em + 8px); + // A link text is one unbroken string, the path of // a LinkedIn profile or a site address, and one of // them is 600px of percent-encoded emoji. A string @@ -479,18 +735,66 @@ overflow-wrap: anywhere; } + // The whole row answers the pointer and is the + // link, as a row of the two lists above is: the + // icon colours, the address takes an underline, + // and a click anywhere on the row follows it. The + // network name is bold, so it lights like the role + // of a role row. + li { + position: relative; + } + + li > a::after { + content: ""; + position: absolute; + inset: 0; + } + + li:hover, + li:focus-within { + i { + color: $blue-pybcn; + } + + strong { + color: $blue-pybcn; + } + + a { + text-decoration: underline; + } + } + // One column for the icon whatever its width, so // the text starts on one line down the list. The // LinkedIn glyph is narrower than the globe, and // the X mark is a box of its own (see .icon_x in // main.scss) that sets neither width nor gap. + // Grey at rest and the PyBCN blue under the + // pointer, the same as the card above and as the + // role glyph of the two lists above. The icon took + // the link colour, so it was blue at rest and the + // row said nothing when the pointer reached it. + strong { + transition: color 0.15s linear; + } + i { display: inline-block; + color: $icon-grey; + transition: color 0.15s linear; // Larger than the text beside it, because these // are now the only icons in the modal. font-size: 1.25em; width: 1.5em; margin-right: 8px; + // Into the padding above, where the disc used + // to sit and where the role glyph of the two + // lists above sits. The margin is in em of the + // icon; the 8px is the gap it sets above, so the + // pull is the column plus the gap. + margin-left: calc(-1.5em - 8px); text-align: center; vertical-align: -2px; } @@ -510,55 +814,23 @@ .modal-dialog { max-width: 100%; - // The columns stack: the photo on top, the text - // under it. Side by side, a 300px photo left 50px - // of a 390px screen for the text, and the 120px - // photo the modal used beside the name left the - // name wrapping one word to a line. Stacked, the - // photo is capped at 200px so the name is still on - // the first screen: at 300px the first section - // started half way down it. The title comes down - // too: at Bootstrap's 28px a three-word name took - // three lines of a 374px dialog. - .modal-body { - flex-direction: column; - } - - .person_photo { - margin: 0 0 12px; - - img { - max-width: 200px; - } - } - - .person_main { - // The column is as wide as the dialog, not as - // wide as its content, so a list does not run - // past the edge. - width: 100%; + // A 360px screen gives the modal body 310px, and + // 40px of that clears the close button and 20px is + // the gap to the photo. At the desktop 160px the + // name is left 90px and "Laura Perez Mayos" takes + // three lines of it. 112px leaves 138px and two. + .person_photo img { + width: 112px; + height: 112px; } + // The title comes down too: at 32px the same name + // takes four lines of that 138px, and two at + // 1.4rem. .modal-title { font-size: 1.4rem; - // No close button beside the first line any - // more: it is above the photo. - padding-right: 0; } - // The roles stack on a phone: the label column is - // as wide as "Management Board (2018 - 2025)", which - // left 80px of a 390px screen for the page title - // beside it, three lines for "PyLadies BCN - // Organizers". The page goes under its label, - // indented, as a definition list does by default. - .appearances { - display: block; - - dd { - margin: 0 0 4px 1em; - } - } } } diff --git a/themes/pybcn_theme/layouts/_default/event.html b/themes/pybcn_theme/layouts/_default/event.html index 3b43d4e5..379a55cf 100644 --- a/themes/pybcn_theme/layouts/_default/event.html +++ b/themes/pybcn_theme/layouts/_default/event.html @@ -73,7 +73,7 @@

    Sponsors

    {{ range $section := .Params.people_sections }} {{ end }} diff --git a/themes/pybcn_theme/layouts/partials/appearances_index.html b/themes/pybcn_theme/layouts/partials/appearances_index.html index ec707429..d546de9c 100644 --- a/themes/pybcn_theme/layouts/partials/appearances_index.html +++ b/themes/pybcn_theme/layouts/partials/appearances_index.html @@ -87,7 +87,14 @@ current board first, and the list has to read that way rather than alphabetically, which put the 2018 board above the current committee. */ -}} - {{- $entry := dict "label" $label "title" $pg.Title "url" $pg.RelPermalink "year" (int (default 0 $pg.Params.year)) "ord" $ord -}} + {{- /* appearances_title, when the page sets one, is the name this + list calls the page by. A page title says what the page is, + and a line of this list says where a role is held, which is + not the same words: /pyladies_bcn/organizers-and-speakers/ + is titled "PyLadies BCN Organizers", and the line reads + "Organizer at PyLadies BCN". Without it the line repeats + the role in the name of the page it links to. */ -}} + {{- $entry := dict "label" $label "title" (default $pg.Title $pg.Params.appearances_title) "url" $pg.RelPermalink "year" (int (default 0 $pg.Params.year)) "ord" $ord -}} {{- $index = merge $index (dict $id (append $entry (default slice (index $index $id)))) -}} {{- end -}} {{- end -}} diff --git a/themes/pybcn_theme/layouts/partials/people-grid.html b/themes/pybcn_theme/layouts/partials/people-grid.html index 439c1f79..39ed9f33 100644 --- a/themes/pybcn_theme/layouts/partials/people-grid.html +++ b/themes/pybcn_theme/layouts/partials/people-grid.html @@ -2,9 +2,12 @@ A grid of person cards, one row per level. Arguments: - levels the list of levels, each with a name, people and people_per_line - Site the site, to look the people pages up - key a name unique to this grid on the page, "people" by default + levels the list of levels, each with a name, people and people_per_line + Site the site, to look the people pages up + key a name unique to this grid on the page, "people" by default + section optional, the title of the people section the grid is in, + when the page has sections (an event page does, see + event.html; an association page lists levels and has none) An event page renders this partial once per people section, and the same person can sit in more than one of them. The key goes into every id the @@ -26,6 +29,25 @@ person file with its own id, and the modal of the second one listed none of the events the first one was in. + With no entry role, the role is the one the heading of the grid gives, + and only then the pybcn_position of the person file. The heading is the + level name when the level has one and the section title when it does + not, which is the rule appearances_index.html indexes the modal's + appearance list by, so the card and the modal name the same role for + the same listing. The heading goes through data/roles.yaml: "Speakers" + gives Speaker. A heading that the file does not map gives nothing, and + the card falls through to pybcn_position: the four level names of + /organizers/ (Management Board, Permanent Committee, Collaborators) are + not mapped, so that page keeps the association position of each person, + which is what it is for. The index prints an unmapped heading as it is + written, because there it is a label for a page; here it would be a + role under a name, and "Collaborators" is not one. + + Before this, the card printed the pybcn_position under a speaker, which + was empty for 118 of the 207 cards of the site (most speakers hold no + position), and put the association role of an organizer who also spoke + under the Speakers heading, where it answered the wrong question. + The column width comes from a per_line_N class rather than from Bootstrap's col-md-N. Twelve columns divide by 1, 2, 3, 4, 6 and 12, so people_per_line was silently rounded for any other value: 5 gave col-md-2, which is six @@ -36,15 +58,25 @@ {{ $pages := where .Site.Pages "Section" "people" }} {{ range $idx, $level := .levels }} -
    - {{ if $level.name }} -
    -

    {{ $level.name }}

    -
    - {{ end }} + {{- /* nil when the heading is not in roles.yaml, or there is none: + index of "" finds no key, and default then falls through. */ -}} + {{- $section_role := index site.Data.roles (default $.section $level.name) -}} + {{- /* The heading is a sibling of the row, not a child of it. It + is a title between two rules, centred on the page, and the row + below caps its own width at the number of cards the section + asks for: inside the row the heading took that cap, so the + four headings of /organizers/ were centred on four different + widths and their rules came out four different lengths. */ -}} + {{ if $level.name }} +
    +

    {{ $level.name }}

    +
    + {{ end }} +
    {{ range $pidx, $person := $level.people }} {{ $id := $person }}{{ $role := "" }} {{ if reflect.IsMap $person }}{{ $id = $person.id }}{{ $role = $person.role }}{{ end }} + {{ $role = default $section_role $role }} {{ range $page := where $pages ".Params.id" "eq" $id }}
    {{ partial "people_summary.html" (dict "person" $page "role" $role "key" (printf "%s_%d_%d" $key $idx $pidx)) }} diff --git a/themes/pybcn_theme/layouts/partials/people_summary.html b/themes/pybcn_theme/layouts/partials/people_summary.html index 47891fcf..7b2678d2 100644 --- a/themes/pybcn_theme/layouts/partials/people_summary.html +++ b/themes/pybcn_theme/layouts/partials/people_summary.html @@ -2,22 +2,29 @@ One person card, plus the modal that holds the long bio. Photos come from assets/images/people/ and go through the Hugo image - pipeline. The grid slot is 350 px wide at most and the modal shows the - image at 300 px, so one 400 px WebP serves both, with an 800 px variant - for a 2x screen. A person with no photo falls back to anon_member.png. + pipeline. The grid slot is 350 px wide at most, so one 400 px WebP + serves it, with an 800 px variant for a 2x screen. The modal shows the + same file at 64 px: the card has already loaded it by the time the + modal opens, so the modal costs no request, and a file sized for the + modal would be one more download for the same picture. A person with no + photo falls back to anon_member.png. The modal shows the photo no larger than the source. image_square.html enlarges a small source to 400 px for the grid, where every slot has to be one size, and bin/check-content warns about the 28 photos that are - under 400 px. At 300 px the modal would show 21 of them enlarged by half - again, soft, next to a name. The modal has no slot to fill, so a photo - with a short side under 300 px is shown at its own size instead: a - 200 px source is a 200 px photo, which is what the modal showed before. + under 400 px. The modal has no slot to fill, so a photo with a short + side under the shown size is shown at its own size instead. At 160 px + one source is under it, patricio-reyes-valenzuela.jpg at 120 px square, + and it is shown at 120. Every other source is 199 px or more. The rule + matters more than the count: it is what stops the modal showing an + enlarged, soft face, which is what it did at 300 px, where 21 photos + came out half again their size. Arguments: person the person page - role optional, the role to show instead of pybcn_position, when - the page lists the person with one (see people-grid.html) + role optional, the role to show instead of pybcn_position: the + one the page entry carries, or else the one the heading of + the grid gives (see people-grid.html) key the grid key, so the modal id is unique on the page A remote photo is not supported. The template used to accept photo_url @@ -37,11 +44,12 @@ {{- $img = resources.Get "images/anon_member.png" -}} {{- end -}} {{- $small := "" -}}{{- $large := "" -}}{{- $srcset := "" -}} -{{- /* The side the modal shows the photo at: 300 px, or the short side of - the source when that is smaller. See the note at the top. */ -}} -{{- $shown := 300 -}} +{{- /* The side the modal shows the photo at: 64 px, or the short side of + the source when that is smaller. See the note at the top. The same + number is in people.scss, as the size of the round frame. */ -}} +{{- $shown := 160 -}} {{- with $img -}} - {{- $shown = int (math.Min 300 (math.Min .Width .Height)) -}} + {{- $shown = int (math.Min 160 (math.Min .Width .Height)) -}} {{- $anchor := default "Smart" $.person.Params.photo_anchor -}} {{- $small = partial "image_square.html" (dict "img" . "size" 400 "anchor" $anchor) -}} {{- $large = partial "image_square.html" (dict "img" . "size" 800 "anchor" $anchor) -}} @@ -66,7 +74,16 @@ card is cut with an ellipsis (see people.scss). The modal shows it in full as well. */}}

    -

    {{ $role }}

    + {{/* Left out when empty, as in the modal below: a person with no + position under a heading roles.yaml does not map has no role, + and the line used to print as an empty paragraph. The text + alone: the role glyph of data/role_emoji.yaml sat here for + one commit, and it read as a stray character of the italic + line rather than as a mark. It is the list marker of the + Roles and Events rows of the modal now, where it has a column + of its own, like the network icon in Social Links (see + person_appearances.html). */}} + {{ with $role }}

    {{ . }}

    {{ end }}
    diff --git a/themes/pybcn_theme/layouts/partials/person_appearances.html b/themes/pybcn_theme/layouts/partials/person_appearances.html index c542a254..7ed2d89d 100644 --- a/themes/pybcn_theme/layouts/partials/person_appearances.html +++ b/themes/pybcn_theme/layouts/partials/person_appearances.html @@ -1,9 +1,9 @@ {{- /* - The pages one person appears on, as two labelled lists. + The pages one person appears on, as two lists with one line each. - Roles at PyBCN - Permanent Committee Organizers - PyLadiesBCN Organizer PyLadies BCN Organizers + Roles + Permanent Committee at Organizers + Organizer at PyLadies BCN Events Speaker at PyDay BCN (2025) @@ -11,7 +11,10 @@ Mentor and Speaker at Hands-on Django with PyLadiesBCN (2022) Organizer at PyDay BCN (2021) - In the events the roles are bold and "at" and "and" italic. + Every line of both lists is built the same way: the role glyph, the + role in bold, an italic "at", and the page it is held on. Roles was a + definition list laid out as a table of label and value, which said the + same kind of thing as the line under it in a different shape. Argument: the person page. @@ -38,8 +41,8 @@ history. They are now two lists under two headings, each one left out when it is empty. - Roles: grouped by label, one row per label, the pages that give it as - links. The order is the page and then the order the page itself lists + Roles: grouped by label, one line per label, the pages that give it as + links. A label held on two pages lists both, separated by a comma. The order is the page and then the order the page itself lists its levels, which is current board first: sorting them by label put Management Board (2018 - 2025) above Permanent Committee, and the PyLadies page above both. The page comes from its path, so the PyBCN @@ -63,6 +66,29 @@ Everyone on /organizers/ has at least that page, but the index covers only the people listed there, so a speaker of one event who is not an organizer still has an empty list. The Archive will widen this. + + Each row of both lists starts with the glyph of its role from + data/role_emoji.yaml, as its list marker, the way each row of Social + Links starts with the icon of its network (see person_links.html). The + glyph was on the card, next to the role under the name, and read there + as a stray character of the italic line; as the marker of a row it has + a column of its own, and the three lists of the modal read as one kind + of thing. An events row has its roles, so the glyph is the one of the + first role in the sorted list: Ferran Jovell as "Mentor and Speaker" + gets the mentor's cap, because the row has one marker, as the social + rows have one icon, and the first role is the one the eye meets. A + roles row is keyed by its label, which is a level name through + roles.yaml, so a label that is a role, "Organizer", finds + its glyph, and a level that is not a role, "Permanent Committee" or + "Collaborators", takes the "*" fallback of the table. + + The glyph is hidden from a screen reader in both lists. In the events + list the role is the text right after it, so a label would make the + reader say "Speaker, Speaker" on every row. In the roles list the text + is the level, not the role, but the glyph never says more than the + text does: the table is keyed by role, so a label that finds a glyph + is itself a role name and is read as such, and a label that does not + gets the neutral fallback, which says nothing a name could carry. */ -}} {{- $index := partialCached "appearances_index.html" site "appearances-index" -}} {{- $groups := dict -}} @@ -90,13 +116,17 @@ {{- end -}} {{- with $roles -}} {{- end -}} {{- with $list -}} @@ -111,7 +141,7 @@

    Events

    and left "Mentor and Speaker" as one italic run where the "and" looked like part of a role name. */ -}} {{- $labels := .labels }} -
  • {{ range $i, $label := $labels }}{{ if $i }}{{ if eq $i (sub (len $labels) 1) }} and {{ else }}, {{ end }}{{ end }}{{ $label }}{{ end }} at {{ .title }}
  • +
  • {{ range $i, $label := $labels }}{{ if $i }}{{ if eq $i (sub (len $labels) 1) }} and {{ else }}, {{ end }}{{ end }}{{ $label }}{{ end }} at {{ .title }}
  • {{- end }} diff --git a/themes/pybcn_theme/layouts/partials/person_links.html b/themes/pybcn_theme/layouts/partials/person_links.html index cb94f3d8..b8e3362c 100644 --- a/themes/pybcn_theme/layouts/partials/person_links.html +++ b/themes/pybcn_theme/layouts/partials/person_links.html @@ -1,7 +1,9 @@ {{- /* - The social links of one person as a list, each with its icon and the - text a reader needs to know where the link goes: the LinkedIn path, the - GitHub or X user name, or the address of a personal site. + The social links of one person as a list, each one a line built the way + a role line and an event line are built: the icon, the name of the + network in bold, and then the part a reader needs to know where the + link goes, as the link. That is the LinkedIn path, the GitHub or X user + name with its at sign, or the address of a personal site. Argument: the person page. @@ -16,7 +18,13 @@ enforces: https://www.linkedin.com/..., https://github.com/ and https://x.com/. Cutting the known prefix is therefore safe, and it keeps a second copy of the handle out of the front matter, where - it would drift from the URL. A site is a free URL and is shown whole. + it would drift from the URL. A GitHub or X name is shown with the at + sign the two networks write it with, which the URL does not carry. A + site is a free URL and is shown whole. + + The icon and the name of the network are outside the link, as the glyph + and the role are outside the link of a role line. The whole row is the + target anyway: see the stretched link in people.scss. The heading says "Social Links", not "Links": the modal links to event pages and to the organizers pages as well, and "Links" alone did not say @@ -28,16 +36,16 @@

    Social Links