Screencaster Mostrando Conhecimento

jQuery - Estendendo o jQuery

De forma muito simples vou mostrar a vocês como fazer links externos abrirem em nova janela com jQuery, e também como estender a biblioteca para evitar repetições.

Primeiramente, para abrir links externos automaticamente em novas janelas, dispensando o atributo target, e de forma não-obstrutiva, uma boa maneira seria da seguinte forma:

$(function(){
    $("a[href^=http://]").click(function(){
        window.open($(this).attr("href"))
        return false
    })
})

Desta forma, todos os links cujo href inicie com http:// (”a[href^=http://]”) irão abrir o respectivo endereço em nova janela.

Agora vamos supor que queremos utilizar este comportamento em vários sites que mantemos e utilizamos jQuery. Não seria muito interessante digitar a função toda vez, afinal é uma repetição desnecessária. Para solucionar isso, podemos estender o jQuery, colocando essa função inclusive em outro arquivo, que podemos incluir nos sites em que quisermos:

1
2
3
4
5
6
7
$.fn.opensNewWindow = function()
{
	this.click(function(){
		window.open($(this).attr("href"))
		return false
	})
}

Agora sempre que quisermos fazer um link abrir em nova janela, basta utilizarmos nossa função:

1
2
3
$(function(){
	$("a[href^=http://]").opensNewWindow();
})

Nós temos aqui na interAtiva! diversos arquivos com “coleções” de extensões e códigos que usamos com frequência em vários projetos. Para dar mais um exemplo, uma página que usa jQuery para enviar todos os dados de um form via AJAX seria mais ou menos assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
	<title>Estendendo o jQuery</title>
	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
	<script type="text/javascript">
		$(function(){
			$("#myform").submit(function(){
				$.post($(this).attr("action"), $(this).serialize(), tratarRetorno)
				return false
			})
 
			tratarRetorno = function(responseText)
			{
				alert(responseText)
			}
		})
	</script>
</head>
<body id="index">
 
	<form action="?" id="myform" method="post">
		<fieldset>
			Nome:
			<input type="text" name="nome" value="" id="nome"><br>
			Email:
			<input type="text" name="email" value="" id="email"><br>
			<button type="submit">Ok</button>
		</fieldset>
	</form>
 
</body>
</html>

E caso quiséssemos utilizar este mesmo comportamento em outros sites e evitar repetições, poderíamos apenas estender o jQuery:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tratarRetorno = function(responseText)
{
	alert(responseText)
}
 
$.fn.sendViaAJAX = function(callback)
{
	this.submit(function(){
		$.post($(this).attr("action"), $(this).serialize(), callback)
		return false
	})
}
 
$(function(){
	$("#myform").sendViaAJAX(tratarRetorno)
})

Como podem ver, jQuery é uma mão-na-roda na hora de seguir um dos meus favoritos princípios da programação: DON’T REPEAT YOURSELF / NÃO SE REPITA

Até mais!

Postado em: 17/11/2008 @ 12:11 por Guilherme Rambo. Você pode comentar ou enviar um trackback para este post.
Apenas um comentário

jQuery - Menu em abas mamão-com-açúcar

Como eu gosto de jQuery: é tão simples fazer as coisas com ele! Segue então um código prontinho pra quem deseja montar um menu em abas, o código está o mais simples possível, e claro que está desta forma para ser postado no blog, para usar num site seria legal tornar este javascript não-obstrutivo e remover algumas repetições no código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
	<title>Menu em abas simples</title>
	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
	<script type="text/javascript">
		var tabAtual = 1
 
		mudarTab = function(numeroTab) {
			$("#tab_"+tabAtual).toggle()
			$("#tab_"+numeroTab).toggle()
			tabAtual = numeroTab
		}
	</script>
</head>
<body id="index">
 
	<div id="tabs">
 
		<a href="#tab_1" onclick="mudarTab(1)">Tab 1</a>
		<a href="#tab_2" onclick="mudarTab(2)">Tab 2</a>
		<a href="#tab_3" onclick="mudarTab(3)">Tab 3</a>
		<a href="#tab_4" onclick="mudarTab(4)">Tab 4</a>
 
		<div id="tab_1">conteudo tab 1</div>
		<div id="tab_2" style="display:none">conteudo tab 2</div>
 
		<div id="tab_3" style="display:none">conteudo tab 3</div>
		<div id="tab_4" style="display:none">conteudo tab 4</div>
	</div>
 
