Esta página inicia as discussões sobre a camada AJAX (Javascript e XML) centralizada do Expreso. A proposta inicial (protótipo) possui os seguintes componentes: {{{ expressoAjax.js - Script base coder.js - Contém encode e decode de base64,md5 e url dom.js - Contém manipuladores de objetos na tela (formulários dinâmicos e etc...) dragdrop.js - Manipulador de soltar e arrastar lang.js - Tratamento de internacionalização no js }}} Além disso será ainda implementado: * Janelas * Efeitos em imagens * Abas * Editor de texto (ckeditor) == Como funciona == A idéia é que esta camada seja uma biblioteca ajax completa, como as outras de forma que seja possível utilizá-la em qualquer ambiente até mesmo fora do Expresso. Quando o módulo é carregado, antes da página principal começar a ser processada diversos códigos da API do Egroupware começam a ser executados. Neste ponto é incluído o script base da lib Ajax. Esta base encarrega-se de criar o objeto expresso no escopo do javascript. Para utilizar qualquer um dos componentes ('''que não são carregados automaticamente''') basta executar o script: {{{ expresso.require('coder.js'); // Neste momento é carregado e instanciado o objeto coder que pode ser usado como var codigo = expresso.coder.base64_encode("string"); }}} == Requisições em Background == Esta implementação permite o programador fazer requisições em background {{{ var handler_folders = function (data) { alert(data); }; cExecute ("expressoMail1_2.imap_functions.show_folders", handler_folders); }}} Esta requisição hipotética chamaria show_folders da classe imap_functions no módulo ExpressoMail {{{ expresso.connector.cacheNextRequest(); cExecute ("$this.imap_functions.show_message&uid=100", handler_message_show); }}} Esta requisição chama show_message do módulo corrente, e grava o resultado na memória para as próximas requisições {{{ expresso.connector.cacheNextRequest(1); cExecute ("$this.imap_functions.show_message&uid=100", handler_message_show); }}} A diferença deste exemplo é que a requisição irá expirar. {{{ expresso.connector.purgeCache(); cExecute ("$this.imap_functions.delete_message&uid=100", handler_message_show); }}} Esta requisição chama delete_message do módulo corrente, e apaga os resultados gravados anteriores == Funções == Estas funções são providas para os scripts client-side de todos os módulos {{{ borkb(size) Retorna no formato kb,mb ou gb um tamanho em bytes Entrada: integer Saída: string url_encode(str) Codifica uma string para ser usada em url Entrada: string Saída: string url_decode(str) Decodifica uma string url Entrada: string Saída: string replaceAll(string, token, newtoken) substitui todas as ocorrências de token por newtoken na string Entrada: string, string, string Saída: string config_events(pObj, pEvent, pHandler) Atribui tratadores aos eventos de elementos da página, por exemplo onclick, onmouseover etc... Entrada: objeto, evento e função Sem saída createAndSet(elemType,attributes,values,innerCode) Cria elemento, seta atributos e código Saída: elemento appendChilds(elem,elem1,elem2...) Anexa elementos (elem1,elem2...) em elem Saída: elemento pai removeAll(id) Remove todos os elementos da página com atributo id igual "id" Entrada: string Sem saída validateEmail(email) Valida email Entrada: String Saída: Boolean validateDomain(domain) Valida domínio (www.celepar.pr.gov.br) Entrada: string Saída: Boolean validateUrl(url) Valida URL (ftp://celepar.pr.gov.br:500) Entrada: String Saída Boolean trim(inputString) Remove espaços no fim da string Entrada: String Saída: String LTrim(value) remove espaços no começo da string Entrada: String Saída: String add_className(obj, className) Atribui nome de classe a objeto Entrada: Objeto, String Sem saída remove_className(obj, className) Atribui remove classe de objeto Entrada: Objeto, String Sem saída exist_className(obj, className) Verifica classe de objeto Entrada: Objeto, String Saída: Boolean validate_date(date) Valida data no formato DD/MM/AAAA Entrada: String Saída: Boolean get_lang(_key) Retorna a frase traduzida para _key Entrada: String Saída: String hideBar() Esconde barra dos módulos Sem entrada, sem saída showBar() Mostra barra dos módulos Sem entrada, sem saída changeBar() Troca estado da barra dos módulos (show, hide) Sem entrada, sem saída zoom_in(id) Faz efeito de zoom em imagem com id Entrada: String Sem saída zoom_out(id) Tira efeito de zoom em imagem com id Entrada: String Sem saída }}} == Criptografia == Para trafegar dados sigilosos entre navegador (cliente) e php (servidor) existe a classe rsa na API do Expresso. O funcionamento é como segue: 1- Quando o Expresso é carregado após o login é gerado um par de chaves (pública e privada) 2- A chave pública é iniciada como atributo da classe expresso.crypt 3- Para criptografar uma string de forma que o servidor entenda basta executar o método expresso.crypt.encode. 4- Na parte do servidor a chave privada está armazenada na sessão e poderá desfazer a criptografia. Exemplos: No lado cliente (Javascript): {{{ }}} No lado do servidor PHP: {{{ require_once('PHPGW_INCLUDE_ROOT.'/phpgwapi/inc/class.rsa.inc.php'); $rsa = new rsa(); $senha = $rsa->decode($pswd); }}}