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; + } + +}