</body>
</html>

É só isso, basta rodar que o código já funciona. Com um pouco de CSS e outras personalizações você faz um ótimo menu em abas com pouco código.

Até mais!

Postado em: 13/11/2008 @ 17:11 por Guilherme Rambo. Você pode comentar ou enviar um trackback para este post.
4 comentários

Criando janela modal (estilo lightbox) com Javascript e jQuery

Imagem ilustrativa

Seguindo nossa série de vídeos sobre jQuery, neste vídeo eu mostro como criar uma janela modal (semelhante à lightbox), usando javascript e jQuery. O vídeo está um pouco mais longo que os outros, mas muito interessante.

icon for podpress  Podcast Video [12:15m]: Download (125)

Lembrando que falta pouco tempo para encerrarem as votações do Prêmio Podcast 2008, vote no Screencaster clicando no banner abaixo:

Prêmio Podcast  2008

Segue o código da função que eu precisei utilizar no vídeo para pegar as dimensões da página:

// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){

var xScroll, yScroll;

if (window.innerHeight && window.scrollMaxY) {
xScroll = document.body.scrollWidth;
yScroll = window.innerHeight + window.scrollMaxY;
} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
xScroll = document.body.scrollWidth;
yScroll = document.body.scrollHeight;
} else { // Explorer Mac…would also work in Explorer 6 Strict, Mozilla and Safari
xScroll = document.body.offsetWidth;
yScroll = document.body.offsetHeight;
}

var windowWidth, windowHeight;
if (self.innerHeight) { // all except Explorer
windowWidth = self.innerWidth;
windowHeight = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
windowWidth = document.documentElement.clientWidth;
windowHeight = document.documentElement.clientHeight;
} else if (document.body) { // other Explorers
windowWidth = document.body.clientWidth;
windowHeight = document.body.clientHeight;
}

// for small pages with total height less then height of the viewport
if(yScroll < windowHeight){
pageHeight = windowHeight;
} else {
pageHeight = yScroll;
}

// for small pages with total width less then width of the viewport
if(xScroll < windowWidth){
pageWidth = windowWidth;
} else {
pageWidth = xScroll;
}

arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)

return arrayPageSize;
}

Espero que gostem, até mais!

Postado em: 22/10/2008 @ 12:10 por Guilherme Rambo. Você pode comentar ou enviar um trackback para este post.
Tem alguma dúvida? Comente!

Filtrando dados digitados em campo text com Javascript e jQuery

Imagem ilustrativa

Seguindo nossos vídeos sobre jQuery, hoje posto aqui um vídeo onde mostro como criar um campo de texto que aceite apenas números e barras, ou seja, como filtrar dados digitados num campo de texto, de forma bem simples, através de expressões regulares.

icon for podpress  Podcast Video [5:41m]: Download (55)

Espero que gostem.

Não se esqueçam de votar no Screencaster para o Prêmio Podcast 2008, falta pouco tempo para o término das votações, caso goste dos nossos vídeos e áudios, clique no botão abaixo para votar.

Prêmio Podcast  2008

Vote também no nosso parceiro Aperte F5, entrando no site deles e clicando no banner do Prêmio Podcast 2008.

[]’s

Postado em: 21/10/2008 @ 15:10 por Guilherme Rambo. Você pode comentar ou enviar um trackback para este post.
Apenas um comentário

Criando um slideshow de imagens com Javascript e jQuery

Imagem ilustrativa

Seguindo alguns vídeos sobre jQuery que estou fazendo, resolvi fazer um vídeo de como criar um slideshow de fotos utilizando javascript e jQuery. Como vocês verão no vídeo, com as facilidades do jQuery isto fica muito fácil.

icon for podpress  Podcast Video [11:48m]: Download (94)

Não deixem de votar no Screencaster para o Prêmio Podcast 2008, clicando no banner abaixo.

Prêmio Podcast  2008

