Adrien Dorsaz a écrit 890 commentaires

  • [^] # Re: Récupérer des infos des autres utilisateurs ?

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Récupérer l'avatar d'un utilisateur ?. Évalué à 2 (+0/-0).

    Oui, ça marche si l'image est envoyée directement sur les seveurs Linuxfr. Si l'avatar est un lien externe, c'est plus compliqué de "deviner" 😉

  • [^] # Re: Commit récent

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Échec de validation de lien. Évalué à 3 (+0/-0).

    Oui, tout à fait, c'est lié à ça, j'ai proposé un correctif ici: https://github.com/linuxfrorg/linuxfr.org/pull/312

    Je suis vraiment désolé, je ne me suis pas rendu compte que les liens ont été cassé entre deux.

    J'avais testé au début de la création du validateur de lien et, apparemment, quand je l'ai finalisé avec toutes les conditions, ça a cassé les bookmarks :/

  • [^] # Re: Joyeux anniversaire !

    Posté par  (site web personnel, Mastodon) . En réponse à la dépêche Vingt-trois ans de LinuxFr.org. Évalué à 6. Dernière modification le 28 juin 2021 à 22:25.

    Ah oui, bien vu, on peut utiliser la page des préférences du compte.

    Là-bas, les formulaires ont la références vers ton identifiant utilisateur, comme tu l'as montré avec le <input type="hidden">. Comme c'est du code ajouté implicitement par Ruby On Rails, je n'y avais pas pensé.

    J'avais pensé à la solution de l'avatar, car j'étais passé par le code d'upload des avatars et que je me souvenais que ça avait été codé avec les identifiants utilisateurs :)

  • [^] # Re: Joyeux anniversaire !

    Posté par  (site web personnel, Mastodon) . En réponse à la dépêche Vingt-trois ans de LinuxFr.org. Évalué à 10. Dernière modification le 28 juin 2021 à 16:00.

    Tu peux le retrouver grâce à ton avatar: il faut faire "afficher l'image dans un nouvel onglet".

    Ensuite, dans le lien de l'image, tu trouveras 3 groupes de chiffres, appelons les "A", "B" et "C" dans cet ordre.

    Il faut les mettre dans l'ordre "C", "B", "A" et tu retrouves ton identifiant préfixé par des zéros.

    Par exemple, pour toi, le lien de ton avatar, c'est: https://img.linuxfr.org/avatars/878/076/000/avatar.png

    Donc, ton identifiant devrait être 000 076 878 qui, sans les zéros préfixés, donne 76878.

    Et comme dit plus haut par Beurt, on peut utiliser le lien https://linuxfr.org/users/76878 pour vérifier que l'on est bien redirigé sur ton profil :)


    L'astuce vient du code d'envoi des avatars:

      def store_dir
        partition = ("%09d" % model.id).scan(/\d{3}/).reverse.join("/")
        base_dir.join "avatars/#{partition}"
      end

    model ici correspond à l'utilisateur.


    PS: ça ne fonctionne que si un avatar a été défini et qu'il n'utilise pas un lien externe, mais une image directement envoyée sur linuxfr.org.

  • [^] # Re: Source

    Posté par  (site web personnel, Mastodon) . En réponse au journal [HS] Microsoft annonce la fin. Évalué à 10.

    Et la source de la source sans passer par un tiers: https://docs.microsoft.com/en-us/lifecycle/products/windows-10-home-and-pro

  • [^] # Re: Article supprimé ?

    Posté par  (site web personnel, Mastodon) . En réponse au lien Le nouveau Firefox pour iPhone & iPad - blog.mozilla.org. Évalué à 2.

    C'est revenu :)

  • # Construction du lien wikipédia

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Les liens Wikipédia ne fonctionnent pas avec « ’ ». Évalué à 4 (+0/-0).

    Hello,

    J'ai regardé le code de html-pipeline-linuxfr et effectivement, seul une liste restreinte de caractères est prise en compte pour créer un lien wikipédia:

    • ' .+:!-/()_ les chiffres de 0 à 9 et les lettres de a à z et de A à Z

    En fait, il faut savoir que le texte qui est mis entre les doubles crochets est directement utilisé pour créer l'URL Wikipédia. Donc j'imagine que cette liste de caractère a été choisie pour pouvoir être utilisé directement dans une URL.

    Si je modifie le code pour accepté le caractère , alors [[L’Haÿ-les-Roses]] créera une URL comme ça: https://fr.wikipedia.org/wiki/L’Haÿ-les-Roses.

    Là, on se rend compte qu'on a un problème de fond avec cette fonctionnalité: on vient de mélanger l'apostrophe français avec le simple quote technique du lien.

    Heureusement, Wikipédia est bien fait pour cette article et ils ont prévu la redirection de https://fr.wikipedia.org/w/index.php?title=L’Haÿ-les-Roses vers https://fr.wikipedia.org/wiki/L'Haÿ-les-Roses.

    Or je ne sais pas si cette redirection est automatique pour tous les articles ou si c'est fait à la main.

    Dans ce genre de cas, je propose d'utiliser les liens Markdwon standards, car c'est la manière la plus explicite pour séparer la forme du fond: [L’Haÿ-les-Roses](https://fr.wikipedia.org/wiki/L%27Ha%C3%BF-les-Roses). Le rendu ajoute aussi le W: L’Haÿ-les-Roses

    Comme ça on a une belle forme avec le caractère et on a la forme technique correcte qui utilise le caractère '.

  • # Merci Pitivi :)

    Posté par  (site web personnel, Mastodon) . En réponse au lien Pitivi 2021.05 est sorti. Évalué à 4.

    Ça tombait bien, j'avais justement dû faire une vidéo de 5 minutes avec mon smartphone Android.

    La vidéo contenait un discours rhétorique d'une personne distante d'environ 4 mètres (une longueur de table).

    Quand j'ai prévisualisé la vidéo sur VLC (la version Android donc), je me suis rendu compte que le son n'était pas assez audible: j'ai dû utiliser la fonction "sur-amplification" de VLC pour bien entendre le discours. J'avais donc peur de ne pas réussir à en tirer quelque chose de bien.

    Comme on devait de toute façon couper la fin de la vidéo, j'ai installé Pitivi 2021.05 avec Flatpak.

    D'abord quel bonheur d'avoir la version la plus récente d'un logiciel, installé en 5 minutes, moins d'une semaine après sa sortie ! Merci à Flatpak et aux devs de Pitivi :)

    Ensuite, j'ai facilement découpé la fin de la vidéo et augmenter le volume à 100%.

    Enfin, comme je l'avais imaginé, ça n'a pas suffit, j'ai du ajouté un effet d'amplification.

    Mais quand on fait ça, il y a un bruit de fond constant qui est ajouté au discours. J'ai pu ajouté un second effet de filtre qui atténue ce bruit.

    En fait, les effets de Pitivi sont bien catégorisés et, après, je me suis amusé à en appliquer d'autres (ajuster le contraste, la luminosité…).

    C'est vraiment top de pouvoir s'amuser comme ça, sans aucun plantage de l'interface et en voyant en direct les résultats.

    Mon projet était très simple, car ce n'était qu'une vidéo de 5 minutes et les effets étaient directement appliqués dessus. Mais, n'empêche, Pitivi a bien fonctionné était réactif et je l'ai trouvé assez intuitif.

    C'était l'idéal pour moi qui ne monte pas de vidéos régulièrement, mais qui avait besoin de faire un petit montage ponctuel.

    En plus, chose étonnante, les paramétrages de rendus par défaut sont bien choisis: ma vidéo est passée de ~700 Mio à 215 Mio, c'est très bien ça, car je devais transmettre cette vidéo sur Internet plus tard.

  • # Bonne idée

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Indiquer en tribune de dépêche le retour dans l'espace de rédaction.. Évalué à 2 (+0/-0).

    Hello,

    C'est en effet une bonne idée et c'est assez simple à mettre en place.

    J'ai proposé un correctif sur github.

    Le correctif ajoute un message dans la tribune de la dépêche lors de ces actions:

    • retour de la dépêche en rédaction
    • refus de la dépêche
    • publication de la dépêche

    Par exemple, ça donne:

    example de messages dans la tribune

  • [^] # Re: Validation des liens et bookmarks

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Corruption de dépêches et URL avec des caractères non ascii. Évalué à 3 (+0/-0).

    Voilà, j'ai ajouté des commits pour avoir un comportement acceptable:

    Si la transaction SQL a échoué ou s'il y a une erreur de validation, la méthode reorganize du modèle retourne false (sinon, elle retourne true).

    Dans le cas d'un false, le contrôleur demande de réafficher la page de réorganisation avec les erreurs de validations.

  • [^] # Re: Validation des liens et bookmarks

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Corruption de dépêches et URL avec des caractères non ascii. Évalué à 2 (+0/-0).

    Mince, visiblement, ça ne suffit pas.

    Avec le Pull Request, si je fais une réorganisation avec un lien invalide: il n'y a plus d'exception levée, mais le save ne passe pas et, du coup, il n'y a pas de nouvelle version crée.

    Par contre, le résultat est que la news est bien complètement sauvée (les paragraphes sont bien présents).

    Les logs pour info:

    linuxfr.org_1    | Started PUT "/redaction/news/voici-venu-le-temps-des-cathedrales-libres/reorganized" for 172.18.0.8 at 2021-05-31 21:12:35 +0000
    linuxfr.org_1    | Cannot render console from 172.18.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
    linuxfr.org_1    | Processing by Redaction::NewsController#reorganized as HTML
    linuxfr.org_1    |   Parameters: {"utf8"=>"✓", "authenticity_token"=>"6rSwmgRGKjCj0-SWOLShHi7bJqCxOYIsP25mJAIcrq7xAz_y1sahDTRQl14RnG2EEb34l6Q_gCIj2Dx0dQpPgg", "news"=>{"section_id"=>"1", "title"=>"Voici venu le temps des cathédrales libres", "wiki_body"=>"test chapeau :)\r\n\r\n\r\n\r\ntest\r\nt\r\n\r\n\r\n\r\ntest2222", "links_attributes"=>{"0"=>{"title"=>"http://localhost", "url"=>"http://localhost", "lang"=>"fr", "id"=>"9"}, "1"=>{"title"=>"http://localhost", "url"=>"http://localhost/asdfjkl", "lang"=>"fr", "id"=>"10"}, "2"=>{"title"=>"http://localhost", "url"=>"http://localhost/éééééé", "lang"=>"fr", "id"=>"11"}}, "wiki_second_part"=>"Un sommaire sera automatiquement créé si nécessaire. Pensez à l'orthographe et aux liens explicatifs vers Wikipedia. (Vous pouvez éditer ce paragraphe en cliquant sur le crayon !)\r\n\r\n\r\n\r\ntest\r\n\r\n\r\n\r\nCe paragraphe est chou :) test\r\n\r\n\r\n\r\nVous pouvez éditer ce paragraphe en cliquant sur le crayon ! http://localhost/ééééééé test\r\n\r\n\r\n\r\nVous pouvez éditer ce paragraphe en cliquant sur le crayon ! test\r\n\r\naésldkjfaséldkjf"}, "commit"=>"OK", "id"=>"voici-venu-le-temps-des-cathedrales-libres"}
    linuxfr.org_1    |   Account Load (0.3ms)  SELECT  `accounts`.* FROM `accounts` WHERE `accounts`.`id` = 4 ORDER BY `accounts`.`id` ASC LIMIT 1
    nginx_1          | 172.18.0.1 - - [31/May/2021:21:12:36 +0000] "POST /redaction/news/voici-venu-le-temps-des-cathedrales-libres/reorganized HTTP/1.1" 302 149 "http://dlfp.lo/redaction/news/voici-venu-le-temps-des-cathedrales-libres/reorganize" "Mozilla/5.0 (X11; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    linuxfr.org_1    |   News Load (0.2ms)  SELECT  `news`.* FROM `news` WHERE `news`.`cached_slug` = 'voici-venu-le-temps-des-cathedrales-libres' LIMIT 1
    linuxfr.org_1    |    (0.2ms)  BEGIN
    linuxfr.org_1    |   Paragraph Destroy (0.7ms)  DELETE FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4
    linuxfr.org_1    |   Link Load (0.3ms)  SELECT `links`.* FROM `links` WHERE `links`.`news_id` = 4 AND `links`.`id` IN (9, 10, 11)
    linuxfr.org_1    |   Paragraph Load (0.5ms)  SELECT  `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND (`paragraphs`.`position` IS NOT NULL) ORDER BY `paragraphs`.`position` DESC LIMIT 1
    linuxfr.org_1    |   Paragraph Create (0.3ms)  INSERT INTO `paragraphs` (`news_id`, `position`, `second_part`, `body`, `wiki_body`) VALUES (4, 1, FALSE, '<p>test chapeau :)</p>\n', 'test chapeau :)\r\n\r\n')
    linuxfr.org_1    |   Paragraph Load (0.6ms)  SELECT  `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND (`paragraphs`.`position` IS NOT NULL) ORDER BY `paragraphs`.`position` DESC LIMIT 1
    linuxfr.org_1    |   Paragraph Create (0.4ms)  INSERT INTO `paragraphs` (`news_id`, `position`, `second_part`, `body`, `wiki_body`) VALUES (4, 2, FALSE, '<p>test<br>\nt</p>\n', 'test\r\nt\r\n\r\n')
    linuxfr.org_1    |   Paragraph Load (0.6ms)  SELECT  `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND (`paragraphs`.`position` IS NOT NULL) ORDER BY `paragraphs`.`position` DESC LIMIT 1
    linuxfr.org_1    |   Paragraph Create (0.3ms)  INSERT INTO `paragraphs` (`news_id`, `position`, `second_part`, `body`, `wiki_body`) VALUES (4, 3, FALSE, '<p>test2222</p>\n', 'test2222')
    linuxfr.org_1    |   Paragraph Load (0.7ms)  SELECT  `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND (`paragraphs`.`position` IS NOT NULL) ORDER BY `paragraphs`.`position` DESC LIMIT 1
    linuxfr.org_1    |   Paragraph Create (0.7ms)  INSERT INTO `paragraphs` (`news_id`, `position`, `second_part`, `body`, `wiki_body`) VALUES (4, 4, TRUE, '<p>Un sommaire sera automatiquement créé si nécessaire. Pensez à l\'orthographe et aux liens explicatifs vers Wikipedia. (Vous pouvez éditer ce paragraphe en cliquant sur le crayon !)</p>\n', 'Un sommaire sera automatiquement créé si nécessaire. Pensez à l\'orthographe et aux liens explicatifs vers Wikipedia. (Vous pouvez éditer ce paragraphe en cliquant sur le crayon !)\r\n\r\n')
    linuxfr.org_1    |   Paragraph Load (0.6ms)  SELECT  `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND (`paragraphs`.`position` IS NOT NULL) ORDER BY `paragraphs`.`position` DESC LIMIT 1
    linuxfr.org_1    |   Paragraph Create (0.3ms)  INSERT INTO `paragraphs` (`news_id`, `position`, `second_part`, `body`, `wiki_body`) VALUES (4, 5, TRUE, '<p>test</p>\n', 'test\r\n\r\n')
    linuxfr.org_1    |   Paragraph Load (1.0ms)  SELECT  `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND (`paragraphs`.`position` IS NOT NULL) ORDER BY `paragraphs`.`position` DESC LIMIT 1
    linuxfr.org_1    |   Paragraph Create (0.4ms)  INSERT INTO `paragraphs` (`news_id`, `position`, `second_part`, `body`, `wiki_body`) VALUES (4, 6, TRUE, '<p>Ce paragraphe est chou :) test</p>\n', 'Ce paragraphe est chou :) test\r\n\r\n')
    linuxfr.org_1    |   Paragraph Load (0.6ms)  SELECT  `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND (`paragraphs`.`position` IS NOT NULL) ORDER BY `paragraphs`.`position` DESC LIMIT 1
    linuxfr.org_1    |   Paragraph Create (0.7ms)  INSERT INTO `paragraphs` (`news_id`, `position`, `second_part`, `body`, `wiki_body`) VALUES (4, 7, TRUE, '<p>Vous pouvez éditer ce paragraphe en cliquant sur le crayon ! <a href=\"http://localhost/%C3%A9%C3%A9%C3%A9%C3%A9%C3%A9%C3%A9%C3%A9\">http://localhost/ééééééé</a> test</p>\n', 'Vous pouvez éditer ce paragraphe en cliquant sur le crayon ! http://localhost/ééééééé test\r\n\r\n')
    linuxfr.org_1    |   Paragraph Load (0.6ms)  SELECT  `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND (`paragraphs`.`position` IS NOT NULL) ORDER BY `paragraphs`.`position` DESC LIMIT 1
    linuxfr.org_1    |   Paragraph Create (0.3ms)  INSERT INTO `paragraphs` (`news_id`, `position`, `second_part`, `body`, `wiki_body`) VALUES (4, 8, TRUE, '<p>Vous pouvez éditer ce paragraphe en cliquant sur le crayon ! test</p>\n', 'Vous pouvez éditer ce paragraphe en cliquant sur le crayon ! test\r\n')
    linuxfr.org_1    |   Paragraph Load (0.6ms)  SELECT  `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND (`paragraphs`.`position` IS NOT NULL) ORDER BY `paragraphs`.`position` DESC LIMIT 1
    linuxfr.org_1    |   Paragraph Create (0.5ms)  INSERT INTO `paragraphs` (`news_id`, `position`, `second_part`, `body`, `wiki_body`) VALUES (4, 9, TRUE, '<p>aésldkjfaséldkjf</p>\n', 'aésldkjfaséldkjf')
    linuxfr.org_1    |   Link Load (0.4ms)  SELECT `links`.* FROM `links` WHERE `links`.`news_id` = 4
    linuxfr.org_1    |   Paragraph Load (0.5ms)  SELECT `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND `paragraphs`.`second_part` = FALSE ORDER BY `paragraphs`.`position` ASC
    linuxfr.org_1    |   Paragraph Load (0.4ms)  SELECT `paragraphs`.* FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4 AND `paragraphs`.`second_part` = TRUE ORDER BY `paragraphs`.`position` ASC
    linuxfr.org_1    |   Section Load (0.5ms)  SELECT  `sections`.* FROM `sections` WHERE `sections`.`id` = 1 LIMIT 1
    linuxfr.org_1    |    (1.8ms)  COMMIT
    
    

    On voit bien que je n'ai plus d'exception, car j'ai le COMMIT SQL qui est exécuté.

    Mais aucun lien n'a été mis à jour (sûrement à cause du validator d'url) et aucune version n'a été crée.

  • [^] # Re: Validation des liens et bookmarks

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Corruption de dépêches et URL avec des caractères non ascii. Évalué à 2 (+0/-0).

    J'ai ajouté une transaction SQL manuellement pour la réorganisation, parce que c'est une opération complexe et que ce genre de bug ne devrait pas mettre dans un tel état une dépêche.

  • [^] # Re: Validation des liens et bookmarks

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Corruption de dépêches et URL avec des caractères non ascii. Évalué à 2 (+0/-0).

    Ce que je ne sais pas, c'est si le modèle de link est appelé au moment de faire self.attributes = params ou au moment de faire save.

    Je viens de reproduire, c'est sur la ligne self.attributes = params que ça se déclenche.

    Voilà le déroulement dans le log et, malheureusement, il n'y a pas de transaction sql :(

    linuxfr.org_1    | Started PUT "/redaction/news/voici-venu-le-temps-des-cathedrales-libres/reorganized" for 172.18.0.8 at 2021-05-31 20:40:47 +0000
    linuxfr.org_1    | Cannot render console from 172.18.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
    linuxfr.org_1    | Processing by Redaction::NewsController#reorganized as HTML
    linuxfr.org_1    |   Parameters: {"utf8"=>"✓", "authenticity_token"=>"kyLbHIusFEDZj_GEvZ1sLB_TOSzrTEwdGZ8Qhsy_QZaIlVR0WSyffU4MgkyUtaC2ILXnG_5KThMFKUrWu6mgug", "news"=>{"section_id"=>"1", "title"=>"Voici venu le temps des cathédrales libres test", "wiki_body"=>"test chapeau :)\r\n\r\ntest\r\nt\r\n\r\n\r\ntest2222", "links_attributes"=>{"0"=>{"title"=>"http://localhost", "url"=>"http://localhost", "lang"=>"fr", "id"=>"9"}, "1"=>{"title"=>"http://localhost", "url"=>"http://localhost/ééééééééééééé", "lang"=>"fr", "id"=>"10"}, "2"=>{"title"=>"http://localhost", "url"=>"http://localhost/ééééééééééééé", "lang"=>"fr", "id"=>"11"}}, "wiki_second_part"=>"Un sommaire sera automatiquement créé si nécessaire. Pensez à l'orthographe et aux liens explicatifs vers Wikipedia. (Vous pouvez éditer ce paragraphe en cliquant sur le crayon !)\r\n\r\ntest\r\n\r\n\r\nCe paragraphe est chou :) test\r\n\r\n\r\n\r\nVous pouvez éditer ce paragraphe en cliquant sur le crayon ! http://localhost/ééééééé test\r\n\r\n\r\nVous pouvez éditer ce paragraphe en cliquant sur le crayon ! test"}, "commit"=>"OK", "id"=>"voici-venu-le-temps-des-cathedrales-libres"}
    linuxfr.org_1    |   Account Load (0.4ms)  SELECT  `accounts`.* FROM `accounts` WHERE `accounts`.`id` = 4 ORDER BY `accounts`.`id` ASC LIMIT 1
    linuxfr.org_1    |   News Load (0.2ms)  SELECT  `news`.* FROM `news` WHERE `news`.`cached_slug` = 'voici-venu-le-temps-des-cathedrales-libres' LIMIT 1
    linuxfr.org_1    |   Paragraph Destroy (4.3ms)  DELETE FROM `paragraphs` WHERE `paragraphs`.`news_id` = 4
    linuxfr.org_1    |   Link Load (0.6ms)  SELECT `links`.* FROM `links` WHERE `links`.`news_id` = 4 AND `links`.`id` IN (9, 10, 11)
    linuxfr.org_1    | Completed 500 Internal Server Error in 15ms (ActiveRecord: 5.5ms)
    linuxfr.org_1    | 
    linuxfr.org_1    | 
    linuxfr.org_1    |   
    linuxfr.org_1    | URI::InvalidURIError (URI must be ascii only "http://localhost/\u{e9}\u{e9}\u{e9}\u{e9}\u{e9}\u{e9}\u{e9}\u{e9}\u{e9}\u{e9}\u{e9}\u{e9}\u{e9}"):
    linuxfr.org_1    |   
    linuxfr.org_1    | /usr/lib/ruby/2.3.0/uri/rfc3986_parser.rb:21:in `split'
    linuxfr.org_1    | /usr/lib/ruby/2.3.0/uri/rfc3986_parser.rb:73:in `parse'
    linuxfr.org_1    | /usr/lib/ruby/2.3.0/uri/common.rb:227:in `parse'
    linuxfr.org_1    | app/models/link.rb:36:in `url='
    linuxfr.org_1    | activemodel (5.2.5) lib/active_model/attribute_assignment.rb:51:in `public_send'
    linuxfr.org_1    | activemodel (5.2.5) lib/active_model/attribute_assignment.rb:51:in `_assign_attribute'
    linuxfr.org_1    | activemodel (5.2.5) lib/active_model/attribute_assignment.rb:44:in `block in _assign_attributes'
    linuxfr.org_1    | activemodel (5.2.5) lib/active_model/attribute_assignment.rb:43:in `each'
    linuxfr.org_1    | activemodel (5.2.5) lib/active_model/attribute_assignment.rb:43:in `_assign_attributes'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/attribute_assignment.rb:23:in `_assign_attributes'
    linuxfr.org_1    | activemodel (5.2.5) lib/active_model/attribute_assignment.rb:35:in `assign_attributes'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/nested_attributes.rb:553:in `assign_to_or_mark_for_destruction'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/nested_attributes.rb:518:in `block in assign_nested_attributes_for_collection_association'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/nested_attributes.rb:496:in `each'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/nested_attributes.rb:496:in `assign_nested_attributes_for_collection_association'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/nested_attributes.rb:373:in `links_attributes='
    linuxfr.org_1    | activemodel (5.2.5) lib/active_model/attribute_assignment.rb:51:in `public_send'
    linuxfr.org_1    | activemodel (5.2.5) lib/active_model/attribute_assignment.rb:51:in `_assign_attribute'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/attribute_assignment.rb:31:in `block in assign_nested_parameter_attributes'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/attribute_assignment.rb:31:in `each'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/attribute_assignment.rb:31:in `assign_nested_parameter_attributes'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/attribute_assignment.rb:25:in `_assign_attributes'
    linuxfr.org_1    | activemodel (5.2.5) lib/active_model/attribute_assignment.rb:35:in `assign_attributes'
    linuxfr.org_1    | app/models/news.rb:264:in `reorganize'
    linuxfr.org_1    | app/controllers/redaction/news_controller.rb:68:in `reorganized'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
    linuxfr.org_1    | actionpack (5.2.5) lib/abstract_controller/base.rb:194:in `process_action'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_controller/metal/rendering.rb:30:in `process_action'
    linuxfr.org_1    | actionpack (5.2.5) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/callbacks.rb:132:in `run_callbacks'
    linuxfr.org_1    | actionpack (5.2.5) lib/abstract_controller/callbacks.rb:41:in `process_action'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_controller/metal/rescue.rb:22:in `process_action'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/notifications.rb:168:in `block in instrument'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/notifications/instrumenter.rb:23:in `instrument'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/notifications.rb:168:in `instrument'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/railties/controller_runtime.rb:24:in `process_action'
    linuxfr.org_1    | actionpack (5.2.5) lib/abstract_controller/base.rb:134:in `process'
    linuxfr.org_1    | actionview (5.2.5) lib/action_view/rendering.rb:32:in `process'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_controller/metal.rb:191:in `dispatch'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_controller/metal.rb:252:in `dispatch'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/routing/route_set.rb:34:in `serve'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/journey/router.rb:52:in `block in serve'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/journey/router.rb:35:in `each'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/journey/router.rb:35:in `serve'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/routing/route_set.rb:840:in `call'
    linuxfr.org_1    | warden (1.2.8) lib/warden/manager.rb:36:in `block in call'
    linuxfr.org_1    | warden (1.2.8) lib/warden/manager.rb:34:in `catch'
    linuxfr.org_1    | warden (1.2.8) lib/warden/manager.rb:34:in `call'
    linuxfr.org_1    | rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
    linuxfr.org_1    | rack (2.2.3) lib/rack/etag.rb:27:in `call'
    linuxfr.org_1    | rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'
    linuxfr.org_1    | rack (2.2.3) lib/rack/head.rb:12:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
    linuxfr.org_1    | rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
    linuxfr.org_1    | rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/cookies.rb:670:in `call'
    linuxfr.org_1    | activerecord (5.2.5) lib/active_record/migration.rb:559:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/callbacks.rb:98:in `run_callbacks'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/executor.rb:14:in `call'
    linuxfr.org_1    | better_errors (2.5.0) lib/better_errors/middleware.rb:59:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
    linuxfr.org_1    | web-console (3.6.2) lib/web_console/middleware.rb:135:in `call_app'
    linuxfr.org_1    | web-console (3.6.2) lib/web_console/middleware.rb:22:in `block in call'
    linuxfr.org_1    | web-console (3.6.2) lib/web_console/middleware.rb:20:in `catch'
    linuxfr.org_1    | web-console (3.6.2) lib/web_console/middleware.rb:20:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
    linuxfr.org_1    | railties (5.2.5) lib/rails/rack/logger.rb:38:in `call_app'
    linuxfr.org_1    | railties (5.2.5) lib/rails/rack/logger.rb:26:in `block in call'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/tagged_logging.rb:71:in `block in tagged'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/tagged_logging.rb:28:in `tagged'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/tagged_logging.rb:71:in `tagged'
    linuxfr.org_1    | railties (5.2.5) lib/rails/rack/logger.rb:26:in `call'
    linuxfr.org_1    | sprockets-rails (3.2.2) lib/sprockets/rails/quiet_assets.rb:13:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/request_id.rb:27:in `call'
    linuxfr.org_1    | rack (2.2.3) lib/rack/method_override.rb:24:in `call'
    linuxfr.org_1    | rack (2.2.3) lib/rack/runtime.rb:22:in `call'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/executor.rb:14:in `call'
    linuxfr.org_1    | actionpack (5.2.5) lib/action_dispatch/middleware/static.rb:127:in `call'
    linuxfr.org_1    | rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
    linuxfr.org_1    | railties (5.2.5) lib/rails/engine.rb:524:in `call'
    linuxfr.org_1    | thin (1.7.2) lib/thin/connection.rb:86:in `block in pre_process'
    linuxfr.org_1    | thin (1.7.2) lib/thin/connection.rb:84:in `catch'
    linuxfr.org_1    | thin (1.7.2) lib/thin/connection.rb:84:in `pre_process'
    linuxfr.org_1    | thin (1.7.2) lib/thin/connection.rb:53:in `process'
    linuxfr.org_1    | thin (1.7.2) lib/thin/connection.rb:39:in `receive_data'
    linuxfr.org_1    | eventmachine (1.2.7) lib/eventmachine.rb:195:in `run_machine'
    linuxfr.org_1    | eventmachine (1.2.7) lib/eventmachine.rb:195:in `run'
    linuxfr.org_1    | thin (1.7.2) lib/thin/backends/base.rb:73:in `start'
    linuxfr.org_1    | thin (1.7.2) lib/thin/server.rb:162:in `start'
    linuxfr.org_1    | rack (2.2.3) lib/rack/handler/thin.rb:22:in `run'
    linuxfr.org_1    | rack (2.2.3) lib/rack/server.rb:327:in `start'
    linuxfr.org_1    | railties (5.2.5) lib/rails/commands/server/server_command.rb:53:in `start'
    linuxfr.org_1    | railties (5.2.5) lib/rails/commands/server/server_command.rb:147:in `block in perform'
    linuxfr.org_1    | railties (5.2.5) lib/rails/commands/server/server_command.rb:142:in `tap'
    linuxfr.org_1    | railties (5.2.5) lib/rails/commands/server/server_command.rb:142:in `perform'
    linuxfr.org_1    | thor (1.0.1) lib/thor/command.rb:27:in `run'
    linuxfr.org_1    | thor (1.0.1) lib/thor/invocation.rb:127:in `invoke_command'
    linuxfr.org_1    | thor (1.0.1) lib/thor.rb:392:in `dispatch'
    linuxfr.org_1    | railties (5.2.5) lib/rails/command/base.rb:69:in `perform'
    linuxfr.org_1    | railties (5.2.5) lib/rails/command.rb:46:in `invoke'
    linuxfr.org_1    | railties (5.2.5) lib/rails/commands.rb:18:in `<main>'
    linuxfr.org_1    | bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
    linuxfr.org_1    | bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
    linuxfr.org_1    | bootsnap (1.4.6) lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
    linuxfr.org_1    | bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
    linuxfr.org_1    | bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/dependencies.rb:291:in `block in require'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/dependencies.rb:257:in `load_dependency'
    linuxfr.org_1    | activesupport (5.2.5) lib/active_support/dependencies.rb:291:in `require'
    linuxfr.org_1    | bin/rails:4:in `<main>'
    nginx_1          | 172.18.0.1 - - [31/May/2021:20:40:47 +0000] "POST /redaction/news/voici-venu-le-temps-des-cathedrales-libres/reorganized HTTP/1.1" 500 143305 "http://dlfp.lo/redaction/news/voici-venu-le-temps-des-cathedrales-libres/reorganize" "Mozilla/5.0 (X11; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    
  • [^] # Re: Validation des liens et bookmarks

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Corruption de dépêches et URL avec des caractères non ascii. Évalué à 2 (+0/-0).

    Pour la réorganisation, on a, dans le modèle de news, le code:

      def reorganize(params)
        Paragraph.where(news_id: self.id).delete_all
        self.attributes = params
        create_parts
        save
        unlock
      end

    On voit bien que la première étape est de supprimer tous les paragraphes.

    La ligne create_parts va recréer tous les paragraphes de la première et de la seconde partie.

    L'appel à create_new_version est définit pour s'exécuter après le save (after_save).

    Il faut savoir que, si un lien est invalide, le modèle link lève une exception sans gestion d'erreur et donc fait arrêter nette la procédure.

    Ce que je ne sais pas, c'est si le modèle de link est appelé au moment de faire self.attributes = params ou au moment de faire save.

    En plus, je ne sais pas si Rails fait des transactions dans MySQL, donc c'est un peu compliqué à expliquer ce qui se passe juste en regardant le code. Il faudrait que je reproduise aussi pour mieux analyser.

    Mais en tout cas, s'il n'y a pas de transaction SQL, la news serait effectivement dans un mauvais état: les paragraphes ont été détruits et les nouveaux body/wiki_body n'ont pas été sauvés.

    Mon Pull Request fait en sorte que le modèle link ne lève plus une exception brute, mais remonte une erreur de validtion. Au moins, ça n'arrête plus le processus d'un coup, mais ça perturbe uniquement les modifications sur les liens.

  • # Validation des liens et bookmarks

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Corruption de dépêches et URL avec des caractères non ascii. Évalué à 2 (+0/-0).

    Hello,

    J'ai ajouté la validation des liens HTTP dans ce Pull Request: https://github.com/linuxfrorg/linuxfr.org/pull/309

    Avant, on n'affichait aucune des erreurs de validation, j'ai ajouté les messages d'erreurs dans ces cas. J'ai dû mettre à jour un peu le rendu des liens en édition dans l'espace de rédaction:

    Liens en édition dans l'espace de rédaction

    J'ai ajouté un cadre autour du formulaire, pour bien montrer à l'utilisateur que tous ces boutons sont liés.

    Dans le lien "en édition", j'ai profité d'expliquer que le lien peut être supprimé en vidant le champ Adresse.

    Quand plusieurs erreurs existent, une liste à puce est affichée. Si le lien est en modification, les puces sont les drapeaux de langue. Je n'ai pas corrigé ça, parce qu'on a déjà un Pull Request pour enlever les drapeaux de langue dans les liens.

  • [^] # Re: Comment débuter ?

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Pouvoir tester les mises à jour de maintenance. Évalué à 2 (+0/-0).

    Merci pour toutes ces informations, je vais voir ce que j'arrive à faire.

    Et il faut aussi faire très attention à la version de Ruby : on a une version de Ruby assez ancienne en prod et j'ai plusieurs fois dû faire des reverts à cause de ça.

    Est-ce que la version de Ruby est plus vieille que celle disponible sur Debian Stretch (version 2.3.3) ?

    Je comptais utiliser les images Docker que j'ai configuré et qui travaillent justement avec Debian Stretch pour l'instant.

  • [^] # Re: iOS

    Posté par  (site web personnel, Mastodon) . En réponse au sondage Sous quel système d'exploitation tourne votre téléphone ?. Évalué à 4.

    Apple aime vendre très cher son matériel, mais il ne se gène pas non plus pour te tracer ou permettre aux applications tiers de te tracer.

    Vu justement la position de Facebook suite aux changements de permission des applications dans iOS, ton affirmation demande une source.

    Euh, tu viens donc justement de prouver que Facebook et les autres pouvaient ces 10 dernières années se servir ?

    Et donc, malgré le prix du téléphone qui a toujours était élevé, il n'y avait pas plus de discrétion.

  • [^] # Re: iOS

    Posté par  (site web personnel, Mastodon) . En réponse au sondage Sous quel système d'exploitation tourne votre téléphone ?. Évalué à 9.

    Que le modèle économique d’Apple et de vendre du matériel (cher), pas mes données personnelles.

    C'est très intéressant comme point de vue, mais je pense que c'est certainement faux.

    Apple aime vendre très cher son matériel, mais il ne se gène pas non plus pour te tracer ou permettre aux applications tiers de te tracer.

    C'est pareil chez Google, mais ça fait tomber l'argument du prix.

    D’autant que la confiance aveugle est généralement le plus court chemin pour se faire avoir.

    Justement, vu la citation plus haut sans justification, il y a une confiance aveugle dans Apple également ;)

  • # Comment débuter ?

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Pouvoir tester les mises à jour de maintenance. Évalué à 2 (+0/-0).

    Préambule: c'est moi qui est ouvert l'entrée de suivi, j'ai oublié de me connecter avant :)

    Comme je ne connais pas moi-même rails, j'ai cherché la manière de faire avec Rails.

    D'après son tutorial, rails a déjà son propre framework de test: https://guides.rubyonrails.org/testing.html

    J'ai donc commencé par chercher dans l'historique git et j'ai découvert qu'il y avait des tests dans le dossier test (dossier utilisé par rails, justement).

    Puis, ce dossier a été supprimé en faveur du framework de test rspec2 qui avait ses tests dans le dossier spec.

    Depuis le commit eaf8458858ab4fff7dffd86ae396c64f0d76e753, on a supprimé tous les tests.

    Avant de pouvoir commencer, j'ai donc plusieurs questions:

    • pourquoi est-ce que l'on est passé au framework rspec2 ?

    • le changement de framework a était fait il y a très longtemps (en 2010), si je recommence de zéro, on pourrait à nouveau utiliser le framework de rails ?

      • Je préférerais utiliser celui de rails, car le tutoriel de rails est plutôt complet (pour les autres aspects du framework en tout cas) et comme ça on peut diriger les bonnes volontés sur leur tutoriel.
    • est-ce que les tests qui étaient dans le dossier spec étaient vraiment trop cassé ? est-ce que je devrais recommencer de zéro ? étaient-ils utiles ?

  • [^] # Re: Texte pré-établi <> message supplémentaire

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Message pour relance dans l'espace de rédaction. Évalué à 2 (+0/-0).

    Bonne nouvelle, j'ai repris le code et, en fait, je m'étais complètement trompé :)

    Il n'y avait pas besoin de passer par JavaScript, je devais simplement couper le template de l'email en 3 parties.

    Voilà le résultat:

    relancer les rédacteurs

    En travaillant là-dessus, je me suis en plus rendu compte qu'il y avait besoin de faire une petite correction CSS dans l'espace de rédaction pour les écrans mobiles: il y avait trop de marge autour du texte sur les petits écrans, j'ai ajusté ça pour être raccord avec le reste du site mobile.

    J'ai préparé un Pull Request pour ça: https://github.com/linuxfrorg/linuxfr.org/pull/308

  • # Superbe illustration

    Posté par  (site web personnel, Mastodon) . En réponse à la dépêche GIMP 2.99.4 et 2.99.6: don't worry, be h-API!. Évalué à 10.

    Merci beaucoup pour la dépêche et le travail sur Gimp !

    Je trouve l'illustration "work in progress" vraiment bien trouvée, c'est exactement l'esprit que j'aime avec les logiciels libres :)

  • # Doublon

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Césure inutile / toxique dans les champs de saisie texte. Évalué à 3 (+0/-0). Dernière modification le 23 mai 2021 à 11:47.

    Pour information, il y avait cette demande en double: https://linuxfr.org/suivi/suggestion-concernant-l-interface-de-redaction-des-depeches

    Je n'avais pas vu que, en peu de temps, vous étiez les 2 à faire la même suggestion 😅

  • # Merci !

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Suggestion concernant l'interface de rédaction des dépêches. Évalué à 3 (+0/-0).

    Hello,

    Je me suis lancé aujourd'hui dans ma première contribution à une dépêche, et je trouve l'interface de rédaction vraiment bien pensée et très pratique ! Félicitations :)

    Merci :)

    Le seul point qui m'a un peu surpris concerne le comportement de césure de l'éditeur de texte : lorsqu'on écrit le texte au format markdown dans la boîte à cet effet, l'éditeur applique automatiquement une césure à la fin des lignes avec l'ajout d'un tiret -. Seul l'affichage est modifié : le text brut sous-jacent n'est pas modifié (par exemple, un mot affiché tronqué peut être copié-collé sur une nouvelle ligne et le tiret disparaîtra).

    Ce comportement est profitable pour l'affichage du texte dans le rendu html, mais cela m'a un peu déstabilisé dans l'éditeur lui-même : je me demandais parfois si j'avais fait une faute de frappe et inséré un tiret indésirable, ou bien si le tiret était celui de l'affichage de césure.

    Il me semblerait bénéfique de désactiver ce comportement d'affichage de césure dans la boîte d'édition de texte brut afin de n'afficher que le texte tapé. Curieusement, je ne retrouve pas ce comportement dans la boîte de texte utilisée pour écrire cette suggestion ? :)

    Je suis tout à fait d'accord avec toi et j'ai proposé une correction dans cette entrée de suivi.

    Comme c'est un doublon de demande, je vais clôturer ici et on pourra continuer à discuter là-bas si jamais.

  • # Texte pré-établi <> message supplémentaire

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Message pour relance dans l'espace de rédaction. Évalué à 2 (+0/-0).

    Hello,

    J'ai regardé un peu comment le code fonctionne actuellement.

    L'idée actuelle est que le TEXTE DE LA RELANCE est inséré dans l'email et, également, directement dans la discussion sur le côté de la dépêche.

    1) que l'on voie le texte complet de la relance quand on effectue une relance depuis l'espace de rédaction

    Au début, je pensais mettre directement l'email complet dans la zone de texte.

    Mais à cause de l'utilisation du message de relance dans la discussion, je ne peux pas le faire.

    En plus, je dois travailler côté javascript et je crois que je n'arrive pas à récupérer le texte de l'email depuis javascript.

    Je suis un peu coincé pour cette idée, désolé…

    2) que le texte de la relance soit modifié ainsi

    Bonjour,

    vous avez créé ou contribué à la dépêche en rédaction :
    TITRE DE LA DÉPÊCHE CONCERNÉE

    TEXTE DE LA RELANCE

    Vous pouvez retrouver et compléter votre dépêche à cette adresse :
    https://linuxfr.org/redaction/news/TITRE_DE_LA_DÉPÊCHE

    Merci d’avance.

    --
    L’équipe de LinuxFr.org

    Ça c'est faisable :)

    J'ai juste une question: quelle phrase générique pourrais-je mettre si aucun TEXT DE LA RELANCE n'est renseigné ?

    Quelque chose comme:

    L'équipe d'animation vous encourage à finaliser la dépêche.

    Est-ce que ça pourrait jouer ? Est-ce que tu as une meilleure idée ?

    Merci pour l'idée !

  • # En effet

    Posté par  (site web personnel, Mastodon) . En réponse à l’entrée du suivi Césure inutile / toxique dans les champs de saisie texte. Évalué à 3 (+0/-0).

    C'est vrai que, quand on édite un texte, ça ne sert pas à grand chose cette césure automatique, puisqu'elle ne sera certainement pas placée au même endroit lors du rendu réel.

    J'ai préparé un merge request qui enlève la césure automatique pour tous les textarea.