<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>elBlëg - Interactividad, usabilidad y web &#187; ExtJS</title>
	<atom:link href="http://www.elbleg.com/category/web-dev/javascript/extjs/feed" rel="self" type="application/rss+xml" />
	<link>http://www.elbleg.com</link>
	<description>Interactividad, usabilidad y web</description>
	<lastBuildDate>Tue, 09 Mar 2010 04:23:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Creando una ventana de login con ExtJS</title>
		<link>http://www.elbleg.com/web-dev/javascript/extjs/creando-unaventana-de-login-con-extjs.html</link>
		<comments>http://www.elbleg.com/web-dev/javascript/extjs/creando-unaventana-de-login-con-extjs.html#comments</comments>
		<pubDate>Sun, 21 Jun 2009 07:37:22 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[login]]></category>

		<guid isPermaLink="false">http://www.elbleg.com/?p=137</guid>
		<description><![CDATA[Algunos de los que me conocen saben que me paso la mitad de mi tiempo peleando contra ExtJS… esa biblioteca es completamente imposible cuando se le mete el diablo. Otras veces, es increíblemente potente y sencilla de usar.


En este caso -aunque al final me quedé con una solución que hice en jQuery- muestra a grandes [...]]]></description>
			<content:encoded><![CDATA[<p>Algunos de los que me conocen saben que me paso la mitad de mi tiempo peleando contra ExtJS… esa biblioteca es completamente imposible cuando se le mete el diablo. Otras veces, es increíblemente potente y sencilla de usar.
</p>
<p>
En este caso -aunque al final me quedé con una solución que hice en jQuery- muestra a grandes rasgos lo potente y sencillo que puede ser ExtJS cuando le da la gana. <span id="more-137"></span>Para efectos del ejemplo, voy a basarme en la estructura de archivos que trae ExtJS por defecto, además de usar varios de los estilos disponibles que trae.
		</p>
<h3>
			Ya entrando en materia<br />
		</h3>
<p>
			Creamos un archivo html dentro del folder &#8220;examples&#8221; del ExtJS y en el <code>&lt;head&gt;</code> agregamos estos estilos:
		</p>
<pre name="code" class="xml">
        &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;../docs/resources/docs.css&quot;/&gt;
        &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;../resources/css/ext-all.css&quot; /&gt;
        &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;../resources/css/xtheme-gray.css&quot; /&gt;

    &lt;style&gt;
        #loading_mask{
        	width:100%;
        	height: 100%;
        	background: #c3daf9;
        	position :absolute;
        	z-index: 20000;
        	left: 0;
        	top: 0;
        }
        .loading-indicator img{
        	 width:16px;
        	height:16px;
        }
        &lt;/style&gt;
</pre>
<p>
			Ahora, siempre en el <code>&lt;head&gt;</code> del documento, agregamos los script básicos de la biblioteca:
		</p>
<pre name="code" class="xml">
  &lt;script src=&quot;../adapter/ext/ext-base.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;../ext-all-debug.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>
			Dentro del cuerpo agregamos algo como esto:
		</p>
<pre name="code" class="xml">
&lt;div id="loading-mask"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id="loading"&gt;
&lt;div class="loading-indicator"&gt;
	&lt;img src="../resources/images/default/grid/loading.gif" align="absmiddle"&gt;&amp;nbsp;Loading…
&lt;/div&gt;
</pre>
<p>
			Ya con eso listo, es cosa de poner unos cuantos boxes y windows de ExtJS para terminar el login:
		</p>
<pre name="code" class="js">
var loadMask = function(){

    return {

        init: function() {
            // Creamos el cargador
            var loading = Ext.get('loading');
            var mask = Ext.get('loading-mask');
            mask.setOpacity(0.8);
            mask.shift({
                xy: loading.getXY(),
                width: loading.getWidth(),
                height: loading.getHeight(),
                remove: true,
                duration: 1,
                opacity: 0.3,
                easing: 'bounceOut',
                callback: function(){
                    // Desvanece cuando la carga termina
                    loading.fadeOut({
                        duration: 0.2,
                        remove: true
                    });
                }
            });
        }};
}();

Ext.onReady(loadMask.init, loadMask, true);
Ext.onReady(function(){

        Ext.QuickTips.init();
        Ext.form.Field.prototype.msgTarget = 'side';
        // Usamos un FormPanel para crear la caja de Login

        var login = new Ext.FormPanel({
            labelWidth: 80,
            url: "autenticar.php",
            frame: true,
            title: 'Iniciar sesi&oacute;n',

            width: 230,
            padding: 10,
            defaultType: 'textfield',
            monitorValid: true,
            items: [{
                fieldLabel: 'Usuario',
                name: 'user',
                allowBlank: false
            },
            {
                fieldLabel: 'Contrase&ntilde;a',
                name: 'password',
                inputType: 'password',
                allowBlank: false
            }],
            buttons: [{
                text: 'Inicio',
                formBind: true,
                handler: function()
                {
                    login.getForm().submit({
                        method: 'POST',
                        waitTitle: 'Authenticando..',
                        waitMsg: 'Enviando datos...',

                        success: function()
                        {
                            var redirect = "http://google.com";
                            window.location = redirect;

                        },
                        failure: function(form, action)
                        // Pero si falla
                        {
                            if (action.failureType == 'server')
                            {
                                obj = Ext.util.JSON.decode(action.response.responseText);
                                Ext.Msg.alert('Intenta de nuevo!', obj.errors.reason);
                                // Le decimos al usuario que el logueo falló y le damos el motivo
                            }
                            else
                            {
                                Ext.Msg.alert('Ouch!', 'el servidor no contesta : ' + action.response.responseText);
                                // O bien si hubo algún error en el sistema
                            }
                            login.getForm().reset();
                        }
                    });
                }
            }]
        });
        // Usamos un Window para mostrar el Login en una ventanita

        var win = new Ext.Window(
            {
                layout: 'fit',
                width: 300,
                height: 150,
                closable: false,
                resizable: false,
                plain: true,
                items: [login] // y acá cargamos el panel con el login
            }
        );
        win.show();
    }
);
</pre>
<p>
Y listo, ya el login está listo, lo que queda es el response que te va a enviar backend cuando las credenciales sean correctas o no.</p>
<p>No voy a poner cómo generarlo, porque ya eso depende del lenguaje que estés usando en backend, voy a limitarme solamente a las respuestas que espera el javascript.
</p>
<p>
Éxito:</p>
<pre name="code" class="js">echo "{success: true}";</pre>
</p>
<p>
Fallo:</p>
<pre name="code" class="js">echo "{success: false, errors: { reason: 'Password error.' }}";</pre>
</p>
<p>Ahora sí, estamos listos. Espero que haya servido para despertar algo de curiosidad por ExtJS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/web-dev/javascript/extjs/creando-unaventana-de-login-con-extjs.html/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>
