Category Archives: Web Development

Page transitions no Internet Explorer

Visitando esse site no IE, observe que ao clicar nos links as páginas são abertas com efeito de transparência do tipo fade. Imaginei que fosse feito em Ajax, com algum problema por abrir apenas no IE, mas ao observar os fontes, vi as seguintes tags:



Eles usam filtros e pesquisando, descobri que existem um conjunto de filtros da mesma API que todos conhecem ao aplicar transparência em imagens PNG. Pronto, desenvolver Fade sem ajax é moleza, o ruim é que somente roda no IE (que tive todas as raivas do mundo nesse fim de semana).

Talves usando javascript e a própria “opacity” (na especificação W3C, propriedade dos elementos que pode ser definida a transparência) que os browsers deveriam implementar, você consiga o mesmo efeito na abertura da página, se alguém for tentar me avisa. Algo como mapear no onload da página uma função que simule a transição usando a propriedade “opacity” no body da página. Para implementação proprietária de cada browser que domina o mercado, veja esse link.

Typically chemist’s shop can sale to you with discreet treatments for various soundness problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a very complicated matter. Matters, like “coupons for viagra“, are connected numerous types of health problems. If you need to take formula medications, ask your pharmacist to check your testosterone levels before. Sometimes the treatment options may turn on erectile dysfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

Função Dollar do Prototype para capturar elementos HTML

Enquanto não preparo um material exclusivo sobre manpulação DOM da especificação W3C, gostaria de falar sobre o encapsulamento dessas operações que os Frameworks Javascript fazem.

A funcionalidade principal de todos os Frameworks, é abstrair a complexidade da manipulação DOM, que não é tão complexa assim mas é chata para muitos. Como o DOM é o acesso aos elementos, e dependemos deles para montar a UI (User Interface) das aplicações, todos (Frameworks) tentam minimizar ou associar essa manipulação com a facilidade de linguagens UI que temos costume no desktop.

O Extjs por exemplo, tem o objeto Ext.Element que representa um elemento DOM e possui métodos amigáveis como: Ext.get(id), para capturar um elemento, Ext.get(“my-div”).setWidth(100) para setar uma largura de 100 pixels a um elemento capturado, entre outros métodos.

O Bruno Torres em seu projeto, O Básico da web, escreveu um artigo básico sobre captura de elementos HTML. Esse artigo me inspirou a falar sobre a função $ (Dollar) famosa no Framework Prototype pela simplicidade. Quem quiser aprender como se seleciona um elemento DOM, dê uma olhada no artigo, lá está bem explicado e com uma didática legal.

A função $ (Dollar), símbolo do uso do Prototype, representa um mecanismo “conveniente” de captura de um elemento, presenteado com métodos auxiliares para a manipulação do DOM em um lote de elementos.

Para capturar o elemento DOM, você precisa usar a sintaxe:

var el = document.getElementById("id_elemento");

A partir daí podemos selecionar ou alterar suas propriedades como:

alert(el.innerHTML); // exibe o conteúdo

Enquanto no Prototype, a função $ providencia um acesso mais limpo:

var el = $("id_elemento");

Essa função é amada por todos os desenvolvedores javascript, a construção dela é absolutamente simples:

function $(els) {
	this.elements = [];
	for (var i=0; i < els.length; i++) {
		var element = els[i];
		if (typeof element == 'string') {
			element = document.getElementById(element);
		};
		this.elements.push(element);
	};
	return this;
};

O código da função acrescenta os elementos passados como parâmetros (caso queira capturar vários, apenas separe por vírgula) em uma propriedade array na função. Caso o parâmetro seja uma String, um elemento é capturado pela forma tradicional usando essa String (que deve ser referência a um ID) e acrescentado no array, a cláusula return devolve o escopo da própria função.

A função $ é enriquecida com funçõse que manpulam esse conjunto de elementos. A lógica é que ao retornar esse elemento(s), uma função seja acionada e manipule esse elemento (ou conjunto deles). Essas funções podem ser adicionadas via prototype (propriedade herdada da Global que representa o escopo interno de todos os objetos):