Vote também no nosso parceiro Aperte F5

Na última semana não tivemos nosso podcast semanal, mas prometemos que esta semana estaremos de volta :D

Postado em: 20/10/2008 @ 15:10 por Guilherme Rambo. Você pode comentar ou enviar um trackback para este post.
3 comentários

mod_rewrite: A essência das URLs amigáveis, ou friendly URLs

Senhoras e senhores, apresento à vocês O Segredo!

Okay, estava brincando. Não estou falando do filme (ou livro, muito bom por sinal), mas sim do segredo das tão admiradas e famigeradas URLs amigáveis (friendly URLs).

Antes de mais nada, preciso informá-los de que existem inúmeras maneiras de se fazerem URLs amigáveis, mas a minha preferida (e a que eu acredito ser a mais adequada) é a que utiliza o mod_rewrite, no servidor Apache.

Seguindo com meu disclaimer pré-desembuchaissologo, também preciso avisar à todos de que, para que seja possível a utilização deste método, o mod_rewrite precisa estar habilitado no seu servidor. Se ele estiver em sua máquina, procure no httpd.conf a linha onde ele está declarado, e certifique-se de que a mesma não esteja comentada (se tiver um # no começo da linha, retire-o). Caso tenha modificado o arquivo, não se esqueça de salvar ele e reiniciar o servidor. Caso o seu servidor esteja na web, e seja compartilhado, é bem provável que ele já esteja com o mod_rewrite habilitado, caso não aí o negócio é um pouco mais complicado, mas uma boa conversa com o pessoal do host pode resolver o seu problema.

Ah! There’s one more thing! Para conseguir tirar o máximo proveito da técnica, é necessário um conhecimento no mínimo básico de expressões regulares, algo que todo bom programador deve tirar um tempinho para aprender.

Feito isso, podemos partir para a prática.

Peguemos uma situação hipotética, onde você tem um site institucional, que tem uma navegação baseada em includes php, a url para acessar a página de contato seria mais ou menos assim:

seusite.com.br/index.php?pagina=contato

Esta URL está um tanto feia. Não seria melhor da seguinte forma?

seusite.com.br/contato

Muito mais agradável, não?

Para fazer com que a URL funciona desta maneira, basta apenas criar um arquivo .htaccess (que permite que façamos configurações no Apache) dentro da pasta raíz do seu site, contento as seguintes informações:

RewriteEngine On
RewriteRule ^\/?([A-Za-z0-9]+)?\/?$ /index.php?pagina=$1

Okay, muito provavelmente quem não conhece expressões regulares não irá entender nada. Mas, de uma forma bem simples, na primeira linha estamos ativando o mod_rewrite para o local onde está o .htaccess, e na segunda estamos dizendo que qualquer caractere alfanumérico que estiver depois da barra no final do domínio, deverá retornar a url index.php?pagina=(o conteúdo alfanumérico encontrado).

Mas, e agora? E se eu tenho uma pasta dentro da raíz do site com os javascripts, outra com css, outra com imagens do portfólio, mais um arquivo que serve de include dentro do site, outro que retorna os ultimos posts do twitter, e por aí vai, e quero que estes arquivos sejam ignorados na hora de reescrever a url ?

Podemos adicionar uma simples condição, antes de definirmos a regra, deixando nosso .htaccess da seguinte forma:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^(index\.php|css|envia_contato\.php|portfolio\-images|twitter\.php|index\.html)
RewriteRule ^\/?([A-Za-z0-9]+)?\/?$ /index.php?pagina=$1 [L]

Como podem ver, não é nada de outro mundo, apenas dizemos quais as palavras que serão ignoradas, ficando dessa forma acessíveis normalmente como se o rewrite não estivesse alí.

Espero que este post tenha esclarecido algumas dúvidas de vocês a respeito de urls amigáveis e mod_rewrite. Qualquer dúvida que tenha ficado pode ser perguntada nos comentários do post, sem problemas :D

Novos screencasts e podcasts chegando em breve!

[]’s

Postado em: 11/08/2008 @ 12:08 por Guilherme Rambo. Você pode comentar ou enviar um trackback para este post.
Apenas um comentário