LibSAPO.js

Este guia explica o uso básico e os componentes base da LibSAPO.js.

A LibSAPO.js está contida no objecto SAPO, e dentro deste objecto existem todos os módulos da LibSAPO.js. Assim, para a utilização de qualquer outra classe, será necessário incluir o ficheiro  http://js.sapo.pt/SAPO/


<script type="text/javascript" src="http://js.sapo.pt/SAPO/"></script>


Este é um ficheiro muito pequeno que apenas trata da inicialização da lib e inclui alguns utilitários básicos necessários para o uso da lib.


O objecto SAPO e o método s$, que é um alias para o método document.getElementById são as únicas variáveis globais declaradas pela LibSAPO.js. Mesmo assim, apesar não "poluirmos" o DOM, disponibilizamos mais dois métodos, como extensão do objecto Function:

  • bindObj()
  • bindObjEvent()

Para quem está familiarizado com o Prototype, estes métodos são semelhates ao bind() e ao bindAsEventListener().

Mais informação sobre estes métodos aqui: bindObjGuide?


Métodos base

Sem a adição de quaisquer módulos, o objecto SAPO fornece os seguintes métodos:

  • SAPO.namespace() - cria o namespace no objecto "SAPO"
  • SAPO.Browser - Objecto que nos dá a informação do browser. Deve apenas ser usado em casos muito específicos, pois não é boa prática detectar funcionalidades pela designação do browser, mas sim pela detecção da funcionalidade. As propriedades que podemos encontrar são:
    • SAPO.Browser.IE - (true/false)
    • SAPO.Browser.GECKO - (true/false)
    • SAPO.Browser.OPERA - (true/false)
    • SAPO.Browser.SAFARI - (true/false)
    • SAPO.Browser.CHROME - (true/false)
    • SAPO.Browser.KONQUEROR - (true/false)
    • SAPO.Browser.model - modelo do browser (firefox, camino, etc)
    • SAPO.Browser.version - versão do modelo
    • SAPO.Browser.userAgent - "user agent", mesmo que navigator.userAgent
  • SAPO.extendObj(destination, source) - extende o objecto destination com as propriedades do objecto source


Carregar JavaScript? no momento correcto

O módulo SAPO.Dom.Loaded gera um evento dom:loaded que permite que se execute o código JavaScript? apenas quando o DOM está carregado. Atenção: caso exista outra library de JavaScript? na página é necessário ver o último ponto desta secção.

Para utilizar esta funcionalidade é necessário carregar os módulos SAPO.Dom.Loaded e SAPO.Dom.Event:


<script type="text/javascript" src="http://js.sapo.pt/SAPO/Dom/Loaded/"></script>
<script type="text/javascript" src="http://js.sapo.pt/SAPO/Dom/Event/"></script>


E em seguida, observar o evento:


<script type="text/javascript">
SAPO.Dom.Event.observe(document, "dom:loaded", function(){
    // executar código javascript aqui
});
</script>


Alternativamente, é possível executar o código JavaScript? de forma correcta sem usar este módulo. Para tal é necessário colocar uma tag script como o último elemento da página, exactamente antes do fecho do </body>, e preferencialmente dentro de uma closure:


<body>
    <!-- html da página -->
    <script type="text/javascript">
    (function(){
        // executar código javascript aqui
    }());
    </script>
<body>


Caso exista outra library de JavaScript? na página é necessário fazer uma verificação devido à forma como esta verificação do carregamento do DOM é abstraída. Essa verificação consiste em verificar o nome do evento, para ter a certeza de que é o correcto:


<script type="text/javascript">
SAPO.Dom.Event.observe(document, "dom:loaded", function(ev){
    if(ev.eventName == "dom:loaded"){
        // executar código javascript aqui
    }
});
</script>


SAPO.require()

Este método permite fazer o carregamento de outros módulos dinamicamente, permitindo assim que se carreguem módulos apenas quando necessário, e que se execute uma callback quando o carregamento é concluído.

Futuramente este método também fará a gestão das dependências de um dado módulo e poderá vir a ser utilizado para a construção de bundles.

Este método recebe os seguintes parâmetros:

  • SAPO.require(modules, callback, async)
    • modules - array de módulos que devem ser carregados, ou string com apenas um módulo
    • callback - callback a ser executada quando o carregamento dos módulos estiver concluído
    • async - Quando true, executa a callback sem esperar pelo carregamento dos módulos. false por definição.

Para utilizar este módulo basta apenas carregar o ficheiro base da LibSAPO.js. O seguinte exemplo demonstra a utilização do módulo SAPO.Component.Dialog com o SAPO.require:

<script type="text/javascript" src="http://js.sapo.pt/SAPO/"></script>
<script type="text/javascript">
SAPO.require(
    ['SAPO.Dom.Event', 'SAPO.Utility.Dimensions', 'SAPO.Component.Dialog'],
    function(){
        SAPO.Component.Dialog.confirm('teste');
    }
);
</script>