From 66e590972a0dd11ad1c9381a504a73bc8c6e8cec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 25 Mar 2021 21:57:48 +0100 Subject: [PATCH] Improve Embeddable Comment Render * render embeddable comment into twig template; * add some style --- .../ChillMainBundle/Resources/public/main.js | 1 + .../modules/entity/comment_embeddable.scss | 6 ++ .../Resources/public/modules/entity/index.js | 2 + .../views/Entity/CommentEmbeddable.html.twig | 36 +++++++++++ .../Templating/Entity/CommentRender.php | 60 ++++++++++--------- .../config/services/templating.yaml | 1 + .../translations/messages.fr.yml | 3 + 7 files changed, 81 insertions(+), 28 deletions(-) create mode 100644 src/Bundle/ChillMainBundle/Resources/public/modules/entity/comment_embeddable.scss create mode 100644 src/Bundle/ChillMainBundle/Resources/public/modules/entity/index.js create mode 100644 src/Bundle/ChillMainBundle/Resources/views/Entity/CommentEmbeddable.html.twig diff --git a/src/Bundle/ChillMainBundle/Resources/public/main.js b/src/Bundle/ChillMainBundle/Resources/public/main.js index 1e03bc527..1e8573f2f 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/main.js +++ b/src/Bundle/ChillMainBundle/Resources/public/main.js @@ -36,6 +36,7 @@ require('./modules/breadcrumb/index.js'); require('./modules/download-report/index.js'); require('./modules/select_interactive_loading/index.js'); require('./modules/export-list/export-list.scss'); +require('./modules/entity/index.js'); /* * load img diff --git a/src/Bundle/ChillMainBundle/Resources/public/modules/entity/comment_embeddable.scss b/src/Bundle/ChillMainBundle/Resources/public/modules/entity/comment_embeddable.scss new file mode 100644 index 000000000..e45173e56 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/modules/entity/comment_embeddable.scss @@ -0,0 +1,6 @@ +.chill-entity__comment-embeddable { + .chill-entity__comment-embeddable__metadata { + font-size: smaller; + color: var(--chill-light-gray); + } +} \ No newline at end of file diff --git a/src/Bundle/ChillMainBundle/Resources/public/modules/entity/index.js b/src/Bundle/ChillMainBundle/Resources/public/modules/entity/index.js new file mode 100644 index 000000000..c739899a5 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/modules/entity/index.js @@ -0,0 +1,2 @@ +// css classes to render entities +require('./comment_embeddable.scss'); diff --git a/src/Bundle/ChillMainBundle/Resources/views/Entity/CommentEmbeddable.html.twig b/src/Bundle/ChillMainBundle/Resources/views/Entity/CommentEmbeddable.html.twig new file mode 100644 index 000000000..c9b76451c --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/views/Entity/CommentEmbeddable.html.twig @@ -0,0 +1,36 @@ +{{ opening_box|raw }} +
+
+ + {%- if options['limit_lines'] is not null -%} + {% set content = comment.comment|split('\n')|slice(0, options['limit_lines'])|join('\n') %} + {%- else -%} + {% set content = comment.comment %} + {%- endif -%} + +
+ {% if options['disable_markdown'] %} + {{ content|nl2br }} + {% else %} + {{ content|chill_markdown_to_html }} + {% endif %} +
+
+
+{% if options['metadata'] %} +
+ {% if user is not empty %} + + {{ 'Last updated by'| trans }} {{ user|chill_entity_render_box(options['user']) }} + '; + {% endif %} + + {% if comment.date is not empty %} + + {% if user is empty %}{{ 'Last updated on'|trans ~ ' ' }}{% else %}{{ 'on'|trans ~ ' ' }}{% endif %} + {{ comment.date|format_datetime("medium", "short") }} + + {% endif %} +
+{% endif %} +{{ closing_box|raw }} \ No newline at end of file diff --git a/src/Bundle/ChillMainBundle/Templating/Entity/CommentRender.php b/src/Bundle/ChillMainBundle/Templating/Entity/CommentRender.php index d5fce5749..50fb2d35a 100644 --- a/src/Bundle/ChillMainBundle/Templating/Entity/CommentRender.php +++ b/src/Bundle/ChillMainBundle/Templating/Entity/CommentRender.php @@ -24,6 +24,7 @@ use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable; use Chill\MainBundle\Entity\User; use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Templating\Entity\AbstractChillEntityRender; +use Symfony\Component\Templating\EngineInterface; class CommentRender extends AbstractChillEntityRender { @@ -31,10 +32,19 @@ class CommentRender extends AbstractChillEntityRender * @var \Chill\MainBundle\Repository\UserRepository */ private $userRepository; + + /** + * + * @var EngineInterface + */ + private $engine; - public function __construct(UserRepository $userRepository) - { + public function __construct( + UserRepository $userRepository, + EngineInterface $engine + ) { $this->userRepository = $userRepository; + $this->engine = $engine; } /** @@ -45,35 +55,29 @@ class CommentRender extends AbstractChillEntityRender */ public function renderBox($entity, array $options): string { - $username = ''; - + // default options + $options = \array_merge([ + 'user' => [], + 'disable_markdown' => false, + 'limit_lines' => null, + 'metadata' => true + ], $options); + if ($entity->getUserId()) { $user = $this->userRepository->find($entity->getUserId()); - if ($user instanceof User) { - $username = $user->getUsername(); - } } - - $str = $this->getDefaultOpeningBox('comment-embeddable'). - ''. - nl2br($entity->getComment()). - ''; - - if ($entity->getDate() instanceof \DateTime) { - $str .= ''. - $entity->getDate()->format('d/m/Y H:i'); - ''; - } - - if (strlen($username) > 0) { - $str .= ''. - $username. - ''; - } - - $str .= $this->getDefaultClosingBox(); - - return $str; + + return $this->engine + ->render( + '@ChillMain/Entity/CommentEmbeddable.html.twig', + [ + 'opening_box' => $this->getDefaultOpeningBox('comment-embeddable'), + 'closing_box' => $this->getDefaultClosingBox(), + 'user' => $user ?? NULL, + 'comment' => $entity, + 'options' => $options + ] + ); } /** diff --git a/src/Bundle/ChillMainBundle/config/services/templating.yaml b/src/Bundle/ChillMainBundle/config/services/templating.yaml index f9bd8d7fb..29dc676d1 100644 --- a/src/Bundle/ChillMainBundle/config/services/templating.yaml +++ b/src/Bundle/ChillMainBundle/config/services/templating.yaml @@ -34,6 +34,7 @@ services: Chill\MainBundle\Templating\Entity\CommentRender: arguments: - '@chill.main.user_repository' + - '@Symfony\Component\Templating\EngineInterface' tags: - { name: 'chill.render_entity' } diff --git a/src/Bundle/ChillMainBundle/translations/messages.fr.yml b/src/Bundle/ChillMainBundle/translations/messages.fr.yml index b19feb69c..a7b71a072 100644 --- a/src/Bundle/ChillMainBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillMainBundle/translations/messages.fr.yml @@ -35,6 +35,9 @@ This form contains errors: Ce formulaire contient des erreurs Choose an user: Choisir un utilisateur 'You are going to leave a page with unsubmitted data. Are you sure you want to leave ?': "Vous allez quitter la page alors que des données n'ont pas été enregistrées. Êtes vous sûr de vouloir partir ?" No value: Aucune information +Last updated by: Dernière mise à jour par +Last updated on: Dernière mise à jour le +on: le Edit: Modifier Update: Mettre à jour