XML de Configuração - netoleal/ASF2 GitHub Wiki

Alguns recursos do XML

Toda a aplicação pode ser configurada por XML. Abaixo algumas observações:

Parâmetros

A aplicação e as seções podem ter infinitos parâmetros de acordo com sua necessidade. Aguns exemplos:

Parâmetros Especiais

<debug>true</debug><!--Aplicação em modo debug-->
<showContextMenu>{debug}</showContextMenu><!--Exibe ou não o menu de contexto-->
<hideContextMenuBuiltIn>true</hideContextMenuBuiltIn><!--Exibe ou não os itens default do menu de contexto-->
<lockStageDuringTransitions>true</lockStageDuringTransitions><!--trava o clique no stage inteiro enquanto alguma seção estiver carregando durante a transição-->

Parâmetros simples

<titulo>Este é o título</titulo>

Parâmetros aninhados

<base>../</base>
<swf>{base}swf/</swf><!--resulta em "../swf/"-->

Parâmetros condicionais

<swf>
	<if condition="{debug}">
		<then>swf-debug/</then>
		<else>swf/</else>
	</if>
</swf> <!-- Resulta em "swf-debug/" caso a condição resulte em "true" e "swf/" caso contrário. É possível criar-se múltiplas condições como o exemplo abaixo -->

<param>
	<if condition="(true && 1 gt; 2) || false || {locale} == 'pt-br'">
		<then>
			<if condition="!{loadFiles}">
				<then>param value for condition TRUE and loadFiles = false</then>
				<else>param value for condition TRUE and loadFiles = true</else>
			</if>
		</then>
		<else>param value for condition FALSE</else>
	</if>
</param> <!-- os operadores > e < precisam ser substituídos por: 
gt; Maior que
lt; Menor que
gte: Maior ou igual a
lte; Menos ou igual a

Operadores lógicos podem ser usados das duas formas. = e == valem a mesma coisa. & e && também e assim por diante. -->

Main Controller

Você pode criar uma classe que será usada para inicializar sua aplicação. Para isso, o ASF possui uma interface chamada IMainController

package asf.interfaces
{
	import asf.core.app.ASF;

	public interface IMainController extends IDisposable
	{
		function init( p_app:ASF ):void;
	}
}

Você cria uma classe que implementa essa interface e informa no application.xml o nome completo da classe:

No XML

<mainController>com.netoleal.asf.test.app.ASFTestMainController</mainController>

Exemplo de implementação

package com.netoleal.asf.test.app
{
	import asf.core.app.ASF;
	import asf.interfaces.IMainController;

	public class ASFTestMainController implements IMainController
	{
		private var app:ASF;

		public function init( p_app:ASF ):void
		{
			app = p_app;
			app.navigation.openSection( { sectionID: "baseSection", withSubSection: "about" } );
		}

		public function dispose():void
		{
			app = null;
		}
	}
}

O Framework irá iniciar, carregar o application.xml, ler as configurações, carregar todas as dependências iniciais e, em seguida, criará uma instância do seu IMainController e automaticamente executará o método init passando como parâmetro uma referência da aplicação.

Você pode acessar seu IMainController a partir da propriedade mainController

app.mainController

Layers

Layers podem ser criadas livremente e o aninhamento entre elas é livre e será respeitado no DisplayList.

<layers>
	<base align="topleft" />
	<sections />
	<historyBar />
	<menu align="topleft" margins="10,100" />
	<logo align="topright" margins="-100,100" />
</layers>

Sections

Alguns parâmetros podem ser usados na seção:

