From fc1f4537e15cec697b838808872467d1f6f9ebca Mon Sep 17 00:00:00 2001 From: "Quintino A. G. Souza" Date: Tue, 17 Mar 2026 08:52:02 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20extens=C3=A3o=20Twig=20com=20=C3=ADc?= =?UTF-8?q?ones=20SVG=20de=20plataformas=20acad=C3=AAmicas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cria AcademicIconsExtension com a função site_tools_academic_icon(name), que retorna o SVG inline dos ícones Lattes (CNPq #005195), ORCID e MathSciNet como Markup seguro, dispensando |raw nos templates. Co-Authored-By: Claude Sonnet 4.6 --- README.md | 31 +++++++ site_tools.services.yml | 5 ++ src/TwigExtension/AcademicIconsExtension.php | 90 ++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 site_tools.services.yml create mode 100644 src/TwigExtension/AcademicIconsExtension.php diff --git a/README.md b/README.md index e4d3040..fcff917 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Módulo Drupal com ferramentas utilitárias reutilizáveis para outros módulos - **Menu de configuração "Local Modules"**: Fornece uma seção centralizada em `/admin/config/local-modules` para configurações de módulos desenvolvidos internamente. - **Bloco Share Links**: Bloco de compartilhamento em redes sociais extensível via hooks. - **Condição de visibilidade "Usuário da página é o usuário logado"**: Restringe a exibição de qualquer bloco à situação em que o usuário autenticado é o mesmo da rota `/user/{id}`. +- **Extensão Twig `site_tools_academic_icon`**: Função Twig para renderizar ícones SVG de plataformas acadêmicas (Lattes, ORCID, MathSciNet). ## Sub-módulos @@ -117,6 +118,36 @@ O plugin `PageUserIsCurrentUser` adiciona uma condição de visibilidade reutili Quando ativada, o bloco só é exibido se o usuário autenticado tiver o mesmo ID que o parâmetro `{id}` da rota `/user/{id}`. A opção **"Negar a condição"** inverte o comportamento (exibe para todos exceto o dono). +## Extensão Twig: ícones de plataformas acadêmicas + +A função `site_tools_academic_icon(name)` retorna o SVG inline do ícone solicitado como marcação segura (sem necessidade de `|raw`). + +### Ícones disponíveis + +| Nome | Plataforma | Cor | +|------|------------|-----| +| `lattes` | Plataforma Lattes (CNPq) | `#005195` | +| `orcid` | ORCID | `#a6ce39` | +| `mathscinet` | MathSciNet (AMS) | `#0f4f96` | + +### Uso em templates Twig + +```twig +{{ site_tools_academic_icon('lattes') }} +{{ site_tools_academic_icon('orcid') }} +{{ site_tools_academic_icon('mathscinet') }} +``` + +O SVG já inclui `aria-hidden="true"` e `focusable="false"`. Para acessibilidade, envolva o ícone em um `` com `aria-label`: + +```twig + + {{ site_tools_academic_icon('lattes') }} + +``` + ## Sub-módulo: site_tools_msc_2020 Widget de campo (`FieldWidget`) para seleção hierárquica de termos do vocabulário **MSC 2020** (Mathematics Subject Classification), com até 3 níveis em cascata via AJAX. diff --git a/site_tools.services.yml b/site_tools.services.yml new file mode 100644 index 0000000..531fbd8 --- /dev/null +++ b/site_tools.services.yml @@ -0,0 +1,5 @@ +services: + site_tools.twig_extension.academic_icons: + class: Drupal\site_tools\TwigExtension\AcademicIconsExtension + tags: + - { name: twig.extension } diff --git a/src/TwigExtension/AcademicIconsExtension.php b/src/TwigExtension/AcademicIconsExtension.php new file mode 100644 index 0000000..c3f6dbf --- /dev/null +++ b/src/TwigExtension/AcademicIconsExtension.php @@ -0,0 +1,90 @@ +renderIcon(...), [ + 'is_safe' => ['html'], + ]), + ]; + } + + /** + * Retorna o SVG do ícone solicitado como Markup seguro. + * + * @param string $name + * Nome do ícone: 'lattes', 'orcid' ou 'mathscinet'. + * + * @return \Drupal\Component\Render\MarkupInterface + * Marcação SVG pronta para renderização. + */ + public function renderIcon(string $name): MarkupInterface { + return Markup::create(match ($name) { + 'lattes' => $this->iconLattes(), + 'orcid' => $this->iconOrcid(), + 'mathscinet' => $this->iconMathSciNet(), + default => '', + }); + } + + /** + * Ícone da Plataforma Lattes (CNPq). + * + * Cor oficial CNPq: #005195. + */ + protected function iconLattes(): string { + return <<<'SVG' + +SVG; + } + + /** + * Ícone oficial ORCID. + */ + protected function iconOrcid(): string { + return <<<'SVG' + +SVG; + } + + /** + * Ícone MathSciNet (AMS). + */ + protected function iconMathSciNet(): string { + return <<<'SVG' + +SVG; + } + +}