From 09e3be3d82f9c99aed37e478915a59034c20687d Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Thu, 15 Jun 2023 09:11:57 +0200 Subject: [PATCH] Bloc son --- .../communication/blocks/templates/sound.jpg | Bin 0 -> 20146 bytes app/models/communication/block.rb | 3 +- .../communication/block/template/sound.rb | 14 ++++++++ .../blocks/components/file/_edit.html.erb | 2 +- .../blocks/components/image/_edit.html.erb | 1 + .../blocks/templates/sound/_edit.html.erb | 11 ++++++ .../blocks/templates/sound/_preview.html.erb | 34 ++++++++++++++++++ .../blocks/templates/sound/_static.html.erb | 3 ++ config/locales/communication/en.yml | 9 +++++ config/locales/communication/fr.yml | 9 +++++ config/locales/en.yml | 21 +++++++---- config/locales/fr.yml | 21 +++++++---- 12 files changed, 112 insertions(+), 16 deletions(-) create mode 100644 app/assets/images/communication/blocks/templates/sound.jpg create mode 100644 app/models/communication/block/template/sound.rb create mode 100644 app/views/admin/communication/blocks/templates/sound/_edit.html.erb create mode 100644 app/views/admin/communication/blocks/templates/sound/_preview.html.erb create mode 100644 app/views/admin/communication/blocks/templates/sound/_static.html.erb diff --git a/app/assets/images/communication/blocks/templates/sound.jpg b/app/assets/images/communication/blocks/templates/sound.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f42a626b49a634551c61735aa4e1bf7a04a05273 GIT binary patch literal 20146 zcmb5VWmp}}vNk*mcMSx0cXxO9;Fb{F-8~8J?jBr%LkJMuT@pOFyX&`-N6y~oynnvp zx@LN+@2=_9Rn=A9)4cq6Sp(4Iq-3Q45C{N3;6LDH5fBFuU}525VG!Wq;1LlKkWg{a zP*G4&iLhT|;8KuKQIeC8lhH8pve3|R(UXz0Nw9J83yO${P_anKOA5*H3X2H-76L*< zL_|eKB}79b6r?4m75x8AFI@mS94Ho&1QLV}K%j#l(Lpag06w^r5RkvS`!7L4LqNfR zV8NAGp#Q4)jR3tY07#JFHfWG&;Kv7+f1Ca90uc_n&KiJ@H#M%F3&2w*UjA>ue?7xM zX}$wsU@BTNxV!+E_qCh<Rr}8avPmlc-(^r3`o{p!uSzDE*|Y%A9!E>SKcN4-L$Foc zP5w+VyZyri{X!=Mw?X)h&m{){$vUVa|B3yl3<|t3$z`Eayl4>o!-5;AI0fKFb<DUJ z01!oOcECTt|GYyqFACXt`EuM%@-E<u{H{TQtLOoc6m@*LYz6?Nu%dzgg#TMc%cN~~ z*gk8w$$IPZhk5#;s}ne#PiD6o=>#s*^*jHC{%3&`1?ocwO-vpZwb);+BEvfYwDj{s z9TosW=lx$D|IY@$%P_DQ?y$oH!(B7GkpaIM=yAU_ls+|Jqq7TO$kXorX8s?79gjii z+WfGOJpHGKpfKdr08m&Z^QYM~02Ig3@_!oqW<X*Fk#UX}<`DCXJM4D;<`AKy{{V>a z&U<WiNC2YvVUpj>|4pD@ySzcp4tJ$4_F0~PY>NmzP8)#0G}JlF1V9Y6L;?T1$?s># zosVIGb2%)`i0YsJ)FZ*!oB~M5I?h}+mjKdM;{SW_aR>&72;pU1VI&6||1|3f9|3^V z*_3XpkpN&I`Tsrmps*gi5G9}8dr}R1LYhCX?;_&|AiLn-a#h3vsIsOb|8HA|2+id) z$>J-B=P#J}-AsUmtgaIv<1EU|?)<;Q|7xrAHwa9TcY{8zAtUlmJ$nJapCKXWS-}IW zX{1;#2tcywIQ?e+OAyVU$@otHdbB3s#m%?F4pFj7?)=R`l8IyhP?0SixGF}#9W4U? z+W#OpIj7t?R-u5uSX!C5wW@@y6|T@felsAu*ysU3q(*8qJ^-Lh7XR}L{z3u(vbaqd zZ}<BeW<_$JKRgzm;1(f$>l|&~i~K)~f1QZBZUUf4R{yW&01tZ=uX8RH!(Z}Hvv9G@ z#Wb_x-hsUoOg*1QM1Y>zlxefyT1nRr_{07CLQW^omRrig?*It=vHH_B<l4e}os0Oj zRp!p$7$US(?ca9SXRDJ65GBZ`{@w7e8<shaltJ=VDG5Npy98!IN^HZA)!d~u8WQsS zM*Q`&#jJ<FsFMKjrm_E}S%~HzloYg)@-+Z#NRg-=7~Q>XIw>Zi|5{q%kNE#`Fx+9* z-9OxaE&-e4@ba}_V?jkI$l=?N0NWsHc4|^@n4Ej>B+G9UBnJL(P3syVm$LzoWS0M} zX}}rUGjIyK6F}IA<Aapx;1&T+f58tG>`9LyI@kPp3o2abA%F@;`C*|}1Q4W57Wu>d z=K{;3Pw>k}8v_904r6WqvM~q%phe}}U`G_YHunR5qyF-~51U)}gb9DEot&H#WcH5) z0HkT1Bo$cewg$k3zbpLkjf{^30B~|>nGwm${($~?A~Ixfa?cUiIsUjJDhSkx{XyF1 z{XbHOh|-Hl)oie(_ACHsTtgdNLeSo?Sg7{_z&jC}fZr%qGL{;Elqbv;<#==gV53Z7 z0boi4D;$dkYh5UEe<OYq%>at=ewcj01S+Zwip=RO-+B*#P^YmI{rFcs<ZnMELQBXz z<8=XG3v0K%z{YhKcDWHmNy)GB7X|<-1vuoK*dD(L0$8wgE+K4ouX_i88EVcUwZa8{ zl0PWOZU}k-01p~eL^unU5wD{x0*<00nd>N-jW7fM2y)!={AK6zp%d^>OQfKTn@#{g z@MDSF<}!a<FgQSl0tACr&XQ@9L;*;Hrr?&Wy!n~C!*!S}{|Lb=V%0D+z}nFS1UTi+ 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:tmd=Fbf_B?NC*_!J3Cg>z`?nTB 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 D7$FsX literal 0 HcmV?d00001 diff --git a/app/models/communication/block.rb b/app/models/communication/block.rb index 858d40aa1..d9e386f5a 100644 --- a/app/models/communication/block.rb +++ b/app/models/communication/block.rb @@ -64,6 +64,7 @@ class Communication::Block < ApplicationRecord image: 51, gallery: 300, video: 52, + sound: 1005, key_figures: 56, features: 2010, datatable: 54, @@ -82,7 +83,7 @@ class Communication::Block < ApplicationRecord } CATEGORIES = { - basic: [:chapter, :image, :video, :datatable], + basic: [:chapter, :image, :video, :sound, :datatable], storytelling: [:key_figures, :features, :gallery, :call_to_action, :testimonials, :timeline], references: [:pages, :posts, :organization_chart, :partners, :programs], utilities: [:files, :definitions, :embed, :contact] diff --git a/app/models/communication/block/template/sound.rb b/app/models/communication/block/template/sound.rb new file mode 100644 index 000000000..459a4d19d --- /dev/null +++ b/app/models/communication/block/template/sound.rb @@ -0,0 +1,14 @@ +class Communication::Block::Template::Sound < Communication::Block::Template::Base + + has_component :file, :file + has_component :title, :string + has_component :transcription, :text + + protected + + def check_accessibility + super + accessibility_error 'accessibility.blocks.templates.sound.title_missing' if block.title.blank? && title.blank? + accessibility_error 'accessibility.blocks.templates.sound.transcription_missing' if transcription.blank? + end +end diff --git a/app/views/admin/communication/blocks/components/file/_edit.html.erb b/app/views/admin/communication/blocks/components/file/_edit.html.erb index 1161795ef..592c1f391 100644 --- a/app/views/admin/communication/blocks/components/file/_edit.html.erb +++ b/app/views/admin/communication/blocks/components/file/_edit.html.erb @@ -16,7 +16,7 @@ remove = t 'admin.communication.blocks.components.file.input.remove' :id="<%= dom_id.html_safe %>"> </div> <div v-if="<%= model %>.<%= property %>.id"> - <p><b>{{ element.file.filename }}</b></p> + <p><b>{{ <%= model %>.<%= property %>.filename }}</b></p> <a class="btn btn-sm text-danger" v-on:click="<%= model %>.<%= property %>={}"> <i class="<%= Icon::DELETE %>"></i> diff --git a/app/views/admin/communication/blocks/components/image/_edit.html.erb b/app/views/admin/communication/blocks/components/image/_edit.html.erb index 7691d20af..2f4702ec6 100644 --- a/app/views/admin/communication/blocks/components/image/_edit.html.erb +++ b/app/views/admin/communication/blocks/components/image/_edit.html.erb @@ -12,6 +12,7 @@ remove = t 'admin.communication.blocks.components.image.input.remove' type="file" accept="image/*" @change="onFileImageChange( $event, <%= model %>, '<%= property %>' )" + data-size-limit="<%= Communication::Block::IMAGE_MAX_SIZE %>" :id="<%= dom_id.html_safe %>"> </div> <div v-if="<%= model %>.<%= property %>.id"> diff --git a/app/views/admin/communication/blocks/templates/sound/_edit.html.erb b/app/views/admin/communication/blocks/templates/sound/_edit.html.erb new file mode 100644 index 000000000..ec65c4326 --- /dev/null +++ b/app/views/admin/communication/blocks/templates/sound/_edit.html.erb @@ -0,0 +1,11 @@ +<div class="row pure__row--small"> + <div class="col-md-6"> + <%= block_component_edit :file %> + <%= block_component_edit :title %> + </div> + <div class="col-md-6"> + <%= block_component_edit :transcription, + label: t('admin.communication.blocks.components.text.transcription.label'), + placeholder: t('admin.communication.blocks.components.text.transcription.placeholder'), rows: 10 %> + </div> +</div> diff --git a/app/views/admin/communication/blocks/templates/sound/_preview.html.erb b/app/views/admin/communication/blocks/templates/sound/_preview.html.erb new file mode 100644 index 000000000..d28756675 --- /dev/null +++ b/app/views/admin/communication/blocks/templates/sound/_preview.html.erb @@ -0,0 +1,34 @@ +<% +class_name = "block block-sound" +unless @block.title.blank? + class_name += " block-with-title" +end +%> +<section class="<%= class_name %>"> + <div class="container"> + <div class="block-content"> + <% unless @block.title.blank? %> + <div class="top"> + <h2><%= @block.title %></h2> + </div> + <% end %> + <% if @block.template.file.present? %> + <% blob = @block.template.file_component.blob %> + <% if blob %> + <audio controls src="<%= blob.url %>"></audio> + <% end %> + <% end %> + <% if @block.template.title %> + <p><%= block_component_preview :title %></p> + <% end %> + <% unless @block.template.transcription.blank? %> + <div class="transcription"> + <details> + <summary><%= t 'accessibility.transcription' %></summary> + <p><%= block_component_preview :transcription %></p> + </details> + </div> + <% end %> + </div> + </div> +</section> \ No newline at end of file diff --git a/app/views/admin/communication/blocks/templates/sound/_static.html.erb b/app/views/admin/communication/blocks/templates/sound/_static.html.erb new file mode 100644 index 000000000..08326619b --- /dev/null +++ b/app/views/admin/communication/blocks/templates/sound/_static.html.erb @@ -0,0 +1,3 @@ +<%= block_component_static :file %> +<%= block_component_static :title %> +<%= block_component_static :transcription %> diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml index e25a3e57e..ae26a0ac9 100644 --- a/config/locales/communication/en.yml +++ b/config/locales/communication/en.yml @@ -582,6 +582,14 @@ en: description: A selection of programs. edit: add: Add a program + sound: + description: An audio recording with a text transcription for a proper accessibility. + edit: + file: + label: Audio file encoded for the Web (.mp3, .m4a...) + title: + label: Recording title + placeholder: Enter the title testimonials: description: One or more testimonies edit: @@ -756,6 +764,7 @@ en: partners: Organizations posts: Posts programs: Programs + sound: Sound testimonials: Testimonials timeline: Timeline video: Video diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml index ff64b5856..b41a76a3a 100644 --- a/config/locales/communication/fr.yml +++ b/config/locales/communication/fr.yml @@ -582,6 +582,14 @@ fr: description: Une sélection de formations. edit: add: Ajouter une formation + sound: + description: Un enregistrement audio, avec sa transcription pour l'accessibilité. + edit: + file: + label: Fichier audio pour diffusion Web (.mp3, .m4a...) + title: + label: Titre de l'enregistrement + placeholder: Entrer le titre testimonials: description: Un ou plusieurs témoignages, avec le texte, l'auteur, sa fonction et sa photo. edit: @@ -756,6 +764,7 @@ fr: partners: Organisations posts: Actualités programs: Formations + sound: Son testimonials: Témoignages timeline: Frise chronologique video: Vidéo diff --git a/config/locales/en.yml b/config/locales/en.yml index 551e5fb3b..dc883cd46 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -19,13 +19,6 @@ en: blocks: components: templates: - video: - title_missing: - title: No title - text_html: Neither the block, neither the video have a title. It will prevent blind people from knowing what the video is about, as mentioned in <a href="https://www.numerique.gouv.fr/publications/rgaa-accessibilite/methode-rgaa/criteres/#topic4" target="_blank">criterion 4.7 of RGAA</a>. Please add a title to the video. - transcription_missing: - title: No transcription - text_html: The video has no text transcription for blind people, or for users with a low bitrate connection who could not read the video properly. Please add a text transcription. embed: title_missing: title: No frame title @@ -33,6 +26,20 @@ en: transcription_missing: title: No transcription text_html: The HTML iframe has no text transcription for blind people, for people with low bandwidth or no javascript enabled. Please add a text transcription. + sound: + title_missing: + title: No title + text_html: Neither the block, neither the recording have a title. It will prevent blind people from knowing what the recording is about, as mentioned in <a href="https://www.numerique.gouv.fr/publications/rgaa-accessibilite/methode-rgaa/criteres/#topic4" target="_blank">criterion 4.7 of RGAA</a>. Please add a title to the recording. + transcription_missing: + title: No transcription + text_html: The recording has no text transcription for blind people, or for users with a low bitrate connection who could not read the recording properly. Please add a text transcription. + video: + title_missing: + title: No title + text_html: Neither the block, neither the video have a title. It will prevent blind people from knowing what the video is about, as mentioned in <a href="https://www.numerique.gouv.fr/publications/rgaa-accessibilite/methode-rgaa/criteres/#topic4" target="_blank">criterion 4.7 of RGAA</a>. Please add a title to the video. + transcription_missing: + title: No transcription + text_html: The video has no text transcription for blind people, or for users with a low bitrate connection who could not read the video properly. Please add a text transcription. activerecord: attributes: import: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 1fc37088e..71d597e29 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -19,13 +19,6 @@ fr: blocks: components: templates: - video: - title_missing: - title: Pas de titre - text_html: Ni le bloc ni la vidéo n'ont de titre, cela va empêcher les personnes malvoyantes de savoir de quoi parle la vidéo, comme expliqué dans le <a href="https://www.numerique.gouv.fr/publications/rgaa-accessibilite/methode-rgaa/criteres/#topic4" target="_blank">critère 4.7 du RGAA</a>. Merci d'ajouter un titre à la vidéo. - transcription_missing: - title: Pas de transcription - text_html: La vidéo n'est pas accompagnée d'une transcription textuelle pour les personnes malvoyantes, ou pour les situations de faible débit qui empêcheraient la lecture. embed: title_missing: title: Pas de titre de cadre @@ -33,6 +26,20 @@ fr: transcription_missing: title: Pas de transcription text_html: Le cadre HTML n'est pas accompagné d'une transcription textuelle pour les personnes malvoyantes, ou pour les situations de faible débit qui empêcheraient la lecture. + sound: + title_missing: + title: Pas de titre + text_html: Ni le bloc ni le fichier audio n'ont de titre, cela va empêcher les personnes malvoyantes de savoir de quoi parle l'enregistrement, comme expliqué dans le <a href="https://www.numerique.gouv.fr/publications/rgaa-accessibilite/methode-rgaa/criteres/#topic4" target="_blank">critère 4.7 du RGAA</a>. Merci d'ajouter un titre à l'enregistrement. + transcription_missing: + title: Pas de transcription + text_html: L'enregistrement n'est pas accompagné d'une transcription textuelle pour les personnes malvoyantes, ou pour les situations de faible débit qui empêcheraient la lecture. + video: + title_missing: + title: Pas de titre + text_html: Ni le bloc ni la vidéo n'ont de titre, cela va empêcher les personnes malvoyantes de savoir de quoi parle la vidéo, comme expliqué dans le <a href="https://www.numerique.gouv.fr/publications/rgaa-accessibilite/methode-rgaa/criteres/#topic4" target="_blank">critère 4.7 du RGAA</a>. Merci d'ajouter un titre à la vidéo. + transcription_missing: + title: Pas de transcription + text_html: La vidéo n'est pas accompagnée d'une transcription textuelle pour les personnes malvoyantes, ou pour les situations de faible débit qui empêcheraient la lecture. activerecord: attributes: import: -- GitLab