<section id="Section 2" viewClass="com.netoleal.asf.test.view.sections.SecondSectionView" layer="sections" loadAtStart="false" keepDependencies="false" ignoreChildren="false">
  • id: Identificação
  • viewClass: Classe que será instanciada após as dependencias serem carregadas. Essa classe precisa implementar ISectionView
  • layer: Em qual layer da app pai da seção a View será adicionada
  • loadAtStart (default false) Inclui ou não as dependências dessa seção ao loading da pai
  • keepDependencies (default false) Mantém ou não as dependências carregadas após a seção sair da navegação
  • ignoreChildren (default false) Decide se as seções filhas abertas, serão ou não fechadas antes de fechar a seção na navegação.
  • closeOnNavigate (default true) Caso este parâmetro seja false, a seção não fechará quando o método closeAllActiveSections for chamado e, consequentemente, continuará aberta durante a navegação até que você a feche manualmente.
  • type Existem 3 tipos de seções.
    • default Esse é o valor padrão. Representa o tipo normal de seções.
    • url Use esse tipo para seções externas. O Framework usará os parâmetros "href" e "target"
    • javascript Executa métodos javaScript. O Framework usará os parâmetros "method" e "target"
  • href URL destino quando o tipo da seção é "url"
  • method Função JavaScript executada quando o tipo da seção é "javascript"
  • target Janela para abrir a url "href" ou destino para executar a função JavaScript
  • closeCurrentBeforeOpen (default true) Fecha ou não as seções atuais antes de carregar e abrir a próxima seção
  • setAsCurrent (default true) Caso o parâmetro "closeCurrentBeforeOpen" seja "false" e este seja "true", o framework carregará a próxima seção e só em seguida irá fechar a(s) anterior(es) para então abrir a próxima. Caso os dois sejam "false", nenhuma seção será fechada pela navegação.

Todas as seções possuem funcionalidades de application. Ou seja, também possuem dicionário, parâmetros, layers, sounds e sections

Exemplos de seções

<section id="contact" viewClass="com.netoleal.asf.test.view.sections.ContactSectionView">
	<files>
		<file id="source" type="swf">{mainApp.base}{mainApp.swf}modules/Contact.swf</file>
	</files>
	<localization>
		<locale>{mainApp.locale}</locale>
		<file>{mainApp.base}locales/{mainApp.locale}/contact/dict.xml</file>
	</localization>
</section>

<section id="source" type="url" href="{mainApp.base}swf/srcview/" target="_blank"/>
<section id="jsTest" type="javascript" method="alert('ASF Framework');" target="_self"/>

Sounds

Application e Sections suportam sounds. Exemplo:

<sounds>
	<sound id="embed" type="embed" volume="0.5" fadeIn="300" autoPlay="fx" loops="2" allowMultipleChannels="true">com.netoleal.asf.test.media.EmbedTrack</sound>
	<sound id="track" type="url" volume="1" autoPlay="false" stream="true">{mainApp.base}media/sounds/track_01.mp3</sound>
	<sound id="fx" ignoreIfPlaying="true" type="url" allowMultipleChannels="true" autoPlay="false" loops="1">{mainApp.base}media/sounds/fx.mp3</sound>
</sounds>

Parâmetros dos sounds

  • id: identificação
  • type: embed ou url. Caso for URL, o MP3 será carregado dinamicamente. Caso embed, um objeto sound exportado na Library de um FLA será instanciado e reproduzido
  • stream: Caso true, o som será carregado apenas quando for executado. Caso contrário ele entra nas dependências da seção/aplicação atual
  • volume: Volume do som (0-1)
  • fadeIn: Reproduz efeito de fade no início da execução do som. Esse parâmetro é o tempo em millisegundos.
  • autoPlay: Caso "true" reproduz quando a seção iniciar. Caso seja um ID de um outro som, esse será executado após o som com ID informado nesse parâmetro terminar.
  • loops: Quantas vezes o som executa
  • allowMultipleChannels: Permite ou não que o som será reproduzido novamente independente de já estar sendo executado. Ideal para efeitos. Se for definido como "false", ele vai parar a reprodução atual para iniciar outra.
  • ignoreIfPlaying: Decide se o pode ser executado caso ele já esteja.
⚠️ **GitHub.com Fallback** ⚠️