JQuery UI – Dialog (bug ou feature?)

Fala galera da Dev,

Passei um apuro com o JQuery Dialog recentemente e resolvi compartilhar o problema (ou talvez feature mal documentada) com vocês.

Eu tinha um HTML da seguinte maneira (simplificado):

<html>
<body>
<form> <div id=’dialog’> … </div></form>
</body>
</html>

E precisava usar uma função de validação que checaria todos os inputs dentro da tag FORM. Com a minha marcação acima, tudo perfeito, certo? A div ESTÁ dentro do formulário, quando eu for validar, tudo que estiver na dialog também será validado, correto?

Errado.

Quando chamamos a dialog, o conteúdo é extraído do seu container original (no caso, do form).

Quer confirmar? Veja o seguinte:

<!doctype html>
<html lang="us">
<head>
	<meta charset="utf-8">
	<title>Testes</title>
	<link href="css/ui-lightness/jquery-ui-1.10.3.custom.css" rel="stylesheet">
	<script src="js/jquery-1.9.1.js"></script>
	<script src="js/jquery-ui-1.10.3.custom.js"></script>
	<script>

		var modal = null;

		$(function(){

			$("#btnModal").click(function(){

				modal = $("#modal").dialog({
					modal: true
				});

			});

		});

	</script>
	<style>
		body
		{
			font-family: sans-serif;
		}

		#container h2
		{
			color: #467;
			font-size: 55px;
		}
	</style>
</head>
<body>
	<div id="container">
		<div id="modal">
			GIMME FIRE <br />
			GIMME THAT WHICH I <br />
			<h2>DESIRE</h2>
		</div>
	</div>

	<input type="button" id='btnModal' value='GIMME FUEL' />

</body>
</html>

Visualização:

a1Visualização com o Firebug:

a2

Até ai, tudo lindo. Contemplem como tudo fica após a invocação da dialog:

a3

Notaram que o html sumiu e foi para a dialog? Inclusive o “DESIRE” perdeu a formatação. Pois é… Não foi só isso que aconteceu nos bastidores:

a4

Nossa div foi movida para fora do “container”, causando a perda da formatação.

Soluções

  • Faça com que a div contenha tudo que você precisa
  • Chore no bugtracker do JQuery UI

No meu problema, a solução foi simples. Bastou colocar o form dentro da dialog, para que o formulário fosse transportado junto com a dialog no momento do chamado:

<html>
<body>
<div id=’dialog’><form>  … </form></div>
</body>
</html>

Não é bonito, mas resolve!

Dúvidas? Sugestões? Deixem nos comentários!

Bug secreto na busca binária

“Busca binária é um algoritmo notoriamente difícil de programar corretamente. Somente dezessete anos depois da invenção do algoritmo a primeira versão correta do programa foi publicada!”

Fonte.

Começo com essa citação pois fiquei assustado ao tomar conhecimento dela. Dezessete anos, para a computação isso é muito tempo para algo ficar “funcionando errado”. Não imagino que as funções tivessem erros óbvios. Provavelmente funcionavam com uma quantidade N de números em Y condições, mas em algum momento (talvez raro) quebrassem.

Vai dar merda, capitão… Clique e leia mais!

Bugs e Erros: no final é engraçado…

…Mas sempre desagradável.

Será?

Será?

Estudando para a minha prova de C, percebi que os exercícios recmendados estavam sendo mais simples do que costumavam. Resolvi, por medo de que a prova fosse mais complexa, me aventurar mais adiante e mexer com leitura e escrita de arquivos. Se eu conseguisse me virar nessa parte, estaria pronto pra prova, em teoria.

q=c+files

Com ajuda do Google, a tarefa estava feita na mesma noite. Porém, com um bug que persistia desde a 3º aula de C: Espaços em branco. Se eu escrevia “Eu amo C”, só era copiado “Eu”.

Parti do princípio que havia errado o código de gravação. Talvez por colocar um if aguardando um NULL, o espaço em branco estivesse confundindo as coisas. Apesar de que espaço em branco não é null, mas tudo bem…

  • fwrite
  • putc
  • fputs

E nada funcionava. A esta altura já estava xingando as mães de Kenneth e Ritchie. Quando estava desistindo e deixando para falar com a professora, me lembrei das aulas e como o espaço em branco dava problemas com todos.

DOUP

Dei um printf (cadê você debug?? até hoje não achei!) na string que eu lia e estava provado: O scanf era o “culpado”. Juro que ouvi o scanf se defender:

Mas mas mas mas o culpado é você, programador imbecil!

Vira-se a página e lá vamos nós de novo

Morram, espaços em branco!

(na verdade eu queria que eles ‘vivessem’, mas é só pra ficar chamativo)

Achei a resposta no Viva o Linux. Foi necessário “pescar” nos comentários, mas está lá. Sintetizo abaixo a solução:

fflush(stdin);
scanf(“%[^\n]”,&suaVariavel);

Para alguns, basta o scanf com esses parâmetros, para mim foi necessário o fflush, que, “Serve para limpeza de buffer de teclado“. Esse link (do mesmo site!) explica com detalhes. Resumidamente, a função garante a integridade das informações vindas do teclado, pelo que entendi.

Em tempo: O scanf maluco ali possuí uma expressão regular. aparentemente não é o bastante usar o %s, deve-se dizer para o bendito: “LEIA TUDO ATÉ O [SEM NOÇÃO] USUÁRIO PARTIR PRA PRÓXIMA LINHA”.

Com essa manha, fiz o programinha funcionar. Alegria :) Pude dormir em paz.

…Mas com certeza você não veio aqui pra ver minha alegria, então vamos aos prints da desgraça!

Pequeno, porém grande

Pequeno, porém grande

Muitos detalhes, mas significa o seguinte: "Deu merda, velho."

Muitos detalhes, mas significa o seguinte: "Deu merda, velho."

Já que tirei poucas screens de erros durante a codificação, mando mais algumas de outros aplicativos e de um site mesmo:

Não fiz nenhum dos dois e continua funcionando.

Não fiz nenhum dos dois e continua funcionando.

(about:crash no Chrome) » Me lembra o "Sad Mac"

(about:crash no Chrome) » Me lembra o "Sad Mac"

Sql Injection safe? NOWAI

Sql Injection safe? NOWAI!

E no fim, todos nos deparamos com AQUELA outra tela.

relatorio

Mas é a vida né.

Até a próxima!