Include em estilos Javascript e Groovy
Um estilo pode ser dividido em partes menores para reaproveitamento de código.
Para incluir uma dessas partes em outra, pode-se utilizar a diretiva #lum_include
.
É importante notar que a diretiva #lum_include
é uma diretiva de pré-processamento que indica ao LumisXP
para obter o texto de outro arquivo e inserir no local onde a diretiva encontra-se presente.
Esse processamento é realizado antes da execução do script.
Essa diretiva aceita um único parâmetro do tipo string que é o caminho do arquivo (relativo ao script atual) que deve ser incluído.
Exemplo:
Arquivo /br/com/empresa/style/commons/utils.js
:
Arquivo /br/com/empresa/style/servico1/estilo.js
:
Supondo nesse exemplo que uma interface utilize o arquivo /br/com/empresa/style/servico1/estilo.js
como seu estilo,
o LumisXP iria processar esse estilo e o script a ser utilizado na transformação seria:
Um erro que pode ocorrer é fazer a inclusão no arquivo /br/com/empresa/style/servico1/estilo.js
da seguinte forma:
Repare que, nesse caso, o #lum_include("../commons/utils.js")
está feito fora do bloco de script server-side (<% ... % >
).
Em determinadas situações, isso pode ser desejável. Nesse exemplo, no entanto, não é, já que o arquivo /br/com/empresa/style/commons/utils.js
é puramente um Javascript.
Nesse caso (do erro), o script que o LumisXP montaria seria o seguinte:
Repare que o código fica errado, já que a variável ProjectUtils
não está definida no server-side (onde é utilizada no
trecho <% lum_out.print( ProjectUtils.someFunction("Mundo") ); %>
).
Suporte a temas
O caminho do arquivo a ser incluso é relativo ao script atual e o caminho do script atual desconsidera o caminho do tema.
Por exemplo, suponha que o script atual está em /br/com/empresa/style/servico1/estilo.js
e que se tenha uma inclusão como
#lum_include("../commons/utils.js")
.
Suponha também que na página onde a instância de interface está incluída possua dois temas aplicados: br.com.empresa.projeto.tema1
(localizado em /br/com/empresa/projeto/tema1
) e br.com.empresa.projeto.tema2
(localizado em /br/com/empresa/projeto/tema2
) (aplicados nessa ordem).
Se o tema br.com.empresa.projeto.tema2
possui dois arquivos (relativos à sua raiz):
-
/br/com/empresa/style/servico1/estilo.js
(ou seja, localizado em/br/com/empresa/projeto/tema2/def/br/com/empresa/style/servico1/estilo.js
) -
/br/com/empresa/style/commons/utils.js
(ou seja, localizado em/br/com/empresa/projeto/tema2/def/br/com/empresa/style/commons/utils.js
)
E o tema
br.com.empresa.projeto.tema1
possui um arquivo (relativo à sua raiz):-
/br/com/empresa/style/commons/utils.js
(ou seja, localizado em/br/com/empresa/projeto/tema1/def/br/com/empresa/style/commons/utils.js
)
Nessa situação, a referência ao arquivo de estilo /br/com/empresa/style/servico1/estilo.js
será resolvida para
/br/com/empresa/projeto/tema2/def/br/com/empresa/style/servico1/estilo.js
(já que entre os temas aplicados, esse estilo só está
disponível no tema br.com.empresa.projeto.tema2
).
A inclusão #lum_include("../commons/utils.js")
será resolvida utilizando o caminho base do estilo
/br/com/empresa/style/servico1/estilo.js
.
Logo, o caminho resolvido será /br/com/empresa/style/commons/utils.js
.
Uma vez resolvido esse caminho, o LumisXP irá buscar esse arquivo nos temas aplicados (seguindo a ordem de aplicação).
No caso, o arquivo resolvido será o /br/com/empresa/projeto/tema1/def/br/com/empresa/style/commons/utils.js
(dado que o tema br.com.empresa.projeto.tema1
tem precedência sobre o tema br.com.empresa.projeto.tema2
, dada a ordem de aplicação).
Assim, o script final a ser utilizado será composto por:
-
/br/com/empresa/projeto/tema2/def/br/com/empresa/style/servico1/estilo.js
-
/br/com/empresa/projeto/tema1/def/br/com/empresa/style/commons/utils.js