$.prototype = {    
	each: function(fn) {
		for ( var i=0,len=this.elements.length;i++) 
		{
			fn.call(this, this.elements[i]);
		};
		return this;
	}
}

Assim, ao selecionar vários elementos, podemos aplicar essas funções diretamente. Outras funções podem ser adicionadas usando o prototype, criando um ecosistema elementar para manipulação desses elementos.

Veja como a aplicação dessa função reduz o código necessário para acionarmos um elemento diretamente e aplicarmos uma instrução que se feita por DOM, levaria várias linhas:

$('botao').on('click', 
	function() { 	
		$('teste').each(
			function(el){
				alert(el.value);
		});
		alert($('teste').value);
	});
}

Nos próximos posts, destilaremos vários frameworks e como cada um faz sua manipulação.

[UPDATE 10-02-2008]

Para exemplificar melhor como trabalha o Framework Prototype, Devido aos comentários do Edu, ficou faltando código para compreender como a função "$" está disponível no código.

Nas versões antigas do framework, eles faziam assim:

  1. Cria-se uma função privada no contexto referenciada por _$;
  2. Retorna uma instãncia dessa função _$ referenciada a $;

Como fica isso em código:

  // função privada com o código que vimos nesse post
  function _$(els) {
    this.elements = [];
    for (var i=0; i
      var element = els[i];
      if (typeof element == 'string') {
        element = document.getElementById(element);
      };
      this.elements.push(element);
    };
    return this;
  };

Cria a função global "$" com referência a uma instância da função privada "_$"

  $ = function() {
    return new _$(arguments);
  };

O código completo ficaria assim:

(function() {
  function _$(els) {
    this.elements = [];
    for (var i=0; i

Observe que hoje ficou bem mais rebuscado no código das últimas versões, mas o conceito é o mesmo.

Typically chemist's shop can sale to you with discreet treatments for various health problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about "viagra manufacturer coupon". Maybe "viagra discount coupons" is a very complicated matter. Matters, like "coupons for viagra", are united numerous types of health problems. If you need to take prescription medications, ask your pharmacist to check your testosterone levels before. Sometimes the treatment options may include erectile malfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

Ext 2.0 Beta 1

Confira o lançamento da versão beta 1 do Ext 2.0. Essa nova versão trouxe uma mudança significativa nos objetos do Framework, uma aplicação construída com as versões 1.x não tem compatibilidade com a nova que ainda não está estável.

Portanto se deseja construir uma aplicação, ainda é interessante usar a versão 1.1.1 que provavelmente não terá mais atualização, apenas correções.

O Ext iniciou como uma extensão do Yahoo! YUI, chamado ext-yui. Quando a equipe do YUI construiu o componente DataTable, que rivalizou diretamente com o componente GRID do ext-yui (carro-chefe da extensão), Jack Slocum resolveu usar outros frameworks como base (JQuery e Prototype), criou uma empresa para comercializar seu framework com licença comercial (além da licença livre LGPL versão 3), mudou o nome para Ext (retirando a extensão yui) e por fim criou uma implementação livre sem a necessidade mais de terceiros.

Quando Jack Slocum encerrou o ext-yui, na versão 0.33, a arquitetura foi totalmente alterada no Ext 1.x, agora novamente temos uma alteração profunda nos componentes principais que requerem mudanças drásticas e praticamente inviabiliza o upgrade para a nova versão em curto espaço de tempo. Os fontes no SVN agora somente são acessíveis pela licença comercial, mas nos builds disponíveis para downloads, eles são disponibilizados como manda a LGPL.

Nos próximos artigos, vamos explorar esse Framework, destilando cada componente importante e mostranto a diferença entre os dois ramos principais. Aguarde e confira.

Typically chemist’s shop can sale to you with discreet treatments for various health problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a very much complicated matter. Matters, like “coupons for viagra“, are coupled numerous types of soundness problems. If you need to take recipe medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may include erectile disfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.