<?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>El Futirifoken &#187; prototype</title>
	<atom:link href="http://www.gazer.com.ar/tag/prototype/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gazer.com.ar</link>
	<description>El arte de no decir nada ;-)</description>
	<lastBuildDate>Mon, 26 Dec 2011 19:56:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Edit In Place con Prototype</title>
		<link>http://www.gazer.com.ar/2009/01/21/edit-in-place-con-prototype/</link>
		<comments>http://www.gazer.com.ar/2009/01/21/edit-in-place-con-prototype/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 13:25:57 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[falta uno]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/?p=1001</guid>
		<description><![CDATA[Una de las cosas que me venían pidiendo en ¡Falta Uno! era que se le pudieran asignar nombre a los equipos de un partido. En un principio pensé solo en poner los campos en el formulario de &#8220;crear partido&#8221; pero después me pareció que quedaba piola que se puedan editar directamente desde el resumen, usando [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las cosas que me venían pidiendo en <a href="http://www.falta-uno.com.ar/">¡Falta Uno!</a> era que se le pudieran asignar nombre a los equipos de un partido. En un principio pensé solo en poner los campos en el formulario de &#8220;crear partido&#8221; pero después me pareció que quedaba piola que se puedan editar directamente desde el resumen, usando un &#8220;Edit in place&#8221;. Me puse a buscar si había algo hecho con Proptotype (que es lo que uso en este proyecto) y encontré <a href="http://editinplace.org/">esto</a> que viene con varios <a href="http://release.editinplace.org/latest/example.html">ejemplos</a>.</p>
<p>La biblioteca es muy fácil de usar y bastante flexible en cómo queremos que se comporte el edit (puede ser un input, un textarea, un combo). Suponiendo que los nombres de equipos estén siendo mostrados de la siguiente manera :</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;h2 id=&quot;team_name_1&quot;&gt;&lt;%= h(@match.team[0].name) %&gt;&lt;/h2&gt;
&nbsp;
&lt;!-- skip --&gt;
&nbsp;
&lt;h2 id=&quot;team_name_2&quot;&gt;&lt;%= h(@match.team[1].name) %&gt;&lt;/h2&gt;</pre></div></div>

<p>Para poder editar los títulos simplemente basta con ejecutar el siguiente código cuando se carga la página :</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'team_name_1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">editInPlace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
  auto_adjust<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
  select_text<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
  save_url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'&lt;%= changename_match_path(@match, :team =&gt; 1) %&gt;'</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'team_name_2'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">editInPlace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
  auto_adjust<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
  select_text<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
  save_url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'&lt;%= changename_match_path(@match, :team =&gt; 2) %&gt;'</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Es recomendable poner este código dentro de un método y usar un Observer para ejecutarlo, así mantenemos separada la lógica JS del HTML. Bastaría con un simple <code>Event.observe(window, 'load', initEIP);</code>.</p>
<p>Por el lado del servidor, el método que atiende el request (el definido el save_url) tiene que devolver el nuevo valor que va a tomar el campo. Por ejemplo, si el nombre no se pudo cambiar, deberíamos devolver el anterior. En este caso que es simple el template a devolver es el siguiente :</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;%= h(@team.name) %&gt;</pre></div></div>

<p>Para terminar, en caso de que el navegador del usuario no tenga JS queda el formulario de &#8220;Editar/Crear Partido&#8221; donde se pueden poner los nombres de manera tradicional.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2009/01/21/edit-in-place-con-prototype/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Multiupload de imágenes con Prototype</title>
		<link>http://www.gazer.com.ar/2008/08/26/multiupload-de-imagenes-con-prototype/</link>
		<comments>http://www.gazer.com.ar/2008/08/26/multiupload-de-imagenes-con-prototype/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 00:02:01 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/?p=283</guid>
		<description><![CDATA[Desde hace unos días que estoy haciendo un widget que soporte upload de múltiples archivos para una aplicación web. No fue fácil el comienzo pero despues de varias horas (unas 8 hasta este momento) ya va tomando forma. Para poder trackear el upload de cada archivo utilizo apache_mod_upload_progress, un genio &#8220;Drogomir&#8221; . Para compilarlo en [...]]]></description>
			<content:encoded><![CDATA[<p>Desde hace unos días que estoy haciendo un widget que soporte upload de múltiples archivos para una aplicación web. No fue fácil el comienzo pero despues de varias horas (unas 8 hasta este momento) ya va tomando forma.</p>
<p>Para poder trackear el upload de cada archivo utilizo <a href="http://drogomir.com/blog/2008/6/18/upload-progress-bar-with-mod_passenger-and-apache">apache_mod_upload_progress</a>, un genio &#8220;Drogomir&#8221; <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Para compilarlo en OSX tuve algunos problemas ya que apache2 esta compilado en x86_64 y el default del apsx es x86 pero googleando se encuentra fácil como pasarle el parámetro al gcc. Lo otro que necesitamos tener instalado es mod_rails y apache 2.2. Cuando termine el código y lo publique estará todo explicado en detalle <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>El segundo problema grande fue el formulario. Para hacer el upload lo que hago es crear un iframe oculto y cambiar el target del formulario a ese frame (de esta menera si no tenemos javascript la aplicación degrada automáticamente al upload de imagenes individuales y el usuario no se entera), pero claro, necesitaba tener múltiples input:file, uno por cada archivo a subir. De ponerlos todos juntos tendríamos un POST super gigante que no era lo que se buscaba ya que no podría trackear cada upload por separado.</p>
<p>La solución fue, cada vez que se selecciona un archivo sacar el INPUT del form y guardarlo en un array. El espacio vacío se reemplaza con un nuevo INPUT y como todo es tán rápido, uno no se da cuenta. El problema llegó cuando terminaba el primer archivo, tenía que volver a agregar el siguiente file al formulario y hacer otra vez el submit. Pero si uno llama $(form).submit() desde javascript, el callback onSubmit no es ejecutado (defecto de las implementaciones de todos los navegadores que probé y parece que no va a cambiar) por lo que no era útil.</p>
<p>La solución finalmente fue simular el click enel botón enviar con un simple $(submit_button).click() que resuelve el problema anterior. Les dejo el video para que lo disfruten <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p style="text-align: center;">
<p><a href="http://www.youtube.com/watch?v=7PqZg_1Pi1w">http://www.youtube.com/watch?v=7PqZg_1Pi1w</a></p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2008/08/26/multiupload-de-imagenes-con-prototype/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

