-
Notifications
You must be signed in to change notification settings - Fork 3
WIP: Website/sliced #501
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
WIP: Website/sliced #501
Changes from 19 commits
Commits
Show all changes
100 commits
Select commit
Hold shift + click to select a range
4cd799a
Update .gitignore to include new documentation files for UX audit and…
AkaKwak 831a482
Refactor pages and update content for clarity and consistency
AkaKwak dc71d89
Remove outdated internal documentation files for UX audit and todo list
AkaKwak a0e1d38
Update location details across multiple pages to reflect new address
AkaKwak ae79e0c
Enhance map integration and animations for improved user experience
AkaKwak c3dec3c
feat(contact): creative_hosting slug, i18n mail subjects
AkaKwak fe5d3aa
ux(become_member): consolidate hero + pricing card
AkaKwak 404ef87
refactor(pages): update content for clarity and consistency
AkaKwak 33eb4c5
refactor(pages): enhance FAQ content and layout for better user exper…
AkaKwak 02b55ee
feat(blogs, events): update authentication handling for specific actions
AkaKwak c33b34c
refactor(home, footer, opening_hours): enhance layout and content for…
AkaKwak a97cbe5
feat(website): carousels, partners content, contact layout
AkaKwak 6890af1
perf(views): lazy-load secondary images
AkaKwak c58ae2e
fix(nav): horizontal menu from min-width 844px
AkaKwak bb3737c
fix(footer): balance links and newsletter mid-mobile
AkaKwak f06f69e
fix(css): add brand-accent /72 and /45 utilities for builds
AkaKwak 925207b
fix(nav): padding, nowrap row, and desktop link sizing
AkaKwak c76ea6e
feat(a11y): scroll hint accent styling and aria label i18n
AkaKwak 9f15e05
feat(home): hero stack, branded CTA hover, scroll arrow offset
AkaKwak a30f0c8
refactor(contacts): improve readability of recipient email assignment
AkaKwak 54a0731
refactor(association): update header and article IDs for improved acc…
AkaKwak df74b9a
feat(dev,auth): quick login, safe redirects, session login flow
AkaKwak a34c14b
feat(profile): membership states, shortcuts, French role labels
AkaKwak 615ce7c
Remove dev quick login and unify account UI on profile
AkaKwak c9a5571
Enhance session handling in authentication concern
AkaKwak acadc9e
test(rspec): enforce test environment in rails helper
AkaKwak c7c28cd
feat(dev): log critical auth and database incidents
AkaKwak a15db17
fix(auth): invalidate orphaned sessions and clear archived user sessions
AkaKwak 2ae7482
fix(test): ignore DATABASE_URL so specs use tmp/test.sqlite3
AkaKwak 7d721dd
feat(profile): embedded account/contact panels with Turbo refresh
AkaKwak 8c7177a
feat(dev): reliable seed reset and local DB recovery helpers
AkaKwak bde2322
feat(profile): Modifier → Accepter flow with recap modal
AkaKwak 2a4660d
fix(profile): edit first, then preview modal before save
AkaKwak 2d1e6ea
feat(profile): header Modifier/Annuler/Accepter with preview-then-save
AkaKwak 5cca7af
Fix profile section buttons: avoid Tailwind hidden/display conflicts
AkaKwak 559fe8f
Apply section-edit button wrappers to contact coordinates header
AkaKwak fb1746c
feat(settings): require email verification before changing address
AkaKwak 5f224b2
feat(settings): add email-change verification and newsletter param pa…
AkaKwak 0099260
refactor(services): standardize service messaging and tighten specs
AkaKwak cf88301
refactor(profile): extract membership card helper and partial panels
AkaKwak f21edad
refactor(admin-users): isolate person identifier parsing helpers
AkaKwak 6753534
refactor(admin-users): extract view adapter for person-only records
AkaKwak 71a20ea
refactor(admin-users): reduce show duplication and lock person-only v…
AkaKwak 1e70da3
refactor(admin-subscription-plans): isolate legacy formula id fallback
AkaKwak 82c3b04
feat(routes): add canonical admin contribution_formulas routes
AkaKwak f9d6291
test(admin-routes): lock canonical contribution formulas route compat…
AkaKwak 858d085
refactor(admin-ui): move inline admin scripts to Stimulus controllers
AkaKwak 0c3d8ab
refactor(admin-domain): align contribution routes and member number p…
AkaKwak 699e856
refactor(identity): centralize email normalization and payload defaults
AkaKwak beefae8
refactor(vocab): complete subscription→contribution vocabulary migration
AkaKwak f8d67c2
chore(todo): track todo.md in git + sort open items by speed
AkaKwak a58affe
chore(todo): update todo.md with new status and vocabulary notes
AkaKwak ca290ca
fix(ui): show all payment lines in user tab, remove dead user_id brea…
AkaKwak 7eaf599
Clean admin flows and payment services
AkaKwak a3cf6a7
Remove newsletter_subscribed column from people table and migrate exi…
AkaKwak 69c6a61
Remove unused ActionButtonsComponent and related membership upgrade l…
AkaKwak 79cb1a0
feat(payments): persist offer audit data and align anonymization
AkaKwak 3e6125d
feat(integrity): enforce contribution invariants and report anomalies
AkaKwak 62959a7
refactor(admin): simplify membership, donation and contribution flows
AkaKwak 4a2ad36
refactor(users): slim admin user flows and remove dead person wrappers
AkaKwak 5313508
docs: sync knowledge base and test runner behavior
AkaKwak c954ee6
test(memberships): cover upgrader offer and donation lines
AkaKwak 786dc6c
test(contributions): cover donations, offers and prorata credit
AkaKwak 117c749
refactor(person): remove legacy creation wrappers
AkaKwak c0eda6a
test(harness): stabilize rspec sqlite isolation
AkaKwak de25bcc
test(tooling): serialize local rspec entrypoints
AkaKwak d36651d
ci(testing): align workflows with project test binaries
AkaKwak cb68d72
test(payment_line): speed up model specs and factories
AkaKwak c7d4254
test(payment): cut model-spec setup cost
AkaKwak 7d4f36a
feat(development): add guard-rspec gem for improved test automation
AkaKwak c218d0b
admin(shared): add person context helpers and refresh labels
AkaKwak 98533d3
contributions(checkout): streamline person purchase flow
AkaKwak d8d5c88
memberships(upgrade): clarify circus upgrade rules
AkaKwak ea28e28
payments(testing): unify recorder flow and expand request coverage
AkaKwak 42628b7
pricing(rate_kind): centralize rate-kind rules in models
AkaKwak 251fc89
admin(memberships): expose rate kind in membership flows
AkaKwak ceb18c7
admin(contributions): surface rate kind in formula catalog
AkaKwak 8f5ef60
test(payments): cover label normalization and recorder defaults
AkaKwak 07b0569
refactor(seeds): enhance seed structure and add membership logic
84b9636
chore(testing): raise coverage floor and tighten frontend loading
52c8882
feat(admin): replace subscription flows with contribution formulas
fd528b1
docs(domain): align contribution terminology and testing guide
951e012
refactor(seeds): enhance seed structure and add membership logic
cec30d1
merge
23124e4
chore(testing): raise coverage floor and tighten frontend loading
1f1c2e6
feat(memberships): add contribution options view for admin
AkaKwak f759038
Merge origin/website/sliced into website/sliced
AkaKwak 8bd676c
fix(admin): improve user loading and error handling in users_controller
AkaKwak 8e763e9
WIP: local UI/CSS adjustments on admin and public views
6913102
Merge branch 'wip/sliced-ui-local-may2026' into website/sliced
d988ea4
fix(spec): remove trailing whitespace in membership_card_helper_spec
AkaKwak 46dd756
fix(spec): isolate session rate limit cache and assert session_id cookie
AkaKwak c40a7f3
fix(spec): clear Rails.cache before each example for rate limit isola…
AkaKwak 126b75f
refactor(ui): consolidate public and admin layout primitives
2561e60
docs(todo): align internal backlog with current code
ab60664
chore(ci): update test suite configuration to include coverage and cr…
AkaKwak 36b5b9d
feat(person): add account claims association and enhance account merg…
AkaKwak 9b0de22
chore(database): prevent seeding in test environment to ensure isolation
AkaKwak a6604fd
chore(ci): update Docker actions and remove obsolete test workflow
AkaKwak ff7e73c
chore(ci): introduce new CI workflow for dev branch and remove obsole…
AkaKwak File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -35,7 +35,6 @@ def show | |
|
|
||
| if params[:id] == "contact_us" | ||
| @contact = {} | ||
| @faqs = contact_faq_entries | ||
| end | ||
|
|
||
| @adhesion_faqs = adhesion_faq_entries if params[:id] == "become_member" | ||
|
|
@@ -60,29 +59,78 @@ def show | |
| private | ||
|
|
||
| def contact_faq_entries | ||
| cf = page_path("contact_us", anchor: "contact-form") | ||
| lc = "text-[#5836A5] underline hover:text-[#412886]" | ||
| [ | ||
| { question: "Comment adhérer au Circographe ?", answer: "Passe sur un créneau d'ouverture : on remplit la fiche ensemble et on t'explique le fonctionnement." }, | ||
| { question: "Puis-je réserver un créneau de résidence ?", answer: "Oui, écris-nous via la catégorie 'Résidence'. Nous te recontacterons avec les disponibilités et modalités." }, | ||
| { question: "Le lieu est-il accessible aux débutant·es ?", answer: "Les entraînements libres sont destinés aux personnes autonomes. Pour débuter, on recommande une école partenaire : contacte-nous pour des conseils." }, | ||
| { question: "Proposez-vous des prestations ou des partenariats ?", answer: "Oui, nous travaillons avec des structures culturelles, établissements scolaires et entreprises. Sélectionne la catégorie 'Partenariat' pour en discuter." } | ||
| { | ||
| question: "Demander un temps d’accueil en création", | ||
| answer_html: helpers.safe_join([ | ||
| "Écris-nous avec le ", | ||
| helpers.link_to("formulaire Contact", cf, class: lc), | ||
| ", catégorie « Temps d’accueil en création » — on te répond sur les dispo et le cadre." | ||
| ]) | ||
| }, | ||
| { | ||
| question: "Partenariat, atelier, événement ou projet avec le lieu", | ||
| answer_html: helpers.safe_join([ | ||
| "Le plus simple : passer lors d’un créneau d’ouverture avec ton idée. Tu peux aussi utiliser le ", | ||
| helpers.link_to("formulaire Contact", cf, class: lc), | ||
| " (Partenariat ou Question générale). Les bénévoles t’orientent." | ||
| ]) | ||
| } | ||
| ] | ||
| end | ||
|
|
||
| def adhesion_faq_entries | ||
| cf = page_path("contact_us", anchor: "contact-form") | ||
| lc = "text-[#5836A5] underline hover:text-[#412886]" | ||
| [ | ||
| { question: "Puis-je adhérer en ligne ?", answer: "L'inscription se fait uniquement sur place afin de te présenter le lieu et les règles d'autogestion." }, | ||
| { question: "Quels moyens de paiement acceptez-vous ?", answer: "Carte bancaire et espèces. Une adhésion de soutien peut également être effectuée par virement sur demande." }, | ||
| { question: "Faut-il être autonome pour les entraînements libres ?", answer: "Oui, les créneaux libres s'adressent aux pratiquant·es autonomes. Pour débuter, on peut te recommander des écoles partenaires." }, | ||
| { question: "Puis-je proposer un atelier ou un événement ?", answer: "Tout est possible ! Passe nous voir avec ton idée, on regardera ensemble comment l'inscrire dans la programmation." } | ||
| { | ||
| question: "Comment adhérer ?", | ||
| answer: "Sur place, lors d’un créneau d’accueil : visite du lieu, fiche d’adhésion et explication de l’autogestion. Pas d’inscription en ligne — on fait ça ensemble au lieu pour que chacun·e parte avec les mêmes repères." | ||
| }, | ||
| { | ||
| question: "Paiement adhésion ou cotisation", | ||
| answer: "Carte bancaire ou espèces à l’accueil, avec les bénévoles." | ||
| }, | ||
| { | ||
| question: "Je débute : les entraînements libres me concernent ?", | ||
| answer_html: helpers.safe_join([ | ||
| "Les créneaux libres cirque sont pour des pratiquant·es autonomes en sécurité. Pour apprendre les bases, une école partenaire ; pour une orientation, ", | ||
| helpers.link_to("écris-nous", cf, class: lc), | ||
| " en Question générale." | ||
| ]) | ||
| } | ||
| ] | ||
| end | ||
|
|
||
| def general_faq_entries | ||
| cf = page_path("contact_us", anchor: "contact-form") | ||
| bm = page_path("become_member", anchor: "tarifs") | ||
| lc = "text-[#5836A5] underline hover:text-[#412886]" | ||
| [ | ||
| { question: "Où se situe le Circographe ?", answer: "Au 27 bis allée Maurice Sarraut, Toulouse — dans le quartier de la Cartoucherie. Consulte la page Contact pour la carte et l'accès." }, | ||
| { question: "Quels sont les horaires d'ouverture ?", answer: "Les créneaux publics évoluent chaque saison ; on les met à jour sur les pages Accueil, Adhérer et Contact. Pense à vérifier avant de te déplacer." }, | ||
| { question: "Comment soutenir financièrement le projet ?", answer: "En adhérant, en souscrivant à l'adhésion soutien ou en faisant un don ponctuel. Écris-nous si tu souhaites devenir partenaire." }, | ||
| { question: "J'ai une question administrative, qui contacter ?", answer: "Utilise le formulaire de contact (catégorie 'Question générale') ou écris à [email protected] ; l'équipe bénévole te répondra rapidement." } | ||
| { | ||
| question: "Adresse et accès", | ||
| answer_html: helpers.safe_join([ | ||
| "97 bis boulevard de Suisse, 31200 Toulouse. ", | ||
| helpers.link_to("Plan et bus (ligne 15)", page_path("contact_us", anchor: "map"), class: lc), | ||
| "." | ||
| ]) | ||
| }, | ||
| { | ||
| question: "Horaires", | ||
| answer: "Les créneaux publics bougent selon la saison et les bénévoles. À jour sur l’accueil, la page Adhérer et la page Contact — jette un œil avant de venir." | ||
| }, | ||
| { | ||
| question: "Soutenir le lieu ou une question administrative", | ||
| answer_html: helpers.safe_join([ | ||
| "Adhérer, cotisation, don : ", | ||
| helpers.link_to("page Adhérer", bm, class: lc), | ||
| ". Pour un partenariat, un don hors cadre ou une demande administrative : ", | ||
| helpers.link_to("formulaire Contact", cf, class: lc), | ||
| " (Question générale ou Partenariat)." | ||
| ]) | ||
| } | ||
| ] | ||
| end | ||
|
|
||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,103 @@ | ||
| import { Controller } from "@hotwired/stimulus" | ||
| import * as L from "leaflet" | ||
|
AkaKwak marked this conversation as resolved.
Outdated
|
||
|
|
||
| export default class extends Controller { | ||
| static values = { | ||
| lat: Number, | ||
| lng: Number, | ||
| zoom: { type: Number, default: 17 } | ||
| } | ||
|
|
||
| connect () { | ||
| this._disconnected = false | ||
| this._lastSize = { w: 0, h: 0 } | ||
| this._resizeFrame = null | ||
|
|
||
| // Attendre 2 frames : la grille / le turbo-frame ont souvent une hauteur encore à 0 au premier paint. | ||
| requestAnimationFrame(() => { | ||
| requestAnimationFrame(() => { | ||
| if (this._disconnected || !this.element.isConnected) return | ||
| this._initMap() | ||
| }) | ||
| }) | ||
| } | ||
|
|
||
| _initMap () { | ||
| if (this._disconnected || !this.element.isConnected) return | ||
|
|
||
| this._resizeTimeouts = [] | ||
|
|
||
| const scheduleInvalidate = (force = false) => { | ||
| if (!this.map) return | ||
| if (this._resizeFrame != null) cancelAnimationFrame(this._resizeFrame) | ||
| this._resizeFrame = requestAnimationFrame(() => { | ||
| this._resizeFrame = null | ||
| const el = this.element | ||
| const w = el.clientWidth | ||
| const h = el.clientHeight | ||
| if (w <= 0 || h <= 0) return | ||
| if (!force && w === this._lastSize.w && h === this._lastSize.h) return | ||
| this._lastSize = { w, h } | ||
| this.map.invalidateSize({ animate: false }) | ||
| }) | ||
| } | ||
|
|
||
| this.boundTurboFrameLoad = (e) => { | ||
| if (e.target.contains(this.element)) scheduleInvalidate(true) | ||
| } | ||
| document.addEventListener("turbo:frame-load", this.boundTurboFrameLoad) | ||
|
|
||
| this.boundWindowResize = () => scheduleInvalidate(true) | ||
| window.addEventListener("resize", this.boundWindowResize) | ||
|
|
||
| this.map = L.map(this.element).setView([this.latValue, this.lngValue], this.zoomValue) | ||
|
|
||
| // Tuiles raster via CARTO (cartocdn.com) ; rendu 100 % Leaflet côté navigateur (pas d’iframe ni SDK tiers). | ||
| L.tileLayer("https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png", { | ||
| attribution: | ||
| '© <a href="https://wiki.osmfoundation.org/wiki/Licence" rel="nofollow noopener">Sources des données</a> · <a href="https://carto.com/attributions" rel="nofollow noopener">CARTO</a>', | ||
| subdomains: "abcd", | ||
| maxZoom: 19 | ||
| }).addTo(this.map) | ||
|
|
||
| // Pas d’images CDN (évite icône cassée si cdnjs / tracking bloqués) — cercle aux couleurs du site. | ||
| L.circleMarker([this.latValue, this.lngValue], { | ||
| radius: 10, | ||
| color: "#1F5C55", | ||
| fillColor: "#5836A5", | ||
| fillOpacity: 0.9, | ||
| weight: 3 | ||
| }).addTo(this.map).bindPopup("<strong>Le Circographe</strong><br>97 bis bd de Suisse, Toulouse") | ||
|
|
||
| this.map.whenReady(() => { | ||
| scheduleInvalidate(true) | ||
| ;[120, 350, 700].forEach(ms => { | ||
| const id = setTimeout(() => scheduleInvalidate(true), ms) | ||
| this._resizeTimeouts.push(id) | ||
| }) | ||
| }) | ||
|
|
||
| this.resizeObserver = new ResizeObserver(() => scheduleInvalidate(false)) | ||
| this.resizeObserver.observe(this.element) | ||
| } | ||
|
|
||
| disconnect () { | ||
| this._disconnected = true | ||
| this._resizeTimeouts?.forEach(id => clearTimeout(id)) | ||
| this._resizeTimeouts = null | ||
| if (this.boundTurboFrameLoad) { | ||
| document.removeEventListener("turbo:frame-load", this.boundTurboFrameLoad) | ||
| this.boundTurboFrameLoad = null | ||
| } | ||
| if (this.boundWindowResize) { | ||
| window.removeEventListener("resize", this.boundWindowResize) | ||
| this.boundWindowResize = null | ||
| } | ||
| if (this._resizeFrame != null) cancelAnimationFrame(this._resizeFrame) | ||
| this._resizeFrame = null | ||
| this.resizeObserver?.disconnect() | ||
| this.resizeObserver = null | ||
| this.map?.remove() | ||
| this.map = null | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.