Pular para o conteúdo principal

Html

Hook para transformar código em Html

schema-version: v3
kind: plugin
metadata:
name: code-transformation-plugin
display-name: code-transformation-plugin
description: Code transformation example.
version: 1.0.0
spec:
hooks:
- type: code-transformation
engine-version: 0.2.0-beta
trigger: after-render
language: html
trans-pattern-path: trans-patterns/pattern.html
source-path: src/code.html

Construções suportadas no HTML

tag

As tags têm suporte aos operadores de inserção, remoção e reticências. Isso significa que em qualquer local que seja válido a existência de uma tag, é possível utilizar qualquer um dos operadores suportados.

O exemplo a seguir insere uma tag div como primeiro elemento dentro da tag body. O padrão tem escopo de arquivo.

<<<< pattern-name: my_pattern; pattern-scope: file-scope; >>>>

<...>
<body>
+<<div id="header">
<h1>Welcome to My Website</h1>
</div>>+
<...>
</body>
<...>

O exemplo a seguir remove todas as tag div, desde que não possuam nenhum atributo, independente do conteúdo interno delas. O padrão tem escopo de snippet.

<<<< pattern-name: my_pattern; pattern-scope: snippet-scope; >>>>

-<<div>
<...>
</div>>-

tagName

Os nomes de tag têm suporte aos operadores de ID match, inserção e remoção. Isso significa que no lugar do nome de uma tag, é possível utilizar qualquer um dos operadores suportados.

Atenção!

Note que o operador de inserção e remoção devem sempre ocorrer em par quando estiverem no contexto de uma tag name, ou seja, sempre que houver uma remoção deve haver uma inserção de tag name. Do contrário uma tag poderia ficar sem nome ou com mais de um nome.

Atenção!

Quando utilizar os operadores de inserção e remoção no contexto de uma tag name, lembre-se de também utilizá-los no fechamento da tag, do contrário a abertura e o fechamento ficarão com nomes diferentes.

O exemplo a seguir remove todas as tags cujo o nome iniciam com app, desde que não possuam nenhum atributo, independente do conteúdo interno delas. O padrão tem escopo de snippet.

<<<< pattern-name: my_pattern; pattern-scope: snippet-scope; >>>>

-<*<<app.+>*>
<...>
<*<app.+>*>>-

O exemplo a seguir troca o nome de todas as tags de my-tag para my-new-tag, desde que não possuam nenhum atributo, independente do conteúdo interno delas. O padrão tem escopo de snippet.

<<<< pattern-name: my_pattern; pattern-scope: snippet-scope; >>>>

<-<my-tag>- +<my-new-tag>+>
<...>
</-<my-tag>- +<my-new-tag>+>

tagContent

O conteúdo das tags têm suporte aos operadores de inserção, remoção e reticências. Isso significa é possível utilizar qualquer um dos operadores suportados aninhados no conteúdo de uma tag.

O exemplo a seguir insere uma tag br aninhada à todas as tags div, desde que não possuam nenhum atributo, independente do conteúdo interno delas. O padrão tem escopo de snippet.

<<<< pattern-name: my_pattern; pattern-scope: snippet-scope; >>>>

<div>
<...>
+<<br/>>+
</div>

attribute

Os atributos de tags têm suporte aos operadores de inserção, remoção e reticências. Isso significa que em qualquer local que seja válido a existência de um atributo de tag, é possível utilizar qualquer um dos operadores suportados.

O exemplo a seguir insere o atributo class="text-align: center;" em todas as tags div, independente do conteúdo interno da tag ou dos demais atributos que a tag possa ter. O padrão tem escopo de snippet.

<<<< pattern-name: my_pattern; pattern-scope: snippet-scope; >>>>

<div +<class="text-align: center;">+ <...>>
<...>
</div>

attributeValue

Os valores dos atributos têm suporte aos operadores de String match, inserção e remoção. Isso significa que em qualquer local que seja válido a existência de um valor de atributo, é possível utilizar qualquer um dos operadores suportados.

Atenção!

Note que o operador de inserção e remoção devem sempre ocorrer em par quando estiverem no contexto de um attribute value, ou seja, sempre que houver uma remoção deve haver uma inserção de attribute value. Do contrário um atributo poderia ficar sem valor ou com mais de um valor.

O exemplo a seguir remove o atributo id em todas as tags div, independente do valor original do atributo (operador de string match com regex .*), do conteúdo interno da tag ou dos demais atributos que a tag possa ter. O padrão tem escopo de snippet.

<<<< pattern-name: my_pattern; pattern-scope: snippet-scope; >>>>

<div <...> -<id=*<".*">*>- <...>>
<...>
</div>

O exemplo a seguir substitui o valor do atributo href do primero li por "#main", independente do valor do atributo (operador de string match com regex .*), do conteúdo interno da tag ou dos demais atributos que a tag possa ter. O padrão tem escopo de arquivo.

<<<< pattern-name: my_pattern; pattern-scope: file-scope; >>>>

<html>
<...>
<head>
<...>
<nav>
<...>
<ul>
<li><a href=-<*<".*">*>- +<"#main">+> <...> </a></li>
<li><a href="#about">About</a></li>
<li><a href="#services">Services</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
<...>
</nav>
<...>
</head>
<...>
</html>

attributeName

Os nomes dos atributos têm suporte aos operadores de ID match, inserção e remoção. Isso significa que em qualquer local que seja válido a existência do nome de um atributo, é possível utilizar qualquer um dos operadores suportados.

Atenção!

Note que o operador de inserção e remoção devem sempre ocorrer em par quando estiverem no contexto de um attribute name, ou seja, sempre que houver uma remoção deve haver uma inserção de attribute name. Do contrário uma atributo poderia ficar sem nome ou com mais de um nome.

O exemplo a seguir substitui o nome do atributo id por class em todas as tags section, independente do valor do atributo (operador de string match com regex .*), do conteúdo interno da tag ou dos demais atributos que a tag possa ter. O padrão tem escopo de snippet.

<<<< pattern-name: my_pattern; pattern-scope: snippet-scope; >>>>

<section <...> -<id>- +<class>+ = *<".*">* <...>>
<...>
</section>